Skip to content

feat: support queued scheduled messages with draft preservation and workspace recovery - #51

Merged
MusicMaster4 merged 8 commits into
mainfrom
testing
Oct 21, 2026
Merged

MusicMaster4 merged 8 commits into
mainfrom
testing

Conversation

@MusicMaster4

Copy link
Copy Markdown
Owner

Summary

  • feat: support queued scheduled messages with draft preservation and workspace recovery
  • feat: render codex file citations as safe document links with intact paths and filenames
  • fix: align prompt panel test with paired phone sharing
  • feat: sync searchable prompt templates to the Android companion for offline access
  • feat: refresh live agent model catalogs and resolve newly released models
  • fix: suppress resume notices during automatic session recovery
  • fix: prevent Codex proxy pipe deadlocks during WebSocket frame handling
  • feat: update
  • perf: optimize agent projections, mobile
  • feat: synchronize Codex transport preferences and fall back to HTTP for oversized WebSocket histories
  • fix: preserve shared codex work across proxy disconnects and reconnect automatically
  • feat: render agent markdown assets and safely open local document links
  • feat: add a
  • feat: update
  • fix: minimize state index size for a full relay database
  • fix: preserve multiline SQL as a single Wrangler argument
  • fix: execute relay cleanup through direct D1 queries
  • fix: reclaim expired relay deliveries before schema updates
  • feat: unify mobile agent experience and accelerate sync
  • feat: update

@MusicMaster4

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-20T00:44:21.669526Z 86a5e9d Manual request
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 86a5e9dda6

ℹ️ 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".

Comment thread src/App.tsx
cancelTimedSend(command.terminalId);
if (timed) scheduleTimedSend(command.terminalId, { at: command.scheduledAt! });
if (!timed) cancelTimedSend(command.terminalId);
if (timed) scheduleTimedSend(command.terminalId, { at: command.scheduledAt!, text: command.text ?? "", images: command.images });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve the existing draft for phone-scheduled messages

When a phone schedules a timed message while the desktop agent composer already contains an unsent draft, the preceding setDraft/setDraftImages calls replace that draft with the scheduled payload, and this new independent-message path then sends with preserveDraft. The original draft is therefore lost after a pane remount or restart, while the scheduled text remains as the recovered draft. Only completion-triggered schedules should populate the live draft; timed messages should be stored solely in timedMessages.

Useful? React with 👍 / 👎.

Comment on lines +1326 to +1327
if bytes + size > 200_000 {
chunks.push(Vec::new());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Drain every page of a multipart prompt transfer

For a valid large library this loop can create far more than eight parts, including the 200-part case covered by the new Rust test. The relay's inline endpoint returns only eight payloads and sets hasMore, but Android's RelayClient.pendingMessages ignores that flag and fetches only one batch per recovery pass; because all part notifications also share one FCM collapse key, a complete library can take dozens of three-second foreground polling cycles to commit even though every part is already stored. The receiver should immediately drain hasMore batches, or the transfer must be bounded to what one recovery request can retrieve.

Useful? React with 👍 / 👎.

@MusicMaster4
MusicMaster4 merged commit 71296c3 into main Oct 21, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant