@symerian/symi 2.3.4 → 2.4.0

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 (104) hide show
  1. package/dist/{agents-E_Ere0qU.js → agents-CI3xxYc_.js} +4 -4
  2. package/dist/{agents.config-Cv_wsBXL.js → agents.config-DCE3RGr9.js} +1 -1
  3. package/dist/{agents.config-DJTb7Jka.js → agents.config-DTUAM1AG.js} +1 -1
  4. package/dist/{auth-choice-D8ynWABO.js → auth-choice-DuQwRfJc.js} +1 -1
  5. package/dist/{auth-choice-B3D_jLQw.js → auth-choice-IiIysHGO.js} +1 -1
  6. package/dist/{banner-ChYzCy5p.js → banner-xhDZu_ZJ.js} +1 -1
  7. package/dist/build-info.json +3 -3
  8. package/dist/bundled/boot-md/handler.js +1 -1
  9. package/dist/bundled/session-memory/handler.js +1 -1
  10. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  11. package/dist/{channel-options-BYUiEgev.js → channel-options-D3gGVwBd.js} +1 -1
  12. package/dist/{channel-options-CMNzHg4p.js → channel-options-Dvxd7eJY.js} +1 -1
  13. package/dist/{channel-web-C-HLPbLL.js → channel-web-a5tX1YI3.js} +1 -1
  14. package/dist/{channels-cli-CcCmH-Tp.js → channels-cli-BLUkl5Li.js} +4 -4
  15. package/dist/{channels-cli-CyhXPEWq.js → channels-cli-C9wBYmDe.js} +4 -4
  16. package/dist/{cli-Gcuf3NTF.js → cli-CaEE46xi.js} +1 -1
  17. package/dist/{cli-Cp-NQ7yu.js → cli-Cw45F0yJ.js} +1 -1
  18. package/dist/{command-registry-Cvr_dlLY.js → command-registry-ea9SD1eA.js} +9 -9
  19. package/dist/{completion-cli-DaOHSXM3.js → completion-cli-CMJmUQbI.js} +1 -1
  20. package/dist/{completion-cli-DDlYn0ya.js → completion-cli-DVkiEAEA.js} +2 -2
  21. package/dist/{config-cli-CmUPAVUz.js → config-cli-B2d28_hb.js} +1 -1
  22. package/dist/{config-cli-BcuAsDOu.js → config-cli-VIg0PSyq.js} +1 -1
  23. package/dist/{configure-Ctwt1377.js → configure-C_TVBt76.js} +3 -3
  24. package/dist/{configure-OxYdT2hU.js → configure-D-3FiJbK.js} +3 -3
  25. package/dist/{doctor-completion-D7ShsgUp.js → doctor-completion-CJHJYIwQ.js} +1 -1
  26. package/dist/{doctor-completion-Dw78bQaQ.js → doctor-completion-DeRX6gkI.js} +1 -1
  27. package/dist/entry.js +1 -1
  28. package/dist/extensionAPI.js +1 -1
  29. package/dist/{gateway-cli-Bd7u0krH.js → gateway-cli-BDDHBfYP.js} +9 -9
  30. package/dist/{gateway-cli-D7nxPtEc.js → gateway-cli-DiDJ6Z2d.js} +9 -9
  31. package/dist/{glass-ui-ws-CzH0ikhI.js → glass-ui-ws-Bj1IuJXt.js} +7 -7
  32. package/dist/{glass-ui-ws-DBivjzVA.js → glass-ui-ws-rGIAkViC.js} +7 -7
  33. package/dist/{health-BSOMI4B6.js → health-Bst5HnLF.js} +1 -1
  34. package/dist/{health-rR61mwm3.js → health-CypF_2ZD.js} +1 -1
  35. package/dist/{hooks-cli-BbiA-gGi.js → hooks-cli-CDMcqTy4.js} +2 -2
  36. package/dist/{hooks-cli-dS4fMEKE.js → hooks-cli-CfsqqxPX.js} +2 -2
  37. package/dist/index.js +6 -6
  38. package/dist/llm-slug-generator.js +1 -1
  39. package/dist/{models-DqE1s0YL.js → models-ZEOGlFx7.js} +2 -2
  40. package/dist/{models-cli-6v9jkDxp.js → models-cli-BM1QyeXr.js} +3 -3
  41. package/dist/{models-cli-BWC7jYp4.js → models-cli-BwOQhZ_c.js} +2 -2
  42. package/dist/{onboard-Bxoibs4p.js → onboard-CU-pntZD.js} +2 -2
  43. package/dist/{onboard-BUEYf2m9.js → onboard-DQ34giB5.js} +2 -2
  44. package/dist/{onboard-channels-af6Cu6fT.js → onboard-channels-BOBxxhHX.js} +1 -1
  45. package/dist/{onboard-channels-C3UYzZNC.js → onboard-channels-g5cvwJpx.js} +1 -1
  46. package/dist/{onboarding-DW-7o6Ln.js → onboarding-CXWUjdM5.js} +3 -3
  47. package/dist/{onboarding-CDdMZbov.js → onboarding-DWs6tHZ9.js} +3 -3
  48. package/dist/{onboarding.finalize-29jsMLO2.js → onboarding.finalize-CAYf88mf.js} +6 -6
  49. package/dist/{onboarding.finalize-BI70KOeI.js → onboarding.finalize-vupGASMK.js} +5 -5
  50. package/dist/{pi-embedded-PkSwAmVq.js → pi-embedded-CJsSOG2j.js} +103 -168
  51. package/dist/{pi-embedded-JXvD5-F-.js → pi-embedded-DwbQz0MC.js} +103 -168
  52. package/dist/{plugin-registry-B7AdPXfF.js → plugin-registry-BDpdOTei.js} +1 -1
  53. package/dist/{plugin-registry-Reem6P3K.js → plugin-registry-CZeHSx_c.js} +1 -1
  54. package/dist/plugin-sdk/agents/model-aware-stream.d.ts +41 -0
  55. package/dist/plugin-sdk/agents/pi-embedded-runner/extra-params.d.ts +13 -0
  56. package/dist/plugin-sdk/{channel-web-CM7A3Y7G.js → channel-web-uUypcT9Q.js} +1 -1
  57. package/dist/plugin-sdk/index.js +2 -2
  58. package/dist/plugin-sdk/{reply-CDloTGFF.js → reply-DTKTuCrn.js} +103 -168
  59. package/dist/plugin-sdk/{web-CWNoMlnF.js → web-Dh6Youzv.js} +2 -2
  60. package/dist/{plugins-cli-V8mTTTnD.js → plugins-cli-CCQ3skeQ.js} +2 -2
  61. package/dist/{plugins-cli-B-6wVg3A.js → plugins-cli-D_RzeRoE.js} +2 -2
  62. package/dist/{program-DBtlRiFS.js → program-Cl9i8ubQ.js} +7 -7
  63. package/dist/{program-context-BHPNVgg2.js → program-context-BbmYGW-V.js} +17 -17
  64. package/dist/{prompt-select-styled-Bh-zAqW1.js → prompt-select-styled-BN0T6GxF.js} +4 -4
  65. package/dist/{prompt-select-styled-Cup1c9RJ.js → prompt-select-styled-BfuyvChh.js} +4 -4
  66. package/dist/{provider-auth-helpers-CiuLdUK3.js → provider-auth-helpers-CkmLFHXL.js} +1 -1
  67. package/dist/{provider-auth-helpers-BNmU48Ez.js → provider-auth-helpers-CuT5EHza.js} +1 -1
  68. package/dist/{push-apns-8VJkVSdh.js → push-apns-CFkFVwEz.js} +1 -1
  69. package/dist/{push-apns-9zUNNHgy.js → push-apns-DeJt9kAO.js} +1 -1
  70. package/dist/{register.agent-BtNmleKV.js → register.agent-BQm4YmZp.js} +6 -6
  71. package/dist/{register.agent-DnglG42G.js → register.agent-BygseJ7t.js} +5 -5
  72. package/dist/{register.configure-DfQOfV1W.js → register.configure-C2fhjZze.js} +6 -6
  73. package/dist/{register.configure-CLW9tdE4.js → register.configure-Cj95vB2U.js} +6 -6
  74. package/dist/{register.maintenance-BQfMsgo7.js → register.maintenance-CClfXq5e.js} +8 -8
  75. package/dist/{register.maintenance-jFYcRLEN.js → register.maintenance-K1x3E7OS.js} +7 -7
  76. package/dist/{register.message-DUsBvFSF.js → register.message-BSr-kUvJ.js} +2 -2
  77. package/dist/{register.message-BhoZYcqM.js → register.message-CSRzBl-c.js} +2 -2
  78. package/dist/{register.onboard-BBwhoeoE.js → register.onboard-Bd6wPydW.js} +4 -4
  79. package/dist/{register.onboard-DQOkpYBY.js → register.onboard-TsU21RR7.js} +4 -4
  80. package/dist/{register.setup-Ca6khTSz.js → register.setup-C9gu0W5l.js} +4 -4
  81. package/dist/{register.setup-6jlL3L1h.js → register.setup-DK-zsne2.js} +4 -4
  82. package/dist/{register.status-health-sessions-DQDXZYI3.js → register.status-health-sessions-DN5Ui3V0.js} +3 -3
  83. package/dist/{register.status-health-sessions-DsYNMl06.js → register.status-health-sessions-rZsuoqtr.js} +3 -3
  84. package/dist/{register.subclis-DJf3ihsW.js → register.subclis-DnzHFtLz.js} +9 -9
  85. package/dist/{reply-DSjeqLEz.js → reply-Ca3slrA3.js} +103 -168
  86. package/dist/{run-main-B2coomPj.js → run-main-DlHh5iOO.js} +14 -14
  87. package/dist/{server-methods-QNBQbsvr.js → server-methods-BYOkyf-q.js} +7 -7
  88. package/dist/{server-methods-DHo5e8Gj.js → server-methods-b_Qod4tt.js} +7 -7
  89. package/dist/{server-node-events-D_S0NRCQ.js → server-node-events-60nWpTh1.js} +2 -2
  90. package/dist/{server-node-events-CJOo8WcL.js → server-node-events-oU4Amei7.js} +2 -2
  91. package/dist/{status-B8yaGk2o.js → status-BXW5l4sd.js} +2 -2
  92. package/dist/{status-4DaGE8j5.js → status-BxbbINLV.js} +2 -2
  93. package/dist/{status-D_J6qcC1.js → status-D3-lP2_9.js} +1 -1
  94. package/dist/{status-kfEtYX22.js → status-kdz9P3tw.js} +1 -1
  95. package/dist/{subagent-registry-CyW0EDWw.js → subagent-registry-CbTbJKLs.js} +103 -168
  96. package/dist/{update-cli-DJupxo-f.js → update-cli-B5TI650v.js} +7 -7
  97. package/dist/{update-cli-C-ZGqknl.js → update-cli-Cy0gdWRf.js} +8 -8
  98. package/dist/{update-runner-BF5UULe-.js → update-runner-B0NdgPvD.js} +1 -1
  99. package/dist/{update-runner-AiIhp7fw.js → update-runner-Bacq0oLK.js} +1 -1
  100. package/dist/{web-6026eRzJ.js → web-D-oCzJTU.js} +1 -1
  101. package/dist/{web-CryqKXT4.js → web-DWNtg4iV.js} +1 -1
  102. package/dist/{web-HeObJp6A.js → web-DmED3zDP.js} +2 -2
  103. package/dist/{web-6vYYN17n.js → web-QVwKg99Q.js} +1 -1
  104. 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-HeObJp6A.js");
22377
+ const { sendMessageWhatsApp } = await import("./web-DmED3zDP.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-HeObJp6A.js");
40940
+ webChannelPromise ??= import("./web-DmED3zDP.js");
40941
40941
  return webChannelPromise;
40942
40942
  }
40943
40943
  function loadWhatsAppActions() {
@@ -59279,10 +59279,6 @@ function resolveModelProfile(modelId, userProfiles) {
59279
59279
 
59280
59280
  //#endregion
59281
59281
  //#region src/agents/pi-embedded-runner/extra-params.ts
59282
- const OPENROUTER_APP_HEADERS = {
59283
- "HTTP-Referer": "https://symi.ai",
59284
- "X-Title": "Symi"
59285
- };
59286
59282
  const ANTHROPIC_CONTEXT_1M_BETA = "context-1m-2025-08-07";
59287
59283
  const ANTHROPIC_1M_MODEL_PREFIXES = ["claude-opus-4", "claude-sonnet-4"];
59288
59284
  const OPENAI_RESPONSES_APIS = new Set(["openai-responses"]);
@@ -59300,70 +59296,6 @@ function resolveExtraParams(params) {
59300
59296
  const profile = resolveModelProfile(modelKey, params.cfg?.models?.profiles);
59301
59297
  if (profile.params && Object.keys(profile.params).length > 0) return { ...profile.params };
59302
59298
  }
59303
- /**
59304
- * Resolve cacheRetention from extraParams, supporting both new `cacheRetention`
59305
- * and legacy `cacheControlTtl` values for backwards compatibility.
59306
- *
59307
- * Mapping: "5m" → "short", "1h" → "long"
59308
- *
59309
- * Only applies to Anthropic provider (OpenRouter uses openai-completions API
59310
- * with hardcoded cache_control, not the cacheRetention stream option).
59311
- *
59312
- * Defaults to "short" for Anthropic provider when not explicitly configured.
59313
- */
59314
- function resolveCacheRetention(extraParams, provider) {
59315
- if (provider !== "anthropic") return;
59316
- const newVal = extraParams?.cacheRetention;
59317
- if (newVal === "none" || newVal === "short" || newVal === "long") return newVal;
59318
- const legacy = extraParams?.cacheControlTtl;
59319
- if (legacy === "5m") return "short";
59320
- if (legacy === "1h") return "long";
59321
- return "short";
59322
- }
59323
- function createStreamFnWithExtraParams(baseStreamFn, extraParams, provider) {
59324
- if (!extraParams || Object.keys(extraParams).length === 0) return;
59325
- const streamParams = {};
59326
- if (typeof extraParams.temperature === "number") streamParams.temperature = extraParams.temperature;
59327
- if (typeof extraParams.maxTokens === "number") streamParams.maxTokens = extraParams.maxTokens;
59328
- if (typeof extraParams.top_p === "number") streamParams.top_p = extraParams.top_p;
59329
- if (typeof extraParams.top_k === "number") streamParams.top_k = extraParams.top_k;
59330
- if (typeof extraParams.repeat_penalty === "number") streamParams.repeat_penalty = extraParams.repeat_penalty;
59331
- if (Array.isArray(extraParams.stop) && extraParams.stop.length > 0) streamParams.stop = extraParams.stop;
59332
- if (extraParams.chat_template_kwargs && typeof extraParams.chat_template_kwargs === "object") streamParams.chat_template_kwargs = extraParams.chat_template_kwargs;
59333
- const cacheRetention = resolveCacheRetention(extraParams, provider);
59334
- if (cacheRetention) streamParams.cacheRetention = cacheRetention;
59335
- if (Object.keys(streamParams).length === 0) return;
59336
- log$2.debug(`creating streamFn wrapper with params: ${JSON.stringify(streamParams)}`);
59337
- const sp = streamParams;
59338
- const payloadOverrides = {};
59339
- if (Array.isArray(sp.stop) && sp.stop.length > 0) payloadOverrides.stop = sp.stop;
59340
- if (typeof sp.top_p === "number") payloadOverrides.top_p = sp.top_p;
59341
- if (typeof sp.top_k === "number") payloadOverrides.top_k = sp.top_k;
59342
- if (typeof sp.repeat_penalty === "number") payloadOverrides.repeat_penalty = sp.repeat_penalty;
59343
- const hasPayloadOverrides = Object.keys(payloadOverrides).length > 0;
59344
- const underlying = baseStreamFn ?? streamSimple;
59345
- const wrappedStreamFn = (model, context, options) => {
59346
- if (hasPayloadOverrides) {
59347
- const originalOnPayload = options?.onPayload;
59348
- return underlying(model, context, {
59349
- ...streamParams,
59350
- ...options,
59351
- onPayload: (payload) => {
59352
- if (payload && typeof payload === "object") {
59353
- const p = payload;
59354
- for (const [key, value] of Object.entries(payloadOverrides)) if (p[key] === void 0) p[key] = value;
59355
- }
59356
- originalOnPayload?.(payload);
59357
- }
59358
- });
59359
- }
59360
- return underlying(model, context, {
59361
- ...streamParams,
59362
- ...options
59363
- });
59364
- };
59365
- return wrappedStreamFn;
59366
- }
59367
59299
  function isDirectOpenAIBaseUrl(baseUrl) {
59368
59300
  if (typeof baseUrl !== "string" || !baseUrl.trim()) return true;
59369
59301
  try {
@@ -59444,20 +59376,6 @@ function createAnthropicBetaHeadersWrapper(baseStreamFn, betas) {
59444
59376
  };
59445
59377
  }
59446
59378
  /**
59447
- * Create a streamFn wrapper that adds OpenRouter app attribution headers.
59448
- * These headers allow Symi to appear on OpenRouter's leaderboard.
59449
- */
59450
- function createOpenRouterHeadersWrapper(baseStreamFn) {
59451
- const underlying = baseStreamFn ?? streamSimple;
59452
- return (model, context, options) => underlying(model, context, {
59453
- ...options,
59454
- headers: {
59455
- ...OPENROUTER_APP_HEADERS,
59456
- ...options?.headers
59457
- }
59458
- });
59459
- }
59460
- /**
59461
59379
  * Create a streamFn wrapper that injects tool_stream=true for Z.AI providers.
59462
59380
  *
59463
59381
  * Z.AI's API supports the `tool_stream` parameter to enable real-time streaming
@@ -59480,82 +59398,6 @@ function createZaiToolStreamWrapper(baseStreamFn, enabled) {
59480
59398
  });
59481
59399
  };
59482
59400
  }
59483
- const GEMMA_STOP_SEQUENCES = ["<end_of_turn>", "<eos>"];
59484
- const VLLM_GEMMA_HINTS = ["gemma", "redsand"];
59485
- function isVllmOrGemmaProvider(provider, modelId, cfg) {
59486
- const lower = `${provider}/${modelId}`.toLowerCase();
59487
- if (VLLM_GEMMA_HINTS.some((h) => lower.includes(h))) return true;
59488
- const baseUrl = ((cfg?.models?.providers?.[provider])?.baseUrl ?? "").toLowerCase();
59489
- return baseUrl.includes("coreweave") || baseUrl.includes("vllm");
59490
- }
59491
- /**
59492
- * Wrap the stream function to fix vLLM/Gemma compat issues via onPayload:
59493
- * 1. Replace `max_completion_tokens` with `max_tokens` (vLLM ignores the former)
59494
- * 2. Inject Gemma stop sequences if none are set
59495
- * 3. Remove unsupported fields (store, stream_options.include_usage on older vLLM)
59496
- */
59497
- function createVllmCompatWrapper(baseStreamFn, extraParams) {
59498
- const underlying = baseStreamFn ?? streamSimple;
59499
- const configuredStop = Array.isArray(extraParams.stop) ? extraParams.stop : GEMMA_STOP_SEQUENCES;
59500
- return (model, context, options) => {
59501
- const originalOnPayload = options?.onPayload;
59502
- return underlying(model, context, {
59503
- ...options,
59504
- onPayload: (payload) => {
59505
- if (payload && typeof payload === "object") {
59506
- const p = payload;
59507
- if (p.max_completion_tokens && !p.max_tokens) {
59508
- p.max_tokens = p.max_completion_tokens;
59509
- delete p.max_completion_tokens;
59510
- }
59511
- if (!p.stop && configuredStop.length > 0) p.stop = configuredStop;
59512
- delete p.store;
59513
- }
59514
- originalOnPayload?.(payload);
59515
- }
59516
- });
59517
- };
59518
- }
59519
- /**
59520
- * Apply extra params (like temperature) to an agent's streamFn.
59521
- * Also adds OpenRouter app attribution headers when using the OpenRouter provider.
59522
- *
59523
- * @internal Exported for testing
59524
- */
59525
- function applyExtraParamsToAgent(agent, cfg, provider, modelId, extraParamsOverride) {
59526
- const extraParams = resolveExtraParams({
59527
- cfg,
59528
- provider,
59529
- modelId
59530
- });
59531
- const override = extraParamsOverride && Object.keys(extraParamsOverride).length > 0 ? Object.fromEntries(Object.entries(extraParamsOverride).filter(([, value]) => value !== void 0)) : void 0;
59532
- const merged = Object.assign({}, extraParams, override);
59533
- const wrappedStreamFn = createStreamFnWithExtraParams(agent.streamFn, merged, provider);
59534
- if (wrappedStreamFn) {
59535
- log$2.debug(`applying extraParams to agent streamFn for ${provider}/${modelId}`);
59536
- agent.streamFn = wrappedStreamFn;
59537
- }
59538
- const anthropicBetas = resolveAnthropicBetas(merged, provider, modelId);
59539
- if (anthropicBetas?.length) {
59540
- log$2.debug(`applying Anthropic beta header for ${provider}/${modelId}: ${anthropicBetas.join(",")}`);
59541
- agent.streamFn = createAnthropicBetaHeadersWrapper(agent.streamFn, anthropicBetas);
59542
- }
59543
- if (provider === "openrouter") {
59544
- log$2.debug(`applying OpenRouter app attribution headers for ${provider}/${modelId}`);
59545
- agent.streamFn = createOpenRouterHeadersWrapper(agent.streamFn);
59546
- }
59547
- if (provider === "zai" || provider === "z-ai") {
59548
- if (merged?.tool_stream !== false) {
59549
- log$2.debug(`enabling Z.AI tool_stream for ${provider}/${modelId}`);
59550
- agent.streamFn = createZaiToolStreamWrapper(agent.streamFn, true);
59551
- }
59552
- }
59553
- if (isVllmOrGemmaProvider(provider, modelId, cfg)) {
59554
- log$2.debug(`applying vLLM/Gemma compat wrapper for ${provider}/${modelId}`);
59555
- agent.streamFn = createVllmCompatWrapper(agent.streamFn, merged);
59556
- }
59557
- agent.streamFn = createOpenAIResponsesStoreWrapper(agent.streamFn);
59558
- }
59559
59401
 
59560
59402
  //#endregion
59561
59403
  //#region src/utils/safe-json.ts
@@ -59832,6 +59674,74 @@ function createCacheTrace(params) {
59832
59674
  };
59833
59675
  }
59834
59676
 
59677
+ //#endregion
59678
+ //#region src/agents/model-aware-stream.ts
59679
+ /**
59680
+ * Create a single stream function wrapper that handles all provider-specific
59681
+ * param injection via one onPayload hook.
59682
+ *
59683
+ * Replaces: createStreamFnWithExtraParams, createVllmCompatWrapper,
59684
+ * createOpenRouterHeadersWrapper.
59685
+ */
59686
+ function createModelAwareStreamFn(opts) {
59687
+ const underlying = opts.baseStreamFn ?? streamSimple;
59688
+ const mergedParams = {
59689
+ ...opts.profile.params,
59690
+ ...opts.configExtraParams,
59691
+ ...opts.streamParamsOverride
59692
+ };
59693
+ const nativeOpts = {};
59694
+ if (typeof mergedParams.temperature === "number") nativeOpts.temperature = mergedParams.temperature;
59695
+ if (typeof mergedParams.max_tokens === "number") nativeOpts.maxTokens = mergedParams.max_tokens;
59696
+ else if (typeof mergedParams.maxTokens === "number") nativeOpts.maxTokens = mergedParams.maxTokens;
59697
+ const injections = {};
59698
+ if (Array.isArray(mergedParams.stop) && mergedParams.stop.length > 0) injections.stop = mergedParams.stop;
59699
+ if (typeof mergedParams.top_p === "number") injections.top_p = mergedParams.top_p;
59700
+ if (typeof mergedParams.top_k === "number") injections.top_k = mergedParams.top_k;
59701
+ if (typeof mergedParams.repeat_penalty === "number") injections.repeat_penalty = mergedParams.repeat_penalty;
59702
+ const isVllm = isVllmProvider(opts.provider, opts.modelId, opts.config);
59703
+ const isOpenRouter = opts.provider === "openrouter";
59704
+ const extraHeaders = {};
59705
+ if (isOpenRouter) {
59706
+ extraHeaders["HTTP-Referer"] = "https://symi.ai";
59707
+ extraHeaders["X-Title"] = "Symi";
59708
+ }
59709
+ const hasExtraHeaders = Object.keys(extraHeaders).length > 0;
59710
+ const onPayloadHook = (payload, callerOnPayload) => {
59711
+ if (payload && typeof payload === "object") {
59712
+ const p = payload;
59713
+ for (const [key, val] of Object.entries(injections)) if (p[key] === void 0) p[key] = val;
59714
+ if (isVllm) {
59715
+ if (p.max_completion_tokens && !p.max_tokens) {
59716
+ p.max_tokens = p.max_completion_tokens;
59717
+ delete p.max_completion_tokens;
59718
+ }
59719
+ delete p.store;
59720
+ }
59721
+ }
59722
+ callerOnPayload?.(payload);
59723
+ };
59724
+ return (model, context, options) => {
59725
+ const callerOnPayload = options?.onPayload;
59726
+ return underlying(model, context, {
59727
+ ...nativeOpts,
59728
+ ...options,
59729
+ onPayload: (payload) => onPayloadHook(payload, callerOnPayload),
59730
+ ...hasExtraHeaders ? { headers: {
59731
+ ...extraHeaders,
59732
+ ...options?.headers
59733
+ } } : {}
59734
+ });
59735
+ };
59736
+ }
59737
+ /** Detect vLLM/Gemma providers by model hints or baseUrl patterns. */
59738
+ function isVllmProvider(provider, modelId, config) {
59739
+ const lower = `${provider}/${modelId}`.toLowerCase();
59740
+ if (["gemma", "redsand"].some((h) => lower.includes(h))) return true;
59741
+ const baseUrl = ((config?.models?.providers?.[provider])?.baseUrl ?? "").toLowerCase();
59742
+ return baseUrl.includes("coreweave") || baseUrl.includes("vllm");
59743
+ }
59744
+
59835
59745
  //#endregion
59836
59746
  //#region src/auto-reply/reply/streaming-directives.ts
59837
59747
  const splitTrailingDirective = (text) => {
@@ -62882,14 +62792,39 @@ async function runEmbeddedAttempt(params) {
62882
62792
  modelApi: params.model.api,
62883
62793
  workspaceDir: params.workspaceDir
62884
62794
  });
62885
- if (params.model.api === "ollama") {
62886
- const providerConfig = params.config?.models?.providers?.[params.model.provider];
62887
- const modelBaseUrl = typeof params.model.baseUrl === "string" ? params.model.baseUrl.trim() : "";
62888
- const providerBaseUrl = typeof providerConfig?.baseUrl === "string" ? providerConfig.baseUrl.trim() : "";
62889
- const ollamaBaseUrl = modelBaseUrl || providerBaseUrl || OLLAMA_NATIVE_BASE_URL;
62890
- activeSession.agent.streamFn = createOllamaStreamFn(ollamaBaseUrl);
62891
- } else activeSession.agent.streamFn = streamSimple;
62892
- applyExtraParamsToAgent(activeSession.agent, params.config, params.provider, params.modelId, params.streamParams);
62795
+ {
62796
+ let baseStreamFn = streamSimple;
62797
+ if (params.model.api === "ollama") {
62798
+ const providerConfig = params.config?.models?.providers?.[params.model.provider];
62799
+ const modelBaseUrl = typeof params.model.baseUrl === "string" ? params.model.baseUrl.trim() : "";
62800
+ const providerBaseUrl = typeof providerConfig?.baseUrl === "string" ? providerConfig.baseUrl.trim() : "";
62801
+ baseStreamFn = createOllamaStreamFn(modelBaseUrl || providerBaseUrl || OLLAMA_NATIVE_BASE_URL);
62802
+ }
62803
+ const configExtraParams = resolveExtraParams({
62804
+ cfg: params.config,
62805
+ provider: params.provider,
62806
+ modelId: params.modelId
62807
+ });
62808
+ activeSession.agent.streamFn = createModelAwareStreamFn({
62809
+ baseStreamFn,
62810
+ profile: modelProfile,
62811
+ provider: params.provider,
62812
+ modelId: params.modelId,
62813
+ config: params.config,
62814
+ configExtraParams,
62815
+ streamParamsOverride: params.streamParams
62816
+ });
62817
+ const merged = {
62818
+ ...configExtraParams,
62819
+ ...params.streamParams
62820
+ };
62821
+ const anthropicBetas = resolveAnthropicBetas(merged, params.provider, params.modelId);
62822
+ if (anthropicBetas?.length) activeSession.agent.streamFn = createAnthropicBetaHeadersWrapper(activeSession.agent.streamFn, anthropicBetas);
62823
+ if (params.provider === "zai" || params.provider === "z-ai") {
62824
+ if (merged?.tool_stream !== false) activeSession.agent.streamFn = createZaiToolStreamWrapper(activeSession.agent.streamFn, true);
62825
+ }
62826
+ activeSession.agent.streamFn = createOpenAIResponsesStoreWrapper(activeSession.agent.streamFn);
62827
+ }
62893
62828
  if (cacheTrace) {
62894
62829
  cacheTrace.recordStage("session:loaded", {
62895
62830
  messages: activeSession.messages,
@@ -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-CbTbJKLs.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-B7AdPXfF.js";
104
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-BDpdOTei.js";
105
105
  import { t as assertSupportedRuntime } from "./runtime-guard-D7waq_Ho.js";
106
- import { t as emitCliBanner } from "./banner-ChYzCy5p.js";
106
+ import { t as emitCliBanner } from "./banner-xhDZu_ZJ.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-BSOMI4B6.js").then((n) => n.i);
121
+ const { healthCommand } = await import("./health-Bst5HnLF.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-4DaGE8j5.js").then((n) => n.t);
141
+ const { statusCommand } = await import("./status-BxbbINLV.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-E_Ere0qU.js").then((n) => n.t);
175
+ const { agentsListCommand } = await import("./agents-CI3xxYc_.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-BcuAsDOu.js");
246
+ const { runConfigGet } = await import("./config-cli-VIg0PSyq.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-BcuAsDOu.js");
259
+ const { runConfigUnset } = await import("./config-cli-VIg0PSyq.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-DqE1s0YL.js").then((n) => n.t);
273
+ const { modelsListCommand } = await import("./models-ZEOGlFx7.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-DqE1s0YL.js").then((n) => n.t);
304
+ const { modelsStatusCommand } = await import("./models-ZEOGlFx7.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-DBtlRiFS.js");
382
+ const { buildProgram } = await import("./program-Cl9i8ubQ.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-Cvr_dlLY.js").then((n) => n.t);
414
+ const { registerCoreCliByName } = await import("./command-registry-ea9SD1eA.js").then((n) => n.t);
415
415
  await registerCoreCliByName(program, ctx, primary, parseArgv);
416
416
  }
417
- const { registerSubCliByName } = await import("./register.subclis-DJf3ihsW.js").then((n) => n.a);
417
+ const { registerSubCliByName } = await import("./register.subclis-DnzHFtLz.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-Gcuf3NTF.js");
426
+ const { registerPluginCliCommands } = await import("./cli-CaEE46xi.js");
427
427
  const { loadConfig } = await import("./config-DHBLS1Hl.js").then((n) => n.t);
428
428
  registerPluginCliCommands(program, loadConfig());
429
429
  }
@@ -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 textToSpeech, Bn as onAgentEvent, C as loadSessionEntry, Cr as isSystemEventContextChanged, E as resolveSessionModelRef, En as stopSubagentsForRequester, Fr as resolveAgentTimeoutMs, Ft as resolveAgentOutboundTarget, Gn as isTtsProviderConfigured, H as formatDoctorNonInteractiveHint, Hn as resolveUserTimezone, Ht as resolveSendPolicy, Jn as resolveTtsConfig, Kn as resolveTtsApiKey, Mn as listDescendantRunsForRequester, Mt as agentCommand, Nn as listSubagentRunsForRequester, O as ensureOutboundSessionEntry, Pt as resolveAgentDeliveryPlan, Qn as setTtsProvider, R as scheduleGatewaySigusr1Restart, Rt as resolveOutboundTarget, S as loadCombinedSessionStoreForGateway, Sn as formatZonedTimestamp, Sr as enqueueSystemEvent, St as loadProviderUsageSummary, T as resolveGatewaySessionStoreTarget, Tn as isAbortTrigger, Un as getTtsProvider, Vn as registerAgentRunContext, Vt as normalizeSendPolicy, Wn as isTtsEnabled, Wt as createOutboundSendDeps, X as normalizeCronJobPatch, Xn as resolveTtsProviderOrder, Y as normalizeCronJobCreate, Yn as resolveTtsPrefsPath, Zn as setTtsEnabled, an as unbindThreadBindingsBySessionKey, b as listAgentsForGateway, br as applyVerboseOverride, bt as normalizeGroupActivation, c as clearSessionQueues, er as OPENAI_TTS_MODELS, f as waitForEmbeddedPiRunEnd, hn as createReplyDispatcher, k as resolveOutboundSessionRoute, lt as applyBrowserProxyPaths, mn as dispatchInboundMessage, n as BARE_SESSION_RESET_PROMPT, q as writeRestartSentinel, qn as resolveTtsAutoMode, tr as OPENAI_TTS_VOICES, u as abortEmbeddedPiRun, ut as persistBrowserProxyFiles, v as canonicalizeSpawnedByForAgent, vt as loadSymiPlugins, w as pruneLegacyStoreKeys, x as listSessionsFromStore, xr as parseVerboseOverride, yr as applyModelOverrideToSessionEntry } from "./reply-DSjeqLEz.js";
4
+ import { $n as textToSpeech, Bn as onAgentEvent, C as loadSessionEntry, Cr as isSystemEventContextChanged, E as resolveSessionModelRef, En as stopSubagentsForRequester, Fr as resolveAgentTimeoutMs, Ft as resolveAgentOutboundTarget, Gn as isTtsProviderConfigured, H as formatDoctorNonInteractiveHint, Hn as resolveUserTimezone, Ht as resolveSendPolicy, Jn as resolveTtsConfig, Kn as resolveTtsApiKey, Mn as listDescendantRunsForRequester, Mt as agentCommand, Nn as listSubagentRunsForRequester, O as ensureOutboundSessionEntry, Pt as resolveAgentDeliveryPlan, Qn as setTtsProvider, R as scheduleGatewaySigusr1Restart, Rt as resolveOutboundTarget, S as loadCombinedSessionStoreForGateway, Sn as formatZonedTimestamp, Sr as enqueueSystemEvent, St as loadProviderUsageSummary, T as resolveGatewaySessionStoreTarget, Tn as isAbortTrigger, Un as getTtsProvider, Vn as registerAgentRunContext, Vt as normalizeSendPolicy, Wn as isTtsEnabled, Wt as createOutboundSendDeps, X as normalizeCronJobPatch, Xn as resolveTtsProviderOrder, Y as normalizeCronJobCreate, Yn as resolveTtsPrefsPath, Zn as setTtsEnabled, an as unbindThreadBindingsBySessionKey, b as listAgentsForGateway, br as applyVerboseOverride, bt as normalizeGroupActivation, c as clearSessionQueues, er as OPENAI_TTS_MODELS, f as waitForEmbeddedPiRunEnd, hn as createReplyDispatcher, k as resolveOutboundSessionRoute, lt as applyBrowserProxyPaths, mn as dispatchInboundMessage, n as BARE_SESSION_RESET_PROMPT, q as writeRestartSentinel, qn as resolveTtsAutoMode, tr as OPENAI_TTS_VOICES, u as abortEmbeddedPiRun, ut as persistBrowserProxyFiles, v as canonicalizeSpawnedByForAgent, vt as loadSymiPlugins, w as pruneLegacyStoreKeys, x as listSessionsFromStore, xr as parseVerboseOverride, yr as applyModelOverrideToSessionEntry } from "./reply-Ca3slrA3.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-B8yaGk2o.js";
43
- import { s as setHeartbeatsEnabled } from "./health-rR61mwm3.js";
42
+ import { n as getStatusSummary } from "./status-BXW5l4sd.js";
43
+ import { s as setHeartbeatsEnabled } from "./health-CypF_2ZD.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-9zUNNHgy.js";
46
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-Cv_wsBXL.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-DeJt9kAO.js";
46
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-DCE3RGr9.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-AiIhp7fw.js";
49
+ import { t as runGatewayUpdate } from "./update-runner-Bacq0oLK.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-D_S0NRCQ.js");
6856
+ const { handleNodeEvent } = await import("./server-node-events-60nWpTh1.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 resolveTtsApiKey, A as resolveAgentOutboundTarget, Cn as parseVerboseOverride, D as agentCommand, Dt as normalizeCronJobCreate, Gn as isAbortTrigger, Gt as applyBrowserProxyPaths, Hn as formatZonedTimestamp, K as dispatchInboundMessage, Kn as stopSubagentsForRequester, Kt as persistBrowserProxyFiles, Ln as resolveAgentTimeoutMs, N as createOutboundSendDeps, Ot as normalizeCronJobPatch, Qn as isTtsProviderConfigured, Qt as scheduleGatewaySigusr1Restart, Sn as applyVerboseOverride, Tn as isSystemEventContextChanged, Tr as registerAgentRunContext, Tt as writeRestartSentinel, Xn as getTtsProvider, Yn as resolveUserTimezone, Z as BARE_SESSION_RESET_PROMPT, Zn as isTtsEnabled, a as listSubagentRunsForRequester, ar as setTtsProvider, b as loadSymiPlugins, bt as formatDoctorNonInteractiveHint, c as clearSessionQueues, cr as OPENAI_TTS_VOICES, ct as ensureOutboundSessionEntry, er as resolveTtsAutoMode, f as waitForEmbeddedPiRunEnd, ft as resolveOutboundTarget, gn as resolveSendPolicy, hn as normalizeSendPolicy, i as listDescendantRunsForRequester, in as loadProviderUsageSummary, ir as setTtsEnabled, k as resolveAgentDeliveryPlan, lt as resolveOutboundSessionRoute, nn as normalizeGroupActivation, nr as resolveTtsPrefsPath, or as textToSpeech, q as createReplyDispatcher, rr as resolveTtsProviderOrder, sr as OPENAI_TTS_MODELS, tn as unbindThreadBindingsBySessionKey, tr as resolveTtsConfig, u as abortEmbeddedPiRun, wn as enqueueSystemEvent, wr as onAgentEvent, xn as applyModelOverrideToSessionEntry } from "./subagent-registry-CyW0EDWw.js";
15
+ import { $n as resolveTtsApiKey, A as resolveAgentOutboundTarget, Cn as parseVerboseOverride, D as agentCommand, Dt as normalizeCronJobCreate, Gn as isAbortTrigger, Gt as applyBrowserProxyPaths, Hn as formatZonedTimestamp, K as dispatchInboundMessage, Kn as stopSubagentsForRequester, Kt as persistBrowserProxyFiles, Ln as resolveAgentTimeoutMs, N as createOutboundSendDeps, Ot as normalizeCronJobPatch, Qn as isTtsProviderConfigured, Qt as scheduleGatewaySigusr1Restart, Sn as applyVerboseOverride, Tn as isSystemEventContextChanged, Tr as registerAgentRunContext, Tt as writeRestartSentinel, Xn as getTtsProvider, Yn as resolveUserTimezone, Z as BARE_SESSION_RESET_PROMPT, Zn as isTtsEnabled, a as listSubagentRunsForRequester, ar as setTtsProvider, b as loadSymiPlugins, bt as formatDoctorNonInteractiveHint, c as clearSessionQueues, cr as OPENAI_TTS_VOICES, ct as ensureOutboundSessionEntry, er as resolveTtsAutoMode, f as waitForEmbeddedPiRunEnd, ft as resolveOutboundTarget, gn as resolveSendPolicy, hn as normalizeSendPolicy, i as listDescendantRunsForRequester, in as loadProviderUsageSummary, ir as setTtsEnabled, k as resolveAgentDeliveryPlan, lt as resolveOutboundSessionRoute, nn as normalizeGroupActivation, nr as resolveTtsPrefsPath, or as textToSpeech, q as createReplyDispatcher, rr as resolveTtsProviderOrder, sr as OPENAI_TTS_MODELS, tn as unbindThreadBindingsBySessionKey, tr as resolveTtsConfig, u as abortEmbeddedPiRun, wn as enqueueSystemEvent, wr as onAgentEvent, xn as applyModelOverrideToSessionEntry } from "./subagent-registry-CbTbJKLs.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-4DaGE8j5.js";
41
- import { c as setHeartbeatsEnabled } from "./health-BSOMI4B6.js";
40
+ import { r as getStatusSummary } from "./status-BxbbINLV.js";
41
+ import { c as setHeartbeatsEnabled } from "./health-Bst5HnLF.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-8VJkVSdh.js";
44
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-DJTb7Jka.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-CFkFVwEz.js";
44
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-DTUAM1AG.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-BF5UULe-.js";
47
+ import { t as runGatewayUpdate } from "./update-runner-B0NdgPvD.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-CJOo8WcL.js");
6854
+ const { handleNodeEvent } = await import("./server-node-events-oU4Amei7.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 { Bt as createOutboundSendDeps, C as loadSessionEntry, Mt as agentCommand, Rt as resolveOutboundTarget, Sr as enqueueSystemEvent, T as resolveGatewaySessionStoreTarget, pt as requestHeartbeatNow, w as pruneLegacyStoreKeys } from "./reply-DSjeqLEz.js";
4
+ import { Bt as createOutboundSendDeps, C as loadSessionEntry, Mt as agentCommand, Rt as resolveOutboundTarget, Sr as enqueueSystemEvent, T as resolveGatewaySessionStoreTarget, pt as requestHeartbeatNow, w as pruneLegacyStoreKeys } from "./reply-Ca3slrA3.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-9zUNNHgy.js";
105
+ import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-DeJt9kAO.js";
106
106
  import { randomUUID } from "node:crypto";
107
107
 
108
108
  //#region src/gateway/server-node-events.ts
@@ -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 { D as agentCommand, fn as requestHeartbeatNow, ft as resolveOutboundTarget, j as createOutboundSendDeps, wn as enqueueSystemEvent } from "./subagent-registry-CyW0EDWw.js";
17
+ import { D as agentCommand, fn as requestHeartbeatNow, ft as resolveOutboundTarget, j as createOutboundSendDeps, wn as enqueueSystemEvent } from "./subagent-registry-CbTbJKLs.js";
18
18
  import { d as updateSessionStore } from "./sessions-CJXnZVjR.js";
19
19
  import "./tokens-Csntmwwn.js";
20
20
  import { r as normalizeChannelId } from "./plugins-CwSlLxM8.js";
@@ -98,7 +98,7 @@ import "./onboard-helpers-_pit1NZW.js";
98
98
  import "./prompt-style-DwCXob2h.js";
99
99
  import "./pairing-labels-D1HDboV2.js";
100
100
  import "./pi-tools.policy-De00gPXt.js";
101
- import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-8VJkVSdh.js";
101
+ import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-CFkFVwEz.js";
102
102
  import { randomUUID } from "node:crypto";
103
103
 
104
104
  //#region src/gateway/server-node-events.ts
@@ -1,6 +1,6 @@
1
1
  import { u as resolveGatewayPort } from "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, k as info, z as isRich } from "./utils-B-0b9bGM.js";
3
- import { Ct as formatUsageReportLines, E as resolveSessionModelRef, G as summarizeRestartSentinel, St as loadProviderUsageSummary, Tr as peekSystemEvents, W as readRestartSentinel, Yt as sha256HexPrefix, a as buildChannelSummary, b as listAgentsForGateway, mr as lookupContextTokens, o as buildChannelAccountSnapshot, s as formatChannelAllowFrom, y as classifySessionKey } from "./reply-DSjeqLEz.js";
3
+ import { Ct as formatUsageReportLines, E as resolveSessionModelRef, G as summarizeRestartSentinel, St as loadProviderUsageSummary, Tr as peekSystemEvents, W as readRestartSentinel, Yt as sha256HexPrefix, a as buildChannelSummary, b as listAgentsForGateway, mr as lookupContextTokens, o as buildChannelAccountSnapshot, s as formatChannelAllowFrom, y as classifySessionKey } from "./reply-Ca3slrA3.js";
4
4
  import { S as parseAgentSessionKey } from "./session-key-DCt45XZa.js";
5
5
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
6
6
  import { n as runExec } from "./exec-CWkblSrI.js";
@@ -28,7 +28,7 @@ import { t as formatRuntimeStatusWithDetails } from "./runtime-status-CR9445g5.j
28
28
  import { t as readLastGatewayErrorLine } from "./diagnostics-BAMlsVVX.js";
29
29
  import { t as renderTable } from "./table-BTgkRafz.js";
30
30
  import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-CrITRV6w.js";
31
- import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-rR61mwm3.js";
31
+ import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-CypF_2ZD.js";
32
32
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-CtckACbb.js";
33
33
  import { t as resolveNodeService } from "./node-service-Cxz4e-Qd.js";
34
34
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-yQZNwAF2.js";
@@ -9,7 +9,7 @@ import { c as resolveAgentWorkspaceDir } from "./agent-scope-D-jRCY0d.js";
9
9
  import { t as buildWorkspaceSkillStatus } from "./skills-status-DKXJ-tbi.js";
10
10
  import { H as VERSION, i as loadConfig, o as readConfigFileSnapshot } from "./config-DHBLS1Hl.js";
11
11
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-BcE47FtD.js";
12
- import { Ct as summarizeRestartSentinel, Dn as peekSystemEvents, St as readRestartSentinel, an as formatUsageReportLines, cn as buildChannelSummary, in as loadProviderUsageSummary, ln as buildChannelAccountSnapshot, rt as sha256HexPrefix, un as formatChannelAllowFrom } from "./subagent-registry-CyW0EDWw.js";
12
+ import { Ct as summarizeRestartSentinel, Dn as peekSystemEvents, St as readRestartSentinel, an as formatUsageReportLines, cn as buildChannelSummary, in as loadProviderUsageSummary, ln as buildChannelAccountSnapshot, rt as sha256HexPrefix, un as formatChannelAllowFrom } from "./subagent-registry-CbTbJKLs.js";
13
13
  import { F as resolveMainSessionKey, j as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-CJXnZVjR.js";
14
14
  import { n as listChannelPlugins } from "./plugins-CwSlLxM8.js";
15
15
  import { o as getTailnetHostname, s as readTailscaleStatusJson } from "./tailscale-CbbvYNVw.js";
@@ -29,7 +29,7 @@ import { t as formatRuntimeStatusWithDetails } from "./runtime-status-hFVEC3wO.j
29
29
  import { t as readLastGatewayErrorLine } from "./diagnostics-CS1ov_hH.js";
30
30
  import { t as renderTable } from "./table-D01d2GuY.js";
31
31
  import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-Byo5jCLN.js";
32
- import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-BSOMI4B6.js";
32
+ import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-Bst5HnLF.js";
33
33
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-ZdimP1aU.js";
34
34
  import { t as resolveNodeService } from "./node-service-fcZExd22.js";
35
35
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-DVLB9DNB.js";
@@ -1,7 +1,7 @@
1
1
  import { o as createSubsystemLogger } from "./entry.js";
2
2
  import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-D-jRCY0d.js";
3
3
  import { i as loadConfig } from "./config-DHBLS1Hl.js";
4
- import { b as loadSymiPlugins, y as createPluginLoaderLogger } from "./subagent-registry-CyW0EDWw.js";
4
+ import { b as loadSymiPlugins, y as createPluginLoaderLogger } from "./subagent-registry-CbTbJKLs.js";
5
5
 
6
6
  //#region src/plugins/status.ts
7
7
  const log = createSubsystemLogger("plugins");
@@ -1,4 +1,4 @@
1
- import { _t as createPluginLoaderLogger, vt as loadSymiPlugins } from "./reply-DSjeqLEz.js";
1
+ import { _t as createPluginLoaderLogger, vt as loadSymiPlugins } from "./reply-Ca3slrA3.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
3
3
  import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-CgUHAtCo.js";
4
4
  import { i as loadConfig } from "./config-CHwyw6l5.js";