refactor: standardize conversation engine protocol - #348
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4224e6a69b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| role: message.info.role, | ||
| ...(typeof created === "number" || typeof completed === "number" | ||
| ? { metadata: { opencode: { | ||
| ? { metadata: { ipollowork: { |
There was a problem hiding this comment.
Preserve the metadata key read by message timing UI
When a snapshot message has time.created or time.completed, this writes those values under metadata.ipollowork, but getMessageCreated and getMessageCompleted still exclusively read metadata.opencode in apps/app/src/components/chat/utils.ts:115-123. Consequently mapped conversation messages lose their visible timestamps and assistant process durations; update the consumer alongside this namespace migration or retain the existing key.
Useful? React with 👍 / 👎.
What changed
UIMessage/UIMessageChunkplus typed control events for session state, errors, compaction, todos, permissions, questions, message updates, part updates, and streaming chunks.Why
The UI and session synchronization layer was directly coupled to OpenCode types and event shapes. This change creates one narrow engine boundary without adding a second UI data flow or changing the current default engine.
Impact
Validation
pnpm --filter @ipollowork/app typecheck— passed.pnpm --filter @ipollowork/app build— passed.git diff --check— passed with no errors.HyperFrames Video Studio > keeps desktop panel titlebars draggable without swallowing control inputassertion; it reproduces unchanged on currentorigin/mainand is unrelated to this PR.No new runtime dependency, route, table, persistent state, generated artifact, or credential is included.