@symerian/symi 2.8.10 → 2.8.11

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 (79) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/dist/{command-registry-B6spVZMd.js → command-registry-BZfKQQev.js} +4 -4
  4. package/dist/{completion-cli-VQrV_JN9.js → completion-cli-B1JkGibL.js} +2 -2
  5. package/dist/{completion-cli-DKoZNVbW.js → completion-cli-B4YP0Otu.js} +1 -1
  6. package/dist/{doctor-completion-BR5k35Qj.js → doctor-completion-CjlRDZow.js} +1 -1
  7. package/dist/{doctor-completion-CPFKFTc-.js → doctor-completion-CophMO9P.js} +1 -1
  8. package/dist/entry.js +1 -1
  9. package/dist/{gateway-cli-BF1-DFEf.js → gateway-cli-CAPtJ_VJ.js} +3 -3
  10. package/dist/{gateway-cli-BJH2K8fn.js → gateway-cli-Dlcx0rsS.js} +3 -3
  11. package/dist/{glass-ui-ws-B7j7iTDg.js → glass-ui-ws-GEiZsdru.js} +1 -1
  12. package/dist/{glass-ui-ws-DyoHQW3O.js → glass-ui-ws-hIgOh0Ub.js} +1 -1
  13. package/dist/index.js +1 -1
  14. package/dist/{onboard-D2NC88Mp.js → onboard-Bub0X2iR.js} +1 -1
  15. package/dist/{onboard-D_2-lyyt.js → onboard-CNiwcGJT.js} +1 -1
  16. package/dist/{onboarding-D7N2AfyJ.js → onboarding-CvK25SU5.js} +1 -1
  17. package/dist/{onboarding-uVLsv2Sd.js → onboarding-DFNiU6QZ.js} +1 -1
  18. package/dist/{onboarding.finalize-CTDv0xwp.js → onboarding.finalize-CvXSAjuU.js} +4 -4
  19. package/dist/{onboarding.finalize-DEjTjgRt.js → onboarding.finalize-_r8l4FJ1.js} +3 -3
  20. package/dist/{program-viRCc6Je.js → program-DtyqJT55.js} +2 -2
  21. package/dist/{program-context-Dun-c3nf.js → program-context-D0rHgaWi.js} +6 -6
  22. package/dist/{prompt-select-styled-DVLibGeR.js → prompt-select-styled-DqjIswKp.js} +1 -1
  23. package/dist/{prompt-select-styled-W2G26g34.js → prompt-select-styled-Dw0GkMPo.js} +1 -1
  24. package/dist/{register.maintenance-DqJL_QWT.js → register.maintenance-D67PVhC5.js} +4 -4
  25. package/dist/{register.maintenance-BGiYxRYm.js → register.maintenance-TB5RRHQv.js} +5 -5
  26. package/dist/{register.onboard-CfySx27T.js → register.onboard-BPcP1dJD.js} +2 -2
  27. package/dist/{register.onboard-848EXgTB.js → register.onboard-jbp1Eeea.js} +2 -2
  28. package/dist/{register.setup-C-NYSAGY.js → register.setup-D4QeCLuQ.js} +2 -2
  29. package/dist/{register.setup-B40A19lI.js → register.setup-Le3LEqeh.js} +2 -2
  30. package/dist/{register.subclis-kF8KnNuq.js → register.subclis-CTnvwrsP.js} +3 -3
  31. package/dist/{run-main-BqpvNq8c.js → run-main-DmgESA-W.js} +3 -3
  32. package/dist/{server-methods-DjB0hxeW.js → server-methods-EJZ_r3g7.js} +31 -7
  33. package/dist/{server-methods-CkLzZq0Y.js → server-methods-kM6zF8qf.js} +31 -7
  34. package/dist/{update-cli-BCFHfhUW.js → update-cli-NRTVUdGw.js} +5 -5
  35. package/dist/{update-cli-B_Mxicbw.js → update-cli-sTB4AuZ6.js} +4 -4
  36. package/docs/reference/templates/AGENTS.md +14 -0
  37. package/extensions/bluebubbles/package.json +1 -1
  38. package/extensions/copilot-proxy/package.json +1 -1
  39. package/extensions/diagnostics-otel/package.json +1 -1
  40. package/extensions/discord/package.json +1 -1
  41. package/extensions/feishu/package.json +1 -1
  42. package/extensions/google-antigravity-auth/package.json +1 -1
  43. package/extensions/google-gemini-cli-auth/package.json +1 -1
  44. package/extensions/googlechat/package.json +1 -1
  45. package/extensions/imessage/package.json +1 -1
  46. package/extensions/irc/package.json +1 -1
  47. package/extensions/learning-loop/package.json +1 -1
  48. package/extensions/line/package.json +1 -1
  49. package/extensions/llm-task/package.json +1 -1
  50. package/extensions/matrix/CHANGELOG.md +6 -0
  51. package/extensions/matrix/package.json +1 -1
  52. package/extensions/mattermost/package.json +1 -1
  53. package/extensions/memory-core/package.json +1 -1
  54. package/extensions/memory-lancedb/package.json +1 -1
  55. package/extensions/minimax-portal-auth/package.json +1 -1
  56. package/extensions/msteams/CHANGELOG.md +6 -0
  57. package/extensions/msteams/package.json +1 -1
  58. package/extensions/nextcloud-talk/package.json +1 -1
  59. package/extensions/nostr/CHANGELOG.md +6 -0
  60. package/extensions/nostr/package.json +1 -1
  61. package/extensions/open-prose/package.json +1 -1
  62. package/extensions/outlook/index.ts +69 -5
  63. package/extensions/outlook/package.json +1 -1
  64. package/extensions/outlook/src/store.ts +118 -11
  65. package/extensions/pipeline/package.json +1 -1
  66. package/extensions/signal/package.json +1 -1
  67. package/extensions/slack/package.json +1 -1
  68. package/extensions/telegram/package.json +1 -1
  69. package/extensions/tlon/package.json +1 -1
  70. package/extensions/twitch/CHANGELOG.md +6 -0
  71. package/extensions/twitch/package.json +1 -1
  72. package/extensions/voice-call/CHANGELOG.md +6 -0
  73. package/extensions/voice-call/package.json +1 -1
  74. package/extensions/whatsapp/package.json +1 -1
  75. package/extensions/zalo/CHANGELOG.md +6 -0
  76. package/extensions/zalo/package.json +1 -1
  77. package/extensions/zalouser/CHANGELOG.md +6 -0
  78. package/extensions/zalouser/package.json +1 -1
  79. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.8.10",
3
- "commit": "dfbda8f5c4769a35be8bad1565294603a1efd4f7",
4
- "builtAt": "2026-04-22T23:43:32.664Z"
2
+ "version": "2.8.11",
3
+ "commit": "d69681a411fb9561b905911d7a552afbb03cfe40",
4
+ "builtAt": "2026-04-23T00:22:13.108Z"
5
5
  }
@@ -1 +1 @@
1
- 254383122ebd69472b251aa7fe18c068914511bf81fa71c7745134b58827e861
1
+ 89404650941151c288d1b13edc9dbd41458dbf4393042ebe747405213112f044
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { an as getPrimaryCommand, cn as hasHelpOrVersion } from "./entry.js";
3
- import { i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-kF8KnNuq.js";
3
+ import { i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-CTnvwrsP.js";
4
4
 
5
5
  //#region src/cli/program/command-registry.ts
6
6
  var command_registry_exports = /* @__PURE__ */ __exportAll({
@@ -22,7 +22,7 @@ const coreEntries = [
22
22
  hasSubcommands: false
23
23
  }],
24
24
  register: async ({ program }) => {
25
- (await import("./register.setup-C-NYSAGY.js")).registerSetupCommand(program);
25
+ (await import("./register.setup-D4QeCLuQ.js")).registerSetupCommand(program);
26
26
  }
27
27
  },
28
28
  {
@@ -32,7 +32,7 @@ const coreEntries = [
32
32
  hasSubcommands: false
33
33
  }],
34
34
  register: async ({ program }) => {
35
- (await import("./register.onboard-848EXgTB.js")).registerOnboardCommand(program);
35
+ (await import("./register.onboard-jbp1Eeea.js")).registerOnboardCommand(program);
36
36
  }
37
37
  },
38
38
  {
@@ -79,7 +79,7 @@ const coreEntries = [
79
79
  }
80
80
  ],
81
81
  register: async ({ program }) => {
82
- (await import("./register.maintenance-BGiYxRYm.js")).registerMaintenanceCommands(program);
82
+ (await import("./register.maintenance-TB5RRHQv.js")).registerMaintenanceCommands(program);
83
83
  }
84
84
  },
85
85
  {
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { Yt as resolveStateDir, l as routeLogsToStderr, nt as pathExists } from "./entry.js";
3
- import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-kF8KnNuq.js";
4
- import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-B6spVZMd.js";
3
+ import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-CTnvwrsP.js";
4
+ import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-BZfKQQev.js";
5
5
  import { t as getProgramContext } from "./program-context-DeZ44oQ9.js";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
3
3
  import { h as pathExists } from "./utils-B-0b9bGM.js";
4
4
  import { i as routeLogsToStderr } from "./subsystem-D9vIQve0.js";
5
- import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-Dun-c3nf.js";
5
+ import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-D0rHgaWi.js";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
8
8
  import fs from "node:fs/promises";
@@ -1,7 +1,7 @@
1
1
  import { r as resolveCliName } from "./command-format-BtYOfWxC.js";
2
2
  import { t as resolveSymiPackageRoot } from "./symi-root-BNuQ4lAT.js";
3
3
  import { t as note } from "./note-DewoEWtc.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-VQrV_JN9.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-B1JkGibL.js";
5
5
  import { spawnSync } from "node:child_process";
6
6
  import path from "node:path";
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
2
2
  import { r as resolveCliName } from "./command-format-COaS-S7B.js";
3
3
  import { t as note } from "./note-ByDX0v9V.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-DKoZNVbW.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-B4YP0Otu.js";
5
5
  import path from "node:path";
6
6
  import { spawnSync } from "node:child_process";
7
7
 
package/dist/entry.js CHANGED
@@ -2500,7 +2500,7 @@ if (!ensureExperimentalWarningSuppressed()) {
2500
2500
  applyCliProfileEnv({ profile: parsed.profile });
2501
2501
  process$1.argv = parsed.argv;
2502
2502
  }
2503
- import("./run-main-BqpvNq8c.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2503
+ import("./run-main-DmgESA-W.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2504
2504
  console.error("[symi] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
2505
2505
  process$1.exitCode = 1;
2506
2506
  });
@@ -140,8 +140,8 @@ import { r as pickGatewaySelfPresence } from "./status-C_gwgMp4.js";
140
140
  import { c as startHeartbeatRunner, i as styleHealthChannelLine, n as getHealthSnapshot, o as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-BAjSATWA.js";
141
141
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-BrP31IQR.js";
142
142
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-Bbvpax6u.js";
143
- import { t as runOnboardingWizard } from "./onboarding-uVLsv2Sd.js";
144
- import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-CkLzZq0Y.js";
143
+ import { t as runOnboardingWizard } from "./onboarding-DFNiU6QZ.js";
144
+ import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-kM6zF8qf.js";
145
145
  import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-CB_8WzQ9.js";
146
146
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-CjltkjCx.js";
147
147
  import "./agents.config-DckCExUX.js";
@@ -11959,7 +11959,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
11959
11959
  });
11960
11960
  let glassUiBridgeCleanup = null;
11961
11961
  if (!minimalTestGateway) {
11962
- const { createGlassUiBridge } = await import("./glass-ui-ws-DyoHQW3O.js");
11962
+ const { createGlassUiBridge } = await import("./glass-ui-ws-hIgOh0Ub.js");
11963
11963
  glassUiBridgeCleanup = createGlassUiBridge({
11964
11964
  wss: glassUiWss,
11965
11965
  context: gatewayRequestContext,
@@ -135,8 +135,8 @@ import { i as pickGatewaySelfPresence } from "./status-WMQ2CpbK.js";
135
135
  import { a as styleHealthChannelLine, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-D-0xOxV8.js";
136
136
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Clf7H-Sm.js";
137
137
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-BNjupSIM.js";
138
- import { t as runOnboardingWizard } from "./onboarding-D7N2AfyJ.js";
139
- import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-DjB0hxeW.js";
138
+ import { t as runOnboardingWizard } from "./onboarding-CvK25SU5.js";
139
+ import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-EJZ_r3g7.js";
140
140
  import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-tfhjtI57.js";
141
141
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-YTXXLbHH.js";
142
142
  import "./agents.config-LE2JxgiS.js";
@@ -11955,7 +11955,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
11955
11955
  });
11956
11956
  let glassUiBridgeCleanup = null;
11957
11957
  if (!minimalTestGateway) {
11958
- const { createGlassUiBridge } = await import("./glass-ui-ws-B7j7iTDg.js");
11958
+ const { createGlassUiBridge } = await import("./glass-ui-ws-GEiZsdru.js");
11959
11959
  glassUiBridgeCleanup = createGlassUiBridge({
11960
11960
  wss: glassUiWss,
11961
11961
  context: gatewayRequestContext,
@@ -113,7 +113,7 @@ import "./status-WMQ2CpbK.js";
113
113
  import "./health-D-0xOxV8.js";
114
114
  import "./control-ui-assets-Clf7H-Sm.js";
115
115
  import "./update-check-BNjupSIM.js";
116
- import { n as handleGatewayRequest } from "./server-methods-DjB0hxeW.js";
116
+ import { n as handleGatewayRequest } from "./server-methods-EJZ_r3g7.js";
117
117
  import "./push-apns-tfhjtI57.js";
118
118
  import "./agents.config-LE2JxgiS.js";
119
119
  import "./dm-policy-shared-JiSNSaKz.js";
@@ -118,7 +118,7 @@ import "./status-C_gwgMp4.js";
118
118
  import "./health-BAjSATWA.js";
119
119
  import "./control-ui-assets-BrP31IQR.js";
120
120
  import "./update-check-Bbvpax6u.js";
121
- import { n as handleGatewayRequest } from "./server-methods-CkLzZq0Y.js";
121
+ import { n as handleGatewayRequest } from "./server-methods-kM6zF8qf.js";
122
122
  import "./push-apns-CB_8WzQ9.js";
123
123
  import "./agents.config-DckCExUX.js";
124
124
  import "./dm-policy-shared-KlzpDeT_.js";
package/dist/index.js CHANGED
@@ -113,7 +113,7 @@ import { t as ensureSymiCliOnPath } from "./path-env-DUnTlGco.js";
113
113
  import { t as assertSupportedRuntime } from "./runtime-guard-BKFbNplo.js";
114
114
  import "./ports-Dr4j-VG-.js";
115
115
  import { a as hasFlag, i as getVerboseFlag, n as getCommandPath, o as hasHelpOrVersion, s as hasRootVersionAlias } from "./argv-BnhBnqf2.js";
116
- import { i as getCoreCliCommandsWithSubcommands, n as setProgramContext, o as registerProgramCommands, s as getSubCliCommandsWithSubcommands } from "./program-context-Dun-c3nf.js";
116
+ import { i as getCoreCliCommandsWithSubcommands, n as setProgramContext, o as registerProgramCommands, s as getSubCliCommandsWithSubcommands } from "./program-context-D0rHgaWi.js";
117
117
  import "./catalog-KW3oyt3k.js";
118
118
  import "./plugin-registry-DEKq3ti3.js";
119
119
  import { n as resolveCliChannelOptions } from "./channel-options-DrBxsMlw.js";
@@ -10,7 +10,7 @@ import { t as assertSupportedRuntime } from "./runtime-guard-BofkqBu7.js";
10
10
  import { r as isSystemdUserServiceAvailable } from "./systemd-CJ5L2ee4.js";
11
11
  import { t as resolveGatewayService } from "./service-RxN7lQKN.js";
12
12
  import { r as healthCommand } from "./health-D-0xOxV8.js";
13
- import { t as runOnboardingWizard } from "./onboarding-D7N2AfyJ.js";
13
+ import { t as runOnboardingWizard } from "./onboarding-CvK25SU5.js";
14
14
  import { $ as setHuggingfaceApiKey, A as applyXaiConfig, B as applyVercelAiGatewayConfig, E as applyTogetherConfig, I as applyLitellmConfig, M as applyXiaomiConfig, O as applyVeniceConfig, P as applyZaiConfig, Q as setGeminiApiKey, R as applyCloudflareAiGatewayConfig, S as applyQianfanConfig, X as setAnthropicApiKey, Z as setCloudflareAiGatewayConfig, _ as applyMoonshotConfigCn, a as applyMinimaxApiConfig, at as setOpenrouterApiKey, b as applyOpenrouterConfig, ct as setTogetherApiKey, d as applyAuthProfileConfig, dt as setXaiApiKey, et as setKimiCodingApiKey, f as applyHuggingfaceConfig, ft as setXiaomiApiKey, g as applyMoonshotConfig, it as setOpencodeZenApiKey, l as applyMinimaxConfig, lt as setVeniceApiKey, m as applyKimiCodeConfig, n as validateAnthropicSetupToken, nt as setMinimaxApiKey, o as applyMinimaxApiConfigCn, ot as setQianfanApiKey, pt as setZaiApiKey, r as applyOpencodeZenConfig, rt as setMoonshotApiKey, st as setSyntheticApiKey, t as buildTokenProfileId, tt as setLitellmApiKey, ut as setVercelAiGatewayApiKey, w as applySyntheticConfig } from "./auth-token-ce8PBZwF.js";
15
15
  import { n as logConfigUpdated } from "./logging-PVQxLC6I.js";
16
16
  import { n as isDeprecatedAuthChoice, r as normalizeLegacyOnboardAuthChoice } from "./auth-choice-legacy-DxCamFcQ.js";
@@ -12,7 +12,7 @@ import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, r as isGate
12
12
  import { r as isSystemdUserServiceAvailable } from "./systemd-Xs16roN5.js";
13
13
  import { t as resolveGatewayService } from "./service-DzLem5vL.js";
14
14
  import { r as healthCommand } from "./health-BAjSATWA.js";
15
- import { t as runOnboardingWizard } from "./onboarding-uVLsv2Sd.js";
15
+ import { t as runOnboardingWizard } from "./onboarding-DFNiU6QZ.js";
16
16
  import { $ as setHuggingfaceApiKey, A as applyXaiConfig, B as applyVercelAiGatewayConfig, E as applyTogetherConfig, I as applyLitellmConfig, M as applyXiaomiConfig, O as applyVeniceConfig, P as applyZaiConfig, Q as setGeminiApiKey, R as applyCloudflareAiGatewayConfig, S as applyQianfanConfig, X as setAnthropicApiKey, Z as setCloudflareAiGatewayConfig, _ as applyMoonshotConfigCn, a as applyMinimaxApiConfig, at as setOpenrouterApiKey, b as applyOpenrouterConfig, ct as setTogetherApiKey, d as applyAuthProfileConfig, dt as setXaiApiKey, et as setKimiCodingApiKey, f as applyHuggingfaceConfig, ft as setXiaomiApiKey, g as applyMoonshotConfig, it as setOpencodeZenApiKey, l as applyMinimaxConfig, lt as setVeniceApiKey, m as applyKimiCodeConfig, n as validateAnthropicSetupToken, nt as setMinimaxApiKey, o as applyMinimaxApiConfigCn, ot as setQianfanApiKey, pt as setZaiApiKey, r as applyOpencodeZenConfig, rt as setMoonshotApiKey, st as setSyntheticApiKey, t as buildTokenProfileId, tt as setLitellmApiKey, ut as setVercelAiGatewayApiKey, w as applySyntheticConfig } from "./auth-token-Cq0R-Q6i.js";
17
17
  import { n as logConfigUpdated } from "./logging-CZuxhCZR.js";
18
18
  import { n as isDeprecatedAuthChoice, r as normalizeLegacyOnboardAuthChoice } from "./auth-choice-legacy-C7jeLI7r.js";
@@ -302,7 +302,7 @@ async function runOnboardingWizard(opts, runtime = defaultRuntime, prompter) {
302
302
  mode
303
303
  });
304
304
  await writeConfigFile(nextConfig);
305
- const { finalizeOnboardingWizard } = await import("./onboarding.finalize-CTDv0xwp.js");
305
+ const { finalizeOnboardingWizard } = await import("./onboarding.finalize-CvXSAjuU.js");
306
306
  const { launchedTui } = await finalizeOnboardingWizard({
307
307
  flow,
308
308
  opts,
@@ -304,7 +304,7 @@ async function runOnboardingWizard(opts, runtime = defaultRuntime, prompter) {
304
304
  mode
305
305
  });
306
306
  await writeConfigFile(nextConfig);
307
- const { finalizeOnboardingWizard } = await import("./onboarding.finalize-DEjTjgRt.js");
307
+ const { finalizeOnboardingWizard } = await import("./onboarding.finalize-_r8l4FJ1.js");
308
308
  const { launchedTui } = await finalizeOnboardingWizard({
309
309
  flow,
310
310
  opts,
@@ -100,10 +100,10 @@ import "./prompt-style-BxVdnrLq.js";
100
100
  import "./pairing-labels-BHx_CdbP.js";
101
101
  import "./pi-tools.policy-dbCkhLDL.js";
102
102
  import "./note-DewoEWtc.js";
103
- import "./register.subclis-kF8KnNuq.js";
104
- import "./command-registry-B6spVZMd.js";
103
+ import "./register.subclis-CTnvwrsP.js";
104
+ import "./command-registry-BZfKQQev.js";
105
105
  import "./program-context-DeZ44oQ9.js";
106
- import { r as installCompletion } from "./completion-cli-VQrV_JN9.js";
106
+ import { r as installCompletion } from "./completion-cli-B1JkGibL.js";
107
107
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-D_elkkFW.js";
108
108
  import "./runtime-guard-BofkqBu7.js";
109
109
  import { r as isSystemdUserServiceAvailable } from "./systemd-CJ5L2ee4.js";
@@ -111,7 +111,7 @@ import { t as resolveGatewayService } from "./service-RxN7lQKN.js";
111
111
  import { r as healthCommand } from "./health-D-0xOxV8.js";
112
112
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Clf7H-Sm.js";
113
113
  import { t as formatHealthCheckFailure } from "./health-format-DkjSgkDx.js";
114
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BR5k35Qj.js";
114
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CjlRDZow.js";
115
115
  import { t as runTui } from "./tui-BiBFm_RY.js";
116
116
  import os from "node:os";
117
117
  import path from "node:path";
@@ -104,16 +104,16 @@ import "./control-service-C0pRqIFv.js";
104
104
  import "./stagger-CZ1Rrj7O.js";
105
105
  import "./channel-selection-9fIQGtZy.js";
106
106
  import "./runtime-guard-BKFbNplo.js";
107
- import "./program-context-Dun-c3nf.js";
107
+ import "./program-context-D0rHgaWi.js";
108
108
  import "./note-ByDX0v9V.js";
109
- import { r as installCompletion } from "./completion-cli-DKoZNVbW.js";
109
+ import { r as installCompletion } from "./completion-cli-B4YP0Otu.js";
110
110
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-Cp7obV7Q.js";
111
111
  import { r as isSystemdUserServiceAvailable } from "./systemd-Xs16roN5.js";
112
112
  import { t as resolveGatewayService } from "./service-DzLem5vL.js";
113
113
  import { r as healthCommand } from "./health-BAjSATWA.js";
114
114
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-BrP31IQR.js";
115
115
  import { t as formatHealthCheckFailure } from "./health-format-Ct4VWeSk.js";
116
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CPFKFTc-.js";
116
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CophMO9P.js";
117
117
  import { t as runTui } from "./tui-CvHbwJ3G.js";
118
118
  import os from "node:os";
119
119
  import path from "node:path";
@@ -102,8 +102,8 @@ import "./pi-tools.policy-dbCkhLDL.js";
102
102
  import "./catalog-KcLvtTfa.js";
103
103
  import "./plugin-registry-Chvg6kT0.js";
104
104
  import { n as resolveCliChannelOptions } from "./channel-options-BtmFCQOB.js";
105
- import { t as getSubCliCommandsWithSubcommands } from "./register.subclis-kF8KnNuq.js";
106
- import { a as registerProgramCommands, r as getCoreCliCommandsWithSubcommands } from "./command-registry-B6spVZMd.js";
105
+ import { t as getSubCliCommandsWithSubcommands } from "./register.subclis-CTnvwrsP.js";
106
+ import { a as registerProgramCommands, r as getCoreCliCommandsWithSubcommands } from "./command-registry-BZfKQQev.js";
107
107
  import { r as setProgramContext } from "./program-context-DeZ44oQ9.js";
108
108
  import { t as forceFreePort } from "./ports-DQg7kV5s.js";
109
109
  import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-BFr8n0of.js";
@@ -43,7 +43,7 @@ const entries = [
43
43
  description: "Run, inspect, and query the WebSocket Gateway",
44
44
  hasSubcommands: true,
45
45
  register: async (program) => {
46
- (await import("./gateway-cli-BF1-DFEf.js")).registerGatewayCli(program);
46
+ (await import("./gateway-cli-CAPtJ_VJ.js")).registerGatewayCli(program);
47
47
  }
48
48
  },
49
49
  {
@@ -231,7 +231,7 @@ const entries = [
231
231
  description: "Update Symi and inspect update channel status",
232
232
  hasSubcommands: true,
233
233
  register: async (program) => {
234
- (await import("./update-cli-B_Mxicbw.js")).registerUpdateCli(program);
234
+ (await import("./update-cli-sTB4AuZ6.js")).registerUpdateCli(program);
235
235
  }
236
236
  },
237
237
  {
@@ -239,7 +239,7 @@ const entries = [
239
239
  description: "Generate shell completion script",
240
240
  hasSubcommands: false,
241
241
  register: async (program) => {
242
- (await import("./completion-cli-DKoZNVbW.js").then((n) => n.n)).registerCompletionCli(program);
242
+ (await import("./completion-cli-B4YP0Otu.js").then((n) => n.n)).registerCompletionCli(program);
243
243
  }
244
244
  }
245
245
  ];
@@ -302,7 +302,7 @@ const coreEntries = [
302
302
  hasSubcommands: false
303
303
  }],
304
304
  register: async ({ program }) => {
305
- (await import("./register.setup-B40A19lI.js")).registerSetupCommand(program);
305
+ (await import("./register.setup-Le3LEqeh.js")).registerSetupCommand(program);
306
306
  }
307
307
  },
308
308
  {
@@ -312,7 +312,7 @@ const coreEntries = [
312
312
  hasSubcommands: false
313
313
  }],
314
314
  register: async ({ program }) => {
315
- (await import("./register.onboard-CfySx27T.js")).registerOnboardCommand(program);
315
+ (await import("./register.onboard-BPcP1dJD.js")).registerOnboardCommand(program);
316
316
  }
317
317
  },
318
318
  {
@@ -359,7 +359,7 @@ const coreEntries = [
359
359
  }
360
360
  ],
361
361
  register: async ({ program }) => {
362
- (await import("./register.maintenance-DqJL_QWT.js")).registerMaintenanceCommands(program);
362
+ (await import("./register.maintenance-D67PVhC5.js")).registerMaintenanceCommands(program);
363
363
  }
364
364
  },
365
365
  {
@@ -40,7 +40,7 @@ import { n as logConfigUpdated } from "./logging-PVQxLC6I.js";
40
40
  import { n as detectLegacyStateMigrations, r as runLegacyStateMigrations, t as loadAndMaybeMigrateDoctorConfig } from "./doctor-config-flow-B2dVxbL7.js";
41
41
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-ipoPa7o0.js";
42
42
  import { t as formatHealthCheckFailure } from "./health-format-DkjSgkDx.js";
43
- import { n as doctorShellCompletion } from "./doctor-completion-BR5k35Qj.js";
43
+ import { n as doctorShellCompletion } from "./doctor-completion-CjlRDZow.js";
44
44
  import { execFile } from "node:child_process";
45
45
  import os from "node:os";
46
46
  import path from "node:path";
@@ -43,7 +43,7 @@ import { n as logConfigUpdated } from "./logging-CZuxhCZR.js";
43
43
  import { n as detectLegacyStateMigrations, r as runLegacyStateMigrations, t as loadAndMaybeMigrateDoctorConfig } from "./doctor-config-flow-BCMxS2lf.js";
44
44
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-0C265XKH.js";
45
45
  import { t as formatHealthCheckFailure } from "./health-format-Ct4VWeSk.js";
46
- import { n as doctorShellCompletion } from "./doctor-completion-CPFKFTc-.js";
46
+ import { n as doctorShellCompletion } from "./doctor-completion-CophMO9P.js";
47
47
  import fs from "node:fs";
48
48
  import os from "node:os";
49
49
  import path from "node:path";
@@ -104,14 +104,14 @@ import "./control-service-C0pRqIFv.js";
104
104
  import "./stagger-CZ1Rrj7O.js";
105
105
  import "./channel-selection-9fIQGtZy.js";
106
106
  import "./runtime-guard-BKFbNplo.js";
107
- import "./program-context-Dun-c3nf.js";
107
+ import "./program-context-D0rHgaWi.js";
108
108
  import "./catalog-KW3oyt3k.js";
109
109
  import "./skills-status-D1IW8MhS.js";
110
110
  import { t as copyToClipboard } from "./clipboard-DdzH0esn.js";
111
111
  import "./note-ByDX0v9V.js";
112
112
  import "./plugin-auto-enable-BCgtCy7n.js";
113
113
  import "./channels-status-issues-BVpj6wWd.js";
114
- import "./completion-cli-DKoZNVbW.js";
114
+ import "./completion-cli-B4YP0Otu.js";
115
115
  import "./daemon-runtime-Cp7obV7Q.js";
116
116
  import "./systemd-Xs16roN5.js";
117
117
  import { t as resolveGatewayService } from "./service-DzLem5vL.js";
@@ -126,8 +126,8 @@ import "./logging-CZuxhCZR.js";
126
126
  import "./doctor-config-flow-BCMxS2lf.js";
127
127
  import "./systemd-linger-0C265XKH.js";
128
128
  import "./health-format-Ct4VWeSk.js";
129
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-W2G26g34.js";
130
- import "./doctor-completion-CPFKFTc-.js";
129
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-Dw0GkMPo.js";
130
+ import "./doctor-completion-CophMO9P.js";
131
131
  import path from "node:path";
132
132
  import fs from "node:fs/promises";
133
133
  import { cancel, confirm, isCancel, multiselect } from "@clack/prompts";
@@ -105,10 +105,10 @@ import "./catalog-KcLvtTfa.js";
105
105
  import "./note-DewoEWtc.js";
106
106
  import "./plugin-auto-enable-pQEg2Mly.js";
107
107
  import "./channels-status-issues-B-ssmZ8E.js";
108
- import "./register.subclis-kF8KnNuq.js";
109
- import "./command-registry-B6spVZMd.js";
108
+ import "./register.subclis-CTnvwrsP.js";
109
+ import "./command-registry-BZfKQQev.js";
110
110
  import "./program-context-DeZ44oQ9.js";
111
- import "./completion-cli-VQrV_JN9.js";
111
+ import "./completion-cli-B1JkGibL.js";
112
112
  import "./daemon-runtime-D_elkkFW.js";
113
113
  import "./runtime-guard-BofkqBu7.js";
114
114
  import "./systemd-CJ5L2ee4.js";
@@ -124,8 +124,8 @@ import "./logging-PVQxLC6I.js";
124
124
  import "./doctor-config-flow-B2dVxbL7.js";
125
125
  import "./systemd-linger-ipoPa7o0.js";
126
126
  import "./health-format-DkjSgkDx.js";
127
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-DVLibGeR.js";
128
- import "./doctor-completion-BR5k35Qj.js";
127
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-DqjIswKp.js";
128
+ import "./doctor-completion-CjlRDZow.js";
129
129
  import path from "node:path";
130
130
  import fs from "node:fs/promises";
131
131
  import { cancel, confirm, isCancel, multiselect } from "@clack/prompts";
@@ -109,7 +109,7 @@ import "./daemon-runtime-Cp7obV7Q.js";
109
109
  import "./systemd-Xs16roN5.js";
110
110
  import "./service-DzLem5vL.js";
111
111
  import "./health-BAjSATWA.js";
112
- import "./onboarding-uVLsv2Sd.js";
112
+ import "./onboarding-DFNiU6QZ.js";
113
113
  import "./shared-C9vLT1Vj.js";
114
114
  import "./auth-token-Cq0R-Q6i.js";
115
115
  import "./logging-CZuxhCZR.js";
@@ -118,7 +118,7 @@ import "./openai-model-default-D5FwfJqN.js";
118
118
  import "./model-picker-BNWV-jU4.js";
119
119
  import "./systemd-linger-0C265XKH.js";
120
120
  import "./onboard-custom-Dk9cL3Uu.js";
121
- import { n as ONBOARD_PROVIDER_AUTH_FLAGS, t as onboardCommand } from "./onboard-D_2-lyyt.js";
121
+ import { n as ONBOARD_PROVIDER_AUTH_FLAGS, t as onboardCommand } from "./onboard-CNiwcGJT.js";
122
122
 
123
123
  //#region src/cli/program/register.onboard.ts
124
124
  function resolveInstallDaemonFlag(command, opts) {
@@ -105,7 +105,7 @@ import "./runtime-guard-BofkqBu7.js";
105
105
  import "./systemd-CJ5L2ee4.js";
106
106
  import "./service-RxN7lQKN.js";
107
107
  import "./health-D-0xOxV8.js";
108
- import "./onboarding-D7N2AfyJ.js";
108
+ import "./onboarding-CvK25SU5.js";
109
109
  import "./shared-PtB96PLH.js";
110
110
  import "./auth-token-ce8PBZwF.js";
111
111
  import "./logging-PVQxLC6I.js";
@@ -114,7 +114,7 @@ import "./openai-model-default-CMi-OF15.js";
114
114
  import "./model-picker-n7beL1F5.js";
115
115
  import "./systemd-linger-ipoPa7o0.js";
116
116
  import "./onboard-custom-CJGSIPt3.js";
117
- import { n as ONBOARD_PROVIDER_AUTH_FLAGS, t as onboardCommand } from "./onboard-D2NC88Mp.js";
117
+ import { n as ONBOARD_PROVIDER_AUTH_FLAGS, t as onboardCommand } from "./onboard-Bub0X2iR.js";
118
118
 
119
119
  //#region src/cli/program/register.onboard.ts
120
120
  function resolveInstallDaemonFlag(command, opts) {
@@ -106,7 +106,7 @@ import "./runtime-guard-BofkqBu7.js";
106
106
  import "./systemd-CJ5L2ee4.js";
107
107
  import "./service-RxN7lQKN.js";
108
108
  import "./health-D-0xOxV8.js";
109
- import "./onboarding-D7N2AfyJ.js";
109
+ import "./onboarding-CvK25SU5.js";
110
110
  import "./shared-PtB96PLH.js";
111
111
  import "./auth-token-ce8PBZwF.js";
112
112
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-PVQxLC6I.js";
@@ -114,7 +114,7 @@ import "./openai-model-default-CMi-OF15.js";
114
114
  import "./model-picker-n7beL1F5.js";
115
115
  import "./systemd-linger-ipoPa7o0.js";
116
116
  import "./onboard-custom-CJGSIPt3.js";
117
- import { t as onboardCommand } from "./onboard-D2NC88Mp.js";
117
+ import { t as onboardCommand } from "./onboard-Bub0X2iR.js";
118
118
  import JSON5 from "json5";
119
119
  import fs from "node:fs/promises";
120
120
 
@@ -110,7 +110,7 @@ import "./daemon-runtime-Cp7obV7Q.js";
110
110
  import "./systemd-Xs16roN5.js";
111
111
  import "./service-DzLem5vL.js";
112
112
  import "./health-BAjSATWA.js";
113
- import "./onboarding-uVLsv2Sd.js";
113
+ import "./onboarding-DFNiU6QZ.js";
114
114
  import "./shared-C9vLT1Vj.js";
115
115
  import "./auth-token-Cq0R-Q6i.js";
116
116
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-CZuxhCZR.js";
@@ -118,7 +118,7 @@ import "./openai-model-default-D5FwfJqN.js";
118
118
  import "./model-picker-BNWV-jU4.js";
119
119
  import "./systemd-linger-0C265XKH.js";
120
120
  import "./onboard-custom-Dk9cL3Uu.js";
121
- import { t as onboardCommand } from "./onboard-D_2-lyyt.js";
121
+ import { t as onboardCommand } from "./onboard-CNiwcGJT.js";
122
122
  import JSON5 from "json5";
123
123
  import fs from "node:fs/promises";
124
124
 
@@ -49,7 +49,7 @@ const entries = [
49
49
  description: "Run, inspect, and query the WebSocket Gateway",
50
50
  hasSubcommands: true,
51
51
  register: async (program) => {
52
- (await import("./gateway-cli-BJH2K8fn.js")).registerGatewayCli(program);
52
+ (await import("./gateway-cli-Dlcx0rsS.js")).registerGatewayCli(program);
53
53
  }
54
54
  },
55
55
  {
@@ -237,7 +237,7 @@ const entries = [
237
237
  description: "Update Symi and inspect update channel status",
238
238
  hasSubcommands: true,
239
239
  register: async (program) => {
240
- (await import("./update-cli-BCFHfhUW.js")).registerUpdateCli(program);
240
+ (await import("./update-cli-NRTVUdGw.js")).registerUpdateCli(program);
241
241
  }
242
242
  },
243
243
  {
@@ -245,7 +245,7 @@ const entries = [
245
245
  description: "Generate shell completion script",
246
246
  hasSubcommands: false,
247
247
  register: async (program) => {
248
- (await import("./completion-cli-VQrV_JN9.js").then((n) => n.n)).registerCompletionCli(program);
248
+ (await import("./completion-cli-B1JkGibL.js").then((n) => n.n)).registerCompletionCli(program);
249
249
  }
250
250
  }
251
251
  ];
@@ -380,7 +380,7 @@ async function runCli(argv = process$1.argv) {
380
380
  assertSupportedRuntime();
381
381
  if (await tryRouteCli(normalizedArgv)) return;
382
382
  enableConsoleCapture();
383
- const { buildProgram } = await import("./program-viRCc6Je.js");
383
+ const { buildProgram } = await import("./program-DtyqJT55.js");
384
384
  const program = buildProgram();
385
385
  installUnhandledRejectionHandler();
386
386
  process$1.on("uncaughtException", (error) => {
@@ -412,10 +412,10 @@ async function runCli(argv = process$1.argv) {
412
412
  const { getProgramContext } = await import("./program-context-DeZ44oQ9.js").then((n) => n.n);
413
413
  const ctx = getProgramContext(program);
414
414
  if (ctx) {
415
- const { registerCoreCliByName } = await import("./command-registry-B6spVZMd.js").then((n) => n.t);
415
+ const { registerCoreCliByName } = await import("./command-registry-BZfKQQev.js").then((n) => n.t);
416
416
  await registerCoreCliByName(program, ctx, primary, parseArgv);
417
417
  }
418
- const { registerSubCliByName } = await import("./register.subclis-kF8KnNuq.js").then((n) => n.a);
418
+ const { registerSubCliByName } = await import("./register.subclis-CTnvwrsP.js").then((n) => n.a);
419
419
  await registerSubCliByName(program, primary);
420
420
  }
421
421
  const hasBuiltinPrimary = primary !== null && program.commands.some((command) => command.name() === primary);
@@ -3365,11 +3365,24 @@ const browserHandlers = { "browser.request": async ({ params, respond, context }
3365
3365
 
3366
3366
  //#endregion
3367
3367
  //#region src/gateway/server-methods/channels.ts
3368
+ /**
3369
+ * Same 24h window as extensions/outlook/src/store.ts:REFRESH_TRUST_WINDOW_MS.
3370
+ * Kept in sync by convention rather than shared import — importing from an
3371
+ * extension into gateway code would invert the dependency direction. If
3372
+ * either value changes, update the other.
3373
+ */
3374
+ const OUTLOOK_REFRESH_TRUST_WINDOW_MS = 1440 * 60 * 1e3;
3375
+ function resolveOutlookHome() {
3376
+ const home = os.homedir();
3377
+ if (home && home.length > 0) return home;
3378
+ return process.env.HOME || process.env.USERPROFILE || null;
3379
+ }
3368
3380
  function readOutlookConnectionState() {
3369
- const home = process.env.HOME || process.env.USERPROFILE;
3381
+ const home = resolveOutlookHome();
3370
3382
  if (!home) return {
3371
3383
  configured: false,
3372
- connected: false
3384
+ connected: false,
3385
+ connectionState: "not-connected"
3373
3386
  };
3374
3387
  const credsPath = path.join(home, ".symi", "credentials", "outlook.json");
3375
3388
  let raw;
@@ -3378,7 +3391,9 @@ function readOutlookConnectionState() {
3378
3391
  } catch {
3379
3392
  return {
3380
3393
  configured: false,
3381
- connected: false
3394
+ connected: false,
3395
+ connectionState: "not-connected",
3396
+ credentialsPath: credsPath
3382
3397
  };
3383
3398
  }
3384
3399
  let creds;
@@ -3387,21 +3402,30 @@ function readOutlookConnectionState() {
3387
3402
  } catch {
3388
3403
  return {
3389
3404
  configured: true,
3390
- connected: false
3405
+ connected: false,
3406
+ connectionState: "not-connected",
3407
+ credentialsPath: credsPath
3391
3408
  };
3392
3409
  }
3393
3410
  const expires = typeof creds.expires === "number" ? creds.expires : 0;
3394
3411
  const hasRefresh = typeof creds.refresh === "string" && creds.refresh.length > 0;
3395
- const notExpired = Date.now() < expires;
3396
- const connected = notExpired || hasRefresh;
3412
+ const lastVerifiedAtMs = typeof creds.lastVerifiedAt === "number" ? creds.lastVerifiedAt : void 0;
3413
+ const now = Date.now();
3414
+ const notExpired = now < expires;
3415
+ const recentlyVerified = typeof lastVerifiedAtMs === "number" && now - lastVerifiedAtMs < OUTLOOK_REFRESH_TRUST_WINDOW_MS;
3416
+ const connectionState = notExpired ? "valid" : recentlyVerified ? "trusted" : hasRefresh ? "stale" : "not-connected";
3417
+ const connected = connectionState !== "not-connected";
3397
3418
  const tokenState = notExpired ? "valid" : hasRefresh ? "expired-will-refresh" : "expired-no-refresh";
3398
3419
  return {
3399
3420
  configured: true,
3400
3421
  connected,
3422
+ connectionState,
3401
3423
  email: typeof creds.email === "string" ? creds.email : void 0,
3402
3424
  displayName: typeof creds.displayName === "string" ? creds.displayName : void 0,
3403
3425
  tokenState,
3404
- updatedAt: typeof creds.updatedAt === "string" ? creds.updatedAt : void 0
3426
+ updatedAt: typeof creds.updatedAt === "string" ? creds.updatedAt : void 0,
3427
+ lastVerifiedAt: typeof lastVerifiedAtMs === "number" ? new Date(lastVerifiedAtMs).toISOString() : void 0,
3428
+ credentialsPath: credsPath
3405
3429
  };
3406
3430
  }
3407
3431
  async function logoutChannelAccount(params) {