@moretea-labs/forge 1.8.0 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (695) hide show
  1. package/AGENTS.md +73 -7
  2. package/CHANGELOG.md +34 -0
  3. package/CLAUDE.md +17 -2
  4. package/CONTRIBUTING.md +3 -2
  5. package/README.en.md +24 -3
  6. package/README.md +10 -6
  7. package/README.zh-CN.md +5 -3
  8. package/THIRD_PARTY_NOTICES.md +1 -2
  9. package/adapters/chatgpt/browser-delivery-host.ts +7 -1
  10. package/adapters/chatgpt/browser-delivery-runtime.ts +531 -56
  11. package/adapters/chatgpt/controller-binding-store.ts +101 -22
  12. package/adapters/chatgpt/controller-round-host.ts +15 -25
  13. package/adapters/chatgpt/controller-round-settlement-store.ts +58 -4
  14. package/adapters/chatgpt/provider-delivery.ts +229 -2
  15. package/adapters/chatgpt/work-conversation-binding-store.ts +99 -54
  16. package/adapters/computer/chatgpt-extension-target.ts +708 -0
  17. package/adapters/computer/chrome-extension/background.js +541 -0
  18. package/adapters/computer/chrome-extension/content.js +402 -0
  19. package/adapters/computer/chrome-extension/core.js +24 -0
  20. package/adapters/computer/chrome-extension/manifest.json +32 -0
  21. package/adapters/computer/desktop-operator-discovery.ts +11 -31
  22. package/adapters/computer/desktop-operator-provider.ts +18 -6
  23. package/adapters/computer/interaction-target-authority.ts +178 -24
  24. package/adapters/mcp/access-mode.ts +18 -39
  25. package/adapters/mcp/auth.ts +2 -7
  26. package/adapters/mcp/instructions.ts +6 -5
  27. package/adapters/mcp/multi-repository.ts +10 -47
  28. package/adapters/mcp/oauth.ts +73 -0
  29. package/adapters/mcp/paths.ts +4 -1
  30. package/adapters/mcp/runtime-gateway/bounded-result-runtime.ts +62 -0
  31. package/adapters/mcp/runtime-gateway/cognition-settlement.ts +201 -0
  32. package/adapters/mcp/runtime-gateway/context-adapter.ts +490 -113
  33. package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +83 -0
  34. package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +20 -5
  35. package/adapters/mcp/runtime-gateway/core-capability-adapter.ts +258 -0
  36. package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +10 -27
  37. package/adapters/mcp/runtime-gateway/engineering-tool-contract.ts +15 -0
  38. package/adapters/mcp/runtime-gateway/execution-tools.ts +14 -54
  39. package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
  40. package/adapters/mcp/runtime-gateway/plugin-adapter.ts +132 -47
  41. package/adapters/mcp/runtime-gateway/process-tools.ts +173 -23
  42. package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +16 -4
  43. package/adapters/mcp/runtime-gateway/recovery-adapter.ts +69 -52
  44. package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +4 -35
  45. package/adapters/mcp/runtime-gateway/result-adapter.ts +10 -4
  46. package/adapters/mcp/runtime-gateway/router.ts +19 -507
  47. package/adapters/mcp/runtime-gateway/routing-policy.ts +506 -0
  48. package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +15 -66
  49. package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
  50. package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +123 -178
  51. package/adapters/mcp/runtime-gateway/runtime-tools.ts +11 -5
  52. package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +37 -1
  53. package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
  54. package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +416 -270
  55. package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +140 -0
  56. package/adapters/mcp/runtime-gateway/work-adapter.ts +262 -3123
  57. package/adapters/mcp/runtime-gateway/work-controller-operations.ts +257 -0
  58. package/adapters/mcp/runtime-gateway/work-detail-projection.ts +60 -0
  59. package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +229 -0
  60. package/adapters/mcp/runtime-gateway/work-learning-operations.ts +145 -0
  61. package/adapters/mcp/runtime-gateway/work-list-projection.ts +38 -0
  62. package/adapters/mcp/runtime-gateway/work-plan-operations.ts +382 -0
  63. package/adapters/mcp/runtime-gateway/work-repair-adapter.ts +308 -0
  64. package/adapters/mcp/runtime-gateway/work-requirement-operations.ts +148 -0
  65. package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +320 -0
  66. package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
  67. package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +180 -0
  68. package/adapters/mcp/server.ts +91 -26
  69. package/adapters/mcp/setup.ts +5 -13
  70. package/adapters/mcp/tool-mapping/access-tools.ts +0 -6
  71. package/adapters/mcp/tool-mapping/legacy-tool-service.ts +703 -3092
  72. package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +5 -10
  73. package/adapters/mcp/tool-mapping/repository-tools.ts +170 -213
  74. package/adapters/mcp/toolset-names.ts +11 -37
  75. package/adapters/mcp/toolset.ts +19 -92
  76. package/{src/cli → adapters}/mcp/transports/AGENTS.md +5 -5
  77. package/{src/cli → adapters}/mcp/transports/CLAUDE.md +5 -5
  78. package/adapters/mcp/transports/http-observation.ts +377 -0
  79. package/adapters/mcp/transports/http-post-lifecycle.ts +19 -0
  80. package/adapters/mcp/transports/http.ts +200 -683
  81. package/adapters/mcp/transports/oauth-http.ts +322 -0
  82. package/adapters/mcp/transports/session-registry.ts +6 -0
  83. package/adapters/mcp/tunnels/openai-secure-tunnel.ts +89 -5
  84. package/adapters/mcp/types.ts +0 -6
  85. package/assets/hooks/lib/session-state.sh +0 -38
  86. package/assets/hooks/post-bash.sh +1 -1
  87. package/assets/hooks/post-tool-observer.sh +0 -5
  88. package/assets/hooks/prompt-guard.sh +0 -55
  89. package/assets/partials/04-project-structure.partial.md +1 -1
  90. package/assets/partials/07-footer.partial.md +1 -1
  91. package/assets/partials-agents/02-operating-mode.partial.md +1 -1
  92. package/assets/partials-agents/08-deep-docs.partial.md +1 -1
  93. package/assets/plugin-registry.v1.json +6 -4
  94. package/assets/reference-configs/agentic-development-flow.md +26 -1
  95. package/assets/reference-configs/external-tooling.md +0 -76
  96. package/assets/reference-configs/global-working-rules.md +19 -0
  97. package/assets/reference-configs/release-deploy.md +1 -1
  98. package/assets/templates/helpers/architecture-queue.sh +1 -1
  99. package/assets/templates/helpers/check-agent-tooling.sh +1 -327
  100. package/assets/templates/helpers/check-task-workflow.sh +1 -1
  101. package/assets/templates/helpers/ensure-task-workflow.sh +0 -14
  102. package/assets/templates/helpers/migrate-project-template.sh +2 -2
  103. package/assets/workflow-contract.v1.json +0 -2
  104. package/docs/README.md +5 -2
  105. package/docs/architecture/CURRENT.md +205 -51
  106. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +14 -5
  107. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +6 -3
  108. package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +42 -0
  109. package/docs/architecture/decisions/20260907-assistant-learning-loop.md +2 -0
  110. package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +19 -4
  111. package/docs/architecture/decisions/20260916-workflow-supervisor-authority.md +249 -0
  112. package/docs/architecture/decisions/20260917-cognitive-memory-foundation.md +82 -0
  113. package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +234 -0
  114. package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
  115. package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +74 -0
  116. package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +342 -0
  117. package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
  118. package/docs/architecture/decisions/20261009-exact-code-context-discovery.md +19 -0
  119. package/docs/architecture/decisions/20261009-generated-xcode-cache-retention.md +37 -0
  120. package/docs/architecture/decisions/20261011-autonomous-continuation-convergence.md +597 -0
  121. package/docs/architecture/decisions/20261017-edit-session-finalization-reconciliation.md +17 -0
  122. package/docs/architecture/decisions/20261019-retire-host-skills.md +16 -0
  123. package/docs/architecture/diagrams/agentic-dev-plugin-architecture.html +1 -1
  124. package/docs/architecture/domains/public-surface.md +3 -5
  125. package/docs/architecture/domains/verification.md +6 -5
  126. package/docs/architecture/domains/workflow-engine.md +6 -0
  127. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +3 -3
  128. package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +4 -4
  129. package/docs/architecture/reviews/20261015-code-search-runtime-acceptance.md +75 -0
  130. package/docs/forge-plugin-management.md +16 -4
  131. package/docs/operations/controller-browser-plugin.md +23 -0
  132. package/docs/operations/controller-performance-and-502.md +17 -0
  133. package/docs/operations/controller-reliability-runbook.md +2 -2
  134. package/docs/operations/features.md +6 -7
  135. package/docs/operations/features.zh-CN.md +1 -1
  136. package/docs/operations/github-repository.md +4 -4
  137. package/docs/operations/github-semantic-release-projection.md +20 -0
  138. package/docs/operations/homebrew.md +2 -2
  139. package/docs/operations/mcp-tool-exposure.md +13 -52
  140. package/docs/operations/releasing.md +2 -0
  141. package/docs/operations/runtime-performance-diagnostics.md +8 -0
  142. package/docs/operations/standalone-disaster-recovery.md +15 -7
  143. package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
  144. package/docs/tutorials/03-first-repository-task.md +2 -0
  145. package/docs/wiki/Computer-and-Plugins.md +78 -0
  146. package/docs/wiki/Computer-and-Plugins.zh-CN.md +88 -0
  147. package/docs/wiki/Home.md +16 -2
  148. package/docs/wiki/Implementation.md +25 -13
  149. package/docs/wiki/Installation.md +28 -32
  150. package/docs/wiki/Integrations.md +4 -0
  151. package/docs/wiki/Quick-Start.md +35 -22
  152. package/docs/wiki/Releases-and-Upgrades.md +15 -25
  153. package/docs/wiki/_Sidebar.md +5 -1
  154. package/package.json +25 -25
  155. package/packages/kernel/cognition/api/index.ts +6 -0
  156. package/packages/kernel/cognition/application/activation-service.ts +451 -0
  157. package/packages/kernel/cognition/application/consolidation-service.ts +185 -0
  158. package/packages/kernel/cognition/application/legacy-experience-adapter.ts +38 -0
  159. package/packages/kernel/cognition/application/memory-service.ts +64 -0
  160. package/packages/kernel/cognition/domain/learning.ts +106 -0
  161. package/packages/kernel/cognition/domain/memory.ts +254 -0
  162. package/packages/kernel/controller/api/index.ts +1 -0
  163. package/packages/kernel/controller/application/continuation-service.ts +281 -0
  164. package/packages/kernel/controller/application/controller-round-service.ts +12 -0
  165. package/packages/kernel/controller/domain/controller-round-transition-policy.ts +242 -21
  166. package/packages/kernel/controller/domain/controller-round.ts +4 -1
  167. package/packages/kernel/controller/domain/execution-quality.ts +3 -1
  168. package/packages/kernel/controller/infrastructure/controller-round-store.ts +689 -103
  169. package/packages/kernel/controller/infrastructure/controller-session-store.ts +348 -97
  170. package/packages/kernel/controller/ports/controller-host.ts +2 -0
  171. package/packages/kernel/identity/api/index.ts +10 -0
  172. package/packages/kernel/identity/domain/activity-projection.ts +43 -0
  173. package/packages/kernel/identity/domain/capability-broker.ts +60 -0
  174. package/packages/kernel/identity/domain/grant.ts +72 -0
  175. package/packages/kernel/identity/domain/owned-resource.ts +116 -0
  176. package/packages/kernel/identity/domain/user-request.ts +93 -0
  177. package/packages/kernel/identity/infrastructure/activity-projection-store.ts +87 -0
  178. package/packages/kernel/identity/infrastructure/capability-broker.ts +81 -0
  179. package/packages/kernel/identity/infrastructure/grant-store.ts +284 -0
  180. package/packages/kernel/identity/infrastructure/owned-resource-store.ts +259 -0
  181. package/packages/kernel/identity/infrastructure/user-request-store.ts +182 -0
  182. package/packages/kernel/scheduler/api/index.ts +0 -2
  183. package/packages/kernel/scheduler/application/eligibility.ts +4 -1
  184. package/packages/kernel/scheduler/application/schedule-service.ts +3 -0
  185. package/packages/kernel/scheduler/application/settlement.ts +0 -15
  186. package/packages/kernel/scheduler/domain/schedule.ts +87 -0
  187. package/packages/kernel/scheduler/infrastructure/schedule-store.ts +166 -143
  188. package/packages/kernel/work/api/index.ts +3 -2
  189. package/packages/kernel/work/application/work-service.ts +18 -42
  190. package/packages/kernel/work/domain/current-task-lineage.ts +104 -0
  191. package/packages/kernel/work/domain/engineering-design.ts +10 -5
  192. package/packages/kernel/work/domain/engineering-profile.ts +8 -12
  193. package/packages/kernel/work/domain/evaluation-promotion-receipt.ts +186 -0
  194. package/packages/kernel/work/domain/execution-concurrency.ts +19 -26
  195. package/packages/kernel/work/domain/execution-snapshot.ts +0 -31
  196. package/packages/kernel/work/domain/implementation-review.ts +14 -331
  197. package/packages/kernel/work/domain/objective-graph.ts +119 -0
  198. package/packages/kernel/work/domain/project-engineering-contract.ts +23 -1
  199. package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
  200. package/packages/kernel/work/domain/state-machine.ts +34 -65
  201. package/packages/kernel/work/domain/types.ts +57 -51
  202. package/packages/kernel/work/infrastructure/work-contract-store.ts +847 -729
  203. package/packages/kernel/work/ports/work-contract-store.ts +5 -2
  204. package/packages/plugin-runtime/browser/provider-registry.ts +12 -36
  205. package/packages/plugin-runtime/browser/session-authority.ts +2 -1
  206. package/packages/plugin-runtime/computer/chatgpt-identity.ts +24 -0
  207. package/packages/plugin-runtime/computer/conversation-target.ts +153 -0
  208. package/packages/plugin-runtime/computer/index.ts +2 -0
  209. package/packages/plugin-runtime/computer/target-authority.ts +26 -1
  210. package/packages/plugin-runtime/external/unix-jsonl-transport.ts +142 -18
  211. package/packages/protocols/computer/contract.ts +27 -1
  212. package/scripts/activate-source-baseline.ts +7 -9
  213. package/scripts/assemble-template.ts +11 -72
  214. package/scripts/canary-controller-semantic-wait.ts +12 -24
  215. package/scripts/check-mcp-compatibility.ts +94 -201
  216. package/scripts/check-package-identity.mjs +0 -5
  217. package/scripts/check-runtime-architecture.mjs +921 -239
  218. package/scripts/forge-local-recovery-helper.mjs +93 -15
  219. package/scripts/init-project.sh +0 -46
  220. package/scripts/install-ios-hid-toolchain.sh +60 -0
  221. package/scripts/install-standalone-recovery.ts +1 -1
  222. package/scripts/lib/project-init-lib.sh +6 -3
  223. package/scripts/migrate-windows-wsl-controller-home.ts +2 -0
  224. package/scripts/open-source-audit-allowlist.txt +1 -3
  225. package/scripts/run-bounded-command.mjs +5 -0
  226. package/scripts/run-governed-gate.ts +2 -1
  227. package/scripts/run-mobile-monitor-bridge.ts +0 -1
  228. package/scripts/smoke-control-plane-failure-domain.ts +94 -0
  229. package/scripts/smoke-ios-physical-device.ts +38 -10
  230. package/scripts/smoke-mcp-http-runtime.ts +12 -8
  231. package/scripts/smoke-mcp-tool-surface.ts +27 -41
  232. package/scripts/smoke-runtime-recovery.ts +12 -43
  233. package/scripts/smoke-schedule-engine.ts +23 -15
  234. package/scripts/smoke-unattended-transport-recovery.ts +223 -0
  235. package/scripts/smoke-user-request-continuation-restart.ts +232 -0
  236. package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +95 -0
  237. package/scripts/smoke-workflow-supervisor-process-restart.ts +276 -0
  238. package/scripts/smoke-workflow-supervisor-restart-recovery.ts +150 -0
  239. package/scripts/smoke-workflow-supervisor.ts +103 -0
  240. package/scripts/sync-generated-authority.mjs +0 -1
  241. package/scripts/verify-forge-runtime.sh +2 -1
  242. package/src/cli/agent-jobs/executor-health.ts +12 -35
  243. package/src/cli/agent-jobs/integration.ts +20 -51
  244. package/src/cli/agent-jobs/job-manager.ts +7 -3
  245. package/src/cli/chatgpt-browser/file-policy.ts +2 -2
  246. package/src/cli/commands/brain-assistant.ts +27 -13
  247. package/src/cli/commands/brain.ts +13 -15
  248. package/src/cli/commands/chatgpt.ts +1 -163
  249. package/src/cli/commands/doctor.ts +1 -143
  250. package/src/cli/commands/global-runtime.ts +3 -196
  251. package/src/cli/commands/init-hook.ts +6 -23
  252. package/src/cli/commands/init.ts +3 -252
  253. package/src/cli/commands/mcp.ts +0 -5
  254. package/src/cli/commands/prompt-guard-decision.ts +0 -2
  255. package/src/cli/commands/recovery.ts +137 -135
  256. package/src/cli/commands/repository.ts +17 -1
  257. package/src/cli/commands/runtime.ts +3 -3
  258. package/src/cli/commands/setup-execution.ts +41 -0
  259. package/src/cli/commands/setup-profile.ts +8 -0
  260. package/src/cli/controller/check-runner.ts +13 -2
  261. package/src/cli/controller/completion-backlog.ts +3 -3
  262. package/src/cli/controller/completion-orchestrator.ts +5 -44
  263. package/src/cli/controller/completion-target.ts +3 -72
  264. package/src/cli/controller/composite-operations.ts +1 -1
  265. package/src/cli/controller/context/instruction-context.ts +1 -1
  266. package/src/cli/controller/context/known-paths.ts +2 -2
  267. package/src/cli/controller/context/query-planning.ts +11 -4
  268. package/src/cli/controller/context/rule-resolution.ts +2 -2
  269. package/src/cli/controller/context/source-materializer.ts +83 -102
  270. package/src/cli/controller/context/structural-provider.ts +84 -0
  271. package/src/cli/controller/context/structural.ts +6 -6
  272. package/src/cli/controller/context/types.ts +8 -9
  273. package/src/cli/controller/context-pack.ts +107 -84
  274. package/src/cli/controller/execution-completion.ts +4 -7
  275. package/src/cli/controller/execution-policy.ts +36 -153
  276. package/src/cli/controller/governance.ts +2 -3
  277. package/src/cli/controller/issue-store.ts +4 -99
  278. package/src/cli/controller/launch-agents.ts +59 -18
  279. package/src/cli/controller/operational-plan.ts +25 -52
  280. package/src/cli/controller/runtime-config.ts +5 -1
  281. package/src/cli/controller/stuck-state-migration.ts +2 -3
  282. package/src/cli/controller/systemd-user.ts +42 -10
  283. package/src/cli/editing/edit-session.ts +18 -12
  284. package/src/cli/github/github.ts +4 -4
  285. package/src/cli/github/semantic-projection.ts +174 -0
  286. package/src/cli/hook/prompt-intents.ts +0 -9
  287. package/src/cli/index.ts +1 -43
  288. package/src/cli/local-bridge/connector-freshness.ts +1 -12
  289. package/src/cli/local-bridge/console-automations.ts +19 -14
  290. package/src/cli/local-bridge/console-view-models.ts +4 -13
  291. package/src/cli/local-bridge/facade-api.ts +64 -193
  292. package/src/cli/local-bridge/server.ts +24 -147
  293. package/src/cli/local-bridge/types.ts +0 -1
  294. package/src/cli/mcp/oauth-client-retirement.ts +74 -0
  295. package/src/cli/repositories/command-classifier.ts +0 -9
  296. package/src/cli/repositories/command-executor.ts +29 -23
  297. package/src/cli/repositories/command-scope.ts +37 -18
  298. package/src/cli/repositories/controller-home.ts +48 -0
  299. package/src/cli/repositories/ephemeral-workspace.ts +20 -30
  300. package/src/cli/repositories/git-command-executor.ts +2 -2
  301. package/src/cli/repositories/locks.ts +20 -0
  302. package/src/cli/repositories/registry.ts +79 -12
  303. package/src/cli/repositories/safe-patch.ts +2 -12
  304. package/src/cli/repositories/structured-git.ts +101 -5
  305. package/src/cli/repository/inspector.ts +185 -343
  306. package/src/cli/repository/session-cache.ts +92 -6
  307. package/src/effects/process-runner.ts +17 -1
  308. package/src/runtime/context/assistant-context.ts +20 -7
  309. package/src/runtime/context/assistant-work-context.ts +89 -27
  310. package/src/runtime/context/automatic-learning.ts +565 -0
  311. package/src/runtime/context/cognitive-attention.ts +173 -0
  312. package/src/runtime/context/cognitive-skill-canary.ts +158 -0
  313. package/src/runtime/context/context-closure.ts +46 -9
  314. package/src/runtime/context/context-pack-process.ts +103 -0
  315. package/src/runtime/context/context-plane.ts +1 -9
  316. package/src/runtime/context/direct-controller-learning.ts +298 -0
  317. package/src/runtime/context/generic-lsp-provider.ts +1 -1
  318. package/src/runtime/context/semantic-navigation-contract.ts +16 -0
  319. package/src/runtime/context/semantic-navigation.ts +7 -35
  320. package/src/runtime/context/typescript-navigation-process.ts +145 -0
  321. package/src/runtime/context/typescript-navigation.ts +89 -3
  322. package/src/runtime/control-plane/cleanup-artifact-retention.ts +215 -12
  323. package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +9 -47
  324. package/src/runtime/control-plane/execution/controller-authority-recovery.ts +34 -4
  325. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +29 -20
  326. package/src/runtime/control-plane/execution/execution-identity.ts +23 -3
  327. package/src/runtime/control-plane/execution/repository-work-attribution.ts +7 -30
  328. package/src/runtime/control-plane/execution/retained-work-resume.ts +206 -199
  329. package/src/runtime/control-plane/execution/session-store.ts +31 -1
  330. package/src/runtime/control-plane/execution/validation.ts +6 -8
  331. package/src/runtime/control-plane/execution/work-authority-reconciler.ts +13 -42
  332. package/src/runtime/control-plane/execution/work-check-evidence.ts +137 -0
  333. package/src/runtime/control-plane/execution/work-completion-authority.ts +30 -85
  334. package/src/runtime/control-plane/execution/work-delivery-service.ts +616 -0
  335. package/src/runtime/control-plane/execution/work-evidence-policy.ts +12 -50
  336. package/src/runtime/control-plane/execution/work-execution-support.ts +50 -149
  337. package/src/runtime/control-plane/execution/work-handle-authority.ts +197 -110
  338. package/src/runtime/control-plane/execution/work-handle-store.ts +72 -44
  339. package/src/runtime/control-plane/execution/work-head-settlement.ts +53 -20
  340. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +52 -29
  341. package/src/runtime/control-plane/execution/work-operation-service.ts +60 -34
  342. package/src/runtime/control-plane/execution/work-preparation-service.ts +231 -267
  343. package/src/runtime/control-plane/execution/work-process-evidence.ts +2 -2
  344. package/src/runtime/control-plane/execution/work-remote-delivery.ts +2 -3
  345. package/src/runtime/control-plane/execution/work-revision-diff.ts +39 -0
  346. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +201 -199
  347. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +33 -85
  348. package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
  349. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +6 -2
  350. package/src/runtime/control-plane/facade/capability-registry.ts +364 -37
  351. package/src/runtime/control-plane/facade/check-normalization.ts +3 -9
  352. package/src/runtime/control-plane/facade/codex-delegation.ts +10 -11
  353. package/src/runtime/control-plane/facade/controller-connection.ts +135 -0
  354. package/src/runtime/control-plane/facade/goal-workloop-access.ts +1 -20
  355. package/src/runtime/control-plane/facade/goal-workloop.ts +281 -1753
  356. package/src/runtime/control-plane/facade/handoff-inbox-application.ts +12 -25
  357. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +256 -52
  358. package/src/runtime/control-plane/facade/index.ts +0 -1
  359. package/src/runtime/control-plane/facade/operation-digest.ts +12 -15
  360. package/src/runtime/control-plane/facade/plan-contract-store.ts +451 -991
  361. package/src/runtime/control-plane/facade/policy-gate.ts +0 -23
  362. package/src/runtime/control-plane/facade/repository-work-admission.ts +12 -22
  363. package/src/runtime/control-plane/facade/requirement-authority.ts +102 -199
  364. package/src/runtime/control-plane/facade/requirement-board.ts +3 -3
  365. package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +51 -14
  366. package/src/runtime/control-plane/facade/self-healing-loop.ts +18 -53
  367. package/src/runtime/control-plane/facade/suggested-actions.ts +15 -18
  368. package/src/runtime/control-plane/facade/types.ts +49 -108
  369. package/src/runtime/control-plane/facade/work-continuation.ts +9 -9
  370. package/src/runtime/control-plane/generated-cache-retention.ts +206 -59
  371. package/src/runtime/control-plane/global-scheduler/autonomous-continuation.ts +248 -0
  372. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +1 -1
  373. package/src/runtime/control-plane/global-scheduler/maintenance.ts +256 -117
  374. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -12
  375. package/src/runtime/control-plane/global-scheduler/scheduler.ts +66 -40
  376. package/src/runtime/control-plane/global-scheduler/wake-signal.ts +42 -2
  377. package/src/runtime/control-plane/governance/access-policy.ts +19 -2
  378. package/src/runtime/control-plane/governance/authorization.ts +20 -3
  379. package/src/runtime/control-plane/governance/external-effects.ts +1 -1
  380. package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +63 -300
  381. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +29 -300
  382. package/src/runtime/control-plane/launcher/local-conversation-controller.ts +238 -0
  383. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +5 -2
  384. package/src/runtime/control-plane/launcher/thin-launcher.ts +96 -240
  385. package/src/runtime/control-plane/persistence/cognition-store.ts +820 -0
  386. package/src/runtime/control-plane/persistence/experience-store.ts +162 -29
  387. package/src/runtime/control-plane/persistence/requirement-store.ts +216 -74
  388. package/src/runtime/control-plane/persistence/sqlite-store.ts +113 -6
  389. package/src/runtime/control-plane/release-retention.ts +135 -47
  390. package/src/runtime/control-plane/repository-namespace-retention.ts +2 -2
  391. package/src/runtime/control-plane/runtime-cleanup.ts +295 -107
  392. package/src/runtime/control-plane/workspace/project-onboarding.ts +80 -0
  393. package/src/runtime/control-plane/workspace/semantic-sync-service.ts +19 -5
  394. package/src/runtime/control-plane/workspace/workspace-store.ts +169 -0
  395. package/src/runtime/diagnostics/incident-repair.ts +313 -146
  396. package/src/runtime/diagnostics/mcp-timing.ts +114 -0
  397. package/src/runtime/evidence/artifact-store.ts +158 -40
  398. package/src/runtime/evidence/evidence-store.ts +112 -8
  399. package/src/runtime/evidence/output-handle-index.ts +225 -0
  400. package/src/runtime/evidence/result-store.ts +158 -44
  401. package/src/runtime/evidence/sensitive-output.ts +22 -2
  402. package/src/runtime/execution/jobs/child-reference.ts +11 -0
  403. package/src/runtime/execution/jobs/receipt-recovery.ts +1 -11
  404. package/src/runtime/execution/jobs/store.ts +3 -4
  405. package/src/runtime/execution/managed-workspace.ts +57 -0
  406. package/src/runtime/execution/process-runtime/check-facade.ts +1 -1
  407. package/src/runtime/execution/process-runtime/check-result-retention.ts +2 -2
  408. package/src/runtime/execution/process-runtime/check-result.ts +105 -1
  409. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +18 -8
  410. package/src/runtime/execution/process-runtime/command-facade.ts +82 -30
  411. package/src/runtime/execution/process-runtime/gc.ts +15 -2
  412. package/src/runtime/execution/process-runtime/handle-index.ts +176 -0
  413. package/src/runtime/execution/process-runtime/host-command-lane.ts +139 -0
  414. package/src/runtime/execution/process-runtime/index.ts +3 -0
  415. package/src/runtime/execution/process-runtime/lightweight-managed.ts +251 -72
  416. package/src/runtime/execution/process-runtime/persisted-check.ts +3 -3
  417. package/src/runtime/execution/process-runtime/process-runner-entry.ts +47 -5
  418. package/src/runtime/execution/process-runtime/process-scope.ts +160 -0
  419. package/src/runtime/execution/process-runtime/resource-claims.ts +65 -61
  420. package/src/runtime/execution/process-runtime/runtime.ts +55 -18
  421. package/src/runtime/execution/process-runtime/store.ts +30 -2
  422. package/src/runtime/execution/process-runtime/types.ts +6 -1
  423. package/src/runtime/execution/thin-harness/execution-router.ts +16 -16
  424. package/src/runtime/execution/thin-harness/fast-executor.ts +2 -2
  425. package/src/runtime/execution/thin-harness/search-worker.ts +2 -2
  426. package/src/runtime/execution/workers/executor.ts +3 -8
  427. package/src/runtime/maintenance/cleanup.ts +41 -5
  428. package/src/runtime/platform/service-inventory.ts +130 -0
  429. package/src/runtime/platform/service-manager.ts +8 -0
  430. package/src/runtime/plugins/action-application.ts +97 -29
  431. package/src/runtime/plugins/app-store-connect-adapter.ts +290 -18
  432. package/src/runtime/plugins/browser-adapter.ts +1124 -333
  433. package/src/runtime/plugins/browser-automation-service.ts +23 -3
  434. package/src/runtime/plugins/browser-macos-bridge.ts +431 -137
  435. package/src/runtime/plugins/browser-manifest-surface.ts +47 -12
  436. package/src/runtime/plugins/browser-native-session-service.ts +63 -13
  437. package/src/runtime/plugins/browser-registration.ts +18 -0
  438. package/src/runtime/plugins/browser-runtime.ts +40 -36
  439. package/src/runtime/plugins/browser-session-authority.ts +2 -2
  440. package/src/runtime/plugins/browser-session-store.ts +46 -76
  441. package/src/runtime/plugins/capability-authorization-grants.ts +258 -62
  442. package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +228 -0
  443. package/src/runtime/plugins/computer-registration.ts +298 -20
  444. package/src/runtime/plugins/desktop-operator-external-policy.ts +36 -4
  445. package/src/runtime/plugins/desktop-operator-registration.ts +12 -4
  446. package/src/runtime/plugins/external-adapter.ts +42 -6
  447. package/src/runtime/plugins/external-registration.ts +21 -1
  448. package/src/runtime/plugins/github-adapter.ts +30 -3
  449. package/src/runtime/plugins/gmail-adapter.ts +189 -3
  450. package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
  451. package/src/runtime/plugins/google-shared.ts +24 -12
  452. package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
  453. package/src/runtime/plugins/ios/remote-xpc-hid.ts +70 -30
  454. package/src/runtime/plugins/ios-adapter.ts +46 -41
  455. package/src/runtime/plugins/ios-agent-device.ts +54 -4
  456. package/src/runtime/plugins/ios-device-ownership.ts +103 -0
  457. package/src/runtime/plugins/ios-physical-device.ts +497 -79
  458. package/src/runtime/plugins/lightweight-action.ts +208 -2
  459. package/src/runtime/plugins/local-system-adapter.ts +12 -100
  460. package/src/runtime/plugins/managed-process-adapter.ts +12 -5
  461. package/src/runtime/plugins/plugin-action-sidecar.ts +17 -13
  462. package/src/runtime/plugins/plugin-management-adapter.ts +1 -1
  463. package/src/runtime/plugins/store.ts +682 -435
  464. package/src/runtime/plugins/types.ts +24 -0
  465. package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
  466. package/src/runtime/projections/git-status-sampler.ts +2 -19
  467. package/src/runtime/projections/invalidation.ts +7 -3
  468. package/src/runtime/projections/materialized-view.ts +80 -36
  469. package/src/runtime/recovery/actions.ts +4 -4
  470. package/src/runtime/recovery/capability-action-application.ts +46 -45
  471. package/src/runtime/recovery/lifecycle-inventory.ts +30 -40
  472. package/src/runtime/recovery/maintenance-executor.ts +374 -123
  473. package/src/runtime/recovery/probe.ts +2 -2
  474. package/src/runtime/recovery/store.ts +29 -11
  475. package/src/runtime/release/release-coordinator.ts +312 -0
  476. package/src/runtime/release/release-session.ts +716 -0
  477. package/src/runtime/release/release-state-migration.ts +25 -0
  478. package/src/runtime/resources/leases/store.ts +56 -25
  479. package/src/runtime/root/computer-composition.ts +191 -6
  480. package/src/runtime/root/controller-progression-composition.ts +254 -0
  481. package/src/runtime/root/controller-round-composition.ts +20 -1
  482. package/src/runtime/root/deployment-topology.ts +106 -0
  483. package/src/runtime/root/entry.ts +4 -3
  484. package/src/runtime/root/known-good-recovery.ts +184 -0
  485. package/src/runtime/root/local-bridge.ts +0 -1
  486. package/src/runtime/root/mcp-transport.ts +111 -18
  487. package/src/runtime/root/ownership.ts +261 -9
  488. package/src/runtime/root/package-connector-service.ts +227 -29
  489. package/src/runtime/root/package-runtime-release.ts +117 -30
  490. package/src/runtime/root/package-runtime-service.ts +24 -24
  491. package/src/runtime/root/release-execution-canary.ts +57 -12
  492. package/src/runtime/root/release-loader.ts +90 -8
  493. package/src/runtime/root/release-manifest.ts +80 -40
  494. package/src/runtime/root/release-materialize.ts +372 -106
  495. package/src/runtime/root/release-store.ts +395 -36
  496. package/src/runtime/root/runtime-lane.ts +191 -0
  497. package/src/runtime/root/runtime.ts +160 -29
  498. package/src/runtime/root/scheduled-controller-composition.ts +29 -3
  499. package/src/runtime/root/service-runner.ts +2 -2
  500. package/src/runtime/root/service.ts +126 -44
  501. package/src/runtime/root/status.ts +48 -0
  502. package/src/runtime/root/types.ts +32 -9
  503. package/src/runtime/root/workflow-supervisor-composition.ts +681 -0
  504. package/src/runtime/root/workflow-supervisor-runtime.ts +564 -0
  505. package/src/runtime/root/write-fence.ts +50 -2
  506. package/src/runtime/safe-tooling/google-credential-store.ts +67 -22
  507. package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
  508. package/src/runtime/safe-tooling/ios-development.ts +22 -8
  509. package/src/runtime/safe-tooling/job-summary.ts +1 -1
  510. package/src/runtime/safe-tooling/workspace-auth.ts +5 -2
  511. package/src/runtime/shared/atomic-text-file.ts +21 -0
  512. package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
  513. package/src/runtime/shared/json-files.ts +8 -3
  514. package/src/runtime/shared/process-environment.ts +20 -9
  515. package/src/runtime/shared/response-budget.ts +1 -3
  516. package/src/runtime/standalone-recovery/controller-home-migration.ts +16 -24
  517. package/src/runtime/standalone-recovery/core.ts +3792 -417
  518. package/src/runtime/standalone-recovery/entry.ts +507 -45
  519. package/src/runtime/standalone-recovery/installer.ts +262 -148
  520. package/src/runtime/standalone-recovery/mcp-server.ts +29 -193
  521. package/src/runtime/standalone-recovery/operation-lock.ts +12 -2
  522. package/src/runtime/standalone-recovery/performance.ts +54 -16
  523. package/src/runtime/standalone-recovery/release.ts +53 -5
  524. package/src/runtime/standalone-recovery/service-labels.ts +5 -2
  525. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +5 -2
  526. package/src/runtime/workflow/schedules/browser-probe.ts +17 -6
  527. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +11 -3
  528. package/src/runtime/workflow/schedules/engine.ts +166 -178
  529. package/src/runtime/workflow/schedules/pending-activation.ts +11 -4
  530. package/src/runtime/workflow/schedules/work-continuation.ts +95 -11
  531. package/src/runtime/workflows/runtime.ts +15 -19
  532. package/src/testing/test-governance.ts +5 -1
  533. package/supervisor/chatgpt-conversation.ts +23 -0
  534. package/supervisor/client.ts +218 -0
  535. package/supervisor/control-plane.ts +963 -0
  536. package/supervisor/entry.ts +15 -0
  537. package/supervisor/forge-validators.ts +147 -0
  538. package/supervisor/index.ts +5 -0
  539. package/supervisor/native-browser-adapter.ts +1151 -0
  540. package/supervisor/native-messaging/host.ts +58 -0
  541. package/supervisor/native-messaging/manifest.ts +26 -0
  542. package/supervisor/native-messaging/protocol.ts +27 -0
  543. package/supervisor/paths.ts +18 -0
  544. package/supervisor/protocol.ts +250 -0
  545. package/supervisor/server.ts +412 -0
  546. package/supervisor/store.ts +1870 -0
  547. package/supervisor/tsconfig.json +8 -0
  548. package/supervisor/types.ts +261 -0
  549. package/SKILL.md +0 -427
  550. package/adapters/chatgpt/controller-host.ts +0 -119
  551. package/adapters/mcp/controller-round-compatibility.ts +0 -184
  552. package/adapters/mcp/frozen-client-semantic-compatibility.ts +0 -292
  553. package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +0 -502
  554. package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +0 -1
  555. package/adapters/mcp/toolset-selection.ts +0 -41
  556. package/agents/openai.yaml +0 -4
  557. package/assets/skill-hooks.json +0 -41
  558. package/assets/skill-version.json +0 -189
  559. package/assets/skills/claude-review/SKILL.md +0 -231
  560. package/assets/skills/codex-review/SKILL.md +0 -103
  561. package/assets/templates/helpers/check-skill-version.ts +0 -193
  562. package/packages/kernel/progression/api/index.ts +0 -2
  563. package/packages/kernel/progression/application/projector.ts +0 -211
  564. package/packages/kernel/progression/domain/types.ts +0 -116
  565. package/packages/kernel/progression/index.ts +0 -1
  566. package/packages/kernel/scheduler/application/continuation-service.ts +0 -212
  567. package/packages/kernel/scheduler/domain/continuation.ts +0 -38
  568. package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +0 -38
  569. package/packages/kernel/work/domain/admission-policy.ts +0 -34
  570. package/scripts/benchmark-background-check-overlap.ts +0 -228
  571. package/scripts/benchmark-computer-hotpath.ts +0 -255
  572. package/scripts/benchmark-controller-hotpath.ts +0 -212
  573. package/scripts/benchmark-controller-round2.ts +0 -191
  574. package/scripts/benchmark-ios-agent-device.ts +0 -511
  575. package/scripts/benchmark-mcp-host.sh +0 -117
  576. package/scripts/benchmark-mcp-transport.ts +0 -169
  577. package/scripts/benchmark-operational-memory-activation.ts +0 -235
  578. package/scripts/benchmark-operational-shadow.ts +0 -28
  579. package/scripts/benchmark-quality-harness.ts +0 -146
  580. package/scripts/benchmark-route-session-concurrency.ts +0 -915
  581. package/scripts/benchmark-thin-harness-gateway-ab.ts +0 -632
  582. package/scripts/benchmark-thin-harness-mcp-e2e.ts +0 -498
  583. package/scripts/benchmark-thin-harness.ts +0 -251
  584. package/scripts/benchmark-typescript-navigation.ts +0 -186
  585. package/scripts/benchmark-work-efficiency.ts +0 -334
  586. package/scripts/build-controller-ui.ts +0 -28
  587. package/scripts/check-npm-release.sh +0 -32
  588. package/scripts/check-public-release-surface.sh +0 -19
  589. package/scripts/check-release-published.sh +0 -57
  590. package/scripts/check-release-readiness.sh +0 -37
  591. package/scripts/check-release-version.mjs +0 -74
  592. package/scripts/check-skill-version.ts +0 -5
  593. package/scripts/check-tarball-install-smoke.sh +0 -150
  594. package/scripts/ensure-codegraph.sh +0 -16
  595. package/scripts/package-source-archive.sh +0 -147
  596. package/scripts/public-release-files.txt +0 -39
  597. package/scripts/public-release.ts +0 -174
  598. package/scripts/publish-release-tarball.sh +0 -27
  599. package/scripts/route-nl-vs-ts-eval.ts +0 -679
  600. package/scripts/run-skill-hook.ts +0 -244
  601. package/scripts/stage-runtime-release.ts +0 -44
  602. package/scripts/sync-codex-installed-copies.sh +0 -182
  603. package/src/cli/commands/tools.ts +0 -167
  604. package/src/cli/controller/progress.ts +0 -656
  605. package/src/cli/controller/work-mode.ts +0 -181
  606. package/src/cli/local-bridge/console-assets.ts +0 -17
  607. package/src/cli/local-bridge/dashboard.ts +0 -17
  608. package/src/cli/local-bridge/frontend/src/App.tsx +0 -10
  609. package/src/cli/local-bridge/frontend/src/components/Button.tsx +0 -1
  610. package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +0 -3
  611. package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +0 -1
  612. package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +0 -1
  613. package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +0 -1
  614. package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +0 -3
  615. package/src/cli/local-bridge/frontend/src/design/icons.tsx +0 -11
  616. package/src/cli/local-bridge/frontend/src/design/tokens.css +0 -8
  617. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +0 -153
  618. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +0 -37
  619. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +0 -183
  620. package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +0 -2
  621. package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +0 -2
  622. package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +0 -4
  623. package/src/cli/local-bridge/frontend/src/lib/api.ts +0 -30
  624. package/src/cli/local-bridge/frontend/src/lib/format.ts +0 -4
  625. package/src/cli/local-bridge/frontend/src/lib/routes.ts +0 -7
  626. package/src/cli/local-bridge/frontend/src/main.tsx +0 -1
  627. package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +0 -1
  628. package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +0 -2
  629. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +0 -4
  630. package/src/cli/local-bridge/frontend/src/styles.css +0 -28
  631. package/src/cli/local-bridge/frontend/src/types.ts +0 -15
  632. package/src/cli/local-bridge/frontend/src/vite-env.d.ts +0 -1
  633. package/src/cli/local-bridge/frontend/vite.config.ts +0 -27
  634. package/src/cli/local-bridge/ui-dist/app.css +0 -1
  635. package/src/cli/local-bridge/ui-dist/app.js +0 -11228
  636. package/src/cli/mcp/access-mode.ts +0 -2
  637. package/src/cli/mcp/access-tools.ts +0 -2
  638. package/src/cli/mcp/audit.ts +0 -2
  639. package/src/cli/mcp/auth.ts +0 -2
  640. package/src/cli/mcp/instructions.ts +0 -2
  641. package/src/cli/mcp/legacy-context.ts +0 -2
  642. package/src/cli/mcp/legacy-tool-service.ts +0 -2
  643. package/src/cli/mcp/multi-repository.ts +0 -2
  644. package/src/cli/mcp/oauth.ts +0 -2
  645. package/src/cli/mcp/openai-secure-tunnel.ts +0 -2
  646. package/src/cli/mcp/paths.ts +0 -2
  647. package/src/cli/mcp/policy.ts +0 -2
  648. package/src/cli/mcp/post-finalize-work-attribution.ts +0 -2
  649. package/src/cli/mcp/proxy-env.ts +0 -2
  650. package/src/cli/mcp/readiness-projection.ts +0 -2
  651. package/src/cli/mcp/redaction.ts +0 -2
  652. package/src/cli/mcp/repo.ts +0 -2
  653. package/src/cli/mcp/repository-tools.ts +0 -2
  654. package/src/cli/mcp/server.ts +0 -2
  655. package/src/cli/mcp/setup.ts +0 -2
  656. package/src/cli/mcp/tool-capability-cache.ts +0 -2
  657. package/src/cli/mcp/tool-contract.ts +0 -2
  658. package/src/cli/mcp/tools.ts +0 -2
  659. package/src/cli/mcp/toolset-names.ts +0 -2
  660. package/src/cli/mcp/toolset-selection.ts +0 -2
  661. package/src/cli/mcp/toolset.ts +0 -2
  662. package/src/cli/mcp/transports/http.ts +0 -2
  663. package/src/cli/mcp/transports/session-registry.ts +0 -2
  664. package/src/cli/mcp/transports/stdio.ts +0 -2
  665. package/src/cli/mcp/types.ts +0 -2
  666. package/src/cli/mcp/umbrella-tools.ts +0 -2
  667. package/src/cli/tools/codegraph.ts +0 -695
  668. package/src/core/adoption/helper-wrapper-plan.ts +0 -159
  669. package/src/runtime/context/codegraph-cache-boundary.ts +0 -255
  670. package/src/runtime/context/codegraph-read-provider.ts +0 -611
  671. package/src/runtime/context/codegraph-sidecar.cjs +0 -248
  672. package/src/runtime/control-plane/codegraph-cache-retention.ts +0 -164
  673. package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +0 -169
  674. package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +0 -85
  675. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +0 -655
  676. package/src/runtime/control-plane/execution/work-finalization-service.ts +0 -2850
  677. package/src/runtime/control-plane/execution/work-path-scope.ts +0 -37
  678. package/src/runtime/control-plane/execution/work-task-receipt.ts +0 -468
  679. package/src/runtime/control-plane/facade/controller-round-relay.ts +0 -3
  680. package/src/runtime/control-plane/facade/work-admission-policy.ts +0 -142
  681. package/src/runtime/control-plane/facade/work-implementation-review.ts +0 -2
  682. package/src/runtime/control-plane/facade/work-state-machine.ts +0 -2
  683. package/src/runtime/control-plane/facade/work-task-projection.ts +0 -66
  684. package/src/runtime/control-plane/routing/index.ts +0 -1
  685. package/src/runtime/control-plane/routing/route-policy.ts +0 -401
  686. package/src/runtime/control-plane/routing/workspace-admission.ts +0 -70
  687. package/src/runtime/gateway/mcp/execution-tools.ts +0 -2
  688. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +0 -2
  689. package/src/runtime/gateway/mcp/persisted-check-process.ts +0 -2
  690. package/src/runtime/gateway/mcp/process-tools.ts +0 -2
  691. package/src/runtime/gateway/mcp/router.ts +0 -2
  692. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +0 -2
  693. package/src/runtime/gateway/mcp/runtime-tools.ts +0 -2
  694. package/src/runtime/gateway/mcp/work-validation-reconciler.ts +0 -2
  695. package/src/runtime/plugins/browser-provider-registry.ts +0 -2
@@ -1,6 +1,5 @@
1
1
  import { randomBytes } from "crypto";
2
2
  import { readFileSync } from "fs";
3
- import { spawn } from "child_process";
4
3
  import { createServer, type Server } from "http";
5
4
  import express, {
6
5
  type NextFunction,
@@ -36,11 +35,6 @@ import {
36
35
  } from "../controller/issue-store";
37
36
  import { readTaskRunEvidence } from "../controller/run-evidence";
38
37
  import { resolveEffectiveTaskState } from "../controller/task-status-resolver";
39
- import {
40
- getControllerTimeline,
41
- getProjectProgress,
42
- getTaskProgressDetail,
43
- } from "../controller/progress";
44
38
  import { buildControllerTaskLedgerProjection } from "../controller/task-ledger";
45
39
  import { buildControllerOperationalPlan } from "../controller/operational-plan";
46
40
  import { exportControllerWorklog, listControllerWorklogEvents, parseWorklogCategory } from "../controller/worklog";
@@ -73,8 +67,6 @@ import {
73
67
  rollbackEditSession,
74
68
  verifyEditSession,
75
69
  } from "../editing/edit-session";
76
- import { localBridgeDashboardHtml } from "./dashboard";
77
- import { readConsoleAsset, type ConsoleAssetName } from "./console-assets";
78
70
  import { applyConsoleAutomationAction, listConsoleAutomations, summarizeConsoleAutomations } from "./console-automations";
79
71
  import {
80
72
  ackConsoleHandoff,
@@ -89,21 +81,17 @@ import {
89
81
  getConsolePlugin,
90
82
  listConsolePlugins,
91
83
  toConsoleOperationFeedback,
92
- continueConsoleWork,
93
84
  delegateConsoleWork,
94
85
  dismissConsoleHandoff,
95
- finalizeConsoleWork,
96
86
  getConsoleHandoff,
97
87
  getConsoleWork,
98
88
  listConsoleHandoffs,
99
89
  listConsoleWork,
100
90
  mapRepositoryCard,
101
- previewExecutionMode,
102
91
  repairConsole,
103
92
  resolveConsoleHandoff,
104
93
  setConsoleAccessPolicy,
105
94
  startConsoleWork,
106
- stopConsoleWork,
107
95
  verifyConsoleWork,
108
96
  } from "./facade-api";
109
97
  import {
@@ -113,7 +101,7 @@ import {
113
101
  forgeToolSurfaceFingerprint,
114
102
  defaultLocalAgentRunners,
115
103
  } from "../controller/runtime-config";
116
- import { taskExecutionPolicy, taskWriteScopesConflict } from "../controller/execution-policy";
104
+ import { taskWriteScopesConflict } from "../controller/execution-policy";
117
105
  import { continueTaskAfterSuccessfulRun } from "../controller/execution-completion";
118
106
  import { applyCompletionDecision, completionDecisionQueues, finishCompletionBacklog, inspectCompletionBacklog } from "../controller/completion-backlog";
119
107
  import { finishEditSession, finishTaskRun } from "../controller/completion-orchestrator";
@@ -158,7 +146,6 @@ export interface LocalBridgeServerOptions {
158
146
  defaultRepoId?: string;
159
147
  host?: string;
160
148
  port?: number;
161
- openBrowser?: boolean;
162
149
  token?: string;
163
150
  allowLanMobileIntents?: boolean;
164
151
  mode?: "standalone" | "embedded" | "remote" | "disabled" | "unknown";
@@ -218,22 +205,6 @@ function cookieValue(request: Request, name: string): string | undefined {
218
205
  return undefined;
219
206
  }
220
207
 
221
- function openUrl(url: string): void {
222
- const command =
223
- process.platform === "darwin"
224
- ? "open"
225
- : process.platform === "win32"
226
- ? "cmd"
227
- : "xdg-open";
228
- const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
229
- try {
230
- const child = spawn(command, args, { detached: true, stdio: "ignore" });
231
- child.unref();
232
- } catch (_error) {
233
- // The URL is still printed by the caller when a desktop opener is unavailable.
234
- }
235
- }
236
-
237
208
  function errorMessage(error: unknown): string {
238
209
  return error instanceof Error ? error.message : String(error);
239
210
  }
@@ -263,6 +234,15 @@ function legacyControlPlaneMutationRetiredPayload(): Record<string, unknown> {
263
234
  };
264
235
  }
265
236
 
237
+ function legacyProgressProjectionRetiredPayload(): Record<string, unknown> {
238
+ return {
239
+ error: "LEGACY_PROGRESS_PROJECTION_RETIRED",
240
+ message: "Legacy Issue/Task progress projections were retired with the Local Bridge web UI. Use Requirement, Plan, Work and execution evidence APIs.",
241
+ authority: "controller-home-sqlite",
242
+ deprecated: true,
243
+ };
244
+ }
245
+
266
246
  function queryString(value: unknown): string | undefined {
267
247
  return typeof value === "string" && value.trim() ? value.trim() : undefined;
268
248
  }
@@ -545,8 +525,7 @@ export function buildLocalControllerSnapshot(repoRoot: string) {
545
525
  projectState: loadControllerProjectState(repoRoot),
546
526
  governance: inspectProjectGovernance(repoRoot),
547
527
  recovery,
548
- progress: getProjectProgress(repoRoot),
549
- timeline: getControllerTimeline(repoRoot, { limit: 40 }),
528
+ timeline: listControllerWorklogEvents(repoRoot, { limit: 40 }),
550
529
  githubPlugin: getGitHubPluginStatus(repoRoot),
551
530
  assistantPlugins,
552
531
  mobileIntents,
@@ -949,26 +928,6 @@ export async function startLocalBridgeServer(
949
928
  next();
950
929
  };
951
930
 
952
- app.get("/console-assets/:asset", (request, response) => {
953
- const asset = String(request.params.asset ?? "");
954
- if (asset !== "app.js" && asset !== "app.css") { response.status(404).end(); return; }
955
- response.setHeader("Cache-Control", "no-cache");
956
- response.type(asset.endsWith(".css") ? "text/css" : "application/javascript");
957
- response.send(readConsoleAsset(asset as ConsoleAssetName));
958
- });
959
-
960
- app.get("/", (_request, response) => {
961
- response.setHeader("Cache-Control", "no-store, max-age=0");
962
- response.setHeader("Pragma", "no-cache");
963
- response.setHeader("Expires", "0");
964
- response.setHeader("Referrer-Policy", "no-referrer");
965
- response.setHeader(
966
- "Set-Cookie",
967
- `${cookieName}=${encodeURIComponent(token)}; Path=/api; HttpOnly; SameSite=Strict`,
968
- );
969
- response.setHeader("Content-Type", "text/html; charset=utf-8");
970
- response.send(localBridgeDashboardHtml());
971
- });
972
931
  app.get("/health", (_request, response) => {
973
932
  const exposure = controllerExposureSnapshot(mcpExposureContext);
974
933
  const fingerprint = exposure.fingerprint;
@@ -1242,15 +1201,15 @@ export async function startLocalBridgeServer(
1242
1201
  repositoryName: repository.displayName,
1243
1202
  })),
1244
1203
  ).sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
1245
- const statusOf = (item: (typeof items)[number]) => String(item.advanced?.status ?? "");
1204
+ const stateOf = (item: (typeof items)[number]) => String(item.advanced?.state ?? "");
1246
1205
  response.json({
1247
1206
  schemaVersion: 1,
1248
1207
  generatedAt: new Date().toISOString(),
1249
1208
  summary: {
1250
1209
  total: items.length,
1251
- open: items.filter((item) => ["open", "running", "ready"].includes(statusOf(item))).length,
1252
- needsAttention: items.filter((item) => ["blocked", "failed"].includes(statusOf(item))).length,
1253
- completed: items.filter((item) => ["completed", "cancelled"].includes(statusOf(item))).length,
1210
+ open: items.filter((item) => stateOf(item) === "open").length,
1211
+ needsAttention: items.filter((item) => ["blocked", "failed", "needs_attention"].includes(item.phase)).length,
1212
+ completed: items.filter((item) => ["completed", "cancelled"].includes(stateOf(item))).length,
1254
1213
  },
1255
1214
  repositories: repositories.map((repository) => ({ repoId: repository.repoId, repositoryName: repository.displayName })),
1256
1215
  items,
@@ -1388,28 +1347,6 @@ export async function startLocalBridgeServer(
1388
1347
  }
1389
1348
  });
1390
1349
 
1391
- app.post("/api/console/mode-preview", (request, response) => {
1392
- try {
1393
- const body = request.body && typeof request.body === "object" && !Array.isArray(request.body)
1394
- ? request.body as Record<string, unknown>
1395
- : {};
1396
- const modePreview = previewExecutionMode({
1397
- objective: queryString(body.objective) ?? "",
1398
- expectedFiles: typeof body.expectedFiles === "number" ? body.expectedFiles : undefined,
1399
- expectedChangedLines: typeof body.expectedChangedLines === "number" ? body.expectedChangedLines : undefined,
1400
- scopeClear: body.scopeClear !== false,
1401
- requiresInvestigation: body.requiresInvestigation === true,
1402
- requiresLongRunningChecks: body.requiresLongRunningChecks === true,
1403
- requiresWorker: body.requiresWorker === true,
1404
- requiresApproval: body.requiresApproval === true,
1405
- destructive: body.destructive === true,
1406
- });
1407
- response.json({ modePreview });
1408
- } catch (error) {
1409
- response.status(400).json({ error: errorMessage(error) });
1410
- }
1411
- });
1412
-
1413
1350
  app.get("/api/console/inbox", (request, response) => {
1414
1351
  try {
1415
1352
  const status = queryString(request.query.status) === "all" ? "all"
@@ -1529,19 +1466,11 @@ export async function startLocalBridgeServer(
1529
1466
  acceptanceCriteria: Array.isArray(body.acceptanceCriteria) ? body.acceptanceCriteria.map(String) : undefined,
1530
1467
  allowedPaths: Array.isArray(body.allowedPaths) ? body.allowedPaths.map(String) : undefined,
1531
1468
  forbiddenPaths: Array.isArray(body.forbiddenPaths) ? body.forbiddenPaths.map(String) : undefined,
1532
- expectedFiles: typeof body.expectedFiles === "number" ? body.expectedFiles : undefined,
1533
- expectedChangedLines: typeof body.expectedChangedLines === "number" ? body.expectedChangedLines : undefined,
1534
1469
  scopeClear: body.scopeClear !== false,
1535
- requiresInvestigation: body.requiresInvestigation === true,
1536
- requiresLongRunningChecks: body.requiresLongRunningChecks === true,
1537
- requiresWorker: body.requiresWorker === true,
1538
1470
  requiresApproval: body.requiresApproval === true,
1539
1471
  destructive: body.destructive === true,
1540
1472
  accessMode: body.accessMode === 'full_access' ? 'full_access' : body.accessMode === 'request' ? 'request' : undefined,
1541
1473
  approvalConfirmed: body.approvalConfirmed === true,
1542
- forceMode: body.forceMode === "direct_control" || body.forceMode === "goal_workloop" || body.forceMode === "handoff_only"
1543
- ? body.forceMode
1544
- : undefined,
1545
1474
  checkIds: Array.isArray(body.checkIds) ? body.checkIds.map(String) : undefined,
1546
1475
  });
1547
1476
  const feedback = toConsoleOperationFeedback(result);
@@ -1560,18 +1489,6 @@ export async function startLocalBridgeServer(
1560
1489
  return { ...result, ...feedback, feedback };
1561
1490
  };
1562
1491
 
1563
- app.post("/api/console/work/continue", (request, response) => {
1564
- try {
1565
- const body = request.body && typeof request.body === "object" && !Array.isArray(request.body)
1566
- ? request.body as Record<string, unknown>
1567
- : {};
1568
- const result = continueConsoleWork(consoleCtx(request), queryString(body.workId) ?? "", queryString(body.note));
1569
- response.status(result.status === "not_found" ? 404 : result.status === "blocked" || result.status === "failed" ? 409 : 200).json(withFeedback(result));
1570
- } catch (error) {
1571
- response.status(400).json({ error: errorMessage(error) });
1572
- }
1573
- });
1574
-
1575
1492
  app.post("/api/console/work/verify", async (request, response) => {
1576
1493
  try {
1577
1494
  const body = request.body && typeof request.body === "object" && !Array.isArray(request.body)
@@ -1590,30 +1507,6 @@ export async function startLocalBridgeServer(
1590
1507
  }
1591
1508
  });
1592
1509
 
1593
- app.post("/api/console/work/finalize", (request, response) => {
1594
- try {
1595
- const body = request.body && typeof request.body === "object" && !Array.isArray(request.body)
1596
- ? request.body as Record<string, unknown>
1597
- : {};
1598
- const result = finalizeConsoleWork(consoleCtx(request), queryString(body.workId) ?? "");
1599
- response.status(result.status === "not_found" ? 404 : result.status === "failed" || result.status === "blocked" ? 409 : 200).json(withFeedback(result));
1600
- } catch (error) {
1601
- response.status(400).json({ error: errorMessage(error) });
1602
- }
1603
- });
1604
-
1605
- app.post("/api/console/work/stop", (request, response) => {
1606
- try {
1607
- const body = request.body && typeof request.body === "object" && !Array.isArray(request.body)
1608
- ? request.body as Record<string, unknown>
1609
- : {};
1610
- const result = stopConsoleWork(consoleCtx(request), queryString(body.workId) ?? "", queryString(body.reason));
1611
- response.status(result.status === "not_found" ? 404 : 200).json(withFeedback(result));
1612
- } catch (error) {
1613
- response.status(400).json({ error: errorMessage(error) });
1614
- }
1615
- });
1616
-
1617
1510
  app.post("/api/console/work/delegate", (request, response) => {
1618
1511
  try {
1619
1512
  const body = request.body && typeof request.body === "object" && !Array.isArray(request.body)
@@ -1890,13 +1783,6 @@ export async function startLocalBridgeServer(
1890
1783
  response.status(400).json({ error: errorMessage(error) });
1891
1784
  }
1892
1785
  });
1893
- app.get("/api/progress", (request, response) => {
1894
- try {
1895
- response.json(getProjectProgress(requestRepositoryRoot(request, options, controllerHome)));
1896
- } catch (error) {
1897
- response.status(400).json({ error: errorMessage(error) });
1898
- }
1899
- });
1900
1786
  app.get("/api/governance", (request, response) => {
1901
1787
  try {
1902
1788
  response.json(inspectProjectGovernance(requestRepositoryRoot(request, options, controllerHome)));
@@ -2007,6 +1893,12 @@ export async function startLocalBridgeServer(
2007
1893
  response.status(400).json({ error: errorMessage(error) });
2008
1894
  }
2009
1895
  });
1896
+ app.get("/api/progress", (_request, response) => {
1897
+ response.status(410).json(legacyProgressProjectionRetiredPayload());
1898
+ });
1899
+ app.get("/api/issues/:issueId/tasks/:taskId", (_request, response) => {
1900
+ response.status(410).json(legacyProgressProjectionRetiredPayload());
1901
+ });
2010
1902
  app.patch("/api/project-state", (request, response) => {
2011
1903
  try {
2012
1904
  const body = request.body ?? {};
@@ -2093,7 +1985,6 @@ export async function startLocalBridgeServer(
2093
1985
  response.json(issue);
2094
1986
  return;
2095
1987
  }
2096
- const policy = taskExecutionPolicy(task);
2097
1988
  const confirmAcceptance = request.body?.confirmAcceptance === true;
2098
1989
  const reviewer = queryString(request.body?.reviewer) ?? "local-controller-human";
2099
1990
  const latestRunId = task.runIds.at(-1);
@@ -2140,8 +2031,8 @@ export async function startLocalBridgeServer(
2140
2031
  return { checkId, ok: false, summary: errorMessage(error) };
2141
2032
  }
2142
2033
  }));
2143
- if (policy.requiresAcceptanceEvidence && !confirmAcceptance) {
2144
- throw new Error(`${policy.executionClass} requires explicit acceptance evidence when no successful Run is linked`);
2034
+ if (task.acceptanceCriteria.length > 0 && !confirmAcceptance) {
2035
+ throw new Error('Explicit Task acceptance criteria require acceptance evidence when no successful Run is linked');
2145
2036
  }
2146
2037
  const at = new Date().toISOString();
2147
2038
  response.json(recordTaskVerification(repoRoot, issue.id, task.id, {
@@ -2278,7 +2169,7 @@ export async function startLocalBridgeServer(
2278
2169
  app.get("/api/timeline", (request, response) => {
2279
2170
  try {
2280
2171
  response.json({
2281
- events: getControllerTimeline(requestRepositoryRoot(request, options, controllerHome), {
2172
+ events: listControllerWorklogEvents(requestRepositoryRoot(request, options, controllerHome), {
2282
2173
  category: parseWorklogCategory(queryString(request.query.category)),
2283
2174
  issueId: queryString(request.query.issueId),
2284
2175
  taskId: queryString(request.query.taskId),
@@ -2293,19 +2184,6 @@ export async function startLocalBridgeServer(
2293
2184
  response.status(400).json({ error: errorMessage(error) });
2294
2185
  }
2295
2186
  });
2296
- app.get("/api/issues/:issueId/tasks/:taskId", (request, response) => {
2297
- try {
2298
- response.json(
2299
- getTaskProgressDetail(
2300
- requestRepositoryRoot(request, options, controllerHome),
2301
- request.params.issueId,
2302
- request.params.taskId,
2303
- ),
2304
- );
2305
- } catch (error) {
2306
- response.status(404).json({ error: errorMessage(error) });
2307
- }
2308
- });
2309
2187
  app.post("/api/worklog/export", (request, response) => {
2310
2188
  try {
2311
2189
  response.json(
@@ -2703,7 +2581,6 @@ export async function startLocalBridgeServer(
2703
2581
  const port =
2704
2582
  typeof address === "object" && address ? address.port : requestedPort;
2705
2583
  const url = `http://${host === "::1" ? "[::1]" : host}:${port}/`;
2706
- if (options.openBrowser) openUrl(url);
2707
2584
  return {
2708
2585
  host,
2709
2586
  port,
@@ -167,7 +167,6 @@ export interface LocalBridgeConfig {
167
167
  version: 1;
168
168
  host?: string;
169
169
  port?: number;
170
- autoOpen?: boolean;
171
170
  /** Allow only authenticated /mobile/intent requests on a wildcard/LAN bind. */
172
171
  allowLanMobileIntents?: boolean;
173
172
  approvals?: Partial<Record<LocalBridgeJobAction, LocalBridgeApproval>>;
@@ -0,0 +1,74 @@
1
+ import {
2
+ mcpServiceOAuthTokenStoreFallbackPaths,
3
+ mcpServiceOAuthTokenStorePath,
4
+ } from '../../../adapters/mcp/auth';
5
+ import {
6
+ McpOAuthTokenStore,
7
+ type McpOAuthClientRetirementResult,
8
+ } from '../../../adapters/mcp/oauth';
9
+ import {
10
+ reconcilePluginCapabilityAuthorizations,
11
+ type ReconcilePluginCapabilityAuthorizationsResult,
12
+ } from '../../runtime/plugins/capability-authorization-grants';
13
+
14
+ export interface RetireMcpOAuthClientOptions {
15
+ now?: Date;
16
+ }
17
+
18
+ export interface RetireMcpOAuthClientResult {
19
+ clientId: string;
20
+ ownerScope: string;
21
+ oauth: McpOAuthClientRetirementResult;
22
+ capabilityAuthorizations: ReconcilePluginCapabilityAuthorizationsResult;
23
+ changed: boolean;
24
+ }
25
+
26
+ function requiredClientId(clientId: string): string {
27
+ const normalized = clientId.trim();
28
+ if (!normalized) throw new Error('MCP_OAUTH_CLIENT_ID_REQUIRED');
29
+ return normalized;
30
+ }
31
+
32
+ export function mcpOAuthClientOwnerScope(clientId: string): string {
33
+ return `mcp:oauth-client:${requiredClientId(clientId)}`;
34
+ }
35
+
36
+ /**
37
+ * Converge one retired MCP OAuth client across Forge's existing authorities.
38
+ *
39
+ * Ordering is deliberate and idempotent:
40
+ * 1. revoke credentials and remove the OAuth registration in the OAuth store;
41
+ * 2. once the client is absent from that authority, reclaim only its exact
42
+ * capability-grant owner scope while compacting already-dead grants.
43
+ *
44
+ * This is ordered convergence across two atomic stores, not a fabricated
45
+ * cross-file transaction. A failure in step 2 can be retried safely: step 1
46
+ * becomes a no-op and the exact retired owner is reconciled on the next call.
47
+ */
48
+ export function retireMcpOAuthClient(
49
+ controllerHome: string,
50
+ clientId: string,
51
+ options: RetireMcpOAuthClientOptions = {},
52
+ ): RetireMcpOAuthClientResult {
53
+ const normalizedClientId = requiredClientId(clientId);
54
+ const store = new McpOAuthTokenStore(
55
+ mcpServiceOAuthTokenStorePath(controllerHome),
56
+ mcpServiceOAuthTokenStoreFallbackPaths(controllerHome),
57
+ );
58
+ store.load();
59
+
60
+ const oauth = store.retireClient(normalizedClientId);
61
+ const ownerScope = mcpOAuthClientOwnerScope(normalizedClientId);
62
+ const capabilityAuthorizations = reconcilePluginCapabilityAuthorizations(controllerHome, {
63
+ retiredOwnerScopes: [ownerScope],
64
+ now: options.now,
65
+ });
66
+
67
+ return {
68
+ clientId: normalizedClientId,
69
+ ownerScope,
70
+ oauth,
71
+ capabilityAuthorizations,
72
+ changed: oauth.changed || capabilityAuthorizations.changed,
73
+ };
74
+ }
@@ -255,11 +255,6 @@ function readOnlyGitSegment(words: string[], _segment: string): boolean {
255
255
  return isReadOnlyGitCommand(words);
256
256
  }
257
257
 
258
- function isReadOnlyCodegraphCommand(words: string[]): boolean {
259
- const program = words[0]?.split(/[\\/]/).at(-1)?.toLowerCase();
260
- return program === 'codegraph' && words[1]?.toLowerCase() === 'status';
261
- }
262
-
263
258
  function githubCliApiMethod(words: string[]): string | undefined {
264
259
  for (let index = 2; index < words.length; index += 1) {
265
260
  const word = words[index]?.toLowerCase();
@@ -315,7 +310,6 @@ function isReadOnlySegment(segment: string): boolean {
315
310
  const program = words[0]?.toLowerCase();
316
311
  if (!program) return false;
317
312
  if (program === 'git') return readOnlyGitSegment(words, segment);
318
- if (isReadOnlyCodegraphCommand(words)) return true;
319
313
  if (program === 'curl') return isReadOnlyLoopbackCurl(words);
320
314
  if (program === 'sqlite3') return isSafeReadOnlySqliteSegment(segment);
321
315
  if (program === 'find') return !/(?:-delete|-exec|-execdir|-ok|-okdir)\b/.test(segment);
@@ -621,9 +615,6 @@ function classifyArgvCommand(
621
615
  if (program === 'git' && isReadOnlyGitCommand(argv)) {
622
616
  return { risk: 'readonly', confirmation: 'none', reasons: ['the argv command is a recognized repository-local read operation'] };
623
617
  }
624
- if (isReadOnlyCodegraphCommand(argv)) {
625
- return { risk: 'readonly', confirmation: 'none', reasons: ['CodeGraph status only observes the local semantic index'] };
626
- }
627
618
  if (program === 'curl' && isReadOnlyLoopbackCurl(argv)) {
628
619
  return { risk: 'readonly', confirmation: 'none', reasons: ['curl performs a read-only loopback HTTP observation without writing response data to disk'] };
629
620
  }
@@ -4,7 +4,7 @@ import { appendFileSync, existsSync, lstatSync, mkdirSync } from 'fs';
4
4
  import { dirname, join, relative, resolve } from 'path';
5
5
  import { capProcessOutput, redactProcessOutput } from '../../effects/process-runner';
6
6
  import { MAX_AGENT_TIMEOUT_MS, MIN_AGENT_TIMEOUT_MS } from '../controller/runtime-config';
7
- import { repositoryControllerRoot } from './controller-home';
7
+ import { scopedOperationRoot } from './controller-home';
8
8
  import {
9
9
  classifyRepositoryCommand,
10
10
  type RepositoryCommandAuthorization,
@@ -13,6 +13,8 @@ import {
13
13
  import {
14
14
  assertCommandPathOperandsStayInRepository,
15
15
  assertRepositoryCommandInputAllowed,
16
+ commandExecutionScopeKey,
17
+ type RepositoryCommandScopeTarget,
16
18
  type RepositoryCommandExternalPathUsage,
17
19
  resolveRepositoryCommandCwd,
18
20
  } from './command-scope';
@@ -22,7 +24,7 @@ import type { RepositoryRecord } from './types';
22
24
  import { readRepositoryAccessPolicy } from '../../runtime/control-plane/governance/access-policy';
23
25
  import { invalidateRepositoryReadCaches } from '../repository/inspector';
24
26
  import { assertResolvedAuthorization, decideAuthorization, type AuthorizationDecision } from '../../runtime/control-plane/governance/authorization';
25
- import { assertRuntimeMayWriteOrThrow } from '../../runtime/root/write-fence';
27
+ import { assertRuntimeMayWriteOrThrow, isRuntimeWriteFenceError } from '../../runtime/root/write-fence';
26
28
  import { commandEnvironment, runCanonicalCommand, type RepositoryCommandAsyncHooks, type SpawnCommandResult } from './command-process';
27
29
  import {
28
30
  changedSnapshotPaths,
@@ -77,11 +79,13 @@ export interface ExecuteRepositoryCommandInput {
77
79
  snapshotFingerprintTimeoutMs?: number;
78
80
  }
79
81
 
82
+ export type { RepositoryCommandScopeTarget as RepositoryCommandExecutionTarget };
83
+
80
84
 
81
85
  export interface RepositoryCommandExecution {
82
86
  status: 'preview' | 'approval_required' | 'executed';
83
87
  repoId: string;
84
- checkoutId: string;
88
+ checkoutId?: string;
85
89
  cwd: string;
86
90
  command: RepositoryCommandValue;
87
91
  classification: RepositoryCommandClassification;
@@ -170,7 +174,7 @@ function boundedSnapshotFingerprintPaths(
170
174
  }
171
175
 
172
176
  function approvalToken(
173
- repository: RepositoryRecord,
177
+ repository: RepositoryCommandScopeTarget,
174
178
  relativeCwd: string,
175
179
  command: RepositoryCommandValue,
176
180
  classification: RepositoryCommandClassification,
@@ -179,7 +183,7 @@ function approvalToken(
179
183
  ): string {
180
184
  return createHash('sha256').update(JSON.stringify({
181
185
  version: 2,
182
- repoId: repository.repoId,
186
+ repoId: commandExecutionScopeKey(repository),
183
187
  checkoutId: repository.activeCheckoutId,
184
188
  cwd: relativeCwd,
185
189
  command,
@@ -190,7 +194,7 @@ function approvalToken(
190
194
  }
191
195
 
192
196
  function finalizePreparedExecution(
193
- repository: RepositoryRecord,
197
+ repository: RepositoryCommandScopeTarget,
194
198
  input: ExecuteRepositoryCommandInput,
195
199
  controllerHome: string | undefined,
196
200
  root: string,
@@ -213,7 +217,7 @@ function finalizePreparedExecution(
213
217
  } {
214
218
  const commandForPersistence = commandValue(command);
215
219
  const token = approvalToken(repository, relativeCwd, commandForPersistence, classification, before, externalPathUsages);
216
- const permission = controllerHome ? readRepositoryAccessPolicy(controllerHome, repository.repoId) : undefined;
220
+ const permission = controllerHome ? readRepositoryAccessPolicy(controllerHome, commandExecutionScopeKey(repository)) : undefined;
217
221
  const isGit = command.kind === 'argv'
218
222
  ? command.executable?.split(/[\\/]/).at(-1)?.toLowerCase() === 'git'
219
223
  : /^\s*git\s+/i.test(command.shellCommand!);
@@ -226,8 +230,8 @@ function finalizePreparedExecution(
226
230
  controllerHome,
227
231
  accessMode: permission?.mode ?? 'request',
228
232
  risk,
229
- repositoryId: repository.repoId,
230
- currentRepositoryId: repository.repoId,
233
+ repositoryId: commandExecutionScopeKey(repository),
234
+ currentRepositoryId: commandExecutionScopeKey(repository),
231
235
  permissionSnapshotVersion: permission?.revision ?? 1,
232
236
  approvalToken: token,
233
237
  command: commandForPersistence,
@@ -237,14 +241,14 @@ function finalizePreparedExecution(
237
241
  ...(input.workId ? { workId: input.workId, boundWorkId: input.workId } : {}),
238
242
  }) : undefined);
239
243
  const resolved = controllerHome && input.approvalRequestId
240
- ? assertResolvedAuthorization({ controllerHome, repositoryId: repository.repoId, approvalRequestId: input.approvalRequestId, sessionId: input.sessionId, principalId: input.principalId, workId: input.workId, permissionSnapshotVersion: permission?.revision ?? 1, command: commandForPersistence })
244
+ ? assertResolvedAuthorization({ controllerHome, repositoryId: commandExecutionScopeKey(repository), approvalRequestId: input.approvalRequestId, sessionId: input.sessionId, principalId: input.principalId, workId: input.workId, permissionSnapshotVersion: permission?.revision ?? 1, command: commandForPersistence })
241
245
  : undefined;
242
246
  const effectiveDecision: AuthorizationDecision | undefined = resolved
243
247
  ? { decision: 'allow', source: 'user_confirmation', reason: 'Resolved approval request matches the exact command and current permission snapshot.' }
244
248
  : delegated;
245
249
  const execution: RepositoryCommandExecution = {
246
250
  status: input.dryRun === true ? 'preview' : 'approval_required',
247
- repoId: repository.repoId,
251
+ repoId: commandExecutionScopeKey(repository),
248
252
  checkoutId: repository.activeCheckoutId,
249
253
  cwd: relativeCwd,
250
254
  command: commandForPersistence,
@@ -277,7 +281,7 @@ function finalizePreparedExecution(
277
281
  }
278
282
 
279
283
  function prepareRepositoryCommandExecution(
280
- repository: RepositoryRecord,
284
+ repository: RepositoryCommandScopeTarget,
281
285
  input: ExecuteRepositoryCommandInput,
282
286
  controllerHome?: string,
283
287
  ): {
@@ -298,7 +302,7 @@ function prepareRepositoryCommandExecution(
298
302
  const externalGrants = loadExternalFilesystemGrants(root).grants;
299
303
  const externalPathUsages = assertCommandPathOperandsStayInRepository(command, cwd, root, externalGrants, {
300
304
  controllerHome,
301
- repositoryId: repository.repoId,
305
+ repositoryId: commandExecutionScopeKey(repository),
302
306
  });
303
307
  const classification = classifyRepositoryCommand(command, repository.defaultBranch);
304
308
  const before = input.reuseSnapshot ?? (input.allowNonGitWorkspace ? emptyWorkspaceSnapshot() : repositorySnapshot(root));
@@ -317,7 +321,7 @@ function prepareRepositoryCommandExecution(
317
321
  }
318
322
 
319
323
  async function prepareRepositoryCommandExecutionAsync(
320
- repository: RepositoryRecord,
324
+ repository: RepositoryCommandScopeTarget,
321
325
  input: ExecuteRepositoryCommandInput,
322
326
  controllerHome?: string,
323
327
  mode: 'standard' | 'readonly_direct' = 'standard',
@@ -339,7 +343,7 @@ async function prepareRepositoryCommandExecutionAsync(
339
343
  const externalGrants = loadExternalFilesystemGrants(root).grants;
340
344
  const externalPathUsages = assertCommandPathOperandsStayInRepository(command, cwd, root, externalGrants, {
341
345
  controllerHome,
342
- repositoryId: repository.repoId,
346
+ repositoryId: commandExecutionScopeKey(repository),
343
347
  });
344
348
  const classification = classifyRepositoryCommand(command, repository.defaultBranch);
345
349
  if (mode === 'readonly_direct' && classification.risk !== 'readonly') {
@@ -373,7 +377,7 @@ async function prepareRepositoryCommandExecutionAsync(
373
377
  }
374
378
 
375
379
  export function previewRepositoryCommandExecution(
376
- repository: RepositoryRecord,
380
+ repository: RepositoryCommandScopeTarget,
377
381
  input: ExecuteRepositoryCommandInput,
378
382
  controllerHome?: string,
379
383
  ): PreparedRepositoryCommandExecution {
@@ -387,7 +391,7 @@ export function previewRepositoryCommandExecution(
387
391
 
388
392
  /** Async preview — preferred on Fast Path to avoid blocking Gateway with sync git snapshots. */
389
393
  export async function previewRepositoryCommandExecutionAsync(
390
- repository: RepositoryRecord,
394
+ repository: RepositoryCommandScopeTarget,
391
395
  input: ExecuteRepositoryCommandInput,
392
396
  controllerHome?: string,
393
397
  ): Promise<PreparedRepositoryCommandExecution> {
@@ -401,10 +405,12 @@ export async function previewRepositoryCommandExecutionAsync(
401
405
 
402
406
  function auditCommand(
403
407
  controllerHome: string,
404
- repository: RepositoryRecord,
408
+ repository: RepositoryCommandScopeTarget,
405
409
  execution: RepositoryCommandExecution,
406
410
  ): void {
407
- const path = join(repositoryControllerRoot(controllerHome, repository.repoId), 'audit', 'commands.jsonl');
411
+ // A workspace target has no repository semantics; its command audit belongs to
412
+ // the workspace partition, not a synthetic repository partition.
413
+ const path = join(scopedOperationRoot(controllerHome, commandExecutionScopeKey(repository)), 'audit', 'commands.jsonl');
408
414
  mkdirSync(dirname(path), { recursive: true });
409
415
  appendFileSync(path, `${JSON.stringify({
410
416
  timestamp: new Date().toISOString(),
@@ -416,7 +422,7 @@ function auditCommand(
416
422
 
417
423
  export function executeRepositoryCommand(
418
424
  controllerHome: string,
419
- repository: RepositoryRecord,
425
+ repository: RepositoryCommandScopeTarget,
420
426
  input: ExecuteRepositoryCommandInput,
421
427
  ): RepositoryCommandExecution {
422
428
  const prepared = prepareRepositoryCommandExecution(repository, input, controllerHome);
@@ -439,7 +445,7 @@ export function executeRepositoryCommand(
439
445
  try {
440
446
  assertRuntimeMayWriteOrThrow('remote_side_effect', controllerHome);
441
447
  } catch (error) {
442
- if (error instanceof Error && error.message.startsWith('WRITER_FENCED:')) throw error;
448
+ if (isRuntimeWriteFenceError(error)) throw error;
443
449
  /* unbound legacy */
444
450
  }
445
451
  }
@@ -499,7 +505,7 @@ export function executeRepositoryCommand(
499
505
  * mutation snapshot or Controller write state, Process records, Leases, Jobs or receipts.
500
506
  */
501
507
  export async function executeRepositoryReadOnlyCommandDirect(
502
- repository: RepositoryRecord,
508
+ repository: RepositoryCommandScopeTarget,
503
509
  input: ExecuteRepositoryCommandInput,
504
510
  ): Promise<RepositoryCommandExecution> {
505
511
  const prepared = await prepareRepositoryCommandExecutionAsync(
@@ -564,7 +570,7 @@ export async function executeRepositoryReadOnlyCommandDirect(
564
570
 
565
571
  export async function executeRepositoryCommandAsync(
566
572
  controllerHome: string,
567
- repository: RepositoryRecord,
573
+ repository: RepositoryCommandScopeTarget,
568
574
  input: ExecuteRepositoryCommandInput,
569
575
  hooks: RepositoryCommandAsyncHooks = {},
570
576
  ): Promise<RepositoryCommandExecution> {