@moretea-labs/forge 1.8.0 → 1.8.1

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 (528) hide show
  1. package/AGENTS.md +70 -7
  2. package/CHANGELOG.md +14 -0
  3. package/CLAUDE.md +17 -2
  4. package/CONTRIBUTING.md +3 -2
  5. package/THIRD_PARTY_NOTICES.md +1 -1
  6. package/adapters/chatgpt/browser-delivery-host.ts +7 -1
  7. package/adapters/chatgpt/browser-delivery-runtime.ts +529 -56
  8. package/adapters/chatgpt/controller-binding-store.ts +101 -22
  9. package/adapters/chatgpt/controller-round-host.ts +15 -25
  10. package/adapters/chatgpt/controller-round-settlement-store.ts +58 -4
  11. package/adapters/chatgpt/provider-delivery.ts +228 -1
  12. package/adapters/chatgpt/work-conversation-binding-store.ts +79 -53
  13. package/adapters/computer/chatgpt-extension-target.ts +463 -0
  14. package/adapters/computer/chatgpt-target-router.ts +103 -0
  15. package/adapters/computer/chrome-extension/background.js +385 -0
  16. package/adapters/computer/chrome-extension/content.js +378 -0
  17. package/adapters/computer/chrome-extension/core.js +24 -0
  18. package/adapters/computer/chrome-extension/manifest.json +30 -0
  19. package/adapters/computer/desktop-operator-discovery.ts +11 -31
  20. package/adapters/computer/interaction-target-authority.ts +142 -18
  21. package/adapters/mcp/auth.ts +0 -1
  22. package/adapters/mcp/instructions.ts +5 -4
  23. package/adapters/mcp/multi-repository.ts +3 -19
  24. package/adapters/mcp/oauth.ts +73 -0
  25. package/adapters/mcp/paths.ts +4 -1
  26. package/adapters/mcp/runtime-gateway/automation-receipt-adapter.ts +87 -0
  27. package/adapters/mcp/runtime-gateway/bounded-result-runtime.ts +62 -0
  28. package/adapters/mcp/runtime-gateway/cognition-settlement.ts +201 -0
  29. package/adapters/mcp/runtime-gateway/context-adapter.ts +411 -73
  30. package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +91 -0
  31. package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +20 -5
  32. package/adapters/mcp/runtime-gateway/core-capability-adapter.ts +258 -0
  33. package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +10 -27
  34. package/adapters/mcp/runtime-gateway/engineering-tool-contract.ts +15 -0
  35. package/adapters/mcp/runtime-gateway/execution-tools.ts +8 -42
  36. package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
  37. package/adapters/mcp/runtime-gateway/plugin-adapter.ts +117 -45
  38. package/adapters/mcp/runtime-gateway/process-tools.ts +190 -22
  39. package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +16 -4
  40. package/adapters/mcp/runtime-gateway/recovery-adapter.ts +69 -52
  41. package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +4 -35
  42. package/adapters/mcp/runtime-gateway/result-adapter.ts +10 -4
  43. package/adapters/mcp/runtime-gateway/router.ts +18 -504
  44. package/adapters/mcp/runtime-gateway/routing-policy.ts +499 -0
  45. package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +14 -65
  46. package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
  47. package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +113 -173
  48. package/adapters/mcp/runtime-gateway/runtime-tools.ts +15 -5
  49. package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +1 -0
  50. package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
  51. package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +358 -266
  52. package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +136 -0
  53. package/adapters/mcp/runtime-gateway/work-adapter.ts +261 -3122
  54. package/adapters/mcp/runtime-gateway/work-controller-operations.ts +257 -0
  55. package/adapters/mcp/runtime-gateway/work-detail-projection.ts +60 -0
  56. package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +246 -0
  57. package/adapters/mcp/runtime-gateway/work-learning-operations.ts +145 -0
  58. package/adapters/mcp/runtime-gateway/work-list-projection.ts +38 -0
  59. package/adapters/mcp/runtime-gateway/work-plan-operations.ts +382 -0
  60. package/adapters/mcp/runtime-gateway/work-repair-adapter.ts +308 -0
  61. package/adapters/mcp/runtime-gateway/work-requirement-operations.ts +148 -0
  62. package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +263 -0
  63. package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
  64. package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +156 -0
  65. package/adapters/mcp/server.ts +67 -23
  66. package/adapters/mcp/setup.ts +1 -3
  67. package/adapters/mcp/tool-mapping/legacy-tool-service.ts +44 -170
  68. package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +4 -9
  69. package/adapters/mcp/tool-mapping/repository-tools.ts +133 -142
  70. package/adapters/mcp/toolset-names.ts +5 -0
  71. package/adapters/mcp/toolset.ts +6 -5
  72. package/adapters/mcp/transports/http-observation.ts +365 -0
  73. package/adapters/mcp/transports/http.ts +154 -677
  74. package/adapters/mcp/transports/oauth-http.ts +322 -0
  75. package/adapters/mcp/transports/session-registry.ts +6 -0
  76. package/adapters/mcp/tunnels/openai-secure-tunnel.ts +89 -5
  77. package/assets/plugin-registry.v1.json +6 -4
  78. package/assets/reference-configs/agentic-development-flow.md +25 -0
  79. package/assets/reference-configs/global-working-rules.md +19 -0
  80. package/assets/skill-version.json +2 -2
  81. package/docs/architecture/CURRENT.md +111 -41
  82. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +14 -5
  83. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +6 -3
  84. package/docs/architecture/decisions/20260907-assistant-learning-loop.md +2 -0
  85. package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +19 -4
  86. package/docs/architecture/decisions/20260916-workflow-supervisor-authority.md +249 -0
  87. package/docs/architecture/decisions/20260917-cognitive-memory-foundation.md +82 -0
  88. package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +221 -0
  89. package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
  90. package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +72 -0
  91. package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +237 -0
  92. package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
  93. package/docs/architecture/domains/verification.md +1 -0
  94. package/docs/architecture/domains/workflow-engine.md +6 -0
  95. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
  96. package/docs/forge-plugin-management.md +2 -2
  97. package/docs/operations/controller-performance-and-502.md +17 -0
  98. package/docs/operations/controller-reliability-runbook.md +2 -2
  99. package/docs/operations/features.md +1 -1
  100. package/docs/operations/features.zh-CN.md +1 -1
  101. package/docs/operations/homebrew.md +2 -2
  102. package/docs/operations/mcp-tool-exposure.md +2 -0
  103. package/docs/operations/releasing.md +2 -0
  104. package/docs/operations/standalone-disaster-recovery.md +14 -6
  105. package/docs/wiki/Implementation.md +1 -1
  106. package/package.json +25 -14
  107. package/packages/kernel/cognition/api/index.ts +6 -0
  108. package/packages/kernel/cognition/application/activation-service.ts +451 -0
  109. package/packages/kernel/cognition/application/consolidation-service.ts +185 -0
  110. package/packages/kernel/cognition/application/legacy-experience-adapter.ts +38 -0
  111. package/packages/kernel/cognition/application/memory-service.ts +64 -0
  112. package/packages/kernel/cognition/domain/learning.ts +106 -0
  113. package/packages/kernel/cognition/domain/memory.ts +254 -0
  114. package/packages/kernel/controller/api/index.ts +1 -0
  115. package/packages/kernel/controller/application/continuation-service.ts +281 -0
  116. package/packages/kernel/controller/application/controller-round-service.ts +12 -0
  117. package/packages/kernel/controller/domain/controller-round-transition-policy.ts +242 -21
  118. package/packages/kernel/controller/domain/controller-round.ts +4 -1
  119. package/packages/kernel/controller/domain/execution-quality.ts +3 -1
  120. package/packages/kernel/controller/infrastructure/controller-round-store.ts +689 -103
  121. package/packages/kernel/controller/infrastructure/controller-session-store.ts +297 -71
  122. package/packages/kernel/controller/ports/controller-host.ts +2 -0
  123. package/packages/kernel/identity/api/index.ts +10 -0
  124. package/packages/kernel/identity/domain/activity-projection.ts +43 -0
  125. package/packages/kernel/identity/domain/capability-broker.ts +60 -0
  126. package/packages/kernel/identity/domain/grant.ts +72 -0
  127. package/packages/kernel/identity/domain/owned-resource.ts +116 -0
  128. package/packages/kernel/identity/domain/user-request.ts +93 -0
  129. package/packages/kernel/identity/infrastructure/activity-projection-store.ts +77 -0
  130. package/packages/kernel/identity/infrastructure/capability-broker.ts +81 -0
  131. package/packages/kernel/identity/infrastructure/grant-store.ts +284 -0
  132. package/packages/kernel/identity/infrastructure/owned-resource-store.ts +259 -0
  133. package/packages/kernel/identity/infrastructure/user-request-store.ts +182 -0
  134. package/packages/kernel/scheduler/api/index.ts +0 -2
  135. package/packages/kernel/scheduler/application/schedule-service.ts +3 -0
  136. package/packages/kernel/scheduler/application/settlement.ts +0 -15
  137. package/packages/kernel/scheduler/domain/schedule.ts +87 -0
  138. package/packages/kernel/scheduler/infrastructure/schedule-store.ts +153 -133
  139. package/packages/kernel/work/api/index.ts +3 -2
  140. package/packages/kernel/work/application/work-service.ts +17 -42
  141. package/packages/kernel/work/domain/current-task-lineage.ts +104 -0
  142. package/packages/kernel/work/domain/engineering-design.ts +10 -5
  143. package/packages/kernel/work/domain/engineering-profile.ts +8 -12
  144. package/packages/kernel/work/domain/evaluation-promotion-receipt.ts +186 -0
  145. package/packages/kernel/work/domain/execution-concurrency.ts +19 -26
  146. package/packages/kernel/work/domain/execution-snapshot.ts +0 -31
  147. package/packages/kernel/work/domain/implementation-review.ts +14 -331
  148. package/packages/kernel/work/domain/objective-graph.ts +119 -0
  149. package/packages/kernel/work/domain/project-engineering-contract.ts +23 -1
  150. package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
  151. package/packages/kernel/work/domain/state-machine.ts +25 -63
  152. package/packages/kernel/work/domain/types.ts +57 -51
  153. package/packages/kernel/work/infrastructure/work-contract-store.ts +819 -728
  154. package/packages/kernel/work/ports/work-contract-store.ts +5 -2
  155. package/packages/plugin-runtime/browser/session-authority.ts +2 -1
  156. package/packages/plugin-runtime/computer/chatgpt-identity.ts +24 -0
  157. package/packages/plugin-runtime/computer/conversation-target.ts +143 -0
  158. package/packages/plugin-runtime/computer/index.ts +2 -0
  159. package/packages/plugin-runtime/computer/target-authority.ts +26 -1
  160. package/packages/plugin-runtime/external/unix-jsonl-transport.ts +142 -18
  161. package/packages/protocols/computer/contract.ts +27 -1
  162. package/scripts/activate-source-baseline.ts +7 -9
  163. package/scripts/canary-controller-semantic-wait.ts +12 -24
  164. package/scripts/check-mcp-compatibility.ts +48 -136
  165. package/scripts/check-runtime-architecture.mjs +622 -217
  166. package/scripts/forge-local-recovery-helper.mjs +93 -15
  167. package/scripts/lib/project-init-lib.sh +3 -0
  168. package/scripts/open-source-audit-allowlist.txt +1 -2
  169. package/scripts/run-bounded-command.mjs +5 -0
  170. package/scripts/run-governed-gate.ts +0 -1
  171. package/scripts/run-mobile-monitor-bridge.ts +0 -1
  172. package/scripts/smoke-control-plane-failure-domain.ts +94 -0
  173. package/scripts/smoke-mcp-http-runtime.ts +5 -0
  174. package/scripts/smoke-runtime-recovery.ts +12 -43
  175. package/scripts/smoke-schedule-engine.ts +23 -15
  176. package/scripts/smoke-unattended-transport-recovery.ts +223 -0
  177. package/scripts/smoke-user-request-continuation-restart.ts +232 -0
  178. package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +92 -0
  179. package/scripts/smoke-workflow-supervisor-process-restart.ts +276 -0
  180. package/scripts/smoke-workflow-supervisor-restart-recovery.ts +150 -0
  181. package/scripts/smoke-workflow-supervisor.ts +103 -0
  182. package/scripts/verify-forge-runtime.sh +2 -1
  183. package/src/cli/agent-jobs/executor-health.ts +11 -34
  184. package/src/cli/agent-jobs/integration.ts +18 -49
  185. package/src/cli/agent-jobs/job-manager.ts +7 -3
  186. package/src/cli/commands/brain-assistant.ts +27 -13
  187. package/src/cli/commands/brain.ts +13 -15
  188. package/src/cli/commands/chatgpt.ts +1 -163
  189. package/src/cli/commands/recovery.ts +135 -121
  190. package/src/cli/commands/runtime.ts +3 -3
  191. package/src/cli/commands/setup-profile.ts +8 -0
  192. package/src/cli/controller/check-runner.ts +13 -2
  193. package/src/cli/controller/completion-backlog.ts +3 -3
  194. package/src/cli/controller/completion-orchestrator.ts +4 -43
  195. package/src/cli/controller/completion-target.ts +3 -72
  196. package/src/cli/controller/context/source-materializer.ts +81 -100
  197. package/src/cli/controller/context-pack.ts +10 -8
  198. package/src/cli/controller/execution-completion.ts +4 -7
  199. package/src/cli/controller/execution-policy.ts +36 -153
  200. package/src/cli/controller/governance.ts +2 -3
  201. package/src/cli/controller/issue-store.ts +4 -99
  202. package/src/cli/controller/launch-agents.ts +59 -18
  203. package/src/cli/controller/operational-plan.ts +24 -51
  204. package/src/cli/controller/runtime-config.ts +5 -1
  205. package/src/cli/controller/stuck-state-migration.ts +2 -3
  206. package/src/cli/controller/systemd-user.ts +39 -1
  207. package/src/cli/editing/edit-session.ts +1 -7
  208. package/src/cli/local-bridge/console-automations.ts +18 -13
  209. package/src/cli/local-bridge/console-view-models.ts +3 -12
  210. package/src/cli/local-bridge/facade-api.ts +64 -191
  211. package/src/cli/local-bridge/server.ts +24 -147
  212. package/src/cli/local-bridge/types.ts +0 -1
  213. package/src/cli/mcp/oauth-client-retirement.ts +74 -0
  214. package/src/cli/repositories/command-executor.ts +29 -23
  215. package/src/cli/repositories/command-scope.ts +35 -16
  216. package/src/cli/repositories/controller-home.ts +48 -0
  217. package/src/cli/repositories/ephemeral-workspace.ts +20 -30
  218. package/src/cli/repositories/git-command-executor.ts +2 -2
  219. package/src/cli/repositories/registry.ts +77 -11
  220. package/src/cli/repositories/structured-git.ts +62 -2
  221. package/src/cli/repository/session-cache.ts +92 -6
  222. package/src/runtime/context/assistant-context.ts +20 -7
  223. package/src/runtime/context/assistant-work-context.ts +89 -27
  224. package/src/runtime/context/automatic-learning.ts +565 -0
  225. package/src/runtime/context/cognitive-attention.ts +173 -0
  226. package/src/runtime/context/cognitive-skill-canary.ts +158 -0
  227. package/src/runtime/context/context-closure.ts +46 -9
  228. package/src/runtime/context/context-pack-process.ts +103 -0
  229. package/src/runtime/context/context-plane.ts +1 -9
  230. package/src/runtime/context/direct-controller-learning.ts +298 -0
  231. package/src/runtime/context/semantic-navigation-contract.ts +9 -0
  232. package/src/runtime/context/semantic-navigation.ts +6 -34
  233. package/src/runtime/context/typescript-navigation-process.ts +145 -0
  234. package/src/runtime/context/typescript-navigation.ts +89 -3
  235. package/src/runtime/control-plane/cleanup-artifact-retention.ts +212 -9
  236. package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +9 -47
  237. package/src/runtime/control-plane/execution/controller-authority-recovery.ts +34 -4
  238. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +29 -20
  239. package/src/runtime/control-plane/execution/execution-identity.ts +23 -3
  240. package/src/runtime/control-plane/execution/repository-work-attribution.ts +7 -30
  241. package/src/runtime/control-plane/execution/retained-work-resume.ts +206 -199
  242. package/src/runtime/control-plane/execution/session-store.ts +31 -1
  243. package/src/runtime/control-plane/execution/validation.ts +6 -8
  244. package/src/runtime/control-plane/execution/work-authority-reconciler.ts +13 -42
  245. package/src/runtime/control-plane/execution/work-check-evidence.ts +137 -0
  246. package/src/runtime/control-plane/execution/work-completion-authority.ts +30 -85
  247. package/src/runtime/control-plane/execution/work-delivery-service.ts +497 -0
  248. package/src/runtime/control-plane/execution/work-evidence-policy.ts +12 -50
  249. package/src/runtime/control-plane/execution/work-execution-support.ts +50 -149
  250. package/src/runtime/control-plane/execution/work-handle-authority.ts +188 -109
  251. package/src/runtime/control-plane/execution/work-handle-store.ts +19 -43
  252. package/src/runtime/control-plane/execution/work-head-settlement.ts +53 -20
  253. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +52 -29
  254. package/src/runtime/control-plane/execution/work-operation-service.ts +43 -27
  255. package/src/runtime/control-plane/execution/work-preparation-service.ts +126 -266
  256. package/src/runtime/control-plane/execution/work-remote-delivery.ts +2 -3
  257. package/src/runtime/control-plane/execution/work-revision-diff.ts +39 -0
  258. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +173 -186
  259. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +28 -84
  260. package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
  261. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +5 -1
  262. package/src/runtime/control-plane/facade/capability-registry.ts +362 -37
  263. package/src/runtime/control-plane/facade/check-normalization.ts +3 -9
  264. package/src/runtime/control-plane/facade/codex-delegation.ts +10 -11
  265. package/src/runtime/control-plane/facade/controller-connection.ts +135 -0
  266. package/src/runtime/control-plane/facade/goal-workloop-access.ts +1 -20
  267. package/src/runtime/control-plane/facade/goal-workloop.ts +281 -1753
  268. package/src/runtime/control-plane/facade/handoff-inbox-application.ts +12 -25
  269. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +256 -52
  270. package/src/runtime/control-plane/facade/index.ts +0 -1
  271. package/src/runtime/control-plane/facade/operation-digest.ts +12 -15
  272. package/src/runtime/control-plane/facade/plan-contract-store.ts +451 -991
  273. package/src/runtime/control-plane/facade/policy-gate.ts +0 -23
  274. package/src/runtime/control-plane/facade/repository-work-admission.ts +12 -22
  275. package/src/runtime/control-plane/facade/requirement-authority.ts +102 -199
  276. package/src/runtime/control-plane/facade/requirement-board.ts +3 -3
  277. package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +51 -14
  278. package/src/runtime/control-plane/facade/self-healing-loop.ts +18 -53
  279. package/src/runtime/control-plane/facade/suggested-actions.ts +15 -18
  280. package/src/runtime/control-plane/facade/types.ts +49 -108
  281. package/src/runtime/control-plane/facade/work-continuation.ts +8 -8
  282. package/src/runtime/control-plane/generated-cache-retention.ts +97 -1
  283. package/src/runtime/control-plane/global-scheduler/autonomous-continuation.ts +248 -0
  284. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +1 -1
  285. package/src/runtime/control-plane/global-scheduler/maintenance.ts +239 -112
  286. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +2 -1
  287. package/src/runtime/control-plane/global-scheduler/scheduler.ts +66 -40
  288. package/src/runtime/control-plane/global-scheduler/wake-signal.ts +42 -2
  289. package/src/runtime/control-plane/governance/access-policy.ts +19 -2
  290. package/src/runtime/control-plane/governance/authorization.ts +20 -3
  291. package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +63 -300
  292. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +28 -300
  293. package/src/runtime/control-plane/launcher/local-conversation-controller.ts +238 -0
  294. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +5 -2
  295. package/src/runtime/control-plane/launcher/thin-launcher.ts +96 -240
  296. package/src/runtime/control-plane/persistence/cognition-store.ts +820 -0
  297. package/src/runtime/control-plane/persistence/experience-store.ts +162 -29
  298. package/src/runtime/control-plane/persistence/requirement-store.ts +216 -74
  299. package/src/runtime/control-plane/persistence/sqlite-store.ts +113 -6
  300. package/src/runtime/control-plane/release-retention.ts +135 -47
  301. package/src/runtime/control-plane/repository-namespace-retention.ts +2 -2
  302. package/src/runtime/control-plane/runtime-cleanup.ts +290 -21
  303. package/src/runtime/control-plane/workspace/project-onboarding.ts +80 -0
  304. package/src/runtime/control-plane/workspace/semantic-sync-service.ts +19 -5
  305. package/src/runtime/control-plane/workspace/workspace-store.ts +169 -0
  306. package/src/runtime/diagnostics/incident-repair.ts +313 -146
  307. package/src/runtime/diagnostics/mcp-timing.ts +114 -0
  308. package/src/runtime/evidence/artifact-store.ts +158 -40
  309. package/src/runtime/evidence/evidence-store.ts +112 -8
  310. package/src/runtime/evidence/output-handle-index.ts +225 -0
  311. package/src/runtime/evidence/result-store.ts +158 -44
  312. package/src/runtime/execution/jobs/store.ts +3 -4
  313. package/src/runtime/execution/managed-workspace.ts +57 -0
  314. package/src/runtime/execution/process-runtime/check-facade.ts +1 -1
  315. package/src/runtime/execution/process-runtime/check-result-retention.ts +2 -2
  316. package/src/runtime/execution/process-runtime/check-result.ts +105 -1
  317. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +18 -8
  318. package/src/runtime/execution/process-runtime/command-facade.ts +79 -27
  319. package/src/runtime/execution/process-runtime/gc.ts +15 -2
  320. package/src/runtime/execution/process-runtime/handle-index.ts +176 -0
  321. package/src/runtime/execution/process-runtime/host-command-lane.ts +139 -0
  322. package/src/runtime/execution/process-runtime/index.ts +3 -0
  323. package/src/runtime/execution/process-runtime/lightweight-managed.ts +251 -72
  324. package/src/runtime/execution/process-runtime/persisted-check.ts +3 -3
  325. package/src/runtime/execution/process-runtime/process-runner-entry.ts +47 -5
  326. package/src/runtime/execution/process-runtime/process-scope.ts +160 -0
  327. package/src/runtime/execution/process-runtime/resource-claims.ts +65 -61
  328. package/src/runtime/execution/process-runtime/runtime.ts +35 -2
  329. package/src/runtime/execution/process-runtime/store.ts +30 -2
  330. package/src/runtime/execution/process-runtime/types.ts +6 -1
  331. package/src/runtime/execution/workers/executor.ts +2 -6
  332. package/src/runtime/platform/service-inventory.ts +130 -0
  333. package/src/runtime/platform/service-manager.ts +8 -0
  334. package/src/runtime/plugins/action-application.ts +85 -28
  335. package/src/runtime/plugins/app-store-connect-adapter.ts +38 -14
  336. package/src/runtime/plugins/browser-adapter.ts +757 -34
  337. package/src/runtime/plugins/browser-automation-service.ts +23 -3
  338. package/src/runtime/plugins/browser-macos-bridge.ts +321 -29
  339. package/src/runtime/plugins/browser-manifest-surface.ts +45 -11
  340. package/src/runtime/plugins/browser-native-session-service.ts +63 -13
  341. package/src/runtime/plugins/browser-registration.ts +16 -0
  342. package/src/runtime/plugins/browser-runtime.ts +14 -1
  343. package/src/runtime/plugins/browser-session-authority.ts +2 -2
  344. package/src/runtime/plugins/browser-session-store.ts +46 -76
  345. package/src/runtime/plugins/capability-authorization-grants.ts +258 -62
  346. package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +219 -0
  347. package/src/runtime/plugins/computer-chatgpt-macos-target.ts +891 -0
  348. package/src/runtime/plugins/computer-registration.ts +222 -11
  349. package/src/runtime/plugins/desktop-operator-external-policy.ts +36 -4
  350. package/src/runtime/plugins/desktop-operator-registration.ts +12 -4
  351. package/src/runtime/plugins/external-adapter.ts +42 -6
  352. package/src/runtime/plugins/external-registration.ts +21 -1
  353. package/src/runtime/plugins/gmail-adapter.ts +23 -2
  354. package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
  355. package/src/runtime/plugins/google-shared.ts +14 -7
  356. package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
  357. package/src/runtime/plugins/ios-adapter.ts +1 -1
  358. package/src/runtime/plugins/lightweight-action.ts +208 -2
  359. package/src/runtime/plugins/local-system-adapter.ts +12 -2
  360. package/src/runtime/plugins/managed-process-adapter.ts +12 -5
  361. package/src/runtime/plugins/plugin-action-sidecar.ts +17 -13
  362. package/src/runtime/plugins/plugin-management-adapter.ts +1 -1
  363. package/src/runtime/plugins/store.ts +602 -428
  364. package/src/runtime/plugins/types.ts +20 -0
  365. package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
  366. package/src/runtime/projections/invalidation.ts +7 -3
  367. package/src/runtime/projections/materialized-view.ts +80 -36
  368. package/src/runtime/recovery/actions.ts +3 -3
  369. package/src/runtime/recovery/capability-action-application.ts +46 -45
  370. package/src/runtime/recovery/lifecycle-inventory.ts +29 -29
  371. package/src/runtime/recovery/maintenance-executor.ts +374 -123
  372. package/src/runtime/recovery/store.ts +29 -11
  373. package/src/runtime/release/release-coordinator.ts +296 -0
  374. package/src/runtime/release/release-session.ts +716 -0
  375. package/src/runtime/release/release-state-migration.ts +25 -0
  376. package/src/runtime/resources/leases/store.ts +56 -25
  377. package/src/runtime/root/computer-composition.ts +191 -6
  378. package/src/runtime/root/controller-progression-composition.ts +192 -0
  379. package/src/runtime/root/controller-round-composition.ts +20 -1
  380. package/src/runtime/root/deployment-topology.ts +106 -0
  381. package/src/runtime/root/entry.ts +4 -3
  382. package/src/runtime/root/known-good-recovery.ts +184 -0
  383. package/src/runtime/root/local-bridge.ts +0 -1
  384. package/src/runtime/root/mcp-transport.ts +111 -18
  385. package/src/runtime/root/ownership.ts +261 -9
  386. package/src/runtime/root/package-connector-service.ts +105 -19
  387. package/src/runtime/root/package-runtime-release.ts +117 -18
  388. package/src/runtime/root/package-runtime-service.ts +17 -11
  389. package/src/runtime/root/release-execution-canary.ts +44 -12
  390. package/src/runtime/root/release-loader.ts +90 -8
  391. package/src/runtime/root/release-manifest.ts +80 -6
  392. package/src/runtime/root/release-materialize.ts +372 -28
  393. package/src/runtime/root/release-store.ts +395 -36
  394. package/src/runtime/root/runtime-lane.ts +191 -0
  395. package/src/runtime/root/runtime.ts +159 -27
  396. package/src/runtime/root/scheduled-controller-composition.ts +28 -3
  397. package/src/runtime/root/service-runner.ts +2 -2
  398. package/src/runtime/root/service.ts +36 -33
  399. package/src/runtime/root/status.ts +48 -0
  400. package/src/runtime/root/types.ts +32 -3
  401. package/src/runtime/root/workflow-supervisor-composition.ts +493 -0
  402. package/src/runtime/root/workflow-supervisor-runtime.ts +209 -0
  403. package/src/runtime/root/write-fence.ts +50 -2
  404. package/src/runtime/safe-tooling/google-credential-store.ts +76 -21
  405. package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
  406. package/src/runtime/safe-tooling/workspace-auth.ts +1 -1
  407. package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
  408. package/src/runtime/shared/process-environment.ts +20 -9
  409. package/src/runtime/shared/response-budget.ts +1 -3
  410. package/src/runtime/standalone-recovery/controller-home-migration.ts +16 -24
  411. package/src/runtime/standalone-recovery/core.ts +3702 -342
  412. package/src/runtime/standalone-recovery/entry.ts +469 -39
  413. package/src/runtime/standalone-recovery/installer.ts +262 -148
  414. package/src/runtime/standalone-recovery/mcp-server.ts +29 -193
  415. package/src/runtime/standalone-recovery/operation-lock.ts +1 -1
  416. package/src/runtime/standalone-recovery/performance.ts +54 -16
  417. package/src/runtime/standalone-recovery/release.ts +53 -5
  418. package/src/runtime/standalone-recovery/service-labels.ts +5 -2
  419. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +5 -2
  420. package/src/runtime/workflow/schedules/browser-probe.ts +17 -6
  421. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +10 -3
  422. package/src/runtime/workflow/schedules/engine.ts +138 -172
  423. package/src/runtime/workflow/schedules/work-continuation.ts +44 -5
  424. package/src/runtime/workflows/runtime.ts +15 -19
  425. package/src/testing/test-governance.ts +5 -1
  426. package/supervisor/chatgpt-conversation.ts +23 -0
  427. package/supervisor/client.ts +201 -0
  428. package/supervisor/control-plane.ts +868 -0
  429. package/supervisor/entry.ts +15 -0
  430. package/supervisor/forge-validators.ts +80 -0
  431. package/supervisor/index.ts +5 -0
  432. package/supervisor/native-browser-adapter.ts +786 -0
  433. package/supervisor/native-messaging/host.ts +39 -0
  434. package/supervisor/native-messaging/manifest.ts +26 -0
  435. package/supervisor/native-messaging/protocol.ts +27 -0
  436. package/supervisor/paths.ts +18 -0
  437. package/supervisor/protocol.ts +202 -0
  438. package/supervisor/server.ts +404 -0
  439. package/supervisor/store.ts +1451 -0
  440. package/supervisor/tsconfig.json +8 -0
  441. package/supervisor/types.ts +255 -0
  442. package/adapters/chatgpt/controller-host.ts +0 -119
  443. package/adapters/mcp/controller-round-compatibility.ts +0 -184
  444. package/adapters/mcp/frozen-client-semantic-compatibility.ts +0 -292
  445. package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +0 -502
  446. package/packages/kernel/progression/api/index.ts +0 -2
  447. package/packages/kernel/progression/application/projector.ts +0 -211
  448. package/packages/kernel/progression/domain/types.ts +0 -116
  449. package/packages/kernel/progression/index.ts +0 -1
  450. package/packages/kernel/scheduler/application/continuation-service.ts +0 -212
  451. package/packages/kernel/scheduler/domain/continuation.ts +0 -38
  452. package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +0 -38
  453. package/packages/kernel/work/domain/admission-policy.ts +0 -34
  454. package/scripts/benchmark-background-check-overlap.ts +0 -228
  455. package/scripts/benchmark-computer-hotpath.ts +0 -255
  456. package/scripts/benchmark-controller-hotpath.ts +0 -212
  457. package/scripts/benchmark-controller-round2.ts +0 -191
  458. package/scripts/benchmark-ios-agent-device.ts +0 -511
  459. package/scripts/benchmark-mcp-host.sh +0 -117
  460. package/scripts/benchmark-mcp-transport.ts +0 -169
  461. package/scripts/benchmark-operational-memory-activation.ts +0 -235
  462. package/scripts/benchmark-operational-shadow.ts +0 -28
  463. package/scripts/benchmark-quality-harness.ts +0 -146
  464. package/scripts/benchmark-route-session-concurrency.ts +0 -915
  465. package/scripts/benchmark-thin-harness-gateway-ab.ts +0 -632
  466. package/scripts/benchmark-thin-harness-mcp-e2e.ts +0 -498
  467. package/scripts/benchmark-thin-harness.ts +0 -251
  468. package/scripts/benchmark-typescript-navigation.ts +0 -186
  469. package/scripts/benchmark-work-efficiency.ts +0 -334
  470. package/scripts/build-controller-ui.ts +0 -28
  471. package/scripts/check-npm-release.sh +0 -32
  472. package/scripts/check-public-release-surface.sh +0 -19
  473. package/scripts/check-release-published.sh +0 -57
  474. package/scripts/check-release-readiness.sh +0 -37
  475. package/scripts/check-release-version.mjs +0 -74
  476. package/scripts/check-tarball-install-smoke.sh +0 -150
  477. package/scripts/package-source-archive.sh +0 -147
  478. package/scripts/public-release-files.txt +0 -39
  479. package/scripts/public-release.ts +0 -174
  480. package/scripts/publish-release-tarball.sh +0 -27
  481. package/scripts/route-nl-vs-ts-eval.ts +0 -679
  482. package/scripts/stage-runtime-release.ts +0 -44
  483. package/src/cli/controller/progress.ts +0 -656
  484. package/src/cli/controller/work-mode.ts +0 -181
  485. package/src/cli/local-bridge/console-assets.ts +0 -17
  486. package/src/cli/local-bridge/dashboard.ts +0 -17
  487. package/src/cli/local-bridge/frontend/src/App.tsx +0 -10
  488. package/src/cli/local-bridge/frontend/src/components/Button.tsx +0 -1
  489. package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +0 -3
  490. package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +0 -1
  491. package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +0 -1
  492. package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +0 -1
  493. package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +0 -3
  494. package/src/cli/local-bridge/frontend/src/design/icons.tsx +0 -11
  495. package/src/cli/local-bridge/frontend/src/design/tokens.css +0 -8
  496. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +0 -153
  497. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +0 -37
  498. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +0 -183
  499. package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +0 -2
  500. package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +0 -2
  501. package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +0 -4
  502. package/src/cli/local-bridge/frontend/src/lib/api.ts +0 -30
  503. package/src/cli/local-bridge/frontend/src/lib/format.ts +0 -4
  504. package/src/cli/local-bridge/frontend/src/lib/routes.ts +0 -7
  505. package/src/cli/local-bridge/frontend/src/main.tsx +0 -1
  506. package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +0 -1
  507. package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +0 -2
  508. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +0 -4
  509. package/src/cli/local-bridge/frontend/src/styles.css +0 -28
  510. package/src/cli/local-bridge/frontend/src/types.ts +0 -15
  511. package/src/cli/local-bridge/frontend/src/vite-env.d.ts +0 -1
  512. package/src/cli/local-bridge/frontend/vite.config.ts +0 -27
  513. package/src/cli/local-bridge/ui-dist/app.css +0 -1
  514. package/src/cli/local-bridge/ui-dist/app.js +0 -11228
  515. package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +0 -169
  516. package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +0 -85
  517. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +0 -655
  518. package/src/runtime/control-plane/execution/work-finalization-service.ts +0 -2850
  519. package/src/runtime/control-plane/execution/work-path-scope.ts +0 -37
  520. package/src/runtime/control-plane/execution/work-task-receipt.ts +0 -468
  521. package/src/runtime/control-plane/facade/controller-round-relay.ts +0 -3
  522. package/src/runtime/control-plane/facade/work-admission-policy.ts +0 -142
  523. package/src/runtime/control-plane/facade/work-implementation-review.ts +0 -2
  524. package/src/runtime/control-plane/facade/work-state-machine.ts +0 -2
  525. package/src/runtime/control-plane/facade/work-task-projection.ts +0 -66
  526. package/src/runtime/control-plane/routing/index.ts +0 -1
  527. package/src/runtime/control-plane/routing/route-policy.ts +0 -401
  528. package/src/runtime/control-plane/routing/workspace-admission.ts +0 -70
@@ -18,13 +18,13 @@ export interface ControllerOperationalPlan {
18
18
  reviewRequired: boolean;
19
19
  };
20
20
  validationStrategy: {
21
- source: "task-targeted-validation-policy";
21
+ source: "declared-check-projection";
22
22
  policy: "minimal" | "task-targeted" | "release-gate";
23
23
  checks: string[];
24
24
  reason: string;
25
25
  };
26
26
  recipeSystem: {
27
- source: "controller-recipe-system";
27
+ source: "legacy-recipe-projection";
28
28
  recipes: Array<{
29
29
  id: string;
30
30
  label: string;
@@ -34,7 +34,7 @@ export interface ControllerOperationalPlan {
34
34
  }>;
35
35
  };
36
36
  workerAbstraction: {
37
- source: "worker-routing-abstraction";
37
+ source: "execution-capability-projection";
38
38
  workers: Array<{
39
39
  id: string;
40
40
  role: string;
@@ -107,11 +107,9 @@ export function buildControllerOperationalPlan(repoRoot: string, ledger: TaskLed
107
107
  const dirty = changedFiles.length > 0;
108
108
  const blocked = ledger.status.kind === "blocked" || ledger.status.kind === "needs_retry_decision";
109
109
  const needsAttention = blocked || ledger.status.severity === "action" || ledger.status.severity === "warning" || dirty;
110
- const policy = checks.some((check) => check.includes("release") || check.includes("ci"))
111
- ? "release-gate" as const
112
- : checks.length > 0
113
- ? "task-targeted" as const
114
- : "minimal" as const;
110
+ // Compatibility projection only. Declared checks are facts the model may use;
111
+ // this projection does not choose a validation method or release gate.
112
+ const policy = "minimal" as const;
115
113
 
116
114
  return {
117
115
  schemaVersion: OPERATIONAL_PLAN_SCHEMA_VERSION,
@@ -122,70 +120,45 @@ export function buildControllerOperationalPlan(repoRoot: string, ledger: TaskLed
122
120
  "task-ledger",
123
121
  "context-pack",
124
122
  "diff-projection",
125
- "validation-strategy",
126
- "recipe-system",
127
- "worker-abstraction",
123
+ "declared-check-projection",
124
+ "legacy-recipe-projection",
125
+ "execution-capability-projection",
128
126
  "gui-interaction-model",
129
127
  "mcp-tool-schema-convergence",
130
128
  "controller-home-runtime-storage-policy",
131
129
  "branch-worktree-cleanup-policy",
132
130
  "task-recovery-loop",
133
131
  ],
134
- remainingDecisionPoints: dirty
135
- ? ["Review and commit or discard current diff before dispatching unrelated work."]
136
- : [],
132
+ remainingDecisionPoints: [],
137
133
  diffProjection: {
138
134
  source: "live-git-diff-projection",
139
135
  dirty,
140
136
  changedFiles,
141
137
  diffStat: diffStat.ok ? diffStat.stdout.trim() : diffStat.error || diffStat.stderr.trim(),
142
- reviewRequired: dirty,
138
+ // Legacy field retained for UI ABI only. Dirty state is a fact, not an
139
+ // automatic review lifecycle decision.
140
+ reviewRequired: false,
143
141
  },
144
142
  validationStrategy: {
145
- source: "task-targeted-validation-policy",
143
+ source: "declared-check-projection",
146
144
  policy,
147
145
  checks,
148
- reason: policy === "release-gate"
149
- ? "Release or CI checks are declared by the focused work."
150
- : policy === "task-targeted"
151
- ? "Use checks declared on the focused task or ready queue; do not expand validation scope by default."
152
- : "No task-specific checks were found; keep validation minimal and explicit.",
146
+ reason: checks.length > 0
147
+ ? "These checks are declared context only; the model decides whether, when, and how to validate."
148
+ : "No declared checks were found; Forge does not invent a validation strategy.",
153
149
  },
154
150
  recipeSystem: {
155
- source: "controller-recipe-system",
156
- recipes: [
157
- {
158
- id: "scoped-direct-edit",
159
- label: "Scoped direct edit",
160
- when: "Known files and low/medium-risk bounded changes.",
161
- steps: ["build context pack", "read exact ranges", "apply bounded patch", "review diff projection", "run task-targeted checks"],
162
- requiredEvidence: ["contextPack", "diffProjection", "validationStrategy"],
163
- },
164
- {
165
- id: "isolated-worker-run",
166
- label: "Isolated worker run",
167
- when: "Large, risky, or long-running implementation requiring agent execution.",
168
- steps: ["derive worker scope", "dispatch isolated run", "inspect run diff", "integrate through edit session", "verify exact revision"],
169
- requiredEvidence: ["run", "task diff", "integration session", "checks"],
170
- },
171
- {
172
- id: "recovery-resume",
173
- label: "Fresh-session recovery",
174
- when: "A controller session restarts or loses conversation state.",
175
- steps: ["load task ledger", "read operational plan", "select continuation state", "expand only needed context", "resume or ask for the one missing decision"],
176
- requiredEvidence: ["taskLedger", "operationalPlan", "recoveryArtifacts"],
177
- },
178
- ],
151
+ source: "legacy-recipe-projection",
152
+ recipes: [],
179
153
  },
180
154
  workerAbstraction: {
181
- source: "worker-routing-abstraction",
155
+ source: "execution-capability-projection",
182
156
  workers: [
183
- { id: "direct_edit", role: "transactional patch executor", preferredFor: ["small scoped edits", "known paths"], avoidWhen: ["unknown architecture", "long-running generation"] },
184
- { id: "quick_agent", role: "bounded investigation or small implementation", preferredFor: ["uncertain file discovery", "medium-risk changes"], avoidWhen: ["dirty main workspace", "release-critical changes"] },
185
- { id: "isolated_task_run", role: "durable worker with worktree", preferredFor: ["parallel tasks", "risky implementation"], avoidWhen: ["single-line fixes"] },
186
- { id: "github_copilot", role: "visible cloud coding session", preferredFor: ["remote reviewable work", "GitHub issue flow"], avoidWhen: ["secret-local context", "offline tasks"] },
157
+ { id: "direct_capability", role: "direct domain capability execution", preferredFor: [], avoidWhen: [] },
158
+ { id: "isolated_process", role: "isolated process/workspace capability when explicitly useful", preferredFor: [], avoidWhen: [] },
159
+ { id: "external_provider", role: "optional external model/provider capability", preferredFor: [], avoidWhen: [] },
187
160
  ],
188
- recommendedWorker: dirty ? "direct_edit" : ledger.status.kind === "ready_to_dispatch" ? "isolated_task_run" : "direct_edit",
161
+ recommendedWorker: "model_selected",
189
162
  },
190
163
  guiInteraction: {
191
164
  source: "controller-console-interaction-model",
@@ -6,7 +6,11 @@ export { FORGE_VERSION } from '../../version';
6
6
  /** Product identity exposed by every Forge runtime surface. */
7
7
  export const FORGE_TOOL_SURFACE = FORGE_PRODUCT_ID;
8
8
  /** Payload schema for MCP health/config records; this is not a product/component version. */
9
- export const FORGE_MCP_SCHEMA_VERSION = 10;
9
+ // 12: autonomous continuation is addressed by Workflow Supervisor task identity
10
+ // rather than optional Work identity. Tool names stay bounded; the served input
11
+ // schema changes and therefore must fence stale Connector schema snapshots.
12
+ // A served-schema change must be visible to connector freshness checks.
13
+ export const FORGE_MCP_SCHEMA_VERSION = 12;
10
14
 
11
15
  type ToolSurfaceDefinition = {
12
16
  name: string;
@@ -3,7 +3,7 @@ import { spawnSync } from 'child_process';
3
3
  import { createHash } from 'crypto';
4
4
  import { inspectCompletionBacklog, type CompletionBacklogItem } from './completion-backlog';
5
5
  import { getIssue, listIssues, updateIssue, updateTask } from './issue-store';
6
- import { completionEvidenceComplete, taskExecutionPolicy, verificationEvidencePassed } from './execution-policy';
6
+ import { completionEvidenceComplete, verificationEvidencePassed } from './execution-policy';
7
7
  import type { CompletionReceipt, ControllerIssue, ControllerTask } from './types';
8
8
  import { resolveCompletionTargetBranch } from './completion-target';
9
9
  import { legacyIssueAuthorityRetired } from './legacy-issue-cutover';
@@ -174,8 +174,7 @@ function reachable(repoRoot: string, revision: string, branch: string): boolean
174
174
 
175
175
  function historicalCompletionReceipt(repoRoot: string, issue: ControllerIssue, task: ControllerTask): CompletionReceipt | undefined {
176
176
  if (!task.verification) return undefined;
177
- const policy = taskExecutionPolicy(task);
178
- const outcome = verificationEvidencePassed(task, task.verification, policy);
177
+ const outcome = verificationEvidencePassed(task, task.verification);
179
178
  if (!outcome.ok) return undefined;
180
179
  const target = currentTarget(repoRoot);
181
180
  if (!target) return undefined;
@@ -1,5 +1,5 @@
1
1
  import { spawnSync, type SpawnSyncReturns } from 'child_process';
2
- import { mkdirSync, renameSync, writeFileSync } from 'fs';
2
+ import { existsSync, mkdirSync, renameSync, rmSync, writeFileSync } from 'fs';
3
3
  import { homedir } from 'os';
4
4
  import { dirname, join } from 'path';
5
5
 
@@ -108,3 +108,41 @@ export function systemdUserServicePid(unitName: string, env: NodeJS.ProcessEnv =
108
108
  const pid = Number(result.stdout.trim());
109
109
  return Number.isInteger(pid) && pid > 0 ? pid : undefined;
110
110
  }
111
+
112
+ export interface ExactSystemdUserUnitRetirementResult {
113
+ unitName: string;
114
+ unitPath: string;
115
+ serviceWasPresent: boolean;
116
+ unitFileWasPresent: boolean;
117
+ absentAfter: boolean;
118
+ }
119
+
120
+ function systemdUnitLoaded(unitName: string, env: NodeJS.ProcessEnv): boolean {
121
+ const result = commandSucceeded('systemctl', ['--user', 'show', '--property', 'LoadState', '--value', systemdUserUnitName(unitName)], env);
122
+ return result.status === 0 && result.stdout.trim() !== '' && result.stdout.trim() !== 'not-found';
123
+ }
124
+
125
+ export function retireSystemdUserUnitExact(
126
+ input: { unitName: string; env?: NodeJS.ProcessEnv },
127
+ ): ExactSystemdUserUnitRetirementResult {
128
+ const env = input.env ?? process.env;
129
+ const unitName = systemdUserUnitName(input.unitName);
130
+ const unitPath = systemdUserUnitPath(unitName, env);
131
+ const serviceWasPresent = systemdUnitLoaded(unitName, env);
132
+ const unitFileWasPresent = existsSync(unitPath);
133
+ if (serviceWasPresent || unitFileWasPresent) {
134
+ const disabled = commandSucceeded('systemctl', ['--user', 'disable', '--now', unitName], env);
135
+ const detail = `${disabled.stderr ?? ''}\n${disabled.stdout ?? ''}`;
136
+ if (disabled.status !== 0 && !/not loaded|not found|does not exist|not enabled|no files found/i.test(detail)) {
137
+ throw new Error(`SYSTEMD_USER_EXACT_RETIRE_FAILED: ${unitName}: ${detail.trim()}`);
138
+ }
139
+ }
140
+ rmSync(unitPath, { force: true });
141
+ const reload = commandSucceeded('systemctl', ['--user', 'daemon-reload'], env);
142
+ if (reload.status !== 0) {
143
+ throw new Error(`SYSTEMD_USER_EXACT_RETIRE_RELOAD_FAILED: ${unitName}: ${(reload.stderr || reload.stdout || '').trim()}`);
144
+ }
145
+ const absentAfter = !systemdUnitLoaded(unitName, env) && !existsSync(unitPath);
146
+ if (!absentAfter) throw new Error(`SYSTEMD_USER_EXACT_RETIRE_VERIFY_FAILED: ${unitName}`);
147
+ return { unitName, unitPath, serviceWasPresent, unitFileWasPresent, absentAfter };
148
+ }
@@ -86,7 +86,6 @@ export interface EditSessionBinding {
86
86
  checkoutId?: string;
87
87
  principalId?: string;
88
88
  controllerInstanceId?: string;
89
- routeDecisionFingerprint?: string;
90
89
  }
91
90
 
92
91
  export interface EditSession {
@@ -99,7 +98,6 @@ export interface EditSession {
99
98
  checkoutId?: string;
100
99
  principalId?: string;
101
100
  controllerInstanceId?: string;
102
- routeDecisionFingerprint?: string;
103
101
  workspaceFingerprint?: string;
104
102
  assurance?: EditSessionAssurance;
105
103
  purpose: string;
@@ -293,8 +291,7 @@ export function assertEditSessionDurableBinding(
293
291
  session.workId
294
292
  || session.repoId
295
293
  || session.checkoutId
296
- || session.principalId
297
- || session.routeDecisionFingerprint,
294
+ || session.principalId,
298
295
  );
299
296
  if (options.requireBoundIdentity === true && hasDurableIdentity && !binding) {
300
297
  throw new Error('EDIT_SESSION_IDENTITY_MISMATCH: binding');
@@ -305,7 +302,6 @@ export function assertEditSessionDurableBinding(
305
302
  ['repoId', session.repoId, binding.repoId],
306
303
  ['checkoutId', session.checkoutId, binding.checkoutId],
307
304
  ['principalId', session.principalId, binding.principalId],
308
- ['routeDecisionFingerprint', session.routeDecisionFingerprint, binding.routeDecisionFingerprint],
309
305
  ];
310
306
  for (const [field, expected, observed] of pairs) {
311
307
  if (expected && expected !== observed) throw new Error(`EDIT_SESSION_IDENTITY_MISMATCH: ${String(field)}`);
@@ -404,7 +400,6 @@ function normalizeStoredSession(value: Partial<EditSession> & { sessionId: strin
404
400
  checkoutId: value.checkoutId,
405
401
  principalId: value.principalId,
406
402
  controllerInstanceId: value.controllerInstanceId,
407
- routeDecisionFingerprint: value.routeDecisionFingerprint,
408
403
  workspaceFingerprint: value.workspaceFingerprint,
409
404
  assurance: value.assurance,
410
405
  purpose: value.purpose ?? 'Direct edit',
@@ -1206,7 +1201,6 @@ export function beginEditSession(repoRoot: string, input: {
1206
1201
  checkoutId: input.binding?.checkoutId?.trim() || undefined,
1207
1202
  principalId: input.binding?.principalId?.trim() || undefined,
1208
1203
  controllerInstanceId: input.binding?.controllerInstanceId?.trim() || undefined,
1209
- routeDecisionFingerprint: input.binding?.routeDecisionFingerprint?.trim() || undefined,
1210
1204
  workspaceFingerprint: workspaceFingerprint(repoRoot),
1211
1205
  purpose,
1212
1206
  status: 'open',
@@ -204,32 +204,37 @@ function scheduleNeedsAttention(schedule: RepositorySchedule): boolean {
204
204
  return Boolean(schedule.pausedReason && /(?:fail|error|auth|login|block|attention|maximum)/i.test(schedule.pausedReason));
205
205
  }
206
206
 
207
- function scheduleStatus(schedule: RepositorySchedule, workStatus?: string): ConsoleAutomationView['status'] {
208
- if (workStatus === 'completed' || /is terminal \(completed\)/i.test(schedule.pausedReason ?? '')) return 'completed';
209
- if (workStatus === 'failed') return 'attention';
207
+ function scheduleStatus(schedule: RepositorySchedule, workState?: string): ConsoleAutomationView['status'] {
208
+ if (workState === 'completed' || /is terminal \(completed\)/i.test(schedule.pausedReason ?? '')) return 'completed';
209
+ if (workState === 'cancelled') return 'paused';
210
210
  if (schedule.enabled) return scheduleNeedsAttention(schedule) ? 'attention' : 'enabled';
211
211
  return scheduleNeedsAttention(schedule) ? 'attention' : 'paused';
212
212
  }
213
213
 
214
- function workBinding(controllerHome: string, repoId: string, schedule: RepositorySchedule): { id?: string; objective?: string; status?: string } {
214
+ function workBinding(controllerHome: string, repoId: string, schedule: RepositorySchedule): { id?: string; objective?: string; state?: string; failed?: boolean } {
215
215
  const value = schedule.action.arguments?.work_id;
216
216
  const workId = typeof value === 'string' && value.trim() ? value.trim() : undefined;
217
217
  if (!workId) return {};
218
218
  const work = getWorkContract({ controllerHome, repoId }, workId);
219
- return { id: workId, objective: work?.objective, status: work?.status };
219
+ return {
220
+ id: workId,
221
+ objective: work?.objective,
222
+ state: work?.semanticState,
223
+ failed: work ? work.evidenceState === 'failed' || work.phaseEvidence[work.phase].state === 'failed' : false,
224
+ };
220
225
  }
221
226
 
222
- function displayPauseReason(schedule: RepositorySchedule, workStatus?: string): string | undefined {
223
- if (workStatus === 'completed' || /is terminal \(completed\)/i.test(schedule.pausedReason ?? '')) return '关联工作已经完成,这个自动任务不会再触发。';
227
+ function displayPauseReason(schedule: RepositorySchedule, workState?: string): string | undefined {
228
+ if (workState === 'completed' || /is terminal \(completed\)/i.test(schedule.pausedReason ?? '')) return '关联工作已经完成,这个自动任务不会再触发。';
224
229
  if (schedule.lastObservationStatus === 'auth_required') return '目标登录状态已失效,完成重新登录后即可恢复。';
225
230
  if (schedule.consecutiveFailures >= schedule.policy.maxFailures || /maximum consecutive failures/i.test(schedule.pausedReason ?? '')) return '连续执行失败达到上限,已自动暂停。修复问题后可以恢复任务。';
226
231
  if (/canary completed/i.test(schedule.pausedReason ?? '')) return '验收任务已经完成。';
227
232
  return schedule.pausedReason;
228
233
  }
229
234
 
230
- function attentionMessage(schedule: RepositorySchedule, workStatus?: string): string | undefined {
235
+ function attentionMessage(schedule: RepositorySchedule, workFailed = false): string | undefined {
231
236
  if (schedule.lastObservationStatus === 'auth_required') return '需要重新登录后才能继续自动执行。';
232
- if (workStatus === 'failed') return '关联工作执行失败,需要检查失败原因后再恢复。';
237
+ if (workFailed) return '关联工作执行失败,需要检查失败原因后再恢复。';
233
238
  if (schedule.consecutiveFailures >= schedule.policy.maxFailures) return '连续执行失败达到上限,任务已自动暂停。';
234
239
  return undefined;
235
240
  }
@@ -256,7 +261,7 @@ export function listConsoleAutomations(controllerHome: string, repositories: Rep
256
261
  repositoryName: repository.displayName,
257
262
  name: schedule.name,
258
263
  summary: scheduleSummary(mode),
259
- status: scheduleStatus(schedule, work.status),
264
+ status: scheduleStatus(schedule, work.state),
260
265
  schedule: triggerLabel(schedule),
261
266
  timezone: schedule.trigger.timezone,
262
267
  delivery: scheduleDelivery(schedule, mode),
@@ -274,10 +279,10 @@ export function listConsoleAutomations(controllerHome: string, repositories: Rep
274
279
  lastRunAt: last?.updatedAt ?? schedule.lastTriggeredAt,
275
280
  lastResult: observationResult(schedule, last),
276
281
  nextRunHint: nextScheduleHint(schedule),
277
- pausedReason: displayPauseReason(schedule, work.status),
278
- attentionMessage: attentionMessage(schedule, work.status),
282
+ pausedReason: displayPauseReason(schedule, work.state),
283
+ attentionMessage: attentionMessage(schedule, work.failed),
279
284
  history: occurrenceHistory(occurrences),
280
- actions: scheduleStatus(schedule, work.status) === 'completed' ? [] : schedule.enabled ? ['run', 'pause'] : ['resume'],
285
+ actions: scheduleStatus(schedule, work.state) === 'completed' ? [] : schedule.enabled ? ['run', 'pause'] : ['resume'],
281
286
  });
282
287
  }
283
288
 
@@ -12,14 +12,6 @@ export interface SuggestedActionViewModel {
12
12
  primary?: boolean;
13
13
  }
14
14
 
15
- export interface ModePreviewViewModel {
16
- mode: 'direct_control' | 'goal_workloop' | 'handoff_only';
17
- label: string;
18
- explanation: string;
19
- createWorkContract: boolean;
20
- createHandoff: boolean;
21
- }
22
-
23
15
  export interface VerificationViewModel {
24
16
  label: string;
25
17
  tone: PlainStatusTone;
@@ -104,8 +96,6 @@ export interface WorkSummaryViewModel {
104
96
  updatedAt: string;
105
97
  title: string;
106
98
  objective: string;
107
- modeLabel: string;
108
- mode: ModePreviewViewModel['mode'];
109
99
  accessMode: 'request' | 'full_access';
110
100
  accessModeLabel: string;
111
101
  statusLabel: string;
@@ -127,7 +117,9 @@ export interface WorkSummaryViewModel {
127
117
  primaryActionLabel?: string;
128
118
  advanced?: {
129
119
  workId: string;
130
- status: string;
120
+ state: string;
121
+ dispatchState: string;
122
+ evidenceState: string;
131
123
  checkIds: string[];
132
124
  handoffRefs: string[];
133
125
  };
@@ -280,7 +272,6 @@ export interface CommandCenterViewModel {
280
272
  /** Assistant/plugin capabilities available to the controller (not the primary workflow). */
281
273
  pluginSummary: PluginSummaryViewModel;
282
274
  plugins: PluginCardViewModel[];
283
- modePreviewDefault: ModePreviewViewModel;
284
275
  warnings: string[];
285
276
  /** Setup guidance when no usable repository is selected. */
286
277
  setupGuide?: {