chainlesschain 0.163.2 → 0.163.4

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 (222) hide show
  1. package/package.json +3 -2
  2. package/scripts/command-lifecycle-report.mjs +330 -38
  3. package/src/assets/web-panel/assets/{AIOps-DnGsmsqJ.js → AIOps-DB5X7qqV.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-CrO6fcQ7.js → ActionButton-DxHRtKLk.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-DsBdOaP2.js → Analytics-DIH5QrxT.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-DmQslKUB.js → AppLayout-uu0oxVz7.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-BvyrT_QQ.js → Artifacts-BNSMiW9Y.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-prndoLiC.js → Audit-DcAzB4_x.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-DOTFyA55.js → BackgroundAgents-ClSsvjIc.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-9zOnPp_8.js → Backup-BMciY0js.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-C4PC6sAG.js → BaseInput-Hn3b57Sh.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-BBAF-W9v.js → Chat-CoSlC53V.js} +6 -6
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CWhvvloO.js → ChatBubbleRenderer-CFevJ3So.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-BI9iculd.js → Checkbox-B4L4Eu4w.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-3DP9BCKb.js → Codegen-C77FgRxF.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-df-2TnJX.js → Col-BrLtJLH3.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-CHs8gG_A.js → Community-Be7pXXhA.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-CDfF6q7V.js → Compact-DuGPecjo.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-CthrDnO7.js → Compliance-CzS66mjP.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-HjIqsWJw.js → Cowork-CEhjCoyK.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-BKc196fb.js → Cron-D7ir8Vja.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-CJnjdc8W.js → Crosschain-BcXmuLxf.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-BHUy-8Q2.js → DID-Cto1dtBy.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-QDB7sKeY.js → Dashboard-B7KjgwOX.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-DStcVK11.js → Dropdown-COMqxijg.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-BwSUskMJ.js → EmailListRenderer-BZrya-nf.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DgF_kurT.js → FamilyGuardDashboard-AmVeMq0J.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-k8wvv-wN.js → Federation-kZU8c-27.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-C11qoq2r.js → FormItemContext-sOV22v2-.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-BIIpr9kg.js → GenericCardRenderer-BUuLtGCz.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-BlA1exTe.js → Git-K-ZxsLsH.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-CYa1ZYM4.js → Governance-D3OEnawI.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-6_kKVIt6.js → Inference-Bll0gRmP.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-CB4AwxYy.js → KnowledgeGraph-DBXwjr53.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-xf7nHFAe.js → Logs-CEzPwEfP.js} +2 -2
  36. package/src/assets/web-panel/assets/{MarkdownRenderer-Bf3DEqP6.js → MarkdownRenderer-CLmCbHx6.js} +1 -1
  37. package/src/assets/web-panel/assets/{Marketplace-aPg8e4Jt.js → Marketplace-BYyRyOPz.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-C-TNlVUf.js → McpTools-DVu8w_rM.js} +5 -5
  39. package/src/assets/web-panel/assets/{Memory-DMTPIpGa.js → Memory-tenuZ_hO.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-BxyvveRq.js → MobileBridge-Bxgy4ozS.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-DyPCrAyQ.js → MobileProjects-Dgx1D6sc.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-BdhqNXp6.js → Mtc-CRfJ8r8j.js} +5 -5
  43. package/src/assets/web-panel/assets/{MtcAudit-Cz-HFxzW.js → MtcAudit-BBJq4Aiz.js} +5 -5
  44. package/src/assets/web-panel/assets/{Multisig-CIUaFNsx.js → Multisig-B3ii9lai.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-CWe6-J17.js → NLProgramming-FIi-Cubv.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-vYAKeviU.js → Notes-DIq8MPf1.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-DQL9-2d7.js → NotificationSettings-BFOD9eGd.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-DnXj1jBn.js → OrderTableRenderer--41u7vre.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-B3spU8AN.js → Organization-B_0AWztW.js} +2 -2
  50. package/src/assets/web-panel/assets/{Overflow-DgEwo7vm.js → Overflow-B6I7TuXv.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-hujMRH8X.js → P2P-Cdf6qens.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-C_qhdg9h.js → PdhVaultBrowser-B_0FcQJY.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-vp7LMcSf.js → Permissions-6nFBjsQp.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-Dxr5Hgnq.js → PersonalDataHub-nQYV7xpn.js} +3 -3
  55. package/src/assets/web-panel/assets/{Pipeline-DEPZqqH4.js → Pipeline-CBVod5jm.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-DTpDiKPe.js → Privacy-D52jW1Nt.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-jDJsRWmF.js → ProjectInit-Bdx3BYhf.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-Dhor5RWH.js → ProjectSettings-b7xr4DUa.js} +2 -2
  59. package/src/assets/web-panel/assets/Projects-DhfifCKx.js +1 -0
  60. package/src/assets/web-panel/assets/Providers-Dy_PgDMr.js +1 -0
  61. package/src/assets/web-panel/assets/{QrScannerModal-CjIw-wIb.js → QrScannerModal-FQKSmc3e.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-DX6jcqoi.js → QuickAsk-CSTrhzcF.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-DopXkhar.js → Recommend-CxMABOUh.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-BLvqJE9c.js → RemoteSession-Cv2T8yRa.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-DhRj2Me7.js → Reputation-CE1k4Vvu.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-DQ53vuPq.js → Row-BNgNcAV_.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-BslvwiBD.js → RssFeed-5ZiBZ3ph.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-DJKBDNKZ.js → Search-mDOIF1UV.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-COhpxHER.js → Security-CtuCTC-e.js} +3 -3
  70. package/src/assets/web-panel/assets/{Services-dbulD6cI.js → Services-DxFO2Zg7.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-ciIVNfhC.js → Skeleton-CKmKkH9y.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-AiRTkTCk.js → Skills-Bmzl9qkk.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-DDMcWYBc.js → Sla-9RqaWHOC.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-BPxWbpXO.js → SpeechSettings-CGdzFIYw.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-BoEOXCyg.js → SyncSettings-CvNuCeBT.js} +2 -2
  76. package/src/assets/web-panel/assets/Tasks-B_sLdcnw.js +1 -0
  77. package/src/assets/web-panel/assets/{Templates-UowY8Ixe.js → Templates-D9_YijdK.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-DauSLQXN.js → Tenant-Cuc7BUSP.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-DBj7Jneq.js → Terminal-6VYRnJgd.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-UMrPwoZC.js → TimelineRenderer-GtK8xd8Y.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-4ea96-bn.js → Tokens-BZ94Lt5W.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger--ISCqt4b.js → Trigger-DEcZgDaX.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-D4GVimRJ.js → Trust-CC3z9THe.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-Ci-nXRQc.js → UkeySign-Cvtw8cV3.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-Cjk7mKPw.js → VideoEditing-CL4e6Bn3.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-BgOLOO3Z.js → Wallet-ycEemP27.js} +2 -2
  87. package/src/assets/web-panel/assets/{WebAuthn-CCX0K29i.js → WebAuthn-DgZ4X_aw.js} +5 -5
  88. package/src/assets/web-panel/assets/{WorkflowEditor-Ch3zgIsE.js → WorkflowEditor-D0qMhSv7.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-DKOU_2Vb.js → chat-DsAg01Zn.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-6OVo4u3C.js → colors-B0oqAhrQ.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-BH78Hlsq.js → compact-item-CmX0Rabz.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-CFRpSbbC.js → createContext-Be4cn1Ub.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-CP2qzG6D.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-DNQhgcVi.js → hasIn-D5v12kVq.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-BkN3iTTp.js → index-0eWLkQKT.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CkNEMANR.js → index-301ogenv.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-D3RtTT4K.js → index-5LGY0JbG.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-dDkoL4Pe.js → index-7VKDn-t1.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BHa4WyTZ.js → index-8WvYGnON.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CaYqY35Z.js → index-B1YGjOWC.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-bKm3TUDp.js → index-B3mUHuVc.js} +1 -1
  102. package/src/assets/web-panel/assets/{index--rq90rL9.js → index-BA4oulaP.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DaDgdJYj.js → index-BBREnn1V.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-B_Z-YoxX.js → index-BBvyHguy.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CkqHgG-b.js → index-BKmsS2jj.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CrcLHN2F.js → index-BRIqLy1m.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BaVE6E8y.js → index-BXGSbelg.js} +3 -3
  108. package/src/assets/web-panel/assets/{index-BYrnm5Ob.js → index-BaE0Ui07.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BDSR7ecX.js → index-BoAIAZ5C.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CNuCHHQT.js → index-BqltWojQ.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Eag8e_mA.js → index-CGiIyTZw.js} +1 -1
  112. package/src/assets/web-panel/assets/index-CKB0vbJU.js +1 -0
  113. package/src/assets/web-panel/assets/{index-BepBTpa8.js → index-CZ2wUEgr.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-HNGGVF6o.js → index-CZpfzcuy.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-AuBhLqOm.js → index-Ckrk3pIV.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-7TC3S8SN.js → index-CqoCZ5vR.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CFPJ8yzF.js → index-CyWBir7N.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Bb6kDrUx.js → index-CyyGTMKd.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DKN2noIF.js → index-D0BSkxYQ.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Du0rnksC.js → index-D5YVopyr.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BxRy5LPR.js → index-DKUBj36_.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-sm7W8AXy.js → index-DM724NgU.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BujsOZfc.js → index-DQRsQen0.js} +1 -1
  124. package/src/assets/web-panel/assets/index-DgoXmwqB.js +1 -0
  125. package/src/assets/web-panel/assets/{index-Y9MJv28e.js → index-DikJ0Qqe.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-caye7AOE.js → index-Dn2dSdXx.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-cdf7fd7d.js → index-DyUaFWEk.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BnnXQot_.js → index-Hfe_dEGx.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DvHGtNnF.js → index-_JjRLSD0.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-nbfHl1oV.js → index-frSojpHj.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Cu3L4r5l.js → index-jK3ax6Z6.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D84id2Y4.js → index-qMuZ-NRR.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-hPY0fFrd.js → index-q_fQ94SE.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-BZ9w6jPL.js → initDefaultProps-D4VdhJ9_.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-BnwUiOho.js → motion-CZJA0MQW.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-ByUKJnNm.js → move-BqEs7Sb1.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-V7yK1KEl.js → mtc-parser-BpHEtsu1.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-BEXBBt4j.js → omit-BW94tY9W.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-qDm_46Gi.js → pickAttrs-BnBjPWP9.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-BIbhEo_0.js → placementArrow-uUkjQ_hu.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-NbPbDgA_.js → responsiveObserve-B-klUqXK.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-BnUWglZ0.js → slide-CvY1cNAs.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-BX8_wZI5.js → statusUtils-Ix5sEDT2.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-BV4OycQX.js → styleChecker-C8qcXOne.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-Od_H5llY.js → useFlexGapSupport-KNF6Kj8f.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-BWI-PyiX.js → useFs-DGJr345n.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-BqMuhG3g.js → usePersonalDataHub-BboN99rI.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-DNd23z6f.js → vnode-Bgt8Vgte.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-Cjaxnm7l.js → zoom-BhJtErgt.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/command-help-index.json +2 -2
  152. package/src/commands/agenda.js +6 -5
  153. package/src/commands/agent.js +237 -75
  154. package/src/commands/agents.js +6 -0
  155. package/src/commands/artifacts.js +98 -0
  156. package/src/commands/background-session.js +11 -1
  157. package/src/commands/mcp.js +218 -31
  158. package/src/commands/review.js +221 -22
  159. package/src/commands/session-mcp-recovery.js +5 -5
  160. package/src/data/changelog.json +27 -1
  161. package/src/gateways/ws/ws-agent-handler.js +492 -14
  162. package/src/harness/jsonl-session-store.js +39 -1
  163. package/src/harness/mcp-client.js +414 -71
  164. package/src/harness/prompt-compressor.js +24 -0
  165. package/src/harness/provider-backed-compaction.js +205 -0
  166. package/src/harness/worktree-isolator.js +26 -3
  167. package/src/lib/agent-worktree.js +41 -2
  168. package/src/lib/app-preview.js +3 -0
  169. package/src/lib/background-agent-supervisor.js +790 -186
  170. package/src/lib/background-command-argv.js +318 -0
  171. package/src/lib/background-launch-profile.js +1 -0
  172. package/src/lib/background-phase-reporter.js +22 -2
  173. package/src/lib/background-worktree-policy.js +109 -0
  174. package/src/lib/command-lifecycle-report.js +1340 -145
  175. package/src/lib/cowork-mcp-tools.js +51 -6
  176. package/src/lib/cowork-task-runner.js +1 -0
  177. package/src/lib/delivery-coordinator.js +30 -5
  178. package/src/lib/delivery-production-adapter.js +1777 -0
  179. package/src/lib/delivery-production-runner.js +240 -0
  180. package/src/lib/durable-security-store.js +29 -17
  181. package/src/lib/execution-trace/trace-context.cjs +179 -0
  182. package/src/lib/execution-trace/trace-context.js +8 -175
  183. package/src/lib/mcp-call-ledger-store.js +58 -6
  184. package/src/lib/mcp-headers-helper.js +76 -8
  185. package/src/lib/mcp-host-recovery-runtime.js +2 -0
  186. package/src/lib/mcp-ledger-recovery-admission.js +39 -3
  187. package/src/lib/mcp-recovery-adjudication.js +256 -19
  188. package/src/lib/mcp-sandbox-policy.js +184 -0
  189. package/src/lib/mcp-stdio-capsule-builder-worker.cjs +495 -0
  190. package/src/lib/mcp-stdio-executable-identity.js +33 -2
  191. package/src/lib/mcp-stdio-execution-authority.js +163 -0
  192. package/src/lib/mcp-stdio-immutable-vfs-resolver.cjs +830 -0
  193. package/src/lib/mcp-stdio-package-materialization.js +721 -333
  194. package/src/lib/mcp-stdio-workspace-authority.js +252 -0
  195. package/src/lib/observability/index.js +2 -0
  196. package/src/lib/observability/otlp-exporter.js +2 -2
  197. package/src/lib/packer/pack-update-applier.js +8 -1
  198. package/src/lib/packer/pkg-config-generator.js +34 -0
  199. package/src/lib/plugin-runtime/sandbox-policy.js +42 -2
  200. package/src/lib/process-execution-broker/index.js +213 -109
  201. package/src/lib/process-execution-broker/platform-sandbox.js +1024 -169
  202. package/src/lib/process-tree-termination.js +17 -1
  203. package/src/lib/scheduler-kernel/contract.js +315 -0
  204. package/src/lib/scheduler-kernel/store.js +1345 -0
  205. package/src/lib/session-host-lease.js +403 -30
  206. package/src/lib/session-persistence-failure.js +4 -1
  207. package/src/lib/skill-mcp.js +65 -4
  208. package/src/lib/sub-agent-context.js +8 -0
  209. package/src/lib/web-fetch.js +4 -4
  210. package/src/repl/agent-repl.js +285 -38
  211. package/src/runtime/agent-core.js +1044 -90
  212. package/src/runtime/agent-runtime.js +61 -8
  213. package/src/runtime/headless-runner.js +260 -166
  214. package/src/runtime/headless-stream.js +254 -25
  215. package/src/runtime/mcp-config.js +235 -28
  216. package/src/workers/background-agent-worker.js +492 -71
  217. package/src/assets/web-panel/assets/Projects-08xUDZGt.js +0 -1
  218. package/src/assets/web-panel/assets/Providers-BGs47s1a.js +0 -1
  219. package/src/assets/web-panel/assets/Tasks-CEYFJwmr.js +0 -1
  220. package/src/assets/web-panel/assets/devWarning-DEMblAIm.js +0 -1
  221. package/src/assets/web-panel/assets/index-BTvq-36D.js +0 -1
  222. package/src/assets/web-panel/assets/index-hUpvk6Jl.js +0 -1
@@ -33,10 +33,17 @@ import {
33
33
  } from "../lib/hooks-v2-producers.js";
34
34
  import { runWithHostHooksV2Workspace } from "../lib/hooks-v2-workspace-context.js";
35
35
  import { bootstrap } from "./bootstrap.js";
36
- import { buildSystemPrompt, agentLoop as coreAgentLoop } from "./agent-core.js";
36
+ import {
37
+ buildSystemPrompt,
38
+ chatWithTools as coreChatWithTools,
39
+ agentLoop as coreAgentLoop,
40
+ } from "./agent-core.js";
37
41
  import { composeSystemPrompt } from "./system-prompt.js";
38
42
  import { collapseConsecutiveMessagesInPlace } from "./message-roles.js";
39
43
  import { sanitizeToolPairs } from "../harness/prompt-compressor.js";
44
+ import { compactConversationWithProvider } from "../harness/provider-backed-compaction.js";
45
+ import { projectCanonicalResumeMessages } from "../lib/session-message-provenance.js";
46
+ import { isAbortError } from "../lib/abort-utils.js";
40
47
  import { expandFileRefsAsync } from "./file-ref-expander.js";
41
48
  // Per-turn helpers resolved at module load (not re-`await import`ed inside the
42
49
  // turn loop). image-input + ide-context are pure local modules; pulling them up
@@ -85,6 +92,7 @@ import {
85
92
  appendAssistantMessage as jsonlAppendAssistantMessage,
86
93
  appendToolCallCompact as jsonlAppendToolCallCompact,
87
94
  appendLlmRetryCompact as jsonlAppendLlmRetryCompact,
95
+ appendCompactEventIfMessagesMatch as jsonlAppendCompactEventIfMessagesMatch,
88
96
  appendEvent as jsonlAppendEvent,
89
97
  appendAuthorityEvent as jsonlAppendAuthorityEvent,
90
98
  readEvents as jsonlReadEvents,
@@ -803,6 +811,7 @@ async function runTurn(
803
811
  let finalText = "";
804
812
  let endReason = "complete";
805
813
  let stopForCost = false;
814
+ let stopForCompactionUsageUnknown = false;
806
815
  let responseCompleted = false;
807
816
  // P0-2: the side-effect op currently in flight (at most one — the loop runs
808
817
  // tools serially). Non-null only between a dangerous tool's tool-executing
@@ -1012,6 +1021,18 @@ async function runTurn(
1012
1021
  }
1013
1022
  }
1014
1023
  break;
1024
+ case "compaction-usage-unknown":
1025
+ emit({
1026
+ type: "compaction_usage_unknown",
1027
+ provider: event.provider,
1028
+ model: event.model,
1029
+ source: event.source || "semantic-compaction",
1030
+ reason: event.reason || "provider_transport_outcome_unknown",
1031
+ usage_outcome: "unknown",
1032
+ });
1033
+ endReason = "compaction-usage-unknown";
1034
+ stopForCompactionUsageUnknown = true;
1035
+ break;
1015
1036
  case "iteration-warning":
1016
1037
  emit({ type: "iteration_warning", message: event.message });
1017
1038
  break;
@@ -1033,7 +1054,7 @@ async function runTurn(
1033
1054
  await waitForOutput?.();
1034
1055
  // Hard cost cap reached — stop consuming the loop (break the for-await, not
1035
1056
  // just the switch) so no further paid LLM call is made.
1036
- if (stopForCost) break;
1057
+ if (stopForCost || stopForCompactionUsageUnknown) break;
1037
1058
  }
1038
1059
  if (
1039
1060
  sideEffects &&
@@ -1181,6 +1202,7 @@ async function withStreamSessionHostLease(options, deps, streamCleanup, task) {
1181
1202
  typeof deps.sessionHasPersistedEvidence === "function" ||
1182
1203
  typeof deps.sessionExists === "function" ||
1183
1204
  typeof deps.rebuildMessages === "function" ||
1205
+ typeof deps.appendCompactEventIfMessagesMatch === "function" ||
1184
1206
  typeof deps.appendEvent === "function" ||
1185
1207
  typeof deps.appendAuthorityEvent === "function" ||
1186
1208
  typeof deps.readVerifiedEvents === "function" ||
@@ -1379,6 +1401,7 @@ async function runAgentHeadlessStreamInWorkspace(
1379
1401
  typeof deps.sessionHasPersistedEvidence === "function" ||
1380
1402
  typeof deps.sessionExists === "function" ||
1381
1403
  typeof deps.rebuildMessages === "function" ||
1404
+ typeof deps.appendCompactEventIfMessagesMatch === "function" ||
1382
1405
  typeof deps.appendEvent === "function" ||
1383
1406
  typeof deps.appendAuthorityEvent === "function" ||
1384
1407
  typeof deps.readVerifiedEvents === "function" ||
@@ -1739,6 +1762,11 @@ async function runAgentHeadlessStreamInWorkspace(
1739
1762
  appendLlmRetryCompact:
1740
1763
  deps.appendLlmRetryCompact ||
1741
1764
  (hasInjectedSessionStore ? () => true : jsonlAppendLlmRetryCompact),
1765
+ appendCompactEventIfMessagesMatch:
1766
+ deps.appendCompactEventIfMessagesMatch ||
1767
+ (hasInjectedSessionStore
1768
+ ? unavailableAuthorityCapability("appendCompactEventIfMessagesMatch")
1769
+ : jsonlAppendCompactEventIfMessagesMatch),
1742
1770
  appendEvent:
1743
1771
  deps.appendEvent ||
1744
1772
  (hasInjectedSessionStore ? () => true : jsonlAppendEvent),
@@ -2495,6 +2523,7 @@ async function runAgentHeadlessStreamInWorkspace(
2495
2523
  sink: mcpLedgerSink,
2496
2524
  recovery: mcpLedgerRecovery,
2497
2525
  recoveryError: mcpLedgerRecoveryError,
2526
+ dispatchAdmission: sessionHostLease?.admitMcpDispatch || null,
2498
2527
  });
2499
2528
  const hostMcp = mcp
2500
2529
  ? { ...mcp, mcpClient: mcpRecoveryRuntime.client || mcp.mcpClient }
@@ -2730,6 +2759,26 @@ async function runAgentHeadlessStreamInWorkspace(
2730
2759
  // A null sink disables durable writes, not recovery admission. Retain the
2731
2760
  // guarded ledger so outcome-unknown calls cannot be retried in-process.
2732
2761
  mcpCallLedger: mcpRecoveryRuntime.ledger,
2762
+ mcpDispatchAdmission: sessionHostLease?.admitMcpDispatch || null,
2763
+ onCompaction: persist
2764
+ ? (stats, compacted, settlement = {}) => {
2765
+ sessionHostLease?.assert?.();
2766
+ return requireSynchronousRecoveryResult(
2767
+ store.appendCompactEventIfMessagesMatch(
2768
+ sessionId,
2769
+ {
2770
+ ...stats,
2771
+ trigger: settlement.trigger || "auto",
2772
+ messages: projectCanonicalResumeMessages(compacted, {
2773
+ strict: true,
2774
+ }),
2775
+ },
2776
+ settlement.expectedMessages,
2777
+ ),
2778
+ "appendCompactEventIfMessagesMatch",
2779
+ );
2780
+ }
2781
+ : undefined,
2733
2782
  chatFn: deps.chatFn || options.chatFn || undefined,
2734
2783
  signal: options.signal || undefined,
2735
2784
  // --include-partial-messages: stream live assistant-text deltas as
@@ -3035,31 +3084,194 @@ async function runAgentHeadlessStreamInWorkspace(
3035
3084
  continue;
3036
3085
  }
3037
3086
 
3038
- // Manual `/compact` (Claude-Code IDE parity): trim the live history in
3039
- // place between turns — no LLM call (microCompact shortens large old tool
3040
- // results, preserving recent turns + tool pairs). Answers with a
3041
- // `compaction` event the panel renders as "compacted N→M, saved …".
3087
+ // Manual `/compact` uses the same provider-backed structured handoff as the
3088
+ // other long-lived hosts. Provider/schema failures degrade to the shared
3089
+ // extractive handoff instead of silently dropping all but recent turns.
3042
3090
  if (parsed.compact) {
3043
- const { microCompact } = await import("../lib/micro-compact.js");
3044
3091
  const before = messages.length;
3045
- const { messages: compacted, stats } = microCompact(messages);
3046
- messages.length = 0;
3047
- messages.push(...compacted);
3048
- emit({
3049
- type: "compaction",
3050
- stats,
3051
- messages_before: before,
3052
- messages_after: messages.length,
3053
- });
3054
- emitHooksV2Event("PostCompact", {
3055
- schema_version: 1,
3056
- trigger: "manual",
3057
- session_id: sessionId,
3058
- messages_before: before,
3059
- messages_after: messages.length,
3060
- stats,
3061
- cwd,
3062
- });
3092
+ const expectedMessages = [...messages];
3093
+ let compacted;
3094
+ let stats;
3095
+ let degradedEvent;
3096
+ let usageEvent;
3097
+ let usageUnknownEvent;
3098
+ try {
3099
+ ({
3100
+ messages: compacted,
3101
+ stats,
3102
+ degradedEvent,
3103
+ usageEvent,
3104
+ usageUnknownEvent,
3105
+ } = await compactConversationWithProvider(messages, {
3106
+ provider,
3107
+ model,
3108
+ baseUrl,
3109
+ apiKey,
3110
+ signal: options.signal,
3111
+ force: true,
3112
+ preserveCompletedExchange: true,
3113
+ llmQuery:
3114
+ deps.compactionLlmQuery || options.compactionLlmQuery || null,
3115
+ chatFn:
3116
+ deps.compactionChatFn ||
3117
+ options.compactionChatFn ||
3118
+ coreChatWithTools,
3119
+ chatOptions: { cwd, sessionId },
3120
+ maxOutputTokens: options.compactionMaxOutputTokens,
3121
+ summaryInputMaxChars: options.compactionInputMaxChars,
3122
+ }));
3123
+ } catch (error) {
3124
+ if (isAbortError(error) || options.signal?.aborted) throw error;
3125
+ emit({
3126
+ type: "compaction-degraded",
3127
+ reason: `compaction_failed:${String(error?.message || error).slice(0, 240)}`,
3128
+ summaryMode: "none",
3129
+ });
3130
+ continue;
3131
+ }
3132
+ if (degradedEvent) {
3133
+ emit({ type: "compaction-degraded", ...degradedEvent });
3134
+ }
3135
+ if (usageUnknownEvent) {
3136
+ emit({
3137
+ type: "compaction_usage_unknown",
3138
+ ...usageUnknownEvent,
3139
+ usage_outcome: "unknown",
3140
+ });
3141
+ emit({
3142
+ type: "result",
3143
+ subtype: "error_compaction_usage_unknown",
3144
+ is_error: true,
3145
+ code: "CC_COMPACTION_USAGE_UNKNOWN",
3146
+ error:
3147
+ "Compaction provider usage is unknown; the paid compaction is not retried",
3148
+ session_id: sessionId,
3149
+ ...(costBudget ? { budget_state: "unverifiable" } : {}),
3150
+ });
3151
+ sawError = true;
3152
+ break;
3153
+ }
3154
+ let costExceeded = false;
3155
+ if (usageEvent) {
3156
+ emit({ type: "token_usage", ...usageEvent });
3157
+ if (costBudget) {
3158
+ costBudget.add(usageEvent);
3159
+ costExceeded = costBudget.exceeded();
3160
+ }
3161
+ }
3162
+
3163
+ // Provider work above is intentionally outside the canonical writer
3164
+ // lock. Settle the candidate once, under the JSONL message-projection CAS,
3165
+ // before replacing the live history. A stale/unknown settlement is never
3166
+ // retried here: that could duplicate either the paid summary call or a
3167
+ // compact event whose fsync outcome is unknown.
3168
+ const shouldPersistCompact = stats?.strategy !== "none";
3169
+ let settlementError = null;
3170
+ let persistenceFailure = null;
3171
+ if (persist && shouldPersistCompact) {
3172
+ try {
3173
+ sessionHostLease?.assert?.();
3174
+ requireSynchronousRecoveryResult(
3175
+ store.appendCompactEventIfMessagesMatch(
3176
+ sessionId,
3177
+ {
3178
+ ...stats,
3179
+ trigger: "manual",
3180
+ messages: projectCanonicalResumeMessages(compacted, {
3181
+ strict: true,
3182
+ }),
3183
+ },
3184
+ expectedMessages,
3185
+ ),
3186
+ "appendCompactEventIfMessagesMatch",
3187
+ );
3188
+ } catch (error) {
3189
+ settlementError = error;
3190
+ const normalized = createSessionPersistenceFailure(error, {
3191
+ sessionId,
3192
+ operation: "append-authority-event",
3193
+ });
3194
+ persistenceFailure = projectSessionPersistenceFailure(normalized, {
3195
+ phase: "after-model",
3196
+ });
3197
+ if (persistenceFailure) {
3198
+ terminalPersistenceFailure = persistenceFailure;
3199
+ try {
3200
+ deps.onPersistenceFailure?.(persistenceFailure);
3201
+ } catch {
3202
+ // Observability cannot change persistence semantics.
3203
+ }
3204
+ }
3205
+ }
3206
+ }
3207
+
3208
+ if (!settlementError) {
3209
+ messages.length = 0;
3210
+ messages.push(...compacted);
3211
+ emit({
3212
+ type: "compaction",
3213
+ stats,
3214
+ messages_before: before,
3215
+ messages_after: messages.length,
3216
+ });
3217
+ emitHooksV2Event("PostCompact", {
3218
+ schema_version: 1,
3219
+ trigger: "manual",
3220
+ session_id: sessionId,
3221
+ messages_before: before,
3222
+ messages_after: messages.length,
3223
+ stats,
3224
+ cwd,
3225
+ });
3226
+ } else {
3227
+ const stale = settlementError?.code === "SESSION_REVISION_STALE";
3228
+ const code = stale
3229
+ ? "CC_COMPACTION_REVISION_STALE"
3230
+ : persistenceFailure?.code ||
3231
+ settlementError?.code ||
3232
+ "CC_COMPACTION_SETTLEMENT_FAILED";
3233
+ emit({
3234
+ type: "compaction-degraded",
3235
+ reason: stale
3236
+ ? "session_messages_changed_during_compaction"
3237
+ : "canonical_compaction_settlement_failed",
3238
+ summaryMode: "none",
3239
+ code,
3240
+ });
3241
+ emit({
3242
+ type: "result",
3243
+ subtype: persistenceFailure
3244
+ ? "error_persistence"
3245
+ : stale
3246
+ ? "error_compaction_stale"
3247
+ : "error_session_persistence",
3248
+ is_error: true,
3249
+ code,
3250
+ error: "Canonical compaction was not settled",
3251
+ session_id: sessionId,
3252
+ ...(persistenceFailure ? { persistence: persistenceFailure } : {}),
3253
+ });
3254
+ sawError = true;
3255
+ }
3256
+
3257
+ if (costExceeded) {
3258
+ sawError = true;
3259
+ emit({
3260
+ type: "cost_budget_exhausted",
3261
+ limit_usd: options.maxCostUsd,
3262
+ spent_usd: costBudget.spentUsd,
3263
+ session_id: sessionId,
3264
+ turn: turns,
3265
+ });
3266
+ }
3267
+ if (settlementError || costExceeded) {
3268
+ break;
3269
+ }
3270
+ if (!shouldPersistCompact && persist) {
3271
+ // A repeated `/compact` against an already-compact context is a no-op:
3272
+ // do not grow the canonical chain with duplicate checkpoints.
3273
+ sessionHostLease?.assert?.();
3274
+ }
3063
3275
  continue;
3064
3276
  }
3065
3277
 
@@ -3596,6 +3808,23 @@ async function runAgentHeadlessStreamInWorkspace(
3596
3808
  }
3597
3809
  currentAbort = null;
3598
3810
 
3811
+ if (outcome.endReason === "compaction-usage-unknown") {
3812
+ sawError = true;
3813
+ emit({
3814
+ type: "result",
3815
+ subtype: "error_compaction_usage_unknown",
3816
+ is_error: true,
3817
+ code: "CC_COMPACTION_USAGE_UNKNOWN",
3818
+ error:
3819
+ "Compaction provider usage is unknown; the paid compaction is not retried",
3820
+ session_id: sessionId,
3821
+ turn: turns,
3822
+ usage: outcome.usage,
3823
+ ...(costBudget ? { budget_state: "unverifiable" } : {}),
3824
+ });
3825
+ break;
3826
+ }
3827
+
3599
3828
  // §3.5.18 出境台账: report what left the device this turn (the cloud-LLM
3600
3829
  // call + any egress-classed tool) so the Android transparency ledger —
3601
3830
  // which cannot see the cc subprocess's cloud call — records it. PDH-gated