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.
Files changed (186) hide show
  1. package/dist/{accounts-C_lW3Ag9.js → accounts-BOzyfwW4.js} +2 -2
  2. package/dist/{accounts-C9HcPI9h.js → accounts-L9ByEpnP.js} +2 -2
  3. package/dist/{accounts-Tgelvk0C.js → accounts-yfBeCZtS.js} +17 -17
  4. package/dist/{active-listener-BEdprTkn.js → active-listener-D1yqT1cw.js} +2 -2
  5. package/dist/{api-key-rotation-BJpKWXy0.js → api-key-rotation-DtsNS2Nb.js} +2 -2
  6. package/dist/{audio-preflight-BMvgEQ5j.js → audio-preflight-DpxQCpsA.js} +32 -32
  7. package/dist/{audio-transcription-runner-gLFfz8fr.js → audio-transcription-runner-28fcRNNi.js} +12 -12
  8. package/dist/{audit-membership-runtime-Dntemq07.js → audit-membership-runtime-DWyHWAHM.js} +4 -4
  9. package/dist/build-info.json +3 -3
  10. package/dist/bundled/boot-md/handler.js +51 -51
  11. package/dist/bundled/bootstrap-extra-files/handler.js +6 -6
  12. package/dist/bundled/command-logger/handler.js +2 -2
  13. package/dist/bundled/session-memory/handler.js +51 -51
  14. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  15. package/dist/{channel-activity-BDnjYF7B.js → channel-activity-xHOMiarp.js} +3 -3
  16. package/dist/{chrome-DxxEKrY7.js → chrome-DwizpzOC.js} +18 -18
  17. package/dist/{commands-registry-D5qXbFJn.js → commands-registry-V1zZ5pPC.js} +4 -4
  18. package/dist/{deliver-DbdywYJE.js → deliver-D4o6VIur.js} +21 -21
  19. package/dist/deliver-runtime-P-G3bPjW.js +36 -0
  20. package/dist/deps-send-discord.runtime-DnbhTFX9.js +26 -0
  21. package/dist/deps-send-imessage.runtime-BOiQ6mDx.js +25 -0
  22. package/dist/deps-send-signal.runtime-CTcl388M.js +24 -0
  23. package/dist/deps-send-slack.runtime-CCqBz4Kg.js +22 -0
  24. package/dist/deps-send-telegram.runtime-DGSKTCpH.js +27 -0
  25. package/dist/deps-send-whatsapp.runtime-CJkTHkah.js +60 -0
  26. package/dist/{diagnostic-Co6Kghr-.js → diagnostic-Bn4PZjMZ.js} +2 -2
  27. package/dist/{errors-xt401nuk.js → errors-CCLeFWAg.js} +1 -1
  28. package/dist/{fetch-DuraYswo.js → fetch-BlJWzEP6.js} +5 -5
  29. package/dist/{fetch-guard-DWr0d00H.js → fetch-guard-ChYBwfiy.js} +2 -2
  30. package/dist/{frontmatter-BkTfEZ93.js → frontmatter-CvaMP376.js} +3 -3
  31. package/dist/{fs-safe-CTYUrIgQ.js → fs-safe-0jAo_Whb.js} +4 -4
  32. package/dist/{github-copilot-token-BDioPmd6.js → github-copilot-token-D13V9YBz.js} +7 -7
  33. package/dist/{image-eT7Y-nP5.js → image-Bbn53mzj.js} +6 -6
  34. package/dist/{image-ops-BuUnEOE0.js → image-ops-CehkHxmW.js} +2 -2
  35. package/dist/image-runtime-CVv2ra9J.js +29 -0
  36. package/dist/{ir-B83looB-.js → ir-DAP-B-Xw.js} +8 -8
  37. package/dist/{legacy-names-DOC03BkU.js → legacy-names-TyzbVqa_.js} +1 -1
  38. package/dist/llm-slug-generator.js +51 -51
  39. package/dist/{logger-BfjWMCSD.js → logger-DMZQQtxK.js} +7 -7
  40. package/dist/{login-CrIwcrVI.js → login-DiCctRo1.js} +5 -5
  41. package/dist/{login-qr-BpPDZdl_.js → login-qr-MUbXgjtd.js} +10 -10
  42. package/dist/{manager-1bvuGrNR.js → manager-BW_NSIMl.js} +13 -13
  43. package/dist/manager-runtime-BN6VevdC.js +18 -0
  44. package/dist/{model-selection-Dna0Gz1k.js → model-selection-idoqPmw0.js} +43 -43
  45. package/dist/{outbound-ChDjtuD6.js → outbound-C2kanETZ.js} +6 -6
  46. package/dist/{outbound-attachment-DqHlD21U.js → outbound-attachment-DBrYWX8h.js} +2 -2
  47. package/dist/{path-alias-guards-BzvdLvTI.js → path-alias-guards-DqXRZmsL.js} +1 -1
  48. package/dist/{paths-Cvc9EM8Y.js → paths-C6TxBCvO.js} +5 -5
  49. package/dist/{paths-Bkr-BCxW.js → paths-CCxysrzL.js} +4 -4
  50. package/dist/{pi-embedded-BQQa91aA.js → pi-embedded-BaGj07T0.js} +158 -158
  51. package/dist/{pi-embedded-helpers-CLXm10bV.js → pi-embedded-helpers-wy0DZvx1.js} +52 -52
  52. package/dist/pi-model-discovery-BGgOlX8N.js +134 -0
  53. package/dist/pi-model-discovery-runtime-Bwmi4Ev8.js +11 -0
  54. package/dist/{pi-tools.before-tool-call.runtime-Cwab_5W1.js → pi-tools.before-tool-call.runtime-BuLxSyx9.js} +9 -9
  55. package/dist/plugin-sdk/accounts-CJWOBzwB.js +35 -0
  56. package/dist/plugin-sdk/accounts-DP1-L-QS.js +288 -0
  57. package/dist/plugin-sdk/accounts-DZhWlEg3.js +46 -0
  58. package/dist/plugin-sdk/active-listener-B_sLJTXM.js +50 -0
  59. package/dist/plugin-sdk/api-key-rotation-BRE4X2tf.js +181 -0
  60. package/dist/plugin-sdk/audio-preflight-DGEUDxxR.js +69 -0
  61. package/dist/plugin-sdk/audio-transcription-runner-DkoPNPYt.js +2176 -0
  62. package/dist/plugin-sdk/audit-membership-runtime-DSBHHw7o.js +58 -0
  63. package/dist/plugin-sdk/channel-activity-F3d0yUwy.js +94 -0
  64. package/dist/plugin-sdk/channel-web-QF7EpjeP.js +2256 -0
  65. package/dist/plugin-sdk/chrome-BXoCyCkY.js +2415 -0
  66. package/dist/plugin-sdk/commands-registry-t7cXBTfN.js +1125 -0
  67. package/dist/plugin-sdk/config-BkEnz2Po.js +17913 -0
  68. package/dist/plugin-sdk/deliver-B6AG_l67.js +1694 -0
  69. package/dist/plugin-sdk/deliver-runtime-D585kJZc.js +32 -0
  70. package/dist/plugin-sdk/deps-send-discord.runtime-a_OKY2js.js +23 -0
  71. package/dist/plugin-sdk/deps-send-imessage.runtime-Baxy9TD4.js +22 -0
  72. package/dist/plugin-sdk/deps-send-signal.runtime-BwXoCrFl.js +21 -0
  73. package/dist/plugin-sdk/deps-send-slack.runtime-CLmKjgso.js +19 -0
  74. package/dist/plugin-sdk/deps-send-telegram.runtime-BKfdBKnZ.js +24 -0
  75. package/dist/plugin-sdk/deps-send-whatsapp.runtime-BOTwkbx_.js +57 -0
  76. package/dist/plugin-sdk/diagnostic-CsP-lEkI.js +319 -0
  77. package/dist/plugin-sdk/discord.js +6 -6
  78. package/dist/plugin-sdk/errors-DaiAM-yU.js +54 -0
  79. package/dist/plugin-sdk/fetch-guard-DETCcJzQ.js +156 -0
  80. package/dist/plugin-sdk/fs-safe-B8y811FR.js +352 -0
  81. package/dist/plugin-sdk/image-DjTEkYZE.js +2310 -0
  82. package/dist/plugin-sdk/image-ops-BSiMpAw4.js +584 -0
  83. package/dist/plugin-sdk/image-runtime-6xPp8m5a.js +25 -0
  84. package/dist/plugin-sdk/index.js +50 -50
  85. package/dist/plugin-sdk/ir-DQ7_HbvK.js +1296 -0
  86. package/dist/plugin-sdk/local-roots-BUP4YBmR.js +186 -0
  87. package/dist/plugin-sdk/logger-CZY9KIoY.js +1163 -0
  88. package/dist/plugin-sdk/login-BxEKLlCo.js +57 -0
  89. package/dist/plugin-sdk/login-qr-BQIpMPr9.js +320 -0
  90. package/dist/plugin-sdk/manager-I6KbPihW.js +3917 -0
  91. package/dist/plugin-sdk/manager-runtime-CFfYYWIQ.js +15 -0
  92. package/dist/plugin-sdk/mattermost.js +3 -3
  93. package/dist/plugin-sdk/outbound-NS6UHnB6.js +212 -0
  94. package/dist/plugin-sdk/outbound-attachment-Dy6fyf6H.js +19 -0
  95. package/dist/plugin-sdk/path-alias-guards-DBjLbIX_.js +43 -0
  96. package/dist/plugin-sdk/paths-vTM3Lh3X.js +166 -0
  97. package/dist/plugin-sdk/pi-embedded-helpers-1R1gu7eX.js +9627 -0
  98. package/dist/plugin-sdk/pi-model-discovery-runtime-Do9o-dUd.js +8 -0
  99. package/dist/{pi-model-discovery-Dymwdjt0.js → plugin-sdk/pi-model-discovery-v-XPUOOf.js} +2 -2
  100. package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-D4sFsIks.js +354 -0
  101. package/dist/plugin-sdk/plugins-DeBZB9l_.js +864 -0
  102. package/dist/{proxy-fetch-B2pEfjbR.js → plugin-sdk/proxy-fetch-ChxOhWF4.js} +1 -1
  103. package/dist/plugin-sdk/pw-ai-DEOmCSSC.js +1938 -0
  104. package/dist/plugin-sdk/qmd-manager-HyYKoEch.js +1448 -0
  105. package/dist/plugin-sdk/query-expansion-CeyKUeDW.js +1011 -0
  106. package/dist/{redact-COik8ET1.js → plugin-sdk/redact-DjVX-1N3.js} +1 -1
  107. package/dist/plugin-sdk/reply-DAo_Jt8K.js +97916 -0
  108. package/dist/plugin-sdk/resolve-outbound-target-B42qgQS9.js +40 -0
  109. package/dist/plugin-sdk/run-with-concurrency-Bt_ks0Qa.js +1994 -0
  110. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-B6W989eF.js +10 -0
  111. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-c_GDFy37.js +19 -0
  112. package/dist/plugin-sdk/send-CQpMudwO.js +2587 -0
  113. package/dist/plugin-sdk/send-DQHLzVyO.js +414 -0
  114. package/dist/plugin-sdk/send-DTB24bEF.js +3135 -0
  115. package/dist/plugin-sdk/send-DfHadjZ_.js +503 -0
  116. package/dist/plugin-sdk/send-XXlW2iny.js +540 -0
  117. package/dist/plugin-sdk/session-6TF6MyaC.js +169 -0
  118. package/dist/plugin-sdk/signal.js +2 -2
  119. package/dist/plugin-sdk/skill-commands-CkGeFUMl.js +342 -0
  120. package/dist/plugin-sdk/skills-CBkHBYPq.js +1428 -0
  121. package/dist/plugin-sdk/slash-commands.runtime-CxliuGaP.js +13 -0
  122. package/dist/plugin-sdk/slash-dispatch.runtime-DFaeYlJQ.js +52 -0
  123. package/dist/plugin-sdk/slash-skill-commands.runtime-0M0OLCxq.js +16 -0
  124. package/dist/plugin-sdk/ssrf-cFtplYtS.js +202 -0
  125. package/dist/plugin-sdk/store-5nyxY3WU.js +81 -0
  126. package/dist/plugin-sdk/subagent-registry-runtime-DCtmDwna.js +52 -0
  127. package/dist/plugin-sdk/tables-C47P4GTN.js +55 -0
  128. package/dist/{target-errors-mnlwhAjP.js → plugin-sdk/target-errors-Blia4S69.js} +2 -2
  129. package/dist/plugin-sdk/thinking-Bo2eosVa.js +1206 -0
  130. package/dist/{tokens-q32vI39c.js → plugin-sdk/tokens-DgNRBwIg.js} +1 -1
  131. package/dist/plugin-sdk/tool-images-Gk_-0y2N.js +274 -0
  132. package/dist/plugin-sdk/web-CVxZbXyH.js +56 -0
  133. package/dist/plugin-sdk/whatsapp-actions-Bw0H9g-n.js +80 -0
  134. package/dist/plugin-sdk/zalo.js +2 -2
  135. package/dist/{plugins-4Rj4OjLY.js → plugins-CWkRQYDj.js} +11 -11
  136. package/dist/{proxy-env-DlmzDx8x.js → proxy-env-Cq5gdrbj.js} +1 -1
  137. package/dist/proxy-fetch-CCjEYbFm.js +38 -0
  138. package/dist/{pw-ai-DNMjFMqH.js → pw-ai-Cl1Lc7RC.js} +14 -14
  139. package/dist/{qmd-manager-BtIKUaO9.js → qmd-manager-BsYsO9Ii.js} +10 -10
  140. package/dist/{query-expansion-CX-1fS52.js → query-expansion-DtLc3wjL.js} +6 -6
  141. package/dist/redact-ClbcYG1J.js +319 -0
  142. package/dist/{run-with-concurrency-BgYfgkXT.js → run-with-concurrency-D_ZpbgEG.js} +4 -4
  143. package/dist/runtime-whatsapp-login.runtime-IeylZEl4.js +13 -0
  144. package/dist/runtime-whatsapp-outbound.runtime-ClBRuLsq.js +22 -0
  145. package/dist/{send-dfu6_rgf.js → send-BQERFNyo.js} +5 -5
  146. package/dist/{send-L7gRiwyd.js → send-Bj776ESJ.js} +7 -7
  147. package/dist/{send-PE6cwoTe.js → send-DcxmcFi_.js} +8 -8
  148. package/dist/{send-6lz6rNVP.js → send-Dx2RkUOZ.js} +6 -6
  149. package/dist/{send-BHTiZcH3.js → send-vmONuVgL.js} +26 -26
  150. package/dist/{session-D8ImowSs.js → session-A4QhBRvH.js} +8 -8
  151. package/dist/{skill-commands-DNqJ-kwn.js → skill-commands-CMzBZKG2.js} +9 -9
  152. package/dist/{skills-7ODkHQYp.js → skills-CE_iqvM5.js} +22 -22
  153. package/dist/slash-commands.runtime-Cpn2tYW4.js +16 -0
  154. package/dist/slash-dispatch.runtime-DoBAQBU5.js +56 -0
  155. package/dist/slash-skill-commands.runtime-DKMvvdDW.js +20 -0
  156. package/dist/{store-D89wDcz9.js → store--eR1R_UX.js} +2 -2
  157. package/dist/subagent-registry-runtime-ppWS3tVu.js +56 -0
  158. package/dist/{subsystem-B45WV3qB.js → subsystem-Di1z8l0Z.js} +14 -14
  159. package/dist/{tables-mE4cJBN2.js → tables-d739Y1xW.js} +1 -1
  160. package/dist/target-errors-CBI2Ga0y.js +195 -0
  161. package/dist/{thinking-BeGmb5k6.js → thinking-DXYisHiZ.js} +7 -7
  162. package/dist/tokens-DxnY9ui_.js +52 -0
  163. package/dist/{tool-images-RZdHiZcG.js → tool-images-2cBx1W8h.js} +2 -2
  164. package/dist/{web-Btj-e8kN.js → web-CzWRVmFt.js} +55 -55
  165. package/dist/{whatsapp-actions-BHbJJyqw.js → whatsapp-actions-iEArE_Ez.js} +21 -21
  166. package/dist/{workspace-U-DyR64O.js → workspace-CUVC6GX1.js} +20 -20
  167. package/package.json +8 -2
  168. package/scripts/create-instance.sh +26 -4
  169. package/scripts/install-maca.sh +40 -29
  170. package/scripts/npm_publish.sh +14 -11
  171. package/dist/deliver-runtime-BFs7iAZF.js +0 -36
  172. package/dist/deps-send-discord.runtime-DZUccI6Z.js +0 -26
  173. package/dist/deps-send-imessage.runtime-CF3OpoqY.js +0 -25
  174. package/dist/deps-send-signal.runtime-Cw4-ozeO.js +0 -24
  175. package/dist/deps-send-slack.runtime-BDsDhS1P.js +0 -22
  176. package/dist/deps-send-telegram.runtime-D_4xVasO.js +0 -27
  177. package/dist/deps-send-whatsapp.runtime-DK8jqd14.js +0 -60
  178. package/dist/image-runtime-BcAK3n8a.js +0 -29
  179. package/dist/manager-runtime-FO1Sx3W8.js +0 -18
  180. package/dist/pi-model-discovery-runtime-BeY4EUPp.js +0 -11
  181. package/dist/runtime-whatsapp-login.runtime-DUb55byQ.js +0 -13
  182. package/dist/runtime-whatsapp-outbound.runtime-Bii_xSfI.js +0 -22
  183. package/dist/slash-commands.runtime-CVw6566g.js +0 -16
  184. package/dist/slash-dispatch.runtime-B9Ygtzi4.js +0 -56
  185. package/dist/slash-skill-commands.runtime-DxZ4z5h6.js +0 -20
  186. package/dist/subagent-registry-runtime-DL1Wv7nA.js +0 -56
@@ -1,13 +1,13 @@
1
- import { m as normalizeSkillFilter } from "./run-with-concurrency-BgYfgkXT.js";
2
- import { t as createSubsystemLogger, w as resolvePreferredOpenClawTmpDir } from "./subsystem-B45WV3qB.js";
3
- import { O as isPathInside, h as resolveOpenClawPackageRootSync } from "./workspace-U-DyR64O.js";
4
- import { a as CONFIG_DIR, y as resolveUserPath } from "./logger-BfjWMCSD.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-Dna0Gz1k.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-BkTfEZ93.js";
7
- import { n as assertNoPathAliasEscape } from "./path-alias-guards-BzvdLvTI.js";
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 fs from "node:fs";
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 = fs.readdirSync(dir, { withFileTypes: true });
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 (fs.existsSync(path.join(fullPath, "SKILL.md"))) return true;
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 (fs.existsSync(sibling)) return sibling;
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 (!fs.existsSync(candidate)) {
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 = fs.promises;
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 = fs.readdirSync(dir, { withFileTypes: true });
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 (fs.statSync(fullPath).isDirectory()) dirs.push(entry.name);
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 (!fs.existsSync(nested) || !fs.statSync(nested).isDirectory()) return { baseDir: dir };
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 (fs.existsSync(skillMd)) return {
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 (fs.existsSync(rootSkillMd)) {
789
+ if (syncFs.existsSync(rootSkillMd)) {
790
790
  try {
791
- const size = fs.statSync(rootSkillMd).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 (!fs.existsSync(skillMd)) continue;
830
+ if (!syncFs.existsSync(skillMd)) continue;
831
831
  try {
832
- const size = fs.statSync(skillMd).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(fs.readFileSync(skill.filePath, "utf-8"));
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-BfjWMCSD.js";
2
- import { b as detectMime, x as extensionForMime } from "./image-ops-BuUnEOE0.js";
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-Cvc9EM8Y.js";
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 fs from "node:fs";
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 = fs.constants.W_OK | fs.constants.X_OK;
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 ?? fs.accessSync;
63
- const chmodSync = options.chmodSync ?? fs.chmodSync;
64
- const lstatSync = options.lstatSync ?? fs.lstatSync;
65
- const mkdirSync = options.mkdirSync ?? fs.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 (!fs.existsSync(configPath)) return;
159
- const raw = fs.readFileSync(configPath, "utf-8");
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
- fs.mkdirSync(path.dirname(settings.file), { recursive: true });
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 fs.statSync(file).size;
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
- fs.appendFileSync(file, line, { encoding: "utf8" });
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 = fs.readdirSync(dir, { withFileTypes: true });
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 (fs.statSync(fullPath).mtimeMs < cutoff) fs.rmSync(fullPath, { force: true });
452
+ if (syncFs.statSync(fullPath).mtimeMs < cutoff) syncFs.rmSync(fullPath, { force: true });
453
453
  } catch {}
454
454
  }
455
455
  } catch {}
@@ -1,4 +1,4 @@
1
- import { r as markdownToIRWithMeta } from "./ir-B83looB-.js";
1
+ import { r as markdownToIRWithMeta } from "./ir-DAP-B-Xw.js";
2
2
  import { t as renderMarkdownWithMarkers } from "./render-DW7AcFdD.js";
3
3
 
4
4
  //#region src/markdown/tables.ts
@@ -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-U-DyR64O.js";
2
- import { h as normalizeE164, u as escapeRegExp } from "./logger-BfjWMCSD.js";
3
- import { Ht as CHAT_CHANNEL_ORDER, Ut as getChatChannelMeta, Zt as requireActivePluginRegistry } from "./model-selection-Dna0Gz1k.js";
4
- import { a as normalizeWhatsAppTarget, b as resolveDiscordAccount, l as resolveTelegramAccount, m as resolveSlackReplyToMode, p as resolveSlackAccount } from "./plugins-4Rj4OjLY.js";
5
- import { h as resolveAccountEntry, n as resolveWhatsAppAccount } from "./accounts-Tgelvk0C.js";
6
- import { n as resolveSignalAccount } from "./accounts-C9HcPI9h.js";
7
- import { t as resolveIMessageAccount } from "./accounts-C_lW3Ag9.js";
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-B45WV3qB.js";
2
- import { i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-BuUnEOE0.js";
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) {