chainlesschain 0.166.115 → 0.166.118

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 (207) hide show
  1. package/README.md +43 -5
  2. package/package.json +4 -4
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/.build-hash +1 -1
  6. package/src/assets/web-panel/assets/{AIOps-BsoSoDNb.js → AIOps-BGySwMIP.js} +1 -1
  7. package/src/assets/web-panel/assets/{ActionButton-Dcx7Gm5t.js → ActionButton-Chn7fBLr.js} +1 -1
  8. package/src/assets/web-panel/assets/{Analytics-S1hsBIz3.js → Analytics-ORH7UkGa.js} +3 -3
  9. package/src/assets/web-panel/assets/{AppLayout-B2j067qM.js → AppLayout-8xV4jWjP.js} +5 -5
  10. package/src/assets/web-panel/assets/{Artifacts-D5iGV9ic.js → Artifacts-26SBK-x-.js} +1 -1
  11. package/src/assets/web-panel/assets/{Audit-C8ChVvXu.js → Audit-CtXpqbXg.js} +1 -1
  12. package/src/assets/web-panel/assets/{BackgroundAgents-Cg97AAJS.js → BackgroundAgents-C5zLvQis.js} +1 -1
  13. package/src/assets/web-panel/assets/{Backup-CyxU9IUg.js → Backup-C93xY4vO.js} +1 -1
  14. package/src/assets/web-panel/assets/{BaseInput-CKlWjA8I.js → BaseInput-DpVCHfAn.js} +1 -1
  15. package/src/assets/web-panel/assets/{Chat-C-EqZza6.js → Chat-DM0LblR2.js} +5 -5
  16. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BRFiXKPX.js → ChatBubbleRenderer-unlQUF1T.js} +1 -1
  17. package/src/assets/web-panel/assets/{Checkbox-kkI13tSJ.js → Checkbox-BsAt3cKR.js} +1 -1
  18. package/src/assets/web-panel/assets/{Codegen-NlqEDwHK.js → Codegen-E_kp4KFd.js} +1 -1
  19. package/src/assets/web-panel/assets/{Col-CfepEu79.js → Col-6msR3T6I.js} +1 -1
  20. package/src/assets/web-panel/assets/{Community-BRo0qLXM.js → Community-PyX9c5D-.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compact-BMu8TP0E.js → Compact-7G1bVDSH.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compliance-B7Q3Moef.js → Compliance-DcHN7GlD.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cowork-BVwt7Xmc.js → Cowork-WUIHJYDx.js} +3 -3
  24. package/src/assets/web-panel/assets/{Cron-CgBv20Qy.js → Cron-CWgCbptg.js} +2 -2
  25. package/src/assets/web-panel/assets/{Crosschain-CwcSBJk2.js → Crosschain-BzKZ6roD.js} +1 -1
  26. package/src/assets/web-panel/assets/{DID-d20rCiIm.js → DID-r7zxeItn.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dashboard-PpZaUYpS.js → Dashboard-D3pBiN2H.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dropdown-DjsLdX_Z.js → Dropdown-C4otRJlZ.js} +1 -1
  29. package/src/assets/web-panel/assets/{EmailListRenderer-CaPkrtxn.js → EmailListRenderer-CzDTC8lm.js} +1 -1
  30. package/src/assets/web-panel/assets/{EvolutionSettings-DDY8cQnE.js → EvolutionSettings-DGkXiIs-.js} +1 -1
  31. package/src/assets/web-panel/assets/{FamilyGuardDashboard-VQavMjyj.js → FamilyGuardDashboard-BKdEyuiR.js} +1 -1
  32. package/src/assets/web-panel/assets/{Federation-D0GvKQgI.js → Federation-dsI-xcpf.js} +1 -1
  33. package/src/assets/web-panel/assets/{FormItemContext-Dl_TWHmb.js → FormItemContext-CEEb1fMR.js} +1 -1
  34. package/src/assets/web-panel/assets/{GenericCardRenderer-Bny2uagG.js → GenericCardRenderer-D_mfO3Ts.js} +1 -1
  35. package/src/assets/web-panel/assets/{Git-B01KXq47.js → Git-CBwr2ZI3.js} +2 -2
  36. package/src/assets/web-panel/assets/{Governance-F4c4Vwo1.js → Governance-D-Wy2Jjr.js} +1 -1
  37. package/src/assets/web-panel/assets/{Inference-_025Q-8K.js → Inference-B4Yk_IRx.js} +1 -1
  38. package/src/assets/web-panel/assets/{KnowledgeGraph-DwbTmQb1.js → KnowledgeGraph-DoI7bi6m.js} +1 -1
  39. package/src/assets/web-panel/assets/{Logs-CnNo0hCm.js → Logs-Ce1IiKAj.js} +2 -2
  40. package/src/assets/web-panel/assets/MarkdownRenderer-GND_8y0V.js +1 -0
  41. package/src/assets/web-panel/assets/{Marketplace-Dkz5bv7F.js → Marketplace-CsIEByzK.js} +1 -1
  42. package/src/assets/web-panel/assets/{McpTools-CBtRwDW_.js → McpTools-_DRzjcIn.js} +3 -3
  43. package/src/assets/web-panel/assets/{Memory-Y9jnyTb7.js → Memory-zvLpyi__.js} +2 -2
  44. package/src/assets/web-panel/assets/{MobileBridge-Br1urkOz.js → MobileBridge-DXd1ik2Z.js} +1 -1
  45. package/src/assets/web-panel/assets/{MobileProjects-DnsyuerX.js → MobileProjects-DKh2q-Y9.js} +1 -1
  46. package/src/assets/web-panel/assets/{Mtc-he3ZzieF.js → Mtc-Ct-fhtIx.js} +4 -4
  47. package/src/assets/web-panel/assets/{MtcAudit-BadphAuN.js → MtcAudit-J4zY3Oqk.js} +2 -2
  48. package/src/assets/web-panel/assets/{Multisig-3_pVLymK.js → Multisig-B2HJMCKe.js} +3 -3
  49. package/src/assets/web-panel/assets/{NLProgramming-DmtmHfsI.js → NLProgramming-CwcSmU4q.js} +1 -1
  50. package/src/assets/web-panel/assets/{Notes-CE4L2O55.js → Notes-Da53L6wb.js} +4 -4
  51. package/src/assets/web-panel/assets/{NotificationSettings-B7QmfJn9.js → NotificationSettings-BxhufdrA.js} +1 -1
  52. package/src/assets/web-panel/assets/{OrderTableRenderer-O0wRSyJ0.js → OrderTableRenderer-BoFwohAi.js} +1 -1
  53. package/src/assets/web-panel/assets/{Organization-BrlMSsyT.js → Organization-MIsMrUes.js} +4 -4
  54. package/src/assets/web-panel/assets/{Overflow-CY4ULPrZ.js → Overflow-Dy2P4v3q.js} +1 -1
  55. package/src/assets/web-panel/assets/{P2P-kIANZYKd.js → P2P-CD9Sxn2y.js} +2 -2
  56. package/src/assets/web-panel/assets/{PdhVaultBrowser-DEgB4rvF.js → PdhVaultBrowser-BvBWgfG0.js} +5 -5
  57. package/src/assets/web-panel/assets/{Permissions-CWxywRp5.js → Permissions-CwOlDRis.js} +4 -4
  58. package/src/assets/web-panel/assets/{PersonalDataHub-DAg7iCbr.js → PersonalDataHub-CZYaxEpv.js} +4 -4
  59. package/src/assets/web-panel/assets/{Pipeline-Brc6ONnR.js → Pipeline-kLU7PUbB.js} +1 -1
  60. package/src/assets/web-panel/assets/{Privacy-CcinYTL8.js → Privacy-BVRycSiI.js} +1 -1
  61. package/src/assets/web-panel/assets/{ProjectInit-Bz8XEsom.js → ProjectInit-DP3pr7uJ.js} +2 -2
  62. package/src/assets/web-panel/assets/{ProjectSettings-CsOMlSTZ.js → ProjectSettings-CACaDYjs.js} +2 -2
  63. package/src/assets/web-panel/assets/Projects-CB1k4zTC.js +1 -0
  64. package/src/assets/web-panel/assets/{Providers-CeunOQiH.js → Providers-D7Y9WHRE.js} +1 -1
  65. package/src/assets/web-panel/assets/{QrScannerModal-CN2a2_Fb.js → QrScannerModal-CeP8xzs1.js} +1 -1
  66. package/src/assets/web-panel/assets/{QuickAsk-CVeLif3e.js → QuickAsk-iJVFrhZ2.js} +1 -1
  67. package/src/assets/web-panel/assets/{Recommend-1k9WOEGM.js → Recommend-DmTpnagw.js} +1 -1
  68. package/src/assets/web-panel/assets/{RemoteSession-Q8UCqIMw.js → RemoteSession-C6ek8Uni.js} +2 -2
  69. package/src/assets/web-panel/assets/{Reputation-CkrCgXKM.js → Reputation-CPfwc9de.js} +1 -1
  70. package/src/assets/web-panel/assets/{Row-JFdvuTzi.js → Row-C1wwtSMJ.js} +1 -1
  71. package/src/assets/web-panel/assets/{RssFeed-C74JHCmk.js → RssFeed-BiDJsqaH.js} +3 -3
  72. package/src/assets/web-panel/assets/{Search-DrJiVO1T.js → Search-BF6Aon95.js} +1 -1
  73. package/src/assets/web-panel/assets/{Security-BJzNlSJq.js → Security-Bps0XnV4.js} +3 -3
  74. package/src/assets/web-panel/assets/{Services-D4TLMnJm.js → Services-uf92smGR.js} +2 -2
  75. package/src/assets/web-panel/assets/{Skeleton-cswTDqhh.js → Skeleton-DQd4eVWW.js} +1 -1
  76. package/src/assets/web-panel/assets/{Skills-Bv0rM1BS.js → Skills-DgamiYa5.js} +1 -1
  77. package/src/assets/web-panel/assets/{Sla-D9rE7hNh.js → Sla-CF1IVIrm.js} +1 -1
  78. package/src/assets/web-panel/assets/SpeechSettings-Bzxmjbpc.js +1 -0
  79. package/src/assets/web-panel/assets/{SyncSettings-BwnMG8kq.js → SyncSettings-B8zKauiq.js} +2 -2
  80. package/src/assets/web-panel/assets/{Tasks-wJvU24cB.js → Tasks-DPKV_xSt.js} +1 -1
  81. package/src/assets/web-panel/assets/{Templates-CZbRU3tN.js → Templates-BikeSZIF.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tenant-_jbpFJPZ.js → Tenant-CEaUaDkJ.js} +1 -1
  83. package/src/assets/web-panel/assets/{Terminal-BzNm5WKZ.js → Terminal-ZPgOSQ_q.js} +3 -3
  84. package/src/assets/web-panel/assets/{TimelineRenderer-bmybWjuS.js → TimelineRenderer-DmyB4Udk.js} +1 -1
  85. package/src/assets/web-panel/assets/{Tokens-o1WDcqVQ.js → Tokens-g85Pm5TO.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trigger-BB1D6sIB.js → Trigger-D202hx9a.js} +1 -1
  87. package/src/assets/web-panel/assets/{Trust-CLxdCfy2.js → Trust-DzvQYVFy.js} +1 -1
  88. package/src/assets/web-panel/assets/{UkeySign-B9LS6vS0.js → UkeySign-KRzwddVg.js} +1 -1
  89. package/src/assets/web-panel/assets/{VideoEditing-Bg0-wxjz.js → VideoEditing-IRBXLO2z.js} +1 -1
  90. package/src/assets/web-panel/assets/{Wallet-Bw0G2F6P.js → Wallet-DSf5KPgQ.js} +4 -4
  91. package/src/assets/web-panel/assets/{WebAuthn-irEiNY9b.js → WebAuthn-DNPxLTCc.js} +5 -5
  92. package/src/assets/web-panel/assets/{WorkflowEditor-Bh08FbJs.js → WorkflowEditor-C3wAtVcK.js} +1 -1
  93. package/src/assets/web-panel/assets/{addon-fit-CK6X9sAG.js → addon-fit-CbkjSUJl.js} +1 -1
  94. package/src/assets/web-panel/assets/{chat-De-FPjVT.js → chat-q3XXUtv2.js} +1 -1
  95. package/src/assets/web-panel/assets/{colors-ygdyvinU.js → colors-CF54SNei.js} +1 -1
  96. package/src/assets/web-panel/assets/{compact-item-BQ9jH9KV.js → compact-item-BaRkvZuT.js} +1 -1
  97. package/src/assets/web-panel/assets/{createContext-BFuVSyox.js → createContext-CDR9hsfs.js} +1 -1
  98. package/src/assets/web-panel/assets/devWarning-1LO-NplX.js +1 -0
  99. package/src/assets/web-panel/assets/{hasIn-i19GtR1P.js → hasIn-DlC--S8R.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DS1IwwGL.js → index-B0Ptc7yu.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-B1IsP_JO.js → index-B0V9rgdu.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CWfgeaG4.js → index-BEiUlFKb.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DTY20pWu.js → index-BJO0n1LQ.js} +1 -1
  104. package/src/assets/web-panel/assets/index-BLaJsev4.js +1 -0
  105. package/src/assets/web-panel/assets/index-BLmviChG.js +1 -0
  106. package/src/assets/web-panel/assets/{index-IXkif6J_.js → index-BU5DJqk7.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BVhtukYX.js → index-BY-Tf3OM.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BKlU5VZy.js → index-BZrE0Go8.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Bw5pTpnI.js → index-BizdX2X5.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BGMxK155.js → index-C87Yr3h1.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DVnFgasM.js → index-C9Wypz9e.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C61w3omz.js → index-CAoG_E-q.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-l5-J0jHx.js → index-CAxSyMrF.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-28DjsABm.js → index-CC5HjNM6.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BPUCvc8i.js → index-CNZQEZ9g.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CpdXhhMY.js → index-CPvIhha6.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DAboGZTw.js → index-CR_wqMGy.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DL7ewjD2.js → index-CSClXoB3.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-Bhf-MuUh.js → index-CZ8azVgB.js} +3 -3
  120. package/src/assets/web-panel/assets/{index-BaaydJcC.js → index-Ccc5z8eJ.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-B2LieObB.js → index-CeiKbM3a.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-We2nK3ju.js → index-Cl6av3X7.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-m8waSAyv.js → index-CtGfeD7E.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-cDJsyAkI.js → index-Ctid12Gq.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DlwxUZQL.js → index-D0H-N0uG.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BBYiCI1d.js → index-D0vIgprF.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-_9tUBcLm.js → index-D4wUDFRg.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-4HoFz1MA.js → index-DJFipyK7.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-Cq9k4-Ws.js → index-DX2REKNp.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DuuOX5u3.js → index-Dc3gD0cw.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DgjLaB7k.js → index-DiQzer2R.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CMNjaSir.js → index-DntKLOs9.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-vXtH3o6O.js → index-Dplhl6gh.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BLMtCKAY.js → index-Dq8q_PWB.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-CXrk8OYO.js → index-IVQdOBNN.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-CBVcGaxk.js → index-Kerduyao.js} +1 -1
  137. package/src/assets/web-panel/assets/{index-BKblSCL9.js → index-W6cLGjpW.js} +1 -1
  138. package/src/assets/web-panel/assets/{index-CgoSgmjK.js → index-qZDNFll9.js} +1 -1
  139. package/src/assets/web-panel/assets/{initDefaultProps-B_EZHeqN.js → initDefaultProps-Ccz7v71u.js} +1 -1
  140. package/src/assets/web-panel/assets/{markdown-Yo_c6Krv.js → markdown-Bq2x0XsR.js} +1 -1
  141. package/src/assets/web-panel/assets/markdown-DUKxbhE4.js +51 -0
  142. package/src/assets/web-panel/assets/{motion-BrVb_Gy1.js → motion-BlCLpVDp.js} +1 -1
  143. package/src/assets/web-panel/assets/{move-CKxVRL_J.js → move-B80G7fLU.js} +1 -1
  144. package/src/assets/web-panel/assets/{mtc-parser-C80rvQ1J.js → mtc-parser-Djw08NJh.js} +1 -1
  145. package/src/assets/web-panel/assets/{omit-De5vD7BR.js → omit-Bg_G1eUr.js} +1 -1
  146. package/src/assets/web-panel/assets/{pickAttrs-BTyEDjth.js → pickAttrs-Df9zYUg2.js} +1 -1
  147. package/src/assets/web-panel/assets/{placementArrow-BWR94AjR.js → placementArrow-DjCDLhJ4.js} +1 -1
  148. package/src/assets/web-panel/assets/{responsiveObserve-1g-Vnibk.js → responsiveObserve--Naz7NgY.js} +1 -1
  149. package/src/assets/web-panel/assets/{slide-Dmg6dYuF.js → slide-CHn3ald-.js} +1 -1
  150. package/src/assets/web-panel/assets/{statusUtils-Ddj6rSab.js → statusUtils-BiGwoIK_.js} +1 -1
  151. package/src/assets/web-panel/assets/{styleChecker-DyP1mPDf.js → styleChecker-Zf2dQx1j.js} +1 -1
  152. package/src/assets/web-panel/assets/{useFlexGapSupport-D3d_0YuY.js → useFlexGapSupport-sLES8nyD.js} +1 -1
  153. package/src/assets/web-panel/assets/{useFs-M3vq-gE2.js → useFs-DV1Hl4qu.js} +1 -1
  154. package/src/assets/web-panel/assets/{usePersonalDataHub-GtP2TgtK.js → usePersonalDataHub-CZXr2Qxg.js} +1 -1
  155. package/src/assets/web-panel/assets/{vnode-BurE2ATQ.js → vnode-e8Eo3Oyl.js} +1 -1
  156. package/src/assets/web-panel/assets/{xterm-BZcWGsqw.js → xterm-zbskxxGA.js} +1 -1
  157. package/src/assets/web-panel/assets/{zoom-Ch-ViiDe.js → zoom-B8A6xKMF.js} +1 -1
  158. package/src/assets/web-panel/index.html +1 -1
  159. package/src/commands/compact.js +7 -2
  160. package/src/data/changelog.json +27 -1
  161. package/src/harness/jsonl-session-store.js +80 -74
  162. package/src/harness/prompt-compressor.js +57 -3
  163. package/src/lib/artifact-store.js +129 -20
  164. package/src/lib/bounded-artifact-file-read.js +128 -46
  165. package/src/lib/context-memory-kernel/context-image-transport.js +248 -0
  166. package/src/lib/context-memory-kernel/jsonl-session-context-port.js +4 -1
  167. package/src/lib/context-memory-kernel/live-compaction.js +40 -10
  168. package/src/lib/context-memory-kernel/message-adapter.js +80 -10
  169. package/src/lib/context-memory-kernel/message-bundle-store.js +1140 -0
  170. package/src/lib/context-memory-kernel/provider-context.js +23 -8
  171. package/src/lib/evolution/agent-evolution-ingress.js +103 -19
  172. package/src/lib/evolution/agent-evolution-runtime-composition.js +65 -27
  173. package/src/lib/evolution/agent-model-projection.js +90 -18
  174. package/src/lib/evolution/evidence-json-text.js +341 -42
  175. package/src/lib/evolution/evolution-artifact-ports.js +1005 -83
  176. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +59 -15
  177. package/src/lib/evolution/evolution-evidence-projector.js +153 -16
  178. package/src/lib/evolution/evolution-evidence-storage-layout.js +115 -0
  179. package/src/lib/evolution/evolution-file-witness.js +7 -3
  180. package/src/lib/evolution/evolution-ledger-file-manifest-catalog.js +6 -2
  181. package/src/lib/evolution/evolution-ledger-file-manifest-head-store.js +6 -2
  182. package/src/lib/evolution/evolution-ledger.js +226 -55
  183. package/src/lib/evolution/evolution-private-storage.js +20 -0
  184. package/src/lib/evolution/evolution-run-ledger-adapter.js +298 -11
  185. package/src/lib/evolution/evolution-windows-directory-durability.js +215 -32
  186. package/src/lib/evolution/local-ui-evolution-runtime.js +3 -38
  187. package/src/lib/evolution/local-ui-signing-authority.js +69 -0
  188. package/src/lib/image-token-estimate.js +59 -0
  189. package/src/lib/ollama-provider-fetch.js +33 -0
  190. package/src/lib/provider-stream.js +14 -13
  191. package/src/lib/read-file-loop-guard.js +7 -4
  192. package/src/lib/session-history-origins.js +94 -35
  193. package/src/lib/session-message-provenance.js +26 -2
  194. package/src/lib/session-runtime-retention.js +10 -1
  195. package/src/lib/session-transcript-history.js +5 -1
  196. package/src/lib/session-transcript-migration.js +67 -12
  197. package/src/lib/storage-failure-cause-codes.js +449 -0
  198. package/src/lib/tool-result-preview.js +276 -0
  199. package/src/runtime/agent-core.js +111 -92
  200. package/src/runtime/headless-stream.js +121 -27
  201. package/src/assets/web-panel/assets/MarkdownRenderer-D8_iZief.js +0 -1
  202. package/src/assets/web-panel/assets/Projects-BeSOM6wi.js +0 -1
  203. package/src/assets/web-panel/assets/SpeechSettings-Bfhvin8B.js +0 -1
  204. package/src/assets/web-panel/assets/devWarning-c2I2Rn4_.js +0 -1
  205. package/src/assets/web-panel/assets/index-CTs4dYcV.js +0 -1
  206. package/src/assets/web-panel/assets/index-DeuvaW15.js +0 -1
  207. package/src/assets/web-panel/assets/markdown-CsiA8-E5.js +0 -50
@@ -0,0 +1,449 @@
1
+ import { types } from "node:util";
2
+
3
+ // Fixed identifiers only. An error's text, stack, paths and arbitrary code
4
+ // strings are never retained by this diagnostic projection.
5
+ const CODES = new Map(
6
+ [
7
+ "CC_ARTIFACT_BOUNDED_READ_FAILED",
8
+ "SECURE_FILE_IDENTITY_INVALID_PARENT",
9
+ "SECURE_FILE_IDENTITY_PARENT_RACE",
10
+ "CC_EVOLUTION_ARTIFACT_AUTHORITY_DENIED",
11
+ "CC_EVOLUTION_ARTIFACT_EXPIRED",
12
+ "CC_EVOLUTION_ARTIFACT_INTEGRITY_FAILED",
13
+ "CC_EVOLUTION_ARTIFACT_INVALID",
14
+ "CC_EVOLUTION_ARTIFACT_NOT_FOUND",
15
+ "CC_EVOLUTION_ARTIFACT_SIGNATURE_INVALID",
16
+ "CC_EVOLUTION_ARTIFACT_STORE_FAILED",
17
+ "CC_EVOLUTION_ARTIFACT_TYPE_DENIED",
18
+ "CC_EVOLUTION_LEDGER_ARTIFACT_INVALID",
19
+ "CC_EVOLUTION_LEDGER_ARTIFACT_UNAVAILABLE",
20
+ "CC_EVOLUTION_LEDGER_AUDIT_INVALID",
21
+ "CC_EVOLUTION_LEDGER_CAPACITY_EXCEEDED",
22
+ "CC_EVOLUTION_LEDGER_CLOCK_FAILED",
23
+ "CC_EVOLUTION_LEDGER_COMMIT_UNKNOWN",
24
+ "CC_EVOLUTION_LEDGER_CORRUPT",
25
+ "CC_EVOLUTION_LEDGER_CRASH_HOOK_INVALID",
26
+ "CC_EVOLUTION_LEDGER_DURABILITY_UNAVAILABLE",
27
+ "CC_EVOLUTION_LEDGER_EVENT_CONFLICT",
28
+ "CC_EVOLUTION_LEDGER_HEAD_CONFLICT",
29
+ "CC_EVOLUTION_LEDGER_LOCK_UNAVAILABLE",
30
+ "CC_EVOLUTION_LEDGER_PREFIX_READER_FAILED",
31
+ "CC_EVOLUTION_LEDGER_RANDOM_FAILED",
32
+ "CC_EVOLUTION_LEDGER_RECEIPT_INVALID",
33
+ "CC_EVOLUTION_LEDGER_SCHEMA_INVALID",
34
+ "CC_EVOLUTION_LEDGER_SIGNATURE_INVALID",
35
+ "CC_EVOLUTION_LEDGER_SIGNING_FAILED",
36
+ "CC_EVOLUTION_LEDGER_STORE_UNSAFE",
37
+ "CC_EVOLUTION_LEDGER_TRUST_INVALID",
38
+ "CC_EVOLUTION_LEDGER_TRUST_MISMATCH",
39
+ "CC_EVOLUTION_LEDGER_TRUST_PORT_REQUIRED",
40
+ "CC_EVOLUTION_LEDGER_V2_REQUIRED",
41
+ "CC_EVOLUTION_LEDGER_WITNESS_CONFLICT",
42
+ "CC_EVOLUTION_LEDGER_WITNESS_INVALID",
43
+ "CC_EVOLUTION_LEDGER_WITNESS_REQUIRED",
44
+ "CC_EVOLUTION_LEDGER_WITNESS_UNAVAILABLE",
45
+ "CC_EVOLUTION_LEDGER_WRITE_FAILED",
46
+ "CC_EVOLUTION_RUN_LEDGER_CONFLICT",
47
+ "CC_EVOLUTION_RUN_LEDGER_CORRUPT",
48
+ "CONFIG_HOME_UNSAFE",
49
+ "EACCES",
50
+ "EBUSY",
51
+ "EEXIST",
52
+ "EIO",
53
+ "EISDIR",
54
+ "EMFILE",
55
+ "ENFILE",
56
+ "ENOENT",
57
+ "ENOSPC",
58
+ "ENOTDIR",
59
+ "EPERM",
60
+ "EROFS",
61
+ "ETIMEDOUT",
62
+ ].map((code) => [code, code]),
63
+ );
64
+ const MAX_CAUSES = 6;
65
+ // Match only fixed source literals paired with their own error code. These
66
+ // tokens identify guard blocks; composite guards do not identify a field or
67
+ // prove clock rollback. Observed messages are never retained by diagnostics.
68
+ const REASONS = new Map([
69
+ [
70
+ "CC_ARTIFACT_BOUNDED_READ_FAILED",
71
+ new Map([
72
+ ["artifact path and descriptor identities differ", "bounded-path-handle"],
73
+ [
74
+ "artifact descriptor changed during bounded read",
75
+ "bounded-descriptor-changed",
76
+ ],
77
+ [
78
+ "artifact pathname changed during bounded read",
79
+ "bounded-pathname-changed",
80
+ ],
81
+ ["artifact path is not physically canonical", "bounded-path-canonical"],
82
+ ]),
83
+ ],
84
+ [
85
+ "CC_EVOLUTION_ARTIFACT_INTEGRITY_FAILED",
86
+ new Map([
87
+ ["ArtifactStore root physical identity changed", "store-root-identity"],
88
+ [
89
+ "ArtifactStore files root physical identity changed",
90
+ "store-files-identity",
91
+ ],
92
+ [
93
+ "ArtifactStore sealed directory identity or reader changed",
94
+ "sealed-directory-or-reader",
95
+ ],
96
+ [
97
+ "stored artifact history directory identity changed",
98
+ "history-directory-identity",
99
+ ],
100
+ [
101
+ "ArtifactStore index physical identity changed",
102
+ "index-physical-changed",
103
+ ],
104
+ [
105
+ "ArtifactStore index realpath changed or escaped its root",
106
+ "index-realpath-changed",
107
+ ],
108
+ [
109
+ "ArtifactStore index descriptor is replaced or oversized",
110
+ "index-path-handle",
111
+ ],
112
+ [
113
+ "ArtifactStore index changed while its descriptor was read",
114
+ "index-descriptor-changed",
115
+ ],
116
+ [
117
+ "ArtifactStore index pathname changed during descriptor read",
118
+ "index-pathname-changed",
119
+ ],
120
+ [
121
+ "ArtifactStore index generation changed during readback",
122
+ "index-generation-changed",
123
+ ],
124
+ [
125
+ "ArtifactStore.get is not bound to the trusted index snapshot",
126
+ "index-get-unbound",
127
+ ],
128
+ [
129
+ "ArtifactStore index entry was replaced during readback",
130
+ "index-entry-changed",
131
+ ],
132
+ [
133
+ "ArtifactStore index entry was replaced during ledger readback",
134
+ "index-ledger-entry-changed",
135
+ ],
136
+ [
137
+ "ArtifactStore index changed during ledger batch readback",
138
+ "index-batch-changed",
139
+ ],
140
+ [
141
+ "ArtifactStore index changed during ledger history readback",
142
+ "index-history-changed",
143
+ ],
144
+ [
145
+ "ArtifactStore post-read integrity verification threw",
146
+ "artifact-post-read-hook",
147
+ ],
148
+ [
149
+ "stored artifact bytes do not match the signed recordDigest",
150
+ "artifact-record-digest",
151
+ ],
152
+ ]),
153
+ ],
154
+ [
155
+ "CC_EVOLUTION_ARTIFACT_EXPIRED",
156
+ new Map([
157
+ [
158
+ "evolution artifact envelope is not currently valid",
159
+ "envelope-validity-window",
160
+ ],
161
+ [
162
+ "artifact authority expired before envelope authentication completed",
163
+ "authentication-clock-window",
164
+ ],
165
+ [
166
+ "artifact authority expired before canonical bytes could be released",
167
+ "release-clock-window",
168
+ ],
169
+ [
170
+ "artifact publish authority expired before envelope signing completed",
171
+ "signing-clock-window",
172
+ ],
173
+ [
174
+ "artifact authority expired before ledger batch release",
175
+ "batch-clock-window",
176
+ ],
177
+ [
178
+ "artifact authority expired before ledger history release",
179
+ "history-clock-window",
180
+ ],
181
+ ]),
182
+ ],
183
+ [
184
+ "CC_EVOLUTION_ARTIFACT_AUTHORITY_DENIED",
185
+ new Map([
186
+ ["artifact authority clock moved backwards", "authority-clock-backward"],
187
+ [
188
+ "current artifact authority denied or returned an unbound decision",
189
+ "authority-decision-unbound",
190
+ ],
191
+ [
192
+ "artifact envelope is stale under current policy or revocation authority",
193
+ "authority-policy-stale",
194
+ ],
195
+ ]),
196
+ ],
197
+ ]);
198
+ const TAGGED_REASON_CODES = new Map(
199
+ [
200
+ "auth-clock-backward",
201
+ "auth-envelope-expired",
202
+ "auth-authority-lease-expired",
203
+ "release-clock-backward",
204
+ "release-envelope-expired",
205
+ "release-authority-lease-expired",
206
+ ].map((reason) => [reason, "CC_EVOLUTION_ARTIFACT_EXPIRED"]),
207
+ );
208
+ const FAILURE_REASONS = new WeakMap();
209
+ const REASON_CODES = new Map([
210
+ ...[...REASONS].flatMap(([code, messages]) =>
211
+ [...messages.values()].map((reason) => [reason, code]),
212
+ ),
213
+ ...TAGGED_REASON_CODES,
214
+ ]);
215
+ const REASON_MARKER = " [storage_reason: ";
216
+ const MARKER = " [storage_cause_codes: ";
217
+ const STAGE_MARKER = " [storage_stage: ";
218
+ const FAILURE_STAGES = new WeakMap();
219
+ const ARTIFACT_TYPES = new Set([
220
+ "source-evidence",
221
+ "model-projection",
222
+ "trusted-projection",
223
+ "receipt",
224
+ "evidence",
225
+ "other",
226
+ ]);
227
+ const PHASES = new Set([
228
+ "validate",
229
+ "pre-index",
230
+ "authority",
231
+ "sign",
232
+ "publish",
233
+ "post-index",
234
+ "authentication",
235
+ "read-bytes",
236
+ "final-lease",
237
+ "receipt",
238
+ ]);
239
+
240
+ /** Error-path observation only: preserve the original error and its causes. */
241
+ export function recordStorageFailureStage(error, artifactType, phase) {
242
+ try {
243
+ if (
244
+ error !== null &&
245
+ typeof error === "object" &&
246
+ !types.isProxy(error) &&
247
+ typeof artifactType === "string" &&
248
+ PHASES.has(phase)
249
+ ) {
250
+ FAILURE_STAGES.set(
251
+ error,
252
+ Object.freeze({
253
+ artifactType: ARTIFACT_TYPES.has(artifactType)
254
+ ? artifactType
255
+ : "other",
256
+ phase,
257
+ }),
258
+ );
259
+ }
260
+ } catch {
261
+ // Diagnostics cannot replace the original exception.
262
+ }
263
+ return error;
264
+ }
265
+
266
+ export function storageFailureStage(error) {
267
+ try {
268
+ const seen = new Set();
269
+ let current = error;
270
+ for (let depth = 0; depth < MAX_CAUSES && current; depth++) {
271
+ if (seen.has(current)) break;
272
+ seen.add(current);
273
+ const stage = FAILURE_STAGES.get(current);
274
+ if (stage) return stage;
275
+ current = data(current, "cause");
276
+ }
277
+ } catch {
278
+ // Observation must never change the original error or exit outcome.
279
+ }
280
+ return null;
281
+ }
282
+
283
+ function data(value, key) {
284
+ for (let depth = 0; depth < 4 && value !== null; depth++) {
285
+ if (typeof value !== "object" || types.isProxy(value)) return undefined;
286
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
287
+ if (descriptor) return "value" in descriptor ? descriptor.value : undefined;
288
+ value = Object.getPrototypeOf(value);
289
+ }
290
+ return undefined;
291
+ }
292
+
293
+ /** Optional diagnostics; this never adjudicates a failure or grants a retry. */
294
+ export function storageFailureCauseCodes(error) {
295
+ const codes = [];
296
+ try {
297
+ const seen = new Set();
298
+ let current = error;
299
+ for (let depth = 0; depth < MAX_CAUSES && current; depth++) {
300
+ if (seen.has(current)) break;
301
+ seen.add(current);
302
+ const known = CODES.get(data(current, "code"));
303
+ if (known && !codes.includes(known)) codes.push(known);
304
+ current = data(current, "cause");
305
+ }
306
+ } catch {
307
+ // Observation must never change the original error or exit outcome.
308
+ }
309
+ return Object.freeze(codes);
310
+ }
311
+
312
+ export function storageFailureCauseSuffix(error) {
313
+ const codes = storageFailureCauseCodes(error);
314
+ const stage = storageFailureStage(error);
315
+ const reason = storageFailureReason(error);
316
+ return (
317
+ (reason && codes.includes(REASON_CODES.get(reason))
318
+ ? `${REASON_MARKER}${reason}]`
319
+ : "") +
320
+ (stage ? `${STAGE_MARKER}${stage.artifactType}/${stage.phase}]` : "") +
321
+ (codes.length ? `${MARKER}${codes.join(" -> ")}]` : "")
322
+ );
323
+ }
324
+
325
+ // Unlike legacy cause-code projection, reasons require own data properties.
326
+ // Callers reject proxies before this helper; no prototype traversal or getters.
327
+ function ownData(value, key) {
328
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
329
+ return descriptor && "value" in descriptor ? descriptor.value : undefined;
330
+ }
331
+
332
+ /** Preserve the original error; retain only an allow-listed branch token. */
333
+ export function recordStorageFailureReason(error, reason) {
334
+ try {
335
+ if (
336
+ error !== null &&
337
+ typeof error === "object" &&
338
+ !types.isProxy(error) &&
339
+ TAGGED_REASON_CODES.has(reason) &&
340
+ ownData(error, "code") === TAGGED_REASON_CODES.get(reason)
341
+ )
342
+ FAILURE_REASONS.set(error, reason);
343
+ } catch {
344
+ // Diagnostics cannot replace the original exception.
345
+ }
346
+ return error;
347
+ }
348
+
349
+ /** Prefer a fixed branch tag; otherwise keep the deepest exact-message match. */
350
+ export function storageFailureReason(error) {
351
+ let reason = null;
352
+ let taggedReason = null;
353
+ try {
354
+ const seen = new Set();
355
+ let current = error;
356
+ for (let depth = 0; depth < MAX_CAUSES; depth++) {
357
+ if (
358
+ current === null ||
359
+ typeof current !== "object" ||
360
+ types.isProxy(current) ||
361
+ seen.has(current)
362
+ )
363
+ break;
364
+ seen.add(current);
365
+ const code = ownData(current, "code");
366
+ const tagged = FAILURE_REASONS.get(current);
367
+ if (tagged && TAGGED_REASON_CODES.get(tagged) === code)
368
+ taggedReason = tagged;
369
+ const messages = typeof code === "string" ? REASONS.get(code) : undefined;
370
+ if (messages) {
371
+ const message = ownData(current, "message");
372
+ const matched =
373
+ typeof message === "string" ? messages.get(message) : undefined;
374
+ if (matched) reason = matched;
375
+ }
376
+ current = ownData(current, "cause");
377
+ }
378
+ } catch {
379
+ // Observation must never change the original error or exit outcome.
380
+ }
381
+ return taggedReason ?? reason;
382
+ }
383
+
384
+ /** Accept only a fixed reason followed by the complete legacy suffix. */
385
+ export function storageFailureReasonFromMessage(message) {
386
+ if (typeof message !== "string") return null;
387
+ const tail = message.slice(-1024);
388
+ const offset = tail.lastIndexOf(REASON_MARKER);
389
+ if (offset < 0) return null;
390
+ const end = tail.indexOf("]", offset + REASON_MARKER.length);
391
+ if (end < 0) return null;
392
+ const candidate = tail.slice(offset + REASON_MARKER.length, end);
393
+ const code = REASON_CODES.get(candidate);
394
+ if (!code) return null;
395
+ const remainder = tail.slice(end + 1);
396
+ const codes = storageFailureCodesFromMessage(remainder);
397
+ if (!codes.includes(code)) return null;
398
+ const stage = storageFailureStageFromMessage(remainder);
399
+ const expected =
400
+ (stage ? `${STAGE_MARKER}${stage.artifactType}/${stage.phase}]` : "") +
401
+ `${MARKER}${codes.join(" -> ")}]`;
402
+ if (remainder !== expected) return null;
403
+ // Return the table-owned token rather than retaining untrusted message text.
404
+ for (const reason of REASON_CODES.keys()) {
405
+ if (reason === candidate) return reason;
406
+ }
407
+ return null;
408
+ }
409
+
410
+ /** Fixed stage identifiers only; accept a complete marker at the suffix. */
411
+ export function storageFailureStageFromMessage(message) {
412
+ if (typeof message !== "string") return null;
413
+ const tail = message.slice(-1024);
414
+ const offset = tail.lastIndexOf(STAGE_MARKER);
415
+ if (offset < 0) return null;
416
+ const end = tail.indexOf("]", offset + STAGE_MARKER.length);
417
+ if (end < 0) return null;
418
+ const remainder = tail.slice(end + 1);
419
+ if (remainder !== "") {
420
+ const codes = storageFailureCodesFromMessage(remainder);
421
+ if (!codes.length || remainder !== `${MARKER}${codes.join(" -> ")}]`)
422
+ return null;
423
+ }
424
+ const identifiers = tail.slice(offset + STAGE_MARKER.length, end).split("/");
425
+ if (
426
+ identifiers.length !== 2 ||
427
+ !ARTIFACT_TYPES.has(identifiers[0]) ||
428
+ !PHASES.has(identifiers[1])
429
+ )
430
+ return null;
431
+ return Object.freeze({ artifactType: identifiers[0], phase: identifiers[1] });
432
+ }
433
+
434
+ /** Re-project the bounded marker without retaining any preceding error text. */
435
+ export function storageFailureCodesFromMessage(message) {
436
+ if (typeof message !== "string") return Object.freeze([]);
437
+ const tail = message.slice(-1024);
438
+ const offset = tail.lastIndexOf(MARKER);
439
+ if (offset < 0 || !tail.endsWith("]")) return Object.freeze([]);
440
+ const values = tail.slice(offset + MARKER.length, -1).split(" -> ");
441
+ if (values.length < 1 || values.length > MAX_CAUSES) return Object.freeze([]);
442
+ const result = [];
443
+ for (const value of values) {
444
+ const known = CODES.get(value);
445
+ if (!known) return Object.freeze([]);
446
+ if (!result.includes(known)) result.push(known);
447
+ }
448
+ return Object.freeze(result);
449
+ }