chainlesschain 0.164.0 → 0.165.2

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 (228) hide show
  1. package/README.md +248 -2
  2. package/package.json +7 -4
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-D2MEn7fI.js → AIOps-lS1R0Cza.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-lCW_4Gf0.js → ActionButton-BmlgBPsj.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-Bs7i-nsS.js → Analytics-CNKczv1S.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-CK7B6S_j.js → AppLayout-BuZGJARQ.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-C8ILjpyo.js → Artifacts-Dm73Sl-O.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-Bb9cNaWc.js → Audit-BGMW7A5e.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-sC9ooXIf.js → BackgroundAgents-BQ6M54JR.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-D-DrsplT.js → Backup-DBzGP0bR.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-uCNZpwSK.js → BaseInput-D1mLCoOV.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-CsDK1uE9.js → Chat-BUfcN7p8.js} +6 -6
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-OqSDt50w.js → ChatBubbleRenderer-CY5m8ZHg.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-JhTXM1-K.js → Checkbox-Du0Yg5Pi.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-BbzZLnyD.js → Codegen-B2RXziHW.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-D4VW4m4j.js → Col-DWhekOrR.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-BXrYawxV.js → Community-HQhrkon4.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-DCihGy1u.js → Compact-izHNb4uz.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-DlyZ-lk8.js → Compliance-BDwLy41-.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-DvGZrhbO.js → Cowork-DFJhLa7K.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-DUncZi8h.js → Cron-DYY9RG7-.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-C_hLuUcm.js → Crosschain-rr7tJTtv.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-b6YSUqxr.js → DID-D2sfHRLi.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-uvM15Cfb.js → Dashboard-q_eGdhha.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-D1-Nd4qY.js → Dropdown-Cufrh2Bz.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-8ApvL6Zc.js → EmailListRenderer-B-kdv10f.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-LYJt8811.js → FamilyGuardDashboard-D21XjgfG.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-BbI3HGpv.js → Federation-CAwRTLZH.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-DSoEKuFu.js → FormItemContext-vx3daNDF.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-B0S9OWd5.js → GenericCardRenderer-CRWY2wU4.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-DIs9Zhf3.js → Git-Q6SwauyD.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-jzZXrxcl.js → Governance-BJ1q4IQZ.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-JUPjf2ZI.js → Inference-CSWjROgD.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-DxnfJvlP.js → KnowledgeGraph-fzuQsWuY.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-iXiz8BEE.js → Logs-DVF8Mnns.js} +2 -2
  37. package/src/assets/web-panel/assets/MarkdownRenderer-BLif4QSg.js +1 -0
  38. package/src/assets/web-panel/assets/{Marketplace-Y3Xch312.js → Marketplace-BQP7LOA4.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-D7kGGbO7.js → McpTools-BNlJCmNc.js} +4 -4
  40. package/src/assets/web-panel/assets/{Memory-Do_hVxzh.js → Memory-DLLg5WQ4.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-CtrR0Tas.js → MobileBridge-CR2skNAF.js} +1 -1
  42. package/src/assets/web-panel/assets/MobileProjects-BxVavObl.js +1 -0
  43. package/src/assets/web-panel/assets/{Mtc-qo5QCTGd.js → Mtc-B17pgqMI.js} +4 -4
  44. package/src/assets/web-panel/assets/{MtcAudit-cq5mnjYj.js → MtcAudit-4UmV5cIL.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-Bq0MAQHw.js → Multisig-DoMEXEcU.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-DdWE6Vi2.js → NLProgramming-h9DMXFX4.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-BxMBFcIp.js → Notes-Cihn-xX8.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-RTrAcbUe.js → NotificationSettings-BE6ZGa3R.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-DJbpGqzT.js → OrderTableRenderer-CnwojoSI.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-SQzIPdqC.js → Organization-B2vpwmjb.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-02yECh22.js → Overflow-C4z28R0-.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-BNg4pNCM.js → P2P-BVlFkwhW.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-BxPJZsD3.js → PdhVaultBrowser-BXbEdL5B.js} +3 -3
  54. package/src/assets/web-panel/assets/{Permissions-CLnDnPAz.js → Permissions-C28xs4lp.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-C5m0AjGf.js → PersonalDataHub-Dgl_rBjM.js} +4 -4
  56. package/src/assets/web-panel/assets/{Pipeline-VwOf5Dhv.js → Pipeline-3QUIhrKI.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-CC0W2hZd.js → Privacy-8Gh33OZ5.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-Dz893Bob.js → ProjectInit-BNmg4tZi.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-CxQkvl0k.js → ProjectSettings-vgMfeCf9.js} +2 -2
  60. package/src/assets/web-panel/assets/Projects-BhtAVilc.js +1 -0
  61. package/src/assets/web-panel/assets/{Providers-DeB9IkxK.js → Providers-CXoOa8eX.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-OCeoaswn.js → QrScannerModal-BhfTF0oS.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-DenotaAj.js → QuickAsk-C746HEAj.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-Cies_jjI.js → Recommend-BSej8Eo0.js} +1 -1
  65. package/src/assets/web-panel/assets/RemoteSession-f3gmnlG3.js +5 -0
  66. package/src/assets/web-panel/assets/{Reputation-CW0mvxgZ.js → Reputation-CyvybpkN.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-SEd32qZU.js → Row-DwV2PeYn.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-BSwnJ3Lm.js → RssFeed-11GrzjZy.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-xe2m8bkC.js → Search-BjKXkrAY.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-Mq2F9Nro.js → Security-eWiFb9Yk.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-BKGw2V3P.js → Services-CdCsMAtt.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-DW95-Rxf.js → Skeleton-4Q2UTKQ5.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-CHgChCv_.js → Skills-v4rtYrRj.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-tKh6k3R7.js → Sla-CRhsFvd_.js} +1 -1
  75. package/src/assets/web-panel/assets/SpeechSettings-DLjKsDVu.js +1 -0
  76. package/src/assets/web-panel/assets/{SyncSettings-D0Fw8fVL.js → SyncSettings-D16zonl7.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-20x1GB3D.js → Tasks-Xxozz0i_.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-DJ-lts-a.js → Templates-CXJpPtCT.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-BFdGpbs7.js → Tenant-XRV0L1ZF.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-Xpx61vHL.js → Terminal-CYuO1i_w.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-C6UIvyZQ.js → TimelineRenderer-BXqitWsu.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-Dellq08f.js → Tokens-BvPrDHIy.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-VKw8d0J-.js → Trigger-DhCrSTf5.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-DNftdKT5.js → Trust-DmsuZD6K.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-DX9VAKJI.js → UkeySign-D_yrts5C.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-B2h3jO8q.js → VideoEditing-B01ihPrm.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-CjGkof7f.js → Wallet-DpUjKa-N.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-2Zfcu55P.js → WebAuthn-CL07yON6.js} +4 -4
  89. package/src/assets/web-panel/assets/{WorkflowEditor-B9eZ8UxZ.js → WorkflowEditor-CLMflnRr.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-CQNfD-YO.js → chat-DtUqe8h_.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-D4usyFT2.js → colors-DPKrgVfy.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-s4TpjvjX.js → compact-item-BTt2GtOm.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-BRCSvYxj.js → createContext-D_VeUc1J.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-Bj5nUW2v.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-AdkUbkV-.js → hasIn-1kndiylj.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BIoG5yYf.js → index-2eyAXE3d.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-nXyk8GZ9.js → index-4bna2_SR.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B2V-eKfK.js → index-8nz_fmlj.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-D_XBHopw.js → index-B9KvcS7R.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-s_buFMEG.js → index-BAXfRKfG.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DZT36ZYq.js → index-BHpBMWCh.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BMcimU-2.js → index-BaZAbw9A.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DzRjHxEv.js → index-BepLZwgB.js} +1 -1
  104. package/src/assets/web-panel/assets/{index--00U6vXZ.js → index-Bhudc_Ez.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-C7Y8Aluc.js → index-BlDNVgBt.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BtobShro.js → index-By5n8up9.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-Cvyt-zhm.js → index-CHG-KcS4.js} +1 -1
  108. package/src/assets/web-panel/assets/index-CPcM-eqo.js +1 -0
  109. package/src/assets/web-panel/assets/{index-MMN9V6JF.js → index-CX81qSM4.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Bad4VNvz.js → index-CauoBQkH.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CCsM_Ybx.js → index-CcO04eDn.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DARsAyUp.js → index-CtF7EN49.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-C5KAQFPQ.js → index-CzjkKUmR.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-RfMr79MW.js → index-D95OFht7.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DdCB70SS.js → index-DFIZ_1Sf.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CYdoQsa1.js → index-DG2MZQ3f.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BPhkFZ1I.js → index-DJ8vXGOa.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-_IRVsV9X.js → index-Dbbymxpj.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DVKfQ0Ux.js → index-DdkplL9R.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CkwiSLhU.js → index-DfGl8CqG.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CJVEOa4i.js → index-DfKBRdSS.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-C1mJtE6q.js → index-DsJCDUJG.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BgiXR_-_.js → index-Dwqmtk65.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CJCFe2Qf.js → index-DxdTdBix.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C484EJiS.js → index-FzdwcSy2.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-B4JJCfQ2.js → index-GsoUQ2M7.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CQhAVU5t.js → index-brCInrzq.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CKC1t3Ic.js → index-dVc-CXY4.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BQ3DXBtD.js → index-fk2Rjacw.js} +3 -3
  130. package/src/assets/web-panel/assets/{index-Cduu2Hhr.js → index-l1BETrDb.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Bw2MEnUk.js → index-m31Ka8hZ.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D2GjI2oe.js → index-ocf06EVQ.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-CJdQrZth.js → index-sDoMHTNA.js} +1 -1
  134. package/src/assets/web-panel/assets/index-xeSyVoRe.js +1 -0
  135. package/src/assets/web-panel/assets/{initDefaultProps-Blmpk7HL.js → initDefaultProps-CvyYJd7z.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-DPBJMv1n.js → motion-DYZkhUdz.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-ButdzCM7.js → move-slnJRVT1.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-cyRC_QCe.js → mtc-parser-DVc0CKmy.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-1epSV7hz.js → omit-BCXAtHCq.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-DuPY8xJs.js → pickAttrs-DBsemz_K.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-6XZqarhe.js → placementArrow-BRtkJ-nv.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-B40pXBWM.js → responsiveObserve-Cebq7EZn.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-jbZ9Wu4n.js → slide-DT7qvId2.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-BKQQcVy4.js → statusUtils-pQiITLkG.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-NiKfWjUT.js → styleChecker-c-19BVKQ.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-bQUCvPeb.js → useFlexGapSupport-DsS5-0bE.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-CUGji7ph.js → useFs-CxGiMe5n.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-4veyN2N2.js → usePersonalDataHub-D9btVID5.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-1-nLug-Z.js → vnode-CUYFsFEN.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-dhCeRDMo.js → zoom-CXmn_35j.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +1 -1
  153. package/src/commands/cowork.js +559 -62
  154. package/src/commands/plugin.js +819 -64
  155. package/src/commands/session-location.js +318 -7
  156. package/src/constants.js +2 -2
  157. package/src/data/changelog.json +28 -2
  158. package/src/gateways/ws/action-protocol.js +293 -19
  159. package/src/gateways/ws/message-dispatcher.js +30 -0
  160. package/src/gateways/ws/remote-session-protocol.js +542 -35
  161. package/src/gateways/ws/ws-approval-gate.js +5 -0
  162. package/src/gateways/ws/ws-server.js +462 -38
  163. package/src/harness/jsonl-session-store.js +638 -2
  164. package/src/harness/prompt-compressor.js +4 -0
  165. package/src/harness/remote-session-audit.js +1 -0
  166. package/src/harness/remote-session-crypto.js +750 -50
  167. package/src/harness/remote-session-registry.js +795 -27
  168. package/src/lib/auto-mode-config.js +98 -3
  169. package/src/lib/background-agent-keeper-client.js +29 -0
  170. package/src/lib/background-agent-keeper-protocol.js +158 -10
  171. package/src/lib/background-agent-supervisor.js +870 -48
  172. package/src/lib/background-session-transport.js +23 -6
  173. package/src/lib/background-turn-bootstrap-protocol.js +64 -0
  174. package/src/lib/cowork-task-runner.js +70 -0
  175. package/src/lib/cowork-workflow.js +887 -62
  176. package/src/lib/delivery-production-adapter.js +38 -2
  177. package/src/lib/doctor-checkup.js +34 -10
  178. package/src/lib/dynamic-workflow-draft.js +535 -0
  179. package/src/lib/dynamic-workflow-facade.js +1105 -17
  180. package/src/lib/dynamic-workflow-runtime.js +2974 -0
  181. package/src/lib/execution-location-contract.js +111 -7
  182. package/src/lib/execution-location-runtime.js +3 -1
  183. package/src/lib/execution-location-target.js +910 -0
  184. package/src/lib/llm-providers.js +1 -0
  185. package/src/lib/mcp-call-ledger-store.js +35 -0
  186. package/src/lib/mcp-call-ledger.js +30 -0
  187. package/src/lib/mcp-stdio-package-materialization.js +1 -1
  188. package/src/lib/plugin-runtime/__tests__/remote-source.test.js +34 -16
  189. package/src/lib/plugin-runtime/install.js +4956 -657
  190. package/src/lib/plugin-runtime/manifest.js +3 -1
  191. package/src/lib/plugin-runtime/marketplace-artifact-readback.js +671 -31
  192. package/src/lib/plugin-runtime/marketplace-catalog.js +68 -2
  193. package/src/lib/plugin-runtime/marketplace-impact.js +208 -15
  194. package/src/lib/plugin-runtime/marketplace-network.js +317 -0
  195. package/src/lib/plugin-runtime/marketplace-pac-worker.js +15 -0
  196. package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +25 -2
  197. package/src/lib/plugin-runtime/marketplace-source-cache.js +359 -0
  198. package/src/lib/plugin-runtime/policy.js +21 -6
  199. package/src/lib/plugin-runtime/publisher-trust.js +332 -0
  200. package/src/lib/plugin-runtime/remote-source.js +323 -27
  201. package/src/lib/plugin-runtime/scopes.js +317 -41
  202. package/src/lib/plugin-runtime/transaction-journal.js +806 -0
  203. package/src/lib/public-ide-capability-manifest.js +1 -1
  204. package/src/lib/remote-approval-bridge.js +745 -108
  205. package/src/lib/remote-control.js +2 -0
  206. package/src/lib/remote-membership-coordinator.js +612 -46
  207. package/src/lib/remote-membership-host-store.js +59 -10
  208. package/src/lib/runtime-provenance-ledger.js +171 -46
  209. package/src/lib/shell-approval.js +169 -6
  210. package/src/lib/sub-agent-context.js +268 -2
  211. package/src/lib/task-model-selector.js +1 -1
  212. package/src/lib/with-file-lock.js +167 -42
  213. package/src/repl/agent-repl.js +70 -29
  214. package/src/repl/remote-approval.js +29 -7
  215. package/src/runtime/agent-core.js +1695 -194
  216. package/src/runtime/headless-runner.js +22 -5
  217. package/src/runtime/headless-stream.js +19 -3
  218. package/src/workers/background-agent-keeper.js +279 -58
  219. package/src/workers/background-agent-worker.js +7 -0
  220. package/src/workers/background-turn-bootstrap.js +29 -2
  221. package/src/assets/web-panel/assets/MarkdownRenderer-GmB6DOr6.js +0 -1
  222. package/src/assets/web-panel/assets/MobileProjects-BL0Czcoj.js +0 -1
  223. package/src/assets/web-panel/assets/Projects-DDAjkUkT.js +0 -1
  224. package/src/assets/web-panel/assets/RemoteSession-Dxzl5n2T.js +0 -5
  225. package/src/assets/web-panel/assets/SpeechSettings-D6UL3dA5.js +0 -1
  226. package/src/assets/web-panel/assets/devWarning-DKJjSWRn.js +0 -1
  227. package/src/assets/web-panel/assets/index-C61cnl3K.js +0 -1
  228. package/src/assets/web-panel/assets/index-D4XFHxBr.js +0 -1
@@ -4,9 +4,24 @@ import { TextDecoder } from "node:util";
4
4
  import {
5
5
  buildExecutionLocationCatalog,
6
6
  buildExecutionLocationHandoffPreview,
7
+ computeExecutionLocationTargetFactsDigest,
7
8
  } from "../lib/execution-location-contract.js";
8
9
  import { captureAmbientExecutionLocation } from "../lib/execution-location-runtime.js";
9
- import { getVerifiedSessionExecutionLocationAuthority } from "../harness/jsonl-session-store.js";
10
+ import {
11
+ EXECUTION_LOCATION_TARGET_ATTESTATION_SCHEMA,
12
+ EXECUTION_LOCATION_TARGET_RESUME_SCHEMA,
13
+ attestExecutionLocationTarget,
14
+ readExecutionLocationProfile,
15
+ resumeExecutionLocationTarget,
16
+ } from "../lib/execution-location-target.js";
17
+ import {
18
+ MAX_SESSION_REPLICA_BYTES,
19
+ SESSION_EXECUTION_LOCATION_HANDOFF_INSTALL_SCHEMA,
20
+ getVerifiedSessionExecutionLocationAuthority,
21
+ installSessionReplica,
22
+ installSessionReplicaWithLocationHandoff,
23
+ readVerifiedTranscriptBytes,
24
+ } from "../harness/jsonl-session-store.js";
10
25
  import {
11
26
  sameFileStatIdentity,
12
27
  samePathHandleFileIdentity,
@@ -112,10 +127,13 @@ export function projectSessionExecutionLocation(sessionId, deps = {}) {
112
127
  )(sessionId);
113
128
  return {
114
129
  schema: SESSION_EXECUTION_LOCATION_AUTHORITY_SCHEMA,
115
- authority: "verified-session-start",
130
+ authority: authority.authority || "verified-session-start",
116
131
  sessionId: authority.sessionId,
117
132
  headHash: authority.headHash,
118
133
  eventCount: authority.eventCount,
134
+ bindingEventHash: authority.bindingEventHash ?? null,
135
+ bindingEventCount: authority.bindingEventCount ?? null,
136
+ locationHandoff: authority.locationHandoff ?? null,
119
137
  binding: authority.binding,
120
138
  };
121
139
  }
@@ -156,6 +174,146 @@ export function projectExecutionLocationHandoff(
156
174
  };
157
175
  }
158
176
 
177
+ export function projectExecutionLocationTargetAttestation(
178
+ sessionId,
179
+ target,
180
+ factsPath,
181
+ profilePath,
182
+ deps = {},
183
+ ) {
184
+ const handoff = projectExecutionLocationHandoff(
185
+ sessionId,
186
+ target,
187
+ factsPath,
188
+ deps,
189
+ );
190
+ const profile = (
191
+ deps.readExecutionLocationProfile || readExecutionLocationProfile
192
+ )(profilePath, deps);
193
+ return (deps.attestExecutionLocationTarget || attestExecutionLocationTarget)(
194
+ { handoff, profile },
195
+ deps,
196
+ );
197
+ }
198
+
199
+ export function resumeSessionAtExecutionLocation(
200
+ sessionId,
201
+ target,
202
+ factsPath,
203
+ profilePath,
204
+ expectedTargetFactsDigest,
205
+ deps = {},
206
+ ) {
207
+ const handoff = projectExecutionLocationHandoff(
208
+ sessionId,
209
+ target,
210
+ factsPath,
211
+ deps,
212
+ );
213
+ const profile = (
214
+ deps.readExecutionLocationProfile || readExecutionLocationProfile
215
+ )(profilePath, deps);
216
+ const transcriptBytes =
217
+ profile.sessionStore?.mode === "replicated"
218
+ ? (deps.readVerifiedTranscriptBytes || readVerifiedTranscriptBytes)(
219
+ sessionId,
220
+ )
221
+ : null;
222
+ const readSourceAuthority = () => {
223
+ const authority = (
224
+ deps.getVerifiedSessionExecutionLocationAuthority ||
225
+ getVerifiedSessionExecutionLocationAuthority
226
+ )(sessionId);
227
+ return {
228
+ sessionId: authority.sessionId,
229
+ headHash: authority.headHash,
230
+ eventCount: authority.eventCount,
231
+ };
232
+ };
233
+ return (deps.resumeExecutionLocationTarget || resumeExecutionLocationTarget)(
234
+ {
235
+ handoff,
236
+ profile,
237
+ expectedTargetFactsDigest,
238
+ transcriptBytes,
239
+ readSourceAuthority,
240
+ },
241
+ deps,
242
+ );
243
+ }
244
+
245
+ function readBoundedReplicaInput(deps = {}) {
246
+ if (process.stdin.isTTY) {
247
+ throw new Error("session replica bytes must be provided on stdin");
248
+ }
249
+ const runtimeFs = deps.fs || fs;
250
+ const chunks = [];
251
+ let total = 0;
252
+ while (true) {
253
+ const chunk = Buffer.allocUnsafe(
254
+ Math.min(64 * 1024, MAX_SESSION_REPLICA_BYTES + 1 - total),
255
+ );
256
+ const count = runtimeFs.readSync(0, chunk, 0, chunk.length, null);
257
+ if (count === 0) break;
258
+ total += count;
259
+ if (total > MAX_SESSION_REPLICA_BYTES) {
260
+ throw new Error(
261
+ `session replica exceeds ${MAX_SESSION_REPLICA_BYTES} bytes`,
262
+ );
263
+ }
264
+ chunks.push(chunk.subarray(0, count));
265
+ }
266
+ if (total === 0) throw new Error("session replica stdin is empty");
267
+ return Buffer.concat(chunks, total);
268
+ }
269
+
270
+ export function receiveSessionReplica(
271
+ sessionId,
272
+ expectedHeadHash,
273
+ expectedEventCount,
274
+ expectedTranscriptDigest,
275
+ deps = {},
276
+ ) {
277
+ const bytes = (deps.readSessionReplicaInput || readBoundedReplicaInput)(deps);
278
+ return (deps.installSessionReplica || installSessionReplica)(
279
+ sessionId,
280
+ bytes,
281
+ {
282
+ headHash: expectedHeadHash,
283
+ eventCount: Number(expectedEventCount),
284
+ transcriptDigest: expectedTranscriptDigest,
285
+ },
286
+ );
287
+ }
288
+
289
+ export function prepareSessionReplicaHandoff(sessionId, options, deps = {}) {
290
+ const bytes = (deps.readSessionReplicaInput || readBoundedReplicaInput)(deps);
291
+ const binding = projectCurrentExecutionLocation({}, deps).binding;
292
+ const targetFactsDigest = computeExecutionLocationTargetFactsDigest(binding);
293
+ if (targetFactsDigest !== String(options.expectedTargetFactsDigest || "")) {
294
+ throw new Error("target facts changed before location handoff append");
295
+ }
296
+ return (
297
+ deps.installSessionReplicaWithLocationHandoff ||
298
+ installSessionReplicaWithLocationHandoff
299
+ )(
300
+ sessionId,
301
+ bytes,
302
+ {
303
+ headHash: options.expectedHeadHash,
304
+ eventCount: Number(options.expectedEventCount),
305
+ transcriptDigest: options.expectedTranscriptDigest,
306
+ },
307
+ {
308
+ profileDigest: options.profileDigest,
309
+ targetEvidenceId: options.targetEvidenceId,
310
+ targetFactsDigest,
311
+ attestationDigest: options.attestationDigest,
312
+ binding,
313
+ },
314
+ );
315
+ }
316
+
159
317
  function renderBinding(binding) {
160
318
  const git = binding.source.git;
161
319
  return [
@@ -180,6 +338,30 @@ function writeProjection(projection, options = {}) {
180
338
  process.stdout.write(`${JSON.stringify(projection, null, 2)}\n`);
181
339
  return;
182
340
  }
341
+ if (projection.schema === EXECUTION_LOCATION_TARGET_ATTESTATION_SCHEMA) {
342
+ process.stdout.write(
343
+ `ATTESTED ${projection.binding.location}\nFacts: ${projection.targetFactsDigest}\nAttestation: ${projection.attestationDigest}\nGaps: ${projection.gaps.join(", ")}\n`,
344
+ );
345
+ return;
346
+ }
347
+ if (projection.schema === EXECUTION_LOCATION_TARGET_RESUME_SCHEMA) {
348
+ process.stdout.write(
349
+ `RESUME EXITED ${projection.target}\nReceipt: ${projection.receiptDigest}\nGaps: ${projection.gaps.join(", ")}\n`,
350
+ );
351
+ return;
352
+ }
353
+ if (projection.schema === "chainlesschain.session-replica-install/v1") {
354
+ process.stdout.write(
355
+ `${projection.installed ? "INSTALLED" : "ALREADY PRESENT"} ${projection.sessionId}\nReceipt: ${projection.receiptDigest}\n`,
356
+ );
357
+ return;
358
+ }
359
+ if (projection.schema === SESSION_EXECUTION_LOCATION_HANDOFF_INSTALL_SCHEMA) {
360
+ process.stdout.write(
361
+ `HANDOFF ANCHORED ${projection.sessionId}\nTarget head: ${projection.targetHeadHash}\nReceipt: ${projection.receiptDigest}\n`,
362
+ );
363
+ return;
364
+ }
183
365
  if (projection.binding) {
184
366
  process.stdout.write(`${renderBinding(projection.binding)}\n`);
185
367
  return;
@@ -217,7 +399,7 @@ function runAction(action, options = {}) {
217
399
  }
218
400
  }
219
401
 
220
- export function registerSessionLocationSubcommands(session) {
402
+ export function registerSessionLocationSubcommands(session, deps = {}) {
221
403
  const location = session
222
404
  .command("location")
223
405
  .description(
@@ -230,7 +412,7 @@ export function registerSessionLocationSubcommands(session) {
230
412
  .option("--json", "Machine-readable JSON output")
231
413
  .action((options) => {
232
414
  process.exitCode = runAction(
233
- () => projectCurrentExecutionLocation({}, {}),
415
+ () => projectCurrentExecutionLocation({}, deps),
234
416
  options,
235
417
  );
236
418
  });
@@ -241,7 +423,7 @@ export function registerSessionLocationSubcommands(session) {
241
423
  .option("--json", "Machine-readable JSON output")
242
424
  .action((id, options) => {
243
425
  process.exitCode = runAction(
244
- () => projectSessionExecutionLocation(id),
426
+ () => projectSessionExecutionLocation(id, deps),
245
427
  options,
246
428
  );
247
429
  });
@@ -254,7 +436,7 @@ export function registerSessionLocationSubcommands(session) {
254
436
  .option("--json", "Machine-readable JSON output")
255
437
  .action((options) => {
256
438
  process.exitCode = runAction(
257
- () => projectExecutionLocationComparison({}, {}),
439
+ () => projectExecutionLocationComparison({}, deps),
258
440
  options,
259
441
  );
260
442
  });
@@ -269,7 +451,136 @@ export function registerSessionLocationSubcommands(session) {
269
451
  .option("--json", "Machine-readable JSON output")
270
452
  .action((id, target, options) => {
271
453
  process.exitCode = runAction(
272
- () => projectExecutionLocationHandoff(id, target, options.facts),
454
+ () => projectExecutionLocationHandoff(id, target, options.facts, deps),
455
+ options,
456
+ );
457
+ });
458
+
459
+ location
460
+ .command("attest <id> <target>")
461
+ .description(
462
+ "Invoke a fixed target-side probe and bind observed host facts to a handoff",
463
+ )
464
+ .requiredOption(
465
+ "--facts <path>",
466
+ "Versioned Git/summary/artifact/permission/target evidence JSON",
467
+ )
468
+ .requiredOption(
469
+ "--profile <path>",
470
+ "Secret-free WSL/SSH/Container target profile JSON",
471
+ )
472
+ .option("--json", "Machine-readable JSON output")
473
+ .action((id, target, options) => {
474
+ process.exitCode = runAction(
475
+ () =>
476
+ projectExecutionLocationTargetAttestation(
477
+ id,
478
+ target,
479
+ options.facts,
480
+ options.profile,
481
+ deps,
482
+ ),
483
+ options,
484
+ );
485
+ });
486
+
487
+ location
488
+ .command("receive <id>")
489
+ .description("Install an exact verified session replica from bounded stdin")
490
+ .requiredOption(
491
+ "--expected-head-hash <sha256>",
492
+ "Exact unprefixed transcript head hash",
493
+ )
494
+ .requiredOption(
495
+ "--expected-event-count <count>",
496
+ "Exact transcript event count",
497
+ )
498
+ .requiredOption(
499
+ "--expected-transcript-digest <sha256>",
500
+ "Exact SHA-256 digest of stdin bytes",
501
+ )
502
+ .option("--json", "Machine-readable JSON receipt")
503
+ .action((id, options) => {
504
+ process.exitCode = runAction(
505
+ () =>
506
+ receiveSessionReplica(
507
+ id,
508
+ options.expectedHeadHash,
509
+ options.expectedEventCount,
510
+ options.expectedTranscriptDigest,
511
+ deps,
512
+ ),
513
+ options,
514
+ );
515
+ });
516
+
517
+ location
518
+ .command("prepare <id>")
519
+ .description(
520
+ "Install an exact replica and append a canonical target-location handoff",
521
+ )
522
+ .requiredOption(
523
+ "--expected-head-hash <sha256>",
524
+ "Exact unprefixed source transcript head hash",
525
+ )
526
+ .requiredOption(
527
+ "--expected-event-count <count>",
528
+ "Exact source transcript event count",
529
+ )
530
+ .requiredOption(
531
+ "--expected-transcript-digest <sha256>",
532
+ "Exact SHA-256 digest of stdin bytes",
533
+ )
534
+ .requiredOption(
535
+ "--expected-target-facts-digest <sha256>",
536
+ "Stable target facts digest from target attestation",
537
+ )
538
+ .requiredOption("--profile-digest <sha256>", "Exact target profile digest")
539
+ .requiredOption(
540
+ "--target-evidence-id <id>",
541
+ "Exact handoff target evidence id",
542
+ )
543
+ .requiredOption(
544
+ "--attestation-digest <sha256>",
545
+ "Exact target attestation digest",
546
+ )
547
+ .option("--json", "Machine-readable JSON receipt")
548
+ .action((id, options) => {
549
+ process.exitCode = runAction(
550
+ () => prepareSessionReplicaHandoff(id, options, deps),
551
+ options,
552
+ );
553
+ });
554
+
555
+ location
556
+ .command("resume <id> <target>")
557
+ .description(
558
+ "Re-attest a target, verify its canonical session replica, and resume there",
559
+ )
560
+ .requiredOption(
561
+ "--facts <path>",
562
+ "Versioned Git/summary/artifact/permission/target evidence JSON",
563
+ )
564
+ .requiredOption(
565
+ "--profile <path>",
566
+ "Secret-free WSL/SSH/Container target profile JSON",
567
+ )
568
+ .requiredOption(
569
+ "--expected-target-facts-digest <sha256>",
570
+ "Exact stable target facts digest from session location attest",
571
+ )
572
+ .option("--json", "Machine-readable JSON receipt after target exit")
573
+ .action((id, target, options) => {
574
+ process.exitCode = runAction(
575
+ () =>
576
+ resumeSessionAtExecutionLocation(
577
+ id,
578
+ target,
579
+ options.facts,
580
+ options.profile,
581
+ options.expectedTargetFactsDigest,
582
+ deps,
583
+ ),
273
584
  options,
274
585
  );
275
586
  });
package/src/constants.js CHANGED
@@ -30,7 +30,7 @@ export const LLM_PROVIDERS = {
30
30
  volcengine: {
31
31
  name: "Volcengine (火山引擎/豆包)",
32
32
  defaultBaseUrl: "https://ark.cn-beijing.volces.com/api/v3",
33
- defaultModel: "doubao-seed-2-1-pro-260628",
33
+ defaultModel: "deepseek-v4-flash-260425",
34
34
  requiresApiKey: true,
35
35
  },
36
36
  openai: {
@@ -144,7 +144,7 @@ export const DEFAULT_CONFIG = {
144
144
  provider: "volcengine",
145
145
  apiKey: null,
146
146
  baseUrl: "https://ark.cn-beijing.volces.com/api/v3",
147
- model: "doubao-seed-2-1-pro-260628",
147
+ model: "deepseek-v4-flash-260425",
148
148
  // When true, `cc ask` (provider=ollama only) overrides baseUrl to point at
149
149
  // the Android LocalLlmServer (127.0.0.1:18484). User opt-in toggle:
150
150
  // cc config set llm.preferAndroidLocal true
@@ -1,16 +1,42 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.165.2",
7
+ "cliVersions": ["0.165.1", "0.165.2"],
8
+ "date": "2026-08-18",
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Fixed — cc CLI 0.165.2: governed plugins and keeper handoff reliability",
13
+ "body": "> `chainlesschain` **0.165.1 → 0.165.2** (candidate; not yet published,\n> 2026-08-18).\n> CLI-only candidate; `@chainlesschain/personal-data-hub` remains **0.4.58**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Governed plugin transactions and provenance**: marketplace payload,\n activation, install, update, transaction recovery, and provenance decisions\n bind immutable source identities and digests. Registry cache entries are\n content-addressed, while corrupt, stale, or mismatched recovery evidence\n continues to fail closed.\n- **Strict plugin execution boundaries**: the remaining live plugin fixtures\n now execute in the strict Linux sandbox, MCP security soak provisions its\n required Bubblewrap boundary explicitly, and release fixtures exercise the\n production activation path instead of accepting inactive coverage.\n- **Durable workflow authority**: provider requests and settlements, nested and\n parallel tool effects, child and descendant calls, and timeout outcomes gain\n durable identity-bound receipts so retries cannot silently reuse ambiguous\n execution authority.\n- **Background keeper lock handoff**: an owner that durably publishes its exact\n release marker treats the marker as the logical handoff even when another\n contender wins physical cleanup. Wrong, corrupt, or active foreign claimants\n remain rejected, and POSIX/Windows process identity and cleanup races retain\n bounded fail-closed handling.\n- **Scheduler campaign continuity**: scheduled long-soak dispatches use a pinned\n campaign identity, refuse overlapping segments, and can auto-finalize only\n after the required cross-platform evidence window is complete.\n- **Cross-platform release stability**: generated command help stays in sync;\n POSIX fsync-failure fixtures match the actual read mode; registry cache tests\n follow immutable URL-plus-digest semantics; and macOS marketplace replay uses\n isolated local scope instead of leaking state through the runner user home.\n- **Release status**: immutable tag, final source SHA, workflow run IDs, npm\n provenance, package digests, and registry readback remain intentionally\n absent until the final `0.165.2` merge SHA passes complete `CLI CI` and\n `CLI Strict Sandbox` matrices on Linux, Windows, and macOS, followed by the\n dedicated npm release and independent public readback workflows. The active\n two-hour Keeper/reliability runs and the 72-hour scheduler campaign are not\n claimed as completed release evidence here."
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ "productVersion": null,
19
+ "cliVersion": "0.165.1",
20
+ "cliVersions": ["0.164.0", "0.165.1"],
21
+ "date": "2026-08-17",
22
+ "title": "",
23
+ "sections": [
24
+ {
25
+ "heading": "Added — cc CLI 0.165.1: runtime admission, remote authority, and background containment",
26
+ "body": "> `chainlesschain` **0.164.0 → 0.165.1** (published from exact SHA\n> `1a10ed7c8fd14d12f7760e948ff8efe36c766602`, 2026-08-17).\n> CLI release includes `@chainlesschain/personal-data-hub` **0.4.58**;\n> `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Dynamic workflow run admission**: Cowork workflow execution revalidates the\n immutable definition digest, execution-authority session, permissions,\n sandbox, scale, and cost gates when a run starts instead of treating an\n earlier preflight as continuing authority.\n- **Durable remote authority**: CLI-hosted approval, relay membership, and\n reconnect reconciliation bind responses and commits to durable membership\n epochs. Stale, revoked, mismatched, or unavailable authority fails closed.\n- **Canonical execution boundaries**: background `run_shell`, plugin-bin, and\n delivery paths validate canonical workspace and configured repository\n authority before executing or pushing. Linux child descriptors not declared\n by the execution contract are closed before launch.\n- **Background keeper containment**: supervisor state locks publish ownership\n atomically, distinguish zombies and reused PIDs, preserve POSIX process-group\n cleanup, contain released turns after Worker loss, and require durable cleanup\n evidence before retiring worktrees. POSIX socket namespaces and Windows exit\n settlement are bounded for hosted and local environments.\n- **Cross-platform release evidence**: CLI workflows install the candidate's\n dependency closure, bind reusable jobs to the exact source SHA, keep each\n platform's evidence isolated, and retain bounded diagnostics for transient\n process-identity and cleanup races.\n- **Dependency security closure**: the CLI requires the patched `js-yaml`\n 3.15.1 line, while Personal Data Hub 0.4.58 advances its bounded ZIP adapter\n to `adm-zip` 0.6.0 so a crafted archive cannot trigger the disclosed 4 GB\n allocation path before adapter-level entry validation.\n- **Release boundary**: the separate plugin marketplace payload/activation\n hardening later passed its own exact-head gates at `89c498cc46` and merged\n through PR #215 (`089336992d`). It remains intentionally excluded from this\n immutable tarball and is tracked as a post-`0.165.1` source increment.\n- **Release packaging recovery**: immutable tag `v-npm-0-165-0` stopped before\n any registry write because its SBOM resolver tried to fetch the coordinated\n PDH 0.4.58 candidate before that package could be published. The 0.165.1\n workflow resolves the SBOM from exact-SHA internal package tarballs instead.\n- **Published release evidence**: immutable tag `v-npm-0-165-1` resolves to\n exact source commit `1a10ed7c8fd14d12f7760e948ff8efe36c766602`.\n Its Linux, Windows, and macOS `CLI CI` (`32038591204`) and\n `CLI Strict Sandbox` (`32038590960`) matrices passed; the dedicated npm\n release (`32038590940`) and independent public readback (`32039659372`)\n succeeded. npm reports `latest=0.165.1`; the public tarball SHA-1 is\n `51ce645bebbe63ae168386cb8b6122a67c7d0813` and SHA-256 is\n `5806d34b6659dcc632dad31db3acdc2f4fa07fb924b7d93de1d22637a3186241`."
27
+ }
28
+ ]
29
+ },
4
30
  {
5
31
  "productVersion": null,
6
32
  "cliVersion": "0.164.0",
7
33
  "cliVersions": ["0.163.8", "0.164.0"],
8
- "date": "2026-08-15",
34
+ "date": "2026-08-16",
9
35
  "title": "",
10
36
  "sections": [
11
37
  {
12
38
  "heading": "Added — cc CLI 0.164.0: governed marketplace, execution authority, and native isolation hardening",
13
- "body": "> `chainlesschain` **0.163.8 → 0.164.0** (candidate; not yet published,\n> 2026-08-15).\n> CLI-only candidate; `@chainlesschain/personal-data-hub` remains **0.4.57**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Native clipboard images**: `/paste-image` can attach bounded PNG, JPEG,\n GIF, and WebP clipboard payloads to the next vision turn. Windows, macOS,\n Wayland, and X11 host adapters use literal arguments, private temporary\n files, signature checks, byte/count limits, and the Process Broker boundary.\n- **Scoped execution and context authority**: runtime permissions now expose\n exact side-effect explanations and scoped decisions, while session execution\n locations, IDE context-center evidence, prompt interactions, and durable\n workflow definitions carry versioned identities instead of ambient context.\n- **Governed plugin marketplace**: catalog, multi-registry candidate selection,\n install authority, update-impact review, artifact byte readback, and remote\n artifact verification bind publisher, digest, signature, source, policy, and\n approval evidence before plugin installation or update.\n- **Background keeper containment**: an independent keeper records Worker and\n descendant PIDs, retires interrupted turns under bounded Windows identity and\n cleanup budgets, and emits strict formal/smoke evidence contracts. The local\n real-spawn regression is green; the three-platform formal keeper aggregate is\n still required before P1-2 can be marked complete.\n- **MCP capsule boundary evidence**: materialized capsules bind the exact Node\n builtin capability set and OS execution-context requirements. Formal evidence\n now hashes and reparses each live result and schedules three independent\n fresh-isolate probes per platform across a two-hour span; smoke evidence is\n explicitly non-qualifying.\n- **Session and remote-approval hardening**: canonical session persistence gains\n additional crash and anti-rollback checks. Client-hosted remote approval uses\n durable same-machine membership epochs and fails closed on stale, revoked, or\n unavailable authority. Signed coordinator/host lease modules are included as\n a foundation only; they are not yet wired as a complete cross-host dispatch\n fence and do not claim distributed consensus or revoke closure.\n- **Linux dynamic-native isolation candidate**: strict Linux native execution\n recursively attests the ELF startup graph, snapshots caller-owned runtime and\n plugin bytes, exposes only a read-only descriptor-bound namespace, and blocks\n loader-input acquisition and nested mount namespaces with a dynamic-only\n seccomp profile. The typed claim is limited to pathname-visible loader input;\n broad `sharedLibraryClosure` remains false, JIT/custom loaders are excluded,\n and packed Linux runtimes fail closed until separately supported.\n- **macOS signed launcher candidate**: a fixed signed/root helper contract can\n copy and hash runtime and entry descriptors into root-protected snapshots,\n gate entry until the runtime pathname is removed, supervise the target, and\n fail closed when ownership, receipt, protocol, or signing evidence differs.\n It remains disabled until the protected x64/arm64 workflow proves Developer\n ID signing, notarization, root package installation, and the full live race\n matrix; it does not claim shared-library closure.\n- **Compatibility and reliability boundary**: reaching the documented\n `0.164.0` removal floor does not replace representative telemetry. All 25\n compatibility aliases remain retained because approved cohort export,\n three-platform reporting coverage, accepted points, and per-command usage are\n still absent. The scheduler campaign remains incomplete, and the uncommitted\n remote `run_shell` lease-consumption vertical is excluded after its expanded\n parallel matrix did not finish fully green.\n- **Release authority hardening**: manual npm workflow runs are dry-run only;\n production packaging and publishing require an immutable `v-npm-*` tag-push\n event. Operator-controlled version text is no longer interpolated into shell\n scripts, release Actions are commit-pinned, and independent readback validates\n a canonical numeric SemVer before resolving the tag and attested artifact.\n- **Release status**: final tag, source SHA, workflow run IDs, package digests,\n provenance, and registry readback are intentionally omitted until the exact\n `0.164.0` release merge commit passes complete `CLI CI` and\n `CLI Strict Sandbox` matrices on Linux, Windows, and macOS, followed by the\n dedicated npm release and independent public readback workflows."
39
+ "body": "> `chainlesschain` **0.163.8 → 0.164.0** (published from exact SHA\n> `313dec85cffa09dbb183be17d2b6597e303bed5f`, 2026-08-16).\n> CLI-only release; `@chainlesschain/personal-data-hub` remains **0.4.57**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Native clipboard images**: `/paste-image` can attach bounded PNG, JPEG,\n GIF, and WebP clipboard payloads to the next vision turn. Windows, macOS,\n Wayland, and X11 host adapters use literal arguments, private temporary\n files, signature checks, byte/count limits, and the Process Broker boundary.\n- **Scoped execution and context authority**: runtime permissions now expose\n exact side-effect explanations and scoped decisions, while session execution\n locations, IDE context-center evidence, prompt interactions, and durable\n workflow definitions carry versioned identities instead of ambient context.\n- **Governed plugin marketplace**: catalog, multi-registry candidate selection,\n install authority, update-impact review, artifact byte readback, and remote\n artifact verification bind publisher, digest, signature, source, policy, and\n approval evidence before plugin installation or update.\n- **Background keeper containment**: an independent keeper records Worker and\n descendant PIDs, retires interrupted turns under bounded Windows identity and\n cleanup budgets, and emits strict formal/smoke evidence contracts. The local\n real-spawn regression is green; the three-platform formal keeper aggregate is\n still required before P1-2 can be marked complete.\n- **MCP capsule boundary evidence**: materialized capsules bind the exact Node\n builtin capability set and OS execution-context requirements. Formal evidence\n now hashes and reparses each live result and schedules three independent\n fresh-isolate probes per platform across a two-hour span; smoke evidence is\n explicitly non-qualifying.\n- **Session and remote-approval hardening**: canonical session persistence gains\n additional crash and anti-rollback checks. Client-hosted remote approval uses\n durable same-machine membership epochs and fails closed on stale, revoked, or\n unavailable authority. Signed coordinator/host lease modules are included as\n a foundation only; they are not yet wired as a complete cross-host dispatch\n fence and do not claim distributed consensus or revoke closure.\n- **Linux dynamic-native isolation candidate**: strict Linux native execution\n recursively attests the ELF startup graph, snapshots caller-owned runtime and\n plugin bytes, exposes only a read-only descriptor-bound namespace, and blocks\n loader-input acquisition and nested mount namespaces with a dynamic-only\n seccomp profile. The typed claim is limited to pathname-visible loader input;\n broad `sharedLibraryClosure` remains false, JIT/custom loaders are excluded,\n and packed Linux runtimes fail closed until separately supported.\n- **macOS signed launcher candidate**: a fixed signed/root helper contract can\n copy and hash runtime and entry descriptors into root-protected snapshots,\n gate entry until the runtime pathname is removed, supervise the target, and\n fail closed when ownership, receipt, protocol, or signing evidence differs.\n It remains disabled until the protected x64/arm64 workflow proves Developer\n ID signing, notarization, root package installation, and the full live race\n matrix; it does not claim shared-library closure.\n- **Compatibility and reliability boundary**: reaching the documented\n `0.164.0` removal floor does not replace representative telemetry. All 25\n compatibility aliases remain retained because approved cohort export,\n three-platform reporting coverage, accepted points, and per-command usage are\n still absent. The scheduler campaign remains incomplete, and the uncommitted\n remote `run_shell` lease-consumption vertical is excluded after its expanded\n parallel matrix did not finish fully green.\n- **Release authority hardening**: manual npm workflow runs are dry-run only;\n production packaging and publishing require an immutable `v-npm-*` tag-push\n event. Operator-controlled version text is no longer interpolated into shell\n scripts, release Actions are commit-pinned, and independent readback validates\n a canonical numeric SemVer before resolving the tag and attested artifact.\n- **Published release evidence**: immutable tag `v-npm-0-164-0` resolves to\n exact source commit `313dec85cffa09dbb183be17d2b6597e303bed5f`. Its\n Linux, Windows, and macOS `CLI CI` (`31912844177`) and\n `CLI Strict Sandbox` (`31912844034`) matrices passed; the dedicated npm\n release (`31912844032`) and independent public readback (`31913903124`)\n succeeded. npm reports `latest=0.164.0`; the public tarball SHA-1 is\n `2d13836305c6841b7fe5bcd059bc8ef25127fc3d` and SHA-256 is\n `4d7f36f11bd2bfc1b85eee87392b74bd948e7cc33698cd35c87bff72fb3b4c16`."
14
40
  }
15
41
  ]
16
42
  },