@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
@@ -16,10 +16,13 @@ import { resolveGitExecutable } from '../../effects/git-executable';
16
16
  import { runProcess } from '../../effects/process-runner';
17
17
  import { repositoryChildProcessEnvironment, resolveBunExecutable } from '../shared/process-environment';
18
18
  import { readJsonFile, writeJsonAtomic } from '../shared/json-files';
19
+ import { ensureForgeInstanceIdentity, getOwnedResource, ownedResourceLocatorFingerprint, recordOwnedResource, type OwnedResourceLocator } from '../../../packages/kernel/identity/api/index';
19
20
 
20
21
  export interface EnsureManagedWorkspaceInput {
21
22
  requestId: string;
22
23
  title: string;
24
+ /** Semantic Work provenance for durable ownership; never an execution mutex. */
25
+ associatedWorkId?: string;
23
26
  baseRef?: string;
24
27
  branchName?: string;
25
28
  /** Explicitly materialize lockfile-backed Node dependencies in this isolated worktree. */
@@ -65,6 +68,21 @@ function suffix(repoId: string, requestId: string): string {
65
68
  return createHash('sha256').update(`${repoId}:${requestId}`).digest('hex').slice(0, 12);
66
69
  }
67
70
 
71
+ export function managedWorkspaceOwnedResourceId(repoId: string, checkoutId: string): string {
72
+ return `managed-worktree:${repoId}:${checkoutId}`;
73
+ }
74
+
75
+ export function managedBranchOwnedResourceId(repoId: string, checkoutId: string): string {
76
+ return `managed-branch:${repoId}:${checkoutId}`;
77
+ }
78
+
79
+ export function managedBranchOwnedResourceLocator(repositoryRoot: string, checkoutId: string, branch: string): OwnedResourceLocator {
80
+ return {
81
+ kind: 'git_ref',
82
+ value: `${realpathSync(repositoryRoot)}\0${checkoutId.trim()}\0refs/heads/${branch.trim()}`,
83
+ };
84
+ }
85
+
68
86
  function git(root: string, args: string[], timeoutMs = 30_000): string {
69
87
  const result = runProcess(resolveGitExecutable(), ['-C', root, ...args], {
70
88
  timeoutMs,
@@ -385,6 +403,10 @@ export function ensureManagedWorkspace(
385
403
  throw new Error(`MANAGED_WORKSPACE_REQUEST_CONFLICT: ${requestId}`);
386
404
  }
387
405
  const branch = manifest?.branch ?? requestedBranch;
406
+ // Persisted manifests are Forge provenance. Without one, an already-existing
407
+ // branch/worktree is never adopted as cleanup-owned merely because its name/path matches.
408
+ let workspaceOwnedByForge = Boolean(manifest);
409
+ let branchOwnedByForge = Boolean(manifest);
388
410
  // Persisted manifests are authoritative evidence; never move an active worktree in place.
389
411
  const path = manifest?.path ? resolve(manifest.path) : requestedPath;
390
412
  const baseRevision = manifest?.baseRevision ?? git(sourceRoot, ['rev-parse', '--verify', `${requestedBaseRef}^{commit}`]);
@@ -396,8 +418,11 @@ export function ensureManagedWorkspace(
396
418
  // A daemon crash may leave stale worktree administration behind even after the directory is gone.
397
419
  git(sourceRoot, ['worktree', 'prune', '--expire', 'now'], 120_000);
398
420
  git(sourceRoot, ['worktree', 'add', path, branch], 120_000);
421
+ workspaceOwnedByForge = true;
399
422
  } else {
400
423
  git(sourceRoot, ['worktree', 'add', '-b', branch, path, baseRevision], 120_000);
424
+ workspaceOwnedByForge = true;
425
+ branchOwnedByForge = true;
401
426
  }
402
427
  }
403
428
  if (!repositoryCheckoutRootMatches(repository, path)) {
@@ -425,6 +450,38 @@ export function ensureManagedWorkspace(
425
450
  );
426
451
  if (!checkout) throw new Error(`MANAGED_WORKSPACE_CHECKOUT_NOT_REGISTERED: ${path}`);
427
452
  const selected = selectRepositoryCheckout(record, checkout.checkoutId);
453
+ const ownerForgeInstanceId = ensureForgeInstanceIdentity({ controllerHome }).instanceId;
454
+ const workspaceResourceId = managedWorkspaceOwnedResourceId(repository.repoId, checkout.checkoutId);
455
+ const branchResourceId = managedBranchOwnedResourceId(repository.repoId, checkout.checkoutId);
456
+ const existingWorkspaceResource = getOwnedResource(controllerHome, workspaceResourceId);
457
+ const existingBranchResource = getOwnedResource(controllerHome, branchResourceId);
458
+ if (existingWorkspaceResource?.cleanupCapable === false) workspaceOwnedByForge = false;
459
+ if (existingBranchResource?.cleanupCapable === false) branchOwnedByForge = false;
460
+ recordOwnedResource(controllerHome, {
461
+ resourceId: workspaceResourceId,
462
+ kind: 'worktree',
463
+ targetRef: selected.canonicalRoot,
464
+ cleanupCapable: workspaceOwnedByForge,
465
+ creator: 'forge:managed-workspace',
466
+ ownerForgeInstanceId,
467
+ associatedWorkId: input.associatedWorkId,
468
+ repoId: repository.repoId,
469
+ retentionIntent: 'temporary',
470
+ });
471
+ const branchLocator = managedBranchOwnedResourceLocator(repository.canonicalRoot, checkout.checkoutId, branch);
472
+ recordOwnedResource(controllerHome, {
473
+ resourceId: branchResourceId,
474
+ kind: 'git_branch',
475
+ targetRef: branch,
476
+ locator: branchLocator,
477
+ identityFingerprint: ownedResourceLocatorFingerprint(ownerForgeInstanceId, branchLocator),
478
+ cleanupCapable: branchOwnedByForge,
479
+ creator: 'forge:managed-workspace',
480
+ ownerForgeInstanceId,
481
+ associatedWorkId: input.associatedWorkId,
482
+ repoId: repository.repoId,
483
+ retentionIntent: 'retain_on_failure',
484
+ });
428
485
  if (!manifest) {
429
486
  writeJsonAtomic(statePath, {
430
487
  schemaVersion: 1,
@@ -153,7 +153,7 @@ export async function runCheckViaProcessRuntime(
153
153
  check,
154
154
  durable: {
155
155
  reason: 'multi_phase_or_release_check_requires_durable_workflow',
156
- suggestedOperation: 'Claim the related WorkContract and run this check through an external Controller.',
156
+ suggestedOperation: 'Run this check through a Work-bound durable verification workflow.',
157
157
  },
158
158
  durableSideEffects: emptyEffects,
159
159
  };
@@ -1,6 +1,6 @@
1
1
  import { existsSync, lstatSync, opendirSync, statSync, unlinkSync } from 'fs';
2
2
  import { join, relative } from 'path';
3
- import { isTerminalWorkContractStatus, type WorkContract } from '../../../../packages/kernel/work/api/index';
3
+ import { isTerminalSemanticWorkState, type WorkContract } from '../../../../packages/kernel/work/api/index';
4
4
  import { listControlPlaneRecords } from '../../control-plane/persistence/sqlite-store';
5
5
  import { processLogDir } from './store';
6
6
  import { readPersistedCheckResultReceipt } from './check-result';
@@ -50,7 +50,7 @@ export function cleanupPersistedCheckResults(
50
50
  }
51
51
  for (const record of workRecords) {
52
52
  const work = record.value;
53
- if (isTerminalWorkContractStatus(work.status)) continue;
53
+ if (isTerminalSemanticWorkState(work.semanticState)) continue;
54
54
  for (const verification of work.checkRefs ?? []) {
55
55
  const key = verification.receipt?.checkCacheKey?.trim();
56
56
  if (key) protectedCacheKeys.add(key);
@@ -3,6 +3,7 @@ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from '
3
3
  import { dirname, join } from 'path';
4
4
  import { processLogDir } from './store';
5
5
  import type { ManagedProcessRecord } from './types';
6
+ import type { ProcessCheckCompletionReceipt } from './check-receipt';
6
7
 
7
8
  export const STRUCTURED_CHECK_RESULT_PATH_ENV = 'FORGE_CHECK_STRUCTURED_RESULT_PATH';
8
9
  export const MAX_STRUCTURED_CHECK_FAILURE_DETAILS = 32;
@@ -110,7 +111,17 @@ export function readPersistedCheckResultReceipt(path: string | undefined): Persi
110
111
  if (!path || !existsSync(path)) return undefined;
111
112
  try {
112
113
  const value = JSON.parse(readFileSync(path, 'utf8')) as PersistedCheckResultReceipt;
113
- if (value?.schemaVersion !== 1 || typeof value.receiptId !== 'string' || typeof value.cacheKey !== 'string') return undefined;
114
+ if (
115
+ value?.schemaVersion !== 1
116
+ || typeof value.receiptId !== 'string'
117
+ || typeof value.checkId !== 'string'
118
+ || typeof value.cacheKey !== 'string'
119
+ || typeof value.ok !== 'boolean'
120
+ || typeof value.status !== 'number'
121
+ || typeof value.timedOut !== 'boolean'
122
+ || typeof value.executedAt !== 'string'
123
+ || (value.failureClass !== undefined && value.failureClass !== 'acceptance_failure' && value.failureClass !== 'infrastructure_failure')
124
+ ) return undefined;
114
125
  if (value.failureEvidence !== undefined && !isStructuredCheckFailureEvidence(value.failureEvidence)) return undefined;
115
126
  return value;
116
127
  } catch {
@@ -128,6 +139,9 @@ export interface PersistedCheckTerminalEvidence {
128
139
  state: PersistedCheckTerminalEvidenceState;
129
140
  failureClass?: PersistedCheckResultReceipt['failureClass'];
130
141
  failureEvidence?: StructuredCheckFailureEvidence;
142
+ semanticOk?: boolean;
143
+ semanticStatus?: number;
144
+ semanticTimedOut?: boolean;
131
145
  warning?: string;
132
146
  infrastructureReason?: string;
133
147
  }
@@ -173,6 +187,9 @@ export function classifyTerminalCheckEvidence(
173
187
  */
174
188
  export interface LegacyCheckEvidenceLike {
175
189
  cacheKey?: string;
190
+ ok?: boolean;
191
+ status?: number;
192
+ timedOut?: boolean;
176
193
  failureClass?: PersistedCheckResultReceipt['failureClass'];
177
194
  failureEvidence?: StructuredCheckFailureEvidence;
178
195
  }
@@ -207,6 +224,93 @@ export function classifyPersistedCheckTerminalEvidence(
207
224
  ...classified,
208
225
  failureClass: structuredMatches ? structured?.failureClass : legacy?.failureClass,
209
226
  failureEvidence: structuredMatches ? structured?.failureEvidence : legacy?.failureEvidence,
227
+ semanticOk: structuredMatches ? structured?.ok : legacy?.ok,
228
+ semanticStatus: structuredMatches ? structured?.status : legacy?.status,
229
+ semanticTimedOut: structuredMatches ? structured?.timedOut : legacy?.timedOut,
210
230
  }
211
231
  : classified;
212
232
  }
233
+
234
+ export type TerminalCheckVerificationOutcome = 'valid_pass' | 'valid_fail' | 'infrastructure_failure';
235
+
236
+ export interface TerminalCheckVerificationProjection {
237
+ outcome: TerminalCheckVerificationOutcome;
238
+ failureClass?: 'acceptance_failure' | 'infrastructure_failure';
239
+ isAcceptanceFailure: boolean;
240
+ isInfrastructureIssue: boolean;
241
+ boundedStatus: 'pass' | 'fail' | 'infrastructure_failure';
242
+ evidence: PersistedCheckTerminalEvidence;
243
+ infrastructureReason?: string;
244
+ }
245
+
246
+ /**
247
+ * Canonical Failure Contract projection from one exact terminal Check Process
248
+ * plus its semantic Check-result evidence into Work verification truth.
249
+ * Process exit state is necessary evidence, but never acceptance authority by
250
+ * itself. Missing, mismatched, interrupted, infrastructure, or contradictory
251
+ * evidence fails closed as infrastructure_failure.
252
+ */
253
+ export function projectTerminalCheckVerification(
254
+ record: ManagedProcessRecord,
255
+ expectedCheckId: string,
256
+ receipt: ProcessCheckCompletionReceipt,
257
+ options: { legacyEvidence?: LegacyCheckEvidenceLike } = {},
258
+ ): TerminalCheckVerificationProjection {
259
+ const evidence = classifyPersistedCheckTerminalEvidence(record, expectedCheckId, options);
260
+ const semanticContradiction = evidence.state === 'matched' && Boolean(
261
+ (evidence.semanticOk !== undefined && evidence.semanticOk !== receipt.ok)
262
+ || (evidence.semanticTimedOut !== undefined && evidence.semanticTimedOut !== receipt.timedOut)
263
+ || (evidence.semanticOk === true && evidence.semanticStatus !== undefined && evidence.semanticStatus !== 0)
264
+ || (evidence.semanticOk === false && evidence.semanticStatus === 0)
265
+ || (receipt.ok && evidence.failureClass !== undefined)
266
+ || (evidence.semanticOk === true && evidence.failureClass !== undefined)
267
+ || (!receipt.ok && evidence.failureClass === undefined)
268
+ || (evidence.semanticOk === false && evidence.failureClass === undefined)
269
+ );
270
+ const infrastructureReason = evidence.infrastructureReason
271
+ ?? (semanticContradiction ? 'terminal Check Process and semantic result evidence contradict each other' : undefined);
272
+ const infrastructure = receipt.timedOut
273
+ || receipt.cancelled
274
+ || evidence.state !== 'matched'
275
+ || semanticContradiction
276
+ || evidence.failureClass === 'infrastructure_failure';
277
+ if (infrastructure) {
278
+ return {
279
+ outcome: 'infrastructure_failure',
280
+ failureClass: 'infrastructure_failure',
281
+ isAcceptanceFailure: false,
282
+ isInfrastructureIssue: true,
283
+ boundedStatus: 'infrastructure_failure',
284
+ evidence,
285
+ ...(infrastructureReason ? { infrastructureReason } : {}),
286
+ };
287
+ }
288
+ if (receipt.ok) {
289
+ return {
290
+ outcome: 'valid_pass',
291
+ isAcceptanceFailure: false,
292
+ isInfrastructureIssue: false,
293
+ boundedStatus: 'pass',
294
+ evidence,
295
+ };
296
+ }
297
+ if (evidence.failureClass === 'acceptance_failure') {
298
+ return {
299
+ outcome: 'valid_fail',
300
+ failureClass: 'acceptance_failure',
301
+ isAcceptanceFailure: true,
302
+ isInfrastructureIssue: false,
303
+ boundedStatus: 'fail',
304
+ evidence,
305
+ };
306
+ }
307
+ return {
308
+ outcome: 'infrastructure_failure',
309
+ failureClass: 'infrastructure_failure',
310
+ isAcceptanceFailure: false,
311
+ isInfrastructureIssue: true,
312
+ boundedStatus: 'infrastructure_failure',
313
+ evidence,
314
+ infrastructureReason: 'terminal Check failure lacks explicit acceptance-failure evidence',
315
+ };
316
+ }
@@ -2,13 +2,8 @@
2
2
  import { createHash } from 'crypto';
3
3
  import { rmSync } from 'fs';
4
4
  import { resolve } from 'path';
5
- import {
6
- controllerCheckExecutionIdentity,
7
- runControllerCheckAsync,
8
- snapshotControllerCheck,
9
- type ControllerCheckSnapshot,
10
- } from '../../../cli/controller/check-runner';
11
- import { writePersistedCheckResultReceipt } from './check-result';
5
+ import type { ControllerCheckSnapshot } from '../../../cli/controller/check-runner';
6
+ import { materializeManagedWorkspaceDependencies } from '../managed-workspace';
12
7
  import { PROCESS_RUNTIME_RELEASE_CANARY_ARG } from './canary';
13
8
 
14
9
  interface ParsedArgs {
@@ -33,7 +28,6 @@ function requiredValue(argv: string[], flag: string): string {
33
28
  return value;
34
29
  }
35
30
 
36
-
37
31
  function decodeCheckSnapshot(value: string): ControllerCheckSnapshot {
38
32
  let decoded: unknown;
39
33
  try {
@@ -77,6 +71,22 @@ export async function runPersistedCheckSidecar(argv = process.argv.slice(2)): Pr
77
71
  const args = parseArgs(argv);
78
72
  const root = resolve(args.repo);
79
73
  try {
74
+ // A Work verification snapshot is disposable execution state. When exact
75
+ // canonical dependency reuse was unavailable during snapshot construction,
76
+ // establish the candidate's frozen dependency closure inside this Check
77
+ // Process before loading the candidate Check Runner module graph.
78
+ if (args.cleanupRoot && (!args.checkSnapshot || args.checkSnapshot.source === 'package-script')) {
79
+ materializeManagedWorkspaceDependencies(root);
80
+ }
81
+
82
+ const [
83
+ { controllerCheckExecutionIdentity, runControllerCheckAsync, snapshotControllerCheck },
84
+ { writePersistedCheckResultReceipt },
85
+ ] = await Promise.all([
86
+ import('../../../cli/controller/check-runner'),
87
+ import('./check-result'),
88
+ ]);
89
+
80
90
  // New callers carry the exact definition resolved from canonical repository
81
91
  // authority. The fallback keeps older package releases compatible.
82
92
  const snapshot = args.checkSnapshot ?? snapshotControllerCheck(root, args.checkId);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * repository_command_execute → three explicit execution lanes.
2
+ * execute_command → three explicit execution lanes.
3
3
  *
4
4
  * - Ephemeral Direct: bounded ordinary reads and commands that finish inside
5
5
  * the interactive budget.
@@ -8,7 +8,10 @@
8
8
  * - Durable: explicit Work/external/release boundaries only.
9
9
  */
10
10
 
11
- import type { RepositoryRecord } from '../../../cli/repositories/types';
11
+ import {
12
+ commandExecutionScopeKey,
13
+ type RepositoryCommandScopeTarget,
14
+ } from '../../../cli/repositories/command-scope';
12
15
  import { classifyRepositoryCommand, fixedShellWrapperCommand, shellSegments, shellWordsPreservingQuotes } from '../../../cli/repositories/command-classifier';
13
16
  import {
14
17
  executeRepositoryCommandAsync,
@@ -38,10 +41,12 @@ import {
38
41
  cancelLightweightProcess,
39
42
  getLightweightProcessHandle,
40
43
  isLightweightProcessId,
44
+ lightweightProcessScopeKey,
41
45
  readLightweightProcessLogs,
42
46
  startLightweightRepositoryCommand,
43
47
  waitForLightweightProcess,
44
48
  } from './lightweight-managed';
49
+ import { isForgeInstanceProcessScopeKey, processScopeKeyForHandle } from './process-scope';
45
50
 
46
51
  export type RepositoryCommandRoute =
47
52
  | 'process_direct'
@@ -51,7 +56,8 @@ export type RepositoryCommandRoute =
51
56
 
52
57
  export interface RepositoryCommandProcessInput {
53
58
  controllerHome: string;
54
- repository: RepositoryRecord;
59
+ /** Repository identity is optional: an arbitrary workspace target carries a workspace scope key. */
60
+ repository: RepositoryCommandScopeTarget;
55
61
  command: string | readonly string[];
56
62
  cwd?: string;
57
63
  timeoutMs?: number;
@@ -64,6 +70,8 @@ export interface RepositoryCommandProcessInput {
64
70
  requestId?: string;
65
71
  workId?: string;
66
72
  commandId?: string;
73
+ /** Authenticated principal recorded with the process handle for principal-bound attachment. */
74
+ principalId?: string;
67
75
  signal?: AbortSignal;
68
76
  /** Explicit unregistered local workspace authority; never inferred from cwd. */
69
77
  allowNonGitWorkspace?: boolean;
@@ -337,7 +345,7 @@ export async function executeRepositoryCommandViaProcessRuntime(
337
345
  durableSideEffects: emptyEffects,
338
346
  suggestedOperation: decision.reason === 'standalone_recovery_lifecycle_required'
339
347
  ? 'Use the standalone Forge Recovery connector for canonical Runtime/connector lifecycle operations.'
340
- : 'repository_command_execute via Durable Work / Local Job',
348
+ : 'execute_command via Durable Work / Local Job',
341
349
  externalEffect: decision.route === 'durable'
342
350
  ? {
343
351
  outcome: 'not_started',
@@ -353,9 +361,9 @@ export async function executeRepositoryCommandViaProcessRuntime(
353
361
  throw new Error('EXECUTION_IDENTITY_REQUIRED: repository command process path requires an immutable executionIdentity');
354
362
  }
355
363
  const executionIdentity = input.executionIdentity;
356
- if (executionIdentity.repositoryId !== input.repository.repoId) {
364
+ if (executionIdentity.repositoryId !== commandExecutionScopeKey(input.repository)) {
357
365
  throw new Error(
358
- `EXECUTION_IDENTITY_MISMATCH: repository ${input.repository.repoId} differs from identity ${executionIdentity.repositoryId}`,
366
+ `EXECUTION_IDENTITY_MISMATCH: repository ${commandExecutionScopeKey(input.repository)} differs from identity ${executionIdentity.repositoryId}`,
359
367
  );
360
368
  }
361
369
  if (executionIdentity.checkoutId !== input.repository.activeCheckoutId) {
@@ -376,13 +384,12 @@ export async function executeRepositoryCommandViaProcessRuntime(
376
384
  // immutable repository identity first, then execute through the authorized
377
385
  // non-persistent repository executor. Runtime/release durability is not a
378
386
  // command-execution tax.
379
- const canonicalCommand = normalizeRepositoryCommand(input.command);
380
387
  if (decision.route === 'process_direct') {
381
388
  assertExecutionIdentity({
382
389
  controllerHome: input.controllerHome,
383
390
  identity: executionIdentity,
384
391
  cwd,
385
- requestedRepoId: input.repository.repoId,
392
+ requestedRepoId: commandExecutionScopeKey(input.repository),
386
393
  requestedCheckoutId: input.repository.activeCheckoutId,
387
394
  });
388
395
  const directInput = {
@@ -395,8 +402,7 @@ export async function executeRepositoryCommandViaProcessRuntime(
395
402
  allowOpaqueLocalScript: decision.reason === 'lightweight_local_shell_wrapper'
396
403
  || decision.reason === 'lightweight_local_inline_interpreter',
397
404
  };
398
- const readonly = canonicalCommand.kind === 'argv'
399
- && classifyRepositoryCommand(input.command, input.repository.defaultBranch).risk === 'readonly';
405
+ const readonly = classifyRepositoryCommand(input.command, input.repository.defaultBranch).risk === 'readonly';
400
406
  if (!readonly) {
401
407
  const deferLongPreparation = decision.reason === 'ephemeral_local_build_or_test';
402
408
  const interactiveWaitMs = deferLongPreparation
@@ -419,6 +425,7 @@ export async function executeRepositoryCommandViaProcessRuntime(
419
425
  maxOutputBytes: input.maxOutputBytes,
420
426
  workId: input.workId,
421
427
  commandId: input.commandId ?? input.requestId,
428
+ ...(input.principalId ? { principalId: input.principalId } : {}),
422
429
  deferStart: deferLongPreparation,
423
430
  reuseActiveEquivalent: deferLongPreparation,
424
431
  onCompleted: (result) => {
@@ -427,7 +434,7 @@ export async function executeRepositoryCommandViaProcessRuntime(
427
434
  // evidence is unavailable. Finalization must keep failing closed until
428
435
  // a later authoritative repository inspection proves the new HEAD.
429
436
  if (result.evidenceError) return;
430
- settleWorkHandleExpectedHeadAfterRepositoryCommand({
437
+ const settlement = settleWorkHandleExpectedHeadAfterRepositoryCommand({
431
438
  controllerHome: input.controllerHome,
432
439
  repository: input.repository,
433
440
  executionIdentity,
@@ -436,6 +443,12 @@ export async function executeRepositoryCommandViaProcessRuntime(
436
443
  cancelled: result.cancelled,
437
444
  timedOut: result.timedOut,
438
445
  });
446
+ if (!settlement.settled && settlement.reason === 'concurrent_lifecycle_write') {
447
+ result.evidenceError = {
448
+ code: 'WORK_HEAD_SETTLEMENT_UNRESOLVED',
449
+ message: `Work ${input.workId ?? 'unknown'} repository command succeeded, but expectedHead settlement remained contested after bounded retry (${settlement.previousHead ?? 'unknown'} -> ${settlement.currentHead ?? 'unknown'}).`,
450
+ };
451
+ }
439
452
  },
440
453
  });
441
454
  const handle = lightweight.handle;
@@ -526,6 +539,7 @@ export async function executeRepositoryCommandViaProcessRuntime(
526
539
  repoId: executionIdentity.repositoryId,
527
540
  checkoutId: executionIdentity.checkoutId,
528
541
  executionIdentity,
542
+ ...(input.principalId ? { principalId: input.principalId } : {}),
529
543
  workId: input.workId,
530
544
  commandId: input.commandId,
531
545
  command: toProcessCommand(input.command, cwd),
@@ -536,7 +550,7 @@ export async function executeRepositoryCommandViaProcessRuntime(
536
550
  resourceClaims: toProcessClaims(claims),
537
551
  origin: {
538
552
  surface: 'command',
539
- toolName: 'repository_command_execute',
553
+ toolName: 'execute_command',
540
554
  requestId: input.requestId,
541
555
  correlationId: input.workId,
542
556
  },
@@ -563,40 +577,78 @@ export async function executeRepositoryCommandViaProcessRuntime(
563
577
  };
564
578
  }
565
579
 
566
- export function getRepositoryCommandProcess(controllerHome: string, repoId: string, processId: string): ProcessHandle | undefined {
567
- return isLightweightProcessId(processId)
568
- ? getLightweightProcessHandle(controllerHome, repoId, processId)
569
- : getProcessHandle(controllerHome, repoId, processId);
580
+ /**
581
+ * Resolve the canonical Process scope of one process handle.
582
+ *
583
+ * Explicit placement stays authoritative and is validated by the lane itself.
584
+ * When the caller omits it, this Runtime's own lightweight memory or the
585
+ * instance-level handle index supplies the recorded scope, so attachment never
586
+ * requires replaying the original placement inputs or scanning repositories.
587
+ */
588
+ function resolveCommandProcessScopeKey(
589
+ controllerHome: string,
590
+ repoId: string | undefined,
591
+ processId: string,
592
+ ): string | undefined {
593
+ const explicit = repoId?.trim();
594
+ if (explicit) return explicit;
595
+ if (isLightweightProcessId(processId)) {
596
+ const inMemory = lightweightProcessScopeKey(processId);
597
+ if (inMemory) return inMemory;
598
+ }
599
+ return processScopeKeyForHandle(controllerHome, processId);
570
600
  }
571
601
 
572
- export function waitRepositoryCommandProcess(
602
+ export function getRepositoryCommandProcess(
573
603
  controllerHome: string,
574
- repoId: string,
604
+ repoId: string | undefined,
605
+ processId: string,
606
+ ): ProcessHandle | undefined {
607
+ const scopeKey = resolveCommandProcessScopeKey(controllerHome, repoId, processId);
608
+ if (!scopeKey) return undefined;
609
+ if (!isLightweightProcessId(processId)) {
610
+ return getProcessHandle(controllerHome, scopeKey, processId);
611
+ }
612
+ return getLightweightProcessHandle(controllerHome, scopeKey, processId);
613
+ }
614
+
615
+ export async function waitRepositoryCommandProcess(
616
+ controllerHome: string,
617
+ repoId: string | undefined,
575
618
  processId: string,
576
619
  options?: Parameters<typeof waitForProcess>[3],
577
620
  ): Promise<ProcessHandle> {
578
- return isLightweightProcessId(processId)
579
- ? waitForLightweightProcess(controllerHome, repoId, processId, options)
580
- : waitForProcess(controllerHome, repoId, processId, options);
621
+ const scopeKey = resolveCommandProcessScopeKey(controllerHome, repoId, processId);
622
+ if (!scopeKey) throw new Error(`PROCESS_NOT_FOUND: ${processId}`);
623
+ if (!isLightweightProcessId(processId)) {
624
+ return waitForProcess(controllerHome, scopeKey, processId, options);
625
+ }
626
+ return waitForLightweightProcess(controllerHome, scopeKey, processId, options);
581
627
  }
582
628
 
583
- export function cancelRepositoryCommandProcess(
629
+ export async function cancelRepositoryCommandProcess(
584
630
  controllerHome: string,
585
- repoId: string,
631
+ repoId: string | undefined,
586
632
  processId: string,
587
633
  ): Promise<ProcessHandle> {
588
- return isLightweightProcessId(processId)
589
- ? cancelLightweightProcess(controllerHome, repoId, processId)
590
- : cancelProcess(controllerHome, repoId, processId);
634
+ const scopeKey = resolveCommandProcessScopeKey(controllerHome, repoId, processId);
635
+ if (!scopeKey) throw new Error(`PROCESS_NOT_FOUND: ${processId}`);
636
+ if (!isLightweightProcessId(processId)) {
637
+ return cancelProcess(controllerHome, scopeKey, processId);
638
+ }
639
+ return cancelLightweightProcess(controllerHome, scopeKey, processId);
591
640
  }
592
641
 
593
642
  export function readRepositoryCommandProcessLogs(
594
643
  controllerHome: string,
595
- repoId: string,
644
+ repoId: string | undefined,
596
645
  processId: string,
597
646
  maxBytes?: number,
598
647
  ) {
599
- return isLightweightProcessId(processId)
600
- ? readLightweightProcessLogs(controllerHome, repoId, processId, maxBytes)
601
- : readProcessLogs(controllerHome, repoId, processId, maxBytes);
648
+ const scopeKey = resolveCommandProcessScopeKey(controllerHome, repoId, processId);
649
+ if (!scopeKey) return undefined;
650
+ if (!isLightweightProcessId(processId)) {
651
+ return readProcessLogs(controllerHome, scopeKey, processId, maxBytes);
652
+ }
653
+ return readLightweightProcessLogs(controllerHome, scopeKey, processId, maxBytes);
602
654
  }
@@ -9,8 +9,9 @@
9
9
  import { existsSync, readFileSync, readdirSync, unlinkSync, statSync } from 'fs';
10
10
  import { join } from 'path';
11
11
  import { ensureRepositoryControllerLayout, repositoryControllerRoot } from '../../../cli/repositories/controller-home';
12
+ import { isRepositoryProcessScopeKey, processScopeRoot } from './process-scope';
12
13
  import { getProcessRecord, listActiveProcessIds } from './store';
13
- import { reconcileStaleManagedProcessForMaintenance } from './runtime';
14
+ import { reconcileStaleManagedProcessForMaintenance, releaseProcessLeasesOnce } from './runtime';
14
15
  import { isManagedProcessActive, type ProcessRuntimeStatus } from './types';
15
16
  import { assertRuntimeMayWrite } from '../../root/write-fence';
16
17
  import { isProcessAlive } from '../../shared/process-tree';
@@ -52,7 +53,12 @@ export interface ProcessGcResult {
52
53
  }
53
54
 
54
55
  function processesDir(controllerHome: string, repoId: string): string {
55
- return join(ensureRepositoryControllerLayout(controllerHome, repoId), 'processes');
56
+ // Repository scopes keep their per-repository layout; instance and workspace
57
+ // scopes own sibling partitions so their process records are still collected.
58
+ const root = isRepositoryProcessScopeKey(repoId)
59
+ ? ensureRepositoryControllerLayout(controllerHome, repoId)
60
+ : processScopeRoot(controllerHome, repoId);
61
+ return join(root, 'processes');
56
62
  }
57
63
 
58
64
  function logDir(controllerHome: string, repoId: string): string {
@@ -196,6 +202,13 @@ export function gcTerminalProcesses(options: ProcessGcOptions): ProcessGcResult
196
202
  }
197
203
  }
198
204
  if (!TERMINAL.has(metadata.status)) continue;
205
+ // Terminal evidence and lease cleanup are separate durable phases. A
206
+ // crash/fence between them must not leave a workspace lease immortal just
207
+ // because the terminal record is still inside the retention window.
208
+ const terminalRecord = getProcessRecord(options.controllerHome, options.repoId, processId);
209
+ if (terminalRecord?.terminalWritten === true && terminalRecord.leasesReleased !== true) {
210
+ releaseProcessLeasesOnce(options.controllerHome, options.repoId, processId);
211
+ }
199
212
  // Do not delete terminal evidence that has never been read when maxAge is not exceeded
200
213
  // unless we are strictly over maxTerminalRecords budget (handled by sort below).
201
214
  const finished = Date.parse(metadata.finishedAt ?? metadata.updatedAt ?? '');