switchroom 0.16.29 → 0.16.46

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 (130) hide show
  1. package/dist/agent-scheduler/index.js +101 -84
  2. package/dist/auth-broker/index.js +100 -83
  3. package/dist/cli/autoaccept-poll.js +8 -8
  4. package/dist/cli/drive-write-pretool.mjs +10 -10
  5. package/dist/cli/notion-write-pretool.mjs +102 -85
  6. package/dist/cli/skill-validate-pretool.mjs +91 -91
  7. package/dist/cli/switchroom.js +62124 -60406
  8. package/dist/cli/ui/index.html +877 -214
  9. package/dist/host-control/main.js +1000 -256
  10. package/dist/vault/approvals/kernel-server.js +141 -121
  11. package/dist/vault/broker/server.js +163 -143
  12. package/examples/minimal.yaml +1 -1
  13. package/examples/switchroom.yaml +1 -1
  14. package/package.json +3 -2
  15. package/profiles/_shared/agent-self-service.md.hbs +7 -2
  16. package/profiles/_shared/reply-discipline.md.hbs +9 -0
  17. package/skills/switchroom-status/SKILL.md +1 -1
  18. package/telegram-plugin/auth-snapshot-format.ts +173 -67
  19. package/telegram-plugin/auto-fallback-fleet.ts +3 -6
  20. package/telegram-plugin/bridge/bridge.ts +2 -1
  21. package/telegram-plugin/card-format.ts +59 -3
  22. package/telegram-plugin/credits-watch.ts +4 -7
  23. package/telegram-plugin/dist/bridge/bridge.js +132 -114
  24. package/telegram-plugin/dist/gateway/gateway.js +4456 -1591
  25. package/telegram-plugin/dist/server.js +180 -163
  26. package/telegram-plugin/format.ts +551 -20
  27. package/telegram-plugin/gateway/approval-card.ts +7 -14
  28. package/telegram-plugin/gateway/approvals-commands.ts +6 -9
  29. package/telegram-plugin/gateway/auth-command.ts +35 -38
  30. package/telegram-plugin/gateway/boot-card.ts +7 -2
  31. package/telegram-plugin/gateway/chat-id-fallback.ts +46 -0
  32. package/telegram-plugin/gateway/config-approval-handler.ts +6 -9
  33. package/telegram-plugin/gateway/diff-preview-card.ts +3 -6
  34. package/telegram-plugin/gateway/gateway.ts +1524 -129
  35. package/telegram-plugin/gateway/ipc-protocol.ts +66 -2
  36. package/telegram-plugin/gateway/ipc-server.ts +91 -1
  37. package/telegram-plugin/gateway/linear-activity.ts +2 -5
  38. package/telegram-plugin/gateway/model-command.ts +173 -19
  39. package/telegram-plugin/gateway/obligation-turn-end.ts +27 -0
  40. package/telegram-plugin/gateway/permission-card-store.ts +104 -0
  41. package/telegram-plugin/gateway/permission-timeout.ts +25 -6
  42. package/telegram-plugin/gateway/status-pin-store.ts +302 -0
  43. package/telegram-plugin/gateway/turns-jsonl-rotate.ts +30 -0
  44. package/telegram-plugin/gateway/unhandled-rejection-policy.ts +12 -1
  45. package/telegram-plugin/gateway/vault-grant-inbound-builders.ts +35 -0
  46. package/telegram-plugin/gateway/vault-request-access-card.ts +61 -0
  47. package/telegram-plugin/history.ts +17 -7
  48. package/telegram-plugin/hooks/tool-label-pretool.d.mts +12 -0
  49. package/telegram-plugin/hooks/tool-label-pretool.mjs +54 -16
  50. package/telegram-plugin/idle-footer.ts +2 -2
  51. package/telegram-plugin/issues-card.ts +12 -7
  52. package/telegram-plugin/model-unavailable.ts +3 -6
  53. package/telegram-plugin/operator-events.ts +4 -6
  54. package/telegram-plugin/package.json +1 -1
  55. package/telegram-plugin/quota-check.ts +2 -2
  56. package/telegram-plugin/quota-watch.ts +7 -10
  57. package/telegram-plugin/server.ts +3 -1
  58. package/telegram-plugin/session-tail.ts +47 -1
  59. package/telegram-plugin/status-pin-driver.ts +102 -0
  60. package/telegram-plugin/status-pin.ts +76 -0
  61. package/telegram-plugin/stream-reply-handler.ts +33 -2
  62. package/telegram-plugin/subagent-watcher.ts +6 -3
  63. package/telegram-plugin/tests/always-allow-grant.test.ts +34 -2
  64. package/telegram-plugin/tests/auth-command-format2.test.ts +6 -2
  65. package/telegram-plugin/tests/auth-command-vernacular.test.ts +18 -0
  66. package/telegram-plugin/tests/auth-snapshot-format.test.ts +204 -45
  67. package/telegram-plugin/tests/card-format.test.ts +79 -0
  68. package/telegram-plugin/tests/chat-id-fallback.test.ts +74 -0
  69. package/telegram-plugin/tests/claude-code-event-contract.test.ts +151 -0
  70. package/telegram-plugin/tests/codespan-escaping-golden.test.ts +166 -0
  71. package/telegram-plugin/tests/credits-watch.test.ts +18 -0
  72. package/telegram-plugin/tests/format-consistency.test.ts +223 -0
  73. package/telegram-plugin/tests/formatting-parse-regression.test.ts +272 -0
  74. package/telegram-plugin/tests/formatting-torture-set.ts +218 -0
  75. package/telegram-plugin/tests/history.test.ts +38 -2
  76. package/telegram-plugin/tests/idle-footer.test.ts +53 -9
  77. package/telegram-plugin/tests/ipc-server-validate-rollout-status.test.ts +66 -0
  78. package/telegram-plugin/tests/issues-card.test.ts +24 -0
  79. package/telegram-plugin/tests/model-command.test.ts +213 -47
  80. package/telegram-plugin/tests/obligation-turn-end.test.ts +76 -0
  81. package/telegram-plugin/tests/paragraph-normalizer.test.ts +384 -3
  82. package/telegram-plugin/tests/permission-card-single-edit.test.ts +66 -0
  83. package/telegram-plugin/tests/permission-card-store.test.ts +83 -0
  84. package/telegram-plugin/tests/permission-timeout.test.ts +37 -6
  85. package/telegram-plugin/tests/permission-verdict-resume-guard.test.ts +23 -6
  86. package/telegram-plugin/tests/quota-check.test.ts +9 -2
  87. package/telegram-plugin/tests/quota-watch.test.ts +7 -7
  88. package/telegram-plugin/tests/rich-markdown-oracle.ts +469 -0
  89. package/telegram-plugin/tests/rollout-status-wiring.test.ts +81 -0
  90. package/telegram-plugin/tests/session-tail.test.ts +91 -0
  91. package/telegram-plugin/tests/status-pin-boot-recovery.test.ts +294 -0
  92. package/telegram-plugin/tests/status-pin-service-message-suppression.test.ts +210 -0
  93. package/telegram-plugin/tests/status-pin-store.test.ts +450 -0
  94. package/telegram-plugin/tests/status-pin.test.ts +202 -0
  95. package/telegram-plugin/tests/status-vocabulary-unification.test.ts +125 -0
  96. package/telegram-plugin/tests/stream-reply-handler.test.ts +39 -0
  97. package/telegram-plugin/tests/telegram-format.test.ts +121 -8
  98. package/telegram-plugin/tests/text-voice-scrub.test.ts +142 -22
  99. package/telegram-plugin/tests/tool-activity-summary.test.ts +88 -25
  100. package/telegram-plugin/tests/tts-normalize.test.ts +242 -0
  101. package/telegram-plugin/tests/turns-jsonl-rotate.test.ts +39 -0
  102. package/telegram-plugin/tests/unhandled-rejection-policy.test.ts +12 -0
  103. package/telegram-plugin/tests/vault-grant-inbound-builders.test.ts +54 -0
  104. package/telegram-plugin/tests/vault-request-access-card.test.ts +94 -0
  105. package/telegram-plugin/tests/vault-request-access-tool.test.ts +24 -0
  106. package/telegram-plugin/tests/voice-normalize-text.test.ts +256 -0
  107. package/telegram-plugin/tests/voice-ondemand.test.ts +299 -0
  108. package/telegram-plugin/tests/voice-out-one-send.test.ts +153 -0
  109. package/telegram-plugin/tests/voice-presynth.test.ts +437 -0
  110. package/telegram-plugin/tests/voice-synthesize-sidecar.test.ts +352 -0
  111. package/telegram-plugin/tests/voice-transcribe-sidecar.test.ts +332 -0
  112. package/telegram-plugin/tests/voice-transcribe.test.ts +188 -0
  113. package/telegram-plugin/tests/worker-activity-feed.test.ts +77 -10
  114. package/telegram-plugin/text-voice-scrub.ts +68 -18
  115. package/telegram-plugin/tool-activity-summary.ts +31 -116
  116. package/telegram-plugin/tts-normalize.ts +377 -0
  117. package/telegram-plugin/uat/driver.ts +474 -17
  118. package/telegram-plugin/uat/scenarios/jtbd-model-litellm-sr-dm.test.ts +34 -14
  119. package/telegram-plugin/uat/scenarios/jtbd-multipart-render-dm.test.ts +169 -0
  120. package/telegram-plugin/uat/scenarios/jtbd-narration-intent-dm.test.ts +134 -0
  121. package/telegram-plugin/uat/scenarios/jtbd-rich-formatting-render-dm.test.ts +254 -0
  122. package/telegram-plugin/uat/scenarios/jtbd-status-phase-transitions-dm.test.ts +109 -0
  123. package/telegram-plugin/uat/uat-driver.test.ts +297 -0
  124. package/telegram-plugin/voice-normalize-text.ts +340 -0
  125. package/telegram-plugin/voice-ondemand.ts +289 -0
  126. package/telegram-plugin/voice-presynth.ts +242 -0
  127. package/telegram-plugin/voice-synthesize-sidecar.ts +259 -0
  128. package/telegram-plugin/voice-synthesize.ts +128 -0
  129. package/telegram-plugin/voice-transcribe-sidecar.ts +176 -0
  130. package/telegram-plugin/worker-activity-feed.ts +22 -5
@@ -17,7 +17,7 @@ var __export = (target, all) => {
17
17
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
18
18
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
19
19
 
20
- // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/util.js
20
+ // node_modules/zod/v3/helpers/util.js
21
21
  var util, objectUtil, ZodParsedType, getParsedType = (data) => {
22
22
  const t = typeof data;
23
23
  switch (t) {
@@ -148,7 +148,7 @@ var init_util = __esm(() => {
148
148
  ]);
149
149
  });
150
150
 
151
- // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/ZodError.js
151
+ // node_modules/zod/v3/ZodError.js
152
152
  var ZodIssueCode, quotelessJson = (obj) => {
153
153
  const json = JSON.stringify(obj, null, 2);
154
154
  return json.replace(/"([^"]+)":/g, "$1:");
@@ -269,7 +269,7 @@ var init_ZodError = __esm(() => {
269
269
  };
270
270
  });
271
271
 
272
- // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/locales/en.js
272
+ // node_modules/zod/v3/locales/en.js
273
273
  var errorMap = (issue, _ctx) => {
274
274
  let message;
275
275
  switch (issue.code) {
@@ -376,7 +376,7 @@ var init_en = __esm(() => {
376
376
  en_default = errorMap;
377
377
  });
378
378
 
379
- // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/errors.js
379
+ // node_modules/zod/v3/errors.js
380
380
  function setErrorMap(map) {
381
381
  overrideErrorMap = map;
382
382
  }
@@ -389,7 +389,7 @@ var init_errors = __esm(() => {
389
389
  overrideErrorMap = en_default;
390
390
  });
391
391
 
392
- // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js
392
+ // node_modules/zod/v3/helpers/parseUtil.js
393
393
  function addIssueToContext(ctx, issueData) {
394
394
  const overrideMap = getErrorMap();
395
395
  const issue = makeIssue({
@@ -494,10 +494,10 @@ var init_parseUtil = __esm(() => {
494
494
  });
495
495
  });
496
496
 
497
- // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js
497
+ // node_modules/zod/v3/helpers/typeAliases.js
498
498
  var init_typeAliases = () => {};
499
499
 
500
- // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js
500
+ // node_modules/zod/v3/helpers/errorUtil.js
501
501
  var errorUtil;
502
502
  var init_errorUtil = __esm(() => {
503
503
  (function(errorUtil2) {
@@ -506,7 +506,7 @@ var init_errorUtil = __esm(() => {
506
506
  })(errorUtil || (errorUtil = {}));
507
507
  });
508
508
 
509
- // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/types.js
509
+ // node_modules/zod/v3/types.js
510
510
  class ParseInputLazyPath {
511
511
  constructor(parent, value, path, key) {
512
512
  this._cachedPath = [];
@@ -3857,7 +3857,7 @@ var init_types = __esm(() => {
3857
3857
  NEVER = INVALID;
3858
3858
  });
3859
3859
 
3860
- // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/external.js
3860
+ // node_modules/zod/v3/external.js
3861
3861
  var exports_external = {};
3862
3862
  __export(exports_external, {
3863
3863
  void: () => voidType,
@@ -3977,14 +3977,14 @@ var init_external = __esm(() => {
3977
3977
  init_ZodError();
3978
3978
  });
3979
3979
 
3980
- // node_modules/.bun/zod@3.25.76/node_modules/zod/index.js
3980
+ // node_modules/zod/index.js
3981
3981
  var init_zod = __esm(() => {
3982
3982
  init_external();
3983
3983
  init_external();
3984
3984
  });
3985
3985
 
3986
3986
  // src/config/schema.ts
3987
- var CodeRepoEntrySchema, AgentBindMountSchema, HttpDiffPollSchema, PollSpecSchema, TelegramMessageActionSchema, WebhookActionSchema, ActionSpecSchema, ScheduleEntrySchema, AgentSoulSchema, AgentToolsSchema, AgentMemorySchema, HookEntrySchema, AgentHooksSchema, SubagentSchema, SessionSchema, SessionContinuitySchema, webhookDispatchRule, TelegramChannelSchema, ChannelsSchema, TIMEZONE_REGEX, ApproverIdSchema, GoogleWorkspaceTierSchema, GoogleWorkspaceConfigSchema, LiteLLMConfigSchema, MicrosoftWorkspaceConfigSchema, NotionWorkspaceConfigSchema, AgentGoogleWorkspaceConfigSchema, AgentMicrosoftWorkspaceConfigSchema, AgentNotionWorkspaceConfigSchema, ReactionsSchema, ReactionDispatchSchema, ReleaseBlock, NetworkIsolationSchema, servesField, knowsField, profileFields, ProfileSchema, _omitExtends, defaultsFields, AgentDefaultsSchema, AgentSchema, TelegramConfigSchema, MemoryBackendConfigSchema, VaultConfigSchema, QuotaConfigSchema, AutoReleaseCheckSchema, HostControlConfigSchema, WebServiceConfigSchema, HostdConfigSchema, CronEgressSchema, CronConfigSchema, UserSchema, SwitchroomConfigSchema;
3987
+ var CodeRepoEntrySchema, AgentBindMountSchema, HttpDiffPollSchema, PollSpecSchema, TelegramMessageActionSchema, WebhookActionSchema, ActionSpecSchema, ScheduleEntrySchema, AgentSoulSchema, AgentToolsSchema, AgentMemorySchema, HookEntrySchema, AgentHooksSchema, SubagentSchema, SessionSchema, SessionContinuitySchema, webhookDispatchRule, TelegramChannelSchema, ChannelsSchema, TIMEZONE_REGEX, ApproverIdSchema, GoogleWorkspaceTierSchema, GoogleWorkspaceConfigSchema, LiteLLMConfigSchema, MicrosoftWorkspaceConfigSchema, NotionWorkspaceConfigSchema, AgentGoogleWorkspaceConfigSchema, AgentMicrosoftWorkspaceConfigSchema, AgentNotionWorkspaceConfigSchema, ReactionsSchema, ReactionDispatchSchema, ReleaseBlock, NetworkIsolationSchema, servesField, knowsField, profileFields, ProfileSchema, _omitExtends, defaultsFields, AgentDefaultsSchema, AgentSchema, TelegramConfigSchema, MemoryBackendConfigSchema, VaultConfigSchema, QuotaConfigSchema, AutoReleaseCheckSchema, HostControlConfigSchema, WebServiceConfigSchema, FleetHealthConfigSchema, HostdConfigSchema, CronEgressSchema, CronConfigSchema, UserSchema, SwitchroomConfigSchema;
3988
3988
  var init_schema = __esm(() => {
3989
3989
  init_zod();
3990
3990
  CodeRepoEntrySchema = exports_external.object({
@@ -4180,19 +4180,30 @@ var init_schema = __esm(() => {
4180
4180
  stream_mode: exports_external.enum(["pty", "checklist"]).optional().describe("How live progress is streamed to Telegram during a turn. " + "'pty' (default) surfaces text snapshots of Claude Code's TUI — " + "compatible but can flicker as Ink re-renders. 'checklist' drives " + "a structured progress card from session-tail events — stable " + "order, per-tool status emojis, fires only on semantic transitions."),
4181
4181
  stream_throttle_ms: exports_external.number().int().nonnegative().optional().describe("Throttle window in ms between successive in-place stream edits " + "during a turn. Lower = more responsive stream, higher = fewer API " + "calls. Floored at 250 by draft-stream itself. Default 400 ms for DMs " + "and 1000 ms for groups/forums (respects Telegram's ~1 edit/sec/message " + "practical ceiling). Override per-agent if a particular agent needs " + "snappier or quieter streaming."),
4182
4182
  clear_status_on_completion: exports_external.boolean().optional().describe("When true, the live activity/status feed (the in-place 'what it's " + "doing' message — Reading X, Searching the web for Y, …) is DELETED " + "when the turn's final answer lands, so only the reply remains. " + "Default false: the status message is left in the chat as a record " + "(its last step marked done) — no post-then-delete. Per-agent " + "override; cascades defaults → profile → agent (per-key)."),
4183
+ pin_status_while_working: exports_external.boolean().optional().describe("When true (default), the framework SILENTLY pins the already-" + "rendered status message while its work is in-flight and auto-unpins " + "it on completion — the per-turn activity/status message (foreground) " + "and the '\uD83D\uDEE0 Worker' background-worker message. Keeps in-flight work " + "in view when the conversation scrolls past it (fast turns, stacked " + "background workers, long turns). No new surface is rendered; it pins " + "a message the chat already owns. The pin never buzzes the device. " + "The ONE sanctioned pin under chat-is-the-single-source-of-truth. " + "Set false to disable. Per-agent override; cascades defaults → " + "profile → agent (per-key)."),
4183
4184
  hotReloadStable: exports_external.boolean().optional().describe("If true, the stable workspace prefix (AGENTS.md, SOUL.md, USER.md, " + "IDENTITY.md, TOOLS.md) is re-injected on every turn via " + "the UserPromptSubmit hook instead of baked into --append-system-prompt " + "at session start. Lets workspace edits propagate without a restart. " + "Costs ~5-10% per-turn latency/spend since the stable prefix is no " + "longer prompt-cached."),
4184
4185
  inject_on_change: exports_external.boolean().optional().describe("Context-efficiency gate for per-turn hook injection (default true). " + "When true (the default), the turn-pacing directive and dynamic " + "workspace content are only re-emitted when their content changes or " + "the session_id changes — suppressing redundant injection that " + "otherwise triples compaction frequency. Set to false to revert to " + "the legacy always-emit behaviour (every turn injects the full " + "content regardless of whether it changed)."),
4185
4186
  orphan_promotion_ms: exports_external.number().int().nonnegative().optional().describe("How long (ms) a parent turn waits for a sub-agent JSONL watcher " + "to deliver sub_agent_started before the heartbeat promotes the spawn " + "to a synthesised 'running' row. Default 5000. Set to 0 to disable " + "orphan promotion entirely."),
4186
4187
  cold_sub_agent_threshold_ms: exports_external.number().int().nonnegative().optional().describe("JSONL-cold threshold (ms). When a running sub-agent emits no events " + "for this long, the heartbeat synthesises a turn_end for it so the " + "deferred-completion path can proceed. Default 30000. Set to 0 to " + "disable the synthetic close."),
4187
4188
  deferred_completion_timeout_ms: exports_external.number().int().nonnegative().optional().describe("Force-close timeout (ms) for deferred sub-agent completion. After " + "the parent turn_end arrives while sub-agents are still running, the " + "card is force-closed after this many ms even if sub-agents never " + "finish. Watcher-disconnect safety net. Default 180000 (3 min)."),
4189
+ approval_timeout_minutes: exports_external.number().int().nonnegative().optional().describe("Operator approval-card lifetime (minutes) for the tool-use 'Allow " + "once' card and the vault grant decision wait. After this long with " + "no operator tap, the card auto-denies (a TIMEOUT, not a denial — the " + "agent is told not to retry). Default 60. hostd-gated verbs " + "(mcp__hostd__*) keep their own longer window; the hostd " + "config-propose card is not governed by this key."),
4188
4190
  sub_agent_tick_interval_ms: exports_external.number().int().nonnegative().optional().describe("Heartbeat tick interval (ms) for sub-agent rendering. Forces a " + "re-render of the elapsed-time counter while sub-agents are running, " + "even during silent stretches between tool calls. Default 10000 (10 s). " + "Set to 0 to disable the elapsed-ticker path."),
4189
4191
  edit_budget_threshold: exports_external.number().int().nonnegative().optional().describe("Telegram API edit budget per minute before the progress-card driver " + "falls back to a slower coalesce window. When a chat accumulates more " + "than this many card edits in the trailing 60 s, the driver switches " + "to a wider coalesce interval until the rate drops back. Default 18. " + "Increase if your gateway frequently bumps the Telegram edit-rate ceiling " + "with many parallel sub-agents; decrease for a more conservative buffer."),
4190
4192
  stickers: exports_external.record(exports_external.string(), exports_external.string()).optional().describe("Sticker aliases for the `send_sticker` MCP tool (#576). Maps a " + "short alias name (e.g. 'happy', 'thinking') to a Telegram file_id. " + "Operator-curated — capture file_ids from inbound stickers the user " + "sends and add them here. The agent calls send_sticker(chat_id, " + "alias='happy') and the gateway resolves to the file_id at send " + "time. Aliases enable persona-flavored expressiveness without " + "exposing raw file_ids in the agent prompt. Personal-assistant / " + "health-coach personas benefit; coding agents typically don't " + "configure any."),
4191
4193
  voice_in: exports_external.object({
4192
4194
  enabled: exports_external.boolean().optional().describe("Master switch for voice-message transcription."),
4193
4195
  provider: exports_external.enum(["openai"]).optional().describe("Transcription provider. Only 'openai' (Whisper API) supported in the spike (#578); " + "Groq/Deepgram/local-whisper-cli are follow-up choices."),
4194
- language: exports_external.string().optional().describe("Optional ISO-639-1 language hint (e.g. 'en', 'fr'). Skips Whisper's auto-detection.")
4195
- }).optional().describe("Inbound voice-message transcription (#578). When enabled, voice/audio " + "messages from allowlisted users are downloaded, transcribed via the " + "configured provider, and surface to the agent as the user's text. " + "API key read from ~/.switchroom/openai-api-key (mode 0600). Off by " + "default opt-in per agent. Cascades from defaults.channels.telegram.voice_in. " + "(Migrated from per-agent root in #596 — see consistency unification.)"),
4196
+ language: exports_external.string().optional().describe("Optional ISO-639-1 language hint (e.g. 'en', 'fr'). Skips Whisper's auto-detection."),
4197
+ api_key: exports_external.string().optional().describe("Transcription-provider API key, as a `vault:<key>` reference " + "(e.g. 'vault:openai/api-key' the default if omitted). The " + "gateway resolves it through the vault broker at use-time and " + "never writes the resolved value to disk or the agent prompt. " + "`switchroom enable voice-in` vault-stores the key and writes " + "this reference for you. A literal key is accepted but " + "discouraged keep secrets in the vault.")
4198
+ }).optional().describe("Inbound voice-message transcription (#578). When enabled, voice/audio " + "messages from allowlisted users are downloaded, transcribed via the " + "configured provider, and surface to the agent as the user's text. " + "The provider API key is a `vault:` reference (`api_key`, default " + "`vault:openai/api-key`) resolved through the vault broker at " + "use-time — opt-in third-party key, honest-exception per the " + "subscription-honest outcome. Off by default — opt-in per agent. " + "Cascades from defaults.channels.telegram.voice_in. " + "(Migrated from per-agent root in #596 — see consistency unification.)"),
4199
+ voice_out: exports_external.object({
4200
+ enabled: exports_external.boolean().optional().describe("Master switch for spoken-reply (TTS) voice notes."),
4201
+ engine: exports_external.enum(["kokoro", "openai"]).default("kokoro").describe("Synthesis engine. 'kokoro' = local voice sidecar (POST /tts, " + "subscription-honest, no third-party key); 'openai' = OpenAI TTS " + "cloud (honest-exception, requires an `api_key` vault ref). " + "'kokoro' is only active when the host voice verdict is local " + "(SWITCHROOM_VOICE_ENGINE === 'local'); otherwise voice-out is a " + "no-op and replies stay text-only."),
4202
+ voice: exports_external.string().optional().describe("Engine-specific voice id (e.g. a Kokoro voice name or an OpenAI " + "voice like 'alloy'). Optional — the sidecar/engine has its own " + "default when omitted."),
4203
+ reply_mode: exports_external.enum(["voice+text", "voice-only", "on-demand"]).default("voice+text").describe("How the spoken reply accompanies the text. 'voice+text' sends " + "both the normal text reply and a voice note; 'voice-only' sends " + "the voice note and suppresses the text body. 'on-demand' sends " + "the text reply with a single '\uD83D\uDD0A Listen' inline button and " + "synthesizes NO audio until the user taps it — zero GPU/sidecar " + "work unless requested, which keeps the voice pipeline " + "subscription-honest and visible (nothing is generated behind the " + "user's back). The Listen button is injected ONLY when the reply " + "carries no agent-authored buttons, to avoid colliding with the " + "single_use keyboard-strip that protects agent buttons from " + "double-fire. In every mode the text reply is ALWAYS still sent " + "when synthesis fails or the reply exceeds max_chars — the user's " + "answer is never dropped silently."),
4204
+ max_chars: exports_external.number().int().positive().optional().describe("Per-voice-note chunk size (chars). Default 600; clamped to the " + "engine's hard cap (1200). A reply LONGER than this is NOT truncated " + "to text — it's split on sentence/paragraph boundaries and spoken " + "across several sequential voice notes, so the full answer is heard " + "even when the user can't read the screen (driving / cycling). Lower " + "it for snappier individual notes; raise it (up to 1200) for fewer, " + "longer notes."),
4205
+ api_key: exports_external.string().optional().describe("OpenAI TTS API key as a `vault:<key>` reference (only used when " + "engine='openai'; default 'vault:openai/api-key'). Resolved through " + "the vault broker at use-time and never written to disk or the agent " + "prompt. Ignored for engine='kokoro' (the sidecar needs no key).")
4206
+ }).optional().describe("Outbound spoken replies via TTS (PR-C2). When enabled, the gateway " + "synthesizes the agent's text reply into an OGG/Opus voice note and " + "sends it alongside (or instead of) the text, per reply_mode. The " + "'kokoro' engine uses the local voice sidecar (POST /tts) and is only " + "active when the host voice verdict is local; the 'openai' engine is " + "an honest-exception cloud path gated on an `api_key` vault ref. Voice " + "is best-effort and fully non-fatal — any TTS error falls back to the " + "text reply. Off by default — opt-in per agent. " + "Cascades from defaults.channels.telegram.voice_out."),
4196
4207
  telegraph: exports_external.object({
4197
4208
  enabled: exports_external.boolean().optional().describe("Master switch for Telegraph Instant View publishing."),
4198
4209
  threshold: exports_external.number().int().positive().optional().describe("Char count above which a reply is published to Telegraph instead of " + "HTML-chunked into multiple Telegram messages. Default 3000 (≈3 chunks)."),
@@ -4436,7 +4447,7 @@ var init_schema = __esm(() => {
4436
4447
  secrets: exports_external.array(exports_external.string().regex(/^[a-zA-Z0-9_\-/]+$/, "Secret key names must contain only alphanumeric characters, underscores, hyphens, and forward slashes")).optional(),
4437
4448
  reactions: ReactionsSchema,
4438
4449
  reaction_dispatch: ReactionDispatchSchema,
4439
- model: exports_external.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9._\-/\[\]:]*$/, "Model name must be alphanumeric with ._-/[]: only (no spaces or shell specials)").optional().describe("Claude model override (e.g., 'claude-sonnet-4-6')"),
4450
+ model: exports_external.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9._\-/\[\]:]*$/, "Model name must be alphanumeric with ._-/[]: only (no spaces or shell specials)").optional().describe("Claude model override (e.g., 'claude-sonnet-5')"),
4440
4451
  thinking_effort: exports_external.enum(["low", "medium", "high", "xhigh", "max"]).optional().describe("Adaptive-thinking effort level passed as --effort to the claude CLI. " + "Per-agent override wins over defaults.thinking_effort. " + "lower = faster/cheaper, higher = more reasoning. Omit to use Claude's default."),
4441
4452
  permission_mode: exports_external.enum(["acceptEdits", "auto", "bypassPermissions", "default", "dontAsk", "plan"]).optional().describe("Permission mode passed as --permission-mode to the claude CLI. " + "Per-agent override wins over defaults.permission_mode. " + "Warning: bypassPermissions and dontAsk skip all safety checks — use only in trusted sandboxes."),
4442
4453
  fallback_model: exports_external.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9._\-/\[\]:]*$/, "Fallback model name must be alphanumeric with ._-/[]: only").optional().describe("Fallback model passed as --fallback-model to the claude CLI. " + "Per-agent override wins over defaults.fallback_model. " + "Used when the primary model is overloaded. Note: only functional in --print (non-interactive) mode per Claude CLI docs; silently no-ops in interactive sessions."),
@@ -4567,6 +4578,11 @@ var init_schema = __esm(() => {
4567
4578
  WebServiceConfigSchema = exports_external.object({
4568
4579
  managed: exports_external.boolean().default(false).describe("Whether `switchroom update` refreshes the web-service container " + "(dashboard + GitHub-webhook receiver) via `switchroom webd " + "install`. Default: false — existing installs run the web server " + "as the legacy `switchroom-web.service` systemd unit and must not " + "be surprised by a container takeover of host loopback 127.0.0.1:" + "8080 mid-update. Set true ONLY after cutting over to the " + "container (stop+disable the systemd unit, `switchroom webd " + "install`). The container runs in its own compose project " + "(`switchroom-web`), separate from the agent fleet, with " + "network_mode: host so it keeps owning loopback:8080 for the " + "cloudflared tunnel + tailscale serve consumers.")
4569
4580
  });
4581
+ FleetHealthConfigSchema = exports_external.object({
4582
+ owner_agent: exports_external.string().regex(/^[a-z0-9][a-z0-9_-]{0,50}$/, {
4583
+ message: "owner_agent must match the standard agent-name pattern"
4584
+ }).optional().describe("The admin agent that runs the Fleet Health sensor + deep-dive crons " + "(RFC fleet-health.md). Default unset → the feature is inert: no crons " + "are scheduled and the admin page renders its empty state. The named " + "agent must be admin: true. A dedicated owner (not any admin) keeps " + "the fleet-health work attributable, its memory scoped, and its token " + "spend accountable. The detection runs ONLY as operator-set schedules " + "on this agent — never a self-authored loop (on-leash, " + "no-self-escalation).")
4585
+ });
4570
4586
  HostdConfigSchema = exports_external.object({
4571
4587
  config_edit_enabled: exports_external.boolean().default(false).describe("Opt-in toggle for the `config_propose_edit` hostd verb (RFC " + "admin-agent-config-edit §3). Default false — the verb returns " + "`E_CONFIG_EDIT_DISABLED` until the operator explicitly flips " + "this to true. When true, admin agents can propose unified-diff " + "patches against " + "`/state/config/switchroom.yaml`, gated by an operator approval " + "card in the primary chat. Same trust posture as `update_apply` " + "and `agent_restart`: the human-in-the-loop tap is the security " + "boundary, not the agent's judgement."),
4572
4588
  config_edit_rate_per_hour: exports_external.number().int().min(1).max(20).default(3).describe("Per-requesting-agent rate cap for `config_propose_edit` cards " + "(RFC admin-agent-config-edit §5). Default 3 cards/hour; min 1, " + "max 20. ENFORCED server-side: a caller exceeding this in a sliding " + "1-hour window is rejected with `E_RATE_LIMITED` (carrying a " + "`retry_after` fix) instead of posting another operator approval " + "card — so a looping agent is throttled rather than spamming the chat.")
@@ -4615,6 +4631,7 @@ var init_schema = __esm(() => {
4615
4631
  quota: QuotaConfigSchema.optional().describe("Optional weekly/monthly USD spend budgets rendered in the session " + "greeting. Usage is read from ccusage at runtime; no network calls."),
4616
4632
  host_control: HostControlConfigSchema.default({}).describe("Host-control daemon configuration. Defaults to enabled=true since " + "RFC C Phase 2 (reference/rfcs/host-control-daemon.md). Omit the block " + "to accept defaults; set `enabled: false` only on legacy systemd-" + "mode installs (removal tracked as RFC C Phase 3)."),
4617
4633
  hostd: HostdConfigSchema.default({}).describe("hostd verb-level knobs (RFC admin-agent-config-edit). Distinct " + "from `host_control:` which governs whether the daemon runs at " + "all. Scopes the opt-in flag and rate cap for the " + "`config_propose_edit` verb (disabled by default)."),
4634
+ fleet_health: FleetHealthConfigSchema.default({}).describe("Fleet Health — job-spec-anchored, operator-facing issue tracker (RFC " + "fleet-health.md, serves fleet-stays-healthy). Assigns the owner agent " + "that runs the nightly model-free sensor + weekly deep-dive. Default " + "unset owner_agent → inert; the admin page renders an empty state."),
4618
4635
  web_service: WebServiceConfigSchema.default({}).describe("Web-service container (dashboard + GitHub-webhook receiver) config. " + "Defaults to managed=false so existing systemd-mode installs are " + "untouched. Set managed: true after cutting over to the " + "`switchroom-web` container — then `switchroom update` keeps it " + "refreshed. See `switchroom webd install`."),
4619
4636
  google_accounts: exports_external.record(exports_external.string().regex(/^[^@\s:]+@[^@\s:]+\.[^@\s:]+$/, {
4620
4637
  message: "Account key must be a Google account email like 'alice@example.com' (colons not allowed)"
@@ -5029,7 +5046,42 @@ var init_merge = __esm(() => {
5029
5046
  })(mergeAgentConfig ||= {});
5030
5047
  });
5031
5048
 
5032
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/identity.js
5049
+ // src/config/paths.ts
5050
+ import { existsSync } from "node:fs";
5051
+ import { resolve } from "node:path";
5052
+ function home() {
5053
+ return process.env.HOME ?? "/root";
5054
+ }
5055
+ function warnLegacyStateOnce(legacy) {
5056
+ if (_legacyStateWarned)
5057
+ return;
5058
+ _legacyStateWarned = true;
5059
+ process.stderr.write(`[switchroom] DEPRECATED: reading legacy state from ${legacy}. ` + "Run `mv ~/.clerk ~/.switchroom` (and rename any top-level `clerk:` " + "key in switchroom.yaml to `switchroom:`). This back-compat shim is " + `REMOVED in v0.13.0 — no automatic migration exists.
5060
+ `);
5061
+ }
5062
+ function resolveDualPath(pathStr) {
5063
+ const h = home();
5064
+ if (pathStr.startsWith("~/")) {
5065
+ const rest = pathStr.slice(2);
5066
+ const absolute = resolve(h, rest);
5067
+ if (rest.startsWith(`${DEFAULT_STATE_DIR}/`)) {
5068
+ const frag = rest.slice(DEFAULT_STATE_DIR.length + 1);
5069
+ if (!existsSync(absolute)) {
5070
+ const legacy = resolve(h, LEGACY_STATE_DIR, frag);
5071
+ if (existsSync(legacy)) {
5072
+ warnLegacyStateOnce(legacy);
5073
+ return legacy;
5074
+ }
5075
+ }
5076
+ }
5077
+ return absolute;
5078
+ }
5079
+ return resolve(pathStr);
5080
+ }
5081
+ var DEFAULT_STATE_DIR = ".switchroom", LEGACY_STATE_DIR = ".clerk", _legacyStateWarned = false;
5082
+ var init_paths = () => {};
5083
+
5084
+ // node_modules/yaml/dist/nodes/identity.js
5033
5085
  var require_identity = __commonJS((exports) => {
5034
5086
  var ALIAS = Symbol.for("yaml.alias");
5035
5087
  var DOC = Symbol.for("yaml.document");
@@ -5083,7 +5135,7 @@ var require_identity = __commonJS((exports) => {
5083
5135
  exports.isSeq = isSeq;
5084
5136
  });
5085
5137
 
5086
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/visit.js
5138
+ // node_modules/yaml/dist/visit.js
5087
5139
  var require_visit = __commonJS((exports) => {
5088
5140
  var identity = require_identity();
5089
5141
  var BREAK = Symbol("break visit");
@@ -5238,7 +5290,7 @@ var require_visit = __commonJS((exports) => {
5238
5290
  exports.visitAsync = visitAsync;
5239
5291
  });
5240
5292
 
5241
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/directives.js
5293
+ // node_modules/yaml/dist/doc/directives.js
5242
5294
  var require_directives = __commonJS((exports) => {
5243
5295
  var identity = require_identity();
5244
5296
  var visit = require_visit();
@@ -5390,7 +5442,7 @@ var require_directives = __commonJS((exports) => {
5390
5442
  exports.Directives = Directives;
5391
5443
  });
5392
5444
 
5393
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/anchors.js
5445
+ // node_modules/yaml/dist/doc/anchors.js
5394
5446
  var require_anchors = __commonJS((exports) => {
5395
5447
  var identity = require_identity();
5396
5448
  var visit = require_visit();
@@ -5452,7 +5504,7 @@ var require_anchors = __commonJS((exports) => {
5452
5504
  exports.findNewAnchor = findNewAnchor;
5453
5505
  });
5454
5506
 
5455
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/applyReviver.js
5507
+ // node_modules/yaml/dist/doc/applyReviver.js
5456
5508
  var require_applyReviver = __commonJS((exports) => {
5457
5509
  function applyReviver(reviver, obj, key, val) {
5458
5510
  if (val && typeof val === "object") {
@@ -5499,7 +5551,7 @@ var require_applyReviver = __commonJS((exports) => {
5499
5551
  exports.applyReviver = applyReviver;
5500
5552
  });
5501
5553
 
5502
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/toJS.js
5554
+ // node_modules/yaml/dist/nodes/toJS.js
5503
5555
  var require_toJS = __commonJS((exports) => {
5504
5556
  var identity = require_identity();
5505
5557
  function toJS(value, arg, ctx) {
@@ -5526,7 +5578,7 @@ var require_toJS = __commonJS((exports) => {
5526
5578
  exports.toJS = toJS;
5527
5579
  });
5528
5580
 
5529
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Node.js
5581
+ // node_modules/yaml/dist/nodes/Node.js
5530
5582
  var require_Node = __commonJS((exports) => {
5531
5583
  var applyReviver = require_applyReviver();
5532
5584
  var identity = require_identity();
@@ -5563,7 +5615,7 @@ var require_Node = __commonJS((exports) => {
5563
5615
  exports.NodeBase = NodeBase;
5564
5616
  });
5565
5617
 
5566
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Alias.js
5618
+ // node_modules/yaml/dist/nodes/Alias.js
5567
5619
  var require_Alias = __commonJS((exports) => {
5568
5620
  var anchors = require_anchors();
5569
5621
  var visit = require_visit();
@@ -5671,7 +5723,7 @@ var require_Alias = __commonJS((exports) => {
5671
5723
  exports.Alias = Alias;
5672
5724
  });
5673
5725
 
5674
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Scalar.js
5726
+ // node_modules/yaml/dist/nodes/Scalar.js
5675
5727
  var require_Scalar = __commonJS((exports) => {
5676
5728
  var identity = require_identity();
5677
5729
  var Node = require_Node();
@@ -5699,7 +5751,7 @@ var require_Scalar = __commonJS((exports) => {
5699
5751
  exports.isScalarValue = isScalarValue;
5700
5752
  });
5701
5753
 
5702
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/createNode.js
5754
+ // node_modules/yaml/dist/doc/createNode.js
5703
5755
  var require_createNode = __commonJS((exports) => {
5704
5756
  var Alias = require_Alias();
5705
5757
  var identity = require_identity();
@@ -5771,7 +5823,7 @@ var require_createNode = __commonJS((exports) => {
5771
5823
  exports.createNode = createNode;
5772
5824
  });
5773
5825
 
5774
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Collection.js
5826
+ // node_modules/yaml/dist/nodes/Collection.js
5775
5827
  var require_Collection = __commonJS((exports) => {
5776
5828
  var createNode = require_createNode();
5777
5829
  var identity = require_identity();
@@ -5886,7 +5938,7 @@ var require_Collection = __commonJS((exports) => {
5886
5938
  exports.isEmptyPath = isEmptyPath;
5887
5939
  });
5888
5940
 
5889
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyComment.js
5941
+ // node_modules/yaml/dist/stringify/stringifyComment.js
5890
5942
  var require_stringifyComment = __commonJS((exports) => {
5891
5943
  var stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, "#");
5892
5944
  function indentComment(comment, indent) {
@@ -5903,7 +5955,7 @@ var require_stringifyComment = __commonJS((exports) => {
5903
5955
  exports.stringifyComment = stringifyComment;
5904
5956
  });
5905
5957
 
5906
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/foldFlowLines.js
5958
+ // node_modules/yaml/dist/stringify/foldFlowLines.js
5907
5959
  var require_foldFlowLines = __commonJS((exports) => {
5908
5960
  var FOLD_FLOW = "flow";
5909
5961
  var FOLD_BLOCK = "block";
@@ -6040,7 +6092,7 @@ ${indent}${text.slice(fold + 1, end2)}`;
6040
6092
  exports.foldFlowLines = foldFlowLines;
6041
6093
  });
6042
6094
 
6043
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyString.js
6095
+ // node_modules/yaml/dist/stringify/stringifyString.js
6044
6096
  var require_stringifyString = __commonJS((exports) => {
6045
6097
  var Scalar = require_Scalar();
6046
6098
  var foldFlowLines = require_foldFlowLines();
@@ -6338,7 +6390,7 @@ ${indent}`);
6338
6390
  exports.stringifyString = stringifyString;
6339
6391
  });
6340
6392
 
6341
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringify.js
6393
+ // node_modules/yaml/dist/stringify/stringify.js
6342
6394
  var require_stringify = __commonJS((exports) => {
6343
6395
  var anchors = require_anchors();
6344
6396
  var identity = require_identity();
@@ -6459,7 +6511,7 @@ ${ctx.indent}${str}`;
6459
6511
  exports.stringify = stringify;
6460
6512
  });
6461
6513
 
6462
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyPair.js
6514
+ // node_modules/yaml/dist/stringify/stringifyPair.js
6463
6515
  var require_stringifyPair = __commonJS((exports) => {
6464
6516
  var identity = require_identity();
6465
6517
  var Scalar = require_Scalar();
@@ -6595,7 +6647,7 @@ ${ctx.indent}`;
6595
6647
  exports.stringifyPair = stringifyPair;
6596
6648
  });
6597
6649
 
6598
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/log.js
6650
+ // node_modules/yaml/dist/log.js
6599
6651
  var require_log = __commonJS((exports) => {
6600
6652
  var node_process = __require("process");
6601
6653
  function debug(logLevel, ...messages) {
@@ -6614,7 +6666,7 @@ var require_log = __commonJS((exports) => {
6614
6666
  exports.warn = warn;
6615
6667
  });
6616
6668
 
6617
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/merge.js
6669
+ // node_modules/yaml/dist/schema/yaml-1.1/merge.js
6618
6670
  var require_merge = __commonJS((exports) => {
6619
6671
  var identity = require_identity();
6620
6672
  var Scalar = require_Scalar();
@@ -6668,7 +6720,7 @@ var require_merge = __commonJS((exports) => {
6668
6720
  exports.merge = merge;
6669
6721
  });
6670
6722
 
6671
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/addPairToJSMap.js
6723
+ // node_modules/yaml/dist/nodes/addPairToJSMap.js
6672
6724
  var require_addPairToJSMap = __commonJS((exports) => {
6673
6725
  var log = require_log();
6674
6726
  var merge = require_merge();
@@ -6729,7 +6781,7 @@ var require_addPairToJSMap = __commonJS((exports) => {
6729
6781
  exports.addPairToJSMap = addPairToJSMap;
6730
6782
  });
6731
6783
 
6732
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Pair.js
6784
+ // node_modules/yaml/dist/nodes/Pair.js
6733
6785
  var require_Pair = __commonJS((exports) => {
6734
6786
  var createNode = require_createNode();
6735
6787
  var stringifyPair = require_stringifyPair();
@@ -6767,7 +6819,7 @@ var require_Pair = __commonJS((exports) => {
6767
6819
  exports.createPair = createPair;
6768
6820
  });
6769
6821
 
6770
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyCollection.js
6822
+ // node_modules/yaml/dist/stringify/stringifyCollection.js
6771
6823
  var require_stringifyCollection = __commonJS((exports) => {
6772
6824
  var identity = require_identity();
6773
6825
  var stringify = require_stringify();
@@ -6919,7 +6971,7 @@ ${indent}${end}`;
6919
6971
  exports.stringifyCollection = stringifyCollection;
6920
6972
  });
6921
6973
 
6922
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLMap.js
6974
+ // node_modules/yaml/dist/nodes/YAMLMap.js
6923
6975
  var require_YAMLMap = __commonJS((exports) => {
6924
6976
  var stringifyCollection = require_stringifyCollection();
6925
6977
  var addPairToJSMap = require_addPairToJSMap();
@@ -7046,7 +7098,7 @@ var require_YAMLMap = __commonJS((exports) => {
7046
7098
  exports.findPair = findPair;
7047
7099
  });
7048
7100
 
7049
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/map.js
7101
+ // node_modules/yaml/dist/schema/common/map.js
7050
7102
  var require_map = __commonJS((exports) => {
7051
7103
  var identity = require_identity();
7052
7104
  var YAMLMap = require_YAMLMap();
@@ -7065,7 +7117,7 @@ var require_map = __commonJS((exports) => {
7065
7117
  exports.map = map;
7066
7118
  });
7067
7119
 
7068
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLSeq.js
7120
+ // node_modules/yaml/dist/nodes/YAMLSeq.js
7069
7121
  var require_YAMLSeq = __commonJS((exports) => {
7070
7122
  var createNode = require_createNode();
7071
7123
  var stringifyCollection = require_stringifyCollection();
@@ -7158,7 +7210,7 @@ var require_YAMLSeq = __commonJS((exports) => {
7158
7210
  exports.YAMLSeq = YAMLSeq;
7159
7211
  });
7160
7212
 
7161
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/seq.js
7213
+ // node_modules/yaml/dist/schema/common/seq.js
7162
7214
  var require_seq = __commonJS((exports) => {
7163
7215
  var identity = require_identity();
7164
7216
  var YAMLSeq = require_YAMLSeq();
@@ -7177,7 +7229,7 @@ var require_seq = __commonJS((exports) => {
7177
7229
  exports.seq = seq;
7178
7230
  });
7179
7231
 
7180
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/string.js
7232
+ // node_modules/yaml/dist/schema/common/string.js
7181
7233
  var require_string = __commonJS((exports) => {
7182
7234
  var stringifyString = require_stringifyString();
7183
7235
  var string = {
@@ -7193,7 +7245,7 @@ var require_string = __commonJS((exports) => {
7193
7245
  exports.string = string;
7194
7246
  });
7195
7247
 
7196
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/null.js
7248
+ // node_modules/yaml/dist/schema/common/null.js
7197
7249
  var require_null = __commonJS((exports) => {
7198
7250
  var Scalar = require_Scalar();
7199
7251
  var nullTag = {
@@ -7208,7 +7260,7 @@ var require_null = __commonJS((exports) => {
7208
7260
  exports.nullTag = nullTag;
7209
7261
  });
7210
7262
 
7211
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/bool.js
7263
+ // node_modules/yaml/dist/schema/core/bool.js
7212
7264
  var require_bool = __commonJS((exports) => {
7213
7265
  var Scalar = require_Scalar();
7214
7266
  var boolTag = {
@@ -7229,7 +7281,7 @@ var require_bool = __commonJS((exports) => {
7229
7281
  exports.boolTag = boolTag;
7230
7282
  });
7231
7283
 
7232
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyNumber.js
7284
+ // node_modules/yaml/dist/stringify/stringifyNumber.js
7233
7285
  var require_stringifyNumber = __commonJS((exports) => {
7234
7286
  function stringifyNumber({ format, minFractionDigits, tag, value }) {
7235
7287
  if (typeof value === "bigint")
@@ -7253,7 +7305,7 @@ var require_stringifyNumber = __commonJS((exports) => {
7253
7305
  exports.stringifyNumber = stringifyNumber;
7254
7306
  });
7255
7307
 
7256
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/float.js
7308
+ // node_modules/yaml/dist/schema/core/float.js
7257
7309
  var require_float = __commonJS((exports) => {
7258
7310
  var Scalar = require_Scalar();
7259
7311
  var stringifyNumber = require_stringifyNumber();
@@ -7296,7 +7348,7 @@ var require_float = __commonJS((exports) => {
7296
7348
  exports.floatNaN = floatNaN;
7297
7349
  });
7298
7350
 
7299
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/int.js
7351
+ // node_modules/yaml/dist/schema/core/int.js
7300
7352
  var require_int = __commonJS((exports) => {
7301
7353
  var stringifyNumber = require_stringifyNumber();
7302
7354
  var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -7338,7 +7390,7 @@ var require_int = __commonJS((exports) => {
7338
7390
  exports.intOct = intOct;
7339
7391
  });
7340
7392
 
7341
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/schema.js
7393
+ // node_modules/yaml/dist/schema/core/schema.js
7342
7394
  var require_schema = __commonJS((exports) => {
7343
7395
  var map = require_map();
7344
7396
  var _null = require_null();
@@ -7363,7 +7415,7 @@ var require_schema = __commonJS((exports) => {
7363
7415
  exports.schema = schema;
7364
7416
  });
7365
7417
 
7366
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/json/schema.js
7418
+ // node_modules/yaml/dist/schema/json/schema.js
7367
7419
  var require_schema2 = __commonJS((exports) => {
7368
7420
  var Scalar = require_Scalar();
7369
7421
  var map = require_map();
@@ -7427,7 +7479,7 @@ var require_schema2 = __commonJS((exports) => {
7427
7479
  exports.schema = schema;
7428
7480
  });
7429
7481
 
7430
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/binary.js
7482
+ // node_modules/yaml/dist/schema/yaml-1.1/binary.js
7431
7483
  var require_binary = __commonJS((exports) => {
7432
7484
  var node_buffer = __require("buffer");
7433
7485
  var Scalar = require_Scalar();
@@ -7482,7 +7534,7 @@ var require_binary = __commonJS((exports) => {
7482
7534
  exports.binary = binary;
7483
7535
  });
7484
7536
 
7485
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
7537
+ // node_modules/yaml/dist/schema/yaml-1.1/pairs.js
7486
7538
  var require_pairs = __commonJS((exports) => {
7487
7539
  var identity = require_identity();
7488
7540
  var Pair = require_Pair();
@@ -7557,7 +7609,7 @@ ${cn.comment}` : item.comment;
7557
7609
  exports.resolvePairs = resolvePairs;
7558
7610
  });
7559
7611
 
7560
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/omap.js
7612
+ // node_modules/yaml/dist/schema/yaml-1.1/omap.js
7561
7613
  var require_omap = __commonJS((exports) => {
7562
7614
  var identity = require_identity();
7563
7615
  var toJS = require_toJS();
@@ -7629,7 +7681,7 @@ var require_omap = __commonJS((exports) => {
7629
7681
  exports.omap = omap;
7630
7682
  });
7631
7683
 
7632
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/bool.js
7684
+ // node_modules/yaml/dist/schema/yaml-1.1/bool.js
7633
7685
  var require_bool2 = __commonJS((exports) => {
7634
7686
  var Scalar = require_Scalar();
7635
7687
  function boolStringify({ value, source }, ctx) {
@@ -7658,7 +7710,7 @@ var require_bool2 = __commonJS((exports) => {
7658
7710
  exports.trueTag = trueTag;
7659
7711
  });
7660
7712
 
7661
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/float.js
7713
+ // node_modules/yaml/dist/schema/yaml-1.1/float.js
7662
7714
  var require_float2 = __commonJS((exports) => {
7663
7715
  var Scalar = require_Scalar();
7664
7716
  var stringifyNumber = require_stringifyNumber();
@@ -7704,7 +7756,7 @@ var require_float2 = __commonJS((exports) => {
7704
7756
  exports.floatNaN = floatNaN;
7705
7757
  });
7706
7758
 
7707
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/int.js
7759
+ // node_modules/yaml/dist/schema/yaml-1.1/int.js
7708
7760
  var require_int2 = __commonJS((exports) => {
7709
7761
  var stringifyNumber = require_stringifyNumber();
7710
7762
  var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -7780,7 +7832,7 @@ var require_int2 = __commonJS((exports) => {
7780
7832
  exports.intOct = intOct;
7781
7833
  });
7782
7834
 
7783
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/set.js
7835
+ // node_modules/yaml/dist/schema/yaml-1.1/set.js
7784
7836
  var require_set = __commonJS((exports) => {
7785
7837
  var identity = require_identity();
7786
7838
  var Pair = require_Pair();
@@ -7863,7 +7915,7 @@ var require_set = __commonJS((exports) => {
7863
7915
  exports.set = set;
7864
7916
  });
7865
7917
 
7866
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
7918
+ // node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
7867
7919
  var require_timestamp = __commonJS((exports) => {
7868
7920
  var stringifyNumber = require_stringifyNumber();
7869
7921
  function parseSexagesimal(str, asBigInt) {
@@ -7945,7 +7997,7 @@ var require_timestamp = __commonJS((exports) => {
7945
7997
  exports.timestamp = timestamp;
7946
7998
  });
7947
7999
 
7948
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/schema.js
8000
+ // node_modules/yaml/dist/schema/yaml-1.1/schema.js
7949
8001
  var require_schema3 = __commonJS((exports) => {
7950
8002
  var map = require_map();
7951
8003
  var _null = require_null();
@@ -7986,7 +8038,7 @@ var require_schema3 = __commonJS((exports) => {
7986
8038
  exports.schema = schema;
7987
8039
  });
7988
8040
 
7989
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/tags.js
8041
+ // node_modules/yaml/dist/schema/tags.js
7990
8042
  var require_tags = __commonJS((exports) => {
7991
8043
  var map = require_map();
7992
8044
  var _null = require_null();
@@ -8077,7 +8129,7 @@ var require_tags = __commonJS((exports) => {
8077
8129
  exports.getTags = getTags;
8078
8130
  });
8079
8131
 
8080
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/Schema.js
8132
+ // node_modules/yaml/dist/schema/Schema.js
8081
8133
  var require_Schema = __commonJS((exports) => {
8082
8134
  var identity = require_identity();
8083
8135
  var map = require_map();
@@ -8107,7 +8159,7 @@ var require_Schema = __commonJS((exports) => {
8107
8159
  exports.Schema = Schema;
8108
8160
  });
8109
8161
 
8110
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyDocument.js
8162
+ // node_modules/yaml/dist/stringify/stringifyDocument.js
8111
8163
  var require_stringifyDocument = __commonJS((exports) => {
8112
8164
  var identity = require_identity();
8113
8165
  var stringify = require_stringify();
@@ -8187,7 +8239,7 @@ var require_stringifyDocument = __commonJS((exports) => {
8187
8239
  exports.stringifyDocument = stringifyDocument;
8188
8240
  });
8189
8241
 
8190
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/Document.js
8242
+ // node_modules/yaml/dist/doc/Document.js
8191
8243
  var require_Document = __commonJS((exports) => {
8192
8244
  var Alias = require_Alias();
8193
8245
  var Collection = require_Collection();
@@ -8422,7 +8474,7 @@ var require_Document = __commonJS((exports) => {
8422
8474
  exports.Document = Document;
8423
8475
  });
8424
8476
 
8425
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/errors.js
8477
+ // node_modules/yaml/dist/errors.js
8426
8478
  var require_errors = __commonJS((exports) => {
8427
8479
  class YAMLError extends Error {
8428
8480
  constructor(name, pos, code, message) {
@@ -8487,7 +8539,7 @@ ${pointer}
8487
8539
  exports.prettifyError = prettifyError;
8488
8540
  });
8489
8541
 
8490
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-props.js
8542
+ // node_modules/yaml/dist/compose/resolve-props.js
8491
8543
  var require_resolve_props = __commonJS((exports) => {
8492
8544
  function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
8493
8545
  let spaceBefore = false;
@@ -8617,7 +8669,7 @@ var require_resolve_props = __commonJS((exports) => {
8617
8669
  exports.resolveProps = resolveProps;
8618
8670
  });
8619
8671
 
8620
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-contains-newline.js
8672
+ // node_modules/yaml/dist/compose/util-contains-newline.js
8621
8673
  var require_util_contains_newline = __commonJS((exports) => {
8622
8674
  function containsNewline(key) {
8623
8675
  if (!key)
@@ -8657,7 +8709,7 @@ var require_util_contains_newline = __commonJS((exports) => {
8657
8709
  exports.containsNewline = containsNewline;
8658
8710
  });
8659
8711
 
8660
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-flow-indent-check.js
8712
+ // node_modules/yaml/dist/compose/util-flow-indent-check.js
8661
8713
  var require_util_flow_indent_check = __commonJS((exports) => {
8662
8714
  var utilContainsNewline = require_util_contains_newline();
8663
8715
  function flowIndentCheck(indent, fc, onError) {
@@ -8672,7 +8724,7 @@ var require_util_flow_indent_check = __commonJS((exports) => {
8672
8724
  exports.flowIndentCheck = flowIndentCheck;
8673
8725
  });
8674
8726
 
8675
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-map-includes.js
8727
+ // node_modules/yaml/dist/compose/util-map-includes.js
8676
8728
  var require_util_map_includes = __commonJS((exports) => {
8677
8729
  var identity = require_identity();
8678
8730
  function mapIncludes(ctx, items, search) {
@@ -8685,7 +8737,7 @@ var require_util_map_includes = __commonJS((exports) => {
8685
8737
  exports.mapIncludes = mapIncludes;
8686
8738
  });
8687
8739
 
8688
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-map.js
8740
+ // node_modules/yaml/dist/compose/resolve-block-map.js
8689
8741
  var require_resolve_block_map = __commonJS((exports) => {
8690
8742
  var Pair = require_Pair();
8691
8743
  var YAMLMap = require_YAMLMap();
@@ -8792,7 +8844,7 @@ var require_resolve_block_map = __commonJS((exports) => {
8792
8844
  exports.resolveBlockMap = resolveBlockMap;
8793
8845
  });
8794
8846
 
8795
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-seq.js
8847
+ // node_modules/yaml/dist/compose/resolve-block-seq.js
8796
8848
  var require_resolve_block_seq = __commonJS((exports) => {
8797
8849
  var YAMLSeq = require_YAMLSeq();
8798
8850
  var resolveProps = require_resolve_props();
@@ -8840,7 +8892,7 @@ var require_resolve_block_seq = __commonJS((exports) => {
8840
8892
  exports.resolveBlockSeq = resolveBlockSeq;
8841
8893
  });
8842
8894
 
8843
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-end.js
8895
+ // node_modules/yaml/dist/compose/resolve-end.js
8844
8896
  var require_resolve_end = __commonJS((exports) => {
8845
8897
  function resolveEnd(end, offset, reqSpace, onError) {
8846
8898
  let comment = "";
@@ -8880,7 +8932,7 @@ var require_resolve_end = __commonJS((exports) => {
8880
8932
  exports.resolveEnd = resolveEnd;
8881
8933
  });
8882
8934
 
8883
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-collection.js
8935
+ // node_modules/yaml/dist/compose/resolve-flow-collection.js
8884
8936
  var require_resolve_flow_collection = __commonJS((exports) => {
8885
8937
  var identity = require_identity();
8886
8938
  var Pair = require_Pair();
@@ -9071,7 +9123,7 @@ var require_resolve_flow_collection = __commonJS((exports) => {
9071
9123
  exports.resolveFlowCollection = resolveFlowCollection;
9072
9124
  });
9073
9125
 
9074
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-collection.js
9126
+ // node_modules/yaml/dist/compose/compose-collection.js
9075
9127
  var require_compose_collection = __commonJS((exports) => {
9076
9128
  var identity = require_identity();
9077
9129
  var Scalar = require_Scalar();
@@ -9133,7 +9185,7 @@ var require_compose_collection = __commonJS((exports) => {
9133
9185
  exports.composeCollection = composeCollection;
9134
9186
  });
9135
9187
 
9136
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-scalar.js
9188
+ // node_modules/yaml/dist/compose/resolve-block-scalar.js
9137
9189
  var require_resolve_block_scalar = __commonJS((exports) => {
9138
9190
  var Scalar = require_Scalar();
9139
9191
  function resolveBlockScalar(ctx, scalar, onError) {
@@ -9326,7 +9378,7 @@ var require_resolve_block_scalar = __commonJS((exports) => {
9326
9378
  exports.resolveBlockScalar = resolveBlockScalar;
9327
9379
  });
9328
9380
 
9329
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-scalar.js
9381
+ // node_modules/yaml/dist/compose/resolve-flow-scalar.js
9330
9382
  var require_resolve_flow_scalar = __commonJS((exports) => {
9331
9383
  var Scalar = require_Scalar();
9332
9384
  var resolveEnd = require_resolve_end();
@@ -9542,7 +9594,7 @@ var require_resolve_flow_scalar = __commonJS((exports) => {
9542
9594
  exports.resolveFlowScalar = resolveFlowScalar;
9543
9595
  });
9544
9596
 
9545
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-scalar.js
9597
+ // node_modules/yaml/dist/compose/compose-scalar.js
9546
9598
  var require_compose_scalar = __commonJS((exports) => {
9547
9599
  var identity = require_identity();
9548
9600
  var Scalar = require_Scalar();
@@ -9620,7 +9672,7 @@ var require_compose_scalar = __commonJS((exports) => {
9620
9672
  exports.composeScalar = composeScalar;
9621
9673
  });
9622
9674
 
9623
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-empty-scalar-position.js
9675
+ // node_modules/yaml/dist/compose/util-empty-scalar-position.js
9624
9676
  var require_util_empty_scalar_position = __commonJS((exports) => {
9625
9677
  function emptyScalarPosition(offset, before, pos) {
9626
9678
  if (before) {
@@ -9647,7 +9699,7 @@ var require_util_empty_scalar_position = __commonJS((exports) => {
9647
9699
  exports.emptyScalarPosition = emptyScalarPosition;
9648
9700
  });
9649
9701
 
9650
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-node.js
9702
+ // node_modules/yaml/dist/compose/compose-node.js
9651
9703
  var require_compose_node = __commonJS((exports) => {
9652
9704
  var Alias = require_Alias();
9653
9705
  var identity = require_identity();
@@ -9750,7 +9802,7 @@ var require_compose_node = __commonJS((exports) => {
9750
9802
  exports.composeNode = composeNode;
9751
9803
  });
9752
9804
 
9753
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-doc.js
9805
+ // node_modules/yaml/dist/compose/compose-doc.js
9754
9806
  var require_compose_doc = __commonJS((exports) => {
9755
9807
  var Document = require_Document();
9756
9808
  var composeNode = require_compose_node();
@@ -9790,7 +9842,7 @@ var require_compose_doc = __commonJS((exports) => {
9790
9842
  exports.composeDoc = composeDoc;
9791
9843
  });
9792
9844
 
9793
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/composer.js
9845
+ // node_modules/yaml/dist/compose/composer.js
9794
9846
  var require_composer = __commonJS((exports) => {
9795
9847
  var node_process = __require("process");
9796
9848
  var directives = require_directives();
@@ -9979,7 +10031,7 @@ ${end.comment}` : end.comment;
9979
10031
  exports.Composer = Composer;
9980
10032
  });
9981
10033
 
9982
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-scalar.js
10034
+ // node_modules/yaml/dist/parse/cst-scalar.js
9983
10035
  var require_cst_scalar = __commonJS((exports) => {
9984
10036
  var resolveBlockScalar = require_resolve_block_scalar();
9985
10037
  var resolveFlowScalar = require_resolve_flow_scalar();
@@ -10169,7 +10221,7 @@ var require_cst_scalar = __commonJS((exports) => {
10169
10221
  exports.setScalarValue = setScalarValue;
10170
10222
  });
10171
10223
 
10172
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-stringify.js
10224
+ // node_modules/yaml/dist/parse/cst-stringify.js
10173
10225
  var require_cst_stringify = __commonJS((exports) => {
10174
10226
  var stringify = (cst) => ("type" in cst) ? stringifyToken(cst) : stringifyItem(cst);
10175
10227
  function stringifyToken(token) {
@@ -10227,7 +10279,7 @@ var require_cst_stringify = __commonJS((exports) => {
10227
10279
  exports.stringify = stringify;
10228
10280
  });
10229
10281
 
10230
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-visit.js
10282
+ // node_modules/yaml/dist/parse/cst-visit.js
10231
10283
  var require_cst_visit = __commonJS((exports) => {
10232
10284
  var BREAK = Symbol("break visit");
10233
10285
  var SKIP = Symbol("skip children");
@@ -10286,7 +10338,7 @@ var require_cst_visit = __commonJS((exports) => {
10286
10338
  exports.visit = visit;
10287
10339
  });
10288
10340
 
10289
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst.js
10341
+ // node_modules/yaml/dist/parse/cst.js
10290
10342
  var require_cst = __commonJS((exports) => {
10291
10343
  var cstScalar = require_cst_scalar();
10292
10344
  var cstStringify = require_cst_stringify();
@@ -10387,7 +10439,7 @@ var require_cst = __commonJS((exports) => {
10387
10439
  exports.tokenType = tokenType;
10388
10440
  });
10389
10441
 
10390
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/lexer.js
10442
+ // node_modules/yaml/dist/parse/lexer.js
10391
10443
  var require_lexer = __commonJS((exports) => {
10392
10444
  var cst = require_cst();
10393
10445
  function isEmpty(ch) {
@@ -10973,7 +11025,7 @@ var require_lexer = __commonJS((exports) => {
10973
11025
  exports.Lexer = Lexer;
10974
11026
  });
10975
11027
 
10976
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/line-counter.js
11028
+ // node_modules/yaml/dist/parse/line-counter.js
10977
11029
  var require_line_counter = __commonJS((exports) => {
10978
11030
  class LineCounter {
10979
11031
  constructor() {
@@ -11001,7 +11053,7 @@ var require_line_counter = __commonJS((exports) => {
11001
11053
  exports.LineCounter = LineCounter;
11002
11054
  });
11003
11055
 
11004
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/parser.js
11056
+ // node_modules/yaml/dist/parse/parser.js
11005
11057
  var require_parser = __commonJS((exports) => {
11006
11058
  var node_process = __require("process");
11007
11059
  var cst = require_cst();
@@ -11850,7 +11902,7 @@ var require_parser = __commonJS((exports) => {
11850
11902
  exports.Parser = Parser;
11851
11903
  });
11852
11904
 
11853
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/public-api.js
11905
+ // node_modules/yaml/dist/public-api.js
11854
11906
  var require_public_api = __commonJS((exports) => {
11855
11907
  var composer = require_composer();
11856
11908
  var Document = require_Document();
@@ -11944,7 +11996,7 @@ var require_public_api = __commonJS((exports) => {
11944
11996
  exports.stringify = stringify;
11945
11997
  });
11946
11998
 
11947
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/index.js
11999
+ // node_modules/yaml/dist/index.js
11948
12000
  var composer, Document, Schema, errors2, Alias, identity, Pair, Scalar, YAMLMap, YAMLSeq, cst, lexer, lineCounter, parser, publicApi, visit, $Composer, $Document, $Schema, $YAMLError, $YAMLParseError, $YAMLWarning, $Alias, $isAlias, $isCollection, $isDocument, $isMap, $isNode, $isPair, $isScalar, $isSeq, $Pair, $Scalar, $YAMLMap, $YAMLSeq, $Lexer, $LineCounter, $Parser, $parse, $parseAllDocuments, $parseDocument, $stringify, $visit, $visitAsync;
11949
12001
  var init_dist = __esm(() => {
11950
12002
  composer = require_composer();
@@ -11993,41 +12045,6 @@ var init_dist = __esm(() => {
11993
12045
  $visitAsync = visit.visitAsync;
11994
12046
  });
11995
12047
 
11996
- // src/config/paths.ts
11997
- import { existsSync } from "node:fs";
11998
- import { resolve } from "node:path";
11999
- function home() {
12000
- return process.env.HOME ?? "/root";
12001
- }
12002
- function warnLegacyStateOnce(legacy) {
12003
- if (_legacyStateWarned)
12004
- return;
12005
- _legacyStateWarned = true;
12006
- process.stderr.write(`[switchroom] DEPRECATED: reading legacy state from ${legacy}. ` + "Run `mv ~/.clerk ~/.switchroom` (and rename any top-level `clerk:` " + "key in switchroom.yaml to `switchroom:`). This back-compat shim is " + `REMOVED in v0.13.0 — no automatic migration exists.
12007
- `);
12008
- }
12009
- function resolveDualPath(pathStr) {
12010
- const h = home();
12011
- if (pathStr.startsWith("~/")) {
12012
- const rest = pathStr.slice(2);
12013
- const absolute = resolve(h, rest);
12014
- if (rest.startsWith(`${DEFAULT_STATE_DIR}/`)) {
12015
- const frag = rest.slice(DEFAULT_STATE_DIR.length + 1);
12016
- if (!existsSync(absolute)) {
12017
- const legacy = resolve(h, LEGACY_STATE_DIR, frag);
12018
- if (existsSync(legacy)) {
12019
- warnLegacyStateOnce(legacy);
12020
- return legacy;
12021
- }
12022
- }
12023
- }
12024
- return absolute;
12025
- }
12026
- return resolve(pathStr);
12027
- }
12028
- var DEFAULT_STATE_DIR = ".switchroom", LEGACY_STATE_DIR = ".clerk", _legacyStateWarned = false;
12029
- var init_paths = () => {};
12030
-
12031
12048
  // src/config/overlay-schema.ts
12032
12049
  var OverlayDocSchema;
12033
12050
  var init_overlay_schema = __esm(() => {
@@ -13182,6 +13199,9 @@ var DEFAULT_RETAIN_MISSION = "Extract user preferences, ongoing projects, recurr
13182
13199
  // src/agents/reconcile-default-skills.ts
13183
13200
  var warnedMissingPool = new Set;
13184
13201
 
13202
+ // src/setup/host-capabilities.ts
13203
+ init_paths();
13204
+
13185
13205
  // src/agents/compose.ts
13186
13206
  var AGENT_UID_MIN = 10001;
13187
13207
  var AGENT_UID_MAX = 10999;