openclaw-multi-auto 1.3.5 → 1.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{accounts-C_lW3Ag9.js → accounts-BOzyfwW4.js} +2 -2
- package/dist/{accounts-C9HcPI9h.js → accounts-L9ByEpnP.js} +2 -2
- package/dist/{accounts-Tgelvk0C.js → accounts-yfBeCZtS.js} +17 -17
- package/dist/{active-listener-BEdprTkn.js → active-listener-D1yqT1cw.js} +2 -2
- package/dist/{api-key-rotation-BJpKWXy0.js → api-key-rotation-DtsNS2Nb.js} +2 -2
- package/dist/{audio-preflight-BMvgEQ5j.js → audio-preflight-DpxQCpsA.js} +32 -32
- package/dist/{audio-transcription-runner-gLFfz8fr.js → audio-transcription-runner-28fcRNNi.js} +12 -12
- package/dist/{audit-membership-runtime-Dntemq07.js → audit-membership-runtime-DWyHWAHM.js} +4 -4
- 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/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-activity-BDnjYF7B.js → channel-activity-xHOMiarp.js} +3 -3
- package/dist/{chrome-DxxEKrY7.js → chrome-DwizpzOC.js} +18 -18
- package/dist/{commands-registry-D5qXbFJn.js → commands-registry-V1zZ5pPC.js} +4 -4
- package/dist/{deliver-DbdywYJE.js → deliver-D4o6VIur.js} +21 -21
- package/dist/deliver-runtime-P-G3bPjW.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-signal.runtime-CTcl388M.js +24 -0
- package/dist/deps-send-slack.runtime-CCqBz4Kg.js +22 -0
- package/dist/deps-send-telegram.runtime-DGSKTCpH.js +27 -0
- package/dist/deps-send-whatsapp.runtime-CJkTHkah.js +60 -0
- package/dist/{diagnostic-Co6Kghr-.js → diagnostic-Bn4PZjMZ.js} +2 -2
- package/dist/{errors-xt401nuk.js → errors-CCLeFWAg.js} +1 -1
- package/dist/{fetch-DuraYswo.js → fetch-BlJWzEP6.js} +5 -5
- 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/{github-copilot-token-BDioPmd6.js → github-copilot-token-D13V9YBz.js} +7 -7
- package/dist/{image-eT7Y-nP5.js → image-Bbn53mzj.js} +6 -6
- package/dist/{image-ops-BuUnEOE0.js → image-ops-CehkHxmW.js} +2 -2
- package/dist/image-runtime-CVv2ra9J.js +29 -0
- package/dist/{ir-B83looB-.js → ir-DAP-B-Xw.js} +8 -8
- package/dist/{legacy-names-DOC03BkU.js → legacy-names-TyzbVqa_.js} +1 -1
- package/dist/llm-slug-generator.js +51 -51
- package/dist/{logger-BfjWMCSD.js → logger-DMZQQtxK.js} +7 -7
- package/dist/{login-CrIwcrVI.js → login-DiCctRo1.js} +5 -5
- package/dist/{login-qr-BpPDZdl_.js → login-qr-MUbXgjtd.js} +10 -10
- package/dist/{manager-1bvuGrNR.js → manager-BW_NSIMl.js} +13 -13
- package/dist/manager-runtime-BN6VevdC.js +18 -0
- package/dist/{model-selection-Dna0Gz1k.js → model-selection-idoqPmw0.js} +43 -43
- package/dist/{outbound-ChDjtuD6.js → outbound-C2kanETZ.js} +6 -6
- package/dist/{outbound-attachment-DqHlD21U.js → outbound-attachment-DBrYWX8h.js} +2 -2
- package/dist/{path-alias-guards-BzvdLvTI.js → path-alias-guards-DqXRZmsL.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/{pi-embedded-BQQa91aA.js → pi-embedded-BaGj07T0.js} +158 -158
- package/dist/{pi-embedded-helpers-CLXm10bV.js → pi-embedded-helpers-wy0DZvx1.js} +52 -52
- package/dist/pi-model-discovery-BGgOlX8N.js +134 -0
- package/dist/pi-model-discovery-runtime-Bwmi4Ev8.js +11 -0
- package/dist/{pi-tools.before-tool-call.runtime-Cwab_5W1.js → pi-tools.before-tool-call.runtime-BuLxSyx9.js} +9 -9
- package/dist/plugin-sdk/accounts-CJWOBzwB.js +35 -0
- package/dist/plugin-sdk/accounts-DP1-L-QS.js +288 -0
- package/dist/plugin-sdk/accounts-DZhWlEg3.js +46 -0
- package/dist/plugin-sdk/active-listener-B_sLJTXM.js +50 -0
- package/dist/plugin-sdk/api-key-rotation-BRE4X2tf.js +181 -0
- package/dist/plugin-sdk/audio-preflight-DGEUDxxR.js +69 -0
- package/dist/plugin-sdk/audio-transcription-runner-DkoPNPYt.js +2176 -0
- package/dist/plugin-sdk/audit-membership-runtime-DSBHHw7o.js +58 -0
- package/dist/plugin-sdk/channel-activity-F3d0yUwy.js +94 -0
- package/dist/plugin-sdk/channel-web-QF7EpjeP.js +2256 -0
- package/dist/plugin-sdk/chrome-BXoCyCkY.js +2415 -0
- package/dist/plugin-sdk/commands-registry-t7cXBTfN.js +1125 -0
- package/dist/plugin-sdk/config-BkEnz2Po.js +17913 -0
- package/dist/plugin-sdk/deliver-B6AG_l67.js +1694 -0
- package/dist/plugin-sdk/deliver-runtime-D585kJZc.js +32 -0
- package/dist/plugin-sdk/deps-send-discord.runtime-a_OKY2js.js +23 -0
- package/dist/plugin-sdk/deps-send-imessage.runtime-Baxy9TD4.js +22 -0
- package/dist/plugin-sdk/deps-send-signal.runtime-BwXoCrFl.js +21 -0
- package/dist/plugin-sdk/deps-send-slack.runtime-CLmKjgso.js +19 -0
- package/dist/plugin-sdk/deps-send-telegram.runtime-BKfdBKnZ.js +24 -0
- package/dist/plugin-sdk/deps-send-whatsapp.runtime-BOTwkbx_.js +57 -0
- package/dist/plugin-sdk/diagnostic-CsP-lEkI.js +319 -0
- package/dist/plugin-sdk/discord.js +6 -6
- package/dist/plugin-sdk/errors-DaiAM-yU.js +54 -0
- package/dist/plugin-sdk/fetch-guard-DETCcJzQ.js +156 -0
- package/dist/plugin-sdk/fs-safe-B8y811FR.js +352 -0
- package/dist/plugin-sdk/image-DjTEkYZE.js +2310 -0
- package/dist/plugin-sdk/image-ops-BSiMpAw4.js +584 -0
- package/dist/plugin-sdk/image-runtime-6xPp8m5a.js +25 -0
- package/dist/plugin-sdk/index.js +50 -50
- package/dist/plugin-sdk/ir-DQ7_HbvK.js +1296 -0
- package/dist/plugin-sdk/local-roots-BUP4YBmR.js +186 -0
- package/dist/plugin-sdk/logger-CZY9KIoY.js +1163 -0
- package/dist/plugin-sdk/login-BxEKLlCo.js +57 -0
- package/dist/plugin-sdk/login-qr-BQIpMPr9.js +320 -0
- package/dist/plugin-sdk/manager-I6KbPihW.js +3917 -0
- package/dist/plugin-sdk/manager-runtime-CFfYYWIQ.js +15 -0
- package/dist/plugin-sdk/mattermost.js +3 -3
- package/dist/plugin-sdk/outbound-NS6UHnB6.js +212 -0
- package/dist/plugin-sdk/outbound-attachment-Dy6fyf6H.js +19 -0
- package/dist/plugin-sdk/path-alias-guards-DBjLbIX_.js +43 -0
- package/dist/plugin-sdk/paths-vTM3Lh3X.js +166 -0
- package/dist/plugin-sdk/pi-embedded-helpers-1R1gu7eX.js +9627 -0
- package/dist/plugin-sdk/pi-model-discovery-runtime-Do9o-dUd.js +8 -0
- package/dist/{pi-model-discovery-Dymwdjt0.js → plugin-sdk/pi-model-discovery-v-XPUOOf.js} +2 -2
- package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-D4sFsIks.js +354 -0
- package/dist/plugin-sdk/plugins-DeBZB9l_.js +864 -0
- package/dist/{proxy-fetch-B2pEfjbR.js → plugin-sdk/proxy-fetch-ChxOhWF4.js} +1 -1
- package/dist/plugin-sdk/pw-ai-DEOmCSSC.js +1938 -0
- package/dist/plugin-sdk/qmd-manager-HyYKoEch.js +1448 -0
- package/dist/plugin-sdk/query-expansion-CeyKUeDW.js +1011 -0
- package/dist/{redact-COik8ET1.js → plugin-sdk/redact-DjVX-1N3.js} +1 -1
- package/dist/plugin-sdk/reply-DAo_Jt8K.js +97916 -0
- package/dist/plugin-sdk/resolve-outbound-target-B42qgQS9.js +40 -0
- package/dist/plugin-sdk/run-with-concurrency-Bt_ks0Qa.js +1994 -0
- package/dist/plugin-sdk/runtime-whatsapp-login.runtime-B6W989eF.js +10 -0
- package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-c_GDFy37.js +19 -0
- package/dist/plugin-sdk/send-CQpMudwO.js +2587 -0
- package/dist/plugin-sdk/send-DQHLzVyO.js +414 -0
- package/dist/plugin-sdk/send-DTB24bEF.js +3135 -0
- package/dist/plugin-sdk/send-DfHadjZ_.js +503 -0
- package/dist/plugin-sdk/send-XXlW2iny.js +540 -0
- package/dist/plugin-sdk/session-6TF6MyaC.js +169 -0
- package/dist/plugin-sdk/signal.js +2 -2
- package/dist/plugin-sdk/skill-commands-CkGeFUMl.js +342 -0
- package/dist/plugin-sdk/skills-CBkHBYPq.js +1428 -0
- package/dist/plugin-sdk/slash-commands.runtime-CxliuGaP.js +13 -0
- package/dist/plugin-sdk/slash-dispatch.runtime-DFaeYlJQ.js +52 -0
- package/dist/plugin-sdk/slash-skill-commands.runtime-0M0OLCxq.js +16 -0
- package/dist/plugin-sdk/ssrf-cFtplYtS.js +202 -0
- package/dist/plugin-sdk/store-5nyxY3WU.js +81 -0
- package/dist/plugin-sdk/subagent-registry-runtime-DCtmDwna.js +52 -0
- package/dist/plugin-sdk/tables-C47P4GTN.js +55 -0
- package/dist/{target-errors-mnlwhAjP.js → plugin-sdk/target-errors-Blia4S69.js} +2 -2
- package/dist/plugin-sdk/thinking-Bo2eosVa.js +1206 -0
- package/dist/{tokens-q32vI39c.js → plugin-sdk/tokens-DgNRBwIg.js} +1 -1
- package/dist/plugin-sdk/tool-images-Gk_-0y2N.js +274 -0
- package/dist/plugin-sdk/web-CVxZbXyH.js +56 -0
- package/dist/plugin-sdk/whatsapp-actions-Bw0H9g-n.js +80 -0
- package/dist/plugin-sdk/zalo.js +2 -2
- package/dist/{plugins-4Rj4OjLY.js → plugins-CWkRQYDj.js} +11 -11
- package/dist/{proxy-env-DlmzDx8x.js → proxy-env-Cq5gdrbj.js} +1 -1
- package/dist/proxy-fetch-CCjEYbFm.js +38 -0
- package/dist/{pw-ai-DNMjFMqH.js → pw-ai-Cl1Lc7RC.js} +14 -14
- package/dist/{qmd-manager-BtIKUaO9.js → qmd-manager-BsYsO9Ii.js} +10 -10
- package/dist/{query-expansion-CX-1fS52.js → query-expansion-DtLc3wjL.js} +6 -6
- package/dist/redact-ClbcYG1J.js +319 -0
- package/dist/{run-with-concurrency-BgYfgkXT.js → run-with-concurrency-D_ZpbgEG.js} +4 -4
- package/dist/runtime-whatsapp-login.runtime-IeylZEl4.js +13 -0
- package/dist/runtime-whatsapp-outbound.runtime-ClBRuLsq.js +22 -0
- package/dist/{send-dfu6_rgf.js → send-BQERFNyo.js} +5 -5
- package/dist/{send-L7gRiwyd.js → send-Bj776ESJ.js} +7 -7
- package/dist/{send-PE6cwoTe.js → send-DcxmcFi_.js} +8 -8
- package/dist/{send-6lz6rNVP.js → send-Dx2RkUOZ.js} +6 -6
- package/dist/{send-BHTiZcH3.js → send-vmONuVgL.js} +26 -26
- package/dist/{session-D8ImowSs.js → session-A4QhBRvH.js} +8 -8
- package/dist/{skill-commands-DNqJ-kwn.js → skill-commands-CMzBZKG2.js} +9 -9
- package/dist/{skills-7ODkHQYp.js → skills-CE_iqvM5.js} +22 -22
- package/dist/slash-commands.runtime-Cpn2tYW4.js +16 -0
- package/dist/slash-dispatch.runtime-DoBAQBU5.js +56 -0
- package/dist/slash-skill-commands.runtime-DKMvvdDW.js +20 -0
- package/dist/{store-D89wDcz9.js → store--eR1R_UX.js} +2 -2
- package/dist/subagent-registry-runtime-ppWS3tVu.js +56 -0
- package/dist/{subsystem-B45WV3qB.js → subsystem-Di1z8l0Z.js} +14 -14
- package/dist/{tables-mE4cJBN2.js → tables-d739Y1xW.js} +1 -1
- package/dist/target-errors-CBI2Ga0y.js +195 -0
- package/dist/{thinking-BeGmb5k6.js → thinking-DXYisHiZ.js} +7 -7
- package/dist/tokens-DxnY9ui_.js +52 -0
- package/dist/{tool-images-RZdHiZcG.js → tool-images-2cBx1W8h.js} +2 -2
- package/dist/{web-Btj-e8kN.js → web-CzWRVmFt.js} +55 -55
- package/dist/{whatsapp-actions-BHbJJyqw.js → whatsapp-actions-iEArE_Ez.js} +21 -21
- package/dist/{workspace-U-DyR64O.js → workspace-CUVC6GX1.js} +20 -20
- package/package.json +8 -2
- package/scripts/create-instance.sh +26 -4
- package/scripts/install-maca.sh +40 -29
- package/scripts/npm_publish.sh +14 -11
- package/dist/deliver-runtime-BFs7iAZF.js +0 -36
- package/dist/deps-send-discord.runtime-DZUccI6Z.js +0 -26
- 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-slack.runtime-BDsDhS1P.js +0 -22
- package/dist/deps-send-telegram.runtime-D_4xVasO.js +0 -27
- package/dist/deps-send-whatsapp.runtime-DK8jqd14.js +0 -60
- package/dist/image-runtime-BcAK3n8a.js +0 -29
- package/dist/manager-runtime-FO1Sx3W8.js +0 -18
- package/dist/pi-model-discovery-runtime-BeY4EUPp.js +0 -11
- 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-B9Ygtzi4.js +0 -56
- package/dist/slash-skill-commands.runtime-DxZ4z5h6.js +0 -20
- package/dist/subagent-registry-runtime-DL1Wv7nA.js +0 -56
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { m as normalizeSkillFilter } from "./run-with-concurrency-
|
|
2
|
-
import { t as createSubsystemLogger, w as resolvePreferredOpenClawTmpDir } from "./subsystem-
|
|
3
|
-
import { O as isPathInside, h as resolveOpenClawPackageRootSync } from "./workspace-
|
|
4
|
-
import { a as CONFIG_DIR, y as resolveUserPath } from "./logger-
|
|
5
|
-
import { Bt as resolveMemorySlotDecision, Nt as loadPluginManifestRegistry, Rt as normalizePluginsConfig, Un as isPathInsideWithRealpath, Xn as isDangerousHostEnvVarName, gr as normalizeResolvedSecretInputString, zt as resolveEffectiveEnableState } from "./model-selection-
|
|
6
|
-
import { a as resolveOpenClawManifestBlock, c as resolveOpenClawManifestRequires, d as hasBinary, f as isConfigPathTruthyWithDefaults, i as parseOpenClawManifestInstallBase, l as parseFrontmatterBlock, n as normalizeStringList, o as resolveOpenClawManifestInstall, r as parseFrontmatterBool, s as resolveOpenClawManifestOs, t as getFrontmatterString, u as evaluateRuntimeEligibility } from "./frontmatter-
|
|
7
|
-
import { n as assertNoPathAliasEscape } from "./path-alias-guards-
|
|
1
|
+
import { m as normalizeSkillFilter } from "./run-with-concurrency-D_ZpbgEG.js";
|
|
2
|
+
import { t as createSubsystemLogger, w as resolvePreferredOpenClawTmpDir } from "./subsystem-Di1z8l0Z.js";
|
|
3
|
+
import { O as isPathInside, h as resolveOpenClawPackageRootSync } from "./workspace-CUVC6GX1.js";
|
|
4
|
+
import { a as CONFIG_DIR, y as resolveUserPath } from "./logger-DMZQQtxK.js";
|
|
5
|
+
import { Bt as resolveMemorySlotDecision, Nt as loadPluginManifestRegistry, Rt as normalizePluginsConfig, Un as isPathInsideWithRealpath, Xn as isDangerousHostEnvVarName, gr as normalizeResolvedSecretInputString, zt as resolveEffectiveEnableState } from "./model-selection-idoqPmw0.js";
|
|
6
|
+
import { a as resolveOpenClawManifestBlock, c as resolveOpenClawManifestRequires, d as hasBinary, f as isConfigPathTruthyWithDefaults, i as parseOpenClawManifestInstallBase, l as parseFrontmatterBlock, n as normalizeStringList, o as resolveOpenClawManifestInstall, r as parseFrontmatterBool, s as resolveOpenClawManifestOs, t as getFrontmatterString, u as evaluateRuntimeEligibility } from "./frontmatter-CvaMP376.js";
|
|
7
|
+
import { n as assertNoPathAliasEscape } from "./path-alias-guards-DqXRZmsL.js";
|
|
8
8
|
import os from "node:os";
|
|
9
9
|
import path from "node:path";
|
|
10
|
-
import
|
|
10
|
+
import syncFs from "node:fs";
|
|
11
11
|
import { URL as URL$1, fileURLToPath } from "node:url";
|
|
12
12
|
import { formatSkillsForPrompt, loadSkillsFromDir } from "@mariozechner/pi-coding-agent";
|
|
13
13
|
|
|
@@ -543,13 +543,13 @@ function shortPath(value) {
|
|
|
543
543
|
//#region src/agents/skills/bundled-dir.ts
|
|
544
544
|
function looksLikeSkillsDir(dir) {
|
|
545
545
|
try {
|
|
546
|
-
const entries =
|
|
546
|
+
const entries = syncFs.readdirSync(dir, { withFileTypes: true });
|
|
547
547
|
for (const entry of entries) {
|
|
548
548
|
if (entry.name.startsWith(".")) continue;
|
|
549
549
|
const fullPath = path.join(dir, entry.name);
|
|
550
550
|
if (entry.isFile() && entry.name.endsWith(".md")) return true;
|
|
551
551
|
if (entry.isDirectory()) {
|
|
552
|
-
if (
|
|
552
|
+
if (syncFs.existsSync(path.join(fullPath, "SKILL.md"))) return true;
|
|
553
553
|
}
|
|
554
554
|
}
|
|
555
555
|
} catch {
|
|
@@ -564,7 +564,7 @@ function resolveBundledSkillsDir(opts = {}) {
|
|
|
564
564
|
const execPath = opts.execPath ?? process.execPath;
|
|
565
565
|
const execDir = path.dirname(execPath);
|
|
566
566
|
const sibling = path.join(execDir, "skills");
|
|
567
|
-
if (
|
|
567
|
+
if (syncFs.existsSync(sibling)) return sibling;
|
|
568
568
|
} catch {}
|
|
569
569
|
try {
|
|
570
570
|
const moduleUrl = opts.moduleUrl ?? import.meta.url;
|
|
@@ -627,7 +627,7 @@ function resolvePluginSkillDirs(params) {
|
|
|
627
627
|
const trimmed = raw.trim();
|
|
628
628
|
if (!trimmed) continue;
|
|
629
629
|
const candidate = path.resolve(record.rootDir, trimmed);
|
|
630
|
-
if (!
|
|
630
|
+
if (!syncFs.existsSync(candidate)) {
|
|
631
631
|
log.warn(`plugin skill path not found (${record.id}): ${candidate}`);
|
|
632
632
|
continue;
|
|
633
633
|
}
|
|
@@ -658,7 +658,7 @@ async function serializeByKey(key, task) {
|
|
|
658
658
|
|
|
659
659
|
//#endregion
|
|
660
660
|
//#region src/agents/skills/workspace.ts
|
|
661
|
-
const fsp =
|
|
661
|
+
const fsp = syncFs.promises;
|
|
662
662
|
const skillsLogger = createSubsystemLogger("skills");
|
|
663
663
|
const skillCommandDebugOnce = /* @__PURE__ */ new Set();
|
|
664
664
|
/**
|
|
@@ -735,7 +735,7 @@ function resolveSkillsLimits(config) {
|
|
|
735
735
|
}
|
|
736
736
|
function listChildDirectories(dir) {
|
|
737
737
|
try {
|
|
738
|
-
const entries =
|
|
738
|
+
const entries = syncFs.readdirSync(dir, { withFileTypes: true });
|
|
739
739
|
const dirs = [];
|
|
740
740
|
for (const entry of entries) {
|
|
741
741
|
if (entry.name.startsWith(".")) continue;
|
|
@@ -746,7 +746,7 @@ function listChildDirectories(dir) {
|
|
|
746
746
|
continue;
|
|
747
747
|
}
|
|
748
748
|
if (entry.isSymbolicLink()) try {
|
|
749
|
-
if (
|
|
749
|
+
if (syncFs.statSync(fullPath).isDirectory()) dirs.push(entry.name);
|
|
750
750
|
} catch {}
|
|
751
751
|
}
|
|
752
752
|
return dirs;
|
|
@@ -757,7 +757,7 @@ function listChildDirectories(dir) {
|
|
|
757
757
|
function resolveNestedSkillsRoot(dir, opts) {
|
|
758
758
|
const nested = path.join(dir, "skills");
|
|
759
759
|
try {
|
|
760
|
-
if (!
|
|
760
|
+
if (!syncFs.existsSync(nested) || !syncFs.statSync(nested).isDirectory()) return { baseDir: dir };
|
|
761
761
|
} catch {
|
|
762
762
|
return { baseDir: dir };
|
|
763
763
|
}
|
|
@@ -766,7 +766,7 @@ function resolveNestedSkillsRoot(dir, opts) {
|
|
|
766
766
|
const toScan = scanLimit === 0 ? [] : nestedDirs.slice(0, Math.min(nestedDirs.length, scanLimit));
|
|
767
767
|
for (const name of toScan) {
|
|
768
768
|
const skillMd = path.join(nested, name, "SKILL.md");
|
|
769
|
-
if (
|
|
769
|
+
if (syncFs.existsSync(skillMd)) return {
|
|
770
770
|
baseDir: nested,
|
|
771
771
|
note: `Detected nested skills root at ${nested}`
|
|
772
772
|
};
|
|
@@ -786,9 +786,9 @@ function loadSkillEntries(workspaceDir, opts) {
|
|
|
786
786
|
const loadSkills = (params) => {
|
|
787
787
|
const baseDir = resolveNestedSkillsRoot(params.dir, { maxEntriesToScan: limits.maxCandidatesPerRoot }).baseDir;
|
|
788
788
|
const rootSkillMd = path.join(baseDir, "SKILL.md");
|
|
789
|
-
if (
|
|
789
|
+
if (syncFs.existsSync(rootSkillMd)) {
|
|
790
790
|
try {
|
|
791
|
-
const size =
|
|
791
|
+
const size = syncFs.statSync(rootSkillMd).size;
|
|
792
792
|
if (size > limits.maxSkillFileBytes) {
|
|
793
793
|
skillsLogger.warn("Skipping skills root due to oversized SKILL.md.", {
|
|
794
794
|
dir: baseDir,
|
|
@@ -827,9 +827,9 @@ function loadSkillEntries(workspaceDir, opts) {
|
|
|
827
827
|
for (const name of limitedChildren) {
|
|
828
828
|
const skillDir = path.join(baseDir, name);
|
|
829
829
|
const skillMd = path.join(skillDir, "SKILL.md");
|
|
830
|
-
if (!
|
|
830
|
+
if (!syncFs.existsSync(skillMd)) continue;
|
|
831
831
|
try {
|
|
832
|
-
const size =
|
|
832
|
+
const size = syncFs.statSync(skillMd).size;
|
|
833
833
|
if (size > limits.maxSkillFileBytes) {
|
|
834
834
|
skillsLogger.warn("Skipping skill due to oversized SKILL.md.", {
|
|
835
835
|
skill: name,
|
|
@@ -897,7 +897,7 @@ function loadSkillEntries(workspaceDir, opts) {
|
|
|
897
897
|
return Array.from(merged.values()).map((skill) => {
|
|
898
898
|
let frontmatter = {};
|
|
899
899
|
try {
|
|
900
|
-
frontmatter = parseFrontmatter(
|
|
900
|
+
frontmatter = parseFrontmatter(syncFs.readFileSync(skill.filePath, "utf-8"));
|
|
901
901
|
} catch {}
|
|
902
902
|
return {
|
|
903
903
|
skill,
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import "./run-with-concurrency-D_ZpbgEG.js";
|
|
2
|
+
import "./paths-C6TxBCvO.js";
|
|
3
|
+
import "./subsystem-Di1z8l0Z.js";
|
|
4
|
+
import "./workspace-CUVC6GX1.js";
|
|
5
|
+
import "./logger-DMZQQtxK.js";
|
|
6
|
+
import "./model-selection-idoqPmw0.js";
|
|
7
|
+
import "./github-copilot-token-D13V9YBz.js";
|
|
8
|
+
import "./legacy-names-TyzbVqa_.js";
|
|
9
|
+
import "./thinking-DXYisHiZ.js";
|
|
10
|
+
import "./plugins-CWkRQYDj.js";
|
|
11
|
+
import "./accounts-yfBeCZtS.js";
|
|
12
|
+
import "./accounts-L9ByEpnP.js";
|
|
13
|
+
import "./accounts-BOzyfwW4.js";
|
|
14
|
+
import { f as resolveCommandArgMenu, n as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as parseCommandArgs } from "./commands-registry-V1zZ5pPC.js";
|
|
15
|
+
|
|
16
|
+
export { buildCommandTextFromArgs, findCommandByNativeName, listNativeCommandSpecsForConfig, parseCommandArgs, resolveCommandArgMenu };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import "./run-with-concurrency-D_ZpbgEG.js";
|
|
2
|
+
import "./paths-C6TxBCvO.js";
|
|
3
|
+
import "./subsystem-Di1z8l0Z.js";
|
|
4
|
+
import "./workspace-CUVC6GX1.js";
|
|
5
|
+
import "./logger-DMZQQtxK.js";
|
|
6
|
+
import "./model-selection-idoqPmw0.js";
|
|
7
|
+
import "./github-copilot-token-D13V9YBz.js";
|
|
8
|
+
import "./legacy-names-TyzbVqa_.js";
|
|
9
|
+
import "./thinking-DXYisHiZ.js";
|
|
10
|
+
import "./tokens-DxnY9ui_.js";
|
|
11
|
+
import { I as finalizeInboundContext, S as dispatchReplyWithDispatcher, k as resolveAgentRoute, n as recordInboundSessionMetaSafe, r as deliverSlackSlashReplies, s as createReplyPrefixOptions } from "./pi-embedded-BaGj07T0.js";
|
|
12
|
+
import "./plugins-CWkRQYDj.js";
|
|
13
|
+
import "./accounts-yfBeCZtS.js";
|
|
14
|
+
import "./send-Dx2RkUOZ.js";
|
|
15
|
+
import "./send-DcxmcFi_.js";
|
|
16
|
+
import "./deliver-D4o6VIur.js";
|
|
17
|
+
import "./diagnostic-Bn4PZjMZ.js";
|
|
18
|
+
import "./accounts-L9ByEpnP.js";
|
|
19
|
+
import "./image-ops-CehkHxmW.js";
|
|
20
|
+
import "./send-vmONuVgL.js";
|
|
21
|
+
import "./pi-model-discovery-BGgOlX8N.js";
|
|
22
|
+
import { kt as resolveConversationLabel } from "./pi-embedded-helpers-wy0DZvx1.js";
|
|
23
|
+
import "./chrome-DwizpzOC.js";
|
|
24
|
+
import "./frontmatter-CvaMP376.js";
|
|
25
|
+
import "./skills-CE_iqvM5.js";
|
|
26
|
+
import "./path-alias-guards-DqXRZmsL.js";
|
|
27
|
+
import "./redact-ClbcYG1J.js";
|
|
28
|
+
import "./errors-CCLeFWAg.js";
|
|
29
|
+
import "./fs-safe-0jAo_Whb.js";
|
|
30
|
+
import "./proxy-env-Cq5gdrbj.js";
|
|
31
|
+
import "./store--eR1R_UX.js";
|
|
32
|
+
import "./accounts-BOzyfwW4.js";
|
|
33
|
+
import "./paths-CCxysrzL.js";
|
|
34
|
+
import "./tool-images-2cBx1W8h.js";
|
|
35
|
+
import "./image-Bbn53mzj.js";
|
|
36
|
+
import "./audio-transcription-runner-28fcRNNi.js";
|
|
37
|
+
import "./fetch-BlJWzEP6.js";
|
|
38
|
+
import "./fetch-guard-ChYBwfiy.js";
|
|
39
|
+
import "./api-key-rotation-DtsNS2Nb.js";
|
|
40
|
+
import "./proxy-fetch-CCjEYbFm.js";
|
|
41
|
+
import { m as resolveChunkMode, s as resolveMarkdownTableMode } from "./ir-DAP-B-Xw.js";
|
|
42
|
+
import "./render-DW7AcFdD.js";
|
|
43
|
+
import "./target-errors-CBI2Ga0y.js";
|
|
44
|
+
import "./commands-registry-V1zZ5pPC.js";
|
|
45
|
+
import "./skill-commands-CMzBZKG2.js";
|
|
46
|
+
import "./fetch-BfuG8uZ8.js";
|
|
47
|
+
import "./channel-activity-xHOMiarp.js";
|
|
48
|
+
import "./tables-d739Y1xW.js";
|
|
49
|
+
import "./send-BQERFNyo.js";
|
|
50
|
+
import "./outbound-attachment-DBrYWX8h.js";
|
|
51
|
+
import "./send-Bj776ESJ.js";
|
|
52
|
+
import "./proxy-CecQTx_Z.js";
|
|
53
|
+
import "./manager-BW_NSIMl.js";
|
|
54
|
+
import "./query-expansion-DtLc3wjL.js";
|
|
55
|
+
|
|
56
|
+
export { createReplyPrefixOptions, deliverSlackSlashReplies, dispatchReplyWithDispatcher, finalizeInboundContext, recordInboundSessionMetaSafe, resolveAgentRoute, resolveChunkMode, resolveConversationLabel, resolveMarkdownTableMode };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import "./run-with-concurrency-D_ZpbgEG.js";
|
|
2
|
+
import "./paths-C6TxBCvO.js";
|
|
3
|
+
import "./subsystem-Di1z8l0Z.js";
|
|
4
|
+
import "./workspace-CUVC6GX1.js";
|
|
5
|
+
import "./logger-DMZQQtxK.js";
|
|
6
|
+
import "./model-selection-idoqPmw0.js";
|
|
7
|
+
import "./github-copilot-token-D13V9YBz.js";
|
|
8
|
+
import "./legacy-names-TyzbVqa_.js";
|
|
9
|
+
import "./thinking-DXYisHiZ.js";
|
|
10
|
+
import "./plugins-CWkRQYDj.js";
|
|
11
|
+
import "./accounts-yfBeCZtS.js";
|
|
12
|
+
import "./accounts-L9ByEpnP.js";
|
|
13
|
+
import "./frontmatter-CvaMP376.js";
|
|
14
|
+
import "./skills-CE_iqvM5.js";
|
|
15
|
+
import "./path-alias-guards-DqXRZmsL.js";
|
|
16
|
+
import "./accounts-BOzyfwW4.js";
|
|
17
|
+
import "./commands-registry-V1zZ5pPC.js";
|
|
18
|
+
import { n as listSkillCommandsForAgents } from "./skill-commands-CMzBZKG2.js";
|
|
19
|
+
|
|
20
|
+
export { listSkillCommandsForAgents };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as resolveConfigDir } from "./logger-
|
|
2
|
-
import { b as detectMime, x as extensionForMime } from "./image-ops-
|
|
1
|
+
import { _ as resolveConfigDir } from "./logger-DMZQQtxK.js";
|
|
2
|
+
import { b as detectMime, x as extensionForMime } from "./image-ops-CehkHxmW.js";
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import crypto from "node:crypto";
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import "./run-with-concurrency-D_ZpbgEG.js";
|
|
2
|
+
import "./paths-C6TxBCvO.js";
|
|
3
|
+
import "./subsystem-Di1z8l0Z.js";
|
|
4
|
+
import "./workspace-CUVC6GX1.js";
|
|
5
|
+
import "./logger-DMZQQtxK.js";
|
|
6
|
+
import "./model-selection-idoqPmw0.js";
|
|
7
|
+
import "./github-copilot-token-D13V9YBz.js";
|
|
8
|
+
import "./legacy-names-TyzbVqa_.js";
|
|
9
|
+
import "./thinking-DXYisHiZ.js";
|
|
10
|
+
import "./tokens-DxnY9ui_.js";
|
|
11
|
+
import { G as resolveRequesterForChildSession, H as countPendingDescendantRuns, U as countPendingDescendantRunsExcludingRun, V as countActiveDescendantRuns, W as isSubagentSessionRunActive } from "./pi-embedded-BaGj07T0.js";
|
|
12
|
+
import "./plugins-CWkRQYDj.js";
|
|
13
|
+
import "./accounts-yfBeCZtS.js";
|
|
14
|
+
import "./send-Dx2RkUOZ.js";
|
|
15
|
+
import "./send-DcxmcFi_.js";
|
|
16
|
+
import "./deliver-D4o6VIur.js";
|
|
17
|
+
import "./diagnostic-Bn4PZjMZ.js";
|
|
18
|
+
import "./accounts-L9ByEpnP.js";
|
|
19
|
+
import "./image-ops-CehkHxmW.js";
|
|
20
|
+
import "./send-vmONuVgL.js";
|
|
21
|
+
import "./pi-model-discovery-BGgOlX8N.js";
|
|
22
|
+
import "./pi-embedded-helpers-wy0DZvx1.js";
|
|
23
|
+
import "./chrome-DwizpzOC.js";
|
|
24
|
+
import "./frontmatter-CvaMP376.js";
|
|
25
|
+
import "./skills-CE_iqvM5.js";
|
|
26
|
+
import "./path-alias-guards-DqXRZmsL.js";
|
|
27
|
+
import "./redact-ClbcYG1J.js";
|
|
28
|
+
import "./errors-CCLeFWAg.js";
|
|
29
|
+
import "./fs-safe-0jAo_Whb.js";
|
|
30
|
+
import "./proxy-env-Cq5gdrbj.js";
|
|
31
|
+
import "./store--eR1R_UX.js";
|
|
32
|
+
import "./accounts-BOzyfwW4.js";
|
|
33
|
+
import "./paths-CCxysrzL.js";
|
|
34
|
+
import "./tool-images-2cBx1W8h.js";
|
|
35
|
+
import "./image-Bbn53mzj.js";
|
|
36
|
+
import "./audio-transcription-runner-28fcRNNi.js";
|
|
37
|
+
import "./fetch-BlJWzEP6.js";
|
|
38
|
+
import "./fetch-guard-ChYBwfiy.js";
|
|
39
|
+
import "./api-key-rotation-DtsNS2Nb.js";
|
|
40
|
+
import "./proxy-fetch-CCjEYbFm.js";
|
|
41
|
+
import "./ir-DAP-B-Xw.js";
|
|
42
|
+
import "./render-DW7AcFdD.js";
|
|
43
|
+
import "./target-errors-CBI2Ga0y.js";
|
|
44
|
+
import "./commands-registry-V1zZ5pPC.js";
|
|
45
|
+
import "./skill-commands-CMzBZKG2.js";
|
|
46
|
+
import "./fetch-BfuG8uZ8.js";
|
|
47
|
+
import "./channel-activity-xHOMiarp.js";
|
|
48
|
+
import "./tables-d739Y1xW.js";
|
|
49
|
+
import "./send-BQERFNyo.js";
|
|
50
|
+
import "./outbound-attachment-DBrYWX8h.js";
|
|
51
|
+
import "./send-Bj776ESJ.js";
|
|
52
|
+
import "./proxy-CecQTx_Z.js";
|
|
53
|
+
import "./manager-BW_NSIMl.js";
|
|
54
|
+
import "./query-expansion-DtLc3wjL.js";
|
|
55
|
+
|
|
56
|
+
export { countActiveDescendantRuns, countPendingDescendantRuns, countPendingDescendantRunsExcludingRun, isSubagentSessionRunActive, resolveRequesterForChildSession };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { r as resolveConfigPath } from "./paths-
|
|
1
|
+
import { r as resolveConfigPath } from "./paths-C6TxBCvO.js";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import
|
|
4
|
+
import syncFs from "node:fs";
|
|
5
5
|
import chalk, { Chalk } from "chalk";
|
|
6
6
|
import { Logger } from "tslog";
|
|
7
7
|
import JSON5 from "json5";
|
|
@@ -54,15 +54,15 @@ function getCommandPathInternal(argv, depth, opts) {
|
|
|
54
54
|
//#endregion
|
|
55
55
|
//#region src/infra/tmp-openclaw-dir.ts
|
|
56
56
|
const POSIX_OPENCLAW_TMP_DIR = process.env.OPENCLAW_TMP_DIR ?? "/tmp/openclaw";
|
|
57
|
-
const TMP_DIR_ACCESS_MODE =
|
|
57
|
+
const TMP_DIR_ACCESS_MODE = syncFs.constants.W_OK | syncFs.constants.X_OK;
|
|
58
58
|
function isNodeErrorWithCode(err, code) {
|
|
59
59
|
return typeof err === "object" && err !== null && "code" in err && err.code === code;
|
|
60
60
|
}
|
|
61
61
|
function resolvePreferredOpenClawTmpDir(options = {}) {
|
|
62
|
-
const accessSync = options.accessSync ??
|
|
63
|
-
const chmodSync = options.chmodSync ??
|
|
64
|
-
const lstatSync = options.lstatSync ??
|
|
65
|
-
const mkdirSync = options.mkdirSync ??
|
|
62
|
+
const accessSync = options.accessSync ?? syncFs.accessSync;
|
|
63
|
+
const chmodSync = options.chmodSync ?? syncFs.chmodSync;
|
|
64
|
+
const lstatSync = options.lstatSync ?? syncFs.lstatSync;
|
|
65
|
+
const mkdirSync = options.mkdirSync ?? syncFs.mkdirSync;
|
|
66
66
|
const warn = options.warn ?? ((message) => console.warn(message));
|
|
67
67
|
const getuid = options.getuid ?? (() => {
|
|
68
68
|
try {
|
|
@@ -155,8 +155,8 @@ function resolvePreferredOpenClawTmpDir(options = {}) {
|
|
|
155
155
|
function readLoggingConfig() {
|
|
156
156
|
const configPath = resolveConfigPath();
|
|
157
157
|
try {
|
|
158
|
-
if (!
|
|
159
|
-
const raw =
|
|
158
|
+
if (!syncFs.existsSync(configPath)) return;
|
|
159
|
+
const raw = syncFs.readFileSync(configPath, "utf-8");
|
|
160
160
|
const logging = JSON5.parse(raw)?.logging;
|
|
161
161
|
if (!logging || typeof logging !== "object" || Array.isArray(logging)) return;
|
|
162
162
|
return logging;
|
|
@@ -344,7 +344,7 @@ function buildLogger(settings) {
|
|
|
344
344
|
for (const transport of externalTransports) attachExternalTransport(logger, transport);
|
|
345
345
|
return logger;
|
|
346
346
|
}
|
|
347
|
-
|
|
347
|
+
syncFs.mkdirSync(path.dirname(settings.file), { recursive: true });
|
|
348
348
|
if (isRollingPath(settings.file)) pruneOldRollingLogs(path.dirname(settings.file));
|
|
349
349
|
let currentFileBytes = getCurrentLogFileBytes(settings.file);
|
|
350
350
|
let warnedAboutSizeCap = false;
|
|
@@ -383,14 +383,14 @@ function resolveMaxLogFileBytes(raw) {
|
|
|
383
383
|
}
|
|
384
384
|
function getCurrentLogFileBytes(file) {
|
|
385
385
|
try {
|
|
386
|
-
return
|
|
386
|
+
return syncFs.statSync(file).size;
|
|
387
387
|
} catch {
|
|
388
388
|
return 0;
|
|
389
389
|
}
|
|
390
390
|
}
|
|
391
391
|
function appendLogLine(file, line) {
|
|
392
392
|
try {
|
|
393
|
-
|
|
393
|
+
syncFs.appendFileSync(file, line, { encoding: "utf8" });
|
|
394
394
|
return true;
|
|
395
395
|
} catch {
|
|
396
396
|
return false;
|
|
@@ -442,14 +442,14 @@ function isRollingPath(file) {
|
|
|
442
442
|
}
|
|
443
443
|
function pruneOldRollingLogs(dir) {
|
|
444
444
|
try {
|
|
445
|
-
const entries =
|
|
445
|
+
const entries = syncFs.readdirSync(dir, { withFileTypes: true });
|
|
446
446
|
const cutoff = Date.now() - MAX_LOG_AGE_MS;
|
|
447
447
|
for (const entry of entries) {
|
|
448
448
|
if (!entry.isFile()) continue;
|
|
449
449
|
if (!entry.name.startsWith(`${LOG_PREFIX}-`) || !entry.name.endsWith(LOG_SUFFIX)) continue;
|
|
450
450
|
const fullPath = path.join(dir, entry.name);
|
|
451
451
|
try {
|
|
452
|
-
if (
|
|
452
|
+
if (syncFs.statSync(fullPath).mtimeMs < cutoff) syncFs.rmSync(fullPath, { force: true });
|
|
453
453
|
} catch {}
|
|
454
454
|
}
|
|
455
455
|
} catch {}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { b as detectMime } from "./image-ops-CehkHxmW.js";
|
|
2
|
+
import { r as sanitizeToolResultImages } from "./tool-images-2cBx1W8h.js";
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
|
+
|
|
5
|
+
//#region src/agents/tools/common.ts
|
|
6
|
+
var ToolInputError = class extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.status = 400;
|
|
10
|
+
this.name = "ToolInputError";
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
var ToolAuthorizationError = class extends ToolInputError {
|
|
14
|
+
constructor(message) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.status = 403;
|
|
17
|
+
this.name = "ToolAuthorizationError";
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
function createActionGate(actions) {
|
|
21
|
+
return (key, defaultValue = true) => {
|
|
22
|
+
const value = actions?.[key];
|
|
23
|
+
if (value === void 0) return defaultValue;
|
|
24
|
+
return value !== false;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function toSnakeCaseKey(key) {
|
|
28
|
+
return key.replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2").replace(/([a-z0-9])([A-Z])/g, "$1_$2").toLowerCase();
|
|
29
|
+
}
|
|
30
|
+
function readParamRaw(params, key) {
|
|
31
|
+
if (Object.hasOwn(params, key)) return params[key];
|
|
32
|
+
const snakeKey = toSnakeCaseKey(key);
|
|
33
|
+
if (snakeKey !== key && Object.hasOwn(params, snakeKey)) return params[snakeKey];
|
|
34
|
+
}
|
|
35
|
+
function readStringParam(params, key, options = {}) {
|
|
36
|
+
const { required = false, trim = true, label = key, allowEmpty = false } = options;
|
|
37
|
+
const raw = readParamRaw(params, key);
|
|
38
|
+
if (typeof raw !== "string") {
|
|
39
|
+
if (required) throw new ToolInputError(`${label} required`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const value = trim ? raw.trim() : raw;
|
|
43
|
+
if (!value && !allowEmpty) {
|
|
44
|
+
if (required) throw new ToolInputError(`${label} required`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
function readStringOrNumberParam(params, key, options = {}) {
|
|
50
|
+
const { required = false, label = key } = options;
|
|
51
|
+
const raw = readParamRaw(params, key);
|
|
52
|
+
if (typeof raw === "number" && Number.isFinite(raw)) return String(raw);
|
|
53
|
+
if (typeof raw === "string") {
|
|
54
|
+
const value = raw.trim();
|
|
55
|
+
if (value) return value;
|
|
56
|
+
}
|
|
57
|
+
if (required) throw new ToolInputError(`${label} required`);
|
|
58
|
+
}
|
|
59
|
+
function readNumberParam(params, key, options = {}) {
|
|
60
|
+
const { required = false, label = key, integer = false } = options;
|
|
61
|
+
const raw = readParamRaw(params, key);
|
|
62
|
+
let value;
|
|
63
|
+
if (typeof raw === "number" && Number.isFinite(raw)) value = raw;
|
|
64
|
+
else if (typeof raw === "string") {
|
|
65
|
+
const trimmed = raw.trim();
|
|
66
|
+
if (trimmed) {
|
|
67
|
+
const parsed = Number.parseFloat(trimmed);
|
|
68
|
+
if (Number.isFinite(parsed)) value = parsed;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (value === void 0) {
|
|
72
|
+
if (required) throw new ToolInputError(`${label} required`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
return integer ? Math.trunc(value) : value;
|
|
76
|
+
}
|
|
77
|
+
function readStringArrayParam(params, key, options = {}) {
|
|
78
|
+
const { required = false, label = key } = options;
|
|
79
|
+
const raw = readParamRaw(params, key);
|
|
80
|
+
if (Array.isArray(raw)) {
|
|
81
|
+
const values = raw.filter((entry) => typeof entry === "string").map((entry) => entry.trim()).filter(Boolean);
|
|
82
|
+
if (values.length === 0) {
|
|
83
|
+
if (required) throw new ToolInputError(`${label} required`);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
return values;
|
|
87
|
+
}
|
|
88
|
+
if (typeof raw === "string") {
|
|
89
|
+
const value = raw.trim();
|
|
90
|
+
if (!value) {
|
|
91
|
+
if (required) throw new ToolInputError(`${label} required`);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
return [value];
|
|
95
|
+
}
|
|
96
|
+
if (required) throw new ToolInputError(`${label} required`);
|
|
97
|
+
}
|
|
98
|
+
function readReactionParams(params, options) {
|
|
99
|
+
const emojiKey = options.emojiKey ?? "emoji";
|
|
100
|
+
const removeKey = options.removeKey ?? "remove";
|
|
101
|
+
const remove = typeof params[removeKey] === "boolean" ? params[removeKey] : false;
|
|
102
|
+
const emoji = readStringParam(params, emojiKey, {
|
|
103
|
+
required: true,
|
|
104
|
+
allowEmpty: true
|
|
105
|
+
});
|
|
106
|
+
if (remove && !emoji) throw new ToolInputError(options.removeErrorMessage);
|
|
107
|
+
return {
|
|
108
|
+
emoji,
|
|
109
|
+
remove,
|
|
110
|
+
isEmpty: !emoji
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function jsonResult(payload) {
|
|
114
|
+
return {
|
|
115
|
+
content: [{
|
|
116
|
+
type: "text",
|
|
117
|
+
text: JSON.stringify(payload, null, 2)
|
|
118
|
+
}],
|
|
119
|
+
details: payload
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
async function imageResult(params) {
|
|
123
|
+
return await sanitizeToolResultImages({
|
|
124
|
+
content: [{
|
|
125
|
+
type: "text",
|
|
126
|
+
text: params.extraText ?? `MEDIA:${params.path}`
|
|
127
|
+
}, {
|
|
128
|
+
type: "image",
|
|
129
|
+
data: params.base64,
|
|
130
|
+
mimeType: params.mimeType
|
|
131
|
+
}],
|
|
132
|
+
details: {
|
|
133
|
+
path: params.path,
|
|
134
|
+
...params.details
|
|
135
|
+
}
|
|
136
|
+
}, params.label, params.imageSanitization);
|
|
137
|
+
}
|
|
138
|
+
async function imageResultFromFile(params) {
|
|
139
|
+
const buf = await fs.readFile(params.path);
|
|
140
|
+
const mimeType = await detectMime({ buffer: buf.slice(0, 256) }) ?? "image/png";
|
|
141
|
+
return await imageResult({
|
|
142
|
+
label: params.label,
|
|
143
|
+
path: params.path,
|
|
144
|
+
base64: buf.toString("base64"),
|
|
145
|
+
mimeType,
|
|
146
|
+
extraText: params.extraText,
|
|
147
|
+
details: params.details,
|
|
148
|
+
imageSanitization: params.imageSanitization
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Validate and parse an `availableTags` parameter from untrusted input.
|
|
153
|
+
* Returns `undefined` when the value is missing or not an array.
|
|
154
|
+
* Entries that lack a string `name` are silently dropped.
|
|
155
|
+
*/
|
|
156
|
+
function parseAvailableTags(raw) {
|
|
157
|
+
if (raw === void 0 || raw === null) return;
|
|
158
|
+
if (!Array.isArray(raw)) return;
|
|
159
|
+
const result = raw.filter((t) => typeof t === "object" && t !== null && typeof t.name === "string").map((t) => ({
|
|
160
|
+
...t.id !== void 0 && typeof t.id === "string" ? { id: t.id } : {},
|
|
161
|
+
name: t.name,
|
|
162
|
+
...typeof t.moderated === "boolean" ? { moderated: t.moderated } : {},
|
|
163
|
+
...t.emoji_id === null || typeof t.emoji_id === "string" ? { emoji_id: t.emoji_id } : {},
|
|
164
|
+
...t.emoji_name === null || typeof t.emoji_name === "string" ? { emoji_name: t.emoji_name } : {}
|
|
165
|
+
}));
|
|
166
|
+
return result.length ? result : void 0;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
//#endregion
|
|
170
|
+
//#region src/infra/outbound/target-errors.ts
|
|
171
|
+
function missingTargetMessage(provider, hint) {
|
|
172
|
+
return `Delivering to ${provider} requires target${formatTargetHint(hint)}`;
|
|
173
|
+
}
|
|
174
|
+
function missingTargetError(provider, hint) {
|
|
175
|
+
return new Error(missingTargetMessage(provider, hint));
|
|
176
|
+
}
|
|
177
|
+
function ambiguousTargetMessage(provider, raw, hint) {
|
|
178
|
+
return `Ambiguous target "${raw}" for ${provider}. Provide a unique name or an explicit id.${formatTargetHint(hint, true)}`;
|
|
179
|
+
}
|
|
180
|
+
function ambiguousTargetError(provider, raw, hint) {
|
|
181
|
+
return new Error(ambiguousTargetMessage(provider, raw, hint));
|
|
182
|
+
}
|
|
183
|
+
function unknownTargetMessage(provider, raw, hint) {
|
|
184
|
+
return `Unknown target "${raw}" for ${provider}.${formatTargetHint(hint, true)}`;
|
|
185
|
+
}
|
|
186
|
+
function unknownTargetError(provider, raw, hint) {
|
|
187
|
+
return new Error(unknownTargetMessage(provider, raw, hint));
|
|
188
|
+
}
|
|
189
|
+
function formatTargetHint(hint, withLabel = false) {
|
|
190
|
+
if (!hint) return "";
|
|
191
|
+
return withLabel ? ` Hint: ${hint}` : ` ${hint}`;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
//#endregion
|
|
195
|
+
export { ToolInputError as a, imageResultFromFile as c, readNumberParam as d, readReactionParams as f, readStringParam as h, ToolAuthorizationError as i, jsonResult as l, readStringOrNumberParam as m, missingTargetError as n, createActionGate as o, readStringArrayParam as p, unknownTargetError as r, imageResult as s, ambiguousTargetError as t, parseAvailableTags as u };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { G as normalizeAccountId } from "./workspace-
|
|
2
|
-
import { h as normalizeE164, u as escapeRegExp } from "./logger-
|
|
3
|
-
import { Ht as CHAT_CHANNEL_ORDER, Ut as getChatChannelMeta, Zt as requireActivePluginRegistry } from "./model-selection-
|
|
4
|
-
import { a as normalizeWhatsAppTarget, b as resolveDiscordAccount, l as resolveTelegramAccount, m as resolveSlackReplyToMode, p as resolveSlackAccount } from "./plugins-
|
|
5
|
-
import { h as resolveAccountEntry, n as resolveWhatsAppAccount } from "./accounts-
|
|
6
|
-
import { n as resolveSignalAccount } from "./accounts-
|
|
7
|
-
import { t as resolveIMessageAccount } from "./accounts-
|
|
1
|
+
import { G as normalizeAccountId } from "./workspace-CUVC6GX1.js";
|
|
2
|
+
import { h as normalizeE164, u as escapeRegExp } from "./logger-DMZQQtxK.js";
|
|
3
|
+
import { Ht as CHAT_CHANNEL_ORDER, Ut as getChatChannelMeta, Zt as requireActivePluginRegistry } from "./model-selection-idoqPmw0.js";
|
|
4
|
+
import { a as normalizeWhatsAppTarget, b as resolveDiscordAccount, l as resolveTelegramAccount, m as resolveSlackReplyToMode, p as resolveSlackAccount } from "./plugins-CWkRQYDj.js";
|
|
5
|
+
import { h as resolveAccountEntry, n as resolveWhatsAppAccount } from "./accounts-yfBeCZtS.js";
|
|
6
|
+
import { n as resolveSignalAccount } from "./accounts-L9ByEpnP.js";
|
|
7
|
+
import { t as resolveIMessageAccount } from "./accounts-BOzyfwW4.js";
|
|
8
8
|
|
|
9
9
|
//#region src/config/types.tools.ts
|
|
10
10
|
const TOOLS_BY_SENDER_KEY_TYPES = [
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { u as escapeRegExp } from "./logger-DMZQQtxK.js";
|
|
2
|
+
|
|
3
|
+
//#region src/auto-reply/tokens.ts
|
|
4
|
+
const HEARTBEAT_TOKEN = "HEARTBEAT_OK";
|
|
5
|
+
const SILENT_REPLY_TOKEN = "NO_REPLY";
|
|
6
|
+
const silentExactRegexByToken = /* @__PURE__ */ new Map();
|
|
7
|
+
const silentTrailingRegexByToken = /* @__PURE__ */ new Map();
|
|
8
|
+
function getSilentExactRegex(token) {
|
|
9
|
+
const cached = silentExactRegexByToken.get(token);
|
|
10
|
+
if (cached) return cached;
|
|
11
|
+
const escaped = escapeRegExp(token);
|
|
12
|
+
const regex = new RegExp(`^\\s*${escaped}\\s*$`);
|
|
13
|
+
silentExactRegexByToken.set(token, regex);
|
|
14
|
+
return regex;
|
|
15
|
+
}
|
|
16
|
+
function getSilentTrailingRegex(token) {
|
|
17
|
+
const cached = silentTrailingRegexByToken.get(token);
|
|
18
|
+
if (cached) return cached;
|
|
19
|
+
const escaped = escapeRegExp(token);
|
|
20
|
+
const regex = new RegExp(`(?:^|\\s+|\\*+)${escaped}\\s*$`);
|
|
21
|
+
silentTrailingRegexByToken.set(token, regex);
|
|
22
|
+
return regex;
|
|
23
|
+
}
|
|
24
|
+
function isSilentReplyText(text, token = SILENT_REPLY_TOKEN) {
|
|
25
|
+
if (!text) return false;
|
|
26
|
+
return getSilentExactRegex(token).test(text);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Strip a trailing silent reply token from mixed-content text.
|
|
30
|
+
* Returns the remaining text with the token removed (trimmed).
|
|
31
|
+
* If the result is empty, the entire message should be treated as silent.
|
|
32
|
+
*/
|
|
33
|
+
function stripSilentToken(text, token = SILENT_REPLY_TOKEN) {
|
|
34
|
+
return text.replace(getSilentTrailingRegex(token), "").trim();
|
|
35
|
+
}
|
|
36
|
+
function isSilentReplyPrefixText(text, token = SILENT_REPLY_TOKEN) {
|
|
37
|
+
if (!text) return false;
|
|
38
|
+
const trimmed = text.trimStart();
|
|
39
|
+
if (!trimmed) return false;
|
|
40
|
+
if (trimmed !== trimmed.toUpperCase()) return false;
|
|
41
|
+
const normalized = trimmed.toUpperCase();
|
|
42
|
+
if (!normalized) return false;
|
|
43
|
+
if (normalized.length < 2) return false;
|
|
44
|
+
if (/[^A-Z_]/.test(normalized)) return false;
|
|
45
|
+
const tokenUpper = token.toUpperCase();
|
|
46
|
+
if (!tokenUpper.startsWith(normalized)) return false;
|
|
47
|
+
if (normalized.includes("_")) return true;
|
|
48
|
+
return tokenUpper === SILENT_REPLY_TOKEN && normalized === "NO";
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
export { stripSilentToken as a, isSilentReplyText as i, SILENT_REPLY_TOKEN as n, isSilentReplyPrefixText as r, HEARTBEAT_TOKEN as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as createSubsystemLogger } from "./subsystem-
|
|
2
|
-
import { i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-
|
|
1
|
+
import { t as createSubsystemLogger } from "./subsystem-Di1z8l0Z.js";
|
|
2
|
+
import { i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-CehkHxmW.js";
|
|
3
3
|
|
|
4
4
|
//#region src/media/base64.ts
|
|
5
5
|
function estimateBase64DecodedBytes(base64) {
|