@moretea-labs/forge 1.7.2 → 1.8.0

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 (685) hide show
  1. package/AGENTS.md +58 -62
  2. package/CHANGELOG.md +26 -0
  3. package/CLAUDE.md +42 -62
  4. package/README.md +2 -2
  5. package/SKILL.md +0 -1
  6. package/THIRD_PARTY_NOTICES.md +5 -2
  7. package/adapters/browser/index.ts +2 -0
  8. package/adapters/chatgpt/browser-delivery-host.ts +71 -0
  9. package/adapters/chatgpt/browser-delivery-runtime.ts +783 -0
  10. package/adapters/chatgpt/controller-binding-store.ts +55 -0
  11. package/adapters/chatgpt/controller-host.ts +119 -0
  12. package/adapters/chatgpt/controller-round-host.ts +78 -0
  13. package/adapters/chatgpt/controller-round-settlement-store.ts +45 -0
  14. package/adapters/chatgpt/provider-delivery.ts +113 -0
  15. package/adapters/chatgpt/work-conversation-binding-store.ts +192 -0
  16. package/adapters/chatgpt/wsl-bridge-delivery-host.ts +63 -0
  17. package/adapters/computer/desktop-operator-contract.ts +7 -0
  18. package/adapters/computer/desktop-operator-discovery.ts +201 -0
  19. package/adapters/computer/desktop-operator-negotiation.ts +174 -0
  20. package/adapters/computer/desktop-operator-provider.ts +312 -0
  21. package/adapters/computer/index.ts +1 -0
  22. package/adapters/computer/interaction-target-authority.ts +944 -0
  23. package/adapters/controller-process/binding-store.ts +34 -0
  24. package/adapters/controller-process/controller-host.ts +26 -0
  25. package/adapters/mcp/access-mode.ts +132 -0
  26. package/adapters/mcp/audit.ts +32 -0
  27. package/adapters/mcp/auth.ts +407 -0
  28. package/adapters/mcp/controller-round-compatibility.ts +184 -0
  29. package/adapters/mcp/frozen-client-semantic-compatibility.ts +292 -0
  30. package/adapters/mcp/instructions.ts +36 -0
  31. package/adapters/mcp/legacy-context.ts +18 -0
  32. package/adapters/mcp/multi-repository.ts +437 -0
  33. package/adapters/mcp/oauth.ts +391 -0
  34. package/adapters/mcp/paths.ts +140 -0
  35. package/adapters/mcp/policy.ts +232 -0
  36. package/adapters/mcp/proxy-env.ts +62 -0
  37. package/adapters/mcp/readiness-projection.ts +24 -0
  38. package/adapters/mcp/redaction.ts +21 -0
  39. package/adapters/mcp/repo.ts +24 -0
  40. package/adapters/mcp/runtime-gateway/artifact-adapter.ts +52 -0
  41. package/adapters/mcp/runtime-gateway/context-adapter.ts +829 -0
  42. package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +191 -0
  43. package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +147 -0
  44. package/adapters/mcp/runtime-gateway/execution-control-adapter.ts +28 -0
  45. package/adapters/mcp/runtime-gateway/execution-tools.ts +207 -0
  46. package/adapters/mcp/runtime-gateway/filesystem-adapter.ts +38 -0
  47. package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +411 -0
  48. package/adapters/mcp/runtime-gateway/legacy-ios-tool-adapter.ts +105 -0
  49. package/adapters/mcp/runtime-gateway/maintenance-adapter.ts +44 -0
  50. package/adapters/mcp/runtime-gateway/model-adapter.ts +63 -0
  51. package/adapters/mcp/runtime-gateway/persisted-check-process.ts +3 -0
  52. package/adapters/mcp/runtime-gateway/plugin-adapter.ts +308 -0
  53. package/adapters/mcp/runtime-gateway/process-tools.ts +289 -0
  54. package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +76 -0
  55. package/adapters/mcp/runtime-gateway/recovery-adapter.ts +268 -0
  56. package/adapters/mcp/runtime-gateway/recovery-client-adapter.ts +70 -0
  57. package/adapters/mcp/runtime-gateway/recovery-tool-contract.ts +99 -0
  58. package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +110 -0
  59. package/adapters/mcp/runtime-gateway/result-adapter.ts +108 -0
  60. package/adapters/mcp/runtime-gateway/router.ts +728 -0
  61. package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +1251 -0
  62. package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +634 -0
  63. package/adapters/mcp/runtime-gateway/runtime-tool-shared.ts +27 -0
  64. package/adapters/mcp/runtime-gateway/runtime-tools.ts +68 -0
  65. package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +186 -0
  66. package/adapters/mcp/runtime-gateway/shared-adapter.ts +25 -0
  67. package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +870 -0
  68. package/adapters/mcp/runtime-gateway/work-adapter.ts +3186 -0
  69. package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +502 -0
  70. package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +1 -0
  71. package/adapters/mcp/server.ts +1048 -0
  72. package/adapters/mcp/setup.ts +791 -0
  73. package/adapters/mcp/tool-capability-cache.ts +87 -0
  74. package/adapters/mcp/tool-mapping/access-tools.ts +387 -0
  75. package/adapters/mcp/tool-mapping/legacy-tool-service.ts +5265 -0
  76. package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +150 -0
  77. package/adapters/mcp/tool-mapping/repository-tools.ts +1691 -0
  78. package/adapters/mcp/tool-mapping/tools.ts +9 -0
  79. package/adapters/mcp/tool-mapping/umbrella-tools.ts +117 -0
  80. package/adapters/mcp/toolset-names.ts +74 -0
  81. package/adapters/mcp/toolset-selection.ts +41 -0
  82. package/adapters/mcp/toolset.ts +336 -0
  83. package/adapters/mcp/transports/http.ts +1456 -0
  84. package/adapters/mcp/transports/session-registry.ts +513 -0
  85. package/adapters/mcp/transports/stdio.ts +8 -0
  86. package/adapters/mcp/tunnels/openai-secure-tunnel.ts +139 -0
  87. package/adapters/mcp/types.ts +41 -0
  88. package/assets/AGENTS.md +2 -16
  89. package/assets/CLAUDE.md +2 -16
  90. package/assets/hooks/AGENTS.md +3 -14
  91. package/assets/hooks/CLAUDE.md +3 -14
  92. package/assets/hooks/hook-input.sh +9 -2
  93. package/assets/hooks/lib/workflow-state.sh +28 -10
  94. package/assets/hooks/prompt-guard.sh +63 -37
  95. package/assets/hooks/security-sentinel.sh +2 -1
  96. package/assets/hooks/session-start-context.sh +7 -5
  97. package/assets/hooks/stop-orchestrator.sh +13 -3
  98. package/assets/initializer-question-pack.v4.json +11 -7
  99. package/assets/partials/05-workflow.partial.md +18 -73
  100. package/assets/partials/07-footer.partial.md +1 -1
  101. package/assets/partials-agents/02-operating-mode.partial.md +1 -2
  102. package/assets/partials-agents/04-task-protocol.partial.md +14 -59
  103. package/assets/partials-agents/06-quality-safety.partial.md +11 -16
  104. package/assets/partials-agents/08-deep-docs.partial.md +1 -2
  105. package/assets/plan-map.json +11 -11
  106. package/assets/plugin-registry.v1.json +9 -3
  107. package/assets/plugin-trust-policy.v1.json +6 -0
  108. package/assets/recovery/ForgeRecovery.ps1 +100 -0
  109. package/assets/recovery/forge-wsl-rescue +271 -0
  110. package/assets/reference-configs/development-protocol.md +11 -15
  111. package/assets/reference-configs/document-generation.md +1 -1
  112. package/assets/reference-configs/global-working-rules.md +9 -1
  113. package/assets/reference-configs/harness-overview.md +22 -112
  114. package/assets/reference-configs/hook-operations.md +1 -1
  115. package/assets/reference-configs/sprint-contracts.md +2 -2
  116. package/assets/skill-version.json +2 -2
  117. package/assets/templates/helpers/architecture-event.ts +3 -34
  118. package/assets/templates/helpers/architecture-queue.sh +61 -10
  119. package/assets/templates/helpers/archive-workflow.sh +90 -180
  120. package/assets/templates/helpers/capability-config.ts +8 -11
  121. package/assets/templates/helpers/capability-resolver.ts +37 -19
  122. package/assets/templates/helpers/capture-plan.sh +2 -2
  123. package/assets/templates/helpers/check-architecture-sync.sh +1 -9
  124. package/assets/templates/helpers/check-task-sync.sh +82 -11
  125. package/assets/templates/helpers/check-task-workflow.sh +1 -3
  126. package/assets/templates/helpers/context-contract-sync.sh +1 -12
  127. package/assets/templates/helpers/contract-worktree.sh +26 -24
  128. package/assets/templates/helpers/ensure-task-workflow.sh +6 -8
  129. package/assets/templates/helpers/inspect-project-state.ts +1 -1
  130. package/assets/templates/helpers/migrate-project-template.sh +1 -1
  131. package/assets/templates/helpers/migrate-workflow-docs.ts +53 -239
  132. package/assets/templates/helpers/new-plan.sh +2 -2
  133. package/assets/templates/helpers/plan-to-todo.sh +3 -31
  134. package/assets/templates/helpers/sprint-backlog.sh +1 -1
  135. package/assets/templates/helpers/switch-plan.sh +1 -1
  136. package/assets/templates/helpers/workflow-contract.ts +1 -0
  137. package/assets/workflow-contract.v1.json +63 -171
  138. package/assets/workflows/xiaohongshu/xiaohongshu.collect-metrics.v1.draft.json +118 -0
  139. package/assets/workflows/xiaohongshu/xiaohongshu.publish-image-note.v1.draft.json +316 -0
  140. package/assets/workflows/xiaohongshu/xiaohongshu.publish-long-text.v1.draft.json +324 -0
  141. package/docs/architecture/CURRENT.md +148 -13
  142. package/docs/architecture/EVOLUTION.md +13 -0
  143. package/docs/architecture/decisions/20260801-controller-home-sqlite-state.md +2 -1
  144. package/docs/architecture/decisions/20260831-independent-windows-wsl-host-rescue.md +59 -0
  145. package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +120 -0
  146. package/docs/architecture/decisions/20260904-repository-runtime-data-boundary.md +42 -0
  147. package/docs/architecture/decisions/20260907-assistant-learning-loop.md +35 -0
  148. package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +296 -0
  149. package/docs/architecture/decisions/20260907-maintenance-diagnosis-bounded-read.md +39 -0
  150. package/docs/architecture/domains/verification.md +7 -0
  151. package/docs/architecture/domains/workflow-engine.md +1 -1
  152. package/docs/architecture/index.md +3 -3
  153. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +19 -8
  154. package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +124 -0
  155. package/docs/forge-chatgpt-mcp-setup.md +5 -3
  156. package/docs/forge-plugin-management.md +20 -4
  157. package/docs/forge-runtime-self-healing-loop.md +2 -0
  158. package/docs/operations/benchmark-cross-version-freeze.md +38 -0
  159. package/docs/operations/controller-browser-plugin.md +3 -1
  160. package/docs/operations/homebrew.md +2 -2
  161. package/docs/operations/platform-support.md +16 -8
  162. package/docs/operations/platform-support.zh-CN.md +2 -2
  163. package/docs/operations/standalone-disaster-recovery.md +26 -1
  164. package/docs/operations/uu-remote-rescue.md +41 -0
  165. package/docs/operations/windows-wsl-host-rescue.md +133 -0
  166. package/docs/public-usage-guide.md +1 -1
  167. package/docs/public-usage-guide.zh-CN.md +1 -1
  168. package/docs/tutorials/01-install-and-start.md +1 -1
  169. package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
  170. package/docs/tutorials/02-connect-chatgpt.md +4 -4
  171. package/docs/tutorials/02-connect-chatgpt.zh-CN.md +4 -4
  172. package/docs/wiki/Implementation.md +1 -1
  173. package/package.json +23 -14
  174. package/packages/kernel/controller/api/index.ts +2 -0
  175. package/packages/kernel/controller/application/controller-round-service.ts +29 -0
  176. package/packages/kernel/controller/application/controller-service.ts +30 -0
  177. package/packages/kernel/controller/domain/controller-round-transition-policy.ts +308 -0
  178. package/packages/kernel/controller/domain/controller-round.ts +107 -0
  179. package/packages/kernel/controller/domain/execution-quality.ts +133 -0
  180. package/packages/kernel/controller/domain/types.ts +56 -0
  181. package/packages/kernel/controller/index.ts +1 -0
  182. package/packages/kernel/controller/infrastructure/controller-binding-store.ts +84 -0
  183. package/packages/kernel/controller/infrastructure/controller-round-store.ts +1384 -0
  184. package/packages/kernel/controller/infrastructure/controller-session-store.ts +578 -0
  185. package/packages/kernel/controller/ports/controller-host.ts +16 -0
  186. package/packages/kernel/goal/api/index.ts +1 -0
  187. package/packages/kernel/goal/domain/types.ts +40 -0
  188. package/packages/kernel/goal/index.ts +1 -0
  189. package/packages/kernel/identity/api/index.ts +5 -0
  190. package/packages/kernel/identity/application/identity-service.ts +67 -0
  191. package/packages/kernel/identity/domain/scope.ts +63 -0
  192. package/packages/kernel/identity/domain/semantic-sync.ts +81 -0
  193. package/packages/kernel/identity/domain/types.ts +44 -0
  194. package/packages/kernel/identity/domain/workspace.ts +56 -0
  195. package/packages/kernel/identity/index.ts +1 -0
  196. package/packages/kernel/identity/infrastructure/identity-store.ts +75 -0
  197. package/packages/kernel/memory/api/index.ts +5 -0
  198. package/packages/kernel/memory/application/experience-service.ts +118 -0
  199. package/packages/kernel/memory/application/outcome-service.ts +77 -0
  200. package/packages/kernel/memory/domain/experience.ts +103 -0
  201. package/packages/kernel/memory/domain/operational-prior.ts +92 -0
  202. package/packages/kernel/memory/index.ts +1 -0
  203. package/packages/kernel/progression/api/index.ts +2 -0
  204. package/packages/kernel/progression/application/projector.ts +211 -0
  205. package/packages/kernel/progression/domain/types.ts +116 -0
  206. package/packages/kernel/progression/index.ts +1 -0
  207. package/packages/kernel/scheduler/api/index.ts +6 -0
  208. package/packages/kernel/scheduler/application/continuation-service.ts +212 -0
  209. package/packages/kernel/scheduler/application/eligibility.ts +252 -0
  210. package/packages/kernel/scheduler/application/schedule-service.ts +24 -0
  211. package/packages/kernel/scheduler/application/settlement.ts +197 -0
  212. package/packages/kernel/scheduler/domain/continuation.ts +38 -0
  213. package/packages/kernel/scheduler/domain/schedule.ts +149 -0
  214. package/packages/kernel/scheduler/index.ts +1 -0
  215. package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +38 -0
  216. package/packages/kernel/scheduler/infrastructure/schedule-store.ts +785 -0
  217. package/packages/kernel/work/api/index.ts +15 -0
  218. package/packages/kernel/work/application/work-service.ts +148 -0
  219. package/packages/kernel/work/domain/admission-policy.ts +34 -0
  220. package/packages/kernel/work/domain/check-receipt.ts +43 -0
  221. package/packages/kernel/work/domain/context-closure-receipt.ts +32 -0
  222. package/packages/kernel/work/domain/engineering-contracts.ts +157 -0
  223. package/packages/kernel/work/domain/engineering-design.ts +281 -0
  224. package/packages/kernel/work/domain/engineering-profile.ts +242 -0
  225. package/packages/kernel/work/domain/execution-concurrency.ts +254 -0
  226. package/packages/kernel/work/domain/execution-snapshot.ts +33 -0
  227. package/packages/kernel/work/domain/implementation-review.ts +510 -0
  228. package/packages/kernel/work/domain/project-engineering-contract.ts +202 -0
  229. package/packages/kernel/work/domain/repository-completion-receipt.ts +73 -0
  230. package/packages/kernel/work/domain/state-machine.ts +259 -0
  231. package/packages/kernel/work/domain/types.ts +528 -0
  232. package/packages/kernel/work/index.ts +1 -0
  233. package/packages/kernel/work/infrastructure/work-contract-store.ts +1876 -0
  234. package/packages/kernel/work/ports/work-contract-store.ts +18 -0
  235. package/packages/plugin-runtime/browser/index.ts +3 -0
  236. package/packages/plugin-runtime/browser/provider-registry.ts +110 -0
  237. package/packages/plugin-runtime/browser/runtime-contract.ts +150 -0
  238. package/packages/plugin-runtime/browser/session-authority.ts +61 -0
  239. package/packages/plugin-runtime/computer/index.ts +6 -0
  240. package/packages/plugin-runtime/computer/provider-error.ts +26 -0
  241. package/packages/plugin-runtime/computer/provider-registration.ts +52 -0
  242. package/packages/plugin-runtime/computer/provider-registry.ts +63 -0
  243. package/packages/plugin-runtime/computer/provider.ts +19 -0
  244. package/packages/plugin-runtime/computer/target-authority.ts +190 -0
  245. package/packages/plugin-runtime/computer/target-persistence.ts +54 -0
  246. package/packages/plugin-runtime/external/index.ts +1 -0
  247. package/packages/plugin-runtime/external/unix-jsonl-transport.ts +457 -0
  248. package/packages/plugin-runtime/index.ts +3 -0
  249. package/packages/protocols/browser/index.ts +1 -0
  250. package/packages/protocols/browser/session.ts +98 -0
  251. package/packages/protocols/computer/contract.ts +199 -0
  252. package/packages/protocols/computer/index.ts +1 -0
  253. package/packages/protocols/failure/contract.ts +158 -0
  254. package/packages/protocols/failure/index.ts +1 -0
  255. package/packages/protocols/handoff/index.ts +1 -0
  256. package/packages/protocols/handoff/status.ts +22 -0
  257. package/packages/protocols/mcp/execution-context.ts +11 -0
  258. package/packages/protocols/mcp/index.ts +2 -0
  259. package/packages/protocols/mcp/tool-contract.ts +42 -0
  260. package/packages/workflow-runtime/api/index.ts +2 -0
  261. package/packages/workflow-runtime/application/interpreter.ts +342 -0
  262. package/packages/workflow-runtime/domain/workflow-asset.ts +223 -0
  263. package/packages/workflow-runtime/index.ts +1 -0
  264. package/scripts/assemble-template.ts +1 -1
  265. package/scripts/benchmark-computer-hotpath.ts +255 -0
  266. package/scripts/benchmark-controller-round2.ts +54 -2
  267. package/scripts/benchmark-ios-agent-device.ts +3 -6
  268. package/scripts/benchmark-mcp-transport.ts +3 -4
  269. package/scripts/benchmark-operational-memory-activation.ts +235 -0
  270. package/scripts/benchmark-operational-shadow.ts +28 -0
  271. package/scripts/bootstrap-runtime-maintenance-recovery.sh +4 -1
  272. package/scripts/canary-chatgpt-provider-delivery.ts +97 -0
  273. package/scripts/canary-controller-semantic-wait.ts +195 -0
  274. package/scripts/canary-global-hook.sh +2 -2
  275. package/scripts/check-mcp-compatibility.ts +173 -7
  276. package/scripts/check-platform-support.mjs +28 -2
  277. package/scripts/check-public-docs.sh +1 -1
  278. package/scripts/check-release-readiness.sh +1 -1
  279. package/scripts/check-repository-hygiene.mjs +92 -0
  280. package/scripts/check-runtime-architecture.mjs +1206 -95
  281. package/scripts/check-source-duplication.mjs +9 -1
  282. package/scripts/check-tarball-install-smoke.sh +98 -15
  283. package/scripts/controller-ngrok-rotation.sh +5 -4
  284. package/scripts/create-project-dirs.sh +10 -74
  285. package/scripts/forge-local-recovery-helper.mjs +204 -0
  286. package/scripts/forge-uu-remote-rescue-helper.d.mts +31 -0
  287. package/scripts/forge-uu-remote-rescue-helper.mjs +409 -0
  288. package/scripts/forge-windows-host-recovery-helper.mjs +136 -0
  289. package/scripts/hook-shim.sh +2 -2
  290. package/scripts/init-project.sh +12 -70
  291. package/scripts/install-desktop-operator-registration.ts +4 -2
  292. package/scripts/install-independent-windows-wsl-recovery.ts +125 -0
  293. package/scripts/install-standalone-recovery.ts +122 -10
  294. package/scripts/install-uu-remote-rescue-registration.ts +74 -0
  295. package/scripts/install-windows-host-recovery-registration.ts +22 -0
  296. package/scripts/lib/controller-home-env.sh +6 -3
  297. package/scripts/lib/project-init-lib.sh +39 -582
  298. package/scripts/migrate-chatgpt-automation-schedules.ts +2 -2
  299. package/scripts/migrate-windows-wsl-controller-home.ts +306 -0
  300. package/scripts/open-source-audit-allowlist.txt +12 -1
  301. package/scripts/portability-bindings.mjs +70 -0
  302. package/scripts/run-bounded-command.mjs +55 -0
  303. package/scripts/run-bun-test-file.ts +22 -6
  304. package/scripts/run-governed-gate.ts +4 -1
  305. package/scripts/smoke-mcp-http-runtime.ts +1 -1
  306. package/scripts/smoke-runtime-recovery.ts +34 -1
  307. package/scripts/smoke-schedule-engine.ts +1 -1
  308. package/scripts/stage-runtime-release.ts +6 -1
  309. package/scripts/test-governance.ts +51 -2
  310. package/src/cli/agent-jobs/job-manager.ts +10 -1
  311. package/src/cli/chatgpt-browser/bind-server.ts +2 -1
  312. package/src/cli/chatgpt-browser/binding.ts +20 -10
  313. package/src/cli/chatgpt-browser/bridge-extension.ts +75 -0
  314. package/src/cli/chatgpt-browser/bridge-provider.ts +376 -11
  315. package/src/cli/chatgpt-browser/engine.ts +10 -11
  316. package/src/cli/chatgpt-browser/native-provider.ts +24 -83
  317. package/src/cli/chatgpt-browser/oracle-provider.ts +5 -3
  318. package/src/cli/chatgpt-browser/types.ts +1 -0
  319. package/src/cli/commands/bootstrap-control.ts +334 -0
  320. package/src/cli/commands/brain-assistant.ts +38 -0
  321. package/src/cli/commands/brain.ts +193 -40
  322. package/src/cli/commands/chatgpt.ts +127 -0
  323. package/src/cli/commands/computer.ts +437 -0
  324. package/src/cli/commands/doctor.ts +18 -1
  325. package/src/cli/commands/init-hook.ts +71 -61
  326. package/src/cli/commands/init.ts +3 -1
  327. package/src/cli/commands/mcp.ts +16 -10
  328. package/src/cli/commands/plugin.ts +38 -12
  329. package/src/cli/commands/recovery.ts +493 -80
  330. package/src/cli/commands/runtime.ts +9 -4
  331. package/src/cli/commands/setup-profile.ts +89 -39
  332. package/src/cli/commands/status.ts +2 -1
  333. package/src/cli/controller/check-runner.ts +487 -98
  334. package/src/cli/controller/context/types.ts +7 -1
  335. package/src/cli/controller/context-pack.ts +23 -3
  336. package/src/cli/controller/issue-store.ts +1 -1
  337. package/src/cli/controller/systemd-user.ts +110 -0
  338. package/src/cli/controller/types.ts +10 -70
  339. package/src/cli/controller/worklog.ts +67 -13
  340. package/src/cli/editing/edit-operation-contract.ts +92 -0
  341. package/src/cli/editing/edit-session.ts +289 -13
  342. package/src/cli/github/plugin.ts +17 -12
  343. package/src/cli/hook/route-registry.ts +3 -5
  344. package/src/cli/hook/runtime.ts +49 -3
  345. package/src/cli/index.ts +3 -0
  346. package/src/cli/local-bridge/connector-freshness.ts +2 -2
  347. package/src/cli/local-bridge/console-automations.ts +2 -2
  348. package/src/cli/local-bridge/facade-api.ts +41 -14
  349. package/src/cli/local-bridge/job-store.ts +1 -1
  350. package/src/cli/local-bridge/server.ts +24 -27
  351. package/src/cli/mcp/access-mode.ts +2 -132
  352. package/src/cli/mcp/access-tools.ts +2 -387
  353. package/src/cli/mcp/audit.ts +2 -32
  354. package/src/cli/mcp/auth.ts +2 -404
  355. package/src/cli/mcp/instructions.ts +2 -34
  356. package/src/cli/mcp/legacy-context.ts +2 -16
  357. package/src/cli/mcp/legacy-tool-service.ts +2 -5308
  358. package/src/cli/mcp/multi-repository.ts +2 -436
  359. package/src/cli/mcp/oauth.ts +2 -375
  360. package/src/cli/mcp/openai-secure-tunnel.ts +2 -0
  361. package/src/cli/mcp/paths.ts +2 -140
  362. package/src/cli/mcp/policy.ts +2 -232
  363. package/src/cli/mcp/post-finalize-work-attribution.ts +2 -150
  364. package/src/cli/mcp/proxy-env.ts +2 -62
  365. package/src/cli/mcp/readiness-projection.ts +2 -24
  366. package/src/cli/mcp/redaction.ts +2 -21
  367. package/src/cli/mcp/repo.ts +2 -24
  368. package/src/cli/mcp/repository-tools.ts +2 -1613
  369. package/src/cli/mcp/server.ts +2 -951
  370. package/src/cli/mcp/setup.ts +2 -737
  371. package/src/cli/mcp/tool-capability-cache.ts +2 -87
  372. package/src/cli/mcp/tool-contract.ts +2 -14
  373. package/src/cli/mcp/tools.ts +2 -9
  374. package/src/cli/mcp/toolset-names.ts +2 -70
  375. package/src/cli/mcp/toolset-selection.ts +2 -41
  376. package/src/cli/mcp/toolset.ts +2 -336
  377. package/src/cli/mcp/transports/AGENTS.md +1 -10
  378. package/src/cli/mcp/transports/CLAUDE.md +1 -10
  379. package/src/cli/mcp/transports/http.ts +2 -1414
  380. package/src/cli/mcp/transports/session-registry.ts +2 -490
  381. package/src/cli/mcp/transports/stdio.ts +2 -8
  382. package/src/cli/mcp/types.ts +2 -41
  383. package/src/cli/mcp/umbrella-tools.ts +2 -117
  384. package/src/cli/repositories/command-executor.ts +64 -18
  385. package/src/cli/repositories/command-scope.ts +117 -1
  386. package/src/cli/repositories/controller-home.ts +119 -1
  387. package/src/cli/repositories/identity.ts +13 -0
  388. package/src/cli/repositories/registry.ts +68 -49
  389. package/src/cli/repositories/repository-snapshot.ts +53 -7
  390. package/src/cli/repositories/runtime-storage.ts +27 -2
  391. package/src/cli/repositories/safe-patch.ts +34 -38
  392. package/src/cli/repositories/selected-path-actions.ts +22 -2
  393. package/src/cli/repositories/structured-git.ts +105 -25
  394. package/src/cli/runtime/helper-runner.ts +7 -0
  395. package/src/cli/runtime-invocation.ts +8 -1
  396. package/src/cli/tools/codegraph.ts +44 -25
  397. package/src/core/adoption/manifest-templates.ts +1 -1
  398. package/src/core/adoption/plan.ts +3 -26
  399. package/src/core/adoption/workflow-contract-plan.ts +17 -9
  400. package/src/effects/process-runner.ts +8 -14
  401. package/src/runtime/context/assistant-context.ts +154 -0
  402. package/src/runtime/context/assistant-work-context.ts +147 -0
  403. package/src/runtime/context/codegraph-cache-boundary.ts +255 -0
  404. package/src/runtime/context/codegraph-read-provider.ts +55 -22
  405. package/src/runtime/context/codegraph-sidecar.cjs +8 -1
  406. package/src/runtime/context/context-closure.ts +268 -0
  407. package/src/runtime/context/context-plane.ts +211 -0
  408. package/src/runtime/context/project-engineering-contract.ts +60 -0
  409. package/src/runtime/control-plane/bootstrap/capability-provider.ts +74 -0
  410. package/src/runtime/control-plane/bootstrap/control-api.ts +57 -0
  411. package/src/runtime/control-plane/bootstrap/index.ts +5 -0
  412. package/src/runtime/control-plane/bootstrap/state-machine.ts +141 -0
  413. package/src/runtime/control-plane/bootstrap/store.ts +21 -0
  414. package/src/runtime/control-plane/bootstrap/types.ts +87 -0
  415. package/src/runtime/control-plane/cleanup-artifact-retention.ts +328 -0
  416. package/src/runtime/control-plane/codegraph-cache-retention.ts +164 -0
  417. package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +320 -0
  418. package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +169 -0
  419. package/src/runtime/control-plane/execution/controller-authority-recovery.ts +350 -0
  420. package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +85 -0
  421. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +369 -99
  422. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +103 -15
  423. package/src/runtime/control-plane/execution/implementation-review-content.ts +95 -0
  424. package/src/runtime/control-plane/execution/repository-work-attribution.ts +2 -2
  425. package/src/runtime/control-plane/execution/retained-work-resume.ts +336 -6
  426. package/src/runtime/control-plane/execution/validation.ts +28 -3
  427. package/src/runtime/control-plane/execution/work-authority-reconciler.ts +116 -0
  428. package/src/runtime/control-plane/execution/work-completion-authority.ts +44 -2
  429. package/src/runtime/control-plane/execution/work-evidence-policy.ts +34 -3
  430. package/src/runtime/control-plane/execution/work-execution-support.ts +42 -22
  431. package/src/runtime/control-plane/execution/work-finalization-service.ts +1103 -166
  432. package/src/runtime/control-plane/execution/work-handle-authority.ts +219 -22
  433. package/src/runtime/control-plane/execution/work-handle-store.ts +77 -0
  434. package/src/runtime/control-plane/execution/work-head-settlement.ts +75 -0
  435. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +145 -23
  436. package/src/runtime/control-plane/execution/work-operation-service.ts +49 -13
  437. package/src/runtime/control-plane/execution/work-preparation-service.ts +31 -15
  438. package/src/runtime/control-plane/execution/work-remote-delivery.ts +1 -1
  439. package/src/runtime/control-plane/execution/work-task-receipt.ts +20 -1
  440. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +407 -76
  441. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +88 -18
  442. package/src/runtime/control-plane/execution/work-verification-context.ts +1 -1
  443. package/src/runtime/control-plane/execution/work-verification-service.ts +258 -4
  444. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +200 -15
  445. package/src/runtime/control-plane/facade/capability-registry.ts +21 -10
  446. package/src/runtime/control-plane/facade/controller-round-relay.ts +3 -1118
  447. package/src/runtime/control-plane/facade/controller-session-store.ts +2 -488
  448. package/src/runtime/control-plane/facade/goal-workloop-access.ts +6 -3
  449. package/src/runtime/control-plane/facade/goal-workloop.ts +972 -137
  450. package/src/runtime/control-plane/facade/handoff-inbox-application.ts +158 -0
  451. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +10 -0
  452. package/src/runtime/control-plane/facade/index.ts +4 -2
  453. package/src/runtime/control-plane/facade/operation-digest.ts +22 -58
  454. package/src/runtime/control-plane/facade/plan-contract-store.ts +1004 -38
  455. package/src/runtime/control-plane/facade/repository-work-admission.ts +19 -1
  456. package/src/runtime/control-plane/facade/requirement-authority.ts +218 -0
  457. package/src/runtime/control-plane/facade/requirement-board.ts +6 -1
  458. package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +48 -0
  459. package/src/runtime/control-plane/facade/semantic-admission.ts +8 -16
  460. package/src/runtime/control-plane/facade/suggested-actions.ts +4 -1
  461. package/src/runtime/control-plane/facade/types.ts +189 -532
  462. package/src/runtime/control-plane/facade/work-admission-policy.ts +84 -35
  463. package/src/runtime/control-plane/facade/work-contract-store.ts +2 -1043
  464. package/src/runtime/control-plane/facade/work-implementation-review.ts +2 -0
  465. package/src/runtime/control-plane/facade/work-state-machine.ts +2 -250
  466. package/src/runtime/control-plane/generated-cache-retention.ts +239 -18
  467. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +12 -1
  468. package/src/runtime/control-plane/global-scheduler/maintenance.ts +76 -13
  469. package/src/runtime/control-plane/global-scheduler/periodic-cleanup-entry.ts +55 -0
  470. package/src/runtime/control-plane/global-scheduler/periodic-cleanup-process.ts +98 -0
  471. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +1 -1
  472. package/src/runtime/control-plane/global-scheduler/scheduler-worker-entry.ts +10 -0
  473. package/src/runtime/control-plane/global-scheduler/scheduler.ts +173 -81
  474. package/src/runtime/control-plane/global-scheduler/worker-launch.ts +18 -6
  475. package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +397 -0
  476. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +2 -177
  477. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +301 -560
  478. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +20 -4
  479. package/src/runtime/control-plane/launcher/thin-launcher.ts +50 -4
  480. package/src/runtime/control-plane/lifecycle-retention-metrics.ts +60 -0
  481. package/src/runtime/control-plane/persistence/experience-store.ts +169 -0
  482. package/src/runtime/control-plane/persistence/operational-prior-store.ts +348 -0
  483. package/src/runtime/control-plane/persistence/requirement-store.ts +30 -22
  484. package/src/runtime/control-plane/persistence/sqlite-store.ts +545 -76
  485. package/src/runtime/control-plane/persistence/workflow-content-store.ts +98 -0
  486. package/src/runtime/control-plane/persistence/workflow-registry-store.ts +186 -0
  487. package/src/runtime/control-plane/persistence/workflow-run-store.ts +123 -0
  488. package/src/runtime/control-plane/release-retention.ts +56 -16
  489. package/src/runtime/control-plane/repository-namespace-retention.ts +208 -0
  490. package/src/runtime/control-plane/routing/route-policy.ts +19 -0
  491. package/src/runtime/control-plane/runtime-cleanup.ts +574 -37
  492. package/src/runtime/control-plane/runtime-generation.ts +6 -0
  493. package/src/runtime/control-plane/workspace/semantic-sync-service.ts +465 -0
  494. package/src/runtime/control-plane/workspace/workspace-store.ts +80 -0
  495. package/src/runtime/diagnostics/incident-repair.ts +406 -0
  496. package/src/runtime/diagnostics/mcp-timing.ts +125 -6
  497. package/src/runtime/diagnostics/performance.ts +6 -14
  498. package/src/runtime/diagnostics/read-only-tool.ts +1 -1
  499. package/src/runtime/evidence/artifact-store.ts +65 -2
  500. package/src/runtime/evidence/operational-shadow.ts +38 -0
  501. package/src/runtime/evidence/process-check-receipt.ts +5 -43
  502. package/src/runtime/evidence/sensitive-output.ts +4 -4
  503. package/src/runtime/execution/jobs/receipt-recovery.ts +1 -1
  504. package/src/runtime/execution/jobs/store.ts +121 -2
  505. package/src/runtime/execution/managed-workspace.ts +55 -5
  506. package/src/runtime/execution/process-runtime/canary.ts +19 -5
  507. package/src/runtime/execution/process-runtime/check-classification.ts +48 -0
  508. package/src/runtime/execution/process-runtime/check-facade.ts +23 -9
  509. package/src/runtime/execution/process-runtime/check-receipt.ts +1 -1
  510. package/src/runtime/execution/process-runtime/check-result-retention.ts +132 -0
  511. package/src/runtime/execution/process-runtime/check-result.ts +73 -2
  512. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +42 -3
  513. package/src/runtime/execution/process-runtime/check-storage.ts +187 -0
  514. package/src/runtime/execution/process-runtime/command-facade.ts +38 -87
  515. package/src/runtime/execution/process-runtime/index.ts +1 -0
  516. package/src/runtime/execution/process-runtime/interactive-admission.ts +2 -1
  517. package/src/runtime/execution/process-runtime/lightweight-managed.ts +32 -1
  518. package/src/runtime/execution/process-runtime/persisted-check.ts +128 -21
  519. package/src/runtime/execution/process-runtime/resource-claims.ts +60 -3
  520. package/src/runtime/execution/process-runtime/runtime.ts +132 -15
  521. package/src/runtime/execution/process-runtime/types.ts +22 -0
  522. package/src/runtime/execution/workers/executor.ts +16 -13
  523. package/src/runtime/execution/workers/worker-entry.ts +1 -1
  524. package/src/runtime/gateway/mcp/execution-tools.ts +2 -207
  525. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +2 -61
  526. package/src/runtime/gateway/mcp/persisted-check-process.ts +2 -3
  527. package/src/runtime/gateway/mcp/process-tools.ts +2 -289
  528. package/src/runtime/gateway/mcp/router.ts +2 -1125
  529. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +2 -565
  530. package/src/runtime/gateway/mcp/runtime-tools.ts +2 -6655
  531. package/src/runtime/gateway/mcp/work-validation-reconciler.ts +2 -1
  532. package/src/runtime/maintenance/cleanup.ts +38 -24
  533. package/src/runtime/platform/browser-product-discovery.ts +174 -0
  534. package/src/runtime/platform/computer-platform.ts +14 -0
  535. package/src/runtime/platform/executable-discovery.ts +54 -0
  536. package/src/runtime/platform/fetch-http-server.ts +90 -0
  537. package/src/runtime/platform/service-manager.ts +138 -0
  538. package/src/runtime/platform/windows-host-discovery.ts +118 -0
  539. package/src/runtime/platform/windows-recovery-deployment.ts +67 -0
  540. package/src/runtime/plugins/action-application.ts +135 -0
  541. package/src/runtime/plugins/app-store-connect-adapter.ts +9 -21
  542. package/src/runtime/plugins/browser-adapter.ts +140 -100
  543. package/src/runtime/plugins/browser-automation-service.ts +15 -36
  544. package/src/runtime/plugins/browser-macos-bridge.ts +69 -21
  545. package/src/runtime/plugins/browser-manifest-surface.ts +30 -6
  546. package/src/runtime/plugins/browser-native-session-service.ts +1 -1
  547. package/src/runtime/plugins/browser-provider-registry.ts +2 -109
  548. package/src/runtime/plugins/browser-registration.ts +16 -0
  549. package/src/runtime/plugins/browser-runtime-contract.ts +2 -154
  550. package/src/runtime/plugins/browser-runtime.ts +41 -9
  551. package/src/runtime/plugins/browser-session-authority.ts +101 -291
  552. package/src/runtime/plugins/browser-session-legacy-migration.ts +203 -0
  553. package/src/runtime/plugins/browser-session-store.ts +229 -36
  554. package/src/runtime/plugins/browser-session-types.ts +2 -98
  555. package/src/runtime/plugins/capability-authorization-grants.ts +17 -0
  556. package/src/runtime/plugins/catalog-trust.ts +82 -0
  557. package/src/runtime/plugins/computer-registration.ts +839 -0
  558. package/src/runtime/plugins/config-store.ts +119 -0
  559. package/src/runtime/plugins/desktop-operator-external-policy.ts +932 -0
  560. package/src/runtime/plugins/desktop-operator-registration.ts +111 -8
  561. package/src/runtime/plugins/errors.ts +8 -1
  562. package/src/runtime/plugins/external-adapter.ts +45 -322
  563. package/src/runtime/plugins/external-provider-policy.ts +48 -0
  564. package/src/runtime/plugins/external-registration.ts +9 -1
  565. package/src/runtime/plugins/external-unix-socket-probe.cjs +9 -3
  566. package/src/runtime/plugins/external-unix-socket.ts +64 -193
  567. package/src/runtime/plugins/first-party-external-registration.ts +163 -0
  568. package/src/runtime/plugins/first-party-registry.ts +3 -1
  569. package/src/runtime/plugins/github-adapter.ts +1 -2
  570. package/src/runtime/plugins/gmail-adapter.ts +6 -6
  571. package/src/runtime/plugins/google-calendar-adapter.ts +6 -6
  572. package/src/runtime/plugins/google-shared.ts +31 -46
  573. package/src/runtime/plugins/google-tasks-adapter.ts +6 -6
  574. package/src/runtime/plugins/ios-adapter.ts +1 -2
  575. package/src/runtime/plugins/local-system-adapter.ts +180 -0
  576. package/src/runtime/plugins/macos-capability-broker.ts +15 -105
  577. package/src/runtime/plugins/resend-adapter.ts +15 -24
  578. package/src/runtime/plugins/store.ts +493 -51
  579. package/src/runtime/plugins/types.ts +8 -1
  580. package/src/runtime/plugins/uu-remote-rescue-registration.ts +155 -0
  581. package/src/runtime/plugins/windows-host-recovery-install.ts +68 -0
  582. package/src/runtime/plugins/windows-host-recovery-registration.ts +85 -0
  583. package/src/runtime/plugins/xiaohongshu-publish.ts +86 -430
  584. package/src/runtime/projections/controller-context.ts +12 -6
  585. package/src/runtime/projections/git-status-sampler.ts +73 -22
  586. package/src/runtime/projections/materialized-view.ts +14 -8
  587. package/src/runtime/recovery/capability-action-application.ts +228 -0
  588. package/src/runtime/recovery/index.ts +3 -0
  589. package/src/runtime/recovery/lifecycle-inventory.ts +338 -0
  590. package/src/runtime/recovery/local-jobs-repair.ts +14 -14
  591. package/src/runtime/recovery/maintenance-executor.ts +358 -76
  592. package/src/runtime/recovery/quarantine-retention.ts +256 -0
  593. package/src/runtime/release/identity.ts +6 -0
  594. package/src/runtime/resources/leases/store.ts +1 -1
  595. package/src/runtime/root/active-execution-power-assertion.ts +139 -0
  596. package/src/runtime/root/assistant-learning-loop.ts +45 -0
  597. package/src/runtime/root/browser-session-composition.ts +59 -0
  598. package/src/runtime/root/computer-composition.ts +191 -0
  599. package/src/runtime/root/computer-target-composition.ts +16 -0
  600. package/src/runtime/root/computer-target-persistence.ts +39 -0
  601. package/src/runtime/root/controller-round-composition.ts +107 -0
  602. package/src/runtime/root/controller-services.ts +2 -0
  603. package/src/runtime/root/entry.ts +4 -3
  604. package/src/runtime/root/gateway-adapter.ts +3 -3
  605. package/src/runtime/root/local-bridge.ts +5 -2
  606. package/src/runtime/root/mcp-transport.ts +5 -5
  607. package/src/runtime/root/package-connector-service.ts +108 -56
  608. package/src/runtime/root/package-runtime-release.ts +85 -18
  609. package/src/runtime/root/package-runtime-service.ts +60 -97
  610. package/src/runtime/root/release-execution-canary.ts +71 -0
  611. package/src/runtime/root/release-loader.ts +68 -0
  612. package/src/runtime/root/release-manifest.ts +106 -2
  613. package/src/runtime/root/release-materialize.ts +103 -4
  614. package/src/runtime/root/release-store.ts +31 -2
  615. package/src/runtime/root/runtime.ts +240 -25
  616. package/src/runtime/root/scheduled-controller-composition.ts +51 -0
  617. package/src/runtime/root/scheduler.ts +12 -4
  618. package/src/runtime/root/service-runner.ts +1 -1
  619. package/src/runtime/root/service.ts +41 -16
  620. package/src/runtime/root/status.ts +1 -0
  621. package/src/runtime/root/types.ts +24 -1
  622. package/src/runtime/shared/local-bridge-surface.ts +1 -1
  623. package/src/runtime/shared/process-environment.ts +19 -4
  624. package/src/runtime/shared/storage-capacity.ts +68 -0
  625. package/src/runtime/standalone-recovery/controller-home-migration.ts +1116 -0
  626. package/src/runtime/standalone-recovery/core.ts +984 -230
  627. package/src/runtime/standalone-recovery/entry.ts +182 -51
  628. package/src/runtime/standalone-recovery/independent-host-rescue.ts +172 -0
  629. package/src/runtime/standalone-recovery/installer.ts +212 -104
  630. package/src/runtime/standalone-recovery/mcp-server.ts +243 -0
  631. package/src/runtime/standalone-recovery/mutation-identity-contract.ts +21 -0
  632. package/src/runtime/standalone-recovery/operation-lock.ts +160 -0
  633. package/src/runtime/standalone-recovery/performance.ts +135 -0
  634. package/src/runtime/standalone-recovery/release.ts +5 -0
  635. package/src/runtime/watchdog/workflow-watchdog.ts +1 -1
  636. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +1 -1
  637. package/src/runtime/workflow/schedules/engine.ts +191 -343
  638. package/src/runtime/workflow/schedules/pending-activation.ts +1 -1
  639. package/src/runtime/workflow/schedules/settlement.ts +2 -191
  640. package/src/runtime/workflow/schedules/store.ts +2 -607
  641. package/src/runtime/workflow/schedules/types.ts +2 -127
  642. package/src/runtime/workflow/schedules/work-continuation.ts +180 -15
  643. package/src/runtime/workflows/first-party/xiaohongshu.ts +122 -0
  644. package/src/runtime/workflows/runtime.ts +486 -0
  645. package/src/testing/test-governance.ts +90 -29
  646. package/assets/templates/helpers/archive-architecture-request.sh +0 -244
  647. package/docs/architecture/history/README.md +0 -7
  648. package/docs/architecture/history/chatgpt-handoff-facade.md +0 -397
  649. package/docs/architecture/history/global-hook-runtime.md +0 -166
  650. package/docs/architecture/history/ios-semantic-automation-provider-v2.md +0 -170
  651. package/docs/architecture/requests/archive/2026/20260528-154740-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  652. package/docs/architecture/requests/archive/2026/20260528-154816-assets-hooks-assets-hooks-hook-input-sh.md +0 -59
  653. package/docs/architecture/requests/archive/2026/20260528-161851-ai-harness-workflow-contract-json-ai-harness-workflow-contract-json.md +0 -59
  654. package/docs/architecture/requests/archive/2026/20260528-161853-scripts-check-task-workflow-sh-scripts-check-task-workflow-sh.md +0 -59
  655. package/docs/architecture/requests/archive/2026/20260528-161911-assets-workflow-contract-v1-json-assets-workflow-contract-v1-json.md +0 -59
  656. package/docs/architecture/requests/archive/2026/20260528-222416-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  657. package/docs/architecture/requests/archive/2026/20260528-222444-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  658. package/docs/architecture/requests/archive/2026/20260528-222457-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  659. package/docs/architecture/requests/archive/2026/20260528-222648-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
  660. package/docs/architecture/requests/archive/2026/20260528-222705-ai-hooks-ai-hooks-worktree-guard-sh.md +0 -59
  661. package/docs/architecture/requests/archive/2026/20260528-222726-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  662. package/docs/architecture/requests/archive/2026/20260528-222727-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  663. package/docs/architecture/requests/archive/2026/20260528-224736-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
  664. package/docs/architecture/requests/archive/2026/20260528-233259-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  665. package/docs/architecture/requests/archive/2026/20260528-233335-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  666. package/docs/architecture/requests/archive/2026/20260528-233456-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  667. package/docs/architecture/requests/archive/2026/20260528-233457-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  668. package/docs/architecture/requests/archive/2026/20260528-233637-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
  669. package/docs/architecture/requests/archive/2026/20260528-233638-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
  670. package/docs/architecture/requests/archive/2026/20260529-000322-root-package-json.md +0 -59
  671. package/docs/architecture/requests/archive/2026/20260529-004238-ai-hooks-ai-hooks-lib-workflow-state-sh.md +0 -59
  672. package/docs/architecture/requests/archive/2026/20260529-020654-ai-harness-policy-json-ai-harness-policy-json.md +0 -63
  673. package/docs/architecture/requests/archive/2026/20260529-094236-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
  674. package/docs/architecture/requests/archive/2026/20260529-094323-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
  675. package/docs/architecture/requests/archive/2026/20260529-094331-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
  676. package/docs/architecture/requests/archive/2026/20260529-094339-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
  677. package/docs/architecture/requests/archive/2026/20260529-094430-assets-hooks-assets-hooks-session-start-context-sh.md +0 -60
  678. package/docs/architecture/requests/archive/2026/20260529-094446-ai-hooks-ai-hooks-session-start-context-sh.md +0 -60
  679. package/docs/architecture/requests/archive/2026/20260613-002040-runtime-harness-hook-adapters.md +0 -68
  680. package/docs/architecture/requests/archive/2026/root.md +0 -68
  681. package/docs/architecture/requests/archive/2026/runtime-harness-hook-adapters.md +0 -76
  682. package/docs/architecture/requests/archive/2026/verification-evals-checks.md +0 -68
  683. package/docs/architecture/requests/archive/2026/workflow-engine-contract-assets.md +0 -69
  684. package/scripts/archive-architecture-request.sh +0 -4
  685. package/scripts/run-skill-evals.ts +0 -1022
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * `agentic-dev brain` / `forge brain` — explicit external knowledge
3
- * sync and archive promotion surface.
3
+ * sync and terminal-workflow promotion surface.
4
4
  *
5
5
  * Hooks only emit [BrainPromote] advisories. This command owns the deliberate
6
6
  * write boundary from repo files into ~/brain/<project>/*.
@@ -11,6 +11,10 @@ import * as fs from 'fs';
11
11
  import * as path from 'path';
12
12
  import { execFileSync } from 'child_process';
13
13
  import { configuredBrainRoot } from './brain-root';
14
+ import { addBrainAssistantCommands } from './brain-assistant';
15
+ import { resolveRepoPreferredControllerHome } from '../repositories/controller-home';
16
+ import { findRegisteredRepositoryByCheckoutRoot } from '../repositories/registry';
17
+ import { getWorkContract, validateWorkSemantics } from '../../../packages/kernel/work/api/index';
14
18
 
15
19
  export type BrainLifecycle = 'always-sync' | 'archive-only' | 'never-sync';
16
20
  export type BrainCategory = 'decisions' | 'runbooks' | 'patterns' | 'references';
@@ -89,6 +93,9 @@ export interface BrainPromoteOptions {
89
93
  repo?: string;
90
94
  slug: string;
91
95
  category: BrainCategory;
96
+ workId?: string;
97
+ controllerHome?: string;
98
+ legacyGitHistory?: boolean;
92
99
  dryRun?: boolean;
93
100
  json?: boolean;
94
101
  }
@@ -426,20 +433,98 @@ export function runBrain(mode: 'status' | 'check' | 'sync', opts: BrainCommandOp
426
433
  return { repoRoot, manifestPath, brainRoot: root, project: manifest.project || path.basename(repoRoot), mode, scope, selected: items, synced, skipped, issues, dryRun: opts.dryRun === true };
427
434
  }
428
435
 
429
- function findArchiveSources(repoRoot: string, slug: string): string[] {
436
+ interface HistoricalBrainSource {
437
+ sourcePath: string;
438
+ gitRef: string;
439
+ content: string;
440
+ terminalAt: string;
441
+ }
442
+
443
+ function gitText(repoRoot: string, args: string[]): string {
444
+ return execFileSync('git', ['-C', repoRoot, ...args], {
445
+ encoding: 'utf-8',
446
+ stdio: ['ignore', 'pipe', 'ignore'],
447
+ maxBuffer: 16 * 1024 * 1024,
448
+ });
449
+ }
450
+
451
+ function terminalSourceKind(sourcePath: string): 'plan' | 'notes' | null {
452
+ const normalized = normalizeSlashes(sourcePath);
453
+ const base = path.posix.basename(normalized);
454
+ if ((/^plans\/plan-[^/]+\.md$/).test(normalized) || (normalized.startsWith('plans/archive/') && base.startsWith('plan-') && base.endsWith('.md'))) {
455
+ return 'plan';
456
+ }
457
+ if ((/^tasks\/notes\/[^/]+\.notes\.md$/).test(normalized) || (normalized.startsWith('tasks/archive/') && base.startsWith('notes-') && base.endsWith('.md'))) {
458
+ return 'notes';
459
+ }
460
+ return null;
461
+ }
462
+
463
+ function findTerminalHistorySources(repoRoot: string, slug: string): HistoricalBrainSource[] {
430
464
  const safeSlug = slug.replace(/[^A-Za-z0-9._-]+/g, '-');
431
- const sources: string[] = [];
432
- for (const dir of ['plans/archive', 'tasks/archive']) {
433
- const fullDir = path.resolve(repoRoot, dir);
434
- if (!fs.existsSync(fullDir)) continue;
435
- for (const file of fs.readdirSync(fullDir).sort()) {
436
- if (!file.endsWith('.md')) continue;
437
- if (dir === 'plans/archive' && !file.startsWith('plan-')) continue;
438
- if (dir === 'tasks/archive' && !file.startsWith('notes-')) continue;
439
- if (file.includes(safeSlug)) sources.push(`${dir}/${file}`);
465
+ let log = '';
466
+ try {
467
+ log = gitText(repoRoot, [
468
+ 'log',
469
+ '--all',
470
+ '--date=iso-strict',
471
+ '--format=@@FORGE_COMMIT@@%H%x09%aI',
472
+ '--diff-filter=DR',
473
+ '-M',
474
+ '--name-status',
475
+ '--',
476
+ 'plans',
477
+ 'tasks',
478
+ ]);
479
+ } catch {
480
+ return [];
481
+ }
482
+
483
+ let commit = '';
484
+ let terminalAt = '';
485
+ const selected = new Map<'plan' | 'notes', HistoricalBrainSource>();
486
+ for (const rawLine of log.split(/\r?\n/)) {
487
+ const line = rawLine.trim();
488
+ if (!line) continue;
489
+ if (line.startsWith('@@FORGE_COMMIT@@')) {
490
+ const [nextCommit, nextTerminalAt = ''] = line.slice('@@FORGE_COMMIT@@'.length).split('\t');
491
+ commit = nextCommit || '';
492
+ terminalAt = nextTerminalAt || '';
493
+ continue;
494
+ }
495
+ if (!commit || !line.includes(safeSlug)) continue;
496
+ const fields = line.split('\t');
497
+ const status = fields[0] ?? '';
498
+ let sourcePath = '';
499
+ let gitRef = '';
500
+ if (status === 'D' && fields[1]) {
501
+ sourcePath = normalizeSlashes(fields[1]);
502
+ gitRef = `${commit}^:${sourcePath}`;
503
+ } else if (status.startsWith('R') && fields[1] && fields[2]) {
504
+ const oldPath = normalizeSlashes(fields[1]);
505
+ const newPath = normalizeSlashes(fields[2]);
506
+ if (terminalSourceKind(newPath)) {
507
+ sourcePath = newPath;
508
+ gitRef = `${commit}:${newPath}`;
509
+ } else {
510
+ sourcePath = oldPath;
511
+ gitRef = `${commit}^:${oldPath}`;
512
+ }
513
+ } else {
514
+ continue;
440
515
  }
516
+ const kind = terminalSourceKind(sourcePath);
517
+ if (!kind || selected.has(kind)) continue;
518
+ try {
519
+ const content = gitText(repoRoot, ['show', gitRef]);
520
+ selected.set(kind, { sourcePath, gitRef, content, terminalAt });
521
+ } catch {
522
+ // A transition without a readable Git snapshot is not safe promotion
523
+ // evidence. Continue looking for an older durable terminal transition.
524
+ }
525
+ if (selected.size === 2) break;
441
526
  }
442
- return sources;
527
+ return Array.from(selected.values());
443
528
  }
444
529
 
445
530
  function frontmatterValue(content: string, label: string): string {
@@ -452,39 +537,112 @@ function yamlQuote(value: string): string {
452
537
  return JSON.stringify(value);
453
538
  }
454
539
 
540
+ function modernBrainPromotionSource(repoRoot: string, opts: BrainPromoteOptions, issues: BrainIssue[]): {
541
+ sources: string[]; sections: string[]; relatedPlan: string; terminalAt: string; outcome: string; sourceWork: string; completionReceipt: string; workScope: string;
542
+ } {
543
+ const workId = opts.workId?.trim();
544
+ if (!workId) {
545
+ issue(issues, 'error', 'Modern Brain promotion requires --work-id; use --legacy-git-history only for retired Git delete/rename imports.');
546
+ return { sources: [], sections: [], relatedPlan: '', terminalAt: '', outcome: '', sourceWork: '', completionReceipt: '', workScope: '' };
547
+ }
548
+ const controllerHome = resolveRepoPreferredControllerHome(repoRoot, opts.controllerHome);
549
+ const repository = findRegisteredRepositoryByCheckoutRoot(repoRoot, controllerHome);
550
+ if (!repository) {
551
+ issue(issues, 'error', `Repository is not registered in Controller Home; cannot resolve Work evidence for ${workId}.`);
552
+ return { sources: [], sections: [], relatedPlan: '', terminalAt: '', outcome: '', sourceWork: workId, completionReceipt: '', workScope: '' };
553
+ }
554
+ const work = getWorkContract({ controllerHome, repoId: repository.repoId }, workId);
555
+ if (!work) {
556
+ issue(issues, 'error', `Work not found in registered repository: ${workId}`);
557
+ return { sources: [], sections: [], relatedPlan: '', terminalAt: '', outcome: '', sourceWork: workId, completionReceipt: '', workScope: '' };
558
+ }
559
+ if (!work.scopeRef) {
560
+ issue(issues, 'error', `Modern Brain promotion requires a portable Work scope: ${workId}; use --legacy-git-history only for retired unscoped imports.`);
561
+ return { sources: [], sections: [], relatedPlan: work.planId ?? '', terminalAt: '', outcome: '', sourceWork: workId, completionReceipt: '', workScope: '' };
562
+ }
563
+ const workScope = `${work.scopeRef.kind}:${work.scopeRef.id}`;
564
+ if (work.status !== 'completed' || !work.completionReceipt) {
565
+ issue(issues, 'error', `Brain promotion requires a completed Work with a durable completion receipt: ${workId}`);
566
+ return { sources: [], sections: [], relatedPlan: work.planId ?? '', terminalAt: '', outcome: '', sourceWork: workId, completionReceipt: '', workScope };
567
+ }
568
+ try {
569
+ validateWorkSemantics(work);
570
+ } catch (error) {
571
+ issue(issues, 'error', `Work completion evidence is invalid for Brain promotion: ${error instanceof Error ? error.message : String(error)}`);
572
+ return { sources: [], sections: [], relatedPlan: work.planId ?? '', terminalAt: '', outcome: '', sourceWork: workId, completionReceipt: work.completionReceipt.receiptId, workScope };
573
+ }
574
+ const receipt = work.completionReceipt;
575
+ const repositoryDetails = ('targetRevision' in receipt)
576
+ ? [`- Target revision: ${receipt.targetRevision}`, `- Changed paths: ${receipt.changedPaths.length}`]
577
+ : [];
578
+ const section = [
579
+ `## Source: work:${work.workId}`,
580
+ '',
581
+ `- Objective: ${work.objective}`,
582
+ `- Completion outcome: ${work.completionOutcome ?? 'completed'}`,
583
+ `- Completion receipt: ${receipt.receiptId}`,
584
+ `- Completion authority: ${receipt.source}`,
585
+ `- Work scope: ${workScope}`,
586
+ ...repositoryDetails,
587
+ '',
588
+ 'This entry is promoted from validated durable Work metadata. Raw process logs, credentials, and chat history are not copied into Brain.',
589
+ '',
590
+ ].join('\n');
591
+ return {
592
+ sources: [`work:${work.workId}`, `completion:${receipt.receiptId}`],
593
+ sections: [section], relatedPlan: work.planId ?? '', terminalAt: receipt.recordedAt,
594
+ outcome: work.completionOutcome ?? 'completed', sourceWork: work.workId,
595
+ completionReceipt: receipt.receiptId, workScope,
596
+ };
597
+ }
598
+
455
599
  export function runBrainPromote(opts: BrainPromoteOptions): BrainPromoteResult {
456
600
  if (!VALID_CATEGORIES.has(opts.category)) {
457
601
  throw new Error(`invalid category "${opts.category}" (expected: ${Array.from(VALID_CATEGORIES).join(', ')})`);
458
602
  }
603
+ if (opts.legacyGitHistory && opts.workId?.trim()) throw new Error('BRAIN_PROMOTION_MODE_CONFLICT');
459
604
  const repoRoot = resolveRepoRoot(opts.repo);
460
605
  const { manifest } = readManifest(repoRoot);
461
606
  const project = manifest.project || path.basename(repoRoot);
462
607
  const root = brainRoot();
463
608
  const issues: BrainIssue[] = [];
464
- const sources = findArchiveSources(repoRoot, opts.slug);
465
609
  const brainPath = logicalBrainPath(project, opts.category, `${opts.slug}.md`);
466
610
  const targetPath = safeBrainPath(root, brainPath, `promote:${opts.slug}`, issues) || path.resolve(root, project, opts.category, `${opts.slug}.md`);
467
611
 
468
- if (sources.length === 0) {
469
- issue(issues, 'error', `No archived plan or notes found for slug: ${opts.slug}`);
612
+ let sources: string[] = [];
613
+ let sections: string[] = [];
614
+ let relatedPlan = '';
615
+ let terminalAt = '';
616
+ let outcome = '';
617
+ let sourceWork = '';
618
+ let completionReceipt = '';
619
+ let workScope = '';
620
+
621
+ if (opts.legacyGitHistory) {
622
+ const historicalSources = findTerminalHistorySources(repoRoot, opts.slug);
623
+ sources = historicalSources.map((source) => `git:${source.gitRef}`);
624
+ if (historicalSources.length === 0) issue(issues, 'error', `No terminal plan or notes found in Git history for slug: ${opts.slug}`);
625
+ sections = historicalSources.map((source) => `## Source: git:${source.gitRef}\n\n${source.content.trim()}\n`);
626
+ const firstContent = historicalSources[0]?.content ?? '';
627
+ const relatedPlanSource = historicalSources.find((source) => terminalSourceKind(source.sourcePath) === 'plan');
628
+ relatedPlan = relatedPlanSource ? `git:${relatedPlanSource.gitRef}` : frontmatterValue(firstContent, 'Related Plan');
629
+ terminalAt = historicalSources[0]?.terminalAt || frontmatterValue(firstContent, 'Archived') || new Date().toISOString();
630
+ outcome = frontmatterValue(firstContent, 'Outcome') || 'Promoted';
631
+ } else {
632
+ const modern = modernBrainPromotionSource(repoRoot, opts, issues);
633
+ ({ sources, sections, relatedPlan, terminalAt, outcome, sourceWork, completionReceipt, workScope } = modern);
470
634
  }
471
635
 
472
- const sections = sources.map((sourcePath) => {
473
- const content = fs.readFileSync(path.resolve(repoRoot, sourcePath), 'utf-8');
474
- const title = sourcePath;
475
- return `## Source: ${title}\n\n${content.trim()}\n`;
476
- });
477
- const firstContent = sources.length > 0 ? fs.readFileSync(path.resolve(repoRoot, sources[0]), 'utf-8') : '';
478
- const relatedPlan = sources.find((source) => source.startsWith('plans/archive/')) || frontmatterValue(firstContent, 'Related Plan');
479
- const archivedAt = frontmatterValue(firstContent, 'Archived') || new Date().toISOString();
480
- const outcome = frontmatterValue(firstContent, 'Outcome') || 'Promoted';
481
636
  const body = [
482
637
  '---',
483
638
  `slug: ${yamlQuote(opts.slug)}`,
484
639
  `category: ${yamlQuote(opts.category)}`,
485
640
  `source_plan: ${yamlQuote(relatedPlan || '')}`,
486
- `archived_at: ${yamlQuote(archivedAt)}`,
487
- `outcome: ${yamlQuote(outcome)}`,
641
+ ...(sourceWork ? [`source_work: ${yamlQuote(sourceWork)}`] : []),
642
+ ...(completionReceipt ? [`completion_receipt: ${yamlQuote(completionReceipt)}`] : []),
643
+ ...(workScope ? [`work_scope: ${yamlQuote(workScope)}`] : []),
644
+ `terminal_at: ${yamlQuote(terminalAt || '')}`,
645
+ `outcome: ${yamlQuote(outcome || '')}`,
488
646
  `repo: ${yamlQuote(repoRoot)}`,
489
647
  '---',
490
648
  '',
@@ -500,17 +658,8 @@ export function runBrainPromote(opts: BrainPromoteOptions): BrainPromoteResult {
500
658
  }
501
659
 
502
660
  return {
503
- repoRoot,
504
- brainRoot: root,
505
- project,
506
- slug: opts.slug,
507
- category: opts.category,
508
- targetPath,
509
- brainPath,
510
- sources,
511
- issues,
512
- dryRun: opts.dryRun === true,
513
- written: !hasErrors && !opts.dryRun,
661
+ repoRoot, brainRoot: root, project, slug: opts.slug, category: opts.category, targetPath, brainPath,
662
+ sources, issues, dryRun: opts.dryRun === true, written: !hasErrors && !opts.dryRun,
514
663
  };
515
664
  }
516
665
 
@@ -551,7 +700,8 @@ function exitCodeFor(issues: BrainIssue[]): number {
551
700
  }
552
701
 
553
702
  export function buildBrainCommand(): Command {
554
- const brain = new Command('brain').description('Manage explicit repo-to-brain sync and archive promotion');
703
+ const brain = new Command('brain').description('Manage explicit repo-to-brain sync and terminal-workflow promotion');
704
+ addBrainAssistantCommands(brain);
555
705
 
556
706
  brain
557
707
  .command('status')
@@ -593,10 +743,13 @@ export function buildBrainCommand(): Command {
593
743
 
594
744
  brain
595
745
  .command('promote')
596
- .description('Promote archived plan/notes by slug into ~/brain/<project>/<category>/')
597
- .requiredOption('--slug <slug>', 'Archived workflow slug')
746
+ .description('Promote one validated terminal Work into ~/brain/<project>/<category>/; Git-history import is explicit legacy compatibility only')
747
+ .requiredOption('--slug <slug>', 'Brain entry slug')
598
748
  .requiredOption('--category <category>', 'Target category: decisions|runbooks|patterns|references')
599
749
  .option('--repo <path>', 'Repository root to inspect')
750
+ .option('--work-id <id>', 'Completed Work identity for modern promotion')
751
+ .option('--controller-home <path>', 'Override Controller Home used to resolve the registered repository and Work')
752
+ .option('--legacy-git-history', 'Explicitly use retired Git delete/rename promotion compatibility')
600
753
  .option('--dry-run', 'Show planned promotion without writing files')
601
754
  .option('--json', 'Output JSON instead of human-readable text')
602
755
  .action((rawOpts: BrainPromoteOptions) => {
@@ -18,6 +18,7 @@ import {
18
18
  type ChatgptAutomationReasoning,
19
19
  type ChatgptAutomationTabPolicy,
20
20
  } from '../../runtime/control-plane/launcher/chatgpt-work-continuation';
21
+ import { closeChatgptControllerRoundFromSource, continueChatgptControllerRoundFromSource, openChatgptControllerRoundFromSource } from '../../runtime/control-plane/launcher/chatgpt-round-continuation';
21
22
 
22
23
  interface BrowserCommonOptions {
23
24
  repo?: string;
@@ -92,6 +93,45 @@ interface WorkChatgptContinueOptions extends BrowserCommonOptions {
92
93
  reasoning?: string;
93
94
  tabPolicy?: string;
94
95
  timeoutMs?: string;
96
+ controllerAuthorityId?: string;
97
+ relayScopeId?: string;
98
+ }
99
+
100
+ interface SourceRoundOpenOptions extends BrowserCommonOptions {
101
+ controllerHome?: string;
102
+ repoId: string;
103
+ workId: string;
104
+ controllerId: string;
105
+ principalId: string;
106
+ controllerInstanceId?: string;
107
+ continuationPrompt?: string;
108
+ timeoutMs?: string;
109
+ }
110
+
111
+ interface SourceRoundContinueOptions extends BrowserCommonOptions {
112
+ controllerHome?: string;
113
+ repoId: string;
114
+ workId: string;
115
+ controllerAuthorityId: string;
116
+ relayScopeId: string;
117
+ reason?: string;
118
+ timeoutMs?: string;
119
+ }
120
+
121
+ interface SourceRoundCloseOptions extends BrowserCommonOptions {
122
+ controllerHome?: string;
123
+ repoId: string;
124
+ workId: string;
125
+ controllerAuthorityId: string;
126
+ relayScopeId: string;
127
+ disposition: string;
128
+ handoffId?: string;
129
+ reason?: string;
130
+ }
131
+
132
+ function sourceRoundCloseDisposition(value: string): 'wait' | 'wait_for_user' | 'goal_complete' {
133
+ if (value === 'wait' || value === 'wait_for_user' || value === 'goal_complete') return value;
134
+ throw new Error(`CONTROLLER_RELAY_DISPOSITION_INVALID: ${value}`);
95
135
  }
96
136
 
97
137
  interface BrowserFollowupOptions extends BrowserCommonOptions {
@@ -409,6 +449,8 @@ export function buildChatgptCommand(): Command {
409
449
  .option('--reasoning <level>', 'Reasoning level: medium|high|xhigh', 'high')
410
450
  .option('--tab-policy <policy>', 'Browser tab policy: auto|reuse|new', 'auto')
411
451
  .option('--timeout-ms <ms>', 'Assistant timeout in milliseconds')
452
+ .option('--controller-authority-id <id>', 'Durable ControllerRound authority for source-mode continuation')
453
+ .option('--relay-scope-id <id>', 'Durable ControllerRound relay scope paired with controller authority')
412
454
  .action((rawOpts: WorkChatgptContinueOptions) => {
413
455
  void runChatgptAction(async () => {
414
456
  const result = await runWorkChatgptContinuation({
@@ -417,6 +459,8 @@ export function buildChatgptCommand(): Command {
417
459
  repoRoot: resolveRepoRoot(rawOpts.repo),
418
460
  workId: rawOpts.workId,
419
461
  prompt: rawOpts.prompt,
462
+ controllerAuthorityId: rawOpts.controllerAuthorityId,
463
+ relayScopeId: rawOpts.relayScopeId,
420
464
  title: rawOpts.title,
421
465
  browserSessionId: rawOpts.session,
422
466
  conversationUrl: rawOpts.conversationUrl,
@@ -443,6 +487,89 @@ export function buildChatgptCommand(): Command {
443
487
  });
444
488
  chatgpt.addCommand(workContinue, { hidden: true });
445
489
 
490
+ const roundOpen = new Command('round-open')
491
+ .description('Internal: open and dispatch one ChatGPT ControllerRound from current source')
492
+ .option('--repo <path>', 'Repository root used by the ChatGPT Browser delivery host', '.')
493
+ .option('--controller-home <path>', 'Explicit Controller Home containing ControllerRound authority; defaults to canonical user-level Forge Controller Home')
494
+ .requiredOption('--repo-id <repo-id>', 'Stable Forge repository id')
495
+ .requiredOption('--work-id <work-id>', 'Forge Work id to dispatch')
496
+ .requiredOption('--controller-id <id>', 'Authenticated ChatGPT controller id/principal identity')
497
+ .requiredOption('--principal-id <id>', 'Authenticated ChatGPT principal id')
498
+ .option('--controller-instance-id <id>', 'Source launcher instance identity')
499
+ .option('--continuation-prompt <text>', 'Bounded source-mode continuation instruction')
500
+ .option('--timeout-ms <ms>', 'Assistant dispatch timeout in milliseconds')
501
+ .action((rawOpts: SourceRoundOpenOptions) => {
502
+ void runChatgptAction(async () => {
503
+ const result = await openChatgptControllerRoundFromSource({
504
+ controllerHome: durableControllerHome(rawOpts.controllerHome),
505
+ repoId: rawOpts.repoId,
506
+ repoRoot: resolveRepoRoot(rawOpts.repo),
507
+ workId: rawOpts.workId,
508
+ controllerId: rawOpts.controllerId,
509
+ principalId: rawOpts.principalId,
510
+ controllerInstanceId: rawOpts.controllerInstanceId,
511
+ continuationPrompt: rawOpts.continuationPrompt,
512
+ timeoutMs: parsePositiveInteger('timeout-ms', rawOpts.timeoutMs),
513
+ });
514
+ console.log(JSON.stringify(result, null, 2));
515
+ });
516
+ });
517
+ chatgpt.addCommand(roundOpen, { hidden: true });
518
+
519
+ const roundContinue = new Command('round-continue')
520
+ .description('Internal: close one claimed ChatGPT ControllerRound and immediately dispatch its successor from current source')
521
+ .option('--repo <path>', 'Repository root used by the ChatGPT Browser delivery host', '.')
522
+ .option('--controller-home <path>', 'Explicit Controller Home containing ControllerRound authority; defaults to canonical user-level Forge Controller Home')
523
+ .requiredOption('--repo-id <repo-id>', 'Stable Forge repository id')
524
+ .requiredOption('--work-id <work-id>', 'Currently claimed Forge Work id')
525
+ .requiredOption('--controller-authority-id <id>', 'Exact durable ControllerRound authority')
526
+ .requiredOption('--relay-scope-id <id>', 'Exact durable ControllerRound relay scope')
527
+ .option('--reason <text>', 'Bounded semantic continuation reason')
528
+ .option('--timeout-ms <ms>', 'Assistant dispatch timeout in milliseconds')
529
+ .action((rawOpts: SourceRoundContinueOptions) => {
530
+ void runChatgptAction(async () => {
531
+ const result = await continueChatgptControllerRoundFromSource({
532
+ controllerHome: durableControllerHome(rawOpts.controllerHome),
533
+ repoId: rawOpts.repoId,
534
+ repoRoot: resolveRepoRoot(rawOpts.repo),
535
+ workId: rawOpts.workId,
536
+ controllerAuthorityId: rawOpts.controllerAuthorityId,
537
+ relayScopeId: rawOpts.relayScopeId,
538
+ reason: rawOpts.reason,
539
+ timeoutMs: parsePositiveInteger('timeout-ms', rawOpts.timeoutMs),
540
+ });
541
+ console.log(JSON.stringify(result, null, 2));
542
+ });
543
+ });
544
+ chatgpt.addCommand(roundContinue, { hidden: true });
545
+
546
+ const roundClose = new Command('round-close')
547
+ .description('Internal: reconcile and close one claimed ChatGPT ControllerRound from current source without dispatching a successor')
548
+ .option('--controller-home <path>', 'Explicit Controller Home containing ControllerRound authority; defaults to canonical user-level Forge Controller Home')
549
+ .requiredOption('--repo-id <repo-id>', 'Stable Forge repository id')
550
+ .requiredOption('--work-id <work-id>', 'Currently claimed Forge Work id')
551
+ .requiredOption('--controller-authority-id <id>', 'Exact durable ControllerRound authority')
552
+ .requiredOption('--relay-scope-id <id>', 'Exact durable ControllerRound relay scope')
553
+ .requiredOption('--disposition <value>', 'Terminal semantic disposition: wait, wait_for_user, or goal_complete')
554
+ .option('--handoff-id <id>', 'Required active Handoff id when disposition is wait_for_user')
555
+ .option('--reason <text>', 'Bounded semantic close reason')
556
+ .action((rawOpts: SourceRoundCloseOptions) => {
557
+ void runChatgptAction(() => {
558
+ const result = closeChatgptControllerRoundFromSource({
559
+ controllerHome: durableControllerHome(rawOpts.controllerHome),
560
+ repoId: rawOpts.repoId,
561
+ workId: rawOpts.workId,
562
+ controllerAuthorityId: rawOpts.controllerAuthorityId,
563
+ relayScopeId: rawOpts.relayScopeId,
564
+ disposition: sourceRoundCloseDisposition(rawOpts.disposition),
565
+ handoffId: rawOpts.handoffId,
566
+ reason: rawOpts.reason,
567
+ });
568
+ console.log(JSON.stringify(result, null, 2));
569
+ });
570
+ });
571
+ chatgpt.addCommand(roundClose, { hidden: true });
572
+
446
573
  chatgpt
447
574
  .command('browser-open')
448
575
  .description('Print a saved ChatGPT browser session conversation URL; pass --launch to open it in the system browser')