@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
@@ -1,3 +1,4 @@
1
+ import { randomUUID } from 'crypto';
1
2
  import type { RepositoryRecord } from '../repositories/types';
2
3
  import {
3
4
  accessModeDescriptor,
@@ -19,9 +20,10 @@ import type { BootstrapSnapshot } from '../../runtime/control-plane/bootstrap';
19
20
  import { readForgeRuntimeStatus } from '../../runtime/control-plane/runtime-status-client';
20
21
  import { evaluateActiveRuntimeSourceDrift, readRuntimeGeneration } from '../../runtime/control-plane/runtime-generation';
21
22
  import {
22
- controllerPluginRepository,
23
23
  getAssistantPluginManifest,
24
+ getControllerPluginManifest,
24
25
  listAssistantPluginManifests,
26
+ listControllerPluginManifests,
25
27
  } from '../../runtime/plugins/store';
26
28
  import type { AssistantPluginManifest } from '../../runtime/plugins/types';
27
29
  import {
@@ -29,22 +31,18 @@ import {
29
31
  buildFacadeResult,
30
32
  buildSyncOperationDigest,
31
33
  classifyUserFacingError,
32
- continueGoalWorkloop,
33
34
  delegateToCodexCerebellum,
34
35
  dismissHandoffItem,
35
- finalizeGoalWorkloop,
36
36
  getHandoffItem,
37
37
  getWorkContract,
38
38
  listHandoffItems,
39
39
  listWorkContracts,
40
40
  normalizeCheckIds,
41
- routeWorkStart,
41
+ createWorkSemanticContext,
42
+ workSemanticView,
42
43
  runSelfHealingLoop,
43
- selectExecutionMode,
44
- stopGoalWorkloop,
45
44
  summarizeHandoffItem,
46
45
  summarizeWorkContract,
47
- type ExecutionModeSelectionInput,
48
46
  type FacadeResult,
49
47
  type HandoffItem,
50
48
  type SuggestedNextAction,
@@ -81,7 +79,6 @@ import type {
81
79
  ConnectorFreshnessViewModel,
82
80
  ConsoleErrorViewModel,
83
81
  HandoffCardViewModel,
84
- ModePreviewViewModel,
85
82
  PlainStatusTone,
86
83
  PluginActionViewModel,
87
84
  AccessStateViewModel,
@@ -105,34 +102,6 @@ function store(ctx: ConsoleFacadeContext) {
105
102
  return { controllerHome: ctx.controllerHome, repoId: ctx.repository.repoId };
106
103
  }
107
104
 
108
- function plainMode(mode: ModePreviewViewModel['mode']): ModePreviewViewModel {
109
- if (mode === 'direct_control') {
110
- return {
111
- mode,
112
- label: '直接执行',
113
- explanation: '小范围、目标清晰的改动;适合由 ChatGPT 直接监督完成。',
114
- createWorkContract: false,
115
- createHandoff: false,
116
- };
117
- }
118
- if (mode === 'handoff_only') {
119
- return {
120
- mode,
121
- label: '需要你先决定',
122
- explanation: '目标不清、风险较高或缺少授权;执行前需要你的判断。',
123
- createWorkContract: false,
124
- createHandoff: true,
125
- };
126
- }
127
- return {
128
- mode: 'goal_workloop',
129
- label: '可恢复的后台任务',
130
- explanation: '多步骤或需要恢复/隔离的任务;会创建工作项并支持继续、验证与收尾。',
131
- createWorkContract: true,
132
- createHandoff: false,
133
- };
134
- }
135
-
136
105
  function mapSuggested(actions: SuggestedNextAction[] = []): SuggestedActionViewModel[] {
137
106
  return actions.slice(0, 8).map((action, index) => {
138
107
  const op = action.operation;
@@ -159,17 +128,14 @@ function mapSuggested(actions: SuggestedNextAction[] = []): SuggestedActionViewM
159
128
  });
160
129
  }
161
130
 
162
- function workStatusLabel(status: WorkContract['status']): { label: string; tone: PlainStatusTone; phase: UserFacingPhase } {
163
- switch (status) {
164
- case 'running': return { label: '进行中', tone: 'blue', phase: 'running' };
165
- case 'open': return { label: '待开始', tone: 'gray', phase: 'queued' };
166
- case 'blocked': return { label: '已阻塞', tone: 'red', phase: 'blocked' };
167
- case 'ready': return { label: '需要你审阅', tone: 'amber', phase: 'needs_attention' };
168
- case 'completed': return { label: '已完成', tone: 'green', phase: 'succeeded' };
169
- case 'failed': return { label: '未通过验收', tone: 'red', phase: 'failed' };
170
- case 'cancelled': return { label: '已停止', tone: 'gray', phase: 'cancelled' };
171
- default: return { label: String(status), tone: 'gray', phase: 'running' };
172
- }
131
+ function workStatusLabel(work: WorkContract): { label: string; tone: PlainStatusTone; phase: UserFacingPhase } {
132
+ if (work.semanticState === 'completed') return { label: '已完成', tone: 'green', phase: 'succeeded' };
133
+ if (work.semanticState === 'cancelled') return { label: '已停止', tone: 'gray', phase: 'cancelled' };
134
+ if (work.evidenceState === 'failed' || work.phaseEvidence[work.phase].state === 'failed') return { label: '执行失败', tone: 'red', phase: 'failed' };
135
+ if (work.dispatchState === 'blocked' || work.phaseEvidence[work.phase].state === 'blocked') return { label: '已阻塞', tone: 'red', phase: 'blocked' };
136
+ if (work.phase === 'review' && work.phaseEvidence.review.state === 'active') return { label: '需要你审阅', tone: 'amber', phase: 'needs_attention' };
137
+ if (['claimed', 'launching', 'running'].includes(work.dispatchState)) return { label: '进行中', tone: 'blue', phase: 'running' };
138
+ return { label: '待继续', tone: 'gray', phase: 'queued' };
173
139
  }
174
140
 
175
141
  const ERROR_COPY: Record<UserFacingErrorClass, { title: string; explanation: string; nextActions: string[] }> = {
@@ -310,17 +276,18 @@ function progressSteps(work: WorkContract): WorkSummaryViewModel['progressSteps'
310
276
  const hasPass = checks.some((entry) => entry.outcome === 'valid_pass');
311
277
  const hasFail = checks.some((entry) => entry.outcome === 'valid_fail');
312
278
  const hasDelegate = Boolean(work.workerRef);
313
- const review = work.status === 'ready';
314
- const done = work.status === 'completed';
315
- const failed = work.status === 'failed';
316
- const cancelled = work.status === 'cancelled';
279
+ const review = work.phase === 'review' && work.phaseEvidence.review.state === 'active';
280
+ const done = work.semanticState === 'completed';
281
+ const failed = work.evidenceState === 'failed' || work.phaseEvidence[work.phase].state === 'failed';
282
+ const cancelled = work.semanticState === 'cancelled';
283
+ const executing = ['claimed', 'launching', 'running'].includes(work.dispatchState);
317
284
  return [
318
- { label: '已开始', done: true, active: work.status === 'running' && !hasDelegate && !hasPass },
285
+ { label: '已开始', done: true, active: executing && !hasDelegate && !hasPass },
319
286
  { label: '已委派助手', done: hasDelegate, active: hasDelegate && !hasPass && !review },
320
287
  { label: '已提出修改', done: hasDelegate || hasPass || hasFail, active: false },
321
288
  { label: '已验证', done: hasPass || hasFail, active: hasFail && !review },
322
289
  { label: '等待审阅', done: review || done, active: review },
323
- { label: done ? '已完成' : failed ? '验收失败' : cancelled ? '已停止' : '收尾', done: done || failed || cancelled, active: false },
290
+ { label: done ? '已完成' : failed ? '执行失败' : cancelled ? '已停止' : '收尾', done: done || cancelled, active: false },
324
291
  ];
325
292
  }
326
293
 
@@ -354,27 +321,27 @@ export function mapWorkSummary(
354
321
  work: WorkContract,
355
322
  opts: { controllerHome?: string; repoId?: string } = {},
356
323
  ): WorkSummaryViewModel {
357
- const status = workStatusLabel(work.status);
358
- const mode = plainMode(work.mode === 'direct_control' || work.mode === 'handoff_only' ? work.mode : 'goal_workloop');
324
+ const status = workStatusLabel(work);
359
325
  const verification = latestVerification(work);
360
326
  const suggested = mapSuggested(work.suggestedNextActions);
361
327
  const nextAction = suggested[0]?.label
362
- ?? (work.status === 'ready' ? '请审阅后继续或收尾'
363
- : work.status === 'running' ? '继续或运行检查'
364
- : work.status === 'completed' ? '任务已完成'
365
- : work.status === 'failed' ? '查看失败原因并决定是否重试'
366
- : '查看任务状态');
328
+ ?? (work.semanticState === 'completed' ? '任务已完成'
329
+ : work.semanticState === 'cancelled' ? '任务已停止'
330
+ : status.phase === 'needs_attention' ? '请审阅后继续或收尾'
331
+ : status.phase === 'running' ? '继续或运行检查'
332
+ : status.phase === 'failed' ? '查看失败原因并决定是否重试'
333
+ : '查看任务状态');
367
334
  const storeOpts = opts.controllerHome && opts.repoId
368
335
  ? { controllerHome: opts.controllerHome, repoId: opts.repoId }
369
336
  : null;
370
337
  const changedFiles = summarizeChangedFiles(extractChangedPathsFromWork(work, storeOpts));
371
338
  let error: ConsoleErrorViewModel | undefined;
372
- if (work.status === 'failed') {
339
+ if (status.phase === 'failed') {
373
340
  error = describeConsoleError(
374
341
  verification?.isInfrastructureIssue ? 'infrastructure_failure' : 'acceptance_failure',
375
342
  verification?.summary,
376
343
  );
377
- } else if (work.status === 'blocked' || work.status === 'ready') {
344
+ } else if (status.phase === 'blocked' || status.phase === 'needs_attention') {
378
345
  error = describeConsoleError(
379
346
  'handoff_required',
380
347
  work.suggestedNextActions[0]?.reason,
@@ -383,15 +350,13 @@ export function mapWorkSummary(
383
350
  const latestSummary = verification?.summary
384
351
  || work.evidenceRefs[0]?.summary
385
352
  || work.evidenceRefs[0]?.title
386
- || (work.status === 'running' ? '任务执行中…' : status.label);
353
+ || (status.phase === 'running' ? '任务执行中…' : status.label);
387
354
  return {
388
355
  id: work.workId,
389
356
  repoId: work.repoId,
390
357
  updatedAt: work.updatedAt,
391
358
  title: work.objective.slice(0, 160) || '未命名任务',
392
359
  objective: work.objective,
393
- modeLabel: mode.label,
394
- mode: mode.mode,
395
360
  accessMode: work.constraints.accessMode ?? 'full_access',
396
361
  accessModeLabel: accessModeDescriptor(work.constraints.accessMode ?? 'full_access').shortLabel,
397
362
  statusLabel: status.label,
@@ -414,7 +379,9 @@ export function mapWorkSummary(
414
379
  primaryActionLabel: suggested[0]?.label,
415
380
  advanced: {
416
381
  workId: work.workId,
417
- status: work.status,
382
+ state: work.semanticState,
383
+ dispatchState: work.dispatchState,
384
+ evidenceState: work.evidenceState,
418
385
  checkIds: work.checks,
419
386
  handoffRefs: work.handoffRefs,
420
387
  },
@@ -440,11 +407,9 @@ function describeHandoffDecision(item: HandoffItem): HandoffCardViewModel['decis
440
407
  const payload = approvalAction?.payload ?? {};
441
408
  const objective = typeof payload.objective === 'string' ? payload.objective.trim() : '';
442
409
  const allowedPaths = Array.isArray(payload.allowedPaths) ? payload.allowedPaths.map(String).filter(Boolean) : [];
443
- const expectedFiles = typeof payload.expectedFiles === 'number' ? payload.expectedFiles : undefined;
444
410
  const scopeSummary = allowedPaths.length
445
411
  ? `允许修改:${allowedPaths.slice(0, 4).join('、')}${allowedPaths.length > 4 ? ' 等' : ''}`
446
412
  : '修改范围仍受原任务描述和仓库策略限制';
447
- const estimate = expectedFiles === undefined ? '' : `;预计涉及约 ${expectedFiles} 个文件`;
448
413
  return {
449
414
  type: 'approval',
450
415
  typeLabel: destructive ? '高风险操作审批' : '执行授权',
@@ -456,7 +421,7 @@ function describeHandoffDecision(item: HandoffItem): HandoffCardViewModel['decis
456
421
  ? '此操作包含高风险或潜在不可逆副作用,系统不能替你默认同意。'
457
422
  : '当前安全策略要求显式授权;缩小范围或改为只读预览后可避免本次审批。',
458
423
  impact: approvalAction?.operation === 'start'
459
- ? `批准后会创建正式任务。${scopeSummary}${estimate}。`
424
+ ? `批准后会创建正式任务。${scopeSummary}。`
460
425
  : '当前审批没有保存可安全重放的具体动作,因此不能自动续跑。',
461
426
  afterApproval: canApproveAndContinue
462
427
  ? '系统会记录批准、立即创建任务并打开任务详情;接下来会明确显示继续、委派、验证或收尾动作,不代表任务已经完成。'
@@ -539,18 +504,6 @@ export function mapHandoffCard(item: HandoffItem): HandoffCardViewModel {
539
504
  };
540
505
  }
541
506
 
542
- export function previewExecutionMode(input: ExecutionModeSelectionInput & { objective?: string }): ModePreviewViewModel {
543
- const selection = selectExecutionMode(input);
544
- return {
545
- ...plainMode(selection.mode),
546
- createWorkContract: selection.createWorkContract,
547
- createHandoff: selection.createHandoff,
548
- explanation: selection.reason.includes('Small') || selection.reason.includes('small')
549
- ? plainMode(selection.mode).explanation
550
- : plainMode(selection.mode).explanation,
551
- };
552
- }
553
-
554
507
  function displayPath(path: string): string {
555
508
  const home = process.env.HOME?.trim();
556
509
  if (home && path.startsWith(home)) return `~${path.slice(home.length)}`;
@@ -943,25 +896,28 @@ export function mapPluginCard(manifest: AssistantPluginManifest): PluginCardView
943
896
  }
944
897
 
945
898
  export function listConsolePlugins(ctx: ConsoleFacadeContext): PluginCardViewModel[] {
946
- const repositories = [ctx.repository, controllerPluginRepository(ctx.controllerHome)];
947
899
  const byPluginId = new Map<string, PluginCardViewModel>();
948
- for (const repository of repositories) {
949
- for (const manifest of listAssistantPluginManifests(ctx.controllerHome, repository, { preferStored: true })) {
950
- if (!byPluginId.has(manifest.pluginId)) byPluginId.set(manifest.pluginId, mapPluginCard(manifest));
951
- }
900
+ const manifests = [
901
+ ...listAssistantPluginManifests(ctx.controllerHome, ctx.repository, { preferStored: true }),
902
+ ...listControllerPluginManifests(ctx.controllerHome, { preferStored: true }),
903
+ ];
904
+ for (const manifest of manifests) {
905
+ if (!byPluginId.has(manifest.pluginId)) byPluginId.set(manifest.pluginId, mapPluginCard(manifest));
952
906
  }
953
907
  return [...byPluginId.values()].sort((left, right) => left.name.localeCompare(right.name));
954
908
  }
955
909
 
956
910
  export function getConsolePlugin(ctx: ConsoleFacadeContext, pluginId: string): PluginCardViewModel | null {
957
- for (const repository of [ctx.repository, controllerPluginRepository(ctx.controllerHome)]) {
958
- try {
959
- return mapPluginCard(getAssistantPluginManifest(ctx.controllerHome, repository, pluginId));
960
- } catch {
961
- // Try the other supported plugin scope before reporting an unknown plugin.
962
- }
911
+ try {
912
+ return mapPluginCard(getAssistantPluginManifest(ctx.controllerHome, ctx.repository, pluginId));
913
+ } catch {
914
+ // Try controller-scoped plugins before reporting an unknown plugin.
915
+ }
916
+ try {
917
+ return mapPluginCard(getControllerPluginManifest(ctx.controllerHome, pluginId));
918
+ } catch {
919
+ return null;
963
920
  }
964
- return null;
965
921
  }
966
922
 
967
923
  export function buildPluginSummary(plugins: PluginCardViewModel[]): PluginSummaryViewModel {
@@ -986,8 +942,8 @@ export async function buildCommandCenter(
986
942
  repoId: ctx.repository.repoId,
987
943
  });
988
944
  const currentRepository = repositories.find((entry) => entry.current) ?? mapRepositoryCard(ctx.repository, true);
989
- const activeWork = listWorkContracts({ ...store(ctx), status: 'active', limit: 20 }).map(mapWork);
990
- const allRecent = listWorkContracts({ ...store(ctx), status: 'all', limit: 12 }).map(mapWork);
945
+ const activeWork = listWorkContracts({ ...store(ctx), state: 'active', limit: 20 }).map(mapWork);
946
+ const allRecent = listWorkContracts({ ...store(ctx), state: 'all', limit: 12 }).map(mapWork);
991
947
  const handoffs = listHandoffItems({ ...store(ctx), status: 'pending', limit: 20 }).map(mapHandoffCard);
992
948
  const plugins = listConsolePlugins(ctx);
993
949
  const pluginSummary = buildPluginSummary(plugins);
@@ -1011,7 +967,6 @@ export async function buildCommandCenter(
1011
967
  handoffs,
1012
968
  pluginSummary,
1013
969
  plugins,
1014
- modePreviewDefault: plainMode('direct_control'),
1015
970
  // Only surface confirmed warnings — never "maybe missing" when ChatGPT snapshot is unobserved.
1016
971
  warnings: banner ? [banner] : [],
1017
972
  setupGuide: needsSetup
@@ -1058,76 +1013,26 @@ export function startConsoleWork(
1058
1013
  acceptanceCriteria?: string[];
1059
1014
  allowedPaths?: string[];
1060
1015
  forbiddenPaths?: string[];
1061
- expectedFiles?: number;
1062
- expectedChangedLines?: number;
1063
1016
  scopeClear?: boolean;
1064
- requiresInvestigation?: boolean;
1065
- requiresLongRunningChecks?: boolean;
1066
- requiresWorker?: boolean;
1067
1017
  requiresApproval?: boolean;
1068
1018
  destructive?: boolean;
1069
1019
  accessMode?: AccessMode;
1070
1020
  workspaceMode?: 'current' | 'isolated' | 'auto';
1071
- requireWorktree?: boolean;
1072
- directMainProhibited?: boolean;
1073
1021
  approvalConfirmed?: boolean;
1074
- forceMode?: 'direct_control' | 'goal_workloop' | 'handoff_only';
1075
1022
  checkIds?: string[];
1076
1023
  },
1077
1024
  ): FacadeResult {
1078
- const checks = listControllerChecks(ctx.repository.canonicalRoot);
1079
- return routeWorkStart(
1080
- {
1081
- workStore: store(ctx),
1082
- handoffStore: store(ctx),
1083
- repoId: ctx.repository.repoId,
1084
- availableChecks: checks,
1085
- },
1086
- {
1087
- objective: input.objective,
1088
- acceptanceCriteria: input.acceptanceCriteria,
1089
- allowedPaths: input.allowedPaths,
1090
- forbiddenPaths: input.forbiddenPaths,
1091
- checks: input.checkIds,
1092
- constraints: input.accessMode !== undefined
1093
- || input.workspaceMode !== undefined
1094
- || input.requireWorktree !== undefined
1095
- || input.directMainProhibited !== undefined
1096
- ? {
1097
- ...(input.accessMode !== undefined ? { accessMode: input.accessMode } : {}),
1098
- ...(input.workspaceMode !== undefined ? { workspaceMode: input.workspaceMode } : {}),
1099
- ...(input.requireWorktree !== undefined ? { requireWorktree: input.requireWorktree } : {}),
1100
- ...(input.directMainProhibited !== undefined ? { directMainProhibited: input.directMainProhibited } : {}),
1101
- }
1102
- : undefined,
1103
- modeInput: {
1104
- objective: input.objective,
1105
- expectedFiles: input.expectedFiles,
1106
- expectedChangedLines: input.expectedChangedLines,
1107
- scopeClear: input.scopeClear !== false,
1108
- requiresInvestigation: input.requiresInvestigation === true,
1109
- requiresLongRunningChecks: input.requiresLongRunningChecks === true,
1110
- requiresWorker: input.requiresWorker === true,
1111
- requiresApproval: input.requiresApproval === true,
1112
- destructive: input.destructive === true,
1113
- },
1114
- requestedBy: 'user',
1115
- approvalConfirmed: input.approvalConfirmed === true,
1116
- forceMode: input.forceMode,
1117
- },
1118
- );
1119
- }
1120
-
1121
- export function continueConsoleWork(ctx: ConsoleFacadeContext, workId: string, note?: string): FacadeResult {
1122
- return continueGoalWorkloop(
1123
- {
1124
- workStore: store(ctx),
1125
- handoffStore: store(ctx),
1126
- repoId: ctx.repository.repoId,
1127
- availableChecks: listControllerChecks(ctx.repository.canonicalRoot),
1128
- },
1129
- { workId, note },
1130
- );
1025
+ const objective = input.objective.trim();
1026
+ if (!objective) return buildFacadeResult({ status: 'blocked', summary: 'WORK_OBJECTIVE_REQUIRED', data: {} });
1027
+ const created = createWorkSemanticContext(store(ctx), {
1028
+ workId: `work-console-${randomUUID().slice(0, 12)}`,
1029
+ objective,
1030
+ requestedBy: 'user',
1031
+ });
1032
+ return buildFacadeResult({
1033
+ summary: `Work ${created.workId} created as semantic context.`,
1034
+ data: { work: workSemanticView(created) },
1035
+ });
1131
1036
  }
1132
1037
 
1133
1038
  export async function verifyConsoleWork(
@@ -1150,30 +1055,6 @@ export async function verifyConsoleWork(
1150
1055
  return verification.facade;
1151
1056
  }
1152
1057
 
1153
- export function finalizeConsoleWork(ctx: ConsoleFacadeContext, workId: string): FacadeResult {
1154
- return finalizeGoalWorkloop(
1155
- {
1156
- workStore: store(ctx),
1157
- handoffStore: store(ctx),
1158
- repoId: ctx.repository.repoId,
1159
- availableChecks: listControllerChecks(ctx.repository.canonicalRoot),
1160
- },
1161
- { workId },
1162
- );
1163
- }
1164
-
1165
- export function stopConsoleWork(ctx: ConsoleFacadeContext, workId: string, reason?: string): FacadeResult {
1166
- return stopGoalWorkloop(
1167
- {
1168
- workStore: store(ctx),
1169
- handoffStore: store(ctx),
1170
- repoId: ctx.repository.repoId,
1171
- availableChecks: listControllerChecks(ctx.repository.canonicalRoot),
1172
- },
1173
- { workId, reason },
1174
- );
1175
- }
1176
-
1177
1058
  export function delegateConsoleWork(
1178
1059
  ctx: ConsoleFacadeContext,
1179
1060
  input: { workId?: string; target?: 'codex' | 'grok' | 'claude'; objective?: string; available?: boolean },
@@ -1279,22 +1160,14 @@ export async function approveConsoleHandoff(ctx: ConsoleFacadeContext, handoffId
1279
1160
  acceptanceCriteria: strings(payload.acceptanceCriteria),
1280
1161
  allowedPaths: strings(payload.allowedPaths),
1281
1162
  forbiddenPaths: strings(payload.forbiddenPaths),
1282
- expectedFiles: typeof payload.expectedFiles === 'number' ? payload.expectedFiles : undefined,
1283
- expectedChangedLines: typeof payload.expectedChangedLines === 'number' ? payload.expectedChangedLines : undefined,
1284
1163
  scopeClear: payload.scopeClear !== false,
1285
- requiresInvestigation: payload.requiresInvestigation === true,
1286
- requiresLongRunningChecks: payload.requiresLongRunningChecks === true,
1287
- requiresWorker: payload.requiresWorker === true,
1288
1164
  requiresApproval: payload.requiresApproval === true,
1289
1165
  destructive: payload.destructive === true,
1290
1166
  accessMode: isAccessMode(payload.accessMode) ? payload.accessMode : undefined,
1291
1167
  workspaceMode: payload.workspaceMode === 'current' || payload.workspaceMode === 'isolated' || payload.workspaceMode === 'auto'
1292
1168
  ? payload.workspaceMode
1293
1169
  : undefined,
1294
- requireWorktree: typeof payload.requireWorktree === 'boolean' ? payload.requireWorktree : undefined,
1295
- directMainProhibited: typeof payload.directMainProhibited === 'boolean' ? payload.directMainProhibited : undefined,
1296
1170
  approvalConfirmed: true,
1297
- forceMode: 'goal_workloop',
1298
1171
  checkIds: strings(payload.checkIds),
1299
1172
  });
1300
1173
 
@@ -1329,8 +1202,8 @@ export function getConsoleWork(ctx: ConsoleFacadeContext, workId: string): WorkS
1329
1202
  : undefined;
1330
1203
  }
1331
1204
 
1332
- export function listConsoleWork(ctx: ConsoleFacadeContext, status: 'active' | 'all' = 'active'): WorkSummaryViewModel[] {
1333
- return listWorkContracts({ ...store(ctx), status, limit: 50 }).map((work) =>
1205
+ export function listConsoleWork(ctx: ConsoleFacadeContext, state: 'active' | 'all' = 'active'): WorkSummaryViewModel[] {
1206
+ return listWorkContracts({ ...store(ctx), state, limit: 50 }).map((work) =>
1334
1207
  mapWorkSummary(work, { controllerHome: ctx.controllerHome, repoId: ctx.repository.repoId }));
1335
1208
  }
1336
1209