shadow-claw 1.59.6 → 1.59.7

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 (324) hide show
  1. package/.well-known/mcp/server-card.json +12 -4
  2. package/.well-known/mcp.json +12 -4
  3. package/dist/cli/build/build.js +1 -1
  4. package/dist/cli/{chunk-DM4xsTry.js → chunk-3vNYrs_L.js} +1 -1
  5. package/dist/cli/{chunk-Ctg5L55n.js → chunk-66BvqAV0.js} +1 -1
  6. package/dist/cli/{chunk-Bq38OubR.js → chunk-B0qusANw.js} +1 -1
  7. package/dist/cli/{chunk-yiVdvGCJ.js → chunk-B3TrWbca.js} +7 -7
  8. package/dist/cli/{chunk-C8DBACtx.js → chunk-B88Z8T_9.js} +1 -1
  9. package/dist/cli/chunk-BCjL0JXf.js +1 -0
  10. package/dist/cli/chunk-BNcu1oiT.js +1 -0
  11. package/dist/cli/{chunk-gvNsvav0.js → chunk-C5ypckWC.js} +7 -7
  12. package/dist/cli/{chunk-Dw8GndPD.js → chunk-CAAeGOdy.js} +1 -1
  13. package/dist/cli/chunk-CFxww5Yz.js +1 -0
  14. package/dist/cli/chunk-CGIgtL6R.js +1 -0
  15. package/dist/cli/{chunk-DJqHK-qS.js → chunk-CQaCgswD.js} +7 -7
  16. package/dist/cli/chunk-CZdCRqNe.js +7 -0
  17. package/dist/cli/chunk-CafdvLx-.js +1 -0
  18. package/dist/cli/{chunk-Bc_weULz.js → chunk-CncW6_WL.js} +1 -1
  19. package/dist/cli/chunk-DDvuLVfW.js +1 -0
  20. package/dist/cli/{chunk-Cq_kQohv.js → chunk-DMs7kREC.js} +1 -1
  21. package/dist/cli/{chunk-CX2itile.js → chunk-D_te8ufL.js} +1 -1
  22. package/dist/cli/{chunk-3wTukVof.js → chunk-DhOU6GYX.js} +1 -1
  23. package/dist/cli/chunk-Dhap1VwA.js +1 -0
  24. package/dist/cli/chunk-DwvavohW.js +1 -0
  25. package/dist/cli/{chunk-DLde6nuO.js → chunk-SRBRVorc.js} +1 -1
  26. package/dist/cli/{chunk-D3y7h9Xe.js → chunk-SxK79JmB.js} +1 -1
  27. package/dist/cli/chunk-_a0CkUNS.js +139 -0
  28. package/dist/cli/{chunk-C9o6lXP3.js → chunk-hVf839t7.js} +1 -1
  29. package/dist/cli/chunk-iB8OoMmW.js +7 -0
  30. package/dist/cli/cli.js +1 -1
  31. package/dist/headless-agent.js +1 -1
  32. package/dist/lib/{app-routes-DJdIjp2V.js → app-routes-BXiRvlNl.js} +7 -25
  33. package/dist/lib/{app-routes-DJdIjp2V.js.map → app-routes-BXiRvlNl.js.map} +1 -1
  34. package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js → attachment-capabilities-BjkEPip8.js} +2 -2
  35. package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js.map → attachment-capabilities-BjkEPip8.js.map} +1 -1
  36. package/dist/lib/{channel-Dlru5ofR.js → channel-mmdGzPkT.js} +3 -3
  37. package/dist/lib/{channel-Dlru5ofR.js.map → channel-mmdGzPkT.js.map} +1 -1
  38. package/dist/lib/{chat-template-BuuLY8l7.js → chat-template-DPEKGJhB.js} +2 -2
  39. package/dist/lib/{chat-template-BuuLY8l7.js.map → chat-template-DPEKGJhB.js.map} +1 -1
  40. package/dist/lib/{compact-context-BtR55YPU.js → compact-context-CY9BBlUQ.js} +19 -19
  41. package/dist/lib/{compact-context-BtR55YPU.js.map → compact-context-CY9BBlUQ.js.map} +1 -1
  42. package/dist/lib/components/common/shadow-claw-provider-model-picker.js +1 -1
  43. package/dist/lib/components/index.js +27 -27
  44. package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
  45. package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
  46. package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
  47. package/dist/lib/components/settings/shadow-claw-git.js +1 -1
  48. package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
  49. package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
  50. package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
  51. package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
  52. package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
  53. package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
  54. package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
  55. package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
  56. package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
  57. package/dist/lib/components/shadow-claw-a2ui.js +1 -1
  58. package/dist/lib/components/shadow-claw-accounts.js +1 -1
  59. package/dist/lib/components/shadow-claw-channel-config.js +1 -1
  60. package/dist/lib/components/shadow-claw-channels.js +1 -1
  61. package/dist/lib/components/shadow-claw-chat.js +1 -1
  62. package/dist/lib/components/shadow-claw-control-plane.js +1 -1
  63. package/dist/lib/components/shadow-claw-conversations.js +1 -1
  64. package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
  65. package/dist/lib/components/shadow-claw-files.js +1 -1
  66. package/dist/lib/components/shadow-claw-git.js +1 -1
  67. package/dist/lib/components/shadow-claw-integrations.js +1 -1
  68. package/dist/lib/components/shadow-claw-llm.js +1 -1
  69. package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
  70. package/dist/lib/components/shadow-claw-networking.js +1 -1
  71. package/dist/lib/components/shadow-claw-notifications.js +1 -1
  72. package/dist/lib/components/shadow-claw-page-header.js +1 -1
  73. package/dist/lib/components/shadow-claw-pages.js +1 -1
  74. package/dist/lib/components/shadow-claw-peerjs.js +1 -1
  75. package/dist/lib/components/shadow-claw-provider-model-picker.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/{config-DxNI3TlW.js → config-BrHR97zt.js} +2 -2
  85. package/dist/lib/{config-DxNI3TlW.js.map → config-BrHR97zt.js.map} +1 -1
  86. package/dist/lib/{configure-peer-js-ChDhOZU4.js → configure-peer-js-ccNvax2N.js} +3 -3
  87. package/dist/lib/{configure-peer-js-ChDhOZU4.js.map → configure-peer-js-ccNvax2N.js.map} +1 -1
  88. package/dist/lib/{connections-DC4NZkJE.js → connections-C1FWsBsE.js} +2 -2
  89. package/dist/lib/{connections-DC4NZkJE.js.map → connections-C1FWsBsE.js.map} +1 -1
  90. package/dist/lib/{credentials-5vpz0XPk.js → credentials-CZbngHXW.js} +2 -2
  91. package/dist/lib/{credentials-5vpz0XPk.js.map → credentials-CZbngHXW.js.map} +1 -1
  92. package/dist/lib/{discover-skills-CD0sKvAI.js → discover-skills-OwlQ2sXA.js} +13 -13
  93. package/dist/lib/{discover-skills-CD0sKvAI.js.map → discover-skills-OwlQ2sXA.js.map} +1 -1
  94. package/dist/lib/{download-group-file-Dk3qaxhJ.js → download-group-file-D0wgg10Q.js} +2 -2
  95. package/dist/lib/{download-group-file-Dk3qaxhJ.js.map → download-group-file-D0wgg10Q.js.map} +1 -1
  96. package/dist/lib/{file-viewer-B4pRW-_G.js → file-viewer-DOfvX6yy.js} +5 -5
  97. package/dist/lib/{file-viewer-B4pRW-_G.js.map → file-viewer-DOfvX6yy.js.map} +1 -1
  98. package/dist/lib/{get-or-create-subscriber-id-HCcgDEPz.js → get-or-create-subscriber-id-wyzaML7Z.js} +2 -2
  99. package/dist/lib/{get-or-create-subscriber-id-HCcgDEPz.js.map → get-or-create-subscriber-id-wyzaML7Z.js.map} +1 -1
  100. package/dist/lib/{git-B3Q1euc5.js → git-D2J_j9X9.js} +5 -5
  101. package/dist/lib/{git-B3Q1euc5.js.map → git-D2J_j9X9.js.map} +1 -1
  102. package/dist/lib/{iframe-bridge-scripts-D8iuFhUk.js → iframe-bridge-scripts-Dx825LLG.js} +2 -2
  103. package/dist/lib/{iframe-bridge-scripts-D8iuFhUk.js.map → iframe-bridge-scripts-Dx825LLG.js.map} +1 -1
  104. package/dist/lib/index.js +28 -28
  105. package/dist/lib/{init-chat-split-resize-B0ODULx9.js → init-chat-split-resize-Cc0bd2z9.js} +2 -2
  106. package/dist/lib/{init-chat-split-resize-B0ODULx9.js.map → init-chat-split-resize-Cc0bd2z9.js.map} +1 -1
  107. package/dist/lib/{init-control-plane-C1FRRmjC.js → init-control-plane-B7blDVIE.js} +15 -15
  108. package/dist/lib/{init-control-plane-C1FRRmjC.js.map → init-control-plane-B7blDVIE.js.map} +1 -1
  109. package/dist/lib/{invoke-agent-CzN7sVh-.js → invoke-agent-SxvudiDT.js} +11 -11
  110. package/dist/lib/{invoke-agent-CzN7sVh-.js.map → invoke-agent-SxvudiDT.js.map} +1 -1
  111. package/dist/lib/{markdown-mbNo7cV3.js → markdown--6vTAPEH.js} +2 -2
  112. package/dist/lib/{markdown-mbNo7cV3.js.map → markdown--6vTAPEH.js.map} +1 -1
  113. package/dist/lib/{mcp-reconnect-3T7yWGEY.js → mcp-reconnect-BeqQvNWO.js} +3 -3
  114. package/dist/lib/{mcp-reconnect-3T7yWGEY.js.map → mcp-reconnect-BeqQvNWO.js.map} +1 -1
  115. package/dist/lib/{model-ranking-DGNSWYwN.js → model-ranking-BhsJV7vb.js} +2 -2
  116. package/dist/lib/{model-ranking-DGNSWYwN.js.map → model-ranking-BhsJV7vb.js.map} +1 -1
  117. package/dist/lib/{move-group-entry-NMTJ59M9.js → move-group-entry-DDpjxa10.js} +5 -5
  118. package/dist/lib/{move-group-entry-NMTJ59M9.js.map → move-group-entry-DDpjxa10.js.map} +1 -1
  119. package/dist/lib/{orchestrator-B8FV1V7x.js → orchestrator-C7fkh7T7.js} +24 -24
  120. package/dist/lib/{orchestrator-B8FV1V7x.js.map → orchestrator-C7fkh7T7.js.map} +1 -1
  121. package/dist/lib/{orchestrator-i_QJ-o22.js → orchestrator-CCARkxQC.js} +11 -11
  122. package/dist/lib/orchestrator-CCARkxQC.js.map +1 -0
  123. package/dist/lib/{parse-path-DPCn-HwI.js → parse-path-BOHQP_IQ.js} +3 -3
  124. package/dist/lib/{parse-path-DPCn-HwI.js.map → parse-path-BOHQP_IQ.js.map} +1 -1
  125. package/dist/lib/{peerjs-z5zeioPV.js → peerjs-Bfw_FWLB.js} +8 -8
  126. package/dist/lib/{peerjs-z5zeioPV.js.map → peerjs-Bfw_FWLB.js.map} +1 -1
  127. package/dist/lib/{process-peer-query-param-CJp7w7AU.js → process-peer-query-param-BxYiZNdf.js} +5 -5
  128. package/dist/lib/{process-peer-query-param-CJp7w7AU.js.map → process-peer-query-param-BxYiZNdf.js.map} +1 -1
  129. package/dist/lib/{process-pending-shared-payloads-B6_TlBFA.js → process-pending-shared-payloads-DPIbwRb3.js} +4 -4
  130. package/dist/lib/{process-pending-shared-payloads-B6_TlBFA.js.map → process-pending-shared-payloads-DPIbwRb3.js.map} +1 -1
  131. package/dist/lib/{process-room-query-param-C3FFGGn6.js → process-room-query-param-B2_d50nE.js} +4 -4
  132. package/dist/lib/{process-room-query-param-C3FFGGn6.js.map → process-room-query-param-B2_d50nE.js.map} +1 -1
  133. package/dist/lib/{provider-DcQZypu5.js → provider-BC9KPI14.js} +3 -3
  134. package/dist/lib/{provider-DcQZypu5.js.map → provider-BC9KPI14.js.map} +1 -1
  135. package/dist/lib/{push-client-Cx5rMs6J.js → push-client-rrjTdc-U.js} +5 -5
  136. package/dist/lib/{push-client-Cx5rMs6J.js.map → push-client-rrjTdc-U.js.map} +1 -1
  137. package/dist/lib/{read-group-file-bytes-CXOG_YyM.js → read-group-file-bytes-UQIk1eJG.js} +2 -2
  138. package/dist/lib/{read-group-file-bytes-CXOG_YyM.js.map → read-group-file-bytes-UQIk1eJG.js.map} +1 -1
  139. package/dist/lib/{rooms-CwlkYLDU.js → rooms-bwGoYb1q.js} +2 -2
  140. package/dist/lib/{rooms-CwlkYLDU.js.map → rooms-bwGoYb1q.js.map} +1 -1
  141. package/dist/lib/{shadow-claw-DoQ7fgl5.js → shadow-claw-CypGVlVO.js} +17 -20
  142. package/dist/lib/shadow-claw-CypGVlVO.js.map +1 -0
  143. package/dist/lib/{shadow-claw-a2ui-Br6qJMs1.js → shadow-claw-a2ui-lG0vQbW8.js} +2 -2
  144. package/dist/lib/{shadow-claw-a2ui-Br6qJMs1.js.map → shadow-claw-a2ui-lG0vQbW8.js.map} +1 -1
  145. package/dist/lib/{shadow-claw-accounts-BTDILfWw.js → shadow-claw-accounts-CkqyCxwp.js} +3 -3
  146. package/dist/lib/{shadow-claw-accounts-BTDILfWw.js.map → shadow-claw-accounts-CkqyCxwp.js.map} +1 -1
  147. package/dist/lib/{shadow-claw-channel-config-IKiL34tI.js → shadow-claw-channel-config-DJpDovkF.js} +4 -4
  148. package/dist/lib/{shadow-claw-channel-config-IKiL34tI.js.map → shadow-claw-channel-config-DJpDovkF.js.map} +1 -1
  149. package/dist/lib/{shadow-claw-channels-JgEzuHWK.js → shadow-claw-channels-DJLwRovH.js} +3 -3
  150. package/dist/lib/{shadow-claw-channels-JgEzuHWK.js.map → shadow-claw-channels-DJLwRovH.js.map} +1 -1
  151. package/dist/lib/{shadow-claw-chat-SGUDT31r.js → shadow-claw-chat-B92cPaft.js} +15 -15
  152. package/dist/lib/{shadow-claw-chat-SGUDT31r.js.map → shadow-claw-chat-B92cPaft.js.map} +1 -1
  153. package/dist/lib/{shadow-claw-control-plane-CRWFZ3vD.js → shadow-claw-control-plane-fvn-qyHj.js} +7 -7
  154. package/dist/lib/{shadow-claw-control-plane-CRWFZ3vD.js.map → shadow-claw-control-plane-fvn-qyHj.js.map} +1 -1
  155. package/dist/lib/{shadow-claw-conversations-D23GJ7qo.js → shadow-claw-conversations-CsVyDOny.js} +7 -7
  156. package/dist/lib/{shadow-claw-conversations-D23GJ7qo.js.map → shadow-claw-conversations-CsVyDOny.js.map} +1 -1
  157. package/dist/lib/{shadow-claw-file-viewer-C1V8WTiU.js → shadow-claw-file-viewer-DFfyP7s5.js} +10 -10
  158. package/dist/lib/{shadow-claw-file-viewer-C1V8WTiU.js.map → shadow-claw-file-viewer-DFfyP7s5.js.map} +1 -1
  159. package/dist/lib/{shadow-claw-files-DN7irmE1.js → shadow-claw-files-cT6HL7ye.js} +11 -11
  160. package/dist/lib/{shadow-claw-files-DN7irmE1.js.map → shadow-claw-files-cT6HL7ye.js.map} +1 -1
  161. package/dist/lib/{shadow-claw-git-D-1oIh65.js → shadow-claw-git-Cv9mQgTx.js} +6 -6
  162. package/dist/lib/{shadow-claw-git-D-1oIh65.js.map → shadow-claw-git-Cv9mQgTx.js.map} +1 -1
  163. package/dist/lib/{shadow-claw-integrations-CZjnm7cM.js → shadow-claw-integrations-RZZ-m-Id.js} +4 -4
  164. package/dist/lib/{shadow-claw-integrations-CZjnm7cM.js.map → shadow-claw-integrations-RZZ-m-Id.js.map} +1 -1
  165. package/dist/lib/{shadow-claw-llm-4Gefh5FN.js → shadow-claw-llm-CKOYzPDp.js} +9 -9
  166. package/dist/lib/{shadow-claw-llm-4Gefh5FN.js.map → shadow-claw-llm-CKOYzPDp.js.map} +1 -1
  167. package/dist/lib/{shadow-claw-mcp-remote-B9ssb3YV.js → shadow-claw-mcp-remote-BKFROurv.js} +4 -4
  168. package/dist/lib/{shadow-claw-mcp-remote-B9ssb3YV.js.map → shadow-claw-mcp-remote-BKFROurv.js.map} +1 -1
  169. package/dist/lib/{shadow-claw-networking-BN5BB4hb.js → shadow-claw-networking-DYfiUQaH.js} +2 -2
  170. package/dist/lib/{shadow-claw-networking-BN5BB4hb.js.map → shadow-claw-networking-DYfiUQaH.js.map} +1 -1
  171. package/dist/lib/{shadow-claw-notifications-71KARtkY.js → shadow-claw-notifications-JJlzriuX.js} +3 -3
  172. package/dist/lib/{shadow-claw-notifications-71KARtkY.js.map → shadow-claw-notifications-JJlzriuX.js.map} +1 -1
  173. package/dist/lib/{shadow-claw-page-header-DMGO-TSe.js → shadow-claw-page-header-C_Qr3xZM.js} +2 -2
  174. package/dist/lib/{shadow-claw-page-header-DMGO-TSe.js.map → shadow-claw-page-header-C_Qr3xZM.js.map} +1 -1
  175. package/dist/lib/{shadow-claw-pages-BiRM6qiA.js → shadow-claw-pages-BCo3ihZI.js} +11 -11
  176. package/dist/lib/{shadow-claw-pages-BiRM6qiA.js.map → shadow-claw-pages-BCo3ihZI.js.map} +1 -1
  177. package/dist/lib/{shadow-claw-peerjs-BZu7jNSe.js → shadow-claw-peerjs-CFNjfrY5.js} +6 -6
  178. package/dist/lib/{shadow-claw-peerjs-BZu7jNSe.js.map → shadow-claw-peerjs-CFNjfrY5.js.map} +1 -1
  179. package/dist/lib/{shadow-claw-provider-model-picker-BXYXEobD.js → shadow-claw-provider-model-picker-B-Ct4yW-.js} +2 -2
  180. package/dist/lib/{shadow-claw-provider-model-picker-BXYXEobD.js.map → shadow-claw-provider-model-picker-B-Ct4yW-.js.map} +1 -1
  181. package/dist/lib/{shadow-claw-settings-CcT5EK08.js → shadow-claw-settings-BMwne0bh.js} +7 -7
  182. package/dist/lib/{shadow-claw-settings-CcT5EK08.js.map → shadow-claw-settings-BMwne0bh.js.map} +1 -1
  183. package/dist/lib/{shadow-claw-storage-eTOpbvpi.js → shadow-claw-storage-DUY8B9m-.js} +5 -5
  184. package/dist/lib/{shadow-claw-storage-eTOpbvpi.js.map → shadow-claw-storage-DUY8B9m-.js.map} +1 -1
  185. package/dist/lib/{shadow-claw-task-server-DFImTUbw.js → shadow-claw-task-server-yWeoA3eL.js} +2 -2
  186. package/dist/lib/{shadow-claw-task-server-DFImTUbw.js.map → shadow-claw-task-server-yWeoA3eL.js.map} +1 -1
  187. package/dist/lib/{shadow-claw-tasks-BjaxsmUx.js → shadow-claw-tasks-Bg0uM15I.js} +9 -9
  188. package/dist/lib/{shadow-claw-tasks-BjaxsmUx.js.map → shadow-claw-tasks-Bg0uM15I.js.map} +1 -1
  189. package/dist/lib/{shadow-claw-terminal-C-4wreFe.js → shadow-claw-terminal-fyJPppY_.js} +2 -2
  190. package/dist/lib/{shadow-claw-terminal-C-4wreFe.js.map → shadow-claw-terminal-fyJPppY_.js.map} +1 -1
  191. package/dist/lib/{shadow-claw-tools-COdrGZJk.js → shadow-claw-tools-D0T8m3go.js} +7 -7
  192. package/dist/lib/{shadow-claw-tools-COdrGZJk.js.map → shadow-claw-tools-D0T8m3go.js.map} +1 -1
  193. package/dist/lib/{shadow-claw-webvm-sxqVjO0L.js → shadow-claw-webvm-CQvzJwKI.js} +3 -3
  194. package/dist/lib/{shadow-claw-webvm-sxqVjO0L.js.map → shadow-claw-webvm-CQvzJwKI.js.map} +1 -1
  195. package/dist/lib/{sync-web-mcp-registration-D4hdUwtv.js → sync-web-mcp-registration-BFtG_4kx.js} +6 -6
  196. package/dist/lib/{sync-web-mcp-registration-D4hdUwtv.js.map → sync-web-mcp-registration-BFtG_4kx.js.map} +1 -1
  197. package/dist/lib/{system-prompt-DT_KeYaL.js → system-prompt-bhGRLoL2.js} +7 -7
  198. package/dist/lib/{system-prompt-DT_KeYaL.js.map → system-prompt-bhGRLoL2.js.map} +1 -1
  199. package/dist/lib/{tools-Beuyh8y1.js → tools-B8OJ4sMF.js} +4 -4
  200. package/dist/lib/{tools-Beuyh8y1.js.map → tools-B8OJ4sMF.js.map} +1 -1
  201. package/dist/lib/{transformers-DydnReu4.js → transformers-BMURofG6.js} +2 -2
  202. package/dist/lib/{transformers-DydnReu4.js.map → transformers-BMURofG6.js.map} +1 -1
  203. package/dist/lib/{trusted-types-CfwZl_rr.js → trusted-types-HwsGS5Nj.js} +19 -17
  204. package/dist/lib/{trusted-types-CfwZl_rr.js.map → trusted-types-HwsGS5Nj.js.map} +1 -1
  205. package/dist/lib/{upload-group-file-BbBzjTcN.js → upload-group-file-CJpoNjEb.js} +3 -3
  206. package/dist/lib/{upload-group-file-BbBzjTcN.js.map → upload-group-file-CJpoNjEb.js.map} +1 -1
  207. package/dist/lib/utils/index.js +1 -1
  208. package/dist/lib/utils/namespaced-storage.js +1 -1
  209. package/dist/lib/utils/runtime-assets.js +1 -1
  210. package/dist/lib/utils/utils.js +1 -1
  211. package/dist/lib/{webmcp-DCfAFiIO.js → webmcp-BoMTvgmX.js} +3 -3
  212. package/dist/lib/{webmcp-DCfAFiIO.js.map → webmcp-BoMTvgmX.js.map} +1 -1
  213. package/dist/lib/{write-group-file-bytes-Ccn-VFUU.js → write-group-file-bytes-CNT7DqOZ.js} +3 -3
  214. package/dist/lib/{write-group-file-bytes-Ccn-VFUU.js.map → write-group-file-bytes-CNT7DqOZ.js.map} +1 -1
  215. package/dist/public/.well-known/mcp/server-card.json +12 -4
  216. package/dist/public/.well-known/mcp.json +12 -4
  217. package/dist/public/agent.worker.js +1 -1
  218. package/dist/public/attachment-capabilities-AdwXt3--.js +1 -0
  219. package/dist/public/{channel-BylT3rJC.js → channel-Dk7wl-Av.js} +1 -1
  220. package/dist/public/{chat-template-DPHJy7tr.js → chat-template-BwAnTFKf.js} +1 -1
  221. package/dist/public/{compact-context-BINQh64w.js → compact-context-fOTqwKF6.js} +2 -2
  222. package/dist/public/config-C16fFWtP.js +1 -0
  223. package/dist/public/{configure-peer-js-DChhcOfe.js → configure-peer-js-BOV0tR6G.js} +1 -1
  224. package/dist/public/{connections-CHaw0VqP.js → connections-Dxwj8yK_.js} +1 -1
  225. package/dist/public/{create-model-cache-fetch-DQebkoPL.js → create-model-cache-fetch-DSAFjOwc.js} +1 -1
  226. package/dist/public/{credentials-CgVqS119.js → credentials-CJUQ5Ep2.js} +1 -1
  227. package/dist/public/{custom-element-security-kiDhPfb8.js → custom-element-security-B2daIE5r.js} +2 -2
  228. package/dist/public/{discover-skills-Cvmx5I9V.js → discover-skills-D1sNTy2r.js} +6 -6
  229. package/dist/public/docs/example/article/index.html +28 -29
  230. package/dist/public/docs/example/article.html +28 -29
  231. package/dist/public/docs/publishing/index.html +28 -29
  232. package/dist/public/docs/publishing.html +28 -29
  233. package/dist/public/docs/skill-creator/index.html +28 -29
  234. package/dist/public/docs/skill-creator.html +28 -29
  235. package/dist/public/{download-group-file-BapoRgfU.js → download-group-file-BkMH-JKi.js} +1 -1
  236. package/dist/public/{e2e-bridge-C0g8vZKr.js → e2e-bridge-Cz95DLlb.js} +1 -1
  237. package/dist/public/get-group-dir-D--BiEyk.js +1 -0
  238. package/dist/public/{get-or-create-subscriber-id-GvRZYXwA.js → get-or-create-subscriber-id-jVHnQfbr.js} +1 -1
  239. package/dist/public/{git-CaAAZfVd.js → git-BmMlwIMP.js} +2 -2
  240. package/dist/public/{iframe-bridge-scripts-BnqtKhE4.js → iframe-bridge-scripts-Cibg0m6A.js} +1 -1
  241. package/dist/public/index.html +28 -29
  242. package/dist/public/index.js +1 -1
  243. package/dist/public/{init-chat-split-resize-Btonoy8u.js → init-chat-split-resize-C8AqCCiK.js} +1 -1
  244. package/dist/public/init-control-plane-Cb31yLTY.js +1 -0
  245. package/dist/public/{invoke-agent-B3Osw6K7.js → invoke-agent-CN7mSV0Z.js} +1 -1
  246. package/dist/public/main/index.html +28 -29
  247. package/dist/public/main/memory/index.html +28 -29
  248. package/dist/public/main/memory.html +28 -29
  249. package/dist/public/main.html +28 -29
  250. package/dist/public/{markdown-CPbU4r1U.js → markdown-CDSb5Hrl.js} +1 -1
  251. package/dist/public/{mcp-reconnect-CzROVsXG.js → mcp-reconnect-iPZPihwX.js} +1 -1
  252. package/dist/public/{memory-storage-BkoMlxOr.js → memory-storage-2m7KZ-aP.js} +1 -1
  253. package/dist/public/{model-ranking-CK0iBo3Z.js → model-ranking-BgOSaNIy.js} +1 -1
  254. package/dist/public/{move-group-entry-CTxoq7lw.js → move-group-entry-CXneuNVa.js} +1 -1
  255. package/dist/public/orchestrator-DBO4NZqd.js +63 -0
  256. package/dist/public/{orchestrator-BrDjQbGf.js → orchestrator-Dyylc8IU.js} +2 -2
  257. package/dist/public/{peerjs-CgF4Iz5W.js → peerjs-l0jiBoh6.js} +1 -1
  258. package/dist/public/{process-peer-query-param-BL2k0Hu-.js → process-peer-query-param-s-aSP1Rq.js} +1 -1
  259. package/dist/public/{process-pending-shared-payloads-C1AgGvn8.js → process-pending-shared-payloads-BN3GigPT.js} +1 -1
  260. package/dist/public/{process-room-query-param-DM0QCq3_.js → process-room-query-param-B2Qe0F0M.js} +1 -1
  261. package/dist/public/provider-YPZmsuHR.js +1 -0
  262. package/dist/public/{push-client-DJEOz7bi.js → push-client-B2LC8Qp9.js} +1 -1
  263. package/dist/public/{rooms-C6LXIJl4.js → rooms-ChCEOvkw.js} +1 -1
  264. package/dist/public/service-worker.js +1 -1
  265. package/dist/public/shadow-claw-Br8mWDUx.js +1176 -0
  266. package/dist/public/{shadow-claw-accounts--4hd_oCz.js → shadow-claw-accounts-Dm6G7KMP.js} +1 -1
  267. package/dist/public/{shadow-claw-card-IbNlZAdK.js → shadow-claw-card-CggS8uSa.js} +1 -1
  268. package/dist/public/{shadow-claw-channels-Vq_pPGa2.js → shadow-claw-channels-088vhuWO.js} +1 -1
  269. package/dist/public/{shadow-claw-chat-D7_GS25e.js → shadow-claw-chat-BRwRlq-n.js} +3 -3
  270. package/dist/public/{shadow-claw-control-plane-WTMEV8_p.js → shadow-claw-control-plane-rhKACK85.js} +2 -2
  271. package/dist/public/{shadow-claw-conversations-CLQgU1IT.js → shadow-claw-conversations-CF_yUfKl.js} +1 -1
  272. package/dist/public/{shadow-claw-empty-state-D4CrFGsN.js → shadow-claw-empty-state-CkpOSXCS.js} +1 -1
  273. package/dist/public/{shadow-claw-file-viewer-BhqiqLWQ.js → shadow-claw-file-viewer-DWCejuY3.js} +4 -4
  274. package/dist/public/{shadow-claw-files-senDiG9l.js → shadow-claw-files-L6_ioyzh.js} +2 -2
  275. package/dist/public/{shadow-claw-git-DOOCqY23.js → shadow-claw-git-DsdkwLqQ.js} +2 -2
  276. package/dist/public/{shadow-claw-integrations-Bsvc3Agq.js → shadow-claw-integrations-CSbRTOm3.js} +1 -1
  277. package/dist/public/{shadow-claw-llm-actYICAk.js → shadow-claw-llm-BitaeAVc.js} +2 -2
  278. package/dist/public/{shadow-claw-mcp-remote-BYUgrK3v.js → shadow-claw-mcp-remote-gSbV5riy.js} +1 -1
  279. package/dist/public/{shadow-claw-networking-Dk3p5Ny_.js → shadow-claw-networking-Dn_y6Cl9.js} +1 -1
  280. package/dist/public/{shadow-claw-notifications-CzPAlay8.js → shadow-claw-notifications-Cj4Lqx8U.js} +1 -1
  281. package/dist/public/{shadow-claw-page-header-CjJpVkyL.js → shadow-claw-page-header-DR4OZFt2.js} +1 -1
  282. package/dist/public/{shadow-claw-page-header-action-button-2DH5O1TD.js → shadow-claw-page-header-action-button-BnCV_2Kb.js} +1 -1
  283. package/dist/public/{shadow-claw-pages-3r5I-wI8.js → shadow-claw-pages-mpDOtNYj.js} +6 -6
  284. package/dist/public/{shadow-claw-pdf-viewer-BiCEwsoY.js → shadow-claw-pdf-viewer-DZ_84qJH.js} +1 -1
  285. package/dist/public/{shadow-claw-settings-DgB9RSZN.js → shadow-claw-settings-CfFTYTEy.js} +2 -2
  286. package/dist/public/{shadow-claw-storage-JB_43nd8.js → shadow-claw-storage-DLmiT4bG.js} +1 -1
  287. package/dist/public/{shadow-claw-task-server-oi5UIxdA.js → shadow-claw-task-server-BoMBCsiS.js} +1 -1
  288. package/dist/public/{shadow-claw-tasks-CnyiOt81.js → shadow-claw-tasks-ChEp1j7x.js} +3 -3
  289. package/dist/public/{shadow-claw-terminal-BC3RynHt.js → shadow-claw-terminal-BaoVbOda.js} +1 -1
  290. package/dist/public/{shadow-claw-toast-YjG--2Za.js → shadow-claw-toast-e8oz7z6Z.js} +1 -1
  291. package/dist/public/{shadow-claw-tools-Bbwk4vlT.js → shadow-claw-tools-BYjUBiJz.js} +1 -1
  292. package/dist/public/{shadow-claw-webvm-HZqzl2H5.js → shadow-claw-webvm-xGb13TME.js} +1 -1
  293. package/dist/public/{sync-web-mcp-registration-BaH2nAP0.js → sync-web-mcp-registration-CQluj-Kz.js} +1 -1
  294. package/dist/public/{system-prompt-Dck3N8T0.js → system-prompt-CTJn0tK-.js} +1 -1
  295. package/dist/public/{tools-DHA1dK2I.js → tools-D-52Zmfc.js} +1 -1
  296. package/dist/public/{transformers-C-DuTM2K.js → transformers-CQ9ss9rD.js} +1 -1
  297. package/dist/public/{upload-group-file-Cejr3zo1.js → upload-group-file-A8kB7lvO.js} +1 -1
  298. package/dist/public/{webmcp-CMRtu57-.js → webmcp-DIUZjVF5.js} +1 -1
  299. package/dist/public/{write-group-file-CmJuVQNO.js → write-group-file-R67DjJ-q.js} +1 -1
  300. package/dist/public/{write-group-file-bytes-Cejr3zo1.js → write-group-file-bytes-A8kB7lvO.js} +1 -1
  301. package/dist/public/{zip-reader-CuQ13eLe.js → zip-reader-DN7FB-Q0.js} +1 -1
  302. package/dist/server.js +1 -1
  303. package/package.json +1 -1
  304. package/dist/cli/chunk-BFziiMKt.js +0 -7
  305. package/dist/cli/chunk-BM3llsxb.js +0 -1
  306. package/dist/cli/chunk-Bj5qFsDi.js +0 -7
  307. package/dist/cli/chunk-Bj95zm-y.js +0 -1
  308. package/dist/cli/chunk-BpyP-esT.js +0 -1
  309. package/dist/cli/chunk-CX696s3_.js +0 -1
  310. package/dist/cli/chunk-DRxCrCAA.js +0 -139
  311. package/dist/cli/chunk-DjbCHa0h.js +0 -1
  312. package/dist/cli/chunk-DsQhAF31.js +0 -1
  313. package/dist/cli/chunk-VM-dECyG.js +0 -1
  314. package/dist/cli/chunk-heu2xRw1.js +0 -1
  315. package/dist/lib/orchestrator-i_QJ-o22.js.map +0 -1
  316. package/dist/lib/shadow-claw-DoQ7fgl5.js.map +0 -1
  317. package/dist/public/app-routes-V_-URXc5.js +0 -1
  318. package/dist/public/attachment-capabilities-B6ibLwQB.js +0 -1
  319. package/dist/public/config-C-YdSFZB.js +0 -1
  320. package/dist/public/get-group-dir-DL44kvqW.js +0 -1
  321. package/dist/public/init-control-plane-BoJijVtf.js +0 -1
  322. package/dist/public/orchestrator-CaUpEVkQ.js +0 -63
  323. package/dist/public/provider-DNIL4-Hw.js +0 -1
  324. package/dist/public/shadow-claw-DdgeYPg5.js +0 -1176
@@ -1,8 +1,8 @@
1
1
  import ShadowClawElement from "./components/shadow-claw-element.js";
2
2
  import { o as getDb, t as getConfig } from "./get-config-BWhs5HFF.js";
3
- import { r as CONFIG_KEYS } from "./config-DxNI3TlW.js";
3
+ import { r as CONFIG_KEYS } from "./config-BrHR97zt.js";
4
4
  import { t as setConfig } from "./set-config-CUadvYZ1.js";
5
- import { t as orchestratorStore } from "./orchestrator-i_QJ-o22.js";
5
+ import { t as orchestratorStore } from "./orchestrator-CCARkxQC.js";
6
6
  import { a as showSuccess, r as showError } from "./toast-Ck7OIKDf.js";
7
7
  import { t as effect } from "./effect-DL6j9HJp.js";
8
8
 
@@ -369,7 +369,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
369
369
  if (!root) return;
370
370
  const cpEnabledToggle = root.querySelector("[data-setting=\"control-plane-enabled-toggle\"]");
371
371
  if (cpEnabledToggle && this.db) try {
372
- const { isControlPlaneEnabled } = await import("./init-control-plane-C1FRRmjC.js");
372
+ const { isControlPlaneEnabled } = await import("./init-control-plane-B7blDVIE.js");
373
373
  cpEnabledToggle.checked = await isControlPlaneEnabled(this.db);
374
374
  } catch (_) {
375
375
  cpEnabledToggle.checked = false;
@@ -403,7 +403,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
403
403
  if (typeof localStorage !== "undefined") try {
404
404
  localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_ENABLED, enabled ? "true" : "false");
405
405
  } catch (_) {}
406
- const { ensureControlPlaneConnected, stopControlPlaneClient, shouldConnectControlPlane } = await import("./init-control-plane-C1FRRmjC.js");
406
+ const { ensureControlPlaneConnected, stopControlPlaneClient, shouldConnectControlPlane } = await import("./init-control-plane-B7blDVIE.js");
407
407
  if (enabled) {
408
408
  if (shouldConnectControlPlane()) await ensureControlPlaneConnected({
409
409
  orchestrator: this.orchestrator || void 0,
@@ -432,7 +432,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
432
432
  if (typeof localStorage !== "undefined") try {
433
433
  localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);
434
434
  } catch (_) {}
435
- const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./init-control-plane-C1FRRmjC.js");
435
+ const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./init-control-plane-B7blDVIE.js");
436
436
  if (await isControlPlaneEnabled(this.db) && shouldConnectControlPlane()) await ensureControlPlaneConnected({
437
437
  orchestrator: this.orchestrator || void 0,
438
438
  db: this.db,
@@ -459,7 +459,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
459
459
  if (url) localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_URL, url);
460
460
  else localStorage.removeItem(CONFIG_KEYS.CONTROL_PLANE_URL);
461
461
  } catch (_) {}
462
- const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./init-control-plane-C1FRRmjC.js");
462
+ const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./init-control-plane-B7blDVIE.js");
463
463
  if (await isControlPlaneEnabled(this.db) && shouldConnectControlPlane()) await ensureControlPlaneConnected({
464
464
  orchestrator: this.orchestrator || void 0,
465
465
  db: this.db,
@@ -510,4 +510,4 @@ if (!customElements.get(elementName)) customElements.define(elementName, ShadowC
510
510
 
511
511
  //#endregion
512
512
  export { getControlPlaneTargetAddressSpace as n, ShadowClawControlPlane as t };
513
- //# sourceMappingURL=shadow-claw-control-plane-CRWFZ3vD.js.map
513
+ //# sourceMappingURL=shadow-claw-control-plane-fvn-qyHj.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shadow-claw-control-plane-CRWFZ3vD.js","names":["shadowClawControlPlaneStyles","shadowClawControlPlaneTemplate"],"sources":["../../src/components/settings/shadow-claw-control-plane/shadow-claw-control-plane.ts"],"sourcesContent":["import { effect } from \"../../../core/effect.js\";\nimport { getDb } from \"../../../db/db.js\";\nimport { getConfig } from \"../../../db/get-config.js\";\nimport { setConfig } from \"../../../db/set-config.js\";\nimport {\n CONFIG_KEYS,\n DEFAULT_CONTROL_PLANE_ENABLED,\n DEFAULT_CONTROL_PLANE_TRANSPORT,\n} from \"../../../config/config.js\";\nimport { orchestratorStore } from \"../../../stores/orchestrator.js\";\nimport { showError, showSuccess } from \"../../../ui/toast.js\";\n\nimport type { Orchestrator } from \"../../../core/orchestrator/orchestrator.js\";\nimport type { ShadowClawDatabase } from \"../../../db/types.js\";\nimport type { AppDialogOptions } from \"../../../ui/types.js\";\n\nimport ShadowClawElement from \"../../shadow-claw-element.js\";\nimport shadowClawControlPlaneStyles from \"./shadow-claw-control-plane.css\" with { type: \"css\" };\nimport shadowClawControlPlaneTemplate from \"./shadow-claw-control-plane.html\" with { type: \"html\" };\n\nconst elementName = \"shadow-claw-control-plane\";\n\n/**\n * Computes Chromium targetAddressSpace for Private Network Access (PNA).\n */\nexport function getControlPlaneTargetAddressSpace(\n urlStr: string,\n): \"loopback\" | \"private\" | undefined {\n try {\n const parsed = new URL(urlStr);\n const hostname = parsed.hostname.toLowerCase();\n const isLoopback =\n hostname === \"localhost\" ||\n hostname === \"127.0.0.1\" ||\n hostname === \"::1\" ||\n hostname === \"[::1]\";\n if (isLoopback) {\n return \"loopback\";\n }\n const isPrivate =\n /^(10\\.|172\\.(1[6-9]|2\\d|3[01])\\.|192\\.168\\.)/.test(hostname) ||\n !hostname.includes(\".\") ||\n hostname.endsWith(\".local\") ||\n hostname.endsWith(\".lan\") ||\n hostname.endsWith(\".home\") ||\n hostname.endsWith(\".internal\");\n if (isPrivate) {\n return \"private\";\n }\n } catch (_) {}\n return undefined;\n}\n\n/**\n * Settings sub-component for Control Plane Client URL, enabled toggle, and transport configuration.\n */\nexport class ShadowClawControlPlane extends ShadowClawElement {\n static styles = shadowClawControlPlaneStyles;\n static template = shadowClawControlPlaneTemplate;\n\n db: ShadowClawDatabase | null;\n orchestrator: Orchestrator | null;\n\n constructor() {\n super();\n\n this.db = null;\n this.orchestrator = null;\n }\n\n async connectedCallback() {\n const root = this.shadowRoot;\n if (!root) {\n throw new Error(\"shadowRoot not found\");\n }\n\n this.db = await getDb();\n this.orchestrator = orchestratorStore.orchestrator;\n\n this.bindEventListeners();\n this.setupEffects();\n await this.render();\n }\n\n bindEventListeners() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n root\n .querySelector('[data-action=\"save-control-plane-transport\"]')\n ?.addEventListener(\"click\", () => {\n void this.saveControlPlaneTransport();\n });\n\n root\n .querySelector('[data-action=\"save-control-plane-url\"]')\n ?.addEventListener(\"click\", () => {\n void this.saveControlPlaneUrl();\n });\n\n root\n .querySelector('[data-action=\"test-control-plane-connection\"]')\n ?.addEventListener(\"click\", () => {\n void this.testControlPlaneConnection();\n });\n\n root\n .querySelector('[data-setting=\"control-plane-enabled-toggle\"]')\n ?.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLInputElement;\n void this.saveControlPlaneEnabled(target.checked);\n });\n }\n\n setupEffects() {\n effect(() => {\n if (orchestratorStore.ready) {\n this.orchestrator = orchestratorStore.orchestrator;\n this.render();\n }\n });\n }\n\n /**\n * Performs a direct fetch probe to the Control Plane server.\n * Executed during user gestures (e.g. Test Connection / Save URL) to trigger\n * Chromium's Local Network Access (LNA) / Private Network Access (PNA) permission prompt if needed.\n */\n async probeControlPlane(\n urlStr: string,\n ): Promise<{ success: boolean; error?: string }> {\n let targetUrl: URL;\n try {\n targetUrl = new URL(urlStr);\n } catch {\n return { success: false, error: `Invalid URL format: \"${urlStr}\"` };\n }\n\n const targetAddressSpace = getControlPlaneTargetAddressSpace(urlStr);\n const fetchOptions: any = {\n method: \"GET\",\n cache: \"no-store\",\n mode: \"cors\",\n };\n if (targetAddressSpace) {\n fetchOptions.targetAddressSpace = targetAddressSpace;\n }\n\n try {\n const healthUrl = new URL(\"/api/control/health\", targetUrl).toString();\n let res = await fetch(healthUrl, fetchOptions);\n\n if (res.status === 404) {\n const fallbackUrl = new URL(\n \"/api/control/messages\",\n targetUrl,\n ).toString();\n res = await fetch(fallbackUrl, {\n ...fetchOptions,\n method: \"OPTIONS\",\n });\n }\n\n if (res.ok || res.status === 204 || res.status === 401) {\n return { success: true };\n }\n\n return {\n success: false,\n error: `Server responded with HTTP ${res.status} (${res.statusText || \"Error\"})`,\n };\n } catch (err: any) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n async render() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const cpEnabledToggle = root.querySelector(\n '[data-setting=\"control-plane-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n if (cpEnabledToggle && this.db) {\n try {\n const { isControlPlaneEnabled } =\n await import(\"../../../core/utils/init-control-plane.js\");\n cpEnabledToggle.checked = await isControlPlaneEnabled(this.db);\n } catch (_) {\n cpEnabledToggle.checked = DEFAULT_CONTROL_PLANE_ENABLED;\n }\n }\n\n const cpUrlInput = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n if (cpUrlInput && this.db) {\n try {\n const stored = await getConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL);\n cpUrlInput.value = stored || \"\";\n } catch (_) {\n cpUrlInput.value = \"\";\n }\n }\n\n const transportSelect = root.querySelector(\n '[data-setting=\"control-plane-transport-select\"]',\n ) as HTMLSelectElement | null;\n if (transportSelect && this.db) {\n try {\n const stored = await getConfig(\n this.db,\n CONFIG_KEYS.CONTROL_PLANE_TRANSPORT,\n );\n transportSelect.value = stored || DEFAULT_CONTROL_PLANE_TRANSPORT;\n } catch (_) {\n transportSelect.value = DEFAULT_CONTROL_PLANE_TRANSPORT;\n }\n }\n }\n\n async requestAppDialog(options: AppDialogOptions): Promise<boolean> {\n const el = document.querySelector(\"shadow-claw\") as any;\n if (el && typeof el.requestDialog === \"function\") {\n return await el.requestDialog(options);\n }\n\n return false;\n }\n\n async saveControlPlaneEnabled(enabled: boolean) {\n if (!this.db) {\n return;\n }\n\n try {\n if (enabled) {\n const storedUrl =\n (await getConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL)) ||\n \"http://127.0.0.1:8888\";\n void this.probeControlPlane(storedUrl);\n }\n\n await setConfig(\n this.db,\n CONFIG_KEYS.CONTROL_PLANE_ENABLED,\n enabled ? \"true\" : \"false\",\n );\n if (typeof localStorage !== \"undefined\") {\n try {\n localStorage.setItem(\n CONFIG_KEYS.CONTROL_PLANE_ENABLED,\n enabled ? \"true\" : \"false\",\n );\n } catch (_) {}\n }\n\n const {\n ensureControlPlaneConnected,\n stopControlPlaneClient,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/init-control-plane.js\");\n\n if (enabled) {\n if (shouldConnectControlPlane()) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n });\n }\n showSuccess(\"Control plane client enabled and connected\", 3000);\n } else {\n stopControlPlaneClient();\n showSuccess(\"Control plane client disabled\", 3000);\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane setting: \" + errorMsg, 6000);\n }\n }\n\n async saveControlPlaneTransport() {\n if (!this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const select = root.querySelector(\n '[data-setting=\"control-plane-transport-select\"]',\n ) as HTMLSelectElement | null;\n if (!select) {\n return;\n }\n\n const transport = select.value === \"websocket\" ? \"websocket\" : \"sse\";\n\n try {\n await setConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);\n if (typeof localStorage !== \"undefined\") {\n try {\n localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);\n } catch (_) {}\n }\n\n const {\n isControlPlaneEnabled,\n ensureControlPlaneConnected,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/init-control-plane.js\");\n\n if (\n (await isControlPlaneEnabled(this.db)) &&\n shouldConnectControlPlane()\n ) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n transport,\n });\n }\n\n showSuccess(\n `Control Plane transport saved: ${transport.toUpperCase()}`,\n 3000,\n );\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane transport: \" + errorMsg, 6000);\n }\n }\n\n async saveControlPlaneUrl() {\n if (!this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const input = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n if (!input) {\n return;\n }\n\n const url = input.value.trim();\n\n try {\n // Trigger probe within user gesture to elicit Chrome LNA prompt if needed\n if (url) {\n void this.probeControlPlane(url);\n }\n\n await setConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL, url);\n if (typeof localStorage !== \"undefined\") {\n try {\n if (url) {\n localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_URL, url);\n } else {\n localStorage.removeItem(CONFIG_KEYS.CONTROL_PLANE_URL);\n }\n } catch (_) {}\n }\n\n const {\n isControlPlaneEnabled,\n ensureControlPlaneConnected,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/init-control-plane.js\");\n\n if (\n (await isControlPlaneEnabled(this.db)) &&\n shouldConnectControlPlane()\n ) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n });\n }\n\n showSuccess(\n url\n ? `Control Plane URL saved: ${url}`\n : \"Control Plane URL reset to default\",\n 3000,\n );\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane URL: \" + errorMsg, 6000);\n }\n }\n\n /**\n * Interactive handler to test connection and surface diagnostic modal if needed.\n */\n async testControlPlaneConnection(): Promise<boolean> {\n const root = this.shadowRoot;\n if (!root) {\n return false;\n }\n\n const input = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n const testBtn = root.querySelector(\n '[data-action=\"test-control-plane-connection\"]',\n ) as HTMLButtonElement | null;\n\n const rawUrl = input?.value.trim() || \"http://127.0.0.1:8888\";\n\n if (testBtn) {\n testBtn.disabled = true;\n testBtn.textContent = \"⏳ Testing...\";\n }\n\n try {\n const result = await this.probeControlPlane(rawUrl);\n\n if (result.success) {\n showSuccess(`Successfully reached Control Plane at ${rawUrl}`, 4000);\n return true;\n }\n\n const errorMsg = result.error || \"Unknown connection error\";\n showError(`Connection test failed: ${errorMsg}`, 6000);\n\n await this.requestAppDialog({\n title: \"Control Plane Connection Failed\",\n message: `Unable to connect to \"${rawUrl}\".\\n\\n• TLS / Certificate: If using HTTPS with a self-signed certificate, ensure the certificate is installed and trusted in Chrome (chrome://certificate-manager/localcerts/usercerts).\\n• Chrome Permissions: In Site Settings, ensure \"Local network access\" is allowed.\\n• Server Status: Verify the ShadowClaw dev server is running and listening on this host/port.`,\n confirmLabel: \"OK\",\n });\n\n return false;\n } finally {\n if (testBtn) {\n testBtn.disabled = false;\n testBtn.textContent = \"🔌 Test Connection\";\n }\n }\n }\n}\n\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawControlPlane);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"shadow-claw-control-plane-fvn-qyHj.js","names":["shadowClawControlPlaneStyles","shadowClawControlPlaneTemplate"],"sources":["../../src/components/settings/shadow-claw-control-plane/shadow-claw-control-plane.ts"],"sourcesContent":["import { effect } from \"../../../core/effect.js\";\nimport { getDb } from \"../../../db/db.js\";\nimport { getConfig } from \"../../../db/get-config.js\";\nimport { setConfig } from \"../../../db/set-config.js\";\nimport {\n CONFIG_KEYS,\n DEFAULT_CONTROL_PLANE_ENABLED,\n DEFAULT_CONTROL_PLANE_TRANSPORT,\n} from \"../../../config/config.js\";\nimport { orchestratorStore } from \"../../../stores/orchestrator.js\";\nimport { showError, showSuccess } from \"../../../ui/toast.js\";\n\nimport type { Orchestrator } from \"../../../core/orchestrator/orchestrator.js\";\nimport type { ShadowClawDatabase } from \"../../../db/types.js\";\nimport type { AppDialogOptions } from \"../../../ui/types.js\";\n\nimport ShadowClawElement from \"../../shadow-claw-element.js\";\nimport shadowClawControlPlaneStyles from \"./shadow-claw-control-plane.css\" with { type: \"css\" };\nimport shadowClawControlPlaneTemplate from \"./shadow-claw-control-plane.html\" with { type: \"html\" };\n\nconst elementName = \"shadow-claw-control-plane\";\n\n/**\n * Computes Chromium targetAddressSpace for Private Network Access (PNA).\n */\nexport function getControlPlaneTargetAddressSpace(\n urlStr: string,\n): \"loopback\" | \"private\" | undefined {\n try {\n const parsed = new URL(urlStr);\n const hostname = parsed.hostname.toLowerCase();\n const isLoopback =\n hostname === \"localhost\" ||\n hostname === \"127.0.0.1\" ||\n hostname === \"::1\" ||\n hostname === \"[::1]\";\n if (isLoopback) {\n return \"loopback\";\n }\n const isPrivate =\n /^(10\\.|172\\.(1[6-9]|2\\d|3[01])\\.|192\\.168\\.)/.test(hostname) ||\n !hostname.includes(\".\") ||\n hostname.endsWith(\".local\") ||\n hostname.endsWith(\".lan\") ||\n hostname.endsWith(\".home\") ||\n hostname.endsWith(\".internal\");\n if (isPrivate) {\n return \"private\";\n }\n } catch (_) {}\n return undefined;\n}\n\n/**\n * Settings sub-component for Control Plane Client URL, enabled toggle, and transport configuration.\n */\nexport class ShadowClawControlPlane extends ShadowClawElement {\n static styles = shadowClawControlPlaneStyles;\n static template = shadowClawControlPlaneTemplate;\n\n db: ShadowClawDatabase | null;\n orchestrator: Orchestrator | null;\n\n constructor() {\n super();\n\n this.db = null;\n this.orchestrator = null;\n }\n\n async connectedCallback() {\n const root = this.shadowRoot;\n if (!root) {\n throw new Error(\"shadowRoot not found\");\n }\n\n this.db = await getDb();\n this.orchestrator = orchestratorStore.orchestrator;\n\n this.bindEventListeners();\n this.setupEffects();\n await this.render();\n }\n\n bindEventListeners() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n root\n .querySelector('[data-action=\"save-control-plane-transport\"]')\n ?.addEventListener(\"click\", () => {\n void this.saveControlPlaneTransport();\n });\n\n root\n .querySelector('[data-action=\"save-control-plane-url\"]')\n ?.addEventListener(\"click\", () => {\n void this.saveControlPlaneUrl();\n });\n\n root\n .querySelector('[data-action=\"test-control-plane-connection\"]')\n ?.addEventListener(\"click\", () => {\n void this.testControlPlaneConnection();\n });\n\n root\n .querySelector('[data-setting=\"control-plane-enabled-toggle\"]')\n ?.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLInputElement;\n void this.saveControlPlaneEnabled(target.checked);\n });\n }\n\n setupEffects() {\n effect(() => {\n if (orchestratorStore.ready) {\n this.orchestrator = orchestratorStore.orchestrator;\n this.render();\n }\n });\n }\n\n /**\n * Performs a direct fetch probe to the Control Plane server.\n * Executed during user gestures (e.g. Test Connection / Save URL) to trigger\n * Chromium's Local Network Access (LNA) / Private Network Access (PNA) permission prompt if needed.\n */\n async probeControlPlane(\n urlStr: string,\n ): Promise<{ success: boolean; error?: string }> {\n let targetUrl: URL;\n try {\n targetUrl = new URL(urlStr);\n } catch {\n return { success: false, error: `Invalid URL format: \"${urlStr}\"` };\n }\n\n const targetAddressSpace = getControlPlaneTargetAddressSpace(urlStr);\n const fetchOptions: any = {\n method: \"GET\",\n cache: \"no-store\",\n mode: \"cors\",\n };\n if (targetAddressSpace) {\n fetchOptions.targetAddressSpace = targetAddressSpace;\n }\n\n try {\n const healthUrl = new URL(\"/api/control/health\", targetUrl).toString();\n let res = await fetch(healthUrl, fetchOptions);\n\n if (res.status === 404) {\n const fallbackUrl = new URL(\n \"/api/control/messages\",\n targetUrl,\n ).toString();\n res = await fetch(fallbackUrl, {\n ...fetchOptions,\n method: \"OPTIONS\",\n });\n }\n\n if (res.ok || res.status === 204 || res.status === 401) {\n return { success: true };\n }\n\n return {\n success: false,\n error: `Server responded with HTTP ${res.status} (${res.statusText || \"Error\"})`,\n };\n } catch (err: any) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n async render() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const cpEnabledToggle = root.querySelector(\n '[data-setting=\"control-plane-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n if (cpEnabledToggle && this.db) {\n try {\n const { isControlPlaneEnabled } =\n await import(\"../../../core/utils/init-control-plane.js\");\n cpEnabledToggle.checked = await isControlPlaneEnabled(this.db);\n } catch (_) {\n cpEnabledToggle.checked = DEFAULT_CONTROL_PLANE_ENABLED;\n }\n }\n\n const cpUrlInput = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n if (cpUrlInput && this.db) {\n try {\n const stored = await getConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL);\n cpUrlInput.value = stored || \"\";\n } catch (_) {\n cpUrlInput.value = \"\";\n }\n }\n\n const transportSelect = root.querySelector(\n '[data-setting=\"control-plane-transport-select\"]',\n ) as HTMLSelectElement | null;\n if (transportSelect && this.db) {\n try {\n const stored = await getConfig(\n this.db,\n CONFIG_KEYS.CONTROL_PLANE_TRANSPORT,\n );\n transportSelect.value = stored || DEFAULT_CONTROL_PLANE_TRANSPORT;\n } catch (_) {\n transportSelect.value = DEFAULT_CONTROL_PLANE_TRANSPORT;\n }\n }\n }\n\n async requestAppDialog(options: AppDialogOptions): Promise<boolean> {\n const el = document.querySelector(\"shadow-claw\") as any;\n if (el && typeof el.requestDialog === \"function\") {\n return await el.requestDialog(options);\n }\n\n return false;\n }\n\n async saveControlPlaneEnabled(enabled: boolean) {\n if (!this.db) {\n return;\n }\n\n try {\n if (enabled) {\n const storedUrl =\n (await getConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL)) ||\n \"http://127.0.0.1:8888\";\n void this.probeControlPlane(storedUrl);\n }\n\n await setConfig(\n this.db,\n CONFIG_KEYS.CONTROL_PLANE_ENABLED,\n enabled ? \"true\" : \"false\",\n );\n if (typeof localStorage !== \"undefined\") {\n try {\n localStorage.setItem(\n CONFIG_KEYS.CONTROL_PLANE_ENABLED,\n enabled ? \"true\" : \"false\",\n );\n } catch (_) {}\n }\n\n const {\n ensureControlPlaneConnected,\n stopControlPlaneClient,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/init-control-plane.js\");\n\n if (enabled) {\n if (shouldConnectControlPlane()) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n });\n }\n showSuccess(\"Control plane client enabled and connected\", 3000);\n } else {\n stopControlPlaneClient();\n showSuccess(\"Control plane client disabled\", 3000);\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane setting: \" + errorMsg, 6000);\n }\n }\n\n async saveControlPlaneTransport() {\n if (!this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const select = root.querySelector(\n '[data-setting=\"control-plane-transport-select\"]',\n ) as HTMLSelectElement | null;\n if (!select) {\n return;\n }\n\n const transport = select.value === \"websocket\" ? \"websocket\" : \"sse\";\n\n try {\n await setConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);\n if (typeof localStorage !== \"undefined\") {\n try {\n localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);\n } catch (_) {}\n }\n\n const {\n isControlPlaneEnabled,\n ensureControlPlaneConnected,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/init-control-plane.js\");\n\n if (\n (await isControlPlaneEnabled(this.db)) &&\n shouldConnectControlPlane()\n ) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n transport,\n });\n }\n\n showSuccess(\n `Control Plane transport saved: ${transport.toUpperCase()}`,\n 3000,\n );\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane transport: \" + errorMsg, 6000);\n }\n }\n\n async saveControlPlaneUrl() {\n if (!this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const input = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n if (!input) {\n return;\n }\n\n const url = input.value.trim();\n\n try {\n // Trigger probe within user gesture to elicit Chrome LNA prompt if needed\n if (url) {\n void this.probeControlPlane(url);\n }\n\n await setConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL, url);\n if (typeof localStorage !== \"undefined\") {\n try {\n if (url) {\n localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_URL, url);\n } else {\n localStorage.removeItem(CONFIG_KEYS.CONTROL_PLANE_URL);\n }\n } catch (_) {}\n }\n\n const {\n isControlPlaneEnabled,\n ensureControlPlaneConnected,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/init-control-plane.js\");\n\n if (\n (await isControlPlaneEnabled(this.db)) &&\n shouldConnectControlPlane()\n ) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n });\n }\n\n showSuccess(\n url\n ? `Control Plane URL saved: ${url}`\n : \"Control Plane URL reset to default\",\n 3000,\n );\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane URL: \" + errorMsg, 6000);\n }\n }\n\n /**\n * Interactive handler to test connection and surface diagnostic modal if needed.\n */\n async testControlPlaneConnection(): Promise<boolean> {\n const root = this.shadowRoot;\n if (!root) {\n return false;\n }\n\n const input = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n const testBtn = root.querySelector(\n '[data-action=\"test-control-plane-connection\"]',\n ) as HTMLButtonElement | null;\n\n const rawUrl = input?.value.trim() || \"http://127.0.0.1:8888\";\n\n if (testBtn) {\n testBtn.disabled = true;\n testBtn.textContent = \"⏳ Testing...\";\n }\n\n try {\n const result = await this.probeControlPlane(rawUrl);\n\n if (result.success) {\n showSuccess(`Successfully reached Control Plane at ${rawUrl}`, 4000);\n return true;\n }\n\n const errorMsg = result.error || \"Unknown connection error\";\n showError(`Connection test failed: ${errorMsg}`, 6000);\n\n await this.requestAppDialog({\n title: \"Control Plane Connection Failed\",\n message: `Unable to connect to \"${rawUrl}\".\\n\\n• TLS / Certificate: If using HTTPS with a self-signed certificate, ensure the certificate is installed and trusted in Chrome (chrome://certificate-manager/localcerts/usercerts).\\n• Chrome Permissions: In Site Settings, ensure \"Local network access\" is allowed.\\n• Server Status: Verify the ShadowClaw dev server is running and listening on this host/port.`,\n confirmLabel: \"OK\",\n });\n\n return false;\n } finally {\n if (testBtn) {\n testBtn.disabled = false;\n testBtn.textContent = \"🔌 Test Connection\";\n }\n }\n }\n}\n\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawControlPlane);\n}\n"],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  import ShadowClawElement from "./components/shadow-claw-element.js";
2
2
  import { o as getDb, t as getConfig } from "./get-config-BWhs5HFF.js";
3
- import { r as CONFIG_KEYS } from "./config-DxNI3TlW.js";
4
- import { i as loadDeclarativeTools, t as toolsStore } from "./tools-Beuyh8y1.js";
3
+ import { r as CONFIG_KEYS } from "./config-BrHR97zt.js";
4
+ import { i as loadDeclarativeTools, t as toolsStore } from "./tools-B8OJ4sMF.js";
5
5
  import { t as setConfig } from "./set-config-CUadvYZ1.js";
6
- import { t as orchestratorStore } from "./orchestrator-i_QJ-o22.js";
7
- import { n as setSanitizedHtml } from "./trusted-types-CfwZl_rr.js";
6
+ import { t as orchestratorStore } from "./orchestrator-CCARkxQC.js";
7
+ import { n as setSanitizedHtml } from "./trusted-types-HwsGS5Nj.js";
8
8
  import { t as TOOL_DEFINITIONS } from "./tools-tRG7Gu0x.js";
9
9
  import { t as effect } from "./effect-DL6j9HJp.js";
10
- import { l as getProviderRuntimeHeaders, o as getAvailableProviders } from "./provider-DcQZypu5.js";
10
+ import { l as getProviderRuntimeHeaders, o as getAvailableProviders } from "./provider-BC9KPI14.js";
11
11
  import "./components/shadow-claw-dialog.js";
12
- import "./shadow-claw-provider-model-picker-BXYXEobD.js";
12
+ import "./shadow-claw-provider-model-picker-B-Ct4yW-.js";
13
13
  import "./shadow-claw-provider-module-settings-3sCTnCSp.js";
14
14
 
15
15
  //#region src/components/shadow-claw-conversations/shadow-claw-conversations.css
@@ -1906,4 +1906,4 @@ customElements.define("shadow-claw-conversations", ShadowClawConversations);
1906
1906
 
1907
1907
  //#endregion
1908
1908
  export { ShadowClawConversations as t };
1909
- //# sourceMappingURL=shadow-claw-conversations-D23GJ7qo.js.map
1909
+ //# sourceMappingURL=shadow-claw-conversations-CsVyDOny.js.map