Skip to content

feat(nyxid-chat): project pending input, approval, and conversation attention #3131

Description

@eanz17

Context

Upstream implementation for nyxid-chat#6 and milestone M1 · Chat 执行闭环. Extend the existing canonical /api/chat and /api/chat/conversations/** actor/projection path; do not add a second Chat API.

Scope

  • Add actor-owned pendingInput with requestId / turnId / taskId / stepId / prompt / options / askedAt.
  • Emit committed nyxid.input.request and nyxid.input.changed frames.
  • Add typed input.resolve with stable clientRequestId and expectedStateVersion.
  • Enrich pending approval safe presentation with action, target, actor label, reversibility, expiry, grant boundary and optional NyxID request identity.
  • Add actor/readmodel-authored conversation attention summaries: taskStatus / attentionKind / attentionSince / activeStepSummary / stateVersion.
  • Preserve existing effect evidence and actor-computed available actions.
  • Check in versioned live-frame, current-state and conversation-summary fixtures that converge.

Architecture

  • Conversation actor committed state is the sole task/input/approval authority.
  • Current-state and conversation summaries are projection-pipeline readmodels, not query-time replay or browser inference.
  • Commands carry exact identity and expected actor version; first committed decision wins and duplicates are idempotent.
  • HTTP acceptance is transport-only; business completion is observed from committed actor/current-state facts.

Acceptance

  • Live and current-state fixtures converge on identical pending facts.
  • Input/approval survive passivation, reload, stream loss and exact duplicate commands.
  • Stale versions reject without advancing state.
  • Conversation attention comes from committed actor/readmodel truth.
  • Focused Aevatar.AI/Studio tests and projection state-version guards pass.
  • Production endpoint and fixture evidence are linked back to nyxid-chat#6.

Non-scope

No browser heuristics, generic actor request/reply, second workflow engine, credential/grant authority, query-time replay, or global Activity aggregate.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions