chainlesschain 0.163.7 → 0.164.0

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 (252) hide show
  1. package/package.json +5 -1
  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/assets/{AIOps-axqQfwv8.js → AIOps-D2MEn7fI.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-DV-Ro0By.js → ActionButton-lCW_4Gf0.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-Bt72WEVu.js → Analytics-Bs7i-nsS.js} +3 -3
  8. package/src/assets/web-panel/assets/{AppLayout-BtepG55E.js → AppLayout-CK7B6S_j.js} +5 -5
  9. package/src/assets/web-panel/assets/{Artifacts-B7KaJ7S_.js → Artifacts-C8ILjpyo.js} +1 -1
  10. package/src/assets/web-panel/assets/{Audit-FNFaUg7A.js → Audit-Bb9cNaWc.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-DFb6J2wQ.js → BackgroundAgents-sC9ooXIf.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-CC7YBhyj.js → Backup-D-DrsplT.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-RkgTNVtj.js → BaseInput-uCNZpwSK.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-hHEmGZy-.js → Chat-CsDK1uE9.js} +6 -6
  15. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CAP9YhHv.js → ChatBubbleRenderer-OqSDt50w.js} +1 -1
  16. package/src/assets/web-panel/assets/{Checkbox-z5wXOQP1.js → Checkbox-JhTXM1-K.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-DVaDJnxy.js → Codegen-BbzZLnyD.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-CJmaRDR5.js → Col-D4VW4m4j.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-DF29_2bI.js → Community-BXrYawxV.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-DtkQkBzn.js → Compact-DCihGy1u.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-xoHDxp7I.js → Compliance-DlyZ-lk8.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-BUm-R7ht.js → Cowork-DvGZrhbO.js} +2 -2
  23. package/src/assets/web-panel/assets/{Cron-Cgl14ZkB.js → Cron-DUncZi8h.js} +2 -2
  24. package/src/assets/web-panel/assets/{Crosschain-BNcbmoqh.js → Crosschain-C_hLuUcm.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-Bwja0Zo9.js → DID-b6YSUqxr.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dashboard-Bk5XjEdJ.js → Dashboard-uvM15Cfb.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-Ci36Oitq.js → Dropdown-D1-Nd4qY.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer--U04ZN4q.js → EmailListRenderer-8ApvL6Zc.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-B2gNPR2s.js → FamilyGuardDashboard-LYJt8811.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-C4KghYn7.js → Federation-BbI3HGpv.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-QL7x_Q_0.js → FormItemContext-DSoEKuFu.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-F3Ryltwm.js → GenericCardRenderer-B0S9OWd5.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-2HassK5k.js → Git-DIs9Zhf3.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-DoBIp7oe.js → Governance-jzZXrxcl.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference--W01QhZ-.js → Inference-JUPjf2ZI.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-DmvwqGpT.js → KnowledgeGraph-DxnfJvlP.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-BBJ4yAel.js → Logs-iXiz8BEE.js} +2 -2
  38. package/src/assets/web-panel/assets/{MarkdownRenderer-BLCZMzhJ.js → MarkdownRenderer-GmB6DOr6.js} +1 -1
  39. package/src/assets/web-panel/assets/{Marketplace-D5lNngSI.js → Marketplace-Y3Xch312.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-CkEVOMKH.js → McpTools-D7kGGbO7.js} +4 -4
  41. package/src/assets/web-panel/assets/{Memory-B1Ow1xVE.js → Memory-Do_hVxzh.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-SgYbUfb6.js → MobileBridge-CtrR0Tas.js} +1 -1
  43. package/src/assets/web-panel/assets/MobileProjects-BL0Czcoj.js +1 -0
  44. package/src/assets/web-panel/assets/{Mtc-DcTXSSma.js → Mtc-qo5QCTGd.js} +2 -2
  45. package/src/assets/web-panel/assets/{MtcAudit-Dt3WG4oj.js → MtcAudit-cq5mnjYj.js} +2 -2
  46. package/src/assets/web-panel/assets/{Multisig-B9B38UZx.js → Multisig-Bq0MAQHw.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-B0S4GGvG.js → NLProgramming-DdWE6Vi2.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-DZ5U58Ng.js → Notes-BxMBFcIp.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-PjL5ZW34.js → NotificationSettings-RTrAcbUe.js} +1 -1
  50. package/src/assets/web-panel/assets/{OrderTableRenderer-DrAX2ESt.js → OrderTableRenderer-DJbpGqzT.js} +1 -1
  51. package/src/assets/web-panel/assets/{Organization-Cv1GYs-c.js → Organization-SQzIPdqC.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-Bbkp_PL3.js → Overflow-02yECh22.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-BD8QUgoZ.js → P2P-BNg4pNCM.js} +2 -2
  54. package/src/assets/web-panel/assets/{PdhVaultBrowser-BO-2PeaB.js → PdhVaultBrowser-BxPJZsD3.js} +3 -3
  55. package/src/assets/web-panel/assets/{Permissions-D_OPVa02.js → Permissions-CLnDnPAz.js} +4 -4
  56. package/src/assets/web-panel/assets/{PersonalDataHub-mh-pEmaB.js → PersonalDataHub-C5m0AjGf.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-6JC2EDdb.js → Pipeline-VwOf5Dhv.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-CUshzUAG.js → Privacy-CC0W2hZd.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-Cs2Aalri.js → ProjectInit-Dz893Bob.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-1ak49tcj.js → ProjectSettings-CxQkvl0k.js} +2 -2
  61. package/src/assets/web-panel/assets/Projects-DDAjkUkT.js +1 -0
  62. package/src/assets/web-panel/assets/{Providers-CXXxvafH.js → Providers-DeB9IkxK.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-PTcDsF58.js → QrScannerModal-OCeoaswn.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-CDwucrJw.js → QuickAsk-DenotaAj.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-CJlLVRXR.js → Recommend-Cies_jjI.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-DlN-ETsO.js → RemoteSession-Dxzl5n2T.js} +3 -3
  67. package/src/assets/web-panel/assets/{Reputation-DI23LR6m.js → Reputation-CW0mvxgZ.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-Cl7UQMrM.js → Row-SEd32qZU.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-CexHNfh8.js → RssFeed-BSwnJ3Lm.js} +3 -3
  70. package/src/assets/web-panel/assets/{Search-BneBWvRN.js → Search-xe2m8bkC.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-DX7Phgrp.js → Security-Mq2F9Nro.js} +4 -4
  72. package/src/assets/web-panel/assets/{Services-BWXO8Mte.js → Services-BKGw2V3P.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-DCyOjKPJ.js → Skeleton-DW95-Rxf.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-CXqERsTB.js → Skills-CHgChCv_.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-bhbrbz8E.js → Sla-tKh6k3R7.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-3IPU0HBZ.js → SpeechSettings-D6UL3dA5.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-DBNTQLbM.js → SyncSettings-D0Fw8fVL.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-quP0bkN-.js → Tasks-20x1GB3D.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-BouWmgho.js → Templates-DJ-lts-a.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant-qv0D9s7z.js → Tenant-BFdGpbs7.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-BxvbE8BB.js → Terminal-Xpx61vHL.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-D-IeLnJ2.js → TimelineRenderer-C6UIvyZQ.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-CFMKKyVG.js → Tokens-Dellq08f.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-L8as3UuJ.js → Trigger-VKw8d0J-.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-MxmA4VZG.js → Trust-DNftdKT5.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-C0VvJYRi.js → UkeySign-DX9VAKJI.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-Bf5QZj8N.js → VideoEditing-B2h3jO8q.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-BIJ9riRz.js → Wallet-CjGkof7f.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-B8p9Mhkw.js → WebAuthn-2Zfcu55P.js} +4 -4
  90. package/src/assets/web-panel/assets/{WorkflowEditor-BVsuaPen.js → WorkflowEditor-B9eZ8UxZ.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-BfkjoKpV.js → chat-CQNfD-YO.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-DeAlsWK8.js → colors-D4usyFT2.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-Cs97bz5j.js → compact-item-s4TpjvjX.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-BqbG60LH.js → createContext-BRCSvYxj.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-DKJjSWRn.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-i_RY0b1X.js → hasIn-AdkUbkV-.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BOVkf1K3.js → index--00U6vXZ.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B-3tEpTc.js → index-B2V-eKfK.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-D2B4VPyP.js → index-B4JJCfQ2.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BkBi5TmC.js → index-BIoG5yYf.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-79V_zv1s.js → index-BMcimU-2.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-U4f5izHz.js → index-BPhkFZ1I.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DiSkx4UB.js → index-BQ3DXBtD.js} +3 -3
  104. package/src/assets/web-panel/assets/{index-dIHr4B_u.js → index-Bad4VNvz.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CIG8fQ2_.js → index-BgiXR_-_.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DqBgBpgp.js → index-BtobShro.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-ZxO_-E8a.js → index-Bw2MEnUk.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DUUrv141.js → index-C1mJtE6q.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Bm7lLR4c.js → index-C484EJiS.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-COdGA-8n.js → index-C5KAQFPQ.js} +1 -1
  111. package/src/assets/web-panel/assets/index-C61cnl3K.js +1 -0
  112. package/src/assets/web-panel/assets/{index-CED2PL_y.js → index-C7Y8Aluc.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-YXgLng0K.js → index-CCsM_Ybx.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-0-agYlWL.js → index-CJCFe2Qf.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-B5UkyA3c.js → index-CJVEOa4i.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-B1CbOH1i.js → index-CJdQrZth.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-s1opAL-M.js → index-CKC1t3Ic.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-yObj1O4n.js → index-CQhAVU5t.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CgsqdnRV.js → index-CYdoQsa1.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Dk7-v4hP.js → index-Cduu2Hhr.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-B-JVTrpr.js → index-CkwiSLhU.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CeWoNHau.js → index-Cvyt-zhm.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CE2VtTlp.js → index-D2GjI2oe.js} +1 -1
  124. package/src/assets/web-panel/assets/index-D4XFHxBr.js +1 -0
  125. package/src/assets/web-panel/assets/{index-DmbfhJUP.js → index-DARsAyUp.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BESLFt4q.js → index-DVKfQ0Ux.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-PT_5sBMA.js → index-DZT36ZYq.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-gyFpvL7l.js → index-D_XBHopw.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BYUVuwKt.js → index-DdCB70SS.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BcUXAB2s.js → index-DzRjHxEv.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Dk2qouAz.js → index-MMN9V6JF.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D9evtvg2.js → index-RfMr79MW.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-BuLQobzW.js → index-_IRVsV9X.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-Cf3WCLmy.js → index-nXyk8GZ9.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-CG3PRyAL.js → index-s_buFMEG.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-C9h9yKL3.js → initDefaultProps-Blmpk7HL.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-BvmLsPdu.js → motion-DPBJMv1n.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-CoL4ekU1.js → move-ButdzCM7.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-C4pMy6xV.js → mtc-parser-cyRC_QCe.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-DPuJfNxx.js → omit-1epSV7hz.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-D0KEeaK2.js → pickAttrs-DuPY8xJs.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-BpkyINxt.js → placementArrow-6XZqarhe.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-DQI_wOq8.js → responsiveObserve-B40pXBWM.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-DYfdDiRg.js → slide-jbZ9Wu4n.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-B5dtvb0D.js → statusUtils-BKQQcVy4.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-CF310mSj.js → styleChecker-NiKfWjUT.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-D1Qp4BLp.js → useFlexGapSupport-bQUCvPeb.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-C7_iyvJK.js → useFs-CUGji7ph.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-DZUt_fIm.js → usePersonalDataHub-4veyN2N2.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-D3dsi0lZ.js → vnode-1-nLug-Z.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-WdbOlvdQ.js → zoom-dhCeRDMo.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/command-help-index.json +6 -6
  154. package/src/commands/automation.js +103 -1
  155. package/src/commands/cowork.js +174 -19
  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/commands/team-merge-review.js +937 -0
  161. package/src/commands/team.js +2 -0
  162. package/src/data/changelog.json +27 -1
  163. package/src/gateways/ws/action-protocol.js +35 -10
  164. package/src/gateways/ws/remote-session-protocol.js +24 -1
  165. package/src/gateways/ws/ws-agent-handler.js +12 -0
  166. package/src/gateways/ws/ws-server.js +48 -12
  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 +1 -0
  170. package/src/harness/remote-session-crypto.js +210 -2
  171. package/src/harness/remote-session-registry.js +159 -6
  172. package/src/harness/session-list-index.js +233 -14
  173. package/src/lib/agent-authority.js +6 -0
  174. package/src/lib/agent-schedule-store.js +139 -28
  175. package/src/lib/agent-team/team-merge-review-store.js +765 -0
  176. package/src/lib/agent-team/team-merge-review-transaction.js +1223 -0
  177. package/src/lib/agent-team/team-merge-review.js +1847 -0
  178. package/src/lib/automation-center-incidents.js +314 -0
  179. package/src/lib/automation-center-runtime.js +448 -0
  180. package/src/lib/automation-center.js +182 -38
  181. package/src/lib/automation-engine.js +41 -0
  182. package/src/lib/automation-execution-authority.js +241 -12
  183. package/src/lib/automation-execution-incident.js +737 -0
  184. package/src/lib/background-agent-keeper-client.js +248 -0
  185. package/src/lib/background-agent-keeper-protocol.js +147 -0
  186. package/src/lib/background-agent-supervisor.js +520 -40
  187. package/src/lib/background-interaction-resolver.js +12 -0
  188. package/src/lib/background-turn-bootstrap-protocol.js +126 -0
  189. package/src/lib/cowork-cron.js +85 -14
  190. package/src/lib/cowork-workflow.js +336 -16
  191. package/src/lib/dynamic-workflow-facade.js +648 -0
  192. package/src/lib/execution-location-contract.js +551 -0
  193. package/src/lib/execution-location-runtime.js +130 -0
  194. package/src/lib/ide-context.js +94 -6
  195. package/src/lib/mcp-stdio-package-materialization.js +166 -14
  196. package/src/lib/packer/pkg-config-generator.js +2 -0
  197. package/src/lib/permission-authority.js +77 -0
  198. package/src/lib/permission-side-effect-center.js +495 -0
  199. package/src/lib/plugin-runtime/install.js +514 -13
  200. package/src/lib/plugin-runtime/marketplace-artifact-readback.js +900 -0
  201. package/src/lib/plugin-runtime/marketplace-catalog.js +1181 -0
  202. package/src/lib/plugin-runtime/marketplace-impact.js +408 -0
  203. package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +1567 -0
  204. package/src/lib/plugin-security.js +60 -3
  205. package/src/lib/process-execution-broker/index.js +1095 -57
  206. package/src/lib/process-execution-broker/linux-bwrap-descriptor-launch.js +375 -0
  207. package/src/lib/process-execution-broker/linux-generic-bwrap-runtime.js +90 -16
  208. package/src/lib/process-execution-broker/linux-generic-bwrap.js +159 -18
  209. package/src/lib/process-execution-broker/macos-mcp-launcher-contract.js +278 -0
  210. package/src/lib/process-execution-broker/macos-mcp-launcher-protocol.json +23 -0
  211. package/src/lib/process-execution-broker/macos-mcp-launcher.c +1497 -0
  212. package/src/lib/process-execution-broker/mcp-fd-entry-bootstrap.js +37 -0
  213. package/src/lib/process-execution-broker/platform-sandbox.js +2330 -279
  214. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  215. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  216. package/src/lib/process-execution-broker/windows-sandbox.cs +50 -4
  217. package/src/lib/public-ide-capability-manifest.js +3 -0
  218. package/src/lib/remote-approval-bridge.js +123 -17
  219. package/src/lib/remote-membership-authority.js +632 -0
  220. package/src/lib/remote-membership-coordinator.js +2409 -0
  221. package/src/lib/remote-membership-host-store.js +1750 -0
  222. package/src/lib/scheduler-kernel/agenda-adapter.js +17 -7
  223. package/src/lib/scheduler-kernel/automation-adapter.js +105 -11
  224. package/src/lib/scheduler-kernel/automation-event-adapter.js +87 -11
  225. package/src/lib/scheduler-kernel/contract.js +91 -0
  226. package/src/lib/scheduler-kernel/cowork-cron-adapter.js +12 -1
  227. package/src/lib/scheduler-kernel/loop-adapter.js +7 -1
  228. package/src/lib/scheduler-kernel/routine-adapter.js +7 -1
  229. package/src/lib/scheduler-kernel/runtime-control-capabilities.js +31 -0
  230. package/src/lib/scheduler-kernel/runtime.js +176 -3
  231. package/src/lib/scheduler-kernel/store.js +1253 -45
  232. package/src/lib/scoped-permission-store.js +369 -0
  233. package/src/lib/session-anti-rollback-anchor.js +262 -5
  234. package/src/lib/sub-agent-context.js +4 -0
  235. package/src/lib/workflow-definition-contract.js +149 -0
  236. package/src/repl/agent-repl.js +41 -7
  237. package/src/repl/chat-repl.js +2 -0
  238. package/src/repl/clipboard-image.js +735 -16
  239. package/src/repl/ide-status.js +1 -1
  240. package/src/repl/prompt-interactions.js +59 -6
  241. package/src/runtime/agent-core.js +93 -3
  242. package/src/runtime/headless-runner.js +30 -25
  243. package/src/runtime/headless-stream.js +32 -25
  244. package/src/runtime/mcp-config.js +81 -10
  245. package/src/workers/background-agent-keeper.js +498 -0
  246. package/src/workers/background-agent-worker.js +358 -13
  247. package/src/workers/background-turn-bootstrap.js +143 -0
  248. package/src/assets/web-panel/assets/MobileProjects-BWdOvQAj.js +0 -1
  249. package/src/assets/web-panel/assets/Projects-BV4oApsm.js +0 -1
  250. package/src/assets/web-panel/assets/devWarning-DPty0mGN.js +0 -1
  251. package/src/assets/web-panel/assets/index-Bt7g0Vq_.js +0 -1
  252. package/src/assets/web-panel/assets/index-ChVT0p9u.js +0 -1
@@ -323,6 +323,7 @@ export class SubAgentContext {
323
323
  // parent's policy, Plan lock, workspace sandbox, or unattended boundary.
324
324
  this._parentAuthority = Object.freeze({
325
325
  permissionRules: options.permissionRules || null,
326
+ permissionRulesProvider: options.permissionRulesProvider || null,
326
327
  hostManagedToolPolicy: options.hostManagedToolPolicy || null,
327
328
  planManager: options.planManager || null,
328
329
  sandbox: options.sandbox || null,
@@ -618,6 +619,9 @@ export class SubAgentContext {
618
619
  if (authority.permissionRules) {
619
620
  options.permissionRules = authority.permissionRules;
620
621
  }
622
+ if (authority.permissionRulesProvider) {
623
+ options.permissionRulesProvider = authority.permissionRulesProvider;
624
+ }
621
625
  if (authority.hostManagedToolPolicy) {
622
626
  options.hostManagedToolPolicy = authority.hostManagedToolPolicy;
623
627
  }
@@ -0,0 +1,149 @@
1
+ import { createHash } from "node:crypto";
2
+
3
+ export const WORKFLOW_DEFINITION_SCHEMA = "cc-dynamic-workflow-definition/v1";
4
+ export const COWORK_WORKFLOW_RECORD_SCHEMA = "cc-cowork-workflow-record/v1";
5
+ export const MAX_WORKFLOW_DEFINITION_BYTES = 1024 * 1024;
6
+
7
+ function stableJsonValue(value, state = { nodes: 0, depth: 0 }) {
8
+ state.nodes += 1;
9
+ if (state.nodes > 20_000 || state.depth > 32) {
10
+ throw new TypeError("workflow definition exceeds canonicalization limits");
11
+ }
12
+ if (
13
+ value === null ||
14
+ typeof value === "boolean" ||
15
+ typeof value === "string"
16
+ ) {
17
+ return value;
18
+ }
19
+ if (typeof value === "number") {
20
+ if (!Number.isFinite(value)) {
21
+ throw new TypeError("workflow definition contains a non-finite number");
22
+ }
23
+ return Object.is(value, -0) ? 0 : value;
24
+ }
25
+ if (Array.isArray(value)) {
26
+ const childState = { ...state, depth: state.depth + 1 };
27
+ const output = value.map((item) => stableJsonValue(item, childState));
28
+ state.nodes = childState.nodes;
29
+ return output;
30
+ }
31
+ if (value && typeof value === "object") {
32
+ const prototype = Object.getPrototypeOf(value);
33
+ if (prototype !== Object.prototype && prototype !== null) {
34
+ throw new TypeError(
35
+ "workflow definition must contain plain JSON objects",
36
+ );
37
+ }
38
+ const childState = { ...state, depth: state.depth + 1 };
39
+ const output = {};
40
+ for (const key of Object.keys(value).sort()) {
41
+ const child = value[key];
42
+ if (child === undefined) continue;
43
+ if (["function", "symbol", "bigint"].includes(typeof child)) {
44
+ throw new TypeError("workflow definition contains a non-JSON value");
45
+ }
46
+ output[key] = stableJsonValue(child, childState);
47
+ }
48
+ state.nodes = childState.nodes;
49
+ return output;
50
+ }
51
+ throw new TypeError("workflow definition contains a non-JSON value");
52
+ }
53
+
54
+ function deepFreeze(value) {
55
+ if (!value || typeof value !== "object" || Object.isFrozen(value)) {
56
+ return value;
57
+ }
58
+ for (const child of Object.values(value)) deepFreeze(child);
59
+ return Object.freeze(value);
60
+ }
61
+
62
+ function digestDefinition(definition) {
63
+ const canonical = JSON.stringify(definition);
64
+ if (Buffer.byteLength(canonical, "utf8") > MAX_WORKFLOW_DEFINITION_BYTES) {
65
+ throw new TypeError(
66
+ `workflow definition exceeds ${MAX_WORKFLOW_DEFINITION_BYTES} bytes`,
67
+ );
68
+ }
69
+ return `sha256:${createHash("sha256").update(canonical).digest("hex")}`;
70
+ }
71
+
72
+ function integrityError(message) {
73
+ const error = new Error(message);
74
+ error.code = "WORKFLOW_DEFINITION_INTEGRITY";
75
+ return error;
76
+ }
77
+
78
+ export function normalizeWorkflowDefinitionDigest(value) {
79
+ if (typeof value !== "string") return null;
80
+ const normalized = value.trim().toLowerCase();
81
+ return /^sha256:[a-f0-9]{64}$/u.test(normalized) ? normalized : null;
82
+ }
83
+
84
+ export function createWorkflowDefinitionAuthority(workflow) {
85
+ const definition = deepFreeze(stableJsonValue(workflow));
86
+ return Object.freeze({
87
+ schema: WORKFLOW_DEFINITION_SCHEMA,
88
+ definitionDigest: digestDefinition(definition),
89
+ definition,
90
+ });
91
+ }
92
+
93
+ export function createCoworkWorkflowRecord(workflow) {
94
+ const authority = createWorkflowDefinitionAuthority(workflow);
95
+ const record = {
96
+ schema: COWORK_WORKFLOW_RECORD_SCHEMA,
97
+ definitionSchema: authority.schema,
98
+ definitionDigest: authority.definitionDigest,
99
+ definition: authority.definition,
100
+ };
101
+ const serialized = JSON.stringify(record, null, 2);
102
+ if (Buffer.byteLength(serialized, "utf8") > MAX_WORKFLOW_DEFINITION_BYTES) {
103
+ throw new TypeError(
104
+ `workflow definition exceeds ${MAX_WORKFLOW_DEFINITION_BYTES} bytes`,
105
+ );
106
+ }
107
+ return Object.freeze(record);
108
+ }
109
+
110
+ export function verifyCoworkWorkflowRecord(value, options = {}) {
111
+ if (
112
+ value?.schema !== COWORK_WORKFLOW_RECORD_SCHEMA &&
113
+ options.allowLegacy === true
114
+ ) {
115
+ const authority = createWorkflowDefinitionAuthority(value);
116
+ return Object.freeze({
117
+ status: "legacy-unversioned",
118
+ recordSchema: null,
119
+ definitionSchema: authority.schema,
120
+ definitionDigest: authority.definitionDigest,
121
+ definition: authority.definition,
122
+ });
123
+ }
124
+ if (!value || value.schema !== COWORK_WORKFLOW_RECORD_SCHEMA) {
125
+ throw integrityError(
126
+ `workflow record must use ${COWORK_WORKFLOW_RECORD_SCHEMA}`,
127
+ );
128
+ }
129
+ if (value.definitionSchema !== WORKFLOW_DEFINITION_SCHEMA) {
130
+ throw integrityError("workflow definition schema is unsupported");
131
+ }
132
+ const declaredDigest = normalizeWorkflowDefinitionDigest(
133
+ value.definitionDigest,
134
+ );
135
+ if (!declaredDigest) {
136
+ throw integrityError("workflow definition digest is invalid");
137
+ }
138
+ const authority = createWorkflowDefinitionAuthority(value.definition);
139
+ if (authority.definitionDigest !== declaredDigest) {
140
+ throw integrityError("workflow definition digest mismatch");
141
+ }
142
+ return Object.freeze({
143
+ status: "versioned",
144
+ recordSchema: COWORK_WORKFLOW_RECORD_SCHEMA,
145
+ definitionSchema: authority.schema,
146
+ definitionDigest: authority.definitionDigest,
147
+ definition: authority.definition,
148
+ });
149
+ }
@@ -25,6 +25,7 @@ import path from "path";
25
25
  import { randomUUID } from "node:crypto";
26
26
  import { isPromise, isProxy } from "node:util/types";
27
27
  import { logger } from "../lib/logger.js";
28
+ import { captureAmbientExecutionLocation } from "../lib/execution-location-runtime.js";
28
29
  import { issueMcpStdioExecutionAuthority } from "../lib/mcp-stdio-execution-authority.js";
29
30
  import { getPlanModeManager, PlanState } from "../lib/plan-mode.js";
30
31
  import { createVimState, feedNormalKey } from "../lib/repl-vim.js";
@@ -88,6 +89,7 @@ import {
88
89
  persistSideEffectLedger,
89
90
  } from "../lib/side-effect-ledger-store.js";
90
91
  import { operationIdempotencyKey } from "../lib/idempotency.js";
92
+ import { collectToolResourceIdentifiers } from "../lib/permission-side-effect-center.js";
91
93
  import {
92
94
  preserveDurableSystemMessageProvenance,
93
95
  projectCanonicalResumeMessages,
@@ -173,6 +175,7 @@ import {
173
175
  createPromptInteractionSurface,
174
176
  mergeClipboardImageChips,
175
177
  } from "./prompt-interactions.js";
178
+ import { createSystemClipboardImageBinding } from "./clipboard-image.js";
176
179
  import {
177
180
  buildPermissionPrompt,
178
181
  resolveAskIdleTimeoutMs,
@@ -407,9 +410,11 @@ export async function runReplDirectToolWithLedger({
407
410
  let _hookDb = null;
408
411
  let _compressor = null;
409
412
  let _approvalGate = null;
410
- // .claude/settings.json permission rules (deny > ask > allow) + an interactive
411
- // confirmer for `ask` matches. Loaded once at REPL startup; null = no file.
413
+ // Static + CLI-owned scoped permission rules (deny > ask > allow) and an
414
+ // interactive confirmer for `ask` matches. Scoped rules are refreshed at each
415
+ // tool boundary so TTL expiry and external revocation affect a live session.
412
416
  let _permissionRules = null;
417
+ let _permissionRulesProvider = null;
413
418
  let _permissionConfirm = null;
414
419
  let _managedPermissionRulesOnly = false;
415
420
  // .claude/settings.json `hooks` block (decision-capable PreToolUse/PostToolUse).
@@ -546,6 +551,7 @@ async function executeTool(name, args) {
546
551
  cwd: process.cwd(),
547
552
  approvalGate: _approvalGate,
548
553
  permissionRules: _permissionRules,
554
+ permissionRulesProvider: _permissionRulesProvider,
549
555
  permissionConfirm: _permissionConfirm,
550
556
  settingsHooks: _settingsHooks,
551
557
  classifyAllShell: _classifyAllShell,
@@ -770,6 +776,12 @@ export async function agentLoop(messages, options) {
770
776
  key: sideEffect.key,
771
777
  meta: {
772
778
  tool: event.tool,
779
+ toolUseId: event.tool_use_id || null,
780
+ turnId: event.turn_id || null,
781
+ resources: collectToolResourceIdentifiers(
782
+ event.tool,
783
+ event.args,
784
+ ),
773
785
  idempotencyKey: operationIdempotencyKey({
774
786
  tool: event.tool,
775
787
  args: event.args,
@@ -3271,9 +3283,14 @@ async function startAgentReplInWorkspaceOwned(
3271
3283
  // Load .claude/settings.json permission rules + wire an interactive confirmer
3272
3284
  // so `ask` rules prompt (rather than fall closed like headless does).
3273
3285
  try {
3274
- const { loadSettings, readBooleanSetting } =
3275
- await import("../lib/settings-loader.cjs");
3276
- const loaded = loadSettings({ cwd: process.cwd() });
3286
+ const { readBooleanSetting } = await import("../lib/settings-loader.cjs");
3287
+ const { createPermissionRulesProvider, loadPermissionAuthority } =
3288
+ await import("../lib/permission-authority.js");
3289
+ const permissionAuthorityOptions = { cwd: process.cwd() };
3290
+ const loaded = loadPermissionAuthority(permissionAuthorityOptions);
3291
+ _permissionRulesProvider = createPermissionRulesProvider(
3292
+ permissionAuthorityOptions,
3293
+ );
3277
3294
  _managedPermissionRulesOnly =
3278
3295
  loaded.managed?.allowManagedPermissionRulesOnly === true;
3279
3296
  // Claude-Code 2.1.186 respondToBashCommands (default OFF / opt-in when unset).
@@ -3356,8 +3373,16 @@ async function startAgentReplInWorkspaceOwned(
3356
3373
  });
3357
3374
  };
3358
3375
  } catch (_err) {
3359
- if (_err?.code === "CC_MANAGED_SETTINGS_INVALID") throw _err;
3376
+ if (
3377
+ _err?.code === "CC_MANAGED_SETTINGS_INVALID" ||
3378
+ _err?.code === "CONFIG_HOME_UNSAFE" ||
3379
+ String(_err?.code || "").startsWith("CC_SCOPED_PERMISSION_") ||
3380
+ String(_err?.code || "").startsWith("DURABLE_SECURITY_STORE_")
3381
+ ) {
3382
+ throw _err;
3383
+ }
3360
3384
  _permissionRules = null;
3385
+ _permissionRulesProvider = null;
3361
3386
  _permissionConfirm = null;
3362
3387
  _managedPermissionRulesOnly = false;
3363
3388
  }
@@ -3475,6 +3500,7 @@ async function startAgentReplInWorkspaceOwned(
3475
3500
  title: `Agent ${new Date().toISOString().slice(0, 10)}`,
3476
3501
  provider,
3477
3502
  model,
3503
+ executionLocation: captureAmbientExecutionLocation({ provider, model }),
3478
3504
  };
3479
3505
  if (useJsonl) {
3480
3506
  sessionId = startReplJsonlSession(
@@ -4642,6 +4668,12 @@ async function startAgentReplInWorkspaceOwned(
4642
4668
 
4643
4669
  // Prompt-side interaction modules share the production readline surface.
4644
4670
  // A per-REPL registry avoids singleton handlers retaining an old session.
4671
+ const _clipboardBinding = Object.prototype.hasOwnProperty.call(
4672
+ options,
4673
+ "clipboardBinding",
4674
+ )
4675
+ ? options.clipboardBinding
4676
+ : createSystemClipboardImageBinding();
4645
4677
  const _promptInteractionSurface = createPromptInteractionSurface({
4646
4678
  readline: rl,
4647
4679
  config: _promptInteractionConfig,
@@ -4649,7 +4681,7 @@ async function startAgentReplInWorkspaceOwned(
4649
4681
  getSessionId: () => sessionId,
4650
4682
  getSuggestionContext: () => ({ messages: messages.slice() }),
4651
4683
  persistSuggestionEnabled: _persistPromptSuggestionsEnabled,
4652
- clipboardBinding: options.clipboardBinding || null,
4684
+ clipboardBinding: _clipboardBinding,
4653
4685
  generateSuggestions: resolveReplPromptSuggestionGenerator(
4654
4686
  useJsonl,
4655
4687
  options.generatePromptSuggestions,
@@ -5936,6 +5968,7 @@ async function startAgentReplInWorkspaceOwned(
5936
5968
  if (snap) _clearedConversation = snap;
5937
5969
  messages.length = 1; // Keep system prompt
5938
5970
  _checkpointMarks.length = 0; // checkpoint marks no longer map to anything
5971
+ _promptInteractions.clearClipboardImageChips();
5939
5972
  logger.info(
5940
5973
  snap
5941
5974
  ? "Conversation cleared — run /rewind clear to restore it"
@@ -9056,6 +9089,7 @@ async function startAgentReplInWorkspaceOwned(
9056
9089
  prepareCall,
9057
9090
  approvalGate: _approvalGate,
9058
9091
  permissionRules: _permissionRules,
9092
+ permissionRulesProvider: _permissionRulesProvider,
9059
9093
  permissionConfirm: _permissionConfirm,
9060
9094
  settingsHooks: _settingsHooks,
9061
9095
  hookSupervisor: _asyncHookSupervisor,
@@ -55,6 +55,7 @@ import {
55
55
  import { installPipeSafety } from "../runtime/pipe-safety.js";
56
56
  import { installOutputBackpressure } from "../runtime/output-backpressure.js";
57
57
  import { assertChatSessionUsageAdmission } from "../lib/chat-session-admission.js";
58
+ import { captureAmbientExecutionLocation } from "../lib/execution-location-runtime.js";
58
59
 
59
60
  const SLASH_COMMANDS = {
60
61
  "/exit": "Exit the chat",
@@ -114,6 +115,7 @@ export async function startChatRepl(options = {}) {
114
115
  title: "chat-repl",
115
116
  provider,
116
117
  model,
118
+ executionLocation: captureAmbientExecutionLocation({ provider, model }),
117
119
  });
118
120
  } catch {
119
121
  sessionId = null;