@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
@@ -2,8 +2,7 @@ import { loadMcpLocalConfig, loadMcpServiceLocalConfig } from './auth';
2
2
  import { getMcpPolicy, parseMcpProfile } from './policy';
3
3
  import { buildMcpToolDefinitions, callMcpTool, type CallToolResult, type McpToolContext, type McpToolDefinition } from './tool-mapping/tools';
4
4
  import { DEFAULT_AGENT_TIMEOUT_MS, MAX_AGENT_TIMEOUT_MS, normalizeAgentTimeoutMs } from '../../src/cli/controller/runtime-config';
5
- import type { McpAgentRunnerName, McpToolset } from './types';
6
- import { configuredControllerToolset } from './toolset-selection';
5
+ import type { McpAgentRunnerName } from './types';
7
6
  import { realpathSync } from 'fs';
8
7
  import { resolve } from 'path';
9
8
  import { ensureRepoPreferredControllerHome } from '../../src/cli/repositories/controller-home';
@@ -28,10 +27,11 @@ export interface McpServerOptions {
28
27
  devRunnerAgents?: string;
29
28
  devRunnerTimeoutMs?: number;
30
29
  devRunnerMaxTimeoutMs?: number;
31
- toolset?: McpToolset | string;
32
30
  sessionId?: string;
33
31
  principalId?: string;
34
32
  controllerType?: McpToolContext['controllerType'];
33
+ /** Request-scoped host conversation correlation, for example ChatGPT _meta["openai/session"]. */
34
+ hostConversationSessionId?: string;
35
35
  controllerInstanceId?: string;
36
36
  /** Canonical Runtime source authority. Internal Runtime MCP only; never an execution repository. */
37
37
  runtimeSourceRoot?: string;
@@ -40,25 +40,18 @@ export interface McpServerOptions {
40
40
  export interface MultiRepositoryMcpToolContext extends McpToolContext {
41
41
  controllerHome: string;
42
42
  explicitRepository?: RepositoryRecord;
43
- toolset: McpToolset;
44
- toolsetLocked: boolean;
43
+ toolset: 'full';
45
44
  runtimeSourceRoot?: string;
46
45
  }
47
46
 
48
47
  type ToolResult = CallToolResult;
49
48
 
50
49
  const EXECUTION_STORAGE_TOOLS = new Set([
51
- 'dispatch_task',
52
- 'launch_issue',
53
- 'dispatch_ready_tasks',
54
- 'retry_task_run',
55
- 'integrate_task_run',
56
50
  'begin_edit_session',
57
51
  'apply_edit_operations',
58
52
  'create_edit_savepoint',
59
53
  'rollback_edit_session',
60
54
  'finalize_edit_session',
61
- 'finish_edit_session',
62
55
  'verify_edit_session',
63
56
  'submit_local_bridge_job',
64
57
  'execute_local_bridge_job',
@@ -66,31 +59,10 @@ const EXECUTION_STORAGE_TOOLS = new Set([
66
59
 
67
60
  const REPOSITORY_LOCKED_TOOLS = new Set([
68
61
  ...EXECUTION_STORAGE_TOOLS,
69
- 'create_issue',
70
- 'update_issue',
71
- 'plan_issue',
72
- 'append_task',
73
- 'split_task',
74
- 'supersede_task',
75
- 'set_task_dependencies',
76
- 'update_task',
77
- 'record_task_verification',
78
- 'accept_verified_task',
79
- 'publish_issue_to_github',
80
- 'refresh_github_issue',
81
- 'close_github_issue',
82
62
  'configure_github_plugin',
83
63
  ]);
84
64
 
85
65
 
86
- export function parseMcpToolset(value: unknown, profile: string): McpToolset {
87
- if (profile !== 'controller') return 'full';
88
- const normalized = typeof value === 'string' ? value.trim().toLowerCase() : '';
89
- if (!normalized) return 'advanced';
90
- if (normalized === 'facade' || normalized === 'core' || normalized === 'advanced' || normalized === 'full') return normalized;
91
- throw new Error(`invalid MCP toolset "${String(value)}" (expected: facade, core, advanced, or full)`);
92
- }
93
-
94
66
  function repositoryForExplicitPath(path: string, controllerHome: string): RepositoryRecord | undefined {
95
67
  const selectedPath = (() => {
96
68
  try { return realpathSync(path); } catch { return resolve(path); }
@@ -301,8 +273,7 @@ export function repositoryScopedToolArgs(
301
273
  // checkout after validating the authenticated principal instead of inheriting
302
274
  // the repository's currently active checkout.
303
275
  const workOwnedCheckoutResolution = [
304
- 'repository_command_preview',
305
- 'repository_command_execute',
276
+ 'execute_command',
306
277
  'repository_safe_patch_apply',
307
278
  ].includes(name)
308
279
  && typeof input.work_id === 'string'
@@ -350,28 +321,19 @@ export function createMcpToolContext(opts: McpServerOptions): MultiRepositoryMcp
350
321
  : undefined;
351
322
  const policyRoot = explicitRepository?.canonicalRoot ?? controllerHome;
352
323
  const policy = runtimePolicy(policyRoot, { ...opts, controllerHome });
353
- const config = policy.profile === 'controller'
354
- ? loadMcpServiceLocalConfig(controllerHome, explicitRepository?.canonicalRoot)
355
- : loadMcpLocalConfig(policyRoot);
356
- const toolsetOverride = opts.toolset ?? process.env.FORGE_MCP_TOOLSET;
357
- const configuredToolset = policy.profile === 'controller'
358
- ? configuredControllerToolset(config)
359
- : config?.toolset;
360
- const toolset = parseMcpToolset(
361
- toolsetOverride ?? configuredToolset,
362
- policy.profile,
363
- );
324
+ // All Forge capabilities share one public MCP tool registry.
325
+ // Host authorization remains independent of tool discovery.
364
326
  return {
365
327
  controllerHome,
366
328
  explicitRepository,
367
329
  repoRoot: policyRoot,
368
330
  policy,
369
- toolset,
370
- toolsetLocked: toolsetOverride !== undefined || configuredToolset !== undefined,
331
+ toolset: 'full',
371
332
  enableChatgptBrowser: opts.enableChatgptBrowser === true,
372
333
  sessionId: opts.sessionId,
373
334
  principalId: opts.principalId,
374
335
  controllerType: opts.controllerType,
336
+ hostConversationSessionId: opts.hostConversationSessionId,
375
337
  controllerInstanceId: opts.controllerInstanceId,
376
338
  runtimeSourceRoot: opts.runtimeSourceRoot,
377
339
  };
@@ -418,6 +380,7 @@ export async function callMultiRepositoryTool(
418
380
  controllerInstanceId: ctx.controllerInstanceId,
419
381
  repoId: repository.repoId,
420
382
  checkoutId: repository.activeCheckoutId,
383
+ publishedToolNames: ctx.publishedToolNames,
421
384
  };
422
385
  const invoke = async () => await callMcpTool(scopedContext, name, scopedArgs) as ToolResult;
423
386
  const result = REPOSITORY_LOCKED_TOOLS.has(name)
@@ -22,6 +22,19 @@ interface TokenData {
22
22
  clients?: Record<string, OAuthClientInformationFull>;
23
23
  }
24
24
 
25
+ export interface McpOAuthClientRetirementResult {
26
+ clientId: string;
27
+ clientRemoved: boolean;
28
+ accessTokensRevoked: number;
29
+ refreshTokensRevoked: number;
30
+ orphanRefreshTokensPruned: number;
31
+ changed: boolean;
32
+ }
33
+
34
+ export interface McpOAuthProviderClientRetirementResult extends McpOAuthClientRetirementResult {
35
+ authorizationCodesRevoked: number;
36
+ }
37
+
25
38
  function nowSeconds(): number {
26
39
  return Math.floor(Date.now() / 1000);
27
40
  }
@@ -129,6 +142,50 @@ export class McpOAuthTokenStore implements OAuthRegisteredClientsStore {
129
142
  return full;
130
143
  }
131
144
 
145
+ retireClient(clientId: string): McpOAuthClientRetirementResult {
146
+ const normalizedClientId = clientId.trim();
147
+ if (!normalizedClientId) throw new Error('MCP_OAUTH_CLIENT_ID_REQUIRED');
148
+
149
+ const ownedAccessTokens = new Set<string>();
150
+ for (const [token, info] of this.accessTokens) {
151
+ if (info.clientId === normalizedClientId) ownedAccessTokens.add(token);
152
+ }
153
+
154
+ let refreshTokensRevoked = 0;
155
+ let orphanRefreshTokensPruned = 0;
156
+ for (const [refreshToken, accessToken] of this.refreshTokens) {
157
+ if (ownedAccessTokens.has(accessToken)) {
158
+ this.refreshTokens.delete(refreshToken);
159
+ refreshTokensRevoked += 1;
160
+ continue;
161
+ }
162
+ if (!this.accessTokens.has(accessToken)) {
163
+ this.refreshTokens.delete(refreshToken);
164
+ orphanRefreshTokensPruned += 1;
165
+ }
166
+ }
167
+
168
+ let accessTokensRevoked = 0;
169
+ for (const token of ownedAccessTokens) {
170
+ if (this.accessTokens.delete(token)) accessTokensRevoked += 1;
171
+ }
172
+ const clientRemoved = this.clients.delete(normalizedClientId);
173
+ const changed = clientRemoved
174
+ || accessTokensRevoked > 0
175
+ || refreshTokensRevoked > 0
176
+ || orphanRefreshTokensPruned > 0;
177
+ if (changed) this.flush();
178
+
179
+ return {
180
+ clientId: normalizedClientId,
181
+ clientRemoved,
182
+ accessTokensRevoked,
183
+ refreshTokensRevoked,
184
+ orphanRefreshTokensPruned,
185
+ changed,
186
+ };
187
+ }
188
+
132
189
  getAccessToken(token: string): AuthInfo | undefined {
133
190
  return this.accessTokens.get(token);
134
191
  }
@@ -217,6 +274,7 @@ export interface McpOAuthAuthorizationCodeDiagnostics {
217
274
 
218
275
  export interface McpOAuthProvider extends OAuthServerProvider {
219
276
  authorizationCodeDiagnostics(): McpOAuthAuthorizationCodeDiagnostics;
277
+ retireClient(clientId: string): McpOAuthProviderClientRetirementResult;
220
278
  }
221
279
 
222
280
  export interface McpOAuthProviderOptions {
@@ -296,6 +354,21 @@ export function createMcpOAuthProvider(
296
354
  };
297
355
  },
298
356
 
357
+ retireClient(clientId: string): McpOAuthProviderClientRetirementResult {
358
+ const normalizedClientId = clientId.trim();
359
+ if (!normalizedClientId) throw new Error('MCP_OAUTH_CLIENT_ID_REQUIRED');
360
+ let authorizationCodesRevoked = 0;
361
+ for (const [code, pending] of authCodes) {
362
+ if (pending.clientId === normalizedClientId && authCodes.delete(code)) {
363
+ authorizationCodesRevoked += 1;
364
+ }
365
+ }
366
+ return {
367
+ ...store.retireClient(normalizedClientId),
368
+ authorizationCodesRevoked,
369
+ };
370
+ },
371
+
299
372
  get clientsStore(): OAuthRegisteredClientsStore {
300
373
  return store;
301
374
  },
@@ -1,5 +1,6 @@
1
1
  import { existsSync, lstatSync, realpathSync } from 'fs';
2
2
  import { dirname, isAbsolute, resolve, sep } from 'path';
3
+ import { DEFAULT_PROJECT_ENGINEERING_CONTRACT_PATH } from '../../packages/kernel/work/api/index';
3
4
  import type { McpPathDecision, McpPathIntent, McpPolicy } from './types';
4
5
 
5
6
  function toPosixPath(value: string): string {
@@ -104,7 +105,9 @@ export function resolveMcpPath(
104
105
  if (!normalized.ok || !normalized.relativePath) return normalized;
105
106
 
106
107
  const relativePath = normalized.relativePath;
107
- if (anyDenyGlobMatches(policy.denyGlobs, relativePath)) {
108
+ const isControllerProjectEngineeringContract = policy.profile === 'controller'
109
+ && relativePath === DEFAULT_PROJECT_ENGINEERING_CONTRACT_PATH;
110
+ if (!isControllerProjectEngineeringContract && anyDenyGlobMatches(policy.denyGlobs, relativePath)) {
108
111
  return { ok: false, relativePath, reason: `path is denied by MCP policy: ${relativePath}` };
109
112
  }
110
113
 
@@ -0,0 +1,62 @@
1
+ import { currentControllerInstanceId, startExecutionSession } from '../../../src/runtime/control-plane/execution/session-store';
2
+ import { writeControllerResult } from '../../../src/runtime/evidence/result-store';
3
+
4
+ const MAX_INLINE_DIRECT_RESULT_BYTES = 64 * 1024;
5
+
6
+ export interface BoundedRuntimeResultScope {
7
+ controllerHome: string;
8
+ repoId?: string;
9
+ sessionId?: string;
10
+ principalId?: string;
11
+ controllerInstanceId?: string;
12
+ workId?: string;
13
+ }
14
+
15
+ /**
16
+ * Mechanical transport bounding for runtime-aware MCP adapters. Large values
17
+ * are persisted through the existing Result Store; no lifecycle or semantic
18
+ * completion authority is introduced here.
19
+ */
20
+ export function boundedRuntimeResult(
21
+ scope: BoundedRuntimeResultScope,
22
+ value: unknown,
23
+ ): { value: unknown; externalized: boolean } {
24
+ const serialized = JSON.stringify(value, null, 2);
25
+ if (typeof serialized !== 'string' || Buffer.byteLength(serialized, 'utf8') <= MAX_INLINE_DIRECT_RESULT_BYTES) {
26
+ return { value, externalized: false };
27
+ }
28
+ const controllerInstanceId = scope.controllerInstanceId?.trim() || currentControllerInstanceId();
29
+ const principalId = scope.principalId?.trim() || `controller-issued:${controllerInstanceId}`;
30
+ const session = startExecutionSession(scope.controllerHome, {
31
+ sessionId: scope.sessionId?.trim() || undefined,
32
+ principalId,
33
+ controllerInstanceId,
34
+ capabilitySnapshotVersion: 1,
35
+ });
36
+ const stored = writeControllerResult({
37
+ controllerHome: scope.controllerHome,
38
+ repoId: scope.repoId,
39
+ sessionId: session.sessionId,
40
+ principalId: session.principalId,
41
+ workId: scope.workId,
42
+ kind: 'generic',
43
+ value,
44
+ });
45
+ return {
46
+ externalized: true,
47
+ value: {
48
+ externalized: true,
49
+ truncated: true,
50
+ byteLength: stored.byteLength,
51
+ resultRef: stored.resultRef,
52
+ resultId: stored.resultId,
53
+ sessionId: session.sessionId,
54
+ preview: serialized.slice(0, 4_096),
55
+ detailPointer: {
56
+ tool: 'result_read',
57
+ arguments: { session_id: session.sessionId, result_ref: stored.resultRef, limit: 16 },
58
+ },
59
+ next: 'Use result_read or result_search with this session_id/result_ref for additional bounded detail.',
60
+ },
61
+ };
62
+ }
@@ -0,0 +1,201 @@
1
+ import type { CallToolResult, McpToolDefinition } from '../../../packages/protocols/mcp/tool-contract';
2
+ import type { MultiRepositoryMcpToolContext } from '../multi-repository';
3
+ import { parseControllerLearningSignalDrafts, CONTROLLER_LEARNING_SIGNAL_ENVELOPE_MAX_ITEMS } from '../../../src/runtime/context/automatic-learning';
4
+ import {
5
+ persistDirectControllerLearning,
6
+ recordDirectControllerLearningFeedback,
7
+ type DirectControllerLearningFeedbackDraft,
8
+ } from '../../../src/runtime/context/direct-controller-learning';
9
+ import { selected } from './shared-adapter';
10
+
11
+ export const COGNITION_SETTLEMENT_PROPERTY = {
12
+ type: 'object',
13
+ additionalProperties: false,
14
+ properties: {
15
+ work_id: {
16
+ type: 'string',
17
+ description: 'Optional selected Work. Forge derives reachable Work/Requirement/Project/Workspace scope and provenance; this is not caller-authored authority.',
18
+ },
19
+ learning_signals: {
20
+ type: 'array',
21
+ maxItems: CONTROLLER_LEARNING_SIGNAL_ENVELOPE_MAX_ITEMS,
22
+ items: { type: 'object' },
23
+ description: 'Optional model-authored reusable learning using the same LearningSignal contract as rh_work learning_record.',
24
+ },
25
+ learning_feedback: {
26
+ type: 'array',
27
+ maxItems: 32,
28
+ items: { type: 'object' },
29
+ description: 'Optional model-authored used/rejected feedback using the same contract as rh_work learning_feedback.',
30
+ },
31
+ },
32
+ description: 'Optional bounded advisory cognition settlement for a meaningful successful tool outcome. It creates no lifecycle and grants no authority.',
33
+ } as const;
34
+
35
+ /**
36
+ * Cognition settlement is transport metadata shared by every Controller tool.
37
+ * The detailed semantic contract remains owned by the canonical learning parser/writer;
38
+ * keeping this envelope compact avoids duplicating that schema across every tools/list entry.
39
+ */
40
+ export function injectCognitionSettlementFields(definition: McpToolDefinition): McpToolDefinition {
41
+ const schema = definition.inputSchema as {
42
+ type?: unknown;
43
+ properties?: Record<string, unknown>;
44
+ [key: string]: unknown;
45
+ };
46
+ if (!schema || schema.type !== 'object') return definition;
47
+ return {
48
+ ...definition,
49
+ inputSchema: {
50
+ ...schema,
51
+ properties: {
52
+ ...(schema.properties ?? {}),
53
+ cognition_settlement: COGNITION_SETTLEMENT_PROPERTY,
54
+ },
55
+ },
56
+ };
57
+ }
58
+
59
+ export interface CognitionSettlementReceipt {
60
+ recorded: boolean;
61
+ storedMemoryIds: string[];
62
+ observationIds: string[];
63
+ }
64
+
65
+ function parseFeedback(raw: unknown): DirectControllerLearningFeedbackDraft[] {
66
+ if (!Array.isArray(raw)) throw new Error('COGNITION_SETTLEMENT_FEEDBACK_INVALID');
67
+ if (raw.length === 0 || raw.length > 32) throw new Error('COGNITION_SETTLEMENT_FEEDBACK_ITEMS_INVALID');
68
+ return raw.map((rawItem, index) => {
69
+ if (!rawItem || typeof rawItem !== 'object' || Array.isArray(rawItem)) {
70
+ throw new Error(`COGNITION_SETTLEMENT_FEEDBACK_ITEM_INVALID: ${index}`);
71
+ }
72
+ const item = rawItem as Record<string, unknown>;
73
+ const memoryAddress = String(item.memory_address ?? '').trim();
74
+ const decision = String(item.decision ?? '').trim();
75
+ const reason = String(item.reason ?? '').trim();
76
+ const rejectionKind = typeof item.rejection_kind === 'string' ? item.rejection_kind.trim() : undefined;
77
+ if (!memoryAddress || !reason || !['used', 'rejected'].includes(decision)) {
78
+ throw new Error(`COGNITION_SETTLEMENT_FEEDBACK_ITEM_INVALID: ${index}`);
79
+ }
80
+ if (decision === 'rejected' && !['irrelevant', 'stale', 'contradicted'].includes(rejectionKind ?? '')) {
81
+ throw new Error(`COGNITION_SETTLEMENT_FEEDBACK_REJECTION_KIND_REQUIRED: ${index}`);
82
+ }
83
+ if (decision === 'used' && rejectionKind) {
84
+ throw new Error(`COGNITION_SETTLEMENT_FEEDBACK_REJECTION_KIND_UNEXPECTED: ${index}`);
85
+ }
86
+ return {
87
+ memoryAddress,
88
+ decision: decision as 'used' | 'rejected',
89
+ reason,
90
+ ...(rejectionKind ? { rejectionKind: rejectionKind as 'irrelevant' | 'stale' | 'contradicted' } : {}),
91
+ };
92
+ });
93
+ }
94
+
95
+ /** Mechanical settlement shared by ordinary successful MCP outcome boundaries. */
96
+ export function settleCognitionEnvelope(
97
+ ctx: MultiRepositoryMcpToolContext,
98
+ args: Record<string, unknown>,
99
+ ): CognitionSettlementReceipt | undefined {
100
+ const raw = args.cognition_settlement;
101
+ if (raw === undefined) return undefined;
102
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) throw new Error('COGNITION_SETTLEMENT_INVALID');
103
+ const envelope = raw as Record<string, unknown>;
104
+ const repository = selected(ctx, args);
105
+ const workId = typeof envelope.work_id === 'string' && envelope.work_id.trim()
106
+ ? envelope.work_id.trim()
107
+ : typeof args.work_id === 'string' && args.work_id.trim() ? args.work_id.trim() : undefined;
108
+
109
+ const storedMemoryIds: string[] = [];
110
+ const observationIds: string[] = [];
111
+
112
+ if (envelope.learning_signals !== undefined) {
113
+ const signals = parseControllerLearningSignalDrafts(envelope.learning_signals);
114
+ if (!signals.length) throw new Error('COGNITION_SETTLEMENT_SIGNALS_REQUIRED');
115
+ const learning = persistDirectControllerLearning({
116
+ controllerHome: ctx.controllerHome,
117
+ repository,
118
+ signals,
119
+ principalId: ctx.principalId,
120
+ sessionId: ctx.sessionId,
121
+ controllerInstanceId: ctx.controllerInstanceId,
122
+ controllerType: ctx.controllerType,
123
+ workId,
124
+ });
125
+ storedMemoryIds.push(...learning.storedMemoryIds);
126
+ }
127
+
128
+ if (envelope.learning_feedback !== undefined) {
129
+ const recorded = recordDirectControllerLearningFeedback({
130
+ controllerHome: ctx.controllerHome,
131
+ repository,
132
+ feedback: parseFeedback(envelope.learning_feedback),
133
+ principalId: ctx.principalId,
134
+ sessionId: ctx.sessionId,
135
+ controllerInstanceId: ctx.controllerInstanceId,
136
+ workId,
137
+ });
138
+ observationIds.push(...recorded.observationIds);
139
+ }
140
+
141
+ return {
142
+ recorded: storedMemoryIds.length > 0 || observationIds.length > 0,
143
+ storedMemoryIds,
144
+ observationIds,
145
+ };
146
+ }
147
+
148
+ function attachSettlementMetadata(
149
+ outcome: CallToolResult,
150
+ metadata: unknown,
151
+ warning?: string,
152
+ ): CallToolResult {
153
+ const structured = outcome.structuredContent;
154
+ if (!structured || typeof structured !== 'object' || Array.isArray(structured)) return outcome;
155
+ const current = structured as Record<string, unknown>;
156
+ const currentWarnings = Array.isArray(current.warnings)
157
+ ? current.warnings.filter((item): item is string => typeof item === 'string')
158
+ : [];
159
+ const structuredContent = {
160
+ ...current,
161
+ cognitionSettlement: metadata,
162
+ ...(warning ? { warnings: [...currentWarnings, warning] } : {}),
163
+ };
164
+ return {
165
+ ...outcome,
166
+ structuredContent,
167
+ content: outcome.content.map((block, index) => index === 0 && block.type === 'text'
168
+ ? { ...block, text: JSON.stringify(structuredContent) }
169
+ : block),
170
+ };
171
+ }
172
+
173
+ /**
174
+ * Settle advisory cognition only after the primary tool outcome succeeded.
175
+ * A settlement defect must never turn an already-applied repository/process/external effect
176
+ * into a failed tool call that a model might dangerously retry. Explicit learning_record /
177
+ * learning_feedback calls remain normal first-class operations and keep their own errors.
178
+ */
179
+ export function settleCognitionAfterTool(
180
+ ctx: MultiRepositoryMcpToolContext,
181
+ name: string,
182
+ args: Record<string, unknown>,
183
+ outcome: CallToolResult | undefined,
184
+ ): CallToolResult | undefined {
185
+ if (!outcome || outcome.isError || args.cognition_settlement === undefined) return outcome;
186
+ if (name === 'rh_work' && ['learning_record', 'learning_feedback'].includes(String(args.operation ?? ''))) {
187
+ return outcome;
188
+ }
189
+ try {
190
+ const receipt = settleCognitionEnvelope(ctx, args);
191
+ return receipt ? attachSettlementMetadata(outcome, receipt) : outcome;
192
+ } catch (error) {
193
+ const message = error instanceof Error ? error.message : String(error);
194
+ const code = /^([A-Z][A-Z0-9_]+)(?::|$)/.exec(message)?.[1] ?? 'COGNITION_SETTLEMENT_FAILED';
195
+ return attachSettlementMetadata(
196
+ outcome,
197
+ { recorded: false, error: { code, message } },
198
+ `COGNITION_SETTLEMENT_FAILED: ${message}`,
199
+ );
200
+ }
201
+ }