@moretea-labs/forge 1.8.0 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (695) hide show
  1. package/AGENTS.md +73 -7
  2. package/CHANGELOG.md +34 -0
  3. package/CLAUDE.md +17 -2
  4. package/CONTRIBUTING.md +3 -2
  5. package/README.en.md +24 -3
  6. package/README.md +10 -6
  7. package/README.zh-CN.md +5 -3
  8. package/THIRD_PARTY_NOTICES.md +1 -2
  9. package/adapters/chatgpt/browser-delivery-host.ts +7 -1
  10. package/adapters/chatgpt/browser-delivery-runtime.ts +531 -56
  11. package/adapters/chatgpt/controller-binding-store.ts +101 -22
  12. package/adapters/chatgpt/controller-round-host.ts +15 -25
  13. package/adapters/chatgpt/controller-round-settlement-store.ts +58 -4
  14. package/adapters/chatgpt/provider-delivery.ts +229 -2
  15. package/adapters/chatgpt/work-conversation-binding-store.ts +99 -54
  16. package/adapters/computer/chatgpt-extension-target.ts +708 -0
  17. package/adapters/computer/chrome-extension/background.js +541 -0
  18. package/adapters/computer/chrome-extension/content.js +402 -0
  19. package/adapters/computer/chrome-extension/core.js +24 -0
  20. package/adapters/computer/chrome-extension/manifest.json +32 -0
  21. package/adapters/computer/desktop-operator-discovery.ts +11 -31
  22. package/adapters/computer/desktop-operator-provider.ts +18 -6
  23. package/adapters/computer/interaction-target-authority.ts +178 -24
  24. package/adapters/mcp/access-mode.ts +18 -39
  25. package/adapters/mcp/auth.ts +2 -7
  26. package/adapters/mcp/instructions.ts +6 -5
  27. package/adapters/mcp/multi-repository.ts +10 -47
  28. package/adapters/mcp/oauth.ts +73 -0
  29. package/adapters/mcp/paths.ts +4 -1
  30. package/adapters/mcp/runtime-gateway/bounded-result-runtime.ts +62 -0
  31. package/adapters/mcp/runtime-gateway/cognition-settlement.ts +201 -0
  32. package/adapters/mcp/runtime-gateway/context-adapter.ts +490 -113
  33. package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +83 -0
  34. package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +20 -5
  35. package/adapters/mcp/runtime-gateway/core-capability-adapter.ts +258 -0
  36. package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +10 -27
  37. package/adapters/mcp/runtime-gateway/engineering-tool-contract.ts +15 -0
  38. package/adapters/mcp/runtime-gateway/execution-tools.ts +14 -54
  39. package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
  40. package/adapters/mcp/runtime-gateway/plugin-adapter.ts +132 -47
  41. package/adapters/mcp/runtime-gateway/process-tools.ts +173 -23
  42. package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +16 -4
  43. package/adapters/mcp/runtime-gateway/recovery-adapter.ts +69 -52
  44. package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +4 -35
  45. package/adapters/mcp/runtime-gateway/result-adapter.ts +10 -4
  46. package/adapters/mcp/runtime-gateway/router.ts +19 -507
  47. package/adapters/mcp/runtime-gateway/routing-policy.ts +506 -0
  48. package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +15 -66
  49. package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
  50. package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +123 -178
  51. package/adapters/mcp/runtime-gateway/runtime-tools.ts +11 -5
  52. package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +37 -1
  53. package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
  54. package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +416 -270
  55. package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +140 -0
  56. package/adapters/mcp/runtime-gateway/work-adapter.ts +262 -3123
  57. package/adapters/mcp/runtime-gateway/work-controller-operations.ts +257 -0
  58. package/adapters/mcp/runtime-gateway/work-detail-projection.ts +60 -0
  59. package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +229 -0
  60. package/adapters/mcp/runtime-gateway/work-learning-operations.ts +145 -0
  61. package/adapters/mcp/runtime-gateway/work-list-projection.ts +38 -0
  62. package/adapters/mcp/runtime-gateway/work-plan-operations.ts +382 -0
  63. package/adapters/mcp/runtime-gateway/work-repair-adapter.ts +308 -0
  64. package/adapters/mcp/runtime-gateway/work-requirement-operations.ts +148 -0
  65. package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +320 -0
  66. package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
  67. package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +180 -0
  68. package/adapters/mcp/server.ts +91 -26
  69. package/adapters/mcp/setup.ts +5 -13
  70. package/adapters/mcp/tool-mapping/access-tools.ts +0 -6
  71. package/adapters/mcp/tool-mapping/legacy-tool-service.ts +703 -3092
  72. package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +5 -10
  73. package/adapters/mcp/tool-mapping/repository-tools.ts +170 -213
  74. package/adapters/mcp/toolset-names.ts +11 -37
  75. package/adapters/mcp/toolset.ts +19 -92
  76. package/{src/cli → adapters}/mcp/transports/AGENTS.md +5 -5
  77. package/{src/cli → adapters}/mcp/transports/CLAUDE.md +5 -5
  78. package/adapters/mcp/transports/http-observation.ts +377 -0
  79. package/adapters/mcp/transports/http-post-lifecycle.ts +19 -0
  80. package/adapters/mcp/transports/http.ts +200 -683
  81. package/adapters/mcp/transports/oauth-http.ts +322 -0
  82. package/adapters/mcp/transports/session-registry.ts +6 -0
  83. package/adapters/mcp/tunnels/openai-secure-tunnel.ts +89 -5
  84. package/adapters/mcp/types.ts +0 -6
  85. package/assets/hooks/lib/session-state.sh +0 -38
  86. package/assets/hooks/post-bash.sh +1 -1
  87. package/assets/hooks/post-tool-observer.sh +0 -5
  88. package/assets/hooks/prompt-guard.sh +0 -55
  89. package/assets/partials/04-project-structure.partial.md +1 -1
  90. package/assets/partials/07-footer.partial.md +1 -1
  91. package/assets/partials-agents/02-operating-mode.partial.md +1 -1
  92. package/assets/partials-agents/08-deep-docs.partial.md +1 -1
  93. package/assets/plugin-registry.v1.json +6 -4
  94. package/assets/reference-configs/agentic-development-flow.md +26 -1
  95. package/assets/reference-configs/external-tooling.md +0 -76
  96. package/assets/reference-configs/global-working-rules.md +19 -0
  97. package/assets/reference-configs/release-deploy.md +1 -1
  98. package/assets/templates/helpers/architecture-queue.sh +1 -1
  99. package/assets/templates/helpers/check-agent-tooling.sh +1 -327
  100. package/assets/templates/helpers/check-task-workflow.sh +1 -1
  101. package/assets/templates/helpers/ensure-task-workflow.sh +0 -14
  102. package/assets/templates/helpers/migrate-project-template.sh +2 -2
  103. package/assets/workflow-contract.v1.json +0 -2
  104. package/docs/README.md +5 -2
  105. package/docs/architecture/CURRENT.md +205 -51
  106. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +14 -5
  107. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +6 -3
  108. package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +42 -0
  109. package/docs/architecture/decisions/20260907-assistant-learning-loop.md +2 -0
  110. package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +19 -4
  111. package/docs/architecture/decisions/20260916-workflow-supervisor-authority.md +249 -0
  112. package/docs/architecture/decisions/20260917-cognitive-memory-foundation.md +82 -0
  113. package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +234 -0
  114. package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
  115. package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +74 -0
  116. package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +342 -0
  117. package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
  118. package/docs/architecture/decisions/20261009-exact-code-context-discovery.md +19 -0
  119. package/docs/architecture/decisions/20261009-generated-xcode-cache-retention.md +37 -0
  120. package/docs/architecture/decisions/20261011-autonomous-continuation-convergence.md +597 -0
  121. package/docs/architecture/decisions/20261017-edit-session-finalization-reconciliation.md +17 -0
  122. package/docs/architecture/decisions/20261019-retire-host-skills.md +16 -0
  123. package/docs/architecture/diagrams/agentic-dev-plugin-architecture.html +1 -1
  124. package/docs/architecture/domains/public-surface.md +3 -5
  125. package/docs/architecture/domains/verification.md +6 -5
  126. package/docs/architecture/domains/workflow-engine.md +6 -0
  127. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +3 -3
  128. package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +4 -4
  129. package/docs/architecture/reviews/20261015-code-search-runtime-acceptance.md +75 -0
  130. package/docs/forge-plugin-management.md +16 -4
  131. package/docs/operations/controller-browser-plugin.md +23 -0
  132. package/docs/operations/controller-performance-and-502.md +17 -0
  133. package/docs/operations/controller-reliability-runbook.md +2 -2
  134. package/docs/operations/features.md +6 -7
  135. package/docs/operations/features.zh-CN.md +1 -1
  136. package/docs/operations/github-repository.md +4 -4
  137. package/docs/operations/github-semantic-release-projection.md +20 -0
  138. package/docs/operations/homebrew.md +2 -2
  139. package/docs/operations/mcp-tool-exposure.md +13 -52
  140. package/docs/operations/releasing.md +2 -0
  141. package/docs/operations/runtime-performance-diagnostics.md +8 -0
  142. package/docs/operations/standalone-disaster-recovery.md +15 -7
  143. package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
  144. package/docs/tutorials/03-first-repository-task.md +2 -0
  145. package/docs/wiki/Computer-and-Plugins.md +78 -0
  146. package/docs/wiki/Computer-and-Plugins.zh-CN.md +88 -0
  147. package/docs/wiki/Home.md +16 -2
  148. package/docs/wiki/Implementation.md +25 -13
  149. package/docs/wiki/Installation.md +28 -32
  150. package/docs/wiki/Integrations.md +4 -0
  151. package/docs/wiki/Quick-Start.md +35 -22
  152. package/docs/wiki/Releases-and-Upgrades.md +15 -25
  153. package/docs/wiki/_Sidebar.md +5 -1
  154. package/package.json +25 -25
  155. package/packages/kernel/cognition/api/index.ts +6 -0
  156. package/packages/kernel/cognition/application/activation-service.ts +451 -0
  157. package/packages/kernel/cognition/application/consolidation-service.ts +185 -0
  158. package/packages/kernel/cognition/application/legacy-experience-adapter.ts +38 -0
  159. package/packages/kernel/cognition/application/memory-service.ts +64 -0
  160. package/packages/kernel/cognition/domain/learning.ts +106 -0
  161. package/packages/kernel/cognition/domain/memory.ts +254 -0
  162. package/packages/kernel/controller/api/index.ts +1 -0
  163. package/packages/kernel/controller/application/continuation-service.ts +281 -0
  164. package/packages/kernel/controller/application/controller-round-service.ts +12 -0
  165. package/packages/kernel/controller/domain/controller-round-transition-policy.ts +242 -21
  166. package/packages/kernel/controller/domain/controller-round.ts +4 -1
  167. package/packages/kernel/controller/domain/execution-quality.ts +3 -1
  168. package/packages/kernel/controller/infrastructure/controller-round-store.ts +689 -103
  169. package/packages/kernel/controller/infrastructure/controller-session-store.ts +348 -97
  170. package/packages/kernel/controller/ports/controller-host.ts +2 -0
  171. package/packages/kernel/identity/api/index.ts +10 -0
  172. package/packages/kernel/identity/domain/activity-projection.ts +43 -0
  173. package/packages/kernel/identity/domain/capability-broker.ts +60 -0
  174. package/packages/kernel/identity/domain/grant.ts +72 -0
  175. package/packages/kernel/identity/domain/owned-resource.ts +116 -0
  176. package/packages/kernel/identity/domain/user-request.ts +93 -0
  177. package/packages/kernel/identity/infrastructure/activity-projection-store.ts +87 -0
  178. package/packages/kernel/identity/infrastructure/capability-broker.ts +81 -0
  179. package/packages/kernel/identity/infrastructure/grant-store.ts +284 -0
  180. package/packages/kernel/identity/infrastructure/owned-resource-store.ts +259 -0
  181. package/packages/kernel/identity/infrastructure/user-request-store.ts +182 -0
  182. package/packages/kernel/scheduler/api/index.ts +0 -2
  183. package/packages/kernel/scheduler/application/eligibility.ts +4 -1
  184. package/packages/kernel/scheduler/application/schedule-service.ts +3 -0
  185. package/packages/kernel/scheduler/application/settlement.ts +0 -15
  186. package/packages/kernel/scheduler/domain/schedule.ts +87 -0
  187. package/packages/kernel/scheduler/infrastructure/schedule-store.ts +166 -143
  188. package/packages/kernel/work/api/index.ts +3 -2
  189. package/packages/kernel/work/application/work-service.ts +18 -42
  190. package/packages/kernel/work/domain/current-task-lineage.ts +104 -0
  191. package/packages/kernel/work/domain/engineering-design.ts +10 -5
  192. package/packages/kernel/work/domain/engineering-profile.ts +8 -12
  193. package/packages/kernel/work/domain/evaluation-promotion-receipt.ts +186 -0
  194. package/packages/kernel/work/domain/execution-concurrency.ts +19 -26
  195. package/packages/kernel/work/domain/execution-snapshot.ts +0 -31
  196. package/packages/kernel/work/domain/implementation-review.ts +14 -331
  197. package/packages/kernel/work/domain/objective-graph.ts +119 -0
  198. package/packages/kernel/work/domain/project-engineering-contract.ts +23 -1
  199. package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
  200. package/packages/kernel/work/domain/state-machine.ts +34 -65
  201. package/packages/kernel/work/domain/types.ts +57 -51
  202. package/packages/kernel/work/infrastructure/work-contract-store.ts +847 -729
  203. package/packages/kernel/work/ports/work-contract-store.ts +5 -2
  204. package/packages/plugin-runtime/browser/provider-registry.ts +12 -36
  205. package/packages/plugin-runtime/browser/session-authority.ts +2 -1
  206. package/packages/plugin-runtime/computer/chatgpt-identity.ts +24 -0
  207. package/packages/plugin-runtime/computer/conversation-target.ts +153 -0
  208. package/packages/plugin-runtime/computer/index.ts +2 -0
  209. package/packages/plugin-runtime/computer/target-authority.ts +26 -1
  210. package/packages/plugin-runtime/external/unix-jsonl-transport.ts +142 -18
  211. package/packages/protocols/computer/contract.ts +27 -1
  212. package/scripts/activate-source-baseline.ts +7 -9
  213. package/scripts/assemble-template.ts +11 -72
  214. package/scripts/canary-controller-semantic-wait.ts +12 -24
  215. package/scripts/check-mcp-compatibility.ts +94 -201
  216. package/scripts/check-package-identity.mjs +0 -5
  217. package/scripts/check-runtime-architecture.mjs +921 -239
  218. package/scripts/forge-local-recovery-helper.mjs +93 -15
  219. package/scripts/init-project.sh +0 -46
  220. package/scripts/install-ios-hid-toolchain.sh +60 -0
  221. package/scripts/install-standalone-recovery.ts +1 -1
  222. package/scripts/lib/project-init-lib.sh +6 -3
  223. package/scripts/migrate-windows-wsl-controller-home.ts +2 -0
  224. package/scripts/open-source-audit-allowlist.txt +1 -3
  225. package/scripts/run-bounded-command.mjs +5 -0
  226. package/scripts/run-governed-gate.ts +2 -1
  227. package/scripts/run-mobile-monitor-bridge.ts +0 -1
  228. package/scripts/smoke-control-plane-failure-domain.ts +94 -0
  229. package/scripts/smoke-ios-physical-device.ts +38 -10
  230. package/scripts/smoke-mcp-http-runtime.ts +12 -8
  231. package/scripts/smoke-mcp-tool-surface.ts +27 -41
  232. package/scripts/smoke-runtime-recovery.ts +12 -43
  233. package/scripts/smoke-schedule-engine.ts +23 -15
  234. package/scripts/smoke-unattended-transport-recovery.ts +223 -0
  235. package/scripts/smoke-user-request-continuation-restart.ts +232 -0
  236. package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +95 -0
  237. package/scripts/smoke-workflow-supervisor-process-restart.ts +276 -0
  238. package/scripts/smoke-workflow-supervisor-restart-recovery.ts +150 -0
  239. package/scripts/smoke-workflow-supervisor.ts +103 -0
  240. package/scripts/sync-generated-authority.mjs +0 -1
  241. package/scripts/verify-forge-runtime.sh +2 -1
  242. package/src/cli/agent-jobs/executor-health.ts +12 -35
  243. package/src/cli/agent-jobs/integration.ts +20 -51
  244. package/src/cli/agent-jobs/job-manager.ts +7 -3
  245. package/src/cli/chatgpt-browser/file-policy.ts +2 -2
  246. package/src/cli/commands/brain-assistant.ts +27 -13
  247. package/src/cli/commands/brain.ts +13 -15
  248. package/src/cli/commands/chatgpt.ts +1 -163
  249. package/src/cli/commands/doctor.ts +1 -143
  250. package/src/cli/commands/global-runtime.ts +3 -196
  251. package/src/cli/commands/init-hook.ts +6 -23
  252. package/src/cli/commands/init.ts +3 -252
  253. package/src/cli/commands/mcp.ts +0 -5
  254. package/src/cli/commands/prompt-guard-decision.ts +0 -2
  255. package/src/cli/commands/recovery.ts +137 -135
  256. package/src/cli/commands/repository.ts +17 -1
  257. package/src/cli/commands/runtime.ts +3 -3
  258. package/src/cli/commands/setup-execution.ts +41 -0
  259. package/src/cli/commands/setup-profile.ts +8 -0
  260. package/src/cli/controller/check-runner.ts +13 -2
  261. package/src/cli/controller/completion-backlog.ts +3 -3
  262. package/src/cli/controller/completion-orchestrator.ts +5 -44
  263. package/src/cli/controller/completion-target.ts +3 -72
  264. package/src/cli/controller/composite-operations.ts +1 -1
  265. package/src/cli/controller/context/instruction-context.ts +1 -1
  266. package/src/cli/controller/context/known-paths.ts +2 -2
  267. package/src/cli/controller/context/query-planning.ts +11 -4
  268. package/src/cli/controller/context/rule-resolution.ts +2 -2
  269. package/src/cli/controller/context/source-materializer.ts +83 -102
  270. package/src/cli/controller/context/structural-provider.ts +84 -0
  271. package/src/cli/controller/context/structural.ts +6 -6
  272. package/src/cli/controller/context/types.ts +8 -9
  273. package/src/cli/controller/context-pack.ts +107 -84
  274. package/src/cli/controller/execution-completion.ts +4 -7
  275. package/src/cli/controller/execution-policy.ts +36 -153
  276. package/src/cli/controller/governance.ts +2 -3
  277. package/src/cli/controller/issue-store.ts +4 -99
  278. package/src/cli/controller/launch-agents.ts +59 -18
  279. package/src/cli/controller/operational-plan.ts +25 -52
  280. package/src/cli/controller/runtime-config.ts +5 -1
  281. package/src/cli/controller/stuck-state-migration.ts +2 -3
  282. package/src/cli/controller/systemd-user.ts +42 -10
  283. package/src/cli/editing/edit-session.ts +18 -12
  284. package/src/cli/github/github.ts +4 -4
  285. package/src/cli/github/semantic-projection.ts +174 -0
  286. package/src/cli/hook/prompt-intents.ts +0 -9
  287. package/src/cli/index.ts +1 -43
  288. package/src/cli/local-bridge/connector-freshness.ts +1 -12
  289. package/src/cli/local-bridge/console-automations.ts +19 -14
  290. package/src/cli/local-bridge/console-view-models.ts +4 -13
  291. package/src/cli/local-bridge/facade-api.ts +64 -193
  292. package/src/cli/local-bridge/server.ts +24 -147
  293. package/src/cli/local-bridge/types.ts +0 -1
  294. package/src/cli/mcp/oauth-client-retirement.ts +74 -0
  295. package/src/cli/repositories/command-classifier.ts +0 -9
  296. package/src/cli/repositories/command-executor.ts +29 -23
  297. package/src/cli/repositories/command-scope.ts +37 -18
  298. package/src/cli/repositories/controller-home.ts +48 -0
  299. package/src/cli/repositories/ephemeral-workspace.ts +20 -30
  300. package/src/cli/repositories/git-command-executor.ts +2 -2
  301. package/src/cli/repositories/locks.ts +20 -0
  302. package/src/cli/repositories/registry.ts +79 -12
  303. package/src/cli/repositories/safe-patch.ts +2 -12
  304. package/src/cli/repositories/structured-git.ts +101 -5
  305. package/src/cli/repository/inspector.ts +185 -343
  306. package/src/cli/repository/session-cache.ts +92 -6
  307. package/src/effects/process-runner.ts +17 -1
  308. package/src/runtime/context/assistant-context.ts +20 -7
  309. package/src/runtime/context/assistant-work-context.ts +89 -27
  310. package/src/runtime/context/automatic-learning.ts +565 -0
  311. package/src/runtime/context/cognitive-attention.ts +173 -0
  312. package/src/runtime/context/cognitive-skill-canary.ts +158 -0
  313. package/src/runtime/context/context-closure.ts +46 -9
  314. package/src/runtime/context/context-pack-process.ts +103 -0
  315. package/src/runtime/context/context-plane.ts +1 -9
  316. package/src/runtime/context/direct-controller-learning.ts +298 -0
  317. package/src/runtime/context/generic-lsp-provider.ts +1 -1
  318. package/src/runtime/context/semantic-navigation-contract.ts +16 -0
  319. package/src/runtime/context/semantic-navigation.ts +7 -35
  320. package/src/runtime/context/typescript-navigation-process.ts +145 -0
  321. package/src/runtime/context/typescript-navigation.ts +89 -3
  322. package/src/runtime/control-plane/cleanup-artifact-retention.ts +215 -12
  323. package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +9 -47
  324. package/src/runtime/control-plane/execution/controller-authority-recovery.ts +34 -4
  325. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +29 -20
  326. package/src/runtime/control-plane/execution/execution-identity.ts +23 -3
  327. package/src/runtime/control-plane/execution/repository-work-attribution.ts +7 -30
  328. package/src/runtime/control-plane/execution/retained-work-resume.ts +206 -199
  329. package/src/runtime/control-plane/execution/session-store.ts +31 -1
  330. package/src/runtime/control-plane/execution/validation.ts +6 -8
  331. package/src/runtime/control-plane/execution/work-authority-reconciler.ts +13 -42
  332. package/src/runtime/control-plane/execution/work-check-evidence.ts +137 -0
  333. package/src/runtime/control-plane/execution/work-completion-authority.ts +30 -85
  334. package/src/runtime/control-plane/execution/work-delivery-service.ts +616 -0
  335. package/src/runtime/control-plane/execution/work-evidence-policy.ts +12 -50
  336. package/src/runtime/control-plane/execution/work-execution-support.ts +50 -149
  337. package/src/runtime/control-plane/execution/work-handle-authority.ts +197 -110
  338. package/src/runtime/control-plane/execution/work-handle-store.ts +72 -44
  339. package/src/runtime/control-plane/execution/work-head-settlement.ts +53 -20
  340. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +52 -29
  341. package/src/runtime/control-plane/execution/work-operation-service.ts +60 -34
  342. package/src/runtime/control-plane/execution/work-preparation-service.ts +231 -267
  343. package/src/runtime/control-plane/execution/work-process-evidence.ts +2 -2
  344. package/src/runtime/control-plane/execution/work-remote-delivery.ts +2 -3
  345. package/src/runtime/control-plane/execution/work-revision-diff.ts +39 -0
  346. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +201 -199
  347. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +33 -85
  348. package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
  349. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +6 -2
  350. package/src/runtime/control-plane/facade/capability-registry.ts +364 -37
  351. package/src/runtime/control-plane/facade/check-normalization.ts +3 -9
  352. package/src/runtime/control-plane/facade/codex-delegation.ts +10 -11
  353. package/src/runtime/control-plane/facade/controller-connection.ts +135 -0
  354. package/src/runtime/control-plane/facade/goal-workloop-access.ts +1 -20
  355. package/src/runtime/control-plane/facade/goal-workloop.ts +281 -1753
  356. package/src/runtime/control-plane/facade/handoff-inbox-application.ts +12 -25
  357. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +256 -52
  358. package/src/runtime/control-plane/facade/index.ts +0 -1
  359. package/src/runtime/control-plane/facade/operation-digest.ts +12 -15
  360. package/src/runtime/control-plane/facade/plan-contract-store.ts +451 -991
  361. package/src/runtime/control-plane/facade/policy-gate.ts +0 -23
  362. package/src/runtime/control-plane/facade/repository-work-admission.ts +12 -22
  363. package/src/runtime/control-plane/facade/requirement-authority.ts +102 -199
  364. package/src/runtime/control-plane/facade/requirement-board.ts +3 -3
  365. package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +51 -14
  366. package/src/runtime/control-plane/facade/self-healing-loop.ts +18 -53
  367. package/src/runtime/control-plane/facade/suggested-actions.ts +15 -18
  368. package/src/runtime/control-plane/facade/types.ts +49 -108
  369. package/src/runtime/control-plane/facade/work-continuation.ts +9 -9
  370. package/src/runtime/control-plane/generated-cache-retention.ts +206 -59
  371. package/src/runtime/control-plane/global-scheduler/autonomous-continuation.ts +248 -0
  372. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +1 -1
  373. package/src/runtime/control-plane/global-scheduler/maintenance.ts +256 -117
  374. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -12
  375. package/src/runtime/control-plane/global-scheduler/scheduler.ts +66 -40
  376. package/src/runtime/control-plane/global-scheduler/wake-signal.ts +42 -2
  377. package/src/runtime/control-plane/governance/access-policy.ts +19 -2
  378. package/src/runtime/control-plane/governance/authorization.ts +20 -3
  379. package/src/runtime/control-plane/governance/external-effects.ts +1 -1
  380. package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +63 -300
  381. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +29 -300
  382. package/src/runtime/control-plane/launcher/local-conversation-controller.ts +238 -0
  383. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +5 -2
  384. package/src/runtime/control-plane/launcher/thin-launcher.ts +96 -240
  385. package/src/runtime/control-plane/persistence/cognition-store.ts +820 -0
  386. package/src/runtime/control-plane/persistence/experience-store.ts +162 -29
  387. package/src/runtime/control-plane/persistence/requirement-store.ts +216 -74
  388. package/src/runtime/control-plane/persistence/sqlite-store.ts +113 -6
  389. package/src/runtime/control-plane/release-retention.ts +135 -47
  390. package/src/runtime/control-plane/repository-namespace-retention.ts +2 -2
  391. package/src/runtime/control-plane/runtime-cleanup.ts +295 -107
  392. package/src/runtime/control-plane/workspace/project-onboarding.ts +80 -0
  393. package/src/runtime/control-plane/workspace/semantic-sync-service.ts +19 -5
  394. package/src/runtime/control-plane/workspace/workspace-store.ts +169 -0
  395. package/src/runtime/diagnostics/incident-repair.ts +313 -146
  396. package/src/runtime/diagnostics/mcp-timing.ts +114 -0
  397. package/src/runtime/evidence/artifact-store.ts +158 -40
  398. package/src/runtime/evidence/evidence-store.ts +112 -8
  399. package/src/runtime/evidence/output-handle-index.ts +225 -0
  400. package/src/runtime/evidence/result-store.ts +158 -44
  401. package/src/runtime/evidence/sensitive-output.ts +22 -2
  402. package/src/runtime/execution/jobs/child-reference.ts +11 -0
  403. package/src/runtime/execution/jobs/receipt-recovery.ts +1 -11
  404. package/src/runtime/execution/jobs/store.ts +3 -4
  405. package/src/runtime/execution/managed-workspace.ts +57 -0
  406. package/src/runtime/execution/process-runtime/check-facade.ts +1 -1
  407. package/src/runtime/execution/process-runtime/check-result-retention.ts +2 -2
  408. package/src/runtime/execution/process-runtime/check-result.ts +105 -1
  409. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +18 -8
  410. package/src/runtime/execution/process-runtime/command-facade.ts +82 -30
  411. package/src/runtime/execution/process-runtime/gc.ts +15 -2
  412. package/src/runtime/execution/process-runtime/handle-index.ts +176 -0
  413. package/src/runtime/execution/process-runtime/host-command-lane.ts +139 -0
  414. package/src/runtime/execution/process-runtime/index.ts +3 -0
  415. package/src/runtime/execution/process-runtime/lightweight-managed.ts +251 -72
  416. package/src/runtime/execution/process-runtime/persisted-check.ts +3 -3
  417. package/src/runtime/execution/process-runtime/process-runner-entry.ts +47 -5
  418. package/src/runtime/execution/process-runtime/process-scope.ts +160 -0
  419. package/src/runtime/execution/process-runtime/resource-claims.ts +65 -61
  420. package/src/runtime/execution/process-runtime/runtime.ts +55 -18
  421. package/src/runtime/execution/process-runtime/store.ts +30 -2
  422. package/src/runtime/execution/process-runtime/types.ts +6 -1
  423. package/src/runtime/execution/thin-harness/execution-router.ts +16 -16
  424. package/src/runtime/execution/thin-harness/fast-executor.ts +2 -2
  425. package/src/runtime/execution/thin-harness/search-worker.ts +2 -2
  426. package/src/runtime/execution/workers/executor.ts +3 -8
  427. package/src/runtime/maintenance/cleanup.ts +41 -5
  428. package/src/runtime/platform/service-inventory.ts +130 -0
  429. package/src/runtime/platform/service-manager.ts +8 -0
  430. package/src/runtime/plugins/action-application.ts +97 -29
  431. package/src/runtime/plugins/app-store-connect-adapter.ts +290 -18
  432. package/src/runtime/plugins/browser-adapter.ts +1124 -333
  433. package/src/runtime/plugins/browser-automation-service.ts +23 -3
  434. package/src/runtime/plugins/browser-macos-bridge.ts +431 -137
  435. package/src/runtime/plugins/browser-manifest-surface.ts +47 -12
  436. package/src/runtime/plugins/browser-native-session-service.ts +63 -13
  437. package/src/runtime/plugins/browser-registration.ts +18 -0
  438. package/src/runtime/plugins/browser-runtime.ts +40 -36
  439. package/src/runtime/plugins/browser-session-authority.ts +2 -2
  440. package/src/runtime/plugins/browser-session-store.ts +46 -76
  441. package/src/runtime/plugins/capability-authorization-grants.ts +258 -62
  442. package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +228 -0
  443. package/src/runtime/plugins/computer-registration.ts +298 -20
  444. package/src/runtime/plugins/desktop-operator-external-policy.ts +36 -4
  445. package/src/runtime/plugins/desktop-operator-registration.ts +12 -4
  446. package/src/runtime/plugins/external-adapter.ts +42 -6
  447. package/src/runtime/plugins/external-registration.ts +21 -1
  448. package/src/runtime/plugins/github-adapter.ts +30 -3
  449. package/src/runtime/plugins/gmail-adapter.ts +189 -3
  450. package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
  451. package/src/runtime/plugins/google-shared.ts +24 -12
  452. package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
  453. package/src/runtime/plugins/ios/remote-xpc-hid.ts +70 -30
  454. package/src/runtime/plugins/ios-adapter.ts +46 -41
  455. package/src/runtime/plugins/ios-agent-device.ts +54 -4
  456. package/src/runtime/plugins/ios-device-ownership.ts +103 -0
  457. package/src/runtime/plugins/ios-physical-device.ts +497 -79
  458. package/src/runtime/plugins/lightweight-action.ts +208 -2
  459. package/src/runtime/plugins/local-system-adapter.ts +12 -100
  460. package/src/runtime/plugins/managed-process-adapter.ts +12 -5
  461. package/src/runtime/plugins/plugin-action-sidecar.ts +17 -13
  462. package/src/runtime/plugins/plugin-management-adapter.ts +1 -1
  463. package/src/runtime/plugins/store.ts +682 -435
  464. package/src/runtime/plugins/types.ts +24 -0
  465. package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
  466. package/src/runtime/projections/git-status-sampler.ts +2 -19
  467. package/src/runtime/projections/invalidation.ts +7 -3
  468. package/src/runtime/projections/materialized-view.ts +80 -36
  469. package/src/runtime/recovery/actions.ts +4 -4
  470. package/src/runtime/recovery/capability-action-application.ts +46 -45
  471. package/src/runtime/recovery/lifecycle-inventory.ts +30 -40
  472. package/src/runtime/recovery/maintenance-executor.ts +374 -123
  473. package/src/runtime/recovery/probe.ts +2 -2
  474. package/src/runtime/recovery/store.ts +29 -11
  475. package/src/runtime/release/release-coordinator.ts +312 -0
  476. package/src/runtime/release/release-session.ts +716 -0
  477. package/src/runtime/release/release-state-migration.ts +25 -0
  478. package/src/runtime/resources/leases/store.ts +56 -25
  479. package/src/runtime/root/computer-composition.ts +191 -6
  480. package/src/runtime/root/controller-progression-composition.ts +254 -0
  481. package/src/runtime/root/controller-round-composition.ts +20 -1
  482. package/src/runtime/root/deployment-topology.ts +106 -0
  483. package/src/runtime/root/entry.ts +4 -3
  484. package/src/runtime/root/known-good-recovery.ts +184 -0
  485. package/src/runtime/root/local-bridge.ts +0 -1
  486. package/src/runtime/root/mcp-transport.ts +111 -18
  487. package/src/runtime/root/ownership.ts +261 -9
  488. package/src/runtime/root/package-connector-service.ts +227 -29
  489. package/src/runtime/root/package-runtime-release.ts +117 -30
  490. package/src/runtime/root/package-runtime-service.ts +24 -24
  491. package/src/runtime/root/release-execution-canary.ts +57 -12
  492. package/src/runtime/root/release-loader.ts +90 -8
  493. package/src/runtime/root/release-manifest.ts +80 -40
  494. package/src/runtime/root/release-materialize.ts +372 -106
  495. package/src/runtime/root/release-store.ts +395 -36
  496. package/src/runtime/root/runtime-lane.ts +191 -0
  497. package/src/runtime/root/runtime.ts +160 -29
  498. package/src/runtime/root/scheduled-controller-composition.ts +29 -3
  499. package/src/runtime/root/service-runner.ts +2 -2
  500. package/src/runtime/root/service.ts +126 -44
  501. package/src/runtime/root/status.ts +48 -0
  502. package/src/runtime/root/types.ts +32 -9
  503. package/src/runtime/root/workflow-supervisor-composition.ts +681 -0
  504. package/src/runtime/root/workflow-supervisor-runtime.ts +564 -0
  505. package/src/runtime/root/write-fence.ts +50 -2
  506. package/src/runtime/safe-tooling/google-credential-store.ts +67 -22
  507. package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
  508. package/src/runtime/safe-tooling/ios-development.ts +22 -8
  509. package/src/runtime/safe-tooling/job-summary.ts +1 -1
  510. package/src/runtime/safe-tooling/workspace-auth.ts +5 -2
  511. package/src/runtime/shared/atomic-text-file.ts +21 -0
  512. package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
  513. package/src/runtime/shared/json-files.ts +8 -3
  514. package/src/runtime/shared/process-environment.ts +20 -9
  515. package/src/runtime/shared/response-budget.ts +1 -3
  516. package/src/runtime/standalone-recovery/controller-home-migration.ts +16 -24
  517. package/src/runtime/standalone-recovery/core.ts +3792 -417
  518. package/src/runtime/standalone-recovery/entry.ts +507 -45
  519. package/src/runtime/standalone-recovery/installer.ts +262 -148
  520. package/src/runtime/standalone-recovery/mcp-server.ts +29 -193
  521. package/src/runtime/standalone-recovery/operation-lock.ts +12 -2
  522. package/src/runtime/standalone-recovery/performance.ts +54 -16
  523. package/src/runtime/standalone-recovery/release.ts +53 -5
  524. package/src/runtime/standalone-recovery/service-labels.ts +5 -2
  525. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +5 -2
  526. package/src/runtime/workflow/schedules/browser-probe.ts +17 -6
  527. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +11 -3
  528. package/src/runtime/workflow/schedules/engine.ts +166 -178
  529. package/src/runtime/workflow/schedules/pending-activation.ts +11 -4
  530. package/src/runtime/workflow/schedules/work-continuation.ts +95 -11
  531. package/src/runtime/workflows/runtime.ts +15 -19
  532. package/src/testing/test-governance.ts +5 -1
  533. package/supervisor/chatgpt-conversation.ts +23 -0
  534. package/supervisor/client.ts +218 -0
  535. package/supervisor/control-plane.ts +963 -0
  536. package/supervisor/entry.ts +15 -0
  537. package/supervisor/forge-validators.ts +147 -0
  538. package/supervisor/index.ts +5 -0
  539. package/supervisor/native-browser-adapter.ts +1151 -0
  540. package/supervisor/native-messaging/host.ts +58 -0
  541. package/supervisor/native-messaging/manifest.ts +26 -0
  542. package/supervisor/native-messaging/protocol.ts +27 -0
  543. package/supervisor/paths.ts +18 -0
  544. package/supervisor/protocol.ts +250 -0
  545. package/supervisor/server.ts +412 -0
  546. package/supervisor/store.ts +1870 -0
  547. package/supervisor/tsconfig.json +8 -0
  548. package/supervisor/types.ts +261 -0
  549. package/SKILL.md +0 -427
  550. package/adapters/chatgpt/controller-host.ts +0 -119
  551. package/adapters/mcp/controller-round-compatibility.ts +0 -184
  552. package/adapters/mcp/frozen-client-semantic-compatibility.ts +0 -292
  553. package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +0 -502
  554. package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +0 -1
  555. package/adapters/mcp/toolset-selection.ts +0 -41
  556. package/agents/openai.yaml +0 -4
  557. package/assets/skill-hooks.json +0 -41
  558. package/assets/skill-version.json +0 -189
  559. package/assets/skills/claude-review/SKILL.md +0 -231
  560. package/assets/skills/codex-review/SKILL.md +0 -103
  561. package/assets/templates/helpers/check-skill-version.ts +0 -193
  562. package/packages/kernel/progression/api/index.ts +0 -2
  563. package/packages/kernel/progression/application/projector.ts +0 -211
  564. package/packages/kernel/progression/domain/types.ts +0 -116
  565. package/packages/kernel/progression/index.ts +0 -1
  566. package/packages/kernel/scheduler/application/continuation-service.ts +0 -212
  567. package/packages/kernel/scheduler/domain/continuation.ts +0 -38
  568. package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +0 -38
  569. package/packages/kernel/work/domain/admission-policy.ts +0 -34
  570. package/scripts/benchmark-background-check-overlap.ts +0 -228
  571. package/scripts/benchmark-computer-hotpath.ts +0 -255
  572. package/scripts/benchmark-controller-hotpath.ts +0 -212
  573. package/scripts/benchmark-controller-round2.ts +0 -191
  574. package/scripts/benchmark-ios-agent-device.ts +0 -511
  575. package/scripts/benchmark-mcp-host.sh +0 -117
  576. package/scripts/benchmark-mcp-transport.ts +0 -169
  577. package/scripts/benchmark-operational-memory-activation.ts +0 -235
  578. package/scripts/benchmark-operational-shadow.ts +0 -28
  579. package/scripts/benchmark-quality-harness.ts +0 -146
  580. package/scripts/benchmark-route-session-concurrency.ts +0 -915
  581. package/scripts/benchmark-thin-harness-gateway-ab.ts +0 -632
  582. package/scripts/benchmark-thin-harness-mcp-e2e.ts +0 -498
  583. package/scripts/benchmark-thin-harness.ts +0 -251
  584. package/scripts/benchmark-typescript-navigation.ts +0 -186
  585. package/scripts/benchmark-work-efficiency.ts +0 -334
  586. package/scripts/build-controller-ui.ts +0 -28
  587. package/scripts/check-npm-release.sh +0 -32
  588. package/scripts/check-public-release-surface.sh +0 -19
  589. package/scripts/check-release-published.sh +0 -57
  590. package/scripts/check-release-readiness.sh +0 -37
  591. package/scripts/check-release-version.mjs +0 -74
  592. package/scripts/check-skill-version.ts +0 -5
  593. package/scripts/check-tarball-install-smoke.sh +0 -150
  594. package/scripts/ensure-codegraph.sh +0 -16
  595. package/scripts/package-source-archive.sh +0 -147
  596. package/scripts/public-release-files.txt +0 -39
  597. package/scripts/public-release.ts +0 -174
  598. package/scripts/publish-release-tarball.sh +0 -27
  599. package/scripts/route-nl-vs-ts-eval.ts +0 -679
  600. package/scripts/run-skill-hook.ts +0 -244
  601. package/scripts/stage-runtime-release.ts +0 -44
  602. package/scripts/sync-codex-installed-copies.sh +0 -182
  603. package/src/cli/commands/tools.ts +0 -167
  604. package/src/cli/controller/progress.ts +0 -656
  605. package/src/cli/controller/work-mode.ts +0 -181
  606. package/src/cli/local-bridge/console-assets.ts +0 -17
  607. package/src/cli/local-bridge/dashboard.ts +0 -17
  608. package/src/cli/local-bridge/frontend/src/App.tsx +0 -10
  609. package/src/cli/local-bridge/frontend/src/components/Button.tsx +0 -1
  610. package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +0 -3
  611. package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +0 -1
  612. package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +0 -1
  613. package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +0 -1
  614. package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +0 -3
  615. package/src/cli/local-bridge/frontend/src/design/icons.tsx +0 -11
  616. package/src/cli/local-bridge/frontend/src/design/tokens.css +0 -8
  617. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +0 -153
  618. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +0 -37
  619. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +0 -183
  620. package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +0 -2
  621. package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +0 -2
  622. package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +0 -4
  623. package/src/cli/local-bridge/frontend/src/lib/api.ts +0 -30
  624. package/src/cli/local-bridge/frontend/src/lib/format.ts +0 -4
  625. package/src/cli/local-bridge/frontend/src/lib/routes.ts +0 -7
  626. package/src/cli/local-bridge/frontend/src/main.tsx +0 -1
  627. package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +0 -1
  628. package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +0 -2
  629. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +0 -4
  630. package/src/cli/local-bridge/frontend/src/styles.css +0 -28
  631. package/src/cli/local-bridge/frontend/src/types.ts +0 -15
  632. package/src/cli/local-bridge/frontend/src/vite-env.d.ts +0 -1
  633. package/src/cli/local-bridge/frontend/vite.config.ts +0 -27
  634. package/src/cli/local-bridge/ui-dist/app.css +0 -1
  635. package/src/cli/local-bridge/ui-dist/app.js +0 -11228
  636. package/src/cli/mcp/access-mode.ts +0 -2
  637. package/src/cli/mcp/access-tools.ts +0 -2
  638. package/src/cli/mcp/audit.ts +0 -2
  639. package/src/cli/mcp/auth.ts +0 -2
  640. package/src/cli/mcp/instructions.ts +0 -2
  641. package/src/cli/mcp/legacy-context.ts +0 -2
  642. package/src/cli/mcp/legacy-tool-service.ts +0 -2
  643. package/src/cli/mcp/multi-repository.ts +0 -2
  644. package/src/cli/mcp/oauth.ts +0 -2
  645. package/src/cli/mcp/openai-secure-tunnel.ts +0 -2
  646. package/src/cli/mcp/paths.ts +0 -2
  647. package/src/cli/mcp/policy.ts +0 -2
  648. package/src/cli/mcp/post-finalize-work-attribution.ts +0 -2
  649. package/src/cli/mcp/proxy-env.ts +0 -2
  650. package/src/cli/mcp/readiness-projection.ts +0 -2
  651. package/src/cli/mcp/redaction.ts +0 -2
  652. package/src/cli/mcp/repo.ts +0 -2
  653. package/src/cli/mcp/repository-tools.ts +0 -2
  654. package/src/cli/mcp/server.ts +0 -2
  655. package/src/cli/mcp/setup.ts +0 -2
  656. package/src/cli/mcp/tool-capability-cache.ts +0 -2
  657. package/src/cli/mcp/tool-contract.ts +0 -2
  658. package/src/cli/mcp/tools.ts +0 -2
  659. package/src/cli/mcp/toolset-names.ts +0 -2
  660. package/src/cli/mcp/toolset-selection.ts +0 -2
  661. package/src/cli/mcp/toolset.ts +0 -2
  662. package/src/cli/mcp/transports/http.ts +0 -2
  663. package/src/cli/mcp/transports/session-registry.ts +0 -2
  664. package/src/cli/mcp/transports/stdio.ts +0 -2
  665. package/src/cli/mcp/types.ts +0 -2
  666. package/src/cli/mcp/umbrella-tools.ts +0 -2
  667. package/src/cli/tools/codegraph.ts +0 -695
  668. package/src/core/adoption/helper-wrapper-plan.ts +0 -159
  669. package/src/runtime/context/codegraph-cache-boundary.ts +0 -255
  670. package/src/runtime/context/codegraph-read-provider.ts +0 -611
  671. package/src/runtime/context/codegraph-sidecar.cjs +0 -248
  672. package/src/runtime/control-plane/codegraph-cache-retention.ts +0 -164
  673. package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +0 -169
  674. package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +0 -85
  675. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +0 -655
  676. package/src/runtime/control-plane/execution/work-finalization-service.ts +0 -2850
  677. package/src/runtime/control-plane/execution/work-path-scope.ts +0 -37
  678. package/src/runtime/control-plane/execution/work-task-receipt.ts +0 -468
  679. package/src/runtime/control-plane/facade/controller-round-relay.ts +0 -3
  680. package/src/runtime/control-plane/facade/work-admission-policy.ts +0 -142
  681. package/src/runtime/control-plane/facade/work-implementation-review.ts +0 -2
  682. package/src/runtime/control-plane/facade/work-state-machine.ts +0 -2
  683. package/src/runtime/control-plane/facade/work-task-projection.ts +0 -66
  684. package/src/runtime/control-plane/routing/index.ts +0 -1
  685. package/src/runtime/control-plane/routing/route-policy.ts +0 -401
  686. package/src/runtime/control-plane/routing/workspace-admission.ts +0 -70
  687. package/src/runtime/gateway/mcp/execution-tools.ts +0 -2
  688. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +0 -2
  689. package/src/runtime/gateway/mcp/persisted-check-process.ts +0 -2
  690. package/src/runtime/gateway/mcp/process-tools.ts +0 -2
  691. package/src/runtime/gateway/mcp/router.ts +0 -2
  692. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +0 -2
  693. package/src/runtime/gateway/mcp/runtime-tools.ts +0 -2
  694. package/src/runtime/gateway/mcp/work-validation-reconciler.ts +0 -2
  695. package/src/runtime/plugins/browser-provider-registry.ts +0 -2
@@ -8,6 +8,7 @@ import { dirname, join, resolve } from 'path';
8
8
  import { openAiSecureTunnelStatusArgs, parseOpenAiSecureTunnelRuntimeStatus, tunnelRuntimeProfileTargetsEndpoint } from '../../../adapters/mcp/tunnels/openai-secure-tunnel';
9
9
  import { discoverExecutable, type ExecutableDiscoveryResult } from '../../runtime/platform/executable-discovery';
10
10
  import { resolvePlatformServiceManager, type PlatformServiceManagerKind } from '../../runtime/platform/service-manager';
11
+ import { deriveRuntimeDeploymentTopology, type RuntimeDeploymentTopology } from '../../runtime/root/deployment-topology';
11
12
 
12
13
  export type SetupControllerKind = 'chatgpt' | 'codex' | 'claude' | 'mcp';
13
14
  export type SetupTunnelProvider = 'auto' | 'openai' | 'cloudflare' | 'tailscale' | 'existing' | 'none';
@@ -187,6 +188,13 @@ export function setupNeedsRemoteAccess(profile: SetupProfile | undefined): boole
187
188
  return Boolean(profile?.controllers.some((entry) => entry === 'chatgpt' || entry === 'mcp'));
188
189
  }
189
190
 
191
+ export function runtimeDeploymentTopologyForSetupProfile(profile: SetupProfile): RuntimeDeploymentTopology {
192
+ return deriveRuntimeDeploymentTopology({
193
+ controllers: profile.controllers,
194
+ capabilityIntents: profile.capabilityIntents,
195
+ });
196
+ }
197
+
190
198
  export type SetupConnectorAuthMode = 'oauth' | 'none';
191
199
 
192
200
  export function setupConnectorAuthMode(profile: SetupProfile | undefined): SetupConnectorAuthMode {
@@ -280,8 +280,19 @@ function inferredPackageCheckEffects(name: string): ControllerCheckEffects | und
280
280
  // and persist only content-bound receipts/caches outside repository source.
281
281
  return { reads: ['.'], cache: 'write', temp: 'isolated', git: 'read' };
282
282
  }
283
- const staticAnalysis = /(?:^|:)(?:type|typecheck|lint|format:check|runtime-architecture|mcp-compatibility|forge-runtime)$/.test(normalized);
284
- if (staticAnalysis) return { reads: ['.'], cache: 'write' };
283
+ if (normalized === 'check:type' || normalized === 'check:runtime-architecture') {
284
+ // These canonical gates are source readers: TypeScript runs with --noEmit,
285
+ // while runtime-architecture only inspects source/AST structure. Neither
286
+ // owns the shared repository build cache.
287
+ return { reads: ['.'] };
288
+ }
289
+ if (normalized === 'check:architecture-sync') {
290
+ // Architecture sync runs the queue in --check mode and inspects Git state.
291
+ // Its scratch space is check-local; it never mutates repository source.
292
+ return { reads: ['.'], temp: 'isolated', git: 'read' };
293
+ }
294
+ const cachedStaticAnalysis = /(?:^|:)(?:typecheck|lint|format:check|mcp-compatibility|forge-runtime)$/.test(normalized);
295
+ if (cachedStaticAnalysis) return { reads: ['.'], cache: 'write' };
285
296
  const isolatedReadOnlyCheck = /(?:^|:)(?:quality-harness|evaluation-framework|background-check-overlap|typescript-navigation|check-scheduling|bootstrap-files)$/.test(normalized);
286
297
  if (isolatedReadOnlyCheck) return { reads: ['.'], temp: 'isolated', git: 'read' };
287
298
  const browserLive = /(?:^|:)browser-live$/.test(normalized);
@@ -145,11 +145,11 @@ function classifyTask(repoRoot: string, issue: ControllerIssue, task: Controller
145
145
  }
146
146
 
147
147
  if (run && FINISHABLE_RUN_STATUSES.has(run.status)) {
148
- if (policy.requiresHumanAcceptance) {
148
+ if (task.acceptanceCriteria.length > 0) {
149
149
  return {
150
150
  ...base,
151
151
  action: 'needs_human_review',
152
- reason: `${policy.executionClass} requires explicit review before finishing ${run.runId}.`,
152
+ reason: `Task declares acceptance criteria that require an explicit acceptance decision before finishing ${run.runId}.`,
153
153
  canAutoFinish: false,
154
154
  suggestedDecision: 'approve_and_finish',
155
155
  };
@@ -157,7 +157,7 @@ function classifyTask(repoRoot: string, issue: ControllerIssue, task: Controller
157
157
  return {
158
158
  ...base,
159
159
  action: 'auto_finish',
160
- reason: `Run ${run.runId} is ${run.status} and policy allows automatic finish.`,
160
+ reason: `Run ${run.runId} is ${run.status} and the Task declares no semantic acceptance criteria, so automatic finish may proceed.`,
161
161
  canAutoFinish: true,
162
162
  suggestedDecision: 'auto',
163
163
  };
@@ -6,12 +6,12 @@ import { getAgentJob, markAgentJobClosure, markAgentJobReviewedCompletion, recor
6
6
  import type { AgentJobMeta } from '../agent-jobs/types';
7
7
  import { cleanupIntegratedWorktree, cleanupNoChangeWorktree, integrateAgentJob, IntegrationReviewRequiredError, taskRunDiff } from '../agent-jobs/integration';
8
8
  import { finalizeEditSession, getEditSession, revalidateEditSessionOwnership, rollbackEditSession, verifyEditSession } from '../editing/edit-session';
9
- import { getMcpPolicy } from '../mcp/policy';
9
+ import { getMcpPolicy } from '../../../adapters/mcp/policy';
10
10
  import { resolveRepoPreferredControllerHome } from '../repositories/controller-home';
11
11
  import { withControllerLock } from '../repositories/locks';
12
12
  import { listActiveLeases } from '../../runtime/resources/leases/store';
13
13
  import { acceptVerifiedTask, getIssue, projectIssueEffectiveView, recordTaskVerification, updateTask } from './issue-store';
14
- import { cleanupEvidenceResourceBlockers, completionEvidenceComplete, taskExecutionPolicy } from './execution-policy';
14
+ import { cleanupEvidenceResourceBlockers, completionEvidenceComplete } from './execution-policy';
15
15
  import { currentCompletionTarget, resolveCompletionTargetBranch } from './completion-target';
16
16
  import { runControllerCheck } from './check-runner';
17
17
  import type { CleanupEvidence, ControllerIssue, ControllerTask, IntegrationEvidence, TaskCommandEvidence, TaskVerification } from './types';
@@ -183,7 +183,6 @@ function verificationForRun(
183
183
  reviewer: string,
184
184
  evidence: { integrationEvidence?: IntegrationEvidence; cleanupEvidence?: CleanupEvidence; completionReceipt?: CompletionReceipt; acceptanceConfirmed?: boolean } = {},
185
185
  ): TaskVerification {
186
- const policy = taskExecutionPolicy(task);
187
186
  const acceptanceResults = task.acceptanceCriteria.map((criterion) => evidence.acceptanceConfirmed
188
187
  ? {
189
188
  criterion,
@@ -204,8 +203,7 @@ function verificationForRun(
204
203
  integratedRevision: evidence.integrationEvidence?.targetRevision,
205
204
  reviewedDiffHash: hashArtifact(repoRoot, run.diffArtifactPath),
206
205
  reviewer,
207
- checkResults: policy.autoRunDeclaredChecks
208
- ? task.checks.map((checkId) => {
206
+ checkResults: task.checks.map((checkId) => {
209
207
  try {
210
208
  const result = runControllerCheck(repoRoot, checkId);
211
209
  return {
@@ -218,8 +216,7 @@ function verificationForRun(
218
216
  } catch (error) {
219
217
  return { checkId, ok: false, summary: error instanceof Error ? error.message : String(error) };
220
218
  }
221
- })
222
- : [],
219
+ }),
223
220
  commandEvidence: commandEvidenceForRun(run),
224
221
  acceptanceResults,
225
222
  verifiedAt: nowIso(),
@@ -233,8 +230,7 @@ function result(repoRoot: string, input: Omit<FinishTaskRunResult, 'issue'>): Fi
233
230
  }
234
231
 
235
232
  function canAutoFinish(task: ControllerTask): boolean {
236
- const policy = taskExecutionPolicy(task);
237
- return policy.autoCompleteAfterSuccessfulRun && !policy.requiresHumanAcceptance;
233
+ return task.acceptanceCriteria.length === 0;
238
234
  }
239
235
 
240
236
  function verifyAndMaybeAccept(input: {
@@ -247,16 +243,7 @@ function verifyAndMaybeAccept(input: {
247
243
  allowCompletion?: boolean;
248
244
  }): { issue: ControllerIssue; taskStatus: string } {
249
245
  const { repoRoot, run, task, decision, reviewer } = input;
250
- const policy = taskExecutionPolicy(task);
251
246
  const allowHumanAcceptance = decision === 'approve_and_finish';
252
- if (policy.requiresHumanAcceptance && !allowHumanAcceptance) {
253
- updateTask(repoRoot, run.issueId, run.taskId, {
254
- status: task.status === 'verified' ? 'verified' : task.status,
255
- note: input.note ?? `Run ${run.runId} is ready but ${policy.executionClass} requires an explicit review decision.`,
256
- });
257
- const waiting = getIssue(repoRoot, run.issueId);
258
- return { issue: waiting, taskStatus: taskForRun(waiting, run.taskId).status };
259
- }
260
247
 
261
248
  const current = getIssue(repoRoot, run.issueId);
262
249
  const currentTask = taskForRun(current, run.taskId);
@@ -438,19 +425,6 @@ function finishEditSessionUnlocked(repoRoot: string, options: FinishEditSessionO
438
425
  });
439
426
  }
440
427
 
441
- const policy = taskExecutionPolicy(task);
442
- if (policy.requiresHumanAcceptance && decision !== 'approve_and_finish') {
443
- return editResult(repoRoot, {
444
- action: 'needs_decision',
445
- sessionId: initialSession.sessionId,
446
- issueId: issue.id,
447
- taskId: task.id,
448
- decision,
449
- taskStatus: task.status,
450
- reason: `${policy.executionClass} requires approve_and_finish, request_changes, or discard.`,
451
- });
452
- }
453
-
454
428
  const completionTarget = currentCompletionTarget(repoRoot);
455
429
  if (!completionTarget.onTargetBranch) {
456
430
  return editResult(repoRoot, {
@@ -1165,19 +1139,6 @@ function finishTaskRunUnlocked(repoRoot: string, options: FinishTaskRunOptions):
1165
1139
  });
1166
1140
  }
1167
1141
 
1168
- const policy = taskExecutionPolicy(task);
1169
- if (policy.requiresHumanAcceptance && decision !== 'approve_and_finish') {
1170
- return result(repoRoot, {
1171
- action: 'needs_decision',
1172
- runId: run.runId,
1173
- issueId: issue.id,
1174
- taskId: task.id,
1175
- decision,
1176
- taskStatus: task.status,
1177
- reason: `${policy.executionClass} requires approve_and_finish, request_changes, or discard.`,
1178
- });
1179
- }
1180
-
1181
1142
  const ownedAutoFinalization = run.status === 'running'
1182
1143
  && run.autoIntegrate === true
1183
1144
  && run.executionMode === 'worktree'
@@ -1,8 +1,4 @@
1
- import { realpathSync, statSync } from 'fs';
2
1
  import { spawnSync } from 'child_process';
3
- import { join } from 'path';
4
- import { resolveRepoPreferredControllerHome, resolveControllerHome } from '../repositories/controller-home';
5
- import { listRepositories } from '../repositories/registry';
6
2
 
7
3
  function gitText(repoRoot: string, args: string[]): string {
8
4
  const result = spawnSync('git', args, { cwd: repoRoot, encoding: 'utf-8' });
@@ -10,75 +6,10 @@ function gitText(repoRoot: string, args: string[]): string {
10
6
  return typeof result.stdout === 'string' ? result.stdout.trim() : '';
11
7
  }
12
8
 
13
- function canonical(path: string): string {
14
- try { return realpathSync(path); }
15
- catch (_error) { return path; }
16
- }
17
-
18
- interface TargetBranchCacheEntry {
19
- branch: string;
20
- registryMtimeMs: number;
21
- expiresAt: number;
22
- }
23
-
24
- /**
25
- * Short-lived cache: invalidated by registry mtime or 30s TTL.
26
- *
27
- * Policy (do not rewrite without explicit design change):
28
- * - registry mtime 变化时立即失效;
29
- * - 未检测到 mtime 变化时,defaultBranch 变更最多存在 30 秒可见延迟。
30
- * - Cache keys include controllerHome + canonical repo root (no cross-repo bleed).
31
- * - Registry unavailable → Git fallback (origin/HEAD, main/master, current branch).
32
- */
33
- const targetBranchCache = new Map<string, TargetBranchCacheEntry>();
34
- const TARGET_BRANCH_TTL_MS = 30_000;
35
-
36
- function registryMtimeMs(controllerHome: string): number {
37
- try {
38
- return statSync(join(resolveControllerHome(controllerHome), 'repositories.json')).mtimeMs;
39
- } catch {
40
- return 0;
41
- }
42
- }
43
-
44
- export function clearCompletionTargetCache(): void {
45
- targetBranchCache.clear();
46
- }
47
-
48
9
  export function resolveCompletionTargetBranch(repoRoot: string): string {
49
- const root = canonical(repoRoot);
50
- try {
51
- const home = resolveRepoPreferredControllerHome(repoRoot);
52
- const mtime = registryMtimeMs(home);
53
- const cacheKey = `${home}\0${root}`;
54
- const cached = targetBranchCache.get(cacheKey);
55
- const now = Date.now();
56
- if (cached && cached.registryMtimeMs === mtime && cached.expiresAt > now) {
57
- return cached.branch;
58
- }
59
- const registered = listRepositories(home, { includeRemoved: true }).find((record) => {
60
- if (canonical(record.canonicalRoot) === root || canonical(record.localRoot) === root) return true;
61
- return record.checkouts.some((checkout) => canonical(checkout.canonicalRoot) === root || canonical(checkout.localRoot) === root);
62
- });
63
- if (registered?.defaultBranch?.trim()) {
64
- const branch = registered.defaultBranch.trim();
65
- targetBranchCache.set(cacheKey, {
66
- branch,
67
- registryMtimeMs: mtime,
68
- expiresAt: now + TARGET_BRANCH_TTL_MS,
69
- });
70
- return branch;
71
- }
72
- } catch (_error) {
73
- // Temporary test repositories and unregistered clones fall through to Git discovery.
74
- }
75
-
76
- const remoteHead = gitText(repoRoot, ['symbolic-ref', '--quiet', '--short', 'refs/remotes/origin/HEAD']);
77
- if (remoteHead.startsWith('origin/')) return remoteHead.slice('origin/'.length);
78
- for (const candidate of ['main', 'master']) {
79
- if (gitText(repoRoot, ['show-ref', '--verify', '--hash', `refs/heads/${candidate}`])) return candidate;
80
- }
81
- return gitText(repoRoot, ['branch', '--show-current']) || 'main';
10
+ const branch = gitText(repoRoot, ['branch', '--show-current']);
11
+ if (!branch) throw new Error('integration target must be an attached branch');
12
+ return branch;
82
13
  }
83
14
 
84
15
  export function currentCompletionTarget(repoRoot: string): {
@@ -2,7 +2,7 @@ import { existsSync, readFileSync } from 'fs';
2
2
  import { join } from 'path';
3
3
  import { createHash } from 'crypto';
4
4
  import { runProcess } from '../../effects/process-runner';
5
- import { resolveMcpRepoRoot } from '../mcp/repo';
5
+ import { resolveMcpRepoRoot } from '../../../adapters/mcp/repo';
6
6
  import { listControllerChecks, runControllerCheck } from './check-runner';
7
7
  import {
8
8
  compositeFailed,
@@ -1,6 +1,6 @@
1
1
  import { readFileSync } from 'fs';
2
2
  import { posix, resolve } from 'path';
3
- import type { McpPolicy } from '../../mcp/types';
3
+ import type { McpPolicy } from '../../../../adapters/mcp/types';
4
4
  import { readableFile } from './known-paths';
5
5
 
6
6
  const CONTRACT_NAMES = ['AGENTS.md', 'CLAUDE.md'] as const;
@@ -1,6 +1,6 @@
1
1
  import { existsSync, lstatSync, readdirSync, statSync } from 'fs';
2
- import { globMatches, resolveMcpPath } from '../../mcp/paths';
3
- import type { McpPolicy } from '../../mcp/types';
2
+ import { globMatches, resolveMcpPath } from '../../../../adapters/mcp/paths';
3
+ import type { McpPolicy } from '../../../../adapters/mcp/types';
4
4
 
5
5
  export function looksLikeGlob(path: string): boolean { return /[*?{[]/.test(path); }
6
6
  export function coveredByGlob(path: string, globs: string[]): boolean {
@@ -1,8 +1,8 @@
1
1
  import type { ControllerContextImpactDomain, ControllerContextRetrievalMode } from './types';
2
2
 
3
3
  export const DEFAULT_MAX_FILES = 8;
4
- export const DEFAULT_MAX_SNIPPETS = 20;
5
- export const DEFAULT_MAX_CHARS_PER_SNIPPET = 8000;
4
+ export const DEFAULT_MAX_SNIPPETS = 12;
5
+ export const DEFAULT_MAX_CHARS_PER_SNIPPET = 1800;
6
6
  export const DEFAULT_SEARCH_EXCLUDE_GLOBS = [
7
7
  '.git/**', '_ops/**', '.forge/**', '.ai/harness/**', 'node_modules/**', 'dist/**', 'coverage/**', '**/*.bak',
8
8
  ] as const;
@@ -47,13 +47,20 @@ export function pathNoisePenalty(path: string, intent: string, retrievalMode: Co
47
47
  export function textTokens(value: string): string[] {
48
48
  const split = value.replace(/([a-z0-9])([A-Z])/g, '$1 $2').split(/[^\p{L}\p{N}_./:-]+/u)
49
49
  .map((entry) => entry.trim()).filter(Boolean);
50
- return Array.from(new Set(split
50
+ // Preserve full code needles before their broad camel-case fragments.
51
+ return Array.from(new Set([...codeShapedAnchors(value), ...split]
51
52
  .map((entry) => entry.replace(/^[\'"`]+|[\'"`]+$/g, ''))
52
53
  .filter((entry) => entry.length >= 3)
53
54
  .filter((entry) => !STOPWORDS.has(entry.toLowerCase()))
54
55
  .filter((entry) => !/^\d+$/.test(entry)))).slice(0, 12);
55
56
  }
56
57
 
58
+ /** Split explicit multi-symbol input into independent exact needles before search. */
59
+ export function explicitCodeQueries(searchTerms: readonly string[] | undefined): string[] {
60
+ // Camel-case fragments are hints, not separately mandatory matches.
61
+ return Array.from(new Set((searchTerms ?? []).flatMap(codeShapedAnchors))).slice(0, 4);
62
+ }
63
+
57
64
  /** A caller-supplied symbol or path is an exact retrieval needle, not a broad hint. */
58
65
  export function isCodeShapedTerm(value: string): boolean {
59
66
  const term = value.trim();
@@ -77,7 +84,7 @@ function codeShapedAnchors(value: string): string[] {
77
84
  }
78
85
 
79
86
  /**
80
- * CodeGraph's semantic query cost grows materially with long natural-language
87
+ * Structural providers' query cost grows materially with long natural-language
81
88
  * prompts. Keep short intents exact, but compact long intents around concrete
82
89
  * code anchors plus bounded semantic tokens. This affects only structural
83
90
  * discovery; lexical search and raw-source retrieval still consume the full
@@ -1,7 +1,7 @@
1
1
  import { closeSync, openSync, readSync, statSync } from 'fs';
2
2
  import { extname, resolve } from 'path';
3
- import { globMatches } from '../../mcp/paths';
4
- import type { McpPolicy } from '../../mcp/types';
3
+ import { globMatches } from '../../../../adapters/mcp/paths';
4
+ import type { McpPolicy } from '../../../../adapters/mcp/types';
5
5
  import { readableFile } from './known-paths';
6
6
 
7
7
  export const GOVERNANCE_RULES_PATH = '.ai/context/governance-rules.json';
@@ -1,6 +1,6 @@
1
- import ts from 'typescript';
2
- import type { McpPolicy } from '../../mcp/types';
3
- import { redactMcpText } from '../../mcp/redaction';
1
+ import type { McpPolicy } from '../../../../adapters/mcp/types';
2
+ import { extractTypeScriptSourceSymbolsInSidecar } from '../../../runtime/context/typescript-navigation-process';
3
+ import { redactMcpText } from '../../../../adapters/mcp/redaction';
4
4
  import { readRepositoryRange, type RepositoryReadSession } from '../../repository/inspector';
5
5
 
6
6
  const DEFAULT_CONTEXT_BEFORE = 12;
@@ -46,16 +46,8 @@ interface SymbolRange {
46
46
  enclosing?: string;
47
47
  }
48
48
 
49
- interface IndexedDeclaration {
50
- node: ts.Node;
51
- kind: string;
52
- fullStart: number;
53
- end: number;
54
- }
55
-
56
49
  interface SourceSymbolIndex {
57
- sourceFile: ts.SourceFile;
58
- declarations: IndexedDeclaration[];
50
+ declarations: SymbolRange[];
59
51
  }
60
52
 
61
53
  const SOURCE_SYMBOL_INDEX_CACHE_MAX_ENTRIES = 32;
@@ -77,11 +69,6 @@ export function clearSourceSymbolIndexCacheForTest(): void {
77
69
  sourceSymbolIndexCacheMisses = 0;
78
70
  }
79
71
 
80
- function boundedContent(content: string, maxChars: number): { content: string; truncated: boolean } {
81
- if (content.length <= maxChars) return { content, truncated: false };
82
- return { content: `${content.slice(0, maxChars)}\n... <snippet truncated>`, truncated: true };
83
- }
84
-
85
72
  function plainSource(numbered: string): string {
86
73
  return numbered
87
74
  .split(/\r?\n/)
@@ -107,70 +94,13 @@ function mergeHitLines(lines: number[]): number[] {
107
94
  return merged;
108
95
  }
109
96
 
110
- function scriptKind(path: string): ts.ScriptKind | undefined {
111
- if (/\.tsx$/i.test(path)) return ts.ScriptKind.TSX;
112
- if (/\.jsx$/i.test(path)) return ts.ScriptKind.JSX;
113
- if (/\.(?:mts|cts|ts)$/i.test(path)) return ts.ScriptKind.TS;
114
- if (/\.(?:mjs|cjs|js)$/i.test(path)) return ts.ScriptKind.JS;
115
- return undefined;
116
- }
117
-
118
- function declarationName(node: ts.Node): string | undefined {
119
- const named = node as ts.Node & { name?: ts.Node };
120
- if (!named.name) return undefined;
121
- return named.name.getText().slice(0, 200);
122
- }
123
-
124
- function declarationKind(node: ts.Node): string | undefined {
125
- if (ts.isFunctionDeclaration(node)) return 'function';
126
- if (ts.isMethodDeclaration(node)) return 'method';
127
- if (ts.isConstructorDeclaration(node)) return 'constructor';
128
- if (ts.isGetAccessorDeclaration(node)) return 'getter';
129
- if (ts.isSetAccessorDeclaration(node)) return 'setter';
130
- if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) return 'class';
131
- if (ts.isInterfaceDeclaration(node)) return 'interface';
132
- if (ts.isTypeAliasDeclaration(node)) return 'type';
133
- if (ts.isEnumDeclaration(node)) return 'enum';
134
- if (ts.isModuleDeclaration(node)) return 'module';
135
- if (ts.isVariableStatement(node) && node.declarationList.declarations.some((declaration) =>
136
- declaration.initializer && (ts.isArrowFunction(declaration.initializer) || ts.isFunctionExpression(declaration.initializer)))) return 'function-variable';
137
- return undefined;
138
- }
139
-
140
- function enclosingName(node: ts.Node): string | undefined {
141
- let current = node.parent;
142
- while (current) {
143
- if (ts.isClassDeclaration(current) || ts.isClassExpression(current) || ts.isInterfaceDeclaration(current) || ts.isModuleDeclaration(current)) {
144
- const kind = declarationKind(current) ?? 'container';
145
- const name = declarationName(current);
146
- return name ? `${kind}:${name}` : kind;
147
- }
148
- current = current.parent;
149
- }
150
- return undefined;
151
- }
152
-
153
- function buildSourceSymbolIndex(path: string, source: string, kind: ts.ScriptKind): SourceSymbolIndex {
154
- const sourceFile = ts.createSourceFile(path, source, ts.ScriptTarget.Latest, true, kind);
155
- const declarations: IndexedDeclaration[] = [];
156
- const visit = (node: ts.Node): void => {
157
- const candidateKind = declarationKind(node);
158
- if (candidateKind) {
159
- declarations.push({
160
- node,
161
- kind: candidateKind,
162
- fullStart: node.getFullStart(),
163
- end: node.end,
164
- });
165
- }
166
- ts.forEachChild(node, visit);
167
- };
168
- visit(sourceFile);
169
- return { sourceFile, declarations };
97
+ function sourceSyntaxKind(path: string): string | undefined {
98
+ const match = path.toLowerCase().match(/\.(tsx|jsx|mts|cts|ts|mjs|cjs|js)$/);
99
+ return match?.[1];
170
100
  }
171
101
 
172
102
  function cachedSourceSymbolIndex(path: string, fileSha: string, numberedSource: string): SourceSymbolIndex | undefined {
173
- const kind = scriptKind(path);
103
+ const kind = sourceSyntaxKind(path);
174
104
  if (kind === undefined) return undefined;
175
105
  const key = `${kind}:${fileSha}`;
176
106
  const cached = sourceSymbolIndexCache.get(key);
@@ -182,7 +112,9 @@ function cachedSourceSymbolIndex(path: string, fileSha: string, numberedSource:
182
112
  }
183
113
 
184
114
  sourceSymbolIndexCacheMisses += 1;
185
- const built = buildSourceSymbolIndex(path, plainSource(numberedSource), kind);
115
+ const built: SourceSymbolIndex = {
116
+ declarations: extractTypeScriptSourceSymbolsInSidecar(path, plainSource(numberedSource)),
117
+ };
186
118
  sourceSymbolIndexCache.set(key, built);
187
119
  while (sourceSymbolIndexCache.size > SOURCE_SYMBOL_INDEX_CACHE_MAX_ENTRIES) {
188
120
  const oldest = sourceSymbolIndexCache.keys().next().value as string | undefined;
@@ -194,22 +126,13 @@ function cachedSourceSymbolIndex(path: string, fileSha: string, numberedSource:
194
126
 
195
127
  function symbolAtLine(index: SourceSymbolIndex | undefined, line: number): SymbolRange | undefined {
196
128
  if (!index) return undefined;
197
- const { sourceFile, declarations } = index;
198
- const targetLine = Math.min(Math.max(1, line), sourceFile.getLineAndCharacterOfPosition(sourceFile.end).line + 1);
199
- const position = sourceFile.getPositionOfLineAndCharacter(targetLine - 1, 0);
200
- let selected: IndexedDeclaration | undefined;
201
- for (const candidate of declarations) {
202
- if (candidate.fullStart > position || candidate.end < position) continue;
203
- if (!selected || (candidate.end - candidate.fullStart) < (selected.end - selected.fullStart)) selected = candidate;
129
+ const targetLine = Math.max(1, line);
130
+ let selected: SymbolRange | undefined;
131
+ for (const candidate of index.declarations) {
132
+ if (candidate.startLine > targetLine || candidate.endLine < targetLine) continue;
133
+ if (!selected || (candidate.endLine - candidate.startLine) < (selected.endLine - selected.startLine)) selected = candidate;
204
134
  }
205
- if (!selected) return undefined;
206
- return {
207
- startLine: sourceFile.getLineAndCharacterOfPosition(selected.node.getStart(sourceFile)).line + 1,
208
- endLine: sourceFile.getLineAndCharacterOfPosition(selected.node.end).line + 1,
209
- kind: selected.kind,
210
- name: declarationName(selected.node),
211
- enclosing: enclosingName(selected.node),
212
- };
135
+ return selected;
213
136
  }
214
137
 
215
138
  function materializedSnippet(
@@ -219,18 +142,42 @@ function materializedSnippet(
219
142
  materialization: SourceMaterializationKind,
220
143
  symbol?: SymbolRange,
221
144
  ): MaterializedSourceSnippet {
222
- const numbered = sliceNumbered(full.content, range.startLine, range.endLine);
223
- const redacted = redactMcpText(numbered);
224
- const bounded = boundedContent(redacted.text, options.maxCharsPerSnippet);
145
+ let low = range.startLine;
146
+ let high = range.endLine;
147
+ let exactEndLine = range.startLine - 1;
148
+ let exactContent = '';
149
+ let exactRedactions: Array<{ type: string; count: number }> = [];
150
+ while (low <= high) {
151
+ const candidateEndLine = Math.floor((low + high) / 2);
152
+ const redacted = redactMcpText(sliceNumbered(full.content, range.startLine, candidateEndLine));
153
+ if (redacted.text.length <= options.maxCharsPerSnippet) {
154
+ exactEndLine = candidateEndLine;
155
+ exactContent = redacted.text;
156
+ exactRedactions = redacted.redactions;
157
+ low = candidateEndLine + 1;
158
+ } else {
159
+ high = candidateEndLine - 1;
160
+ }
161
+ }
162
+ // Source evidence is line-addressed. Never character-cut content while still
163
+ // reporting the original endLine. A single unusually long line stays intact
164
+ // so the reported source range remains truthful; outer response budgets remain
165
+ // the hard transport fence.
166
+ if (exactEndLine < range.startLine) {
167
+ const redacted = redactMcpText(sliceNumbered(full.content, range.startLine, range.startLine));
168
+ exactEndLine = range.startLine;
169
+ exactContent = redacted.text;
170
+ exactRedactions = redacted.redactions;
171
+ }
225
172
  return {
226
173
  path: full.path,
227
174
  startLine: range.startLine,
228
- endLine: range.endLine,
175
+ endLine: exactEndLine,
229
176
  totalLines: full.totalLines,
230
177
  sha256: full.sha256,
231
- content: bounded.content,
232
- truncated: bounded.truncated,
233
- redactions: redacted.redactions,
178
+ content: exactContent,
179
+ truncated: exactEndLine < range.endLine,
180
+ redactions: exactRedactions,
234
181
  reason: options.reasons.join(', '),
235
182
  cacheHit: full.cacheHit,
236
183
  materialization,
@@ -238,6 +185,33 @@ function materializedSnippet(
238
185
  };
239
186
  }
240
187
 
188
+ function materializedRange(
189
+ full: ReturnType<typeof readRepositoryRange>,
190
+ range: { startLine: number; endLine: number },
191
+ options: MaterializeSourceOptions,
192
+ materialization: SourceMaterializationKind,
193
+ maxSnippets: number,
194
+ symbol?: SymbolRange,
195
+ ): MaterializedSourceSnippet[] {
196
+ const snippets: MaterializedSourceSnippet[] = [];
197
+ let startLine = range.startLine;
198
+ while (startLine <= range.endLine && snippets.length < maxSnippets) {
199
+ const snippet = materializedSnippet(
200
+ full,
201
+ { startLine, endLine: range.endLine },
202
+ options,
203
+ materialization,
204
+ symbol,
205
+ );
206
+ snippets.push({ ...snippet, truncated: false });
207
+ startLine = snippet.endLine + 1;
208
+ }
209
+ if (startLine <= range.endLine && snippets.length > 0) {
210
+ snippets[snippets.length - 1] = { ...snippets[snippets.length - 1]!, truncated: true };
211
+ }
212
+ return snippets;
213
+ }
214
+
241
215
  /**
242
216
  * Materialize current source in semantic units. Complete small files and
243
217
  * complete TypeScript/JavaScript declarations win; a fixed line window is the
@@ -272,7 +246,14 @@ export function materializeSource(options: MaterializeSourceOptions): Materializ
272
246
  const key = `${range.startLine}:${range.endLine}`;
273
247
  if (seen.has(key)) continue;
274
248
  seen.add(key);
275
- snippets.push(materializedSnippet(full, range, options, symbol ? 'symbol' : 'line_window', symbol));
249
+ snippets.push(...materializedRange(
250
+ full,
251
+ range,
252
+ options,
253
+ symbol ? 'symbol' : 'line_window',
254
+ options.maxSnippets - snippets.length,
255
+ symbol,
256
+ ));
276
257
  }
277
258
  return snippets;
278
259
  }