@symerian/symi 3.0.6 → 3.0.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 (157) hide show
  1. package/dist/{agents-gbr-1Je_.js → agents-CFKyEJDh.js} +4 -4
  2. package/dist/{agents.config-CpxstSW7.js → agents.config-DSrQ0TM2.js} +1 -1
  3. package/dist/{agents.config-BfNlwhop.js → agents.config-JYh7a1x9.js} +1 -1
  4. package/dist/{auth-choice-54kgymsK.js → auth-choice-BPmdR0Zg.js} +1 -1
  5. package/dist/{auth-choice-D-6X8Ju1.js → auth-choice-BqParF2V.js} +1 -1
  6. package/dist/{banner-a-SFB2A_.js → banner-Lq52Hf1m.js} +1 -1
  7. package/dist/build-info.json +3 -3
  8. package/dist/bundled/boot-md/handler.js +2 -2
  9. package/dist/bundled/session-memory/handler.js +2 -2
  10. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  11. package/dist/{channel-options-LdOWOuGF.js → channel-options-DbwyNFsd.js} +1 -1
  12. package/dist/{channel-options-Gr9E4Kzw.js → channel-options-uukUHxrR.js} +1 -1
  13. package/dist/{channel-web-CegzhXtr.js → channel-web-CBUFAaN-.js} +1 -1
  14. package/dist/{channels-cli-yEaXg9E8.js → channels-cli-DUwg4n9o.js} +6 -6
  15. package/dist/{channels-cli-BqxfCcHJ.js → channels-cli-DwWkhoS-.js} +6 -6
  16. package/dist/{cli-frCx1q0g.js → cli-BK00_StG.js} +3 -3
  17. package/dist/{cli-CBgbuAgA.js → cli-DZZmysLn.js} +3 -3
  18. package/dist/{command-registry-BuNPoTgT.js → command-registry-DPjt2ua4.js} +10 -10
  19. package/dist/{completion-cli-CslG8pRZ.js → completion-cli-DUHXuBGj.js} +2 -2
  20. package/dist/{completion-cli-CtslzC-3.js → completion-cli-Jc5c91D9.js} +1 -1
  21. package/dist/{config-cli-DG0Q2opp.js → config-cli-CfqGGDZJ.js} +1 -1
  22. package/dist/{config-cli-Bne_ToTi.js → config-cli-Chi8-vDl.js} +1 -1
  23. package/dist/{configure-CrUroh9h.js → configure-CpVWXUGL.js} +3 -3
  24. package/dist/{configure-DVEumX9d.js → configure-n6QOImwq.js} +3 -3
  25. package/dist/{doctor-completion-BdPD9NXi.js → doctor-completion-DRSIyjR1.js} +1 -1
  26. package/dist/{doctor-completion-C7FYoFcz.js → doctor-completion-efxxrdhl.js} +1 -1
  27. package/dist/entry.js +1 -1
  28. package/dist/extensionAPI.js +2 -2
  29. package/dist/{gateway-cli-C01t6lTD.js → gateway-cli-5x14dzdY.js} +12 -12
  30. package/dist/{gateway-cli-C3pl_TOb.js → gateway-cli-C9oE1hBq.js} +12 -12
  31. package/dist/{glass-ui-ws-DdfAZRq2.js → glass-ui-ws-CSvguyD3.js} +10 -10
  32. package/dist/{glass-ui-ws-D4FpSEkk.js → glass-ui-ws-Dy9BMqps.js} +10 -10
  33. package/dist/{health-BJOdskDn.js → health-CMNaNxdO.js} +2 -2
  34. package/dist/{health-Ux1rRtE3.js → health-CcIuOt6-.js} +2 -2
  35. package/dist/{heartbeat-visibility-BOc3XHJM.js → heartbeat-visibility-C1vHOBwO.js} +1 -1
  36. package/dist/{heartbeat-visibility-DiKuGlXT.js → heartbeat-visibility-D7nLp3pi.js} +1 -1
  37. package/dist/{hooks-cli-QOqeVacd.js → hooks-cli-BJBRRQxq.js} +4 -4
  38. package/dist/{hooks-cli-C4qRn2e6.js → hooks-cli-Lu13tVB5.js} +4 -4
  39. package/dist/index.js +9 -9
  40. package/dist/llm-slug-generator.js +2 -2
  41. package/dist/{manager-H_Xir_av.js → manager-CpueNJtZ.js} +1 -1
  42. package/dist/{manager-OL6o99xD.js → manager-DrpXfTr8.js} +1 -1
  43. package/dist/{manager-DdfJ-DW0.js → manager-_IXN4-V8.js} +1 -1
  44. package/dist/{manager-D7uDkX3d.js → manager-ba9NOjzn.js} +1 -1
  45. package/dist/{memory-cli-CEvfDody.js → memory-cli-CFc9bXRp.js} +3 -3
  46. package/dist/{memory-cli-BFgNzW3D.js → memory-cli-LV7-59SK.js} +3 -3
  47. package/dist/{models-Bf1Qgxcd.js → models-BB9yLhYJ.js} +2 -2
  48. package/dist/{models-cli-C-yQI9uO.js → models-cli-RtPAmw2C.js} +4 -4
  49. package/dist/{models-cli-IPj8YpFi.js → models-cli-trgrhp5d.js} +5 -5
  50. package/dist/{onboard-D3RCwOQV.js → onboard-CQ-O5iJq.js} +2 -2
  51. package/dist/{onboard-DxD7tZro.js → onboard-DHXKRs-D.js} +2 -2
  52. package/dist/{onboard-channels-C9yhPSG7.js → onboard-channels-jMIN_VEb.js} +1 -1
  53. package/dist/{onboard-channels-DjyTcloL.js → onboard-channels-puKAWnzj.js} +1 -1
  54. package/dist/{onboarding-3Zmxzq_U.js → onboarding-B-gCsRKr.js} +3 -3
  55. package/dist/{onboarding-BT5x19Ld.js → onboarding-C0pJSLCL.js} +3 -3
  56. package/dist/{onboarding.finalize-Di8oo0E9.js → onboarding.finalize-CwYMMBek.js} +8 -8
  57. package/dist/{onboarding.finalize-DYIUxpai.js → onboarding.finalize-TzNrDgVI.js} +9 -9
  58. package/dist/{pi-embedded-DiktDTAb.js → pi-embedded-D9KmgdGY.js} +99 -5
  59. package/dist/{plugin-registry-Dv9QEb6z.js → plugin-registry-B33lS3i0.js} +1 -1
  60. package/dist/{plugin-registry-DSVGT3l_.js → plugin-registry-DzQCMRvf.js} +1 -1
  61. package/dist/plugin-sdk/agents/model-aware-stream.d.ts +21 -0
  62. package/dist/plugin-sdk/{channel-web-CQucEpek.js → channel-web-oG-aaS67.js} +1 -1
  63. package/dist/plugin-sdk/index.js +3 -3
  64. package/dist/plugin-sdk/{manager-DMMQnz2r.js → manager-hfHALsDs.js} +1 -1
  65. package/dist/plugin-sdk/{synthesis-B3oSNA87.js → synthesis-BWBeCBqa.js} +2 -2
  66. package/dist/plugin-sdk/{unified-runner-DPD66ppH.js → unified-runner-CZE3p9mg.js} +99 -5
  67. package/dist/plugin-sdk/{web-O8zxjM0h.js → web-CD_2TcPx.js} +3 -3
  68. package/dist/{plugins-cli-BKE00xaA.js → plugins-cli-BH-dPouA.js} +4 -4
  69. package/dist/{plugins-cli-Cudgx5xM.js → plugins-cli-D7SeopUy.js} +4 -4
  70. package/dist/{program-D6GycU7K.js → program-CbKSDUST.js} +9 -9
  71. package/dist/{program-context-DUf2HkNT.js → program-context-ClWlMpYr.js} +18 -18
  72. package/dist/{prompt-select-styled-MZgg9luq.js → prompt-select-styled-CM2KCKfA.js} +6 -6
  73. package/dist/{prompt-select-styled-9fffbtA8.js → prompt-select-styled-CdC8Q0fu.js} +6 -6
  74. package/dist/{provider-auth-helpers-CbjDDek6.js → provider-auth-helpers-Brx0zsB4.js} +1 -1
  75. package/dist/{provider-auth-helpers-CH_rD9Ck.js → provider-auth-helpers-Df50nCNL.js} +1 -1
  76. package/dist/{push-apns-D2xhFnz-.js → push-apns-CXP9q39j.js} +1 -1
  77. package/dist/{push-apns-zIsKDi4p.js → push-apns-jE3kPG6g.js} +1 -1
  78. package/dist/{register.agent-BkQdGAxf.js → register.agent-DGwbPjex.js} +7 -7
  79. package/dist/{register.agent-CR1I0Nxi.js → register.agent-DzQtVgfQ.js} +8 -8
  80. package/dist/{register.configure-CIbNs3Ys.js → register.configure-B56gsKYf.js} +9 -9
  81. package/dist/{register.configure-O5fmbHql.js → register.configure-BQ1gQQOO.js} +9 -9
  82. package/dist/{register.maintenance-B6o6Fdf-.js → register.maintenance-DLsCNL7g.js} +11 -11
  83. package/dist/{register.maintenance-BjE-lDkf.js → register.maintenance-mKHTp7uq.js} +10 -10
  84. package/dist/{register.message-DkZC56-E.js → register.message--QXkhXHQ.js} +4 -4
  85. package/dist/{register.message-CPV6KKj_.js → register.message-xW7Gic5V.js} +4 -4
  86. package/dist/{register.onboard-DPUx5H9I.js → register.onboard-Cd0kw_oz.js} +7 -7
  87. package/dist/{register.onboard-DB0X3H1H.js → register.onboard-Cxvbpqqb.js} +7 -7
  88. package/dist/{register.setup-BdfIHr44.js → register.setup-C63_l0Z_.js} +7 -7
  89. package/dist/{register.setup-BHGui0h8.js → register.setup-D-WYhPYF.js} +7 -7
  90. package/dist/{register.status-health-sessions-CAr_-YOR.js → register.status-health-sessions-BGA-7IT8.js} +6 -6
  91. package/dist/{register.status-health-sessions-Bx_x7PLI.js → register.status-health-sessions-CsjDghzj.js} +6 -6
  92. package/dist/{register.subclis-Bd9G7Uhk.js → register.subclis-BOf3y4FX.js} +9 -9
  93. package/dist/{run-main-DINwkweo.js → run-main-CG1sYHQC.js} +17 -17
  94. package/dist/{server-methods-D_HpHoWo.js → server-methods-C72ajlYe.js} +9 -9
  95. package/dist/{server-methods-BBiqjTnY.js → server-methods-C_TFp6B4.js} +9 -9
  96. package/dist/{server-node-events-D33Ivpdb.js → server-node-events-BTuwCzuB.js} +4 -4
  97. package/dist/{server-node-events-BBcYbve5.js → server-node-events-Cn5abeER.js} +4 -4
  98. package/dist/{status-CdRoRdX8.js → status-C5RXDLjI.js} +1 -1
  99. package/dist/{status-Do0t7I6P.js → status-CrxGjZwV.js} +3 -3
  100. package/dist/{status-B5SAsM15.js → status-CvJZLdWA.js} +1 -1
  101. package/dist/{status-E8bxgRbF.js → status-DIGJ8-hp.js} +3 -3
  102. package/dist/{subagent-registry-B4gg8TFc.js → subagent-registry-k0ZBnJuU.js} +98 -4
  103. package/dist/{synthesis-BzXl3DdN.js → synthesis-C-rsRpDw.js} +2 -2
  104. package/dist/{synthesis-BuXEOM51.js → synthesis-C3AKD3Nb.js} +2 -2
  105. package/dist/{synthesis-CmoAF3Ks.js → synthesis-D4qwtCYE.js} +3 -3
  106. package/dist/{synthesis-Camc_uQg.js → synthesis-cor0WJGI.js} +3 -3
  107. package/dist/{unified-runner-NjwIEpGt.js → unified-runner-CzxCpDUC.js} +98 -4
  108. package/dist/{unified-runner-Bvqbwaaa.js → unified-runner-Dv9LPnmm.js} +99 -5
  109. package/dist/{update-cli-BmxN561H.js → update-cli-D2Ou3_k5.js} +10 -10
  110. package/dist/{update-cli-DT51XdLt.js → update-cli-DGrOVmGg.js} +11 -11
  111. package/dist/{update-runner-BSHkPRya.js → update-runner-BSDKsvVP.js} +1 -1
  112. package/dist/{update-runner-DObjNXP5.js → update-runner-Bcmd0XnZ.js} +1 -1
  113. package/dist/{web-CWFF4V6q.js → web-CSPcQYqR.js} +2 -2
  114. package/dist/{web-DMJyGxn3.js → web-D9-D09LS.js} +4 -4
  115. package/dist/{web-DNwg0ZOA.js → web-DJqpgWuK.js} +5 -5
  116. package/dist/{web-BPiGXIj5.js → web-gqbdxJga.js} +2 -2
  117. package/extensions/bluebubbles/package.json +1 -1
  118. package/extensions/copilot-proxy/package.json +1 -1
  119. package/extensions/diagnostics-otel/package.json +1 -1
  120. package/extensions/discord/package.json +1 -1
  121. package/extensions/feishu/package.json +1 -1
  122. package/extensions/google-antigravity-auth/package.json +1 -1
  123. package/extensions/google-gemini-cli-auth/package.json +1 -1
  124. package/extensions/googlechat/package.json +1 -1
  125. package/extensions/imessage/package.json +1 -1
  126. package/extensions/irc/package.json +1 -1
  127. package/extensions/learning-loop/package.json +1 -1
  128. package/extensions/line/package.json +1 -1
  129. package/extensions/llm-task/package.json +1 -1
  130. package/extensions/matrix/CHANGELOG.md +6 -0
  131. package/extensions/matrix/package.json +1 -1
  132. package/extensions/mattermost/package.json +1 -1
  133. package/extensions/memory-core/package.json +1 -1
  134. package/extensions/memory-lancedb/package.json +1 -1
  135. package/extensions/minimax-portal-auth/package.json +1 -1
  136. package/extensions/msteams/CHANGELOG.md +6 -0
  137. package/extensions/msteams/package.json +1 -1
  138. package/extensions/nextcloud-talk/package.json +1 -1
  139. package/extensions/nostr/CHANGELOG.md +6 -0
  140. package/extensions/nostr/package.json +1 -1
  141. package/extensions/open-prose/package.json +1 -1
  142. package/extensions/outlook/package.json +1 -1
  143. package/extensions/pipeline/package.json +1 -1
  144. package/extensions/signal/package.json +1 -1
  145. package/extensions/slack/package.json +1 -1
  146. package/extensions/telegram/package.json +1 -1
  147. package/extensions/tlon/package.json +1 -1
  148. package/extensions/twitch/CHANGELOG.md +6 -0
  149. package/extensions/twitch/package.json +1 -1
  150. package/extensions/voice-call/CHANGELOG.md +6 -0
  151. package/extensions/voice-call/package.json +1 -1
  152. package/extensions/whatsapp/package.json +1 -1
  153. package/extensions/zalo/CHANGELOG.md +6 -0
  154. package/extensions/zalo/package.json +1 -1
  155. package/extensions/zalouser/CHANGELOG.md +6 -0
  156. package/extensions/zalouser/package.json +1 -1
  157. package/package.json +1 -1
@@ -41,7 +41,7 @@ import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-BmjnXR7W.j
41
41
  import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-DqDuxaGt.js";
42
42
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-CuZX_Q4t.js";
43
43
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-C1Tw2ERK.js";
44
- import { i as resolveMemorySearchConfig, n as probeOllamaEmbeddingModels, r as resolveOllamaBaseUrl } from "./manager-H_Xir_av.js";
44
+ import { i as resolveMemorySearchConfig, n as probeOllamaEmbeddingModels, r as resolveOllamaBaseUrl } from "./manager-CpueNJtZ.js";
45
45
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-DjnxpF_K.js";
46
46
  import { n as retryAsync } from "./retry-B-y5suGA.js";
47
47
  import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-Bp-kjJP5.js";
@@ -4616,7 +4616,7 @@ async function getMemorySearchManager(params) {
4616
4616
  const wrapper = new FallbackMemoryManager({
4617
4617
  primary,
4618
4618
  fallbackFactory: async () => {
4619
- const { MemoryIndexManager } = await import("./manager-H_Xir_av.js").then((n) => n.t);
4619
+ const { MemoryIndexManager } = await import("./manager-CpueNJtZ.js").then((n) => n.t);
4620
4620
  return await MemoryIndexManager.get(params);
4621
4621
  }
4622
4622
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -4629,7 +4629,7 @@ async function getMemorySearchManager(params) {
4629
4629
  }
4630
4630
  }
4631
4631
  try {
4632
- const { MemoryIndexManager } = await import("./manager-H_Xir_av.js").then((n) => n.t);
4632
+ const { MemoryIndexManager } = await import("./manager-CpueNJtZ.js").then((n) => n.t);
4633
4633
  return { manager: await MemoryIndexManager.get(params) };
4634
4634
  } catch (err) {
4635
4635
  return {
@@ -7499,6 +7499,11 @@ function buildAgentSystemPrompt(params) {
7499
7499
  "- Never narrate or quote tool output you did not actually receive from a real tool result. Writing \"I ran X and got Y\" without a corresponding tool invocation is fabrication and breaks user trust.",
7500
7500
  "- For factual local-system lookups (hostname, file contents, process state, env vars, current dir, system info), the answer comes from invoking the appropriate tool — not from priors. Always invoke.",
7501
7501
  "",
7502
+ "Example — when the user explicitly names a tool:",
7503
+ " User: \"Use the exec tool to run: echo hi\"",
7504
+ " Correct: call exec with command=\"echo hi\", then summarise the actual stdout you received.",
7505
+ " Wrong: emit \"hi\" as text without calling exec — that's fabrication.",
7506
+ "",
7502
7507
  ...compactMode ? [] : [
7503
7508
  "## Tool Call Style",
7504
7509
  "Default: do not narrate routine, low-risk tool calls (just call the tool).",
@@ -53670,7 +53675,7 @@ function setCliSessionId(entry, provider, sessionId) {
53670
53675
  function createDefaultDeps() {
53671
53676
  return {
53672
53677
  sendMessageWhatsApp: async (...args) => {
53673
- const { sendMessageWhatsApp } = await import("./web-CWFF4V6q.js");
53678
+ const { sendMessageWhatsApp } = await import("./web-CSPcQYqR.js");
53674
53679
  return await sendMessageWhatsApp(...args);
53675
53680
  },
53676
53681
  sendMessageTelegram: async (...args) => {
@@ -68950,7 +68955,7 @@ function loadWebLoginQr() {
68950
68955
  return webLoginQrPromise;
68951
68956
  }
68952
68957
  function loadWebChannel() {
68953
- webChannelPromise ??= import("./web-CWFF4V6q.js");
68958
+ webChannelPromise ??= import("./web-CSPcQYqR.js");
68954
68959
  return webChannelPromise;
68955
68960
  }
68956
68961
  function loadWhatsAppActions() {
@@ -73660,6 +73665,91 @@ function createOutputNormalizer(profile, modelId) {
73660
73665
  //#endregion
73661
73666
  //#region src/agents/model-aware-stream.ts
73662
73667
  /**
73668
+ * Match imperative tool requests:
73669
+ * "Use the exec tool to run X"
73670
+ * "use exec to ..."
73671
+ * "Please invoke the read tool"
73672
+ * "call memory_search with ..."
73673
+ *
73674
+ * Anchored to start-of-string, start-of-line, or after a closing-bracket
73675
+ * delimiter `] ` (covers Symi's `[Thu 2026-04-30 20:48 EDT] ` timestamp
73676
+ * envelope, the `[Outlook 365] ` plugin banner, and similar prefixes that
73677
+ * gateway middleware can inject before the user's actual prompt — verified
73678
+ * live: `chat.send` from Glass UI ships content like
73679
+ *
73680
+ * Conversation info (untrusted metadata):
73681
+ * ```json
73682
+ * { "message_id": "...", ... }
73683
+ * ```
73684
+ *
73685
+ * [Thu 2026-04-30 20:48 EDT] Use the exec tool to run: hostname
73686
+ *
73687
+ * so the `Use` is preceded by `] ` not by `\n` or `^`).
73688
+ *
73689
+ * Verb list is conservative (use/invoke/call/please-{use,call}) — pure
73690
+ * imperative verbs that read unambiguously as "do this for me." Tool name
73691
+ * must match EXPLICIT_TOOL_NAMES exactly to keep "use poetic language" /
73692
+ * "use clear writing" / etc. from triggering.
73693
+ */
73694
+ const EXPLICIT_TOOL_REQUEST_PATTERN = new RegExp(String.raw`(?:^|\n|\]\s)\s*(?:please\s+)?(?:use|invoke|call)\s+(?:the\s+)?(?:` + [
73695
+ "exec",
73696
+ "bash",
73697
+ "read",
73698
+ "write",
73699
+ "edit",
73700
+ "patch",
73701
+ "web_search",
73702
+ "web_fetch",
73703
+ "browser",
73704
+ "browser_navigate",
73705
+ "browser_snapshot",
73706
+ "browser_click",
73707
+ "browser_type",
73708
+ "memory_search",
73709
+ "memory_get",
73710
+ "memory_pin",
73711
+ "memory_unpin",
73712
+ "spawn_agent",
73713
+ "message",
73714
+ "task_list",
73715
+ "task_cancel",
73716
+ "cron",
73717
+ "fetch",
73718
+ "skill_search"
73719
+ ].map((n) => n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|") + String.raw`)(?:\s+tool)?\b`, "i");
73720
+ /**
73721
+ * Extract the user-role text ONLY when it's the LAST message in the
73722
+ * conversation (i.e., we're at the start of a fresh turn, not in the
73723
+ * middle of an agent loop). Returns "" when:
73724
+ * - messages isn't an array
73725
+ * - the last message isn't user-role (= we're after a tool_call /
73726
+ * tool_result and the model is continuing — forcing tool_choice
73727
+ * "required" here would loop the agent: model must call a tool →
73728
+ * tool result → model must call ANOTHER tool → tool result → ...)
73729
+ *
73730
+ * Verified live on 3.0.7 dev: with the original "find any prior user
73731
+ * message" implementation, every agent-loop iteration saw the same
73732
+ * matching userText and re-forced tool_choice="required", spinning the
73733
+ * model in an infinite tool-call loop and timing out at 180s.
73734
+ */
73735
+ function extractLastUserText(messages) {
73736
+ if (!Array.isArray(messages) || messages.length === 0) return "";
73737
+ const last = messages[messages.length - 1];
73738
+ if (!last || typeof last !== "object") return "";
73739
+ const msg = last;
73740
+ if (msg.role !== "user") return "";
73741
+ if (typeof msg.content === "string") return msg.content;
73742
+ if (Array.isArray(msg.content)) {
73743
+ const parts = [];
73744
+ for (const part of msg.content) if (part && typeof part === "object") {
73745
+ const block = part;
73746
+ if (block.type === "text" && typeof block.text === "string") parts.push(block.text);
73747
+ }
73748
+ return parts.join("\n");
73749
+ }
73750
+ return "";
73751
+ }
73752
+ /**
73663
73753
  * Create a single stream function wrapper that handles all provider-specific
73664
73754
  * param injection via one onPayload hook.
73665
73755
  *
@@ -73707,6 +73797,10 @@ function createModelAwareStreamFn(opts) {
73707
73797
  delete p.store;
73708
73798
  }
73709
73799
  if (Array.isArray(p.tools) && p.tools.length > 0 && p.tool_choice === void 0) p.tool_choice = "auto";
73800
+ if (Array.isArray(p.tools) && p.tools.length > 0 && p.tool_choice === "auto") {
73801
+ const userText = extractLastUserText(p.messages);
73802
+ if (userText && EXPLICIT_TOOL_REQUEST_PATTERN.test(userText)) p.tool_choice = "required";
73803
+ }
73710
73804
  }
73711
73805
  callerOnPayload?.(payload);
73712
73806
  };
@@ -1,7 +1,7 @@
1
1
  import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, h as pathExists } from "./utils-B-0b9bGM.js";
3
3
  import "./tokens-Cz6cgZ7r.js";
4
- import { vt as trimLogTail } from "./unified-runner-NjwIEpGt.js";
4
+ import { vt as trimLogTail } from "./unified-runner-CzxCpDUC.js";
5
5
  import "./registry-ClO_zVv-.js";
6
6
  import { f as defaultRuntime } from "./subsystem-zqierDLj.js";
7
7
  import "./auth-profiles-HXq6s5EV.js";
@@ -57,8 +57,8 @@ import "./send-DNJPCiwf.js";
57
57
  import "./model-DIO3dH08.js";
58
58
  import "./pi-model-discovery-CXXH7biP.js";
59
59
  import "./reply-prefix-DnXliXio.js";
60
- import "./memory-cli-BFgNzW3D.js";
61
- import "./manager-DdfJ-DW0.js";
60
+ import "./memory-cli-LV7-59SK.js";
61
+ import "./manager-_IXN4-V8.js";
62
62
  import "./gemini-auth-D7Wqp9Ma.js";
63
63
  import "./retry-DYICeae5.js";
64
64
  import "./sqlite-CRogFEk1.js";
@@ -106,9 +106,9 @@ import "./onboard-helpers-B-ZzwyS1.js";
106
106
  import { n as stylePromptMessage } from "./prompt-style-CSNJI4MG.js";
107
107
  import "./pairing-labels-6wdVkxUt.js";
108
108
  import "./pi-tools.policy-CQ0NqaBl.js";
109
- import "./heartbeat-visibility-DiKuGlXT.js";
109
+ import "./heartbeat-visibility-D7nLp3pi.js";
110
110
  import { r as parseSemver } from "./runtime-guard-dBbuLE2m.js";
111
- import "./program-context-DUf2HkNT.js";
111
+ import "./program-context-ClWlMpYr.js";
112
112
  import "./catalog-pt1jhhyb.js";
113
113
  import "./skills-status-DzvtNke3.js";
114
114
  import { n as inheritOptionFromParent } from "./command-options-DOOvAdsg.js";
@@ -119,7 +119,7 @@ import "./npm-registry-spec-DzwsFqwv.js";
119
119
  import "./skill-scanner-DI28Pqv5.js";
120
120
  import "./installs-DH3fKGSH.js";
121
121
  import "./channels-status-issues-Crr1XNY1.js";
122
- import { r as installCompletion } from "./completion-cli-CtslzC-3.js";
122
+ import { r as installCompletion } from "./completion-cli-Jc5c91D9.js";
123
123
  import "./daemon-runtime-BR2zWQaj.js";
124
124
  import "./systemd-z4aO4iTi.js";
125
125
  import { t as resolveGatewayService } from "./service-CW2RUNzh.js";
@@ -128,19 +128,19 @@ import "./systemd-hints-CtDlWsoa.js";
128
128
  import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-oss3NUE6.js";
129
129
  import "./diagnostics-D40jPn_9.js";
130
130
  import { t as renderTable } from "./table-Cg6YZXv9.js";
131
- import "./health-Ux1rRtE3.js";
131
+ import "./health-CcIuOt6-.js";
132
132
  import "./control-ui-assets-CtKVON4w.js";
133
133
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-BIE5FLmi.js";
134
134
  import "./dm-policy-shared-CpZQv0Ar.js";
135
135
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-Ci9RxUx0.js";
136
- import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-DObjNXP5.js";
136
+ import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-Bcmd0XnZ.js";
137
137
  import "./logging-CZuxhCZR.js";
138
138
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-BnkusEA2.js";
139
139
  import "./doctor-config-flow-D2wMpwl6.js";
140
140
  import "./systemd-linger-Bl13Nbce.js";
141
141
  import "./health-format-Ct4VWeSk.js";
142
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-MZgg9luq.js";
143
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-C7FYoFcz.js";
142
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-CM2KCKfA.js";
143
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-efxxrdhl.js";
144
144
  import os from "node:os";
145
145
  import path from "node:path";
146
146
  import fs from "node:fs/promises";
@@ -17,7 +17,7 @@ import "./client-CJIMV1WD.js";
17
17
  import "./call-DgBbW7bk.js";
18
18
  import "./message-channel-C9dERklz.js";
19
19
  import "./pairing-token-Byh6drgn.js";
20
- import { Ot as trimLogTail } from "./subagent-registry-B4gg8TFc.js";
20
+ import { Ot as trimLogTail } from "./subagent-registry-k0ZBnJuU.js";
21
21
  import "./sessions-D94fC0u0.js";
22
22
  import "./tokens-BEvOiQ65.js";
23
23
  import "./plugins-DTKQE9kt.js";
@@ -55,8 +55,8 @@ import "./tool-images-CVLISeRT.js";
55
55
  import "./thinking-8sKPnzpp.js";
56
56
  import "./models-config-BEX8iiQb.js";
57
57
  import "./reply-prefix-Pz-5t5RS.js";
58
- import "./memory-cli-CEvfDody.js";
59
- import "./manager-OL6o99xD.js";
58
+ import "./memory-cli-CFc9bXRp.js";
59
+ import "./manager-DrpXfTr8.js";
60
60
  import "./gemini-auth-48fFOTO4.js";
61
61
  import "./retry-C4Q_VPOo.js";
62
62
  import "./sqlite-BP8tiuca.js";
@@ -103,7 +103,7 @@ import "./onboard-helpers-wWVzXusf.js";
103
103
  import { n as stylePromptMessage } from "./prompt-style-BxVdnrLq.js";
104
104
  import "./pairing-labels-D5bj-6hr.js";
105
105
  import "./pi-tools.policy-Dcon0Kdw.js";
106
- import "./heartbeat-visibility-BOc3XHJM.js";
106
+ import "./heartbeat-visibility-C1vHOBwO.js";
107
107
  import { n as inheritOptionFromParent } from "./command-options-DbRrl8qF.js";
108
108
  import "./catalog-KcLvtTfa.js";
109
109
  import "./note-DewoEWtc.js";
@@ -113,10 +113,10 @@ import "./npm-registry-spec-PuS2I1Em.js";
113
113
  import "./skill-scanner-BV3QHmsf.js";
114
114
  import "./installs-B4sNNRaW.js";
115
115
  import "./channels-status-issues-BICbi-81.js";
116
- import "./register.subclis-Bd9G7Uhk.js";
117
- import "./command-registry-BuNPoTgT.js";
116
+ import "./register.subclis-BOf3y4FX.js";
117
+ import "./command-registry-DPjt2ua4.js";
118
118
  import "./program-context-DeZ44oQ9.js";
119
- import { r as installCompletion } from "./completion-cli-CslG8pRZ.js";
119
+ import { r as installCompletion } from "./completion-cli-DUHXuBGj.js";
120
120
  import "./daemon-runtime-zr84-Tnf.js";
121
121
  import { r as parseSemver } from "./runtime-guard-BofkqBu7.js";
122
122
  import "./systemd-CJ5L2ee4.js";
@@ -126,19 +126,19 @@ import "./systemd-hints-rhtpAhSk.js";
126
126
  import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-C2Sgv9GR.js";
127
127
  import "./diagnostics-C6xPE2ln.js";
128
128
  import { t as renderTable } from "./table-Bka4fasy.js";
129
- import "./health-BJOdskDn.js";
129
+ import "./health-CMNaNxdO.js";
130
130
  import "./control-ui-assets-DKcwWWGv.js";
131
131
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-BNjupSIM.js";
132
132
  import "./dm-policy-shared-Bj7A4uyh.js";
133
133
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-BdkE6Cod.js";
134
- import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-BSHkPRya.js";
134
+ import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-BSDKsvVP.js";
135
135
  import "./logging-PVQxLC6I.js";
136
136
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-DticqU4-.js";
137
137
  import "./doctor-config-flow-DsChXcPq.js";
138
138
  import "./systemd-linger-ipoPa7o0.js";
139
139
  import "./health-format-DkjSgkDx.js";
140
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-9fffbtA8.js";
141
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BdPD9NXi.js";
140
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-CdC8Q0fu.js";
141
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-DRSIyjR1.js";
142
142
  import { spawn, spawnSync } from "node:child_process";
143
143
  import os from "node:os";
144
144
  import path from "node:path";
@@ -1,6 +1,6 @@
1
1
  import { nt as pathExists } from "./entry.js";
2
2
  import { t as runCommandWithTimeout } from "./exec-CBKBIMpA.js";
3
- import { Ot as trimLogTail } from "./subagent-registry-B4gg8TFc.js";
3
+ import { Ot as trimLogTail } from "./subagent-registry-k0ZBnJuU.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-DKcwWWGv.js";
5
5
  import { c as DEFAULT_PACKAGE_CHANNEL, f as isBetaTag, l as DEV_BRANCH, n as compareSemverStrings, o as detectPackageManager$1, p as isStableTag, u as channelToNpmTag } from "./update-check-BNjupSIM.js";
6
6
  import os from "node:os";
@@ -1,5 +1,5 @@
1
1
  import { h as pathExists } from "./utils-B-0b9bGM.js";
2
- import { vt as trimLogTail } from "./unified-runner-NjwIEpGt.js";
2
+ import { vt as trimLogTail } from "./unified-runner-CzxCpDUC.js";
3
3
  import { t as runCommandWithTimeout } from "./exec-q6BX_N9b.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-CtKVON4w.js";
5
5
  import { c as DEFAULT_PACKAGE_CHANNEL, f as isBetaTag, l as DEV_BRANCH, n as compareSemverStrings, o as detectPackageManager$1, p as isStableTag, u as channelToNpmTag } from "./update-check-BIE5FLmi.js";
@@ -5,7 +5,7 @@ import "./agent-scope-Ddr0Ws7u.js";
5
5
  import { r as defaultRuntime, t as createSubsystemLogger } from "./subsystem-BjyjJF-d.js";
6
6
  import "./workspace-CarmeCYN.js";
7
7
  import "./tokens-DLGDtW5r.js";
8
- import { C as hasControlCommand, E as normalizeMentionText, S as resolveEnvelopeFormatOptions, T as buildMentionRegexes, _ as normalizeGroupActivation, b as resolveInboundDebounceMs, c as DEFAULT_GROUP_HISTORY_LIMIT, d as shouldAckReactionForWhatsApp, f as dispatchReplyWithBufferedBlockDispatcher, g as enqueueSystemEvent, h as formatDurationPrecise, l as buildHistoryContextFromEntries, m as createDedupeCache, n as computeBackoff, o as buildPairingReply, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as parseActivationCommand, w as shouldComputeCommandAuthorized, x as formatInboundEnvelope, y as createInboundDebouncer } from "./unified-runner-Bvqbwaaa.js";
8
+ import { C as hasControlCommand, E as normalizeMentionText, S as resolveEnvelopeFormatOptions, T as buildMentionRegexes, _ as normalizeGroupActivation, b as resolveInboundDebounceMs, c as DEFAULT_GROUP_HISTORY_LIMIT, d as shouldAckReactionForWhatsApp, f as dispatchReplyWithBufferedBlockDispatcher, g as enqueueSystemEvent, h as formatDurationPrecise, l as buildHistoryContextFromEntries, m as createDedupeCache, n as computeBackoff, o as buildPairingReply, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as parseActivationCommand, w as shouldComputeCommandAuthorized, x as formatInboundEnvelope, y as createInboundDebouncer } from "./unified-runner-Dv9LPnmm.js";
9
9
  import "./auth-profiles-D4Yfd-KL.js";
10
10
  import { n as formatCliCommand } from "./env-BDXYbTKj.js";
11
11
  import "./github-copilot-token-cCYzSU9h.js";
@@ -40,7 +40,7 @@ import "./pi-auth-json-BmjnXR7W.js";
40
40
  import { G as formatLocationText, J as readChannelAllowFromStore, K as toLocationContext, X as upsertChannelPairingRequest } from "./send-DqDuxaGt.js";
41
41
  import "./pi-model-discovery-CuZX_Q4t.js";
42
42
  import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createReplyPrefixOptions } from "./reply-prefix-C1Tw2ERK.js";
43
- import "./manager-H_Xir_av.js";
43
+ import "./manager-CpueNJtZ.js";
44
44
  import "./gemini-auth-CN9Q-uXv.js";
45
45
  import "./retry-B-y5suGA.js";
46
46
  import "./sqlite-VBmM_OHS.js";
@@ -16,7 +16,7 @@ import "./client-CJIMV1WD.js";
16
16
  import "./call-DgBbW7bk.js";
17
17
  import "./message-channel-C9dERklz.js";
18
18
  import "./pairing-token-Byh6drgn.js";
19
- import { $n as buildMentionRegexes, B as shouldAckReactionForWhatsApp, F as buildPairingReply, Gn as resolveInboundDebounceMs, Hn as normalizeGroupActivation, I as resolveMentionGating, K as createDedupeCache, Kn as formatInboundEnvelope, L as DEFAULT_GROUP_HISTORY_LIMIT, Pn as enqueueSystemEvent, R as buildHistoryContextFromEntries, Un as parseActivationCommand, V as dispatchReplyWithBufferedBlockDispatcher, Wn as createInboundDebouncer, Xn as shouldComputeCommandAuthorized, Yn as hasControlCommand, b as sleepWithAbort, er as normalizeMentionText, qn as resolveEnvelopeFormatOptions, y as computeBackoff, z as recordPendingHistoryEntryIfEnabled } from "./subagent-registry-B4gg8TFc.js";
19
+ import { $n as buildMentionRegexes, B as shouldAckReactionForWhatsApp, F as buildPairingReply, Gn as resolveInboundDebounceMs, Hn as normalizeGroupActivation, I as resolveMentionGating, K as createDedupeCache, Kn as formatInboundEnvelope, L as DEFAULT_GROUP_HISTORY_LIMIT, Pn as enqueueSystemEvent, R as buildHistoryContextFromEntries, Un as parseActivationCommand, V as dispatchReplyWithBufferedBlockDispatcher, Wn as createInboundDebouncer, Xn as shouldComputeCommandAuthorized, Yn as hasControlCommand, b as sleepWithAbort, er as normalizeMentionText, qn as resolveEnvelopeFormatOptions, y as computeBackoff, z as recordPendingHistoryEntryIfEnabled } from "./subagent-registry-k0ZBnJuU.js";
20
20
  import { B as resolveGroupSessionKey, c as recordSessionMetaFromInbound, o as loadSessionStore, s as readSessionUpdatedAt, u as updateLastRoute } from "./sessions-D94fC0u0.js";
21
21
  import "./tokens-BEvOiQ65.js";
22
22
  import "./plugins-DTKQE9kt.js";
@@ -54,8 +54,8 @@ import "./tool-images-CVLISeRT.js";
54
54
  import "./thinking-8sKPnzpp.js";
55
55
  import "./models-config-BEX8iiQb.js";
56
56
  import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createReplyPrefixOptions } from "./reply-prefix-Pz-5t5RS.js";
57
- import "./memory-cli-CEvfDody.js";
58
- import "./manager-OL6o99xD.js";
57
+ import "./memory-cli-CFc9bXRp.js";
58
+ import "./manager-DrpXfTr8.js";
59
59
  import "./gemini-auth-48fFOTO4.js";
60
60
  import "./retry-C4Q_VPOo.js";
61
61
  import "./sqlite-BP8tiuca.js";
@@ -104,7 +104,7 @@ import "./pairing-labels-D5bj-6hr.js";
104
104
  import { r as setActiveWebListener } from "./active-listener-DEi7sEFa.js";
105
105
  import "./pi-tools.policy-Dcon0Kdw.js";
106
106
  import { i as markdownToWhatsApp, n as sendMessageWhatsApp, r as sendReactionWhatsApp } from "./outbound-Deksgw1c.js";
107
- import "./heartbeat-visibility-BOc3XHJM.js";
107
+ import "./heartbeat-visibility-C1vHOBwO.js";
108
108
  import { i as waitForWaConnection, n as formatError, r as getStatusCode, t as createWaSocket } from "./session-pKv-4CWW.js";
109
109
  import { t as loginWeb } from "./login-DUm_-NBD.js";
110
110
  import { randomUUID } from "node:crypto";
@@ -1,7 +1,7 @@
1
1
  import "./paths-Cqn-zk3M.js";
2
2
  import "./utils-B-0b9bGM.js";
3
3
  import "./tokens-Cz6cgZ7r.js";
4
- import "./unified-runner-NjwIEpGt.js";
4
+ import "./unified-runner-CzxCpDUC.js";
5
5
  import "./registry-ClO_zVv-.js";
6
6
  import "./subsystem-zqierDLj.js";
7
7
  import "./auth-profiles-HXq6s5EV.js";
@@ -55,8 +55,8 @@ import "./send-DNJPCiwf.js";
55
55
  import "./model-DIO3dH08.js";
56
56
  import "./pi-model-discovery-CXXH7biP.js";
57
57
  import "./reply-prefix-DnXliXio.js";
58
- import "./memory-cli-BFgNzW3D.js";
59
- import "./manager-DdfJ-DW0.js";
58
+ import "./memory-cli-LV7-59SK.js";
59
+ import "./manager-_IXN4-V8.js";
60
60
  import "./gemini-auth-D7Wqp9Ma.js";
61
61
  import "./retry-DYICeae5.js";
62
62
  import "./sqlite-CRogFEk1.js";
@@ -102,8 +102,8 @@ import "./onboard-helpers-B-ZzwyS1.js";
102
102
  import "./prompt-style-CSNJI4MG.js";
103
103
  import "./pairing-labels-6wdVkxUt.js";
104
104
  import "./pi-tools.policy-CQ0NqaBl.js";
105
- import "./heartbeat-visibility-DiKuGlXT.js";
106
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-CegzhXtr.js";
105
+ import "./heartbeat-visibility-D7nLp3pi.js";
106
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-CBUFAaN-.js";
107
107
  import { n as sendMessageWhatsApp } from "./outbound-pYvJZbxj.js";
108
108
  import { i as waitForWaConnection, t as createWaSocket } from "./session-Cqv-gYTI.js";
109
109
  import { t as loginWeb } from "./login-Wq2hdug_.js";
@@ -8,7 +8,7 @@ import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createR
8
8
  import "./github-copilot-token-BbsJ0Qbo.js";
9
9
  import { r as formatCliCommand } from "./env-CQ_DQOwT.js";
10
10
  import "./tokens-DRIIdGfF.js";
11
- import { C as shouldComputeCommandAuthorized, S as hasControlCommand, T as normalizeMentionText, _ as parseActivationCommand, a as DEFAULT_GROUP_HISTORY_LIMIT, b as formatInboundEnvelope, c as shouldAckReactionForWhatsApp, d as createDedupeCache, g as normalizeGroupActivation, h as enqueueSystemEvent, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, m as formatDurationPrecise, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as createInboundDebouncer, w as buildMentionRegexes, x as resolveEnvelopeFormatOptions, y as resolveInboundDebounceMs } from "./pi-embedded-DiktDTAb.js";
11
+ import { C as shouldComputeCommandAuthorized, S as hasControlCommand, T as normalizeMentionText, _ as parseActivationCommand, a as DEFAULT_GROUP_HISTORY_LIMIT, b as formatInboundEnvelope, c as shouldAckReactionForWhatsApp, d as createDedupeCache, g as normalizeGroupActivation, h as enqueueSystemEvent, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, m as formatDurationPrecise, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as createInboundDebouncer, w as buildMentionRegexes, x as resolveEnvelopeFormatOptions, y as resolveInboundDebounceMs } from "./pi-embedded-D9KmgdGY.js";
12
12
  import "./plugins-CpxUKuIt.js";
13
13
  import { i as logWebSelfId, l as readWebSelfId, n as WA_WEB_AUTH_DIR, p as webAuthExists, r as getWebAuthAgeMs, s as pickWebChannel, t as resolveWhatsAppAccount } from "./accounts-DDEyGwby.js";
14
14
  import "./bindings-pK-Lzohb.js";
@@ -36,7 +36,7 @@ import "./accounts-DImOt9jX.js";
36
36
  import { s as resolveStorePath } from "./paths-DkMamAQ-.js";
37
37
  import "./tool-images-CdTyeTEN.js";
38
38
  import "./image-BwUdkv5g.js";
39
- import "./manager-D7uDkX3d.js";
39
+ import "./manager-ba9NOjzn.js";
40
40
  import "./gemini-auth-Drot-Pd7.js";
41
41
  import "./retry-QGp0jvVi.js";
42
42
  import "./sqlite-Bo4pHfp8.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/bluebubbles",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "Symi BlueBubbles channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/copilot-proxy",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi Copilot Proxy provider plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/diagnostics-otel",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "Symi diagnostics OpenTelemetry exporter",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/discord",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "Symi Discord channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/feishu",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "Symi Feishu/Lark channel plugin (community maintained by @m1heng)",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/google-antigravity-auth",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi Google Antigravity OAuth provider plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/google-gemini-cli-auth",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi Gemini CLI OAuth provider plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/googlechat",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi Google Chat channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/imessage",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi iMessage channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/irc",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "Symi IRC channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/learning-loop",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Closed-loop learning extension with deterministic quality scoring and vector-indexed learning storage",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/line",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi LINE channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/llm-task",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi JSON-only LLM task plugin",
6
6
  "type": "module",
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.0.7
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
3
9
  ## 3.0.6
4
10
 
5
11
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/matrix",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "Symi Matrix channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/mattermost",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi Mattermost channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/memory-core",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi core memory search plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/memory-lancedb",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi LanceDB-backed long-term memory plugin with auto-recall/capture",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/minimax-portal-auth",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "private": true,
5
5
  "description": "Symi MiniMax Portal OAuth provider plugin",
6
6
  "type": "module",
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.0.7
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
3
9
  ## 3.0.6
4
10
 
5
11
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/msteams",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "Symi Microsoft Teams channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/nextcloud-talk",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "Symi Nextcloud Talk channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {