@tea-agent/loop-agent 0.43.0-next.8 → 0.43.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 (291) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +41 -2312
  3. package/README.md +7 -0
  4. package/dist/application/dag/args.js +8 -0
  5. package/dist/application/task-lifecycle/advance.js +38 -7
  6. package/dist/build-stamp.json +3 -3
  7. package/dist/cli/command-definitions.js +2 -0
  8. package/dist/cli/program.js +3 -1
  9. package/dist/cli/update/init-surface-notifier.js +2 -0
  10. package/dist/cli/update/policy.js +2 -0
  11. package/dist/commands/client-recovery.js +20 -55
  12. package/dist/commands/cursor-prompt.js +2 -0
  13. package/dist/commands/dag-approve.js +2 -0
  14. package/dist/commands/dag-final-verification.js +2 -0
  15. package/dist/commands/dag-init-hybrid.js +2 -0
  16. package/dist/commands/dag-reconcile-tasks.js +2 -0
  17. package/dist/commands/dag-reject.js +2 -0
  18. package/dist/commands/dag-report.js +2 -0
  19. package/dist/commands/dag-rerun.js +2 -0
  20. package/dist/commands/dag-resume.js +2 -0
  21. package/dist/commands/dag-workflow-compile.js +2 -0
  22. package/dist/commands/dag-workflow-plan.js +2 -0
  23. package/dist/commands/dag-workflow-validate.js +2 -0
  24. package/dist/commands/delegate.js +2 -0
  25. package/dist/commands/examples.js +2 -0
  26. package/dist/commands/import-prd.js +2 -0
  27. package/dist/commands/init-model-catalog.js +2 -0
  28. package/dist/commands/init.js +19 -13
  29. package/dist/commands/instructions.js +2 -0
  30. package/dist/commands/knowledge.js +2 -0
  31. package/dist/commands/loop-benchmark.js +2 -0
  32. package/dist/commands/pi-prompt.js +2 -0
  33. package/dist/commands/pi-reuse-benchmark.js +2 -0
  34. package/dist/commands/promote-run.js +2 -0
  35. package/dist/commands/stats.js +1 -1
  36. package/dist/commands/study-init.js +2 -0
  37. package/dist/commands/task-advance.js +34 -0
  38. package/dist/commands/task-source-prepare.js +2 -0
  39. package/dist/commands/worktree-create.js +2 -0
  40. package/dist/commands/worktree-remove.js +2 -0
  41. package/dist/executors/dag-pi-executor.js +1650 -198
  42. package/dist/executors/pi-executor.js +85 -3
  43. package/dist/executors/pi-sdk-executor.js +18 -0
  44. package/dist/executors/shell-executor.js +93 -7
  45. package/dist/executors/shell-verification.js +3 -0
  46. package/dist/executors/shell-write-guard.js +27 -32
  47. package/dist/governance/exec-plans.js +6 -3
  48. package/dist/infrastructure/console/app-data.js +6 -0
  49. package/dist/shared/artifacts-core.js +2 -0
  50. package/dist/shared/backend-dogfood-preflight.js +47 -0
  51. package/dist/shared/dag-failure-category.js +3 -0
  52. package/dist/shared/git-progress.js +2 -0
  53. package/dist/shared/one-shot-prompt-args.js +2 -0
  54. package/dist/shared/operator/capabilities.js +180 -0
  55. package/dist/shared/package-metadata.js +6 -4
  56. package/dist/shared/pi-context-pressure/extension.js +26 -16
  57. package/dist/shared/pi-context-pressure/sift-bridge.js +1 -1
  58. package/dist/shared/pi-provider-recovery.js +182 -0
  59. package/dist/shared/pi-retry-settings.js +40 -0
  60. package/dist/shared/reference-context.js +2 -0
  61. package/dist/task/config-types.js +29 -0
  62. package/dist/task/contract/project.js +9 -0
  63. package/dist/task/contract/recover.js +6 -0
  64. package/dist/task/contract/schema.js +17 -0
  65. package/dist/task/source-prepare/artifact-meta.js +9 -2
  66. package/dist/task/source-prepare/build-draft.js +60 -0
  67. package/dist/task/source-prepare/fragment-inventory.js +4 -1
  68. package/dist/task/source-prepare/parse-intent.js +36 -11
  69. package/dist/task/task-demand-routing.js +5 -2
  70. package/dist/worker/console/chat/browser-automation.js +523 -0
  71. package/dist/worker/console/chat/browser-policy.js +6 -36
  72. package/dist/worker/console/chat/browser-routes.js +188 -56
  73. package/dist/worker/console/chat/explore-tools.js +5 -2
  74. package/dist/worker/console/chat/pi-mode-loop-isolation.js +155 -0
  75. package/dist/worker/console/chat/pi-runtime/custom-tools/ask-user-question.js +44 -0
  76. package/dist/worker/console/chat/pi-runtime/custom-tools/browser-tools.js +184 -0
  77. package/dist/worker/console/chat/pi-runtime/custom-tools/explore-tools.js +202 -0
  78. package/dist/worker/console/chat/pi-runtime/custom-tools/goal-tools.js +79 -0
  79. package/dist/worker/console/chat/pi-runtime/custom-tools/operator-tools.js +94 -0
  80. package/dist/worker/console/chat/pi-runtime/custom-tools/scheduled-goal-tools.js +22 -0
  81. package/dist/worker/console/chat/pi-runtime/custom-tools/todo-write.js +38 -0
  82. package/dist/worker/console/chat/pi-runtime/inspection-types.js +28 -0
  83. package/dist/worker/console/chat/pi-runtime/inspection.js +439 -0
  84. package/dist/worker/console/chat/pi-runtime/progressive-tools.js +195 -0
  85. package/dist/worker/console/chat/pi-runtime/sdk-bindings.js +153 -0
  86. package/dist/worker/console/chat/pi-runtime/sdk-session.js +5 -0
  87. package/dist/worker/console/chat/pi-runtime.js +208 -1138
  88. package/dist/worker/console/chat/routes.js +59 -24
  89. package/dist/worker/console/chat/scheduled-goal-booking.js +59 -0
  90. package/dist/worker/console/chat/scheduled-goal-delivery.js +27 -0
  91. package/dist/worker/console/chat/scheduled-goal-request.js +190 -0
  92. package/dist/worker/console/chat/sdd-data-alignment.js +1 -1
  93. package/dist/worker/console/chat/session-mode-view.js +5 -4
  94. package/dist/worker/console/chat/session-mode.js +18 -12
  95. package/dist/worker/console/chat/session-store.js +42 -9
  96. package/dist/worker/console/chat/terminal-sessions.js +65 -1
  97. package/dist/worker/console/chat/terminal-tools.js +17 -5
  98. package/dist/worker/console/chat/tool-preview.js +115 -0
  99. package/dist/worker/console/chat/tools.js +10 -0
  100. package/dist/worker/console/chat/turn-order.js +13 -0
  101. package/dist/worker/console/chat/turn-process.js +32 -30
  102. package/dist/worker/console/console-update-and-init.js +1 -19
  103. package/dist/worker/console/console-update-runtime.js +5 -20
  104. package/dist/worker/console/operator-actions.js +63 -1
  105. package/dist/worker/console/prd-intake-bridge.js +54 -1
  106. package/dist/worker/console/routes.js +8 -0
  107. package/dist/worker/console/scheduled-goal-host.js +98 -0
  108. package/dist/worker/console/scheduled-goal-operation-adapter.js +127 -0
  109. package/dist/worker/console/server.js +24 -1
  110. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-CwAxHSAM.js → abnfDiagram-N423BO3Z-8-j6y-sd.js} +1 -1
  111. package/dist/worker/console/static/assets/{arc-Bozf-oeF.js → arc-eoQiMvuk.js} +1 -1
  112. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-DEypbEQv.js → architectureDiagram-T3A2C74G-C4A3uMcI.js} +1 -1
  113. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-B1BQWCbE.js → blockDiagram-VBNYF7ZC-D4zD2F-Q.js} +1 -1
  114. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-B3u5-yZz.js → c4Diagram-5PPSVZJV-j1RkJziL.js} +1 -1
  115. package/dist/worker/console/static/assets/channel-ChE7y-cx.js +1 -0
  116. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-DSUc2NTh.js → chunk-2GRJ4B5K-YBHmhik1.js} +1 -1
  117. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-DZouMIvT.js → chunk-2Q5K7J3B-COfWyo9P.js} +1 -1
  118. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-B3bhB5hh.js → chunk-5RXB4S5H-I99OUkHY.js} +1 -1
  119. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-CZFP_BOz.js → chunk-5VM5RSS4-XKxoJNJ4.js} +1 -1
  120. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DnE_wb-X.js → chunk-6Q2QTUOP-DLT_cYx1.js} +1 -1
  121. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-C2OfoiWm.js → chunk-GF5L2VYU-CxcKZ9mV.js} +1 -1
  122. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-BKUTL8mm.js → chunk-JWPE2WC7-V1EqXdjY.js} +1 -1
  123. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-BT5oz0tg.js → chunk-KBJHAD2P-DebTtdFp.js} +1 -1
  124. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-D8vk-GJi.js → chunk-RYQCIY6F-B-ivNRDf.js} +1 -1
  125. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-CkUIm3zu.js → chunk-XXDRQBXY-DC_Ds11b.js} +1 -1
  126. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C01TCf2X.js +1 -0
  127. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C01TCf2X.js +1 -0
  128. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CO9QNHmR.js → cose-bilkent-JH36ORCC-sWEqKwIb.js} +1 -1
  129. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-s52EPl2Z.js → cynefin-VYW2F7L2-BXa_dcu4.js} +1 -1
  130. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-BHaseJfW.js → cynefinDiagram-MW4NZA55-C-Mle84F.js} +1 -1
  131. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-CTVhRG_R.js → dagre-VZM6K2ZE-CXPDBITe.js} +1 -1
  132. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-B6pYeOMR.js → diagram-7IWD3JNH-CC-WJQfa.js} +1 -1
  133. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-CXXRzw5j.js → diagram-B4RE2ZJO-CDAV5Vs4.js} +1 -1
  134. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-BOeJHiLA.js → diagram-LBJQPF4R-CmFiAcNz.js} +1 -1
  135. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-DbEg6h_l.js → diagram-Q27KOJAE-DPBZHuyn.js} +1 -1
  136. package/dist/worker/console/static/assets/{diagram-UB23O5K3-CjlEcbX6.js → diagram-UB23O5K3-jUlm_Ds3.js} +1 -1
  137. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-BcqMPbD_.js → ebnfDiagram-BXEA7PRR-DWhQ3mfY.js} +1 -1
  138. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-DWfRyHe5.js → erDiagram-JOGREHBK-Tr2gMqet.js} +1 -1
  139. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-Bz7TeIc8.js → flowDiagram-UKHOOZJN-DJjVQHPA.js} +1 -1
  140. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-BD-JxYjU.js → ganttDiagram-PKOTCBZU-D74dQ4u0.js} +1 -1
  141. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-Cv16vMHK.js → gitGraphDiagram-DS77QQ5N-DwW0tZ0X.js} +1 -1
  142. package/dist/worker/console/static/assets/index-BWkIfcrK.css +1 -0
  143. package/dist/worker/console/static/assets/index-Cdkvw_H6.js +469 -0
  144. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-BlWO0HQQ.js → infoDiagram-6WML65LV-ILCbxJyb.js} +1 -1
  145. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-C4mbsn97.js → ishikawaDiagram-WSZJBQD7-DeuWBQ89.js} +1 -1
  146. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-CBPvVKjw.js → journeyDiagram-NVQOT4AX-CF5ih8Fk.js} +1 -1
  147. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-DPHLp54K.js → kanban-definition-27J2QSJJ-C7yOSuRO.js} +1 -1
  148. package/dist/worker/console/static/assets/{linear-CXx_9o6k.js → linear-BDZ9riWi.js} +1 -1
  149. package/dist/worker/console/static/assets/{mermaid.core-DU3IxMq9.js → mermaid.core-7pKqYtpZ.js} +5 -5
  150. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-COm4a2ud.js → mindmap-definition-FAOFIHXS-LeJDybSU.js} +1 -1
  151. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-Cbt7OA5d.js → pegDiagram-VL7TDLO6-BJvT3pMD.js} +1 -1
  152. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-BiYV_4Wl.js → pieDiagram-7S7Q4E2Y-_rGqpMan.js} +1 -1
  153. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-lg2zhvbp.js → quadrantDiagram-CIZ2JOQS-DPcSv5aA.js} +1 -1
  154. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-cBLvtf0p.js → railroadDiagram-AXF67PYL-Drxx4hkJ.js} +1 -1
  155. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-BoekU3Bg.js → requirementDiagram-LRYGKXZP-BCTUdU4z.js} +1 -1
  156. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-D_DMZYga.js → sankeyDiagram-W5VNT64P-B6wzbZmB.js} +1 -1
  157. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-Lzmzn8lz.js → sequenceDiagram-SI44F4Z6-BGt8d3QQ.js} +1 -1
  158. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-Cos3HpIe.js → sizeCapture-X5ZJPWSS-7nlhJKo7.js} +1 -1
  159. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-D-hFBGsx.js → stateDiagram-OKZ733FA-Cv2stqMA.js} +1 -1
  160. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DC7V5vcq.js +1 -0
  161. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-BY95sCVI.js → swimlanes-SLNWSIFB-qDAo4Yc1.js} +2 -2
  162. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Bwy4QUTO.js +8 -0
  163. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-D1iCgWHS.js → timeline-definition-Z64GVDOM-CKbDNKTr.js} +1 -1
  164. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-D9IYy4WK.js → vennDiagram-T6HMQDX7-DI-9EHic.js} +1 -1
  165. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-C9yJwO-R.js → wardleyDiagram-T6FBY63Y-BrzzRDpX.js} +1 -1
  166. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-CC2llyou.js → xychartDiagram-ELKLHX3M-BclH5hGh.js} +1 -1
  167. package/dist/worker/console/static/index.html +2 -2
  168. package/dist/worker/console/static-src/operator-chat/active-turn-tail.js +10 -0
  169. package/dist/worker/console/static-src/operator-chat/chat-scroll-position.js +24 -0
  170. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +41 -11
  171. package/dist/worker/console/static-src/operator-chat/compaction-message.js +10 -17
  172. package/dist/worker/console/static-src/operator-chat/composer-session-ledger.js +192 -0
  173. package/dist/worker/console/static-src/operator-chat/pending-user-message.js +9 -1
  174. package/dist/worker/console/static-src/operator-chat/slash-palette-nav.js +15 -5
  175. package/dist/worker/console/static-src/operator-chat/timeline-merge.js +29 -0
  176. package/dist/worker/console/static-src/operator-chat/turn-process-disclosure.js +10 -0
  177. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +105 -44
  178. package/dist/worker/console/static-src/operator-chat/useChatStream.js +145 -70
  179. package/dist/worker/console/static-src/operator-chat/useChatThread.js +38 -57
  180. package/dist/worker/console/static-src/operator-chat/useComposer.js +195 -73
  181. package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +2 -0
  182. package/dist/worker/console/static-src/prd-file-import.js +3 -1
  183. package/dist/worker/console/workspace-context.js +22 -0
  184. package/dist/worker/console/workspace-initialization.js +209 -0
  185. package/dist/worker/delivery/git-transaction.js +2 -0
  186. package/dist/worker/feature/fullstack-validate.js +2 -0
  187. package/dist/worker/loop-agent/loop-agent-client.js +8 -2
  188. package/dist/worker/materialize/harness-task-materializer.js +4 -1
  189. package/dist/worker/metrics/projector.js +1 -1
  190. package/dist/worker/observability/event-store.js +4 -1
  191. package/dist/worker/observability/read-model.js +4 -1
  192. package/dist/worker/observe/node-transparency.js +23 -1
  193. package/dist/worker/observe/routes.js +4 -0
  194. package/dist/worker/observe/static/operator-chrome.js +3 -1
  195. package/dist/worker/observe/static/styles.css +7 -4
  196. package/dist/worker/observe/static/views/dag-inspector.js +5 -19
  197. package/dist/worker/outcomes/declared-artifacts.js +2 -0
  198. package/dist/worker/preflight.js +3 -0
  199. package/dist/worker/scheduler/scheduled-goal-dispatch.js +117 -0
  200. package/dist/worker/scheduler/scheduled-goal-evidence.js +167 -0
  201. package/dist/worker/scheduler/scheduled-goal-recovery.js +62 -0
  202. package/dist/worker/scheduler/scheduled-goal-store.js +699 -0
  203. package/dist/worker/scheduler/scheduled-goal-supervisor.js +132 -0
  204. package/dist/worker/scheduler/scheduled-goal-time.js +102 -0
  205. package/dist/worker/scheduler/scheduled-goal-types.js +95 -0
  206. package/dist/worker/task-spec/validate.js +4 -1
  207. package/dist/workflows/dag/backend-test-markdown-workflow.js +6 -24
  208. package/dist/workflows/dag/backend-test-plan-protocol.js +82 -5
  209. package/dist/workflows/dag/dag-retry-schema.js +11 -0
  210. package/dist/workflows/dag/decision-envelope.js +2 -0
  211. package/dist/workflows/dag/dynamic-runtime/shared.js +2 -2
  212. package/dist/workflows/dag/frontend-closeout.js +3 -1
  213. package/dist/workflows/dag/frontend-committed-facts.js +461 -0
  214. package/dist/workflows/dag/frontend-durable-tools.js +15 -3
  215. package/dist/workflows/dag/frontend-implementation-contract.js +369 -12
  216. package/dist/workflows/dag/frontend-plan-canary.js +53 -0
  217. package/dist/workflows/dag/frontend-plan-decision-contract.js +803 -0
  218. package/dist/workflows/dag/frontend-plan-render.js +0 -2
  219. package/dist/workflows/dag/frontend-provider-capability-matrix.js +8 -61
  220. package/dist/workflows/dag/frontend-recovery-run.js +57 -0
  221. package/dist/workflows/dag/frontend-repair.js +55 -76
  222. package/dist/workflows/dag/frontend-review-context.js +42 -68
  223. package/dist/workflows/dag/frontend-review-scopes.js +2 -2
  224. package/dist/workflows/dag/frontend-risk.js +92 -10
  225. package/dist/workflows/dag/frontend-session-budget.js +117 -3
  226. package/dist/workflows/dag/frontend-shape.js +11 -55
  227. package/dist/workflows/dag/frontend-test-execution-evidence.js +35 -10
  228. package/dist/workflows/dag/frontend-typed-event-store.js +32 -25
  229. package/dist/workflows/dag/frontend-verification-trace.js +33 -54
  230. package/dist/workflows/dag/frontend-writer-admission.js +3 -47
  231. package/dist/workflows/dag/frontend-writer-status.js +0 -23
  232. package/dist/workflows/dag/init-hybrid.js +47 -19
  233. package/dist/workflows/dag/interrupt-request.js +2 -0
  234. package/dist/workflows/dag/lifecycle.js +11 -2
  235. package/dist/workflows/dag/node-execution.js +50 -13
  236. package/dist/workflows/dag/reconcile-run.js +2 -0
  237. package/dist/workflows/dag/repair-artifact.js +3 -1
  238. package/dist/workflows/dag/report.js +2 -0
  239. package/dist/workflows/dag/rerun-plan.js +10 -0
  240. package/dist/workflows/dag/rerun-task.js +79 -1
  241. package/dist/workflows/dag/retry-policy.js +18 -0
  242. package/dist/workflows/dag/scheduler.js +2 -4
  243. package/dist/workflows/dag/types.js +44 -6
  244. package/dist/workflows/dag/validate.js +4 -0
  245. package/docs/README.md +1 -0
  246. package/docs/architecture/runtime-boundaries.md +3 -3
  247. package/docs/governance/README.md +1 -0
  248. package/docs/init-surface.manifest.json +1 -0
  249. package/docs/operations/README.md +2 -0
  250. package/docs/templates/README.md +1 -1
  251. package/docs/templates/agent-dag.schema.json +2 -2
  252. package/docs/templates/backend-test-dag.json +14 -10
  253. package/docs/templates/frontend-implementation-contract.schema.json +0 -7
  254. package/package.json +9 -3
  255. package/skills/frontend-bounded-implement/references/code-standards.md +3 -3
  256. package/skills/frontend-contract/references/contract-protocol.md +3 -1
  257. package/skills/frontend-plan/SKILL.md +8 -6
  258. package/skills/frontend-plan/references/decision-contract.md +3 -3
  259. package/skills/frontend-review/SKILL.md +18 -28
  260. package/skills/frontend-review/references/review-findings.md +8 -3
  261. package/dist/commands/new-task.js +0 -5
  262. package/dist/commands/status.js +0 -57
  263. package/dist/commands/task-contract.js +0 -269
  264. package/dist/shared/prompts.js +0 -26
  265. package/dist/task/config.js +0 -2
  266. package/dist/task/contract/validate-draft.js +0 -106
  267. package/dist/task/goal.js +0 -3
  268. package/dist/task/index.js +0 -12
  269. package/dist/task/lifecycle.js +0 -1
  270. package/dist/task/operator/capabilities.js +0 -6
  271. package/dist/task/operator/envelope.js +0 -2
  272. package/dist/task/operator/index.js +0 -5
  273. package/dist/task/operator/registry.js +0 -2
  274. package/dist/task/operator/types.js +0 -1
  275. package/dist/task/paths.js +0 -1
  276. package/dist/task/source-state.js +0 -1
  277. package/dist/task/subagent-guidance.js +0 -1
  278. package/dist/worker/console/chat/sift-bridge.js +0 -1
  279. package/dist/worker/console/index.js +0 -20
  280. package/dist/worker/console/static/assets/channel-JM-I_b0s.js +0 -1
  281. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DuQQAYEg.js +0 -1
  282. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DuQQAYEg.js +0 -1
  283. package/dist/worker/console/static/assets/index-B5H-giS2.js +0 -468
  284. package/dist/worker/console/static/assets/index-Bf7dxfm-.css +0 -1
  285. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-img0hVJ4.js +0 -1
  286. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-B4acZJvk.js +0 -8
  287. package/dist/worker/scheduler/index.js +0 -25
  288. package/dist/workflows/dag/facts.js +0 -4
  289. package/dist/workflows/dag/frontend-shadow-dual-write.js +0 -975
  290. package/dist/workflows/dag/index.js +0 -6
  291. package/dist/workflows/dynamic/index.js +0 -7
@@ -119,6 +119,33 @@ export function parseEngineeringBoundaryFromParams(p) {
119
119
  };
120
120
  const allowedPaths = asList(p.allowedPaths ?? p.allowedPath);
121
121
  const forbiddenPaths = asList(p.forbiddenPaths ?? p.forbiddenPath);
122
+ const capabilityBoundaryRaw = p.capabilityBoundary;
123
+ const capabilityBoundary = capabilityBoundaryRaw && typeof capabilityBoundaryRaw === "object" && !Array.isArray(capabilityBoundaryRaw)
124
+ ? {
125
+ allowed: Array.isArray(capabilityBoundaryRaw.allowed)
126
+ ? capabilityBoundaryRaw.allowed.filter((x) => typeof x === "string" && x.trim().length > 0)
127
+ : undefined,
128
+ forbidden: Array.isArray(capabilityBoundaryRaw.forbidden)
129
+ ? capabilityBoundaryRaw.forbidden.filter((x) => typeof x === "string" && x.trim().length > 0)
130
+ : undefined,
131
+ }
132
+ : undefined;
133
+ const interactionIds = asList(p.interactionIds ?? p.interactionId);
134
+ const requirementOwnership = Array.isArray(p.requirementOwnership)
135
+ ? p.requirementOwnership
136
+ .map((entry) => ({
137
+ requirementIds: Array.isArray(entry.requirementIds)
138
+ ? entry.requirementIds.filter((id) => typeof id === "string" && id.trim().length > 0)
139
+ : [],
140
+ implementationFiles: Array.isArray(entry.implementationFiles)
141
+ ? entry.implementationFiles.filter((f) => typeof f === "string" && f.trim().length > 0)
142
+ : undefined,
143
+ verificationFiles: Array.isArray(entry.verificationFiles)
144
+ ? entry.verificationFiles.filter((f) => typeof f === "string" && f.trim().length > 0)
145
+ : undefined,
146
+ }))
147
+ .filter((entry) => entry.requirementIds.length > 0)
148
+ : undefined;
122
149
  const verifyRaw = p.verifyCommands ?? p.verify;
123
150
  const verifyCommands = [];
124
151
  if (Array.isArray(verifyRaw)) {
@@ -175,6 +202,11 @@ export function parseEngineeringBoundaryFromParams(p) {
175
202
  ...(allowedPaths.length > 0 ? { allowedPaths } : {}),
176
203
  ...(forbiddenPaths.length > 0 ? { forbiddenPaths } : {}),
177
204
  ...(verifyCommands.length > 0 ? { verifyCommands } : {}),
205
+ ...(requirementOwnership?.length ? { requirementOwnership } : {}),
206
+ ...(capabilityBoundary && ((capabilityBoundary.allowed?.length ?? 0) + (capabilityBoundary.forbidden?.length ?? 0)) > 0
207
+ ? { capabilityBoundary }
208
+ : {}),
209
+ ...(interactionIds.length > 0 ? { interactionIds } : {}),
178
210
  };
179
211
  }
180
212
  export function appendEngineeringCliArgs(args, boundary) {
@@ -187,17 +219,38 @@ export function appendEngineeringCliArgs(args, boundary) {
187
219
  for (const cmd of boundary.verifyCommands ?? []) {
188
220
  args.push("--verify", `${cmd.label}:${cmd.command}`);
189
221
  }
222
+ if (boundary.requirementOwnership?.length) {
223
+ args.push("--requirement-ownership", JSON.stringify(boundary.requirementOwnership));
224
+ }
225
+ if (boundary.capabilityBoundary) {
226
+ args.push("--capability-boundary", JSON.stringify(boundary.capabilityBoundary));
227
+ }
228
+ for (const id of boundary.interactionIds ?? []) {
229
+ args.push("--interaction-ids", id);
230
+ }
190
231
  }
191
232
  export function applyEngineeringBoundaryToDraft(draft, boundary) {
192
233
  const allowedPaths = filterPlaceholderPaths(boundary.allowedPaths);
193
234
  const forbiddenPaths = filterPlaceholderPaths(boundary.forbiddenPaths);
194
235
  if (allowedPaths.length === 0 &&
195
236
  forbiddenPaths.length === 0 &&
196
- !(boundary.verifyCommands?.length)) {
237
+ !(boundary.verifyCommands?.length) &&
238
+ !(boundary.requirementOwnership?.length) &&
239
+ !boundary.capabilityBoundary &&
240
+ !(boundary.interactionIds?.length)) {
197
241
  return draft;
198
242
  }
199
243
  return {
200
244
  ...draft,
245
+ ...(boundary.requirementOwnership?.length
246
+ ? { requirementOwnership: boundary.requirementOwnership }
247
+ : {}),
248
+ ...(boundary.capabilityBoundary
249
+ ? { capabilityBoundary: boundary.capabilityBoundary }
250
+ : {}),
251
+ ...(boundary.interactionIds?.length
252
+ ? { interactionIds: boundary.interactionIds }
253
+ : {}),
201
254
  constraints: {
202
255
  invariants: draft.constraints?.invariants ?? [],
203
256
  allowedPaths: allowedPaths.length > 0
@@ -1130,6 +1130,14 @@ export async function handleConsoleOperatorRequest(req, res, ctx) {
1130
1130
  !pathname.startsWith("/api/session/")) {
1131
1131
  return false;
1132
1132
  }
1133
+ if (method === "GET" && pathname === "/api/operator/v1/workspace-initialization") {
1134
+ const service = ctx.operator?.actionContext.workspaceInitialization;
1135
+ if (!service)
1136
+ sendJson(res, 503, { ok: false, error: { code: "UNAVAILABLE", message: "工作区配置服务不可用" } });
1137
+ else
1138
+ sendJson(res, 200, { ok: true, initialization: await service.check(url.searchParams.get("refresh") === "1") });
1139
+ return true;
1140
+ }
1133
1141
  if (method === "GET" && pathname === "/api/operator/v1/readiness") {
1134
1142
  await handleReadiness(req, res, ctx);
1135
1143
  return true;
@@ -0,0 +1,98 @@
1
+ import { dispatchScheduledGoalOperation } from "./scheduled-goal-operation-adapter.js";
2
+ import { assessScheduledGoal, continueScheduledGoal } from "../scheduler/scheduled-goal-supervisor.js";
3
+ import { evaluateScheduledGoalWake } from "../scheduler/scheduled-goal-time.js";
4
+ /** Background operation ownership, independent of a browser or an interactive Chat turn.
5
+ * Every wake rebuilds decisions from the ledger; timers carry no authorization.
6
+ * No stale takeover: reserved work is observed, never re-issued.
7
+ */
8
+ export class ScheduledGoalHost {
9
+ deps;
10
+ timer;
11
+ active;
12
+ stopped = true;
13
+ constructor(deps) {
14
+ this.deps = deps;
15
+ if (deps.intervalMs !== undefined && (!Number.isFinite(deps.intervalMs) || deps.intervalMs < 100))
16
+ throw new Error("invalid scheduled goal wake interval");
17
+ }
18
+ start() {
19
+ if (!this.stopped)
20
+ return;
21
+ this.stopped = false;
22
+ this.wake();
23
+ }
24
+ /** Nonblocking. The host retains the operation promise until it settles. */
25
+ wake() {
26
+ if (this.stopped || this.active)
27
+ return;
28
+ if (this.timer) {
29
+ clearTimeout(this.timer);
30
+ this.timer = undefined;
31
+ }
32
+ this.active = this.tick().catch((error) => this.deps.onError?.(undefined, error)).finally(() => {
33
+ this.active = undefined;
34
+ if (!this.stopped) {
35
+ this.timer = setTimeout(() => { this.timer = undefined; this.wake(); }, this.deps.intervalMs ?? 5000);
36
+ this.timer.unref?.();
37
+ }
38
+ });
39
+ }
40
+ /** Stop future admissions. Existing children keep their operation ownership. */
41
+ stop() {
42
+ this.stopped = true;
43
+ if (this.timer)
44
+ clearTimeout(this.timer);
45
+ this.timer = undefined;
46
+ }
47
+ async waitForIdle() { await this.active; }
48
+ async tick() {
49
+ for (const snapshot of await this.deps.goals.list()) {
50
+ if (this.stopped)
51
+ return;
52
+ try {
53
+ await this.advance(snapshot.goalId);
54
+ }
55
+ catch (error) {
56
+ this.deps.onError?.(snapshot.goalId, error);
57
+ }
58
+ }
59
+ }
60
+ async advance(goalId) {
61
+ const { goals } = this.deps;
62
+ let goal = await goals.get(goalId);
63
+ if (!goal.approval)
64
+ return;
65
+ const intent = goal.intents.at(-1);
66
+ if (intent && ["dispatching", "associated", "unknown"].includes(intent.state)) {
67
+ await dispatchScheduledGoalOperation(goalId, this.deps);
68
+ goal = await goals.get(goalId);
69
+ }
70
+ if (this.stopped)
71
+ return;
72
+ if (["cancelled", "blocked", "budget_exhausted", "unknown"].includes(goal.state)) {
73
+ await this.deps.deliver?.(goal);
74
+ return;
75
+ }
76
+ goal = await goals.refreshAcceptance(goalId);
77
+ goal = await goals.settleIdleGoal(goalId, this.deps.now?.());
78
+ if (["accepted", "cancelled", "blocked", "budget_exhausted", "unknown"].includes(goal.state)) {
79
+ await this.deps.deliver?.(goal);
80
+ return;
81
+ }
82
+ if (goal.assessmentAttempt || goal.supervisions.some((entry) => ["requested", "preparing", "unknown"].includes(entry.state)))
83
+ return;
84
+ const current = goal.intents.at(-1);
85
+ if (!current || current.state === "prepared") {
86
+ if (evaluateScheduledGoalWake(goal.frozen.time, this.deps.now?.() ?? new Date()).kind === "due")
87
+ await dispatchScheduledGoalOperation(goalId, this.deps);
88
+ return;
89
+ }
90
+ if (current.state !== "terminal")
91
+ return;
92
+ if (goal.acceptanceState === "failed") {
93
+ await continueScheduledGoal(goalId, goals, this.deps.client);
94
+ return;
95
+ }
96
+ await assessScheduledGoal(goalId, goals, { now: this.deps.now });
97
+ }
98
+ }
@@ -0,0 +1,127 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readFile, realpath } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { scheduledGoalHash } from "../scheduler/scheduled-goal-store.js";
5
+ import { evaluateScheduledGoalWake } from "../scheduler/scheduled-goal-time.js";
6
+ import { prepareScheduledGoalDraft } from "../scheduler/scheduled-goal-dispatch.js";
7
+ import { captureScheduledGoalTree } from "../scheduler/scheduled-goal-evidence.js";
8
+ import { runOperation } from "./operation-runner.js";
9
+ /** Only operation facts can settle an intent. Missing associations never authorize a retry. */
10
+ async function observe(goal, intent, deps) {
11
+ const operation = await deps.operations.get(intent.operationId);
12
+ // A second wake can arrive between intent commit and operation save/spawn.
13
+ // Liveness only defers an unknown projection: it never grants execution rights
14
+ // or authorizes takeover (PID reuse can only cause conservative extra waiting).
15
+ const associationPending = !operation || ["queued", "starting", "running"].includes(operation.state);
16
+ if (intent.state === "dispatching" && associationPending && !operation?.dagRunId && intent.dispatchOwnerPid) {
17
+ try {
18
+ process.kill(intent.dispatchOwnerPid, 0);
19
+ return { kind: "observing", operation };
20
+ }
21
+ catch (error) {
22
+ if (error.code !== "ESRCH")
23
+ return { kind: "observing", operation };
24
+ }
25
+ }
26
+ const state = operation?.state === "succeeded" ? "succeeded"
27
+ : operation?.state === "failed" || operation?.state === "timed-out" ? "failed"
28
+ : operation?.state === "running" ? "running" : "unknown";
29
+ await deps.goals.observeOperation(goal.goalId, intent.intentId, intent.ownerToken, {
30
+ operationId: intent.operationId, runId: operation?.dagRunId, state,
31
+ observedAt: (deps.now?.() ?? new Date()).toISOString(),
32
+ });
33
+ const linkedTerminal = operation?.dagRunId === intent.runId && (state === "succeeded" || state === "failed");
34
+ return { kind: linkedTerminal ? "settled" : "observing", operation };
35
+ }
36
+ function taskDraft(goal, intent) {
37
+ return intent?.derived ? { ...goal.frozen, managedTaskId: intent.derived.managedTaskId, prepared: intent.derived.prepared } : goal.frozen;
38
+ }
39
+ async function verifyPrepared(goal, deps, intent) {
40
+ const frozen = taskDraft(goal, intent);
41
+ if (intent?.derived) {
42
+ const tree = await captureScheduledGoalTree(frozen.worktreeRef, frozen.frozenBase, frozen.allowedPaths, frozen.forbiddenPaths);
43
+ if (tree.treeHash !== intent.derived.treeHash || tree.scopeViolations.length)
44
+ throw new Error("derived dispatch tree drift");
45
+ }
46
+ const identity = deps.client.getIdentity();
47
+ if (!identity || identity.packageFingerprint.value !== frozen.controllerRef)
48
+ throw new Error("scheduled goal controller binding mismatch");
49
+ const root = await realpath(frozen.worktreeRef);
50
+ for (const [ref, expected] of [
51
+ [frozen.prepared.dagPath, frozen.prepared.dagHash],
52
+ [frozen.prepared.contractPath, frozen.prepared.contractHash],
53
+ ]) {
54
+ if (path.isAbsolute(ref))
55
+ throw new Error("scheduled goal artifact must be worktree-relative");
56
+ const file = await realpath(path.resolve(root, ref));
57
+ const relative = path.relative(root, file);
58
+ if (!relative || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative))
59
+ throw new Error("scheduled goal artifact escapes worktree");
60
+ const actual = createHash("sha256").update(await readFile(file)).digest("hex");
61
+ if (actual !== expected)
62
+ throw new Error("scheduled goal prepared artifact drift");
63
+ }
64
+ const { prepared: _prepared, controllerRef: _controllerRef, ...input } = frozen;
65
+ const current = await prepareScheduledGoalDraft(input, deps.client);
66
+ if (scheduledGoalHash(current.prepared) !== scheduledGoalHash(frozen.prepared))
67
+ throw new Error("scheduled goal managed gate drift");
68
+ }
69
+ /**
70
+ * Headless adapter to the existing operation runner; no second executor.
71
+ * The host awaits this operation in the background. Reopening only observes an
72
+ * already-dispatched intent, even when the operation is queued or missing.
73
+ */
74
+ export async function dispatchScheduledGoalOperation(goalId, deps) {
75
+ const goal = await deps.goals.get(goalId);
76
+ const prior = goal.intents.at(-1);
77
+ if (prior && prior.state !== "prepared")
78
+ return observe(goal, prior, deps);
79
+ await verifyPrepared(goal, deps, prior);
80
+ const claim = await deps.goals.claim(goalId, deps.now?.());
81
+ if (claim.kind !== "claimed" && claim.kind !== "existing")
82
+ return claim;
83
+ const intent = claim.intent;
84
+ const frozen = taskDraft(goal, intent);
85
+ if (!await deps.goals.beginDispatch(goalId, intent.intentId, intent.ownerToken, deps.now?.()))
86
+ return { kind: "waiting" };
87
+ try {
88
+ // Intent identity is durable before creating an operation. An existing file
89
+ // is evidence of a previous attempt, not permission to call runOperation again.
90
+ if (await deps.operations.get(intent.operationId))
91
+ return observe(goal, intent, deps);
92
+ const cliArgs = ["task", "advance", frozen.managedTaskId, "--approve-gate", frozen.prepared.gateToken,
93
+ "--run-id", intent.runId, "--max-concurrent", "1", "--skip-finalize", "--json"];
94
+ const actionParams = { goalId, goalRevision: goal.goalRevision, intentId: intent.intentId,
95
+ taskRevision: intent.taskRevision, turnSeq: intent.turnSeq, envelopeHash: goal.envelopeHash };
96
+ const operation = {
97
+ schemaVersion: 1, revision: 1, operationId: intent.operationId, clientRequestId: intent.idempotencyKey,
98
+ action: "taskAdvance", actionParams, payloadHash: scheduledGoalHash({ actionParams, cliArgs }),
99
+ state: "queued", createdAt: (deps.now?.() ?? new Date()).toISOString(), taskId: frozen.managedTaskId, cliArgs,
100
+ };
101
+ await deps.operations.save(operation);
102
+ await runOperation(intent.operationId, {
103
+ store: deps.operations, client: deps.client, events: deps.events, repoRoot: goal.frozen.worktreeRef,
104
+ env: deps.env, defaultTimeoutMs: 0,
105
+ runCommand: async (args, options) => {
106
+ await verifyPrepared(goal, deps, intent);
107
+ const current = await deps.goals.get(goalId);
108
+ const owned = current.intents.find((item) => item.intentId === intent.intentId);
109
+ if (current.state !== "admitted" || owned?.state !== "dispatching" || owned.ownerToken !== intent.ownerToken)
110
+ throw new Error("scheduled goal dispatch ownership lost");
111
+ if (evaluateScheduledGoalWake(current.frozen.time, deps.now?.() ?? new Date()).kind !== "due")
112
+ throw new Error("scheduled goal authorization window closed before spawn");
113
+ // LoopAgentClient additionally revalidates binary/package identity before spawn.
114
+ return deps.client.run(args, options);
115
+ },
116
+ });
117
+ }
118
+ catch {
119
+ // The durable dispatch may have produced a child. Preserve its reservation
120
+ // and use store facts; never infer "not started" from a missing callback.
121
+ await deps.goals.observeOperation(goalId, intent.intentId, intent.ownerToken, {
122
+ operationId: intent.operationId, state: "unknown", observedAt: (deps.now?.() ?? new Date()).toISOString(),
123
+ });
124
+ return { kind: "observing", operation: await deps.operations.get(intent.operationId) };
125
+ }
126
+ return observe(goal, intent, deps);
127
+ }
@@ -1,3 +1,4 @@
1
+ import { ScheduledGoalStore } from "../scheduler/scheduled-goal-store.js";
1
2
  import { randomBytes } from "node:crypto";
2
3
  import { spawn } from "node:child_process";
3
4
  import { existsSync } from "node:fs";
@@ -11,6 +12,7 @@ import { isLoopbackHost } from "./loopback.js";
11
12
  import { ChatSessionStore } from "./chat/session-store.js";
12
13
  import { ChatSessionCatalog, projectChatSessionCatalogListItem, } from "./chat/session-catalog.js";
13
14
  import { matchRepoHtmlPreviewRoute } from "./chat/repo-browser.js";
15
+ import { OperationStore } from "../../infrastructure/console/operation-store.js";
14
16
  import { handleConsoleHealthRequest, handleWorkspaceRoutes, sendJson, serveConsoleStatic, } from "./routes.js";
15
17
  import { issueBootCapabilityToken, injectConfirmationTokenScript, } from "./security.js";
16
18
  import { resolvePackageRootFromConsole } from "./sibling-controller.js";
@@ -182,6 +184,20 @@ export async function createConsoleServer(options) {
182
184
  throw new Error(`console serve: failed to create startup workspace context: ${startupResolution.message}`);
183
185
  }
184
186
  const startup = startupResolution.context;
187
+ // Scheduled authorization belongs to its workspace, not the last browser tab.
188
+ // Restore booked workspaces even when the original Chat/workspace is hidden.
189
+ for (const record of await registry.listAll()) {
190
+ if (record.workspaceId === startupRecord.workspaceId)
191
+ continue;
192
+ try {
193
+ const goals = await new ScheduledGoalStore(record.repoRoot).list();
194
+ if (goals.some((goal) => Boolean(goal.approval)))
195
+ await materializeContext(record);
196
+ }
197
+ catch (error) {
198
+ process.stderr.write(`[scheduled-goal] workspace recovery ${record.workspaceId}: ${error instanceof Error ? error.message : String(error)}\n`);
199
+ }
200
+ }
185
201
  const requestConsoleHandoff = async (targetVersion) => {
186
202
  const packageRoot = resolvePackageRootFromConsole();
187
203
  const agentWorkerBin = path.join(packageRoot, "bin", "agent-worker.js");
@@ -235,6 +251,12 @@ export async function createConsoleServer(options) {
235
251
  packageRoot: resolvePackageRootFromConsole(),
236
252
  client: startup.client,
237
253
  operations: startup.operations,
254
+ workspaceActivity: async () => {
255
+ const records = new Map((await registry.snapshotVisible()).workspaces.map(record => [record.workspaceId, record]));
256
+ for (const context of workspaceContexts.values())
257
+ records.set(context.workspaceId, context.record);
258
+ return [...records.values()].map(record => ({ repoRoot: record.repoRoot, operations: workspaceContexts.get(record.workspaceId)?.operations ?? new OperationStore(openConsoleAppData({ repoRoot: record.repoRoot, appDataRoot: options.appDataRoot })) }));
259
+ },
238
260
  activeChatTurnCount: () => [...workspaceContexts.values()].reduce((total, context) => total + (context.chatRouteDeps.turnExecutions?.size() ?? 0), 0),
239
261
  requestHandoff: requestConsoleHandoff,
240
262
  });
@@ -644,7 +666,7 @@ export async function createConsoleServer(options) {
644
666
  }
645
667
  resolution.context.actionContext.readiness =
646
668
  resolution.context.getReadiness();
647
- await dispatchChat(req, res, resolution.context.chatRouteDeps, pathname, undefined);
669
+ await dispatchChat(req, res, resolution.context.chatRouteDeps, pathname, resolution.context.workspaceId);
648
670
  }
649
671
  async function handleOperatorDispatch(req, res, pathname, url, method) {
650
672
  const { handleConsoleOperatorRequest } = await import("./routes.js");
@@ -687,6 +709,7 @@ export async function createConsoleServer(options) {
687
709
  if ((method === "GET" &&
688
710
  (pathname === "/api/operator/v1/readiness" ||
689
711
  pathname === "/api/operator/v1/recovery/candidates" ||
712
+ pathname === "/api/operator/v1/workspace-initialization" ||
690
713
  pathname === "/api/operator/v1/night-aux-ticker")) ||
691
714
  (method === "POST" &&
692
715
  pathname === "/api/operator/v1/night-aux-ticker")) {
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-DnE_wb-X.js";import{p as f}from"./chunk-JWPE2WC7-BKUTL8mm.js";import{_ as n,l as o}from"./mermaid.core-DU3IxMq9.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-s52EPl2Z.js";import"./index-B5H-giS2.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-DLT_cYx1.js";import{p as f}from"./chunk-JWPE2WC7-V1EqXdjY.js";import{_ as n,l as o}from"./mermaid.core-7pKqYtpZ.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-BXa_dcu4.js";import"./index-Cdkvw_H6.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
@@ -1 +1 @@
1
- import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-DU3IxMq9.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-7pKqYtpZ.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};