@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,11 +1,12 @@
1
1
  import { createHash, randomUUID } from 'crypto';
2
- import { createRequire } from 'module';
3
- import { chmodSync, copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from 'fs';
2
+ import { chmodSync, copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, symlinkSync, writeFileSync } from 'fs';
3
+ import { tmpdir } from 'os';
4
4
  import { dirname, join, relative, resolve } from 'path';
5
5
  import { runProcess } from '../../effects/process-runner';
6
6
  import { resolveBunExecutable } from '../shared/process-environment';
7
+ import { assertStorageHeadroom } from '../shared/storage-capacity';
7
8
  import { CONTROL_PLANE_SCHEMA_VERSION } from '../control-plane/persistence/sqlite-store';
8
- import { loadRuntimeReleaseManifest, requireCompleteCompiledRuntimeReleaseManifest } from './release-manifest';
9
+ import { assertRuntimeReleaseExecutionSurface, loadRuntimeReleaseManifest, requireCompleteCompiledRuntimeReleaseManifest } from './release-manifest';
9
10
  import { assertRuntimeReleaseExecutionCanaries, type RuntimeReleaseExecutionCanaryCommand } from './release-execution-canary';
10
11
  export { assertRuntimeReleaseExecutionCanaries, type RuntimeReleaseExecutionCanaryDependencies } from './release-execution-canary';
11
12
  import { packageRuntimeFileIndex, stagePackageRuntimeSnapshot } from './package-runtime-release';
@@ -34,18 +35,20 @@ export interface StagedRuntimeRelease {
34
35
  releaseId: string;
35
36
  artifactIdentity: string;
36
37
  runtimeBundleArtifactIdentity?: string;
38
+ runtimeInterpreterArtifactIdentity?: string;
37
39
  diagnosticArtifactIdentity?: string;
40
+ connectorArtifactIdentity?: string;
38
41
  browserNodeBridgeArtifactIdentity?: string;
39
42
  browserHandoffArtifactIdentity?: string;
43
+ workflowSupervisorNativeHostArtifactIdentity?: string;
40
44
  processRunnerArtifactIdentity?: string;
41
45
  checkRunnerArtifactIdentity?: string;
46
+ typescriptNavigationArtifactIdentity?: string;
47
+ contextPackArtifactIdentity?: string;
42
48
  schedulerWorkerArtifactIdentity?: string;
43
49
  periodicCleanupArtifactIdentity?: string;
44
50
  pluginActionSidecarArtifactIdentity?: string;
45
51
  externalPluginProbeArtifactIdentity?: string;
46
- codeGraphNodeArtifactIdentity?: string;
47
- codeGraphSidecarArtifactIdentity?: string;
48
- codeGraphLibraryArtifactIdentity?: string;
49
52
  packageArtifactIdentity?: string;
50
53
  controllerUiArtifactIdentity?: string;
51
54
  macosCodeSigning?: MacOSRuntimeCodeSigning;
@@ -61,14 +64,9 @@ export interface RuntimeReleaseMaterializerDependencies {
61
64
  uuid?: () => string;
62
65
  compileBinary?: (input: { sourceRoot: string; outputPath: string; entryPath?: string }) => { ok: boolean; stderr?: string; stdout?: string; error?: string };
63
66
  bundleRuntime?: (input: { sourceRoot: string; outputPath: string; entryPath: string }) => { ok: boolean; stderr?: string; stdout?: string; error?: string };
67
+ materializeRuntimeInterpreter?: (input: { sourceRoot: string; outputPath: string }) => { ok: boolean; stderr?: string; stdout?: string; error?: string };
64
68
  bundleNodeHost?: (input: { sourceRoot: string; outputPath: string; entryPath: string }) => { ok: boolean; stderr?: string; stdout?: string; error?: string };
65
69
  bundleProcessRunner?: (input: { sourceRoot: string; outputPath: string; entryPath: string }) => { ok: boolean; stderr?: string; stdout?: string; error?: string };
66
- materializeCodeGraphRuntime?: (input: {
67
- sourceRoot: string;
68
- nodeOutputPath: string;
69
- sidecarOutputPath: string;
70
- libraryOutputPath: string;
71
- }) => { ok: boolean; stderr?: string; stdout?: string; error?: string };
72
70
  }
73
71
 
74
72
  export interface CandidateRuntimeStageReceiptV1 {
@@ -89,6 +87,7 @@ export interface CandidateRuntimeReleaseStagerDependencies {
89
87
  bunExecutable: string;
90
88
  scriptPath: string;
91
89
  sourceRoot: string;
90
+ dependencyRoot: string;
92
91
  controllerHome: string;
93
92
  expectedHead: string;
94
93
  sourceRepositoryId: string;
@@ -102,6 +101,61 @@ function gitText(root: string, args: string[]): string {
102
101
  return result.stdout.trim();
103
102
  }
104
103
 
104
+ /**
105
+ * Materialize one exact tracked Git revision into a detached temporary worktree.
106
+ * The mutable source checkout remains only the object/dependency provider and may
107
+ * advance while the callback runs. Lifecycle/Runtime authority is untouched.
108
+ */
109
+ export function withRuntimeReleaseSourceSnapshot<T>(input: {
110
+ sourceRoot: string;
111
+ sourceRevision: string;
112
+ }, operation: (snapshotRoot: string) => T): T {
113
+ const sourceRoot = resolve(input.sourceRoot);
114
+ const requestedRevision = input.sourceRevision.trim();
115
+ if (!/^[a-f0-9]{40}$/i.test(requestedRevision)) throw new Error('RUNTIME_RELEASE_SOURCE_REVISION_INVALID');
116
+ const resolvedRevision = gitText(sourceRoot, ['rev-parse', '--verify', `${requestedRevision}^{commit}`]);
117
+ if (resolvedRevision !== requestedRevision) throw new Error('RUNTIME_RELEASE_SOURCE_REVISION_MISMATCH');
118
+ // Release materialization is Runtime-owned temporary state, not repository
119
+ // workspace state. Keeping the detached worktree outside sourceRoot prevents
120
+ // Forge's own immutable-source snapshot from perturbing repository status or
121
+ // workspace fingerprints while release validation is running.
122
+ const snapshotContainer = mkdtempSync(join(tmpdir(), `forge-runtime-release-source-${process.pid}-`));
123
+ const snapshotRoot = join(snapshotContainer, `${requestedRevision}-${randomUUID().slice(0, 8)}`);
124
+ const materialized = runProcess('git', ['-C', sourceRoot, 'worktree', 'add', '--detach', '--force', snapshotRoot, requestedRevision], {
125
+ timeoutMs: 60_000,
126
+ maxOutputBytes: 128 * 1024,
127
+ });
128
+ if (!materialized.ok) {
129
+ rmSync(snapshotContainer, { recursive: true, force: true });
130
+ runProcess('git', ['-C', sourceRoot, 'worktree', 'prune'], { timeoutMs: 30_000, maxOutputBytes: 64 * 1024 });
131
+ throw new Error(`RUNTIME_RELEASE_SOURCE_SNAPSHOT_FAILED: ${materialized.stderr || materialized.stdout || materialized.error}`.slice(0, 2_000));
132
+ }
133
+ try {
134
+ const sourceDependencies = join(sourceRoot, 'node_modules');
135
+ if (existsSync(sourceDependencies)) {
136
+ const snapshotDependencies = join(snapshotRoot, 'node_modules');
137
+ symlinkSync(realpathSync(sourceDependencies), snapshotDependencies, process.platform === 'win32' ? 'junction' : 'dir');
138
+ }
139
+ if (gitText(snapshotRoot, ['rev-parse', '--verify', 'HEAD']) !== requestedRevision) {
140
+ throw new Error('RUNTIME_RELEASE_SOURCE_SNAPSHOT_REVISION_MISMATCH');
141
+ }
142
+ if (gitText(snapshotRoot, ['status', '--porcelain=v1', '--untracked-files=no'])) {
143
+ throw new Error('RUNTIME_RELEASE_SOURCE_SNAPSHOT_DIRTY');
144
+ }
145
+ return operation(snapshotRoot);
146
+ } finally {
147
+ const removed = runProcess('git', ['-C', sourceRoot, 'worktree', 'remove', '--force', snapshotRoot], {
148
+ timeoutMs: 60_000,
149
+ maxOutputBytes: 128 * 1024,
150
+ });
151
+ if (!removed.ok) {
152
+ rmSync(snapshotRoot, { recursive: true, force: true });
153
+ }
154
+ runProcess('git', ['-C', sourceRoot, 'worktree', 'prune'], { timeoutMs: 30_000, maxOutputBytes: 64 * 1024 });
155
+ rmSync(snapshotContainer, { recursive: true, force: true });
156
+ }
157
+ }
158
+
105
159
  function sha256(path: string): string {
106
160
  return createHash('sha256').update(readFileSync(path)).digest('hex');
107
161
  }
@@ -164,6 +218,10 @@ function inspectMacOSRuntimeCodeSigning(executable: string): MacOSRuntimeCodeSig
164
218
  return parseMacOSRuntimeCodeSigning({ identifier, teamIdentifier, authority, designatedRequirement }, 'RUNTIME_RELEASE_MACOS_SIGNATURE_INVALID')!;
165
219
  }
166
220
 
221
+ export function macOSRuntimeSigningMayRetryWithoutTimestamp(detail: string): boolean {
222
+ return /(?:^|\n).*timestamp service is not available\.?\s*$/im.test(detail);
223
+ }
224
+
167
225
  function defaultSignMacOSRuntime(input: { executable: string; controllerHome: string }): MacOSRuntimeCodeSigning {
168
226
  const identities = runProcess('security', ['find-identity', '-v', '-p', 'codesigning'], { timeoutMs: 30_000, maxOutputBytes: 128 * 1024 });
169
227
  if (!identities.ok) throw new Error(`RUNTIME_RELEASE_MACOS_SIGNING_IDENTITY_LOOKUP_FAILED: ${identities.stderr || identities.stdout || identities.error}`.slice(0, 2_000));
@@ -186,9 +244,16 @@ function defaultSignMacOSRuntime(input: { executable: string; controllerHome: st
186
244
  selected = eligible[0];
187
245
  }
188
246
  if (expectedTeam && selected.teamIdentifier !== expectedTeam) throw new Error('RUNTIME_RELEASE_MACOS_SIGNING_TEAM_CHANGED');
189
- const signed = runProcess('codesign', [
190
- '--force', '--sign', selected.hash, '--identifier', FORGE_MACOS_RUNTIME_SIGNING_IDENTIFIER, '--options', 'runtime', input.executable,
191
- ], { timeoutMs: 120_000, maxOutputBytes: 128 * 1024 });
247
+ const signingArgs = [
248
+ '--force', '--sign', selected.hash, '--identifier', FORGE_MACOS_RUNTIME_SIGNING_IDENTIFIER, '--options', 'runtime',
249
+ ];
250
+ let signed = runProcess('codesign', [...signingArgs, input.executable], { timeoutMs: 120_000, maxOutputBytes: 128 * 1024 });
251
+ if (!signed.ok) {
252
+ const detail = `${signed.stderr ?? ''}\n${signed.stdout ?? ''}\n${signed.error ?? ''}`;
253
+ if (macOSRuntimeSigningMayRetryWithoutTimestamp(detail)) {
254
+ signed = runProcess('codesign', [...signingArgs, '--timestamp=none', input.executable], { timeoutMs: 120_000, maxOutputBytes: 128 * 1024 });
255
+ }
256
+ }
192
257
  if (!signed.ok) throw new Error(`RUNTIME_RELEASE_MACOS_SIGNING_FAILED: ${signed.stderr || signed.stdout || signed.error}`.slice(0, 2_000));
193
258
  const inspected = inspectMacOSRuntimeCodeSigning(input.executable);
194
259
  if (inspected.teamIdentifier !== selected.teamIdentifier) throw new Error('RUNTIME_RELEASE_MACOS_SIGNING_TEAM_MISMATCH');
@@ -258,10 +323,12 @@ function parseCandidateStageReceipt(stdout: string): CandidateRuntimeStageReceip
258
323
  export function stageRuntimeReleaseFromCandidateSource(input: {
259
324
  controllerHome: string;
260
325
  sourceRoot: string;
326
+ dependencyRoot?: string;
261
327
  sourceRepositoryId: string;
262
328
  }, dependencies: CandidateRuntimeReleaseStagerDependencies = {}): StagedRuntimeRelease {
263
329
  const controllerHome = resolve(input.controllerHome);
264
330
  const sourceRoot = resolve(input.sourceRoot);
331
+ const dependencyRoot = resolve(input.dependencyRoot ?? input.sourceRoot);
265
332
  const sourceRepositoryId = input.sourceRepositoryId.trim();
266
333
  if (!sourceRepositoryId) throw new Error('RUNTIME_RELEASE_SOURCE_REPOSITORY_ID_REQUIRED');
267
334
  const expectedHead = gitText(sourceRoot, ['rev-parse', '--verify', 'HEAD']);
@@ -279,10 +346,11 @@ export function stageRuntimeReleaseFromCandidateSource(input: {
279
346
  request.scriptPath,
280
347
  '--controller-home', request.controllerHome,
281
348
  '--source-root', request.sourceRoot,
349
+ '--dependency-root', request.dependencyRoot,
282
350
  '--expected-head', request.expectedHead,
283
351
  '--source-repository-id', request.sourceRepositoryId,
284
352
  ], { cwd: request.sourceRoot, timeoutMs: 600_000, maxOutputBytes: 512 * 1024 }));
285
- const executed = runCandidateStager({ bunExecutable, scriptPath, sourceRoot, controllerHome, expectedHead, sourceRepositoryId });
353
+ const executed = runCandidateStager({ bunExecutable, scriptPath, sourceRoot, dependencyRoot, controllerHome, expectedHead, sourceRepositoryId });
286
354
  if (!executed.ok) {
287
355
  throw new Error(`RUNTIME_RELEASE_CANDIDATE_STAGE_FAILED: ${executed.stderr || executed.stdout || executed.error}`.slice(0, 2_000));
288
356
  }
@@ -360,18 +428,18 @@ export function stageRuntimeReleaseFromCandidateSource(input: {
360
428
  releaseId: receipt.releaseId,
361
429
  artifactIdentity: receipt.artifactIdentity,
362
430
  runtimeBundleArtifactIdentity: manifest.runtimeBundleArtifactIdentity,
431
+ runtimeInterpreterArtifactIdentity: manifest.runtimeInterpreterArtifactIdentity,
363
432
  diagnosticArtifactIdentity: manifest.diagnosticArtifactIdentity,
433
+ connectorArtifactIdentity: manifest.connectorArtifactIdentity,
364
434
  browserNodeBridgeArtifactIdentity: manifest.browserNodeBridgeArtifactIdentity,
365
435
  browserHandoffArtifactIdentity: manifest.browserHandoffArtifactIdentity,
436
+ workflowSupervisorNativeHostArtifactIdentity: manifest.workflowSupervisorNativeHostArtifactIdentity,
366
437
  processRunnerArtifactIdentity: manifest.processRunnerArtifactIdentity,
367
438
  checkRunnerArtifactIdentity: manifest.checkRunnerArtifactIdentity,
368
439
  schedulerWorkerArtifactIdentity: manifest.schedulerWorkerArtifactIdentity,
369
440
  periodicCleanupArtifactIdentity: manifest.periodicCleanupArtifactIdentity,
370
441
  pluginActionSidecarArtifactIdentity: manifest.pluginActionSidecarArtifactIdentity,
371
442
  externalPluginProbeArtifactIdentity: manifest.externalPluginProbeArtifactIdentity,
372
- codeGraphNodeArtifactIdentity: manifest.codeGraphNodeArtifactIdentity,
373
- codeGraphSidecarArtifactIdentity: manifest.codeGraphSidecarArtifactIdentity,
374
- codeGraphLibraryArtifactIdentity: manifest.codeGraphLibraryArtifactIdentity,
375
443
  packageArtifactIdentity: manifest.packageArtifactIdentity,
376
444
  controllerUiArtifactIdentity: manifest.controllerUiArtifactIdentity,
377
445
  ...(macosCodeSigning ? { macosCodeSigning } : {}),
@@ -396,6 +464,31 @@ function defaultCompileBinary(input: { sourceRoot: string; outputPath: string; e
396
464
  ], { cwd: input.sourceRoot, timeoutMs: 300_000, maxOutputBytes: 512 * 1024 });
397
465
  }
398
466
 
467
+ function defaultMaterializeRuntimeInterpreter(input: { sourceRoot: string; outputPath: string }): { ok: boolean; stderr?: string; stdout?: string; error?: string } {
468
+ const configured = process.env.FORGE_BUN_BIN?.trim();
469
+ const bun = configured || resolveBunExecutable(process.execPath, process.env);
470
+ const probe = runProcess(bun, ['-e', 'process.stdout.write(process.execPath)'], {
471
+ cwd: input.sourceRoot,
472
+ timeoutMs: 15_000,
473
+ maxOutputBytes: 16 * 1024,
474
+ });
475
+ if (!probe.ok) return probe;
476
+ try {
477
+ const reported = probe.stdout.trim();
478
+ if (!reported) return { ok: false, error: 'Bun did not report process.execPath' };
479
+ const source = realpathSync(resolve(reported));
480
+ const status = lstatSync(source);
481
+ if (status.isSymbolicLink() || !status.isFile() || (status.mode & 0o111) === 0) {
482
+ return { ok: false, error: `resolved Bun interpreter is not a regular executable: ${source}` };
483
+ }
484
+ copyFileSync(source, input.outputPath);
485
+ chmodSync(input.outputPath, 0o700);
486
+ return { ok: true };
487
+ } catch (error) {
488
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
489
+ }
490
+ }
491
+
399
492
  function defaultBundleRuntimeScript(input: { sourceRoot: string; outputPath: string; entryPath: string }): { ok: boolean; stderr?: string; stdout?: string; error?: string } {
400
493
  const configured = process.env.FORGE_BUN_BIN?.trim();
401
494
  const bun = configured || resolveBunExecutable(process.execPath, process.env);
@@ -420,38 +513,14 @@ function defaultBundleNodeScript(input: { sourceRoot: string; outputPath: string
420
513
  ], { cwd: input.sourceRoot, timeoutMs: 300_000, maxOutputBytes: 512 * 1024 });
421
514
  }
422
515
 
423
- function defaultMaterializeCodeGraphRuntime(input: {
424
- sourceRoot: string;
425
- nodeOutputPath: string;
426
- sidecarOutputPath: string;
427
- libraryOutputPath: string;
428
- }): { ok: boolean; stderr?: string; stdout?: string; error?: string } {
429
- try {
430
- const sourceRequire = createRequire(join(input.sourceRoot, 'package.json'));
431
- const platformPackage = `@colbymchenry/codegraph-${process.platform}-${process.arch}`;
432
- const packageJson = sourceRequire.resolve(`${platformPackage}/package.json`);
433
- const packageRoot = dirname(packageJson);
434
- const nodeSource = join(packageRoot, process.platform === 'win32' ? 'node.exe' : 'node');
435
- const librarySource = join(packageRoot, 'lib');
436
- const sidecarSource = join(input.sourceRoot, 'src', 'runtime', 'context', 'codegraph-sidecar.cjs');
437
- if (!existsSync(nodeSource) || !statSync(nodeSource).isFile()) throw new Error(`${platformPackage} Node runtime is missing`);
438
- if (!existsSync(librarySource) || !statSync(librarySource).isDirectory()) throw new Error(`${platformPackage} library is missing`);
439
- if (!existsSync(sidecarSource)) throw new Error('CodeGraph sidecar source is missing');
440
- copyFileSync(nodeSource, input.nodeOutputPath);
441
- copyFileSync(sidecarSource, input.sidecarOutputPath);
442
- cpSync(librarySource, input.libraryOutputPath, { recursive: true, force: false });
443
- return { ok: true };
444
- } catch (error) {
445
- return { ok: false, error: error instanceof Error ? error.message : String(error) };
446
- }
447
- }
448
-
449
516
  export function stageRuntimeRelease(input: {
450
517
  controllerHome: string;
451
518
  sourceRoot: string;
519
+ dependencyRoot?: string;
452
520
  sourceRepositoryId?: string;
453
521
  }, dependencies: RuntimeReleaseMaterializerDependencies = {}): StagedRuntimeRelease {
454
522
  const sourceRoot = resolve(input.sourceRoot);
523
+ const dependencyRoot = resolve(input.dependencyRoot ?? input.sourceRoot);
455
524
  const sourceRepositoryId = input.sourceRepositoryId?.trim();
456
525
  if (input.sourceRepositoryId !== undefined && !sourceRepositoryId) throw new Error('RUNTIME_RELEASE_SOURCE_REPOSITORY_ID_INVALID');
457
526
  const sourceCommit = gitText(sourceRoot, ['rev-parse', '--verify', 'HEAD']);
@@ -472,6 +541,7 @@ export function stageRuntimeRelease(input: {
472
541
  mkdirSync(staging, { recursive: true, mode: 0o700 });
473
542
  try {
474
543
  const compileBinary = dependencies.compileBinary ?? defaultCompileBinary;
544
+ const platform = dependencies.platform ?? process.platform;
475
545
  const runtimeBundleEntrypoint = 'forge-runtime-bundle.js' as const;
476
546
  const runtimeBundlePath = join(staging, runtimeBundleEntrypoint);
477
547
  const runtimeBundle = (dependencies.bundleRuntime ?? defaultBundleRuntimeScript)({
@@ -485,6 +555,20 @@ export function stageRuntimeRelease(input: {
485
555
  chmodSync(runtimeBundlePath, 0o600);
486
556
  const runtimeBundleArtifactIdentity = `sha256:${sha256(runtimeBundlePath)}`;
487
557
 
558
+ const runtimeInterpreterEntrypoint = platform === 'win32'
559
+ ? 'forge-runtime-bun.exe' as const
560
+ : 'forge-runtime-bun' as const;
561
+ const runtimeInterpreterPath = join(staging, runtimeInterpreterEntrypoint);
562
+ const runtimeInterpreter = (dependencies.materializeRuntimeInterpreter ?? defaultMaterializeRuntimeInterpreter)({
563
+ sourceRoot,
564
+ outputPath: runtimeInterpreterPath,
565
+ });
566
+ if (!runtimeInterpreter.ok) {
567
+ throw new Error(`RUNTIME_RELEASE_INTERPRETER_BUILD_FAILED: ${runtimeInterpreter.stderr || runtimeInterpreter.stdout || runtimeInterpreter.error}`.slice(0, 2_000));
568
+ }
569
+ chmodSync(runtimeInterpreterPath, 0o700);
570
+ const runtimeInterpreterArtifactIdentity = `sha256:${sha256(runtimeInterpreterPath)}`;
571
+
488
572
  const executable = join(staging, 'forge-runtime');
489
573
  const compile = compileBinary({
490
574
  sourceRoot,
@@ -495,7 +579,6 @@ export function stageRuntimeRelease(input: {
495
579
  throw new Error(`RUNTIME_RELEASE_BUILD_FAILED: ${compile.stderr || compile.stdout || compile.error}`.slice(0, 2_000));
496
580
  }
497
581
  chmodSync(executable, 0o700);
498
- const platform = dependencies.platform ?? process.platform;
499
582
  const macosCodeSigning = platform === 'darwin'
500
583
  ? (dependencies.signMacOSRuntime ?? defaultSignMacOSRuntime)({ executable, controllerHome: resolve(input.controllerHome) })
501
584
  : undefined;
@@ -517,6 +600,19 @@ export function stageRuntimeRelease(input: {
517
600
  chmodSync(diagnosticExecutable, 0o700);
518
601
  const diagnosticArtifactIdentity = `sha256:${sha256(diagnosticExecutable)}`;
519
602
 
603
+ const connectorEntrypoint = 'forge-mcp-gateway' as const;
604
+ const connectorPath = join(staging, connectorEntrypoint);
605
+ const connectorCompile = compileBinary({
606
+ sourceRoot,
607
+ outputPath: connectorPath,
608
+ entryPath: join(sourceRoot, 'src/cli/index.ts'),
609
+ });
610
+ if (!connectorCompile.ok) {
611
+ throw new Error(`RUNTIME_RELEASE_CONNECTOR_BUILD_FAILED: ${connectorCompile.stderr || connectorCompile.stdout || connectorCompile.error}`.slice(0, 2_000));
612
+ }
613
+ chmodSync(connectorPath, 0o700);
614
+ const connectorArtifactIdentity = `sha256:${sha256(connectorPath)}`;
615
+
520
616
  const browserNodeBridgeEntrypoint = 'browser-node-bridge-host.js' as const;
521
617
  const browserNodeBridgePath = join(staging, browserNodeBridgeEntrypoint);
522
618
  const bundleNodeHost = dependencies.bundleNodeHost ?? defaultBundleNodeScript;
@@ -544,6 +640,19 @@ export function stageRuntimeRelease(input: {
544
640
  chmodSync(browserHandoffPath, 0o700);
545
641
  const browserHandoffArtifactIdentity = `sha256:${sha256(browserHandoffPath)}`;
546
642
 
643
+ const workflowSupervisorNativeHostEntrypoint = 'forge-workflow-supervisor-native-host' as const;
644
+ const workflowSupervisorNativeHostPath = join(staging, workflowSupervisorNativeHostEntrypoint);
645
+ const workflowSupervisorNativeHostCompile = compileBinary({
646
+ sourceRoot,
647
+ outputPath: workflowSupervisorNativeHostPath,
648
+ entryPath: join(sourceRoot, 'supervisor', 'native-messaging', 'host.ts'),
649
+ });
650
+ if (!workflowSupervisorNativeHostCompile.ok) {
651
+ throw new Error(`RUNTIME_RELEASE_WORKFLOW_SUPERVISOR_NATIVE_HOST_BUILD_FAILED: ${workflowSupervisorNativeHostCompile.stderr || workflowSupervisorNativeHostCompile.stdout || workflowSupervisorNativeHostCompile.error}`.slice(0, 2_000));
652
+ }
653
+ chmodSync(workflowSupervisorNativeHostPath, 0o700);
654
+ const workflowSupervisorNativeHostArtifactIdentity = `sha256:${sha256(workflowSupervisorNativeHostPath)}`;
655
+
547
656
  const processRunnerEntrypoint = 'process-runner.js' as const;
548
657
  const processRunnerPath = join(staging, processRunnerEntrypoint);
549
658
  // Process Runner is part of the immutable execution surface and must not
@@ -576,6 +685,32 @@ export function stageRuntimeRelease(input: {
576
685
  chmodSync(checkRunnerPath, 0o700);
577
686
  const checkRunnerArtifactIdentity = `sha256:${sha256(checkRunnerPath)}`;
578
687
 
688
+ const typescriptNavigationEntrypoint = 'forge-typescript-navigation' as const;
689
+ const typescriptNavigationPath = join(staging, typescriptNavigationEntrypoint);
690
+ const typescriptNavigationCompile = compileBinary({
691
+ sourceRoot,
692
+ outputPath: typescriptNavigationPath,
693
+ entryPath: join(sourceRoot, 'adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts'),
694
+ });
695
+ if (!typescriptNavigationCompile.ok) {
696
+ throw new Error(`RUNTIME_RELEASE_TYPESCRIPT_NAVIGATION_BUILD_FAILED: ${typescriptNavigationCompile.stderr || typescriptNavigationCompile.stdout || typescriptNavigationCompile.error}`.slice(0, 2_000));
697
+ }
698
+ chmodSync(typescriptNavigationPath, 0o700);
699
+ const typescriptNavigationArtifactIdentity = `sha256:${sha256(typescriptNavigationPath)}`;
700
+
701
+ const contextPackEntrypoint = 'forge-context-pack' as const;
702
+ const contextPackPath = join(staging, contextPackEntrypoint);
703
+ const contextPackCompile = compileBinary({
704
+ sourceRoot,
705
+ outputPath: contextPackPath,
706
+ entryPath: join(sourceRoot, 'adapters/mcp/runtime-gateway/context-pack-sidecar.ts'),
707
+ });
708
+ if (!contextPackCompile.ok) {
709
+ throw new Error(`RUNTIME_RELEASE_CONTEXT_PACK_BUILD_FAILED: ${contextPackCompile.stderr || contextPackCompile.stdout || contextPackCompile.error}`.slice(0, 2_000));
710
+ }
711
+ chmodSync(contextPackPath, 0o700);
712
+ const contextPackArtifactIdentity = `sha256:${sha256(contextPackPath)}`;
713
+
579
714
  const schedulerWorkerEntrypoint = 'forge-scheduler-worker' as const;
580
715
  const schedulerWorkerPath = join(staging, schedulerWorkerEntrypoint);
581
716
  const schedulerWorkerCompile = compileBinary({
@@ -625,46 +760,17 @@ export function stageRuntimeRelease(input: {
625
760
  chmodSync(externalPluginProbePath, 0o700);
626
761
  const externalPluginProbeArtifactIdentity = `sha256:${sha256(externalPluginProbePath)}`;
627
762
 
628
- const codeGraphNodeEntrypoint = 'codegraph-node' as const;
629
- const codeGraphSidecarEntrypoint = 'codegraph-sidecar.cjs' as const;
630
- const codeGraphLibraryRoot = 'codegraph-lib' as const;
631
- const codeGraphNodePath = join(staging, codeGraphNodeEntrypoint);
632
- const codeGraphSidecarPath = join(staging, codeGraphSidecarEntrypoint);
633
- const codeGraphLibraryPath = join(staging, codeGraphLibraryRoot);
634
- const codeGraphRuntime = (dependencies.materializeCodeGraphRuntime ?? defaultMaterializeCodeGraphRuntime)({
635
- sourceRoot,
636
- nodeOutputPath: codeGraphNodePath,
637
- sidecarOutputPath: codeGraphSidecarPath,
638
- libraryOutputPath: codeGraphLibraryPath,
639
- });
640
- if (!codeGraphRuntime.ok) {
641
- throw new Error(`RUNTIME_RELEASE_CODEGRAPH_BUILD_FAILED: ${codeGraphRuntime.stderr || codeGraphRuntime.stdout || codeGraphRuntime.error}`.slice(0, 2_000));
642
- }
643
- chmodSync(codeGraphNodePath, 0o700);
644
- chmodSync(codeGraphSidecarPath, 0o700);
645
- const codeGraphNodeArtifactIdentity = `sha256:${sha256(codeGraphNodePath)}`;
646
- const codeGraphSidecarArtifactIdentity = `sha256:${sha256(codeGraphSidecarPath)}`;
647
- const codeGraphLibraryArtifactIdentity = `sha256:${sha256Directory(codeGraphLibraryPath)}`;
648
-
649
- const controllerUiRoot = 'ui-dist' as const;
650
- const sourceControllerUiPath = join(sourceRoot, 'src', 'cli', 'local-bridge', controllerUiRoot);
651
- const sourceControllerUiJs = join(sourceControllerUiPath, 'app.js');
652
- const sourceControllerUiCss = join(sourceControllerUiPath, 'app.css');
653
- if (!existsSync(sourceControllerUiJs) || !existsSync(sourceControllerUiCss)) {
654
- throw new Error(`RUNTIME_RELEASE_CONTROLLER_UI_SOURCE_MISSING: ${sourceControllerUiPath}`);
655
- }
656
- const controllerUiPath = join(staging, controllerUiRoot);
657
- cpSync(sourceControllerUiPath, controllerUiPath, { recursive: true, force: false });
658
- const controllerUiArtifactIdentity = `sha256:${sha256Directory(controllerUiPath)}`;
659
-
660
- // The persistent OAuth/Connector is source-backed even when the primary
661
- // Runtime itself is compiled. Co-locate one immutable package snapshot in
662
- // the same release so standalone Recovery can bind the Connector to the
663
- // exact active release instead of retaining an older package release.
763
+ // Keep the source-backed package projection during the Recovery migration.
764
+ // The active standalone Recovery release can predate the compiled Connector
765
+ // sidecar and still rebind the primary Connector through package/src/cli.
766
+ // Removing that surface here makes a candidate pass isolated Runtime
767
+ // canaries but fail the real cutover with missing CLI command modules. Once
768
+ // every supported Recovery release launches forge-mcp-gateway, this
769
+ // compatibility projection can be removed together with the fallback.
664
770
  const packageRoot = 'package' as const;
665
771
  const packagePath = join(staging, packageRoot);
666
- const packageRecords = packageRuntimeFileIndex(sourceRoot);
667
- stagePackageRuntimeSnapshot(sourceRoot, packagePath, packageRecords);
772
+ const packageRecords = packageRuntimeFileIndex(sourceRoot, dependencyRoot);
773
+ stagePackageRuntimeSnapshot(sourceRoot, packagePath, packageRecords, dependencyRoot);
668
774
  const packageArtifactIdentity = `sha256:${sha256Directory(packagePath)}`;
669
775
 
670
776
  const manifest = {
@@ -675,17 +781,27 @@ export function stageRuntimeRelease(input: {
675
781
  executionMode: 'standalone-binary',
676
782
  runtimeBundleEntrypoint,
677
783
  runtimeBundleArtifactIdentity,
784
+ runtimeInterpreterEntrypoint,
785
+ runtimeInterpreterArtifactIdentity,
678
786
  ...(normalizedMacOSCodeSigning ? { macosCodeSigning: normalizedMacOSCodeSigning } : {}),
679
787
  diagnosticEntrypoint: 'forge-cli',
680
788
  diagnosticArtifactIdentity,
789
+ connectorEntrypoint,
790
+ connectorArtifactIdentity,
681
791
  browserNodeBridgeEntrypoint,
682
792
  browserNodeBridgeArtifactIdentity,
683
793
  browserHandoffEntrypoint,
684
794
  browserHandoffArtifactIdentity,
795
+ workflowSupervisorNativeHostEntrypoint,
796
+ workflowSupervisorNativeHostArtifactIdentity,
685
797
  processRunnerEntrypoint,
686
798
  processRunnerArtifactIdentity,
687
799
  checkRunnerEntrypoint,
688
800
  checkRunnerArtifactIdentity,
801
+ typescriptNavigationEntrypoint,
802
+ typescriptNavigationArtifactIdentity,
803
+ contextPackEntrypoint,
804
+ contextPackArtifactIdentity,
689
805
  schedulerWorkerEntrypoint,
690
806
  schedulerWorkerArtifactIdentity,
691
807
  periodicCleanupEntrypoint,
@@ -694,19 +810,11 @@ export function stageRuntimeRelease(input: {
694
810
  pluginActionSidecarArtifactIdentity,
695
811
  externalPluginProbeEntrypoint,
696
812
  externalPluginProbeArtifactIdentity,
697
- codeGraphNodeEntrypoint,
698
- codeGraphNodeArtifactIdentity,
699
- codeGraphSidecarEntrypoint,
700
- codeGraphSidecarArtifactIdentity,
701
- codeGraphLibraryRoot,
702
- codeGraphLibraryArtifactIdentity,
703
813
  packageRoot,
704
814
  packageArtifactIdentity,
705
- controllerUiRoot,
706
- controllerUiArtifactIdentity,
707
815
  arguments: [],
708
816
  configurationSchemaVersion: 1,
709
- controllerHome: resolve(input.controllerHome),
817
+ deploymentScope: 'portable',
710
818
  databaseSchemaCompatibility: {
711
819
  minimum: CONTROL_PLANE_SCHEMA_VERSION,
712
820
  maximum: CONTROL_PLANE_SCHEMA_VERSION,
@@ -728,21 +836,22 @@ export function stageRuntimeRelease(input: {
728
836
  releaseId,
729
837
  artifactIdentity,
730
838
  runtimeBundleArtifactIdentity,
839
+ runtimeInterpreterArtifactIdentity,
731
840
  ...(normalizedMacOSCodeSigning ? { macosCodeSigning: normalizedMacOSCodeSigning } : {}),
732
841
  diagnosticArtifactIdentity,
842
+ connectorArtifactIdentity,
733
843
  browserNodeBridgeArtifactIdentity,
734
844
  browserHandoffArtifactIdentity,
845
+ workflowSupervisorNativeHostArtifactIdentity,
735
846
  processRunnerArtifactIdentity,
736
847
  checkRunnerArtifactIdentity,
848
+ typescriptNavigationArtifactIdentity,
849
+ contextPackArtifactIdentity,
737
850
  schedulerWorkerArtifactIdentity,
738
851
  periodicCleanupArtifactIdentity,
739
852
  pluginActionSidecarArtifactIdentity,
740
853
  externalPluginProbeArtifactIdentity,
741
- codeGraphNodeArtifactIdentity,
742
- codeGraphSidecarArtifactIdentity,
743
- codeGraphLibraryArtifactIdentity,
744
854
  packageArtifactIdentity,
745
- controllerUiArtifactIdentity,
746
855
  manifestSha256: createHash('sha256').update(`${JSON.stringify(manifest, null, 2)}\n`).digest('hex'),
747
856
  sourceCommit,
748
857
  ...(sourceRepositoryId ? { sourceRepositoryId } : {}),
@@ -753,6 +862,161 @@ export function stageRuntimeRelease(input: {
753
862
  }
754
863
  }
755
864
 
865
+
866
+ interface RuntimeReleaseTreeInspection {
867
+ sha256: string;
868
+ bytes: number;
869
+ files: number;
870
+ }
871
+
872
+ function inspectRuntimeReleaseTree(releaseRootInput: string): RuntimeReleaseTreeInspection {
873
+ const requestedRoot = resolve(releaseRootInput);
874
+ if (!existsSync(requestedRoot)) throw new Error('RUNTIME_RELEASE_TREE_MISSING');
875
+ const rootStat = lstatSync(requestedRoot);
876
+ if (!rootStat.isDirectory() || rootStat.isSymbolicLink()) throw new Error('RUNTIME_RELEASE_TREE_ROOT_INVALID');
877
+ const root = realpathSync(requestedRoot);
878
+ const records: Array<{ path: string; mode: number; bytes: number; sha256: string }> = [];
879
+ const visit = (directory: string): void => {
880
+ for (const entry of readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
881
+ const path = join(directory, entry.name);
882
+ const stat = lstatSync(path);
883
+ if (stat.isSymbolicLink()) throw new Error(`RUNTIME_RELEASE_TREE_SYMLINK_FORBIDDEN: ${relative(root, path)}`);
884
+ if (stat.isDirectory()) {
885
+ visit(path);
886
+ continue;
887
+ }
888
+ if (!stat.isFile()) throw new Error(`RUNTIME_RELEASE_TREE_SPECIAL_FILE_FORBIDDEN: ${relative(root, path)}`);
889
+ const bytes = readFileSync(path);
890
+ records.push({
891
+ path: relative(root, path).replaceAll('\\', '/'),
892
+ mode: stat.mode & 0o777,
893
+ bytes: bytes.length,
894
+ sha256: createHash('sha256').update(bytes).digest('hex'),
895
+ });
896
+ }
897
+ };
898
+ visit(root);
899
+ const digest = createHash('sha256').update(JSON.stringify(records)).digest('hex');
900
+ return {
901
+ sha256: digest,
902
+ bytes: records.reduce((sum, record) => sum + record.bytes, 0),
903
+ files: records.length,
904
+ };
905
+ }
906
+
907
+ function preserveRuntimeReleaseTreeModes(sourceRootInput: string, targetRootInput: string): void {
908
+ const sourceRoot = resolve(sourceRootInput);
909
+ const targetRoot = resolve(targetRootInput);
910
+ const visit = (sourceDirectory: string, targetDirectory: string): void => {
911
+ for (const entry of readdirSync(sourceDirectory, { withFileTypes: true })) {
912
+ const sourcePath = join(sourceDirectory, entry.name);
913
+ const targetPath = join(targetDirectory, entry.name);
914
+ const sourceStat = lstatSync(sourcePath);
915
+ if (sourceStat.isDirectory()) {
916
+ chmodSync(targetPath, sourceStat.mode & 0o777);
917
+ visit(sourcePath, targetPath);
918
+ } else if (sourceStat.isFile()) {
919
+ // fs.cpSync applies the process umask to copied files. The release
920
+ // tree digest includes permission bits, so restore the source mode
921
+ // before comparing the staged tree with its immutable source.
922
+ chmodSync(targetPath, sourceStat.mode & 0o777);
923
+ }
924
+ }
925
+ };
926
+ chmodSync(targetRoot, lstatSync(sourceRoot).mode & 0o777);
927
+ visit(sourceRoot, targetRoot);
928
+ }
929
+
930
+ export function runtimeReleaseTreeSha256(releaseRoot: string): string {
931
+ return inspectRuntimeReleaseTree(releaseRoot).sha256;
932
+ }
933
+
934
+ export interface PromotedPortableRuntimeRelease {
935
+ releaseId: string;
936
+ artifactIdentity: string;
937
+ manifestPath: string;
938
+ manifestSha256: string;
939
+ treeSha256: string;
940
+ sourceReleaseRoot: string;
941
+ targetReleaseRoot: string;
942
+ reusedExisting: boolean;
943
+ }
944
+
945
+ export function promotePortableRuntimeRelease(input: {
946
+ sourceManifestPath: string;
947
+ targetControllerHome: string;
948
+ expectedTreeSha256: string;
949
+ }): PromotedPortableRuntimeRelease {
950
+ const sourceManifestPath = resolve(input.sourceManifestPath);
951
+ const sourceReleaseRoot = dirname(sourceManifestPath);
952
+ const targetControllerHome = resolve(input.targetControllerHome);
953
+ const manifest = loadRuntimeReleaseManifest(sourceManifestPath, targetControllerHome);
954
+ if (manifest.deploymentScope !== 'portable') throw new Error('RUNTIME_RELEASE_PROMOTION_REQUIRES_PORTABLE_ARTIFACT');
955
+ requireCompleteCompiledRuntimeReleaseManifest(manifest);
956
+ assertRuntimeReleaseExecutionSurface(sourceManifestPath, targetControllerHome);
957
+
958
+ const sourceTree = inspectRuntimeReleaseTree(sourceReleaseRoot);
959
+ if (sourceTree.sha256 !== input.expectedTreeSha256) throw new Error('RUNTIME_RELEASE_PROMOTION_SOURCE_TREE_MISMATCH');
960
+ const sourceManifestSha256 = createHash('sha256').update(readFileSync(sourceManifestPath)).digest('hex');
961
+
962
+ const releasesRoot = join(targetControllerHome, 'runtime', 'releases');
963
+ mkdirSync(releasesRoot, { recursive: true, mode: 0o700 });
964
+ const targetReleaseRoot = join(releasesRoot, manifest.releaseId);
965
+ const targetManifestPath = join(targetReleaseRoot, 'manifest.json');
966
+
967
+ const verifyTarget = (reusedExisting: boolean): PromotedPortableRuntimeRelease => {
968
+ const targetManifest = loadRuntimeReleaseManifest(targetManifestPath, targetControllerHome);
969
+ if (
970
+ targetManifest.deploymentScope !== 'portable'
971
+ || targetManifest.releaseId !== manifest.releaseId
972
+ || targetManifest.artifactIdentity !== manifest.artifactIdentity
973
+ ) throw new Error('RUNTIME_RELEASE_PROMOTION_TARGET_IDENTITY_MISMATCH');
974
+ requireCompleteCompiledRuntimeReleaseManifest(targetManifest);
975
+ assertRuntimeReleaseExecutionSurface(targetManifestPath, targetControllerHome);
976
+ const targetManifestSha256 = createHash('sha256').update(readFileSync(targetManifestPath)).digest('hex');
977
+ const targetTreeSha256 = runtimeReleaseTreeSha256(targetReleaseRoot);
978
+ if (targetManifestSha256 !== sourceManifestSha256 || targetTreeSha256 !== sourceTree.sha256) {
979
+ throw new Error('RUNTIME_RELEASE_PROMOTION_NOT_BYTE_IDENTICAL');
980
+ }
981
+ return {
982
+ releaseId: manifest.releaseId,
983
+ artifactIdentity: manifest.artifactIdentity,
984
+ manifestPath: targetManifestPath,
985
+ manifestSha256: targetManifestSha256,
986
+ treeSha256: targetTreeSha256,
987
+ sourceReleaseRoot,
988
+ targetReleaseRoot,
989
+ reusedExisting,
990
+ };
991
+ };
992
+
993
+ if (existsSync(targetReleaseRoot)) return verifyTarget(true);
994
+
995
+ assertStorageHeadroom(releasesRoot, {
996
+ operation: 'runtime_release_promotion',
997
+ requiredBytes: sourceTree.bytes,
998
+ reserveBytes: 64 * 1024 * 1024,
999
+ });
1000
+ const staging = join(releasesRoot, `.${manifest.releaseId}.promote-${process.pid}-${randomUUID().slice(0, 8)}`);
1001
+ try {
1002
+ cpSync(sourceReleaseRoot, staging, {
1003
+ recursive: true,
1004
+ force: false,
1005
+ errorOnExist: true,
1006
+ preserveTimestamps: false,
1007
+ dereference: false,
1008
+ });
1009
+ preserveRuntimeReleaseTreeModes(sourceReleaseRoot, staging);
1010
+ const stagedTree = inspectRuntimeReleaseTree(staging);
1011
+ if (stagedTree.sha256 !== sourceTree.sha256) throw new Error('RUNTIME_RELEASE_PROMOTION_STAGING_TREE_MISMATCH');
1012
+ renameSync(staging, targetReleaseRoot);
1013
+ return verifyTarget(false);
1014
+ } catch (error) {
1015
+ rmSync(staging, { recursive: true, force: true });
1016
+ throw error;
1017
+ }
1018
+ }
1019
+
756
1020
  export function assertRuntimeReleaseFiles(release: StagedRuntimeRelease, dependencies: { platform?: NodeJS.Platform; inspectMacOSRuntime?: (executable: string) => MacOSRuntimeCodeSigning } = {}): void {
757
1021
  const assertRegularFile = (path: string, missingCode: string): void => {
758
1022
  if (!existsSync(path)) throw new Error(`${missingCode}: ${path}`);
@@ -803,6 +1067,13 @@ export function assertRuntimeReleaseFiles(release: StagedRuntimeRelease, depende
803
1067
  assertFileIdentity(runtimePath, release.artifactIdentity);
804
1068
  assertComponentFile({ path: join(release.releasePath, 'forge-runtime-bundle.js'), identity: release.runtimeBundleArtifactIdentity, missingCode: 'RUNTIME_RELEASE_BUNDLE_MISSING' });
805
1069
  const platform = dependencies.platform ?? process.platform;
1070
+ const runtimeInterpreterEntrypoint = platform === 'win32' ? 'forge-runtime-bun.exe' : 'forge-runtime-bun';
1071
+ assertComponentFile({
1072
+ path: join(release.releasePath, runtimeInterpreterEntrypoint),
1073
+ identity: release.runtimeInterpreterArtifactIdentity,
1074
+ missingCode: 'RUNTIME_RELEASE_INTERPRETER_MISSING',
1075
+ executable: true,
1076
+ });
806
1077
  if (platform === 'darwin' && release.macosCodeSigning) {
807
1078
  const actual = (dependencies.inspectMacOSRuntime ?? inspectMacOSRuntimeCodeSigning)(runtimePath);
808
1079
  if (actual.identifier !== release.macosCodeSigning.identifier
@@ -813,23 +1084,18 @@ export function assertRuntimeReleaseFiles(release: StagedRuntimeRelease, depende
813
1084
  }
814
1085
  }
815
1086
  assertComponentFile({ path: join(release.releasePath, 'forge-cli'), identity: release.diagnosticArtifactIdentity, missingCode: 'RUNTIME_RELEASE_DIAGNOSTIC_ENTRYPOINT_MISSING', executable: true });
1087
+ assertComponentFile({ path: join(release.releasePath, 'forge-mcp-gateway'), identity: release.connectorArtifactIdentity, missingCode: 'RUNTIME_RELEASE_CONNECTOR_ENTRYPOINT_MISSING', executable: true });
816
1088
  assertComponentFile({ path: join(release.releasePath, 'browser-node-bridge-host.js'), identity: release.browserNodeBridgeArtifactIdentity, missingCode: 'RUNTIME_RELEASE_BROWSER_NODE_HOST_MISSING', executable: true });
817
1089
  assertComponentFile({ path: join(release.releasePath, 'browser-handoff-host.js'), identity: release.browserHandoffArtifactIdentity, missingCode: 'RUNTIME_RELEASE_BROWSER_HANDOFF_HOST_MISSING', executable: true });
1090
+ assertComponentFile({ path: join(release.releasePath, 'forge-workflow-supervisor-native-host'), identity: release.workflowSupervisorNativeHostArtifactIdentity, missingCode: 'RUNTIME_RELEASE_WORKFLOW_SUPERVISOR_NATIVE_HOST_MISSING', executable: true });
818
1091
  assertComponentFile({ path: join(release.releasePath, 'process-runner.js'), identity: release.processRunnerArtifactIdentity, missingCode: 'RUNTIME_RELEASE_PROCESS_RUNNER_MISSING', executable: true });
819
1092
  assertComponentFile({ path: join(release.releasePath, 'forge-check-runner'), identity: release.checkRunnerArtifactIdentity, missingCode: 'RUNTIME_RELEASE_CHECK_RUNNER_MISSING', executable: true });
1093
+ assertComponentFile({ path: join(release.releasePath, 'forge-typescript-navigation'), identity: release.typescriptNavigationArtifactIdentity, missingCode: 'RUNTIME_RELEASE_TYPESCRIPT_NAVIGATION_MISSING', executable: true });
1094
+ assertComponentFile({ path: join(release.releasePath, 'forge-context-pack'), identity: release.contextPackArtifactIdentity, missingCode: 'RUNTIME_RELEASE_CONTEXT_PACK_MISSING', executable: true });
820
1095
  assertComponentFile({ path: join(release.releasePath, 'forge-scheduler-worker'), identity: release.schedulerWorkerArtifactIdentity, missingCode: 'RUNTIME_RELEASE_SCHEDULER_WORKER_MISSING', executable: true });
821
1096
  assertComponentFile({ path: join(release.releasePath, 'forge-periodic-cleanup'), identity: release.periodicCleanupArtifactIdentity, missingCode: 'RUNTIME_RELEASE_PERIODIC_CLEANUP_MISSING', executable: true });
822
1097
  assertComponentFile({ path: join(release.releasePath, 'forge-plugin-action-sidecar'), identity: release.pluginActionSidecarArtifactIdentity, missingCode: 'RUNTIME_RELEASE_PLUGIN_ACTION_SIDECAR_MISSING', executable: true });
823
1098
  assertComponentFile({ path: join(release.releasePath, 'external-unix-socket-probe.cjs'), identity: release.externalPluginProbeArtifactIdentity, missingCode: 'RUNTIME_RELEASE_EXTERNAL_PLUGIN_PROBE_MISSING', executable: true });
824
- assertComponentFile({ path: join(release.releasePath, 'codegraph-node'), identity: release.codeGraphNodeArtifactIdentity, missingCode: 'RUNTIME_RELEASE_CODEGRAPH_NODE_MISSING', executable: true });
825
- assertComponentFile({ path: join(release.releasePath, 'codegraph-sidecar.cjs'), identity: release.codeGraphSidecarArtifactIdentity, missingCode: 'RUNTIME_RELEASE_CODEGRAPH_SIDECAR_MISSING', executable: true });
826
- if (release.codeGraphLibraryArtifactIdentity) {
827
- const libraryRoot = join(release.releasePath, 'codegraph-lib');
828
- if (!existsSync(join(libraryRoot, 'dist', 'index.js'))) {
829
- throw new Error(`RUNTIME_RELEASE_CODEGRAPH_LIBRARY_MISSING: ${join(libraryRoot, 'dist', 'index.js')}`);
830
- }
831
- assertDirectoryIdentity(libraryRoot, release.codeGraphLibraryArtifactIdentity);
832
- }
833
1099
  if (release.packageArtifactIdentity) {
834
1100
  const packageRoot = join(release.releasePath, 'package');
835
1101
  assertDirectoryIdentity(packageRoot, release.packageArtifactIdentity);