openclaw-multi-auto 1.7.2 → 1.7.3
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-L9ByEpnP.js → accounts-C9HcPI9h.js} +2 -2
- package/dist/{accounts-BOzyfwW4.js → accounts-C_lW3Ag9.js} +2 -2
- package/dist/{accounts-yfBeCZtS.js → accounts-Tgelvk0C.js} +17 -17
- package/dist/{active-listener-D1yqT1cw.js → active-listener-BEdprTkn.js} +2 -2
- package/dist/{api-key-rotation-DtsNS2Nb.js → api-key-rotation-BJpKWXy0.js} +2 -2
- package/dist/{audio-preflight-DpxQCpsA.js → audio-preflight-BMvgEQ5j.js} +32 -32
- package/dist/{audio-transcription-runner-28fcRNNi.js → audio-transcription-runner-gLFfz8fr.js} +12 -12
- package/dist/{audit-membership-runtime-DWyHWAHM.js → audit-membership-runtime-Dntemq07.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-xHOMiarp.js → channel-activity-BDnjYF7B.js} +3 -3
- package/dist/{chrome-DwizpzOC.js → chrome-DxxEKrY7.js} +18 -18
- package/dist/{commands-registry-V1zZ5pPC.js → commands-registry-D5qXbFJn.js} +4 -4
- package/dist/{deliver-D4o6VIur.js → deliver-DbdywYJE.js} +21 -21
- package/dist/deliver-runtime-BFs7iAZF.js +36 -0
- package/dist/deps-send-discord.runtime-DZUccI6Z.js +26 -0
- package/dist/deps-send-imessage.runtime-CF3OpoqY.js +25 -0
- package/dist/deps-send-signal.runtime-Cw4-ozeO.js +24 -0
- package/dist/deps-send-slack.runtime-BDsDhS1P.js +22 -0
- package/dist/deps-send-telegram.runtime-D_4xVasO.js +27 -0
- package/dist/deps-send-whatsapp.runtime-DK8jqd14.js +60 -0
- package/dist/{diagnostic-Bn4PZjMZ.js → diagnostic-Co6Kghr-.js} +2 -2
- package/dist/{errors-CCLeFWAg.js → errors-xt401nuk.js} +1 -1
- package/dist/{fetch-BlJWzEP6.js → fetch-DuraYswo.js} +5 -5
- package/dist/{fetch-guard-ChYBwfiy.js → fetch-guard-DWr0d00H.js} +2 -2
- package/dist/{frontmatter-CvaMP376.js → frontmatter-BkTfEZ93.js} +3 -3
- package/dist/{fs-safe-0jAo_Whb.js → fs-safe-CTYUrIgQ.js} +4 -4
- package/dist/{github-copilot-token-D13V9YBz.js → github-copilot-token-BDioPmd6.js} +7 -7
- package/dist/{image-Bbn53mzj.js → image-eT7Y-nP5.js} +6 -6
- package/dist/{image-ops-CehkHxmW.js → image-ops-BuUnEOE0.js} +2 -2
- package/dist/image-runtime-BcAK3n8a.js +29 -0
- package/dist/{ir-DAP-B-Xw.js → ir-B83looB-.js} +8 -8
- package/dist/{legacy-names-TyzbVqa_.js → legacy-names-DOC03BkU.js} +1 -1
- package/dist/llm-slug-generator.js +51 -51
- package/dist/{logger-DMZQQtxK.js → logger-BfjWMCSD.js} +7 -7
- package/dist/{login-DiCctRo1.js → login-CrIwcrVI.js} +5 -5
- package/dist/{login-qr-MUbXgjtd.js → login-qr-BpPDZdl_.js} +10 -10
- package/dist/{manager-BW_NSIMl.js → manager-1bvuGrNR.js} +13 -13
- package/dist/manager-runtime-FO1Sx3W8.js +18 -0
- package/dist/{model-selection-idoqPmw0.js → model-selection-Dna0Gz1k.js} +43 -43
- package/dist/{outbound-C2kanETZ.js → outbound-ChDjtuD6.js} +6 -6
- package/dist/{outbound-attachment-DBrYWX8h.js → outbound-attachment-DqHlD21U.js} +2 -2
- package/dist/{path-alias-guards-DqXRZmsL.js → path-alias-guards-BzvdLvTI.js} +1 -1
- package/dist/{paths-CCxysrzL.js → paths-Bkr-BCxW.js} +4 -4
- package/dist/{paths-C6TxBCvO.js → paths-Cvc9EM8Y.js} +5 -5
- package/dist/{pi-embedded-BaGj07T0.js → pi-embedded-BQQa91aA.js} +158 -158
- package/dist/{pi-embedded-helpers-wy0DZvx1.js → pi-embedded-helpers-CLXm10bV.js} +52 -52
- package/dist/{pi-model-discovery-BGgOlX8N.js → pi-model-discovery-Dymwdjt0.js} +7 -7
- package/dist/pi-model-discovery-runtime-BeY4EUPp.js +11 -0
- package/dist/{pi-tools.before-tool-call.runtime-BuLxSyx9.js → pi-tools.before-tool-call.runtime-Cwab_5W1.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/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/plugin-sdk/pi-model-discovery-v-XPUOOf.js +134 -0
- 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-CCjEYbFm.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-ClbcYG1J.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/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-CBI2Ga0y.js → plugin-sdk/target-errors-Blia4S69.js} +2 -2
- package/dist/plugin-sdk/thinking-Bo2eosVa.js +1206 -0
- package/dist/{tokens-DxnY9ui_.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/{plugins-CWkRQYDj.js → plugins-4Rj4OjLY.js} +11 -11
- package/dist/{proxy-env-Cq5gdrbj.js → proxy-env-DlmzDx8x.js} +1 -1
- package/dist/proxy-fetch-B2pEfjbR.js +38 -0
- package/dist/{pw-ai-Cl1Lc7RC.js → pw-ai-DNMjFMqH.js} +14 -14
- package/dist/{qmd-manager-BsYsO9Ii.js → qmd-manager-BtIKUaO9.js} +10 -10
- package/dist/{query-expansion-DtLc3wjL.js → query-expansion-CX-1fS52.js} +6 -6
- package/dist/redact-COik8ET1.js +319 -0
- package/dist/{run-with-concurrency-D_ZpbgEG.js → run-with-concurrency-BgYfgkXT.js} +4 -4
- package/dist/runtime-whatsapp-login.runtime-DUb55byQ.js +13 -0
- package/dist/runtime-whatsapp-outbound.runtime-Bii_xSfI.js +22 -0
- package/dist/{send-Dx2RkUOZ.js → send-6lz6rNVP.js} +6 -6
- package/dist/{send-vmONuVgL.js → send-BHTiZcH3.js} +26 -26
- package/dist/{send-Bj776ESJ.js → send-L7gRiwyd.js} +7 -7
- package/dist/{send-DcxmcFi_.js → send-PE6cwoTe.js} +8 -8
- package/dist/{send-BQERFNyo.js → send-dfu6_rgf.js} +5 -5
- package/dist/{session-A4QhBRvH.js → session-D8ImowSs.js} +8 -8
- package/dist/{skill-commands-CMzBZKG2.js → skill-commands-DNqJ-kwn.js} +9 -9
- package/dist/{skills-CE_iqvM5.js → skills-7ODkHQYp.js} +22 -22
- package/dist/slash-commands.runtime-CVw6566g.js +16 -0
- package/dist/slash-dispatch.runtime-B9Ygtzi4.js +56 -0
- package/dist/slash-skill-commands.runtime-DxZ4z5h6.js +20 -0
- package/dist/{store--eR1R_UX.js → store-D89wDcz9.js} +2 -2
- package/dist/subagent-registry-runtime-DL1Wv7nA.js +56 -0
- package/dist/{subsystem-Di1z8l0Z.js → subsystem-B45WV3qB.js} +14 -14
- package/dist/{tables-d739Y1xW.js → tables-mE4cJBN2.js} +1 -1
- package/dist/target-errors-mnlwhAjP.js +195 -0
- package/dist/{thinking-DXYisHiZ.js → thinking-BeGmb5k6.js} +7 -7
- package/dist/tokens-q32vI39c.js +52 -0
- package/dist/{tool-images-2cBx1W8h.js → tool-images-RZdHiZcG.js} +2 -2
- package/dist/{web-CzWRVmFt.js → web-Btj-e8kN.js} +55 -55
- package/dist/{whatsapp-actions-iEArE_Ez.js → whatsapp-actions-BHbJJyqw.js} +21 -21
- package/dist/{workspace-CUVC6GX1.js → workspace-U-DyR64O.js} +20 -20
- package/package.json +1 -1
- package/scripts/create-instance.sh +6 -2
- package/dist/deliver-runtime-P-G3bPjW.js +0 -36
- package/dist/deps-send-discord.runtime-DnbhTFX9.js +0 -26
- package/dist/deps-send-imessage.runtime-BOiQ6mDx.js +0 -25
- package/dist/deps-send-signal.runtime-CTcl388M.js +0 -24
- package/dist/deps-send-slack.runtime-CCqBz4Kg.js +0 -22
- package/dist/deps-send-telegram.runtime-DGSKTCpH.js +0 -27
- package/dist/deps-send-whatsapp.runtime-CJkTHkah.js +0 -60
- package/dist/image-runtime-CVv2ra9J.js +0 -29
- package/dist/manager-runtime-BN6VevdC.js +0 -18
- package/dist/pi-model-discovery-runtime-Bwmi4Ev8.js +0 -11
- package/dist/runtime-whatsapp-login.runtime-IeylZEl4.js +0 -13
- package/dist/runtime-whatsapp-outbound.runtime-ClBRuLsq.js +0 -22
- package/dist/slash-commands.runtime-Cpn2tYW4.js +0 -16
- package/dist/slash-dispatch.runtime-DoBAQBU5.js +0 -56
- package/dist/slash-skill-commands.runtime-DKMvvdDW.js +0 -20
- package/dist/subagent-registry-runtime-ppWS3tVu.js +0 -56
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { a as createSubsystemLogger } from "./logger-CZY9KIoY.js";
|
|
2
|
+
import { i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-BSiMpAw4.js";
|
|
3
|
+
|
|
4
|
+
//#region src/media/base64.ts
|
|
5
|
+
function estimateBase64DecodedBytes(base64) {
|
|
6
|
+
let effectiveLen = 0;
|
|
7
|
+
for (let i = 0; i < base64.length; i += 1) {
|
|
8
|
+
if (base64.charCodeAt(i) <= 32) continue;
|
|
9
|
+
effectiveLen += 1;
|
|
10
|
+
}
|
|
11
|
+
if (effectiveLen === 0) return 0;
|
|
12
|
+
let padding = 0;
|
|
13
|
+
let end = base64.length - 1;
|
|
14
|
+
while (end >= 0 && base64.charCodeAt(end) <= 32) end -= 1;
|
|
15
|
+
if (end >= 0 && base64[end] === "=") {
|
|
16
|
+
padding = 1;
|
|
17
|
+
end -= 1;
|
|
18
|
+
while (end >= 0 && base64.charCodeAt(end) <= 32) end -= 1;
|
|
19
|
+
if (end >= 0 && base64[end] === "=") padding = 2;
|
|
20
|
+
}
|
|
21
|
+
const estimated = Math.floor(effectiveLen * 3 / 4) - padding;
|
|
22
|
+
return Math.max(0, estimated);
|
|
23
|
+
}
|
|
24
|
+
const BASE64_CHARS_RE = /^[A-Za-z0-9+/]+={0,2}$/;
|
|
25
|
+
/**
|
|
26
|
+
* Normalize and validate a base64 string.
|
|
27
|
+
* Returns canonical base64 (no whitespace) or undefined when invalid.
|
|
28
|
+
*/
|
|
29
|
+
function canonicalizeBase64(base64) {
|
|
30
|
+
const cleaned = base64.replace(/\s+/g, "");
|
|
31
|
+
if (!cleaned || cleaned.length % 4 !== 0 || !BASE64_CHARS_RE.test(cleaned)) return;
|
|
32
|
+
return cleaned;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/agents/image-sanitization.ts
|
|
37
|
+
const DEFAULT_IMAGE_MAX_DIMENSION_PX = 1200;
|
|
38
|
+
const DEFAULT_IMAGE_MAX_BYTES = 5 * 1024 * 1024;
|
|
39
|
+
function resolveImageSanitizationLimits(cfg) {
|
|
40
|
+
const configured = cfg?.agents?.defaults?.imageMaxDimensionPx;
|
|
41
|
+
if (typeof configured !== "number" || !Number.isFinite(configured)) return {};
|
|
42
|
+
return { maxDimensionPx: Math.max(1, Math.floor(configured)) };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/agents/tool-images.ts
|
|
47
|
+
const MAX_IMAGE_DIMENSION_PX = DEFAULT_IMAGE_MAX_DIMENSION_PX;
|
|
48
|
+
const MAX_IMAGE_BYTES = DEFAULT_IMAGE_MAX_BYTES;
|
|
49
|
+
const log = createSubsystemLogger("agents/tool-images");
|
|
50
|
+
function isImageBlock(block) {
|
|
51
|
+
if (!block || typeof block !== "object") return false;
|
|
52
|
+
const rec = block;
|
|
53
|
+
return rec.type === "image" && typeof rec.data === "string" && typeof rec.mimeType === "string";
|
|
54
|
+
}
|
|
55
|
+
function isTextBlock(block) {
|
|
56
|
+
if (!block || typeof block !== "object") return false;
|
|
57
|
+
const rec = block;
|
|
58
|
+
return rec.type === "text" && typeof rec.text === "string";
|
|
59
|
+
}
|
|
60
|
+
function inferMimeTypeFromBase64(base64) {
|
|
61
|
+
const trimmed = base64.trim();
|
|
62
|
+
if (!trimmed) return;
|
|
63
|
+
if (trimmed.startsWith("/9j/")) return "image/jpeg";
|
|
64
|
+
if (trimmed.startsWith("iVBOR")) return "image/png";
|
|
65
|
+
if (trimmed.startsWith("R0lGOD")) return "image/gif";
|
|
66
|
+
}
|
|
67
|
+
function formatBytesShort(bytes) {
|
|
68
|
+
if (!Number.isFinite(bytes) || bytes < 1024) return `${Math.max(0, Math.round(bytes))}B`;
|
|
69
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;
|
|
70
|
+
return `${(bytes / (1024 * 1024)).toFixed(2)}MB`;
|
|
71
|
+
}
|
|
72
|
+
function parseMediaPathFromText(text) {
|
|
73
|
+
for (const line of text.split(/\r?\n/u)) {
|
|
74
|
+
const trimmed = line.trim();
|
|
75
|
+
if (!trimmed.startsWith("MEDIA:")) continue;
|
|
76
|
+
const raw = trimmed.slice(6).trim();
|
|
77
|
+
if (!raw) continue;
|
|
78
|
+
return (raw.match(/^`([^`]+)`$/u)?.[1] ?? raw).trim();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function fileNameFromPathLike(pathLike) {
|
|
82
|
+
const value = pathLike.trim();
|
|
83
|
+
if (!value) return;
|
|
84
|
+
try {
|
|
85
|
+
const candidate = new URL(value).pathname.split("/").filter(Boolean).at(-1);
|
|
86
|
+
return candidate && candidate.length > 0 ? candidate : void 0;
|
|
87
|
+
} catch {}
|
|
88
|
+
const candidate = value.replaceAll("\\", "/").split("/").filter(Boolean).at(-1);
|
|
89
|
+
return candidate && candidate.length > 0 ? candidate : void 0;
|
|
90
|
+
}
|
|
91
|
+
function inferImageFileName(params) {
|
|
92
|
+
const rec = params.block;
|
|
93
|
+
for (const key of [
|
|
94
|
+
"fileName",
|
|
95
|
+
"filename",
|
|
96
|
+
"path",
|
|
97
|
+
"url"
|
|
98
|
+
]) {
|
|
99
|
+
const raw = rec[key];
|
|
100
|
+
if (typeof raw !== "string" || raw.trim().length === 0) continue;
|
|
101
|
+
const candidate = fileNameFromPathLike(raw);
|
|
102
|
+
if (candidate) return candidate;
|
|
103
|
+
}
|
|
104
|
+
if (typeof rec.name === "string" && rec.name.trim().length > 0) return rec.name.trim();
|
|
105
|
+
if (params.mediaPathHint) {
|
|
106
|
+
const candidate = fileNameFromPathLike(params.mediaPathHint);
|
|
107
|
+
if (candidate) return candidate;
|
|
108
|
+
}
|
|
109
|
+
if (typeof params.label === "string" && params.label.startsWith("read:")) {
|
|
110
|
+
const candidate = fileNameFromPathLike(params.label.slice(5));
|
|
111
|
+
if (candidate) return candidate;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async function resizeImageBase64IfNeeded(params) {
|
|
115
|
+
const buf = Buffer.from(params.base64, "base64");
|
|
116
|
+
const meta = await getImageMetadata(buf);
|
|
117
|
+
const width = meta?.width;
|
|
118
|
+
const height = meta?.height;
|
|
119
|
+
const overBytes = buf.byteLength > params.maxBytes;
|
|
120
|
+
const hasDimensions = typeof width === "number" && typeof height === "number";
|
|
121
|
+
const overDimensions = hasDimensions && (width > params.maxDimensionPx || height > params.maxDimensionPx);
|
|
122
|
+
if (hasDimensions && !overBytes && width <= params.maxDimensionPx && height <= params.maxDimensionPx) return {
|
|
123
|
+
base64: params.base64,
|
|
124
|
+
mimeType: params.mimeType,
|
|
125
|
+
resized: false,
|
|
126
|
+
width,
|
|
127
|
+
height
|
|
128
|
+
};
|
|
129
|
+
const maxDim = hasDimensions ? Math.max(width ?? 0, height ?? 0) : params.maxDimensionPx;
|
|
130
|
+
const sideStart = maxDim > 0 ? Math.min(params.maxDimensionPx, maxDim) : params.maxDimensionPx;
|
|
131
|
+
const sideGrid = buildImageResizeSideGrid(params.maxDimensionPx, sideStart);
|
|
132
|
+
let smallest = null;
|
|
133
|
+
for (const side of sideGrid) for (const quality of IMAGE_REDUCE_QUALITY_STEPS) {
|
|
134
|
+
const out = await resizeToJpeg({
|
|
135
|
+
buffer: buf,
|
|
136
|
+
maxSide: side,
|
|
137
|
+
quality,
|
|
138
|
+
withoutEnlargement: true
|
|
139
|
+
});
|
|
140
|
+
if (!smallest || out.byteLength < smallest.size) smallest = {
|
|
141
|
+
buffer: out,
|
|
142
|
+
size: out.byteLength
|
|
143
|
+
};
|
|
144
|
+
if (out.byteLength <= params.maxBytes) {
|
|
145
|
+
const sourcePixels = typeof width === "number" && typeof height === "number" ? `${width}x${height}px` : "unknown";
|
|
146
|
+
const sourceWithFile = params.fileName ? `${params.fileName} ${sourcePixels}` : sourcePixels;
|
|
147
|
+
const byteReductionPct = buf.byteLength > 0 ? Number(((buf.byteLength - out.byteLength) / buf.byteLength * 100).toFixed(1)) : 0;
|
|
148
|
+
log.info(`Image resized to fit limits: ${sourceWithFile} ${formatBytesShort(buf.byteLength)} -> ${formatBytesShort(out.byteLength)} (-${byteReductionPct}%)`, {
|
|
149
|
+
label: params.label,
|
|
150
|
+
fileName: params.fileName,
|
|
151
|
+
sourceMimeType: params.mimeType,
|
|
152
|
+
sourceWidth: width,
|
|
153
|
+
sourceHeight: height,
|
|
154
|
+
sourceBytes: buf.byteLength,
|
|
155
|
+
maxBytes: params.maxBytes,
|
|
156
|
+
maxDimensionPx: params.maxDimensionPx,
|
|
157
|
+
triggerOverBytes: overBytes,
|
|
158
|
+
triggerOverDimensions: overDimensions,
|
|
159
|
+
outputMimeType: "image/jpeg",
|
|
160
|
+
outputBytes: out.byteLength,
|
|
161
|
+
outputQuality: quality,
|
|
162
|
+
outputMaxSide: side,
|
|
163
|
+
byteReductionPct
|
|
164
|
+
});
|
|
165
|
+
return {
|
|
166
|
+
base64: out.toString("base64"),
|
|
167
|
+
mimeType: "image/jpeg",
|
|
168
|
+
resized: true,
|
|
169
|
+
width,
|
|
170
|
+
height
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
const best = smallest?.buffer ?? buf;
|
|
175
|
+
const maxMb = (params.maxBytes / (1024 * 1024)).toFixed(0);
|
|
176
|
+
const gotMb = (best.byteLength / (1024 * 1024)).toFixed(2);
|
|
177
|
+
const sourcePixels = typeof width === "number" && typeof height === "number" ? `${width}x${height}px` : "unknown";
|
|
178
|
+
const sourceWithFile = params.fileName ? `${params.fileName} ${sourcePixels}` : sourcePixels;
|
|
179
|
+
log.warn(`Image resize failed to fit limits: ${sourceWithFile} best=${formatBytesShort(best.byteLength)} limit=${formatBytesShort(params.maxBytes)}`, {
|
|
180
|
+
label: params.label,
|
|
181
|
+
fileName: params.fileName,
|
|
182
|
+
sourceMimeType: params.mimeType,
|
|
183
|
+
sourceWidth: width,
|
|
184
|
+
sourceHeight: height,
|
|
185
|
+
sourceBytes: buf.byteLength,
|
|
186
|
+
maxDimensionPx: params.maxDimensionPx,
|
|
187
|
+
maxBytes: params.maxBytes,
|
|
188
|
+
smallestCandidateBytes: best.byteLength,
|
|
189
|
+
triggerOverBytes: overBytes,
|
|
190
|
+
triggerOverDimensions: overDimensions
|
|
191
|
+
});
|
|
192
|
+
throw new Error(`Image could not be reduced below ${maxMb}MB (got ${gotMb}MB)`);
|
|
193
|
+
}
|
|
194
|
+
async function sanitizeContentBlocksImages(blocks, label, opts = {}) {
|
|
195
|
+
const maxDimensionPx = Math.max(opts.maxDimensionPx ?? MAX_IMAGE_DIMENSION_PX, 1);
|
|
196
|
+
const maxBytes = Math.max(opts.maxBytes ?? MAX_IMAGE_BYTES, 1);
|
|
197
|
+
const out = [];
|
|
198
|
+
let mediaPathHint;
|
|
199
|
+
for (const block of blocks) {
|
|
200
|
+
if (isTextBlock(block)) {
|
|
201
|
+
const mediaPath = parseMediaPathFromText(block.text);
|
|
202
|
+
if (mediaPath) mediaPathHint = mediaPath;
|
|
203
|
+
}
|
|
204
|
+
if (!isImageBlock(block)) {
|
|
205
|
+
out.push(block);
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const data = block.data.trim();
|
|
209
|
+
if (!data) {
|
|
210
|
+
out.push({
|
|
211
|
+
type: "text",
|
|
212
|
+
text: `[${label}] omitted empty image payload`
|
|
213
|
+
});
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const canonicalData = canonicalizeBase64(data);
|
|
217
|
+
if (!canonicalData) {
|
|
218
|
+
out.push({
|
|
219
|
+
type: "text",
|
|
220
|
+
text: `[${label}] omitted image payload: invalid base64`
|
|
221
|
+
});
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
const mimeType = inferMimeTypeFromBase64(canonicalData) ?? block.mimeType;
|
|
226
|
+
const resized = await resizeImageBase64IfNeeded({
|
|
227
|
+
base64: canonicalData,
|
|
228
|
+
mimeType,
|
|
229
|
+
maxDimensionPx,
|
|
230
|
+
maxBytes,
|
|
231
|
+
label,
|
|
232
|
+
fileName: inferImageFileName({
|
|
233
|
+
block,
|
|
234
|
+
label,
|
|
235
|
+
mediaPathHint
|
|
236
|
+
})
|
|
237
|
+
});
|
|
238
|
+
out.push({
|
|
239
|
+
...block,
|
|
240
|
+
data: resized.base64,
|
|
241
|
+
mimeType: resized.resized ? resized.mimeType : mimeType
|
|
242
|
+
});
|
|
243
|
+
} catch (err) {
|
|
244
|
+
out.push({
|
|
245
|
+
type: "text",
|
|
246
|
+
text: `[${label}] omitted image payload: ${String(err)}`
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return out;
|
|
251
|
+
}
|
|
252
|
+
async function sanitizeImageBlocks(images, label, opts = {}) {
|
|
253
|
+
if (images.length === 0) return {
|
|
254
|
+
images,
|
|
255
|
+
dropped: 0
|
|
256
|
+
};
|
|
257
|
+
const next = (await sanitizeContentBlocksImages(images, label, opts)).filter(isImageBlock);
|
|
258
|
+
return {
|
|
259
|
+
images: next,
|
|
260
|
+
dropped: Math.max(0, images.length - next.length)
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
async function sanitizeToolResultImages(result, label, opts = {}) {
|
|
264
|
+
const content = Array.isArray(result.content) ? result.content : [];
|
|
265
|
+
if (!content.some((b) => isImageBlock(b) || isTextBlock(b))) return result;
|
|
266
|
+
const next = await sanitizeContentBlocksImages(content, label, opts);
|
|
267
|
+
return {
|
|
268
|
+
...result,
|
|
269
|
+
content: next
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
//#endregion
|
|
274
|
+
export { canonicalizeBase64 as a, resolveImageSanitizationLimits as i, sanitizeImageBlocks as n, estimateBase64DecodedBytes as o, sanitizeToolResultImages as r, sanitizeContentBlocksImages as t };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import "./run-with-concurrency-Bt_ks0Qa.js";
|
|
2
|
+
import { _ as webAuthExists, c as logWebSelfId, d as pickWebChannel, o as WA_WEB_AUTH_DIR } from "./accounts-DP1-L-QS.js";
|
|
3
|
+
import "./reply-DAo_Jt8K.js";
|
|
4
|
+
import "./paths-MKyEVmEb.js";
|
|
5
|
+
import "./github-copilot-token-D5fdS6xD.js";
|
|
6
|
+
import "./config-BkEnz2Po.js";
|
|
7
|
+
import "./logger-CZY9KIoY.js";
|
|
8
|
+
import "./thinking-Bo2eosVa.js";
|
|
9
|
+
import "./image-ops-BSiMpAw4.js";
|
|
10
|
+
import "./pi-embedded-helpers-1R1gu7eX.js";
|
|
11
|
+
import "./plugins-DeBZB9l_.js";
|
|
12
|
+
import "./accounts-CJWOBzwB.js";
|
|
13
|
+
import "./accounts-DZhWlEg3.js";
|
|
14
|
+
import "./send-DTB24bEF.js";
|
|
15
|
+
import "./paths-vTM3Lh3X.js";
|
|
16
|
+
import "./fetch-Bv4TQOMH.js";
|
|
17
|
+
import "./redact-DjVX-1N3.js";
|
|
18
|
+
import "./errors-DaiAM-yU.js";
|
|
19
|
+
import "./channel-activity-F3d0yUwy.js";
|
|
20
|
+
import "./path-alias-guards-DBjLbIX_.js";
|
|
21
|
+
import "./fs-safe-B8y811FR.js";
|
|
22
|
+
import "./ssrf-cFtplYtS.js";
|
|
23
|
+
import "./fetch-guard-DETCcJzQ.js";
|
|
24
|
+
import "./local-roots-BUP4YBmR.js";
|
|
25
|
+
import "./ir-DQ7_HbvK.js";
|
|
26
|
+
import "./render-HmipMDlP.js";
|
|
27
|
+
import "./tables-C47P4GTN.js";
|
|
28
|
+
import "./send-DfHadjZ_.js";
|
|
29
|
+
import "./send-CQpMudwO.js";
|
|
30
|
+
import "./tool-images-Gk_-0y2N.js";
|
|
31
|
+
import "./target-errors-Blia4S69.js";
|
|
32
|
+
import "./send-DQHLzVyO.js";
|
|
33
|
+
import "./audio-transcription-runner-DkoPNPYt.js";
|
|
34
|
+
import "./tokens-DgNRBwIg.js";
|
|
35
|
+
import "./skill-commands-CkGeFUMl.js";
|
|
36
|
+
import "./skills-CBkHBYPq.js";
|
|
37
|
+
import "./chrome-BXoCyCkY.js";
|
|
38
|
+
import "./deliver-B6AG_l67.js";
|
|
39
|
+
import "./diagnostic-CsP-lEkI.js";
|
|
40
|
+
import "./store-5nyxY3WU.js";
|
|
41
|
+
import "./commands-registry-t7cXBTfN.js";
|
|
42
|
+
import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-QF7EpjeP.js";
|
|
43
|
+
import "./image-DjTEkYZE.js";
|
|
44
|
+
import "./api-key-rotation-BRE4X2tf.js";
|
|
45
|
+
import "./proxy-fetch-ChxOhWF4.js";
|
|
46
|
+
import "./pi-model-discovery-v-XPUOOf.js";
|
|
47
|
+
import "./send-XXlW2iny.js";
|
|
48
|
+
import "./outbound-attachment-Dy6fyf6H.js";
|
|
49
|
+
import "./proxy-BKdNrmWL.js";
|
|
50
|
+
import "./manager-I6KbPihW.js";
|
|
51
|
+
import "./query-expansion-CeyKUeDW.js";
|
|
52
|
+
import { t as sendMessageWhatsApp } from "./outbound-NS6UHnB6.js";
|
|
53
|
+
import { i as waitForWaConnection, t as createWaSocket } from "./session-6TF6MyaC.js";
|
|
54
|
+
import { t as loginWeb } from "./login-BxEKLlCo.js";
|
|
55
|
+
|
|
56
|
+
export { WA_WEB_AUTH_DIR, createWaSocket, logWebSelfId, loginWeb, monitorWebChannel, monitorWebInbox, pickWebChannel, sendMessageWhatsApp, waitForWaConnection, webAuthExists };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import "./run-with-concurrency-Bt_ks0Qa.js";
|
|
2
|
+
import { i as resolveWhatsAppAccount } from "./accounts-DP1-L-QS.js";
|
|
3
|
+
import "./paths-MKyEVmEb.js";
|
|
4
|
+
import "./github-copilot-token-D5fdS6xD.js";
|
|
5
|
+
import "./config-BkEnz2Po.js";
|
|
6
|
+
import "./logger-CZY9KIoY.js";
|
|
7
|
+
import "./image-ops-BSiMpAw4.js";
|
|
8
|
+
import "./plugins-DeBZB9l_.js";
|
|
9
|
+
import "./path-alias-guards-DBjLbIX_.js";
|
|
10
|
+
import "./fs-safe-B8y811FR.js";
|
|
11
|
+
import "./ssrf-cFtplYtS.js";
|
|
12
|
+
import "./fetch-guard-DETCcJzQ.js";
|
|
13
|
+
import "./local-roots-BUP4YBmR.js";
|
|
14
|
+
import "./ir-DQ7_HbvK.js";
|
|
15
|
+
import "./render-HmipMDlP.js";
|
|
16
|
+
import "./tables-C47P4GTN.js";
|
|
17
|
+
import "./tool-images-Gk_-0y2N.js";
|
|
18
|
+
import { f as readReactionParams, h as readStringParam, i as ToolAuthorizationError, l as jsonResult, o as createActionGate } from "./target-errors-Blia4S69.js";
|
|
19
|
+
import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-B42qgQS9.js";
|
|
20
|
+
import { r as sendReactionWhatsApp } from "./outbound-NS6UHnB6.js";
|
|
21
|
+
|
|
22
|
+
//#region src/agents/tools/whatsapp-target-auth.ts
|
|
23
|
+
function resolveAuthorizedWhatsAppOutboundTarget(params) {
|
|
24
|
+
const account = resolveWhatsAppAccount({
|
|
25
|
+
cfg: params.cfg,
|
|
26
|
+
accountId: params.accountId
|
|
27
|
+
});
|
|
28
|
+
const resolution = resolveWhatsAppOutboundTarget({
|
|
29
|
+
to: params.chatJid,
|
|
30
|
+
allowFrom: account.allowFrom ?? [],
|
|
31
|
+
mode: "implicit"
|
|
32
|
+
});
|
|
33
|
+
if (!resolution.ok) throw new ToolAuthorizationError(`WhatsApp ${params.actionLabel} blocked: chatJid "${params.chatJid}" is not in the configured allowFrom list for account "${account.accountId}".`);
|
|
34
|
+
return {
|
|
35
|
+
to: resolution.to,
|
|
36
|
+
accountId: account.accountId
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region src/agents/tools/whatsapp-actions.ts
|
|
42
|
+
async function handleWhatsAppAction(params, cfg) {
|
|
43
|
+
const action = readStringParam(params, "action", { required: true });
|
|
44
|
+
const isActionEnabled = createActionGate(cfg.channels?.whatsapp?.actions);
|
|
45
|
+
if (action === "react") {
|
|
46
|
+
if (!isActionEnabled("reactions")) throw new Error("WhatsApp reactions are disabled.");
|
|
47
|
+
const chatJid = readStringParam(params, "chatJid", { required: true });
|
|
48
|
+
const messageId = readStringParam(params, "messageId", { required: true });
|
|
49
|
+
const { emoji, remove, isEmpty } = readReactionParams(params, { removeErrorMessage: "Emoji is required to remove a WhatsApp reaction." });
|
|
50
|
+
const participant = readStringParam(params, "participant");
|
|
51
|
+
const accountId = readStringParam(params, "accountId");
|
|
52
|
+
const fromMeRaw = params.fromMe;
|
|
53
|
+
const fromMe = typeof fromMeRaw === "boolean" ? fromMeRaw : void 0;
|
|
54
|
+
const resolved = resolveAuthorizedWhatsAppOutboundTarget({
|
|
55
|
+
cfg,
|
|
56
|
+
chatJid,
|
|
57
|
+
accountId,
|
|
58
|
+
actionLabel: "reaction"
|
|
59
|
+
});
|
|
60
|
+
const resolvedEmoji = remove ? "" : emoji;
|
|
61
|
+
await sendReactionWhatsApp(resolved.to, messageId, resolvedEmoji, {
|
|
62
|
+
verbose: false,
|
|
63
|
+
fromMe,
|
|
64
|
+
participant: participant ?? void 0,
|
|
65
|
+
accountId: resolved.accountId
|
|
66
|
+
});
|
|
67
|
+
if (!remove && !isEmpty) return jsonResult({
|
|
68
|
+
ok: true,
|
|
69
|
+
added: emoji
|
|
70
|
+
});
|
|
71
|
+
return jsonResult({
|
|
72
|
+
ok: true,
|
|
73
|
+
removed: true
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
throw new Error(`Unsupported WhatsApp action: ${action}`);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
//#endregion
|
|
80
|
+
export { handleWhatsAppAction };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { l as resolveDefaultAgentId } from "./run-with-concurrency-
|
|
2
|
-
import { t as createSubsystemLogger } from "./subsystem-
|
|
3
|
-
import { G as normalizeAccountId, K as normalizeOptionalAccountId, R as normalizeAgentId, W as DEFAULT_ACCOUNT_ID } from "./workspace-
|
|
4
|
-
import { h as normalizeE164 } from "./logger-
|
|
5
|
-
import { Gt as normalizeAnyChannelId, Ht as CHAT_CHANNEL_ORDER, Xt as getActivePluginRegistryVersion, Zn as isTruthyEnvValue, Zt as requireActivePluginRegistry, gr as normalizeResolvedSecretInputString, qt as normalizeChatChannelId } from "./model-selection-
|
|
6
|
-
import { g as createAccountListHelpers, h as resolveAccountEntry } from "./accounts-
|
|
7
|
-
import
|
|
1
|
+
import { l as resolveDefaultAgentId } from "./run-with-concurrency-BgYfgkXT.js";
|
|
2
|
+
import { t as createSubsystemLogger } from "./subsystem-B45WV3qB.js";
|
|
3
|
+
import { G as normalizeAccountId, K as normalizeOptionalAccountId, R as normalizeAgentId, W as DEFAULT_ACCOUNT_ID } from "./workspace-U-DyR64O.js";
|
|
4
|
+
import { h as normalizeE164 } from "./logger-BfjWMCSD.js";
|
|
5
|
+
import { Gt as normalizeAnyChannelId, Ht as CHAT_CHANNEL_ORDER, Xt as getActivePluginRegistryVersion, Zn as isTruthyEnvValue, Zt as requireActivePluginRegistry, gr as normalizeResolvedSecretInputString, qt as normalizeChatChannelId } from "./model-selection-Dna0Gz1k.js";
|
|
6
|
+
import { g as createAccountListHelpers, h as resolveAccountEntry } from "./accounts-Tgelvk0C.js";
|
|
7
|
+
import fs from "node:fs";
|
|
8
8
|
import util from "node:util";
|
|
9
9
|
|
|
10
10
|
//#region src/channels/plugins/account-action-gate.ts
|
|
@@ -317,7 +317,7 @@ function resolveTelegramToken(cfg, opts = {}) {
|
|
|
317
317
|
const accountCfg = resolveAccountCfg(accountId !== DEFAULT_ACCOUNT_ID ? accountId : DEFAULT_ACCOUNT_ID);
|
|
318
318
|
const accountTokenFile = accountCfg?.tokenFile?.trim();
|
|
319
319
|
if (accountTokenFile) {
|
|
320
|
-
if (!
|
|
320
|
+
if (!fs.existsSync(accountTokenFile)) {
|
|
321
321
|
opts.logMissingFile?.(`channels.telegram.accounts.${accountId}.tokenFile not found: ${accountTokenFile}`);
|
|
322
322
|
return {
|
|
323
323
|
token: "",
|
|
@@ -325,7 +325,7 @@ function resolveTelegramToken(cfg, opts = {}) {
|
|
|
325
325
|
};
|
|
326
326
|
}
|
|
327
327
|
try {
|
|
328
|
-
const token =
|
|
328
|
+
const token = fs.readFileSync(accountTokenFile, "utf-8").trim();
|
|
329
329
|
if (token) return {
|
|
330
330
|
token,
|
|
331
331
|
source: "tokenFile"
|
|
@@ -353,7 +353,7 @@ function resolveTelegramToken(cfg, opts = {}) {
|
|
|
353
353
|
const allowEnv = accountId === DEFAULT_ACCOUNT_ID;
|
|
354
354
|
const tokenFile = telegramCfg?.tokenFile?.trim();
|
|
355
355
|
if (tokenFile) {
|
|
356
|
-
if (!
|
|
356
|
+
if (!fs.existsSync(tokenFile)) {
|
|
357
357
|
opts.logMissingFile?.(`channels.telegram.tokenFile not found: ${tokenFile}`);
|
|
358
358
|
return {
|
|
359
359
|
token: "",
|
|
@@ -361,7 +361,7 @@ function resolveTelegramToken(cfg, opts = {}) {
|
|
|
361
361
|
};
|
|
362
362
|
}
|
|
363
363
|
try {
|
|
364
|
-
const token =
|
|
364
|
+
const token = fs.readFileSync(tokenFile, "utf-8").trim();
|
|
365
365
|
if (token) return {
|
|
366
366
|
token,
|
|
367
367
|
source: "tokenFile"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Et as parseLooseIpAddress, Tt as parseCanonicalIpAddress, _t as isBlockedSpecialUseIpv4Address, bt as isIpv4Address, gt as extractEmbeddedIpv4FromIpv6, vt as isBlockedSpecialUseIpv6Address, xt as isLegacyIpv4Literal, yt as isCanonicalDottedDecimalIPv4 } from "./model-selection-
|
|
1
|
+
import { Et as parseLooseIpAddress, Tt as parseCanonicalIpAddress, _t as isBlockedSpecialUseIpv4Address, bt as isIpv4Address, gt as extractEmbeddedIpv4FromIpv6, vt as isBlockedSpecialUseIpv6Address, xt as isLegacyIpv4Literal, yt as isCanonicalDottedDecimalIPv4 } from "./model-selection-Dna0Gz1k.js";
|
|
2
2
|
import { lookup } from "node:dns";
|
|
3
3
|
import { lookup as lookup$1 } from "node:dns/promises";
|
|
4
4
|
import { Agent } from "undici";
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { i as logWarn } from "./logger-BfjWMCSD.js";
|
|
2
|
+
import { EnvHttpProxyAgent, ProxyAgent, fetch } from "undici";
|
|
3
|
+
|
|
4
|
+
//#region src/infra/net/proxy-fetch.ts
|
|
5
|
+
/**
|
|
6
|
+
* Create a fetch function that routes requests through the given HTTP proxy.
|
|
7
|
+
* Uses undici's ProxyAgent under the hood.
|
|
8
|
+
*/
|
|
9
|
+
function makeProxyFetch(proxyUrl) {
|
|
10
|
+
const agent = new ProxyAgent(proxyUrl);
|
|
11
|
+
return ((input, init) => fetch(input, {
|
|
12
|
+
...init,
|
|
13
|
+
dispatcher: agent
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Resolve a proxy-aware fetch from standard environment variables
|
|
18
|
+
* (HTTPS_PROXY, HTTP_PROXY, https_proxy, http_proxy).
|
|
19
|
+
* Respects NO_PROXY / no_proxy exclusions via undici's EnvHttpProxyAgent.
|
|
20
|
+
* Returns undefined when no proxy is configured.
|
|
21
|
+
* Gracefully returns undefined if the proxy URL is malformed.
|
|
22
|
+
*/
|
|
23
|
+
function resolveProxyFetchFromEnv() {
|
|
24
|
+
if (!(process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.https_proxy || process.env.http_proxy)?.trim()) return;
|
|
25
|
+
try {
|
|
26
|
+
const agent = new EnvHttpProxyAgent();
|
|
27
|
+
return ((input, init) => fetch(input, {
|
|
28
|
+
...init,
|
|
29
|
+
dispatcher: agent
|
|
30
|
+
}));
|
|
31
|
+
} catch (err) {
|
|
32
|
+
logWarn(`Proxy env var set but agent creation failed — falling back to direct fetch: ${err instanceof Error ? err.message : String(err)}`);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
export { resolveProxyFetchFromEnv as n, makeProxyFetch as t };
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import "./run-with-concurrency-
|
|
2
|
-
import "./paths-
|
|
3
|
-
import { w as resolvePreferredOpenClawTmpDir } from "./subsystem-
|
|
4
|
-
import "./workspace-
|
|
5
|
-
import "./logger-
|
|
6
|
-
import { lr as formatCliCommand } from "./model-selection-
|
|
7
|
-
import "./github-copilot-token-
|
|
8
|
-
import "./legacy-names-
|
|
9
|
-
import { F as resolveStrictExistingPathsWithinRoot, L as DEFAULT_FILL_FIELD_TYPE, M as DEFAULT_TRACE_DIR, N as DEFAULT_UPLOAD_DIR, S as withCdpSocket, _ as withBrowserNavigationPolicy, d as formatAriaSnapshot, f as normalizeCdpWsUrl, g as assertBrowserNavigationResultAllowed, h as assertBrowserNavigationAllowed, k as withNoProxyForCdpUrl, t as getChromeWebSocketUrl, v as appendCdpPath, x as getHeadersWithAuth, y as fetchJson } from "./chrome-
|
|
10
|
-
import "./path-alias-guards-
|
|
11
|
-
import "./redact-
|
|
12
|
-
import { r as formatErrorMessage } from "./errors-
|
|
13
|
-
import { s as writeFileFromPathWithinRoot } from "./fs-safe-
|
|
14
|
-
import "./proxy-env-
|
|
1
|
+
import "./run-with-concurrency-BgYfgkXT.js";
|
|
2
|
+
import "./paths-Cvc9EM8Y.js";
|
|
3
|
+
import { w as resolvePreferredOpenClawTmpDir } from "./subsystem-B45WV3qB.js";
|
|
4
|
+
import "./workspace-U-DyR64O.js";
|
|
5
|
+
import "./logger-BfjWMCSD.js";
|
|
6
|
+
import { lr as formatCliCommand } from "./model-selection-Dna0Gz1k.js";
|
|
7
|
+
import "./github-copilot-token-BDioPmd6.js";
|
|
8
|
+
import "./legacy-names-DOC03BkU.js";
|
|
9
|
+
import { F as resolveStrictExistingPathsWithinRoot, L as DEFAULT_FILL_FIELD_TYPE, M as DEFAULT_TRACE_DIR, N as DEFAULT_UPLOAD_DIR, S as withCdpSocket, _ as withBrowserNavigationPolicy, d as formatAriaSnapshot, f as normalizeCdpWsUrl, g as assertBrowserNavigationResultAllowed, h as assertBrowserNavigationAllowed, k as withNoProxyForCdpUrl, t as getChromeWebSocketUrl, v as appendCdpPath, x as getHeadersWithAuth, y as fetchJson } from "./chrome-DxxEKrY7.js";
|
|
10
|
+
import "./path-alias-guards-BzvdLvTI.js";
|
|
11
|
+
import "./redact-COik8ET1.js";
|
|
12
|
+
import { r as formatErrorMessage } from "./errors-xt401nuk.js";
|
|
13
|
+
import { s as writeFileFromPathWithinRoot } from "./fs-safe-CTYUrIgQ.js";
|
|
14
|
+
import "./proxy-env-DlmzDx8x.js";
|
|
15
15
|
import fs from "node:fs/promises";
|
|
16
16
|
import path from "node:path";
|
|
17
17
|
import crypto from "node:crypto";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { c as resolveAgentWorkspaceDir } from "./run-with-concurrency-
|
|
2
|
-
import { c as resolveStateDir } from "./paths-
|
|
3
|
-
import { t as createSubsystemLogger } from "./subsystem-
|
|
4
|
-
import { $ as parseAgentSessionKey } from "./workspace-
|
|
5
|
-
import "./logger-
|
|
6
|
-
import "./path-alias-guards-
|
|
7
|
-
import "./redact-
|
|
8
|
-
import { c as writeFileWithinRoot } from "./fs-safe-
|
|
1
|
+
import { c as resolveAgentWorkspaceDir } from "./run-with-concurrency-BgYfgkXT.js";
|
|
2
|
+
import { c as resolveStateDir } from "./paths-Cvc9EM8Y.js";
|
|
3
|
+
import { t as createSubsystemLogger } from "./subsystem-B45WV3qB.js";
|
|
4
|
+
import { $ as parseAgentSessionKey } from "./workspace-U-DyR64O.js";
|
|
5
|
+
import "./logger-BfjWMCSD.js";
|
|
6
|
+
import "./path-alias-guards-BzvdLvTI.js";
|
|
7
|
+
import "./redact-COik8ET1.js";
|
|
8
|
+
import { c as writeFileWithinRoot } from "./fs-safe-CTYUrIgQ.js";
|
|
9
9
|
import { n as resolveWindowsSpawnProgram, t as materializeWindowsSpawnProgram } from "./windows-spawn-B89VigUN.js";
|
|
10
|
-
import "./paths-
|
|
11
|
-
import { _ as isFileMissingError, i as listSessionFilesForAgent, n as requireNodeSqlite, r as buildSessionEntry, t as extractKeywords, v as statRegularFile } from "./query-expansion-
|
|
10
|
+
import "./paths-Bkr-BCxW.js";
|
|
11
|
+
import { _ as isFileMissingError, i as listSessionFilesForAgent, n as requireNodeSqlite, r as buildSessionEntry, t as extractKeywords, v as statRegularFile } from "./query-expansion-CX-1fS52.js";
|
|
12
12
|
import fs from "node:fs/promises";
|
|
13
13
|
import os from "node:os";
|
|
14
14
|
import path from "node:path";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { t as runTasksWithConcurrency } from "./run-with-concurrency-
|
|
2
|
-
import { t as createSubsystemLogger } from "./subsystem-
|
|
3
|
-
import { t as redactSensitiveText } from "./redact-
|
|
4
|
-
import { o as resolveSessionTranscriptsDirForAgent } from "./paths-
|
|
1
|
+
import { t as runTasksWithConcurrency } from "./run-with-concurrency-BgYfgkXT.js";
|
|
2
|
+
import { t as createSubsystemLogger } from "./subsystem-B45WV3qB.js";
|
|
3
|
+
import { t as redactSensitiveText } from "./redact-COik8ET1.js";
|
|
4
|
+
import { o as resolveSessionTranscriptsDirForAgent } from "./paths-Bkr-BCxW.js";
|
|
5
5
|
import { createRequire } from "node:module";
|
|
6
6
|
import fs from "node:fs/promises";
|
|
7
7
|
import path from "node:path";
|
|
8
|
-
import
|
|
8
|
+
import fs$1 from "node:fs";
|
|
9
9
|
import crypto from "node:crypto";
|
|
10
10
|
|
|
11
11
|
//#region src/memory/fs-utils.ts
|
|
@@ -31,7 +31,7 @@ async function statRegularFile(absPath) {
|
|
|
31
31
|
//#region src/memory/internal.ts
|
|
32
32
|
function ensureDir(dir) {
|
|
33
33
|
try {
|
|
34
|
-
|
|
34
|
+
fs$1.mkdirSync(dir, { recursive: true });
|
|
35
35
|
} catch {}
|
|
36
36
|
return dir;
|
|
37
37
|
}
|