chainlesschain 0.163.6 → 0.163.8

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 (234) hide show
  1. package/package.json +2 -1
  2. package/src/assets/web-panel/assets/{AIOps-DDIUofA8.js → AIOps-CavM7W3k.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-Bm-5xYRn.js → ActionButton-CUvZGabQ.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-D5UH4ljI.js → Analytics-DeBnWnbe.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-D_ifjOOP.js → AppLayout-DbI5kxvd.js} +4 -4
  6. package/src/assets/web-panel/assets/{Artifacts-BY1mXdC7.js → Artifacts-D93bigKm.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-Bujr4Ml3.js → Audit-CBNvfUZa.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-sioKSTcC.js → BackgroundAgents-CJLyh_YU.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-DDOAK8RK.js → Backup-D_0yoehD.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-CtCsVVke.js → BaseInput-TJxmbObW.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-DpNj0vnd.js → Chat-CE0dto1q.js} +5 -5
  12. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CZta3Ftr.js → ChatBubbleRenderer-CZ5-yYiD.js} +1 -1
  13. package/src/assets/web-panel/assets/{Checkbox-DoHVNSXq.js → Checkbox-Ck1RVIVo.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-DlVl7Qmv.js → Codegen-qpoyf6DK.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-GIqoPYty.js → Col-DUyPWjIE.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-CIAPEVji.js → Community-D_S1BemS.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-BN7JiI_h.js → Compact-BjxeK-Gc.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-CqUWCM9B.js → Compliance-Dd3CEJsu.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-A4iPp7A4.js → Cowork-B4QG7-ad.js} +3 -3
  20. package/src/assets/web-panel/assets/{Cron-B2zeXXWb.js → Cron-BtZnids5.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-BR2xmWr8.js → Crosschain-CHPfCBFD.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-BzFDjrIv.js → DID-DT8DCEOK.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-DKtDo3yA.js → Dashboard-COQab5_U.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-RNx43_YG.js → Dropdown-BY1PsQuU.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-SwMt4Rcy.js → EmailListRenderer-CsuAuaq3.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CsYebZ4X.js → FamilyGuardDashboard-BqpinD-j.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-BmRKvBTy.js → Federation-D0gkfQFv.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-CVxGTA-0.js → FormItemContext-BqgE-axK.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-x2iXpyB7.js → GenericCardRenderer-D0hJ2KvC.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-DfqbkiOP.js → Git-CmMB0uPY.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-RuHyyj5O.js → Governance-BnVEI0Dk.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-Bn7uZ7rI.js → Inference-YTAMihRP.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-DlP7XefZ.js → KnowledgeGraph-0ax7VHop.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-BYNdOiCd.js → Logs-B9TRcokL.js} +2 -2
  35. package/src/assets/web-panel/assets/MarkdownRenderer-yySN5YNM.js +1 -0
  36. package/src/assets/web-panel/assets/{Marketplace-JQYmDqM8.js → Marketplace-B6CSuD_H.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-Cyx4yZ-9.js → McpTools-CjMXvOVU.js} +4 -4
  38. package/src/assets/web-panel/assets/{Memory-VDuGZTN2.js → Memory-CXRF71U3.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-_yKo97gi.js → MobileBridge-DQgNp_oS.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-CXRXW3q7.js → MobileProjects-DlPwcCbq.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-acTGtfLH.js → Mtc-6hDTRPe1.js} +5 -5
  42. package/src/assets/web-panel/assets/{MtcAudit-ClpjXfkY.js → MtcAudit-BlVHU1DS.js} +4 -4
  43. package/src/assets/web-panel/assets/{Multisig-_6Tn3o96.js → Multisig-DP9pzEbV.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-CK7pbZzP.js → NLProgramming-Djorh8EV.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-Czy6V_P8.js → Notes-oLZ-JkUg.js} +4 -4
  46. package/src/assets/web-panel/assets/{NotificationSettings-Cqx-UVv3.js → NotificationSettings-Cg288VH3.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-C69WDxGy.js → OrderTableRenderer-Bb1O3Ofr.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-DFnA9vLQ.js → Organization-CBdo-bHs.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-ReZkk2yT.js → Overflow-qZdnVumx.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-DzjSI0aI.js → P2P-D4kNfGNQ.js} +2 -2
  51. package/src/assets/web-panel/assets/PdhVaultBrowser-DnlMemM7.js +7 -0
  52. package/src/assets/web-panel/assets/{Permissions-DhQ5klhR.js → Permissions-DHucHFBJ.js} +3 -3
  53. package/src/assets/web-panel/assets/{PersonalDataHub-CUL1iHrW.js → PersonalDataHub-BovlOIPR.js} +4 -4
  54. package/src/assets/web-panel/assets/{Pipeline-DU88iu4N.js → Pipeline-Deru3CQY.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-Bw-sYfyK.js → Privacy-Bq5oTTbU.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-Bq3Q5y0z.js → ProjectInit-BfzxVWAz.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-C8spzpho.js → ProjectSettings-CKC6XBtH.js} +2 -2
  58. package/src/assets/web-panel/assets/Projects-CMolGhae.js +1 -0
  59. package/src/assets/web-panel/assets/{Providers-Bf4eTP9W.js → Providers-C_jx4TWX.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-Dme9BDU1.js → QrScannerModal-BdIHeVGC.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-CIXfv1rE.js → QuickAsk-BwZwAcPD.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-CIxvdeZ-.js → Recommend-BNTt0L-m.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-C6k7MExI.js → RemoteSession-Biyn2-Ro.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-CISDz2bl.js → Reputation-D6VpG32B.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-CdnDxXyf.js → Row-D_74OvQQ.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-C-QpRHsl.js → RssFeed-BTr0a-BQ.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-DBjaGzSn.js → Search-C3MCFoNU.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-CQKukOeE.js → Security-CqW9aJ6s.js} +3 -3
  69. package/src/assets/web-panel/assets/{Services-DZz86jWb.js → Services-Cw5GNaHF.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-jb8RMK0d.js → Skeleton-DZps5qeY.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-CdY76fZG.js → Skills-C6NQ1znT.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-C_CSiZX9.js → Sla-DFP8G2Sh.js} +1 -1
  73. package/src/assets/web-panel/assets/SpeechSettings-ESt6MB6v.js +1 -0
  74. package/src/assets/web-panel/assets/{SyncSettings-qvimGO0O.js → SyncSettings-BHnN98aM.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-Dng5LPJC.js → Tasks-NiSCaOf-.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-Bwqq5Wll.js → Templates-DsKFhW2C.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-DNWuwP7Z.js → Tenant-CQ0E0ze5.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-B-6Othpp.js → Terminal-D_rBu_by.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-DKpKZfzx.js → TimelineRenderer-D3Vm4Po4.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-DzfGMd2J.js → Tokens-DNTxRH6q.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-BXwUi74J.js → Trigger-Dgprz1ms.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-BNzUq4ui.js → Trust-B2rUnVBD.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-BYugxww4.js → UkeySign-DEGQNc6_.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-DdauhtSJ.js → VideoEditing-jlsAx3Eh.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-CSC9bCe_.js → Wallet-8jQih1ij.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-Q8AN3bTO.js → WebAuthn-XLeO6xIB.js} +5 -5
  87. package/src/assets/web-panel/assets/{WorkflowEditor-d-LBGCuA.js → WorkflowEditor-De_dgDAG.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-BLVDCgsZ.js → chat-CI19R_Sk.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-BZlPSEHl.js → colors-DsYTOYN3.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-IWseP6R6.js → compact-item-CM3-t_Qr.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-DnVRV3Ao.js → createContext-BjxlBRZv.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-S1ld2LwU.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-DLQZA_Wn.js → hasIn-RDaWX_4i.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-BSjilZ9L.js → index-9R6BxAr0.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-B_N4-Gq9.js → index-B-Z8eFUJ.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-Dy0R5ZED.js → index-B0PMlbMs.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-C1ifZtXo.js → index-B5REnKt8.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CINJQEj6.js → index-B7WBt_4T.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DocEhinm.js → index-B9O9YyWE.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DjWnONdy.js → index-BCnZyIMA.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-hwVDeoC0.js → index-BGqqJfL0.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Bbj2NS_I.js → index-BHNYPO0b.js} +3 -3
  103. package/src/assets/web-panel/assets/{index-C5dgnilC.js → index-BKJr-TZp.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CT9vVN-X.js → index-BN6UPD2E.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DpVrK6fr.js → index-Bi46Xu4u.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CpBaJ3TD.js → index-BlT2VAEK.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-1jeAudHd.js → index-C0yx-jtQ.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DOoQpuQY.js → index-C4gkzxkw.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-DZpYeqrh.js → index-CVQMeiwH.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BhA3QEni.js → index-Cd3euP_4.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-N_GoWZX4.js → index-Cd9OJhHG.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BOZJBTWZ.js → index-CiECJi-Q.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CarMTIyQ.js → index-CjTrRt13.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CZDekj7T.js → index-CnHH7bnD.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-M7wxfAbm.js → index-Cpqm1qfU.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-Bxp7uDD8.js → index-CyOGN6a5.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DalA0TKC.js → index-D0zcy54x.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-COev0W2g.js → index-D6sm5-Xq.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DUq0c7gq.js → index-DIUnNOjG.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BZs5bBnk.js → index-DX7tuWVJ.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CbQNL0ue.js → index-DXXtGMUJ.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DTbxp4UH.js → index-DcPFB8qJ.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-YSw_gxlZ.js → index-DoQA0-52.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-D_LQodeJ.js → index-Drlnwr8F.js} +1 -1
  125. package/src/assets/web-panel/assets/index-Drz6yq0m.js +1 -0
  126. package/src/assets/web-panel/assets/{index-jWb70ZgZ.js → index-Dsij_KsN.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DB0MJgF_.js → index-Dxge-xWl.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BEu2lMBy.js → index-DyIWssPC.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-C2FqfMvU.js → index-IeiL9RKc.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Dkwsi1Kn.js → index-nAH87mQP.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-gt8bNefW.js → index-pPL66J85.js} +1 -1
  132. package/src/assets/web-panel/assets/index-uWiUs7S_.js +1 -0
  133. package/src/assets/web-panel/assets/{initDefaultProps-Co67Kqmb.js → initDefaultProps-BTL88of4.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-BMOxQSF_.js → motion-BUB2pXwB.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-C5fWDw-N.js → move-egCkkOMm.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-BJevpL0e.js → mtc-parser-DAWhZC8c.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-BCzNU8s6.js → omit-CvOxe_6d.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-CybWvDPk.js → pickAttrs-DZUSLZ5Z.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-BMWS9HnW.js → placementArrow-BERxGNMY.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-BoL2UnGY.js → responsiveObserve-DZuDfZ9n.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-DWNfXraU.js → slide-DO756sgI.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-BquTM3tX.js → statusUtils-BRQlIz28.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-BEkCleim.js → styleChecker-DCSfdybl.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-Oecnq7EA.js → useFlexGapSupport-LD8dWVve.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-CkDffJ4F.js → useFs-BX9uW2LK.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-qbvKXesB.js → usePersonalDataHub-BPSlPuHU.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-C6v8n6mA.js → vnode-BmOILC9V.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-4CTeFILV.js → zoom-1iKowKGg.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/command-help-index.json +5 -5
  151. package/src/commands/agent.js +90 -1
  152. package/src/commands/automation.js +103 -1
  153. package/src/commands/chat.js +11 -2
  154. package/src/commands/compact.js +106 -23
  155. package/src/commands/loop.js +28 -10
  156. package/src/commands/routine.js +1 -1
  157. package/src/commands/scheduler-daemon.js +359 -2
  158. package/src/commands/session-observability.js +305 -0
  159. package/src/commands/session.js +38 -0
  160. package/src/commands/team-merge-review.js +937 -0
  161. package/src/commands/team.js +2 -0
  162. package/src/data/changelog.json +27 -1
  163. package/src/gateways/ws/ws-agent-handler.js +439 -5
  164. package/src/harness/jsonl-session-store.js +463 -125
  165. package/src/harness/prompt-compressor.js +86 -13
  166. package/src/harness/provider-backed-compaction.js +100 -27
  167. package/src/lib/advisor-runtime.js +3 -1
  168. package/src/lib/agent-schedule-store.js +549 -28
  169. package/src/lib/agent-team/team-adjudication.js +40 -1
  170. package/src/lib/agent-team/team-merge-review-store.js +765 -0
  171. package/src/lib/agent-team/team-merge-review-transaction.js +1223 -0
  172. package/src/lib/agent-team/team-merge-review.js +1847 -0
  173. package/src/lib/automation-center-incidents.js +314 -0
  174. package/src/lib/automation-center-runtime.js +448 -0
  175. package/src/lib/automation-center.js +182 -38
  176. package/src/lib/automation-engine.js +535 -0
  177. package/src/lib/automation-execution-authority.js +241 -12
  178. package/src/lib/automation-execution-incident.js +737 -0
  179. package/src/lib/background-agent-supervisor.js +793 -215
  180. package/src/lib/background-command-argv.js +24 -0
  181. package/src/lib/background-interaction-journal.js +361 -52
  182. package/src/lib/background-interaction-resolver.js +32 -0
  183. package/src/lib/background-launch-profile.js +2 -0
  184. package/src/lib/causal-observability.js +2661 -0
  185. package/src/lib/chat-session-admission.js +76 -0
  186. package/src/lib/cost-budget.js +5 -7
  187. package/src/lib/cowork/ab-comparator-cli.js +11 -0
  188. package/src/lib/cowork/debate-review-cli.js +12 -0
  189. package/src/lib/cowork-adapter.js +159 -38
  190. package/src/lib/cowork-cron.js +442 -15
  191. package/src/lib/cowork-task-runner.js +112 -17
  192. package/src/lib/delivery-coordinator.js +142 -0
  193. package/src/lib/direct-model-usage.js +121 -0
  194. package/src/lib/file-lines.js +183 -47
  195. package/src/lib/llm-pricing.js +12 -17
  196. package/src/lib/loop.js +26 -2
  197. package/src/lib/routine-store.js +380 -21
  198. package/src/lib/runtime-usage-ledger.js +182 -0
  199. package/src/lib/scheduler-kernel/agenda-adapter.js +325 -10
  200. package/src/lib/scheduler-kernel/automation-adapter.js +514 -18
  201. package/src/lib/scheduler-kernel/automation-event-adapter.js +123 -11
  202. package/src/lib/scheduler-kernel/contract.js +91 -0
  203. package/src/lib/scheduler-kernel/cowork-cron-adapter.js +297 -4
  204. package/src/lib/scheduler-kernel/loop-adapter.js +547 -6
  205. package/src/lib/scheduler-kernel/migration-admin.js +346 -0
  206. package/src/lib/scheduler-kernel/migration-rollback-admin.js +932 -0
  207. package/src/lib/scheduler-kernel/routine-adapter.js +400 -20
  208. package/src/lib/scheduler-kernel/runtime-control-capabilities.js +31 -0
  209. package/src/lib/scheduler-kernel/runtime.js +237 -2
  210. package/src/lib/scheduler-kernel/source-locator-path.js +142 -0
  211. package/src/lib/scheduler-kernel/store.js +3957 -248
  212. package/src/lib/session-host-lease.js +171 -2
  213. package/src/lib/session-host-snapshot.js +14 -3
  214. package/src/lib/session-persistence-failure.js +1 -0
  215. package/src/lib/session-tail.js +179 -34
  216. package/src/lib/session-transcript-structure.js +96 -0
  217. package/src/lib/sub-agent-context.js +328 -22
  218. package/src/lib/ws-agent-handler.js +4 -1
  219. package/src/repl/agent-repl.js +732 -91
  220. package/src/repl/chat-repl.js +5 -1
  221. package/src/runtime/agent-core.js +1282 -207
  222. package/src/runtime/fallback-model.js +5 -0
  223. package/src/runtime/headless-runner.js +324 -82
  224. package/src/runtime/headless-stream.js +232 -26
  225. package/src/runtime/mcp-config.js +81 -10
  226. package/src/runtime/policies/agent-policy.js +4 -0
  227. package/src/workers/background-agent-worker.js +403 -96
  228. package/src/assets/web-panel/assets/MarkdownRenderer-aMtgN-R6.js +0 -1
  229. package/src/assets/web-panel/assets/PdhVaultBrowser-DKTf5xIP.js +0 -7
  230. package/src/assets/web-panel/assets/Projects-Dd-xuPIc.js +0 -1
  231. package/src/assets/web-panel/assets/SpeechSettings-C7tT9iad.js +0 -1
  232. package/src/assets/web-panel/assets/devWarning-Jzu62CLC.js +0 -1
  233. package/src/assets/web-panel/assets/index-Zb2MeDSy.js +0 -1
  234. package/src/assets/web-panel/assets/index-fikqml4k.js +0 -1
@@ -0,0 +1,314 @@
1
+ import { createHash } from "node:crypto";
2
+ import {
3
+ AUTOMATION_EXECUTION_INCIDENT_STATUS,
4
+ cancelAutomationExecutionIncident,
5
+ getAutomationExecutionIncident,
6
+ } from "./automation-execution-incident.js";
7
+ import {
8
+ automationSchedulerExecutionId,
9
+ automationSchedulerJobId,
10
+ } from "./scheduler-kernel/automation-adapter.js";
11
+ import {
12
+ automationEventExecutionId,
13
+ automationEventJobId,
14
+ } from "./scheduler-kernel/automation-event-adapter.js";
15
+ import {
16
+ SchedulerKernelError,
17
+ normalizeIdentifier,
18
+ } from "./scheduler-kernel/contract.js";
19
+
20
+ export const AUTOMATION_CENTER_INCIDENT_ACTION_SCHEMA =
21
+ "chainlesschain.automation-center-incident-action/v1";
22
+ export const AUTOMATION_CENTER_INCIDENT_ACTION_ERROR_SCHEMA =
23
+ "chainlesschain.automation-center-incident-action-error/v1";
24
+ export const AUTOMATION_CENTER_INCIDENT_ACTION_SCHEMA_VERSION = 1;
25
+
26
+ const INCIDENT_ACTIONS = new Set(["retry", "cancel"]);
27
+ const SCHEDULER_TRIGGER_TYPES = new Set(["schedule", "event"]);
28
+ const INCIDENT_ID_PATTERN = /^[0-9a-f]{64}$/u;
29
+ const SAFE_INCIDENT_ERROR_CODES = new Set([
30
+ "AUTOMATION_CENTER_INCIDENT_REVISION_INVALID",
31
+ "AUTOMATION_CENTER_INCIDENT_ACTION_INVALID",
32
+ "AUTOMATION_CENTER_INCIDENT_NOT_FOUND",
33
+ "AUTOMATION_CENTER_INCIDENT_STALE",
34
+ "AUTOMATION_CENTER_INCIDENT_CLOSED",
35
+ "AUTOMATION_CENTER_INCIDENT_RETRY_UNSUPPORTED",
36
+ "AUTOMATION_CENTER_INCIDENT_SCHEDULER_REQUIRED",
37
+ "AUTOMATION_CENTER_INCIDENT_EVIDENCE_CONFLICT",
38
+ ]);
39
+
40
+ function incidentActionError(code, message) {
41
+ const error = new SchedulerKernelError(code, message);
42
+ error.retryable = false;
43
+ return error;
44
+ }
45
+
46
+ function positiveRevision(value) {
47
+ const revision = Number(value);
48
+ if (!Number.isSafeInteger(revision) || revision < 1) {
49
+ throw incidentActionError(
50
+ "AUTOMATION_CENTER_INCIDENT_REVISION_INVALID",
51
+ "expectedRevision must be a positive safe integer",
52
+ );
53
+ }
54
+ return revision;
55
+ }
56
+
57
+ function actionPreview(incidentId, action, revision) {
58
+ return {
59
+ executor: "cli",
60
+ argv: [
61
+ "automation",
62
+ "center-incident-action",
63
+ incidentId,
64
+ action,
65
+ "--expected-revision",
66
+ String(revision),
67
+ "--json",
68
+ ],
69
+ mutates: true,
70
+ };
71
+ }
72
+
73
+ function projectedAction(incident, action, available, reason) {
74
+ return {
75
+ id: action,
76
+ available,
77
+ reason: available ? null : reason,
78
+ preview: available
79
+ ? actionPreview(incident.incidentId, action, incident.revision)
80
+ : null,
81
+ };
82
+ }
83
+
84
+ /**
85
+ * Project only identifiers and lifecycle metadata intended for an IDE boundary.
86
+ * In particular, authority, boundary, and details evidence never cross it.
87
+ */
88
+ export function projectAutomationCenterIncident(incident) {
89
+ const open = incident.status === AUTOMATION_EXECUTION_INCIDENT_STATUS.OPEN;
90
+ const schedulerBacked =
91
+ Boolean(incident.occurrenceId) &&
92
+ SCHEDULER_TRIGGER_TYPES.has(incident.triggerType);
93
+ return {
94
+ incidentId: incident.incidentId,
95
+ runId: incident.runId,
96
+ occurrenceId: incident.occurrenceId || null,
97
+ triggerType: incident.triggerType,
98
+ category: incident.category,
99
+ code: incident.code,
100
+ status: incident.status,
101
+ revision: incident.revision,
102
+ createdAtMs: incident.createdAtMs,
103
+ updatedAtMs: incident.updatedAtMs,
104
+ actions: [
105
+ projectedAction(
106
+ incident,
107
+ "retry",
108
+ open && schedulerBacked,
109
+ !open
110
+ ? "incident is already closed"
111
+ : "manual incidents cannot be retried safely",
112
+ ),
113
+ projectedAction(incident, "cancel", open, "incident is already closed"),
114
+ ],
115
+ };
116
+ }
117
+
118
+ function retryRequestId(incident, occurrence) {
119
+ const digest = createHash("sha256")
120
+ .update("chainlesschain.automation-center.incident-retry.v1\0", "utf8")
121
+ .update(incident.incidentId, "utf8")
122
+ .update("\0", "utf8")
123
+ .update(String(incident.revision), "utf8")
124
+ .update("\0", "utf8")
125
+ // A dead-letter fence identifies one exact failed scheduler attempt. This
126
+ // keeps repeated clicks idempotent while that attempt is being requeued,
127
+ // but permits a fresh operator retry after the requeued attempt advances
128
+ // its fence and fails again.
129
+ .update(String(occurrence.fence), "utf8")
130
+ .digest("hex");
131
+ return `center-incident-retry-${digest}`;
132
+ }
133
+
134
+ function expectedSchedulerIdentity(incident) {
135
+ if (incident.triggerType === "schedule") {
136
+ return {
137
+ jobId: automationSchedulerJobId(incident.flowId),
138
+ runId: automationSchedulerExecutionId(incident.occurrenceId),
139
+ triggerId: null,
140
+ };
141
+ }
142
+ if (incident.triggerType === "event" && incident.triggerId) {
143
+ return {
144
+ jobId: automationEventJobId(incident.triggerId),
145
+ runId: automationEventExecutionId(incident.occurrenceId),
146
+ triggerId: incident.triggerId,
147
+ };
148
+ }
149
+ throw incidentActionError(
150
+ "AUTOMATION_CENTER_INCIDENT_RETRY_UNSUPPORTED",
151
+ "incident is not bound to a supported scheduler occurrence",
152
+ );
153
+ }
154
+
155
+ function assertExactSchedulerEvidence(incident, occurrence) {
156
+ const expected = expectedSchedulerIdentity(incident);
157
+ const payloadFlowId = occurrence?.payload?.flow?.id;
158
+ const payloadTriggerId = occurrence?.payload?.trigger?.id ?? null;
159
+ const statusCanBeInitialOrDeduplicated =
160
+ occurrence?.status === "dead_letter" || occurrence?.status === "retry_wait";
161
+ if (
162
+ !occurrence ||
163
+ occurrence.id !== incident.occurrenceId ||
164
+ occurrence.jobId !== expected.jobId ||
165
+ incident.runId !== expected.runId ||
166
+ payloadFlowId !== incident.flowId ||
167
+ payloadTriggerId !== expected.triggerId ||
168
+ !statusCanBeInitialOrDeduplicated ||
169
+ !Number.isSafeInteger(occurrence.fence) ||
170
+ occurrence.fence < 1 ||
171
+ occurrence.lastError?.code !== incident.code
172
+ ) {
173
+ throw incidentActionError(
174
+ "AUTOMATION_CENTER_INCIDENT_EVIDENCE_CONFLICT",
175
+ "scheduler dead-letter evidence no longer matches the incident",
176
+ );
177
+ }
178
+ return expected;
179
+ }
180
+
181
+ function safeOccurrence(result) {
182
+ return {
183
+ occurrenceId: result.occurrence.id,
184
+ status: result.occurrence.status,
185
+ fence: result.occurrence.fence,
186
+ attempt: result.occurrence.attempt,
187
+ };
188
+ }
189
+
190
+ export function runAutomationCenterIncidentAction(
191
+ db,
192
+ schedulerStore,
193
+ { incidentId, action, expectedRevision, now = Date.now } = {},
194
+ ) {
195
+ const id = normalizeIdentifier(incidentId, "incidentId");
196
+ if (!INCIDENT_ACTIONS.has(action)) {
197
+ throw incidentActionError(
198
+ "AUTOMATION_CENTER_INCIDENT_ACTION_INVALID",
199
+ `unsupported Automation Center incident action: ${action}`,
200
+ );
201
+ }
202
+ const revision = positiveRevision(expectedRevision);
203
+ const incident = getAutomationExecutionIncident(db, id);
204
+ if (!incident) {
205
+ throw incidentActionError(
206
+ "AUTOMATION_CENTER_INCIDENT_NOT_FOUND",
207
+ `automation execution incident was not found: ${id}`,
208
+ );
209
+ }
210
+ if (incident.revision !== revision) {
211
+ throw incidentActionError(
212
+ "AUTOMATION_CENTER_INCIDENT_STALE",
213
+ `automation execution incident changed before ${action}: ${id}`,
214
+ );
215
+ }
216
+ if (incident.status !== AUTOMATION_EXECUTION_INCIDENT_STATUS.OPEN) {
217
+ throw incidentActionError(
218
+ "AUTOMATION_CENTER_INCIDENT_CLOSED",
219
+ `automation execution incident is already closed: ${id}`,
220
+ );
221
+ }
222
+
223
+ if (action === "cancel") {
224
+ const cancelled = cancelAutomationExecutionIncident(db, id, {
225
+ expectedRevision: revision,
226
+ resolutionCode: "OPERATOR_CANCELLED",
227
+ now,
228
+ });
229
+ return {
230
+ schema: AUTOMATION_CENTER_INCIDENT_ACTION_SCHEMA,
231
+ schemaVersion: AUTOMATION_CENTER_INCIDENT_ACTION_SCHEMA_VERSION,
232
+ authority: "cli",
233
+ ok: true,
234
+ incidentId: id,
235
+ action,
236
+ previousRevision: revision,
237
+ incident: projectAutomationCenterIncident(cancelled),
238
+ result: { status: cancelled.status },
239
+ };
240
+ }
241
+
242
+ if (!SCHEDULER_TRIGGER_TYPES.has(incident.triggerType)) {
243
+ throw incidentActionError(
244
+ "AUTOMATION_CENTER_INCIDENT_RETRY_UNSUPPORTED",
245
+ "manual incidents cannot be retried without risking duplicate authority or effects",
246
+ );
247
+ }
248
+ if (
249
+ !schedulerStore ||
250
+ typeof schedulerStore.getOccurrence !== "function" ||
251
+ typeof schedulerStore.requeueDeadLetter !== "function"
252
+ ) {
253
+ throw incidentActionError(
254
+ "AUTOMATION_CENTER_INCIDENT_SCHEDULER_REQUIRED",
255
+ "retry requires the scheduler store",
256
+ );
257
+ }
258
+ const occurrence = schedulerStore.getOccurrence(incident.occurrenceId);
259
+ assertExactSchedulerEvidence(incident, occurrence);
260
+ const requeued = schedulerStore.requeueDeadLetter({
261
+ occurrenceId: incident.occurrenceId,
262
+ expectedFence: occurrence.fence,
263
+ expectedErrorCode: incident.code,
264
+ requestId: retryRequestId(incident, occurrence),
265
+ });
266
+ return {
267
+ schema: AUTOMATION_CENTER_INCIDENT_ACTION_SCHEMA,
268
+ schemaVersion: AUTOMATION_CENTER_INCIDENT_ACTION_SCHEMA_VERSION,
269
+ authority: "cli",
270
+ ok: true,
271
+ incidentId: id,
272
+ action,
273
+ previousRevision: revision,
274
+ // A retry request is not a resolution. The original incident remains open
275
+ // until the scheduler-backed run produces authoritative success evidence.
276
+ incident: projectAutomationCenterIncident(incident),
277
+ result: {
278
+ requestId: requeued.requestId,
279
+ deduplicated: requeued.deduplicated === true,
280
+ occurrence: safeOccurrence(requeued),
281
+ },
282
+ };
283
+ }
284
+
285
+ export function automationCenterIncidentActionErrorEnvelope(
286
+ error,
287
+ { incidentId = null, action = null } = {},
288
+ ) {
289
+ const candidateCode =
290
+ typeof error?.code === "string"
291
+ ? error.code.slice(0, 128)
292
+ : "AUTOMATION_CENTER_INCIDENT_ACTION_FAILED";
293
+ const code = SAFE_INCIDENT_ERROR_CODES.has(candidateCode)
294
+ ? candidateCode
295
+ : "AUTOMATION_CENTER_INCIDENT_ACTION_FAILED";
296
+ return {
297
+ schema: AUTOMATION_CENTER_INCIDENT_ACTION_ERROR_SCHEMA,
298
+ schemaVersion: AUTOMATION_CENTER_INCIDENT_ACTION_SCHEMA_VERSION,
299
+ authority: "cli",
300
+ ok: false,
301
+ incidentId:
302
+ typeof incidentId === "string" && INCIDENT_ID_PATTERN.test(incidentId)
303
+ ? incidentId
304
+ : null,
305
+ action: INCIDENT_ACTIONS.has(action) ? action : null,
306
+ error: {
307
+ code,
308
+ // Do not serialize error.details: scheduler and incident evidence is an
309
+ // internal trust-boundary object and can include sensitive material.
310
+ message: "Automation Center incident action failed",
311
+ retryable: error?.retryable === true,
312
+ },
313
+ };
314
+ }