@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
@@ -28,7 +28,6 @@ export interface McpServeOptions {
28
28
  devRunnerAgents?: string;
29
29
  devRunnerTimeoutMs?: string;
30
30
  devRunnerMaxTimeoutMs?: string;
31
- toolset?: 'facade' | 'core' | 'advanced' | 'full';
32
31
  }
33
32
 
34
33
  interface McpAccessOptions {
@@ -105,7 +104,6 @@ async function runRepositoryAccessCommand(
105
104
  repo: rawOpts.repo ?? '.',
106
105
  controllerHome: rawOpts.controllerHome,
107
106
  profile: 'controller',
108
- toolset: 'core',
109
107
  });
110
108
  const result = callAccessTool(ctx, toolName, {
111
109
  repo_id: rawOpts.repoId,
@@ -170,7 +168,6 @@ export function buildMcpCommand(): Command {
170
168
  .option('--host <host>', 'HTTP bind host', '127.0.0.1')
171
169
  .option('--port <port>', 'HTTP bind port', '8765')
172
170
  .option('--profile <profile>', 'MCP profile: planner|executor|orchestrator|controller', 'controller')
173
- .option('--toolset <toolset>', 'Controller toolset: facade|core|advanced|full (default advanced; facade is an explicit five-tool ChatGPT surface)')
174
171
  .option('--auth <mode>', 'HTTP auth mode: oauth|bearer|none', 'oauth')
175
172
  .option('--enable-chatgpt-browser', 'Expose tools that operate the user logged-in ChatGPT Web browser session')
176
173
  .option('--enable-dev-runner', 'Enable local Codex/Claude task runners for controller or orchestrator profiles')
@@ -191,7 +188,6 @@ export function buildMcpCommand(): Command {
191
188
  repo: rawOpts.repo ?? '.',
192
189
  controllerHome: rawOpts.controllerHome,
193
190
  profile: rawOpts.profile,
194
- toolset: rawOpts.toolset,
195
191
  enableChatgptBrowser: rawOpts.enableChatgptBrowser === true,
196
192
  enableDevRunner: rawOpts.enableDevRunner,
197
193
  devRunnerAgents: rawOpts.devRunnerAgents,
@@ -206,7 +202,6 @@ export function buildMcpCommand(): Command {
206
202
  repo: rawOpts.repo,
207
203
  controllerHome: rawOpts.controllerHome,
208
204
  profile: rawOpts.profile,
209
- toolset: rawOpts.toolset,
210
205
  host: rawOpts.host,
211
206
  port: parsePort(rawOpts.port),
212
207
  auth: rawOpts.auth,
@@ -18,7 +18,6 @@ import {
18
18
  isAgenticPackagingIntent,
19
19
  isBugFixIntent,
20
20
  isBugOrHuntIntent,
21
- isCodegraphRouteIntent,
22
21
  isDoneIntent,
23
22
  isEmbeddedApprovedPlanIntent,
24
23
  isExecutionApprovalIntent,
@@ -185,7 +184,6 @@ export function runPromptGuardVerdictFromPrompt(prompt: string): PromptGuardVerd
185
184
  plan_discussion_continuation: bit(decisionFacts.planningDiscussion),
186
185
  trigger_question: bit(isTriggerQuestionPrompt(ctx)),
187
186
  agentic_packaging: bit(isAgenticPackagingIntent(ctx)),
188
- codegraph_route: bit(isCodegraphRouteIntent(ctx)),
189
187
  nontrivial_code_task: bit(isNontrivialCodeTaskIntent(ctx)),
190
188
  health_route: bit(isHealthRouteIntent(ctx)),
191
189
  spa_day: bit(isSpaDayIntent(ctx)),
@@ -19,8 +19,7 @@ import {
19
19
  } from '../repositories/controller-home';
20
20
  import { FORGE_VERSION } from '../../version';
21
21
  import {
22
- RECOVERY_GATEWAY_LABEL,
23
- RECOVERY_WATCHDOG_LABEL,
22
+ RECOVERY_DAEMON_LABEL,
24
23
  inspectRecoveryTunnelLaunchdContract,
25
24
  installStandaloneRecovery,
26
25
  recoveryLaunchdPid,
@@ -37,6 +36,7 @@ import {
37
36
  activateRuntimeRelease,
38
37
  defaultPrimaryRuntimeServiceConfig,
39
38
  loadRecoveryConfig,
39
+ normalizeRecoveryInstallProfile,
40
40
  recoverPrimaryRuntime,
41
41
  recoveryMachineIdentity,
42
42
  restartPrimaryConnector,
@@ -61,7 +61,6 @@ import {
61
61
  scheduleLinuxControllerHomeMigration,
62
62
  type RecoveryControllerHomeMigrationPreflight,
63
63
  } from '../../runtime/standalone-recovery/controller-home-migration';
64
- import { configureCodegraph, ensureCodegraph } from '../tools/codegraph';
65
64
  import { isProcessAlive } from '../../runtime/shared/process-tree';
66
65
  import { systemdUserServicePid, systemdUserUnitName, systemdUserUnitPath } from '../controller/systemd-user';
67
66
  import { installWindowsHostRecoveryPlugin } from '../../runtime/plugins/windows-host-recovery-install';
@@ -149,12 +148,57 @@ export type { RecoveryControllerHomeMigrationPreflight };
149
148
  export interface RecoveryConnectorDependencies {
150
149
  platform?: NodeJS.Platform;
151
150
  pathExists?: (path: string) => boolean;
152
- launchdPid?: (role: 'gateway' | 'watchdog') => number | undefined;
153
- systemdPid?: (role: 'gateway' | 'watchdog') => number | undefined;
151
+ launchdPid?: (role: 'daemon') => number | undefined;
152
+ systemdPid?: (role: 'daemon') => number | undefined;
154
153
  tunnelLaunchdPid?: (label: string) => number | undefined;
155
154
  tunnelSystemdPid?: (unitName: string) => number | undefined;
156
155
  openAiTunnelStatus?: (service: OpenAiSecureTunnelServiceConfig) => OpenAiSecureTunnelRuntimeObservation;
157
156
  processAlive?: (pid: number) => boolean;
157
+ processParentPid?: (pid: number) => number | undefined;
158
+ }
159
+
160
+ function recoveryProcessParentPid(pid: number): number | undefined {
161
+ if (process.platform === 'win32' || !Number.isInteger(pid) || pid <= 1) return undefined;
162
+ const result = spawnSync('ps', ['-o', 'ppid=', '-p', String(pid)], {
163
+ encoding: 'utf8',
164
+ timeout: 2_000,
165
+ maxBuffer: 8 * 1024,
166
+ });
167
+ if (result.status !== 0) return undefined;
168
+ const parent = Number.parseInt((result.stdout ?? '').trim(), 10);
169
+ return Number.isInteger(parent) && parent > 0 ? parent : undefined;
170
+ }
171
+
172
+ /**
173
+ * launchd may own a tiny wrapper (/usr/bin/env) while Recovery records the
174
+ * compiled child PID in its runtime identity. Treat only that bounded process
175
+ * lineage as the same managed service; unrelated live PIDs still fail closed.
176
+ */
177
+ export function recoveryManagedServiceOwnsRuntimeProcess(
178
+ managedPid: number | undefined,
179
+ runtimePid: number | undefined,
180
+ dependencies: {
181
+ processAlive?: (pid: number) => boolean;
182
+ processParentPid?: (pid: number) => number | undefined;
183
+ maxDepth?: number;
184
+ } = {},
185
+ ): boolean {
186
+ if (!managedPid || !runtimePid || managedPid <= 0 || runtimePid <= 0) return false;
187
+ const processAlive = dependencies.processAlive ?? isProcessAlive;
188
+ if (!processAlive(managedPid) || !processAlive(runtimePid)) return false;
189
+ if (managedPid === runtimePid) return true;
190
+ const parentPid = dependencies.processParentPid ?? recoveryProcessParentPid;
191
+ const maxDepth = Math.max(1, Math.min(Math.trunc(dependencies.maxDepth ?? 8), 32));
192
+ const visited = new Set<number>([runtimePid]);
193
+ let current = runtimePid;
194
+ for (let depth = 0; depth < maxDepth; depth += 1) {
195
+ const parent = parentPid(current);
196
+ if (!parent || parent <= 0 || visited.has(parent)) return false;
197
+ if (parent === managedPid) return true;
198
+ visited.add(parent);
199
+ current = parent;
200
+ }
201
+ return false;
158
202
  }
159
203
 
160
204
  export interface RecoveryConnectorDescriptor {
@@ -174,8 +218,7 @@ export interface RecoveryConnectorDescriptor {
174
218
  };
175
219
  healthUrl: string;
176
220
  services: {
177
- gateway: { label: string; platform: 'launchd' | 'systemd-user'; serviceInstalled: boolean; plistInstalled: boolean; running: boolean; pid?: number };
178
- watchdog: { label: string; platform: 'launchd' | 'systemd-user'; serviceInstalled: boolean; plistInstalled: boolean; running: boolean; pid?: number };
221
+ recovery: { label: string; platform: 'launchd' | 'systemd-user'; serviceInstalled: boolean; plistInstalled: boolean; running: boolean; pid?: number };
179
222
  tunnel: {
180
223
  configured: boolean;
181
224
  platform?: 'launchd' | 'systemd-user' | 'openai-secure-tunnel';
@@ -208,15 +251,19 @@ export function recoveryConnectorDescriptor(
208
251
  const url = configuredUrl ?? `${localOrigin}/recovery/mcp`;
209
252
  const origin = new URL(url).origin;
210
253
  const passphraseConfigured = Boolean(readMcpServiceOAuthPassphrase(home));
211
- const gatewayIdentity = readRecoveryRuntimeIdentity(home, 'gateway');
212
- const watchdogIdentity = readRecoveryRuntimeIdentity(home, 'watchdog');
254
+ const recoveryIdentity = readRecoveryRuntimeIdentity(home, 'daemon');
213
255
  const platform = dependencies.platform ?? process.platform;
214
256
  const servicePlatform: 'launchd' | 'systemd-user' = platform === 'linux' ? 'systemd-user' : 'launchd';
215
257
  const pathExists = dependencies.pathExists ?? existsSync;
216
258
  const launchdPid = dependencies.launchdPid ?? recoveryLaunchdPid;
217
- const systemdPid = dependencies.systemdPid ?? ((role: 'gateway' | 'watchdog') => systemdUserServicePid(role === 'gateway' ? RECOVERY_GATEWAY_LABEL : RECOVERY_WATCHDOG_LABEL));
218
- const managedPid = (role: 'gateway' | 'watchdog') => servicePlatform === 'systemd-user' ? systemdPid(role) : launchdPid(role);
259
+ const systemdPid = dependencies.systemdPid ?? ((_role: 'daemon') => systemdUserServicePid(RECOVERY_DAEMON_LABEL));
260
+ const managedPid = () => servicePlatform === 'systemd-user' ? systemdPid('daemon') : launchdPid('daemon');
219
261
  const processAlive = dependencies.processAlive ?? isProcessAlive;
262
+ const serviceOwnsRuntimeProcess = (managedPid: number | undefined, runtimePid: number | undefined) =>
263
+ recoveryManagedServiceOwnsRuntimeProcess(managedPid, runtimePid, {
264
+ processAlive,
265
+ processParentPid: dependencies.processParentPid,
266
+ });
220
267
  const configuredTunnel = config.recoveryTunnelService;
221
268
  const tunnelService = configuredTunnel?.platform === 'launchd' ? configuredTunnel : undefined;
222
269
  const systemdTunnelService = configuredTunnel?.platform === 'systemd-user' ? configuredTunnel : undefined;
@@ -256,40 +303,24 @@ export function recoveryConnectorDescriptor(
256
303
  : Boolean(tunnelLaunchdPid && processAlive(tunnelLaunchdPid));
257
304
  const tunnelHealthy = openAiTunnelService ? openAiTunnelStatus?.healthy === true : tunnelRunning;
258
305
  const tunnelReady = openAiTunnelService ? openAiTunnelStatus?.ok === true : tunnelRestartSafe && tunnelRunning;
259
- const gatewayPlistInstalled = pathExists(authority.gatewayLaunchAgent);
260
- const watchdogPlistInstalled = pathExists(authority.watchdogLaunchAgent);
261
- const gatewayServiceInstalled = servicePlatform === 'systemd-user'
262
- ? pathExists(systemdUserUnitPath(RECOVERY_GATEWAY_LABEL))
263
- : gatewayPlistInstalled;
264
- const watchdogServiceInstalled = servicePlatform === 'systemd-user'
265
- ? pathExists(systemdUserUnitPath(RECOVERY_WATCHDOG_LABEL))
266
- : watchdogPlistInstalled;
267
- const gatewayManagedPid = managedPid('gateway');
268
- const watchdogManagedPid = managedPid('watchdog');
269
- const gatewayRunning = Boolean(
270
- gatewayIdentity
271
- && gatewayManagedPid
272
- && gatewayIdentity.pid === gatewayManagedPid
273
- && processAlive(gatewayIdentity.pid)
274
- && authority.current
275
- && gatewayIdentity.releaseRevision === authority.current.releaseRevision
276
- && gatewayIdentity.manifestSha256 === authority.current.manifestSha256,
277
- );
278
- const watchdogRunning = Boolean(
279
- watchdogIdentity
280
- && watchdogManagedPid
281
- && watchdogIdentity.pid === watchdogManagedPid
282
- && processAlive(watchdogIdentity.pid)
306
+ const recoveryPlistInstalled = pathExists(authority.daemonLaunchAgent);
307
+ const recoveryServiceInstalled = servicePlatform === 'systemd-user'
308
+ ? pathExists(systemdUserUnitPath(RECOVERY_DAEMON_LABEL))
309
+ : recoveryPlistInstalled;
310
+ const recoveryManagedPid = managedPid();
311
+ const recoveryRunning = Boolean(
312
+ recoveryIdentity
313
+ && serviceOwnsRuntimeProcess(recoveryManagedPid, recoveryIdentity.pid)
283
314
  && authority.current
284
- && watchdogIdentity.releaseRevision === authority.current.releaseRevision
285
- && watchdogIdentity.manifestSha256 === authority.current.manifestSha256,
315
+ && recoveryIdentity.releaseRevision === authority.current.releaseRevision
316
+ && recoveryIdentity.manifestSha256 === authority.current.manifestSha256,
286
317
  );
287
- const installed = Boolean(authority.current && gatewayServiceInstalled && watchdogServiceInstalled);
318
+ const installed = Boolean(authority.current && recoveryServiceInstalled);
288
319
  const publicEndpoint = Boolean(configuredUrl?.startsWith('https://'));
289
320
  const warnings: string[] = [];
290
321
  if (!authority.current) warnings.push('No current immutable Forge Recovery release is installed. Run forge recovery install.');
291
- if (!gatewayServiceInstalled || !watchdogServiceInstalled) warnings.push(`Forge Recovery ${servicePlatform} services are not fully installed. Run forge recovery install.`);
292
- if (!gatewayRunning || !watchdogRunning) warnings.push('Forge Recovery Gateway or Watchdog is not running on the current Recovery release.');
322
+ if (!recoveryServiceInstalled) warnings.push(`Forge Recovery ${servicePlatform} service is not installed. Run forge recovery install.`);
323
+ if (!recoveryRunning) warnings.push('Forge Recovery service is not running on the current Recovery release.');
293
324
  if (!configuredTunnel) warnings.push('Recovery is loopback-only. Configure a dedicated OpenAI Secure MCP Tunnel or an HTTPS tunnel service before adding it to ChatGPT.');
294
325
  else if (openAiTunnelService) {
295
326
  if (!tunnelRestartSafe) warnings.push('The dedicated OpenAI Recovery tunnel must use a valid alias, tunnel id, loopback MCP endpoint, and env:/file: runtime API key reference.');
@@ -310,7 +341,7 @@ export function recoveryConnectorDescriptor(
310
341
  transport: 'streamable_http',
311
342
  url,
312
343
  public: publicEndpoint,
313
- readyForChatGPT: installed && gatewayRunning && watchdogRunning && tunnelReady && (openAiTunnelService ? true : publicEndpoint) && passphraseConfigured,
344
+ readyForChatGPT: installed && recoveryRunning && tunnelReady && (openAiTunnelService ? true : publicEndpoint) && passphraseConfigured,
314
345
  installed,
315
346
  currentRelease: authority.current?.releaseRevision,
316
347
  previousRelease: authority.previous?.releaseRevision,
@@ -321,21 +352,13 @@ export function recoveryConnectorDescriptor(
321
352
  },
322
353
  healthUrl: `${origin}/recovery/health`,
323
354
  services: {
324
- gateway: {
325
- label: RECOVERY_GATEWAY_LABEL,
326
- platform: servicePlatform,
327
- serviceInstalled: gatewayServiceInstalled,
328
- plistInstalled: gatewayPlistInstalled,
329
- running: gatewayRunning,
330
- ...(gatewayIdentity ? { pid: gatewayIdentity.pid } : {}),
331
- },
332
- watchdog: {
333
- label: RECOVERY_WATCHDOG_LABEL,
355
+ recovery: {
356
+ label: RECOVERY_DAEMON_LABEL,
334
357
  platform: servicePlatform,
335
- serviceInstalled: watchdogServiceInstalled,
336
- plistInstalled: watchdogPlistInstalled,
337
- running: watchdogRunning,
338
- ...(watchdogIdentity ? { pid: watchdogIdentity.pid } : {}),
358
+ serviceInstalled: recoveryServiceInstalled,
359
+ plistInstalled: recoveryPlistInstalled,
360
+ running: recoveryRunning,
361
+ ...(recoveryIdentity ? { pid: recoveryIdentity.pid } : {}),
339
362
  },
340
363
  tunnel: {
341
364
  configured: Boolean(configuredTunnel),
@@ -603,7 +626,6 @@ export async function verifyRecoveryConnector(
603
626
  credentialRetirement: 'shared_recovery_token_not_individually_revocable',
604
627
  };
605
628
 
606
- let mcpSessionId: string | undefined;
607
629
  const rpc = async (id: number | undefined, method: string, params?: Record<string, unknown>) => {
608
630
  const response = await request(connector.url, {
609
631
  method: 'POST',
@@ -612,10 +634,12 @@ export async function verifyRecoveryConnector(
612
634
  accept: 'application/json, text/event-stream',
613
635
  'content-type': 'application/json',
614
636
  'mcp-protocol-version': '2025-06-18',
615
- ...(mcpSessionId ? { 'mcp-session-id': mcpSessionId } : {}),
616
637
  },
617
638
  body: JSON.stringify({ jsonrpc: '2.0', ...(id === undefined ? {} : { id }), method, ...(params ? { params } : {}) }),
618
639
  });
640
+ if (response.headers.get('mcp-session-id')?.trim()) {
641
+ throw new Error(`${method} unexpectedly established transport session state`);
642
+ }
619
643
  if (method === 'notifications/initialized') {
620
644
  if (response.status !== 202) throw new Error(`${method} HTTP ${response.status}`);
621
645
  return { response, result: {} as Record<string, unknown> };
@@ -625,71 +649,44 @@ export async function verifyRecoveryConnector(
625
649
  if (response.status !== 200 || Object.keys(rpcError).length > 0) {
626
650
  throw new Error(`${method} HTTP ${response.status}${typeof rpcError.message === 'string' ? `: ${rpcError.message}` : ''}`);
627
651
  }
628
- if (method === 'initialize') {
629
- const returnedSessionId = response.headers.get('mcp-session-id')?.trim();
630
- if (!returnedSessionId) throw new Error('initialize HTTP 200: Mcp-Session-Id missing');
631
- mcpSessionId = returnedSessionId;
632
- }
633
652
  return { response, result: jsonObject(body.result) };
634
653
  };
635
- const closeMcpSession = async (): Promise<void> => {
636
- const sessionId = mcpSessionId;
637
- if (!sessionId) return;
638
- mcpSessionId = undefined;
639
- try {
640
- await request(connector.url, {
641
- method: 'DELETE',
642
- headers: {
643
- authorization: `Bearer ${accessToken}`,
644
- accept: 'application/json, text/event-stream',
645
- 'mcp-protocol-version': '2025-06-18',
646
- 'mcp-session-id': sessionId,
647
- },
648
- });
649
- } catch {
650
- // Session cleanup is best-effort and must not hide the verifier result.
651
- }
652
- };
653
654
 
654
- try {
655
- const initialized = await rpc(11, 'initialize', {
656
- protocolVersion: '2025-06-18',
657
- capabilities: {},
658
- clientInfo: { name: 'forge-recovery-verifier', version: FORGE_VERSION },
659
- });
660
- const initializedNotification = await rpc(undefined, 'notifications/initialized');
661
- const listed = await rpc(12, 'tools/list');
662
- const tools = Array.isArray(listed.result.tools)
663
- ? listed.result.tools.map((tool) => jsonObject(tool).name).filter((name): name is string => typeof name === 'string')
664
- : [];
665
- const expectedTools = RECOVERY_TOOLS.map((tool) => tool.name);
666
- const runtimeStatusCall = await rpc(13, 'tools/call', { name: 'runtime_status', arguments: {} });
667
- const listReleasesCall = await rpc(14, 'tools/call', { name: 'list_releases', arguments: {} });
668
- const initializedResult = initialized.result;
669
- const serverInfo = jsonObject(initializedResult.serverInfo);
670
- const mcpOk = initialized.response.status === 200
671
- && initializedNotification.response.status === 202
672
- && initializedResult.protocolVersion === '2025-06-18'
673
- && serverInfo.name === 'forge-standalone-recovery'
674
- && serverInfo.version === FORGE_VERSION
675
- && JSON.stringify(tools) === JSON.stringify(expectedTools)
676
- && runtimeStatusCall.response.status === 200
677
- && listReleasesCall.response.status === 200;
678
- probes.mcp = {
679
- ok: mcpOk,
680
- initializeStatus: initialized.response.status,
681
- initializedNotificationStatus: initializedNotification.response.status,
682
- protocolVersion: typeof initializedResult.protocolVersion === 'string' ? initializedResult.protocolVersion : undefined,
683
- serverName: typeof serverInfo.name === 'string' ? serverInfo.name : undefined,
684
- serverVersion: typeof serverInfo.version === 'string' ? serverInfo.version : undefined,
685
- tools,
686
- runtimeStatusCall: runtimeStatusCall.response.status === 200,
687
- listReleasesCall: listReleasesCall.response.status === 200,
688
- };
689
- if (!mcpOk) failures.push('mcp: initialize, Forge version, tool surface, or read-only calls did not match the Recovery contract.');
690
- } finally {
691
- await closeMcpSession();
692
- }
655
+ const initialized = await rpc(11, 'initialize', {
656
+ protocolVersion: '2025-06-18',
657
+ capabilities: {},
658
+ clientInfo: { name: 'forge-recovery-verifier', version: FORGE_VERSION },
659
+ });
660
+ const initializedNotification = await rpc(undefined, 'notifications/initialized');
661
+ const listed = await rpc(12, 'tools/list');
662
+ const tools = Array.isArray(listed.result.tools)
663
+ ? listed.result.tools.map((tool) => jsonObject(tool).name).filter((name): name is string => typeof name === 'string')
664
+ : [];
665
+ const expectedTools = RECOVERY_TOOLS.map((tool) => tool.name);
666
+ const runtimeStatusCall = await rpc(13, 'tools/call', { name: 'runtime_status', arguments: {} });
667
+ const listReleasesCall = await rpc(14, 'tools/call', { name: 'list_releases', arguments: {} });
668
+ const initializedResult = initialized.result;
669
+ const serverInfo = jsonObject(initializedResult.serverInfo);
670
+ const mcpOk = initialized.response.status === 200
671
+ && initializedNotification.response.status === 202
672
+ && initializedResult.protocolVersion === '2025-06-18'
673
+ && serverInfo.name === 'forge-standalone-recovery'
674
+ && serverInfo.version === FORGE_VERSION
675
+ && JSON.stringify(tools) === JSON.stringify(expectedTools)
676
+ && runtimeStatusCall.response.status === 200
677
+ && listReleasesCall.response.status === 200;
678
+ probes.mcp = {
679
+ ok: mcpOk,
680
+ initializeStatus: initialized.response.status,
681
+ initializedNotificationStatus: initializedNotification.response.status,
682
+ protocolVersion: typeof initializedResult.protocolVersion === 'string' ? initializedResult.protocolVersion : undefined,
683
+ serverName: typeof serverInfo.name === 'string' ? serverInfo.name : undefined,
684
+ serverVersion: typeof serverInfo.version === 'string' ? serverInfo.version : undefined,
685
+ tools,
686
+ runtimeStatusCall: runtimeStatusCall.response.status === 200,
687
+ listReleasesCall: listReleasesCall.response.status === 200,
688
+ };
689
+ if (!mcpOk) failures.push('mcp: stateless initialize, Forge version, tool surface, or read-only calls did not match the Recovery contract.');
693
690
  } catch (error) {
694
691
  failures.push(`oauthPkce/mcp: ${error instanceof Error ? error.message : String(error)}`);
695
692
  }
@@ -751,16 +748,18 @@ export function buildRecoveryCommand(): Command {
751
748
  .requiredOption('--repo <path>', 'Forge source repository root used for Recovery and Runtime immutable releases')
752
749
  .requiredOption('--primary-connector-service-label <label>', 'Primary OAuth/Connector launchd label')
753
750
  .option('--primary-connector-service-plist <path>', 'Absolute primary OAuth/Connector launchd plist path')
754
- .option('--configure-codegraph', 'Initialize/sync CodeGraph and configure repository-scoped MCP for Codex and Claude during the bootstrap')
755
751
  .action(async (opts: {
756
752
  controllerHome: string;
757
753
  repo: string;
758
754
  primaryConnectorServiceLabel: string;
759
755
  primaryConnectorServicePlist?: string;
760
- configureCodegraph?: boolean;
761
756
  }) => {
762
757
  const home = resolveControllerHome(opts.controllerHome);
763
758
  const repoRoot = resolve(opts.repo);
759
+ const primaryRuntimeSourceRepository = findRegisteredRepositoryByCheckoutRoot(repoRoot, home);
760
+ if (!primaryRuntimeSourceRepository) {
761
+ throw new Error(`RECOVERY_PRIMARY_RUNTIME_SOURCE_REPOSITORY_NOT_REGISTERED: ${repoRoot}`);
762
+ }
764
763
  const current = loadRecoveryConfig(home);
765
764
  const primaryConnectorBase = launchdService(
766
765
  opts.primaryConnectorServiceLabel,
@@ -774,6 +773,7 @@ export function buildRecoveryCommand(): Command {
774
773
  const installed = await installStandaloneRecovery({
775
774
  controllerHome: home,
776
775
  repoRoot,
776
+ primaryRuntimeSourceRepositoryId: primaryRuntimeSourceRepository.repoId,
777
777
  port: current.gateway?.port ?? 8787,
778
778
  publicMcpUrl: current.publicMcpUrl,
779
779
  recoveryPublicUrl: current.recoveryPublicUrl,
@@ -781,6 +781,7 @@ export function buildRecoveryCommand(): Command {
781
781
  primaryPublicTunnelService: current.primaryPublicTunnelService,
782
782
  primaryRuntimeService: current.primaryRuntimeService ?? defaultPrimaryRuntimeServiceConfig(),
783
783
  primaryConnectorService,
784
+ profile: 'self-healing',
784
785
  });
785
786
  const refreshed = loadRecoveryConfig(home);
786
787
  const runtime = await stageAndActivateConfiguredRuntimeRelease(refreshed);
@@ -789,18 +790,9 @@ export function buildRecoveryCommand(): Command {
789
790
  process.exitCode = 1;
790
791
  return;
791
792
  }
792
- let codegraph: Record<string, unknown> | undefined;
793
- let codegraphOk = true;
794
- if (opts.configureCodegraph === true) {
795
- const ensured = ensureCodegraph({ repoRoot, init: true, sync: true, host: 'both' });
796
- const configured = configureCodegraph({ repoRoot, target: 'both', location: 'global' });
797
- codegraphOk = !ensured.actions.some((entry) => entry.status === 'failed')
798
- && !configured.actions.some((entry) => entry.status === 'failed');
799
- codegraph = { ensured, configured };
800
- }
801
793
  const connector = await restartPrimaryConnector(refreshed);
802
- const ok = connector.ok && codegraphOk;
803
- output({ ok, phase: !connector.ok ? 'connector_restart' : !codegraphOk ? 'codegraph_configuration' : 'complete', recovery: installed, runtime, ...(codegraph ? { codegraph } : {}), connector });
794
+ const ok = connector.ok;
795
+ output({ ok, phase: !connector.ok ? 'connector_restart' : 'complete', recovery: installed, runtime, connector });
804
796
  if (!ok) process.exitCode = 1;
805
797
  });
806
798
 
@@ -952,8 +944,9 @@ export function buildRecoveryCommand(): Command {
952
944
  });
953
945
 
954
946
  command.command('install')
955
- .description('Build and activate the independent Forge Recovery Gateway and Watchdog release')
947
+ .description('Build Forge Recovery artifacts and activate only the explicitly selected persistent Recovery profile')
956
948
  .requiredOption('--controller-home <path>', 'Explicit Controller Home')
949
+ .option('--profile <profile>', 'Recovery install profile: manual, gateway, or self-healing', 'manual')
957
950
  .option('--port <port>', 'Loopback Recovery Gateway port', '8787')
958
951
  .option('--public-mcp-url <url>', 'Primary Forge MCP public URL')
959
952
  .option('--recovery-public-url <url>', 'Dedicated Forge Recovery MCP public URL')
@@ -978,7 +971,7 @@ export function buildRecoveryCommand(): Command {
978
971
  .option('--primary-openai-profile-dir <path>', 'Optional absolute tunnel-client profile directory for primary Forge')
979
972
  .option('--primary-openai-admin-profile <profile>', 'Optional tunnel-client admin profile used for primary runtime connect')
980
973
  .option('--primary-runtime-source-root <path>', 'Stable canonical/package source used by Recovery for future Runtime staging')
981
- .option('--stage-only', 'Build and canary the Recovery release without activating services')
974
+ .option('--stage-only', 'Compatibility alias: build/canary only and do not mutate installed Recovery config or services')
982
975
  .action(async (opts: {
983
976
  controllerHome: string;
984
977
  port: string;
@@ -1005,9 +998,12 @@ export function buildRecoveryCommand(): Command {
1005
998
  primaryOpenaiProfileDir?: string;
1006
999
  primaryOpenaiAdminProfile?: string;
1007
1000
  primaryRuntimeSourceRoot?: string;
1001
+ profile: string;
1008
1002
  stageOnly?: boolean;
1009
1003
  }) => {
1010
1004
  const home = resolveControllerHome(opts.controllerHome);
1005
+ const profile = normalizeRecoveryInstallProfile(opts.stageOnly ? 'manual' : opts.profile, 'manual');
1006
+ if (opts.stageOnly && opts.profile !== 'manual') throw new Error('RECOVERY_STAGE_ONLY_PROFILE_CONFLICT');
1011
1007
  const port = Number(opts.port);
1012
1008
  if (!Number.isInteger(port) || port < 1024 || port > 65535) throw new Error('RECOVERY_PORT_INVALID');
1013
1009
  const recoveryLaunchdTunnel = launchdService(opts.recoveryTunnelServiceLabel, opts.recoveryTunnelServicePlist, 'RECOVERY_TUNNEL') as PublicTunnelServiceConfig | undefined;
@@ -1063,6 +1059,7 @@ export function buildRecoveryCommand(): Command {
1063
1059
  assertDistinctRecoveryOpenAiTunnelIdentity(recoveryTunnelService, primaryPublicTunnelService);
1064
1060
 
1065
1061
  const recoveryPublicUrl = endpoint(opts.recoveryPublicUrl, 'RECOVERY_PUBLIC_URL');
1062
+ if (profile === 'manual' && (recoveryTunnelService || recoveryPublicUrl)) throw new Error('RECOVERY_PROFILE_GATEWAY_REQUIRED');
1066
1063
  if (recoveryOpenAiTunnel && recoveryPublicUrl) throw new Error('RECOVERY_OPENAI_TUNNEL_PUBLIC_URL_CONFLICT');
1067
1064
  if ((recoveryLaunchdTunnel || recoverySystemdTunnel) && !recoveryPublicUrl) throw new Error('RECOVERY_PUBLIC_URL_AND_TUNNEL_SERVICE_MUST_BE_CONFIGURED_TOGETHER');
1068
1065
  if (!recoveryTunnelService && recoveryPublicUrl) throw new Error('RECOVERY_PUBLIC_URL_AND_TUNNEL_SERVICE_MUST_BE_CONFIGURED_TOGETHER');
@@ -1080,8 +1077,12 @@ export function buildRecoveryCommand(): Command {
1080
1077
  controllerHome: home,
1081
1078
  repoRoot: primaryRuntimeSourceRoot,
1082
1079
  ...(primaryRuntimeSourceRepository ? { primaryRuntimeSourceRepositoryId: primaryRuntimeSourceRepository.repoId } : {}),
1083
- sourceRoot: packageRoot,
1080
+ // The package root is only the CLI's location. A package installation
1081
+ // is not a Git checkout, while the explicitly registered primary
1082
+ // Runtime source is the immutable Recovery release's provenance.
1083
+ sourceRoot: primaryRuntimeSourceRoot,
1084
1084
  port,
1085
+ profile,
1085
1086
  stageOnly: opts.stageOnly === true,
1086
1087
  primaryRuntimeService: defaultPrimaryRuntimeServiceConfig(),
1087
1088
  publicMcpUrl: endpoint(opts.publicMcpUrl, 'PUBLIC_MCP_URL'),
@@ -1092,6 +1093,7 @@ export function buildRecoveryCommand(): Command {
1092
1093
  });
1093
1094
  output({
1094
1095
  status: opts.stageOnly ? 'staged' : 'installed',
1096
+ profile: result.profile,
1095
1097
  staged: result.staged.release,
1096
1098
  activation: result.activated,
1097
1099
  connector: recoveryConnectorDescriptor(home),
@@ -106,7 +106,23 @@ export function buildRepositoryCommand(): Command {
106
106
  .argument('<repo-id>', 'Stable repository ID'))
107
107
  .action((repoId: string, opts: { controllerHome?: string; json?: boolean }) => {
108
108
  const repository = getRepository(repoId, opts.controllerHome, { includeRemoved: true });
109
- output({ validation: validateRepository(repoId, opts.controllerHome), ...initializeRepository(repository, opts.controllerHome) }, opts.json === true);
109
+ const validation = validateRepository(repoId, opts.controllerHome);
110
+ if (opts.json === true) {
111
+ output({ validation, ...initializeRepository(repository, opts.controllerHome) }, true);
112
+ return;
113
+ }
114
+ // The default validation view is bounded even when the repository has
115
+ // thousands of historical checkout records. Full audit data is opt-in.
116
+ output({
117
+ validation,
118
+ repository: repositorySummary(repository),
119
+ checkouts: {
120
+ total: repository.checkouts.length,
121
+ active: repository.checkouts.filter((checkout) => !checkout.lifecycle || checkout.lifecycle === 'active').length,
122
+ archived: repository.checkouts.filter((checkout) => checkout.lifecycle === 'archived').length,
123
+ removed: repository.checkouts.filter((checkout) => checkout.lifecycle === 'removed').length,
124
+ },
125
+ }, false);
110
126
  });
111
127
 
112
128
  common(command.command('command')
@@ -12,6 +12,7 @@ import { listOccurrences, listSchedules } from '../../../packages/kernel/schedul
12
12
  import { observeRuntimeStatus } from '../../runtime/root/status';
13
13
  import { readMcpServiceBearerToken } from '../../../adapters/mcp/auth';
14
14
  import { createSetupBootstrapControlApi } from './bootstrap-control';
15
+ import { readSetupProfile, runtimeDeploymentTopologyForSetupProfile } from './setup-profile';
15
16
  import { publishRuntimeRelease } from '../../runtime/root/release-store';
16
17
  import { installForgeRuntimeService } from '../../runtime/root/service';
17
18
  import { activateScheduledPackageRuntimeServiceFromPath, installPackageRuntimeService, readPackageRuntimeActivationReceipt } from '../../runtime/root/package-runtime-service';
@@ -73,12 +74,14 @@ export function buildRuntimeCommand(): Command {
73
74
  writeFileSync(tokenPath, `${token}\n`, { mode: 0o600 });
74
75
  }
75
76
  const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..', '..');
77
+ const setupProfile = readSetupProfile();
76
78
  const result = await installPackageRuntimeService({
77
79
  controllerHome: home,
78
80
  packageRoot,
79
81
  host: opts.host,
80
82
  port,
81
83
  authTokenFile: tokenPath,
84
+ ...(setupProfile ? { topology: runtimeDeploymentTopologyForSetupProfile(setupProfile) } : {}),
82
85
  forcePortable: opts.portable === true,
83
86
  refreshConnector: opts.refreshConnector === true,
84
87
  });
@@ -116,7 +119,6 @@ export function buildRuntimeCommand(): Command {
116
119
  .option('--port <port>', 'MCP listener port', '8765')
117
120
  .option('--stage-only', 'Build and validate the immutable Runtime release without publishing or activating it')
118
121
  .option('--auth-token-file <path>', 'Raw bearer token file (defaults to controllerHome/mcp/runtime-token, created from the MCP bearer token when missing)')
119
- .option('--exclusive-work-id <id>', 'Persistently admit only this P0 Work while migration is active')
120
122
  .option('--node-executable <path>', 'Executable launchd uses to run the Forge Runtime service runner', process.execPath)
121
123
  .option('--runner-path <path>', 'Forge Runtime service runner entry', join(resolve(dirname(fileURLToPath(import.meta.url)), '..', '..', '..'), 'bin', 'forge-runtime-service.mjs'))
122
124
  .action(async (opts: {
@@ -125,7 +127,6 @@ export function buildRuntimeCommand(): Command {
125
127
  host: string;
126
128
  port: string;
127
129
  authTokenFile?: string;
128
- exclusiveWorkId?: string;
129
130
  nodeExecutable: string;
130
131
  runnerPath: string;
131
132
  stageOnly?: boolean;
@@ -171,7 +172,6 @@ export function buildRuntimeCommand(): Command {
171
172
  host: opts.host,
172
173
  port,
173
174
  authTokenFile: tokenPath,
174
- ...(opts.exclusiveWorkId?.trim() ? { exclusiveWorkId: opts.exclusiveWorkId.trim() } : {}),
175
175
  },
176
176
  runnerPath: resolve(opts.runnerPath),
177
177
  nodeExecutable: resolve(opts.nodeExecutable),
@@ -0,0 +1,41 @@
1
+ /** Shared synchronous setup/adoption command execution; no Runtime or Work authority. */
2
+ import { runProcess as runBoundedProcess } from '../../effects/process-runner';
3
+
4
+ export interface SetupExecutionStep {
5
+ step: string;
6
+ status: "ok" | "skipped" | "failed";
7
+ command?: string[];
8
+ detail?: string;
9
+ stdout?: string;
10
+ stderr?: string;
11
+ }
12
+
13
+ export function runSetupProcess(command: string, args: string[], cwd: string, env?: NodeJS.ProcessEnv): SetupExecutionStep {
14
+ const result = runBoundedProcess(command, args, { cwd, env });
15
+
16
+ return {
17
+ step: "",
18
+ status: result.ok ? "ok" : "failed",
19
+ command: [...result.command],
20
+ stdout: result.stdout,
21
+ stderr: result.stderr || result.error,
22
+ };
23
+ }
24
+
25
+ export function withProcessEnv<T>(env: NodeJS.ProcessEnv | undefined, fn: () => T): T {
26
+ if (!env) return fn();
27
+ const previous = new Map<string, string | undefined>();
28
+ for (const [key, value] of Object.entries(env)) {
29
+ previous.set(key, process.env[key]);
30
+ if (value === undefined) delete process.env[key];
31
+ else process.env[key] = value;
32
+ }
33
+ try {
34
+ return fn();
35
+ } finally {
36
+ for (const [key, value] of previous) {
37
+ if (value === undefined) delete process.env[key];
38
+ else process.env[key] = value;
39
+ }
40
+ }
41
+ }