Conversation
test(harness): specify sidebar session attention feat(chat): add persisted session attention state feat(gateway): synchronize sidebar session status fix(gateway): preserve session catalog recovery fix(gateway): close session recovery races feat(ui): show sidebar session attention test(chat): cover sidebar session attention test(chat): distinguish session visibility transitions test(gateway): isolate session event reload assertion fix(gateway): harden session catalog integration fix(gateway): align failed session recovery fix(chat): preserve delete recreate ordering fix(chat): isolate recreated label hydration test(harness): cover label hydration regressions # Conflicts: # README.ja-JP.md # README.md # README.zh-CN.md # harness/reference/chat-workspace-and-navigation.md # harness/specs/scenarios/chat-workspace-and-navigation.md # src/components/layout/Sidebar.tsx
docs(harness): specify attachment open-with flow docs(harness): tighten attachment open-with safety feat: add attachment open-with platform service fix: harden attachment open-with service test: require Windows default open handler feat: expose secure attachment open-with actions feat(chat): add attachment open-with menu fix(chat): bind open handlers to attachment ref test(e2e): cover attachment open-with menu docs: describe attachment open-with behavior test(e2e): wait for typed file tree invocation fix: open with app icons # Conflicts: # tests/e2e/fixtures/electron.ts
docs: clarify web browser navigation policy docs: define web browser proxy behavior docs: add web browser implementation plan test: define web browser harness contract feat: add web browser host contract feat: harden web browser guest contents feat: configure web browser session policy feat: register web browser host service fix: gate browser activation on initialization test: verify both browser clear operations await feat: add web browser artifact tab feat: add web browser navigation controls feat: keep web browser guest alive globally fix: harden web browser async lifecycle fix: keep aborted browser navigation silent fix: handle aborted browser navigation in Main fix: isolate overlapping browser address submissions test: cover web browser navigation test: harden browser navigation assertions test: cover web browser lifecycle test: harden browser lifecycle assertions test: cover web browser session policy test: harden web browser policy coverage docs: document web browser behavior # Conflicts: # harness/reference/chat-workspace-and-navigation.md # harness/specs/scenarios/chat-workspace-and-navigation.md # Conflicts: # harness/reference/chat-workspace-and-navigation.md # harness/specs/rules/ui-i18n-design-tokens.md # harness/specs/scenarios/chat-workspace-and-navigation.md # harness/specs/scenarios/gateway-backend-communication.md # tests/unit/harness-specs.test.ts
refactor: html preview UI
docs: refine PPTX viewer lifecycle test: define Office preview harness contract feat: classify DOCX and PPTX previews feat: add isolated DOCX preview viewer fix: harden DOCX preview lifecycle fix: invalidate stale DOCX renders on commit feat: add single-instance PPTX preview viewer fix: serialize PPTX renders across lifetimes feat: integrate Office previews into artifact panel test: cover Office document previews end to end test: verify PPTX backing resize docs: document Office preview support fix: harden Office preview lifecycles fix: terminate superseded PPTX render failures
# Conflicts: # harness/specs/scenarios/chat-workspace-and-navigation.md
# Conflicts: # README.ja-JP.md # README.md # README.zh-CN.md # harness/reference/chat-workspace-and-navigation.md # harness/specs/rules/session-workspace-authority.md # harness/specs/scenarios/chat-workspace-and-navigation.md # src/components/layout/Sidebar.tsx # src/stores/chat.ts
# Conflicts: # harness/reference/acp-attachment-access-control.md # harness/specs/rules/ui-i18n-design-tokens.md # harness/specs/scenarios/acp-chat-experience.md # harness/specs/scenarios/acp-file-activity.md
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5644312e5f
ℹ️ 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".
| const cancelEditing = () => { | ||
| setEditing(false); | ||
| }; |
There was a problem hiding this comment.
Invalidate pending address submissions on cancel
When a URL submission is still pending, the blur/Escape path calls this cancellation helper without changing latestSubmissionRef. If the user clicks away or starts a new draft before the previous onNavigate promise settles, that older promise can still pass the latest-submission check and close/refocus the newer edit state, so rejected loads may no longer remain editable and stale navigations can clobber the active draft. Incrementing/canceling the submission token when leaving edit mode avoids that race.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a45c3e3066
ℹ️ 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".
| && params.allowpopups === true | ||
| && params.preload === ''; |
There was a problem hiding this comment.
Accept the real webview attachment parameters
When the browser tab mounts its <webview>, Electron passes will-attach-webview params as attribute strings (and omitted attributes are not guaranteed to appear), while the renderer sets allowpopups="" and no preload attribute. This exact check rejects the only intended browser webview before it can attach, so opening the new web browser tab leaves no registered guest and all toolbar/address navigations fail with “guest is unavailable”.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 916cb3d255
ℹ️ 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".
| const recoveryUrl = pendingRecoveryUrlRef.current; | ||
| pendingRecoveryUrlRef.current = null; | ||
| if (!recoveryUrl) return; | ||
| void runNavigation(recoveryUrl, false); |
There was a problem hiding this comment.
Preserve requested crash-recovery navigation
If a new browser navigation is requested while the webview is on the crash screen, recovery still stores the stale lastAllowedUrl; when the replacement attaches, consumeRequestedNavigation() runs first and then this recovery load immediately navigates back to the old crashed URL. This affects flows like choosing “open in built-in browser” from a file card after a webview crash and then pressing Recover, where the explicit file URL is overwritten instead of being loaded.
Useful? React with 👍 / 👎.
Summary
ACPRelated Issue(s)
N/A
Type of Change
Validation
Checklist