Repository navigation
feat(serve): scope extensions to workspace runtimes #11086
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from 19 commits
Commits
Show all changes
56 commits
Select commit
Hold shift + click to select a range
f931162
feat(serve): scope extensions to workspace runtimes
f65c0e8
test(serve): cover extension runtime capabilities
9493fa6
Merge remote-tracking branch 'origin/main' into codex/daemon-workspac…
fbec518
fix(serve): address round-1 review findings on Extension runtime read…
qwen-code-ci-bot e77c512
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
wenshao d431d17
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot e9c084c
test(cli): wait out the serve bootstrap window in the capabilities en…
qwen-code-dev-bot 9fed1f0
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot 0e3dbea
fix(serve): address extension runtime review findings
ac63bb4
Merge remote-tracking branch 'origin/main' into codex/daemon-workspac…
26ed5a5
fix(web-shell): keep split Extension runtime loaders off untrusted wo…
9ae66ef
Merge remote-tracking branch 'origin/main' into codex/daemon-workspac…
qwen-code-ci-bot c7030d9
fix(serve): address round-4 extension runtime review findings (#11086)
qwen-code-ci-bot 403b254
Merge remote-tracking branch 'origin/main' into codex/daemon-workspac…
qwen-code-ci-bot dedac49
fix(web-shell): annotate composer action merge as AtMentionWorkspaceA…
qwen-code-ci-bot f1a4858
fix(serve): address round-5 extension runtime review findings (#11086)
qwen-code-ci-bot aae6c06
fix(web-shell): cancel MessageList scroll-settle timer on unmount (#1…
qwen-code-ci-bot 93a7ae7
fix(web-shell): surface extension runtime readiness errors
e96a0ed
fix(serve): close extension readiness gaps
882a153
fix(web-shell): merge main, keeping upstream locate scroll timer
qwen-code-dev-bot 69604a9
fix(serve): address round-6 extension runtime findings and merge main…
qwen-code-ci-bot b97231b
Merge remote-tracking branch 'origin/main' into codex/daemon-workspac…
qwen-code-ci-bot ca96071
fix(web-shell): address round-7 extension runtime findings (#11086)
qwen-code-ci-bot 80d2ab8
test(web-shell): repair render indicator in split-session rerender te…
qwen-code-ci-bot 1937afd
chore(web-shell): merge main into #11086, keep strengthened split-rer…
qwen-code-dev-bot 6296997
fix(serve): address extension reconciliation and notice review
8fd4108
Merge remote-tracking branch 'origin/main' into codex/daemon-workspac…
29ea351
fix(serve): preserve cold-runtime extension install success
75f6b12
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot 35bf4f6
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot c031c91
fix(serve): Preserve extension reconciliation and operation lifecycle…
c80017e
Merge origin/main into codex/daemon-workspace-runtime-extensions-main
abb6fef
fix(extensions): Allow slow reconciliation and show unknown activation
641804c
fix(extensions): detect reused store generations and harden recovery …
0774d33
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot c246135
Merge remote-tracking branch 'origin/main' into codex/daemon-workspac…
qwen-code-ci-bot faefc6c
fix(extensions): hash receipts, scope update supersession, flag drain…
qwen-code-ci-bot 26aafd9
fix(extensions): track recovered store identity during reconciliation
4e35093
Merge remote-tracking branch 'origin/main' into codex/daemon-workspac…
5fc7d91
fix(extensions): normalize source-addressed update operations
44983f7
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
ytahdn 8c027e5
fix(extensions): address round-15 extension runtime review findings (…
qwen-code-ci-bot 878b891
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot 4913ac9
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot 167621f
Merge remote-tracking branch 'origin/main' into codex/daemon-workspac…
qwen-code-dev-bot 357979f
fix(cli): close review-round reconciliation and interaction gaps (#11…
qwen-code-dev-bot 22da331
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot 3e48daa
fix(cli): keep a late install sweep from cancelling newer parked oper…
qwen-code-dev-bot 8285097
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
wenshao 8e4e3c8
fix(cli): re-check extension readiness in-queue and order the install…
qwen-code-dev-bot 4c1733f
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot 0d75dee
Merge remote-tracking branch 'origin/main' into pr-11086-takeover
wenshao ef6b267
test(serve): pin extension interaction re-entry and fix activationSou…
wenshao b231153
fix(cli): close extension-generation certification gaps on ensure and…
qwen-code-dev-bot e756254
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot bd6077c
Merge branch 'main' into codex/daemon-workspace-runtime-extensions-main
qwen-code-dev-bot File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| # Daemon Workspace Runtime Extensions | ||
|
|
||
| ## Goal | ||
|
|
||
| Move Extension management onto workspace-owned runtimes without requiring a | ||
| chat session. Keep the existing Extension Store as the durable global owner and | ||
| use the selected runtime only for the live catalog and reconciliation. | ||
|
|
||
| ## Ownership | ||
|
|
||
| - `GET /extensions` remains the daemon-local global artifact catalog. | ||
| - `GET /workspaces/:workspace/extensions` remains the durable activation | ||
| projection for one workspace. | ||
| - `GET /workspaces/:workspace/runtime/extensions` returns the selected live | ||
| runtime catalog and its runtime epoch. | ||
| - `WorkspaceRuntimeCoordinator` owns desired/applied Extension generation, | ||
| capability readiness, runtime refresh, and stale-result rejection. | ||
| - Global mutations invalidate every managed runtime. Workspace activation and | ||
| resource-state mutations invalidate only the selected runtime. | ||
|
|
||
| The coordinator is the only writable owner of runtime Extension readiness. | ||
| The route controller continues to own operation history and durable mutation | ||
| sequencing, but reports committed generations to each affected coordinator. | ||
|
|
||
| ## Reconciliation | ||
|
|
||
| An Extension commit is successful once the Extension Store commit succeeds. | ||
| For each affected trusted live runtime, the coordinator refreshes the bootstrap | ||
| configuration, discovery configuration, and active sessions, then reads the | ||
| live Extension catalog. It marks the capability ready only when the response | ||
| comes from the current runtime epoch and the applied generation equals the | ||
| latest desired generation. Cold runtimes remain deferred and converge on the | ||
| next `ensureRuntime()`. | ||
|
|
||
| Extension invalidation also invalidates the selected runtime's Skills and MCP | ||
| capabilities because both catalogs include Extension contributions. A late | ||
| refresh or catalog response from a replaced runtime cannot advance readiness. | ||
|
|
||
| ## API and SDK | ||
|
|
||
| Runtime status adds an `extensions` capability with `state`, `revision`, | ||
| `runtimeEpoch`, `desiredGeneration`, and `appliedGeneration`. Extension runtime | ||
| catalog responses add `runtimeEpoch`. | ||
|
|
||
| `WorkspaceDaemonClient` exposes the runtime catalog. Global install, update, | ||
| uninstall, update-check, and default activation remain on `DaemonClient`; | ||
| workspace activation, Extension Skill state, projection reads, and runtime | ||
| catalog reads remain on `WorkspaceDaemonClient`. | ||
|
|
||
| Source installs use the V2 global route. Archive uploads remain on the legacy | ||
| workspace route until a V2 archive endpoint exists, so they retain the legacy | ||
| default-activation behavior. | ||
|
|
||
| ## Web Shell | ||
|
|
||
| When the daemon advertises `workspace_extensions_config_runtime`, the | ||
| Extensions page: | ||
|
|
||
| 1. loads the global catalog and selected workspace projection without starting | ||
| ACP; | ||
| 2. calls the shared parameterless runtime ensure; | ||
| 3. merges live details and `isActive` only when capability and catalog epochs | ||
| match the current runtime and applied generation equals desired generation; | ||
| 4. shows the workspace selector on the list page and the disabled selector in | ||
| detail view. | ||
|
|
||
| Older daemons keep the existing primary-workspace flow. | ||
|
|
||
| When the daemon also advertises `workspace_extension_mentions`, the composer | ||
| uses the selected workspace runtime for both the `+` and `@` Extension menus. | ||
| Without that feature, it keeps the legacy primary-workspace loader. | ||
|
|
||
| ## Downstream consumers | ||
|
|
||
| - runtime status and workspace management routes; | ||
| - Extension V2 operation reconciliation and external-generation polling; | ||
| - Skills and MCP capability invalidation; | ||
| - TypeScript daemon SDK; | ||
| - Web Shell Plugin manager and Extensions manager. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.