chainlesschain 0.163.8 → 0.165.1

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 (240) hide show
  1. package/package.json +7 -4
  2. package/scripts/macos-mcp-launcher-build.mjs +317 -0
  3. package/scripts/macos-mcp-launcher-postinstall.sh +54 -0
  4. package/scripts/macos-mcp-launcher-preinstall.sh +61 -0
  5. package/src/assets/web-panel/.build-hash +1 -1
  6. package/src/assets/web-panel/assets/{AIOps-CavM7W3k.js → AIOps-CYxFDrcm.js} +1 -1
  7. package/src/assets/web-panel/assets/{ActionButton-CUvZGabQ.js → ActionButton-CPBtdiU2.js} +1 -1
  8. package/src/assets/web-panel/assets/{Analytics-DeBnWnbe.js → Analytics-Dayq7Dp7.js} +3 -3
  9. package/src/assets/web-panel/assets/{AppLayout-DbI5kxvd.js → AppLayout-6U7bPb2s.js} +4 -4
  10. package/src/assets/web-panel/assets/{Artifacts-D93bigKm.js → Artifacts-D2Iqg_3D.js} +1 -1
  11. package/src/assets/web-panel/assets/{Audit-CBNvfUZa.js → Audit-CdoOB7WV.js} +1 -1
  12. package/src/assets/web-panel/assets/{BackgroundAgents-CJLyh_YU.js → BackgroundAgents-DrnAVB8w.js} +1 -1
  13. package/src/assets/web-panel/assets/{Backup-D_0yoehD.js → Backup-CesMi5cy.js} +1 -1
  14. package/src/assets/web-panel/assets/{BaseInput-TJxmbObW.js → BaseInput-DaX9ptax.js} +1 -1
  15. package/src/assets/web-panel/assets/{Chat-CE0dto1q.js → Chat-OrwOPxDS.js} +5 -5
  16. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CZ5-yYiD.js → ChatBubbleRenderer-CvPZFRxM.js} +1 -1
  17. package/src/assets/web-panel/assets/{Checkbox-Ck1RVIVo.js → Checkbox-DiHbcysC.js} +1 -1
  18. package/src/assets/web-panel/assets/{Codegen-qpoyf6DK.js → Codegen-CbgCkaBJ.js} +1 -1
  19. package/src/assets/web-panel/assets/{Col-DUyPWjIE.js → Col-Du5hgrh4.js} +1 -1
  20. package/src/assets/web-panel/assets/{Community-D_S1BemS.js → Community-DsPOBW-p.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compact-BjxeK-Gc.js → Compact-BwHIFkNC.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compliance-Dd3CEJsu.js → Compliance-BvrDQSgd.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cowork-B4QG7-ad.js → Cowork-gwAE6arx.js} +3 -3
  24. package/src/assets/web-panel/assets/{Cron-BtZnids5.js → Cron-DW-0l4uF.js} +2 -2
  25. package/src/assets/web-panel/assets/{Crosschain-CHPfCBFD.js → Crosschain-j-NsLesB.js} +1 -1
  26. package/src/assets/web-panel/assets/{DID-DT8DCEOK.js → DID-CibVEBOI.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dashboard-COQab5_U.js → Dashboard-W4z9vSfe.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dropdown-BY1PsQuU.js → Dropdown-DAcrkKxG.js} +1 -1
  29. package/src/assets/web-panel/assets/{EmailListRenderer-CsuAuaq3.js → EmailListRenderer-6GXah-89.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BqpinD-j.js → FamilyGuardDashboard-TKDCq8Ku.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-D0gkfQFv.js → Federation-BXBLlcNm.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-BqgE-axK.js → FormItemContext-BoJJBkG3.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-D0hJ2KvC.js → GenericCardRenderer-okjsl46v.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-CmMB0uPY.js → Git-Rvs7i6nn.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-BnVEI0Dk.js → Governance-CHSUxXXS.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-YTAMihRP.js → Inference-V3BlfxsB.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-0ax7VHop.js → KnowledgeGraph-C_NlD4aR.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-B9TRcokL.js → Logs-Nn4LNxhA.js} +2 -2
  39. package/src/assets/web-panel/assets/MarkdownRenderer-SVAgNnkt.js +1 -0
  40. package/src/assets/web-panel/assets/{Marketplace-B6CSuD_H.js → Marketplace-DEmjFcg-.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-CjMXvOVU.js → McpTools-DlopXipI.js} +3 -3
  42. package/src/assets/web-panel/assets/{Memory-CXRF71U3.js → Memory-BG3ynX60.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-DQgNp_oS.js → MobileBridge-DeRzWOfT.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-DlPwcCbq.js → MobileProjects-Tyd3o2A0.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-6hDTRPe1.js → Mtc-BoPbOv1C.js} +2 -2
  46. package/src/assets/web-panel/assets/{MtcAudit-BlVHU1DS.js → MtcAudit-un-rTHp7.js} +2 -2
  47. package/src/assets/web-panel/assets/{Multisig-DP9pzEbV.js → Multisig-Ds0oveEB.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-Djorh8EV.js → NLProgramming-D09JI-yY.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-oLZ-JkUg.js → Notes-DTRhiKJn.js} +4 -4
  50. package/src/assets/web-panel/assets/{NotificationSettings-Cg288VH3.js → NotificationSettings-BAnnNCim.js} +1 -1
  51. package/src/assets/web-panel/assets/OrderTableRenderer-Yr-1fSYi.js +1 -0
  52. package/src/assets/web-panel/assets/{Organization-CBdo-bHs.js → Organization-S9EAolpj.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-qZdnVumx.js → Overflow-CqcLKqJ8.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-D4kNfGNQ.js → P2P-Dw0F9EcU.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-DnlMemM7.js → PdhVaultBrowser-BDRwUevN.js} +5 -5
  56. package/src/assets/web-panel/assets/{Permissions-DHucHFBJ.js → Permissions-D3_c3nKB.js} +4 -4
  57. package/src/assets/web-panel/assets/{PersonalDataHub-BovlOIPR.js → PersonalDataHub-CxdMV98x.js} +4 -4
  58. package/src/assets/web-panel/assets/{Pipeline-Deru3CQY.js → Pipeline-CgjNQFLI.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-Bq5oTTbU.js → Privacy-BHghIIht.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-BfzxVWAz.js → ProjectInit-De6pqaKM.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-CKC6XBtH.js → ProjectSettings-Bg4ZkNYQ.js} +2 -2
  62. package/src/assets/web-panel/assets/Projects-CP8vPvzs.js +1 -0
  63. package/src/assets/web-panel/assets/{Providers-C_jx4TWX.js → Providers-CUnHbNf-.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-BdIHeVGC.js → QrScannerModal-DA2f3Wts.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-BwZwAcPD.js → QuickAsk-C1FeHDqp.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-BNTt0L-m.js → Recommend-B5guaUMN.js} +1 -1
  67. package/src/assets/web-panel/assets/RemoteSession-PDADSds3.js +5 -0
  68. package/src/assets/web-panel/assets/{Reputation-D6VpG32B.js → Reputation-eTlRhgvK.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-D_74OvQQ.js → Row-D7AqSGY0.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-BTr0a-BQ.js → RssFeed-JiuLm4Ja.js} +3 -3
  71. package/src/assets/web-panel/assets/{Search-C3MCFoNU.js → Search-CwruahW3.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-CqW9aJ6s.js → Security-CdhqaR0b.js} +4 -4
  73. package/src/assets/web-panel/assets/{Services-Cw5GNaHF.js → Services-CU0ZIlcT.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-DZps5qeY.js → Skeleton-CtduPfAb.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-C6NQ1znT.js → Skills-CROXm6AY.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-DFP8G2Sh.js → Sla-DiZiABFD.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-ESt6MB6v.js → SpeechSettings-B5pLcXUw.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-BHnN98aM.js → SyncSettings-DBX6J1Oe.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-NiSCaOf-.js → Tasks-BLyRJd3-.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-DsKFhW2C.js → Templates-BKa5qzmk.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-CQ0E0ze5.js → Tenant-DnD3a4M6.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-D_rBu_by.js → Terminal-DEitQeTb.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-D3Vm4Po4.js → TimelineRenderer-CjHggTDq.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-DNTxRH6q.js → Tokens-CsGT7sfl.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-Dgprz1ms.js → Trigger-yr4rFDrW.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-B2rUnVBD.js → Trust-CLvu1Sjp.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-DEGQNc6_.js → UkeySign-B0m7yUP8.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-jlsAx3Eh.js → VideoEditing-C0VvP4lc.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-8jQih1ij.js → Wallet-kllBAG1M.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-XLeO6xIB.js → WebAuthn-C54UQNLx.js} +3 -3
  91. package/src/assets/web-panel/assets/{WorkflowEditor-De_dgDAG.js → WorkflowEditor-B7y8qSvU.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-CI19R_Sk.js → chat-DRzTh8CJ.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-DsYTOYN3.js → colors-BSMwSnCx.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-CM3-t_Qr.js → compact-item-BTg602H5.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-BjxlBRZv.js → createContext-B6EGsdvp.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-Dol8jLEP.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-RDaWX_4i.js → hasIn-DDKqJ8RD.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-nAH87mQP.js → index-323Hhxxt.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DIUnNOjG.js → index-BICn3Qh1.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DyIWssPC.js → index-BMuGd2--.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DX7tuWVJ.js → index-BRqt4fO-.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Cd3euP_4.js → index-BVTAl5N2.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-Cpqm1qfU.js → index-BsR7Y2NG.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DcPFB8qJ.js → index-Bx044qDj.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Cd9OJhHG.js → index-C1GFfuqN.js} +1 -1
  106. package/src/assets/web-panel/assets/index-C3QX5tOl.js +1 -0
  107. package/src/assets/web-panel/assets/{index-B-Z8eFUJ.js → index-C66NpWy5.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BlT2VAEK.js → index-CDTvsX8t.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Dsij_KsN.js → index-CGNklbP6.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-C4gkzxkw.js → index-CHfLYwcW.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-D6sm5-Xq.js → index-CNxg61YP.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C0yx-jtQ.js → index-CQlHFN_g.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CjTrRt13.js → index-CUEU48o1.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-B7WBt_4T.js → index-CWGax2QW.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-IeiL9RKc.js → index-C_JzIXUq.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CnHH7bnD.js → index-Cf23wVMs.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BKJr-TZp.js → index-CmAInUkX.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CiECJi-Q.js → index-CmAubjDi.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BCnZyIMA.js → index-Co7oM1qr.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Drlnwr8F.js → index-CwPUZbMI.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-9R6BxAr0.js → index-D1naNj4U.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BGqqJfL0.js → index-D5CsBShd.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Bi46Xu4u.js → index-DBT3YeQ9.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DXXtGMUJ.js → index-DLdrHhML.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-B0PMlbMs.js → index-Dc77VR3H.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-D0zcy54x.js → index-Dfv2lKu3.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BN6UPD2E.js → index-DiW0sDkz.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Dxge-xWl.js → index-DpTHIRfZ.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CyOGN6a5.js → index-DqFXGzzC.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-B9O9YyWE.js → index-XFe-1twF.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BHNYPO0b.js → index-p2HYn89m.js} +3 -3
  132. package/src/assets/web-panel/assets/{index-CVQMeiwH.js → index-pqfux8vZ.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-pPL66J85.js → index-rjzk9z1Q.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-DoQA0-52.js → index-th2ihDc0.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-B5REnKt8.js → index-u2YVld9W.js} +1 -1
  136. package/src/assets/web-panel/assets/index-xYybvEic.js +1 -0
  137. package/src/assets/web-panel/assets/{initDefaultProps-BTL88of4.js → initDefaultProps-C3Djh9fa.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-BUB2pXwB.js → motion-BzqFmbSe.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-egCkkOMm.js → move-DJo_FFaW.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-DAWhZC8c.js → mtc-parser-_tlTiBvk.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-CvOxe_6d.js → omit-CB2ZyxUg.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-DZUSLZ5Z.js → pickAttrs-DZwIFD4u.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-BERxGNMY.js → placementArrow-DxZY0dgk.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-DZuDfZ9n.js → responsiveObserve-CzzGt7GL.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-DO756sgI.js → slide-BaIK52yz.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-BRQlIz28.js → statusUtils-3-FHu9_M.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-DCSfdybl.js → styleChecker-BkRT68fK.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-LD8dWVve.js → useFlexGapSupport-DHYwKS-s.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-BX9uW2LK.js → useFs-DVVUhV8p.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-BPSlPuHU.js → usePersonalDataHub-CkrFKAzQ.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-BmOILC9V.js → vnode-BuBLFz0c.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-1iKowKGg.js → zoom-kpm6LtXU.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/command-help-index.json +3 -3
  155. package/src/commands/cowork.js +418 -41
  156. package/src/commands/permissions.js +240 -16
  157. package/src/commands/plugin.js +1293 -56
  158. package/src/commands/session-location.js +276 -0
  159. package/src/commands/session.js +2 -0
  160. package/src/data/changelog.json +28 -2
  161. package/src/gateways/ws/action-protocol.js +316 -17
  162. package/src/gateways/ws/message-dispatcher.js +30 -0
  163. package/src/gateways/ws/remote-session-protocol.js +565 -35
  164. package/src/gateways/ws/ws-agent-handler.js +12 -0
  165. package/src/gateways/ws/ws-approval-gate.js +5 -0
  166. package/src/gateways/ws/ws-server.js +510 -50
  167. package/src/harness/jsonl-session-store.js +341 -24
  168. package/src/harness/mcp-client.js +8 -1
  169. package/src/harness/remote-session-audit.js +2 -0
  170. package/src/harness/remote-session-crypto.js +929 -21
  171. package/src/harness/remote-session-registry.js +945 -24
  172. package/src/harness/session-list-index.js +233 -14
  173. package/src/lib/agent-authority.js +6 -0
  174. package/src/lib/auto-mode-config.js +98 -3
  175. package/src/lib/background-agent-keeper-client.js +248 -0
  176. package/src/lib/background-agent-keeper-protocol.js +291 -0
  177. package/src/lib/background-agent-supervisor.js +1357 -85
  178. package/src/lib/background-interaction-resolver.js +12 -0
  179. package/src/lib/background-session-transport.js +23 -6
  180. package/src/lib/background-turn-bootstrap-protocol.js +190 -0
  181. package/src/lib/cowork-workflow.js +1188 -76
  182. package/src/lib/delivery-production-adapter.js +38 -2
  183. package/src/lib/dynamic-workflow-facade.js +1736 -0
  184. package/src/lib/execution-location-contract.js +551 -0
  185. package/src/lib/execution-location-runtime.js +130 -0
  186. package/src/lib/ide-context.js +94 -6
  187. package/src/lib/mcp-stdio-package-materialization.js +166 -14
  188. package/src/lib/packer/pkg-config-generator.js +2 -0
  189. package/src/lib/permission-authority.js +77 -0
  190. package/src/lib/permission-side-effect-center.js +495 -0
  191. package/src/lib/plugin-runtime/install.js +514 -13
  192. package/src/lib/plugin-runtime/marketplace-artifact-readback.js +900 -0
  193. package/src/lib/plugin-runtime/marketplace-catalog.js +1181 -0
  194. package/src/lib/plugin-runtime/marketplace-impact.js +408 -0
  195. package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +1567 -0
  196. package/src/lib/plugin-security.js +60 -3
  197. package/src/lib/process-execution-broker/index.js +1095 -57
  198. package/src/lib/process-execution-broker/linux-bwrap-descriptor-launch.js +375 -0
  199. package/src/lib/process-execution-broker/linux-generic-bwrap-runtime.js +90 -16
  200. package/src/lib/process-execution-broker/linux-generic-bwrap.js +159 -18
  201. package/src/lib/process-execution-broker/macos-mcp-launcher-contract.js +278 -0
  202. package/src/lib/process-execution-broker/macos-mcp-launcher-protocol.json +23 -0
  203. package/src/lib/process-execution-broker/macos-mcp-launcher.c +1497 -0
  204. package/src/lib/process-execution-broker/mcp-fd-entry-bootstrap.js +37 -0
  205. package/src/lib/process-execution-broker/platform-sandbox.js +2330 -279
  206. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  207. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  208. package/src/lib/process-execution-broker/windows-sandbox.cs +50 -4
  209. package/src/lib/public-ide-capability-manifest.js +3 -0
  210. package/src/lib/remote-approval-bridge.js +777 -34
  211. package/src/lib/remote-control.js +2 -0
  212. package/src/lib/remote-membership-authority.js +632 -0
  213. package/src/lib/remote-membership-coordinator.js +2973 -0
  214. package/src/lib/remote-membership-host-store.js +1799 -0
  215. package/src/lib/runtime-provenance-ledger.js +171 -46
  216. package/src/lib/scoped-permission-store.js +369 -0
  217. package/src/lib/session-anti-rollback-anchor.js +262 -5
  218. package/src/lib/shell-approval.js +169 -6
  219. package/src/lib/sub-agent-context.js +4 -0
  220. package/src/lib/with-file-lock.js +73 -38
  221. package/src/lib/workflow-definition-contract.js +149 -0
  222. package/src/repl/agent-repl.js +111 -36
  223. package/src/repl/chat-repl.js +2 -0
  224. package/src/repl/clipboard-image.js +735 -16
  225. package/src/repl/ide-status.js +1 -1
  226. package/src/repl/prompt-interactions.js +59 -6
  227. package/src/repl/remote-approval.js +29 -7
  228. package/src/runtime/agent-core.js +1182 -155
  229. package/src/runtime/headless-runner.js +52 -30
  230. package/src/runtime/headless-stream.js +51 -28
  231. package/src/workers/background-agent-keeper.js +689 -0
  232. package/src/workers/background-agent-worker.js +365 -13
  233. package/src/workers/background-turn-bootstrap.js +170 -0
  234. package/src/assets/web-panel/assets/MarkdownRenderer-yySN5YNM.js +0 -1
  235. package/src/assets/web-panel/assets/OrderTableRenderer-Bb1O3Ofr.js +0 -1
  236. package/src/assets/web-panel/assets/Projects-CMolGhae.js +0 -1
  237. package/src/assets/web-panel/assets/RemoteSession-Biyn2-Ro.js +0 -5
  238. package/src/assets/web-panel/assets/devWarning-S1ld2LwU.js +0 -1
  239. package/src/assets/web-panel/assets/index-Drz6yq0m.js +0 -1
  240. package/src/assets/web-panel/assets/index-uWiUs7S_.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chainlesschain",
3
- "version": "0.163.8",
3
+ "version": "0.165.1",
4
4
  "description": "CLI for ChainlessChain - install, configure, and manage your personal AI management system",
5
5
  "type": "module",
6
6
  "bin": {
@@ -56,6 +56,9 @@
56
56
  "scripts/postinstall.mjs",
57
57
  "scripts/repair-node-pty.mjs",
58
58
  "scripts/build-windows-sandbox-helper.ps1",
59
+ "scripts/macos-mcp-launcher-build.mjs",
60
+ "scripts/macos-mcp-launcher-preinstall.sh",
61
+ "scripts/macos-mcp-launcher-postinstall.sh",
59
62
  "scripts/command-lifecycle-report.mjs",
60
63
  "README.md"
61
64
  ],
@@ -83,8 +86,8 @@
83
86
  "@chainlesschain/core-infra": "0.1.1",
84
87
  "@chainlesschain/core-mtc": "0.2.3",
85
88
  "@chainlesschain/core-multisig": "0.1.4",
86
- "@chainlesschain/personal-data-hub": "0.4.57",
87
- "@chainlesschain/session-core": "0.3.4",
89
+ "@chainlesschain/personal-data-hub": "0.4.58",
90
+ "@chainlesschain/session-core": "0.3.5",
88
91
  "@chainlesschain/shared-logger": "0.1.1",
89
92
  "@inquirer/prompts": "^7.2.0",
90
93
  "@noble/curves": "^1.9.7",
@@ -93,7 +96,7 @@
93
96
  "chalk": "^5.4.1",
94
97
  "commander": "^12.1.0",
95
98
  "esbuild-wasm": "0.28.1",
96
- "js-yaml": "^3.14.0",
99
+ "js-yaml": "^3.15.1",
97
100
  "ora": "^8.1.1",
98
101
  "semver": "^7.6.3",
99
102
  "sql.js": "^1.14.1",
@@ -0,0 +1,317 @@
1
+ #!/usr/bin/env node
2
+
3
+ import crypto from "node:crypto";
4
+ import fs from "node:fs";
5
+ import os from "node:os";
6
+ import path from "node:path";
7
+ import { spawnSync } from "node:child_process";
8
+ import { fileURLToPath } from "node:url";
9
+ import {
10
+ MACOS_MCP_LAUNCHER_INPUTS,
11
+ MACOS_MCP_LAUNCHER_INSTALL_CONTRACT_SCHEMA,
12
+ isMacosMcpLauncherPackageVersion,
13
+ verifyMacosMcpLauncherInstallContract,
14
+ } from "../src/lib/process-execution-broker/macos-mcp-launcher-contract.js";
15
+
16
+ export {
17
+ MACOS_MCP_LAUNCHER_INSTALL_CONTRACT_SCHEMA,
18
+ verifyMacosMcpLauncherInstallContract,
19
+ };
20
+ export const MACOS_MCP_LAUNCHER_SOURCE = MACOS_MCP_LAUNCHER_INPUTS.sourcePath;
21
+ export const MACOS_MCP_LAUNCHER_PROTOCOL =
22
+ MACOS_MCP_LAUNCHER_INPUTS.protocolPath;
23
+
24
+ function sha256(bytes) {
25
+ return crypto.createHash("sha256").update(bytes).digest("hex");
26
+ }
27
+
28
+ export function loadMacosMcpLauncherBuildInputs() {
29
+ return MACOS_MCP_LAUNCHER_INPUTS;
30
+ }
31
+
32
+ function cString(value) {
33
+ if (typeof value !== "string" || value.includes("\0")) {
34
+ throw new TypeError("generated C string must be NUL-free");
35
+ }
36
+ return JSON.stringify(value);
37
+ }
38
+
39
+ export function generatedMacosMcpLauncherHeader(inputs) {
40
+ const { protocol } = inputs;
41
+ return [
42
+ "#ifndef CHAINLESSCHAIN_MACOS_MCP_LAUNCHER_GENERATED_H",
43
+ "#define CHAINLESSCHAIN_MACOS_MCP_LAUNCHER_GENERATED_H",
44
+ `#define CC_PROTOCOL_VERSION ${protocol.protocolVersion}`,
45
+ `#define CC_PROTOCOL_SHA256 ${cString(inputs.protocolSha256)}`,
46
+ `#define CC_HELPER_SOURCE_SHA256 ${cString(inputs.sourceSha256)}`,
47
+ `#define CC_GATE_BOOTSTRAP_SHA256 ${cString(inputs.gateBootstrapSha256)}`,
48
+ `#define CC_GATE_BOOTSTRAP ${cString(inputs.gateBootstrap)}`,
49
+ `#define CC_PACKAGE_IDENTIFIER ${cString(protocol.packageIdentifier)}`,
50
+ `#define CC_HELPER_INSTALL_PATH ${cString(protocol.helperInstallPath)}`,
51
+ `#define CC_INSTALL_CONTRACT_PATH ${cString(protocol.installContractPath)}`,
52
+ `#define CC_SNAPSHOT_ROOT ${cString(protocol.snapshotRoot)}`,
53
+ `#define CC_SNAPSHOT_LOCK_NAME ${cString(protocol.snapshotLockName)}`,
54
+ `#define CC_SANDBOX_EXECUTABLE ${cString(protocol.sandboxExecutable)}`,
55
+ `#define CC_RUNTIME_FD ${protocol.runtimeFd}`,
56
+ `#define CC_ENTRY_FD ${protocol.entryFd}`,
57
+ `#define CC_CAPSULE_ROOT_FD ${protocol.capsuleRootFd}`,
58
+ `#define CC_GATE_FD ${protocol.gateFd}`,
59
+ `#define CC_READY_FD ${protocol.readyFd}`,
60
+ `#define CC_CALLER_LIFELINE_FD ${protocol.callerLifelineFd}`,
61
+ `#define CC_MAXIMUM_RUNTIME_BYTES ${protocol.maximumRuntimeBytes}`,
62
+ `#define CC_MAXIMUM_ENTRY_BYTES ${protocol.maximumEntryBytes}`,
63
+ `#define CC_MAXIMUM_PASSTHROUGH_ARGS ${protocol.maximumPassthroughArgs}`,
64
+ `#define CC_MAX_STALE_SNAPSHOTS ${protocol.maximumStaleSnapshots}`,
65
+ `#define CC_READY_TIMEOUT_MS ${protocol.readyTimeoutMs}`,
66
+ "#endif",
67
+ "",
68
+ ].join("\n");
69
+ }
70
+
71
+ function run(command, args, options = {}) {
72
+ const result = spawnSync(command, args, {
73
+ encoding: "utf8",
74
+ stdio: "pipe",
75
+ timeout: 120_000,
76
+ ...options,
77
+ });
78
+ if (result.error || result.status !== 0 || result.signal) {
79
+ const detail = String(result.stderr || result.stdout || "").trim();
80
+ throw (
81
+ result.error ||
82
+ new Error(
83
+ `${path.basename(command)} failed (${result.status ?? result.signal}): ${detail}`,
84
+ )
85
+ );
86
+ }
87
+ return result;
88
+ }
89
+
90
+ export function macosMcpLauncherCompilerArguments({
91
+ sdkPath,
92
+ temporaryRoot,
93
+ sourcePath = MACOS_MCP_LAUNCHER_SOURCE,
94
+ outputPath,
95
+ }) {
96
+ for (const [name, value] of Object.entries({
97
+ sdkPath,
98
+ temporaryRoot,
99
+ sourcePath,
100
+ outputPath,
101
+ })) {
102
+ if (typeof value !== "string" || !path.isAbsolute(value)) {
103
+ throw new TypeError(`${name} must be an absolute path`);
104
+ }
105
+ }
106
+ return [
107
+ "-std=c11",
108
+ "-O2",
109
+ "-Wall",
110
+ "-Wextra",
111
+ "-Werror",
112
+ "-Wno-deprecated-declarations",
113
+ "-mmacosx-version-min=13.0",
114
+ "-isysroot",
115
+ sdkPath,
116
+ "-I",
117
+ temporaryRoot,
118
+ sourcePath,
119
+ "-o",
120
+ outputPath,
121
+ ];
122
+ }
123
+
124
+ export function buildMacosMcpLauncher(outputPath, options = {}) {
125
+ if ((options.platform || process.platform) !== "darwin") {
126
+ throw new Error("macOS MCP launcher can only be compiled on macOS");
127
+ }
128
+ const inputs = loadMacosMcpLauncherBuildInputs();
129
+ const temporaryRoot = fs.mkdtempSync(
130
+ path.join(options.tmpdir || os.tmpdir(), "cc-macos-mcp-launcher-build-"),
131
+ );
132
+ try {
133
+ const header = path.join(temporaryRoot, "macos-mcp-launcher-generated.h");
134
+ fs.writeFileSync(header, generatedMacosMcpLauncherHeader(inputs), {
135
+ mode: 0o600,
136
+ });
137
+ const output = path.resolve(outputPath);
138
+ fs.mkdirSync(path.dirname(output), { recursive: true });
139
+ const clang = run("/usr/bin/xcrun", [
140
+ "--sdk",
141
+ "macosx",
142
+ "--find",
143
+ "clang",
144
+ ]).stdout.trim();
145
+ const sdkPath = fs.realpathSync(
146
+ run("/usr/bin/xcrun", [
147
+ "--sdk",
148
+ "macosx",
149
+ "--show-sdk-path",
150
+ ]).stdout.trim(),
151
+ );
152
+ run(
153
+ clang,
154
+ macosMcpLauncherCompilerArguments({
155
+ sdkPath,
156
+ temporaryRoot,
157
+ outputPath: output,
158
+ }),
159
+ );
160
+ fs.chmodSync(output, 0o755);
161
+ return Object.freeze({ output, ...inputs });
162
+ } finally {
163
+ fs.rmSync(temporaryRoot, { recursive: true, force: true });
164
+ }
165
+ }
166
+
167
+ function parseCodesignDetails(stderr) {
168
+ const details = String(stderr || "");
169
+ const teamIdentifier = details.match(/^TeamIdentifier=(.+)$/mu)?.[1];
170
+ const signingIdentifier = details.match(/^Identifier=(.+)$/mu)?.[1];
171
+ if (!teamIdentifier || !/^[A-Z0-9]{10}$/u.test(teamIdentifier)) {
172
+ throw new Error("signed helper has no valid Developer ID team identifier");
173
+ }
174
+ if (signingIdentifier !== "com.chainlesschain.cli.mcp-launcher") {
175
+ throw new Error("signed helper identifier does not match the launcher");
176
+ }
177
+ if (!/^CodeDirectory .+ flags=.+\(runtime\)/mu.test(details)) {
178
+ throw new Error("signed helper does not require the hardened runtime");
179
+ }
180
+ return { teamIdentifier, signingIdentifier };
181
+ }
182
+
183
+ export function createMacosMcpLauncherInstallContract({
184
+ helperPath,
185
+ expectedTeamIdentifier,
186
+ expectedDesignatedRequirement,
187
+ packageVersion,
188
+ platform = process.platform,
189
+ }) {
190
+ if (platform !== "darwin") {
191
+ throw new Error("signed helper contract can only be created on macOS");
192
+ }
193
+ if (!/^[A-Z0-9]{10}$/u.test(expectedTeamIdentifier || "")) {
194
+ throw new Error("expected macOS team identifier is invalid");
195
+ }
196
+ if (
197
+ typeof expectedDesignatedRequirement !== "string" ||
198
+ !expectedDesignatedRequirement.startsWith("identifier ")
199
+ ) {
200
+ throw new Error("expected designated requirement is invalid");
201
+ }
202
+ if (!isMacosMcpLauncherPackageVersion(packageVersion)) {
203
+ throw new Error("macOS MCP launcher package version is invalid");
204
+ }
205
+ const inputs = loadMacosMcpLauncherBuildInputs();
206
+ const helper = path.resolve(helperPath);
207
+ const verification = run("/usr/bin/codesign", [
208
+ "--verify",
209
+ "--strict",
210
+ "--verbose=4",
211
+ `-R=${expectedDesignatedRequirement}`,
212
+ helper,
213
+ ]);
214
+ const description = run("/usr/bin/codesign", ["-dvvv", helper]);
215
+ const signing = parseCodesignDetails(description.stderr);
216
+ const requirement = run("/usr/bin/codesign", [
217
+ "-dr",
218
+ "-",
219
+ helper,
220
+ ]).stderr.match(/^designated => (.+)$/mu)?.[1];
221
+ if (
222
+ verification.status !== 0 ||
223
+ signing.teamIdentifier !== expectedTeamIdentifier ||
224
+ requirement !== expectedDesignatedRequirement
225
+ ) {
226
+ throw new Error("helper signature does not match protected release policy");
227
+ }
228
+ const helperBytes = fs.readFileSync(helper);
229
+ return Object.freeze({
230
+ schema: MACOS_MCP_LAUNCHER_INSTALL_CONTRACT_SCHEMA,
231
+ protocolVersion: inputs.protocol.protocolVersion,
232
+ protocolSha256: inputs.protocolSha256,
233
+ sourceSha256: inputs.sourceSha256,
234
+ gateBootstrapSha256: inputs.gateBootstrapSha256,
235
+ helperSha256: sha256(helperBytes),
236
+ helperBytes: helperBytes.length,
237
+ packageIdentifier: inputs.protocol.packageIdentifier,
238
+ packageVersion,
239
+ helperInstallPath: inputs.protocol.helperInstallPath,
240
+ installContractPath: inputs.protocol.installContractPath,
241
+ snapshotRoot: inputs.protocol.snapshotRoot,
242
+ snapshotLockName: inputs.protocol.snapshotLockName,
243
+ sandboxExecutable: inputs.protocol.sandboxExecutable,
244
+ ownerUid: 0,
245
+ ownerGid: 0,
246
+ helperMode: "4555",
247
+ contractMode: "0444",
248
+ snapshotRootMode: "0711",
249
+ snapshotLockMode: "0600",
250
+ snapshotLockMechanism:
251
+ "root-helper-openat-o_excl-preserve-inode-across-upgrade-v1",
252
+ signingIdentifier: signing.signingIdentifier,
253
+ teamIdentifier: signing.teamIdentifier,
254
+ designatedRequirement: requirement,
255
+ hardenedRuntimeRequired: true,
256
+ notarizedPackageRequired: true,
257
+ rootInstallRequired: true,
258
+ runtimeSnapshotMechanism: "root-copy-hash-protected-path-ready-unlink-v1",
259
+ entrySnapshotMechanism:
260
+ "root-copy-hash-readonly-reopen-unlink-fsync-fd4-v1",
261
+ targetDescriptorMechanism:
262
+ "stdio-fd3-null-fd4-entry-fd5-null-fd6-gate-fd7-ready-bootstrap-close-v1",
263
+ callerLifelineFd: inputs.protocol.callerLifelineFd,
264
+ globalLaunchSerialization: true,
265
+ maximumStaleSnapshots: inputs.protocol.maximumStaleSnapshots,
266
+ sandboxExecLiveGateRequired: true,
267
+ parentDeathLiveGateRequired: true,
268
+ inPlaceOverwriteLiveGateRequired: true,
269
+ signalFloodLiveGateRequired: true,
270
+ snapshotLockUpgradeLiveGateRequired: true,
271
+ });
272
+ }
273
+
274
+ function usage() {
275
+ throw new Error(
276
+ "usage: macos-mcp-launcher-build.mjs build <output> | contract <signed-helper> <team-id> <requirement> <package-version> <output.json>",
277
+ );
278
+ }
279
+
280
+ function main(argv = process.argv.slice(2)) {
281
+ if (argv[0] === "build" && argv.length === 2) {
282
+ const built = buildMacosMcpLauncher(argv[1]);
283
+ process.stdout.write(`${built.sourceSha256} ${built.output}\n`);
284
+ return;
285
+ }
286
+ if (argv[0] === "contract" && argv.length === 6) {
287
+ const contract = createMacosMcpLauncherInstallContract({
288
+ helperPath: argv[1],
289
+ expectedTeamIdentifier: argv[2],
290
+ expectedDesignatedRequirement: argv[3],
291
+ packageVersion: argv[4],
292
+ });
293
+ verifyMacosMcpLauncherInstallContract(contract);
294
+ fs.writeFileSync(
295
+ path.resolve(argv[5]),
296
+ `${JSON.stringify(contract, null, 2)}\n`,
297
+ {
298
+ mode: 0o600,
299
+ },
300
+ );
301
+ process.stdout.write(`${contract.helperSha256} ${argv[5]}\n`);
302
+ return;
303
+ }
304
+ usage();
305
+ }
306
+
307
+ if (
308
+ process.argv[1] &&
309
+ path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)
310
+ ) {
311
+ try {
312
+ main();
313
+ } catch (error) {
314
+ process.stderr.write(`macOS MCP launcher build failed: ${error.message}\n`);
315
+ process.exitCode = 1;
316
+ }
317
+ }
@@ -0,0 +1,54 @@
1
+ #!/bin/sh
2
+
3
+ set -eu
4
+
5
+ helper='/Library/PrivilegedHelperTools/com.chainlesschain.cli.mcp-launcher'
6
+ contract='/Library/PrivilegedHelperTools/com.chainlesschain.cli.mcp-launcher.json'
7
+ base='/Library/Application Support/ChainlessChain'
8
+ launcher="$base/McpLauncher"
9
+ snapshot_root="$launcher/runtime"
10
+ lock="$snapshot_root/launcher.lock"
11
+
12
+ verify_directory() {
13
+ candidate=$1
14
+ expected_mode=$2
15
+ if [ -L "$candidate" ] || [ ! -d "$candidate" ]; then
16
+ echo "invalid macOS MCP launcher directory: $candidate" >&2
17
+ exit 77
18
+ fi
19
+ if [ "$(/usr/bin/stat -f '%u:%g:%Lp' "$candidate")" != "0:0:$expected_mode" ]; then
20
+ echo "untrusted macOS MCP launcher directory metadata: $candidate" >&2
21
+ exit 77
22
+ fi
23
+ }
24
+
25
+ verify_regular() {
26
+ candidate=$1
27
+ expected_mode=$2
28
+ if [ -L "$candidate" ] || [ ! -f "$candidate" ]; then
29
+ echo "invalid macOS MCP launcher member: $candidate" >&2
30
+ exit 77
31
+ fi
32
+ if [ "$(/usr/bin/stat -f '%u:%g:%Lp:%l' "$candidate")" != "0:0:$expected_mode:1" ]; then
33
+ echo "untrusted macOS MCP launcher member metadata: $candidate" >&2
34
+ exit 77
35
+ fi
36
+ }
37
+
38
+ # This script deliberately never repairs pre-existing ownership or modes. The
39
+ # signed pkg payload installs the helper, contract, and directories. The helper
40
+ # creates the lock with openat(O_CREAT|O_EXCL|O_NOFOLLOW) only when absent; an
41
+ # exact existing lock is verified and preserved across upgrades.
42
+ verify_directory '/Library' 755
43
+ verify_directory '/Library/PrivilegedHelperTools' 755
44
+ verify_directory '/Library/Application Support' 755
45
+ verify_directory "$base" 755
46
+ verify_directory "$launcher" 755
47
+ verify_directory "$snapshot_root" 711
48
+ verify_regular "$helper" 4555
49
+ verify_regular "$contract" 444
50
+ /usr/bin/codesign --verify --strict --verbose=4 "$helper"
51
+ "$helper" --install-lock-v1
52
+ verify_regular "$lock" 600
53
+
54
+ exit 0
@@ -0,0 +1,61 @@
1
+ #!/bin/sh
2
+
3
+ set -eu
4
+
5
+ helper='/Library/PrivilegedHelperTools/com.chainlesschain.cli.mcp-launcher'
6
+ contract='/Library/PrivilegedHelperTools/com.chainlesschain.cli.mcp-launcher.json'
7
+ base='/Library/Application Support/ChainlessChain'
8
+ launcher="$base/McpLauncher"
9
+ snapshot_root="$launcher/runtime"
10
+ lock="$snapshot_root/launcher.lock"
11
+
12
+ verify_directory() {
13
+ candidate=$1
14
+ expected_mode=$2
15
+ optional=$3
16
+ if [ ! -e "$candidate" ] && [ ! -L "$candidate" ]; then
17
+ [ "$optional" = 1 ] && return 0
18
+ echo "required macOS MCP launcher parent is absent: $candidate" >&2
19
+ exit 77
20
+ fi
21
+ if [ -L "$candidate" ] || [ ! -d "$candidate" ]; then
22
+ echo "refusing untrusted macOS MCP launcher directory: $candidate" >&2
23
+ exit 77
24
+ fi
25
+ if [ "$(/usr/bin/stat -f '%u:%g:%Lp' "$candidate")" != "0:0:$expected_mode" ]; then
26
+ echo "refusing macOS MCP launcher directory metadata: $candidate" >&2
27
+ exit 77
28
+ fi
29
+ }
30
+
31
+ verify_regular_if_present() {
32
+ candidate=$1
33
+ expected_mode=$2
34
+ if [ ! -e "$candidate" ] && [ ! -L "$candidate" ]; then
35
+ return 0
36
+ fi
37
+ if [ -L "$candidate" ] || [ ! -f "$candidate" ]; then
38
+ echo "refusing untrusted macOS MCP launcher member: $candidate" >&2
39
+ exit 77
40
+ fi
41
+ if [ "$(/usr/bin/stat -f '%u:%g:%Lp:%l' "$candidate")" != "0:0:$expected_mode:1" ]; then
42
+ echo "refusing macOS MCP launcher member metadata: $candidate" >&2
43
+ exit 77
44
+ fi
45
+ }
46
+
47
+ # Every optional product component is either absent below a verified,
48
+ # non-user-writable root parent or already has the exact trusted metadata from
49
+ # an earlier signed install. A non-root caller therefore cannot swap it after
50
+ # this check; root compromise remains explicitly out of scope.
51
+ verify_directory '/Library' 755 0
52
+ verify_directory '/Library/Application Support' 755 0
53
+ verify_directory '/Library/PrivilegedHelperTools' 755 1
54
+ verify_directory "$base" 755 1
55
+ verify_directory "$launcher" 755 1
56
+ verify_directory "$snapshot_root" 711 1
57
+ verify_regular_if_present "$helper" 4555
58
+ verify_regular_if_present "$contract" 444
59
+ verify_regular_if_present "$lock" 600
60
+
61
+ exit 0
@@ -1 +1 @@
1
- 0533b40f709896f0e2716d88e81405f70b394c6b070a69ffec5111a5a71096eb
1
+ 7501ce7991944fc2f8f59425dd357617431dca3c12f0059d15e4ca10e63b4df7