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
@@ -65,6 +65,7 @@ import {
65
65
  reconcileSideEffects,
66
66
  classifyToolSideEffect,
67
67
  } from "../lib/side-effect-ledger.js";
68
+ import { collectToolResourceIdentifiers } from "../lib/permission-side-effect-center.js";
68
69
  import { DiffReviewFollowUpTracker } from "../lib/diff-review-follow-up.js";
69
70
  import { SIDE_EFFECT_LEDGER_EVENT } from "../lib/side-effect-ledger-store.js";
70
71
  import {
@@ -105,6 +106,7 @@ import {
105
106
  exitCodeForEndReason,
106
107
  } from "../lib/exit-codes.cjs";
107
108
  import { isolationLevel } from "../lib/agent-sandbox.js";
109
+ import { captureAmbientExecutionLocation } from "../lib/execution-location-runtime.js";
108
110
  import { createBackgroundPhaseReporter } from "../lib/background-phase-reporter.js";
109
111
  import { createBackgroundInteractionClient } from "../lib/background-interaction-resolver.js";
110
112
  import { withQuietStdout } from "./quiet-stdout.js";
@@ -738,34 +740,26 @@ async function runAgentHeadlessInWorkspace(
738
740
  let permissionRules = hermeticExecution
739
741
  ? null
740
742
  : options.permissionRules || null;
743
+ let permissionRulesProvider = hermeticExecution
744
+ ? null
745
+ : options.permissionRulesProvider || null;
741
746
  let managedSettings = null;
742
747
  let settingsFiles = [];
743
748
  if (!hermeticExecution) {
744
- try {
745
- const { loadSettings, applyManagedPermissionPolicy } =
746
- await import("../lib/settings-loader.cjs");
747
- const loaded = loadSettings({
748
- cwd,
749
- settingsFile: options.settingsFile,
750
- managedSettingsFile: options.managedSettingsFile,
751
- });
752
- managedSettings = loaded.managed;
753
- settingsFiles = Array.isArray(loaded.files) ? loaded.files : [];
754
- if (!permissionRules) {
755
- const total =
756
- loaded.rules.allow.length +
757
- loaded.rules.ask.length +
758
- loaded.rules.deny.length;
759
- permissionRules = total > 0 ? loaded.rules : null;
760
- } else if (managedSettings) {
761
- permissionRules = applyManagedPermissionPolicy(
762
- permissionRules,
763
- managedSettings,
764
- );
765
- }
766
- } catch (error) {
767
- if (error?.code === "CC_MANAGED_SETTINGS_INVALID") throw error;
768
- // Preserve caller-provided rules; absent settings keep legacy behavior.
749
+ const { createPermissionRulesProvider, loadPermissionAuthority } =
750
+ await import("../lib/permission-authority.js");
751
+ const authorityOptions = {
752
+ cwd,
753
+ settingsFile: options.settingsFile,
754
+ managedSettingsFile: options.managedSettingsFile,
755
+ baseRules: options.permissionRules || null,
756
+ };
757
+ const loaded = loadPermissionAuthority(authorityOptions);
758
+ managedSettings = loaded.managed;
759
+ settingsFiles = Array.isArray(loaded.files) ? loaded.files : [];
760
+ permissionRules = loaded.hasRules ? loaded.rules : null;
761
+ if (!permissionRulesProvider) {
762
+ permissionRulesProvider = createPermissionRulesProvider(authorityOptions);
769
763
  }
770
764
  }
771
765
 
@@ -1466,6 +1460,8 @@ async function runAgentHeadlessInWorkspace(
1466
1460
  if (!hermeticExecution) {
1467
1461
  try {
1468
1462
  approvalGate = await getApprovalGate();
1463
+ approvalGate =
1464
+ approvalGate?.createSessionScope?.(sessionId) || approvalGate;
1469
1465
  if (approvalGate && (options.permissionMode || "default") === "auto") {
1470
1466
  // autoMode.decisions: user-configured riskLevel → allow/ask/deny
1471
1467
  // classifier. Only wrap when settings actually customize the map so the
@@ -1489,6 +1485,7 @@ async function runAgentHeadlessInWorkspace(
1489
1485
  }
1490
1486
  }
1491
1487
  if (approvalGate) {
1488
+ approvalGate.setAuthorizationConsumer?.(null);
1492
1489
  if (typeof approvalGate.setSessionPolicy === "function") {
1493
1490
  approvalGate.setSessionPolicy(sessionId, perm.sessionPolicy);
1494
1491
  }
@@ -1719,6 +1716,10 @@ async function runAgentHeadlessInWorkspace(
1719
1716
  provider,
1720
1717
  model,
1721
1718
  observabilityScope: options.observabilityScope,
1719
+ executionLocation: captureAmbientExecutionLocation({
1720
+ provider,
1721
+ model,
1722
+ }),
1722
1723
  });
1723
1724
  }
1724
1725
  // Persist the expanded content so a resumed session faithfully replays
@@ -1982,6 +1983,18 @@ async function runAgentHeadlessInWorkspace(
1982
1983
  !options.permissionPromptTool
1983
1984
  ) {
1984
1985
  try {
1986
+ if (
1987
+ !approvalGate ||
1988
+ typeof approvalGate.setConfirmer !== "function" ||
1989
+ typeof approvalGate.setAuthorizationConsumer !== "function" ||
1990
+ typeof approvalGate.consumeAuthorization !== "function"
1991
+ ) {
1992
+ const error = new Error(
1993
+ "installed session-core cannot bind and consume durable remote approval",
1994
+ );
1995
+ error.code = "CC_REMOTE_APPROVAL_GATE_UNAVAILABLE";
1996
+ throw error;
1997
+ }
1985
1998
  const { startHeadlessRemoteApproval } =
1986
1999
  await import("../lib/remote-approval-bridge.js");
1987
2000
  _remoteApproval = await (
@@ -1991,11 +2004,12 @@ async function runAgentHeadlessInWorkspace(
1991
2004
  writeErr,
1992
2005
  isText,
1993
2006
  });
1994
- if (approvalGate && typeof approvalGate.setConfirmer === "function") {
1995
- approvalGate.setConfirmer(
1996
- _bgPhase.wrapConfirmer(_remoteApproval.confirmer),
1997
- );
1998
- }
2007
+ approvalGate.setConfirmer(
2008
+ _bgPhase.wrapConfirmer(_remoteApproval.confirmer),
2009
+ );
2010
+ approvalGate.setAuthorizationConsumer(
2011
+ _remoteApproval.consumeAuthorization,
2012
+ );
1999
2013
  } catch (err) {
2000
2014
  // Remote approval could not come up → keep headless fail-closed rather
2001
2015
  // than running un-gated; say why so the user can fix pairing.
@@ -2163,6 +2177,7 @@ async function runAgentHeadlessInWorkspace(
2163
2177
  hookDb: hermeticExecution ? null : db,
2164
2178
  approvalGate: hermeticExecution ? null : approvalGate,
2165
2179
  permissionRules: hermeticExecution ? null : permissionRules,
2180
+ permissionRulesProvider: hermeticExecution ? null : permissionRulesProvider,
2166
2181
  settingsHooks: hermeticExecution ? null : settingsHooks,
2167
2182
  // Seed the subagent-contract CEILING with this run's permission mode so a
2168
2183
  // spawned sub-agent inherits/tightens from it (tighten-only): a
@@ -2758,6 +2773,12 @@ async function runAgentHeadlessInWorkspace(
2758
2773
  // and countDuplicateCommittedEffects can measure `0` repeats.
2759
2774
  meta: {
2760
2775
  tool: event.tool,
2776
+ toolUseId: telemetryToolId,
2777
+ turnId: event.turn_id || null,
2778
+ resources: collectToolResourceIdentifiers(
2779
+ event.tool,
2780
+ event.args,
2781
+ ),
2761
2782
  idempotencyKey: operationIdempotencyKey({
2762
2783
  tool: event.tool,
2763
2784
  args: event.args,
@@ -3269,6 +3290,7 @@ async function runAgentHeadlessInWorkspace(
3269
3290
  await cleanupDeadline.run("remote-approval", () =>
3270
3291
  _remoteApproval?.close?.(),
3271
3292
  );
3293
+ approvalGate?.setAuthorizationConsumer?.(null);
3272
3294
  // settings.json Stop + SessionEnd hooks when the run finishes. Stop is the
3273
3295
  // canonical async-hook trigger ("run the test suite at turn end"); fire its
3274
3296
  // async hooks fire-and-forget, then settle so a fast background check can
@@ -60,6 +60,7 @@ import {
60
60
  expandIdeMentions,
61
61
  } from "../lib/ide-context.js";
62
62
  import { detectVersionSkew, versionSkewMessage } from "../lib/version-skew.js";
63
+ import { captureAmbientExecutionLocation } from "../lib/execution-location-runtime.js";
63
64
  import {
64
65
  resolveAgentMcp,
65
66
  resolvePermissionPromptTool,
@@ -114,6 +115,7 @@ import {
114
115
  reconcileSideEffects,
115
116
  classifyToolSideEffect,
116
117
  } from "../lib/side-effect-ledger.js";
118
+ import { collectToolResourceIdentifiers } from "../lib/permission-side-effect-center.js";
117
119
  import { DiffReviewFollowUpTracker } from "../lib/diff-review-follow-up.js";
118
120
  import {
119
121
  loadSideEffectLedger,
@@ -909,6 +911,12 @@ async function runTurn(
909
911
  // and countDuplicateCommittedEffects can measure `0` repeats.
910
912
  meta: {
911
913
  tool: event.tool,
914
+ toolUseId: toolUseId || null,
915
+ turnId: event.turn_id || null,
916
+ resources: collectToolResourceIdentifiers(
917
+ event.tool,
918
+ event.args,
919
+ ),
912
920
  idempotencyKey: operationIdempotencyKey({
913
921
  tool: event.tool,
914
922
  args: event.args,
@@ -1608,33 +1616,27 @@ async function runAgentHeadlessStreamInWorkspace(
1608
1616
  // .claude/settings.json permission rules (deny > ask > allow); see
1609
1617
  // runAgentHeadless for the full semantics. null = no file → unchanged.
1610
1618
  let permissionRules = options.permissionRules || null;
1619
+ let permissionRulesProvider = options.permissionRulesProvider || null;
1611
1620
  let managedSettings = null;
1612
1621
  let settingsFiles = [];
1613
- try {
1614
- const { loadSettings, applyManagedPermissionPolicy } =
1615
- await import("../lib/settings-loader.cjs");
1616
- const loaded = loadSettings({
1617
- cwd,
1618
- settingsFile: options.settingsFile,
1619
- managedSettingsFile: options.managedSettingsFile,
1620
- });
1621
- managedSettings = loaded.managed;
1622
- settingsFiles = Array.isArray(loaded.files) ? loaded.files : [];
1623
- if (!permissionRules) {
1624
- const total =
1625
- loaded.rules.allow.length +
1626
- loaded.rules.ask.length +
1627
- loaded.rules.deny.length;
1628
- permissionRules = total > 0 ? loaded.rules : null;
1629
- } else if (managedSettings) {
1630
- permissionRules = applyManagedPermissionPolicy(
1631
- permissionRules,
1632
- managedSettings,
1633
- );
1634
- }
1635
- } catch (error) {
1636
- if (error?.code === "CC_MANAGED_SETTINGS_INVALID") throw error;
1637
- // Preserve caller-provided rules; absent settings keep legacy behavior.
1622
+ const { createPermissionRulesProvider, loadPermissionAuthority } =
1623
+ await import("../lib/permission-authority.js");
1624
+ const authorityOptions = {
1625
+ cwd,
1626
+ settingsFile: options.settingsFile,
1627
+ managedSettingsFile: options.managedSettingsFile,
1628
+ baseRules: options.permissionRules || null,
1629
+ };
1630
+ const loadedPermissionAuthority = loadPermissionAuthority(authorityOptions);
1631
+ managedSettings = loadedPermissionAuthority.managed;
1632
+ settingsFiles = Array.isArray(loadedPermissionAuthority.files)
1633
+ ? loadedPermissionAuthority.files
1634
+ : [];
1635
+ permissionRules = loadedPermissionAuthority.hasRules
1636
+ ? loadedPermissionAuthority.rules
1637
+ : null;
1638
+ if (!permissionRulesProvider) {
1639
+ permissionRulesProvider = createPermissionRulesProvider(authorityOptions);
1638
1640
  }
1639
1641
 
1640
1642
  // .claude/settings.json `hooks` block (decision-capable PreToolUse/PostToolUse).
@@ -2057,6 +2059,8 @@ async function runAgentHeadlessStreamInWorkspace(
2057
2059
  let approvalGate = null;
2058
2060
  try {
2059
2061
  approvalGate = await getApprovalGate();
2062
+ approvalGate =
2063
+ approvalGate?.createSessionScope?.(sessionId) || approvalGate;
2060
2064
  if (approvalGate && (options.permissionMode || "default") === "auto") {
2061
2065
  // autoMode.decisions: user-configured riskLevel → allow/ask/deny
2062
2066
  // classifier (same wiring as headless-runner). Only wrap when settings
@@ -2080,6 +2084,7 @@ async function runAgentHeadlessStreamInWorkspace(
2080
2084
  }
2081
2085
  }
2082
2086
  if (approvalGate) {
2087
+ approvalGate.setAuthorizationConsumer?.(null);
2083
2088
  approvalGate.setSessionPolicy?.(sessionId, perm.sessionPolicy);
2084
2089
  approvalGate.setConfirmer?.(
2085
2090
  interactive && perm.allowInteractiveApprovals
@@ -2368,6 +2373,10 @@ async function runAgentHeadlessStreamInWorkspace(
2368
2373
  provider,
2369
2374
  model,
2370
2375
  observabilityScope: options.observabilityScope,
2376
+ executionLocation: captureAmbientExecutionLocation({
2377
+ provider,
2378
+ model,
2379
+ }),
2371
2380
  }),
2372
2381
  "startSession",
2373
2382
  );
@@ -2736,6 +2745,18 @@ async function runAgentHeadlessStreamInWorkspace(
2736
2745
  options.interactiveApprovals !== true
2737
2746
  ) {
2738
2747
  try {
2748
+ if (
2749
+ !approvalGate ||
2750
+ typeof approvalGate.setConfirmer !== "function" ||
2751
+ typeof approvalGate.setAuthorizationConsumer !== "function" ||
2752
+ typeof approvalGate.consumeAuthorization !== "function"
2753
+ ) {
2754
+ const error = new Error(
2755
+ "installed session-core cannot bind and consume durable remote approval",
2756
+ );
2757
+ error.code = "CC_REMOTE_APPROVAL_GATE_UNAVAILABLE";
2758
+ throw error;
2759
+ }
2739
2760
  const startRemoteApproval =
2740
2761
  deps.startHeadlessRemoteApproval ||
2741
2762
  (await import("../lib/remote-approval-bridge.js"))
@@ -2751,9 +2772,10 @@ async function runAgentHeadlessStreamInWorkspace(
2751
2772
  remote_session_id: _remoteApproval.pairing.remoteSessionId,
2752
2773
  expires_at: _remoteApproval.pairing.expiresAt,
2753
2774
  });
2754
- if (approvalGate && typeof approvalGate.setConfirmer === "function") {
2755
- approvalGate.setConfirmer(_remoteApproval.confirmer);
2756
- }
2775
+ approvalGate.setConfirmer(_remoteApproval.confirmer);
2776
+ approvalGate.setAuthorizationConsumer(
2777
+ _remoteApproval.consumeAuthorization,
2778
+ );
2757
2779
  } catch (err) {
2758
2780
  emit({
2759
2781
  type: "remote_control",
@@ -2791,6 +2813,7 @@ async function runAgentHeadlessStreamInWorkspace(
2791
2813
  hookDb: db,
2792
2814
  approvalGate,
2793
2815
  permissionRules,
2816
+ permissionRulesProvider,
2794
2817
  settingsHooks,
2795
2818
  toolAdmission: options.toolAdmission || null,
2796
2819
  classifyAllShell,