shadow-claw 1.59.7 → 1.60.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 (253) hide show
  1. package/.well-known/mcp/server-card.json +4 -12
  2. package/.well-known/mcp.json +4 -12
  3. package/README.md +6 -2
  4. package/dist/cli/build/build.js +1 -1
  5. package/dist/cli/{chunk-DDvuLVfW.js → chunk-3C5izdQW.js} +1 -1
  6. package/dist/cli/chunk-B-75h9gX.js +1 -0
  7. package/dist/cli/{chunk-hVf839t7.js → chunk-B7Kn-otm.js} +1 -1
  8. package/dist/cli/{chunk-YX32FcN7.js → chunk-BBczgswQ.js} +1 -1
  9. package/dist/cli/{chunk-DcNxjqH6.js → chunk-BE-lYWcn.js} +1 -1
  10. package/dist/cli/{chunk-CQaCgswD.js → chunk-BECr0WxI.js} +11 -11
  11. package/dist/cli/chunk-BEz1PD1_.js +1 -0
  12. package/dist/cli/chunk-BLzI1Fp2.js +1 -0
  13. package/dist/cli/{chunk-B3TrWbca.js → chunk-BVSC1MNQ.js} +11 -11
  14. package/dist/cli/{chunk-D_te8ufL.js → chunk-BdWcep6o.js} +1 -1
  15. package/dist/cli/{chunk-SRBRVorc.js → chunk-BfTpnSS4.js} +1 -1
  16. package/dist/cli/{chunk-D2_eAO83.js → chunk-BgvqTf7w.js} +1 -1
  17. package/dist/cli/chunk-BwsJfUT3.js +1 -0
  18. package/dist/cli/{chunk--PFY91kE.js → chunk-C9b4b7c_.js} +1 -1
  19. package/dist/cli/{chunk-SxK79JmB.js → chunk-CAw9XYFe.js} +1 -1
  20. package/dist/cli/chunk-CFCcbFs2.js +396 -0
  21. package/dist/cli/{chunk-Cnjb8Usu.js → chunk-CTarF4FC.js} +1 -1
  22. package/dist/cli/{chunk-3vNYrs_L.js → chunk-Cbq5hpjb.js} +4 -4
  23. package/dist/cli/chunk-CjTjKy_v.js +310 -0
  24. package/dist/cli/chunk-Cjyu4cr_.js +36 -0
  25. package/dist/cli/{chunk-DUGZPka_.js → chunk-ClMKygjZ.js} +1 -1
  26. package/dist/cli/chunk-Cppnq1KF.js +1 -0
  27. package/dist/cli/{chunk-DvemF16v.js → chunk-D9QCNFMO.js} +1 -1
  28. package/dist/cli/{chunk-iB8OoMmW.js → chunk-DB21BMqt.js} +1 -1
  29. package/dist/cli/{chunk-_Vo-o_e3.js → chunk-DHoIWvCc.js} +1 -1
  30. package/dist/cli/chunk-DZEN9T5y.js +1 -0
  31. package/dist/cli/{chunk-5rLO4DWS.js → chunk-Dl14OyYO.js} +9 -9
  32. package/dist/cli/chunk-Dl_vv0dI.js +1 -0
  33. package/dist/cli/chunk-Dpmfhlyl.js +1 -0
  34. package/dist/cli/{chunk-BrR1DOBS.js → chunk-Du7Xtucq.js} +1 -1
  35. package/dist/cli/{chunk-B88Z8T_9.js → chunk-DxcDFUi_.js} +1 -1
  36. package/dist/cli/{chunk-Dt7-hzJU.js → chunk-DyyEWbV7.js} +1 -1
  37. package/dist/cli/chunk-N0x3mXU0.js +1 -0
  38. package/dist/cli/{chunk-CGoE4llV.js → chunk-V-w0Bata.js} +1 -1
  39. package/dist/cli/{chunk-CncW6_WL.js → chunk-ZxDxSSn-.js} +1 -1
  40. package/dist/cli/{chunk-CZdCRqNe.js → chunk-lPvFUkd5.js} +1 -1
  41. package/dist/cli/{chunk-66BvqAV0.js → chunk-n5s-sCdU.js} +1 -1
  42. package/dist/cli/{chunk-CAAeGOdy.js → chunk-nD9VPVMq.js} +1 -1
  43. package/dist/cli/{chunk-DMs7kREC.js → chunk-rFuy8aS_.js} +1 -1
  44. package/dist/cli/{chunk-B0qusANw.js → chunk-wjM6JXWa.js} +1 -1
  45. package/dist/cli/{chunk-DhOU6GYX.js → chunk-zcES9rut.js} +1 -1
  46. package/dist/cli/cli.js +3 -3
  47. package/dist/headless-agent.js +1 -1
  48. package/dist/lib/{channel-mmdGzPkT.js → channel-DB77spML.js} +2 -2
  49. package/dist/lib/{channel-mmdGzPkT.js.map → channel-DB77spML.js.map} +1 -1
  50. package/dist/lib/{compact-context-CY9BBlUQ.js → compact-context-Q9t9aL1e.js} +7 -7
  51. package/dist/lib/{compact-context-CY9BBlUQ.js.map → compact-context-Q9t9aL1e.js.map} +1 -1
  52. package/dist/lib/components/index.js +21 -21
  53. package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
  54. package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
  55. package/dist/lib/components/settings/shadow-claw-git.js +1 -1
  56. package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
  57. package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
  58. package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
  59. package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
  60. package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
  61. package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
  62. package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
  63. package/dist/lib/components/shadow-claw-channel-config.js +1 -1
  64. package/dist/lib/components/shadow-claw-channels.js +1 -1
  65. package/dist/lib/components/shadow-claw-chat.js +1 -1
  66. package/dist/lib/components/shadow-claw-control-plane.js +1 -1
  67. package/dist/lib/components/shadow-claw-conversations.js +1 -1
  68. package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
  69. package/dist/lib/components/shadow-claw-files.js +1 -1
  70. package/dist/lib/components/shadow-claw-git.js +1 -1
  71. package/dist/lib/components/shadow-claw-llm.js +1 -1
  72. package/dist/lib/components/shadow-claw-networking.js +1 -1
  73. package/dist/lib/components/shadow-claw-notifications.js +1 -1
  74. package/dist/lib/components/shadow-claw-pages.js +1 -1
  75. package/dist/lib/components/shadow-claw-peerjs.js +1 -1
  76. package/dist/lib/components/shadow-claw-settings.js +1 -1
  77. package/dist/lib/components/shadow-claw-storage.js +1 -1
  78. package/dist/lib/components/shadow-claw-task-server.js +1 -1
  79. package/dist/lib/components/shadow-claw-tasks.js +1 -1
  80. package/dist/lib/components/shadow-claw-terminal.js +1 -1
  81. package/dist/lib/components/shadow-claw-tools.js +1 -1
  82. package/dist/lib/components/shadow-claw-webvm.js +1 -1
  83. package/dist/lib/components/shadow-claw.js +1 -1
  84. package/dist/lib/{configure-peer-js-ccNvax2N.js → configure-peer-js-CgFiwoxY.js} +2 -2
  85. package/dist/lib/{configure-peer-js-ccNvax2N.js.map → configure-peer-js-CgFiwoxY.js.map} +1 -1
  86. package/dist/lib/content/build-attachment-content-blocks.d.ts +2 -0
  87. package/dist/lib/{discover-skills-OwlQ2sXA.js → discover-skills-CXyaWHKi.js} +5 -5
  88. package/dist/lib/{discover-skills-OwlQ2sXA.js.map → discover-skills-CXyaWHKi.js.map} +1 -1
  89. package/dist/lib/{git-D2J_j9X9.js → git-CogDRlEz.js} +2 -2
  90. package/dist/lib/{git-D2J_j9X9.js.map → git-CogDRlEz.js.map} +1 -1
  91. package/dist/lib/index.js +21 -21
  92. package/dist/lib/{init-control-plane-B7blDVIE.js → init-control-plane-CEGdzgWX.js} +7 -7
  93. package/dist/lib/{init-control-plane-B7blDVIE.js.map → init-control-plane-CEGdzgWX.js.map} +1 -1
  94. package/dist/lib/{invoke-agent-SxvudiDT.js → invoke-agent-cac3gCsj.js} +6 -6
  95. package/dist/lib/{invoke-agent-SxvudiDT.js.map → invoke-agent-cac3gCsj.js.map} +1 -1
  96. package/dist/lib/{move-group-entry-DDpjxa10.js → move-group-entry-D8dptMg0.js} +2 -2
  97. package/dist/lib/{move-group-entry-DDpjxa10.js.map → move-group-entry-D8dptMg0.js.map} +1 -1
  98. package/dist/lib/{orchestrator-C7fkh7T7.js → orchestrator-BBAwy9Nm.js} +12 -12
  99. package/dist/lib/{orchestrator-C7fkh7T7.js.map → orchestrator-BBAwy9Nm.js.map} +1 -1
  100. package/dist/lib/{orchestrator-CCARkxQC.js → orchestrator-cRBe3lhq.js} +2 -2
  101. package/dist/lib/{orchestrator-CCARkxQC.js.map → orchestrator-cRBe3lhq.js.map} +1 -1
  102. package/dist/lib/{peerjs-Bfw_FWLB.js → peerjs-BLg8aGUj.js} +3 -3
  103. package/dist/lib/{peerjs-Bfw_FWLB.js.map → peerjs-BLg8aGUj.js.map} +1 -1
  104. package/dist/lib/{process-peer-query-param-BxYiZNdf.js → process-peer-query-param-BnsVnxzH.js} +5 -5
  105. package/dist/lib/{process-peer-query-param-BxYiZNdf.js.map → process-peer-query-param-BnsVnxzH.js.map} +1 -1
  106. package/dist/lib/{process-pending-shared-payloads-DPIbwRb3.js → process-pending-shared-payloads-DBZfZOOa.js} +2 -2
  107. package/dist/lib/{process-pending-shared-payloads-DPIbwRb3.js.map → process-pending-shared-payloads-DBZfZOOa.js.map} +1 -1
  108. package/dist/lib/{process-room-query-param-B2_d50nE.js → process-room-query-param-B8EYg_-r.js} +4 -4
  109. package/dist/lib/{process-room-query-param-B2_d50nE.js.map → process-room-query-param-B8EYg_-r.js.map} +1 -1
  110. package/dist/lib/{push-client-rrjTdc-U.js → push-client-CAm6UMvE.js} +3 -3
  111. package/dist/lib/{push-client-rrjTdc-U.js.map → push-client-CAm6UMvE.js.map} +1 -1
  112. package/dist/lib/{rooms-bwGoYb1q.js → rooms-Dzphx3rK.js} +2 -2
  113. package/dist/lib/{rooms-bwGoYb1q.js.map → rooms-Dzphx3rK.js.map} +1 -1
  114. package/dist/lib/{shadow-claw-CypGVlVO.js → shadow-claw-CGl8tXtG.js} +6 -6
  115. package/dist/lib/{shadow-claw-CypGVlVO.js.map → shadow-claw-CGl8tXtG.js.map} +1 -1
  116. package/dist/lib/{shadow-claw-channel-config-DJpDovkF.js → shadow-claw-channel-config-BNIWCdsL.js} +4 -4
  117. package/dist/lib/{shadow-claw-channel-config-DJpDovkF.js.map → shadow-claw-channel-config-BNIWCdsL.js.map} +1 -1
  118. package/dist/lib/{shadow-claw-channels-DJLwRovH.js → shadow-claw-channels-C2QSn4Ew.js} +2 -2
  119. package/dist/lib/{shadow-claw-channels-DJLwRovH.js.map → shadow-claw-channels-C2QSn4Ew.js.map} +1 -1
  120. package/dist/lib/{shadow-claw-chat-B92cPaft.js → shadow-claw-chat-Wx3y9y6c.js} +3 -3
  121. package/dist/lib/{shadow-claw-chat-B92cPaft.js.map → shadow-claw-chat-Wx3y9y6c.js.map} +1 -1
  122. package/dist/lib/{shadow-claw-control-plane-fvn-qyHj.js → shadow-claw-control-plane-D5E4cFGu.js} +6 -6
  123. package/dist/lib/{shadow-claw-control-plane-fvn-qyHj.js.map → shadow-claw-control-plane-D5E4cFGu.js.map} +1 -1
  124. package/dist/lib/{shadow-claw-conversations-CsVyDOny.js → shadow-claw-conversations-BtDv7GRW.js} +2 -2
  125. package/dist/lib/{shadow-claw-conversations-CsVyDOny.js.map → shadow-claw-conversations-BtDv7GRW.js.map} +1 -1
  126. package/dist/lib/{shadow-claw-file-viewer-DFfyP7s5.js → shadow-claw-file-viewer-CG40kwWV.js} +2 -2
  127. package/dist/lib/{shadow-claw-file-viewer-DFfyP7s5.js.map → shadow-claw-file-viewer-CG40kwWV.js.map} +1 -1
  128. package/dist/lib/{shadow-claw-files-cT6HL7ye.js → shadow-claw-files-BOUULrlX.js} +3 -3
  129. package/dist/lib/{shadow-claw-files-cT6HL7ye.js.map → shadow-claw-files-BOUULrlX.js.map} +1 -1
  130. package/dist/lib/{shadow-claw-git-Cv9mQgTx.js → shadow-claw-git-BeHV73_9.js} +3 -3
  131. package/dist/lib/{shadow-claw-git-Cv9mQgTx.js.map → shadow-claw-git-BeHV73_9.js.map} +1 -1
  132. package/dist/lib/{shadow-claw-llm-CKOYzPDp.js → shadow-claw-llm-KONyWKZM.js} +2 -2
  133. package/dist/lib/{shadow-claw-llm-CKOYzPDp.js.map → shadow-claw-llm-KONyWKZM.js.map} +1 -1
  134. package/dist/lib/{shadow-claw-networking-DYfiUQaH.js → shadow-claw-networking-Diy3JJkc.js} +2 -2
  135. package/dist/lib/{shadow-claw-networking-DYfiUQaH.js.map → shadow-claw-networking-Diy3JJkc.js.map} +1 -1
  136. package/dist/lib/{shadow-claw-notifications-JJlzriuX.js → shadow-claw-notifications-C-upPa-4.js} +2 -2
  137. package/dist/lib/{shadow-claw-notifications-JJlzriuX.js.map → shadow-claw-notifications-C-upPa-4.js.map} +1 -1
  138. package/dist/lib/{shadow-claw-pages-BCo3ihZI.js → shadow-claw-pages-CfAjUKgd.js} +2 -2
  139. package/dist/lib/{shadow-claw-pages-BCo3ihZI.js.map → shadow-claw-pages-CfAjUKgd.js.map} +1 -1
  140. package/dist/lib/{shadow-claw-peerjs-CFNjfrY5.js → shadow-claw-peerjs-t4YibS9s.js} +5 -5
  141. package/dist/lib/{shadow-claw-peerjs-CFNjfrY5.js.map → shadow-claw-peerjs-t4YibS9s.js.map} +1 -1
  142. package/dist/lib/{shadow-claw-settings-BMwne0bh.js → shadow-claw-settings-Cg5V0e9g.js} +2 -2
  143. package/dist/lib/{shadow-claw-settings-BMwne0bh.js.map → shadow-claw-settings-Cg5V0e9g.js.map} +1 -1
  144. package/dist/lib/{shadow-claw-storage-DUY8B9m-.js → shadow-claw-storage-C7tCnsSG.js} +2 -2
  145. package/dist/lib/{shadow-claw-storage-DUY8B9m-.js.map → shadow-claw-storage-C7tCnsSG.js.map} +1 -1
  146. package/dist/lib/{shadow-claw-task-server-yWeoA3eL.js → shadow-claw-task-server-BObsRdf8.js} +2 -2
  147. package/dist/lib/{shadow-claw-task-server-yWeoA3eL.js.map → shadow-claw-task-server-BObsRdf8.js.map} +1 -1
  148. package/dist/lib/{shadow-claw-tasks-Bg0uM15I.js → shadow-claw-tasks-B2EEqrcY.js} +3 -3
  149. package/dist/lib/{shadow-claw-tasks-Bg0uM15I.js.map → shadow-claw-tasks-B2EEqrcY.js.map} +1 -1
  150. package/dist/lib/{shadow-claw-terminal-fyJPppY_.js → shadow-claw-terminal-DSHfO2b9.js} +2 -2
  151. package/dist/lib/{shadow-claw-terminal-fyJPppY_.js.map → shadow-claw-terminal-DSHfO2b9.js.map} +1 -1
  152. package/dist/lib/{shadow-claw-tools-D0T8m3go.js → shadow-claw-tools-DwPBADua.js} +3 -3
  153. package/dist/lib/{shadow-claw-tools-D0T8m3go.js.map → shadow-claw-tools-DwPBADua.js.map} +1 -1
  154. package/dist/lib/{shadow-claw-webvm-CQvzJwKI.js → shadow-claw-webvm-CY4qGaMB.js} +2 -2
  155. package/dist/lib/{shadow-claw-webvm-CQvzJwKI.js.map → shadow-claw-webvm-CY4qGaMB.js.map} +1 -1
  156. package/dist/lib/{sync-web-mcp-registration-BFtG_4kx.js → sync-web-mcp-registration-BiOZvW-R.js} +3 -3
  157. package/dist/lib/{sync-web-mcp-registration-BFtG_4kx.js.map → sync-web-mcp-registration-BiOZvW-R.js.map} +1 -1
  158. package/dist/lib/{system-prompt-bhGRLoL2.js → system-prompt-CxJ3Nx4c.js} +4 -3
  159. package/dist/lib/system-prompt-CxJ3Nx4c.js.map +1 -0
  160. package/dist/public/.well-known/mcp/server-card.json +4 -12
  161. package/dist/public/.well-known/mcp.json +4 -12
  162. package/dist/public/AGENTS.md +3 -1
  163. package/dist/public/README.md +6 -2
  164. package/dist/public/agent.worker.js +1 -1
  165. package/dist/public/{channel-Dk7wl-Av.js → channel-DIpDQekL.js} +1 -1
  166. package/dist/public/{chat-template-BwAnTFKf.js → chat-template-CXKs8lFR.js} +1 -1
  167. package/dist/public/compact-context-BQ2ZXoAc.js +5 -0
  168. package/dist/public/{compact-context-fOTqwKF6.js → compact-context-dHitmPsV.js} +2 -2
  169. package/dist/public/{configure-peer-js-BOV0tR6G.js → configure-peer-js-DV1rqvFX.js} +1 -1
  170. package/dist/public/{create-model-cache-fetch-DSAFjOwc.js → create-model-cache-fetch-B0mSCEk6.js} +1 -1
  171. package/dist/public/{discover-skills-D1sNTy2r.js → discover-skills-BWJB8HUA.js} +1 -1
  172. package/dist/public/docs/architecture/overview.md +1 -1
  173. package/dist/public/docs/example/article/index.html +21 -21
  174. package/dist/public/docs/example/article.html +21 -21
  175. package/dist/public/docs/publishing/index.html +21 -21
  176. package/dist/public/docs/publishing.html +21 -21
  177. package/dist/public/docs/skill-creator/index.html +21 -21
  178. package/dist/public/docs/skill-creator.html +21 -21
  179. package/dist/public/docs/subsystems/attachment-capabilities.md +14 -1
  180. package/dist/public/docs/subsystems/cli.md +95 -51
  181. package/dist/public/docs/subsystems/pages.md +5 -0
  182. package/dist/public/e2e/README.md +1 -1
  183. package/dist/public/{e2e-bridge-Cz95DLlb.js → e2e-bridge-lP2qqiv3.js} +1 -1
  184. package/dist/public/{git-BmMlwIMP.js → git-DjmQ16rm.js} +1 -1
  185. package/dist/public/{iframe-bridge-scripts-Cibg0m6A.js → iframe-bridge-scripts-CO0izGjW.js} +1 -1
  186. package/dist/public/index.html +21 -21
  187. package/dist/public/index.js +1 -1
  188. package/dist/public/{init-control-plane-Cb31yLTY.js → init-control-plane-Ctz7FI8M.js} +1 -1
  189. package/dist/public/{invoke-agent-CN7mSV0Z.js → invoke-agent-C_geruwq.js} +1 -1
  190. package/dist/public/llms.txt +1 -1
  191. package/dist/public/main/index.html +21 -21
  192. package/dist/public/main/memory/index.html +21 -21
  193. package/dist/public/main/memory.html +21 -21
  194. package/dist/public/main.html +21 -21
  195. package/dist/public/{move-group-entry-CXneuNVa.js → move-group-entry-QQ9Hkk54.js} +1 -1
  196. package/dist/public/{orchestrator-Dyylc8IU.js → orchestrator-C1kaTltu.js} +2 -2
  197. package/dist/public/{orchestrator-DBO4NZqd.js → orchestrator-Li1UAsv7.js} +1 -1
  198. package/dist/public/{peerjs-l0jiBoh6.js → peerjs-DbBryE-9.js} +1 -1
  199. package/dist/public/{process-peer-query-param-s-aSP1Rq.js → process-peer-query-param-DQIgr3KL.js} +1 -1
  200. package/dist/public/{process-pending-shared-payloads-BN3GigPT.js → process-pending-shared-payloads-Ctb-TFqB.js} +1 -1
  201. package/dist/public/{process-room-query-param-B2Qe0F0M.js → process-room-query-param-F-XnIVoZ.js} +1 -1
  202. package/dist/public/{push-client-B2LC8Qp9.js → push-client-DRx9Eggz.js} +1 -1
  203. package/dist/public/{rooms-ChCEOvkw.js → rooms-BurBI7is.js} +1 -1
  204. package/dist/public/service-worker/init.js +1 -1
  205. package/dist/public/service-worker.js +1 -1
  206. package/dist/public/{shadow-claw-Br8mWDUx.js → shadow-claw-Bg9AQ5x_.js} +2 -2
  207. package/dist/public/{shadow-claw-accounts-Dm6G7KMP.js → shadow-claw-accounts-B3mjYI0M.js} +1 -1
  208. package/dist/public/{shadow-claw-card-CggS8uSa.js → shadow-claw-card-tcXRS1GF.js} +1 -1
  209. package/dist/public/{shadow-claw-channels-088vhuWO.js → shadow-claw-channels-BiSfLvWv.js} +1 -1
  210. package/dist/public/{shadow-claw-chat-BRwRlq-n.js → shadow-claw-chat-N5jMsXZZ.js} +1 -1
  211. package/dist/public/{shadow-claw-control-plane-rhKACK85.js → shadow-claw-control-plane-DFVe_Xdq.js} +2 -2
  212. package/dist/public/{shadow-claw-conversations-CF_yUfKl.js → shadow-claw-conversations-wAR06_ya.js} +1 -1
  213. package/dist/public/{shadow-claw-empty-state-CkpOSXCS.js → shadow-claw-empty-state-CnPm3NVM.js} +1 -1
  214. package/dist/public/{shadow-claw-file-viewer-DWCejuY3.js → shadow-claw-file-viewer-sZN_FCDW.js} +2 -2
  215. package/dist/public/{shadow-claw-files-L6_ioyzh.js → shadow-claw-files-CnvkCbd4.js} +2 -2
  216. package/dist/public/{shadow-claw-git-DsdkwLqQ.js → shadow-claw-git-BBHfClGk.js} +2 -2
  217. package/dist/public/{shadow-claw-integrations-CSbRTOm3.js → shadow-claw-integrations-DvdBqzRJ.js} +1 -1
  218. package/dist/public/{shadow-claw-llm-BitaeAVc.js → shadow-claw-llm-YfohG519.js} +1 -1
  219. package/dist/public/{shadow-claw-mcp-remote-gSbV5riy.js → shadow-claw-mcp-remote-BAVbf5pi.js} +1 -1
  220. package/dist/public/{shadow-claw-networking-Dn_y6Cl9.js → shadow-claw-networking-CZ4LWPW7.js} +1 -1
  221. package/dist/public/{shadow-claw-notifications-Cj4Lqx8U.js → shadow-claw-notifications-BHwyREkG.js} +1 -1
  222. package/dist/public/{shadow-claw-page-header-DR4OZFt2.js → shadow-claw-page-header-De6Qf6eY.js} +1 -1
  223. package/dist/public/{shadow-claw-page-header-action-button-BnCV_2Kb.js → shadow-claw-page-header-action-button-FSOhTc9z.js} +1 -1
  224. package/dist/public/{shadow-claw-pages-mpDOtNYj.js → shadow-claw-pages-D_oPyDca.js} +1 -1
  225. package/dist/public/{shadow-claw-pdf-viewer-DZ_84qJH.js → shadow-claw-pdf-viewer-CrU4wqRq.js} +1 -1
  226. package/dist/public/{shadow-claw-settings-CfFTYTEy.js → shadow-claw-settings-DkUhvxVr.js} +2 -2
  227. package/dist/public/{shadow-claw-storage-DLmiT4bG.js → shadow-claw-storage-D0o56Tjw.js} +1 -1
  228. package/dist/public/{shadow-claw-task-server-BoMBCsiS.js → shadow-claw-task-server-4rkroO9K.js} +1 -1
  229. package/dist/public/{shadow-claw-tasks-ChEp1j7x.js → shadow-claw-tasks-BdP7lmvu.js} +1 -1
  230. package/dist/public/{shadow-claw-terminal-BaoVbOda.js → shadow-claw-terminal-DVHX7Fsu.js} +1 -1
  231. package/dist/public/{shadow-claw-toast-e8oz7z6Z.js → shadow-claw-toast-B9Y9tSkW.js} +1 -1
  232. package/dist/public/{shadow-claw-tools-BYjUBiJz.js → shadow-claw-tools-BwwY53Lr.js} +1 -1
  233. package/dist/public/{shadow-claw-webvm-xGb13TME.js → shadow-claw-webvm-CXGdkCNM.js} +1 -1
  234. package/dist/public/{sync-web-mcp-registration-CQluj-Kz.js → sync-web-mcp-registration-DVK_IhXZ.js} +1 -1
  235. package/dist/public/{system-prompt-CTJn0tK-.js → system-prompt-BmswoQwF.js} +2 -2
  236. package/dist/public/{workbox-92eae37e.js → workbox-e4022e15.js} +1 -1
  237. package/dist/public/{zip-reader-DN7FB-Q0.js → zip-reader-JHoTbATw.js} +1 -1
  238. package/dist/server.js +5 -5
  239. package/package.json +1 -1
  240. package/dist/cli/chunk-2gZFafgY.js +0 -1
  241. package/dist/cli/chunk-BCjL0JXf.js +0 -1
  242. package/dist/cli/chunk-BNcu1oiT.js +0 -1
  243. package/dist/cli/chunk-BUNoeMKY.js +0 -36
  244. package/dist/cli/chunk-C5ypckWC.js +0 -225
  245. package/dist/cli/chunk-CFxww5Yz.js +0 -1
  246. package/dist/cli/chunk-CGIgtL6R.js +0 -1
  247. package/dist/cli/chunk-CafdvLx-.js +0 -1
  248. package/dist/cli/chunk-Dhap1VwA.js +0 -1
  249. package/dist/cli/chunk-Ds5-K-9o.js +0 -1
  250. package/dist/cli/chunk-DwvavohW.js +0 -1
  251. package/dist/cli/chunk-_a0CkUNS.js +0 -139
  252. package/dist/lib/system-prompt-bhGRLoL2.js.map +0 -1
  253. package/dist/public/compact-context-CX4H8V57.js +0 -5
@@ -1,7 +1,7 @@
1
1
  import { c as isStaleHandleError, i as getOpfsRootDirName, n as getGroupDir, o as getStorageStatus, s as invalidateStorageRoot, t as parsePath } from "./parse-path-BOHQP_IQ.js";
2
2
  import { o as DEFAULT_GROUP_ID } from "./config-BrHR97zt.js";
3
3
  import { c as writeFileHandle, l as writeOpfsPathViaWorker } from "./tools-B8OJ4sMF.js";
4
- import { d as setMainGroupMemorySuppressed, o as suppressPage, p as setMainGroupIndexSuppressed, t as orchestratorStore } from "./orchestrator-CCARkxQC.js";
4
+ import { d as setMainGroupMemorySuppressed, o as suppressPage, p as setMainGroupIndexSuppressed, t as orchestratorStore } from "./orchestrator-cRBe3lhq.js";
5
5
 
6
6
  //#region src/storage/copy-group-entry.ts
7
7
  /**
@@ -166,4 +166,4 @@ async function moveGroupEntry(db, sourceGroupId, targetGroupId, sourcePath, targ
166
166
 
167
167
  //#endregion
168
168
  export { copyGroupEntry as i, deleteGroupFile as n, createGroupDirectory as r, moveGroupEntry as t };
169
- //# sourceMappingURL=move-group-entry-DDpjxa10.js.map
169
+ //# sourceMappingURL=move-group-entry-D8dptMg0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"move-group-entry-DDpjxa10.js","names":[],"sources":["../../src/storage/copy-group-entry.ts","../../src/storage/create-group-directory.ts","../../src/storage/delete-group-file.ts","../../src/storage/move-group-entry.ts"],"sourcesContent":["import { getGroupDir } from \"./get-group-dir.js\";\nimport { parsePath } from \"./parse-path.js\";\nimport {\n getOpfsRootDirName,\n getStorageStatus,\n invalidateStorageRoot,\n isStaleHandleError,\n} from \"./storage.js\";\nimport {\n writeFileHandle,\n writeOpfsPathViaWorker,\n} from \"./write-file-handle.js\";\nimport type { ShadowClawDatabase } from \"../db/types.js\";\n\n/**\n * Copy a file or directory in a group's workspace to a new path.\n */\nexport async function copyGroupEntry(\n db: ShadowClawDatabase,\n sourceGroupId: string,\n targetGroupId: string,\n sourcePath: string,\n targetPath: string,\n): Promise<void> {\n const normSource = sourcePath.replace(/\\/$/, \"\");\n const normTarget = targetPath.replace(/\\/$/, \"\");\n\n if (sourceGroupId === targetGroupId && normSource === normTarget) {\n throw new Error(\"Source and target paths are identical\");\n }\n\n const { dirs: srcDirs, filename: srcName } = parsePath(normSource);\n const { dirs: tgtDirs, filename: tgtName } = parsePath(normTarget);\n\n if (!srcName || !tgtName) {\n throw new Error(\"Invalid path\");\n }\n\n for (let attempt = 0; attempt < 2; attempt++) {\n try {\n const srcGroupDir = await getGroupDir(db, sourceGroupId);\n const tgtGroupDir = await getGroupDir(db, targetGroupId);\n\n // Resolve source parent\n let srcParent = srcGroupDir;\n for (const seg of srcDirs) {\n srcParent = await srcParent.getDirectoryHandle(seg);\n }\n\n // Resolve target parent\n let tgtParent = tgtGroupDir;\n for (const seg of tgtDirs) {\n tgtParent = await tgtParent.getDirectoryHandle(seg, { create: true });\n }\n\n // Assert target does not exist\n if (\n (await tryGetFileHandle(tgtParent, tgtName)) ||\n (await tryGetDirectoryHandle(tgtParent, tgtName))\n ) {\n throw new Error(`Target already exists: ${tgtName}`);\n }\n\n // Check if source is a directory\n const sourceDir = await tryGetDirectoryHandle(srcParent, srcName);\n if (sourceDir) {\n const targetDir = await tgtParent.getDirectoryHandle(tgtName, {\n create: true,\n });\n\n const safeId = targetGroupId.replace(/:/g, \"-\");\n const currentPathSegments = [\n getOpfsRootDirName(),\n \"groups\",\n safeId,\n ...tgtDirs,\n tgtName,\n ];\n\n try {\n await copyDirectoryContents(\n db,\n targetGroupId,\n sourceDir,\n targetDir,\n currentPathSegments,\n );\n } catch (copyErr) {\n await tgtParent\n .removeEntry(tgtName, { recursive: true })\n .catch(() => undefined);\n throw copyErr;\n }\n\n return;\n }\n\n // Check if source is a file\n const sourceFile = await tryGetFileHandle(srcParent, srcName);\n if (sourceFile) {\n const file = await sourceFile.getFile();\n const targetFile = await tgtParent.getFileHandle(tgtName, {\n create: true,\n });\n\n try {\n await writeFileHandle(targetFile, file);\n } catch (writeErr) {\n const message =\n writeErr instanceof Error ? writeErr.message : String(writeErr);\n const needsOpfsWorkerFallback =\n message.includes(\"Writable file streams are not supported\") &&\n (await getStorageStatus(db)).type === \"opfs\";\n\n if (!needsOpfsWorkerFallback) {\n await tgtParent.removeEntry(tgtName).catch(() => undefined);\n\n throw writeErr;\n }\n\n const safeId = targetGroupId.replace(/:/g, \"-\");\n await writeOpfsPathViaWorker(\n [getOpfsRootDirName(), \"groups\", safeId, ...tgtDirs, tgtName],\n file,\n );\n }\n\n return;\n }\n\n throw new Error(`Entry not found: ${sourcePath}`);\n } catch (err) {\n if (attempt === 0 && isStaleHandleError(err)) {\n invalidateStorageRoot();\n\n continue;\n }\n\n throw err;\n }\n }\n}\n\nasync function tryGetDirectoryHandle(\n parentDir: FileSystemDirectoryHandle,\n name: string,\n): Promise<FileSystemDirectoryHandle | null> {\n try {\n return await parentDir.getDirectoryHandle(name);\n } catch {\n return null;\n }\n}\n\nasync function tryGetFileHandle(\n parentDir: FileSystemDirectoryHandle,\n name: string,\n): Promise<FileSystemFileHandle | null> {\n try {\n return await parentDir.getFileHandle(name);\n } catch {\n return null;\n }\n}\n\nasync function copyDirectoryContents(\n db: ShadowClawDatabase,\n targetGroupId: string,\n sourceDir: FileSystemDirectoryHandle,\n targetDir: FileSystemDirectoryHandle,\n currentPathSegments: string[],\n): Promise<void> {\n for await (const [name, handle] of (sourceDir as any).entries()) {\n if (handle.kind === \"directory\") {\n const nextTargetDir = await targetDir.getDirectoryHandle(name, {\n create: true,\n });\n await copyDirectoryContents(db, targetGroupId, handle, nextTargetDir, [\n ...currentPathSegments,\n name,\n ]);\n\n continue;\n }\n\n const file = await handle.getFile();\n const targetFileHandle = await targetDir.getFileHandle(name, {\n create: true,\n });\n\n try {\n await writeFileHandle(targetFileHandle, file);\n } catch (writeErr) {\n const message =\n writeErr instanceof Error ? writeErr.message : String(writeErr);\n const needsOpfsWorkerFallback =\n message.includes(\"Writable file streams are not supported\") &&\n (await getStorageStatus(db)).type === \"opfs\";\n\n if (!needsOpfsWorkerFallback) {\n throw writeErr;\n }\n\n await writeOpfsPathViaWorker([...currentPathSegments, name], file);\n }\n }\n}\n","import { getGroupDir } from \"./get-group-dir.js\";\nimport { invalidateStorageRoot, isStaleHandleError } from \"./storage.js\";\nimport type { ShadowClawDatabase } from \"../db/types.js\";\n\n/**\n * Create a directory (and any missing parent directories) in a group's workspace.\n */\nexport async function createGroupDirectory(\n db: ShadowClawDatabase,\n groupId: string,\n dirPath: string,\n): Promise<void> {\n const normalized = dirPath\n .replace(/\\\\/g, \"/\")\n .replace(/^\\/home\\/user\\//, \"/\")\n .replace(/^\\/+/, \"\")\n .replace(/\\/+$/, \"\");\n\n const parts = normalized.split(\"/\").filter(Boolean);\n if (parts.length === 0) {\n throw new Error(\"Empty directory path\");\n }\n\n for (let attempt = 0; attempt < 2; attempt++) {\n try {\n let dir = await getGroupDir(db, groupId);\n for (const segment of parts) {\n dir = await dir.getDirectoryHandle(segment, { create: true });\n }\n\n return;\n } catch (err) {\n if (attempt === 0 && isStaleHandleError(err)) {\n invalidateStorageRoot();\n\n continue;\n }\n\n throw err;\n }\n }\n}\n","import { getGroupDir } from \"./get-group-dir.js\";\nimport { parsePath } from \"./parse-path.js\";\nimport { setMainGroupMemorySuppressed } from \"./ensure-main-group-memory.js\";\nimport { setMainGroupIndexSuppressed } from \"./ensure-main-group-index.js\";\nimport { DEFAULT_GROUP_ID } from \"../config/config.js\";\nimport { orchestratorStore } from \"../stores/orchestrator.js\";\nimport { suppressPage } from \"./suppressed-pages.js\";\nimport type { ShadowClawDatabase } from \"../db/types.js\";\n\n/**\n * Delete a file from a group's workspace.\n */\nexport async function deleteGroupFile(\n db: ShadowClawDatabase,\n groupId: string,\n filePath: string,\n): Promise<void> {\n const groupDir = await getGroupDir(db, groupId);\n const { dirs, filename } = parsePath(filePath);\n\n let dir = groupDir;\n for (const seg of dirs) {\n dir = await dir.getDirectoryHandle(seg);\n }\n\n await dir.removeEntry(filename);\n\n if (groupId === DEFAULT_GROUP_ID && dirs.length === 0) {\n if (filename === \"MEMORY.md\") {\n await setMainGroupMemorySuppressed(db, true);\n } else if (filename === \"index.html\") {\n await setMainGroupIndexSuppressed(db, true);\n }\n }\n\n try {\n await suppressPage(db, groupId, filePath);\n } catch {}\n\n try {\n await orchestratorStore.removePage(db, filePath, groupId);\n } catch {\n // Orchestrator store might not be instantiated in isolated storage unit test\n }\n}\n","import { copyGroupEntry } from \"./copy-group-entry.js\";\nimport { getGroupDir } from \"./get-group-dir.js\";\nimport { parsePath } from \"./parse-path.js\";\nimport type { ShadowClawDatabase } from \"../db/types.js\";\n\n/**\n * Move (rename and/or relocate) a file or directory in a group's workspace.\n */\nexport async function moveGroupEntry(\n db: ShadowClawDatabase,\n sourceGroupId: string,\n targetGroupId: string,\n sourcePath: string,\n targetPath: string,\n): Promise<void> {\n const normSource = sourcePath.replace(/\\/$/, \"\");\n const normTarget = targetPath.replace(/\\/$/, \"\");\n\n if (sourceGroupId === targetGroupId && normSource === normTarget) {\n return; // No-op\n }\n\n // 1. Copy source to target\n await copyGroupEntry(\n db,\n sourceGroupId,\n targetGroupId,\n normSource,\n normTarget,\n );\n\n // 2. Remove source\n const { dirs, filename } = parsePath(normSource);\n if (!filename) {\n throw new Error(\"Invalid source path\");\n }\n\n const groupDir = await getGroupDir(db, sourceGroupId);\n let parentDir = groupDir;\n for (const seg of dirs) {\n parentDir = await parentDir.getDirectoryHandle(seg);\n }\n\n await parentDir.removeEntry(filename, { recursive: true });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"move-group-entry-D8dptMg0.js","names":[],"sources":["../../src/storage/copy-group-entry.ts","../../src/storage/create-group-directory.ts","../../src/storage/delete-group-file.ts","../../src/storage/move-group-entry.ts"],"sourcesContent":["import { getGroupDir } from \"./get-group-dir.js\";\nimport { parsePath } from \"./parse-path.js\";\nimport {\n getOpfsRootDirName,\n getStorageStatus,\n invalidateStorageRoot,\n isStaleHandleError,\n} from \"./storage.js\";\nimport {\n writeFileHandle,\n writeOpfsPathViaWorker,\n} from \"./write-file-handle.js\";\nimport type { ShadowClawDatabase } from \"../db/types.js\";\n\n/**\n * Copy a file or directory in a group's workspace to a new path.\n */\nexport async function copyGroupEntry(\n db: ShadowClawDatabase,\n sourceGroupId: string,\n targetGroupId: string,\n sourcePath: string,\n targetPath: string,\n): Promise<void> {\n const normSource = sourcePath.replace(/\\/$/, \"\");\n const normTarget = targetPath.replace(/\\/$/, \"\");\n\n if (sourceGroupId === targetGroupId && normSource === normTarget) {\n throw new Error(\"Source and target paths are identical\");\n }\n\n const { dirs: srcDirs, filename: srcName } = parsePath(normSource);\n const { dirs: tgtDirs, filename: tgtName } = parsePath(normTarget);\n\n if (!srcName || !tgtName) {\n throw new Error(\"Invalid path\");\n }\n\n for (let attempt = 0; attempt < 2; attempt++) {\n try {\n const srcGroupDir = await getGroupDir(db, sourceGroupId);\n const tgtGroupDir = await getGroupDir(db, targetGroupId);\n\n // Resolve source parent\n let srcParent = srcGroupDir;\n for (const seg of srcDirs) {\n srcParent = await srcParent.getDirectoryHandle(seg);\n }\n\n // Resolve target parent\n let tgtParent = tgtGroupDir;\n for (const seg of tgtDirs) {\n tgtParent = await tgtParent.getDirectoryHandle(seg, { create: true });\n }\n\n // Assert target does not exist\n if (\n (await tryGetFileHandle(tgtParent, tgtName)) ||\n (await tryGetDirectoryHandle(tgtParent, tgtName))\n ) {\n throw new Error(`Target already exists: ${tgtName}`);\n }\n\n // Check if source is a directory\n const sourceDir = await tryGetDirectoryHandle(srcParent, srcName);\n if (sourceDir) {\n const targetDir = await tgtParent.getDirectoryHandle(tgtName, {\n create: true,\n });\n\n const safeId = targetGroupId.replace(/:/g, \"-\");\n const currentPathSegments = [\n getOpfsRootDirName(),\n \"groups\",\n safeId,\n ...tgtDirs,\n tgtName,\n ];\n\n try {\n await copyDirectoryContents(\n db,\n targetGroupId,\n sourceDir,\n targetDir,\n currentPathSegments,\n );\n } catch (copyErr) {\n await tgtParent\n .removeEntry(tgtName, { recursive: true })\n .catch(() => undefined);\n throw copyErr;\n }\n\n return;\n }\n\n // Check if source is a file\n const sourceFile = await tryGetFileHandle(srcParent, srcName);\n if (sourceFile) {\n const file = await sourceFile.getFile();\n const targetFile = await tgtParent.getFileHandle(tgtName, {\n create: true,\n });\n\n try {\n await writeFileHandle(targetFile, file);\n } catch (writeErr) {\n const message =\n writeErr instanceof Error ? writeErr.message : String(writeErr);\n const needsOpfsWorkerFallback =\n message.includes(\"Writable file streams are not supported\") &&\n (await getStorageStatus(db)).type === \"opfs\";\n\n if (!needsOpfsWorkerFallback) {\n await tgtParent.removeEntry(tgtName).catch(() => undefined);\n\n throw writeErr;\n }\n\n const safeId = targetGroupId.replace(/:/g, \"-\");\n await writeOpfsPathViaWorker(\n [getOpfsRootDirName(), \"groups\", safeId, ...tgtDirs, tgtName],\n file,\n );\n }\n\n return;\n }\n\n throw new Error(`Entry not found: ${sourcePath}`);\n } catch (err) {\n if (attempt === 0 && isStaleHandleError(err)) {\n invalidateStorageRoot();\n\n continue;\n }\n\n throw err;\n }\n }\n}\n\nasync function tryGetDirectoryHandle(\n parentDir: FileSystemDirectoryHandle,\n name: string,\n): Promise<FileSystemDirectoryHandle | null> {\n try {\n return await parentDir.getDirectoryHandle(name);\n } catch {\n return null;\n }\n}\n\nasync function tryGetFileHandle(\n parentDir: FileSystemDirectoryHandle,\n name: string,\n): Promise<FileSystemFileHandle | null> {\n try {\n return await parentDir.getFileHandle(name);\n } catch {\n return null;\n }\n}\n\nasync function copyDirectoryContents(\n db: ShadowClawDatabase,\n targetGroupId: string,\n sourceDir: FileSystemDirectoryHandle,\n targetDir: FileSystemDirectoryHandle,\n currentPathSegments: string[],\n): Promise<void> {\n for await (const [name, handle] of (sourceDir as any).entries()) {\n if (handle.kind === \"directory\") {\n const nextTargetDir = await targetDir.getDirectoryHandle(name, {\n create: true,\n });\n await copyDirectoryContents(db, targetGroupId, handle, nextTargetDir, [\n ...currentPathSegments,\n name,\n ]);\n\n continue;\n }\n\n const file = await handle.getFile();\n const targetFileHandle = await targetDir.getFileHandle(name, {\n create: true,\n });\n\n try {\n await writeFileHandle(targetFileHandle, file);\n } catch (writeErr) {\n const message =\n writeErr instanceof Error ? writeErr.message : String(writeErr);\n const needsOpfsWorkerFallback =\n message.includes(\"Writable file streams are not supported\") &&\n (await getStorageStatus(db)).type === \"opfs\";\n\n if (!needsOpfsWorkerFallback) {\n throw writeErr;\n }\n\n await writeOpfsPathViaWorker([...currentPathSegments, name], file);\n }\n }\n}\n","import { getGroupDir } from \"./get-group-dir.js\";\nimport { invalidateStorageRoot, isStaleHandleError } from \"./storage.js\";\nimport type { ShadowClawDatabase } from \"../db/types.js\";\n\n/**\n * Create a directory (and any missing parent directories) in a group's workspace.\n */\nexport async function createGroupDirectory(\n db: ShadowClawDatabase,\n groupId: string,\n dirPath: string,\n): Promise<void> {\n const normalized = dirPath\n .replace(/\\\\/g, \"/\")\n .replace(/^\\/home\\/user\\//, \"/\")\n .replace(/^\\/+/, \"\")\n .replace(/\\/+$/, \"\");\n\n const parts = normalized.split(\"/\").filter(Boolean);\n if (parts.length === 0) {\n throw new Error(\"Empty directory path\");\n }\n\n for (let attempt = 0; attempt < 2; attempt++) {\n try {\n let dir = await getGroupDir(db, groupId);\n for (const segment of parts) {\n dir = await dir.getDirectoryHandle(segment, { create: true });\n }\n\n return;\n } catch (err) {\n if (attempt === 0 && isStaleHandleError(err)) {\n invalidateStorageRoot();\n\n continue;\n }\n\n throw err;\n }\n }\n}\n","import { getGroupDir } from \"./get-group-dir.js\";\nimport { parsePath } from \"./parse-path.js\";\nimport { setMainGroupMemorySuppressed } from \"./ensure-main-group-memory.js\";\nimport { setMainGroupIndexSuppressed } from \"./ensure-main-group-index.js\";\nimport { DEFAULT_GROUP_ID } from \"../config/config.js\";\nimport { orchestratorStore } from \"../stores/orchestrator.js\";\nimport { suppressPage } from \"./suppressed-pages.js\";\nimport type { ShadowClawDatabase } from \"../db/types.js\";\n\n/**\n * Delete a file from a group's workspace.\n */\nexport async function deleteGroupFile(\n db: ShadowClawDatabase,\n groupId: string,\n filePath: string,\n): Promise<void> {\n const groupDir = await getGroupDir(db, groupId);\n const { dirs, filename } = parsePath(filePath);\n\n let dir = groupDir;\n for (const seg of dirs) {\n dir = await dir.getDirectoryHandle(seg);\n }\n\n await dir.removeEntry(filename);\n\n if (groupId === DEFAULT_GROUP_ID && dirs.length === 0) {\n if (filename === \"MEMORY.md\") {\n await setMainGroupMemorySuppressed(db, true);\n } else if (filename === \"index.html\") {\n await setMainGroupIndexSuppressed(db, true);\n }\n }\n\n try {\n await suppressPage(db, groupId, filePath);\n } catch {}\n\n try {\n await orchestratorStore.removePage(db, filePath, groupId);\n } catch {\n // Orchestrator store might not be instantiated in isolated storage unit test\n }\n}\n","import { copyGroupEntry } from \"./copy-group-entry.js\";\nimport { getGroupDir } from \"./get-group-dir.js\";\nimport { parsePath } from \"./parse-path.js\";\nimport type { ShadowClawDatabase } from \"../db/types.js\";\n\n/**\n * Move (rename and/or relocate) a file or directory in a group's workspace.\n */\nexport async function moveGroupEntry(\n db: ShadowClawDatabase,\n sourceGroupId: string,\n targetGroupId: string,\n sourcePath: string,\n targetPath: string,\n): Promise<void> {\n const normSource = sourcePath.replace(/\\/$/, \"\");\n const normTarget = targetPath.replace(/\\/$/, \"\");\n\n if (sourceGroupId === targetGroupId && normSource === normTarget) {\n return; // No-op\n }\n\n // 1. Copy source to target\n await copyGroupEntry(\n db,\n sourceGroupId,\n targetGroupId,\n normSource,\n normTarget,\n );\n\n // 2. Remove source\n const { dirs, filename } = parsePath(normSource);\n if (!filename) {\n throw new Error(\"Invalid source path\");\n }\n\n const groupDir = await getGroupDir(db, sourceGroupId);\n let parentDir = groupDir;\n for (const seg of dirs) {\n parentDir = await parentDir.getDirectoryHandle(seg);\n }\n\n await parentDir.removeEntry(filename, { recursive: true });\n}\n"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { c as writeFileHandle, d as readGroupFile, l as writeOpfsPathViaWorker,
7
7
  import { t as readGroupFileBytes } from "./read-group-file-bytes-UQIk1eJG.js";
8
8
  import { yieldToMain } from "./utils/delay.js";
9
9
  import { t as setConfig } from "./set-config-CUadvYZ1.js";
10
- import { F as syncProxyConfigToServiceWorker, S as clearGroupMessages, g as saveMessage, m as updateTaskLastRun, t as orchestratorStore, y as listGroups } from "./orchestrator-CCARkxQC.js";
10
+ import { F as syncProxyConfigToServiceWorker, S as clearGroupMessages, g as saveMessage, m as updateTaskLastRun, t as orchestratorStore, y as listGroups } from "./orchestrator-cRBe3lhq.js";
11
11
  import { ulid } from "./utils/ulid.js";
12
12
  import { t as getOrCreateSubscriberId } from "./get-or-create-subscriber-id-wyzaML7Z.js";
13
13
  import { _ as createModuleWorker } from "./trusted-types-HwsGS5Nj.js";
@@ -18,17 +18,17 @@ import { i as detectProviderHelpType } from "./transformers-BMURofG6.js";
18
18
  import { n as handleRoomInvite } from "./room-QujMjoxG.js";
19
19
  import { S as isPromptApiSupported, a as getApiKeyForRequest, b as stopTransformersProgressPolling, i as getApiKeyForHeaders, l as getProviderRuntimeHeaders, n as applyMeshLlmHeaders, r as cancelLlamafileRequest, t as applyLlamafileHeaders } from "./provider-BC9KPI14.js";
20
20
  import { inferAttachmentMimeType } from "./utils/mime.js";
21
- import { i as persistMessageAttachments, r as ROOM_METHOD, t as PeerJsChannel } from "./peerjs-Bfw_FWLB.js";
22
- import { a as syncExistingPushSubscription } from "./push-client-rrjTdc-U.js";
21
+ import { i as persistMessageAttachments, r as ROOM_METHOD, t as PeerJsChannel } from "./peerjs-BLg8aGUj.js";
22
+ import { a as syncExistingPushSubscription } from "./push-client-CAm6UMvE.js";
23
23
  import { n as decryptValue, r as encryptValue } from "./crypto-Bikgpqfe.js";
24
- import { f as submitMessage, n as clearPeerJsTypingState, t as applyAllChannelRunningStates, u as loadChannelEnabled } from "./channel-mmdGzPkT.js";
25
- import { a as roomIdFromGroupId, i as roomGroupId, n as deleteRoom, o as upsertRoom, r as getRoomMetadata } from "./rooms-bwGoYb1q.js";
24
+ import { f as submitMessage, n as clearPeerJsTypingState, t as applyAllChannelRunningStates, u as loadChannelEnabled } from "./channel-DB77spML.js";
25
+ import { a as roomIdFromGroupId, i as roomGroupId, n as deleteRoom, o as upsertRoom, r as getRoomMetadata } from "./rooms-Dzphx3rK.js";
26
26
  import { o as setWebMcpMode, s as unregisterWebMcpTools } from "./webmcp-BoMTvgmX.js";
27
- import { a as shouldDeferTaskToServer, i as runTaskAsScheduled, p as getContextLimit, r as handleWorkerMessage, t as discoverSkills } from "./discover-skills-OwlQ2sXA.js";
28
- import { r as syncWebMcpRegistration } from "./sync-web-mcp-registration-BFtG_4kx.js";
27
+ import { a as shouldDeferTaskToServer, i as runTaskAsScheduled, p as getContextLimit, r as handleWorkerMessage, t as discoverSkills } from "./discover-skills-CXyaWHKi.js";
28
+ import { r as syncWebMcpRegistration } from "./sync-web-mcp-registration-BiOZvW-R.js";
29
29
  import { t as fetchTokenizerConfig } from "./chat-template-DPEKGJhB.js";
30
- import { i as estimateTokens, n as buildConversationMessages, r as buildDynamicContext, t as buildSystemPrompt } from "./system-prompt-bhGRLoL2.js";
31
- import { ensureControlPlaneConnected } from "./init-control-plane-B7blDVIE.js";
30
+ import { i as estimateTokens, n as buildConversationMessages, r as buildDynamicContext, t as buildSystemPrompt } from "./system-prompt-CxJ3Nx4c.js";
31
+ import { ensureControlPlaneConnected } from "./init-control-plane-CEGdzgWX.js";
32
32
 
33
33
  //#region src/db/migrate-legacy-database.ts
34
34
  /**
@@ -1257,7 +1257,7 @@ async function processQueue(o, db) {
1257
1257
  o.processing = true;
1258
1258
  const msg = o.messageQueue.shift();
1259
1259
  try {
1260
- const { invokeAgent } = await import("./invoke-agent-SxvudiDT.js");
1260
+ const { invokeAgent } = await import("./invoke-agent-cac3gCsj.js");
1261
1261
  await invokeAgent(o, db, msg.groupId, msg.content, msg.freshContext, msg.subagent);
1262
1262
  } catch (err) {
1263
1263
  console.error("Failed to invoke agent:", err);
@@ -2608,7 +2608,7 @@ var Orchestrator = class {
2608
2608
  const triggerContent = this.inFlightTriggerByGroup.get(groupId);
2609
2609
  if (!triggerContent) return false;
2610
2610
  this.stopCurrentRequest(groupId);
2611
- const { invokeAgent } = await import("./invoke-agent-SxvudiDT.js");
2611
+ const { invokeAgent } = await import("./invoke-agent-cac3gCsj.js");
2612
2612
  await invokeAgent(this, this.db, groupId, triggerContent);
2613
2613
  return true;
2614
2614
  }
@@ -2664,4 +2664,4 @@ var Orchestrator = class {
2664
2664
 
2665
2665
  //#endregion
2666
2666
  export { Orchestrator };
2667
- //# sourceMappingURL=orchestrator-C7fkh7T7.js.map
2667
+ //# sourceMappingURL=orchestrator-BBAwy9Nm.js.map