openclaw-multi-auto 1.0.9 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{accounts-C_lW3Ag9.js → accounts-BOzyfwW4.js} +2 -2
- package/dist/{accounts-BVgYdU9W.js → accounts-BtEMxtPK.js} +1 -1
- package/dist/{accounts-BU-CeDai.js → accounts-CUYZBSKh.js} +1 -1
- package/dist/{accounts-C9HcPI9h.js → accounts-L9ByEpnP.js} +2 -2
- package/dist/{accounts-DJaYqD2E.js → accounts-khXX75l1.js} +7 -7
- package/dist/{accounts-Tgelvk0C.js → accounts-yfBeCZtS.js} +17 -17
- package/dist/{acp-cli-oWFHnS7i.js → acp-cli-CA2oCCEA.js} +8 -8
- package/dist/{active-listener-BEdprTkn.js → active-listener-D1yqT1cw.js} +2 -2
- package/dist/{agent-scope-BRElciAf.js → agent-scope-NQ9CtXYN.js} +17 -17
- package/dist/{agents-CujsWz9d.js → agents-BWVlofyv.js} +14 -14
- package/dist/{agents.config-C42STger.js → agents.config-QVfqc4C-.js} +2 -2
- package/dist/{api-key-rotation-BJpKWXy0.js → api-key-rotation-DtsNS2Nb.js} +2 -2
- package/dist/{api-key-rotation-BbuLHl0_.js → api-key-rotation-Vix80AUw.js} +1 -1
- package/dist/{audio-preflight-Yg1vzPE1.js → audio-preflight-DUtdCXjJ.js} +34 -34
- package/dist/{audio-preflight-C58LeYZM.js → audio-preflight-DpxQCpsA.js} +32 -32
- package/dist/{audio-transcription-runner-B8jbozH5.js → audio-transcription-runner-28fcRNNi.js} +12 -12
- package/dist/{audio-transcription-runner-D1cvrZ6s.js → audio-transcription-runner-DYKvqK54.js} +23 -23
- package/dist/{audit-membership-runtime-Dntemq07.js → audit-membership-runtime-DWyHWAHM.js} +4 -4
- package/dist/{audit-DtlAv66L.js → audit-oC--RZy0.js} +29 -29
- package/dist/{auth-Mj21c_GN.js → auth-YB6m93-M.js} +1 -1
- package/dist/{auth-choice-CEycltU4.js → auth-choice-CsSQLEkP.js} +13 -13
- package/dist/{auth-choice-CGHVedXa.js → auth-choice-gp-h1aBd.js} +11 -11
- package/dist/{auth-choice.apply-helpers-D4YQXYfc.js → auth-choice.apply-helpers-CPpuynsT.js} +1 -1
- package/dist/{auth-profiles-CdLTlJLc.js → auth-profiles-15pq9j9V.js} +16 -16
- package/dist/{auth-token-7kzDLVhb.js → auth-token-Bwn8N6KA.js} +1 -1
- package/dist/{banner-CpzKVd4-.js → banner-hcZ0XNXv.js} +2 -2
- package/dist/{bonjour-discovery-BuS9wF_p.js → bonjour-discovery-2btw06uD.js} +1 -1
- package/dist/{browser-cli-BVtbvQ3Z.js → browser-cli-C4PdLYHy.js} +12 -12
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +51 -51
- package/dist/bundled/bootstrap-extra-files/handler.js +6 -6
- package/dist/bundled/command-logger/handler.js +2 -2
- package/dist/bundled/session-memory/handler.js +51 -51
- package/dist/{call-Dp9SDkqK.js → call-CZgRbVYm.js} +10 -10
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-account-context-ESLVGdUf.js → channel-account-context-BYiOuxnf.js} +5 -5
- package/dist/{channel-activity-LfmEkdDN.js → channel-activity-D9K6yeu8.js} +1 -1
- package/dist/{channel-activity-BDnjYF7B.js → channel-activity-xHOMiarp.js} +3 -3
- package/dist/{channel-options-CsYaFB_4.js → channel-options-DJkf_8wi.js} +3 -3
- package/dist/{channel-selection-DFJsYFPo.js → channel-selection-BpIsCVV5.js} +1 -1
- package/dist/{channel-web-DzRsJEE4.js → channel-web-wb1My1Yi.js} +17 -17
- package/dist/{channels-cli-CpfeOXtJ.js → channels-cli-DlQONtY9.js} +93 -93
- package/dist/{channels-status-issues-6V9ktlZD.js → channels-status-issues-Hj-GOSVm.js} +1 -1
- package/dist/{chrome-CRBG2YP_.js → chrome-DwizpzOC.js} +26 -26
- package/dist/{chrome-CyM61Cn2.js → chrome-L_icBVLq.js} +4 -4
- package/dist/{clawbot-cli-COtnakIJ.js → clawbot-cli-CyTZUVIJ.js} +11 -11
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-jnT1hYPO.js → cli-CNTrB-ni.js} +73 -73
- package/dist/{client-C-wA75vx.js → client-g0366Z73.js} +2 -2
- package/dist/{command-registry-g5tDqdAU.js → command-registry-VOmumlmD.js} +11 -11
- package/dist/{command-secret-targets-u3eWn-W3.js → command-secret-targets-CIMuIdbL.js} +4 -4
- package/dist/{commands-C8pWcFs_.js → commands-DU7At3rY.js} +1 -1
- package/dist/{commands-registry-J6nVL3BQ.js → commands-registry-B_WUa9KB.js} +3 -3
- package/dist/{commands-registry-D5qXbFJn.js → commands-registry-V1zZ5pPC.js} +4 -4
- package/dist/{completion-cli-DQsyli3B.js → completion-cli-pqdmKVTo.js} +13 -13
- package/dist/{config-cli-DUycVHoC.js → config-cli-BqznmzlM.js} +7 -7
- package/dist/{config-guard--Obk2MGi.js → config-guard-D8jiLjr7.js} +3 -3
- package/dist/{config-validation-iOxszdEd.js → config-validation-BngLiGoq.js} +3 -3
- package/dist/{configure-Al_pz_5z.js → configure-B--Umf_O.js} +17 -17
- package/dist/{control-ui-assets-DpjfNcTC.js → control-ui-assets-C9ewbI8z.js} +1 -1
- package/dist/{cron-cli-CQ5EZw_b.js → cron-cli-DCRPpI1m.js} +11 -11
- package/dist/{daemon-cli-Bb80Mzv5.js → daemon-cli-DtBzKM_d.js} +15 -15
- package/dist/{daemon-install-B09ifLcJ.js → daemon-install-ckPBUAjJ.js} +4 -4
- package/dist/{daemon-install-helpers-CYpECiEx.js → daemon-install-helpers-BWf-PrgA.js} +11 -11
- package/dist/{deliver-ChbFOwjw.js → deliver-D4o6VIur.js} +21 -21
- package/dist/{deliver-CxF9h9PE.js → deliver-b93aBgie.js} +7 -7
- package/dist/deliver-runtime-CdWd-JQI.js +61 -0
- package/dist/deliver-runtime-P-G3bPjW.js +36 -0
- package/dist/deps-send-discord.runtime-BltWu9GW.js +36 -0
- package/dist/deps-send-discord.runtime-DnbhTFX9.js +26 -0
- package/dist/deps-send-imessage.runtime-BOiQ6mDx.js +25 -0
- package/dist/deps-send-imessage.runtime-CdCif3t7.js +35 -0
- package/dist/deps-send-signal.runtime-CTcl388M.js +24 -0
- package/dist/deps-send-signal.runtime-fHqkSmMW.js +34 -0
- package/dist/deps-send-slack.runtime-CCqBz4Kg.js +22 -0
- package/dist/deps-send-slack.runtime-CkyZO7ln.js +32 -0
- package/dist/{deps-send-telegram.runtime-B6wp3kx8.js → deps-send-telegram.runtime-C--B69CN.js} +16 -16
- package/dist/deps-send-telegram.runtime-DGSKTCpH.js +27 -0
- package/dist/deps-send-whatsapp.runtime-BkoMLlCM.js +119 -0
- package/dist/deps-send-whatsapp.runtime-CJkTHkah.js +60 -0
- package/dist/{devices-cli-C0dUbeL4.js → devices-cli-D6V059Dh.js} +8 -8
- package/dist/{diagnostic-Co6Kghr-.js → diagnostic-Bn4PZjMZ.js} +2 -2
- package/dist/{diagnostic-BfiudAAN.js → diagnostic-BpP9UBCE.js} +1 -1
- package/dist/{diagnostics-DCWM_8Ur.js → diagnostics---0c2_jo.js} +5 -5
- package/dist/{directory-cli-Dlws13Di.js → directory-cli-RYC34-EU.js} +7 -7
- package/dist/{dns-cli-But7QdAw.js → dns-cli-CElNoV5S.js} +5 -5
- package/dist/{dock-BbUkruOF.js → dock-nA2DVPCV.js} +4 -4
- package/dist/{docs-cli-Ck2IKAtw.js → docs-cli-Bv7ltPvi.js} +4 -4
- package/dist/{doctor-completion-Nat1HXE1.js → doctor-completion-CQIiN7rY.js} +2 -2
- package/dist/{doctor-config-flow-WCCoUXeB.js → doctor-config-flow-BOAryh5P.js} +15 -15
- package/dist/{enable-C3H8BtN4.js → enable-688HYBNS.js} +1 -1
- package/dist/entry.js +2 -2
- package/dist/{errors-xt401nuk.js → errors-CCLeFWAg.js} +1 -1
- package/dist/{exec-approvals-allowlist-ySf2Yo5n.js → exec-approvals-allowlist-C0Eya3rT.js} +1 -1
- package/dist/{exec-approvals-cli-DhLLOys6.js → exec-approvals-cli-BYYerKp8.js} +16 -16
- package/dist/{exec-safe-bin-runtime-policy-DnXViOlF.js → exec-safe-bin-runtime-policy-BmJmfDRo.js} +2 -2
- package/dist/{fetch-D-SiVqBm.js → fetch-BhAHVdwx.js} +3 -3
- package/dist/{fetch-DuraYswo.js → fetch-BlJWzEP6.js} +5 -5
- package/dist/{fetch-guard-CKYBfJ66.js → fetch-guard-BbBdhWz_.js} +1 -1
- package/dist/{fetch-guard-DWr0d00H.js → fetch-guard-ChYBwfiy.js} +2 -2
- package/dist/{frontmatter-BkTfEZ93.js → frontmatter-CvaMP376.js} +3 -3
- package/dist/{fs-safe-CTYUrIgQ.js → fs-safe-0jAo_Whb.js} +4 -4
- package/dist/{fs-safe-jMDpsYew.js → fs-safe-CFLs-j60.js} +24 -24
- package/dist/{gateway-cli--atF6LYo.js → gateway-cli-DOYWSRqa.js} +153 -153
- package/dist/{gateway-rpc-DYyQQ1z9.js → gateway-rpc-w6t8Eq_1.js} +1 -1
- package/dist/{github-copilot-token-BDioPmd6.js → github-copilot-token-D13V9YBz.js} +7 -7
- package/dist/{health-BDJ72U4Z.js → health-C1EstYHd.js} +11 -11
- package/dist/{hooks-cli-r0UX8B9a.js → hooks-cli-BFMve5sG.js} +81 -81
- package/dist/{hooks-status-CxBdpBry.js → hooks-status-DBnEWOEP.js} +1 -1
- package/dist/{image-C7RmnYxa.js → image-Bbn53mzj.js} +6 -6
- package/dist/{image-CyHTO86Q.js → image-Bw71y73Q.js} +5 -5
- package/dist/{image-ops-pjs5W0CZ.js → image-ops-AJL9tN3_.js} +10 -10
- package/dist/{image-ops-BuUnEOE0.js → image-ops-CehkHxmW.js} +2 -2
- package/dist/image-runtime-6jhrqcle.js +55 -0
- package/dist/image-runtime-CVv2ra9J.js +29 -0
- package/dist/{inspect-BeU4yMp2.js → inspect-CUxeDA8c.js} +4 -4
- package/dist/{install-safe-path-BiL8OJvK.js → install-safe-path-BX58wFBl.js} +25 -25
- package/dist/{installs-BwKmG0Uy.js → installs-B-xr0Fzq.js} +9 -9
- package/dist/{ipv4-BoGwfnEw.js → ipv4-C4Yt-xid.js} +1 -1
- package/dist/{ir-B83looB-.js → ir-DAP-B-Xw.js} +8 -8
- package/dist/{ir-Da7Ahsqc.js → ir-otKVkb4a.js} +8 -8
- package/dist/{issue-format-CJ89_-9v.js → issue-format-DSksfKiV.js} +1 -1
- package/dist/{json-files-CuJjdF_0.js → json-files-rR19q30D.js} +8 -8
- package/dist/{legacy-names-DOC03BkU.js → legacy-names-TyzbVqa_.js} +1 -1
- package/dist/{lifecycle-core-BzuWBBm8.js → lifecycle-core-DVwen0ks.js} +5 -5
- package/dist/llm-slug-generator.js +51 -51
- package/dist/{logger-BfjWMCSD.js → logger-DMZQQtxK.js} +7 -7
- package/dist/{login-VkQ9MW3d.js → login-BcRaGQb6.js} +3 -3
- package/dist/{login-CrIwcrVI.js → login-DiCctRo1.js} +5 -5
- package/dist/{login-qr-BVMQ-xQz.js → login-qr-C9D47WEZ.js} +6 -6
- package/dist/{login-qr-BpPDZdl_.js → login-qr-MUbXgjtd.js} +10 -10
- package/dist/{logs-cli-DWHhSnWs.js → logs-cli-B3TG2lp8.js} +9 -9
- package/dist/{manager-1bvuGrNR.js → manager-BW_NSIMl.js} +13 -13
- package/dist/{manager-BUBwl6M6.js → manager-iwcRf3Xc.js} +14 -14
- package/dist/manager-runtime-BN6VevdC.js +18 -0
- package/dist/{manager-runtime-H9iQnw64.js → manager-runtime-D3KqpRT7.js} +9 -9
- package/dist/{manifest-registry-DVviqWVY.js → manifest-registry-CJb8odRF.js} +1 -1
- package/dist/{memory-cli-DarWCbU6.js → memory-cli-DGsJx7YM.js} +12 -12
- package/dist/{model-BLV8y_N-.js → model-B792l3Cn.js} +2 -2
- package/dist/{model-catalog-DTcBkUlX.js → model-catalog-DZ6kl2Ko.js} +3 -3
- package/dist/{model-picker-D-fTOOzb.js → model-picker-6fHys0wK.js} +4 -4
- package/dist/{model-selection-Dna0Gz1k.js → model-selection-idoqPmw0.js} +43 -43
- package/dist/{models-CmjutMmh.js → models-DerrMmwF.js} +17 -17
- package/dist/{models-cli-BZFQX22p.js → models-cli-BkTZg_4v.js} +78 -78
- package/dist/{models-config-DNcDbV_G.js → models-config-Dabs9Kdv.js} +6 -6
- package/dist/{net-D5fSREu4.js → net-BAIqYNz0.js} +2 -2
- package/dist/{node-cli-Cnq-PJTp.js → node-cli-DoEq4zeG.js} +33 -33
- package/dist/{node-command-policy-B5BMBBJP.js → node-command-policy-DRhSc90G.js} +1 -1
- package/dist/{node-service-BpYZAvpl.js → node-service-CcgtNIeT.js} +1 -1
- package/dist/{nodes-cli-CkrDOWpv.js → nodes-cli--d9RiCnK.js} +16 -16
- package/dist/{nodes-screen-DfsQohWd.js → nodes-screen-BTND5VDq.js} +7 -7
- package/dist/{npm-pack-install-E-mkrZ55.js → npm-pack-install-CGUDOSKz.js} +18 -18
- package/dist/{npm-resolution-BUUmg5ON.js → npm-resolution-CAoULCWM.js} +4 -4
- package/dist/{onboard-DINGSS9R.js → onboard-CMZRkPVc.js} +6 -6
- package/dist/{onboard-channels-Di4MjWDY.js → onboard-channels-SlJu6XWJ.js} +21 -21
- package/dist/{onboard-custom-DITBQuWQ.js → onboard-custom-EzfL89yz.js} +4 -4
- package/dist/{onboard-helpers-DO7u2ZOy.js → onboard-helpers-lGpaVp03.js} +10 -10
- package/dist/{onboard-hooks-K02_ZWDq.js → onboard-hooks-B7TMiJoY.js} +4 -4
- package/dist/{onboard-remote-5-ugiSN2.js → onboard-remote-nvWS7on7.js} +4 -4
- package/dist/{onboard-skills-CSzbC2KZ.js → onboard-skills-hz91W03u.js} +4 -4
- package/dist/{onboarding-BM4dvUK6.js → onboarding-CTPuMVQI.js} +14 -14
- package/dist/{onboarding.finalize-p_RDh7ET.js → onboarding.finalize-DLzl5ZOg.js} +87 -87
- package/dist/{onboarding.gateway-config-DldlRfms.js → onboarding.gateway-config-C4MoTr60.js} +18 -18
- package/dist/{onboarding.secret-input-BIRIJiCU.js → onboarding.secret-input-BFD0OW4X.js} +1 -1
- package/dist/{openai-model-default-CY2Nk4cn.js → openai-model-default-h4LbSR7f.js} +2 -2
- package/dist/{openclaw-root-BFfBQ6FD.js → openclaw-root-BU3lu8pM.js} +8 -8
- package/dist/{outbound-ChDjtuD6.js → outbound-C2kanETZ.js} +6 -6
- package/dist/{outbound-attachment-DfWsfe2N.js → outbound-attachment-CAJBGcna.js} +2 -2
- package/dist/{outbound-attachment-DqHlD21U.js → outbound-attachment-DBrYWX8h.js} +2 -2
- package/dist/{outbound-DPdJe7e1.js → outbound-kbHYt1JW.js} +3 -3
- package/dist/{pairing-cli-D2VZxWg3.js → pairing-cli-CXbmkz7Z.js} +8 -8
- package/dist/{pairing-labels-D4rnJ5pJ.js → pairing-labels-CaPLIhlh.js} +1 -1
- package/dist/{pairing-store-BXArq4hn.js → pairing-store-Brs9aNn_.js} +3 -3
- package/dist/{path-alias-guards-DbNvNQar.js → path-alias-guards-DhIwq92y.js} +3 -3
- package/dist/{path-alias-guards-BzvdLvTI.js → path-alias-guards-DqXRZmsL.js} +1 -1
- package/dist/{path-safety-ClQO4BB6.js → path-safety-BjIM4N4t.js} +1 -1
- package/dist/{paths-Cvc9EM8Y.js → paths-C6TxBCvO.js} +5 -5
- package/dist/{paths-Bkr-BCxW.js → paths-CCxysrzL.js} +4 -4
- package/dist/{paths-BB_1ZWOj.js → paths-Cv63xST_.js} +9 -9
- package/dist/{pi-embedded-BC_GWGuw.js → pi-embedded-BaGj07T0.js} +167 -167
- package/dist/{pi-embedded-helpers-oXDyXTD8.js → pi-embedded-helpers-DC2OtKrl.js} +6 -6
- package/dist/{pi-embedded-helpers-CbIShbOM.js → pi-embedded-helpers-wy0DZvx1.js} +52 -52
- package/dist/{pi-model-discovery-Dymwdjt0.js → pi-model-discovery-BGgOlX8N.js} +7 -7
- package/dist/{pi-model-discovery-CECkJMCt.js → pi-model-discovery-DOb5RTev.js} +1 -1
- package/dist/pi-model-discovery-runtime-Bwmi4Ev8.js +11 -0
- package/dist/{pi-model-discovery-runtime-g7UP-SFR.js → pi-model-discovery-runtime-DShjmiiF.js} +5 -5
- package/dist/{pi-tools.before-tool-call.runtime-Df7B-ggW.js → pi-tools.before-tool-call.runtime-B079pVah.js} +5 -5
- package/dist/{pi-tools.before-tool-call.runtime-Cwab_5W1.js → pi-tools.before-tool-call.runtime-BuLxSyx9.js} +9 -9
- package/dist/{pi-tools.policy-CydUEzFi.js → pi-tools.policy-DZ-X86Va.js} +5 -5
- package/dist/{plugin-auto-enable-BE4ZVjAL.js → plugin-auto-enable-BCMqEDjQ.js} +3 -3
- package/dist/{plugin-registry-DXW3eyib.js → plugin-registry-BPlCWMur.js} +3 -3
- package/dist/plugin-sdk/discord.js +6 -6
- package/dist/{plugins-4Rj4OjLY.js → plugins-CWkRQYDj.js} +11 -11
- package/dist/{plugins-VAZrrfgw.js → plugins-DCxT-37x.js} +2 -2
- package/dist/{plugins-cli-BQJOOVMx.js → plugins-cli-D9ILEfyb.js} +83 -83
- package/dist/{ports-DMkRSlnH.js → ports-BlCLhwbc.js} +1 -1
- package/dist/{ports-DogAV7pa.js → ports-CER5YPnN.js} +2 -2
- package/dist/{program-BA11qFx1.js → program-CV56xn7w.js} +81 -81
- package/dist/{prompt-select-styled-B0GS28ia.js → prompt-select-styled-BOa5I_PU.js} +40 -40
- package/dist/{provider-auth-helpers-CrGL-jik.js → provider-auth-helpers-c6mNCUXO.js} +5 -5
- package/dist/{proxy-env-wKO3g8Yv.js → proxy-env-BMrSVckF.js} +1 -1
- package/dist/{proxy-env-DlmzDx8x.js → proxy-env-Cq5gdrbj.js} +1 -1
- package/dist/{proxy-fetch-B2pEfjbR.js → proxy-fetch-CCjEYbFm.js} +1 -1
- package/dist/{push-apns-BEwBjZ0a.js → push-apns-FOkPD05E.js} +5 -5
- package/dist/{pw-ai-D2wlMJtN.js → pw-ai-Cl1Lc7RC.js} +14 -14
- package/dist/{pw-ai-CnbxziFP.js → pw-ai-CxBU3aK5.js} +18 -18
- package/dist/{qmd-manager-BtIKUaO9.js → qmd-manager-BsYsO9Ii.js} +10 -10
- package/dist/{qmd-manager-Dp6PJ8zQ.js → qmd-manager-DEJMqoGd.js} +20 -20
- package/dist/{qr-cli-CFz9kS5X.js → qr-cli-BD2jK4fg.js} +2 -2
- package/dist/{query-expansion-BrSWVbaE.js → query-expansion-1UTIWjP6.js} +12 -12
- package/dist/{query-expansion-CX-1fS52.js → query-expansion-DtLc3wjL.js} +6 -6
- package/dist/{redact-COik8ET1.js → redact-ClbcYG1J.js} +1 -1
- package/dist/{redact-snapshot-Bs4goggz.js → redact-snapshot-D_qQD4A-.js} +1 -1
- package/dist/{register.agent-D641ju8B.js → register.agent-tbPA5YAy.js} +94 -94
- package/dist/register.configure-DuwRrXc2.js +165 -0
- package/dist/{register.maintenance-BFkk8MEH.js → register.maintenance-DrqDlV5b.js} +95 -95
- package/dist/{register.message-D5uE_Hop.js → register.message-CoKXNaU0.js} +74 -74
- package/dist/{register.onboard-zHFvSwFr.js → register.onboard-CSWOSL9O.js} +18 -18
- package/dist/{register.setup-uTbv3_P1.js → register.setup-DBx5JX6h.js} +21 -21
- package/dist/{register.status-health-sessions-CB7t-JQx.js → register.status-health-sessions-D1bPtfep.js} +88 -88
- package/dist/{register.subclis-MEiNmuy5.js → register.subclis-QGJNmjss.js} +31 -31
- package/dist/{rpc-DVfuVmy9.js → rpc-DkMrTUww.js} +1 -1
- package/dist/{run-main-mrvunzuy.js → run-main-CPftxqTe.js} +92 -92
- package/dist/{run-with-concurrency-BgYfgkXT.js → run-with-concurrency-D_ZpbgEG.js} +4 -4
- package/dist/{runtime-C87FQrrv.js → runtime-MAH2Oph4.js} +3 -3
- package/dist/{runtime-config-collectors-BQaC477D.js → runtime-config-collectors-BJMV6Mt1.js} +1 -1
- package/dist/{runtime-whatsapp-login.runtime-DjdgScUI.js → runtime-whatsapp-login.runtime-CGYWl9eB.js} +7 -7
- package/dist/runtime-whatsapp-login.runtime-IeylZEl4.js +13 -0
- package/dist/runtime-whatsapp-outbound.runtime-ClBRuLsq.js +22 -0
- package/dist/{runtime-whatsapp-outbound.runtime-B74K7opl.js → runtime-whatsapp-outbound.runtime-hZEfYaRM.js} +15 -15
- package/dist/{sandbox-Ct-_lzi1.js → sandbox-0TbzPJaS.js} +18 -18
- package/dist/{sandbox-cli-C3RoXFRE.js → sandbox-cli-NLaxffXl.js} +25 -25
- package/dist/{secrets-cli-B3hqCxvs.js → secrets-cli-KLGbYet6.js} +11 -11
- package/dist/{security-cli-DcHIyXr7.js → security-cli-EIEkcYVb.js} +42 -42
- package/dist/{send-dfu6_rgf.js → send-BQERFNyo.js} +5 -5
- package/dist/{send-CnRP4P-G.js → send-BW-ZtYG3.js} +5 -5
- package/dist/{send-L7gRiwyd.js → send-Bj776ESJ.js} +7 -7
- package/dist/{send-2zKwf9NW.js → send-BtZAqquW.js} +11 -11
- package/dist/{send-DAQAKa9Z.js → send-CxgWxXZc.js} +6 -6
- package/dist/{send-5o2p_xjn.js → send-DAMtu9kK.js} +4 -4
- package/dist/{send-PE6cwoTe.js → send-DcxmcFi_.js} +8 -8
- package/dist/{send-6lz6rNVP.js → send-Dx2RkUOZ.js} +6 -6
- package/dist/{send-u1Bo4CSn.js → send-sC6ka831.js} +8 -8
- package/dist/{send-BHTiZcH3.js → send-vmONuVgL.js} +26 -26
- package/dist/{server-context-8pDe2iyd.js → server-context-HJVwPQYn.js} +12 -12
- package/dist/{server-Ci4xtuR9.js → server-kUElNhlY.js} +20 -20
- package/dist/{server-lifecycle-k5daSrde.js → server-lifecycle-BE32unpZ.js} +2 -2
- package/dist/{server-middleware-DMiFT9xU.js → server-middleware-AS2VOYkK.js} +1 -1
- package/dist/{server-node-events-BmnPjNXE.js → server-node-events-DkbZzI6P.js} +74 -74
- package/dist/{service-BhOFtHSw.js → service-CyStNr3d.js} +15 -15
- package/dist/{session-D8ImowSs.js → session-A4QhBRvH.js} +8 -8
- package/dist/{session-DkOjpX3_.js → session-CaCx4rPH.js} +1 -1
- package/dist/{session-utils-DKRmXD2l.js → session-utils-CGqb1oeq.js} +6 -6
- package/dist/{sessions-svLGrv0Z.js → sessions-BV6HNW4h.js} +4 -4
- package/dist/{sessions-BOWPuhe5.js → sessions-BmVDW-7q.js} +15 -15
- package/dist/{shared-CjuadLFV.js → shared-DUQavBtY.js} +3 -3
- package/dist/{shared-CbAkLNrg.js → shared-JW74idb0.js} +1 -1
- package/dist/{skill-commands-DNqJ-kwn.js → skill-commands-CMzBZKG2.js} +9 -9
- package/dist/{skill-commands-TpUsdjev.js → skill-commands-WtIJG0CI.js} +5 -5
- package/dist/{skill-scanner-BZvvItef.js → skill-scanner-DIFsGcqE.js} +6 -6
- package/dist/{skills-DR-vacol.js → skills-7T9PwwL6.js} +3 -3
- package/dist/{skills-7ODkHQYp.js → skills-CE_iqvM5.js} +22 -22
- package/dist/{skills-cli-oay0tY8Z.js → skills-cli-DPavvthL.js} +5 -5
- package/dist/{skills-install-Vmi7xYfa.js → skills-install-BoLfaoWv.js} +6 -6
- package/dist/{skills-status-BmN697ff.js → skills-status-CK5Gnf6i.js} +1 -1
- package/dist/{slash-commands.runtime-BfaheruW.js → slash-commands.runtime-CMGx2xHy.js} +11 -11
- package/dist/slash-commands.runtime-Cpn2tYW4.js +16 -0
- package/dist/slash-dispatch.runtime-BAeJXa56.js +114 -0
- package/dist/slash-dispatch.runtime-DoBAQBU5.js +56 -0
- package/dist/{slash-skill-commands.runtime-D34BKAN-.js → slash-skill-commands.runtime-ChU2tck2.js} +15 -15
- package/dist/slash-skill-commands.runtime-DKMvvdDW.js +20 -0
- package/dist/{status-BcQchPaC.js → status-Bp-K1BEf.js} +27 -27
- package/dist/{status.update-B20UBTDq.js → status.update-ZYUSggzS.js} +2 -2
- package/dist/{store-D89wDcz9.js → store--eR1R_UX.js} +2 -2
- package/dist/{store-DDkqo1sO.js → store-DeASfYEV.js} +5 -5
- package/dist/{subagent-registry-CPxHbyN5.js → subagent-registry-8qHIVhRq.js} +149 -149
- package/dist/subagent-registry-runtime-DVomlbm6.js +114 -0
- package/dist/subagent-registry-runtime-ppWS3tVu.js +56 -0
- package/dist/{subsystem-B45WV3qB.js → subsystem-Di1z8l0Z.js} +14 -14
- package/dist/{system-cli-D2yIJoKU.js → system-cli-C2xNfuQM.js} +9 -9
- package/dist/{system-run-command-BmhbnLTE.js → system-run-command-BPWZk7KI.js} +1 -1
- package/dist/{systemd-DjWVSbAG.js → systemd-Cf-0XKYu.js} +9 -9
- package/dist/{systemd-hints-Do-aQ9jw.js → systemd-hints-CYllYKO0.js} +6 -6
- package/dist/{systemd-linger-DpmnYgKU.js → systemd-linger-zllO90bD.js} +1 -1
- package/dist/{tables-BxyIF0w4.js → tables-CV7Afb0h.js} +1 -1
- package/dist/{tables-mE4cJBN2.js → tables-d739Y1xW.js} +1 -1
- package/dist/{tailnet-0_FsdHP-.js → tailnet-DJFUq7_R.js} +1 -1
- package/dist/{target-errors-KOHiT_JA.js → target-errors-CBI2Ga0y.js} +2 -2
- package/dist/{target-errors-mnlwhAjP.js → target-errors-iVxliVqA.js} +4 -4
- package/dist/{thinking-BeGmb5k6.js → thinking-DXYisHiZ.js} +7 -7
- package/dist/{tokens-q32vI39c.js → tokens-DxnY9ui_.js} +1 -1
- package/dist/{tool-images-RZdHiZcG.js → tool-images-2cBx1W8h.js} +2 -2
- package/dist/{tool-images-CNPfeCmU.js → tool-images-Bn6dB14u.js} +1 -1
- package/dist/{tui-DL6NZZEa.js → tui-DTVy-YhN.js} +6 -6
- package/dist/{tui-cli-BNAYhvpu.js → tui-cli-CexRLJ3a.js} +32 -32
- package/dist/{update-DlS-d52F.js → update-DijPxK0g.js} +3 -3
- package/dist/{update-cli-D8-DqIs2.js → update-cli-9NslG4yR.js} +104 -104
- package/dist/{update-runner-CzTQ7BJT.js → update-runner-B6_UqreW.js} +16 -16
- package/dist/{web-igmw_EhT.js → web-CzWRVmFt.js} +55 -55
- package/dist/web-DGoa03ue.js +118 -0
- package/dist/{webhooks-cli-QdaQhvbT.js → webhooks-cli-B4ZcXTtw.js} +6 -6
- package/dist/{whatsapp-actions-Bp8F0cOF.js → whatsapp-actions-Jm4VW1Ve.js} +17 -17
- package/dist/{whatsapp-actions-BHbJJyqw.js → whatsapp-actions-iEArE_Ez.js} +21 -21
- package/dist/{with-timeout-BMMWHlH3.js → with-timeout-C8-tY12i.js} +3 -3
- package/dist/{workspace-v76gFdZu.js → workspace-CIGzK2_w.js} +1 -1
- package/dist/{workspace-U-DyR64O.js → workspace-CUVC6GX1.js} +20 -20
- package/dist/{workspace-dirs-Cz_Zgtg2.js → workspace-dirs-D4SMysgC.js} +1 -1
- package/dist/{wsl-CvQfS6aU.js → wsl-CsGe5QCP.js} +2 -2
- package/package.json +7 -9
- package/scripts/auth-monitor.sh +89 -0
- package/scripts/bench-cli-startup.ts +200 -0
- package/scripts/bench-model.ts +146 -0
- package/scripts/build-and-run-mac.sh +18 -0
- package/scripts/build-docs-list.mjs +14 -0
- package/scripts/build_icon.sh +59 -0
- package/scripts/bundle-a2ui.sh +95 -0
- package/scripts/canvas-a2ui-copy.ts +40 -0
- package/scripts/changelog-to-html.sh +91 -0
- package/scripts/check-channel-agnostic-boundaries.mjs +343 -0
- package/scripts/check-composite-action-input-interpolation.py +81 -0
- package/scripts/check-ingress-agent-owner-context.mjs +45 -0
- package/scripts/check-no-monolithic-plugin-sdk-entry-imports.ts +103 -0
- package/scripts/check-no-pairing-store-group-auth.mjs +180 -0
- package/scripts/check-no-random-messaging-tmp.mjs +89 -0
- package/scripts/check-no-raw-channel-fetch.mjs +107 -0
- package/scripts/check-no-raw-window-open.mjs +86 -0
- package/scripts/check-no-register-http-handler.mjs +38 -0
- package/scripts/check-pairing-account-scope.mjs +100 -0
- package/scripts/check-plugin-sdk-exports.mjs +157 -0
- package/scripts/check-ts-max-loc.ts +80 -0
- package/scripts/check-webhook-auth-body-order.mjs +55 -0
- package/scripts/ci-changed-scope.d.mts +9 -0
- package/scripts/ci-changed-scope.mjs +141 -0
- package/scripts/claude-auth-status.sh +280 -0
- package/scripts/clawlog.sh +321 -0
- package/scripts/clawtributors-map.json +40 -0
- package/scripts/codesign-mac-app.sh +289 -0
- package/scripts/codespell-dictionary.txt +3 -0
- package/scripts/codespell-ignore.txt +9 -0
- package/scripts/committer +117 -0
- package/scripts/copy-export-html-templates.ts +59 -0
- package/scripts/copy-hook-metadata.ts +55 -0
- package/scripts/copy-plugin-sdk-root-alias.mjs +10 -0
- package/scripts/create-dmg.sh +176 -0
- package/scripts/create-instance.sh +4 -1
- package/scripts/cron_usage_report.ts +273 -0
- package/scripts/debug-claude-usage.ts +391 -0
- package/scripts/dev/discord-acp-plain-language-smoke.ts +868 -0
- package/scripts/dev/gateway-smoke.ts +75 -0
- package/scripts/dev/gateway-ws-client.ts +132 -0
- package/scripts/dev/ios-node-e2e.ts +283 -0
- package/scripts/dev/ios-pull-gateway-log.sh +17 -0
- package/scripts/dev/test-device-pair-telegram.ts +62 -0
- package/scripts/docker/cleanup-smoke/Dockerfile +19 -0
- package/scripts/docker/cleanup-smoke/run.sh +35 -0
- package/scripts/docker/install-sh-common/cli-verify.sh +47 -0
- package/scripts/docker/install-sh-e2e/Dockerfile +17 -0
- package/scripts/docker/install-sh-e2e/run.sh +535 -0
- package/scripts/docker/install-sh-nonroot/Dockerfile +33 -0
- package/scripts/docker/install-sh-nonroot/run.sh +36 -0
- package/scripts/docker/install-sh-smoke/Dockerfile +25 -0
- package/scripts/docker/install-sh-smoke/run.sh +63 -0
- package/scripts/docs-i18n/doc_mode.go +272 -0
- package/scripts/docs-i18n/glossary.go +29 -0
- package/scripts/docs-i18n/go.mod +10 -0
- package/scripts/docs-i18n/go.sum +10 -0
- package/scripts/docs-i18n/html_translate.go +160 -0
- package/scripts/docs-i18n/main.go +273 -0
- package/scripts/docs-i18n/markdown_segments.go +131 -0
- package/scripts/docs-i18n/masking.go +89 -0
- package/scripts/docs-i18n/order.go +37 -0
- package/scripts/docs-i18n/placeholders.go +30 -0
- package/scripts/docs-i18n/process.go +202 -0
- package/scripts/docs-i18n/prompt.go +146 -0
- package/scripts/docs-i18n/segment.go +11 -0
- package/scripts/docs-i18n/tm.go +132 -0
- package/scripts/docs-i18n/translator.go +247 -0
- package/scripts/docs-i18n/util.go +81 -0
- package/scripts/docs-link-audit.mjs +233 -0
- package/scripts/docs-list.js +173 -0
- package/scripts/docs-spellcheck.sh +44 -0
- package/scripts/e2e/Dockerfile +30 -0
- package/scripts/e2e/Dockerfile.qr-import +13 -0
- package/scripts/e2e/doctor-install-switch-docker.sh +160 -0
- package/scripts/e2e/gateway-network-docker.sh +145 -0
- package/scripts/e2e/onboard-docker.sh +570 -0
- package/scripts/e2e/plugins-docker.sh +224 -0
- package/scripts/e2e/qr-import-docker.sh +11 -0
- package/scripts/firecrawl-compare.ts +139 -0
- package/scripts/generate-host-env-security-policy-swift.mjs +74 -0
- package/scripts/generate-secretref-credential-matrix.ts +14 -0
- package/scripts/ghsa-patch.mjs +168 -0
- package/scripts/install-maca.sh +173 -0
- package/scripts/install.ps1 +329 -0
- package/scripts/ios-configure-signing.sh +100 -0
- package/scripts/ios-team-id.sh +207 -0
- package/scripts/label-open-issues.ts +893 -0
- package/scripts/lib/callsite-guard.mjs +45 -0
- package/scripts/lib/pairing-guard-context.mjs +13 -0
- package/scripts/lib/ts-guard-utils.mjs +157 -0
- package/scripts/make_appcast.sh +70 -0
- package/scripts/mobile-reauth.sh +84 -0
- package/scripts/notarize-mac-artifact.sh +65 -0
- package/scripts/npm_publish.sh +48 -0
- package/scripts/package-mac-app.sh +280 -0
- package/scripts/package-mac-dist.sh +93 -0
- package/scripts/podman/openclaw.container.in +28 -0
- package/scripts/pr +1708 -0
- package/scripts/pr-merge +44 -0
- package/scripts/pr-prepare +40 -0
- package/scripts/pr-review +13 -0
- package/scripts/pre-commit/filter-staged-files.mjs +39 -0
- package/scripts/pre-commit/run-node-tool.sh +31 -0
- package/scripts/protocol-gen-swift.ts +247 -0
- package/scripts/protocol-gen.ts +51 -0
- package/scripts/readability-basic-compare.ts +66 -0
- package/scripts/recover-orphaned-processes.sh +191 -0
- package/scripts/release-check.ts +362 -0
- package/scripts/repro/tsx-name-repro.ts +3 -0
- package/scripts/restart-mac.sh +269 -0
- package/scripts/run-node.d.mts +22 -0
- package/scripts/run-node.mjs +263 -0
- package/scripts/run-openclaw-podman.sh +213 -0
- package/scripts/sandbox-browser-entrypoint.sh +127 -0
- package/scripts/sandbox-browser-setup.sh +7 -0
- package/scripts/sandbox-common-setup.sh +40 -0
- package/scripts/sandbox-setup.sh +7 -0
- package/scripts/setup-auth-system.sh +119 -0
- package/scripts/shell-helpers/README.md +226 -0
- package/scripts/shell-helpers/clawdock-helpers.sh +417 -0
- package/scripts/sparkle-build.ts +76 -0
- package/scripts/sqlite-vec-smoke.mjs +38 -0
- package/scripts/sync-dist.sh +171 -0
- package/scripts/sync-labels.ts +100 -0
- package/scripts/sync-moonshot-docs.ts +125 -0
- package/scripts/sync-plugin-versions.ts +108 -0
- package/scripts/systemd/openclaw-auth-monitor.service +14 -0
- package/scripts/systemd/openclaw-auth-monitor.timer +10 -0
- package/scripts/termux-auth-widget.sh +81 -0
- package/scripts/termux-quick-auth.sh +30 -0
- package/scripts/termux-sync-widget.sh +25 -0
- package/scripts/test-cleanup-docker.sh +14 -0
- package/scripts/test-force.ts +59 -0
- package/scripts/test-hotspots.mjs +83 -0
- package/scripts/test-install-sh-docker.sh +72 -0
- package/scripts/test-install-sh-e2e-docker.sh +29 -0
- package/scripts/test-live-gateway-models-docker.sh +33 -0
- package/scripts/test-live-models-docker.sh +34 -0
- package/scripts/test-parallel.mjs +468 -0
- package/scripts/test-perf-budget.mjs +127 -0
- package/scripts/test-shell-completion.ts +223 -0
- package/scripts/ui.js +203 -0
- package/scripts/update-clawtributors.ts +573 -0
- package/scripts/update-clawtributors.types.ts +36 -0
- package/scripts/update-package-with-mirror.sh +67 -0
- package/scripts/watch-node.d.mts +14 -0
- package/scripts/watch-node.mjs +92 -0
- package/scripts/write-build-info.ts +47 -0
- package/scripts/write-cli-compat.ts +74 -0
- package/scripts/write-cli-startup-metadata.ts +93 -0
- package/scripts/write-plugin-sdk-entry-dts.ts +60 -0
- package/scripts/zai-fallback-repro.ts +168 -0
- package/dist/deliver-runtime-B80mXYrL.js +0 -36
- package/dist/deliver-runtime-DixuU_uB.js +0 -61
- package/dist/deps-send-discord.runtime-CDcLcDSt.js +0 -36
- package/dist/deps-send-discord.runtime-DZUccI6Z.js +0 -26
- package/dist/deps-send-imessage.runtime-BGPUVMIE.js +0 -35
- package/dist/deps-send-imessage.runtime-CF3OpoqY.js +0 -25
- package/dist/deps-send-signal.runtime-Cw4-ozeO.js +0 -24
- package/dist/deps-send-signal.runtime-DQDD44_O.js +0 -34
- package/dist/deps-send-slack.runtime-BDsDhS1P.js +0 -22
- package/dist/deps-send-slack.runtime-Cpy77gBG.js +0 -32
- package/dist/deps-send-telegram.runtime-D_4xVasO.js +0 -27
- package/dist/deps-send-whatsapp.runtime-D2sVAclS.js +0 -119
- package/dist/deps-send-whatsapp.runtime-UBgpoWg9.js +0 -60
- package/dist/image-runtime-B2qh5seQ.js +0 -55
- package/dist/image-runtime-DtMbm7AR.js +0 -29
- package/dist/manager-runtime-FO1Sx3W8.js +0 -18
- package/dist/pi-model-discovery-runtime-BeY4EUPp.js +0 -11
- package/dist/register.configure-BrDOSLIq.js +0 -165
- package/dist/runtime-whatsapp-login.runtime-DUb55byQ.js +0 -13
- package/dist/runtime-whatsapp-outbound.runtime-Bii_xSfI.js +0 -22
- package/dist/slash-commands.runtime-CVw6566g.js +0 -16
- package/dist/slash-dispatch.runtime-CMK_EPYG.js +0 -56
- package/dist/slash-dispatch.runtime-D0xInkf3.js +0 -114
- package/dist/slash-skill-commands.runtime-DxZ4z5h6.js +0 -20
- package/dist/subagent-registry-runtime-DdGrQBnQ.js +0 -56
- package/dist/subagent-registry-runtime-SkB2tTaE.js +0 -114
- package/dist/web-DWiOofzq.js +0 -118
- package/install.sh +0 -293
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"context"
|
|
5
|
+
"fmt"
|
|
6
|
+
"os"
|
|
7
|
+
"path/filepath"
|
|
8
|
+
"strings"
|
|
9
|
+
"time"
|
|
10
|
+
|
|
11
|
+
"gopkg.in/yaml.v3"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
func processFile(ctx context.Context, translator *PiTranslator, tm *TranslationMemory, docsRoot, filePath, srcLang, tgtLang string) (bool, error) {
|
|
15
|
+
absPath, relPath, err := resolveDocsPath(docsRoot, filePath)
|
|
16
|
+
if err != nil {
|
|
17
|
+
return false, err
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
content, err := os.ReadFile(absPath)
|
|
21
|
+
if err != nil {
|
|
22
|
+
return false, err
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
frontMatter, body := splitFrontMatter(string(content))
|
|
26
|
+
frontData := map[string]any{}
|
|
27
|
+
if frontMatter != "" {
|
|
28
|
+
if err := yaml.Unmarshal([]byte(frontMatter), &frontData); err != nil {
|
|
29
|
+
return false, fmt.Errorf("frontmatter parse failed for %s: %w", relPath, err)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if err := translateFrontMatter(ctx, translator, tm, frontData, relPath, srcLang, tgtLang); err != nil {
|
|
34
|
+
return false, err
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
body, err = translateHTMLBlocks(ctx, translator, body, srcLang, tgtLang)
|
|
38
|
+
if err != nil {
|
|
39
|
+
return false, err
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
segments, err := extractSegments(body, relPath)
|
|
43
|
+
if err != nil {
|
|
44
|
+
return false, err
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
namespace := cacheNamespace()
|
|
48
|
+
for i := range segments {
|
|
49
|
+
seg := &segments[i]
|
|
50
|
+
seg.CacheKey = cacheKey(namespace, srcLang, tgtLang, seg.SegmentID, seg.TextHash)
|
|
51
|
+
if entry, ok := tm.Get(seg.CacheKey); ok {
|
|
52
|
+
seg.Translated = entry.Translated
|
|
53
|
+
continue
|
|
54
|
+
}
|
|
55
|
+
translated, err := translator.Translate(ctx, seg.Text, srcLang, tgtLang)
|
|
56
|
+
if err != nil {
|
|
57
|
+
return false, fmt.Errorf("translate failed (%s): %w", relPath, err)
|
|
58
|
+
}
|
|
59
|
+
seg.Translated = translated
|
|
60
|
+
entry := TMEntry{
|
|
61
|
+
CacheKey: seg.CacheKey,
|
|
62
|
+
SegmentID: seg.SegmentID,
|
|
63
|
+
SourcePath: relPath,
|
|
64
|
+
TextHash: seg.TextHash,
|
|
65
|
+
Text: seg.Text,
|
|
66
|
+
Translated: translated,
|
|
67
|
+
Provider: providerName,
|
|
68
|
+
Model: modelVersion,
|
|
69
|
+
SrcLang: srcLang,
|
|
70
|
+
TgtLang: tgtLang,
|
|
71
|
+
UpdatedAt: time.Now().UTC().Format(time.RFC3339),
|
|
72
|
+
}
|
|
73
|
+
tm.Put(entry)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
translatedBody := applyTranslations(body, segments)
|
|
77
|
+
updatedFront, err := encodeFrontMatter(frontData, relPath, content)
|
|
78
|
+
if err != nil {
|
|
79
|
+
return false, err
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
outputPath := filepath.Join(docsRoot, tgtLang, relPath)
|
|
83
|
+
if err := os.MkdirAll(filepath.Dir(outputPath), 0o755); err != nil {
|
|
84
|
+
return false, err
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
output := updatedFront + translatedBody
|
|
88
|
+
return false, os.WriteFile(outputPath, []byte(output), 0o644)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
func splitFrontMatter(content string) (string, string) {
|
|
92
|
+
if !strings.HasPrefix(content, "---") {
|
|
93
|
+
return "", content
|
|
94
|
+
}
|
|
95
|
+
lines := strings.Split(content, "\n")
|
|
96
|
+
if len(lines) < 2 {
|
|
97
|
+
return "", content
|
|
98
|
+
}
|
|
99
|
+
endIndex := -1
|
|
100
|
+
for i := 1; i < len(lines); i++ {
|
|
101
|
+
if strings.TrimSpace(lines[i]) == "---" {
|
|
102
|
+
endIndex = i
|
|
103
|
+
break
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if endIndex == -1 {
|
|
107
|
+
return "", content
|
|
108
|
+
}
|
|
109
|
+
front := strings.Join(lines[1:endIndex], "\n")
|
|
110
|
+
body := strings.Join(lines[endIndex+1:], "\n")
|
|
111
|
+
if strings.HasPrefix(body, "\n") {
|
|
112
|
+
body = body[1:]
|
|
113
|
+
}
|
|
114
|
+
return front, body
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
func encodeFrontMatter(frontData map[string]any, relPath string, source []byte) (string, error) {
|
|
118
|
+
if frontData == nil {
|
|
119
|
+
frontData = map[string]any{}
|
|
120
|
+
}
|
|
121
|
+
frontData["x-i18n"] = map[string]any{
|
|
122
|
+
"source_path": relPath,
|
|
123
|
+
"source_hash": hashBytes(source),
|
|
124
|
+
"provider": providerName,
|
|
125
|
+
"model": modelVersion,
|
|
126
|
+
"workflow": workflowVersion,
|
|
127
|
+
"generated_at": time.Now().UTC().Format(time.RFC3339),
|
|
128
|
+
}
|
|
129
|
+
encoded, err := yaml.Marshal(frontData)
|
|
130
|
+
if err != nil {
|
|
131
|
+
return "", err
|
|
132
|
+
}
|
|
133
|
+
return fmt.Sprintf("---\n%s---\n\n", string(encoded)), nil
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
func translateFrontMatter(ctx context.Context, translator *PiTranslator, tm *TranslationMemory, data map[string]any, relPath, srcLang, tgtLang string) error {
|
|
137
|
+
if len(data) == 0 {
|
|
138
|
+
return nil
|
|
139
|
+
}
|
|
140
|
+
if summary, ok := data["summary"].(string); ok {
|
|
141
|
+
translated, err := translateSnippet(ctx, translator, tm, relPath+":frontmatter:summary", summary, srcLang, tgtLang)
|
|
142
|
+
if err != nil {
|
|
143
|
+
return err
|
|
144
|
+
}
|
|
145
|
+
data["summary"] = translated
|
|
146
|
+
}
|
|
147
|
+
if title, ok := data["title"].(string); ok {
|
|
148
|
+
translated, err := translateSnippet(ctx, translator, tm, relPath+":frontmatter:title", title, srcLang, tgtLang)
|
|
149
|
+
if err != nil {
|
|
150
|
+
return err
|
|
151
|
+
}
|
|
152
|
+
data["title"] = translated
|
|
153
|
+
}
|
|
154
|
+
if readWhen, ok := data["read_when"].([]any); ok {
|
|
155
|
+
translated := make([]any, 0, len(readWhen))
|
|
156
|
+
for idx, item := range readWhen {
|
|
157
|
+
textValue, ok := item.(string)
|
|
158
|
+
if !ok {
|
|
159
|
+
translated = append(translated, item)
|
|
160
|
+
continue
|
|
161
|
+
}
|
|
162
|
+
value, err := translateSnippet(ctx, translator, tm, fmt.Sprintf("%s:frontmatter:read_when:%d", relPath, idx), textValue, srcLang, tgtLang)
|
|
163
|
+
if err != nil {
|
|
164
|
+
return err
|
|
165
|
+
}
|
|
166
|
+
translated = append(translated, value)
|
|
167
|
+
}
|
|
168
|
+
data["read_when"] = translated
|
|
169
|
+
}
|
|
170
|
+
return nil
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
func translateSnippet(ctx context.Context, translator *PiTranslator, tm *TranslationMemory, segmentID, textValue, srcLang, tgtLang string) (string, error) {
|
|
174
|
+
if strings.TrimSpace(textValue) == "" {
|
|
175
|
+
return textValue, nil
|
|
176
|
+
}
|
|
177
|
+
namespace := cacheNamespace()
|
|
178
|
+
textHash := hashText(textValue)
|
|
179
|
+
ck := cacheKey(namespace, srcLang, tgtLang, segmentID, textHash)
|
|
180
|
+
if entry, ok := tm.Get(ck); ok {
|
|
181
|
+
return entry.Translated, nil
|
|
182
|
+
}
|
|
183
|
+
translated, err := translator.Translate(ctx, textValue, srcLang, tgtLang)
|
|
184
|
+
if err != nil {
|
|
185
|
+
return "", err
|
|
186
|
+
}
|
|
187
|
+
entry := TMEntry{
|
|
188
|
+
CacheKey: ck,
|
|
189
|
+
SegmentID: segmentID,
|
|
190
|
+
SourcePath: segmentID,
|
|
191
|
+
TextHash: textHash,
|
|
192
|
+
Text: textValue,
|
|
193
|
+
Translated: translated,
|
|
194
|
+
Provider: providerName,
|
|
195
|
+
Model: modelVersion,
|
|
196
|
+
SrcLang: srcLang,
|
|
197
|
+
TgtLang: tgtLang,
|
|
198
|
+
UpdatedAt: time.Now().UTC().Format(time.RFC3339),
|
|
199
|
+
}
|
|
200
|
+
tm.Put(entry)
|
|
201
|
+
return translated, nil
|
|
202
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"fmt"
|
|
5
|
+
"strings"
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
func prettyLanguageLabel(lang string) string {
|
|
9
|
+
trimmed := strings.TrimSpace(lang)
|
|
10
|
+
if trimmed == "" {
|
|
11
|
+
return lang
|
|
12
|
+
}
|
|
13
|
+
switch {
|
|
14
|
+
case strings.EqualFold(trimmed, "en"):
|
|
15
|
+
return "English"
|
|
16
|
+
case strings.EqualFold(trimmed, "zh-CN"):
|
|
17
|
+
return "Simplified Chinese"
|
|
18
|
+
case strings.EqualFold(trimmed, "ja-JP"):
|
|
19
|
+
return "Japanese"
|
|
20
|
+
default:
|
|
21
|
+
return trimmed
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
func translationPrompt(srcLang, tgtLang string, glossary []GlossaryEntry) string {
|
|
26
|
+
srcLabel := prettyLanguageLabel(srcLang)
|
|
27
|
+
tgtLabel := prettyLanguageLabel(tgtLang)
|
|
28
|
+
glossaryBlock := buildGlossaryPrompt(glossary)
|
|
29
|
+
|
|
30
|
+
switch {
|
|
31
|
+
case strings.EqualFold(tgtLang, "zh-CN"):
|
|
32
|
+
// Keep this prompt as stable as possible; it has lots of tuning baked into the wording.
|
|
33
|
+
return strings.TrimSpace(fmt.Sprintf(zhCNPromptTemplate, srcLabel, tgtLabel, glossaryBlock))
|
|
34
|
+
case strings.EqualFold(tgtLang, "ja-JP"):
|
|
35
|
+
return strings.TrimSpace(fmt.Sprintf(jaJPPromptTemplate, srcLabel, tgtLabel, glossaryBlock))
|
|
36
|
+
default:
|
|
37
|
+
return strings.TrimSpace(fmt.Sprintf(genericPromptTemplate, srcLabel, tgtLabel, glossaryBlock))
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const zhCNPromptTemplate = `You are a translation function, not a chat assistant.
|
|
42
|
+
Translate from %s to %s.
|
|
43
|
+
|
|
44
|
+
Rules:
|
|
45
|
+
- Output ONLY the translated text. No preamble, no questions, no commentary.
|
|
46
|
+
- Translate all English prose; do not leave English unless it is code, a URL, or a product name.
|
|
47
|
+
- All prose must be Chinese. If any English sentence remains outside code/URLs/product names, it is wrong.
|
|
48
|
+
- If the input contains <frontmatter> and <body> tags, keep them exactly and output exactly one of each.
|
|
49
|
+
- Translate only the contents inside those tags.
|
|
50
|
+
- Preserve YAML structure inside <frontmatter>; translate only values.
|
|
51
|
+
- Preserve all [[[FM_*]]] markers exactly and translate only the text between each START/END pair.
|
|
52
|
+
- Translate headings/labels like "Exit codes" and "Optional scripts".
|
|
53
|
+
- Preserve Markdown syntax exactly (headings, lists, tables, emphasis).
|
|
54
|
+
- Preserve HTML tags and attributes exactly.
|
|
55
|
+
- Do not translate code spans/blocks, config keys, CLI flags, or env vars.
|
|
56
|
+
- Do not alter URLs or anchors.
|
|
57
|
+
- Preserve placeholders exactly: __OC_I18N_####__.
|
|
58
|
+
- Do not remove, reorder, or summarize content.
|
|
59
|
+
- Use fluent, idiomatic technical Chinese; avoid slang or jokes.
|
|
60
|
+
- Use neutral documentation tone; prefer “你/你的”, avoid “您/您的”.
|
|
61
|
+
- Insert a space between Latin characters and CJK text (W3C CLREQ), e.g., “Gateway 网关”, “Skills 配置”.
|
|
62
|
+
- Use Chinese quotation marks “ and ” for Chinese prose; keep ASCII quotes inside code spans/blocks or literal CLI/keys.
|
|
63
|
+
- Keep product names in English: OpenClaw, Pi, WhatsApp, Telegram, Discord, iMessage, Slack, Microsoft Teams, Google Chat, Signal.
|
|
64
|
+
- For the OpenClaw Gateway, use “Gateway 网关”.
|
|
65
|
+
- Keep these terms in English: Skills, local loopback, Tailscale.
|
|
66
|
+
- Never output an empty response; if unsure, return the source text unchanged.
|
|
67
|
+
|
|
68
|
+
%s
|
|
69
|
+
|
|
70
|
+
If the input is empty, output empty.
|
|
71
|
+
If the input contains only placeholders, output it unchanged.`
|
|
72
|
+
|
|
73
|
+
const jaJPPromptTemplate = `You are a translation function, not a chat assistant.
|
|
74
|
+
Translate from %s to %s.
|
|
75
|
+
|
|
76
|
+
Rules:
|
|
77
|
+
- Output ONLY the translated text. No preamble, no questions, no commentary.
|
|
78
|
+
- Translate all English prose; do not leave English unless it is code, a URL, or a product name.
|
|
79
|
+
- All prose must be Japanese. If any English sentence remains outside code/URLs/product names, it is wrong.
|
|
80
|
+
- If the input contains <frontmatter> and <body> tags, keep them exactly and output exactly one of each.
|
|
81
|
+
- Translate only the contents inside those tags.
|
|
82
|
+
- Preserve YAML structure inside <frontmatter>; translate only values.
|
|
83
|
+
- Preserve all [[[FM_*]]] markers exactly and translate only the text between each START/END pair.
|
|
84
|
+
- Translate headings/labels like "Exit codes" and "Optional scripts".
|
|
85
|
+
- Preserve Markdown syntax exactly (headings, lists, tables, emphasis).
|
|
86
|
+
- Preserve HTML tags and attributes exactly.
|
|
87
|
+
- Do not translate code spans/blocks, config keys, CLI flags, or env vars.
|
|
88
|
+
- Do not alter URLs or anchors.
|
|
89
|
+
- Preserve placeholders exactly: __OC_I18N_####__.
|
|
90
|
+
- Do not remove, reorder, or summarize content.
|
|
91
|
+
- Use fluent, idiomatic technical Japanese; avoid slang or jokes.
|
|
92
|
+
- Use neutral documentation tone; avoid overly formal honorifics (e.g., avoid “〜でございます”).
|
|
93
|
+
- Use Japanese quotation marks 「 and 」 for Japanese prose; keep ASCII quotes inside code spans/blocks or literal CLI/keys.
|
|
94
|
+
- Do not add or remove spacing around Latin text just because it borders Japanese; keep spacing stable unless required by Japanese grammar.
|
|
95
|
+
- Keep product names in English: OpenClaw, Pi, WhatsApp, Telegram, Discord, iMessage, Slack, Microsoft Teams, Google Chat, Signal.
|
|
96
|
+
- Keep these terms in English: Skills, local loopback, Tailscale.
|
|
97
|
+
- Never output an empty response; if unsure, return the source text unchanged.
|
|
98
|
+
|
|
99
|
+
%s
|
|
100
|
+
|
|
101
|
+
If the input is empty, output empty.
|
|
102
|
+
If the input contains only placeholders, output it unchanged.`
|
|
103
|
+
|
|
104
|
+
const genericPromptTemplate = `You are a translation function, not a chat assistant.
|
|
105
|
+
Translate from %s to %s.
|
|
106
|
+
|
|
107
|
+
Rules:
|
|
108
|
+
- Output ONLY the translated text. No preamble, no questions, no commentary.
|
|
109
|
+
- Translate all English prose; do not leave English unless it is code, a URL, or a product name.
|
|
110
|
+
- If any English sentence remains outside code/URLs/product names, it is likely wrong.
|
|
111
|
+
- If the input contains <frontmatter> and <body> tags, keep them exactly and output exactly one of each.
|
|
112
|
+
- Translate only the contents inside those tags.
|
|
113
|
+
- Preserve YAML structure inside <frontmatter>; translate only values.
|
|
114
|
+
- Preserve all [[[FM_*]]] markers exactly and translate only the text between each START/END pair.
|
|
115
|
+
- Translate headings/labels like "Exit codes" and "Optional scripts".
|
|
116
|
+
- Preserve Markdown syntax exactly (headings, lists, tables, emphasis).
|
|
117
|
+
- Preserve HTML tags and attributes exactly.
|
|
118
|
+
- Do not translate code spans/blocks, config keys, CLI flags, or env vars.
|
|
119
|
+
- Do not alter URLs or anchors.
|
|
120
|
+
- Preserve placeholders exactly: __OC_I18N_####__.
|
|
121
|
+
- Do not remove, reorder, or summarize content.
|
|
122
|
+
- Use fluent, idiomatic technical language in the target language; avoid slang or jokes.
|
|
123
|
+
- Use neutral documentation tone.
|
|
124
|
+
- Keep product names in English: OpenClaw, Pi, WhatsApp, Telegram, Discord, iMessage, Slack, Microsoft Teams, Google Chat, Signal.
|
|
125
|
+
- Keep these terms in English: Skills, local loopback, Tailscale.
|
|
126
|
+
- Never output an empty response; if unsure, return the source text unchanged.
|
|
127
|
+
|
|
128
|
+
%s
|
|
129
|
+
|
|
130
|
+
If the input is empty, output empty.
|
|
131
|
+
If the input contains only placeholders, output it unchanged.`
|
|
132
|
+
|
|
133
|
+
func buildGlossaryPrompt(glossary []GlossaryEntry) string {
|
|
134
|
+
if len(glossary) == 0 {
|
|
135
|
+
return ""
|
|
136
|
+
}
|
|
137
|
+
var lines []string
|
|
138
|
+
lines = append(lines, "Preferred translations (use when natural):")
|
|
139
|
+
for _, entry := range glossary {
|
|
140
|
+
if entry.Source == "" || entry.Target == "" {
|
|
141
|
+
continue
|
|
142
|
+
}
|
|
143
|
+
lines = append(lines, fmt.Sprintf("- %s -> %s", entry.Source, entry.Target))
|
|
144
|
+
}
|
|
145
|
+
return strings.Join(lines, "\n")
|
|
146
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"bufio"
|
|
5
|
+
"encoding/json"
|
|
6
|
+
"errors"
|
|
7
|
+
"fmt"
|
|
8
|
+
"io"
|
|
9
|
+
"os"
|
|
10
|
+
"path/filepath"
|
|
11
|
+
"sort"
|
|
12
|
+
"strings"
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
type TMEntry struct {
|
|
16
|
+
CacheKey string `json:"cache_key"`
|
|
17
|
+
SegmentID string `json:"segment_id"`
|
|
18
|
+
SourcePath string `json:"source_path"`
|
|
19
|
+
TextHash string `json:"text_hash"`
|
|
20
|
+
Text string `json:"text"`
|
|
21
|
+
Translated string `json:"translated"`
|
|
22
|
+
Provider string `json:"provider"`
|
|
23
|
+
Model string `json:"model"`
|
|
24
|
+
SrcLang string `json:"src_lang"`
|
|
25
|
+
TgtLang string `json:"tgt_lang"`
|
|
26
|
+
UpdatedAt string `json:"updated_at"`
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type TranslationMemory struct {
|
|
30
|
+
path string
|
|
31
|
+
entries map[string]TMEntry
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
func LoadTranslationMemory(path string) (*TranslationMemory, error) {
|
|
35
|
+
tm := &TranslationMemory{path: path, entries: map[string]TMEntry{}}
|
|
36
|
+
file, err := os.Open(path)
|
|
37
|
+
if err != nil {
|
|
38
|
+
if errors.Is(err, os.ErrNotExist) {
|
|
39
|
+
return tm, nil
|
|
40
|
+
}
|
|
41
|
+
return nil, err
|
|
42
|
+
}
|
|
43
|
+
defer file.Close()
|
|
44
|
+
|
|
45
|
+
reader := bufio.NewReader(file)
|
|
46
|
+
for {
|
|
47
|
+
line, err := reader.ReadBytes('\n')
|
|
48
|
+
if len(line) > 0 {
|
|
49
|
+
trimmed := strings.TrimSpace(string(line))
|
|
50
|
+
if trimmed != "" {
|
|
51
|
+
var entry TMEntry
|
|
52
|
+
if err := json.Unmarshal([]byte(trimmed), &entry); err != nil {
|
|
53
|
+
return nil, fmt.Errorf("translation memory decode failed: %w", err)
|
|
54
|
+
}
|
|
55
|
+
if entry.CacheKey != "" && strings.TrimSpace(entry.Translated) != "" {
|
|
56
|
+
tm.entries[entry.CacheKey] = entry
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if err != nil {
|
|
61
|
+
if errors.Is(err, io.EOF) {
|
|
62
|
+
break
|
|
63
|
+
}
|
|
64
|
+
return nil, err
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return tm, nil
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
func (tm *TranslationMemory) Get(cacheKey string) (TMEntry, bool) {
|
|
71
|
+
entry, ok := tm.entries[cacheKey]
|
|
72
|
+
if !ok {
|
|
73
|
+
return TMEntry{}, false
|
|
74
|
+
}
|
|
75
|
+
if strings.TrimSpace(entry.Translated) == "" {
|
|
76
|
+
return TMEntry{}, false
|
|
77
|
+
}
|
|
78
|
+
return entry, true
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
func (tm *TranslationMemory) Put(entry TMEntry) {
|
|
82
|
+
if entry.CacheKey == "" {
|
|
83
|
+
return
|
|
84
|
+
}
|
|
85
|
+
tm.entries[entry.CacheKey] = entry
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
func (tm *TranslationMemory) Save() error {
|
|
89
|
+
if tm.path == "" {
|
|
90
|
+
return nil
|
|
91
|
+
}
|
|
92
|
+
if err := os.MkdirAll(filepath.Dir(tm.path), 0o755); err != nil {
|
|
93
|
+
return err
|
|
94
|
+
}
|
|
95
|
+
tmpPath := tm.path + ".tmp"
|
|
96
|
+
file, err := os.Create(tmpPath)
|
|
97
|
+
if err != nil {
|
|
98
|
+
return err
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
keys := make([]string, 0, len(tm.entries))
|
|
102
|
+
for key := range tm.entries {
|
|
103
|
+
keys = append(keys, key)
|
|
104
|
+
}
|
|
105
|
+
sort.Strings(keys)
|
|
106
|
+
|
|
107
|
+
writer := bufio.NewWriter(file)
|
|
108
|
+
for _, key := range keys {
|
|
109
|
+
entry := tm.entries[key]
|
|
110
|
+
payload, err := json.Marshal(entry)
|
|
111
|
+
if err != nil {
|
|
112
|
+
_ = file.Close()
|
|
113
|
+
return err
|
|
114
|
+
}
|
|
115
|
+
if _, err := writer.Write(payload); err != nil {
|
|
116
|
+
_ = file.Close()
|
|
117
|
+
return err
|
|
118
|
+
}
|
|
119
|
+
if _, err := writer.WriteString("\n"); err != nil {
|
|
120
|
+
_ = file.Close()
|
|
121
|
+
return err
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if err := writer.Flush(); err != nil {
|
|
125
|
+
_ = file.Close()
|
|
126
|
+
return err
|
|
127
|
+
}
|
|
128
|
+
if err := file.Close(); err != nil {
|
|
129
|
+
return err
|
|
130
|
+
}
|
|
131
|
+
return os.Rename(tmpPath, tm.path)
|
|
132
|
+
}
|