shadow-claw 1.28.0 → 1.29.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.
- package/.well-known/mcp/server-card.json +1 -1
- package/.well-known/mcp.json +1 -1
- package/README.md +96 -278
- package/bin/cli.mjs +4 -0
- package/bin/commands/mcp.mjs +409 -125
- package/bin/commands/mcp.test.mjs +151 -18
- package/bin/utils/control-client.mjs +338 -103
- package/bin/utils/control-client.test.mjs +14 -0
- package/dist/electron/main.cjs +179 -179
- package/dist/lib/components/index.js +21 -21
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{configurePeerJs-D8Ph0-A9.js → configurePeerJs-DG4hliKp.js} +2 -2
- package/dist/lib/{configurePeerJs-D8Ph0-A9.js.map → configurePeerJs-DG4hliKp.js.map} +1 -1
- package/dist/lib/index.js +21 -21
- package/dist/lib/{initControlPlane-BIrWmpzc.js → initControlPlane-DnpAzphg.js} +8 -8
- package/dist/lib/{initControlPlane-BIrWmpzc.js.map → initControlPlane-DnpAzphg.js.map} +1 -1
- package/dist/lib/{markdown-DEUoM1c6.js → markdown-DgdSt2GD.js} +2 -2
- package/dist/lib/{markdown-DEUoM1c6.js.map → markdown-DgdSt2GD.js.map} +1 -1
- package/dist/lib/{orchestrator-CFCW-l1O.js → orchestrator-CjEau_RG.js} +5 -5
- package/dist/lib/{orchestrator-CFCW-l1O.js.map → orchestrator-CjEau_RG.js.map} +1 -1
- package/dist/lib/{orchestrator-BtVj9bBB.js → orchestrator-ClXbJ4Mb.js} +2 -2
- package/dist/lib/{orchestrator-BtVj9bBB.js.map → orchestrator-ClXbJ4Mb.js.map} +1 -1
- package/dist/lib/{peerjs-BoBkx9DJ.js → peerjs-BdfpltIe.js} +3 -3
- package/dist/lib/{peerjs-BoBkx9DJ.js.map → peerjs-BdfpltIe.js.map} +1 -1
- package/dist/lib/{push-client-D6hbzDNV.js → push-client-DjwKknNg.js} +9 -3
- package/dist/lib/push-client-DjwKknNg.js.map +1 -0
- package/dist/lib/{shadow-claw-Cuf2O5bZ.js → shadow-claw-DcPGKenn.js} +4 -4
- package/dist/lib/{shadow-claw-Cuf2O5bZ.js.map → shadow-claw-DcPGKenn.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-BDPKt6Bd.js → shadow-claw-channel-config-DEL-aZ7N.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-BDPKt6Bd.js.map → shadow-claw-channel-config-DEL-aZ7N.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-BsP5JABM.js → shadow-claw-channels-BgaJiPdE.js} +2 -2
- package/dist/lib/{shadow-claw-channels-BsP5JABM.js.map → shadow-claw-channels-BgaJiPdE.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-Cam2lX4k.js → shadow-claw-chat-mXPQZbwT.js} +4 -4
- package/dist/lib/{shadow-claw-chat-Cam2lX4k.js.map → shadow-claw-chat-mXPQZbwT.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-DB2qcCFs.js → shadow-claw-control-plane-DO6foOLV.js} +6 -6
- package/dist/lib/{shadow-claw-control-plane-DB2qcCFs.js.map → shadow-claw-control-plane-DO6foOLV.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-C9Vf4XGx.js → shadow-claw-conversations-BLwHTwdW.js} +2 -2
- package/dist/lib/{shadow-claw-conversations-C9Vf4XGx.js.map → shadow-claw-conversations-BLwHTwdW.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-B4HYiI0v.js → shadow-claw-file-viewer-BSbZvSl-.js} +3 -3
- package/dist/lib/{shadow-claw-file-viewer-B4HYiI0v.js.map → shadow-claw-file-viewer-BSbZvSl-.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-DVROUESO.js → shadow-claw-files-BLVr9Pua.js} +2 -2
- package/dist/lib/{shadow-claw-files-DVROUESO.js.map → shadow-claw-files-BLVr9Pua.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-BqrO7cHJ.js → shadow-claw-git-CHC1H86J.js} +3 -3
- package/dist/lib/{shadow-claw-git-BqrO7cHJ.js.map → shadow-claw-git-CHC1H86J.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-BexUQdYo.js → shadow-claw-llm-CKXfxd3D.js} +2 -2
- package/dist/lib/{shadow-claw-llm-BexUQdYo.js.map → shadow-claw-llm-CKXfxd3D.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-CfXRGpUD.js → shadow-claw-networking-dpYvfchh.js} +2 -2
- package/dist/lib/{shadow-claw-networking-CfXRGpUD.js.map → shadow-claw-networking-dpYvfchh.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-C9KPMgx_.js → shadow-claw-notifications-_YeAVPga.js} +2 -2
- package/dist/lib/{shadow-claw-notifications-C9KPMgx_.js.map → shadow-claw-notifications-_YeAVPga.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-CGzGXmrI.js → shadow-claw-pages-DVzZriZ7.js} +3 -3
- package/dist/lib/{shadow-claw-pages-CGzGXmrI.js.map → shadow-claw-pages-DVzZriZ7.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-B0ZB7yhB.js → shadow-claw-peerjs-BvixjeBz.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-B0ZB7yhB.js.map → shadow-claw-peerjs-BvixjeBz.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-DBfMZdDS.js → shadow-claw-settings-DV9-gD4Q.js} +2 -2
- package/dist/lib/{shadow-claw-settings-DBfMZdDS.js.map → shadow-claw-settings-DV9-gD4Q.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-CM-w6mgG.js → shadow-claw-storage-Bv__kXG6.js} +2 -2
- package/dist/lib/{shadow-claw-storage-CM-w6mgG.js.map → shadow-claw-storage-Bv__kXG6.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-DV4b1g2-.js → shadow-claw-task-server-DNOe8PWK.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-DV4b1g2-.js.map → shadow-claw-task-server-DNOe8PWK.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-K-foOHSE.js → shadow-claw-tasks-qmcDT4PU.js} +3 -3
- package/dist/lib/{shadow-claw-tasks-K-foOHSE.js.map → shadow-claw-tasks-qmcDT4PU.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-CpAknKyA.js → shadow-claw-terminal-0QUWP8of.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-CpAknKyA.js.map → shadow-claw-terminal-0QUWP8of.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-D98XZ0Ep.js → shadow-claw-tools-Bs_bmI6-.js} +3 -3
- package/dist/lib/{shadow-claw-tools-D98XZ0Ep.js.map → shadow-claw-tools-Bs_bmI6-.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-DLOb8dMI.js → shadow-claw-webvm-DYaoL7QY.js} +2 -2
- package/dist/lib/{shadow-claw-webvm-DLOb8dMI.js.map → shadow-claw-webvm-DYaoL7QY.js.map} +1 -1
- package/dist/lib/{syncWebMcpRegistration-NspKefOI.js → syncWebMcpRegistration-BhbqI6R2.js} +2 -2
- package/dist/lib/{syncWebMcpRegistration-NspKefOI.js.map → syncWebMcpRegistration-BhbqI6R2.js.map} +1 -1
- package/dist/public/.well-known/mcp/server-card.json +1 -1
- package/dist/public/.well-known/mcp.json +1 -1
- package/dist/public/AGENTS.md +22 -3
- package/dist/public/README.md +96 -278
- package/dist/public/agent.worker.js +50 -50
- package/dist/public/{base-task-model-CYkpwnvU-DDfHUUIS.js → base-task-model-CYkpwnvU-DrXr4G1R.js} +1 -1
- package/dist/public/{configurePeerJs-BhBokQlC.js → configurePeerJs-B470pdeU.js} +1 -1
- package/dist/public/docs/README.md +31 -31
- package/dist/public/docs/architecture/context-management.md +7 -0
- package/dist/public/docs/architecture/storage.md +10 -1
- package/dist/public/docs/decisions/bundled-typescript-architecture.md +0 -1
- package/dist/public/docs/decisions/native-web-components-and-signals.md +0 -1
- package/dist/public/docs/example/article/index.html +1 -1
- package/dist/public/docs/guides/publishing-to-github-pages.md +334 -0
- package/dist/public/docs/guides/server-development-configuration.md +15 -0
- package/dist/public/docs/publishing/index.html +1 -1
- package/dist/public/docs/skill-creator/index.html +1 -1
- package/dist/public/docs/subsystems/cli.md +10 -2
- package/dist/public/docs/subsystems/control-plane.md +9 -8
- package/dist/public/docs/subsystems/crypto.md +9 -0
- package/dist/public/docs/subsystems/custom-element-security.md +2 -0
- package/dist/public/docs/subsystems/mcp-server.md +31 -16
- package/dist/public/docs/subsystems/notifications.md +8 -5
- package/dist/public/docs/subsystems/providers.md +9 -0
- package/dist/public/docs/subsystems/share-target.md +107 -0
- package/dist/public/docs/subsystems/webmcp.md +43 -0
- package/dist/public/e2e/README.md +4 -2
- package/dist/public/{e2e-bridge-DcBoeFvd.js → e2e-bridge-CSW0S5Yz.js} +1 -1
- package/dist/public/{file-viewer-CKtVC9Ix.js → file-viewer-Cs-riNvy.js} +1 -1
- package/dist/public/{firebase-OSDX3viP.js → firebase-cwAl_ABm.js} +1 -1
- package/dist/public/{git-CkhCJonj.js → git-GD09WATp.js} +25 -25
- package/dist/public/index.html +1 -1
- package/dist/public/index.js +1 -1
- package/dist/public/{initControlPlane-Bi8ouFEb.js → initControlPlane-BqCY0NQy.js} +1 -1
- package/dist/public/initControlPlane-C-IXaKYX.js +1 -0
- package/dist/public/{language-detector-BRKrlra0.js → language-detector-CIeEuQFk.js} +1 -1
- package/dist/public/llms.txt +4 -2
- package/dist/public/main/index.html +1 -1
- package/dist/public/main/memory/index.html +1 -1
- package/dist/public/{markdown-C-hCVJtc.js → markdown-Cw7vCtTg.js} +1 -1
- package/dist/public/{openai-Bpd71Oja.js → openai-BJIb2c5j.js} +3 -3
- package/dist/public/{orchestrator-8qNGfw8r.js → orchestrator-BWkHHO9Y.js} +1 -1
- package/dist/public/{orchestrator-BT3Ks5ip.js → orchestrator-DpkkeD6T.js} +1 -1
- package/dist/public/{peerjs-DfhwEiiq.js → peerjs-tf2EmWjB.js} +1 -1
- package/dist/public/{prompt-api-polyfill-Dl1kbJhR.js → prompt-api-polyfill-CXd75leW.js} +1 -1
- package/dist/public/{push-client-BVLrE9pK.js → push-client-CHjSbrWs.js} +1 -1
- package/dist/public/{rewriter-j6D9LDER.js → rewriter-BEHn9gll.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-DCjxNDCX.js → shadow-claw-BBPV_9X8.js} +2 -2
- package/dist/public/{shadow-claw-channels-CITDrqMl.js → shadow-claw-channels-BJvrKQjg.js} +1 -1
- package/dist/public/{shadow-claw-chat-BQrSgSKF.js → shadow-claw-chat-BG2EaRaw.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-Cp001OY0.js → shadow-claw-control-plane-BBa7WbTg.js} +2 -2
- package/dist/public/{shadow-claw-conversations-EhX4RvIj.js → shadow-claw-conversations-CFaWFmkm.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-DiQXIjZD.js → shadow-claw-file-viewer-Z-GIKaE9.js} +1 -1
- package/dist/public/{shadow-claw-files-lkTnSJsn.js → shadow-claw-files-BBx4iMsk.js} +1 -1
- package/dist/public/{shadow-claw-git-BlcA_z8x.js → shadow-claw-git-vTOKatwd.js} +2 -2
- package/dist/public/{shadow-claw-llm-CW16X9Rg.js → shadow-claw-llm-Ce1Ax6-x.js} +1 -1
- package/dist/public/{shadow-claw-networking-ySsMBY_i.js → shadow-claw-networking-q4XIzdB5.js} +1 -1
- package/dist/public/{shadow-claw-notifications-CyV2zCQ8.js → shadow-claw-notifications-D2cz0gmm.js} +1 -1
- package/dist/public/{shadow-claw-pages-Cx7cF9ah.js → shadow-claw-pages-3335lmSC.js} +1 -1
- package/dist/public/{shadow-claw-settings-zm4PHHGi.js → shadow-claw-settings-4ptYuJwO.js} +2 -2
- package/dist/public/{shadow-claw-storage-dy9JAEGd.js → shadow-claw-storage-bIrPKFhF.js} +1 -1
- package/dist/public/{shadow-claw-task-server-Bleww48s.js → shadow-claw-task-server-5yqVBxy1.js} +1 -1
- package/dist/public/{shadow-claw-tasks-CTI5oaLN.js → shadow-claw-tasks-DcqYHPLZ.js} +1 -1
- package/dist/public/{shadow-claw-terminal-mZ3i4HaQ.js → shadow-claw-terminal-fARaDONr.js} +1 -1
- package/dist/public/{shadow-claw-tools-B_nuk8Zl.js → shadow-claw-tools-paEAhcJr.js} +1 -1
- package/dist/public/{shadow-claw-webvm-Vl_jH5YL.js → shadow-claw-webvm-CbzH_vyX.js} +1 -1
- package/dist/public/{summarizer-VJNr-7xG.js → summarizer-BT3AuFed.js} +1 -1
- package/dist/public/{syncWebMcpRegistration-n2vAMJ4w.js → syncWebMcpRegistration-CWSYaHex.js} +1 -1
- package/dist/public/{transformers-BhQMWQG5.js → transformers-1VTxqKjT.js} +1 -1
- package/dist/public/{translator-DEQXb7ZL.js → translator-B50RYlFt.js} +1 -1
- package/dist/public/{webllm-CHN5H-Sy.js → webllm-FmyJWWpt.js} +1 -1
- package/dist/public/{writer-CD9oN2pq.js → writer-Bhb4YYRE.js} +1 -1
- package/dist/server.js +205 -203
- package/package.json +1 -1
- package/src/components/settings/shadow-claw-llm/shadow-claw-llm.test.ts +2 -0
- package/src/core/orchestrator/utils/configurePeerJs.test.ts +2 -0
- package/src/server/client-registry.test.ts +9 -0
- package/src/server/client-registry.ts +14 -0
- package/src/server/mcp/mcp-integration.test.ts +68 -16
- package/src/server/mcp/tools/built-in-tools.ts +125 -34
- package/src/server/mcp/tools/client-tool-relay.ts +81 -44
- package/src/server/mcp/tools/mcp-tools.test.ts +103 -13
- package/src/server/mcp/types.ts +3 -0
- package/src/server/openapi/paths/push.ts +48 -0
- package/src/server/server.ts +30 -0
- package/src/subsystems/notifications/push-client.test.ts +17 -0
- package/src/subsystems/notifications/push-client.ts +22 -2
- package/src/subsystems/notifications/push-routes.test.ts +31 -0
- package/src/subsystems/notifications/push-routes.ts +10 -0
- package/src/subsystems/notifications/push-store.test.ts +49 -0
- package/src/subsystems/notifications/push-store.ts +45 -0
- package/src/worker/worker.test.ts +2 -0
- package/dist/lib/push-client-D6hbzDNV.js.map +0 -1
package/dist/lib/{shadow-claw-channel-config-BDPKt6Bd.js → shadow-claw-channel-config-DEL-aZ7N.js}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import ShadowClawElement from "./components/shadow-claw-element.js";
|
|
2
2
|
import { n as getDb } from "./txPromise-CuGh-TGK.js";
|
|
3
|
-
import { _t as setChannelEnabled, ht as getTelegramConfig, lt as configureIMessage, pt as getIMessageConfig, t as orchestratorStore, ut as configureTelegram } from "./orchestrator-
|
|
3
|
+
import { _t as setChannelEnabled, ht as getTelegramConfig, lt as configureIMessage, pt as getIMessageConfig, t as orchestratorStore, ut as configureTelegram } from "./orchestrator-ClXbJ4Mb.js";
|
|
4
4
|
import { a as showSuccess, r as showError, s as showWarning } from "./toast-DZ6r7_YI.js";
|
|
5
5
|
import { t as effect } from "./effect-DL6j9HJp.js";
|
|
6
|
-
import "./shadow-claw-peerjs-
|
|
6
|
+
import "./shadow-claw-peerjs-BvixjeBz.js";
|
|
7
7
|
|
|
8
8
|
//#region src/components/settings/shadow-claw-channel-config/shadow-claw-channel-config.css
|
|
9
9
|
const sheet = new CSSStyleSheet();
|
|
@@ -464,4 +464,4 @@ if (!customElements.get(elementName)) customElements.define(elementName, ShadowC
|
|
|
464
464
|
|
|
465
465
|
//#endregion
|
|
466
466
|
export { ShadowClawChannelConfig as t };
|
|
467
|
-
//# sourceMappingURL=shadow-claw-channel-config-
|
|
467
|
+
//# sourceMappingURL=shadow-claw-channel-config-DEL-aZ7N.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow-claw-channel-config-BDPKt6Bd.js","names":["shadowClawChannelConfigStyles","shadowClawChannelConfigTemplate"],"sources":["../../src/components/settings/shadow-claw-channel-config/shadow-claw-channel-config.ts"],"sourcesContent":["import { effect } from \"../../../core/effect.js\";\n\nimport {\n configureIMessage,\n configureTelegram,\n getIMessageConfig,\n getTelegramConfig,\n setChannelEnabled,\n} from \"../../../core/orchestrator/utils/operations/channel.js\";\n\nimport { getDb } from \"../../../db/db.js\";\nimport { orchestratorStore } from \"../../../stores/orchestrator.js\";\nimport { showError, showSuccess, showWarning } from \"../../../ui/toast.js\";\n\nimport type { Orchestrator } from \"../../../core/orchestrator/orchestrator.js\";\nimport type { ShadowClawDatabase } from \"../../../db/types.js\";\n\nimport \"../shadow-claw-peerjs/shadow-claw-peerjs.js\";\n\nimport ShadowClawElement from \"../../shadow-claw-element.js\";\nimport shadowClawChannelConfigStyles from \"./shadow-claw-channel-config.css\" with { type: \"css\" };\nimport shadowClawChannelConfigTemplate from \"./shadow-claw-channel-config.html\" with { type: \"html\" };\n\nconst elementName = \"shadow-claw-channel-config\";\n\nexport class ShadowClawChannelConfig extends ShadowClawElement {\n static styles = shadowClawChannelConfigStyles;\n static template = shadowClawChannelConfigTemplate;\n\n db: ShadowClawDatabase | null = null;\n orchestrator: Orchestrator | null = null;\n\n constructor() {\n super();\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 disconnectedCallback() {\n super.disconnectedCallback();\n }\n\n bindEventListeners() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n root\n .querySelector('[data-action=\"save-telegram-config\"]')\n ?.addEventListener(\"click\", () => this.saveTelegramConfig());\n\n root\n .querySelector('[data-action=\"save-imessage-config\"]')\n ?.addEventListener(\"click\", () => this.saveIMessageConfig());\n\n root\n .querySelector('[data-action=\"verify-telegram-config\"]')\n ?.addEventListener(\"click\", () => this.verifyTelegramConfig());\n }\n\n getOrchestrator(): Orchestrator | null {\n const current = orchestratorStore.orchestrator;\n if (current) {\n this.orchestrator = current;\n }\n\n return this.orchestrator;\n }\n\n setLoadingState(root: ShadowRoot) {\n const telegramTokenStatus = root.querySelector(\n '[data-info=\"telegram-token-status\"]',\n );\n if (telegramTokenStatus) {\n telegramTokenStatus.textContent = \"Loading Telegram settings...\";\n }\n\n const telegramChatIdsStatus = root.querySelector(\n '[data-info=\"telegram-chat-ids-status\"]',\n );\n if (telegramChatIdsStatus) {\n telegramChatIdsStatus.textContent = \"Loading Telegram settings...\";\n }\n\n const imessageChatIdsStatus = root.querySelector(\n '[data-info=\"imessage-chat-ids-status\"]',\n );\n if (imessageChatIdsStatus) {\n imessageChatIdsStatus.textContent = \"Loading iMessage settings...\";\n }\n }\n\n setupEffects() {\n this.addCleanup(\n effect(() => {\n const ready = orchestratorStore.ready;\n if (!ready) {\n return;\n }\n\n void this.render();\n }),\n );\n }\n\n updateChannelFieldAvailability(\n root: ShadowRoot,\n telegramEnabled: boolean,\n imessageEnabled: boolean,\n ) {\n const telegramTokenInput = root.querySelector(\n '[data-setting=\"telegram-token-input\"]',\n ) as HTMLInputElement | null;\n const telegramChatIdsInput = root.querySelector(\n '[data-setting=\"telegram-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n const telegramUseProxyToggle = root.querySelector(\n '[data-setting=\"telegram-use-proxy-toggle\"]',\n ) as HTMLInputElement | null;\n const verifyTelegramButton = root.querySelector(\n '[data-action=\"verify-telegram-config\"]',\n ) as HTMLButtonElement | null;\n\n if (telegramTokenInput) {\n telegramTokenInput.disabled = !telegramEnabled;\n }\n\n if (telegramChatIdsInput) {\n telegramChatIdsInput.disabled = !telegramEnabled;\n }\n\n if (telegramUseProxyToggle) {\n telegramUseProxyToggle.disabled = !telegramEnabled;\n }\n\n if (verifyTelegramButton) {\n verifyTelegramButton.disabled = !telegramEnabled;\n }\n\n const imessageServerUrlInput = root.querySelector(\n '[data-setting=\"imessage-server-url-input\"]',\n ) as HTMLInputElement | null;\n const imessageApiKeyInput = root.querySelector(\n '[data-setting=\"imessage-api-key-input\"]',\n ) as HTMLInputElement | null;\n const imessageChatIdsInput = root.querySelector(\n '[data-setting=\"imessage-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n\n if (imessageServerUrlInput) {\n imessageServerUrlInput.disabled = !imessageEnabled;\n }\n\n if (imessageApiKeyInput) {\n imessageApiKeyInput.disabled = !imessageEnabled;\n }\n\n if (imessageChatIdsInput) {\n imessageChatIdsInput.disabled = !imessageEnabled;\n }\n\n root\n .querySelectorAll(\".form-group\")\n .forEach((group) => group.classList.remove(\"form-group--disabled\"));\n\n if (!telegramEnabled) {\n root\n .querySelector('[data-setting=\"telegram-token-input\"]')\n ?.closest(\".form-group\")\n ?.classList.add(\"form-group--disabled\");\n }\n\n if (!imessageEnabled) {\n root\n .querySelector('[data-setting=\"imessage-server-url-input\"]')\n ?.closest(\".form-group\")\n ?.classList.add(\"form-group--disabled\");\n }\n }\n\n async render() {\n const orchestrator = this.getOrchestrator();\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n if (!orchestrator) {\n this.setLoadingState(root);\n\n return;\n }\n\n const telegram = getTelegramConfig(orchestrator);\n const imessage = getIMessageConfig(orchestrator);\n\n const telegramTokenInput = root.querySelector(\n '[data-setting=\"telegram-token-input\"]',\n ) as HTMLInputElement | null;\n const telegramChatIdsInput = root.querySelector(\n '[data-setting=\"telegram-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n const telegramUseProxyToggle = root.querySelector(\n '[data-setting=\"telegram-use-proxy-toggle\"]',\n ) as HTMLInputElement | null;\n const telegramEnabledToggle = root.querySelector(\n '[data-setting=\"telegram-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n const imessageServerUrlInput = root.querySelector(\n '[data-setting=\"imessage-server-url-input\"]',\n ) as HTMLInputElement | null;\n const imessageApiKeyInput = root.querySelector(\n '[data-setting=\"imessage-api-key-input\"]',\n ) as HTMLInputElement | null;\n const imessageChatIdsInput = root.querySelector(\n '[data-setting=\"imessage-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n const imessageEnabledToggle = root.querySelector(\n '[data-setting=\"imessage-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n\n if (telegramEnabledToggle) {\n telegramEnabledToggle.checked = telegram.enabled;\n }\n\n const telegramChannelStatus = root.querySelector(\n '[data-info=\"telegram-channel-status\"]',\n );\n if (telegramChannelStatus) {\n telegramChannelStatus.textContent = telegram.enabled\n ? \"Telegram channel is enabled.\"\n : \"Telegram channel is disabled. Saved settings are retained.\";\n }\n\n if (telegramTokenInput) {\n telegramTokenInput.value = telegram.botToken;\n }\n\n const telegramTokenStatus = root.querySelector(\n '[data-info=\"telegram-token-status\"]',\n );\n if (telegramTokenStatus) {\n telegramTokenStatus.textContent = telegram.botToken\n ? \"Telegram token saved.\"\n : \"No Telegram token saved.\";\n }\n\n if (telegramChatIdsInput) {\n telegramChatIdsInput.value = telegram.chatIds.join(\", \");\n }\n\n const telegramChatIdsStatus = root.querySelector(\n '[data-info=\"telegram-chat-ids-status\"]',\n );\n if (telegramChatIdsStatus) {\n telegramChatIdsStatus.textContent = telegram.chatIds.length\n ? `Allowed Telegram chat IDs saved: ${telegram.chatIds.join(\", \")}`\n : \"No Telegram chat IDs saved.\";\n }\n\n if (telegramUseProxyToggle) {\n telegramUseProxyToggle.checked = !!telegram.useProxy;\n }\n\n const telegramProxyStatus = root.querySelector(\n '[data-info=\"telegram-proxy-status\"]',\n );\n if (telegramProxyStatus) {\n telegramProxyStatus.textContent = telegram.useProxy\n ? \"Telegram API calls are proxied through this server.\"\n : \"Telegram API calls go directly to Telegram.\";\n }\n\n if (imessageServerUrlInput) {\n imessageServerUrlInput.value = imessage.serverUrl;\n }\n\n if (imessageApiKeyInput) {\n imessageApiKeyInput.value = imessage.apiKey;\n }\n\n if (imessageChatIdsInput) {\n imessageChatIdsInput.value = imessage.chatIds.join(\", \");\n }\n\n if (imessageEnabledToggle) {\n imessageEnabledToggle.checked = imessage.enabled;\n }\n\n const imessageChannelStatus = root.querySelector(\n '[data-info=\"imessage-channel-status\"]',\n );\n if (imessageChannelStatus) {\n imessageChannelStatus.textContent = imessage.enabled\n ? \"iMessage channel is enabled.\"\n : \"iMessage channel is disabled. Saved settings are retained.\";\n }\n\n const imessageChatIdsStatus = root.querySelector(\n '[data-info=\"imessage-chat-ids-status\"]',\n );\n if (imessageChatIdsStatus) {\n imessageChatIdsStatus.textContent = imessage.chatIds.length\n ? `Allowed iMessage chat IDs saved: ${imessage.chatIds.join(\", \")}`\n : \"No iMessage chat IDs saved.\";\n }\n\n this.updateChannelFieldAvailability(\n root,\n telegram.enabled,\n imessage.enabled,\n );\n }\n\n async saveIMessageConfig() {\n const orchestrator = this.getOrchestrator();\n if (!orchestrator || !this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const serverUrlInput = root.querySelector(\n '[data-setting=\"imessage-server-url-input\"]',\n ) as HTMLInputElement | null;\n const apiKeyInput = root.querySelector(\n '[data-setting=\"imessage-api-key-input\"]',\n ) as HTMLInputElement | null;\n const chatIdsInput = root.querySelector(\n '[data-setting=\"imessage-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n const enabledToggle = root.querySelector(\n '[data-setting=\"imessage-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n\n try {\n await configureIMessage(\n orchestrator,\n this.db,\n serverUrlInput?.value || \"\",\n apiKeyInput?.value || \"\",\n parseCommaSeparatedList(chatIdsInput?.value || \"\"),\n );\n await setChannelEnabled(\n orchestrator,\n this.db,\n \"imessage\",\n !!enabledToggle?.checked,\n );\n await this.render();\n showSuccess(\"iMessage channel settings saved\", 3000);\n } catch (error) {\n showError(\n `Error saving iMessage settings: ${error instanceof Error ? error.message : String(error)}`,\n 6000,\n );\n }\n }\n\n async saveTelegramConfig() {\n const orchestrator = this.getOrchestrator();\n if (!orchestrator || !this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const tokenInput = root.querySelector(\n '[data-setting=\"telegram-token-input\"]',\n ) as HTMLInputElement | null;\n const chatIdsInput = root.querySelector(\n '[data-setting=\"telegram-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n const useProxyToggle = root.querySelector(\n '[data-setting=\"telegram-use-proxy-toggle\"]',\n ) as HTMLInputElement | null;\n const enabledToggle = root.querySelector(\n '[data-setting=\"telegram-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n\n try {\n await configureTelegram(\n orchestrator,\n this.db,\n tokenInput?.value || \"\",\n parseCommaSeparatedList(chatIdsInput?.value || \"\"),\n !!useProxyToggle?.checked,\n );\n await setChannelEnabled(\n orchestrator,\n this.db,\n \"telegram\",\n !!enabledToggle?.checked,\n );\n await this.render();\n showSuccess(\"Telegram channel settings saved\", 3000);\n } catch (error) {\n showError(\n `Error saving Telegram settings: ${error instanceof Error ? error.message : String(error)}`,\n 6000,\n );\n }\n }\n\n async verifyTelegramConfig() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const tokenInput = root.querySelector(\n '[data-setting=\"telegram-token-input\"]',\n ) as HTMLInputElement | null;\n const token = tokenInput?.value?.trim() || \"\";\n const telegramUseProxyToggle = root.querySelector(\n '[data-setting=\"telegram-use-proxy-toggle\"]',\n ) as HTMLInputElement | null;\n const apiBase = telegramUseProxyToggle?.checked\n ? \"/telegram/bot\"\n : \"https://api.telegram.org/bot\";\n\n if (!token) {\n showError(\"Telegram bot token is empty. Save the token first.\", 5000);\n\n return;\n }\n\n try {\n const meRes = await fetch(`${apiBase}${token}/getMe`);\n const meJson = (await meRes.json()) as {\n ok?: boolean;\n description?: string;\n result?: { username?: string };\n };\n\n if (!meRes.ok || !meJson.ok) {\n throw new Error(meJson.description || `HTTP ${meRes.status}`);\n }\n\n const webhookRes = await fetch(`${apiBase}${token}/getWebhookInfo`);\n const webhookJson = (await webhookRes.json()) as {\n ok?: boolean;\n description?: string;\n result?: { url?: string };\n };\n\n if (!webhookRes.ok || !webhookJson.ok) {\n throw new Error(webhookJson.description || `HTTP ${webhookRes.status}`);\n }\n\n const webhookUrl = webhookJson.result?.url?.trim() || \"\";\n if (webhookUrl) {\n showWarning(\n `Telegram bot is valid (${meJson.result?.username || \"unknown\"}), but a webhook is enabled. Clear it with deleteWebhook before relying on getUpdates polling.`,\n 7000,\n );\n\n return;\n }\n\n showSuccess(\n `Telegram setup looks good for @${meJson.result?.username || \"unknown\"}. Token works and no webhook is active.`,\n 5000,\n );\n } catch (error) {\n showError(\n `Telegram verification failed: ${error instanceof Error ? error.message : String(error)}`,\n 7000,\n );\n }\n }\n}\n\nfunction parseCommaSeparatedList(value: string): string[] {\n return Array.from(\n new Set(\n value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean),\n ),\n );\n}\n\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawChannelConfig);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shadow-claw-channel-config-DEL-aZ7N.js","names":["shadowClawChannelConfigStyles","shadowClawChannelConfigTemplate"],"sources":["../../src/components/settings/shadow-claw-channel-config/shadow-claw-channel-config.ts"],"sourcesContent":["import { effect } from \"../../../core/effect.js\";\n\nimport {\n configureIMessage,\n configureTelegram,\n getIMessageConfig,\n getTelegramConfig,\n setChannelEnabled,\n} from \"../../../core/orchestrator/utils/operations/channel.js\";\n\nimport { getDb } from \"../../../db/db.js\";\nimport { orchestratorStore } from \"../../../stores/orchestrator.js\";\nimport { showError, showSuccess, showWarning } from \"../../../ui/toast.js\";\n\nimport type { Orchestrator } from \"../../../core/orchestrator/orchestrator.js\";\nimport type { ShadowClawDatabase } from \"../../../db/types.js\";\n\nimport \"../shadow-claw-peerjs/shadow-claw-peerjs.js\";\n\nimport ShadowClawElement from \"../../shadow-claw-element.js\";\nimport shadowClawChannelConfigStyles from \"./shadow-claw-channel-config.css\" with { type: \"css\" };\nimport shadowClawChannelConfigTemplate from \"./shadow-claw-channel-config.html\" with { type: \"html\" };\n\nconst elementName = \"shadow-claw-channel-config\";\n\nexport class ShadowClawChannelConfig extends ShadowClawElement {\n static styles = shadowClawChannelConfigStyles;\n static template = shadowClawChannelConfigTemplate;\n\n db: ShadowClawDatabase | null = null;\n orchestrator: Orchestrator | null = null;\n\n constructor() {\n super();\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 disconnectedCallback() {\n super.disconnectedCallback();\n }\n\n bindEventListeners() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n root\n .querySelector('[data-action=\"save-telegram-config\"]')\n ?.addEventListener(\"click\", () => this.saveTelegramConfig());\n\n root\n .querySelector('[data-action=\"save-imessage-config\"]')\n ?.addEventListener(\"click\", () => this.saveIMessageConfig());\n\n root\n .querySelector('[data-action=\"verify-telegram-config\"]')\n ?.addEventListener(\"click\", () => this.verifyTelegramConfig());\n }\n\n getOrchestrator(): Orchestrator | null {\n const current = orchestratorStore.orchestrator;\n if (current) {\n this.orchestrator = current;\n }\n\n return this.orchestrator;\n }\n\n setLoadingState(root: ShadowRoot) {\n const telegramTokenStatus = root.querySelector(\n '[data-info=\"telegram-token-status\"]',\n );\n if (telegramTokenStatus) {\n telegramTokenStatus.textContent = \"Loading Telegram settings...\";\n }\n\n const telegramChatIdsStatus = root.querySelector(\n '[data-info=\"telegram-chat-ids-status\"]',\n );\n if (telegramChatIdsStatus) {\n telegramChatIdsStatus.textContent = \"Loading Telegram settings...\";\n }\n\n const imessageChatIdsStatus = root.querySelector(\n '[data-info=\"imessage-chat-ids-status\"]',\n );\n if (imessageChatIdsStatus) {\n imessageChatIdsStatus.textContent = \"Loading iMessage settings...\";\n }\n }\n\n setupEffects() {\n this.addCleanup(\n effect(() => {\n const ready = orchestratorStore.ready;\n if (!ready) {\n return;\n }\n\n void this.render();\n }),\n );\n }\n\n updateChannelFieldAvailability(\n root: ShadowRoot,\n telegramEnabled: boolean,\n imessageEnabled: boolean,\n ) {\n const telegramTokenInput = root.querySelector(\n '[data-setting=\"telegram-token-input\"]',\n ) as HTMLInputElement | null;\n const telegramChatIdsInput = root.querySelector(\n '[data-setting=\"telegram-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n const telegramUseProxyToggle = root.querySelector(\n '[data-setting=\"telegram-use-proxy-toggle\"]',\n ) as HTMLInputElement | null;\n const verifyTelegramButton = root.querySelector(\n '[data-action=\"verify-telegram-config\"]',\n ) as HTMLButtonElement | null;\n\n if (telegramTokenInput) {\n telegramTokenInput.disabled = !telegramEnabled;\n }\n\n if (telegramChatIdsInput) {\n telegramChatIdsInput.disabled = !telegramEnabled;\n }\n\n if (telegramUseProxyToggle) {\n telegramUseProxyToggle.disabled = !telegramEnabled;\n }\n\n if (verifyTelegramButton) {\n verifyTelegramButton.disabled = !telegramEnabled;\n }\n\n const imessageServerUrlInput = root.querySelector(\n '[data-setting=\"imessage-server-url-input\"]',\n ) as HTMLInputElement | null;\n const imessageApiKeyInput = root.querySelector(\n '[data-setting=\"imessage-api-key-input\"]',\n ) as HTMLInputElement | null;\n const imessageChatIdsInput = root.querySelector(\n '[data-setting=\"imessage-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n\n if (imessageServerUrlInput) {\n imessageServerUrlInput.disabled = !imessageEnabled;\n }\n\n if (imessageApiKeyInput) {\n imessageApiKeyInput.disabled = !imessageEnabled;\n }\n\n if (imessageChatIdsInput) {\n imessageChatIdsInput.disabled = !imessageEnabled;\n }\n\n root\n .querySelectorAll(\".form-group\")\n .forEach((group) => group.classList.remove(\"form-group--disabled\"));\n\n if (!telegramEnabled) {\n root\n .querySelector('[data-setting=\"telegram-token-input\"]')\n ?.closest(\".form-group\")\n ?.classList.add(\"form-group--disabled\");\n }\n\n if (!imessageEnabled) {\n root\n .querySelector('[data-setting=\"imessage-server-url-input\"]')\n ?.closest(\".form-group\")\n ?.classList.add(\"form-group--disabled\");\n }\n }\n\n async render() {\n const orchestrator = this.getOrchestrator();\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n if (!orchestrator) {\n this.setLoadingState(root);\n\n return;\n }\n\n const telegram = getTelegramConfig(orchestrator);\n const imessage = getIMessageConfig(orchestrator);\n\n const telegramTokenInput = root.querySelector(\n '[data-setting=\"telegram-token-input\"]',\n ) as HTMLInputElement | null;\n const telegramChatIdsInput = root.querySelector(\n '[data-setting=\"telegram-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n const telegramUseProxyToggle = root.querySelector(\n '[data-setting=\"telegram-use-proxy-toggle\"]',\n ) as HTMLInputElement | null;\n const telegramEnabledToggle = root.querySelector(\n '[data-setting=\"telegram-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n const imessageServerUrlInput = root.querySelector(\n '[data-setting=\"imessage-server-url-input\"]',\n ) as HTMLInputElement | null;\n const imessageApiKeyInput = root.querySelector(\n '[data-setting=\"imessage-api-key-input\"]',\n ) as HTMLInputElement | null;\n const imessageChatIdsInput = root.querySelector(\n '[data-setting=\"imessage-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n const imessageEnabledToggle = root.querySelector(\n '[data-setting=\"imessage-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n\n if (telegramEnabledToggle) {\n telegramEnabledToggle.checked = telegram.enabled;\n }\n\n const telegramChannelStatus = root.querySelector(\n '[data-info=\"telegram-channel-status\"]',\n );\n if (telegramChannelStatus) {\n telegramChannelStatus.textContent = telegram.enabled\n ? \"Telegram channel is enabled.\"\n : \"Telegram channel is disabled. Saved settings are retained.\";\n }\n\n if (telegramTokenInput) {\n telegramTokenInput.value = telegram.botToken;\n }\n\n const telegramTokenStatus = root.querySelector(\n '[data-info=\"telegram-token-status\"]',\n );\n if (telegramTokenStatus) {\n telegramTokenStatus.textContent = telegram.botToken\n ? \"Telegram token saved.\"\n : \"No Telegram token saved.\";\n }\n\n if (telegramChatIdsInput) {\n telegramChatIdsInput.value = telegram.chatIds.join(\", \");\n }\n\n const telegramChatIdsStatus = root.querySelector(\n '[data-info=\"telegram-chat-ids-status\"]',\n );\n if (telegramChatIdsStatus) {\n telegramChatIdsStatus.textContent = telegram.chatIds.length\n ? `Allowed Telegram chat IDs saved: ${telegram.chatIds.join(\", \")}`\n : \"No Telegram chat IDs saved.\";\n }\n\n if (telegramUseProxyToggle) {\n telegramUseProxyToggle.checked = !!telegram.useProxy;\n }\n\n const telegramProxyStatus = root.querySelector(\n '[data-info=\"telegram-proxy-status\"]',\n );\n if (telegramProxyStatus) {\n telegramProxyStatus.textContent = telegram.useProxy\n ? \"Telegram API calls are proxied through this server.\"\n : \"Telegram API calls go directly to Telegram.\";\n }\n\n if (imessageServerUrlInput) {\n imessageServerUrlInput.value = imessage.serverUrl;\n }\n\n if (imessageApiKeyInput) {\n imessageApiKeyInput.value = imessage.apiKey;\n }\n\n if (imessageChatIdsInput) {\n imessageChatIdsInput.value = imessage.chatIds.join(\", \");\n }\n\n if (imessageEnabledToggle) {\n imessageEnabledToggle.checked = imessage.enabled;\n }\n\n const imessageChannelStatus = root.querySelector(\n '[data-info=\"imessage-channel-status\"]',\n );\n if (imessageChannelStatus) {\n imessageChannelStatus.textContent = imessage.enabled\n ? \"iMessage channel is enabled.\"\n : \"iMessage channel is disabled. Saved settings are retained.\";\n }\n\n const imessageChatIdsStatus = root.querySelector(\n '[data-info=\"imessage-chat-ids-status\"]',\n );\n if (imessageChatIdsStatus) {\n imessageChatIdsStatus.textContent = imessage.chatIds.length\n ? `Allowed iMessage chat IDs saved: ${imessage.chatIds.join(\", \")}`\n : \"No iMessage chat IDs saved.\";\n }\n\n this.updateChannelFieldAvailability(\n root,\n telegram.enabled,\n imessage.enabled,\n );\n }\n\n async saveIMessageConfig() {\n const orchestrator = this.getOrchestrator();\n if (!orchestrator || !this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const serverUrlInput = root.querySelector(\n '[data-setting=\"imessage-server-url-input\"]',\n ) as HTMLInputElement | null;\n const apiKeyInput = root.querySelector(\n '[data-setting=\"imessage-api-key-input\"]',\n ) as HTMLInputElement | null;\n const chatIdsInput = root.querySelector(\n '[data-setting=\"imessage-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n const enabledToggle = root.querySelector(\n '[data-setting=\"imessage-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n\n try {\n await configureIMessage(\n orchestrator,\n this.db,\n serverUrlInput?.value || \"\",\n apiKeyInput?.value || \"\",\n parseCommaSeparatedList(chatIdsInput?.value || \"\"),\n );\n await setChannelEnabled(\n orchestrator,\n this.db,\n \"imessage\",\n !!enabledToggle?.checked,\n );\n await this.render();\n showSuccess(\"iMessage channel settings saved\", 3000);\n } catch (error) {\n showError(\n `Error saving iMessage settings: ${error instanceof Error ? error.message : String(error)}`,\n 6000,\n );\n }\n }\n\n async saveTelegramConfig() {\n const orchestrator = this.getOrchestrator();\n if (!orchestrator || !this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const tokenInput = root.querySelector(\n '[data-setting=\"telegram-token-input\"]',\n ) as HTMLInputElement | null;\n const chatIdsInput = root.querySelector(\n '[data-setting=\"telegram-chat-ids-input\"]',\n ) as HTMLInputElement | null;\n const useProxyToggle = root.querySelector(\n '[data-setting=\"telegram-use-proxy-toggle\"]',\n ) as HTMLInputElement | null;\n const enabledToggle = root.querySelector(\n '[data-setting=\"telegram-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n\n try {\n await configureTelegram(\n orchestrator,\n this.db,\n tokenInput?.value || \"\",\n parseCommaSeparatedList(chatIdsInput?.value || \"\"),\n !!useProxyToggle?.checked,\n );\n await setChannelEnabled(\n orchestrator,\n this.db,\n \"telegram\",\n !!enabledToggle?.checked,\n );\n await this.render();\n showSuccess(\"Telegram channel settings saved\", 3000);\n } catch (error) {\n showError(\n `Error saving Telegram settings: ${error instanceof Error ? error.message : String(error)}`,\n 6000,\n );\n }\n }\n\n async verifyTelegramConfig() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const tokenInput = root.querySelector(\n '[data-setting=\"telegram-token-input\"]',\n ) as HTMLInputElement | null;\n const token = tokenInput?.value?.trim() || \"\";\n const telegramUseProxyToggle = root.querySelector(\n '[data-setting=\"telegram-use-proxy-toggle\"]',\n ) as HTMLInputElement | null;\n const apiBase = telegramUseProxyToggle?.checked\n ? \"/telegram/bot\"\n : \"https://api.telegram.org/bot\";\n\n if (!token) {\n showError(\"Telegram bot token is empty. Save the token first.\", 5000);\n\n return;\n }\n\n try {\n const meRes = await fetch(`${apiBase}${token}/getMe`);\n const meJson = (await meRes.json()) as {\n ok?: boolean;\n description?: string;\n result?: { username?: string };\n };\n\n if (!meRes.ok || !meJson.ok) {\n throw new Error(meJson.description || `HTTP ${meRes.status}`);\n }\n\n const webhookRes = await fetch(`${apiBase}${token}/getWebhookInfo`);\n const webhookJson = (await webhookRes.json()) as {\n ok?: boolean;\n description?: string;\n result?: { url?: string };\n };\n\n if (!webhookRes.ok || !webhookJson.ok) {\n throw new Error(webhookJson.description || `HTTP ${webhookRes.status}`);\n }\n\n const webhookUrl = webhookJson.result?.url?.trim() || \"\";\n if (webhookUrl) {\n showWarning(\n `Telegram bot is valid (${meJson.result?.username || \"unknown\"}), but a webhook is enabled. Clear it with deleteWebhook before relying on getUpdates polling.`,\n 7000,\n );\n\n return;\n }\n\n showSuccess(\n `Telegram setup looks good for @${meJson.result?.username || \"unknown\"}. Token works and no webhook is active.`,\n 5000,\n );\n } catch (error) {\n showError(\n `Telegram verification failed: ${error instanceof Error ? error.message : String(error)}`,\n 7000,\n );\n }\n }\n}\n\nfunction parseCommaSeparatedList(value: string): string[] {\n return Array.from(\n new Set(\n value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean),\n ),\n );\n}\n\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawChannelConfig);\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import ShadowClawElement from "./components/shadow-claw-element.js";
|
|
2
2
|
import "./shadow-claw-page-header-action-button-BXXm5b5N.js";
|
|
3
3
|
import "./shadow-claw-page-header-Cti2fzf-.js";
|
|
4
|
-
import "./shadow-claw-channel-config-
|
|
4
|
+
import "./shadow-claw-channel-config-DEL-aZ7N.js";
|
|
5
5
|
|
|
6
6
|
//#region src/components/shadow-claw-channels/shadow-claw-channels.css
|
|
7
7
|
const sheet = new CSSStyleSheet();
|
|
@@ -110,4 +110,4 @@ if (!customElements.get(elementName)) customElements.define(elementName, ShadowC
|
|
|
110
110
|
|
|
111
111
|
//#endregion
|
|
112
112
|
export { ShadowClawChannels as t };
|
|
113
|
-
//# sourceMappingURL=shadow-claw-channels-
|
|
113
|
+
//# sourceMappingURL=shadow-claw-channels-BgaJiPdE.js.map
|
package/dist/lib/{shadow-claw-channels-BsP5JABM.js.map → shadow-claw-channels-BgaJiPdE.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow-claw-channels-
|
|
1
|
+
{"version":3,"file":"shadow-claw-channels-BgaJiPdE.js","names":["shadowClawChannelsStyles","shadowClawChannelsTemplate"],"sources":["../../src/components/shadow-claw-channels/shadow-claw-channels.ts"],"sourcesContent":["import \"../common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.js\";\nimport \"../settings/shadow-claw-channel-config/shadow-claw-channel-config.js\";\nimport \"../shadow-claw-page-header/shadow-claw-page-header.js\";\n\nimport ShadowClawElement from \"../shadow-claw-element.js\";\nimport shadowClawChannelsStyles from \"./shadow-claw-channels.css\" with { type: \"css\" };\nimport shadowClawChannelsTemplate from \"./shadow-claw-channels.html\" with { type: \"html\" };\n\nconst elementName = \"shadow-claw-channels\";\n\nexport class ShadowClawChannels extends ShadowClawElement {\n static styles = shadowClawChannelsStyles;\n static template = shadowClawChannelsTemplate;\n\n constructor() {\n super();\n }\n\n async connectedCallback() {\n const root = this.shadowRoot;\n if (!root) {\n throw new Error(\"shadowRoot not found\");\n }\n\n await this.render();\n }\n\n async render() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n root\n .querySelector('[data-action=\"back-to-settings\"]')\n ?.addEventListener(\"click\", () => {\n this.dispatchEvent(\n new CustomEvent(\"navigate-back\", {\n bubbles: true,\n composed: true,\n }),\n );\n });\n }\n}\n\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawChannels);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,cAAc;AAEpB,IAAa,qBAAb,cAAwC,kBAAkB;CACxD,OAAO,SAASA;CAChB,OAAO,WAAWC;CAElB,cAAc;EACZ,MAAM;CACR;CAEA,MAAM,oBAAoB;EAExB,IAAI,CADS,KAAK,YAEhB,MAAM,IAAI,MAAM,sBAAsB;EAGxC,MAAM,KAAK,OAAO;CACpB;CAEA,MAAM,SAAS;EACb,MAAM,OAAO,KAAK;EAClB,IAAI,CAAC,MACH;EAGF,KACG,cAAc,oCAAkC,CAAC,EAChD,iBAAiB,eAAe;GAChC,KAAK,cACH,IAAI,YAAY,iBAAiB;IAC/B,SAAS;IACT,UAAU;GACZ,CAAC,CACH;EACF,CAAC;CACL;AACF;AAEA,IAAI,CAAC,eAAe,IAAI,WAAW,GACjC,eAAe,OAAO,aAAa,kBAAkB"}
|
|
@@ -5,7 +5,7 @@ import { c as DEFAULT_PROMPT_API_FALLBACK_MODEL, l as DEFAULT_PROVIDER, r as CON
|
|
|
5
5
|
import { t as getConfig } from "./getConfig-BxxXMyuM.js";
|
|
6
6
|
import { t as readGroupFileBytes } from "./readGroupFileBytes-C8oOe8Iu.js";
|
|
7
7
|
import { t as fileViewerStore } from "./file-viewer-C3YKnq_-.js";
|
|
8
|
-
import { bt as saveMessage, dn as formatModelAttachmentCapabilitySummary, fn as getAttachmentCategory, o as clearGroupMessages, pn as getModelAttachmentCapabilities, t as orchestratorStore } from "./orchestrator-
|
|
8
|
+
import { bt as saveMessage, dn as formatModelAttachmentCapabilitySummary, fn as getAttachmentCategory, o as clearGroupMessages, pn as getModelAttachmentCapabilities, t as orchestratorStore } from "./orchestrator-ClXbJ4Mb.js";
|
|
9
9
|
import { t as setConfig } from "./setConfig-BFED5CXn.js";
|
|
10
10
|
import { d as handleSpecialLinkNavigation, l as formatDateForFilename, n as setSanitizedHtml, u as formatTimestamp } from "./trusted-types-Dx0RZlrd.js";
|
|
11
11
|
import { t as require_browser } from "./browser-FvTfy_Ym.js";
|
|
@@ -14,8 +14,8 @@ import { a as showSuccess, i as showInfo, r as showError, s as showWarning } fro
|
|
|
14
14
|
import { getNamespacedItem } from "./utils/namespacedStorage.js";
|
|
15
15
|
import { i as renderPromptApiStatusHtml, n as isNativePromptApiSupported, r as isPromptApiPotentiallySupported } from "./prompt-api-DJvb1BN7.js";
|
|
16
16
|
import { t as effect } from "./effect-DL6j9HJp.js";
|
|
17
|
-
import { t as renderMarkdown } from "./markdown-
|
|
18
|
-
import { i as inferAttachmentMimeType, n as transferProgressSignal, o as shouldInlineAttachmentInChat } from "./peerjs-
|
|
17
|
+
import { t as renderMarkdown } from "./markdown-DgdSt2GD.js";
|
|
18
|
+
import { i as inferAttachmentMimeType, n as transferProgressSignal, o as shouldInlineAttachmentInChat } from "./peerjs-BdfpltIe.js";
|
|
19
19
|
import { t as downloadGroupFile } from "./downloadGroupFile-DmcBQU1n.js";
|
|
20
20
|
import { n as chatUiStore } from "./shadow-claw-a2ui-CpZUTzlh.js";
|
|
21
21
|
import { t as isTruthyConfigValue } from "./config-value-Cxggje2K.js";
|
|
@@ -6558,4 +6558,4 @@ if (!customElements.get(elementName)) customElements.define(elementName, ShadowC
|
|
|
6558
6558
|
|
|
6559
6559
|
//#endregion
|
|
6560
6560
|
export { ShadowClawChat as t };
|
|
6561
|
-
//# sourceMappingURL=shadow-claw-chat-
|
|
6561
|
+
//# sourceMappingURL=shadow-claw-chat-mXPQZbwT.js.map
|