@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,10 +1,12 @@
1
+ import { writeAtomicTextFile } from '../shared/atomic-text-file';
1
2
  import { randomUUID } from 'crypto';
2
- import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'fs';
3
+ import { existsSync, readFileSync, rmSync } from 'fs';
3
4
  import { setTimeout as sleep } from 'timers/promises';
4
5
  import { dirname, join, resolve } from 'path';
5
6
  import { resolveControllerHome } from '../../cli/repositories/controller-home';
6
7
  import { createPlatformServiceManagerHost, probeSystemdUserAvailable, type PlatformServiceManagerHost, type PlatformServiceManagerKind, type SystemdUserUnitInput } from '../platform/service-manager';
7
- import { RUNTIME_WRITE_CLAIM_ENV } from './write-fence';
8
+ import { reconcileRetiredForgePersistentServices, type ForgeRetiredServiceReconciliation } from '../platform/service-inventory';
9
+ import { runtimeAuthorityFreeEnvironment } from '../shared/process-environment';
8
10
  import {
9
11
  activeRuntimeEntrypoint,
10
12
  activeRuntimeLaunchSpec,
@@ -19,6 +21,7 @@ import { materializePackageRuntimeRelease, type PackageRuntimeRelease } from './
19
21
  import { readRuntimeReleaseAuthority, revertInitialRuntimeReleasePublication, rollbackRuntimeRelease } from './release-store';
20
22
  import { loadMcpServiceLocalConfig } from '../../../adapters/mcp/auth';
21
23
  import { ensurePackageConnectorService, type PackageConnectorServiceResult } from './package-connector-service';
24
+ import { normalizeRuntimeDeploymentTopology, type RuntimeDeploymentTopology } from './deployment-topology';
22
25
 
23
26
  export type PackageRuntimeServiceMode = PlatformServiceManagerKind;
24
27
 
@@ -74,6 +77,7 @@ export interface PackageRuntimeServiceInstallResult {
74
77
  pid?: number;
75
78
  warnings: string[];
76
79
  connector?: PackageConnectorServiceResult;
80
+ retiredServices?: ForgeRetiredServiceReconciliation[];
77
81
  activation?: {
78
82
  operationId: string;
79
83
  status: 'activation_scheduled';
@@ -89,11 +93,11 @@ export interface PackageRuntimeServiceOptions {
89
93
  host?: string;
90
94
  port?: number;
91
95
  authTokenFile: string;
92
- exclusiveWorkId?: string;
93
96
  platform?: NodeJS.Platform;
94
97
  env?: NodeJS.ProcessEnv;
95
98
  forcePortable?: boolean;
96
99
  refreshConnector?: boolean;
100
+ topology?: RuntimeDeploymentTopology;
97
101
  }
98
102
 
99
103
  export interface PackageRuntimeServiceDependencies {
@@ -101,6 +105,7 @@ export interface PackageRuntimeServiceDependencies {
101
105
  ensureConnectorService?: typeof ensurePackageConnectorService;
102
106
  scheduleDarwinActivation?: (request: PackageRuntimeActivationRequest) => Promise<{ label: string; servicePath: string }>;
103
107
  activationMode?: 'detached' | 'inline';
108
+ reconcileRetiredServices?: typeof reconcileRetiredForgePersistentServices;
104
109
  }
105
110
 
106
111
  export interface PackageRuntimeActivationDependencies {
@@ -110,13 +115,6 @@ export interface PackageRuntimeActivationDependencies {
110
115
  cleanupActivationHelper?: (request: PackageRuntimeActivationRequest) => Promise<void>;
111
116
  }
112
117
 
113
- function atomicWrite(path: string, content: string, mode = 0o600): void {
114
- mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
115
- const temporary = `${path}.${process.pid}.tmp`;
116
- writeFileSync(temporary, content, { encoding: 'utf8', mode });
117
- renameSync(temporary, path);
118
- }
119
-
120
118
  export function renderForgeRuntimeSystemdUserUnit(input: {
121
119
  description?: string;
122
120
  executable: string;
@@ -131,14 +129,10 @@ export function systemdUserAvailable(env: NodeJS.ProcessEnv = process.env): bool
131
129
  }
132
130
 
133
131
  function cleanRuntimeInstallerEnvironment(env: NodeJS.ProcessEnv, releaseEnvironment: Record<string, string>): NodeJS.ProcessEnv {
134
- const next = { ...env };
135
- for (const key of Object.values(RUNTIME_WRITE_CLAIM_ENV)) delete next[key];
136
- delete next.FORGE_CONTROLLER_LIFECYCLE_OWNER;
137
- delete next.FORGE_RELEASE_PATH;
138
- delete next.FORGE_RELEASE_REVISION;
139
- delete next.FORGE_RELEASE_SOURCE_COMMIT;
140
- delete next.FORGE_RELEASE_CLEAN_WORKSPACE;
141
- return { ...next, ...releaseEnvironment };
132
+ // The selected immutable release is the only authority reintroduced below.
133
+ // Do not carry an installer, host Runtime or Supervisor writer claim across
134
+ // this service boundary.
135
+ return { ...runtimeAuthorityFreeEnvironment(env), ...releaseEnvironment };
142
136
  }
143
137
 
144
138
  export function systemdRuntimeInstallCommands(unitName: string): string[][] {
@@ -189,7 +183,7 @@ function startPortableRuntime(controllerHome: string, env: NodeJS.ProcessEnv, ho
189
183
  stderrPath: paths.stderrPath,
190
184
  errorCode: 'FORGE_PORTABLE_RUNTIME_START_FAILED',
191
185
  });
192
- atomicWrite(join(paths.serviceRoot, 'portable.json'), `${JSON.stringify({ schemaVersion: 1, pid, startedAt: new Date().toISOString() }, null, 2)}\n`);
186
+ writeAtomicTextFile(join(paths.serviceRoot, 'portable.json'), `${JSON.stringify({ schemaVersion: 1, pid, startedAt: new Date().toISOString() }, null, 2)}\n`);
193
187
  return pid;
194
188
  }
195
189
 
@@ -208,7 +202,7 @@ function activationPaths(controllerHome: string, operationId: string): { request
208
202
  }
209
203
 
210
204
  function writeActivationRequest(request: PackageRuntimeActivationRequest): void {
211
- atomicWrite(request.requestPath, `${JSON.stringify(request, null, 2)}\n`);
205
+ writeAtomicTextFile(request.requestPath, `${JSON.stringify(request, null, 2)}\n`);
212
206
  }
213
207
 
214
208
  function writeActivationReceipt(
@@ -232,7 +226,7 @@ function writeActivationReceipt(
232
226
  helperLabel: request.helperLabel,
233
227
  ...extra,
234
228
  };
235
- atomicWrite(request.receiptPath, `${JSON.stringify(receipt, null, 2)}\n`);
229
+ writeAtomicTextFile(request.receiptPath, `${JSON.stringify(receipt, null, 2)}\n`);
236
230
  return receipt;
237
231
  }
238
232
 
@@ -299,7 +293,7 @@ export function renderPackageRuntimeActivationLaunchAgent(request: PackageRuntim
299
293
  async function scheduleDarwinPackageRuntimeActivation(request: PackageRuntimeActivationRequest): Promise<{ label: string; servicePath: string }> {
300
294
  if (process.platform !== 'darwin') throw new Error('FORGE_PACKAGE_RUNTIME_ACTIVATION_HELPER_PLATFORM_UNSUPPORTED');
301
295
  const host = createPlatformServiceManagerHost({ platform: 'darwin' });
302
- atomicWrite(request.helperSourcePlistPath, renderPackageRuntimeActivationLaunchAgent(request), 0o600);
296
+ writeAtomicTextFile(request.helperSourcePlistPath, renderPackageRuntimeActivationLaunchAgent(request), 0o600);
303
297
  host.installLaunchd(request.helperSourcePlistPath, request.helperLabel);
304
298
  const result = await host.bootstrapLaunchd({ label: request.helperLabel, plistPath: request.helperInstalledPlistPath });
305
299
  if (!result.ok) throw new Error(`FORGE_PACKAGE_RUNTIME_ACTIVATION_HELPER_BOOTSTRAP_FAILED: ${result.diagnostics.join('; ')}`);
@@ -351,7 +345,7 @@ async function rollbackPackageRuntimeActivation(
351
345
  }
352
346
  try {
353
347
  if (request.priorConfigBytes === undefined) rmSync(servicePaths.configPath, { force: true });
354
- else atomicWrite(servicePaths.configPath, request.priorConfigBytes);
348
+ else writeAtomicTextFile(servicePaths.configPath, request.priorConfigBytes);
355
349
  syncForgeRuntimeActiveEntrypoint(request.controllerHome);
356
350
  } catch (error) {
357
351
  errors.push(error instanceof Error ? error.message : String(error));
@@ -471,7 +465,7 @@ export async function installPackageRuntimeService(
471
465
  host: options.host ?? '127.0.0.1',
472
466
  port: options.port ?? 8765,
473
467
  authTokenFile: options.authTokenFile,
474
- ...(options.exclusiveWorkId?.trim() ? { exclusiveWorkId: options.exclusiveWorkId.trim() } : {}),
468
+ topology: normalizeRuntimeDeploymentTopology(options.topology),
475
469
  };
476
470
  writeForgeRuntimeServiceConfig(config);
477
471
  syncForgeRuntimeActiveEntrypoint(controllerHome);
@@ -479,6 +473,11 @@ export async function installPackageRuntimeService(
479
473
  const env = options.env ?? process.env;
480
474
  const serviceHost = createPlatformServiceManagerHost({ platform, env, forcePortable: options.forcePortable });
481
475
  const serviceManager = serviceHost.selection;
476
+ const retiredServices = await (dependencies.reconcileRetiredServices ?? reconcileRetiredForgePersistentServices)({
477
+ host: serviceHost,
478
+ env,
479
+ accountHome: env.HOME,
480
+ });
482
481
  const installDarwinService = dependencies.installDarwinService ?? installForgeRuntimeService;
483
482
  const explicitInjectedInline = Boolean(dependencies.installDarwinService && !dependencies.scheduleDarwinActivation && !dependencies.activationMode);
484
483
  const activationMode = dependencies.activationMode ?? (explicitInjectedInline ? 'inline' : 'detached');
@@ -592,6 +591,7 @@ export async function installPackageRuntimeService(
592
591
  }
593
592
  }
594
593
 
594
+ base = { ...base, retiredServices };
595
595
  if (!connectorEndpoint || base.status === 'activation_scheduled') return base;
596
596
  const ensureConnectorService = dependencies.ensureConnectorService ?? ensurePackageConnectorService;
597
597
  const connector = await ensureConnectorService({
@@ -1,12 +1,15 @@
1
+ import { readFileSync } from 'fs';
2
+ import { join } from 'path';
1
3
  import { runProcess } from '../../effects/process-runner';
2
4
  import { PROCESS_RUNTIME_RELEASE_CANARY_ARG } from '../execution/process-runtime/canary';
5
+ import { resolveBunExecutable } from '../shared/process-environment';
3
6
  import {
4
7
  assertRuntimeReleaseExecutionSurface,
5
8
  type RuntimeReleaseExecutionSurface,
6
9
  } from './release-manifest';
7
10
 
8
11
  export interface RuntimeReleaseExecutionCanaryCommand {
9
- name: RuntimeReleaseExecutionSurface['entries'][number]['name'];
12
+ name: RuntimeReleaseExecutionSurface['entries'][number]['name'] | 'connector_cli';
10
13
  executable: string;
11
14
  args: string[];
12
15
  }
@@ -22,8 +25,10 @@ export interface RuntimeReleaseExecutionCanaryDependencies {
22
25
 
23
26
  /**
24
27
  * Release execution canaries deliberately do not inherit developer-tool PATH
25
- * entries. A manifest-owned executable that only works because Homebrew, Bun,
26
- * nvm, etc. happens to be present is not an immutable Runtime artifact.
28
+ * entries. Standalone-binary artifacts must execute without Homebrew, Bun, nvm,
29
+ * or similar PATH dependencies. Legacy source scripts are probed through the
30
+ * same explicitly resolved Bun executable that their Process Runtime uses in
31
+ * production, while executable shebangs remain the artifact's own launch contract.
27
32
  */
28
33
  export function runtimeReleaseCanaryEnvironment(
29
34
  env: NodeJS.ProcessEnv = process.env,
@@ -39,7 +44,23 @@ export function runtimeReleaseCanaryEnvironment(
39
44
  return { ...env, PATH: '/usr/bin:/bin:/usr/sbin:/sbin' };
40
45
  }
41
46
 
42
- /** Execute the exact manifest-owned Process/Check Runner artifacts in bounded no-op mode. */
47
+ /**
48
+ * Execute legacy JavaScript/TypeScript through the resolved Bun runtime only
49
+ * when the artifact does not declare a different executable shebang.
50
+ */
51
+ function releaseScriptRequiresBun(entryPath: string): boolean {
52
+ const firstLine = readFileSync(entryPath, 'utf8').split(/\r?\n/, 1)[0]?.trim() ?? '';
53
+ if (!firstLine.startsWith('#!')) return true;
54
+ const shebangTokens = firstLine.slice(2).trim().split(/\s+/).filter(Boolean);
55
+ return shebangTokens.some((token) => /(?:^|\/)bun(?:\.exe)?$/i.test(token));
56
+ }
57
+
58
+ /**
59
+ * Execute the minimum immutable Runtime execution surface plus the package
60
+ * Connector CLI import graph. The latter is intentionally a help-only command:
61
+ * it loads the exact CLI dependency closure used by the persistent Connector
62
+ * without opening a listener or mutating Runtime authority.
63
+ */
43
64
  export function assertRuntimeReleaseExecutionCanaries(
44
65
  manifestPath: string,
45
66
  controllerHome: string,
@@ -52,20 +73,44 @@ export function assertRuntimeReleaseExecutionCanaries(
52
73
  {
53
74
  cwd: surface.releaseRoot,
54
75
  env: runtimeReleaseCanaryEnvironment(),
55
- timeoutMs: 10_000,
76
+ timeoutMs: 30_000,
56
77
  maxOutputBytes: 64 * 1024,
57
78
  },
58
79
  ));
59
- for (const entry of surface.entries) {
60
- const canary: RuntimeReleaseExecutionCanaryCommand = {
61
- name: entry.name,
62
- executable: entry.path,
63
- args: [PROCESS_RUNTIME_RELEASE_CANARY_ARG],
64
- };
80
+ const assertCanary = (canary: RuntimeReleaseExecutionCanaryCommand): void => {
65
81
  const result = runExecutionEntryCanary(canary);
66
82
  if (!result.ok) {
67
- throw new Error(`RUNTIME_RELEASE_EXECUTION_CANARY_FAILED: ${canary.name}: ${result.stderr || result.stdout || result.error || 'unknown failure'}`.slice(0, 2_000));
83
+ const detail = result.stderr || result.stdout || result.error || 'unknown failure';
84
+ const legacyCheckRunnerUsageProbe = surface.manifest.executionMode !== 'standalone-binary'
85
+ && canary.name === 'check_runner'
86
+ && detail.trim() === 'PERSISTED_CHECK_USAGE: missing --repo';
87
+ if (legacyCheckRunnerUsageProbe) return;
88
+ throw new Error(`RUNTIME_RELEASE_EXECUTION_CANARY_FAILED: ${canary.name}: ${detail}`.slice(0, 2_000));
68
89
  }
90
+ };
91
+
92
+ for (const entry of surface.entries) {
93
+ const args = entry.canary === 'runtime_interpreter' ? ['--version'] : [PROCESS_RUNTIME_RELEASE_CANARY_ARG];
94
+ const legacyScript = surface.manifest.executionMode !== 'standalone-binary'
95
+ && /\.(?:[cm]?js|tsx?)$/i.test(entry.path);
96
+ const usesExplicitBun = legacyScript && releaseScriptRequiresBun(entry.path);
97
+ assertCanary({
98
+ name: entry.name,
99
+ executable: usesExplicitBun ? resolveBunExecutable(process.execPath, process.env) : entry.path,
100
+ args: usesExplicitBun ? [entry.path, ...args] : args,
101
+ });
69
102
  }
103
+
104
+ // Package launcher releases execute source-backed CLI code from their own
105
+ // immutable snapshot. Compiled standalone releases have a different closed
106
+ // artifact surface and therefore do not use this source CLI probe.
107
+ if (surface.manifest.executionMode !== 'standalone-binary' && surface.manifest.packageRoot) {
108
+ assertCanary({
109
+ name: 'connector_cli',
110
+ executable: resolveBunExecutable(process.execPath, process.env),
111
+ args: [join(surface.releaseRoot, 'package', 'src', 'cli', 'index.ts'), 'mcp', 'serve', '--help'],
112
+ });
113
+ }
114
+
70
115
  return surface;
71
116
  }
@@ -1,13 +1,18 @@
1
+ import { spawn } from 'child_process';
1
2
  import { createHash } from 'crypto';
2
- import { readFileSync } from 'fs';
3
+ import { lstatSync, readFileSync } from 'fs';
3
4
  import { dirname, join, resolve } from 'path';
4
- import { pathToFileURL } from 'url';
5
5
 
6
6
  export const RUNTIME_BUNDLE_ENTRYPOINT = 'forge-runtime-bundle.js' as const;
7
+ export const RUNTIME_INTERPRETER_ENTRYPOINT = process.platform === 'win32'
8
+ ? 'forge-runtime-bun.exe' as const
9
+ : 'forge-runtime-bun' as const;
7
10
 
8
11
  interface RuntimeBundleManifestRecord {
9
12
  runtimeBundleEntrypoint?: unknown;
10
13
  runtimeBundleArtifactIdentity?: unknown;
14
+ runtimeInterpreterEntrypoint?: unknown;
15
+ runtimeInterpreterArtifactIdentity?: unknown;
11
16
  }
12
17
 
13
18
  function releaseManifestPath(argv: readonly string[]): string {
@@ -21,6 +26,8 @@ export function resolveCompiledRuntimeBundle(argv: readonly string[] = process.a
21
26
  manifestPath: string;
22
27
  bundlePath: string;
23
28
  artifactIdentity: string;
29
+ interpreterPath: string;
30
+ interpreterArtifactIdentity: string;
24
31
  } {
25
32
  const manifestPath = releaseManifestPath(argv);
26
33
  let manifest: RuntimeBundleManifestRecord;
@@ -38,9 +45,14 @@ export function resolveCompiledRuntimeBundle(argv: readonly string[] = process.a
38
45
  if (!/^sha256:[a-f0-9]{64}$/.test(artifactIdentity)) {
39
46
  throw new Error('RUNTIME_RELEASE_BUNDLE_IDENTITY_INVALID');
40
47
  }
41
- const bundlePath = join(dirname(manifestPath), RUNTIME_BUNDLE_ENTRYPOINT);
48
+ const releaseRoot = dirname(manifestPath);
49
+ const bundlePath = join(releaseRoot, RUNTIME_BUNDLE_ENTRYPOINT);
42
50
  let actualIdentity: string;
43
51
  try {
52
+ const status = lstatSync(bundlePath);
53
+ if (status.isSymbolicLink() || !status.isFile()) {
54
+ throw new Error('bundle must be a regular file');
55
+ }
44
56
  actualIdentity = `sha256:${createHash('sha256').update(readFileSync(bundlePath)).digest('hex')}`;
45
57
  } catch (error) {
46
58
  throw new Error(`RUNTIME_RELEASE_BUNDLE_READ_FAILED: ${error instanceof Error ? error.message : String(error)}`);
@@ -48,16 +60,86 @@ export function resolveCompiledRuntimeBundle(argv: readonly string[] = process.a
48
60
  if (actualIdentity !== artifactIdentity) {
49
61
  throw new Error('RUNTIME_RELEASE_BUNDLE_ARTIFACT_IDENTITY_MISMATCH');
50
62
  }
51
- return { manifestPath, bundlePath, artifactIdentity };
63
+ if (manifest.runtimeInterpreterEntrypoint !== RUNTIME_INTERPRETER_ENTRYPOINT) {
64
+ throw new Error(`RUNTIME_RELEASE_INTERPRETER_ENTRYPOINT_INVALID: expected ${RUNTIME_INTERPRETER_ENTRYPOINT}`);
65
+ }
66
+ const interpreterArtifactIdentity = typeof manifest.runtimeInterpreterArtifactIdentity === 'string'
67
+ ? manifest.runtimeInterpreterArtifactIdentity.trim().toLowerCase()
68
+ : '';
69
+ if (!/^sha256:[a-f0-9]{64}$/.test(interpreterArtifactIdentity)) {
70
+ throw new Error('RUNTIME_RELEASE_INTERPRETER_IDENTITY_INVALID');
71
+ }
72
+ const interpreterPath = join(releaseRoot, RUNTIME_INTERPRETER_ENTRYPOINT);
73
+ let actualInterpreterIdentity: string;
74
+ try {
75
+ const status = lstatSync(interpreterPath);
76
+ if (status.isSymbolicLink() || !status.isFile() || (status.mode & 0o111) === 0) {
77
+ throw new Error('interpreter must be a regular executable file');
78
+ }
79
+ actualInterpreterIdentity = `sha256:${createHash('sha256').update(readFileSync(interpreterPath)).digest('hex')}`;
80
+ } catch (error) {
81
+ throw new Error(`RUNTIME_RELEASE_INTERPRETER_READ_FAILED: ${error instanceof Error ? error.message : String(error)}`);
82
+ }
83
+ if (actualInterpreterIdentity !== interpreterArtifactIdentity) {
84
+ throw new Error('RUNTIME_RELEASE_INTERPRETER_ARTIFACT_IDENTITY_MISMATCH');
85
+ }
86
+ return { manifestPath, bundlePath, artifactIdentity, interpreterPath, interpreterArtifactIdentity };
87
+ }
88
+
89
+ function runtimeChildArgs(argv: readonly string[]): string[] {
90
+ const firstRuntimeArgument = argv.findIndex((argument) => argument.startsWith('--'));
91
+ if (firstRuntimeArgument < 0 || !argv.includes('--controller-home')) {
92
+ throw new Error('RUNTIME_CONTROLLER_HOME_ARGUMENT_REQUIRED');
93
+ }
94
+ return argv.slice(firstRuntimeArgument);
52
95
  }
53
96
 
54
97
  export async function runCompiledRuntimeLoader(argv: string[] = process.argv): Promise<void> {
55
98
  const bundle = resolveCompiledRuntimeBundle(argv);
56
- const loaded = await import(pathToFileURL(bundle.bundlePath).href) as { runCanonicalRuntimeCli?: (argv?: string[]) => Promise<void> };
57
- if (typeof loaded.runCanonicalRuntimeCli !== 'function') {
58
- throw new Error('RUNTIME_RELEASE_BUNDLE_ENTRY_EXPORT_MISSING');
99
+ const child = spawn(bundle.interpreterPath, [bundle.bundlePath, ...runtimeChildArgs(argv)], {
100
+ cwd: dirname(bundle.manifestPath),
101
+ stdio: 'inherit',
102
+ env: process.env,
103
+ });
104
+ let childExited = false;
105
+ const forwardSignal = (signal: NodeJS.Signals): void => {
106
+ if (childExited) return;
107
+ try { child.kill(signal); } catch { /* child lifecycle reconciliation owns terminal state */ }
108
+ };
109
+ const terminateChildOnLauncherExit = (): void => {
110
+ if (childExited) return;
111
+ try { child.kill('SIGTERM'); } catch { /* launcher is already exiting */ }
112
+ };
113
+ const forwardedSignals: NodeJS.Signals[] = process.platform === 'win32'
114
+ ? ['SIGINT', 'SIGTERM']
115
+ : ['SIGINT', 'SIGTERM', 'SIGUSR1', 'SIGUSR2'];
116
+ const signalHandlers = new Map<NodeJS.Signals, () => void>();
117
+ for (const signal of forwardedSignals) {
118
+ const handler = () => forwardSignal(signal);
119
+ signalHandlers.set(signal, handler);
120
+ process.on(signal, handler);
121
+ }
122
+ process.once('exit', terminateChildOnLauncherExit);
123
+ try {
124
+ const outcome = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>((resolveChild, rejectChild) => {
125
+ child.once('error', rejectChild);
126
+ child.once('exit', (code, signal) => {
127
+ childExited = true;
128
+ resolveChild({ code, signal });
129
+ });
130
+ });
131
+ if (outcome.signal) {
132
+ for (const [signal, handler] of signalHandlers) process.off(signal, handler);
133
+ signalHandlers.clear();
134
+ process.off('exit', terminateChildOnLauncherExit);
135
+ process.kill(process.pid, outcome.signal);
136
+ return;
137
+ }
138
+ if (outcome.code !== 0) process.exitCode = outcome.code ?? 1;
139
+ } finally {
140
+ for (const [signal, handler] of signalHandlers) process.off(signal, handler);
141
+ process.off('exit', terminateChildOnLauncherExit);
59
142
  }
60
- await loaded.runCanonicalRuntimeCli(argv);
61
143
  }
62
144
 
63
145
  if (import.meta.main) {
@@ -53,20 +53,19 @@ function optionalRuntimeComponent<
53
53
  export const COMPILED_RUNTIME_RELEASE_COMPONENT_FIELDS = [
54
54
  'executionMode',
55
55
  'runtimeBundleEntrypoint', 'runtimeBundleArtifactIdentity',
56
+ 'runtimeInterpreterEntrypoint', 'runtimeInterpreterArtifactIdentity',
56
57
  'diagnosticEntrypoint', 'diagnosticArtifactIdentity',
58
+ 'connectorEntrypoint', 'connectorArtifactIdentity',
57
59
  'browserNodeBridgeEntrypoint', 'browserNodeBridgeArtifactIdentity',
58
60
  'browserHandoffEntrypoint', 'browserHandoffArtifactIdentity',
61
+ 'workflowSupervisorNativeHostEntrypoint', 'workflowSupervisorNativeHostArtifactIdentity',
59
62
  'processRunnerEntrypoint', 'processRunnerArtifactIdentity',
60
63
  'checkRunnerEntrypoint', 'checkRunnerArtifactIdentity',
61
64
  'schedulerWorkerEntrypoint', 'schedulerWorkerArtifactIdentity',
62
65
  'periodicCleanupEntrypoint', 'periodicCleanupArtifactIdentity',
63
66
  'pluginActionSidecarEntrypoint', 'pluginActionSidecarArtifactIdentity',
64
67
  'externalPluginProbeEntrypoint', 'externalPluginProbeArtifactIdentity',
65
- 'codeGraphNodeEntrypoint', 'codeGraphNodeArtifactIdentity',
66
- 'codeGraphSidecarEntrypoint', 'codeGraphSidecarArtifactIdentity',
67
- 'codeGraphLibraryRoot', 'codeGraphLibraryArtifactIdentity',
68
68
  'packageRoot', 'packageArtifactIdentity',
69
- 'controllerUiRoot', 'controllerUiArtifactIdentity',
70
69
  ] as const satisfies readonly (keyof RuntimeReleaseManifest)[];
71
70
 
72
71
  /**
@@ -120,12 +119,32 @@ export function loadRuntimeReleaseManifest(
120
119
  identityField: 'runtimeBundleArtifactIdentity',
121
120
  canonicalEntry: 'forge-runtime-bundle.js',
122
121
  });
122
+ const runtimeInterpreter = optionalRuntimeComponent({
123
+ value,
124
+ entryField: 'runtimeInterpreterEntrypoint',
125
+ identityField: 'runtimeInterpreterArtifactIdentity',
126
+ canonicalEntry: (process.platform === 'win32' ? 'forge-runtime-bun.exe' : 'forge-runtime-bun') as RuntimeReleaseManifest['runtimeInterpreterEntrypoint'],
127
+ });
123
128
  if (value.configurationSchemaVersion !== 1) {
124
129
  throw new Error('RELEASE_MANIFEST_INVALID: configurationSchemaVersion must be 1');
125
130
  }
126
- const controllerHome = resolve(requireString(value.controllerHome, 'controllerHome'));
127
- if (canonicalExistingPathIdentity(controllerHome) !== canonicalExistingPathIdentity(expectedControllerHome)) {
128
- throw new Error('RELEASE_MANIFEST_CONTROLLER_HOME_MISMATCH');
131
+ // Pre-scope compiled releases were portable and omitted both fields. Legacy
132
+ // package releases always persisted controllerHome, so preserve that binding
133
+ // while accepting the immutable compiled artifact format already in use.
134
+ const deploymentScope = value.deploymentScope === undefined
135
+ ? (value.controllerHome === undefined ? 'portable' : 'controller-home')
136
+ : requireString(value.deploymentScope, 'deploymentScope');
137
+ if (deploymentScope !== 'controller-home' && deploymentScope !== 'portable') {
138
+ throw new Error(`RELEASE_MANIFEST_INVALID: deploymentScope must be portable when present, got ${deploymentScope}`);
139
+ }
140
+ let controllerHome: string | undefined;
141
+ if (deploymentScope === 'controller-home') {
142
+ controllerHome = resolve(requireString(value.controllerHome, 'controllerHome'));
143
+ if (canonicalExistingPathIdentity(controllerHome) !== canonicalExistingPathIdentity(expectedControllerHome)) {
144
+ throw new Error('RELEASE_MANIFEST_CONTROLLER_HOME_MISMATCH');
145
+ }
146
+ } else if (value.controllerHome !== undefined) {
147
+ throw new Error('RELEASE_MANIFEST_INVALID: portable release must not embed controllerHome');
129
148
  }
130
149
  const compatibility = value.databaseSchemaCompatibility as Record<string, unknown> | undefined;
131
150
  const minimum = Number(compatibility?.minimum);
@@ -144,6 +163,12 @@ export function loadRuntimeReleaseManifest(
144
163
  identityField: 'diagnosticArtifactIdentity',
145
164
  canonicalEntry: 'forge-cli',
146
165
  });
166
+ const connector = optionalRuntimeComponent({
167
+ value,
168
+ entryField: 'connectorEntrypoint',
169
+ identityField: 'connectorArtifactIdentity',
170
+ canonicalEntry: 'forge-mcp-gateway',
171
+ });
147
172
  const browserNodeBridge = optionalRuntimeComponent({
148
173
  value,
149
174
  entryField: 'browserNodeBridgeEntrypoint',
@@ -156,6 +181,12 @@ export function loadRuntimeReleaseManifest(
156
181
  identityField: 'browserHandoffArtifactIdentity',
157
182
  canonicalEntry: 'browser-handoff-host.js',
158
183
  });
184
+ const workflowSupervisorNativeHost = optionalRuntimeComponent({
185
+ value,
186
+ entryField: 'workflowSupervisorNativeHostEntrypoint',
187
+ identityField: 'workflowSupervisorNativeHostArtifactIdentity',
188
+ canonicalEntry: 'forge-workflow-supervisor-native-host',
189
+ });
159
190
  const processRunner = optionalRuntimeComponent({
160
191
  value,
161
192
  entryField: 'processRunnerEntrypoint',
@@ -168,6 +199,18 @@ export function loadRuntimeReleaseManifest(
168
199
  identityField: 'checkRunnerArtifactIdentity',
169
200
  canonicalEntry: 'forge-check-runner',
170
201
  });
202
+ const typescriptNavigation = optionalRuntimeComponent({
203
+ value,
204
+ entryField: 'typescriptNavigationEntrypoint',
205
+ identityField: 'typescriptNavigationArtifactIdentity',
206
+ canonicalEntry: 'forge-typescript-navigation',
207
+ });
208
+ const contextPack = optionalRuntimeComponent({
209
+ value,
210
+ entryField: 'contextPackEntrypoint',
211
+ identityField: 'contextPackArtifactIdentity',
212
+ canonicalEntry: 'forge-context-pack',
213
+ });
171
214
  const schedulerWorker = optionalRuntimeComponent({
172
215
  value,
173
216
  entryField: 'schedulerWorkerEntrypoint',
@@ -232,36 +275,6 @@ export function loadRuntimeReleaseManifest(
232
275
  };
233
276
  }
234
277
 
235
- const codeGraphFields = [
236
- value.codeGraphNodeEntrypoint,
237
- value.codeGraphNodeArtifactIdentity,
238
- value.codeGraphSidecarEntrypoint,
239
- value.codeGraphSidecarArtifactIdentity,
240
- value.codeGraphLibraryRoot,
241
- value.codeGraphLibraryArtifactIdentity,
242
- ];
243
- const hasCodeGraphRuntime = codeGraphFields.some((entry) => entry !== undefined);
244
- let codeGraphRuntime: Pick<RuntimeReleaseManifest,
245
- 'codeGraphNodeEntrypoint' | 'codeGraphNodeArtifactIdentity'
246
- | 'codeGraphSidecarEntrypoint' | 'codeGraphSidecarArtifactIdentity'
247
- | 'codeGraphLibraryRoot' | 'codeGraphLibraryArtifactIdentity'> | undefined;
248
- if (hasCodeGraphRuntime) {
249
- const nodeEntrypoint = requireString(value.codeGraphNodeEntrypoint, 'codeGraphNodeEntrypoint');
250
- const sidecarEntrypoint = requireString(value.codeGraphSidecarEntrypoint, 'codeGraphSidecarEntrypoint');
251
- const libraryRoot = requireString(value.codeGraphLibraryRoot, 'codeGraphLibraryRoot');
252
- if (nodeEntrypoint !== 'codegraph-node' || sidecarEntrypoint !== 'codegraph-sidecar.cjs' || libraryRoot !== 'codegraph-lib') {
253
- throw new Error('RELEASE_MANIFEST_INVALID: CodeGraph release paths must use the canonical co-located names');
254
- }
255
- codeGraphRuntime = {
256
- codeGraphNodeEntrypoint: 'codegraph-node',
257
- codeGraphNodeArtifactIdentity: requireSha256Identity(value.codeGraphNodeArtifactIdentity, 'codeGraphNodeArtifactIdentity'),
258
- codeGraphSidecarEntrypoint: 'codegraph-sidecar.cjs',
259
- codeGraphSidecarArtifactIdentity: requireSha256Identity(value.codeGraphSidecarArtifactIdentity, 'codeGraphSidecarArtifactIdentity'),
260
- codeGraphLibraryRoot: 'codegraph-lib',
261
- codeGraphLibraryArtifactIdentity: requireSha256Identity(value.codeGraphLibraryArtifactIdentity, 'codeGraphLibraryArtifactIdentity'),
262
- };
263
- }
264
-
265
278
  const argumentsValue = value.arguments;
266
279
  if (!Array.isArray(argumentsValue) || argumentsValue.some((item) => typeof item !== 'string')) {
267
280
  throw new Error('RELEASE_MANIFEST_INVALID: arguments must be a string array');
@@ -280,22 +293,26 @@ export function loadRuntimeReleaseManifest(
280
293
  entrypoint: 'forge-runtime',
281
294
  ...(executionMode ? { executionMode: 'standalone-binary' as const } : {}),
282
295
  ...(runtimeBundle ?? {}),
296
+ ...(runtimeInterpreter ?? {}),
283
297
  ...(diagnostic ?? {}),
298
+ ...(connector ?? {}),
284
299
  ...(browserNodeBridge ?? {}),
285
300
  ...(browserHandoff ?? {}),
301
+ ...(workflowSupervisorNativeHost ?? {}),
286
302
  ...(processRunner ?? {}),
287
303
  ...(checkRunner ?? {}),
304
+ ...(typescriptNavigation ?? {}),
305
+ ...(contextPack ?? {}),
288
306
  ...(schedulerWorker ?? {}),
289
307
  ...(periodicCleanup ?? {}),
290
308
  ...(pluginActionSidecar ?? {}),
291
309
  ...(externalPluginProbe ?? {}),
292
310
  ...(browserAutomationHelper ?? {}),
293
- ...(codeGraphRuntime ?? {}),
294
311
  ...(packageSnapshot ?? {}),
295
312
  ...(controllerUi ?? {}),
296
313
  arguments: argumentsValue as string[],
297
314
  configurationSchemaVersion: 1,
298
- controllerHome,
315
+ ...(deploymentScope === 'portable' ? { deploymentScope: 'portable' as const } : { controllerHome: controllerHome! }),
299
316
  databaseSchemaCompatibility: { minimum, maximum },
300
317
  workerProtocolVersion,
301
318
  ...(typeof value.sourceRepositoryId === 'string' && value.sourceRepositoryId.trim() ? { sourceRepositoryId: value.sourceRepositoryId.trim() } : {}),
@@ -310,9 +327,10 @@ export interface RuntimeReleaseExecutionSurface {
310
327
  manifest: RuntimeReleaseManifest;
311
328
  releaseRoot: string;
312
329
  entries: Array<{
313
- name: 'process_runner' | 'check_runner' | 'scheduler_worker' | 'periodic_cleanup';
330
+ name: 'runtime_interpreter' | 'process_runner' | 'check_runner' | 'typescript_navigation' | 'context_pack' | 'scheduler_worker' | 'periodic_cleanup';
314
331
  path: string;
315
332
  artifactIdentity: string;
333
+ canary: 'runtime_interpreter' | 'process_runtime';
316
334
  }>;
317
335
  }
318
336
 
@@ -338,25 +356,47 @@ export function assertRuntimeReleaseExecutionSurface(
338
356
  }
339
357
  const releaseRoot = dirname(resolvedManifestPath);
340
358
  const entries: RuntimeReleaseExecutionSurface['entries'] = [
359
+ ...(manifest.runtimeInterpreterEntrypoint && manifest.runtimeInterpreterArtifactIdentity ? [{
360
+ name: 'runtime_interpreter' as const,
361
+ path: join(releaseRoot, manifest.runtimeInterpreterEntrypoint),
362
+ artifactIdentity: manifest.runtimeInterpreterArtifactIdentity,
363
+ canary: 'runtime_interpreter' as const,
364
+ }] : []),
341
365
  {
342
366
  name: 'process_runner',
343
367
  path: join(releaseRoot, manifest.processRunnerEntrypoint),
344
368
  artifactIdentity: manifest.processRunnerArtifactIdentity,
369
+ canary: 'process_runtime',
345
370
  },
346
371
  {
347
372
  name: 'check_runner',
348
373
  path: join(releaseRoot, manifest.checkRunnerEntrypoint),
349
374
  artifactIdentity: manifest.checkRunnerArtifactIdentity,
375
+ canary: 'process_runtime',
350
376
  },
377
+ ...(manifest.typescriptNavigationEntrypoint && manifest.typescriptNavigationArtifactIdentity ? [{
378
+ name: 'typescript_navigation' as const,
379
+ path: join(releaseRoot, manifest.typescriptNavigationEntrypoint),
380
+ artifactIdentity: manifest.typescriptNavigationArtifactIdentity,
381
+ canary: 'process_runtime' as const,
382
+ }] : []),
383
+ ...(manifest.contextPackEntrypoint && manifest.contextPackArtifactIdentity ? [{
384
+ name: 'context_pack' as const,
385
+ path: join(releaseRoot, manifest.contextPackEntrypoint),
386
+ artifactIdentity: manifest.contextPackArtifactIdentity,
387
+ canary: 'process_runtime' as const,
388
+ }] : []),
351
389
  ...(manifest.schedulerWorkerEntrypoint && manifest.schedulerWorkerArtifactIdentity ? [{
352
390
  name: 'scheduler_worker' as const,
353
391
  path: join(releaseRoot, manifest.schedulerWorkerEntrypoint),
354
392
  artifactIdentity: manifest.schedulerWorkerArtifactIdentity,
393
+ canary: 'process_runtime' as const,
355
394
  }] : []),
356
395
  ...(manifest.periodicCleanupEntrypoint && manifest.periodicCleanupArtifactIdentity ? [{
357
396
  name: 'periodic_cleanup' as const,
358
397
  path: join(releaseRoot, manifest.periodicCleanupEntrypoint),
359
398
  artifactIdentity: manifest.periodicCleanupArtifactIdentity,
399
+ canary: 'process_runtime' as const,
360
400
  }] : []),
361
401
  ];
362
402
  for (const entry of entries) {