@moretea-labs/forge 1.6.0 → 1.7.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 (469) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +39 -0
  3. package/CLAUDE.md +4 -0
  4. package/README.md +2 -2
  5. package/README.zh-CN.md +1 -1
  6. package/SKILL.md +2 -2
  7. package/THIRD_PARTY_NOTICES.md +1 -1
  8. package/agents/openai.yaml +1 -1
  9. package/assets/hooks/hook-input.sh +11 -8
  10. package/assets/hooks/lib/session-state.sh +10 -7
  11. package/assets/hooks/lib/workflow-state.sh +13 -177
  12. package/assets/hooks/post-tool-observer.sh +8 -2
  13. package/assets/hooks/prompt-guard.sh +5 -81
  14. package/assets/hooks/session-start-context.sh +56 -1
  15. package/assets/partials/05-workflow.partial.md +1 -1
  16. package/assets/partials-agents/02-operating-mode.partial.md +2 -0
  17. package/assets/partials-agents/03-orchestration.partial.md +1 -1
  18. package/assets/plugin-registry.v1.json +3 -3
  19. package/assets/reference-configs/document-generation.md +1 -1
  20. package/assets/reference-configs/harness-overview.md +1 -1
  21. package/assets/reference-configs/sprint-contracts.md +3 -3
  22. package/assets/skill-version.json +2 -2
  23. package/assets/templates/contract.template.md +2 -7
  24. package/assets/templates/helpers/capture-plan.sh +2 -2
  25. package/assets/templates/helpers/check-architecture-sync.sh +17 -0
  26. package/assets/templates/helpers/check-task-workflow.sh +4 -4
  27. package/assets/templates/helpers/contract-worktree.sh +1 -21
  28. package/assets/templates/helpers/ensure-task-workflow.sh +11 -36
  29. package/assets/templates/helpers/inspect-project-state.ts +8 -6
  30. package/assets/templates/helpers/migrate-project-template.sh +22 -45
  31. package/assets/templates/helpers/migrate-workflow-docs.ts +9 -7
  32. package/assets/templates/helpers/new-plan.sh +1 -1
  33. package/assets/templates/helpers/plan-to-todo.sh +12 -37
  34. package/assets/templates/helpers/ship-worktrees.sh +2 -29
  35. package/assets/templates/helpers/verify-contract.sh +1 -111
  36. package/assets/templates/helpers/verify-sprint.sh +3 -180
  37. package/assets/templates/helpers/workflow-contract.ts +5 -1
  38. package/assets/templates/plan.template.md +1 -1
  39. package/assets/templates/review.template.md +9 -34
  40. package/assets/workflow-contract.v1.json +10 -19
  41. package/docs/README.md +10 -10
  42. package/docs/architecture/CURRENT.md +178 -0
  43. package/docs/architecture/EVOLUTION.md +42 -0
  44. package/docs/architecture/current/README.md +4 -156
  45. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +2 -2
  46. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +53 -0
  47. package/docs/architecture/decisions/20260826-browser-runtime-v2.md +73 -0
  48. package/docs/architecture/history/README.md +7 -0
  49. package/docs/architecture/{chatgpt-handoff-facade.md → history/chatgpt-handoff-facade.md} +4 -0
  50. package/docs/architecture/{global-hook-runtime.md → history/global-hook-runtime.md} +7 -3
  51. package/docs/architecture/{ios-semantic-automation-provider-v2.md → history/ios-semantic-automation-provider-v2.md} +6 -2
  52. package/docs/architecture/history.md +3 -34
  53. package/docs/architecture/index.md +15 -98
  54. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
  55. package/docs/architecture/reviews/2026-08-22-semantic-harness-convergence-acceptance.md +39 -0
  56. package/docs/architecture/versions/1.6.md +38 -0
  57. package/docs/architecture/versions/1.7.md +41 -0
  58. package/docs/forge-chatgpt-browser-engine.md +2 -2
  59. package/docs/forge-chatgpt-mcp-setup.md +4 -28
  60. package/docs/forge-chatgpt-supervised-automation.md +3 -3
  61. package/docs/forge-github-issue-launcher.md +1 -1
  62. package/docs/forge-plugin-management.md +1 -1
  63. package/docs/forge-runtime-self-healing-loop.md +1 -1
  64. package/docs/operations/controller-browser-plugin.md +26 -6
  65. package/docs/operations/controller-performance-and-502.md +143 -0
  66. package/docs/operations/controller-reliability-runbook.md +1 -1
  67. package/docs/operations/features.md +2 -2
  68. package/docs/operations/github-repository.md +1 -1
  69. package/docs/operations/homebrew.md +2 -2
  70. package/docs/operations/mcp-tool-exposure.md +5 -3
  71. package/docs/wiki/Architecture.md +6 -6
  72. package/docs/wiki/Implementation.md +2 -2
  73. package/docs/wiki/Integrations.md +2 -2
  74. package/docs/wiki/Work-Lifecycle.md +1 -1
  75. package/package.json +33 -11
  76. package/scripts/activate-source-baseline.ts +17 -13
  77. package/scripts/architecture-event.ts +2 -820
  78. package/scripts/architecture-queue.sh +2 -645
  79. package/scripts/archive-architecture-request.sh +2 -242
  80. package/scripts/archive-workflow.sh +1 -291
  81. package/scripts/benchmark-background-check-overlap.ts +228 -0
  82. package/scripts/benchmark-mcp-host.sh +117 -0
  83. package/scripts/benchmark-mcp-transport.ts +170 -0
  84. package/scripts/benchmark-quality-harness.ts +146 -0
  85. package/scripts/benchmark-route-session-concurrency.ts +207 -6
  86. package/scripts/benchmark-thin-harness-mcp-e2e.ts +7 -1
  87. package/scripts/benchmark-typescript-navigation.ts +186 -0
  88. package/scripts/benchmark-work-efficiency.ts +334 -0
  89. package/scripts/capability-config.ts +2 -392
  90. package/scripts/capability-resolver.ts +2 -503
  91. package/scripts/capture-plan.sh +1 -332
  92. package/scripts/check-agent-tooling.sh +2 -1558
  93. package/scripts/check-architecture-sync.sh +2 -371
  94. package/scripts/check-brain-manifest.sh +2 -253
  95. package/scripts/check-context-files.sh +2 -47
  96. package/scripts/check-deploy-sql-order.sh +2 -115
  97. package/scripts/check-mcp-compatibility.ts +14 -0
  98. package/scripts/check-runtime-architecture.mjs +349 -79
  99. package/scripts/check-skill-version.ts +3 -191
  100. package/scripts/check-source-duplication.mjs +61 -0
  101. package/scripts/check-stable-baseline.ts +92 -0
  102. package/scripts/check-task-sync.sh +2 -63
  103. package/scripts/check-task-workflow.sh +2 -1000
  104. package/scripts/codex-handoff-resume.sh +2 -267
  105. package/scripts/context-contract-sync.sh +2 -514
  106. package/scripts/contract-run.ts +2 -463
  107. package/scripts/contract-worktree.sh +1 -722
  108. package/scripts/ensure-task-workflow.sh +1 -1225
  109. package/scripts/host-temporary-cloud-mcp-e2e.sh +265 -0
  110. package/scripts/inspect-project-state.ts +4 -279
  111. package/scripts/install-standalone-recovery.ts +24 -0
  112. package/scripts/lib/project-init-lib.sh +22 -46
  113. package/scripts/lib/run-forge-helper.sh +19 -0
  114. package/scripts/lib/run-forge-helper.ts +26 -0
  115. package/scripts/migrate-project-template.sh +1 -1189
  116. package/scripts/migrate-workflow-docs.ts +4 -412
  117. package/scripts/new-plan.sh +1 -180
  118. package/scripts/new-spec.sh +1 -47
  119. package/scripts/new-sprint.sh +1 -46
  120. package/scripts/plan-to-todo.sh +1 -796
  121. package/scripts/prepare-codex-handoff.sh +2 -201
  122. package/scripts/prepare-handoff.sh +1 -78
  123. package/scripts/refresh-current-status.sh +2 -467
  124. package/scripts/run-governed-gate.ts +5 -1
  125. package/scripts/select-agent-context-blocks.sh +2 -64
  126. package/scripts/ship-worktrees.sh +1 -558
  127. package/scripts/smoke-ios-physical-device.ts +4 -2
  128. package/scripts/smoke-runtime-recovery.ts +1 -35
  129. package/scripts/smoke-schedule-engine.ts +1 -20
  130. package/scripts/sprint-backlog.sh +1 -834
  131. package/scripts/stage-runtime-release.ts +2 -1
  132. package/scripts/summarize-failures.sh +2 -123
  133. package/scripts/switch-plan.sh +1 -150
  134. package/scripts/sync-brain-docs.sh +2 -379
  135. package/scripts/sync-generated-authority.mjs +175 -0
  136. package/scripts/verify-contract.sh +2 -703
  137. package/scripts/verify-forge-runtime.sh +0 -1
  138. package/scripts/verify-sprint.sh +1 -677
  139. package/scripts/workflow-contract.ts +4 -205
  140. package/scripts/workstream-sync.sh +2 -261
  141. package/src/cli/agent-jobs/executor-health.ts +1 -1
  142. package/src/cli/commands/init-hook.ts +3 -3
  143. package/src/cli/commands/mcp.ts +9 -5
  144. package/src/cli/commands/plugin.ts +12 -3
  145. package/src/cli/commands/recovery.ts +25 -3
  146. package/src/cli/commands/runtime.ts +55 -3
  147. package/src/cli/commands/security.ts +12 -1
  148. package/src/cli/commands/setup-profile.ts +31 -21
  149. package/src/cli/controller/check-runner.ts +113 -5
  150. package/src/cli/controller/composite-result.ts +1 -1
  151. package/src/cli/controller/context/focus.ts +51 -0
  152. package/src/cli/controller/context/instruction-context.ts +114 -0
  153. package/src/cli/controller/context/known-paths.ts +76 -0
  154. package/src/cli/controller/context/query-planning.ts +110 -0
  155. package/src/cli/controller/context/rule-resolution.ts +532 -0
  156. package/src/cli/controller/context/source-materializer.ts +278 -0
  157. package/src/cli/controller/context/structural.ts +16 -0
  158. package/src/cli/controller/context/types.ts +286 -0
  159. package/src/cli/controller/context-pack.ts +828 -487
  160. package/src/cli/controller/launch-agents.ts +77 -2
  161. package/src/cli/controller/operational-plan.ts +2 -2
  162. package/src/cli/controller/work-mode.ts +6 -4
  163. package/src/cli/editing/edit-session.ts +60 -7
  164. package/src/cli/github/contracts.ts +16 -0
  165. package/src/cli/github/github.ts +135 -16
  166. package/src/cli/github/session.ts +2 -1
  167. package/src/cli/installer/managed-entries.ts +15 -1
  168. package/src/cli/local-bridge/console-automations.ts +54 -78
  169. package/src/cli/local-bridge/console-view-models.ts +1 -35
  170. package/src/cli/local-bridge/facade-api.ts +37 -264
  171. package/src/cli/local-bridge/frontend/src/App.tsx +3 -3
  172. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +23 -13
  173. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +37 -4
  174. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +6 -4
  175. package/src/cli/local-bridge/frontend/src/lib/api.ts +1 -6
  176. package/src/cli/local-bridge/frontend/src/lib/routes.ts +1 -1
  177. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +2 -2
  178. package/src/cli/local-bridge/frontend/src/styles.css +1 -1
  179. package/src/cli/local-bridge/frontend/src/types.ts +5 -8
  180. package/src/cli/local-bridge/job-store.ts +1 -490
  181. package/src/cli/local-bridge/server.ts +2 -515
  182. package/src/cli/local-bridge/ui-dist/app.css +1 -1
  183. package/src/cli/local-bridge/ui-dist/app.js +3703 -3757
  184. package/src/cli/mcp/auth.ts +5 -5
  185. package/src/cli/mcp/instructions.ts +3 -2
  186. package/src/cli/mcp/legacy-tool-service.ts +10 -222
  187. package/src/cli/mcp/multi-repository.ts +16 -5
  188. package/src/cli/mcp/oauth.ts +175 -26
  189. package/src/cli/mcp/post-finalize-work-attribution.ts +150 -0
  190. package/src/cli/mcp/repository-tools.ts +282 -146
  191. package/src/cli/mcp/server.ts +586 -116
  192. package/src/cli/mcp/tool-capability-cache.ts +1 -1
  193. package/src/cli/mcp/tool-contract.ts +14 -0
  194. package/src/cli/mcp/toolset-selection.ts +1 -1
  195. package/src/cli/mcp/toolset.ts +44 -7
  196. package/src/cli/mcp/transports/http.ts +124 -14
  197. package/src/cli/mcp/transports/session-registry.ts +43 -5
  198. package/src/cli/mcp/types.ts +3 -3
  199. package/src/cli/repositories/command-classifier.ts +103 -21
  200. package/src/cli/repositories/command-executor.ts +78 -526
  201. package/src/cli/repositories/command-process.ts +108 -0
  202. package/src/cli/repositories/command-scope.ts +99 -41
  203. package/src/cli/repositories/controller-home.ts +7 -8
  204. package/src/cli/repositories/git-command-executor.ts +2 -0
  205. package/src/cli/repositories/locks.ts +53 -16
  206. package/src/cli/repositories/repository-snapshot.ts +124 -0
  207. package/src/cli/repositories/selected-path-actions.ts +17 -9
  208. package/src/cli/repositories/structured-git.ts +118 -6
  209. package/src/cli/repository/inspector.ts +563 -65
  210. package/src/cli/repository/session-cache.ts +58 -17
  211. package/src/cli/v81-entry.ts +1 -4
  212. package/src/effects/fs-transaction.ts +85 -17
  213. package/src/runtime/context/codegraph-read-provider.ts +233 -2
  214. package/src/runtime/context/codegraph-sidecar.cjs +74 -40
  215. package/src/runtime/context/generic-lsp-provider.ts +355 -0
  216. package/src/runtime/context/lsp-client.ts +283 -0
  217. package/src/runtime/context/semantic-navigation-contract.ts +61 -0
  218. package/src/runtime/context/semantic-navigation.ts +223 -0
  219. package/src/runtime/context/swift-navigation.ts +565 -0
  220. package/src/runtime/context/typescript-navigation.ts +226 -0
  221. package/src/runtime/control-plane/dispatch-priority.ts +28 -0
  222. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +48 -16
  223. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +86 -24
  224. package/src/runtime/control-plane/execution/repository-work-attribution.ts +106 -0
  225. package/src/runtime/control-plane/execution/retained-work-resume.ts +203 -0
  226. package/src/runtime/control-plane/execution/session-store.ts +18 -0
  227. package/src/runtime/control-plane/execution/verification-evidence.ts +58 -3
  228. package/src/runtime/control-plane/execution/work-completion-authority.ts +58 -0
  229. package/src/runtime/control-plane/execution/work-evidence-policy.ts +200 -0
  230. package/src/runtime/control-plane/execution/work-execution-support.ts +386 -0
  231. package/src/runtime/control-plane/execution/work-finalization-service.ts +1913 -0
  232. package/src/runtime/control-plane/execution/work-handle-authority.ts +96 -0
  233. package/src/runtime/control-plane/execution/work-handle-store.ts +27 -2
  234. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +258 -0
  235. package/src/runtime/control-plane/execution/work-operation-service.ts +468 -0
  236. package/src/runtime/control-plane/execution/work-path-scope.ts +37 -0
  237. package/src/runtime/control-plane/execution/work-preparation-service.ts +479 -0
  238. package/src/runtime/control-plane/execution/work-process-evidence.ts +129 -0
  239. package/src/runtime/control-plane/execution/work-remote-delivery.ts +215 -0
  240. package/src/runtime/control-plane/execution/work-task-receipt.ts +22 -18
  241. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +156 -11
  242. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +22 -14
  243. package/src/runtime/control-plane/execution/work-verification-context.ts +56 -0
  244. package/src/runtime/control-plane/execution/work-verification-service.ts +388 -0
  245. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +90 -9
  246. package/src/runtime/control-plane/facade/capability-registry.ts +129 -25
  247. package/src/runtime/control-plane/facade/controller-round-relay.ts +1118 -0
  248. package/src/runtime/control-plane/facade/controller-session-store.ts +302 -12
  249. package/src/runtime/control-plane/facade/goal-workloop-access.ts +17 -1
  250. package/src/runtime/control-plane/facade/goal-workloop.ts +928 -190
  251. package/src/runtime/control-plane/facade/index.ts +3 -0
  252. package/src/runtime/control-plane/facade/plan-contract-store.ts +275 -42
  253. package/src/runtime/control-plane/facade/repository-work-admission.ts +147 -0
  254. package/src/runtime/control-plane/facade/requirement-authority.ts +83 -0
  255. package/src/runtime/control-plane/facade/semantic-admission.ts +205 -0
  256. package/src/runtime/control-plane/facade/suggested-actions.ts +5 -1
  257. package/src/runtime/control-plane/facade/types.ts +90 -10
  258. package/src/runtime/control-plane/facade/work-contract-store.ts +157 -261
  259. package/src/runtime/control-plane/facade/work-state-machine.ts +250 -0
  260. package/src/runtime/control-plane/generated-cache-retention.ts +271 -0
  261. package/src/runtime/control-plane/global-scheduler/config.ts +44 -0
  262. package/src/runtime/control-plane/global-scheduler/dispatch-capacity.ts +80 -0
  263. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +46 -0
  264. package/src/runtime/control-plane/global-scheduler/maintenance.ts +152 -0
  265. package/src/runtime/control-plane/global-scheduler/projection-refresh.ts +84 -0
  266. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -3
  267. package/src/runtime/control-plane/global-scheduler/scheduler.ts +278 -543
  268. package/src/runtime/control-plane/global-scheduler/source-scan.ts +59 -0
  269. package/src/runtime/control-plane/global-scheduler/state.ts +88 -0
  270. package/src/runtime/control-plane/global-scheduler/worker-attachment.ts +57 -0
  271. package/src/runtime/control-plane/global-scheduler/worker-exit-decision.ts +38 -0
  272. package/src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts +175 -0
  273. package/src/runtime/control-plane/global-scheduler/worker-launch.ts +111 -0
  274. package/src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts +64 -0
  275. package/src/runtime/control-plane/global-scheduler/worker-lifecycle.ts +150 -0
  276. package/src/runtime/control-plane/global-scheduler/worker-process.ts +119 -0
  277. package/src/runtime/control-plane/global-scheduler/worker-stderr.ts +60 -0
  278. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +63 -0
  279. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +365 -117
  280. package/src/runtime/control-plane/launcher/launch-reservation-store.ts +89 -0
  281. package/src/runtime/control-plane/launcher/thin-launcher.ts +244 -11
  282. package/src/runtime/control-plane/persistence/controller-home-migration.ts +487 -0
  283. package/src/runtime/control-plane/persistence/requirement-store.ts +0 -12
  284. package/src/runtime/control-plane/persistence/sqlite-store.ts +33 -2
  285. package/src/runtime/control-plane/release-retention.ts +62 -2
  286. package/src/runtime/control-plane/repo-actor/registry.ts +4 -2
  287. package/src/runtime/control-plane/routing/route-policy.ts +24 -21
  288. package/src/runtime/control-plane/routing/workspace-admission.ts +70 -0
  289. package/src/runtime/control-plane/runtime-status-client.ts +0 -2
  290. package/src/runtime/diagnostics/mcp-timing.ts +13 -0
  291. package/src/runtime/diagnostics/mcp-transport-benchmark.ts +129 -0
  292. package/src/runtime/diagnostics/performance.ts +24 -1
  293. package/src/runtime/evidence/event-ledger.ts +1 -1
  294. package/src/runtime/evidence/process-check-execution.ts +18 -0
  295. package/src/runtime/execution/jobs/child-reference.ts +6 -2
  296. package/src/runtime/execution/jobs/store.ts +58 -4
  297. package/src/runtime/execution/jobs/types.ts +1 -1
  298. package/src/runtime/execution/managed-workspace.ts +203 -1
  299. package/src/runtime/execution/process-runtime/check-facade.ts +51 -4
  300. package/src/runtime/execution/process-runtime/check-result.ts +88 -0
  301. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +7 -1
  302. package/src/runtime/execution/process-runtime/check-scheduling.ts +114 -0
  303. package/src/runtime/execution/process-runtime/command-facade.ts +367 -40
  304. package/src/runtime/execution/process-runtime/gc.ts +38 -6
  305. package/src/runtime/execution/process-runtime/lightweight-managed.ts +1201 -0
  306. package/src/runtime/execution/process-runtime/persisted-check.ts +51 -5
  307. package/src/runtime/execution/process-runtime/resource-claims.ts +10 -6
  308. package/src/runtime/execution/process-runtime/runtime.ts +53 -3
  309. package/src/runtime/execution/process-runtime/store.ts +1 -0
  310. package/src/runtime/execution/process-runtime/types.ts +4 -12
  311. package/src/runtime/execution/thin-harness/async-process.ts +12 -2
  312. package/src/runtime/execution/thin-harness/search-worker.ts +54 -5
  313. package/src/runtime/execution/work-activity.ts +21 -0
  314. package/src/runtime/execution/workers/executor.ts +18 -61
  315. package/src/runtime/gateway/mcp/execution-tools.ts +35 -1852
  316. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +61 -0
  317. package/src/runtime/gateway/mcp/process-tools.ts +83 -37
  318. package/src/runtime/gateway/mcp/router.ts +186 -84
  319. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +565 -0
  320. package/src/runtime/gateway/mcp/runtime-tools.ts +2378 -1947
  321. package/src/runtime/plugins/app-store-connect-adapter.ts +216 -47
  322. package/src/runtime/plugins/browser-adapter.ts +2662 -829
  323. package/src/runtime/plugins/browser-automation-service.ts +10 -0
  324. package/src/runtime/plugins/browser-handoff-host.ts +2 -25
  325. package/src/runtime/plugins/browser-handoff.ts +110 -5
  326. package/src/runtime/plugins/browser-macos-bridge.ts +701 -63
  327. package/src/runtime/plugins/browser-manifest-surface.ts +603 -0
  328. package/src/runtime/plugins/browser-native-session-service.ts +222 -0
  329. package/src/runtime/plugins/browser-node-bridge.ts +6 -34
  330. package/src/runtime/plugins/browser-provider-registry.ts +109 -0
  331. package/src/runtime/plugins/browser-runtime-contract.ts +154 -0
  332. package/src/runtime/plugins/browser-runtime.ts +193 -0
  333. package/src/runtime/plugins/browser-session-authority.ts +332 -0
  334. package/src/runtime/plugins/browser-session-store.ts +121 -0
  335. package/src/runtime/plugins/browser-session-types.ts +98 -0
  336. package/src/runtime/plugins/capability-authorization-grants.ts +354 -0
  337. package/src/runtime/plugins/desktop-operator-registration.ts +10 -4
  338. package/src/runtime/plugins/external-adapter.ts +358 -3
  339. package/src/runtime/plugins/external-unix-socket.ts +7 -1
  340. package/src/runtime/plugins/first-party-registry.ts +2 -0
  341. package/src/runtime/plugins/github-adapter.ts +125 -0
  342. package/src/runtime/plugins/ios/agent-device-provider.ts +1 -1
  343. package/src/runtime/plugins/ios/agent-device-typed-provider.ts +52 -9
  344. package/src/runtime/plugins/ios/remote-xpc-hid.ts +1171 -0
  345. package/src/runtime/plugins/ios-adapter.ts +106 -16
  346. package/src/runtime/plugins/ios-agent-device.ts +234 -64
  347. package/src/runtime/plugins/ios-physical-device.ts +1143 -392
  348. package/src/runtime/plugins/lightweight-action.ts +153 -0
  349. package/src/runtime/plugins/local-system-adapter.ts +123 -6
  350. package/src/runtime/plugins/macos-capability-broker.ts +47 -9
  351. package/src/runtime/plugins/plugin-action-sidecar.ts +59 -0
  352. package/src/runtime/plugins/plugin-management-adapter.ts +49 -8
  353. package/src/runtime/plugins/resend-adapter.ts +1 -1
  354. package/src/runtime/plugins/store.ts +330 -33
  355. package/src/runtime/plugins/types.ts +38 -3
  356. package/src/runtime/plugins/xiaohongshu-publish.ts +515 -0
  357. package/src/runtime/projections/git-status-sampler.ts +16 -16
  358. package/src/runtime/projections/materialized-view.ts +28 -10
  359. package/src/runtime/recovery/maintenance-executor.ts +426 -25
  360. package/src/runtime/root/mcp-transport.ts +180 -10
  361. package/src/runtime/root/package-connector-service.ts +230 -10
  362. package/src/runtime/root/package-runtime-release.ts +143 -17
  363. package/src/runtime/root/package-runtime-service.ts +461 -22
  364. package/src/runtime/root/release-manifest.ts +144 -18
  365. package/src/runtime/root/release-materialize.ts +125 -32
  366. package/src/runtime/root/release-store.ts +48 -11
  367. package/src/runtime/root/runtime.ts +23 -5
  368. package/src/runtime/root/service.ts +100 -29
  369. package/src/runtime/root/types.ts +12 -0
  370. package/src/runtime/safe-tooling/ios-development.ts +321 -63
  371. package/src/runtime/shared/trusted-executable.ts +62 -0
  372. package/src/runtime/shared/trusted-node-executable.ts +48 -0
  373. package/src/runtime/standalone-recovery/core.ts +1079 -240
  374. package/src/runtime/standalone-recovery/entry.ts +100 -24
  375. package/src/runtime/standalone-recovery/installer.ts +20 -4
  376. package/src/runtime/standalone-recovery/service-labels.ts +2 -0
  377. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +160 -0
  378. package/src/runtime/workflow/schedules/browser-probe.ts +81 -3
  379. package/src/runtime/workflow/schedules/engine.ts +364 -202
  380. package/src/runtime/workflow/schedules/github-issue-watch.ts +158 -0
  381. package/src/runtime/workflow/schedules/settlement.ts +64 -17
  382. package/src/runtime/workflow/schedules/store.ts +209 -19
  383. package/src/runtime/workflow/schedules/types.ts +2 -4
  384. package/src/runtime/workflow/schedules/work-continuation.ts +26 -13
  385. package/src/testing/test-governance.ts +8 -40
  386. package/assets/reference-configs/heartbeat-triage.md +0 -57
  387. package/assets/templates/helpers/harness-trace-grade.sh +0 -150
  388. package/assets/templates/helpers/heartbeat-triage.sh +0 -361
  389. package/assets/templates/helpers/maintenance-triage.sh +0 -167
  390. package/docs/architecture/current/approved-target-architecture.zh-CN.md +0 -1501
  391. package/docs/architecture/current/architecture-invariants.md +0 -331
  392. package/docs/architecture/current/automation-and-schedule-engine.md +0 -459
  393. package/docs/architecture/current/codegraph-context-provider.md +0 -238
  394. package/docs/architecture/current/control-plane-authority-inventory.md +0 -94
  395. package/docs/architecture/current/controller-repository-decoupling.md +0 -148
  396. package/docs/architecture/current/dispatch-and-agent-strategy.md +0 -373
  397. package/docs/architecture/current/entity-model.md +0 -612
  398. package/docs/architecture/current/external-plugin-governance.md +0 -396
  399. package/docs/architecture/current/failure-recovery.md +0 -447
  400. package/docs/architecture/current/governance.md +0 -213
  401. package/docs/architecture/current/human-interaction-plane.md +0 -87
  402. package/docs/architecture/current/implementation-status.md +0 -128
  403. package/docs/architecture/current/job-and-run-lifecycle.md +0 -413
  404. package/docs/architecture/current/legacy-governance.md +0 -58
  405. package/docs/architecture/current/local-workspace-target-grants.md +0 -70
  406. package/docs/architecture/current/migration-roadmap.md +0 -105
  407. package/docs/architecture/current/multi-repository-execution.md +0 -371
  408. package/docs/architecture/current/operations-runbook.md +0 -45
  409. package/docs/architecture/current/peer-supercontroller-runtime.md +0 -32
  410. package/docs/architecture/current/personal-assistant-plugin-baseline.md +0 -206
  411. package/docs/architecture/current/repository-access-modes.md +0 -102
  412. package/docs/architecture/current/route-policy.md +0 -15
  413. package/docs/architecture/current/route-session-concurrency.md +0 -85
  414. package/docs/architecture/current/runtime-architecture-simplification.md +0 -214
  415. package/docs/architecture/current/runtime-directory-map.md +0 -49
  416. package/docs/architecture/current/runtime-health-and-resource-lifecycle.md +0 -85
  417. package/docs/architecture/current/scheduler-and-resource-claims.md +0 -422
  418. package/docs/architecture/current/session-aware-execution-and-authorization.md +0 -77
  419. package/docs/architecture/current/system-overview.md +0 -169
  420. package/docs/architecture/current/target-requirements-traceability.md +0 -202
  421. package/docs/architecture/current/thin-harness-governance-policy.md +0 -32
  422. package/docs/architecture/current/thin-harness-v1.md +0 -321
  423. package/docs/architecture/current/verification-and-release-gates.md +0 -391
  424. package/docs/forge-autonomous-goal-loop.md +0 -9
  425. package/docs/forge-provider-configuration.md +0 -7
  426. package/docs/operations/chatgpt-personal-assistant-runtime.md +0 -93
  427. package/docs/operations/gmail-assistant-routines.md +0 -186
  428. package/docs/operations/personal-assistant-operator-guide.md +0 -61
  429. package/docs/operations/provider-configuration.md +0 -31
  430. package/scripts/harness-trace-grade.sh +0 -150
  431. package/scripts/heartbeat-triage.sh +0 -361
  432. package/scripts/maintenance-triage.sh +0 -167
  433. package/src/cli/local-bridge/frontend/src/features/settings/SettingsView.tsx +0 -2
  434. package/src/cli/repositories/goal-registry.ts +0 -239
  435. package/src/runtime/assistant/action-proposals.ts +0 -279
  436. package/src/runtime/assistant/intent.ts +0 -395
  437. package/src/runtime/assistant/model-provider.ts +0 -460
  438. package/src/runtime/assistant/openapi.ts +0 -223
  439. package/src/runtime/assistant/policy.ts +0 -89
  440. package/src/runtime/assistant/readiness.ts +0 -258
  441. package/src/runtime/assistant/routine-runtime.ts +0 -477
  442. package/src/runtime/assistant/schedule-binding.ts +0 -171
  443. package/src/runtime/assistant/standing-grants.ts +0 -375
  444. package/src/runtime/assistant/store.ts +0 -243
  445. package/src/runtime/assistant/types.ts +0 -135
  446. package/src/runtime/control-plane/goal-loop/config-facade.ts +0 -700
  447. package/src/runtime/control-plane/goal-loop/config-store.ts +0 -570
  448. package/src/runtime/control-plane/goal-loop/config-types.ts +0 -213
  449. package/src/runtime/control-plane/goal-loop/executor-router.ts +0 -109
  450. package/src/runtime/control-plane/goal-loop/failure-taxonomy.ts +0 -149
  451. package/src/runtime/control-plane/goal-loop/goal-contract-store.ts +0 -304
  452. package/src/runtime/control-plane/goal-loop/goal-loop-engine.ts +0 -1001
  453. package/src/runtime/control-plane/goal-loop/handoff-packet.ts +0 -160
  454. package/src/runtime/control-plane/goal-loop/index.ts +0 -13
  455. package/src/runtime/control-plane/goal-loop/local-tools.ts +0 -290
  456. package/src/runtime/control-plane/goal-loop/policy-gates.ts +0 -203
  457. package/src/runtime/control-plane/goal-loop/provider-dispatch.ts +0 -93
  458. package/src/runtime/control-plane/goal-loop/provider-registry.ts +0 -545
  459. package/src/runtime/control-plane/goal-loop/types.ts +0 -378
  460. package/src/runtime/control-plane/startup-recovery.ts +0 -198
  461. package/src/runtime/gateway/mcp/resource-policy.ts +0 -186
  462. package/src/runtime/personal-assistant/gmail-triage-manager.ts +0 -231
  463. package/src/runtime/personal-assistant/reporting-runtime.ts +0 -344
  464. package/src/runtime/personal-assistant/triage-runtime.ts +0 -748
  465. package/src/runtime/workflow/findings/store.ts +0 -204
  466. package/src/runtime/workflow/findings/types.ts +0 -58
  467. package/src/runtime/workflow/portfolio/engine.ts +0 -20
  468. package/src/runtime/workflow/portfolio/store.ts +0 -185
  469. package/src/runtime/workflow/portfolio/types.ts +0 -29
@@ -1,396 +0,0 @@
1
- # External Plugin and Provider Governance
2
-
3
- Status: architecture-reviewed for phased implementation
4
- Source baseline: `9269defb536a79d78d1630d95736eaaf9fa9be56`
5
- Scope: Forge plugin control plane, external provider integration, sibling repository governance, and open-source release boundaries
6
-
7
- ## Problem
8
-
9
- Forge has a strong first-party plugin contract but still resolves adapters from a static in-process map:
10
-
11
- ```text
12
- FIRST_PARTY_PLUGIN_ADAPTERS
13
- -> PLUGIN_ADAPTERS
14
- -> AssistantPluginManifest
15
- -> plugin_action_execute
16
- ```
17
-
18
- That model works for JavaScript/TypeScript adapters shipped with Forge, but it does not support independently released native or product-scale providers without compiling their implementation into Forge.
19
-
20
- Two existing sibling repositories make the missing boundary concrete:
21
-
22
- - `repo-harness-desktop-operator`: a clean independent Swift/macOS service with Accessibility observation, semantic UI actions, screenshots, batch execution, sessions, and Unix-socket JSONL transport. Its architecture intentionally expects an External Plugin Broker that Forge does not yet implement.
23
- - `repo-harness-design`: an independent design asset/product boundary with deterministic JSON assets, CLI/local API, validation, and an intended future controller adapter.
24
-
25
- Keeping these implementations independent is desirable. Keeping `repo-harness-*` product names, incompatible registration descriptors, duplicated static adapters, and disconnected runtime integration is not.
26
-
27
- ## Goals
28
-
29
- 1. Keep Forge core responsible for plugin policy, lifecycle, registration, health projection, action risk/confirmation, resource claims, execution receipts, and host-facing facade integration.
30
- 2. Allow independently released providers to implement platform-native or product-specific behavior without importing Controller private source.
31
- 3. Preserve the current first-party adapter path while introducing a deterministic external-provider path.
32
- 4. Make Desktop Operator the first end-to-end external provider acceptance target and Design the second.
33
- 5. Standardize product repository naming and public identity before open-source publication.
34
- 6. Make legacy Repo Harness/Matea identifiers explicit migration inputs only, never new authorities.
35
- 7. Define one measurable completeness standard for every plugin, whether in-process or external.
36
-
37
- ## Non-goals
38
-
39
- - Do not dynamically download arbitrary plugins from ChatGPT requests.
40
- - Do not let a model supply arbitrary executable paths, sockets, shell commands, or registration files.
41
- - Do not create another Forge Runtime, scheduler, daemon authority, or rollout slot.
42
- - Do not move all external provider source into the Forge repository.
43
- - Do not delete legacy runtime/worktree/recovery directories until their authority and unique-state status is proven safe.
44
- - Do not rename the current GitHub `moretea-labs/matea` remote until an authenticated repository-rename operation is available and the target `moretea-labs/forge` identity can be proven.
45
-
46
- ## Current facts
47
-
48
- ### Forge plugin contract
49
-
50
- `AssistantPluginManifest` already provides the host contract required by the broker:
51
-
52
- - stable `pluginId`, provider, display name, and plugin version;
53
- - derived single source-of-truth declaration;
54
- - lifecycle and health;
55
- - permission scopes;
56
- - capabilities;
57
- - typed actions;
58
- - read-only/write/destructive risk;
59
- - confirmation requirements;
60
- - resource claims;
61
- - bounded arguments schema.
62
-
63
- The missing piece is adapter discovery/transport, not a replacement manifest model.
64
-
65
- ### Current authority namespaces
66
-
67
- Current source uses Forge authorities for active configuration:
68
-
69
- - App Store Connect: `.forge/plugins/app-store-connect.json`, `FORGE_ASC_*`;
70
- - Browser: `.forge/plugins/browser.json`, `.forge/browser/`;
71
- - GitHub: `.forge/plugins/github.json` plus Repository Registry GitHub identity;
72
- - Gmail/Calendar/Tasks: `.forge/plugins/...`, `FORGE_*_ACCESS_TOKEN`;
73
- - iOS: `.forge/plugins/ios.json`, `FORGE_IOS_DEVICE_RUNNER_URL` plus local Xcode/CoreDevice/agent-device facts;
74
- - Desktop Operator: trusted external registration under Controller Home plus the stable signed macOS app identity;
75
- - Local System: Controller Home `system/local-system`.
76
-
77
- App Store Connect intentionally retains `.repo-harness/plugins/app-store-connect.json` as a named `legacy-read-fallback`. This is an acceptable migration pattern and must not become a new write authority.
78
-
79
- ### Runtime integration gap
80
-
81
- `src/runtime/plugins/store.ts` currently initializes one static `PLUGIN_ADAPTERS` map from `createFirstPartyPluginAdapterMap()`. External registration descriptors are not loaded.
82
-
83
- ## Decision: Forge core + independently released providers
84
-
85
- Use the following ownership split:
86
-
87
- ```text
88
- ChatGPT / Local UI
89
- |
90
- Forge facade + plugin policy
91
- |
92
- Assistant Plugin Store
93
- |
94
- Plugin Adapter Resolver
95
- +---+-----------------------+
96
- | |
97
- Built-in adapters External Plugin Broker
98
- | |
99
- TS/JS implementation trusted registration
100
- |
101
- typed transport adapter
102
- |
103
- external provider process/service
104
- ```
105
-
106
- Forge remains the policy and completion authority. External providers only perform the bounded domain operation described by their registered contract.
107
-
108
- ## Repository naming policy
109
-
110
- Current and future product repositories use the Forge namespace:
111
-
112
- - core: `forge`
113
- - macOS desktop provider: `forge-desktop-operator`
114
- - design product/provider: `forge-design`
115
- - future independent providers: `forge-<provider>`
116
-
117
- `repo-harness-*` names are legacy identities. They may temporarily survive as filesystem symlinks, Git redirects, migration aliases, or historical/legal references, but must not be the canonical name of a newly published Forge product.
118
-
119
- Sibling provider repositories remain peers of the Forge repository rather than children of `/forge/projects`:
120
-
121
- ```text
122
- DevProjects/
123
- forge/
124
- forge-desktop-operator/
125
- forge-design/
126
- ```
127
-
128
- This gives each provider a clean release/history/dependency boundary and avoids coupling its build system to Forge.
129
-
130
- ## External registration authority
131
-
132
- External providers are not discovered by scanning arbitrary folders.
133
-
134
- Canonical registration state lives under Controller Home, for example:
135
-
136
- ```text
137
- <controller-home>/system/plugins/external/
138
- registrations/<plugin-id>.json
139
- index.json
140
- ```
141
-
142
- A registration is written only by a trusted installation/configuration workflow. ChatGPT can read registered providers and execute declared actions but cannot choose an unregistered executable/socket.
143
-
144
- Provider repositories may ship an install-time descriptor template, but that repository file is not runtime authority until installation validates and copies its bounded registration into Controller Home.
145
-
146
- ## Registration schema v1
147
-
148
- A registration must include:
149
-
150
- - schema version;
151
- - plugin ID and display name;
152
- - provider ID/version;
153
- - plugin contract version;
154
- - scope: controller or repository;
155
- - transport kind;
156
- - stable installed identity;
157
- - expected protocol version/range;
158
- - manifest acquisition method;
159
- - health method;
160
- - lifecycle ownership;
161
- - state ownership;
162
- - registration revision/fingerprint;
163
- - optional legacy migration identities.
164
-
165
- Transport v1 supports:
166
-
167
- 1. `unix_socket_jsonl` for long-lived native providers such as Desktop Operator;
168
- 2. `managed_cli_json` for trusted bounded one-shot product providers such as Forge Design and Personal Knowledge Assistant;
169
- 3. `localhost_http_json` remains deferred until a provider genuinely needs it.
170
-
171
- Do not add a generic shell transport.
172
-
173
- ## Broker responsibilities
174
-
175
- The External Plugin Broker must:
176
-
177
- 1. load only trusted Controller Home registrations;
178
- 2. validate registration schema and protocol compatibility;
179
- 3. derive an `AssistantPluginManifest` from the provider manifest plus Forge policy;
180
- 4. verify that provider action IDs/capabilities are stable and internally consistent;
181
- 5. map action risk, confirmation, and resource claims into the existing Plugin Store execution path;
182
- 6. use bounded request/response sizes and deadlines;
183
- 7. support cancellation where the provider protocol supports it;
184
- 8. enforce idempotency/request IDs at the Forge layer regardless of provider implementation;
185
- 9. redact errors and never return transport secrets/absolute private internals by default;
186
- 10. fail closed on missing/mismatched provider identity;
187
- 11. project health truthfully as ready/degraded/error rather than silently falling back to a weaker implementation;
188
- 12. retain Forge Work/evidence receipts as the canonical execution record.
189
-
190
- ## Desktop provider decision
191
-
192
- The independent Swift Desktop Operator becomes the primary `desktop` capability provider once broker acceptance is complete.
193
-
194
- Do not duplicate the full Accessibility/session/screenshot/batch implementation in Forge TypeScript.
195
-
196
- The current bundled `desktop` helper remains a bounded bootstrap/fallback implementation during migration. The transition is explicit:
197
-
198
- ```text
199
- Phase 0: bundled desktop helper is canonical
200
- Phase 1: external Desktop Operator can register and report health/manifests
201
- Phase 2: selected desktop actions route to external provider
202
- Phase 3: full desktop action surface routes externally; bundled helper retained only as documented fallback or retired
203
- ```
204
-
205
- The provider must expose, at minimum:
206
-
207
- - status/doctor;
208
- - session open/close;
209
- - application/window observation;
210
- - semantic element press;
211
- - typed text entry;
212
- - keyboard shortcuts;
213
- - URL opening;
214
- - screenshot capture;
215
- - bounded batch execution.
216
-
217
- macOS TCC trust remains attached to the stable installed user-service identity. Forge does not attempt per-click TCC bypasses.
218
-
219
- ## Design provider decision
220
-
221
- `forge-design` remains a separate product/repository. The public `design` provider is installable through the official pinned catalog and uses `managed_cli_json` without becoming Controller source. Its deterministic design assets and CLI/API are product authority.
222
-
223
- Forge integration should expose bounded design context/read/validate/edit/render actions through the broker or a thin repository adapter, not duplicate design storage or rendering logic in Forge.
224
-
225
- Migration of `.design-harness` to a Forge-branded asset directory is a product compatibility decision and must have an explicit migration/read-fallback strategy; do not mass-rename existing repositories without it.
226
-
227
- ## Namespace migration rules
228
-
229
- ### Current authorities
230
-
231
- New writes use only Forge namespaces:
232
-
233
- - `.forge/...`
234
- - `FORGE_*`
235
- - `~/Library/Application Support/forge/...`
236
- - `~/Library/Caches/forge/...`
237
- - `forge-*` product/repository names.
238
-
239
- ### Legacy fallbacks
240
-
241
- A legacy Repo Harness/Matea identity may remain only when all are true:
242
-
243
- 1. the code labels it as legacy/migration compatibility;
244
- 2. it is read-only unless the migration operation itself is explicitly running;
245
- 3. the current Forge authority is preferred;
246
- 4. health/status can report its use;
247
- 5. tests cover migration precedence;
248
- 6. there is a documented retirement condition.
249
-
250
- Never add a new compatibility alias without a migration reason.
251
-
252
- ## Plugin completeness standard
253
-
254
- Every first-party or external plugin receives a matrix with these gates:
255
-
256
- | Gate | Required evidence |
257
- | --- | --- |
258
- | Identity | Forge-branded stable ID/display name/version |
259
- | Authority | one current source of truth; legacy fallbacks explicitly named |
260
- | Configuration | configure/read-status path; missing external config reported as pending/degraded |
261
- | Health | real probe; ready must mean executable action path is usable |
262
- | Read actions | focused unit/integration tests |
263
- | Write actions | confirmation/risk/resource-claim tests and dry-run/preview where applicable |
264
- | Idempotency | duplicate request ID cannot execute twice |
265
- | Cancellation/timeout | bounded failure behavior |
266
- | Secrets | never returned/persisted in raw form |
267
- | E2E | at least one real local/remote acceptance path when external dependency is available |
268
- | Fault tests | unavailable/malformed/timeout/protocol mismatch paths |
269
- | Documentation | current configuration, permissions, troubleshooting, lifecycle |
270
- | Open-source surface | no personal path, raw credential, stale product identity, or runtime artifact |
271
-
272
- A plugin blocked only by credentials/device/service availability is marked `configuration_pending`/degraded with a clear remediation. It is not considered an implementation failure when its code path and tests are complete.
273
-
274
- ## Test strategy
275
-
276
- Add a plugin-governance test layer that checks invariants across all registered first-party adapters and external registrations:
277
-
278
- - unique plugin IDs;
279
- - canonical Forge display identities where Forge-branded;
280
- - action IDs unique per plugin;
281
- - capability actions all exist;
282
- - action scopes declared by permissions;
283
- - readOnly/risk consistency;
284
- - destructive actions require strong confirmation;
285
- - no external provider registration uses arbitrary shell execution;
286
- - current authority does not write legacy namespaces;
287
- - manifests remain bounded and serializable.
288
-
289
- Add fault/property-style tests for broker registrations and transports:
290
-
291
- - malformed registration rejected;
292
- - protocol version mismatch rejected;
293
- - socket absent => degraded/unavailable, not fallback success;
294
- - truncated/oversized response rejected;
295
- - duplicate request ID executes once;
296
- - timeout/cancellation closes transport and leaves no live Work lease;
297
- - provider crash cannot mark Work completed;
298
- - registration replacement is revision/fingerprint checked;
299
- - uninstall/disable is idempotent.
300
-
301
- ## Repository governance and migration
302
-
303
- Do not rename/delete sibling directories directly with unbounded shell commands.
304
-
305
- For each provider repository:
306
-
307
- 1. register it with Forge;
308
- 2. inspect Git status, branches, remotes, unique commits, build/test state;
309
- 3. commit internal Forge-brand migration first;
310
- 4. create/rename remote when available;
311
- 5. use a typed local project move/registry migration capability to change the filesystem path;
312
- 6. update Controller Registry and any trusted external registration atomically;
313
- 7. keep a temporary compatibility symlink only if an installed service/script still needs the old path;
314
- 8. remove the alias only after zero-reference verification.
315
-
316
- Runtime/recovery/worktree directories are governed separately and are never treated as ordinary provider repositories.
317
-
318
- ## Phase 1: broker foundation + Desktop Operator
319
-
320
- 1. Define external registration types and Controller Home store.
321
- 2. Add resolver composition: built-in adapter first by explicit provider selection, external registration path without changing host MCP tool count.
322
- 3. Implement Unix-socket JSONL broker transport with bounded request/response/deadline semantics.
323
- 4. Add external adapter that maps provider manifest/actions into `AssistantPluginManifest`.
324
- 5. Add read-only list/get health support before action execution.
325
- 6. Register Desktop Operator through a trusted test/installation registration.
326
- 7. Route a non-destructive status/observe action end-to-end.
327
- 8. Add write action policy tests for press/type/screenshot/batch without bypassing normal Forge confirmation rules.
328
- 9. Run real macOS E2E when the registered Desktop Operator build/service is available.
329
- 10. Retire the bundled Desktop helper after the external Desktop Operator is healthy; do not retain a second desktop authority.
330
-
331
- ### Phase 1 acceptance
332
-
333
- - External providers appear through existing `list_plugins/get_plugin` surfaces.
334
- - No new top-level MCP tools are required.
335
- - Missing provider service yields truthful degraded health.
336
- - Broker cannot execute an unregistered provider path.
337
- - Desktop status/observe can run through the external transport.
338
- - action policy remains owned by Forge.
339
- - provider request IDs are idempotent and bounded.
340
- - Controller restart rebuilds external provider projection from Controller Home authority.
341
- - no second Forge Runtime is introduced.
342
-
343
- ## Phase 2: repository/product migration
344
-
345
- ### Desktop Operator
346
-
347
- Target identity:
348
-
349
- - repository/directory: `forge-desktop-operator`
350
- - product name: `Forge Desktop Operator`
351
- - current state root: `~/Library/Application Support/forge/desktop-operator`
352
- - current cache/socket root: `~/Library/Caches/forge/...`
353
- - descriptor/schema names: Forge-branded
354
-
355
- Legacy state/descriptor paths are migrated explicitly. Installed TCC identity must remain stable across migration; path/signature changes require a reviewed migration plan before changing the live service.
356
-
357
- ### Design
358
-
359
- Target identity:
360
-
361
- - repository/directory: `forge-design`
362
- - product name: `Forge Design`
363
-
364
- Preserve its independent Git/product boundary. Integrate only through stable contract/API surfaces.
365
-
366
- ## Phase 3: all-plugin completeness matrix
367
-
368
- Audit and close every built-in plugin:
369
-
370
- - Browser: Chrome/Vivaldi attach, ownership/reuse, DOM/native capability matrix, failure paths, real E2E.
371
- - Local System/Desktop Operator: unregistered target operations, background-safe application control, external Desktop provider, destructive-path safeguards.
372
- - iOS: simulator, agent-device, CoreDevice, physical runner configuration/E2E.
373
- - App Store Connect: auth/read/preview/write policy and remote-write guarded E2E.
374
- - GitHub: canonical Forge remote identity after repository rename; issue/project read/write acceptance.
375
- - Gmail/Calendar/Tasks: auth/config migration, read/write policy, configuration-pending semantics, connected-account E2E when configured.
376
-
377
- ## Architecture review
378
-
379
- Review result: approved for phased implementation.
380
-
381
- Reasons:
382
-
383
- - It uses the existing plugin manifest/policy model rather than inventing a second host contract.
384
- - It preserves independent native/product release boundaries where they are valuable.
385
- - It removes static-adapter coupling without enabling arbitrary plugin execution.
386
- - It aligns repository naming and state namespaces with the open-source Forge identity.
387
- - It makes external configuration gaps explicit rather than conflating them with missing functionality.
388
- - It provides a concrete first acceptance target (Desktop Operator) and a second product-scale target (Design).
389
-
390
- Rejected alternatives:
391
-
392
- 1. Move Desktop Operator and Design into the Forge monorepo: rejected because their independent native/product release boundaries are useful and coupling would increase build/release complexity.
393
- 2. Keep every external provider as an ad-hoc static adapter: rejected because it recreates Controller-private coupling and prevents independent releases.
394
- 3. Scan sibling folders for plugin descriptors: rejected because filesystem discovery is not a trusted runtime authority.
395
- 4. Generic command/executable plugin transport: rejected because arbitrary executable control is too broad and weakens policy/audit guarantees.
396
- 5. Mechanical global rename of all `.repo-harness`/Repo Harness strings: rejected because legal attribution, historical evidence, and explicit read-only migrations are distinct from current product identity.