openclaw-multi-auto 1.3.6 → 1.3.8
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/dist/{audio-preflight-5FEeDooz.js → audio-preflight-DDBLZBdb.js} +4 -4
- package/dist/{audio-transcription-runner-B-UvoDjZ.js → audio-transcription-runner-DZbSWT9E.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{chrome-D45SyhQL.js → chrome-CMU2WVFh.js} +8 -8
- package/dist/{deliver-B9cys0EZ.js → deliver-BXVcFIHL.js} +1 -1
- package/dist/{deliver-runtime-DhaQJ0pI.js → deliver-runtime-DTaIS-1i.js} +3 -3
- package/dist/{deps-send-whatsapp.runtime-DvTL2tzN.js → deps-send-whatsapp.runtime-CIZqFAqb.js} +7 -7
- package/dist/extensionAPI.js +6 -6
- package/dist/{image-DAOPwVXi.js → image-BCVLo0qw.js} +1 -1
- package/dist/{image-runtime-wlCLVvVv.js → image-runtime-DtCKpMPZ.js} +3 -3
- package/dist/{pi-embedded-DYU79yGe.js → pi-embedded-CgQ_W6Xs.js} +24 -24
- package/dist/{pi-embedded-helpers-uTRAmQ4n.js → pi-embedded-helpers-CwuBTKza.js} +3 -3
- package/dist/plugin-sdk/{accounts-DyFCXtHv.js → accounts-BslAlVYS.js} +2 -2
- package/dist/plugin-sdk/{accounts-BJAXxY46.js → accounts-C3m65--E.js} +2 -2
- package/dist/plugin-sdk/{accounts-C1j7HSL0.js → accounts-CNCCkdEF.js} +3 -3
- package/dist/plugin-sdk/{active-listener-CftX5jLD.js → active-listener-CkPnMUkB.js} +2 -2
- package/dist/plugin-sdk/{api-key-rotation-8nyyt1kx.js → api-key-rotation-BXnNsojA.js} +2 -2
- package/dist/plugin-sdk/{audio-preflight-C_aSAPR1.js → audio-preflight-CtO4fFvp.js} +26 -26
- package/dist/plugin-sdk/{audio-transcription-runner-CB53F7_7.js → audio-transcription-runner-DnxvOS1-.js} +11 -11
- package/dist/plugin-sdk/{audit-membership-runtime-BXndI4LG.js → audit-membership-runtime-BpfoSk8M.js} +2 -2
- package/dist/plugin-sdk/{channel-activity-C5y8AgAV.js → channel-activity-WJYxcJ3S.js} +3 -3
- package/dist/plugin-sdk/{channel-web-DBTRO03V.js → channel-web-dO5k3ubM.js} +18 -18
- package/dist/plugin-sdk/{chrome-f00sZkDX.js → chrome-CjNTuJML.js} +6 -6
- package/dist/plugin-sdk/{commands-registry-BJ_NxG2F.js → commands-registry-CdYjoI0i.js} +4 -4
- package/dist/plugin-sdk/{common-Cf27Jwxu.js → common-oYc5vPFl.js} +2 -2
- package/dist/plugin-sdk/{config-CHQrpx-Q.js → config-B1z-UxQ3.js} +7 -7
- package/dist/plugin-sdk/{deliver-DNEuetST.js → deliver-D5_6T567.js} +10 -10
- package/dist/plugin-sdk/deliver-runtime-C5dgvvga.js +32 -0
- package/dist/plugin-sdk/deps-send-discord.runtime-Dg4N7PHJ.js +23 -0
- package/dist/plugin-sdk/deps-send-imessage.runtime-0OEwzMQm.js +22 -0
- package/dist/plugin-sdk/deps-send-signal.runtime-BM1jRt3G.js +21 -0
- package/dist/plugin-sdk/deps-send-slack.runtime-1E3BYRdF.js +19 -0
- package/dist/plugin-sdk/deps-send-telegram.runtime-DNCxIflA.js +24 -0
- package/dist/plugin-sdk/deps-send-whatsapp.runtime-OLwr-9c8.js +57 -0
- package/dist/plugin-sdk/{diagnostic-LYUUmjJ5.js → diagnostic-Bxxu0ig-.js} +2 -2
- package/dist/plugin-sdk/{errors-CtMWwS2Z.js → errors-B3cHyZZA.js} +1 -1
- package/dist/plugin-sdk/{fetch-guard-CxYB5Kg6.js → fetch-guard-Dcgod0tg.js} +2 -2
- package/dist/plugin-sdk/{fs-safe-DtfhxbrI.js → fs-safe-BaKqI3G4.js} +3 -3
- package/dist/plugin-sdk/{image-BwjYjRHx.js → image-B2mQW9Rb.js} +6 -6
- package/dist/plugin-sdk/{image-ops-BnZKcbd6.js → image-ops-Cbzr4U9l.js} +2 -2
- package/dist/plugin-sdk/image-runtime-BFm45j49.js +25 -0
- package/dist/plugin-sdk/{ir-Z4hX67TJ.js → ir-ZEmrTr4J.js} +7 -7
- package/dist/plugin-sdk/{local-roots-KhjQw04O.js → local-roots-CIPRxA-4.js} +4 -4
- package/dist/plugin-sdk/{logger-DHIIvMxj.js → logger-CvPFVOgT.js} +2 -2
- package/dist/plugin-sdk/{login-C31642Ld.js → login-CCTew9bt.js} +4 -4
- package/dist/plugin-sdk/{login-qr--y2SG_Ue.js → login-qr-BI3Vi_wJ.js} +5 -5
- package/dist/plugin-sdk/{manager-2UZBMCc7.js → manager-BEoYPn7R.js} +8 -8
- package/dist/plugin-sdk/manager-runtime-DxclHQ4U.js +15 -0
- package/dist/plugin-sdk/{outbound-Ba0QUI5h.js → outbound-ByOw1K6W.js} +5 -5
- package/dist/plugin-sdk/{outbound-attachment-B1Laso-8.js → outbound-attachment-BzVhxRRw.js} +2 -2
- package/dist/plugin-sdk/{path-alias-guards-C7Vm5DZ1.js → path-alias-guards-sWayacde.js} +1 -1
- package/dist/plugin-sdk/{paths-DopV9PQG.js → paths-Dpg3qxcl.js} +1 -1
- package/dist/plugin-sdk/{pi-embedded-helpers-DnA_OCzP.js → pi-embedded-helpers-DIxXkGJf.js} +16 -16
- package/dist/plugin-sdk/{pi-model-discovery-DdPqXk8f.js → pi-model-discovery-DM_2uFtj.js} +1 -1
- package/dist/plugin-sdk/pi-model-discovery-runtime-BuzvkvNR.js +8 -0
- package/dist/plugin-sdk/{pi-tools.before-tool-call.runtime-DxFHiLUE.js → pi-tools.before-tool-call.runtime-w1dqL_ty.js} +4 -4
- package/dist/plugin-sdk/{plugins-CbCt4osF.js → plugins-C4USiH29.js} +4 -4
- package/dist/plugin-sdk/{proxy-env-C63mMdas.js → proxy-env-ET-rp8eg.js} +1 -1
- package/dist/plugin-sdk/{proxy-fetch-Ch95c_Y2.js → proxy-fetch-uDXGKG3Z.js} +1 -1
- package/dist/plugin-sdk/{pw-ai-DpJk62D4.js → pw-ai-CyOt3RDA.js} +9 -9
- package/dist/plugin-sdk/{qmd-manager-Ca-iSfEE.js → qmd-manager-BySdoVR7.js} +7 -7
- package/dist/plugin-sdk/{query-expansion-B_Xe41Ab.js → query-expansion-C6uS-7lj.js} +4 -4
- package/dist/plugin-sdk/{redact-hp9TOulW.js → redact-Bvxt1T_Q.js} +1 -1
- package/dist/plugin-sdk/{reply-CovBlFea.js → reply-CTCSeQqW.js} +73 -73
- package/dist/plugin-sdk/{resolve-outbound-target-BbrHgyUk.js → resolve-outbound-target-Bw8YNANu.js} +2 -2
- package/dist/plugin-sdk/{run-with-concurrency-BR1DXa8T.js → run-with-concurrency-C_KCHwvf.js} +1 -1
- package/dist/plugin-sdk/runtime-whatsapp-login.runtime-BxgRDkhc.js +10 -0
- package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-elOqrkfg.js +19 -0
- package/dist/plugin-sdk/{send-BvAtLLPl.js → send-BZ6nYFZr.js} +5 -5
- package/dist/plugin-sdk/{send-BTztm3D2.js → send-C0w6xP2x.js} +6 -6
- package/dist/plugin-sdk/{send-CWJUuG0i.js → send-CFf-1V89.js} +8 -8
- package/dist/plugin-sdk/{send-EcglC4cG.js → send-CY-Qfwia.js} +7 -7
- package/dist/plugin-sdk/{send-BXpXBwM_.js → send-qPyNGSe4.js} +13 -13
- package/dist/plugin-sdk/{session-k256LJZT.js → session-COrvpvUQ.js} +3 -3
- package/dist/plugin-sdk/signal.js +2 -2
- package/dist/plugin-sdk/{skill-commands-DoRqLzxm.js → skill-commands-DZqhtmiv.js} +4 -4
- package/dist/plugin-sdk/{skills-QudILG6e.js → skills-Cw_vXEJb.js} +6 -6
- package/dist/plugin-sdk/slash-commands.runtime-D67JLweo.js +13 -0
- package/dist/plugin-sdk/slash-dispatch.runtime-DvcpvCJ0.js +52 -0
- package/dist/plugin-sdk/slash-skill-commands.runtime-BM1x3azR.js +16 -0
- package/dist/plugin-sdk/{store-BbDQw3g6.js → store-CMHj6IIw.js} +2 -2
- package/dist/plugin-sdk/subagent-registry-runtime-1lbDyRzz.js +52 -0
- package/dist/plugin-sdk/{tables-BhvloMKN.js → tables-CSqrHsKL.js} +1 -1
- package/dist/plugin-sdk/{thinking-URzkT-3p.js → thinking-DOnsR_A8.js} +7 -7
- package/dist/plugin-sdk/{tokens-B1PW5Ayy.js → tokens-BDr0Z9o3.js} +1 -1
- package/dist/plugin-sdk/{tool-images-xpqbP6RR.js → tool-images-eEfOVkzf.js} +2 -2
- package/dist/plugin-sdk/web-BLyT64pW.js +56 -0
- package/dist/plugin-sdk/{whatsapp-actions-RcZ6vp61.js → whatsapp-actions-xcleMoMv.js} +17 -17
- package/dist/plugin-sdk/whatsapp.js +50 -50
- package/dist/{pw-ai-GcYO6HPE.js → pw-ai-CmphSzHx.js} +1 -1
- package/dist/{slash-dispatch.runtime-Dh053pQK.js → slash-dispatch.runtime-131yup2e.js} +6 -6
- package/dist/{subagent-registry-runtime-DSi5mnCQ.js → subagent-registry-runtime-DbSf_Je6.js} +6 -6
- package/dist/{web-1hWJDzNA.js → web-MR9d7KyB.js} +6 -6
- package/package.json +5 -2
- package/scripts/create-instance.sh +44 -19
- package/scripts/install-maca.sh +39 -28
- package/scripts/npm_publish.sh +8 -6
- package/ui/index.html +16 -0
- package/ui/node_modules/.bin/jiti +21 -0
- package/ui/node_modules/.bin/lessc +21 -0
- package/ui/node_modules/.bin/marked +21 -0
- package/ui/node_modules/.bin/playwright +21 -0
- package/ui/node_modules/.bin/sass +21 -0
- package/ui/node_modules/.bin/tsx +21 -0
- package/ui/node_modules/.bin/vite +21 -0
- package/ui/node_modules/.bin/vitest +21 -0
- package/ui/node_modules/.bin/yaml +21 -0
- package/ui/package.json +27 -0
- package/ui/public/apple-touch-icon.png +0 -0
- package/ui/public/favicon-32.png +0 -0
- package/ui/public/favicon.ico +0 -0
- package/ui/public/favicon.svg +22 -0
- package/ui/src/css.d.ts +1 -0
- package/ui/src/i18n/index.ts +3 -0
- package/ui/src/i18n/lib/lit-controller.ts +22 -0
- package/ui/src/i18n/lib/registry.ts +64 -0
- package/ui/src/i18n/lib/translate.ts +123 -0
- package/ui/src/i18n/lib/types.ts +9 -0
- package/ui/src/i18n/locales/de.ts +129 -0
- package/ui/src/i18n/locales/en.ts +337 -0
- package/ui/src/i18n/locales/pt-BR.ts +128 -0
- package/ui/src/i18n/locales/zh-CN.ts +330 -0
- package/ui/src/i18n/locales/zh-TW.ts +125 -0
- package/ui/src/i18n/test/translate.test.ts +56 -0
- package/ui/src/main.ts +2 -0
- package/ui/src/styles/base.css +385 -0
- package/ui/src/styles/chat/grouped.css +300 -0
- package/ui/src/styles/chat/layout.css +481 -0
- package/ui/src/styles/chat/sidebar.css +117 -0
- package/ui/src/styles/chat/text.css +146 -0
- package/ui/src/styles/chat/tool-cards.css +202 -0
- package/ui/src/styles/chat.css +5 -0
- package/ui/src/styles/components.css +2612 -0
- package/ui/src/styles/config.css +1658 -0
- package/ui/src/styles/layout.css +621 -0
- package/ui/src/styles/layout.mobile.css +374 -0
- package/ui/src/styles.css +5 -0
- package/ui/src/ui/__screenshots__/config-form.browser.test.ts/config-form-renderer-flags-unsupported-unions-1.png +0 -0
- package/ui/src/ui/__screenshots__/config-form.browser.test.ts/config-form-renderer-renders-inputs-and-patches-values-1.png +0 -0
- package/ui/src/ui/__screenshots__/config-form.browser.test.ts/config-form-renderer-renders-union-literals-as-select-options-1.png +0 -0
- package/ui/src/ui/__screenshots__/navigation.browser.test.ts/control-UI-routing-auto-scrolls-chat-history-to-the-latest-message-1.png +0 -0
- package/ui/src/ui/app-channels.ts +279 -0
- package/ui/src/ui/app-chat.ts +266 -0
- package/ui/src/ui/app-defaults.ts +50 -0
- package/ui/src/ui/app-events.ts +5 -0
- package/ui/src/ui/app-gateway.node.test.ts +229 -0
- package/ui/src/ui/app-gateway.ts +349 -0
- package/ui/src/ui/app-lifecycle.node.test.ts +44 -0
- package/ui/src/ui/app-lifecycle.ts +109 -0
- package/ui/src/ui/app-polling.ts +69 -0
- package/ui/src/ui/app-render-usage-tab.ts +273 -0
- package/ui/src/ui/app-render.helpers.node.test.ts +286 -0
- package/ui/src/ui/app-render.helpers.ts +574 -0
- package/ui/src/ui/app-render.ts +1168 -0
- package/ui/src/ui/app-scroll.test.ts +275 -0
- package/ui/src/ui/app-scroll.ts +179 -0
- package/ui/src/ui/app-settings.test.ts +70 -0
- package/ui/src/ui/app-settings.ts +440 -0
- package/ui/src/ui/app-tool-stream.node.test.ts +139 -0
- package/ui/src/ui/app-tool-stream.ts +455 -0
- package/ui/src/ui/app-view-state.ts +321 -0
- package/ui/src/ui/app.ts +621 -0
- package/ui/src/ui/assistant-identity.ts +23 -0
- package/ui/src/ui/chat/constants.ts +12 -0
- package/ui/src/ui/chat/copy-as-markdown.ts +97 -0
- package/ui/src/ui/chat/grouped-render.ts +287 -0
- package/ui/src/ui/chat/message-extract.test.ts +64 -0
- package/ui/src/ui/chat/message-extract.ts +122 -0
- package/ui/src/ui/chat/message-normalizer.test.ts +179 -0
- package/ui/src/ui/chat/message-normalizer.ts +101 -0
- package/ui/src/ui/chat/tool-cards.ts +156 -0
- package/ui/src/ui/chat/tool-helpers.test.ts +141 -0
- package/ui/src/ui/chat/tool-helpers.ts +37 -0
- package/ui/src/ui/chat-event-reload.test.ts +47 -0
- package/ui/src/ui/chat-event-reload.ts +16 -0
- package/ui/src/ui/chat-markdown.browser.test.ts +37 -0
- package/ui/src/ui/components/resizable-divider.ts +110 -0
- package/ui/src/ui/config-form.browser.test.ts +443 -0
- package/ui/src/ui/controllers/agent-files.ts +126 -0
- package/ui/src/ui/controllers/agent-identity.ts +59 -0
- package/ui/src/ui/controllers/agent-skills.ts +33 -0
- package/ui/src/ui/controllers/agents.test.ts +61 -0
- package/ui/src/ui/controllers/agents.ts +64 -0
- package/ui/src/ui/controllers/assistant-identity.ts +34 -0
- package/ui/src/ui/controllers/channels.ts +94 -0
- package/ui/src/ui/controllers/channels.types.ts +15 -0
- package/ui/src/ui/controllers/chat.test.ts +568 -0
- package/ui/src/ui/controllers/chat.ts +318 -0
- package/ui/src/ui/controllers/config/form-coerce.ts +160 -0
- package/ui/src/ui/controllers/config/form-utils.node.test.ts +455 -0
- package/ui/src/ui/controllers/config/form-utils.ts +90 -0
- package/ui/src/ui/controllers/config.test.ts +289 -0
- package/ui/src/ui/controllers/config.ts +219 -0
- package/ui/src/ui/controllers/control-ui-bootstrap.test.ts +82 -0
- package/ui/src/ui/controllers/control-ui-bootstrap.ts +49 -0
- package/ui/src/ui/controllers/cron-filters.test.ts +81 -0
- package/ui/src/ui/controllers/cron.test.ts +1070 -0
- package/ui/src/ui/controllers/cron.ts +921 -0
- package/ui/src/ui/controllers/debug.ts +60 -0
- package/ui/src/ui/controllers/devices.ts +159 -0
- package/ui/src/ui/controllers/exec-approval.ts +100 -0
- package/ui/src/ui/controllers/exec-approvals.ts +170 -0
- package/ui/src/ui/controllers/logs.ts +147 -0
- package/ui/src/ui/controllers/nodes.ts +32 -0
- package/ui/src/ui/controllers/presence.ts +37 -0
- package/ui/src/ui/controllers/sessions.test.ts +104 -0
- package/ui/src/ui/controllers/sessions.ts +127 -0
- package/ui/src/ui/controllers/skills.ts +157 -0
- package/ui/src/ui/controllers/usage.node.test.ts +181 -0
- package/ui/src/ui/controllers/usage.ts +315 -0
- package/ui/src/ui/data/moonshot-kimi-k2.ts +45 -0
- package/ui/src/ui/device-auth.ts +73 -0
- package/ui/src/ui/device-identity.ts +112 -0
- package/ui/src/ui/external-link.test.ts +18 -0
- package/ui/src/ui/external-link.ts +19 -0
- package/ui/src/ui/focus-mode.browser.test.ts +39 -0
- package/ui/src/ui/format.test.ts +101 -0
- package/ui/src/ui/format.ts +60 -0
- package/ui/src/ui/gateway.ts +360 -0
- package/ui/src/ui/icons.ts +256 -0
- package/ui/src/ui/markdown.test.ts +85 -0
- package/ui/src/ui/markdown.ts +139 -0
- package/ui/src/ui/navigation.browser.test.ts +188 -0
- package/ui/src/ui/navigation.test.ts +189 -0
- package/ui/src/ui/navigation.ts +165 -0
- package/ui/src/ui/open-external-url.test.ts +108 -0
- package/ui/src/ui/open-external-url.ts +73 -0
- package/ui/src/ui/presenter.ts +85 -0
- package/ui/src/ui/storage.node.test.ts +63 -0
- package/ui/src/ui/storage.ts +99 -0
- package/ui/src/ui/test-helpers/app-mount.ts +27 -0
- package/ui/src/ui/text-direction.test.ts +24 -0
- package/ui/src/ui/text-direction.ts +30 -0
- package/ui/src/ui/theme-transition.ts +109 -0
- package/ui/src/ui/theme.ts +16 -0
- package/ui/src/ui/tool-display.ts +159 -0
- package/ui/src/ui/types/chat-types.ts +44 -0
- package/ui/src/ui/types.ts +627 -0
- package/ui/src/ui/ui-types.ts +54 -0
- package/ui/src/ui/usage-helpers.node.test.ts +43 -0
- package/ui/src/ui/usage-helpers.ts +321 -0
- package/ui/src/ui/usage-types.ts +22 -0
- package/ui/src/ui/uuid.test.ts +41 -0
- package/ui/src/ui/uuid.ts +57 -0
- package/ui/src/ui/views/agents-panels-status-files.ts +461 -0
- package/ui/src/ui/views/agents-panels-tools-skills.browser.test.ts +102 -0
- package/ui/src/ui/views/agents-panels-tools-skills.ts +537 -0
- package/ui/src/ui/views/agents-utils.test.ts +100 -0
- package/ui/src/ui/views/agents-utils.ts +502 -0
- package/ui/src/ui/views/agents.ts +499 -0
- package/ui/src/ui/views/channel-config-extras.ts +49 -0
- package/ui/src/ui/views/channels.config.ts +155 -0
- package/ui/src/ui/views/channels.discord.ts +65 -0
- package/ui/src/ui/views/channels.googlechat.ts +79 -0
- package/ui/src/ui/views/channels.imessage.ts +65 -0
- package/ui/src/ui/views/channels.nostr-profile-form.ts +321 -0
- package/ui/src/ui/views/channels.nostr.ts +237 -0
- package/ui/src/ui/views/channels.shared.ts +38 -0
- package/ui/src/ui/views/channels.signal.ts +69 -0
- package/ui/src/ui/views/channels.slack.ts +65 -0
- package/ui/src/ui/views/channels.telegram.ts +120 -0
- package/ui/src/ui/views/channels.ts +325 -0
- package/ui/src/ui/views/channels.types.ts +62 -0
- package/ui/src/ui/views/channels.whatsapp.ts +118 -0
- package/ui/src/ui/views/chat-image-open.browser.test.ts +70 -0
- package/ui/src/ui/views/chat.test.ts +227 -0
- package/ui/src/ui/views/chat.ts +616 -0
- package/ui/src/ui/views/config-form.analyze.ts +267 -0
- package/ui/src/ui/views/config-form.node.ts +1073 -0
- package/ui/src/ui/views/config-form.render.ts +478 -0
- package/ui/src/ui/views/config-form.search.node.test.ts +69 -0
- package/ui/src/ui/views/config-form.shared.ts +96 -0
- package/ui/src/ui/views/config-form.ts +4 -0
- package/ui/src/ui/views/config-search.node.test.ts +50 -0
- package/ui/src/ui/views/config-search.ts +92 -0
- package/ui/src/ui/views/config.browser.test.ts +233 -0
- package/ui/src/ui/views/config.ts +820 -0
- package/ui/src/ui/views/cron.test.ts +741 -0
- package/ui/src/ui/views/cron.ts +1758 -0
- package/ui/src/ui/views/debug.ts +151 -0
- package/ui/src/ui/views/exec-approval.ts +89 -0
- package/ui/src/ui/views/gateway-url-confirmation.ts +40 -0
- package/ui/src/ui/views/instances.ts +89 -0
- package/ui/src/ui/views/logs.ts +155 -0
- package/ui/src/ui/views/markdown-sidebar.ts +40 -0
- package/ui/src/ui/views/nodes-exec-approvals.ts +617 -0
- package/ui/src/ui/views/nodes-shared.ts +67 -0
- package/ui/src/ui/views/nodes.ts +485 -0
- package/ui/src/ui/views/overview-hints.ts +16 -0
- package/ui/src/ui/views/overview.node.test.ts +39 -0
- package/ui/src/ui/views/overview.ts +361 -0
- package/ui/src/ui/views/sessions.test.ts +81 -0
- package/ui/src/ui/views/sessions.ts +321 -0
- package/ui/src/ui/views/skills-grouping.ts +40 -0
- package/ui/src/ui/views/skills-shared.ts +52 -0
- package/ui/src/ui/views/skills.ts +192 -0
- package/ui/src/ui/views/usage-metrics.ts +578 -0
- package/ui/src/ui/views/usage-query.ts +277 -0
- package/ui/src/ui/views/usage-render-details.test.ts +136 -0
- package/ui/src/ui/views/usage-render-details.ts +1083 -0
- package/ui/src/ui/views/usage-render-overview.ts +796 -0
- package/ui/src/ui/views/usage-styles/usageStyles-part1.ts +701 -0
- package/ui/src/ui/views/usage-styles/usageStyles-part2.ts +702 -0
- package/ui/src/ui/views/usage-styles/usageStyles-part3.ts +551 -0
- package/ui/src/ui/views/usage.ts +836 -0
- package/ui/src/ui/views/usageStyles.ts +5 -0
- package/ui/src/ui/views/usageTypes.ts +105 -0
- package/ui/vite.config.ts +43 -0
- package/ui/vitest.config.ts +15 -0
- package/ui/vitest.node.config.ts +10 -0
- package/dist/plugin-sdk/deliver-runtime-BFdqklJM.js +0 -32
- package/dist/plugin-sdk/deps-send-discord.runtime-DuqpYwU0.js +0 -23
- package/dist/plugin-sdk/deps-send-imessage.runtime-CZ2rS8Lb.js +0 -22
- package/dist/plugin-sdk/deps-send-signal.runtime-BdqiWhIh.js +0 -21
- package/dist/plugin-sdk/deps-send-slack.runtime-04s36qiC.js +0 -19
- package/dist/plugin-sdk/deps-send-telegram.runtime-LE5tkPvr.js +0 -24
- package/dist/plugin-sdk/deps-send-whatsapp.runtime-Bz57lobC.js +0 -57
- package/dist/plugin-sdk/image-runtime-B8twoubs.js +0 -25
- package/dist/plugin-sdk/manager-runtime-CMeLwose.js +0 -15
- package/dist/plugin-sdk/pi-model-discovery-runtime-D8CJhtJY.js +0 -8
- package/dist/plugin-sdk/runtime-whatsapp-login.runtime-SkO91TZH.js +0 -10
- package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-B0VWK5hm.js +0 -19
- package/dist/plugin-sdk/slash-commands.runtime-DS6vCNSL.js +0 -13
- package/dist/plugin-sdk/slash-dispatch.runtime-BXrxb2wd.js +0 -52
- package/dist/plugin-sdk/slash-skill-commands.runtime-Bd6qQ2oT.js +0 -16
- package/dist/plugin-sdk/subagent-registry-runtime-1uwQbuXj.js +0 -52
- package/dist/plugin-sdk/web-B74yhL2N.js +0 -56
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { Locale, TranslationMap } from "./types.ts";
|
|
2
|
+
|
|
3
|
+
type LazyLocale = Exclude<Locale, "en">;
|
|
4
|
+
type LocaleModule = Record<string, TranslationMap>;
|
|
5
|
+
|
|
6
|
+
type LazyLocaleRegistration = {
|
|
7
|
+
exportName: string;
|
|
8
|
+
loader: () => Promise<LocaleModule>;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const DEFAULT_LOCALE: Locale = "en";
|
|
12
|
+
|
|
13
|
+
const LAZY_LOCALES: readonly LazyLocale[] = ["zh-CN", "zh-TW", "pt-BR", "de"];
|
|
14
|
+
|
|
15
|
+
const LAZY_LOCALE_REGISTRY: Record<LazyLocale, LazyLocaleRegistration> = {
|
|
16
|
+
"zh-CN": {
|
|
17
|
+
exportName: "zh_CN",
|
|
18
|
+
loader: () => import("../locales/zh-CN.ts"),
|
|
19
|
+
},
|
|
20
|
+
"zh-TW": {
|
|
21
|
+
exportName: "zh_TW",
|
|
22
|
+
loader: () => import("../locales/zh-TW.ts"),
|
|
23
|
+
},
|
|
24
|
+
"pt-BR": {
|
|
25
|
+
exportName: "pt_BR",
|
|
26
|
+
loader: () => import("../locales/pt-BR.ts"),
|
|
27
|
+
},
|
|
28
|
+
de: {
|
|
29
|
+
exportName: "de",
|
|
30
|
+
loader: () => import("../locales/de.ts"),
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const SUPPORTED_LOCALES: ReadonlyArray<Locale> = [DEFAULT_LOCALE, ...LAZY_LOCALES];
|
|
35
|
+
|
|
36
|
+
export function isSupportedLocale(value: string | null | undefined): value is Locale {
|
|
37
|
+
return value !== null && value !== undefined && SUPPORTED_LOCALES.includes(value as Locale);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function isLazyLocale(locale: Locale): locale is LazyLocale {
|
|
41
|
+
return LAZY_LOCALES.includes(locale as LazyLocale);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function resolveNavigatorLocale(navLang: string): Locale {
|
|
45
|
+
if (navLang.startsWith("zh")) {
|
|
46
|
+
return navLang === "zh-TW" || navLang === "zh-HK" ? "zh-TW" : "zh-CN";
|
|
47
|
+
}
|
|
48
|
+
if (navLang.startsWith("pt")) {
|
|
49
|
+
return "pt-BR";
|
|
50
|
+
}
|
|
51
|
+
if (navLang.startsWith("de")) {
|
|
52
|
+
return "de";
|
|
53
|
+
}
|
|
54
|
+
return DEFAULT_LOCALE;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function loadLazyLocaleTranslation(locale: Locale): Promise<TranslationMap | null> {
|
|
58
|
+
if (!isLazyLocale(locale)) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const registration = LAZY_LOCALE_REGISTRY[locale];
|
|
62
|
+
const module = await registration.loader();
|
|
63
|
+
return module[registration.exportName] ?? null;
|
|
64
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { en } from "../locales/en.ts";
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_LOCALE,
|
|
4
|
+
SUPPORTED_LOCALES,
|
|
5
|
+
isSupportedLocale,
|
|
6
|
+
loadLazyLocaleTranslation,
|
|
7
|
+
resolveNavigatorLocale,
|
|
8
|
+
} from "./registry.ts";
|
|
9
|
+
import type { Locale, TranslationMap } from "./types.ts";
|
|
10
|
+
|
|
11
|
+
type Subscriber = (locale: Locale) => void;
|
|
12
|
+
|
|
13
|
+
export { SUPPORTED_LOCALES, isSupportedLocale };
|
|
14
|
+
|
|
15
|
+
class I18nManager {
|
|
16
|
+
private locale: Locale = DEFAULT_LOCALE;
|
|
17
|
+
private translations: Partial<Record<Locale, TranslationMap>> = { [DEFAULT_LOCALE]: en };
|
|
18
|
+
private subscribers: Set<Subscriber> = new Set();
|
|
19
|
+
|
|
20
|
+
constructor() {
|
|
21
|
+
this.loadLocale();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private resolveInitialLocale(): Locale {
|
|
25
|
+
const saved = localStorage.getItem("openclaw.i18n.locale");
|
|
26
|
+
if (isSupportedLocale(saved)) {
|
|
27
|
+
return saved;
|
|
28
|
+
}
|
|
29
|
+
return resolveNavigatorLocale(navigator.language);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private loadLocale() {
|
|
33
|
+
const initialLocale = this.resolveInitialLocale();
|
|
34
|
+
if (initialLocale === DEFAULT_LOCALE) {
|
|
35
|
+
this.locale = DEFAULT_LOCALE;
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Use the normal locale setter so startup locale loading follows the same
|
|
39
|
+
// translation-loading + notify path as manual locale changes.
|
|
40
|
+
void this.setLocale(initialLocale);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public getLocale(): Locale {
|
|
44
|
+
return this.locale;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public async setLocale(locale: Locale) {
|
|
48
|
+
const needsTranslationLoad = locale !== DEFAULT_LOCALE && !this.translations[locale];
|
|
49
|
+
if (this.locale === locale && !needsTranslationLoad) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (needsTranslationLoad) {
|
|
54
|
+
try {
|
|
55
|
+
const translation = await loadLazyLocaleTranslation(locale);
|
|
56
|
+
if (!translation) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
this.translations[locale] = translation;
|
|
60
|
+
} catch (e) {
|
|
61
|
+
console.error(`Failed to load locale: ${locale}`, e);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
this.locale = locale;
|
|
67
|
+
localStorage.setItem("openclaw.i18n.locale", locale);
|
|
68
|
+
this.notify();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public registerTranslation(locale: Locale, map: TranslationMap) {
|
|
72
|
+
this.translations[locale] = map;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public subscribe(sub: Subscriber) {
|
|
76
|
+
this.subscribers.add(sub);
|
|
77
|
+
return () => this.subscribers.delete(sub);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private notify() {
|
|
81
|
+
this.subscribers.forEach((sub) => sub(this.locale));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
public t(key: string, params?: Record<string, string>): string {
|
|
85
|
+
const keys = key.split(".");
|
|
86
|
+
let value: unknown = this.translations[this.locale] || this.translations[DEFAULT_LOCALE];
|
|
87
|
+
|
|
88
|
+
for (const k of keys) {
|
|
89
|
+
if (value && typeof value === "object") {
|
|
90
|
+
value = (value as Record<string, unknown>)[k];
|
|
91
|
+
} else {
|
|
92
|
+
value = undefined;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Fallback to English.
|
|
98
|
+
if (value === undefined && this.locale !== DEFAULT_LOCALE) {
|
|
99
|
+
value = this.translations[DEFAULT_LOCALE];
|
|
100
|
+
for (const k of keys) {
|
|
101
|
+
if (value && typeof value === "object") {
|
|
102
|
+
value = (value as Record<string, unknown>)[k];
|
|
103
|
+
} else {
|
|
104
|
+
value = undefined;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (typeof value !== "string") {
|
|
111
|
+
return key;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (params) {
|
|
115
|
+
return value.replace(/\{(\w+)\}/g, (_, k) => params[k] || `{${k}}`);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return value;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export const i18n = new I18nManager();
|
|
123
|
+
export const t = (key: string, params?: Record<string, string>) => i18n.t(key, params);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type TranslationMap = { [key: string]: string | TranslationMap };
|
|
2
|
+
|
|
3
|
+
export type Locale = "en" | "zh-CN" | "zh-TW" | "pt-BR" | "de";
|
|
4
|
+
|
|
5
|
+
export interface I18nConfig {
|
|
6
|
+
locale: Locale;
|
|
7
|
+
fallbackLocale: Locale;
|
|
8
|
+
translations: Record<Locale, TranslationMap>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { TranslationMap } from "../lib/types.ts";
|
|
2
|
+
|
|
3
|
+
export const de: TranslationMap = {
|
|
4
|
+
common: {
|
|
5
|
+
version: "Version",
|
|
6
|
+
health: "Status",
|
|
7
|
+
ok: "OK",
|
|
8
|
+
offline: "Offline",
|
|
9
|
+
connect: "Verbinden",
|
|
10
|
+
refresh: "Aktualisieren",
|
|
11
|
+
enabled: "Aktiviert",
|
|
12
|
+
disabled: "Deaktiviert",
|
|
13
|
+
na: "k. A.",
|
|
14
|
+
docs: "Dokumentation",
|
|
15
|
+
resources: "Ressourcen",
|
|
16
|
+
},
|
|
17
|
+
nav: {
|
|
18
|
+
chat: "Chat",
|
|
19
|
+
control: "Steuerung",
|
|
20
|
+
agent: "Agent",
|
|
21
|
+
settings: "Einstellungen",
|
|
22
|
+
expand: "Seitenleiste ausklappen",
|
|
23
|
+
collapse: "Seitenleiste einklappen",
|
|
24
|
+
},
|
|
25
|
+
tabs: {
|
|
26
|
+
agents: "Agenten",
|
|
27
|
+
overview: "Übersicht",
|
|
28
|
+
channels: "Kanäle",
|
|
29
|
+
instances: "Instanzen",
|
|
30
|
+
sessions: "Sitzungen",
|
|
31
|
+
usage: "Nutzung",
|
|
32
|
+
cron: "Cron-Aufgaben",
|
|
33
|
+
skills: "Fähigkeiten",
|
|
34
|
+
nodes: "Geräte",
|
|
35
|
+
chat: "Chat",
|
|
36
|
+
config: "Konfiguration",
|
|
37
|
+
debug: "Debug",
|
|
38
|
+
logs: "Protokolle",
|
|
39
|
+
},
|
|
40
|
+
subtitles: {
|
|
41
|
+
agents: "Agent-Arbeitsbereiche, Tools und Identitäten verwalten.",
|
|
42
|
+
overview: "Gateway-Status, Einstiegspunkte und eine schnelle Zustandsprüfung.",
|
|
43
|
+
channels: "Kanäle und Einstellungen verwalten.",
|
|
44
|
+
instances: "Präsenzsignale von verbundenen Clients und Geräten.",
|
|
45
|
+
sessions: "Aktive Sitzungen inspizieren und Standardeinstellungen pro Sitzung anpassen.",
|
|
46
|
+
usage: "API-Nutzung und Kosten überwachen.",
|
|
47
|
+
cron: "Aufweckzeiten und wiederkehrende Agent-Läufe planen.",
|
|
48
|
+
skills: "Skill-Verfügbarkeit und API-Schlüsselinjektion verwalten.",
|
|
49
|
+
nodes: "Gekoppelte Geräte, Fähigkeiten und Befehlsfreigabe.",
|
|
50
|
+
chat: "Direkte Gateway-Chat-Sitzung für schnelle Eingriffe.",
|
|
51
|
+
config: "~/.openclaw/openclaw.json sicher bearbeiten.",
|
|
52
|
+
debug: "Gateway-Snapshots, Ereignisse und manuelle RPC-Aufrufe.",
|
|
53
|
+
logs: "Live-Verfolgung der Gateway-Protokolldateien.",
|
|
54
|
+
},
|
|
55
|
+
overview: {
|
|
56
|
+
access: {
|
|
57
|
+
title: "Gateway-Zugang",
|
|
58
|
+
subtitle: "Wo sich das Dashboard verbindet und wie es sich authentifiziert.",
|
|
59
|
+
wsUrl: "WebSocket-URL",
|
|
60
|
+
token: "Gateway-Token",
|
|
61
|
+
password: "Passwort (nicht gespeichert)",
|
|
62
|
+
sessionKey: "Standard-Sitzungsschlüssel",
|
|
63
|
+
language: "Sprache",
|
|
64
|
+
connectHint: "Klicken Sie auf Verbinden, um Verbindungsänderungen anzuwenden.",
|
|
65
|
+
trustedProxy: "Authentifiziert über vertrauenswürdigen Proxy.",
|
|
66
|
+
},
|
|
67
|
+
snapshot: {
|
|
68
|
+
title: "Snapshot",
|
|
69
|
+
subtitle: "Neueste Gateway-Handshake-Informationen.",
|
|
70
|
+
status: "Status",
|
|
71
|
+
uptime: "Betriebszeit",
|
|
72
|
+
tickInterval: "Tick-Intervall",
|
|
73
|
+
lastChannelsRefresh: "Letzte Kanalaktualisierung",
|
|
74
|
+
channelsHint:
|
|
75
|
+
"Verwenden Sie Kanäle, um WhatsApp, Telegram, Discord, Signal oder iMessage zu verknüpfen.",
|
|
76
|
+
},
|
|
77
|
+
stats: {
|
|
78
|
+
instances: "Instanzen",
|
|
79
|
+
instancesHint: "Präsenzsignale in den letzten 5 Minuten.",
|
|
80
|
+
sessions: "Sitzungen",
|
|
81
|
+
sessionsHint: "Letzte vom Gateway verfolgte Sitzungsschlüssel.",
|
|
82
|
+
cron: "Cron",
|
|
83
|
+
cronNext: "Nächste Ausführung {time}",
|
|
84
|
+
},
|
|
85
|
+
notes: {
|
|
86
|
+
title: "Notizen",
|
|
87
|
+
subtitle: "Kurze Hinweise für Remote-Steuerung.",
|
|
88
|
+
tailscaleTitle: "Tailscale Serve",
|
|
89
|
+
tailscaleText:
|
|
90
|
+
"Bevorzugen Sie den Serve-Modus, um das Gateway auf Loopback mit Tailnet-Auth zu halten.",
|
|
91
|
+
sessionTitle: "Sitzungshygiene",
|
|
92
|
+
sessionText: "Verwenden Sie /new oder sessions.patch, um den Kontext zurückzusetzen.",
|
|
93
|
+
cronTitle: "Cron-Erinnerungen",
|
|
94
|
+
cronText: "Verwenden Sie isolierte Sitzungen für wiederkehrende Läufe.",
|
|
95
|
+
},
|
|
96
|
+
auth: {
|
|
97
|
+
required:
|
|
98
|
+
"Dieses Gateway erfordert Authentifizierung. Fügen Sie ein Token oder Passwort hinzu und klicken Sie auf Verbinden.",
|
|
99
|
+
failed:
|
|
100
|
+
"Authentifizierung fehlgeschlagen. Kopieren Sie erneut eine URL mit Token über {command}, oder aktualisieren Sie das Token und klicken Sie auf Verbinden.",
|
|
101
|
+
},
|
|
102
|
+
pairing: {
|
|
103
|
+
hint: "Dieses Gerät benötigt eine Pairing-Freigabe vom Gateway-Host.",
|
|
104
|
+
mobileHint:
|
|
105
|
+
"Auf dem Mobilgerät? Kopieren Sie die vollständige URL (einschließlich #token=...) von openclaw dashboard --no-open auf Ihrem Desktop.",
|
|
106
|
+
},
|
|
107
|
+
insecure: {
|
|
108
|
+
hint: "Diese Seite ist HTTP, daher blockiert der Browser die Geräteidentifikation. Verwenden Sie HTTPS (Tailscale Serve) oder öffnen Sie {url} auf dem Gateway-Host.",
|
|
109
|
+
stayHttp: "Wenn Sie bei HTTP bleiben müssen, setzen Sie {config} (nur Token).",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
chat: {
|
|
113
|
+
disconnected: "Verbindung zum Gateway getrennt.",
|
|
114
|
+
refreshTitle: "Chat-Daten aktualisieren",
|
|
115
|
+
thinkingToggle: "Ausgabe des Assistenten ein-/ausblenden",
|
|
116
|
+
focusToggle: "Fokusmodus ein-/ausschalten (Seitenleiste + Kopfzeile ausblenden)",
|
|
117
|
+
hideCronSessions: "Cron-Sitzungen ausblenden",
|
|
118
|
+
showCronSessions: "Cron-Sitzungen anzeigen",
|
|
119
|
+
showCronSessionsHidden: "Cron-Sitzungen anzeigen ({count} ausgeblendet)",
|
|
120
|
+
onboardingDisabled: "Während der Einrichtung deaktiviert",
|
|
121
|
+
},
|
|
122
|
+
languages: {
|
|
123
|
+
en: "English",
|
|
124
|
+
zhCN: "简体中文 (Vereinfachtes Chinesisch)",
|
|
125
|
+
zhTW: "繁體中文 (Traditionelles Chinesisch)",
|
|
126
|
+
ptBR: "Português (Brasilianisches Portugiesisch)",
|
|
127
|
+
de: "Deutsch",
|
|
128
|
+
},
|
|
129
|
+
};
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import type { TranslationMap } from "../lib/types.ts";
|
|
2
|
+
|
|
3
|
+
export const en: TranslationMap = {
|
|
4
|
+
common: {
|
|
5
|
+
version: "Version",
|
|
6
|
+
health: "Health",
|
|
7
|
+
ok: "OK",
|
|
8
|
+
offline: "Offline",
|
|
9
|
+
connect: "Connect",
|
|
10
|
+
refresh: "Refresh",
|
|
11
|
+
enabled: "Enabled",
|
|
12
|
+
disabled: "Disabled",
|
|
13
|
+
na: "n/a",
|
|
14
|
+
docs: "Docs",
|
|
15
|
+
resources: "Resources",
|
|
16
|
+
},
|
|
17
|
+
nav: {
|
|
18
|
+
chat: "Chat",
|
|
19
|
+
control: "Control",
|
|
20
|
+
agent: "Agent",
|
|
21
|
+
settings: "Settings",
|
|
22
|
+
expand: "Expand sidebar",
|
|
23
|
+
collapse: "Collapse sidebar",
|
|
24
|
+
},
|
|
25
|
+
tabs: {
|
|
26
|
+
agents: "Agents",
|
|
27
|
+
overview: "Overview",
|
|
28
|
+
channels: "Channels",
|
|
29
|
+
instances: "Instances",
|
|
30
|
+
sessions: "Sessions",
|
|
31
|
+
usage: "Usage",
|
|
32
|
+
cron: "Cron Jobs",
|
|
33
|
+
skills: "Skills",
|
|
34
|
+
nodes: "Nodes",
|
|
35
|
+
chat: "Chat",
|
|
36
|
+
config: "Config",
|
|
37
|
+
debug: "Debug",
|
|
38
|
+
logs: "Logs",
|
|
39
|
+
},
|
|
40
|
+
subtitles: {
|
|
41
|
+
agents: "Manage agent workspaces, tools, and identities.",
|
|
42
|
+
overview: "Gateway status, entry points, and a fast health read.",
|
|
43
|
+
channels: "Manage channels and settings.",
|
|
44
|
+
instances: "Presence beacons from connected clients and nodes.",
|
|
45
|
+
sessions: "Inspect active sessions and adjust per-session defaults.",
|
|
46
|
+
usage: "Monitor API usage and costs.",
|
|
47
|
+
cron: "Schedule wakeups and recurring agent runs.",
|
|
48
|
+
skills: "Manage skill availability and API key injection.",
|
|
49
|
+
nodes: "Paired devices, capabilities, and command exposure.",
|
|
50
|
+
chat: "Direct gateway chat session for quick interventions.",
|
|
51
|
+
config: "Edit ~/.openclaw/openclaw.json safely.",
|
|
52
|
+
debug: "Gateway snapshots, events, and manual RPC calls.",
|
|
53
|
+
logs: "Live tail of the gateway file logs.",
|
|
54
|
+
},
|
|
55
|
+
overview: {
|
|
56
|
+
access: {
|
|
57
|
+
title: "Gateway Access",
|
|
58
|
+
subtitle: "Where the dashboard connects and how it authenticates.",
|
|
59
|
+
wsUrl: "WebSocket URL",
|
|
60
|
+
token: "Gateway Token",
|
|
61
|
+
password: "Password (not stored)",
|
|
62
|
+
sessionKey: "Default Session Key",
|
|
63
|
+
language: "Language",
|
|
64
|
+
connectHint: "Click Connect to apply connection changes.",
|
|
65
|
+
trustedProxy: "Authenticated via trusted proxy.",
|
|
66
|
+
},
|
|
67
|
+
snapshot: {
|
|
68
|
+
title: "Snapshot",
|
|
69
|
+
subtitle: "Latest gateway handshake information.",
|
|
70
|
+
status: "Status",
|
|
71
|
+
uptime: "Uptime",
|
|
72
|
+
tickInterval: "Tick Interval",
|
|
73
|
+
lastChannelsRefresh: "Last Channels Refresh",
|
|
74
|
+
channelsHint: "Use Channels to link WhatsApp, Telegram, Discord, Signal, or iMessage.",
|
|
75
|
+
},
|
|
76
|
+
stats: {
|
|
77
|
+
instances: "Instances",
|
|
78
|
+
instancesHint: "Presence beacons in the last 5 minutes.",
|
|
79
|
+
sessions: "Sessions",
|
|
80
|
+
sessionsHint: "Recent session keys tracked by the gateway.",
|
|
81
|
+
cron: "Cron",
|
|
82
|
+
cronNext: "Next wake {time}",
|
|
83
|
+
},
|
|
84
|
+
notes: {
|
|
85
|
+
title: "Notes",
|
|
86
|
+
subtitle: "Quick reminders for remote control setups.",
|
|
87
|
+
tailscaleTitle: "Tailscale serve",
|
|
88
|
+
tailscaleText: "Prefer serve mode to keep the gateway on loopback with tailnet auth.",
|
|
89
|
+
sessionTitle: "Session hygiene",
|
|
90
|
+
sessionText: "Use /new or sessions.patch to reset context.",
|
|
91
|
+
cronTitle: "Cron reminders",
|
|
92
|
+
cronText: "Use isolated sessions for recurring runs.",
|
|
93
|
+
},
|
|
94
|
+
auth: {
|
|
95
|
+
required: "This gateway requires auth. Add a token or password, then click Connect.",
|
|
96
|
+
failed:
|
|
97
|
+
"Auth failed. Re-copy a tokenized URL with {command}, or update the token, then click Connect.",
|
|
98
|
+
},
|
|
99
|
+
pairing: {
|
|
100
|
+
hint: "This device needs pairing approval from the gateway host.",
|
|
101
|
+
mobileHint:
|
|
102
|
+
"On mobile? Copy the full URL (including #token=...) from openclaw dashboard --no-open on your desktop.",
|
|
103
|
+
},
|
|
104
|
+
insecure: {
|
|
105
|
+
hint: "This page is HTTP, so the browser blocks device identity. Use HTTPS (Tailscale Serve) or open {url} on the gateway host.",
|
|
106
|
+
stayHttp: "If you must stay on HTTP, set {config} (token-only).",
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
chat: {
|
|
110
|
+
disconnected: "Disconnected from gateway.",
|
|
111
|
+
refreshTitle: "Refresh chat data",
|
|
112
|
+
thinkingToggle: "Toggle assistant thinking/working output",
|
|
113
|
+
focusToggle: "Toggle focus mode (hide sidebar + page header)",
|
|
114
|
+
hideCronSessions: "Hide cron sessions",
|
|
115
|
+
showCronSessions: "Show cron sessions",
|
|
116
|
+
showCronSessionsHidden: "Show cron sessions ({count} hidden)",
|
|
117
|
+
onboardingDisabled: "Disabled during onboarding",
|
|
118
|
+
},
|
|
119
|
+
languages: {
|
|
120
|
+
en: "English",
|
|
121
|
+
zhCN: "简体中文 (Simplified Chinese)",
|
|
122
|
+
zhTW: "繁體中文 (Traditional Chinese)",
|
|
123
|
+
ptBR: "Português (Brazilian Portuguese)",
|
|
124
|
+
de: "Deutsch (German)",
|
|
125
|
+
},
|
|
126
|
+
cron: {
|
|
127
|
+
summary: {
|
|
128
|
+
enabled: "Enabled",
|
|
129
|
+
yes: "Yes",
|
|
130
|
+
no: "No",
|
|
131
|
+
jobs: "Jobs",
|
|
132
|
+
nextWake: "Next wake",
|
|
133
|
+
refreshing: "Refreshing...",
|
|
134
|
+
refresh: "Refresh",
|
|
135
|
+
},
|
|
136
|
+
jobs: {
|
|
137
|
+
title: "Jobs",
|
|
138
|
+
subtitle: "All scheduled jobs stored in the gateway.",
|
|
139
|
+
shownOf: "{shown} shown of {total}",
|
|
140
|
+
searchJobs: "Search jobs",
|
|
141
|
+
searchPlaceholder: "Name, description, or agent",
|
|
142
|
+
enabled: "Enabled",
|
|
143
|
+
schedule: "Schedule",
|
|
144
|
+
lastRun: "Last run",
|
|
145
|
+
all: "All",
|
|
146
|
+
sort: "Sort",
|
|
147
|
+
nextRun: "Next run",
|
|
148
|
+
recentlyUpdated: "Recently updated",
|
|
149
|
+
name: "Name",
|
|
150
|
+
direction: "Direction",
|
|
151
|
+
ascending: "Ascending",
|
|
152
|
+
descending: "Descending",
|
|
153
|
+
reset: "Reset",
|
|
154
|
+
noMatching: "No matching jobs.",
|
|
155
|
+
loading: "Loading...",
|
|
156
|
+
loadMore: "Load more jobs",
|
|
157
|
+
},
|
|
158
|
+
runs: {
|
|
159
|
+
title: "Run history",
|
|
160
|
+
subtitleAll: "Latest runs across all jobs.",
|
|
161
|
+
subtitleJob: "Latest runs for {title}.",
|
|
162
|
+
scope: "Scope",
|
|
163
|
+
allJobs: "All jobs",
|
|
164
|
+
selectedJob: "Selected job",
|
|
165
|
+
searchRuns: "Search runs",
|
|
166
|
+
searchPlaceholder: "Summary, error, or job",
|
|
167
|
+
newestFirst: "Newest first",
|
|
168
|
+
oldestFirst: "Oldest first",
|
|
169
|
+
status: "Status",
|
|
170
|
+
delivery: "Delivery",
|
|
171
|
+
clear: "Clear",
|
|
172
|
+
allStatuses: "All statuses",
|
|
173
|
+
allDelivery: "All delivery",
|
|
174
|
+
selectJobHint: "Select a job to inspect run history.",
|
|
175
|
+
noMatching: "No matching runs.",
|
|
176
|
+
loadMore: "Load more runs",
|
|
177
|
+
runStatusOk: "OK",
|
|
178
|
+
runStatusError: "Error",
|
|
179
|
+
runStatusSkipped: "Skipped",
|
|
180
|
+
runStatusUnknown: "Unknown",
|
|
181
|
+
deliveryDelivered: "Delivered",
|
|
182
|
+
deliveryNotDelivered: "Not delivered",
|
|
183
|
+
deliveryUnknown: "Unknown",
|
|
184
|
+
deliveryNotRequested: "Not requested",
|
|
185
|
+
},
|
|
186
|
+
form: {
|
|
187
|
+
editJob: "Edit Job",
|
|
188
|
+
newJob: "New Job",
|
|
189
|
+
updateSubtitle: "Update the selected scheduled job.",
|
|
190
|
+
createSubtitle: "Create a scheduled wakeup or agent run.",
|
|
191
|
+
required: "Required",
|
|
192
|
+
requiredSr: "required",
|
|
193
|
+
basics: "Basics",
|
|
194
|
+
basicsSub: "Name it, choose the assistant, and set enabled state.",
|
|
195
|
+
fieldName: "Name",
|
|
196
|
+
description: "Description",
|
|
197
|
+
agentId: "Agent ID",
|
|
198
|
+
namePlaceholder: "Morning brief",
|
|
199
|
+
descriptionPlaceholder: "Optional context for this job",
|
|
200
|
+
agentPlaceholder: "main or ops",
|
|
201
|
+
agentHelp: "Start typing to pick a known agent, or enter a custom one.",
|
|
202
|
+
schedule: "Schedule",
|
|
203
|
+
scheduleSub: "Control when this job runs.",
|
|
204
|
+
every: "Every",
|
|
205
|
+
at: "At",
|
|
206
|
+
cronOption: "Cron",
|
|
207
|
+
runAt: "Run at",
|
|
208
|
+
unit: "Unit",
|
|
209
|
+
minutes: "Minutes",
|
|
210
|
+
hours: "Hours",
|
|
211
|
+
days: "Days",
|
|
212
|
+
expression: "Expression",
|
|
213
|
+
expressionPlaceholder: "0 7 * * *",
|
|
214
|
+
everyAmountPlaceholder: "30",
|
|
215
|
+
timezoneOptional: "Timezone (optional)",
|
|
216
|
+
timezonePlaceholder: "America/Los_Angeles",
|
|
217
|
+
timezoneHelp: "Pick a common timezone or enter any valid IANA timezone.",
|
|
218
|
+
jitterHelp: "Need jitter? Use Advanced → Stagger window / Stagger unit.",
|
|
219
|
+
execution: "Execution",
|
|
220
|
+
executionSub: "Choose when to wake, and what this job should do.",
|
|
221
|
+
session: "Session",
|
|
222
|
+
main: "Main",
|
|
223
|
+
isolated: "Isolated",
|
|
224
|
+
sessionHelp: "Main posts a system event. Isolated runs a dedicated agent turn.",
|
|
225
|
+
wakeMode: "Wake mode",
|
|
226
|
+
now: "Now",
|
|
227
|
+
nextHeartbeat: "Next heartbeat",
|
|
228
|
+
wakeModeHelp: "Now triggers immediately. Next heartbeat waits for the next cycle.",
|
|
229
|
+
payloadKind: "What should run?",
|
|
230
|
+
systemEvent: "Post message to main timeline",
|
|
231
|
+
agentTurn: "Run assistant task (isolated)",
|
|
232
|
+
systemEventHelp:
|
|
233
|
+
"Sends your text to the gateway main timeline (good for reminders/triggers).",
|
|
234
|
+
agentTurnHelp: "Starts an assistant run in its own session using your prompt.",
|
|
235
|
+
timeoutSeconds: "Timeout (seconds)",
|
|
236
|
+
timeoutPlaceholder: "Optional, e.g. 90",
|
|
237
|
+
timeoutHelp:
|
|
238
|
+
"Optional. Leave blank to use the gateway default timeout behavior for this run.",
|
|
239
|
+
mainTimelineMessage: "Main timeline message",
|
|
240
|
+
assistantTaskPrompt: "Assistant task prompt",
|
|
241
|
+
deliverySection: "Delivery",
|
|
242
|
+
deliverySub: "Choose where run summaries are sent.",
|
|
243
|
+
resultDelivery: "Result delivery",
|
|
244
|
+
announceDefault: "Announce summary (default)",
|
|
245
|
+
webhookPost: "Webhook POST",
|
|
246
|
+
noneInternal: "None (internal)",
|
|
247
|
+
deliveryHelp: "Announce posts a summary to chat. None keeps execution internal.",
|
|
248
|
+
webhookUrl: "Webhook URL",
|
|
249
|
+
channel: "Channel",
|
|
250
|
+
webhookPlaceholder: "https://example.com/cron",
|
|
251
|
+
channelHelp: "Choose which connected channel receives the summary.",
|
|
252
|
+
webhookHelp: "Send run summaries to a webhook endpoint.",
|
|
253
|
+
to: "To",
|
|
254
|
+
toPlaceholder: "+1555... or chat id",
|
|
255
|
+
toHelp: "Optional recipient override (chat id, phone, or user id).",
|
|
256
|
+
advanced: "Advanced",
|
|
257
|
+
advancedHelp:
|
|
258
|
+
"Optional overrides for delivery guarantees, schedule jitter, and model controls.",
|
|
259
|
+
deleteAfterRun: "Delete after run",
|
|
260
|
+
deleteAfterRunHelp: "Best for one-shot reminders that should auto-clean up.",
|
|
261
|
+
clearAgentOverride: "Clear agent override",
|
|
262
|
+
clearAgentHelp: "Force this job to use the gateway default assistant.",
|
|
263
|
+
exactTiming: "Exact timing (no stagger)",
|
|
264
|
+
exactTimingHelp: "Run on exact cron boundaries with no spread.",
|
|
265
|
+
staggerWindow: "Stagger window",
|
|
266
|
+
staggerUnit: "Stagger unit",
|
|
267
|
+
staggerPlaceholder: "30",
|
|
268
|
+
seconds: "Seconds",
|
|
269
|
+
model: "Model",
|
|
270
|
+
modelPlaceholder: "openai/gpt-5.2",
|
|
271
|
+
modelHelp: "Start typing to pick a known model, or enter a custom one.",
|
|
272
|
+
thinking: "Thinking",
|
|
273
|
+
thinkingPlaceholder: "low",
|
|
274
|
+
thinkingHelp: "Use a suggested level or enter a provider-specific value.",
|
|
275
|
+
bestEffortDelivery: "Best effort delivery",
|
|
276
|
+
bestEffortHelp: "Do not fail the job if delivery itself fails.",
|
|
277
|
+
cantAddYet: "Can't add job yet",
|
|
278
|
+
fillRequired: "Fill the required fields below to enable submit.",
|
|
279
|
+
fixFields: "Fix {count} field to continue.",
|
|
280
|
+
fixFieldsPlural: "Fix {count} fields to continue.",
|
|
281
|
+
saving: "Saving...",
|
|
282
|
+
saveChanges: "Save changes",
|
|
283
|
+
addJob: "Add job",
|
|
284
|
+
cancel: "Cancel",
|
|
285
|
+
},
|
|
286
|
+
jobList: {
|
|
287
|
+
allJobs: "all jobs",
|
|
288
|
+
selectJob: "(select a job)",
|
|
289
|
+
enabled: "enabled",
|
|
290
|
+
disabled: "disabled",
|
|
291
|
+
edit: "Edit",
|
|
292
|
+
clone: "Clone",
|
|
293
|
+
disable: "Disable",
|
|
294
|
+
enable: "Enable",
|
|
295
|
+
run: "Run",
|
|
296
|
+
history: "History",
|
|
297
|
+
remove: "Remove",
|
|
298
|
+
},
|
|
299
|
+
jobDetail: {
|
|
300
|
+
system: "System",
|
|
301
|
+
prompt: "Prompt",
|
|
302
|
+
delivery: "Delivery",
|
|
303
|
+
agent: "Agent",
|
|
304
|
+
},
|
|
305
|
+
jobState: {
|
|
306
|
+
status: "Status",
|
|
307
|
+
next: "Next",
|
|
308
|
+
last: "Last",
|
|
309
|
+
},
|
|
310
|
+
runEntry: {
|
|
311
|
+
noSummary: "No summary.",
|
|
312
|
+
runAt: "Run at",
|
|
313
|
+
openRunChat: "Open run chat",
|
|
314
|
+
next: "Next {rel}",
|
|
315
|
+
due: "Due {rel}",
|
|
316
|
+
},
|
|
317
|
+
errors: {
|
|
318
|
+
nameRequired: "Name is required.",
|
|
319
|
+
scheduleAtInvalid: "Enter a valid date/time.",
|
|
320
|
+
everyAmountInvalid: "Interval must be greater than 0.",
|
|
321
|
+
cronExprRequired: "Cron expression is required.",
|
|
322
|
+
staggerAmountInvalid: "Stagger must be greater than 0.",
|
|
323
|
+
systemTextRequired: "System text is required.",
|
|
324
|
+
agentMessageRequired: "Agent message is required.",
|
|
325
|
+
timeoutInvalid: "If set, timeout must be greater than 0 seconds.",
|
|
326
|
+
webhookUrlRequired: "Webhook URL is required.",
|
|
327
|
+
webhookUrlInvalid: "Webhook URL must start with http:// or https://.",
|
|
328
|
+
invalidRunTime: "Invalid run time.",
|
|
329
|
+
invalidIntervalAmount: "Invalid interval amount.",
|
|
330
|
+
cronExprRequiredShort: "Cron expression required.",
|
|
331
|
+
invalidStaggerAmount: "Invalid stagger amount.",
|
|
332
|
+
systemEventTextRequired: "System event text required.",
|
|
333
|
+
agentMessageRequiredShort: "Agent message required.",
|
|
334
|
+
nameRequiredShort: "Name required.",
|
|
335
|
+
},
|
|
336
|
+
},
|
|
337
|
+
};
|