@symerian/symi 2.3.4 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/dist/{accounts-tNElYrCH.js → accounts-CI6zQTJj.js} +14 -14
  2. package/dist/{accounts-qtxJ-6em.js → accounts-CJR8j_Kq.js} +1 -1
  3. package/dist/{accounts-CWktKM8a.js → accounts-ChTFYj8Q.js} +1 -1
  4. package/dist/{active-listener-C9r8ZB9m.js → active-listener-D6sXIjAg.js} +1 -1
  5. package/dist/{agent-scope-BxoUQqgM.js → agent-scope-Bw1Ed8W9.js} +3 -3
  6. package/dist/{agents-E_Ere0qU.js → agents-BrpbYYTb.js} +4 -4
  7. package/dist/{agents.config-Cv_wsBXL.js → agents.config-Bf8u_0ts.js} +1 -1
  8. package/dist/{agents.config-DJTb7Jka.js → agents.config-j4SWyB6K.js} +1 -1
  9. package/dist/{audio-preflight-O3ASWbaG.js → audio-preflight-BkIfnmpi.js} +29 -29
  10. package/dist/{auth-choice-B3D_jLQw.js → auth-choice-BYB9fJiu.js} +1 -1
  11. package/dist/{auth-choice-D8ynWABO.js → auth-choice-DlrjQI-v.js} +1 -1
  12. package/dist/{banner-ChYzCy5p.js → banner-DRJJmkv1.js} +1 -1
  13. package/dist/{bindings-B7Ke6LJi.js → bindings-BU2hsBd9.js} +2 -2
  14. package/dist/build-info.json +3 -3
  15. package/dist/bundled/boot-md/handler.js +53 -53
  16. package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
  17. package/dist/bundled/command-logger/handler.js +1 -1
  18. package/dist/bundled/session-memory/handler.js +53 -53
  19. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  20. package/dist/{channel-activity-CsM_hJ_s.js → channel-activity-C9-gaquj.js} +1 -1
  21. package/dist/{channel-options-BYUiEgev.js → channel-options-BQz0F4El.js} +1 -1
  22. package/dist/{channel-options-CMNzHg4p.js → channel-options-CxSIp3x-.js} +1 -1
  23. package/dist/{channel-web-C-HLPbLL.js → channel-web-BY4lhNxW.js} +1 -1
  24. package/dist/{channels-cli-CyhXPEWq.js → channels-cli--rkhLJvR.js} +4 -4
  25. package/dist/{channels-cli-CcCmH-Tp.js → channels-cli-B5Nj_nHr.js} +4 -4
  26. package/dist/{chrome-BFekevcE.js → chrome-CxSAp8x3.js} +20 -20
  27. package/dist/{chunk-BW5f05BR.js → chunk-ClbN9Pqy.js} +1 -1
  28. package/dist/{cli-Cp-NQ7yu.js → cli-CATf6JAq.js} +1 -1
  29. package/dist/{cli-Gcuf3NTF.js → cli-Ds6poYQ6.js} +1 -1
  30. package/dist/{command-format-BaxDnULz.js → command-format-UKHV-j0K.js} +1 -1
  31. package/dist/{command-registry-Cvr_dlLY.js → command-registry-DXt0PsFy.js} +9 -9
  32. package/dist/{commands-registry-D7CTCQPm.js → commands-registry-VSmULp-g.js} +4 -4
  33. package/dist/{completion-cli-DaOHSXM3.js → completion-cli-BsSDzZNA.js} +1 -1
  34. package/dist/{completion-cli-DDlYn0ya.js → completion-cli-CPMOXTf2.js} +2 -2
  35. package/dist/{config-cli-CmUPAVUz.js → config-cli-B_KCvdli.js} +1 -1
  36. package/dist/{config-cli-BcuAsDOu.js → config-cli-C_GarUko.js} +1 -1
  37. package/dist/{config-DRbjHIwD.js → config-eEaJddXj.js} +12 -12
  38. package/dist/{configure-Ctwt1377.js → configure-CM-z8YCS.js} +3 -3
  39. package/dist/{configure-OxYdT2hU.js → configure-vfmJApU8.js} +3 -3
  40. package/dist/{deliver-CvCK5Mm9.js → deliver-BA7ZN3iM.js} +20 -20
  41. package/dist/{diagnostic-CI0kRQkt.js → diagnostic-C3nsWaw3.js} +1 -1
  42. package/dist/{doctor-completion-D7ShsgUp.js → doctor-completion-8qbLmeX0.js} +1 -1
  43. package/dist/{doctor-completion-Dw78bQaQ.js → doctor-completion-Dnxn_-ov.js} +1 -1
  44. package/dist/entry.js +1 -1
  45. package/dist/extensionAPI.js +1 -1
  46. package/dist/{frontmatter-C_bv_0P8.js → frontmatter-DPlG6yha.js} +2 -2
  47. package/dist/{gateway-cli-D7nxPtEc.js → gateway-cli-DKDpOBp-.js} +9 -9
  48. package/dist/{gateway-cli-Bd7u0krH.js → gateway-cli-XIsXoJZ3.js} +9 -9
  49. package/dist/{gemini-auth-CdSPHuLl.js → gemini-auth-CF48hUR9.js} +1 -1
  50. package/dist/{github-copilot-token-C_qUP7p5.js → github-copilot-token-DJqsJ2-r.js} +7 -7
  51. package/dist/{glass-ui-ws-CzH0ikhI.js → glass-ui-ws-Be_AOhp7.js} +7 -7
  52. package/dist/{glass-ui-ws-DBivjzVA.js → glass-ui-ws-Z_wtGa_A.js} +7 -7
  53. package/dist/{health-rR61mwm3.js → health-BBGgp_dC.js} +1 -1
  54. package/dist/{health-BSOMI4B6.js → health-BmaWws9G.js} +1 -1
  55. package/dist/{hooks-cli-dS4fMEKE.js → hooks-cli-C5eV9sxP.js} +2 -2
  56. package/dist/{hooks-cli-BbiA-gGi.js → hooks-cli-W_aoP9nb.js} +2 -2
  57. package/dist/{image-B0wGflxA.js → image-BGmVDkkw.js} +4 -4
  58. package/dist/{image-ops-CvJzsyvE.js → image-ops-S8-8dAhx.js} +1 -1
  59. package/dist/index.js +6 -6
  60. package/dist/{ir-DccrnjsE.js → ir-CbFUkv_T.js} +4 -4
  61. package/dist/llm-slug-generator.js +53 -53
  62. package/dist/{local-roots-DMwIh5cS.js → local-roots-C7OCYACU.js} +5 -5
  63. package/dist/{login-CwCoxapk.js → login-B8uiUAnV.js} +7 -7
  64. package/dist/{login-qr-Batf3PT5.js → login-qr-CIZk8uKX.js} +12 -12
  65. package/dist/{manager-D_LwXbc6.js → manager-BoLr3xR_.js} +13 -13
  66. package/dist/{manifest-registry-D0IQ3WuX.js → manifest-registry-CneMHk0N.js} +19 -19
  67. package/dist/{markdown-tables-iMQQZu4Q.js → markdown-tables-DSHvnTLx.js} +1 -1
  68. package/dist/{message-channel-Dz5lr5b0.js → message-channel-DbsRltF2.js} +1 -1
  69. package/dist/{model-auth-DK43VicI.js → model-auth-CwOuTuXl.js} +9 -9
  70. package/dist/{models-DqE1s0YL.js → models-COaQWNz5.js} +2 -2
  71. package/dist/{models-cli-6v9jkDxp.js → models-cli-DH17yK8M.js} +3 -3
  72. package/dist/{models-cli-BWC7jYp4.js → models-cli-DeG1qheS.js} +2 -2
  73. package/dist/{onboard-Bxoibs4p.js → onboard-CXOUIg28.js} +2 -2
  74. package/dist/{onboard-BUEYf2m9.js → onboard-DBeHwdks.js} +2 -2
  75. package/dist/{onboard-channels-C3UYzZNC.js → onboard-channels-BCUkNB26.js} +1 -1
  76. package/dist/{onboard-channels-af6Cu6fT.js → onboard-channels-D93AAHMd.js} +1 -1
  77. package/dist/{onboarding-DW-7o6Ln.js → onboarding-C58wjONa.js} +3 -3
  78. package/dist/{onboarding-CDdMZbov.js → onboarding-Dfjn2-9q.js} +3 -3
  79. package/dist/{onboarding.finalize-29jsMLO2.js → onboarding.finalize-7r1HYXWd.js} +6 -6
  80. package/dist/{onboarding.finalize-BI70KOeI.js → onboarding.finalize-DGD56sXW.js} +5 -5
  81. package/dist/{outbound-attachment-DjNDa3zn.js → outbound-attachment-Co2diKdP.js} +2 -2
  82. package/dist/{outbound-D4fN_ZlE.js → outbound-opDNxv-l.js} +7 -7
  83. package/dist/{paths-DLyHUt31.js → paths-Cb87-LzP.js} +1 -1
  84. package/dist/{paths-Cce4PUkG.js → paths-CySxpNhH.js} +5 -5
  85. package/dist/{pi-auth-json-0SYBFZTt.js → pi-auth-json-DPWPoruO.js} +8 -8
  86. package/dist/{pi-embedded-PkSwAmVq.js → pi-embedded-B6uRrG1f.js} +355 -328
  87. package/dist/{pi-embedded-JXvD5-F-.js → pi-embedded-CAJ6egA1.js} +195 -168
  88. package/dist/{pi-embedded-helpers-DLFjnVBb.js → pi-embedded-helpers-DEEaCvEp.js} +52 -52
  89. package/dist/{plugin-registry-Reem6P3K.js → plugin-registry-C0iHnZ7j.js} +1 -1
  90. package/dist/{plugin-registry-B7AdPXfF.js → plugin-registry-D_BAH1V5.js} +1 -1
  91. package/dist/plugin-sdk/agents/model-aware-stream.d.ts +41 -0
  92. package/dist/plugin-sdk/agents/pi-embedded-runner/extra-params.d.ts +19 -0
  93. package/dist/plugin-sdk/agents/stream-monitor.d.ts +62 -0
  94. package/dist/plugin-sdk/{channel-web-CM7A3Y7G.js → channel-web-ilY3YUmF.js} +1 -1
  95. package/dist/plugin-sdk/index.js +2 -2
  96. package/dist/plugin-sdk/{reply-CDloTGFF.js → reply-CSgeVqcV.js} +195 -168
  97. package/dist/plugin-sdk/{web-CWNoMlnF.js → web-BVg5EjiY.js} +2 -2
  98. package/dist/{plugins-DQYI3Fr-.js → plugins-C4C9637U.js} +9 -9
  99. package/dist/{plugins-cli-V8mTTTnD.js → plugins-cli-BhOXY_Ay.js} +2 -2
  100. package/dist/{plugins-cli-B-6wVg3A.js → plugins-cli-LqQNHF1I.js} +2 -2
  101. package/dist/{program-DBtlRiFS.js → program-CutjuJj0.js} +7 -7
  102. package/dist/{program-context-BHPNVgg2.js → program-context-qVc_lsLV.js} +17 -17
  103. package/dist/{prompt-select-styled-Bh-zAqW1.js → prompt-select-styled-BCHe7Fks.js} +4 -4
  104. package/dist/{prompt-select-styled-Cup1c9RJ.js → prompt-select-styled-C0yn8YjW.js} +4 -4
  105. package/dist/{provider-auth-helpers-CiuLdUK3.js → provider-auth-helpers-BzczCfh8.js} +1 -1
  106. package/dist/{provider-auth-helpers-BNmU48Ez.js → provider-auth-helpers-Ds_HwlgY.js} +1 -1
  107. package/dist/{push-apns-9zUNNHgy.js → push-apns-CT8-VcK5.js} +1 -1
  108. package/dist/{push-apns-8VJkVSdh.js → push-apns-DvcqkHld.js} +1 -1
  109. package/dist/{pw-ai-BnAKvSuw.js → pw-ai-DhwRiS06.js} +11 -11
  110. package/dist/{qmd-manager-QHUP-_em.js → qmd-manager-DdZh9PHs.js} +7 -7
  111. package/dist/{register.agent-BtNmleKV.js → register.agent-DMvHFw16.js} +6 -6
  112. package/dist/{register.agent-DnglG42G.js → register.agent-yoXoJ_5O.js} +5 -5
  113. package/dist/{register.configure-CLW9tdE4.js → register.configure-B8UDTEcS.js} +6 -6
  114. package/dist/{register.configure-DfQOfV1W.js → register.configure-BqrNBkwZ.js} +6 -6
  115. package/dist/{register.maintenance-jFYcRLEN.js → register.maintenance-D1MuIUlv.js} +7 -7
  116. package/dist/{register.maintenance-BQfMsgo7.js → register.maintenance-DMLPFSKI.js} +8 -8
  117. package/dist/{register.message-DUsBvFSF.js → register.message-BnLBwUw9.js} +2 -2
  118. package/dist/{register.message-BhoZYcqM.js → register.message-CgtrjEFw.js} +2 -2
  119. package/dist/{register.onboard-BBwhoeoE.js → register.onboard-CXHhSH4B.js} +4 -4
  120. package/dist/{register.onboard-DQOkpYBY.js → register.onboard-D1X2dUGZ.js} +4 -4
  121. package/dist/{register.setup-Ca6khTSz.js → register.setup-DFDb5BDi.js} +4 -4
  122. package/dist/{register.setup-6jlL3L1h.js → register.setup-Q58lN0TV.js} +4 -4
  123. package/dist/{register.status-health-sessions-DQDXZYI3.js → register.status-health-sessions-CP7JWQHw.js} +3 -3
  124. package/dist/{register.status-health-sessions-DsYNMl06.js → register.status-health-sessions-DhTfQ530.js} +3 -3
  125. package/dist/{register.subclis-DJf3ihsW.js → register.subclis-CrTXa8cj.js} +9 -9
  126. package/dist/{registry-CK4e9hn8.js → registry-DP24za6g.js} +17 -17
  127. package/dist/{replies-BIX_isV7.js → replies-DpPvWiGF.js} +3 -3
  128. package/dist/{reply-DSjeqLEz.js → reply-DkwaBRX-.js} +195 -168
  129. package/dist/{reply-prefix-XlyuyChD.js → reply-prefix-CtL0omgM.js} +1 -1
  130. package/dist/{resolve-route-CZ-1eqw0.js → resolve-route-BVikmvWO.js} +4 -4
  131. package/dist/{retry-Cly39XZB.js → retry-dGG-MbxL.js} +1 -1
  132. package/dist/{run-main-B2coomPj.js → run-main-BLKPL_vM.js} +14 -14
  133. package/dist/{runner-odEv83vv.js → runner-B_KP4voe.js} +9 -9
  134. package/dist/{send-DeFniOjh.js → send-CHEOWVc8.js} +6 -6
  135. package/dist/{send-WyRqb4WD.js → send-DbcLJb0P.js} +7 -7
  136. package/dist/{send-B1u-LrcS.js → send-DeEosX8F.js} +18 -18
  137. package/dist/{send-CiTGOvEc.js → send-DwKJK3sM.js} +10 -10
  138. package/dist/{send-DW96zgDL.js → send-zSarozV2.js} +6 -6
  139. package/dist/{server-methods-QNBQbsvr.js → server-methods-CbeCo-6O.js} +7 -7
  140. package/dist/{server-methods-DHo5e8Gj.js → server-methods-EQ0JkHOg.js} +7 -7
  141. package/dist/{server-node-events-D_S0NRCQ.js → server-node-events-C1FDqJb9.js} +2 -2
  142. package/dist/{server-node-events-CJOo8WcL.js → server-node-events-CBHpc_25.js} +2 -2
  143. package/dist/{session-SM36BTsl.js → session-DV1MNlbV.js} +8 -8
  144. package/dist/{skill-commands-BJMb_psG.js → skill-commands-D610IKhm.js} +9 -9
  145. package/dist/{skills-BFekKL7i.js → skills-o5WVqM4V.js} +21 -21
  146. package/dist/{sqlite-DRbx2dhW.js → sqlite-6H6Zw1cs.js} +4 -4
  147. package/dist/{status-B8yaGk2o.js → status-B1r3Wp0-.js} +2 -2
  148. package/dist/{status-D_J6qcC1.js → status-Cksz7z4T.js} +1 -1
  149. package/dist/{status-4DaGE8j5.js → status-CnogoaI_.js} +2 -2
  150. package/dist/{status-kfEtYX22.js → status-jVJSC_Ga.js} +1 -1
  151. package/dist/{store-C0wvOkae.js → store-vVE6N2mH.js} +2 -2
  152. package/dist/{subagent-registry-CyW0EDWw.js → subagent-registry-Jwg44JMf.js} +195 -168
  153. package/dist/{subsystem-Bs9YvKLa.js → subsystem-DgpxyDQ_.js} +1 -1
  154. package/dist/{tables-DuZspiBu.js → tables-BIWsCKXJ.js} +1 -1
  155. package/dist/{target-errors-Be1SwYlW.js → target-errors-DyItGyW9.js} +2 -2
  156. package/dist/{thinking-CdlENGRW.js → thinking-Ni0HF-w6.js} +5 -5
  157. package/dist/{tokens-H1H1LiSQ.js → tokens-c_SLAkVb.js} +1 -1
  158. package/dist/{tool-images-DXB7tqWi.js → tool-images-DBCfXdli.js} +2 -2
  159. package/dist/{tool-loop-detection-Cs8_HCsx.js → tool-loop-detection-Bbc9OPFR.js} +3 -3
  160. package/dist/{update-cli-C-ZGqknl.js → update-cli-BkU6ori8.js} +8 -8
  161. package/dist/{update-cli-DJupxo-f.js → update-cli-D18nWvzY.js} +7 -7
  162. package/dist/{update-runner-AiIhp7fw.js → update-runner-BQg__DB5.js} +1 -1
  163. package/dist/{update-runner-BF5UULe-.js → update-runner-le1Hcqx4.js} +1 -1
  164. package/dist/{web-HeObJp6A.js → web-BSs2eYJa.js} +2 -2
  165. package/dist/{web-6vYYN17n.js → web-BsjZ2RTT.js} +57 -57
  166. package/dist/{web-6026eRzJ.js → web-DajtZMaX.js} +1 -1
  167. package/dist/{web-CryqKXT4.js → web-KYh3LgI0.js} +1 -1
  168. package/dist/{whatsapp-actions-D1RsnX7P.js → whatsapp-actions-oRQjcdQe.js} +23 -23
  169. package/dist/{workspace-wAaHI8-5.js → workspace-CbvamIU6.js} +6 -6
  170. package/package.json +1 -1
@@ -27119,7 +27119,7 @@ async function runWithImageModelFallback(params) {
27119
27119
  function createDefaultDeps() {
27120
27120
  return {
27121
27121
  sendMessageWhatsApp: async (...args) => {
27122
- const { sendMessageWhatsApp } = await import("./web-CWNoMlnF.js");
27122
+ const { sendMessageWhatsApp } = await import("./web-BVg5EjiY.js");
27123
27123
  return await sendMessageWhatsApp(...args);
27124
27124
  },
27125
27125
  sendMessageTelegram: async (...args) => {
@@ -44745,7 +44745,7 @@ function loadWebLoginQr() {
44745
44745
  return webLoginQrPromise;
44746
44746
  }
44747
44747
  function loadWebChannel() {
44748
- webChannelPromise ??= import("./web-CWNoMlnF.js");
44748
+ webChannelPromise ??= import("./web-BVg5EjiY.js");
44749
44749
  return webChannelPromise;
44750
44750
  }
44751
44751
  function loadWhatsAppActions() {
@@ -64447,10 +64447,6 @@ function resolveModelProfile(modelId, userProfiles) {
64447
64447
 
64448
64448
  //#endregion
64449
64449
  //#region src/agents/pi-embedded-runner/extra-params.ts
64450
- const OPENROUTER_APP_HEADERS = {
64451
- "HTTP-Referer": "https://symi.ai",
64452
- "X-Title": "Symi"
64453
- };
64454
64450
  const ANTHROPIC_CONTEXT_1M_BETA = "context-1m-2025-08-07";
64455
64451
  const ANTHROPIC_1M_MODEL_PREFIXES = ["claude-opus-4", "claude-sonnet-4"];
64456
64452
  const OPENAI_RESPONSES_APIS = new Set(["openai-responses"]);
@@ -64468,70 +64464,6 @@ function resolveExtraParams(params) {
64468
64464
  const profile = resolveModelProfile(modelKey, params.cfg?.models?.profiles);
64469
64465
  if (profile.params && Object.keys(profile.params).length > 0) return { ...profile.params };
64470
64466
  }
64471
- /**
64472
- * Resolve cacheRetention from extraParams, supporting both new `cacheRetention`
64473
- * and legacy `cacheControlTtl` values for backwards compatibility.
64474
- *
64475
- * Mapping: "5m" → "short", "1h" → "long"
64476
- *
64477
- * Only applies to Anthropic provider (OpenRouter uses openai-completions API
64478
- * with hardcoded cache_control, not the cacheRetention stream option).
64479
- *
64480
- * Defaults to "short" for Anthropic provider when not explicitly configured.
64481
- */
64482
- function resolveCacheRetention(extraParams, provider) {
64483
- if (provider !== "anthropic") return;
64484
- const newVal = extraParams?.cacheRetention;
64485
- if (newVal === "none" || newVal === "short" || newVal === "long") return newVal;
64486
- const legacy = extraParams?.cacheControlTtl;
64487
- if (legacy === "5m") return "short";
64488
- if (legacy === "1h") return "long";
64489
- return "short";
64490
- }
64491
- function createStreamFnWithExtraParams(baseStreamFn, extraParams, provider) {
64492
- if (!extraParams || Object.keys(extraParams).length === 0) return;
64493
- const streamParams = {};
64494
- if (typeof extraParams.temperature === "number") streamParams.temperature = extraParams.temperature;
64495
- if (typeof extraParams.maxTokens === "number") streamParams.maxTokens = extraParams.maxTokens;
64496
- if (typeof extraParams.top_p === "number") streamParams.top_p = extraParams.top_p;
64497
- if (typeof extraParams.top_k === "number") streamParams.top_k = extraParams.top_k;
64498
- if (typeof extraParams.repeat_penalty === "number") streamParams.repeat_penalty = extraParams.repeat_penalty;
64499
- if (Array.isArray(extraParams.stop) && extraParams.stop.length > 0) streamParams.stop = extraParams.stop;
64500
- if (extraParams.chat_template_kwargs && typeof extraParams.chat_template_kwargs === "object") streamParams.chat_template_kwargs = extraParams.chat_template_kwargs;
64501
- const cacheRetention = resolveCacheRetention(extraParams, provider);
64502
- if (cacheRetention) streamParams.cacheRetention = cacheRetention;
64503
- if (Object.keys(streamParams).length === 0) return;
64504
- log$2.debug(`creating streamFn wrapper with params: ${JSON.stringify(streamParams)}`);
64505
- const sp = streamParams;
64506
- const payloadOverrides = {};
64507
- if (Array.isArray(sp.stop) && sp.stop.length > 0) payloadOverrides.stop = sp.stop;
64508
- if (typeof sp.top_p === "number") payloadOverrides.top_p = sp.top_p;
64509
- if (typeof sp.top_k === "number") payloadOverrides.top_k = sp.top_k;
64510
- if (typeof sp.repeat_penalty === "number") payloadOverrides.repeat_penalty = sp.repeat_penalty;
64511
- const hasPayloadOverrides = Object.keys(payloadOverrides).length > 0;
64512
- const underlying = baseStreamFn ?? streamSimple;
64513
- const wrappedStreamFn = (model, context, options) => {
64514
- if (hasPayloadOverrides) {
64515
- const originalOnPayload = options?.onPayload;
64516
- return underlying(model, context, {
64517
- ...streamParams,
64518
- ...options,
64519
- onPayload: (payload) => {
64520
- if (payload && typeof payload === "object") {
64521
- const p = payload;
64522
- for (const [key, value] of Object.entries(payloadOverrides)) if (p[key] === void 0) p[key] = value;
64523
- }
64524
- originalOnPayload?.(payload);
64525
- }
64526
- });
64527
- }
64528
- return underlying(model, context, {
64529
- ...streamParams,
64530
- ...options
64531
- });
64532
- };
64533
- return wrappedStreamFn;
64534
- }
64535
64467
  function isDirectOpenAIBaseUrl(baseUrl) {
64536
64468
  if (typeof baseUrl !== "string" || !baseUrl.trim()) return true;
64537
64469
  try {
@@ -64612,20 +64544,6 @@ function createAnthropicBetaHeadersWrapper(baseStreamFn, betas) {
64612
64544
  };
64613
64545
  }
64614
64546
  /**
64615
- * Create a streamFn wrapper that adds OpenRouter app attribution headers.
64616
- * These headers allow Symi to appear on OpenRouter's leaderboard.
64617
- */
64618
- function createOpenRouterHeadersWrapper(baseStreamFn) {
64619
- const underlying = baseStreamFn ?? streamSimple;
64620
- return (model, context, options) => underlying(model, context, {
64621
- ...options,
64622
- headers: {
64623
- ...OPENROUTER_APP_HEADERS,
64624
- ...options?.headers
64625
- }
64626
- });
64627
- }
64628
- /**
64629
64547
  * Create a streamFn wrapper that injects tool_stream=true for Z.AI providers.
64630
64548
  *
64631
64549
  * Z.AI's API supports the `tool_stream` parameter to enable real-time streaming
@@ -64648,82 +64566,6 @@ function createZaiToolStreamWrapper(baseStreamFn, enabled) {
64648
64566
  });
64649
64567
  };
64650
64568
  }
64651
- const GEMMA_STOP_SEQUENCES = ["<end_of_turn>", "<eos>"];
64652
- const VLLM_GEMMA_HINTS = ["gemma", "redsand"];
64653
- function isVllmOrGemmaProvider(provider, modelId, cfg) {
64654
- const lower = `${provider}/${modelId}`.toLowerCase();
64655
- if (VLLM_GEMMA_HINTS.some((h) => lower.includes(h))) return true;
64656
- const baseUrl = ((cfg?.models?.providers?.[provider])?.baseUrl ?? "").toLowerCase();
64657
- return baseUrl.includes("coreweave") || baseUrl.includes("vllm");
64658
- }
64659
- /**
64660
- * Wrap the stream function to fix vLLM/Gemma compat issues via onPayload:
64661
- * 1. Replace `max_completion_tokens` with `max_tokens` (vLLM ignores the former)
64662
- * 2. Inject Gemma stop sequences if none are set
64663
- * 3. Remove unsupported fields (store, stream_options.include_usage on older vLLM)
64664
- */
64665
- function createVllmCompatWrapper(baseStreamFn, extraParams) {
64666
- const underlying = baseStreamFn ?? streamSimple;
64667
- const configuredStop = Array.isArray(extraParams.stop) ? extraParams.stop : GEMMA_STOP_SEQUENCES;
64668
- return (model, context, options) => {
64669
- const originalOnPayload = options?.onPayload;
64670
- return underlying(model, context, {
64671
- ...options,
64672
- onPayload: (payload) => {
64673
- if (payload && typeof payload === "object") {
64674
- const p = payload;
64675
- if (p.max_completion_tokens && !p.max_tokens) {
64676
- p.max_tokens = p.max_completion_tokens;
64677
- delete p.max_completion_tokens;
64678
- }
64679
- if (!p.stop && configuredStop.length > 0) p.stop = configuredStop;
64680
- delete p.store;
64681
- }
64682
- originalOnPayload?.(payload);
64683
- }
64684
- });
64685
- };
64686
- }
64687
- /**
64688
- * Apply extra params (like temperature) to an agent's streamFn.
64689
- * Also adds OpenRouter app attribution headers when using the OpenRouter provider.
64690
- *
64691
- * @internal Exported for testing
64692
- */
64693
- function applyExtraParamsToAgent(agent, cfg, provider, modelId, extraParamsOverride) {
64694
- const extraParams = resolveExtraParams({
64695
- cfg,
64696
- provider,
64697
- modelId
64698
- });
64699
- const override = extraParamsOverride && Object.keys(extraParamsOverride).length > 0 ? Object.fromEntries(Object.entries(extraParamsOverride).filter(([, value]) => value !== void 0)) : void 0;
64700
- const merged = Object.assign({}, extraParams, override);
64701
- const wrappedStreamFn = createStreamFnWithExtraParams(agent.streamFn, merged, provider);
64702
- if (wrappedStreamFn) {
64703
- log$2.debug(`applying extraParams to agent streamFn for ${provider}/${modelId}`);
64704
- agent.streamFn = wrappedStreamFn;
64705
- }
64706
- const anthropicBetas = resolveAnthropicBetas(merged, provider, modelId);
64707
- if (anthropicBetas?.length) {
64708
- log$2.debug(`applying Anthropic beta header for ${provider}/${modelId}: ${anthropicBetas.join(",")}`);
64709
- agent.streamFn = createAnthropicBetaHeadersWrapper(agent.streamFn, anthropicBetas);
64710
- }
64711
- if (provider === "openrouter") {
64712
- log$2.debug(`applying OpenRouter app attribution headers for ${provider}/${modelId}`);
64713
- agent.streamFn = createOpenRouterHeadersWrapper(agent.streamFn);
64714
- }
64715
- if (provider === "zai" || provider === "z-ai") {
64716
- if (merged?.tool_stream !== false) {
64717
- log$2.debug(`enabling Z.AI tool_stream for ${provider}/${modelId}`);
64718
- agent.streamFn = createZaiToolStreamWrapper(agent.streamFn, true);
64719
- }
64720
- }
64721
- if (isVllmOrGemmaProvider(provider, modelId, cfg)) {
64722
- log$2.debug(`applying vLLM/Gemma compat wrapper for ${provider}/${modelId}`);
64723
- agent.streamFn = createVllmCompatWrapper(agent.streamFn, merged);
64724
- }
64725
- agent.streamFn = createOpenAIResponsesStoreWrapper(agent.streamFn);
64726
- }
64727
64569
 
64728
64570
  //#endregion
64729
64571
  //#region src/utils/safe-json.ts
@@ -65000,6 +64842,74 @@ function createCacheTrace(params) {
65000
64842
  };
65001
64843
  }
65002
64844
 
64845
+ //#endregion
64846
+ //#region src/agents/model-aware-stream.ts
64847
+ /**
64848
+ * Create a single stream function wrapper that handles all provider-specific
64849
+ * param injection via one onPayload hook.
64850
+ *
64851
+ * Replaces: createStreamFnWithExtraParams, createVllmCompatWrapper,
64852
+ * createOpenRouterHeadersWrapper.
64853
+ */
64854
+ function createModelAwareStreamFn(opts) {
64855
+ const underlying = opts.baseStreamFn ?? streamSimple;
64856
+ const mergedParams = {
64857
+ ...opts.profile.params,
64858
+ ...opts.configExtraParams,
64859
+ ...opts.streamParamsOverride
64860
+ };
64861
+ const nativeOpts = {};
64862
+ if (typeof mergedParams.temperature === "number") nativeOpts.temperature = mergedParams.temperature;
64863
+ if (typeof mergedParams.max_tokens === "number") nativeOpts.maxTokens = mergedParams.max_tokens;
64864
+ else if (typeof mergedParams.maxTokens === "number") nativeOpts.maxTokens = mergedParams.maxTokens;
64865
+ const injections = {};
64866
+ if (Array.isArray(mergedParams.stop) && mergedParams.stop.length > 0) injections.stop = mergedParams.stop;
64867
+ if (typeof mergedParams.top_p === "number") injections.top_p = mergedParams.top_p;
64868
+ if (typeof mergedParams.top_k === "number") injections.top_k = mergedParams.top_k;
64869
+ if (typeof mergedParams.repeat_penalty === "number") injections.repeat_penalty = mergedParams.repeat_penalty;
64870
+ const isVllm = isVllmProvider(opts.provider, opts.modelId, opts.config);
64871
+ const isOpenRouter = opts.provider === "openrouter";
64872
+ const extraHeaders = {};
64873
+ if (isOpenRouter) {
64874
+ extraHeaders["HTTP-Referer"] = "https://symi.ai";
64875
+ extraHeaders["X-Title"] = "Symi";
64876
+ }
64877
+ const hasExtraHeaders = Object.keys(extraHeaders).length > 0;
64878
+ const onPayloadHook = (payload, callerOnPayload) => {
64879
+ if (payload && typeof payload === "object") {
64880
+ const p = payload;
64881
+ for (const [key, val] of Object.entries(injections)) if (p[key] === void 0) p[key] = val;
64882
+ if (isVllm) {
64883
+ if (p.max_completion_tokens && !p.max_tokens) {
64884
+ p.max_tokens = p.max_completion_tokens;
64885
+ delete p.max_completion_tokens;
64886
+ }
64887
+ delete p.store;
64888
+ }
64889
+ }
64890
+ callerOnPayload?.(payload);
64891
+ };
64892
+ return (model, context, options) => {
64893
+ const callerOnPayload = options?.onPayload;
64894
+ return underlying(model, context, {
64895
+ ...nativeOpts,
64896
+ ...options,
64897
+ onPayload: (payload) => onPayloadHook(payload, callerOnPayload),
64898
+ ...hasExtraHeaders ? { headers: {
64899
+ ...extraHeaders,
64900
+ ...options?.headers
64901
+ } } : {}
64902
+ });
64903
+ };
64904
+ }
64905
+ /** Detect vLLM/Gemma providers by model hints or baseUrl patterns. */
64906
+ function isVllmProvider(provider, modelId, config) {
64907
+ const lower = `${provider}/${modelId}`.toLowerCase();
64908
+ if (["gemma", "redsand"].some((h) => lower.includes(h))) return true;
64909
+ const baseUrl = ((config?.models?.providers?.[provider])?.baseUrl ?? "").toLowerCase();
64910
+ return baseUrl.includes("coreweave") || baseUrl.includes("vllm");
64911
+ }
64912
+
65003
64913
  //#endregion
65004
64914
  //#region src/auto-reply/reply/streaming-directives.ts
65005
64915
  const splitTrailingDirective = (text) => {
@@ -66983,6 +66893,89 @@ Use the message tool with buttons:
66983
66893
  [{"label": "✅ Proceed", "data": "/plan-proceed"}, {"label": "✏️ Modify", "data": "/plan-modify"}, {"label": "❌ Cancel", "data": "/plan-cancel"}]
66984
66894
  </plan_mode>`;
66985
66895
 
66896
+ //#endregion
66897
+ //#region src/agents/stream-monitor.ts
66898
+ /**
66899
+ * Create a stream monitor configured for the given model profile.
66900
+ *
66901
+ * - Claude (hasStructuredThinking: true): repetition detection only
66902
+ * - Gemma/vLLM (hasStructuredThinking: false): tool JSON + repetition detection
66903
+ */
66904
+ function createStreamMonitor(profile, overrides) {
66905
+ const detectToolJson = overrides?.detectToolJson ?? !profile.filters.hasStructuredThinking;
66906
+ const detectRepetition = overrides?.detectRepetition ?? true;
66907
+ const minBlockSize = overrides?.repetitionMinBlockSize ?? 150;
66908
+ let accumulated = "";
66909
+ let stopSignaled = false;
66910
+ let stopReason;
66911
+ return {
66912
+ onChunk(delta) {
66913
+ if (stopSignaled) return;
66914
+ accumulated += delta;
66915
+ if (detectToolJson && hasCompleteToolJson(accumulated)) {
66916
+ stopSignaled = true;
66917
+ stopReason = "complete-tool-json";
66918
+ return;
66919
+ }
66920
+ if (detectRepetition && hasRepetition(accumulated, minBlockSize)) {
66921
+ stopSignaled = true;
66922
+ stopReason = "repetition-detected";
66923
+ return;
66924
+ }
66925
+ },
66926
+ shouldStop: () => stopSignaled,
66927
+ getAccumulated: () => accumulated,
66928
+ getStopReason: () => stopReason,
66929
+ reset() {
66930
+ accumulated = "";
66931
+ stopSignaled = false;
66932
+ stopReason = void 0;
66933
+ }
66934
+ };
66935
+ }
66936
+ /**
66937
+ * Detect if the accumulated text contains a syntactically complete JSON
66938
+ * object with tool_name and tool_args. Used for models that output tool
66939
+ * calls as plain text JSON (not native structured tool calls).
66940
+ */
66941
+ function hasCompleteToolJson(text) {
66942
+ const hasToolKey = text.includes("tool_name") || text.includes("\"tool\"");
66943
+ const hasArgsKey = text.includes("tool_args") || text.includes("\"args\"");
66944
+ if (!hasToolKey || !hasArgsKey) return false;
66945
+ const lastBrace = text.lastIndexOf("}");
66946
+ if (lastBrace < 0) return false;
66947
+ let depth = 0;
66948
+ let start = -1;
66949
+ for (let i = lastBrace; i >= 0; i--) {
66950
+ if (text[i] === "}") depth++;
66951
+ if (text[i] === "{") depth--;
66952
+ if (depth === 0) {
66953
+ start = i;
66954
+ break;
66955
+ }
66956
+ }
66957
+ if (start < 0) return false;
66958
+ const candidate = text.slice(start, lastBrace + 1);
66959
+ try {
66960
+ const parsed = JSON.parse(candidate);
66961
+ return typeof parsed === "object" && parsed !== null && (typeof parsed.tool_name === "string" || typeof parsed.tool === "string") && (typeof parsed.tool_args === "object" || typeof parsed.args === "object");
66962
+ } catch {
66963
+ return false;
66964
+ }
66965
+ }
66966
+ /**
66967
+ * Detect if the accumulated text contains a repeated block, indicating
66968
+ * a looping cascade. Returns true if a block of `minBlockSize` chars
66969
+ * from the first half appears again in the second half.
66970
+ */
66971
+ function hasRepetition(text, minBlockSize) {
66972
+ if (text.length < minBlockSize * 2.5) return false;
66973
+ const sampleStart = Math.floor(text.length * .25);
66974
+ const sample = text.slice(sampleStart, sampleStart + minBlockSize);
66975
+ const searchStart = sampleStart + minBlockSize;
66976
+ return text.indexOf(sample, searchStart) >= 0;
66977
+ }
66978
+
66986
66979
  //#endregion
66987
66980
  //#region src/agents/symipulse-timeout.ts
66988
66981
  /**
@@ -68047,14 +68040,39 @@ async function runEmbeddedAttempt(params) {
68047
68040
  modelApi: params.model.api,
68048
68041
  workspaceDir: params.workspaceDir
68049
68042
  });
68050
- if (params.model.api === "ollama") {
68051
- const providerConfig = params.config?.models?.providers?.[params.model.provider];
68052
- const modelBaseUrl = typeof params.model.baseUrl === "string" ? params.model.baseUrl.trim() : "";
68053
- const providerBaseUrl = typeof providerConfig?.baseUrl === "string" ? providerConfig.baseUrl.trim() : "";
68054
- const ollamaBaseUrl = modelBaseUrl || providerBaseUrl || OLLAMA_NATIVE_BASE_URL;
68055
- activeSession.agent.streamFn = createOllamaStreamFn(ollamaBaseUrl);
68056
- } else activeSession.agent.streamFn = streamSimple;
68057
- applyExtraParamsToAgent(activeSession.agent, params.config, params.provider, params.modelId, params.streamParams);
68043
+ {
68044
+ let baseStreamFn = streamSimple;
68045
+ if (params.model.api === "ollama") {
68046
+ const providerConfig = params.config?.models?.providers?.[params.model.provider];
68047
+ const modelBaseUrl = typeof params.model.baseUrl === "string" ? params.model.baseUrl.trim() : "";
68048
+ const providerBaseUrl = typeof providerConfig?.baseUrl === "string" ? providerConfig.baseUrl.trim() : "";
68049
+ baseStreamFn = createOllamaStreamFn(modelBaseUrl || providerBaseUrl || OLLAMA_NATIVE_BASE_URL);
68050
+ }
68051
+ const configExtraParams = resolveExtraParams({
68052
+ cfg: params.config,
68053
+ provider: params.provider,
68054
+ modelId: params.modelId
68055
+ });
68056
+ activeSession.agent.streamFn = createModelAwareStreamFn({
68057
+ baseStreamFn,
68058
+ profile: modelProfile,
68059
+ provider: params.provider,
68060
+ modelId: params.modelId,
68061
+ config: params.config,
68062
+ configExtraParams,
68063
+ streamParamsOverride: params.streamParams
68064
+ });
68065
+ const merged = {
68066
+ ...configExtraParams,
68067
+ ...params.streamParams
68068
+ };
68069
+ const anthropicBetas = resolveAnthropicBetas(merged, params.provider, params.modelId);
68070
+ if (anthropicBetas?.length) activeSession.agent.streamFn = createAnthropicBetaHeadersWrapper(activeSession.agent.streamFn, anthropicBetas);
68071
+ if (params.provider === "zai" || params.provider === "z-ai") {
68072
+ if (merged?.tool_stream !== false) activeSession.agent.streamFn = createZaiToolStreamWrapper(activeSession.agent.streamFn, true);
68073
+ }
68074
+ activeSession.agent.streamFn = createOpenAIResponsesStoreWrapper(activeSession.agent.streamFn);
68075
+ }
68058
68076
  if (cacheTrace) {
68059
68077
  cacheTrace.recordStage("session:loaded", {
68060
68078
  messages: activeSession.messages,
@@ -68172,6 +68190,7 @@ async function runEmbeddedAttempt(params) {
68172
68190
  return fn(...args);
68173
68191
  });
68174
68192
  };
68193
+ const streamMonitor = createStreamMonitor(modelProfile);
68175
68194
  const subscription = subscribeEmbeddedPiSession({
68176
68195
  session: activeSession,
68177
68196
  runId: params.runId,
@@ -68193,6 +68212,14 @@ async function runEmbeddedAttempt(params) {
68193
68212
  onAgentEvent: (evt) => {
68194
68213
  armSymipulseTimer();
68195
68214
  params.onAgentEvent?.(evt);
68215
+ if (evt.stream === "assistant" && typeof evt.data?.text === "string" && !aborted) {
68216
+ streamMonitor.onChunk(evt.data.text);
68217
+ if (streamMonitor.shouldStop()) {
68218
+ const reason = streamMonitor.getStopReason();
68219
+ log$2.warn(`stream monitor triggered abort: runId=${params.runId} reason=${reason}`);
68220
+ abortRun(false, /* @__PURE__ */ new Error(`stream-monitor:${reason}`));
68221
+ }
68222
+ }
68196
68223
  },
68197
68224
  enforceFinalTag: params.enforceFinalTag,
68198
68225
  config: params.config,
@@ -1,5 +1,5 @@
1
1
  import { a as WA_WEB_AUTH_DIR, g as webAuthExists, s as logWebSelfId, u as pickWebChannel } from "./accounts-D9zGZU5t.js";
2
- import "./reply-CDloTGFF.js";
2
+ import "./reply-CSgeVqcV.js";
3
3
  import "./paths-DR2yt_mP.js";
4
4
  import "./github-copilot-token-D9X2phUj.js";
5
5
  import "./plugins-BbAvhC25.js";
@@ -45,7 +45,7 @@ import "./pi-embedded-helpers-BveUP4hk.js";
45
45
  import "./paths-A0xdf3yk.js";
46
46
  import "./diagnostic-mFf4i4G9.js";
47
47
  import "./store-Do3t33-c.js";
48
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-CM7A3Y7G.js";
48
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-ilY3YUmF.js";
49
49
  import "./image-BOYy0Ump.js";
50
50
  import "./pi-model-discovery-LbcEa65a.js";
51
51
  import "./api-key-rotation-CVBMpnPc.js";
@@ -1,10 +1,10 @@
1
1
  import { f as DEFAULT_ACCOUNT_ID, p as normalizeAccountId } from "./session-key-BCzIW1Y2.js";
2
- import { M as normalizeE164, a as normalizeAnyChannelId, l as requireActivePluginRegistry, n as CHAT_CHANNEL_ORDER } from "./registry-CK4e9hn8.js";
3
- import { m as createAccountListHelpers } from "./accounts-tNElYrCH.js";
2
+ import { M as normalizeE164, a as normalizeAnyChannelId, l as requireActivePluginRegistry, n as CHAT_CHANNEL_ORDER } from "./registry-DP24za6g.js";
3
+ import { m as createAccountListHelpers } from "./accounts-CI6zQTJj.js";
4
4
  import { t as normalizeChatType } from "./chat-type-C_KiWNAH.js";
5
- import { r as isTruthyEnvValue } from "./command-format-BaxDnULz.js";
6
- import { n as listBoundAccountIds, r as resolveDefaultAgentBoundAccountId } from "./bindings-B7Ke6LJi.js";
7
- import fs from "node:fs";
5
+ import { r as isTruthyEnvValue } from "./command-format-UKHV-j0K.js";
6
+ import { n as listBoundAccountIds, r as resolveDefaultAgentBoundAccountId } from "./bindings-BU2hsBd9.js";
7
+ import fsSync from "node:fs";
8
8
 
9
9
  //#region src/channels/plugins/account-action-gate.ts
10
10
  function createAccountActionGate(params) {
@@ -186,7 +186,7 @@ function resolveTelegramToken(cfg, opts = {}) {
186
186
  const accountCfg = resolveAccountCfg(accountId !== DEFAULT_ACCOUNT_ID ? accountId : DEFAULT_ACCOUNT_ID);
187
187
  const accountTokenFile = accountCfg?.tokenFile?.trim();
188
188
  if (accountTokenFile) {
189
- if (!fs.existsSync(accountTokenFile)) {
189
+ if (!fsSync.existsSync(accountTokenFile)) {
190
190
  opts.logMissingFile?.(`channels.telegram.accounts.${accountId}.tokenFile not found: ${accountTokenFile}`);
191
191
  return {
192
192
  token: "",
@@ -194,7 +194,7 @@ function resolveTelegramToken(cfg, opts = {}) {
194
194
  };
195
195
  }
196
196
  try {
197
- const token = fs.readFileSync(accountTokenFile, "utf-8").trim();
197
+ const token = fsSync.readFileSync(accountTokenFile, "utf-8").trim();
198
198
  if (token) return {
199
199
  token,
200
200
  source: "tokenFile"
@@ -219,7 +219,7 @@ function resolveTelegramToken(cfg, opts = {}) {
219
219
  const allowEnv = accountId === DEFAULT_ACCOUNT_ID;
220
220
  const tokenFile = telegramCfg?.tokenFile?.trim();
221
221
  if (tokenFile && allowEnv) {
222
- if (!fs.existsSync(tokenFile)) {
222
+ if (!fsSync.existsSync(tokenFile)) {
223
223
  opts.logMissingFile?.(`channels.telegram.tokenFile not found: ${tokenFile}`);
224
224
  return {
225
225
  token: "",
@@ -227,7 +227,7 @@ function resolveTelegramToken(cfg, opts = {}) {
227
227
  };
228
228
  }
229
229
  try {
230
- const token = fs.readFileSync(tokenFile, "utf-8").trim();
230
+ const token = fsSync.readFileSync(tokenFile, "utf-8").trim();
231
231
  if (token) return {
232
232
  token,
233
233
  source: "tokenFile"
@@ -1,7 +1,7 @@
1
1
  import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, S as shortenHomePath, g as resolveConfigDir, x as shortenHomeInString, y as resolveUserPath } from "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import "./reply-DSjeqLEz.js";
4
+ import "./reply-DkwaBRX-.js";
5
5
  import "./registry-Cja8eT7G.js";
6
6
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
7
7
  import "./exec-CWkblSrI.js";
@@ -106,7 +106,7 @@ import "./npm-registry-spec-C2JDdSZS.js";
106
106
  import "./skill-scanner-CLs8u6vQ.js";
107
107
  import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-C1Cebk97.js";
108
108
  import { t as renderTable } from "./table-BTgkRafz.js";
109
- import { t as buildPluginStatusReport } from "./status-kfEtYX22.js";
109
+ import { t as buildPluginStatusReport } from "./status-jVJSC_Ga.js";
110
110
  import { n as updateNpmInstalledPlugins } from "./update-rw7wJwHd.js";
111
111
  import fs from "node:fs";
112
112
  import os from "node:os";
@@ -13,7 +13,7 @@ import "./client-DMBZpU6X.js";
13
13
  import "./call-BcE47FtD.js";
14
14
  import "./message-channel-C9dERklz.js";
15
15
  import "./pairing-token-Byh6drgn.js";
16
- import "./subagent-registry-CyW0EDWw.js";
16
+ import "./subagent-registry-Jwg44JMf.js";
17
17
  import "./sessions-CJXnZVjR.js";
18
18
  import "./tokens-Csntmwwn.js";
19
19
  import "./plugins-CwSlLxM8.js";
@@ -102,7 +102,7 @@ import "./npm-registry-spec-DkaZNHAW.js";
102
102
  import "./skill-scanner-BGWOBqLY.js";
103
103
  import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-CgQpVncj.js";
104
104
  import { t as renderTable } from "./table-D01d2GuY.js";
105
- import { t as buildPluginStatusReport } from "./status-D_J6qcC1.js";
105
+ import { t as buildPluginStatusReport } from "./status-Cksz7z4T.js";
106
106
  import { n as updateNpmInstalledPlugins } from "./update-DEMKx4eC.js";
107
107
  import os from "node:os";
108
108
  import path from "node:path";
@@ -14,7 +14,7 @@ import "./client-DMBZpU6X.js";
14
14
  import "./call-BcE47FtD.js";
15
15
  import "./message-channel-C9dERklz.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import "./subagent-registry-CyW0EDWw.js";
17
+ import "./subagent-registry-Jwg44JMf.js";
18
18
  import "./sessions-CJXnZVjR.js";
19
19
  import "./tokens-Csntmwwn.js";
20
20
  import "./plugins-CwSlLxM8.js";
@@ -99,13 +99,13 @@ import "./prompt-style-DwCXob2h.js";
99
99
  import "./pairing-labels-D1HDboV2.js";
100
100
  import "./pi-tools.policy-De00gPXt.js";
101
101
  import "./catalog-DLQFKucJ.js";
102
- import "./plugin-registry-B7AdPXfF.js";
103
- import { n as resolveCliChannelOptions } from "./channel-options-CMNzHg4p.js";
104
- import { t as getSubCliCommandsWithSubcommands } from "./register.subclis-DJf3ihsW.js";
105
- import { a as registerProgramCommands, r as getCoreCliCommandsWithSubcommands } from "./command-registry-Cvr_dlLY.js";
102
+ import "./plugin-registry-D_BAH1V5.js";
103
+ import { n as resolveCliChannelOptions } from "./channel-options-CxSIp3x-.js";
104
+ import { t as getSubCliCommandsWithSubcommands } from "./register.subclis-CrTXa8cj.js";
105
+ import { a as registerProgramCommands, r as getCoreCliCommandsWithSubcommands } from "./command-registry-DXt0PsFy.js";
106
106
  import { r as setProgramContext } from "./program-context-CqzR_m-7.js";
107
107
  import { t as forceFreePort } from "./ports-Dn122MUd.js";
108
- import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-ChYzCy5p.js";
108
+ import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-DRJJmkv1.js";
109
109
  import { Command } from "commander";
110
110
 
111
111
  //#region src/cli/program/context.ts
@@ -213,7 +213,7 @@ function registerPreActionHooks(program, programVersion) {
213
213
  commandPath
214
214
  });
215
215
  if (PLUGIN_REQUIRED_COMMANDS.has(commandPath[0])) {
216
- const { ensurePluginRegistryLoaded } = await import("./plugin-registry-B7AdPXfF.js").then((n) => n.n);
216
+ const { ensurePluginRegistryLoaded } = await import("./plugin-registry-D_BAH1V5.js").then((n) => n.n);
217
217
  ensurePluginRegistryLoaded();
218
218
  }
219
219
  });