chainlesschain 0.166.100 → 0.166.101

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 (166) hide show
  1. package/package.json +2 -2
  2. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  3. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-Cd4iUOPt.js → AIOps-BjBS_29I.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton--ucr-zko.js → ActionButton-CUnnQUaj.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-DbejYMWk.js → Analytics-BqYZxgnY.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-CLgKxeGw.js → AppLayout-m8B886ka.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-CTT5BIL5.js → Artifacts-JEOxU3Ug.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-DP-WBWe9.js → Audit-DAXS5c9J.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-B6VqheJk.js → BackgroundAgents-e3a9XHw3.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-VWJK5zim.js → Backup-D3Qmp68h.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-YGFO9RHd.js → BaseInput-C7CXyiUl.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-CVfydnCd.js → Chat-2AHlAGi8.js} +6 -6
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BICpB-qU.js → ChatBubbleRenderer-D3KsyCUV.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-Bd5vKRMk.js → Checkbox-YfBuQlBH.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-DHNgPHvg.js → Codegen-DCCQDfTL.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-CA2BYQ8T.js → Col-03i2WfrV.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-DnKJ-qpI.js → Community-CJQIpng6.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-C9BZ8t4r.js → Compact-CCtcQ2pq.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-ByyQ2FOl.js → Compliance-Vxl7ZszJ.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-rXTwXE_c.js → Cowork-DN-BwA8I.js} +2 -2
  22. package/src/assets/web-panel/assets/{Cron-BuW-HODy.js → Cron-Dc2Q46X7.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-OudNtbYW.js → Crosschain-CQCblsl-.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-BQ6BxYNN.js → DID-YYvqUR8C.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-Cz5HG8tz.js → Dashboard-Cafy3DZT.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-BzclHOVv.js → Dropdown-BOyYpIpv.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-CbJETFdy.js → EmailListRenderer-B7NYjc1j.js} +1 -1
  28. package/src/assets/web-panel/assets/{EvolutionSettings-Dx_pJG3d.js → EvolutionSettings-C5wfxztf.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-6JCS1MNg.js → FamilyGuardDashboard-aA7KnDGK.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-BrPkMYaf.js → Federation-DlgXUu1L.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-Bhc9pobs.js → FormItemContext-B5YsrLDg.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-BxOh07uQ.js → GenericCardRenderer-DaWojPFw.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-D_idoujr.js → Git-dkhh6Fx2.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-ZGfIRE-x.js → Governance-Cz6vmkjc.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-DpAmcwbw.js → Inference-DWt0hbh8.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-D1S1UTgP.js → KnowledgeGraph-BZJ0Z-nL.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-2sc8V5XV.js → Logs-BaBBmL1A.js} +2 -2
  38. package/src/assets/web-panel/assets/MarkdownRenderer-C1yByobo.js +1 -0
  39. package/src/assets/web-panel/assets/{Marketplace-0xlFUKbe.js → Marketplace-ct8sgQ0s.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-D25eJLGm.js → McpTools-CXKCRGYQ.js} +3 -3
  41. package/src/assets/web-panel/assets/{Memory-BLRGd9hM.js → Memory-O7ZwlS6a.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-zpFINGzn.js → MobileBridge-By12C-eC.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-Cbyd-8kx.js → MobileProjects-Ba-EVdex.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-DgXgUlHc.js → Mtc-g-932zV2.js} +2 -2
  45. package/src/assets/web-panel/assets/{MtcAudit-DzcL-dKH.js → MtcAudit-BW8hB0ly.js} +4 -4
  46. package/src/assets/web-panel/assets/{Multisig-C3OrZ6VN.js → Multisig-zspLaMbT.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-Bqp_vWA7.js → NLProgramming-dJeUPDoq.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-Dyn45-Ht.js → Notes-C4msiRQL.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-CLjafGZr.js → NotificationSettings-MOCHM-qg.js} +1 -1
  50. package/src/assets/web-panel/assets/{OrderTableRenderer-Bx8wMauC.js → OrderTableRenderer-CX0T66NM.js} +1 -1
  51. package/src/assets/web-panel/assets/{Organization-5gr9hyLm.js → Organization-DOZurBfk.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-BRdU02hT.js → Overflow-qOT9BhUp.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-DIi7fzh6.js → P2P-BMoy7Eo4.js} +2 -2
  54. package/src/assets/web-panel/assets/{PdhVaultBrowser-BCbS1KpA.js → PdhVaultBrowser-ByyV1q-D.js} +3 -3
  55. package/src/assets/web-panel/assets/{Permissions-BjeP9VtA.js → Permissions-6Qyro4ye.js} +4 -4
  56. package/src/assets/web-panel/assets/{PersonalDataHub-y8PXOQUc.js → PersonalDataHub-DR3DRNSX.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-B0fL5uxY.js → Pipeline-Cr6TTdud.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-C8jCDn8Z.js → Privacy-B70otG0l.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-B_L6Dc6V.js → ProjectInit-BHCqxoSk.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-Bb1CYbZh.js → ProjectSettings-B80GZpZk.js} +2 -2
  61. package/src/assets/web-panel/assets/Projects-cq-b9-fQ.js +1 -0
  62. package/src/assets/web-panel/assets/{Providers-mBSTDJ0E.js → Providers-dsVTimHa.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-CHxgalvt.js → QrScannerModal-DRJ8YepZ.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-DI9KIMEV.js → QuickAsk-BSXdEjIB.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-B5_zW1JH.js → Recommend-CQLJGyKC.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-BkH4bmM5.js → RemoteSession-BF9WUFVZ.js} +2 -2
  67. package/src/assets/web-panel/assets/{Reputation-DJrAqwAq.js → Reputation-Cy9o5tvW.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-xZ3MAM34.js → Row-BP346_3b.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-CCsrLLiu.js → RssFeed-BKulxXf3.js} +3 -3
  70. package/src/assets/web-panel/assets/{Search-CTCRKvaP.js → Search-EemQj2Dv.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-D7joyfp2.js → Security-DcWPAwwk.js} +4 -4
  72. package/src/assets/web-panel/assets/{Services-oqHPmTG4.js → Services-Bltqciay.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-BR_32bTG.js → Skeleton-BwRyOGY8.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-BoRz9mln.js → Skills-D98qlvpJ.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-UAGUHZ9b.js → Sla-BUTtBMY0.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-DeP_rMgv.js → SpeechSettings-C7kcY_98.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-CSzzMmeA.js → SyncSettings-Bsk6lKvT.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-CcqOLsLB.js → Tasks-DvSrtz0P.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-cDbkGSDG.js → Templates-BUM6LwPs.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant-DmOy58cq.js → Tenant-D9TkOm7z.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-CsRZH5vr.js → Terminal-CP8ZVErN.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-BgJrk6HG.js → TimelineRenderer-V3SoKZ1T.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-CCQglKDE.js → Tokens-CCRlUTOA.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-t-Gt3oBY.js → Trigger-CznUcPme.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-DQgu2kI0.js → Trust-D1GIk_NF.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-Cod2WUGj.js → UkeySign-DHtvtyC-.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-SGN5zaVK.js → VideoEditing-CVxdaJIq.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-CnLEL-LD.js → Wallet-D221OjyE.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-C2keUpD6.js → WebAuthn-Cw0-ESsq.js} +2 -2
  90. package/src/assets/web-panel/assets/{WorkflowEditor-B1GvrwWJ.js → WorkflowEditor-ZYScrBx3.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-1E9_P_qY.js → chat-BU0e1obR.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-DuU6Os4q.js → colors-gzYweuha.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-C5NfOAcM.js → compact-item-ChAXal_k.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-D4Fxz9qQ.js → createContext-of3FolD7.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-Pa13TVrO.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-C6C49iFk.js → hasIn-4PsK_Kx8.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DP2DCKD-.js → index-1dzYRBbg.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DPzunJER.js → index-B5L7zddz.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BBVqlelF.js → index-BOeX7BzS.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-Bk-paNL3.js → index-BdxRVNPY.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-CJS6GTpv.js → index-BfI4dXbi.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BlHkc48f.js → index-Bftq5rJR.js} +1 -1
  103. package/src/assets/web-panel/assets/index-BhQg-v6V.js +1 -0
  104. package/src/assets/web-panel/assets/{index-HQXFl8fh.js → index-By-pper5.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-cnDfwWU5.js → index-CCLsbul3.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DSypQU1h.js → index-CGFL59q4.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-B-bb-R99.js → index-CHv_63Cp.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-C7mh6xlu.js → index-CO2owKe0.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-gh11zJ9h.js → index-CeEE_SGZ.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BsH8mFp4.js → index-Cn1clrxx.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-C2nO02uW.js → index-Cx4Z6nUl.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BYg1dtne.js → index-CxzBcXOa.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-AO6iDCSL.js → index-CyDQNprx.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Dh-vezHe.js → index-D-Zss5KL.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BULggEX6.js → index-D1PGrfHE.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-bW6vfpLH.js → index-DDYj14Q4.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-B5lzRoHp.js → index-DEB5fQqG.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CXb8gEWh.js → index-DEXBckNR.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BZKRZYTX.js → index-DEzjUgkl.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CpiOzt7U.js → index-DJVrzXtk.js} +1 -1
  121. package/src/assets/web-panel/assets/index-DUD5o-vW.js +1 -0
  122. package/src/assets/web-panel/assets/{index-jFg3CPlQ.js → index-DZ0oKtBg.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DZgT7pH-.js → index-D_5LTPMH.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CXn-e3ki.js → index-D_9k680X.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DFK6PTGJ.js → index-D_ialOHx.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BmvU4Tp_.js → index-DjRAIRX7.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-Bu6qMjf4.js → index-Djfgsjfy.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CDVwN9Sv.js → index-DsoV9rzn.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DpaGe-dr.js → index-Dy0ojH6G.js} +3 -3
  130. package/src/assets/web-panel/assets/{index-CQJoh5rw.js → index-E8oDMSAo.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BU5mPkNX.js → index-Ef5YkVAn.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D1TXgNPA.js → index-Wr91cnWr.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-BVE2wCeb.js → index-cFkMIx1x.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-B_ON9La1.js → index-wo0De0iG.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-lNmDaf3J.js → index-yMf7zmWv.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-3DSfnIpD.js → initDefaultProps-D0Bx6pgr.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-DxGLmgA0.js → motion-BnLuJqJ5.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-DrlLG6m5.js → move-Bxpq9xgR.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-BITbrJSb.js → mtc-parser-BdmrNhOs.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-D7k5vIbk.js → omit-tjJD34BZ.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-BJSvYFWo.js → pickAttrs-CMFzLt7b.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-Bf4to1jA.js → placementArrow-BZf6O3cd.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-BXzeyzTa.js → responsiveObserve-DFDLazsV.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-DLzNUNdj.js → slide-CMbTvp4Y.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-wBBnrRm_.js → statusUtils-FOan8MI7.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-BnmJzXNr.js → styleChecker-DTABspd4.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-DrN8MrJb.js → useFlexGapSupport-CNHXWBpY.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-dnkYGkjY.js → useFs-5K-c_RoL.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-k_xkv7-k.js → usePersonalDataHub-Di0hL4G-.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-B-v8PXpK.js → vnode-DTyDv4ja.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-Coue8wAK.js → zoom-ontRt8ft.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/commands/eval.js +11 -8
  154. package/src/data/changelog.json +13 -0
  155. package/src/harness/provider-backed-compaction.js +13 -5
  156. package/src/lib/context-memory-kernel/live-compaction.js +142 -61
  157. package/src/lib/formal-budget-authority.js +533 -0
  158. package/src/lib/formal-budget-contract.js +609 -0
  159. package/src/lib/formal-budget-transport.js +345 -0
  160. package/src/runtime/agent-core.js +175 -12
  161. package/src/runtime/headless-stream.js +136 -4
  162. package/src/assets/web-panel/assets/MarkdownRenderer-575jjYE6.js +0 -1
  163. package/src/assets/web-panel/assets/Projects-CUSV10Cn.js +0 -1
  164. package/src/assets/web-panel/assets/devWarning-zDWbYMr7.js +0 -1
  165. package/src/assets/web-panel/assets/index-BPBsZZnT.js +0 -1
  166. package/src/assets/web-panel/assets/index-CtGQDg7m.js +0 -1
@@ -1 +1 @@
1
- import{N as i,h as a,w as l}from"./index-DpaGe-dr.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function V(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function v(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,V as b,c,v as t};
1
+ import{N as i,h as a,w as l}from"./index-Dy0ojH6G.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function V(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function v(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,V as b,c,v as t};
@@ -1,4 +1,4 @@
1
- import{K as o}from"./index-DpaGe-dr.js";import{i as f}from"./motion-DxGLmgA0.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
1
+ import{K as o}from"./index-Dy0ojH6G.js";import{i as f}from"./motion-BnLuJqJ5.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
2
2
  ${t}-enter,
3
3
  ${t}-appear
4
4
  `]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
@@ -8,7 +8,7 @@
8
8
  // Injected by web-ui-server.js at serve time
9
9
  window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
10
10
  </script>
11
- <script type="module" crossorigin src="./assets/index-DpaGe-dr.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-Dy0ojH6G.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-Bn1JzzAn.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/icons-DG5UD-6K.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
@@ -20,7 +20,7 @@ import {
20
20
  persistVerify01Receipts,
21
21
  } from "../lib/eval/verify01-execution.js";
22
22
  import executionBroker from "../lib/process-execution-broker/index.js";
23
- import { BUILT_IN_PROVIDERS } from "../lib/llm-providers.js";
23
+ import { requireFormalBudgetRuntime } from "../lib/formal-budget-transport.js";
24
24
  import {
25
25
  TelemetryRecorder,
26
26
  formatTelemetry,
@@ -117,6 +117,9 @@ function makeHeadlessRunAgent(opts = {}) {
117
117
  throw new Error(
118
118
  "VERIFY01 provider/model binding differs from the launcher",
119
119
  );
120
+ // A valid task binding is not paid execution admission. Until every paid
121
+ // route and credential boundary is covered, refuse before spawning a child.
122
+ if (binding) requireFormalBudgetRuntime();
120
123
  const inherited = { ...process.env, ...(opts.env || {}) };
121
124
  const environmentValue = (name) => {
122
125
  if (process.platform !== "win32") return inherited[name];
@@ -127,11 +130,10 @@ function makeHeadlessRunAgent(opts = {}) {
127
130
  .find((candidate) => candidate.toLowerCase() === name.toLowerCase());
128
131
  return key === undefined ? undefined : inherited[key];
129
132
  };
130
- const providerKey = BUILT_IN_PROVIDERS[binding?.provider]?.apiKeyEnv;
131
- // Formal children retain platform plumbing and only the selected provider's
132
- // credential (or the explicitly selected generic CC_API_KEY). Hooks,
133
- // fallback configuration, NODE_OPTIONS and unrelated account tokens are
134
- // excluded. Normal, non-formal Eval retains its existing environment.
133
+ // Formal children retain platform plumbing and the isolated task binding.
134
+ // Provider credentials belong to the trusted budget host. Hooks, fallback
135
+ // configuration, NODE_OPTIONS and account tokens are excluded. This alone
136
+ // does not enforce OS egress; paid launch remains refused above.
135
137
  const childEnvironment = binding
136
138
  ? {
137
139
  ...Object.fromEntries(
@@ -147,8 +149,6 @@ function makeHeadlessRunAgent(opts = {}) {
147
149
  "LANG",
148
150
  "LC_ALL",
149
151
  "LC_CTYPE",
150
- "CC_API_KEY",
151
- ...(providerKey ? [providerKey] : []),
152
152
  ]
153
153
  .map((key) => [key, environmentValue(key)])
154
154
  .filter(([, value]) => value !== undefined),
@@ -462,6 +462,9 @@ export function registerEvalCommand(program, { logger } = {}) {
462
462
  throw new Error(
463
463
  "frozen suite comparison is bound by its plan; --comparison-context cannot override it",
464
464
  );
465
+ // Refuse before task setup, workspace creation or raw receipt writes.
466
+ // Dry runs remain offline harness diagnostics, never observations.
467
+ if (tasks.verification && !options.dryRun) requireFormalBudgetRuntime();
465
468
  comparison =
466
469
  tasks.verification?.comparison ||
467
470
  createEvalComparison({
@@ -1,6 +1,19 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.166.101",
7
+ "cliVersions": ["0.166.101"],
8
+ "date": null,
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Fixed - cc CLI 0.166.101: preserve context, usage and task outcomes during compaction",
13
+ "body": "- Restore VS Code composer drafts after reset, session resume and closing the\n last tab, with retry controls for failed loads. Align LLM connection tests\n with the chat CLI and distinguish missing dependencies from provider errors.\n- Upgrade Context Memory Kernel to 0.1.10. Abort compaction with\n `context_over_budget` when planning would empty a nonempty context or discard\n a newly derived summary, including when summarizer fallback is enabled.\n- Preserve the original session context and head on rejection while retaining\n settled provider usage. Keep summary trust and selection budgets unchanged.\n- Propagate validated provider receipts before accounting. Mark rejected\n workflow compaction as failed, uncertain commits as requiring reconciliation,\n and interrupted ordinary tasks as incomplete.\n- Account for completed compaction usage once when canonical planning rejects\n its summary; stop on unknown usage or failed settlement without a paid retry.\n- Pair VS Code 0.37.145 and JetBrains 0.4.163 with CLI 0.166.101 after child\n package publication, public CLI verification and the final commit's complete\n Actions release gates. Formal evaluation and native/durable acceptance retain\n their separate evidence and unfinished status."
14
+ }
15
+ ]
16
+ },
4
17
  {
5
18
  "productVersion": null,
6
19
  "cliVersion": "0.166.100",
@@ -151,10 +151,16 @@ export async function compactConversationWithProvider(messages, options = {}) {
151
151
  }
152
152
  chatFn = chatWithTools;
153
153
  }
154
- const invokeProviderCall = async (call) => {
155
- const callId = safeUsageCallId(await options.onProviderCallStart?.());
154
+ const invokeProviderCall = async (call, deferUntilAdmission = false) => {
155
+ let callId = null;
156
+ const start = async () => {
157
+ callId = safeUsageCallId(await options.onProviderCallStart?.());
158
+ };
159
+ // Only the captured canonical transport can attest that request admission
160
+ // completed. Custom adapters keep the conservative pre-call boundary.
161
+ if (!deferUntilAdmission) await start();
156
162
  try {
157
- return attachProviderCallId(await call(), callId);
163
+ return attachProviderCallId(await call(start), callId);
158
164
  } catch (error) {
159
165
  attachProviderCallIdToError(error, callId);
160
166
  throw error;
@@ -167,7 +173,7 @@ export async function compactConversationWithProvider(messages, options = {}) {
167
173
  if (typeof chatFn !== "function") {
168
174
  throw new Error("provider adapter unavailable");
169
175
  }
170
- return invokeProviderCall(async () => {
176
+ return invokeProviderCall(async (start) => {
171
177
  const response = await chatFn([{ role: "user", content: prompt }], {
172
178
  ...(options.chatOptions || {}),
173
179
  ...(evolutionIngress === null ? {} : { evolutionIngress }),
@@ -184,6 +190,8 @@ export async function compactConversationWithProvider(messages, options = {}) {
184
190
  onToken: undefined,
185
191
  onStall: undefined,
186
192
  onStreamRetry: undefined,
193
+ onProviderCallStart:
194
+ evolutionIngress === null ? undefined : start,
187
195
  maxOutputTokens,
188
196
  });
189
197
  return {
@@ -198,7 +206,7 @@ export async function compactConversationWithProvider(messages, options = {}) {
198
206
  ? { usageLedgerSettled: true }
199
207
  : {}),
200
208
  };
201
- });
209
+ }, evolutionIngress !== null);
202
210
  };
203
211
 
204
212
  const compressor =
@@ -2,6 +2,7 @@ import { randomUUID } from "node:crypto";
2
2
  import {
3
3
  canonicalDigest,
4
4
  InMemorySessionContextPort,
5
+ getCompactionPlanRejection,
5
6
  } from "@chainlesschain/context-memory-kernel";
6
7
  import { sessionExists } from "../../harness/jsonl-session-store.js";
7
8
  import {
@@ -11,6 +12,17 @@ import {
11
12
  } from "./message-adapter.js";
12
13
  import { JsonlSessionContextPort } from "./jsonl-session-context-port.js";
13
14
  import { createCliContextMemoryRuntime } from "./runtime.js";
15
+ import { projectRuntimeTokenUsage } from "../runtime-usage-ledger.js";
16
+
17
+ const rejectedCompactionUsage = new WeakMap();
18
+
19
+ // Only the owned canonical adapter can associate an error with its completed
20
+ // summarizer. A caller-supplied error property is never a settlement authority.
21
+ export function getRejectedCompactionUsage(error) {
22
+ return error && typeof error === "object"
23
+ ? rejectedCompactionUsage.get(error) || null
24
+ : null;
25
+ }
14
26
 
15
27
  function estimatedTokens(messages) {
16
28
  return Math.max(
@@ -20,7 +32,9 @@ function estimatedTokens(messages) {
20
32
  typeof message?.content === "string"
21
33
  ? message.content
22
34
  : JSON.stringify(message?.content ?? "");
23
- return total + Math.max(1, Math.ceil(Buffer.byteLength(content, "utf8") / 4));
35
+ return (
36
+ total + Math.max(1, Math.ceil(Buffer.byteLength(content, "utf8") / 4))
37
+ );
24
38
  }, 0),
25
39
  );
26
40
  }
@@ -125,13 +139,22 @@ class CallbackSessionContextPort extends InMemorySessionContextPort {
125
139
  }
126
140
 
127
141
  function kernelBudget(compressor) {
128
- const inputBudget = Math.max(256, Math.trunc(Number(compressor?.maxTokens)) || 16_384);
129
- const reservedOutputTokens = Math.max(1, Math.min(2048, Math.floor(inputBudget / 10)));
142
+ const inputBudget = Math.max(
143
+ 256,
144
+ Math.trunc(Number(compressor?.maxTokens)) || 16_384,
145
+ );
146
+ const reservedOutputTokens = Math.max(
147
+ 1,
148
+ Math.min(2048, Math.floor(inputBudget / 10)),
149
+ );
130
150
  return {
131
151
  modelWindowTokens: inputBudget + reservedOutputTokens,
132
152
  reservedOutputTokens,
133
153
  safetyMarginTokens: 0,
134
- recoveryReserveTokens: Math.min(256, Math.max(1, Math.floor(inputBudget * 0.05))),
154
+ recoveryReserveTokens: Math.min(
155
+ 256,
156
+ Math.max(1, Math.floor(inputBudget * 0.05)),
157
+ ),
135
158
  };
136
159
  }
137
160
 
@@ -175,7 +198,10 @@ function usageReceipt(stats, provider, model) {
175
198
  * summarizer for the Kernel-selected dropped partition; it cannot commit or
176
199
  * choose the authoritative output on its own.
177
200
  */
178
- export async function compactLiveMessagesCanonical(messagesInput, options = {}) {
201
+ export async function compactLiveMessagesCanonical(
202
+ messagesInput,
203
+ options = {},
204
+ ) {
179
205
  const messages = Array.isArray(messagesInput) ? [...messagesInput] : [];
180
206
  const sessionId = String(options.sessionId || `live-${randomUUID()}`);
181
207
  const operationId = String(options.operationId || `compact-${randomUUID()}`);
@@ -185,10 +211,13 @@ export async function compactLiveMessagesCanonical(messagesInput, options = {})
185
211
  new Date(Number((options.clock || Date.now)())).toISOString();
186
212
  const compressor = options.compressor;
187
213
  if (!compressor || typeof compressor.compress !== "function") {
188
- throw new TypeError("canonical live compaction requires a compatibility summarizer");
214
+ throw new TypeError(
215
+ "canonical live compaction requires a compatibility summarizer",
216
+ );
189
217
  }
190
218
 
191
219
  let summaryStats = null;
220
+ let summaryReceipt = null;
192
221
  let runtime;
193
222
  let verifiedAuthoritySnapshot = null;
194
223
  const persistentSession =
@@ -227,9 +256,7 @@ export async function compactLiveMessagesCanonical(messagesInput, options = {})
227
256
  memoryPort: bootstrapRuntime.memoryPort,
228
257
  sessionPort,
229
258
  });
230
- } else if (
231
- persistentSession
232
- ) {
259
+ } else if (persistentSession) {
233
260
  runtime = createCliContextMemoryRuntime({
234
261
  sessionId,
235
262
  scopeKey: `cli:session:${sessionId}`,
@@ -265,13 +292,13 @@ export async function compactLiveMessagesCanonical(messagesInput, options = {})
265
292
  });
266
293
  }
267
294
  if (!runtime.decision.canonical) {
268
- const error = new Error("canonical live compaction is not authoritative for this cohort");
295
+ const error = new Error(
296
+ "canonical live compaction is not authoritative for this cohort",
297
+ );
269
298
  error.code = "legacy_writer_fenced";
270
299
  throw error;
271
300
  }
272
- if (
273
- persistentSession
274
- ) {
301
+ if (persistentSession) {
275
302
  const authority =
276
303
  verifiedAuthoritySnapshot ||
277
304
  (await runtime.sessionPort.readSnapshot(sessionId));
@@ -296,52 +323,102 @@ export async function compactLiveMessagesCanonical(messagesInput, options = {})
296
323
  const provider = options.provider || "provider.local";
297
324
  const model = options.model || "default";
298
325
  const memoryRevision = await runtime.memoryPort.getRevision();
299
- const receipt = await runtime.kernel.compactContext({
300
- operationId,
301
- sessionId,
302
- ...kernelBudget(compressor),
303
- sink: provider,
304
- scopeAdmissions: [{ scope: "session", scopeId: sessionId }],
305
- policyVersion: "cli-context-policy-v1",
306
- modelProfile: model,
307
- memoryRevision,
308
- allowFallback: false,
309
- now: operationNow,
310
- metadata: {
311
- inputMessageCount: messages.length,
312
- originalTokens: estimatedTokens(messages),
313
- trigger,
314
- provider,
315
- model,
316
- },
317
- summarizer: async (droppedItems, context) => {
318
- const droppedMessages = contextItemsToMessages(droppedItems);
319
- const result = await compressor.compress(droppedMessages, {
320
- preserveToolPairs: true,
321
- ...(options.compressOptions || {}),
322
- });
323
- summaryStats = result.stats || {};
324
- const reduced =
325
- Number(summaryStats.saved || 0) > 0 ||
326
- result.messages.length < droppedMessages.length;
327
- const item = reduced
328
- ? createSummaryContextItem({
329
- messages: result.messages,
330
- parents: droppedItems,
331
- operationId: context.operationId,
332
- now: operationNow,
333
- })
334
- : null;
335
- return {
336
- items: item ? [item] : [],
337
- usageReceipt: usageReceipt(summaryStats, provider, model),
338
- degraded: summaryStats.degraded === true,
339
- ...(summaryStats.degradedReason
340
- ? { degradedReason: String(summaryStats.degradedReason).slice(0, 160) }
341
- : {}),
342
- };
343
- },
344
- });
326
+ let receipt;
327
+ try {
328
+ receipt = await runtime.kernel.compactContext({
329
+ operationId,
330
+ sessionId,
331
+ ...kernelBudget(compressor),
332
+ sink: provider,
333
+ scopeAdmissions: [{ scope: "session", scopeId: sessionId }],
334
+ policyVersion: "cli-context-policy-v1",
335
+ modelProfile: model,
336
+ memoryRevision,
337
+ allowFallback: false,
338
+ now: operationNow,
339
+ metadata: {
340
+ inputMessageCount: messages.length,
341
+ originalTokens: estimatedTokens(messages),
342
+ trigger,
343
+ provider,
344
+ model,
345
+ },
346
+ summarizer: async (droppedItems, context) => {
347
+ const droppedMessages = contextItemsToMessages(droppedItems);
348
+ const result = await compressor.compress(droppedMessages, {
349
+ preserveToolPairs: true,
350
+ ...(options.compressOptions || {}),
351
+ });
352
+ summaryStats = result.stats || {};
353
+ summaryReceipt = usageReceipt(summaryStats, provider, model);
354
+ const reduced =
355
+ Number(summaryStats.saved || 0) > 0 ||
356
+ result.messages.length < droppedMessages.length;
357
+ const item = reduced
358
+ ? createSummaryContextItem({
359
+ messages: result.messages,
360
+ parents: droppedItems,
361
+ operationId: context.operationId,
362
+ now: operationNow,
363
+ })
364
+ : null;
365
+ return {
366
+ items: item ? [item] : [],
367
+ usageReceipt: summaryReceipt,
368
+ degraded: summaryStats.degraded === true,
369
+ ...(summaryStats.degradedReason
370
+ ? {
371
+ degradedReason: String(summaryStats.degradedReason).slice(
372
+ 0,
373
+ 160,
374
+ ),
375
+ }
376
+ : {}),
377
+ };
378
+ },
379
+ });
380
+ } catch (error) {
381
+ const rejection = getCompactionPlanRejection(error);
382
+ if (
383
+ rejection?.operationId === operationId &&
384
+ rejection.sessionId === sessionId &&
385
+ summaryReceipt !== null &&
386
+ rejection.usageReceipt &&
387
+ canonicalDigest(rejection.usageReceipt) ===
388
+ canonicalDigest(summaryReceipt) &&
389
+ summaryStats?.summaryUsageUnknown !== true
390
+ ) {
391
+ try {
392
+ const usage = projectRuntimeTokenUsage({
393
+ ...(summaryStats.summaryCallId
394
+ ? { callId: summaryStats.summaryCallId }
395
+ : {}),
396
+ provider: summaryStats.summaryProvider || provider,
397
+ model: summaryStats.summaryModel || model,
398
+ source: "semantic-compaction",
399
+ usage: {
400
+ input_tokens: summaryStats.summaryUsage?.inputTokens,
401
+ output_tokens: summaryStats.summaryUsage?.outputTokens,
402
+ cache_read_input_tokens:
403
+ summaryStats.summaryUsage?.cacheReadTokens ?? 0,
404
+ cache_creation_input_tokens:
405
+ summaryStats.summaryUsage?.cacheCreationTokens ?? 0,
406
+ },
407
+ });
408
+ rejectedCompactionUsage.set(
409
+ error,
410
+ Object.freeze({
411
+ ...usage,
412
+ usage: Object.freeze(usage.usage),
413
+ receipt: Object.freeze({ ...summaryReceipt }),
414
+ }),
415
+ );
416
+ } catch {
417
+ // Missing or invalid usage retains the caller's unknown outcome path.
418
+ }
419
+ }
420
+ throw error;
421
+ }
345
422
  if (!["committed", "degraded"].includes(receipt.status)) {
346
423
  return {
347
424
  messages,
@@ -361,12 +438,16 @@ export async function compactLiveMessagesCanonical(messagesInput, options = {})
361
438
  messages: outputMessages,
362
439
  stats: {
363
440
  ...(summaryStats || {}),
364
- strategy: receipt.status === "degraded" ? "deterministic-fallback" : "canonical",
441
+ strategy:
442
+ receipt.status === "degraded" ? "deterministic-fallback" : "canonical",
365
443
  originalMessages: messages.length,
366
444
  compressedMessages: outputMessages.length,
367
445
  originalTokens: estimatedTokens(messages),
368
446
  compressedTokens: estimatedTokens(outputMessages),
369
- saved: Math.max(0, estimatedTokens(messages) - estimatedTokens(outputMessages)),
447
+ saved: Math.max(
448
+ 0,
449
+ estimatedTokens(messages) - estimatedTokens(outputMessages),
450
+ ),
370
451
  canonicalAlreadySettled: true,
371
452
  canonicalReceipt: receipt,
372
453
  },