qwen-code/packages/web-shell/client/utils
易良 52e0d1b364
feat(web-shell): bind plan approval to its Todo revision (#8393)
* feat(web-shell): gate session workflow behind experimental setting

* feat(web-shell): bind plan approval to todo revision

* fix(cli): clear stale workflow revision on plan entry

* test(web-shell): pin revised workflow snapshot

* fix(cli): clear stale plan revisions on restore

* fix(cli): keep replayed history from rebinding plan revisions

History replay re-sends stale plan updates through Session.sendUpdate,
re-stamping activeTodoPlanRevision from finished plan cycles. Clear the
revision after every replay path (cold replayHistory and live non-bulk
loadSession) so a replayed snapshot can never bind a later exit_plan_mode
approval; reloaded sessions fall back to text-only approval until the next
live todo_write re-establishes the binding. Also drop the bulk-load restore
that could never be read before a plan-mode transition cleared it, and pin
the workflow gates and mode-entry clears with negative tests.

* test(web-shell): pin older plan revision in ChatPane approval test (#8393)

* test(cli): pin unbindable plan updates in approval revision test (#8393)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(cli): clear Todo plan revision on history restore (#8393)

restoreHistory was the one history-resetting path that kept
activeTodoPlanRevision, so a restored snapshot could let a stale
revision bind the next exit_plan_mode approval. Clear it like the
sibling reset paths, pin the behavior with a test, and pin the
live-load clear ordering after the replayed updates.

* fix(cli): restore Todo stop guard clear on plan re-select (#8393)

The previous-mode guard added for the revision binding also skipped the
Todo Stop Guard trust clear on a redundant plan re-select; scope the
guard to the revision reset so every transition into plan clears the
stop guard as before. The replay-time revision clears now run in
finally blocks so a transport failure part-way through a replay cannot
leave a replayed binding on the live session, and the web-shell
exit-plan approval rule is unified in one predicate. Revision tests
assert through the observable qwenTodoApproval approval metadata
instead of the private field.

---------

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Co-authored-by: qwen-code-dev-bot <qwen-code-dev@service.alibaba.com>
2026-08-04 14:25:50 +00:00
..
ansi.test.ts fix(web-shell): parse 256-color and truecolor SGR sequences in parseAnsi (#7620) 2026-07-26 02:25:20 +00:00
ansi.ts fix(web-shell): parse 256-color and truecolor SGR sequences in parseAnsi (#7620) 2026-07-26 02:25:20 +00:00
askUserPermission.test.ts feat(tui): Ctrl+O frozen transcript view and unified tool output rendering (#5666) 2026-07-09 23:40:29 +00:00
askUserPermission.ts feat(web-shell): add Session Overview panel and in-window split view (#6400) 2026-07-07 02:44:18 +00:00
commandDisplay.ts feat(daemon): merge daemon-mode feature batch into main (#4490) 2026-06-12 00:34:49 +08:00
composerInputState.test.ts fix(web-shell): optionally restart SSE after prompt admission (#7080) 2026-07-17 16:13:39 +00:00
composerInputState.ts fix(web-shell): optionally restart SSE after prompt admission (#7080) 2026-07-17 16:13:39 +00:00
composerModels.ts feat(web-shell): restore the full composer in split-view panes (#6510) 2026-07-08 07:01:36 +00:00
composerTag.test.ts fix(web-shell): restore context tags in queued and recalled prompts (#7312) 2026-07-21 12:59:29 +00:00
composerTag.ts fix(web-shell): restore context tags in queued and recalled prompts (#7312) 2026-07-21 12:59:29 +00:00
composerTasks.test.ts fix(web-shell): sync background agent status (#7561) 2026-07-23 06:35:04 +00:00
composerTasks.ts fix(web-shell): sync background agent status (#7561) 2026-07-23 06:35:04 +00:00
copyCommand.test.ts fix(web-shell): make /copy with a bare index work (#7789) 2026-07-28 05:35:58 +00:00
copyCommand.ts fix(web-shell): make /copy with a bare index work (#7789) 2026-07-28 05:35:58 +00:00
cssUrlVar.test.ts feat(web-shell): support icon chips for mention tags (#6337) 2026-07-05 13:25:32 +00:00
cssUrlVar.ts feat(web-shell): support icon chips for mention tags (#6337) 2026-07-05 13:25:32 +00:00
dialogLabels.ts refactor(web-shell): restructure chat UI (#5775) 2026-06-23 22:43:19 +08:00
dom.ts feat(daemon): merge daemon-mode feature batch into main (#4490) 2026-06-12 00:34:49 +08:00
errorDetail.ts feat(serve): add workspace MCP management (#6954) 2026-07-16 02:24:07 +00:00
escapeIntent.test.ts feat(web-shell): friendlier Esc interruption + queued-prompt UX (#6025) 2026-06-30 01:27:16 +00:00
escapeIntent.ts feat(web-shell): friendlier Esc interruption + queued-prompt UX (#6025) 2026-06-30 01:27:16 +00:00
formatRelativeTime.ts feat(daemon): merge daemon-mode feature batch into main (#4490) 2026-06-12 00:34:49 +08:00
formatRuntime.ts feat(daemon): merge daemon-mode feature batch into main (#4490) 2026-06-12 00:34:49 +08:00
formatTokenCount.ts feat(web-shell): add token-usage analytics dashboard to Daemon Status (#6388) 2026-07-06 13:43:41 +00:00
goalCondition.test.ts feat(web-shell): add a workspace Goals page, and stop losing /goal on daemon resume (#6561) 2026-07-18 08:52:07 +00:00
goalCondition.ts feat(web-shell): add a workspace Goals page, and stop losing /goal on daemon resume (#6561) 2026-07-18 08:52:07 +00:00
localCommandQueue.test.ts feat(web-shell): queue prompts while turns are running (#6005) 2026-06-30 14:51:28 +00:00
localCommandQueue.ts feat(web-shell): queue prompts while turns are running (#6005) 2026-06-30 14:51:28 +00:00
modelDisplay.ts feat(web-shell): polish chat UI (#5893) 2026-06-26 15:38:23 +00:00
modelEncoding.test.ts fix(web-shell): encode vision model picker selection & polish dispatch (#6236) 2026-07-03 13:51:47 +00:00
modelEncoding.ts fix(web-shell): encode vision model picker selection & polish dispatch (#6236) 2026-07-03 13:51:47 +00:00
modelSwitchMessages.test.ts feat(web-shell): polish chat UI (#5893) 2026-06-26 15:38:23 +00:00
modelSwitchMessages.ts feat(web-shell): polish chat UI (#5893) 2026-06-26 15:38:23 +00:00
monitorTasks.test.ts feat(web-shell): add monitor task details (#7817) 2026-07-27 12:30:17 +00:00
monitorTasks.ts feat(web-shell): add monitor task details (#7817) 2026-07-27 12:30:17 +00:00
queueDrain.test.ts feat(web-shell): friendlier Esc interruption + queued-prompt UX (#6025) 2026-06-30 01:27:16 +00:00
queueDrain.ts feat(web-shell): friendlier Esc interruption + queued-prompt UX (#6025) 2026-06-30 01:27:16 +00:00
sentinelMessage.ts feat(daemon): merge daemon-mode feature batch into main (#4490) 2026-06-12 00:34:49 +08:00
sessionErrors.test.ts feat(web-shell): add contextual task panels (#7929) 2026-07-30 13:45:30 +00:00
sessionErrors.ts feat(web-shell): add contextual task panels (#7929) 2026-07-30 13:45:30 +00:00
sessionPath.test.ts fix(web-shell): preserve token and base path in session URLs (#7926) 2026-07-29 06:12:37 +00:00
sessionPath.ts fix(web-shell): preserve token and base path in session URLs (#7926) 2026-07-29 06:12:37 +00:00
sessionPreparation.test.ts feat(web-shell): add git mode selector for new session creation (#7471) 2026-07-24 03:48:43 +00:00
sessionPreparation.ts feat(web-shell): add git mode selector for new session creation (#7471) 2026-07-24 03:48:43 +00:00
slash-command-action.ts feat(web-shell): support custom slash command actions (#7267) 2026-07-20 11:23:55 +00:00
slashSectionPlan.test.ts feat(web-shell): improve slash command discovery (taller menu, group counts, fuzzy search) (#6267) 2026-07-03 14:56:06 +00:00
slashSectionPlan.ts feat(web-shell): improve slash command discovery (taller menu, group counts, fuzzy search) (#6267) 2026-07-03 14:56:06 +00:00
splitUrl.test.ts fix(web-shell): preserve token and base path in session URLs (#7926) 2026-07-29 06:12:37 +00:00
splitUrl.ts fix(web-shell): preserve token and base path in session URLs (#7926) 2026-07-29 06:12:37 +00:00
systemInfo.ts feat(daemon): merge daemon-mode feature batch into main (#4490) 2026-06-12 00:34:49 +08:00
timeAgo.test.ts feat(web-shell): add read-only GitHub pull requests panel (#7683) 2026-07-25 02:44:50 +00:00
timeAgo.ts feat(web-shell): add read-only GitHub pull requests panel (#7683) 2026-07-25 02:44:50 +00:00
todos.test.ts feat(web-shell): bind plan approval to its Todo revision (#8393) 2026-08-04 14:25:50 +00:00
todos.ts feat(web-shell): bind plan approval to its Todo revision (#8393) 2026-08-04 14:25:50 +00:00
workspace.test.ts feat: support workspace display names (#7179) 2026-07-20 15:16:44 +00:00
workspace.ts feat: support workspace display names (#7179) 2026-07-20 15:16:44 +00:00
workspaceColor.test.ts feat(web-shell): color-code each split pane by workspace (#6971) 2026-07-16 02:38:58 +00:00
workspaceColor.ts feat(web-shell): color-code each split pane by workspace (#6971) 2026-07-16 02:38:58 +00:00