@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
@@ -0,0 +1,192 @@
1
+ import { createInputHistoryState, navigateInputHistory, recordInputHistoryEntry, resetInputHistoryBrowsing, } from "./input-history.js";
2
+ export const DUPLICATE_SUBMISSION_GESTURE_MS = 350;
3
+ export function composerSessionKey(identity) {
4
+ return `${identity.workspaceId ?? ""}\u0000${identity.sessionId}`;
5
+ }
6
+ function cloneHistory(history) {
7
+ return { ...history, entries: [...history.entries] };
8
+ }
9
+ function cloneImages(images) {
10
+ return [...images];
11
+ }
12
+ function createRecord() {
13
+ return {
14
+ draft: "",
15
+ images: [],
16
+ history: createInputHistoryState(),
17
+ revision: 0,
18
+ sequence: 0,
19
+ initialized: false,
20
+ attempts: new Map(),
21
+ failedSubmissionCount: 0,
22
+ };
23
+ }
24
+ function sameImages(left, right) {
25
+ return (left.length === right.length &&
26
+ left.every((image, index) => {
27
+ const other = right[index];
28
+ return (other !== undefined &&
29
+ image.name === other.name &&
30
+ image.type === other.type &&
31
+ image.mimeType === other.mimeType &&
32
+ image.data === other.data);
33
+ }));
34
+ }
35
+ /**
36
+ * Browser-local composer state addressed by durable session identity.
37
+ *
38
+ * Network callbacks settle immutable attempts against their owning record;
39
+ * they never need to mutate whichever composer happens to be visible.
40
+ */
41
+ export class ComposerSessionLedger {
42
+ now;
43
+ records = new Map();
44
+ constructor(now = Date.now) {
45
+ this.now = now;
46
+ }
47
+ has(identity) {
48
+ return this.records.has(composerSessionKey(identity));
49
+ }
50
+ snapshot(identity) {
51
+ const record = this.record(identity);
52
+ return {
53
+ draft: record.draft,
54
+ images: cloneImages(record.images),
55
+ history: cloneHistory(record.history),
56
+ revision: record.revision,
57
+ failedSubmissionCount: record.failedSubmissionCount,
58
+ };
59
+ }
60
+ seedDraft(identity, draft) {
61
+ const record = this.record(identity);
62
+ if (record.initialized || record.revision !== 0 || record.attempts.size > 0)
63
+ return false;
64
+ record.draft = draft;
65
+ record.initialized = true;
66
+ return true;
67
+ }
68
+ setDraft(identity, draft) {
69
+ const record = this.record(identity);
70
+ if (record.draft === draft)
71
+ return false;
72
+ record.draft = draft;
73
+ record.history = resetInputHistoryBrowsing(record.history);
74
+ record.revision += 1;
75
+ record.initialized = true;
76
+ return true;
77
+ }
78
+ setImages(identity, images) {
79
+ const record = this.record(identity);
80
+ record.images = cloneImages(images);
81
+ record.revision += 1;
82
+ record.initialized = true;
83
+ return true;
84
+ }
85
+ recordHistory(identity, text) {
86
+ const record = this.record(identity);
87
+ record.history = recordInputHistoryEntry(record.history, text);
88
+ }
89
+ navigateHistory(identity, direction, context) {
90
+ const record = this.record(identity);
91
+ const decision = navigateInputHistory(record.history, direction, context);
92
+ if (!decision.handled)
93
+ return decision;
94
+ record.history = decision.state;
95
+ if (record.draft !== decision.text) {
96
+ record.draft = decision.text;
97
+ record.revision += 1;
98
+ record.initialized = true;
99
+ }
100
+ return decision;
101
+ }
102
+ beginSubmission(identity, sessionGeneration, clientRequestId) {
103
+ const record = this.record(identity);
104
+ if (!record.draft.trim() && record.images.length === 0)
105
+ return null;
106
+ const now = this.now();
107
+ const sinceLastClaim = record.lastClaim
108
+ ? now - record.lastClaim.at
109
+ : Number.POSITIVE_INFINITY;
110
+ if (record.lastClaim &&
111
+ sinceLastClaim >= 0 &&
112
+ sinceLastClaim <= DUPLICATE_SUBMISSION_GESTURE_MS &&
113
+ record.lastClaim.draft === record.draft &&
114
+ sameImages(record.lastClaim.images, record.images))
115
+ return null;
116
+ record.sequence += 1;
117
+ const sequence = record.sequence;
118
+ const controller = new AbortController();
119
+ const draftSnapshot = record.draft;
120
+ const imageSnapshot = cloneImages(record.images);
121
+ record.lastClaim = {
122
+ draft: draftSnapshot,
123
+ images: cloneImages(imageSnapshot),
124
+ at: now,
125
+ };
126
+ record.history = recordInputHistoryEntry(record.history, draftSnapshot);
127
+ record.draft = "";
128
+ record.images = [];
129
+ record.revision += 1;
130
+ record.initialized = true;
131
+ const attempt = {
132
+ attemptId: `${composerSessionKey(identity)}:${sequence}:${clientRequestId}`,
133
+ identity: { ...identity },
134
+ sessionGeneration,
135
+ sequence,
136
+ clientRequestId,
137
+ draftSnapshot,
138
+ imageSnapshot,
139
+ committedRevision: record.revision,
140
+ signal: controller.signal,
141
+ };
142
+ record.attempts.set(attempt.attemptId, { attempt, controller });
143
+ return attempt;
144
+ }
145
+ settle(attempt, outcome) {
146
+ const key = composerSessionKey(attempt.identity);
147
+ const record = this.records.get(key);
148
+ const owned = record?.attempts.get(attempt.attemptId);
149
+ if (!record || !owned || owned.attempt !== attempt)
150
+ return "stale";
151
+ record.attempts.delete(attempt.attemptId);
152
+ owned.controller.abort();
153
+ if (outcome === "accepted")
154
+ return "accepted";
155
+ if (record.revision === attempt.committedRevision &&
156
+ record.draft === "" &&
157
+ record.images.length === 0) {
158
+ record.draft = attempt.draftSnapshot;
159
+ record.images = cloneImages(attempt.imageSnapshot);
160
+ record.revision += 1;
161
+ return "restored";
162
+ }
163
+ record.failedSubmissionCount = Math.min(Number.MAX_SAFE_INTEGER, record.failedSubmissionCount + 1);
164
+ return "retained";
165
+ }
166
+ settleByRequest(identity, clientRequestId, outcome) {
167
+ const record = this.records.get(composerSessionKey(identity));
168
+ const owned = record
169
+ ? [...record.attempts.values()].find((entry) => entry.attempt.clientRequestId === clientRequestId)
170
+ : undefined;
171
+ return owned ? this.settle(owned.attempt, outcome) : "stale";
172
+ }
173
+ release(identity) {
174
+ const key = composerSessionKey(identity);
175
+ const record = this.records.get(key);
176
+ if (!record)
177
+ return;
178
+ for (const owned of record.attempts.values())
179
+ owned.controller.abort();
180
+ record.attempts.clear();
181
+ this.records.delete(key);
182
+ }
183
+ record(identity) {
184
+ const key = composerSessionKey(identity);
185
+ let record = this.records.get(key);
186
+ if (!record) {
187
+ record = createRecord();
188
+ this.records.set(key, record);
189
+ }
190
+ return record;
191
+ }
192
+ }
@@ -27,7 +27,15 @@ export function replacePendingUserMessage(messages, clientRequestId, durable) {
27
27
  continue;
28
28
  replaced = true;
29
29
  const { pending: _pending, ...rest } = message;
30
- next.push({ ...rest, ...durable, clientRequestId });
30
+ next.push({
31
+ ...rest,
32
+ ...durable,
33
+ // Durable reconciliation replaces values in the established optimistic
34
+ // seat. A later server timestamp must not move the user below the empty
35
+ // active assistant cursor when turn groups sort by display time.
36
+ createdAt: Math.min(message.createdAt, durable.createdAt),
37
+ clientRequestId,
38
+ });
31
39
  }
32
40
  return replaced ? next : [...next, durable];
33
41
  }
@@ -27,8 +27,11 @@ export function buildPaletteModel(entries) {
27
27
  for (const source of SLASH_GROUP_DISPLAY_ORDER) {
28
28
  const items = [];
29
29
  for (let i = 0; i < entries.length; i += 1) {
30
- if (entries[i].source === source) {
31
- items.push({ entry: entries[i], globalIndex: i });
30
+ const entry = entries[i];
31
+ if (!entry)
32
+ continue;
33
+ if (entry.source === source) {
34
+ items.push({ entry, globalIndex: i });
32
35
  }
33
36
  }
34
37
  if (items.length === 0)
@@ -69,6 +72,8 @@ export function movePaletteIndex(currentIndex, model, columns, direction) {
69
72
  if (groupPos < 0)
70
73
  return currentIndex;
71
74
  const group = model[groupPos];
75
+ if (!group)
76
+ return currentIndex;
72
77
  const offset = group.items.findIndex((card) => card.globalIndex === currentIndex);
73
78
  if (offset < 0)
74
79
  return currentIndex;
@@ -84,25 +89,30 @@ export function movePaletteIndex(currentIndex, model, columns, direction) {
84
89
  }
85
90
  if (Math.floor(targetOffset / columns) !== row)
86
91
  return currentIndex;
87
- return group.items[targetOffset].globalIndex;
92
+ const targetCard = group.items[targetOffset];
93
+ return targetCard ? targetCard.globalIndex : currentIndex;
88
94
  }
89
95
  const delta = direction === "up" ? -1 : 1;
90
96
  const targetOffset = offset + delta * columns;
91
97
  if (targetOffset >= 0 && targetOffset < group.items.length) {
92
- return group.items[targetOffset].globalIndex;
98
+ const targetCard = group.items[targetOffset];
99
+ return targetCard ? targetCard.globalIndex : currentIndex;
93
100
  }
94
101
  // Cross-group: walk to the previous/next non-empty group and target the
95
102
  // same column on its last (up) / first (down) row; stick when that column
96
103
  // does not exist in the partial edge row.
97
104
  for (let cursor = groupPos + delta; cursor >= 0 && cursor < model.length; cursor += delta) {
98
105
  const candidate = model[cursor];
106
+ if (!candidate)
107
+ continue;
99
108
  if (candidate.items.length === 0)
100
109
  continue;
101
110
  const lastRowStart = Math.floor((candidate.items.length - 1) / columns) * columns;
102
111
  const target = direction === "up" ? lastRowStart + col : col;
103
112
  if (target >= candidate.items.length)
104
113
  return currentIndex;
105
- return candidate.items[target].globalIndex;
114
+ const targetCard = candidate.items[target];
115
+ return targetCard ? targetCard.globalIndex : currentIndex;
106
116
  }
107
117
  return currentIndex;
108
118
  }
@@ -0,0 +1,29 @@
1
+ function anchorAt(group) {
2
+ return group.user?.createdAt ?? group.assistants[0]?.createdAt ?? 0;
3
+ }
4
+ function pendingAt(item) {
5
+ const at = Date.parse(item.updatedAt);
6
+ return Number.isFinite(at) ? at : Number.MAX_SAFE_INTEGER;
7
+ }
8
+ /**
9
+ * Merge pending (dispatching/queued) user steering into the message timeline
10
+ * by timestamp instead of always rendering at the very end. A pending message
11
+ * whose `updatedAt` precedes an already-rendered turn keeps its real slot; a
12
+ * stable sort preserves current group order for equal anchors (turns first).
13
+ */
14
+ export function mergePendingIntoTimeline(input) {
15
+ const entries = [];
16
+ for (const group of input.turnGroups) {
17
+ entries.push({ kind: "group", group });
18
+ }
19
+ for (const item of input.pendingSteering) {
20
+ if (item.state !== "dispatching")
21
+ continue;
22
+ entries.push({ kind: "pending", item });
23
+ }
24
+ return entries.sort((a, b) => {
25
+ const atA = a.kind === "group" ? anchorAt(a.group) : pendingAt(a.item);
26
+ const atB = b.kind === "group" ? anchorAt(b.group) : pendingAt(b.item);
27
+ return atA - atB;
28
+ });
29
+ }
@@ -0,0 +1,10 @@
1
+ export function turnProcessDisclosureKey(groupKey, answerId) {
2
+ return `${groupKey}:generation-${answerId ?? "none"}`;
3
+ }
4
+ export function isTurnProcessCompact(input) {
5
+ return (!input.historyHasMore &&
6
+ !input.live &&
7
+ !input.hasError &&
8
+ input.processItemCount > 0 &&
9
+ !input.expanded);
10
+ }