specrails-desktop 2.55.0 → 2.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/cli/dist/args.js +80 -0
  2. package/cli/dist/desktop-client.js +125 -0
  3. package/cli/dist/desktop-control.js +339 -0
  4. package/cli/dist/format.js +45 -0
  5. package/cli/dist/help.js +68 -0
  6. package/cli/dist/output.js +47 -0
  7. package/cli/dist/run-command.js +340 -0
  8. package/cli/dist/specrails-desktop.js +41 -1107
  9. package/cli/dist/status.js +111 -0
  10. package/client/dist/assets/{ActivityFeedPage-ILXMZXcb.js → ActivityFeedPage-DdMNmVBk.js} +1 -1
  11. package/client/dist/assets/{AgentBrowserCapture-UcsupCy7.js → AgentBrowserCapture-CeerUf--.js} +1 -1
  12. package/client/dist/assets/{AgentModeAnalyticsPane-CQuxYh8B.js → AgentModeAnalyticsPane-BjGb-8rh.js} +2 -2
  13. package/client/dist/assets/{AgentModeCodePane-zPWbW7ei.js → AgentModeCodePane-8XRkQEo_.js} +2 -2
  14. package/client/dist/assets/{AgentModeJobsPane-CInByIdl.js → AgentModeJobsPane-BN3dgJOA.js} +1 -1
  15. package/client/dist/assets/{AgentsPage-BWvgxaBv.js → AgentsPage-DfHWgP_x.js} +1 -1
  16. package/client/dist/assets/{AnalyticsPage-DP3jakv-.js → AnalyticsPage-CyfhYiBn.js} +1 -1
  17. package/client/dist/assets/{CodePage-BKXiwE5a.js → CodePage-C2Nf-Q5W.js} +1 -1
  18. package/client/dist/assets/{DesktopAnalyticsPage-DryJOaMz.js → DesktopAnalyticsPage-tc0p4jJW.js} +1 -1
  19. package/client/dist/assets/{DocsDialog-BsCG9ksG.js → DocsDialog-Br3bczCp.js} +1 -1
  20. package/client/dist/assets/{DocsPage-Cc-GeKYl.js → DocsPage-BcDr2cBm.js} +1 -1
  21. package/client/dist/assets/{ExportDropdown-ClahJdDn.js → ExportDropdown-BVGKEgkd.js} +1 -1
  22. package/client/dist/assets/{InteractiveJobComposer-DfLF6N0f.js → InteractiveJobComposer-DFPpdg2D.js} +1 -1
  23. package/client/dist/assets/{JobDetailModal-DHeur9YK.js → JobDetailModal-BdOv-l-M.js} +1 -1
  24. package/client/dist/assets/{JobDetailPage-CraDKzeG.js → JobDetailPage-vBbNeRuz.js} +1 -1
  25. package/client/dist/assets/{JobsPage-CcbuSwj7.js → JobsPage-CJCtPhIz.js} +1 -1
  26. package/client/dist/assets/{LoopBuilderPage-BKtNp494.js → LoopBuilderPage-BemvUOxy.js} +1 -1
  27. package/client/dist/assets/{LoopPreviewModal-DbZd9isy.js → LoopPreviewModal-C6hNAeYN.js} +1 -1
  28. package/client/dist/assets/{LoopsPage-DEg6sIkG.js → LoopsPage-BZr0quvh.js} +1 -1
  29. package/client/dist/assets/{MinimizedChatsContext-BGtEjWsc.js → MinimizedChatsContext-D3QzgV0B.js} +1 -1
  30. package/client/dist/assets/{PluginsPage-BVqSsPzL.js → PluginsPage-DOpTV75p.js} +1 -1
  31. package/client/dist/assets/{ProjectSettingsDialog-CAjLgJAZ.js → ProjectSettingsDialog-Dkwrn0z1.js} +1 -1
  32. package/client/dist/assets/{RepositoryDeliveries-DrcrxLe0.js → RepositoryDeliveries-Du2UCf1a.js} +1 -1
  33. package/client/dist/assets/{RepositoryScopeSelector-CAGY3xW6.js → RepositoryScopeSelector-hPGZNRBm.js} +1 -1
  34. package/client/dist/assets/ReviewPacketPage-DcOq-UTA.js +4 -0
  35. package/client/dist/assets/{TemplatePreviewModal-Bqs-9fhn.js → TemplatePreviewModal-Cejcquah.js} +1 -1
  36. package/client/dist/assets/{TicketDetailModalContext-C0jQ5yOk.js → TicketDetailModalContext-DAK-NoK6.js} +1 -1
  37. package/client/dist/assets/{Trans-DtWlCJN9.js → Trans-DEbgkuAY.js} +1 -1
  38. package/client/dist/assets/{dashboard-CTfEtkqX.js → dashboard-B9uWNGO2.js} +1 -1
  39. package/client/dist/assets/{dashboard-DMklepmz.js → dashboard-BIwmO9wc.js} +1 -1
  40. package/client/dist/assets/{dashboard-DBAP2_SQ.js → dashboard-BV4vOZkR.js} +1 -1
  41. package/client/dist/assets/{dashboard-D40HP2ks.js → dashboard-Bf6MPVsM.js} +1 -1
  42. package/client/dist/assets/{dashboard-Csf1yGSN.js → dashboard-C8klWVvZ.js} +1 -1
  43. package/client/dist/assets/{dashboard-C29Qwa-L.js → dashboard-D1ORhPF0.js} +1 -1
  44. package/client/dist/assets/{dashboard-Cr4D8oMn.js → dashboard-DSubvs9x.js} +1 -1
  45. package/client/dist/assets/{dashboard-CSJzf5OT.js → dashboard-px_vlRx_.js} +1 -1
  46. package/client/dist/assets/{formatDistanceToNow-DYmvOA3R.js → formatDistanceToNow-Cc2u5FwQ.js} +1 -1
  47. package/client/dist/assets/{getTimezoneOffsetInMilliseconds-BAhW5E6V.js → getTimezoneOffsetInMilliseconds-BHm2U-w1.js} +1 -1
  48. package/client/dist/assets/index-C51x61Bz.css +2 -0
  49. package/client/dist/assets/{index-BfAZg5DG.js → index-Cxb288Rj.js} +29 -29
  50. package/client/dist/assets/{jira-api-B27Za5FP.js → jira-api-DrGxiD9p.js} +1 -1
  51. package/client/dist/assets/packet-8nn9RsU7.js +1 -0
  52. package/client/dist/assets/packet-B0H15elv.js +1 -0
  53. package/client/dist/assets/packet-BQvBgrwh.js +1 -0
  54. package/client/dist/assets/packet-BR7mO0-a.js +1 -0
  55. package/client/dist/assets/packet-BgcQ6q_K.js +1 -0
  56. package/client/dist/assets/packet-D2s92Jnn.js +1 -0
  57. package/client/dist/assets/packet-YbtcD1HS.js +1 -0
  58. package/client/dist/assets/packet-c0Qj_9eX.js +1 -0
  59. package/client/dist/assets/{project-repositories-DixIZHTA.js → project-repositories-9Wzs0coQ.js} +1 -1
  60. package/client/dist/assets/{spending-BGmZBX5B.js → spending-T5GM7wpn.js} +1 -1
  61. package/client/dist/assets/{useDesktop-CPB4cnwI.js → useDesktop-QogiN0zR.js} +1 -1
  62. package/client/dist/assets/{useRuntimeRuns-DEQ9HdAM.js → useRuntimeRuns-Dqmz9fS9.js} +1 -1
  63. package/client/dist/assets/{useSharedWebSocket-DcPRKR8R.js → useSharedWebSocket-Dz-HI6De.js} +2 -2
  64. package/client/dist/index.html +17 -17
  65. package/docs/codex.md +5 -5
  66. package/docs/customizing.md +1 -1
  67. package/docs/gemini-cli-provider-study.md +14 -14
  68. package/docs/gemini-core-support-evaluation.md +1 -1
  69. package/docs/gemini.md +5 -5
  70. package/docs/internals/README.md +6 -2
  71. package/docs/internals/adding-a-provider.md +22 -15
  72. package/docs/internals/agent-runtime-framework-evaluation.md +8 -8
  73. package/docs/internals/api-reference.md +2 -2
  74. package/docs/internals/architecture.md +9 -9
  75. package/docs/internals/browser-capture-performance.md +3 -3
  76. package/docs/internals/code-explorer-story.md +2 -2
  77. package/docs/internals/companion-rails-as-loops-contract.md +2 -2
  78. package/docs/internals/core-runtime-updates.md +5 -0
  79. package/docs/internals/embedded-browser-native-webview-evaluation.md +5 -5
  80. package/docs/internals/gemini-mcp-registration.md +2 -2
  81. package/docs/internals/global-artifacts-alignment-contract.md +1 -1
  82. package/docs/internals/global-artifacts-relocation-evaluation.md +1 -1
  83. package/docs/internals/interactive-jobs.md +8 -8
  84. package/docs/internals/legacy-implementation-notes.md +722 -0
  85. package/docs/internals/loop-step-log-explorer.md +8 -8
  86. package/docs/internals/mission-rail-cards.md +14 -14
  87. package/docs/internals/modular-architecture.md +107 -0
  88. package/docs/internals/profiles.md +1 -1
  89. package/docs/internals/programmatic-agent-runtime.md +66 -0
  90. package/docs/internals/project-builder.md +18 -18
  91. package/docs/internals/review-packet.md +8 -8
  92. package/docs/internals/safe-pr-review-flow.md +11 -11
  93. package/docs/internals/source-architecture.md +131 -0
  94. package/docs/internals/source-map.md +1356 -0
  95. package/docs/internals/spec-addenda.md +65 -9
  96. package/docs/internals/switch-to-agent-mode-design.md +11 -11
  97. package/docs/tracking-cost.md +1 -1
  98. package/package.json +5 -2
  99. package/server/dist/agent-mcp-config.js +1 -1
  100. package/server/dist/attachment-manager.js +1 -1
  101. package/server/dist/build-dirs.js +2 -2
  102. package/server/dist/config.js +0 -3
  103. package/server/dist/core-completion.js +1 -1
  104. package/server/dist/core-execution.js +1 -1
  105. package/server/dist/db/activity.js +39 -0
  106. package/server/dist/db/connection.js +41 -0
  107. package/server/dist/db/conversations.js +48 -0
  108. package/server/dist/db/jobs.js +251 -0
  109. package/server/dist/db/migrations.js +1521 -0
  110. package/server/dist/db/proposals.js +50 -0
  111. package/server/dist/db/settings.js +15 -0
  112. package/server/dist/db/stats.js +61 -0
  113. package/server/dist/db/telemetry.js +56 -0
  114. package/server/dist/db/templates.js +37 -0
  115. package/server/dist/db/types.js +2 -0
  116. package/server/dist/db.js +66 -2224
  117. package/server/dist/desktop-db.js +3 -3
  118. package/server/dist/desktop-router.js +8 -8
  119. package/server/dist/git-diagnostics.js +1 -1
  120. package/server/dist/index.js +11 -11
  121. package/server/dist/integration-branch.js +3 -14
  122. package/server/dist/jira/jira-issue-fields.js +0 -1
  123. package/server/dist/jira/jira-materializer.js +1 -1
  124. package/server/dist/jira/jira-sync-manager.js +1 -1
  125. package/server/dist/mcp/guide.js +16 -2
  126. package/server/dist/mcp/mcp-admin-router.js +1 -1
  127. package/server/dist/mcp/mcp-server.js +1 -1
  128. package/server/dist/mcp/tools/catalog.js +2 -0
  129. package/server/dist/mcp/tools/jobs.js +23 -5
  130. package/server/dist/mcp/tools/rails.js +2 -2
  131. package/server/dist/mcp/tools/recovery.js +35 -0
  132. package/server/dist/mcp/tools/specs.js +2 -2
  133. package/server/dist/mcp/tools/support.js +4 -1
  134. package/server/dist/mcp/tools/types.js +3 -3
  135. package/server/dist/mobile/mobile-gateway.js +1 -1
  136. package/server/dist/mobile/mobile-missions.js +1 -1
  137. package/server/dist/{desktop-analytics.js → modules/accounting/runtime/desktop-analytics.js} +2 -2
  138. package/server/dist/{pricing.js → modules/accounting/runtime/pricing.js} +10 -3
  139. package/server/dist/{result-event.js → modules/accounting/runtime/result-event.js} +3 -3
  140. package/server/dist/{spending.js → modules/accounting/runtime/spending.js} +0 -3
  141. package/server/dist/{telemetry-compactor.js → modules/accounting/runtime/telemetry-compactor.js} +1 -1
  142. package/server/dist/{telemetry-receiver.js → modules/accounting/runtime/telemetry-receiver.js} +2 -2
  143. package/server/dist/{agent-runtime-bridge.js → modules/agent-runtime/runtime/agent-runtime-bridge.js} +2 -2
  144. package/server/dist/{agent-runtime-controls-router.js → modules/agent-runtime/runtime/agent-runtime-controls-router.js} +16 -0
  145. package/server/dist/{agent-runtime-controls.js → modules/agent-runtime/runtime/agent-runtime-controls.js} +100 -8
  146. package/server/dist/{agent-runtime-effective-config.js → modules/agent-runtime/runtime/agent-runtime-effective-config.js} +1 -1
  147. package/server/dist/{agent-runtime-loader.js → modules/agent-runtime/runtime/agent-runtime-loader.js} +3 -3
  148. package/server/dist/{agent-runtime-paths.js → modules/agent-runtime/runtime/agent-runtime-paths.js} +1 -1
  149. package/server/dist/modules/agent-runtime/runtime/agent-runtime-recovery.js +53 -0
  150. package/server/dist/{agent-runtime-settings-router.js → modules/agent-runtime/runtime/agent-runtime-settings-router.js} +2 -2
  151. package/server/dist/{agent-runtime-settings.js → modules/agent-runtime/runtime/agent-runtime-settings.js} +3 -3
  152. package/server/dist/{agent-runtime-settlement.js → modules/agent-runtime/runtime/agent-runtime-settlement.js} +6 -6
  153. package/server/dist/{agent-defaults.js → modules/agents/runtime/agent-defaults.js} +3 -3
  154. package/server/dist/{agent-generator.js → modules/agents/runtime/agent-generator.js} +7 -7
  155. package/server/dist/{agent-refine-manager.js → modules/agents/runtime/agent-refine-manager.js} +5 -5
  156. package/server/dist/{agent-store.js → modules/agents/runtime/agent-store.js} +1 -1
  157. package/server/dist/{profile-manager.js → modules/agents/runtime/profile-manager.js} +2 -2
  158. package/server/dist/{profiles-router.js → modules/agents/runtime/profiles-router.js} +5 -5
  159. package/server/dist/{browser-capture-manager.js → modules/browser/runtime/browser-capture-manager.js} +2 -4
  160. package/server/dist/{browser-playwright.js → modules/browser/runtime/browser-playwright.js} +1 -1
  161. package/server/dist/{blueprint-chat-manager.js → modules/builder/runtime/blueprint-chat-manager.js} +7 -7
  162. package/server/dist/{blueprint-commit.js → modules/builder/runtime/blueprint-commit.js} +8 -8
  163. package/server/dist/{blueprint-draft-parser.js → modules/builder/runtime/blueprint-draft-parser.js} +1 -1
  164. package/server/dist/{blueprint-generation.js → modules/builder/runtime/blueprint-generation.js} +1 -1
  165. package/server/dist/{blueprint-operator-prompt.js → modules/builder/runtime/blueprint-operator-prompt.js} +1 -1
  166. package/server/dist/{blueprint-router.js → modules/builder/runtime/blueprint-router.js} +3 -3
  167. package/server/dist/{blueprint-spec-quality.js → modules/builder/runtime/blueprint-spec-quality.js} +1 -1
  168. package/server/dist/{milestone-chain.js → modules/builder/runtime/milestone-chain.js} +1 -1
  169. package/server/dist/{milestone-progress.js → modules/builder/runtime/milestone-progress.js} +6 -6
  170. package/server/dist/{code-activity.js → modules/code/runtime/code-activity.js} +1 -1
  171. package/server/dist/{code-explorer-router.js → modules/code/runtime/code-explorer-router.js} +5 -5
  172. package/server/dist/{file-provenance.js → modules/code/runtime/file-provenance.js} +1 -1
  173. package/server/dist/{file-story-manager.js → modules/code/runtime/file-story-manager.js} +2 -2
  174. package/server/dist/{file-story.js → modules/code/runtime/file-story.js} +2 -2
  175. package/server/dist/{file-summary-generator.js → modules/code/runtime/file-summary-generator.js} +3 -3
  176. package/server/dist/{file-summary-manager.js → modules/code/runtime/file-summary-manager.js} +3 -3
  177. package/server/dist/{project-code-discovery.js → modules/code/runtime/project-code-discovery.js} +2 -2
  178. package/server/dist/modules/conversations/domain/draft-stream.js +91 -0
  179. package/server/dist/modules/conversations/domain/recovery-context.js +101 -0
  180. package/server/dist/modules/conversations/index.js +10 -0
  181. package/server/dist/{chat-manager.js → modules/conversations/runtime/chat-manager.js} +32 -216
  182. package/server/dist/{context-budget.js → modules/conversations/runtime/context-budget.js} +1 -1
  183. package/server/dist/{explore-cwd-manager.js → modules/conversations/runtime/explore-cwd-manager.js} +1 -1
  184. package/server/dist/{explore-smash.js → modules/conversations/runtime/explore-smash.js} +1 -1
  185. package/server/dist/{explore-stdin-session.js → modules/conversations/runtime/explore-stdin-session.js} +1 -1
  186. package/server/dist/modules/delivery/adapters/decisions/chains.js +138 -0
  187. package/server/dist/modules/delivery/adapters/decisions/contracts.js +2 -0
  188. package/server/dist/modules/delivery/adapters/decisions/create.js +234 -0
  189. package/server/dist/modules/delivery/adapters/decisions/discard.js +251 -0
  190. package/server/dist/modules/delivery/adapters/decisions/dispatch.js +107 -0
  191. package/server/dist/modules/delivery/adapters/decisions/evidence.js +205 -0
  192. package/server/dist/modules/delivery/adapters/decisions/merge-local.js +338 -0
  193. package/server/dist/modules/delivery/adapters/decisions/metadata.js +109 -0
  194. package/server/dist/modules/delivery/adapters/decisions/observations.js +260 -0
  195. package/server/dist/modules/delivery/adapters/decisions/ownership.js +83 -0
  196. package/server/dist/modules/delivery/adapters/decisions/publish.js +242 -0
  197. package/server/dist/modules/delivery/adapters/decisions/recovery.js +425 -0
  198. package/server/dist/modules/delivery/adapters/decisions/retry.js +112 -0
  199. package/server/dist/modules/delivery/adapters/decisions/transitions.js +94 -0
  200. package/server/dist/modules/delivery/domain/decision-policy.js +50 -0
  201. package/server/dist/modules/delivery/domain/state.js +2 -0
  202. package/server/dist/modules/delivery/index.js +7 -0
  203. package/server/dist/{active-pr-continuation.js → modules/delivery/runtime/active-pr-continuation.js} +2 -2
  204. package/server/dist/{delivery-evidence.js → modules/delivery/runtime/delivery-evidence.js} +3 -3
  205. package/server/dist/{multi-repo-bases.js → modules/delivery/runtime/multi-repo-bases.js} +1 -1
  206. package/server/dist/{multi-repo-checkout.js → modules/delivery/runtime/multi-repo-checkout.js} +4 -4
  207. package/server/dist/{multi-repo-delivery.js → modules/delivery/runtime/multi-repo-delivery.js} +4 -4
  208. package/server/dist/{multi-repo-execution.js → modules/delivery/runtime/multi-repo-execution.js} +8 -8
  209. package/server/dist/{pr-body.js → modules/delivery/runtime/pr-body.js} +1 -1
  210. package/server/dist/{pr-follow-up-scope.js → modules/delivery/runtime/pr-follow-up-scope.js} +2 -2
  211. package/server/dist/{pr-follow-up.js → modules/delivery/runtime/pr-follow-up.js} +1 -1
  212. package/server/dist/{pr-naming.js → modules/delivery/runtime/pr-naming.js} +1 -1
  213. package/server/dist/{pr-publisher.js → modules/delivery/runtime/pr-publisher.js} +2 -2
  214. package/server/dist/{rail-isolated-launch.js → modules/delivery/runtime/rail-isolated-launch.js} +29 -27
  215. package/server/dist/{rail-launch-parser.js → modules/delivery/runtime/rail-launch-parser.js} +2 -2
  216. package/server/dist/{rail-merge-orchestrator.js → modules/delivery/runtime/rail-merge-orchestrator.js} +5 -5
  217. package/server/dist/modules/delivery/runtime/rail-pr-decision.js +12 -0
  218. package/server/dist/{rail-pr-delivery.js → modules/delivery/runtime/rail-pr-delivery.js} +1 -1
  219. package/server/dist/{rail-pr-store.js → modules/delivery/runtime/rail-pr-store.js} +2 -2
  220. package/server/dist/{rail-pr-ticket-effects.js → modules/delivery/runtime/rail-pr-ticket-effects.js} +3 -3
  221. package/server/dist/{rail-worktree-release.js → modules/delivery/runtime/rail-worktree-release.js} +4 -4
  222. package/server/dist/{rails-router.js → modules/delivery/runtime/rails-router.js} +66 -67
  223. package/server/dist/{review-packet.js → modules/delivery/runtime/review-packet.js} +3 -3
  224. package/server/dist/modules/execution/adapters/budget-storage.js +21 -0
  225. package/server/dist/modules/execution/adapters/usage-reader.js +38 -0
  226. package/server/dist/modules/execution/application/enforce-budget.js +14 -0
  227. package/server/dist/modules/execution/application/record-job-invocations.js +64 -0
  228. package/server/dist/modules/execution/application/recover-job-usage.js +200 -0
  229. package/server/dist/modules/execution/domain/job-accounting.js +2 -0
  230. package/server/dist/modules/execution/domain/scheduling.js +24 -0
  231. package/server/dist/modules/execution/domain/usage.js +21 -0
  232. package/server/dist/modules/execution/index.js +14 -0
  233. package/server/dist/modules/execution/ports.js +2 -0
  234. package/server/dist/{accept-ladder.js → modules/execution/runtime/accept-ladder.js} +1 -1
  235. package/server/dist/{interactive-job-session.js → modules/execution/runtime/interactive-job-session.js} +11 -11
  236. package/server/dist/{job-phase-breakdown.js → modules/execution/runtime/job-phase-breakdown.js} +1 -1
  237. package/server/dist/{queue-manager.js → modules/execution/runtime/queue-manager.js} +74 -491
  238. package/server/dist/{revision-seed.js → modules/execution/runtime/revision-seed.js} +1 -1
  239. package/server/dist/{spawn-lifecycle.js → modules/execution/runtime/spawn-lifecycle.js} +3 -3
  240. package/server/dist/{stuck-run-detector.js → modules/execution/runtime/stuck-run-detector.js} +1 -1
  241. package/server/dist/{loop-command-catalog.js → modules/loops/runtime/loop-command-catalog.js} +1 -1
  242. package/server/dist/{loop-executors.js → modules/loops/runtime/loop-executors.js} +17 -17
  243. package/server/dist/{loop-factory.js → modules/loops/runtime/loop-factory.js} +2 -21
  244. package/server/dist/{loop-graph.js → modules/loops/runtime/loop-graph.js} +25 -0
  245. package/server/dist/{loop-role-engines.js → modules/loops/runtime/loop-role-engines.js} +4 -4
  246. package/server/dist/{loop-run-manager.js → modules/loops/runtime/loop-run-manager.js} +101 -26
  247. package/server/dist/{loop-runs-store.js → modules/loops/runtime/loop-runs-store.js} +1 -1
  248. package/server/dist/{loop-shell-invocation.js → modules/loops/runtime/loop-shell-invocation.js} +2 -2
  249. package/server/dist/{loop-step-idle.js → modules/loops/runtime/loop-step-idle.js} +1 -1
  250. package/server/dist/{loop-templates.js → modules/loops/runtime/loop-templates.js} +24 -29
  251. package/server/dist/{loops-router.js → modules/loops/runtime/loops-router.js} +2 -2
  252. package/server/dist/{agent-chat-manager.js → modules/missions/runtime/agent-chat-manager.js} +19 -19
  253. package/server/dist/{agent-chat-router.js → modules/missions/runtime/agent-chat-router.js} +6 -6
  254. package/server/dist/{agent-context-resolver.js → modules/missions/runtime/agent-context-resolver.js} +8 -8
  255. package/server/dist/{agent-failure-briefing.js → modules/missions/runtime/agent-failure-briefing.js} +4 -2
  256. package/server/dist/{agent-fence-promotion.js → modules/missions/runtime/agent-fence-promotion.js} +1 -1
  257. package/server/dist/{agent-input-store.js → modules/missions/runtime/agent-input-store.js} +1 -1
  258. package/server/dist/{agent-operator-prompt.js → modules/missions/runtime/agent-operator-prompt.js} +75 -12
  259. package/server/dist/{agent-spec-framing.js → modules/missions/runtime/agent-spec-framing.js} +4 -4
  260. package/server/dist/{agent-steering.js → modules/missions/runtime/agent-steering.js} +1 -1
  261. package/server/dist/{mission-run-notify.js → modules/missions/runtime/mission-run-notify.js} +5 -2
  262. package/server/dist/modules/project-settings/adapters/http.js +24 -0
  263. package/server/dist/modules/project-settings/adapters/sqlite.js +120 -0
  264. package/server/dist/modules/project-settings/application.js +11 -0
  265. package/server/dist/modules/project-settings/domain.js +95 -0
  266. package/server/dist/modules/project-settings/index.js +11 -0
  267. package/server/dist/modules/project-settings/ports.js +2 -0
  268. package/server/dist/{contract-refine-runner.js → modules/specs/runtime/contract-refine-runner.js} +12 -12
  269. package/server/dist/{proposal-manager.js → modules/specs/runtime/proposal-manager.js} +8 -8
  270. package/server/dist/{smash-runner.js → modules/specs/runtime/smash-runner.js} +26 -58
  271. package/server/dist/{spec-addenda-core.js → modules/specs/runtime/spec-addenda-core.js} +2 -2
  272. package/server/dist/{spec-addenda.js → modules/specs/runtime/spec-addenda.js} +3 -3
  273. package/server/dist/{spec-launcher-manager.js → modules/specs/runtime/spec-launcher-manager.js} +8 -8
  274. package/server/dist/{spec-models.js → modules/specs/runtime/spec-models.js} +1 -1
  275. package/server/dist/{ticket-watcher.js → modules/specs/runtime/ticket-watcher.js} +1 -1
  276. package/server/dist/{background-process-control.js → modules/terminals/runtime/background-process-control.js} +1 -1
  277. package/server/dist/{background-process-service.js → modules/terminals/runtime/background-process-service.js} +3 -3
  278. package/server/dist/{background-process-store.js → modules/terminals/runtime/background-process-store.js} +1 -1
  279. package/server/dist/{background-windows-bootstrap.js → modules/terminals/runtime/background-windows-bootstrap.js} +3 -3
  280. package/server/dist/{terminal-manager.js → modules/terminals/runtime/terminal-manager.js} +3 -3
  281. package/server/dist/project-git.js +1 -1
  282. package/server/dist/project-profile-support.js +32 -0
  283. package/server/dist/project-registry.js +34 -40
  284. package/server/dist/project-router-background-processes.js +1 -1
  285. package/server/dist/project-router-chat.js +6 -6
  286. package/server/dist/project-router-git.js +1 -1
  287. package/server/dist/project-router-helpers.js +2 -2
  288. package/server/dist/project-router-jobs.js +14 -12
  289. package/server/dist/project-router-loop-runs.js +12 -12
  290. package/server/dist/project-router-settings.js +15 -75
  291. package/server/dist/project-router-setup.js +2 -2
  292. package/server/dist/project-router-spending.js +4 -4
  293. package/server/dist/project-router-terminals.js +4 -4
  294. package/server/dist/project-router-tickets.js +14 -14
  295. package/server/dist/project-router.js +13 -13
  296. package/server/dist/providers/claude-adapter.js +3 -2
  297. package/server/dist/providers/codex-adapter.js +3 -3
  298. package/server/dist/providers/gemini-adapter.js +1 -1
  299. package/server/dist/providers/telemetry-env.js +55 -0
  300. package/server/dist/runtime-role-prompts-router.js +2 -2
  301. package/server/dist/setup-manager.js +2 -48
  302. package/server/dist/shared/git-branch-name.js +16 -0
  303. package/server/dist/transient-children.js +3 -3
  304. package/server/dist/util/distribute-int.js +33 -0
  305. package/client/dist/assets/ReviewPacketPage-D-UjTef3.js +0 -4
  306. package/client/dist/assets/index-BAtqmAZR.css +0 -2
  307. package/client/dist/assets/packet-CjS_478C.js +0 -1
  308. package/client/dist/assets/packet-D69dKsHN.js +0 -1
  309. package/client/dist/assets/packet-D9rU6Oxo.js +0 -1
  310. package/client/dist/assets/packet-DMDFoamg.js +0 -1
  311. package/client/dist/assets/packet-Dd2RMs1h.js +0 -1
  312. package/client/dist/assets/packet-DjC9OibC.js +0 -1
  313. package/client/dist/assets/packet-DwPtJoDz.js +0 -1
  314. package/client/dist/assets/packet-ceahDg8_.js +0 -1
  315. package/server/dist/rail-pr-decision.js +0 -2377
  316. package/server/dist/ticket-broadcast.js +0 -47
  317. /package/server/dist/{ai-invocations.js → modules/accounting/runtime/ai-invocations.js} +0 -0
  318. /package/server/dist/{codex-otel-bridge.js → modules/accounting/runtime/codex-otel-bridge.js} +0 -0
  319. /package/server/dist/{metrics.js → modules/accounting/runtime/metrics.js} +0 -0
  320. /package/server/dist/{telemetry-export.js → modules/accounting/runtime/telemetry-export.js} +0 -0
  321. /package/server/dist/{agent-runtime-accounting.js → modules/agent-runtime/runtime/agent-runtime-accounting.js} +0 -0
  322. /package/server/dist/{agent-runtime-events.js → modules/agent-runtime/runtime/agent-runtime-events.js} +0 -0
  323. /package/server/dist/{agent-runtime-history.js → modules/agent-runtime/runtime/agent-runtime-history.js} +0 -0
  324. /package/server/dist/{agent-runtime-metrics.js → modules/agent-runtime/runtime/agent-runtime-metrics.js} +0 -0
  325. /package/server/dist/{agent-runtime-package.js → modules/agent-runtime/runtime/agent-runtime-package.js} +0 -0
  326. /package/server/dist/{agent-runtime-repositories.js → modules/agent-runtime/runtime/agent-runtime-repositories.js} +0 -0
  327. /package/server/dist/{agent-runtime-verification-suggestions.js → modules/agent-runtime/runtime/agent-runtime-verification-suggestions.js} +0 -0
  328. /package/server/dist/{agent-refine-db.js → modules/agents/runtime/agent-refine-db.js} +0 -0
  329. /package/server/dist/{browser-capture-types.js → modules/browser/runtime/browser-capture-types.js} +0 -0
  330. /package/server/dist/{browser-context-pool.js → modules/browser/runtime/browser-context-pool.js} +0 -0
  331. /package/server/dist/{browser-network.js → modules/browser/runtime/browser-network.js} +0 -0
  332. /package/server/dist/{browser-viewport.js → modules/browser/runtime/browser-viewport.js} +0 -0
  333. /package/server/dist/{blueprint-render.js → modules/builder/runtime/blueprint-render.js} +0 -0
  334. /package/server/dist/{blueprint-spec-fixtures.js → modules/builder/runtime/blueprint-spec-fixtures.js} +0 -0
  335. /package/server/dist/{blueprint-store.js → modules/builder/runtime/blueprint-store.js} +0 -0
  336. /package/server/dist/{blueprint-types.js → modules/builder/runtime/blueprint-types.js} +0 -0
  337. /package/server/dist/{builder-cwd-manager.js → modules/builder/runtime/builder-cwd-manager.js} +0 -0
  338. /package/server/dist/{milestone-chain-store.js → modules/builder/runtime/milestone-chain-store.js} +0 -0
  339. /package/server/dist/{changes-reader.js → modules/code/runtime/changes-reader.js} +0 -0
  340. /package/server/dist/{context-scope.js → modules/conversations/runtime/context-scope.js} +0 -0
  341. /package/server/dist/{explore-contract-refine.js → modules/conversations/runtime/explore-contract-refine.js} +0 -0
  342. /package/server/dist/{explore-draft-title.js → modules/conversations/runtime/explore-draft-title.js} +0 -0
  343. /package/server/dist/{merge-manager.js → modules/delivery/runtime/merge-manager.js} +0 -0
  344. /package/server/dist/{multi-repo-execution-store.js → modules/delivery/runtime/multi-repo-execution-store.js} +0 -0
  345. /package/server/dist/{pr-lifecycle.js → modules/delivery/runtime/pr-lifecycle.js} +0 -0
  346. /package/server/dist/{rail-isolation.js → modules/delivery/runtime/rail-isolation.js} +0 -0
  347. /package/server/dist/{rail-pr-recovery-git.js → modules/delivery/runtime/rail-pr-recovery-git.js} +0 -0
  348. /package/server/dist/{rail-worktrees-store.js → modules/delivery/runtime/rail-worktrees-store.js} +0 -0
  349. /package/server/dist/{rails-store.js → modules/delivery/runtime/rails-store.js} +0 -0
  350. /package/server/dist/{job-listing.js → modules/execution/runtime/job-listing.js} +0 -0
  351. /package/server/dist/{job-spawn-idempotency.js → modules/execution/runtime/job-spawn-idempotency.js} +0 -0
  352. /package/server/dist/{run-duration-stats.js → modules/execution/runtime/run-duration-stats.js} +0 -0
  353. /package/server/dist/{verification-sentinel.js → modules/execution/runtime/verification-sentinel.js} +0 -0
  354. /package/server/dist/{loop-constants.js → modules/loops/runtime/loop-constants.js} +0 -0
  355. /package/server/dist/{loop-decider.js → modules/loops/runtime/loop-decider.js} +0 -0
  356. /package/server/dist/{loop-effect.js → modules/loops/runtime/loop-effect.js} +0 -0
  357. /package/server/dist/{loop-preview.js → modules/loops/runtime/loop-preview.js} +0 -0
  358. /package/server/dist/{loop-templates-ported.js → modules/loops/runtime/loop-templates-ported.js} +0 -0
  359. /package/server/dist/{loops-store.js → modules/loops/runtime/loops-store.js} +0 -0
  360. /package/server/dist/{agent-chat-registry.js → modules/missions/runtime/agent-chat-registry.js} +0 -0
  361. /package/server/dist/{agent-cwd-manager.js → modules/missions/runtime/agent-cwd-manager.js} +0 -0
  362. /package/server/dist/{agent-tier.js → modules/missions/runtime/agent-tier.js} +0 -0
  363. /package/server/dist/{spec-contract-prompt.js → modules/specs/runtime/spec-contract-prompt.js} +0 -0
  364. /package/server/dist/{spec-draft-parser.js → modules/specs/runtime/spec-draft-parser.js} +0 -0
  365. /package/server/dist/{ticket-store.js → modules/specs/runtime/ticket-store.js} +0 -0
  366. /package/server/dist/{terminal-marks-store.js → modules/terminals/runtime/terminal-marks-store.js} +0 -0
  367. /package/server/dist/{terminal-osc-parser.js → modules/terminals/runtime/terminal-osc-parser.js} +0 -0
  368. /package/server/dist/{terminal-settings.js → modules/terminals/runtime/terminal-settings.js} +0 -0
@@ -83,6 +83,14 @@ function registerAgentRuntimeControlRoutes({ router, ctx }) {
83
83
  res.status(error instanceof agent_runtime_controls_1.RuntimeControlError ? error.statusCode : 503).json({ error: 'evidence_unavailable', message: error instanceof agent_runtime_controls_1.RuntimeControlError ? error.message : 'The original runtime evidence is unavailable' });
84
84
  }
85
85
  });
86
+ router.get('/:projectId/agent-runtime/runs/:runId/diagnosis', async (req, res) => {
87
+ try {
88
+ res.json(await controls(req).diagnose(String(req.params.runId)));
89
+ }
90
+ catch (error) {
91
+ res.status(error instanceof agent_runtime_controls_1.RuntimeControlError ? error.statusCode : 503).json({ error: 'diagnosis_unavailable', message: error instanceof agent_runtime_controls_1.RuntimeControlError ? error.message : 'Could not inspect the original runtime execution' });
92
+ }
93
+ });
86
94
  router.post('/:projectId/agent-runtime/runs/:runId/resume', async (req, res) => {
87
95
  try {
88
96
  await controls(req).resume(String(req.params.runId), (0, agent_runtime_controls_1.validateRuntimeResumeInput)(req.body));
@@ -92,6 +100,14 @@ function registerAgentRuntimeControlRoutes({ router, ctx }) {
92
100
  res.status(error instanceof agent_runtime_controls_1.RuntimeControlError ? error.statusCode : 500).json({ error: error instanceof agent_runtime_controls_1.RuntimeControlError ? error.code : 'runtime_resume_failed', message: error instanceof agent_runtime_controls_1.RuntimeControlError ? error.message : 'Could not resume runtime execution' });
93
101
  }
94
102
  });
103
+ router.post('/:projectId/agent-runtime/runs/:runId/recovery', async (req, res) => {
104
+ try {
105
+ res.json(await controls(req).recovery(String(req.params.runId), req.body));
106
+ }
107
+ catch (error) {
108
+ res.status(error instanceof agent_runtime_controls_1.RuntimeControlError ? error.statusCode : 500).json({ error: error instanceof agent_runtime_controls_1.RuntimeControlError ? error.code : 'runtime_recovery_failed', message: error instanceof agent_runtime_controls_1.RuntimeControlError ? error.message : 'Could not perform scoped recovery' });
109
+ }
110
+ });
95
111
  router.post('/:projectId/agent-runtime/runs/:runId/settle', async (req, res) => {
96
112
  try {
97
113
  await controls(req).settle(String(req.params.runId));
@@ -18,13 +18,14 @@ const node_path_1 = __importDefault(require("node:path"));
18
18
  const node_util_1 = require("node:util");
19
19
  const agent_runtime_package_1 = require("./agent-runtime-package");
20
20
  const agent_runtime_bridge_1 = require("./agent-runtime-bridge");
21
- const core_node_runtime_1 = require("./core-node-runtime");
22
- const win_spawn_1 = require("./util/win-spawn");
23
- const workspace_resolution_1 = require("./workspace-resolution");
24
- const loop_runs_store_1 = require("./loop-runs-store");
25
- const multi_repo_execution_store_1 = require("./multi-repo-execution-store");
26
- const db_1 = require("./db");
27
- const loop_run_manager_1 = require("./loop-run-manager");
21
+ const core_node_runtime_1 = require("../../../core-node-runtime");
22
+ const win_spawn_1 = require("../../../util/win-spawn");
23
+ const workspace_resolution_1 = require("../../../workspace-resolution");
24
+ const loop_runs_store_1 = require("../../loops/runtime/loop-runs-store");
25
+ const multi_repo_execution_store_1 = require("../../delivery/runtime/multi-repo-execution-store");
26
+ const db_1 = require("../../../db");
27
+ const loop_run_manager_1 = require("../../loops/runtime/loop-run-manager");
28
+ const agent_runtime_recovery_1 = require("./agent-runtime-recovery");
28
29
  const SAFE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
29
30
  const STEP_IDS = ['architect', 'developer', 'fixer', 'verify', 'reviewer', 'archive'];
30
31
  const ANSWER_LIMIT = 20_000;
@@ -94,7 +95,7 @@ async function readAgentRuntimeStatus(contextPath, cwd, env) {
94
95
  selection = JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(node_path_1.default.dirname(contextPath), 'desktop-runtime-selection.json'), 'utf8'));
95
96
  }
96
97
  catch { /* Original hosts may not record selection origins. */ }
97
- return result.state ? { ...result.state, efficiencySummary: (0, agent_runtime_metrics_1.applyRuntimeSelectionOrigins)((0, agent_runtime_metrics_1.readRuntimeEfficiencySummary)(result.efficiencySummary), selection, result.state.runId) } : null;
98
+ return result.state ? { ...result.state, inspection: result.pipeline, efficiencySummary: (0, agent_runtime_metrics_1.applyRuntimeSelectionOrigins)((0, agent_runtime_metrics_1.readRuntimeEfficiencySummary)(result.efficiencySummary), selection, result.state.runId) } : null;
98
99
  }
99
100
  /** One controller per ProjectContext; Core's durable lease remains the final
100
101
  * cross-process guard. Resume never constructs a new context or worktree. */
@@ -165,6 +166,97 @@ class AgentRuntimeControls {
165
166
  throw new RuntimeControlError(503, 'evidence_unavailable', 'Core evidence is unavailable or incompatible');
166
167
  return result;
167
168
  }
169
+ async recovery(runId, input) {
170
+ const parsed = agent_runtime_recovery_1.recoveryRequestSchema.safeParse(input);
171
+ if (!parsed.success)
172
+ throw new RuntimeControlError(400, 'invalid_recovery_request', parsed.error.message);
173
+ if (this.disposed)
174
+ throw new RuntimeControlError(503, 'runtime_shutting_down', 'Project runtime is shutting down');
175
+ const parent = (0, loop_runs_store_1.getLoopRun)(this.ctx.db, runId);
176
+ const idle = () => parent?.status === 'completed' && !this.ctx.railLoopRuns?.size && !this.ctx.railJobs?.size
177
+ && !this.ctx.db.prepare("SELECT 1 FROM jobs WHERE status = 'running' LIMIT 1").get();
178
+ if (!idle() || this.active.size)
179
+ throw new RuntimeControlError(409, 'runtime_run_active', 'Wait for project executions to settle before scoped recovery');
180
+ const context = this.context(runId);
181
+ const active = { cancelled: false };
182
+ this.active.set(runId, active);
183
+ if (parent?.rail_index != null)
184
+ this.ctx.railLoopRuns?.set(runId, { railIndex: parent.rail_index, ticketIds: [], requiresTerminalIntent: true });
185
+ try {
186
+ const result = await (this.dependencies.recovery ?? agent_runtime_recovery_1.invokeRuntimeRecovery)({ contextPath: context.file, cwd: context.cwd, env: context.env, request: parsed.data,
187
+ onSpawn: child => { active.child = child; if (active.cancelled || this.disposed)
188
+ this.cancel(runId); },
189
+ });
190
+ if (parsed.data.action === 'patch' || parsed.data.action === 'check') {
191
+ this.statusCache.delete(runId);
192
+ this.ctx.db.transaction(() => {
193
+ const seq = this.ctx.db.prepare('SELECT COALESCE(MAX(seq), -1) + 1 AS seq FROM events WHERE job_id = ?').get(runId).seq;
194
+ (0, db_1.appendEvent)(this.ctx.db, runId, seq, { event_type: 'runtime-recovery', source: 'stdout', payload: JSON.stringify({ action: parsed.data.action, result }) });
195
+ })();
196
+ }
197
+ return result;
198
+ }
199
+ catch (error) {
200
+ if (error instanceof RuntimeControlError)
201
+ throw error;
202
+ throw new RuntimeControlError(409, 'runtime_recovery_blocked', error instanceof Error ? error.message : 'Recovery failed; inspect history before retrying');
203
+ }
204
+ finally {
205
+ clearTimeout(active.forceKillTimer);
206
+ this.active.delete(runId);
207
+ this.ctx.railLoopRuns?.delete(runId);
208
+ this.statusCache.delete(runId);
209
+ }
210
+ }
211
+ /** Read-only recovery assessment. canResume is admission, not a repair claim. */
212
+ async diagnose(runId) {
213
+ const summary = await this.summary(runId);
214
+ if (summary.historical || summary.status === 'unavailable')
215
+ return {
216
+ runId, summary, recommendation: 'inspect_saved_evidence',
217
+ reason: 'Live original runtime scope is unavailable. Preserve saved work and inspect the missing scope before proposing a fresh run.',
218
+ repeatFailureCount: null, recentFailures: [],
219
+ };
220
+ const { file, frozen, cwd, env } = this.context(runId);
221
+ const state = await this.dependencies.status(file, cwd, env);
222
+ if (!state || state.runId !== runId)
223
+ throw new RuntimeControlError(409, 'runtime_state_unavailable', 'No saved workflow state is available');
224
+ const failures = (state.recentFailures ?? []).slice(-8).map(item => ({ stepId: item.stepId, status: item.status, at: item.at, error: item.error?.slice(-6000) }));
225
+ const matching = failures.filter(item => item.status === 'failed' && item.stepId === state.nextStep && !!item.error && item.error === state.error?.slice(-6000));
226
+ const repeated = matching.length > 1;
227
+ const recommendation = summary.active ? 'wait_for_active_run'
228
+ : summary.canSettle ? 'prepare_delivery'
229
+ : summary.status === 'succeeded' ? 'inspect_delivery'
230
+ : summary.pendingQuestion ? 'answer_question'
231
+ : summary.pendingApproval ? 'inspect_and_approve'
232
+ : repeated ? 'repair_before_retry'
233
+ : summary.recoverableSteps.length ? 'inspect_interrupted_writes'
234
+ : 'diagnose_before_retry';
235
+ return {
236
+ runId, summary, recommendation,
237
+ reason: {
238
+ wait_for_active_run: 'The original run is still active. Inspect its progress instead of starting a competing execution.',
239
+ prepare_delivery: 'Core succeeded but Desktop settlement is still pending. Prepare delivery of the existing implementation.',
240
+ inspect_delivery: 'Core already succeeded. Inspect the delivery state rather than restarting implementation.',
241
+ answer_question: 'The run is waiting for the recorded question to be answered.',
242
+ inspect_and_approve: 'The run is waiting for approval of the recorded candidate; inspect its evidence first.',
243
+ repair_before_retry: 'The same step failed with the same error more than once. Identify and verify a changed precondition before spending on another attempt.',
244
+ inspect_interrupted_writes: 'An interrupted step may have partially changed files. Inspect the original worktree before explicitly recovering it.',
245
+ diagnose_before_retry: 'Determine the failing precondition from the saved evidence. A resumable run may still need a repair; a fresh run is not a diagnosis.',
246
+ }[recommendation],
247
+ originalScope: { artifactRoot: frozen.artifactRoot, repositories: frozen.repositories },
248
+ completedSteps: Object.entries(state.steps).filter(([, step]) => step.status === 'succeeded').map(([id]) => id),
249
+ recentFailures: failures, repeatFailureCount: state.recentFailures ? matching.length : null,
250
+ verification: state.inspection?.verification ? { valid: state.inspection.verification.valid, reasons: state.inspection.verification.reasons } : null,
251
+ acceptance: state.inspection?.acceptance ? { valid: state.inspection.acceptance.valid, reasons: state.inspection.acceptance.reasons } : null,
252
+ resumePhase: state.inspection?.resumePhase ?? null,
253
+ limitations: [
254
+ 'Recent failure history is bounded to eight attempts; null means the retained Core does not expose it.',
255
+ 'Completed steps are historical outcomes. Resume revalidates receipts and may repeat verification/review after changes; do not promise zero cost.',
256
+ 'This diagnostic does not execute repairs, resume, relaunch, publish or discard work.',
257
+ ],
258
+ };
259
+ }
168
260
  async list() {
169
261
  const directory = node_path_1.default.join((0, workspace_resolution_1.resolveProjectExecution)(this.ctx.project).specrailsDir, 'pipeline');
170
262
  if (!node_fs_1.default.existsSync(directory))
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveEffectiveRuntimeConfig = resolveEffectiveRuntimeConfig;
4
4
  exports.fillDefaultRoleModels = fillDefaultRoleModels;
5
- const providers_1 = require("./providers");
5
+ const providers_1 = require("../../../providers");
6
6
  /** A pure admission resolver; only deliberate launch intent overrides a project role. */
7
7
  function resolveEffectiveRuntimeConfig(input, options) {
8
8
  const config = structuredClone(input);
@@ -11,9 +11,9 @@ const node_fs_1 = require("node:fs");
11
11
  const node_child_process_1 = require("node:child_process");
12
12
  const node_module_1 = require("node:module");
13
13
  const node_path_1 = require("node:path");
14
- const core_runtime_1 = require("./core-runtime");
15
- const core_node_runtime_1 = require("./core-node-runtime");
16
- const win_spawn_1 = require("./util/win-spawn");
14
+ const core_runtime_1 = require("../../../core-runtime");
15
+ const core_node_runtime_1 = require("../../../core-node-runtime");
16
+ const win_spawn_1 = require("../../../util/win-spawn");
17
17
  const agent_runtime_package_1 = require("./agent-runtime-package");
18
18
  /** An explicit or bundled installation is authoritative: never silently replace
19
19
  * a broken production bundle with a developer's checkout. */
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasAgentRuntimeRequest = hasAgentRuntimeRequest;
4
4
  const node_fs_1 = require("node:fs");
5
5
  const node_path_1 = require("node:path");
6
- const workspace_resolution_1 = require("./workspace-resolution");
6
+ const workspace_resolution_1 = require("../../../workspace-resolution");
7
7
  function hasAgentRuntimeRequest(project, runId) {
8
8
  if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(runId))
9
9
  return false;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recoveryRequestSchema = void 0;
4
+ exports.invokeRuntimeRecovery = invokeRuntimeRecovery;
5
+ const node_child_process_1 = require("node:child_process");
6
+ const zod_1 = require("zod");
7
+ const agent_runtime_package_1 = require("./agent-runtime-package");
8
+ const core_node_runtime_1 = require("../../../core-node-runtime");
9
+ const win_spawn_1 = require("../../../util/win-spawn");
10
+ // Desktop validates its HTTP contract; retained Core independently validates
11
+ // the same operation at the filesystem/lease boundary.
12
+ const file = { repositoryId: zod_1.z.string().min(1).max(128), path: zod_1.z.string().min(1).max(1024) };
13
+ const operation = { operationId: zod_1.z.string().uuid(), reason: zod_1.z.string().trim().min(1).max(2000), acknowledgeInterrupted: zod_1.z.boolean().optional(), changedPrecondition: zod_1.z.string().trim().min(1).max(2000).optional() };
14
+ exports.recoveryRequestSchema = zod_1.z.discriminatedUnion('action', [
15
+ zod_1.z.object({ action: zod_1.z.literal('inspect') }).strict(),
16
+ zod_1.z.object({ action: zod_1.z.literal('history'), offset: zod_1.z.number().int().nonnegative().optional() }).strict(),
17
+ zod_1.z.object({ action: zod_1.z.literal('list_files'), ...file }).strict(),
18
+ zod_1.z.object({ action: zod_1.z.literal('read_file'), ...file, startLine: zod_1.z.number().int().positive().optional(), endLine: zod_1.z.number().int().positive().optional() }).strict(),
19
+ zod_1.z.object({ action: zod_1.z.literal('diff'), ...file }).strict(),
20
+ zod_1.z.object({ action: zod_1.z.literal('patch'), ...file, ...operation, expectedHash: zod_1.z.string().regex(/^[a-f0-9]{64}$/), oldText: zod_1.z.string().min(1).max(16_384), newText: zod_1.z.string().max(16_384) }).strict(),
21
+ zod_1.z.object({ action: zod_1.z.literal('check'), ...operation, kind: zod_1.z.enum(['openspec', 'verification']), checkId: zod_1.z.string().min(1).max(256).optional() }).strict(),
22
+ ]);
23
+ async function invokeRuntimeRecovery(input) {
24
+ const cli = (0, agent_runtime_package_1.resolveRetainedAgentRuntime)(input.contextPath);
25
+ const invoke = (args, stdin) => new Promise((resolve, reject) => {
26
+ const child = (0, node_child_process_1.execFile)((0, core_node_runtime_1.resolveCoreNodeRuntime)(), [cli, ...args], {
27
+ cwd: input.cwd, env: (0, win_spawn_1.windowsSpawnEnv)(input.env), windowsHide: true,
28
+ timeout: stdin ? 65_000 : 15_000, maxBuffer: 2 * 1024 * 1024, encoding: 'utf8',
29
+ }, (error, stdout) => {
30
+ if (!error) {
31
+ resolve(stdout);
32
+ return;
33
+ }
34
+ let detail = 'Recovery did not complete; inspect its history before retrying with the same operationId.';
35
+ try {
36
+ const parsed = JSON.parse(stdout);
37
+ if (typeof parsed.error === 'string')
38
+ detail = parsed.error.slice(-6000);
39
+ }
40
+ catch { /* Do not misrepresent an uncertain transport outcome. */ }
41
+ reject(new Error(detail));
42
+ });
43
+ input.onSpawn?.(child);
44
+ child.stdin?.end(stdin ?? '');
45
+ });
46
+ const api = JSON.parse(await invoke(['api']));
47
+ if (api.capabilities?.scopedRecovery !== 1)
48
+ throw new Error('The retained original Core does not support scoped recovery. Preserve this run; use a manual repair in its original worktree. Do not replace its runtime or relaunch to bypass this limit.');
49
+ const response = JSON.parse(await invoke(['recovery', '--context', input.contextPath, '--stdin'], JSON.stringify(input.request)));
50
+ if (response.type !== 'runtime-recovery' || response.schemaVersion !== 1 || !('result' in response))
51
+ throw new Error('Invalid Core recovery response; inspect recovery history before retrying');
52
+ return response.result;
53
+ }
@@ -6,7 +6,7 @@ const agent_runtime_loader_1 = require("./agent-runtime-loader");
6
6
  const agent_runtime_settings_1 = require("./agent-runtime-settings");
7
7
  const agent_runtime_settings_2 = require("./agent-runtime-settings");
8
8
  const agent_runtime_verification_suggestions_1 = require("./agent-runtime-verification-suggestions");
9
- const project_repositories_1 = require("./project-repositories");
9
+ const project_repositories_1 = require("../../../project-repositories");
10
10
  const agent_runtime_effective_config_1 = require("./agent-runtime-effective-config");
11
11
  /** Raw request body → same body with every local role's missing model filled (validation then passes). */
12
12
  function withDefaultRoleModels(body) {
@@ -19,7 +19,7 @@ function withDefaultRoleModels(body) {
19
19
  const filled = (0, agent_runtime_effective_config_1.fillDefaultRoleModels)({ agents: structuredClone(agents), providers: providers, ...(fixer ? { fixer: fixer } : {}) }, { localOnly: true });
20
20
  return { ...body, agents: filled.agents, ...(filled.fixer ? { fixer: filled.fixer } : {}) };
21
21
  }
22
- const loop_role_engines_1 = require("./loop-role-engines");
22
+ const loop_role_engines_1 = require("../../loops/runtime/loop-role-engines");
23
23
  function registerAgentRuntimeSettingsRoutes({ router, ctx }) {
24
24
  /** Guardrail catalog of the loaded Core (configurable-guardrails): ids + phase; the UI owns labels. `supported:false` on older cores. */
25
25
  router.get('/:projectId/agent-runtime/guardrails', async (_req, res) => {
@@ -26,9 +26,9 @@ const node_path_1 = __importDefault(require("node:path"));
26
26
  const node_os_1 = __importDefault(require("node:os"));
27
27
  const node_crypto_1 = require("node:crypto");
28
28
  const ajv_1 = __importDefault(require("ajv"));
29
- const agent_runtime_schema_json_1 = __importDefault(require("./schemas/agent-runtime.schema.json"));
30
- const workspace_resolution_1 = require("./workspace-resolution");
31
- const registry_1 = require("./providers/registry");
29
+ const agent_runtime_schema_json_1 = __importDefault(require("../../../schemas/agent-runtime.schema.json"));
30
+ const workspace_resolution_1 = require("../../../workspace-resolution");
31
+ const registry_1 = require("../../../providers/registry");
32
32
  const DESKTOP_CONNECTION_FIELDS = ['label', 'defaultModel', 'rates'];
33
33
  /** Core-owned small-model fields: known only to cores advertising `capabilities.compactAgentLoop`
34
34
  * (`supportsReasoningEffort` moved here: core forwards it as OpenAI `reasoning_effort`). */
@@ -6,12 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.settleRuntimeContinuation = settleRuntimeContinuation;
7
7
  const node_fs_1 = __importDefault(require("node:fs"));
8
8
  const node_crypto_1 = require("node:crypto");
9
- const db_1 = require("./db");
10
- const core_execution_1 = require("./core-execution");
11
- const core_completion_1 = require("./core-completion");
12
- const worktree_manager_1 = require("./worktree-manager");
13
- const rail_pr_store_1 = require("./rail-pr-store");
14
- const multi_repo_execution_1 = require("./multi-repo-execution");
9
+ const db_1 = require("../../../db");
10
+ const core_execution_1 = require("../../../core-execution");
11
+ const core_completion_1 = require("../../../core-completion");
12
+ const worktree_manager_1 = require("../../../worktree-manager");
13
+ const rail_pr_store_1 = require("../../delivery/runtime/rail-pr-store");
14
+ const multi_repo_execution_1 = require("../../delivery/runtime/multi-repo-execution");
15
15
  /** Complete the host's local settlement after Core recovery. Never pushes or merges. */
16
16
  async function settleRuntimeContinuation(input, dependencies = { verify: core_execution_1.checkCoreCompletion, git: worktree_manager_1.defaultGitRunner, commit: worktree_manager_1.commitWorktreeAndVerify }) {
17
17
  const { db, runId } = input;
@@ -63,9 +63,9 @@ const fs = __importStar(require("fs"));
63
63
  const os = __importStar(require("os"));
64
64
  const path = __importStar(require("path"));
65
65
  const crypto_1 = require("crypto");
66
- const desktop_db_1 = require("./desktop-db");
67
- const providers_1 = require("./providers");
68
- const runtime_1 = require("./providers/runtime");
66
+ const desktop_db_1 = require("../../../desktop-db");
67
+ const providers_1 = require("../../../providers");
68
+ const runtime_1 = require("../../../providers/runtime");
69
69
  exports.AGENT_DEFAULTS_SETTING_KEY = 'specrails_agent_defaults';
70
70
  /** Synthetic profile name recorded when a run's profile came purely from the
71
71
  * global defaults layer (no project profile existed). */
@@ -8,13 +8,13 @@ exports.testCustomAgent = testCustomAgent;
8
8
  const readline_1 = require("readline");
9
9
  const crypto_1 = require("crypto");
10
10
  const tree_kill_1 = __importDefault(require("tree-kill"));
11
- const cli_prompt_1 = require("./util/cli-prompt");
12
- const providers_1 = require("./providers");
13
- const runtime_1 = require("./providers/runtime");
14
- const result_event_1 = require("./result-event");
15
- const ai_invocations_1 = require("./ai-invocations");
16
- const process_admission_1 = require("./process-admission");
17
- const transient_children_1 = require("./transient-children");
11
+ const cli_prompt_1 = require("../../../util/cli-prompt");
12
+ const providers_1 = require("../../../providers");
13
+ const runtime_1 = require("../../../providers/runtime");
14
+ const result_event_1 = require("../../accounting/runtime/result-event");
15
+ const ai_invocations_1 = require("../../accounting/runtime/ai-invocations");
16
+ const process_admission_1 = require("../../../process-admission");
17
+ const transient_children_1 = require("../../../transient-children");
18
18
  /**
19
19
  * Finalise the accumulated adapter events (native cost, or pricing-table
20
20
  * estimate when the run was killed before its `result` event) and persist one
@@ -12,11 +12,11 @@ const path_1 = __importDefault(require("path"));
12
12
  const crypto_1 = require("crypto");
13
13
  const tree_kill_1 = __importDefault(require("tree-kill"));
14
14
  const agent_generator_1 = require("./agent-generator");
15
- const ai_invocations_1 = require("./ai-invocations");
16
- const result_event_1 = require("./result-event");
17
- const spawn_lifecycle_1 = require("./spawn-lifecycle");
18
- const workspace_resolution_1 = require("./workspace-resolution");
19
- const providers_1 = require("./providers");
15
+ const ai_invocations_1 = require("../../accounting/runtime/ai-invocations");
16
+ const result_event_1 = require("../../accounting/runtime/result-event");
17
+ const spawn_lifecycle_1 = require("../../execution/runtime/spawn-lifecycle");
18
+ const workspace_resolution_1 = require("../../../workspace-resolution");
19
+ const providers_1 = require("../../../providers");
20
20
  const agent_refine_db_1 = require("./agent-refine-db");
21
21
  const CUSTOM_PREFIX = /^custom-[a-z0-9][a-z0-9-]*$/;
22
22
  const SMART_TEST_DEBOUNCE_MS = 5_000;
@@ -16,7 +16,7 @@ exports.updateAgentMessageContent = updateAgentMessageContent;
16
16
  exports.foldSearchText = foldSearchText;
17
17
  exports.searchAgentConversations = searchAgentConversations;
18
18
  const crypto_1 = require("crypto");
19
- const agent_tier_1 = require("./agent-tier");
19
+ const agent_tier_1 = require("../../missions/runtime/agent-tier");
20
20
  function parseJsonArray(raw, predicate) {
21
21
  if (!raw)
22
22
  return [];
@@ -20,8 +20,8 @@ const fs_1 = __importDefault(require("fs"));
20
20
  const os_1 = __importDefault(require("os"));
21
21
  const path_1 = __importDefault(require("path"));
22
22
  const _2020_1 = __importDefault(require("ajv/dist/2020"));
23
- const profile_v1_json_1 = __importDefault(require("./schemas/profile.v1.json"));
24
- const providers_1 = require("./providers");
23
+ const profile_v1_json_1 = __importDefault(require("../../../schemas/profile.v1.json"));
24
+ const providers_1 = require("../../../providers");
25
25
  // ─── Schema loading ──────────────────────────────────────────────────────────
26
26
  let cachedValidator = null;
27
27
  function getValidator() {
@@ -6,17 +6,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.providerSupportsAgentStudioAutomation = providerSupportsAgentStudioAutomation;
7
7
  exports.createProfilesRouter = createProfilesRouter;
8
8
  const fs_1 = __importDefault(require("fs"));
9
- const core_runtime_1 = require("./core-runtime");
9
+ const core_runtime_1 = require("../../../core-runtime");
10
10
  const path_1 = __importDefault(require("path"));
11
11
  const express_1 = require("express");
12
12
  const agent_generator_1 = require("./agent-generator");
13
13
  const agent_refine_db_1 = require("./agent-refine-db");
14
14
  const agent_refine_manager_1 = require("./agent-refine-manager");
15
- const providers_1 = require("./providers");
16
- const kimi_skill_prompt_1 = require("./providers/kimi-skill-prompt");
15
+ const providers_1 = require("../../../providers");
16
+ const kimi_skill_prompt_1 = require("../../../providers/kimi-skill-prompt");
17
17
  const profile_manager_1 = require("./profile-manager");
18
- const workspace_resolution_1 = require("./workspace-resolution");
19
- const project_router_helpers_1 = require("./project-router-helpers");
18
+ const workspace_resolution_1 = require("../../../workspace-resolution");
19
+ const project_router_helpers_1 = require("../../../project-router-helpers");
20
20
  /**
21
21
  * Relocate-artifacts gate: the dir whose `.specrails/{profiles,specrails-version}`
22
22
  * and provider-native roles catalog the profiles surface reads/writes.
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BrowserCaptureManager = void 0;
7
7
  const os_1 = __importDefault(require("os"));
8
8
  const path_1 = __importDefault(require("path"));
9
- const ids_1 = require("./ids");
10
- const attachment_manager_1 = require("./attachment-manager");
9
+ const ids_1 = require("../../../ids");
10
+ const attachment_manager_1 = require("../../../attachment-manager");
11
11
  const browser_capture_types_1 = require("./browser-capture-types");
12
12
  const browser_playwright_1 = require("./browser-playwright");
13
13
  const browser_viewport_1 = require("./browser-viewport");
@@ -48,7 +48,6 @@ class BrowserCaptureManager {
48
48
  projectId;
49
49
  projectSlug;
50
50
  db;
51
- broadcast;
52
51
  launcher;
53
52
  attachments;
54
53
  profileDir;
@@ -69,7 +68,6 @@ class BrowserCaptureManager {
69
68
  this.projectId = opts.projectId;
70
69
  this.projectSlug = opts.projectSlug;
71
70
  this.db = opts.db;
72
- this.broadcast = opts.broadcast;
73
71
  this.launcher = opts.launcher ?? (0, browser_playwright_1.createPlaywrightLauncher)();
74
72
  this.attachments = opts.attachments ?? attachment_manager_1.attachmentManager;
75
73
  this.contextPool = opts.contextPool ?? null;
@@ -14,7 +14,7 @@ exports.screencastParams = screencastParams;
14
14
  exports.normalizeUrl = normalizeUrl;
15
15
  exports.chromiumLaunchArgs = chromiumLaunchArgs;
16
16
  exports.createPlaywrightLauncher = createPlaywrightLauncher;
17
- const chromium_resolver_1 = require("./chromium-resolver");
17
+ const chromium_resolver_1 = require("../../../chromium-resolver");
18
18
  const browser_network_1 = require("./browser-network");
19
19
  const browser_viewport_1 = require("./browser-viewport");
20
20
  /**
@@ -7,19 +7,19 @@ exports.BlueprintChatManager = exports.BUILDER_TURN_INTENTS = void 0;
7
7
  exports.planSnapshotRepair = planSnapshotRepair;
8
8
  const crypto_1 = require("crypto");
9
9
  const tree_kill_1 = __importDefault(require("tree-kill"));
10
- const providers_1 = require("./providers");
11
- const runtime_1 = require("./providers/runtime");
12
- const spawn_lifecycle_1 = require("./spawn-lifecycle");
13
- const cli_prompt_1 = require("./util/cli-prompt");
14
- const result_event_1 = require("./result-event");
15
- const desktop_db_1 = require("./desktop-db");
10
+ const providers_1 = require("../../../providers");
11
+ const runtime_1 = require("../../../providers/runtime");
12
+ const spawn_lifecycle_1 = require("../../execution/runtime/spawn-lifecycle");
13
+ const cli_prompt_1 = require("../../../util/cli-prompt");
14
+ const result_event_1 = require("../../accounting/runtime/result-event");
15
+ const desktop_db_1 = require("../../../desktop-db");
16
16
  const builder_cwd_manager_1 = require("./builder-cwd-manager");
17
17
  const blueprint_operator_prompt_1 = require("./blueprint-operator-prompt");
18
18
  const blueprint_draft_parser_1 = require("./blueprint-draft-parser");
19
19
  const blueprint_draft_parser_2 = require("./blueprint-draft-parser");
20
20
  const blueprint_generation_1 = require("./blueprint-generation");
21
21
  const blueprint_spec_quality_1 = require("./blueprint-spec-quality");
22
- const explore_draft_title_1 = require("./explore-draft-title");
22
+ const explore_draft_title_1 = require("../../conversations/runtime/explore-draft-title");
23
23
  const blueprint_store_1 = require("./blueprint-store");
24
24
  exports.BUILDER_TURN_INTENTS = ['surprise', 'approve'];
25
25
  function repairKindForRejection(reason) {
@@ -10,19 +10,19 @@ const fs_1 = __importDefault(require("fs"));
10
10
  const os_1 = __importDefault(require("os"));
11
11
  const path_1 = __importDefault(require("path"));
12
12
  const crypto_1 = require("crypto");
13
- const win_spawn_1 = require("./util/win-spawn");
14
- const desktop_db_1 = require("./desktop-db");
13
+ const win_spawn_1 = require("../../../util/win-spawn");
14
+ const desktop_db_1 = require("../../../desktop-db");
15
15
  const blueprint_store_1 = require("./blueprint-store");
16
- const providers_1 = require("./providers");
16
+ const providers_1 = require("../../../providers");
17
17
  const blueprint_draft_parser_1 = require("./blueprint-draft-parser");
18
18
  const blueprint_types_1 = require("./blueprint-types");
19
19
  const blueprint_spec_quality_1 = require("./blueprint-spec-quality");
20
20
  const blueprint_render_1 = require("./blueprint-render");
21
- const offline_assemble_1 = require("./offline-assemble");
22
- const artifact_registry_1 = require("./artifact-registry");
23
- const workspace_manager_1 = require("./workspace-manager");
24
- const ticket_store_1 = require("./ticket-store");
25
- const project_router_helpers_1 = require("./project-router-helpers");
21
+ const offline_assemble_1 = require("../../../offline-assemble");
22
+ const artifact_registry_1 = require("../../../artifact-registry");
23
+ const workspace_manager_1 = require("../../../workspace-manager");
24
+ const ticket_store_1 = require("../../specs/runtime/ticket-store");
25
+ const project_router_helpers_1 = require("../../../project-router-helpers");
26
26
  function execCli(bin, args, cwd) {
27
27
  return new Promise((resolve) => {
28
28
  const opts = { cwd, env: (0, win_spawn_1.windowsSpawnEnv)(), stdio: ['ignore', 'pipe', 'pipe'] };
@@ -21,7 +21,7 @@ exports.coerceBlueprint = coerceBlueprint;
21
21
  exports.parseBlueprintDraftBlocks = parseBlueprintDraftBlocks;
22
22
  exports.cutUnterminatedBlock = cutUnterminatedBlock;
23
23
  const blueprint_types_1 = require("./blueprint-types");
24
- const json_tolerant_1 = require("./json-tolerant");
24
+ const json_tolerant_1 = require("../../../json-tolerant");
25
25
  const FENCE_RE = /```blueprint-draft\s*\n([\s\S]*?)\n\s*```/g;
26
26
  const OPEN_FENCE_RE = /```blueprint-draft(?![\s\S]*?\n\s*```)/;
27
27
  // Fence tolerance: models mirror the schema example and sometimes emit the
@@ -30,7 +30,7 @@ exports.mergeSpecDetails = mergeSpecDetails;
30
30
  exports.withSpecsComplete = withSpecsComplete;
31
31
  exports.rangeFilled = rangeFilled;
32
32
  exports.cutUnterminatedGenerationBlock = cutUnterminatedGenerationBlock;
33
- const json_tolerant_1 = require("./json-tolerant");
33
+ const json_tolerant_1 = require("../../../json-tolerant");
34
34
  const blueprint_types_1 = require("./blueprint-types");
35
35
  exports.SPECS_PER_DETAIL_TURN = 2;
36
36
  /** Outline + detail turns + audit + one repair — 10 specs ⇒ 1 + 5 + 1 + 1. */
@@ -16,7 +16,7 @@
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.SPEC_DEPTH_FLOORS = exports.SINGLE_RESPONSE_MODE_LINE = exports.BUILDER_SYSTEM_PROMPT = exports.BUILDER_INSTRUCTIONS = void 0;
18
18
  exports.buildSnapshotRepairPrompt = buildSnapshotRepairPrompt;
19
- const spec_contract_prompt_1 = require("./spec-contract-prompt");
19
+ const spec_contract_prompt_1 = require("../../specs/runtime/spec-contract-prompt");
20
20
  Object.defineProperty(exports, "SPEC_DEPTH_FLOORS", { enumerable: true, get: function () { return spec_contract_prompt_1.SPEC_DEPTH_FLOORS; } });
21
21
  const blueprint_generation_1 = require("./blueprint-generation");
22
22
  const EXAMPLE_SPEC_JSON = JSON.stringify(spec_contract_prompt_1.PREMIUM_SCAFFOLD_EXAMPLE, null, 2)
@@ -4,11 +4,11 @@ exports.isProjectBuilderEnabled = isProjectBuilderEnabled;
4
4
  exports.createBlueprintRouter = createBlueprintRouter;
5
5
  const express_1 = require("express");
6
6
  const blueprint_chat_manager_1 = require("./blueprint-chat-manager");
7
- const providers_1 = require("./providers");
8
- const runtime_1 = require("./providers/runtime");
7
+ const providers_1 = require("../../../providers");
8
+ const runtime_1 = require("../../../providers/runtime");
9
9
  const blueprint_store_1 = require("./blueprint-store");
10
10
  const blueprint_spec_quality_1 = require("./blueprint-spec-quality");
11
- const provider_selection_1 = require("./provider-selection");
11
+ const provider_selection_1 = require("../../../provider-selection");
12
12
  function isProjectBuilderEnabled() {
13
13
  return process.env.SPECRAILS_PROJECT_BUILDER !== 'false';
14
14
  }
@@ -6,7 +6,7 @@ exports.firstBuilderSpecQualityDetail = firstBuilderSpecQualityDetail;
6
6
  exports.analyzeTypedBuilderSpecs = analyzeTypedBuilderSpecs;
7
7
  exports.auditRawBlueprintForM1 = auditRawBlueprintForM1;
8
8
  exports.formatQualityIssuesForModel = formatQualityIssuesForModel;
9
- const spec_contract_prompt_1 = require("./spec-contract-prompt");
9
+ const spec_contract_prompt_1 = require("../../specs/runtime/spec-contract-prompt");
10
10
  exports.BUILDER_SPEC_HEADINGS = [
11
11
  'Problem Statement',
12
12
  'Proposed Solution',
@@ -19,7 +19,7 @@ exports.chunkTickets = chunkTickets;
19
19
  exports.chainRailName = chainRailName;
20
20
  const milestone_progress_1 = require("./milestone-progress");
21
21
  const milestone_chain_store_1 = require("./milestone-chain-store");
22
- const ids_1 = require("./ids");
22
+ const ids_1 = require("../../../ids");
23
23
  exports.MAX_TICKETS_PER_CHAIN_CHUNK = 3;
24
24
  /** `SPECRAILS_MILESTONE_CHAIN=false|0|off` ⇒ every milestone launch is parallel and no row is written. */
25
25
  function isMilestoneChainEnabled(env = process.env) {
@@ -21,12 +21,12 @@ exports.resolveBlueprintWorkspace = resolveBlueprintWorkspace;
21
21
  exports.readMilestoneProgress = readMilestoneProgress;
22
22
  exports.markMilestoneDone = markMilestoneDone;
23
23
  const blueprint_render_1 = require("./blueprint-render");
24
- const ticket_store_1 = require("./ticket-store");
25
- const rail_pr_store_1 = require("./rail-pr-store");
26
- const rails_store_1 = require("./rails-store");
27
- const loop_runs_store_1 = require("./loop-runs-store");
28
- const workspace_resolution_1 = require("./workspace-resolution");
29
- const workspace_manager_1 = require("./workspace-manager");
24
+ const ticket_store_1 = require("../../specs/runtime/ticket-store");
25
+ const rail_pr_store_1 = require("../../delivery/runtime/rail-pr-store");
26
+ const rails_store_1 = require("../../delivery/runtime/rails-store");
27
+ const loop_runs_store_1 = require("../../loops/runtime/loop-runs-store");
28
+ const workspace_resolution_1 = require("../../../workspace-resolution");
29
+ const workspace_manager_1 = require("../../../workspace-manager");
30
30
  function milestoneLabelFor(n) {
31
31
  return `M${n}`;
32
32
  }
@@ -4,7 +4,7 @@ exports.CodeActivityQueryError = void 0;
4
4
  exports.parseCodeActivityQuery = parseCodeActivityQuery;
5
5
  exports.listCodeActivity = listCodeActivity;
6
6
  const node_crypto_1 = require("node:crypto");
7
- const project_repositories_1 = require("./project-repositories");
7
+ const project_repositories_1 = require("../../../project-repositories");
8
8
  class CodeActivityQueryError extends Error {
9
9
  status;
10
10
  constructor(message, status = 400) {