@symerian/symi 2.3.0 → 2.3.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 (116) hide show
  1. package/dist/{agents-B0pTMEwy.js → agents-DzuttgJU.js} +4 -4
  2. package/dist/{agents.config-_b7ghdyb.js → agents.config-2HlZJsR3.js} +1 -1
  3. package/dist/{agents.config-CdNbu8M5.js → agents.config-CSucty2T.js} +1 -1
  4. package/dist/{audio-preflight-BkIfnmpi.js → audio-preflight-BsfqyC31.js} +4 -4
  5. package/dist/{audio-preflight-CPBOQV4I.js → audio-preflight-C40mKAp7.js} +4 -4
  6. package/dist/{auth-choice-Bx2Ly3cQ.js → auth-choice-ChrEc3cZ.js} +1 -1
  7. package/dist/{auth-choice-EFFQA4ii.js → auth-choice-Cve09z1a.js} +1 -1
  8. package/dist/{banner-B3eic4uq.js → banner-BoLflN_R.js} +1 -1
  9. package/dist/build-info.json +3 -3
  10. package/dist/bundled/boot-md/handler.js +6 -6
  11. package/dist/bundled/session-memory/handler.js +6 -6
  12. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  13. package/dist/{channel-options-CiowWU_F.js → channel-options-Dkd1WQZx.js} +1 -1
  14. package/dist/{channel-options-75aPoFR-.js → channel-options-DqgeO1f6.js} +1 -1
  15. package/dist/{channel-web-B3e8z6ws.js → channel-web-CJvDQ5Ea.js} +1 -1
  16. package/dist/{channels-cli-DZM3aIdY.js → channels-cli-D0jjOLRb.js} +4 -4
  17. package/dist/{channels-cli-BDAVsmSm.js → channels-cli-DtqwJZWy.js} +4 -4
  18. package/dist/{chrome-D2SKJnR7.js → chrome-CDJYxX5a.js} +7 -7
  19. package/dist/{chrome-CxSAp8x3.js → chrome-w3SLcQJF.js} +7 -7
  20. package/dist/{cli-BRwovkQi.js → cli-CEtg8kql.js} +1 -1
  21. package/dist/{cli-D9SQsNnH.js → cli-CHOmeum9.js} +1 -1
  22. package/dist/{command-registry-BOI6nYdi.js → command-registry-Ba2z3dYq.js} +9 -9
  23. package/dist/{completion-cli-NNzoK79d.js → completion-cli-BgX3MWVU.js} +1 -1
  24. package/dist/{completion-cli-83vpWmfU.js → completion-cli-CD-306wt.js} +2 -2
  25. package/dist/{config-cli-DEAh6EN8.js → config-cli-Cz87-TYh.js} +1 -1
  26. package/dist/{config-cli-MLtPektI.js → config-cli-DAbXVRUL.js} +1 -1
  27. package/dist/{configure-BdfU-OWp.js → configure-0nrthdSf.js} +3 -3
  28. package/dist/{configure-vl7Z4vWj.js → configure-D45ne4lm.js} +3 -3
  29. package/dist/{deliver-C-37cZUe.js → deliver-BH0l3UKW.js} +1 -1
  30. package/dist/{deliver-BA7ZN3iM.js → deliver-BmPK91JP.js} +1 -1
  31. package/dist/{doctor-completion-Ds-_m1_I.js → doctor-completion-CcDVOtZ5.js} +1 -1
  32. package/dist/{doctor-completion-OyrrKhcY.js → doctor-completion-CmGtqUHQ.js} +1 -1
  33. package/dist/entry.js +1 -1
  34. package/dist/extensionAPI.js +6 -6
  35. package/dist/{gateway-cli-Coue82yW.js → gateway-cli-BVN31fwu.js} +9 -9
  36. package/dist/{gateway-cli-DfFSqETj.js → gateway-cli-DajX3Pye.js} +9 -9
  37. package/dist/{glass-ui-ws-D0Y3Ftjr.js → glass-ui-ws-CQG6acJl.js} +7 -7
  38. package/dist/{glass-ui-ws-Dkh8KQKx.js → glass-ui-ws-Z1IOT6Vc.js} +7 -7
  39. package/dist/{health-BL_zFcJ8.js → health-D9eQW7fJ.js} +1 -1
  40. package/dist/{health-B1LT2TG3.js → health-f056vLGT.js} +1 -1
  41. package/dist/{hooks-cli-CI7p--JB.js → hooks-cli-CW-IRS72.js} +2 -2
  42. package/dist/{hooks-cli-BoE1T7F1.js → hooks-cli-hJ4euq2R.js} +2 -2
  43. package/dist/{image-DcpMiprB.js → image-CHzdaNJ4.js} +1 -1
  44. package/dist/{image-BGmVDkkw.js → image-rZ4x9VS9.js} +1 -1
  45. package/dist/index.js +6 -6
  46. package/dist/llm-slug-generator.js +6 -6
  47. package/dist/{models-cli-B-mDqwNv.js → models-cli-B2ticsCM.js} +2 -2
  48. package/dist/{models-cli-Dm_3bpun.js → models-cli-D9bG44Ao.js} +3 -3
  49. package/dist/{models-DSx-ohwA.js → models-nO_t1uzp.js} +2 -2
  50. package/dist/{onboard-CPRPPhos.js → onboard-BDbpfrZj.js} +2 -2
  51. package/dist/{onboard-u4HyeN9s.js → onboard-BtZ9WqhJ.js} +2 -2
  52. package/dist/{onboard-channels-BUz8JSpV.js → onboard-channels-CHE8nfNA.js} +1 -1
  53. package/dist/{onboard-channels-CixaQo6p.js → onboard-channels-HubyUVjT.js} +1 -1
  54. package/dist/{onboarding-DVnX6G65.js → onboarding-DtP0sps0.js} +3 -3
  55. package/dist/{onboarding-HeYKKCUg.js → onboarding-eVb5gvwo.js} +3 -3
  56. package/dist/{onboarding.finalize-CyfJOd_0.js → onboarding.finalize-CetxPTxL.js} +5 -5
  57. package/dist/{onboarding.finalize-BJD7ST55.js → onboarding.finalize-D8035U2E.js} +6 -6
  58. package/dist/{pi-embedded-Du1crlEA.js → pi-embedded-BY-dBus2.js} +216 -171
  59. package/dist/{pi-embedded-Dbwt0RDE.js → pi-embedded-Dc3muKtS.js} +216 -171
  60. package/dist/{pi-embedded-helpers-DEEaCvEp.js → pi-embedded-helpers-B2z46qeM.js} +4 -4
  61. package/dist/{pi-embedded-helpers-B8kqLWns.js → pi-embedded-helpers-lgx_U5KS.js} +4 -4
  62. package/dist/{plugin-registry-B3_VvP9Z.js → plugin-registry-CuoX8mar.js} +1 -1
  63. package/dist/{plugin-registry-BHTWmVtf.js → plugin-registry-fxcvycGr.js} +1 -1
  64. package/dist/plugin-sdk/{channel-web-pXiGDTMm.js → channel-web-CV1KLtZh.js} +1 -1
  65. package/dist/plugin-sdk/index.js +2 -2
  66. package/dist/plugin-sdk/{reply-ClH0tnJf.js → reply-C4mijdMZ.js} +202 -157
  67. package/dist/plugin-sdk/{web-D-2D6z4H.js → web-B17UUsjm.js} +2 -2
  68. package/dist/{plugins-cli-CiJ3j55S.js → plugins-cli-4OqSGHp-.js} +2 -2
  69. package/dist/{plugins-cli-Dm1uy7by.js → plugins-cli-BbE_Qnlk.js} +2 -2
  70. package/dist/{program-CH2ZAXFK.js → program-DkXOdfM2.js} +7 -7
  71. package/dist/{program-context-BHdXKRCG.js → program-context-0bDxGpMx.js} +17 -17
  72. package/dist/{prompt-select-styled-D8-TYiCU.js → prompt-select-styled-DJkRn30j.js} +4 -4
  73. package/dist/{prompt-select-styled-YbkZmrxn.js → prompt-select-styled-_6KbTFXs.js} +4 -4
  74. package/dist/{provider-auth-helpers-BvwbMhtC.js → provider-auth-helpers-Bnkj4QXS.js} +1 -1
  75. package/dist/{provider-auth-helpers-BXnJRRuA.js → provider-auth-helpers-BpVAdwK_.js} +1 -1
  76. package/dist/{push-apns-CtNHq-T0.js → push-apns-C0wMP1XU.js} +1 -1
  77. package/dist/{push-apns-BKDV4tcx.js → push-apns-EKnCwrqK.js} +1 -1
  78. package/dist/{pw-ai-1htA-NnS.js → pw-ai-De-KR9_s.js} +1 -1
  79. package/dist/{pw-ai-DhwRiS06.js → pw-ai-PiQUncix.js} +1 -1
  80. package/dist/{register.agent-BUq96Y9v.js → register.agent-B0S1CJEx.js} +5 -5
  81. package/dist/{register.agent-BKI5-fHH.js → register.agent-B48Vf_DK.js} +6 -6
  82. package/dist/{register.configure-D5lE614j.js → register.configure-Drr3E9OG.js} +6 -6
  83. package/dist/{register.configure-wxLUAVNm.js → register.configure-Wyv7vb24.js} +6 -6
  84. package/dist/{register.maintenance-C7McOGSl.js → register.maintenance-Cmf17EW0.js} +7 -7
  85. package/dist/{register.maintenance-CBkeGPZ5.js → register.maintenance-TgjAQ4E0.js} +8 -8
  86. package/dist/{register.message-COdTYFse.js → register.message-BcsPnPvW.js} +2 -2
  87. package/dist/{register.message-CI-7hMop.js → register.message-Dwv2puIB.js} +2 -2
  88. package/dist/{register.onboard-BB0BR6ER.js → register.onboard-BDGaSyq2.js} +4 -4
  89. package/dist/{register.onboard-Cvq4D9PO.js → register.onboard-C8w7_w93.js} +4 -4
  90. package/dist/{register.setup-BFsDqWth.js → register.setup-CMGSNKXS.js} +4 -4
  91. package/dist/{register.setup-BYdcj7kG.js → register.setup-CiEuZOlI.js} +4 -4
  92. package/dist/{register.status-health-sessions-Z5xGFCb6.js → register.status-health-sessions-C8p0uINc.js} +3 -3
  93. package/dist/{register.status-health-sessions-CLTBPceP.js → register.status-health-sessions-zKjmZyOs.js} +3 -3
  94. package/dist/{register.subclis-DbjFcioS.js → register.subclis-CofZE_pt.js} +9 -9
  95. package/dist/{reply-Dlka9TPn.js → reply-SBi_U7P7.js} +202 -157
  96. package/dist/{run-main-CZKS1Km-.js → run-main-BJaDO3WW.js} +14 -14
  97. package/dist/{runner-B_KP4voe.js → runner-CCSMfQee.js} +1 -1
  98. package/dist/{runner-BcQ0sF9T.js → runner-DUBExAb5.js} +1 -1
  99. package/dist/{server-methods-Dl2xnUeP.js → server-methods-Cm6W01ne.js} +7 -7
  100. package/dist/{server-methods-060ibtki.js → server-methods-CyFB3XQf.js} +7 -7
  101. package/dist/{server-node-events-BaVEbs-L.js → server-node-events-Bhgt3xLw.js} +2 -2
  102. package/dist/{server-node-events-CxdmKBmm.js → server-node-events-CX1plxJz.js} +2 -2
  103. package/dist/{status-B161_hoB.js → status-BBpD_1pG.js} +2 -2
  104. package/dist/{status-DFFFYwyN.js → status-BdmYV3_x.js} +1 -1
  105. package/dist/{status-DqWKFOGN.js → status-CwXg8OO1.js} +2 -2
  106. package/dist/{status-V0eZ4bzN.js → status-U_1mE-yc.js} +1 -1
  107. package/dist/{subagent-registry-DLH72QgE.js → subagent-registry-Du9P0G2U.js} +202 -157
  108. package/dist/{update-cli-BHNHad5c.js → update-cli-DJzF_9UX.js} +7 -7
  109. package/dist/{update-cli-t1GIk6uw.js → update-cli-_45TJ3hZ.js} +8 -8
  110. package/dist/{update-runner-Ciq1c0YL.js → update-runner-8Ac4bJ1w.js} +1 -1
  111. package/dist/{update-runner-CDG0-jLB.js → update-runner-BSQFv9b6.js} +1 -1
  112. package/dist/{web-CWhHll12.js → web-BZSI7b07.js} +2 -2
  113. package/dist/{web-B_JQgMeX.js → web-BqRsq6mP.js} +6 -6
  114. package/dist/{web-BkvYOXO1.js → web-C1Zn8_qW.js} +6 -6
  115. package/dist/{web-FaXjM6fP.js → web-w-vV1rCZ.js} +1 -1
  116. package/package.json +1 -1
@@ -22374,7 +22374,7 @@ async function runWithImageModelFallback(params) {
22374
22374
  function createDefaultDeps() {
22375
22375
  return {
22376
22376
  sendMessageWhatsApp: async (...args) => {
22377
- const { sendMessageWhatsApp } = await import("./web-CWhHll12.js");
22377
+ const { sendMessageWhatsApp } = await import("./web-BZSI7b07.js");
22378
22378
  return await sendMessageWhatsApp(...args);
22379
22379
  },
22380
22380
  sendMessageTelegram: async (...args) => {
@@ -40937,7 +40937,7 @@ function loadWebLoginQr() {
40937
40937
  return webLoginQrPromise;
40938
40938
  }
40939
40939
  function loadWebChannel() {
40940
- webChannelPromise ??= import("./web-CWhHll12.js");
40940
+ webChannelPromise ??= import("./web-BZSI7b07.js");
40941
40941
  return webChannelPromise;
40942
40942
  }
40943
40943
  function loadWhatsAppActions() {
@@ -59029,6 +59029,162 @@ async function compactEmbeddedPiSession(params) {
59029
59029
  return enqueueCommandInLane(sessionLane, () => enqueueGlobal(async () => compactEmbeddedPiSessionDirect(params)));
59030
59030
  }
59031
59031
 
59032
+ //#endregion
59033
+ //#region src/config/model-profiles-builtin.ts
59034
+ /**
59035
+ * Built-in model profiles. Ordered from most-specific to least-specific so
59036
+ * that `resolveModelProfile` can return the first match.
59037
+ *
59038
+ * Order matters: "ollama/" must precede "gemma" because model IDs like
59039
+ * "ollama/gemma4:31b-128k" contain both substrings.
59040
+ */
59041
+ const BUILTIN_PROFILES = [
59042
+ {
59043
+ match: ["ollama/"],
59044
+ label: "Ollama Local",
59045
+ params: {
59046
+ temperature: 1,
59047
+ top_p: .95,
59048
+ top_k: 64,
59049
+ max_tokens: 4096,
59050
+ stop: ["<end_of_turn>", "<eos>"]
59051
+ },
59052
+ streaming: {
59053
+ deltaThrottleMs: 50,
59054
+ flushOnFinal: true,
59055
+ chunkPattern: "burst"
59056
+ },
59057
+ filters: {
59058
+ stripPatterns: [
59059
+ "<\\|channel>\\w*",
59060
+ "<channel\\|>",
59061
+ "<start_of_turn>(?:model|user)?",
59062
+ "<end_of_turn>"
59063
+ ],
59064
+ suppressMonologue: true,
59065
+ hasStructuredThinking: false
59066
+ },
59067
+ promptAdditions: ["You are running locally via Ollama. Do not output raw control tokens or internal monologue. Send brief progress updates on long tasks."],
59068
+ ui: {
59069
+ badge: "Local",
59070
+ watchdogMs: 9e5,
59071
+ armWatchdogOnSend: true
59072
+ }
59073
+ },
59074
+ {
59075
+ match: ["anthropic/", "claude-"],
59076
+ label: "Claude",
59077
+ params: {
59078
+ temperature: 1,
59079
+ top_p: 1,
59080
+ max_tokens: 8192
59081
+ },
59082
+ streaming: {
59083
+ deltaThrottleMs: 150,
59084
+ flushOnFinal: false,
59085
+ chunkPattern: "token"
59086
+ },
59087
+ filters: {
59088
+ stripPatterns: [],
59089
+ suppressMonologue: false,
59090
+ hasStructuredThinking: true
59091
+ },
59092
+ promptAdditions: [],
59093
+ ui: {
59094
+ badge: "API",
59095
+ watchdogMs: 3e5,
59096
+ armWatchdogOnSend: false
59097
+ }
59098
+ },
59099
+ {
59100
+ match: ["gemma", "redsand/"],
59101
+ label: "Gemma 4",
59102
+ params: {
59103
+ temperature: 1,
59104
+ top_p: .95,
59105
+ top_k: 64,
59106
+ max_tokens: 4096,
59107
+ stop: ["<end_of_turn>", "<eos>"]
59108
+ },
59109
+ streaming: {
59110
+ deltaThrottleMs: 50,
59111
+ flushOnFinal: true,
59112
+ chunkPattern: "burst"
59113
+ },
59114
+ filters: {
59115
+ stripPatterns: [
59116
+ "<\\|channel>\\w*",
59117
+ "<channel\\|>",
59118
+ "<start_of_turn>(?:model|user)?",
59119
+ "<end_of_turn>",
59120
+ "<\\|(?:fim_prefix|fim_suffix|fim_middle)\\|>",
59121
+ "^\\s*<bos>\\s*"
59122
+ ],
59123
+ suppressMonologue: true,
59124
+ hasStructuredThinking: false
59125
+ },
59126
+ promptAdditions: [
59127
+ "You are running as Gemma 4 via vLLM. Important behavioral rules:",
59128
+ "- Never output raw control tokens, channel tags, or turn markers in your responses.",
59129
+ "- Never display internal status checks, plans, or self-assessments. Your visible output should only be conversational responses and final results.",
59130
+ "- When working on multi-step tasks, send a brief one-line status update every 30-60 seconds so the user knows you are active.",
59131
+ "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
59132
+ "- Do not use <|channel>thought or similar syntax. If you need to reason, do so silently."
59133
+ ],
59134
+ ui: {
59135
+ badge: "CoreWeave",
59136
+ watchdogMs: 6e5,
59137
+ armWatchdogOnSend: true
59138
+ }
59139
+ }
59140
+ ];
59141
+
59142
+ //#endregion
59143
+ //#region src/config/resolve-model-profile.ts
59144
+ /** Default profile returned when no match is found. */
59145
+ const FALLBACK_PROFILE = {
59146
+ match: "*",
59147
+ label: "Generic",
59148
+ params: {
59149
+ temperature: 1,
59150
+ max_tokens: 4096
59151
+ },
59152
+ streaming: {
59153
+ deltaThrottleMs: 150,
59154
+ flushOnFinal: true,
59155
+ chunkPattern: "burst"
59156
+ },
59157
+ filters: {
59158
+ stripPatterns: [],
59159
+ suppressMonologue: false,
59160
+ hasStructuredThinking: false
59161
+ },
59162
+ promptAdditions: [],
59163
+ ui: {
59164
+ watchdogMs: 3e5,
59165
+ armWatchdogOnSend: true
59166
+ }
59167
+ };
59168
+ /**
59169
+ * Resolve the active model profile for a given model ID.
59170
+ *
59171
+ * Resolution order:
59172
+ * 1. User-defined profiles (from `models.profiles` in symi.json)
59173
+ * 2. Built-in profiles ({@link BUILTIN_PROFILES})
59174
+ * 3. Fallback "Generic" profile
59175
+ *
59176
+ * Matching is case-insensitive prefix/substring against the model ID.
59177
+ */
59178
+ function resolveModelProfile(modelId, userProfiles) {
59179
+ const id = modelId.toLowerCase();
59180
+ const allProfiles = [...userProfiles ?? [], ...BUILTIN_PROFILES];
59181
+ for (const profile of allProfiles) {
59182
+ const patterns = Array.isArray(profile.match) ? profile.match : [profile.match];
59183
+ for (const pattern of patterns) if (id.startsWith(pattern.toLowerCase()) || id.includes(pattern.toLowerCase())) return profile;
59184
+ }
59185
+ return FALLBACK_PROFILE;
59186
+ }
59187
+
59032
59188
  //#endregion
59033
59189
  //#region src/agents/pi-embedded-runner/extra-params.ts
59034
59190
  const OPENROUTER_APP_HEADERS = {
@@ -59048,7 +59204,9 @@ const OPENAI_RESPONSES_PROVIDERS = new Set(["openai"]);
59048
59204
  function resolveExtraParams(params) {
59049
59205
  const modelKey = `${params.provider}/${params.modelId}`;
59050
59206
  const modelConfig = params.cfg?.agents?.defaults?.models?.[modelKey];
59051
- return modelConfig?.params ? { ...modelConfig.params } : void 0;
59207
+ if (modelConfig?.params) return { ...modelConfig.params };
59208
+ const profile = resolveModelProfile(modelKey, params.cfg?.models?.profiles);
59209
+ if (profile.params && Object.keys(profile.params).length > 0) return { ...profile.params };
59052
59210
  }
59053
59211
  /**
59054
59212
  * Resolve cacheRetention from extraParams, supporting both new `cacheRetention`
@@ -59078,6 +59236,7 @@ function createStreamFnWithExtraParams(baseStreamFn, extraParams, provider) {
59078
59236
  if (typeof extraParams.top_p === "number") streamParams.top_p = extraParams.top_p;
59079
59237
  if (typeof extraParams.top_k === "number") streamParams.top_k = extraParams.top_k;
59080
59238
  if (typeof extraParams.repeat_penalty === "number") streamParams.repeat_penalty = extraParams.repeat_penalty;
59239
+ if (Array.isArray(extraParams.stop) && extraParams.stop.length > 0) streamParams.stop = extraParams.stop;
59081
59240
  if (extraParams.chat_template_kwargs && typeof extraParams.chat_template_kwargs === "object") streamParams.chat_template_kwargs = extraParams.chat_template_kwargs;
59082
59241
  const cacheRetention = resolveCacheRetention(extraParams, provider);
59083
59242
  if (cacheRetention) streamParams.cacheRetention = cacheRetention;
@@ -59206,6 +59365,42 @@ function createZaiToolStreamWrapper(baseStreamFn, enabled) {
59206
59365
  });
59207
59366
  };
59208
59367
  }
59368
+ const GEMMA_STOP_SEQUENCES = ["<end_of_turn>", "<eos>"];
59369
+ const VLLM_GEMMA_HINTS = ["gemma", "redsand"];
59370
+ function isVllmOrGemmaProvider(provider, modelId, cfg) {
59371
+ const lower = `${provider}/${modelId}`.toLowerCase();
59372
+ if (VLLM_GEMMA_HINTS.some((h) => lower.includes(h))) return true;
59373
+ const baseUrl = ((cfg?.models?.providers?.[provider])?.baseUrl ?? "").toLowerCase();
59374
+ return baseUrl.includes("coreweave") || baseUrl.includes("vllm");
59375
+ }
59376
+ /**
59377
+ * Wrap the stream function to fix vLLM/Gemma compat issues via onPayload:
59378
+ * 1. Replace `max_completion_tokens` with `max_tokens` (vLLM ignores the former)
59379
+ * 2. Inject Gemma stop sequences if none are set
59380
+ * 3. Remove unsupported fields (store, stream_options.include_usage on older vLLM)
59381
+ */
59382
+ function createVllmCompatWrapper(baseStreamFn, extraParams) {
59383
+ const underlying = baseStreamFn ?? streamSimple;
59384
+ const configuredStop = Array.isArray(extraParams.stop) ? extraParams.stop : GEMMA_STOP_SEQUENCES;
59385
+ return (model, context, options) => {
59386
+ const originalOnPayload = options?.onPayload;
59387
+ return underlying(model, context, {
59388
+ ...options,
59389
+ onPayload: (payload) => {
59390
+ if (payload && typeof payload === "object") {
59391
+ const p = payload;
59392
+ if (p.max_completion_tokens && !p.max_tokens) {
59393
+ p.max_tokens = p.max_completion_tokens;
59394
+ delete p.max_completion_tokens;
59395
+ }
59396
+ if (!p.stop && configuredStop.length > 0) p.stop = configuredStop;
59397
+ delete p.store;
59398
+ }
59399
+ originalOnPayload?.(payload);
59400
+ }
59401
+ });
59402
+ };
59403
+ }
59209
59404
  /**
59210
59405
  * Apply extra params (like temperature) to an agent's streamFn.
59211
59406
  * Also adds OpenRouter app attribution headers when using the OpenRouter provider.
@@ -59240,161 +59435,11 @@ function applyExtraParamsToAgent(agent, cfg, provider, modelId, extraParamsOverr
59240
59435
  agent.streamFn = createZaiToolStreamWrapper(agent.streamFn, true);
59241
59436
  }
59242
59437
  }
59243
- agent.streamFn = createOpenAIResponsesStoreWrapper(agent.streamFn);
59244
- }
59245
-
59246
- //#endregion
59247
- //#region src/config/model-profiles-builtin.ts
59248
- /**
59249
- * Built-in model profiles. Ordered from most-specific to least-specific so
59250
- * that `resolveModelProfile` can return the first match.
59251
- *
59252
- * Order matters: "ollama/" must precede "gemma" because model IDs like
59253
- * "ollama/gemma4:31b-128k" contain both substrings.
59254
- */
59255
- const BUILTIN_PROFILES = [
59256
- {
59257
- match: ["ollama/"],
59258
- label: "Ollama Local",
59259
- params: {
59260
- temperature: 1,
59261
- top_p: .95,
59262
- top_k: 64,
59263
- max_tokens: 4096
59264
- },
59265
- streaming: {
59266
- deltaThrottleMs: 50,
59267
- flushOnFinal: true,
59268
- chunkPattern: "burst"
59269
- },
59270
- filters: {
59271
- stripPatterns: [
59272
- "<\\|channel>\\w*",
59273
- "<channel\\|>",
59274
- "<start_of_turn>(?:model|user)?",
59275
- "<end_of_turn>"
59276
- ],
59277
- suppressMonologue: true,
59278
- hasStructuredThinking: false
59279
- },
59280
- promptAdditions: ["You are running locally via Ollama. Do not output raw control tokens or internal monologue. Send brief progress updates on long tasks."],
59281
- ui: {
59282
- badge: "Local",
59283
- watchdogMs: 9e5,
59284
- armWatchdogOnSend: true
59285
- }
59286
- },
59287
- {
59288
- match: ["anthropic/", "claude-"],
59289
- label: "Claude",
59290
- params: {
59291
- temperature: 1,
59292
- top_p: 1,
59293
- max_tokens: 8192
59294
- },
59295
- streaming: {
59296
- deltaThrottleMs: 150,
59297
- flushOnFinal: false,
59298
- chunkPattern: "token"
59299
- },
59300
- filters: {
59301
- stripPatterns: [],
59302
- suppressMonologue: false,
59303
- hasStructuredThinking: true
59304
- },
59305
- promptAdditions: [],
59306
- ui: {
59307
- badge: "API",
59308
- watchdogMs: 3e5,
59309
- armWatchdogOnSend: false
59310
- }
59311
- },
59312
- {
59313
- match: ["gemma", "redsand/"],
59314
- label: "Gemma 4",
59315
- params: {
59316
- temperature: 1,
59317
- top_p: .95,
59318
- top_k: 64,
59319
- max_tokens: 8192
59320
- },
59321
- streaming: {
59322
- deltaThrottleMs: 50,
59323
- flushOnFinal: true,
59324
- chunkPattern: "burst"
59325
- },
59326
- filters: {
59327
- stripPatterns: [
59328
- "<\\|channel>\\w*",
59329
- "<channel\\|>",
59330
- "<start_of_turn>(?:model|user)?",
59331
- "<end_of_turn>",
59332
- "<\\|(?:fim_prefix|fim_suffix|fim_middle)\\|>",
59333
- "^\\s*<bos>\\s*"
59334
- ],
59335
- suppressMonologue: true,
59336
- hasStructuredThinking: false
59337
- },
59338
- promptAdditions: [
59339
- "You are running as Gemma 4 via vLLM. Important behavioral rules:",
59340
- "- Never output raw control tokens, channel tags, or turn markers in your responses.",
59341
- "- Never display internal status checks, plans, or self-assessments. Your visible output should only be conversational responses and final results.",
59342
- "- When working on multi-step tasks, send a brief one-line status update every 30-60 seconds so the user knows you are active.",
59343
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
59344
- "- Do not use <|channel>thought or similar syntax. If you need to reason, do so silently."
59345
- ],
59346
- ui: {
59347
- badge: "CoreWeave",
59348
- watchdogMs: 6e5,
59349
- armWatchdogOnSend: true
59350
- }
59351
- }
59352
- ];
59353
-
59354
- //#endregion
59355
- //#region src/config/resolve-model-profile.ts
59356
- /** Default profile returned when no match is found. */
59357
- const FALLBACK_PROFILE = {
59358
- match: "*",
59359
- label: "Generic",
59360
- params: {
59361
- temperature: 1,
59362
- max_tokens: 4096
59363
- },
59364
- streaming: {
59365
- deltaThrottleMs: 150,
59366
- flushOnFinal: true,
59367
- chunkPattern: "burst"
59368
- },
59369
- filters: {
59370
- stripPatterns: [],
59371
- suppressMonologue: false,
59372
- hasStructuredThinking: false
59373
- },
59374
- promptAdditions: [],
59375
- ui: {
59376
- watchdogMs: 3e5,
59377
- armWatchdogOnSend: true
59438
+ if (isVllmOrGemmaProvider(provider, modelId, cfg)) {
59439
+ log$2.debug(`applying vLLM/Gemma compat wrapper for ${provider}/${modelId}`);
59440
+ agent.streamFn = createVllmCompatWrapper(agent.streamFn, merged);
59378
59441
  }
59379
- };
59380
- /**
59381
- * Resolve the active model profile for a given model ID.
59382
- *
59383
- * Resolution order:
59384
- * 1. User-defined profiles (from `models.profiles` in symi.json)
59385
- * 2. Built-in profiles ({@link BUILTIN_PROFILES})
59386
- * 3. Fallback "Generic" profile
59387
- *
59388
- * Matching is case-insensitive prefix/substring against the model ID.
59389
- */
59390
- function resolveModelProfile(modelId, userProfiles) {
59391
- const id = modelId.toLowerCase();
59392
- const allProfiles = [...userProfiles ?? [], ...BUILTIN_PROFILES];
59393
- for (const profile of allProfiles) {
59394
- const patterns = Array.isArray(profile.match) ? profile.match : [profile.match];
59395
- for (const pattern of patterns) if (id.startsWith(pattern.toLowerCase()) || id.includes(pattern.toLowerCase())) return profile;
59396
- }
59397
- return FALLBACK_PROFILE;
59442
+ agent.streamFn = createOpenAIResponsesStoreWrapper(agent.streamFn);
59398
59443
  }
59399
59444
 
59400
59445
  //#endregion
@@ -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-DLH72QgE.js";
16
+ import "./subagent-registry-Du9P0G2U.js";
17
17
  import "./sessions-CJXnZVjR.js";
18
18
  import "./tokens-Csntmwwn.js";
19
19
  import "./plugins-CwSlLxM8.js";
@@ -101,9 +101,9 @@ import { t as ensureSymiCliOnPath } from "./path-env-Bic_wXs9.js";
101
101
  import "./catalog-DLQFKucJ.js";
102
102
  import "./note-DDecZomM.js";
103
103
  import "./plugin-auto-enable-D6ENR3Xg.js";
104
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-B3_VvP9Z.js";
104
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-CuoX8mar.js";
105
105
  import { t as assertSupportedRuntime } from "./runtime-guard-D7waq_Ho.js";
106
- import { t as emitCliBanner } from "./banner-B3eic4uq.js";
106
+ import { t as emitCliBanner } from "./banner-BoLflN_R.js";
107
107
  import "./doctor-config-flow-CA3eiKhd.js";
108
108
  import { n as ensureConfigReady } from "./config-guard-CPHvOzsC.js";
109
109
  import process$1 from "node:process";
@@ -118,7 +118,7 @@ const routeHealth = {
118
118
  const verbose = getVerboseFlag(argv, { includeDebug: true });
119
119
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
120
120
  if (timeoutMs === null) return false;
121
- const { healthCommand } = await import("./health-BL_zFcJ8.js").then((n) => n.i);
121
+ const { healthCommand } = await import("./health-D9eQW7fJ.js").then((n) => n.i);
122
122
  await healthCommand({
123
123
  json,
124
124
  timeoutMs,
@@ -138,7 +138,7 @@ const routeStatus = {
138
138
  const verbose = getVerboseFlag(argv, { includeDebug: true });
139
139
  const timeoutMs = getPositiveIntFlagValue(argv, "--timeout");
140
140
  if (timeoutMs === null) return false;
141
- const { statusCommand } = await import("./status-B161_hoB.js").then((n) => n.t);
141
+ const { statusCommand } = await import("./status-BBpD_1pG.js").then((n) => n.t);
142
142
  await statusCommand({
143
143
  json,
144
144
  deep,
@@ -172,7 +172,7 @@ const routeAgentsList = {
172
172
  run: async (argv) => {
173
173
  const json = hasFlag(argv, "--json");
174
174
  const bindings = hasFlag(argv, "--bindings");
175
- const { agentsListCommand } = await import("./agents-B0pTMEwy.js").then((n) => n.t);
175
+ const { agentsListCommand } = await import("./agents-DzuttgJU.js").then((n) => n.t);
176
176
  await agentsListCommand({
177
177
  json,
178
178
  bindings
@@ -243,7 +243,7 @@ const routes = [
243
243
  const pathArg = getCommandPositionals(argv)[2];
244
244
  if (!pathArg) return false;
245
245
  const json = hasFlag(argv, "--json");
246
- const { runConfigGet } = await import("./config-cli-MLtPektI.js");
246
+ const { runConfigGet } = await import("./config-cli-DAbXVRUL.js");
247
247
  await runConfigGet({
248
248
  path: pathArg,
249
249
  json
@@ -256,7 +256,7 @@ const routes = [
256
256
  run: async (argv) => {
257
257
  const pathArg = getCommandPositionals(argv)[2];
258
258
  if (!pathArg) return false;
259
- const { runConfigUnset } = await import("./config-cli-MLtPektI.js");
259
+ const { runConfigUnset } = await import("./config-cli-DAbXVRUL.js");
260
260
  await runConfigUnset({ path: pathArg });
261
261
  return true;
262
262
  }
@@ -270,7 +270,7 @@ const routes = [
270
270
  const local = hasFlag(argv, "--local");
271
271
  const json = hasFlag(argv, "--json");
272
272
  const plain = hasFlag(argv, "--plain");
273
- const { modelsListCommand } = await import("./models-DSx-ohwA.js").then((n) => n.t);
273
+ const { modelsListCommand } = await import("./models-nO_t1uzp.js").then((n) => n.t);
274
274
  await modelsListCommand({
275
275
  all,
276
276
  local,
@@ -301,7 +301,7 @@ const routes = [
301
301
  const plain = hasFlag(argv, "--plain");
302
302
  const check = hasFlag(argv, "--check");
303
303
  const probe = hasFlag(argv, "--probe");
304
- const { modelsStatusCommand } = await import("./models-DSx-ohwA.js").then((n) => n.t);
304
+ const { modelsStatusCommand } = await import("./models-nO_t1uzp.js").then((n) => n.t);
305
305
  await modelsStatusCommand({
306
306
  json,
307
307
  plain,
@@ -379,7 +379,7 @@ async function runCli(argv = process$1.argv) {
379
379
  assertSupportedRuntime();
380
380
  if (await tryRouteCli(normalizedArgv)) return;
381
381
  enableConsoleCapture();
382
- const { buildProgram } = await import("./program-CH2ZAXFK.js");
382
+ const { buildProgram } = await import("./program-DkXOdfM2.js");
383
383
  const program = buildProgram();
384
384
  installUnhandledRejectionHandler();
385
385
  process$1.on("uncaughtException", (error) => {
@@ -411,10 +411,10 @@ async function runCli(argv = process$1.argv) {
411
411
  const { getProgramContext } = await import("./program-context-CqzR_m-7.js").then((n) => n.n);
412
412
  const ctx = getProgramContext(program);
413
413
  if (ctx) {
414
- const { registerCoreCliByName } = await import("./command-registry-BOI6nYdi.js").then((n) => n.t);
414
+ const { registerCoreCliByName } = await import("./command-registry-Ba2z3dYq.js").then((n) => n.t);
415
415
  await registerCoreCliByName(program, ctx, primary, parseArgv);
416
416
  }
417
- const { registerSubCliByName } = await import("./register.subclis-DbjFcioS.js").then((n) => n.a);
417
+ const { registerSubCliByName } = await import("./register.subclis-CofZE_pt.js").then((n) => n.a);
418
418
  await registerSubCliByName(program, primary);
419
419
  }
420
420
  const hasBuiltinPrimary = primary !== null && program.commands.some((command) => command.name() === primary);
@@ -423,7 +423,7 @@ async function runCli(argv = process$1.argv) {
423
423
  primary,
424
424
  hasBuiltinPrimary
425
425
  })) {
426
- const { registerPluginCliCommands } = await import("./cli-BRwovkQi.js");
426
+ const { registerPluginCliCommands } = await import("./cli-CEtg8kql.js");
427
427
  const { loadConfig } = await import("./config-DHBLS1Hl.js").then((n) => n.t);
428
428
  registerPluginCliCommands(program, loadConfig());
429
429
  }
@@ -4,7 +4,7 @@ import { t as normalizeChatType } from "./chat-type-C_KiWNAH.js";
4
4
  import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-S8-8dAhx.js";
5
5
  import { A as normalizeProviderId, L as normalizeGoogleModelId, i as resolveApiKeyForProvider, r as requireApiKey, y as resolveSymiAgentDir } from "./model-auth-CwOuTuXl.js";
6
6
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-eEaJddXj.js";
7
- import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-BGmVDkkw.js";
7
+ import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-rZ4x9VS9.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-CF48hUR9.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-DL3f_O53.js";
10
10
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-C7OCYACU.js";
@@ -4,7 +4,7 @@ import { G as resolveSymiAgentDir, T as resolveApiKeyForProvider, c as normalize
4
4
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
5
5
  import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-ByaQt43P.js";
6
6
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-BmV60pPT.js";
7
- import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-DcpMiprB.js";
7
+ import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-CHzdaNJ4.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-CSlZZ1Pw.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-BheTNyes.js";
10
10
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-CC8jiKDk.js";
@@ -1,7 +1,7 @@
1
1
  import { g as resolveStateDir, t as CONFIG_PATH } from "./paths-Cqn-zk3M.js";
2
2
  import { D as isPlainObject, U as getResolvedLoggerSettings, r as clamp, y as resolveUserPath } from "./utils-B-0b9bGM.js";
3
3
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels } from "./thinking-EAliFiVK.js";
4
- import { $n as OPENAI_TTS_MODELS, Bn as registerAgentRunContext, Bt as normalizeSendPolicy, C as loadSessionEntry, E as resolveSessionModelRef, Gn as resolveTtsApiKey, H as formatDoctorNonInteractiveHint, Hn as getTtsProvider, Jn as resolveTtsPrefsPath, Kn as resolveTtsAutoMode, Lt as resolveOutboundTarget, Mn as listSubagentRunsForRequester, Nt as resolveAgentDeliveryPlan, O as ensureOutboundSessionEntry, Pr as resolveAgentTimeoutMs, Pt as resolveAgentOutboundTarget, Qn as textToSpeech, R as scheduleGatewaySigusr1Restart, S as loadCombinedSessionStoreForGateway, Sr as isSystemEventContextChanged, T as resolveGatewaySessionStoreTarget, Tn as stopSubagentsForRequester, Un as isTtsEnabled, Ut as createOutboundSendDeps, Vn as resolveUserTimezone, Vt as resolveSendPolicy, Wn as isTtsProviderConfigured, X as normalizeCronJobPatch, Xn as setTtsEnabled, Y as normalizeCronJobCreate, Yn as resolveTtsProviderOrder, Zn as setTtsProvider, _t as loadSymiPlugins, b as listAgentsForGateway, br as parseVerboseOverride, c as clearSessionQueues, er as OPENAI_TTS_VOICES, f as waitForEmbeddedPiRunEnd, in as unbindThreadBindingsBySessionKey, jn as listDescendantRunsForRequester, jt as agentCommand, k as resolveOutboundSessionRoute, lt as applyBrowserProxyPaths, mn as createReplyDispatcher, n as BARE_SESSION_RESET_PROMPT, pn as dispatchInboundMessage, q as writeRestartSentinel, qn as resolveTtsConfig, u as abortEmbeddedPiRun, ut as persistBrowserProxyFiles, v as canonicalizeSpawnedByForAgent, vr as applyModelOverrideToSessionEntry, w as pruneLegacyStoreKeys, wn as isAbortTrigger, x as listSessionsFromStore, xn as formatZonedTimestamp, xr as enqueueSystemEvent, xt as loadProviderUsageSummary, yr as applyVerboseOverride, yt as normalizeGroupActivation, zn as onAgentEvent } from "./reply-Dlka9TPn.js";
4
+ import { $n as OPENAI_TTS_MODELS, Bn as registerAgentRunContext, Bt as normalizeSendPolicy, C as loadSessionEntry, E as resolveSessionModelRef, Gn as resolveTtsApiKey, H as formatDoctorNonInteractiveHint, Hn as getTtsProvider, Jn as resolveTtsPrefsPath, Kn as resolveTtsAutoMode, Lt as resolveOutboundTarget, Mn as listSubagentRunsForRequester, Nt as resolveAgentDeliveryPlan, O as ensureOutboundSessionEntry, Pr as resolveAgentTimeoutMs, Pt as resolveAgentOutboundTarget, Qn as textToSpeech, R as scheduleGatewaySigusr1Restart, S as loadCombinedSessionStoreForGateway, Sr as isSystemEventContextChanged, T as resolveGatewaySessionStoreTarget, Tn as stopSubagentsForRequester, Un as isTtsEnabled, Ut as createOutboundSendDeps, Vn as resolveUserTimezone, Vt as resolveSendPolicy, Wn as isTtsProviderConfigured, X as normalizeCronJobPatch, Xn as setTtsEnabled, Y as normalizeCronJobCreate, Yn as resolveTtsProviderOrder, Zn as setTtsProvider, _t as loadSymiPlugins, b as listAgentsForGateway, br as parseVerboseOverride, c as clearSessionQueues, er as OPENAI_TTS_VOICES, f as waitForEmbeddedPiRunEnd, in as unbindThreadBindingsBySessionKey, jn as listDescendantRunsForRequester, jt as agentCommand, k as resolveOutboundSessionRoute, lt as applyBrowserProxyPaths, mn as createReplyDispatcher, n as BARE_SESSION_RESET_PROMPT, pn as dispatchInboundMessage, q as writeRestartSentinel, qn as resolveTtsConfig, u as abortEmbeddedPiRun, ut as persistBrowserProxyFiles, v as canonicalizeSpawnedByForAgent, vr as applyModelOverrideToSessionEntry, w as pruneLegacyStoreKeys, wn as isAbortTrigger, x as listSessionsFromStore, xn as formatZonedTimestamp, xr as enqueueSystemEvent, xt as loadProviderUsageSummary, yr as applyVerboseOverride, yt as normalizeGroupActivation, zn as onAgentEvent } from "./reply-SBi_U7P7.js";
5
5
  import { S as parseAgentSessionKey, l as resolveAgentIdFromSessionKey, m as DEFAULT_ACCOUNT_ID, o as classifySessionKeyShape, s as normalizeAgentId, t as DEFAULT_AGENT_ID, x as isSubagentSessionKey } from "./session-key-DCt45XZa.js";
6
6
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
7
7
  import { C as createInternalHookEvent, T as triggerInternalHook, d as getActivePluginRegistry, r as DEFAULT_CHAT_CHANNEL, t as CHANNEL_IDS } from "./registry-Cja8eT7G.js";
@@ -39,14 +39,14 @@ import { t as WizardCancelledError } from "./prompts-Xu2Sveka.js";
39
39
  import { t as resolveChannelDefaultAccountId } from "./helpers-BcGbMZD1.js";
40
40
  import { t as buildChannelAccountSnapshot } from "./status-BrV-afZE.js";
41
41
  import { o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-CrITRV6w.js";
42
- import { n as getStatusSummary } from "./status-DqWKFOGN.js";
43
- import { s as setHeartbeatsEnabled } from "./health-B1LT2TG3.js";
42
+ import { n as getStatusSummary } from "./status-CwXg8OO1.js";
43
+ import { s as setHeartbeatsEnabled } from "./health-f056vLGT.js";
44
44
  import { m as normalizeUpdateChannel } from "./update-check-CtckACbb.js";
45
- import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-BKDV4tcx.js";
46
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-_b7ghdyb.js";
45
+ import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-EKnCwrqK.js";
46
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-2HlZJsR3.js";
47
47
  import { t as resolveSystemRunCommand } from "./system-run-command-ByVa3txU.js";
48
48
  import { t as installSkill } from "./skills-install-D67isO1L.js";
49
- import { t as runGatewayUpdate } from "./update-runner-CDG0-jLB.js";
49
+ import { t as runGatewayUpdate } from "./update-runner-BSQFv9b6.js";
50
50
  import * as fs$2 from "node:fs";
51
51
  import fs from "node:fs";
52
52
  import * as os$1 from "node:os";
@@ -6853,7 +6853,7 @@ const nodeHandlers = {
6853
6853
  const p = params;
6854
6854
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
6855
6855
  await respondUnavailableOnThrow(respond, async () => {
6856
- const { handleNodeEvent } = await import("./server-node-events-BaVEbs-L.js");
6856
+ const { handleNodeEvent } = await import("./server-node-events-Bhgt3xLw.js");
6857
6857
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
6858
6858
  await handleNodeEvent({
6859
6859
  deps: context.deps,
@@ -12,7 +12,7 @@ import { f as GATEWAY_CLIENT_CAPS, g as hasGatewayClientCap, i as isGatewayMessa
12
12
  import { c as writeJsonAtomic, o as createAsyncLock, s as readJsonFile } from "./pairing-token-Byh6drgn.js";
13
13
  import { s as pickPrimaryLanIPv4 } from "./net-DZ5Ayk-W.js";
14
14
  import { i as normalizeInputProvenance } from "./input-provenance-D0lNkCf6.js";
15
- import { $n as resolveTtsAutoMode, Cn as enqueueSystemEvent, Cr as onAgentEvent, Dt as normalizeCronJobPatch, E as agentCommand, Et as normalizeCronJobCreate, G as dispatchInboundMessage, Gn as stopSubagentsForRequester, Gt as persistBrowserProxyFiles, In as resolveAgentTimeoutMs, Jn as resolveUserTimezone, K as createReplyDispatcher, M as createOutboundSendDeps, O as resolveAgentDeliveryPlan, Qn as resolveTtsApiKey, Sn as parseVerboseOverride, Vn as formatZonedTimestamp, Wn as isAbortTrigger, Wt as applyBrowserProxyPaths, X as BARE_SESSION_RESET_PROMPT, Xn as isTtsEnabled, Yn as getTtsProvider, Zn as isTtsProviderConfigured, Zt as scheduleGatewaySigusr1Restart, a as listSubagentRunsForRequester, ar as textToSpeech, bn as applyModelOverrideToSessionEntry, c as clearSessionQueues, ct as resolveOutboundSessionRoute, dt as resolveOutboundTarget, en as unbindThreadBindingsBySessionKey, er as resolveTtsConfig, f as waitForEmbeddedPiRunEnd, hn as resolveSendPolicy, i as listDescendantRunsForRequester, ir as setTtsProvider, k as resolveAgentOutboundTarget, mn as normalizeSendPolicy, nr as resolveTtsProviderOrder, or as OPENAI_TTS_MODELS, rn as loadProviderUsageSummary, rr as setTtsEnabled, sr as OPENAI_TTS_VOICES, st as ensureOutboundSessionEntry, tn as normalizeGroupActivation, tr as resolveTtsPrefsPath, u as abortEmbeddedPiRun, wn as isSystemEventContextChanged, wr as registerAgentRunContext, wt as writeRestartSentinel, xn as applyVerboseOverride, y as loadSymiPlugins, yt as formatDoctorNonInteractiveHint } from "./subagent-registry-DLH72QgE.js";
15
+ import { $n as resolveTtsAutoMode, Cn as enqueueSystemEvent, Cr as onAgentEvent, Dt as normalizeCronJobPatch, E as agentCommand, Et as normalizeCronJobCreate, G as dispatchInboundMessage, Gn as stopSubagentsForRequester, Gt as persistBrowserProxyFiles, In as resolveAgentTimeoutMs, Jn as resolveUserTimezone, K as createReplyDispatcher, M as createOutboundSendDeps, O as resolveAgentDeliveryPlan, Qn as resolveTtsApiKey, Sn as parseVerboseOverride, Vn as formatZonedTimestamp, Wn as isAbortTrigger, Wt as applyBrowserProxyPaths, X as BARE_SESSION_RESET_PROMPT, Xn as isTtsEnabled, Yn as getTtsProvider, Zn as isTtsProviderConfigured, Zt as scheduleGatewaySigusr1Restart, a as listSubagentRunsForRequester, ar as textToSpeech, bn as applyModelOverrideToSessionEntry, c as clearSessionQueues, ct as resolveOutboundSessionRoute, dt as resolveOutboundTarget, en as unbindThreadBindingsBySessionKey, er as resolveTtsConfig, f as waitForEmbeddedPiRunEnd, hn as resolveSendPolicy, i as listDescendantRunsForRequester, ir as setTtsProvider, k as resolveAgentOutboundTarget, mn as normalizeSendPolicy, nr as resolveTtsProviderOrder, or as OPENAI_TTS_MODELS, rn as loadProviderUsageSummary, rr as setTtsEnabled, sr as OPENAI_TTS_VOICES, st as ensureOutboundSessionEntry, tn as normalizeGroupActivation, tr as resolveTtsPrefsPath, u as abortEmbeddedPiRun, wn as isSystemEventContextChanged, wr as registerAgentRunContext, wt as writeRestartSentinel, xn as applyVerboseOverride, y as loadSymiPlugins, yt as formatDoctorNonInteractiveHint } from "./subagent-registry-Du9P0G2U.js";
16
16
  import { F as resolveMainSessionKey, I as resolveMainSessionKeyFromConfig, J as normalizeSessionDeliveryFields, N as resolveAgentMainSessionKey, P as resolveExplicitAgentSessionKey, R as snapshotSessionOrigin, S as stripEnvelopeFromMessages, _ as capArrayByJsonBytes, d as updateSessionStore, g as archiveSessionTranscripts, h as archiveFileOnDisk, o as loadSessionStore, t as extractDeliveryInfo, v as readSessionMessages, x as resolveSessionTranscriptCandidates, y as readSessionPreviewItemsFromTranscript } from "./sessions-CJXnZVjR.js";
17
17
  import { n as listChannelPlugins, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-CwSlLxM8.js";
18
18
  import { n as createBrowserRouteDispatcher } from "./with-timeout-Di0nddLY.js";
@@ -37,14 +37,14 @@ import { t as WizardCancelledError } from "./prompts-m1IJwIAx.js";
37
37
  import { t as resolveChannelDefaultAccountId } from "./helpers-cLP5YLeQ.js";
38
38
  import { t as buildChannelAccountSnapshot } from "./status-BUedPCLb.js";
39
39
  import { o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-Byo5jCLN.js";
40
- import { r as getStatusSummary } from "./status-B161_hoB.js";
41
- import { c as setHeartbeatsEnabled } from "./health-BL_zFcJ8.js";
40
+ import { r as getStatusSummary } from "./status-BBpD_1pG.js";
41
+ import { c as setHeartbeatsEnabled } from "./health-D9eQW7fJ.js";
42
42
  import { m as normalizeUpdateChannel } from "./update-check-ZdimP1aU.js";
43
- import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-CtNHq-T0.js";
44
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-CdNbu8M5.js";
43
+ import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-C0wMP1XU.js";
44
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-CSucty2T.js";
45
45
  import { t as resolveSystemRunCommand } from "./system-run-command-ByVa3txU.js";
46
46
  import { t as installSkill } from "./skills-install-1ZdwGTnh.js";
47
- import { t as runGatewayUpdate } from "./update-runner-Ciq1c0YL.js";
47
+ import { t as runGatewayUpdate } from "./update-runner-8Ac4bJ1w.js";
48
48
  import { spawnSync } from "node:child_process";
49
49
  import * as os$1 from "node:os";
50
50
  import os from "node:os";
@@ -6851,7 +6851,7 @@ const nodeHandlers = {
6851
6851
  const p = params;
6852
6852
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
6853
6853
  await respondUnavailableOnThrow(respond, async () => {
6854
- const { handleNodeEvent } = await import("./server-node-events-CxdmKBmm.js");
6854
+ const { handleNodeEvent } = await import("./server-node-events-CX1plxJz.js");
6855
6855
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
6856
6856
  await handleNodeEvent({
6857
6857
  deps: context.deps,
@@ -1,7 +1,7 @@
1
1
  import "./paths-Cqn-zk3M.js";
2
2
  import "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import { C as loadSessionEntry, Lt as resolveOutboundTarget, T as resolveGatewaySessionStoreTarget, ft as requestHeartbeatNow, jt as agentCommand, w as pruneLegacyStoreKeys, xr as enqueueSystemEvent, zt as createOutboundSendDeps } from "./reply-Dlka9TPn.js";
4
+ import { C as loadSessionEntry, Lt as resolveOutboundTarget, T as resolveGatewaySessionStoreTarget, ft as requestHeartbeatNow, jt as agentCommand, w as pruneLegacyStoreKeys, xr as enqueueSystemEvent, zt as createOutboundSendDeps } from "./reply-SBi_U7P7.js";
5
5
  import { c as normalizeMainKey } from "./session-key-DCt45XZa.js";
6
6
  import "./registry-Cja8eT7G.js";
7
7
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
@@ -102,7 +102,7 @@ import "./pi-tools.policy-CIDBbw6x.js";
102
102
  import "./control-service-Bz7rxLWq.js";
103
103
  import "./stagger-BUClb97_.js";
104
104
  import "./channel-selection-DuWs0Aak.js";
105
- import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-BKDV4tcx.js";
105
+ import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-EKnCwrqK.js";
106
106
  import { randomUUID } from "node:crypto";
107
107
 
108
108
  //#region src/gateway/server-node-events.ts