switchroom 0.15.37 → 0.15.39

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 (73) hide show
  1. package/dist/agent-scheduler/index.js +89 -89
  2. package/dist/auth-broker/index.js +89 -89
  3. package/dist/cli/autoaccept-poll.js +13 -7
  4. package/dist/cli/drive-write-pretool.mjs +10 -10
  5. package/dist/cli/notion-write-pretool.mjs +91 -91
  6. package/dist/cli/skill-validate-pretool.mjs +72 -72
  7. package/dist/cli/switchroom.js +857 -572
  8. package/dist/cli/ui/index.html +87 -17
  9. package/dist/host-control/main.js +158 -158
  10. package/dist/vault/approvals/kernel-server.js +91 -91
  11. package/dist/vault/broker/server.js +92 -92
  12. package/package.json +1 -1
  13. package/profiles/_base/cron-session.sh.hbs +1 -1
  14. package/profiles/_base/start.sh.hbs +1 -1
  15. package/profiles/default/CLAUDE.md.hbs +2 -0
  16. package/skills/switchroom-manage/SKILL.md +1 -1
  17. package/skills/switchroom-runtime/SKILL.md +1 -1
  18. package/telegram-plugin/answer-stream.ts +1 -1
  19. package/telegram-plugin/bridge/bridge.ts +18 -1
  20. package/telegram-plugin/bridge/ipc-client.ts +4 -1
  21. package/telegram-plugin/bridge/tool-filter.ts +77 -0
  22. package/telegram-plugin/chat-lock.ts +1 -1
  23. package/telegram-plugin/credits-watch.ts +1 -1
  24. package/telegram-plugin/dist/bridge/bridge.js +141 -115
  25. package/telegram-plugin/dist/gateway/gateway.js +318 -207
  26. package/telegram-plugin/dist/server.js +193 -164
  27. package/telegram-plugin/gateway/auto-classify-mid-turn.ts +1 -1
  28. package/telegram-plugin/gateway/boot-card.ts +5 -1
  29. package/telegram-plugin/gateway/boot-probes.ts +62 -0
  30. package/telegram-plugin/gateway/cron-session.ts +1 -1
  31. package/telegram-plugin/gateway/gateway.ts +133 -12
  32. package/telegram-plugin/gateway/grant-restart.ts +1 -1
  33. package/telegram-plugin/gateway/inbound-delivery-machine-dispatch.ts +1 -1
  34. package/telegram-plugin/gateway/inbound-delivery-machine-shadow.ts +1 -1
  35. package/telegram-plugin/gateway/inbound-delivery-machine.ts +1 -1
  36. package/telegram-plugin/gateway/interrupt-defer.ts +1 -1
  37. package/telegram-plugin/gateway/ipc-protocol.ts +12 -0
  38. package/telegram-plugin/gateway/permission-card-origin.ts +62 -0
  39. package/telegram-plugin/gateway/permission-timeout.ts +70 -0
  40. package/telegram-plugin/gateway/prefix-warmup.ts +1 -1
  41. package/telegram-plugin/gateway/webhook-ingest-server.test.ts +1 -1
  42. package/telegram-plugin/gateway/webhook-ingest-server.ts +1 -1
  43. package/telegram-plugin/hooks/subagent-tracker-pretool.mjs +1 -1
  44. package/telegram-plugin/interrupt-marker.ts +1 -1
  45. package/telegram-plugin/over-ping-safety-net.ts +1 -1
  46. package/telegram-plugin/scoped-approval.ts +1 -1
  47. package/telegram-plugin/secret-detect/vault-error.ts +1 -1
  48. package/telegram-plugin/silence-poke.ts +2 -2
  49. package/telegram-plugin/silent-reply-anchor.ts +1 -1
  50. package/telegram-plugin/slot-banner-driver.ts +1 -1
  51. package/telegram-plugin/startup-reset.ts +1 -1
  52. package/telegram-plugin/tests/boot-probes-connections.test.ts +66 -0
  53. package/telegram-plugin/tests/gateway-startup-reset.test.ts +1 -1
  54. package/telegram-plugin/tests/inbound-delivery-machine.test.ts +1 -1
  55. package/telegram-plugin/tests/permission-card-origin.test.ts +97 -0
  56. package/telegram-plugin/tests/permission-card-routing.test.ts +23 -0
  57. package/telegram-plugin/tests/permission-no-repeat-wiring.test.ts +76 -0
  58. package/telegram-plugin/tests/permission-timeout.test.ts +87 -0
  59. package/telegram-plugin/tests/scoped-approval.test.ts +1 -1
  60. package/telegram-plugin/tests/silence-poke.test.ts +1 -1
  61. package/telegram-plugin/tests/tool-filter.test.ts +87 -0
  62. package/telegram-plugin/tests/turn-flush-safety.test.ts +1 -1
  63. package/telegram-plugin/turn-flush-safety.ts +1 -1
  64. package/telegram-plugin/uat/assertions.ts +1 -1
  65. package/telegram-plugin/uat/scenarios/bg-sub-agent-dispatch-dm.test.ts +1 -1
  66. package/telegram-plugin/uat/scenarios/fuzz-extended-dm.test.ts +1 -1
  67. package/telegram-plugin/uat/scenarios/jtbd-fast-ack-dm.test.ts +1 -1
  68. package/telegram-plugin/uat/scenarios/jtbd-fast-trivial-dm.test.ts +2 -2
  69. package/telegram-plugin/uat/scenarios/jtbd-forwarded-burst-dm.test.ts +1 -1
  70. package/telegram-plugin/uat/scenarios/jtbd-memory-survives-restart-dm.test.ts +1 -1
  71. package/telegram-plugin/uat/scenarios/jtbd-rapid-followup-dm.test.ts +1 -1
  72. package/telegram-plugin/uat/scenarios/jtbd-reflective-status-reaction-dm.test.ts +1 -1
  73. package/telegram-plugin/uat/scenarios/jtbd-wake-audit-content-dm.test.ts +1 -1
@@ -66,7 +66,7 @@ var __export = (target, all) => {
66
66
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
67
67
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
68
68
 
69
- // ../switchroom-sec-1417/node_modules/.bun/commander@13.1.0/node_modules/commander/lib/error.js
69
+ // node_modules/.bun/commander@13.1.0/node_modules/commander/lib/error.js
70
70
  var require_error = __commonJS((exports) => {
71
71
  class CommanderError extends Error {
72
72
  constructor(exitCode, code, message) {
@@ -90,7 +90,7 @@ var require_error = __commonJS((exports) => {
90
90
  exports.InvalidArgumentError = InvalidArgumentError;
91
91
  });
92
92
 
93
- // ../switchroom-sec-1417/node_modules/.bun/commander@13.1.0/node_modules/commander/lib/argument.js
93
+ // node_modules/.bun/commander@13.1.0/node_modules/commander/lib/argument.js
94
94
  var require_argument = __commonJS((exports) => {
95
95
  var { InvalidArgumentError } = require_error();
96
96
 
@@ -169,7 +169,7 @@ var require_argument = __commonJS((exports) => {
169
169
  exports.humanReadableArgName = humanReadableArgName;
170
170
  });
171
171
 
172
- // ../switchroom-sec-1417/node_modules/.bun/commander@13.1.0/node_modules/commander/lib/help.js
172
+ // node_modules/.bun/commander@13.1.0/node_modules/commander/lib/help.js
173
173
  var require_help = __commonJS((exports) => {
174
174
  var { humanReadableArgName } = require_argument();
175
175
 
@@ -519,7 +519,7 @@ ${itemIndentStr}`);
519
519
  exports.stripColor = stripColor;
520
520
  });
521
521
 
522
- // ../switchroom-sec-1417/node_modules/.bun/commander@13.1.0/node_modules/commander/lib/option.js
522
+ // node_modules/.bun/commander@13.1.0/node_modules/commander/lib/option.js
523
523
  var require_option = __commonJS((exports) => {
524
524
  var { InvalidArgumentError } = require_error();
525
525
 
@@ -697,7 +697,7 @@ var require_option = __commonJS((exports) => {
697
697
  exports.DualOptions = DualOptions;
698
698
  });
699
699
 
700
- // ../switchroom-sec-1417/node_modules/.bun/commander@13.1.0/node_modules/commander/lib/suggestSimilar.js
700
+ // node_modules/.bun/commander@13.1.0/node_modules/commander/lib/suggestSimilar.js
701
701
  var require_suggestSimilar = __commonJS((exports) => {
702
702
  var maxDistance = 3;
703
703
  function editDistance(a, b) {
@@ -770,7 +770,7 @@ var require_suggestSimilar = __commonJS((exports) => {
770
770
  exports.suggestSimilar = suggestSimilar;
771
771
  });
772
772
 
773
- // ../switchroom-sec-1417/node_modules/.bun/commander@13.1.0/node_modules/commander/lib/command.js
773
+ // node_modules/.bun/commander@13.1.0/node_modules/commander/lib/command.js
774
774
  var require_command = __commonJS((exports) => {
775
775
  var EventEmitter = __require("node:events").EventEmitter;
776
776
  var childProcess = __require("node:child_process");
@@ -2080,7 +2080,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
2080
2080
  exports.useColor = useColor;
2081
2081
  });
2082
2082
 
2083
- // ../switchroom-sec-1417/node_modules/.bun/commander@13.1.0/node_modules/commander/index.js
2083
+ // node_modules/.bun/commander@13.1.0/node_modules/commander/index.js
2084
2084
  var require_commander = __commonJS((exports) => {
2085
2085
  var { Argument } = require_argument();
2086
2086
  var { Command } = require_command();
@@ -2100,7 +2100,7 @@ var require_commander = __commonJS((exports) => {
2100
2100
  exports.InvalidOptionArgumentError = InvalidArgumentError;
2101
2101
  });
2102
2102
 
2103
- // ../switchroom-sec-1417/node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js
2103
+ // node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js
2104
2104
  function assembleStyles() {
2105
2105
  const codes = new Map;
2106
2106
  for (const [groupName, group] of Object.entries(styles)) {
@@ -2276,7 +2276,7 @@ var init_ansi_styles = __esm(() => {
2276
2276
  ansi_styles_default = ansiStyles;
2277
2277
  });
2278
2278
 
2279
- // ../switchroom-sec-1417/node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js
2279
+ // node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js
2280
2280
  import process2 from "node:process";
2281
2281
  import os from "node:os";
2282
2282
  import tty from "node:tty";
@@ -2410,7 +2410,7 @@ var init_supports_color = __esm(() => {
2410
2410
  supports_color_default = supportsColor;
2411
2411
  });
2412
2412
 
2413
- // ../switchroom-sec-1417/node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/utilities.js
2413
+ // node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/utilities.js
2414
2414
  function stringReplaceAll(string, substring, replacer) {
2415
2415
  let index = string.indexOf(substring);
2416
2416
  if (index === -1) {
@@ -2443,7 +2443,7 @@ function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
2443
2443
  return returnValue;
2444
2444
  }
2445
2445
 
2446
- // ../switchroom-sec-1417/node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/index.js
2446
+ // node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/index.js
2447
2447
  function createChalk(options) {
2448
2448
  return chalkFactory(options);
2449
2449
  }
@@ -2589,7 +2589,7 @@ var init_source = __esm(() => {
2589
2589
  source_default = chalk;
2590
2590
  });
2591
2591
 
2592
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/identity.js
2592
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/identity.js
2593
2593
  var require_identity = __commonJS((exports) => {
2594
2594
  var ALIAS = Symbol.for("yaml.alias");
2595
2595
  var DOC = Symbol.for("yaml.document");
@@ -2643,7 +2643,7 @@ var require_identity = __commonJS((exports) => {
2643
2643
  exports.isSeq = isSeq;
2644
2644
  });
2645
2645
 
2646
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/visit.js
2646
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/visit.js
2647
2647
  var require_visit = __commonJS((exports) => {
2648
2648
  var identity = require_identity();
2649
2649
  var BREAK = Symbol("break visit");
@@ -2798,7 +2798,7 @@ var require_visit = __commonJS((exports) => {
2798
2798
  exports.visitAsync = visitAsync;
2799
2799
  });
2800
2800
 
2801
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/directives.js
2801
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/directives.js
2802
2802
  var require_directives = __commonJS((exports) => {
2803
2803
  var identity = require_identity();
2804
2804
  var visit = require_visit();
@@ -2950,7 +2950,7 @@ var require_directives = __commonJS((exports) => {
2950
2950
  exports.Directives = Directives;
2951
2951
  });
2952
2952
 
2953
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/anchors.js
2953
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/anchors.js
2954
2954
  var require_anchors = __commonJS((exports) => {
2955
2955
  var identity = require_identity();
2956
2956
  var visit = require_visit();
@@ -3012,7 +3012,7 @@ var require_anchors = __commonJS((exports) => {
3012
3012
  exports.findNewAnchor = findNewAnchor;
3013
3013
  });
3014
3014
 
3015
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/applyReviver.js
3015
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/applyReviver.js
3016
3016
  var require_applyReviver = __commonJS((exports) => {
3017
3017
  function applyReviver(reviver, obj, key, val) {
3018
3018
  if (val && typeof val === "object") {
@@ -3059,7 +3059,7 @@ var require_applyReviver = __commonJS((exports) => {
3059
3059
  exports.applyReviver = applyReviver;
3060
3060
  });
3061
3061
 
3062
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/toJS.js
3062
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/toJS.js
3063
3063
  var require_toJS = __commonJS((exports) => {
3064
3064
  var identity = require_identity();
3065
3065
  function toJS(value, arg, ctx) {
@@ -3086,7 +3086,7 @@ var require_toJS = __commonJS((exports) => {
3086
3086
  exports.toJS = toJS;
3087
3087
  });
3088
3088
 
3089
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Node.js
3089
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Node.js
3090
3090
  var require_Node = __commonJS((exports) => {
3091
3091
  var applyReviver = require_applyReviver();
3092
3092
  var identity = require_identity();
@@ -3123,7 +3123,7 @@ var require_Node = __commonJS((exports) => {
3123
3123
  exports.NodeBase = NodeBase;
3124
3124
  });
3125
3125
 
3126
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Alias.js
3126
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Alias.js
3127
3127
  var require_Alias = __commonJS((exports) => {
3128
3128
  var anchors = require_anchors();
3129
3129
  var visit = require_visit();
@@ -3231,7 +3231,7 @@ var require_Alias = __commonJS((exports) => {
3231
3231
  exports.Alias = Alias;
3232
3232
  });
3233
3233
 
3234
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Scalar.js
3234
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Scalar.js
3235
3235
  var require_Scalar = __commonJS((exports) => {
3236
3236
  var identity = require_identity();
3237
3237
  var Node = require_Node();
@@ -3259,7 +3259,7 @@ var require_Scalar = __commonJS((exports) => {
3259
3259
  exports.isScalarValue = isScalarValue;
3260
3260
  });
3261
3261
 
3262
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/createNode.js
3262
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/createNode.js
3263
3263
  var require_createNode = __commonJS((exports) => {
3264
3264
  var Alias = require_Alias();
3265
3265
  var identity = require_identity();
@@ -3331,7 +3331,7 @@ var require_createNode = __commonJS((exports) => {
3331
3331
  exports.createNode = createNode;
3332
3332
  });
3333
3333
 
3334
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Collection.js
3334
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Collection.js
3335
3335
  var require_Collection = __commonJS((exports) => {
3336
3336
  var createNode = require_createNode();
3337
3337
  var identity = require_identity();
@@ -3446,7 +3446,7 @@ var require_Collection = __commonJS((exports) => {
3446
3446
  exports.isEmptyPath = isEmptyPath;
3447
3447
  });
3448
3448
 
3449
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyComment.js
3449
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyComment.js
3450
3450
  var require_stringifyComment = __commonJS((exports) => {
3451
3451
  var stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, "#");
3452
3452
  function indentComment(comment, indent) {
@@ -3463,7 +3463,7 @@ var require_stringifyComment = __commonJS((exports) => {
3463
3463
  exports.stringifyComment = stringifyComment;
3464
3464
  });
3465
3465
 
3466
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/foldFlowLines.js
3466
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/foldFlowLines.js
3467
3467
  var require_foldFlowLines = __commonJS((exports) => {
3468
3468
  var FOLD_FLOW = "flow";
3469
3469
  var FOLD_BLOCK = "block";
@@ -3600,7 +3600,7 @@ ${indent}${text.slice(fold + 1, end2)}`;
3600
3600
  exports.foldFlowLines = foldFlowLines;
3601
3601
  });
3602
3602
 
3603
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyString.js
3603
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyString.js
3604
3604
  var require_stringifyString = __commonJS((exports) => {
3605
3605
  var Scalar = require_Scalar();
3606
3606
  var foldFlowLines = require_foldFlowLines();
@@ -3898,7 +3898,7 @@ ${indent}`);
3898
3898
  exports.stringifyString = stringifyString;
3899
3899
  });
3900
3900
 
3901
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringify.js
3901
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringify.js
3902
3902
  var require_stringify = __commonJS((exports) => {
3903
3903
  var anchors = require_anchors();
3904
3904
  var identity = require_identity();
@@ -4019,7 +4019,7 @@ ${ctx.indent}${str}`;
4019
4019
  exports.stringify = stringify;
4020
4020
  });
4021
4021
 
4022
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyPair.js
4022
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyPair.js
4023
4023
  var require_stringifyPair = __commonJS((exports) => {
4024
4024
  var identity = require_identity();
4025
4025
  var Scalar = require_Scalar();
@@ -4155,7 +4155,7 @@ ${ctx.indent}`;
4155
4155
  exports.stringifyPair = stringifyPair;
4156
4156
  });
4157
4157
 
4158
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/log.js
4158
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/log.js
4159
4159
  var require_log = __commonJS((exports) => {
4160
4160
  var node_process = __require("process");
4161
4161
  function debug(logLevel, ...messages) {
@@ -4174,7 +4174,7 @@ var require_log = __commonJS((exports) => {
4174
4174
  exports.warn = warn;
4175
4175
  });
4176
4176
 
4177
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/merge.js
4177
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/merge.js
4178
4178
  var require_merge = __commonJS((exports) => {
4179
4179
  var identity = require_identity();
4180
4180
  var Scalar = require_Scalar();
@@ -4228,7 +4228,7 @@ var require_merge = __commonJS((exports) => {
4228
4228
  exports.merge = merge;
4229
4229
  });
4230
4230
 
4231
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/addPairToJSMap.js
4231
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/addPairToJSMap.js
4232
4232
  var require_addPairToJSMap = __commonJS((exports) => {
4233
4233
  var log = require_log();
4234
4234
  var merge = require_merge();
@@ -4289,7 +4289,7 @@ var require_addPairToJSMap = __commonJS((exports) => {
4289
4289
  exports.addPairToJSMap = addPairToJSMap;
4290
4290
  });
4291
4291
 
4292
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Pair.js
4292
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Pair.js
4293
4293
  var require_Pair = __commonJS((exports) => {
4294
4294
  var createNode = require_createNode();
4295
4295
  var stringifyPair = require_stringifyPair();
@@ -4327,7 +4327,7 @@ var require_Pair = __commonJS((exports) => {
4327
4327
  exports.createPair = createPair;
4328
4328
  });
4329
4329
 
4330
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyCollection.js
4330
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyCollection.js
4331
4331
  var require_stringifyCollection = __commonJS((exports) => {
4332
4332
  var identity = require_identity();
4333
4333
  var stringify = require_stringify();
@@ -4479,7 +4479,7 @@ ${indent}${end}`;
4479
4479
  exports.stringifyCollection = stringifyCollection;
4480
4480
  });
4481
4481
 
4482
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLMap.js
4482
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLMap.js
4483
4483
  var require_YAMLMap = __commonJS((exports) => {
4484
4484
  var stringifyCollection = require_stringifyCollection();
4485
4485
  var addPairToJSMap = require_addPairToJSMap();
@@ -4606,7 +4606,7 @@ var require_YAMLMap = __commonJS((exports) => {
4606
4606
  exports.findPair = findPair;
4607
4607
  });
4608
4608
 
4609
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/map.js
4609
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/map.js
4610
4610
  var require_map = __commonJS((exports) => {
4611
4611
  var identity = require_identity();
4612
4612
  var YAMLMap = require_YAMLMap();
@@ -4625,7 +4625,7 @@ var require_map = __commonJS((exports) => {
4625
4625
  exports.map = map;
4626
4626
  });
4627
4627
 
4628
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLSeq.js
4628
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLSeq.js
4629
4629
  var require_YAMLSeq = __commonJS((exports) => {
4630
4630
  var createNode = require_createNode();
4631
4631
  var stringifyCollection = require_stringifyCollection();
@@ -4718,7 +4718,7 @@ var require_YAMLSeq = __commonJS((exports) => {
4718
4718
  exports.YAMLSeq = YAMLSeq;
4719
4719
  });
4720
4720
 
4721
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/seq.js
4721
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/seq.js
4722
4722
  var require_seq = __commonJS((exports) => {
4723
4723
  var identity = require_identity();
4724
4724
  var YAMLSeq = require_YAMLSeq();
@@ -4737,7 +4737,7 @@ var require_seq = __commonJS((exports) => {
4737
4737
  exports.seq = seq;
4738
4738
  });
4739
4739
 
4740
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/string.js
4740
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/string.js
4741
4741
  var require_string = __commonJS((exports) => {
4742
4742
  var stringifyString = require_stringifyString();
4743
4743
  var string = {
@@ -4753,7 +4753,7 @@ var require_string = __commonJS((exports) => {
4753
4753
  exports.string = string;
4754
4754
  });
4755
4755
 
4756
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/null.js
4756
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/null.js
4757
4757
  var require_null = __commonJS((exports) => {
4758
4758
  var Scalar = require_Scalar();
4759
4759
  var nullTag = {
@@ -4768,7 +4768,7 @@ var require_null = __commonJS((exports) => {
4768
4768
  exports.nullTag = nullTag;
4769
4769
  });
4770
4770
 
4771
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/bool.js
4771
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/bool.js
4772
4772
  var require_bool = __commonJS((exports) => {
4773
4773
  var Scalar = require_Scalar();
4774
4774
  var boolTag = {
@@ -4789,7 +4789,7 @@ var require_bool = __commonJS((exports) => {
4789
4789
  exports.boolTag = boolTag;
4790
4790
  });
4791
4791
 
4792
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyNumber.js
4792
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyNumber.js
4793
4793
  var require_stringifyNumber = __commonJS((exports) => {
4794
4794
  function stringifyNumber({ format, minFractionDigits, tag, value }) {
4795
4795
  if (typeof value === "bigint")
@@ -4813,7 +4813,7 @@ var require_stringifyNumber = __commonJS((exports) => {
4813
4813
  exports.stringifyNumber = stringifyNumber;
4814
4814
  });
4815
4815
 
4816
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/float.js
4816
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/float.js
4817
4817
  var require_float = __commonJS((exports) => {
4818
4818
  var Scalar = require_Scalar();
4819
4819
  var stringifyNumber = require_stringifyNumber();
@@ -4856,7 +4856,7 @@ var require_float = __commonJS((exports) => {
4856
4856
  exports.floatNaN = floatNaN;
4857
4857
  });
4858
4858
 
4859
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/int.js
4859
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/int.js
4860
4860
  var require_int = __commonJS((exports) => {
4861
4861
  var stringifyNumber = require_stringifyNumber();
4862
4862
  var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -4898,7 +4898,7 @@ var require_int = __commonJS((exports) => {
4898
4898
  exports.intOct = intOct;
4899
4899
  });
4900
4900
 
4901
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/schema.js
4901
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/schema.js
4902
4902
  var require_schema = __commonJS((exports) => {
4903
4903
  var map = require_map();
4904
4904
  var _null = require_null();
@@ -4923,7 +4923,7 @@ var require_schema = __commonJS((exports) => {
4923
4923
  exports.schema = schema;
4924
4924
  });
4925
4925
 
4926
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/json/schema.js
4926
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/json/schema.js
4927
4927
  var require_schema2 = __commonJS((exports) => {
4928
4928
  var Scalar = require_Scalar();
4929
4929
  var map = require_map();
@@ -4987,7 +4987,7 @@ var require_schema2 = __commonJS((exports) => {
4987
4987
  exports.schema = schema;
4988
4988
  });
4989
4989
 
4990
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/binary.js
4990
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/binary.js
4991
4991
  var require_binary = __commonJS((exports) => {
4992
4992
  var node_buffer = __require("buffer");
4993
4993
  var Scalar = require_Scalar();
@@ -5042,7 +5042,7 @@ var require_binary = __commonJS((exports) => {
5042
5042
  exports.binary = binary;
5043
5043
  });
5044
5044
 
5045
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
5045
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
5046
5046
  var require_pairs = __commonJS((exports) => {
5047
5047
  var identity = require_identity();
5048
5048
  var Pair = require_Pair();
@@ -5117,7 +5117,7 @@ ${cn.comment}` : item.comment;
5117
5117
  exports.resolvePairs = resolvePairs;
5118
5118
  });
5119
5119
 
5120
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/omap.js
5120
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/omap.js
5121
5121
  var require_omap = __commonJS((exports) => {
5122
5122
  var identity = require_identity();
5123
5123
  var toJS = require_toJS();
@@ -5189,7 +5189,7 @@ var require_omap = __commonJS((exports) => {
5189
5189
  exports.omap = omap;
5190
5190
  });
5191
5191
 
5192
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/bool.js
5192
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/bool.js
5193
5193
  var require_bool2 = __commonJS((exports) => {
5194
5194
  var Scalar = require_Scalar();
5195
5195
  function boolStringify({ value, source }, ctx) {
@@ -5218,7 +5218,7 @@ var require_bool2 = __commonJS((exports) => {
5218
5218
  exports.trueTag = trueTag;
5219
5219
  });
5220
5220
 
5221
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/float.js
5221
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/float.js
5222
5222
  var require_float2 = __commonJS((exports) => {
5223
5223
  var Scalar = require_Scalar();
5224
5224
  var stringifyNumber = require_stringifyNumber();
@@ -5264,7 +5264,7 @@ var require_float2 = __commonJS((exports) => {
5264
5264
  exports.floatNaN = floatNaN;
5265
5265
  });
5266
5266
 
5267
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/int.js
5267
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/int.js
5268
5268
  var require_int2 = __commonJS((exports) => {
5269
5269
  var stringifyNumber = require_stringifyNumber();
5270
5270
  var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -5340,7 +5340,7 @@ var require_int2 = __commonJS((exports) => {
5340
5340
  exports.intOct = intOct;
5341
5341
  });
5342
5342
 
5343
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/set.js
5343
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/set.js
5344
5344
  var require_set = __commonJS((exports) => {
5345
5345
  var identity = require_identity();
5346
5346
  var Pair = require_Pair();
@@ -5423,7 +5423,7 @@ var require_set = __commonJS((exports) => {
5423
5423
  exports.set = set;
5424
5424
  });
5425
5425
 
5426
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
5426
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
5427
5427
  var require_timestamp = __commonJS((exports) => {
5428
5428
  var stringifyNumber = require_stringifyNumber();
5429
5429
  function parseSexagesimal(str, asBigInt) {
@@ -5505,7 +5505,7 @@ var require_timestamp = __commonJS((exports) => {
5505
5505
  exports.timestamp = timestamp;
5506
5506
  });
5507
5507
 
5508
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/schema.js
5508
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/schema.js
5509
5509
  var require_schema3 = __commonJS((exports) => {
5510
5510
  var map = require_map();
5511
5511
  var _null = require_null();
@@ -5546,7 +5546,7 @@ var require_schema3 = __commonJS((exports) => {
5546
5546
  exports.schema = schema;
5547
5547
  });
5548
5548
 
5549
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/tags.js
5549
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/tags.js
5550
5550
  var require_tags = __commonJS((exports) => {
5551
5551
  var map = require_map();
5552
5552
  var _null = require_null();
@@ -5637,7 +5637,7 @@ var require_tags = __commonJS((exports) => {
5637
5637
  exports.getTags = getTags;
5638
5638
  });
5639
5639
 
5640
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/Schema.js
5640
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/Schema.js
5641
5641
  var require_Schema = __commonJS((exports) => {
5642
5642
  var identity = require_identity();
5643
5643
  var map = require_map();
@@ -5667,7 +5667,7 @@ var require_Schema = __commonJS((exports) => {
5667
5667
  exports.Schema = Schema;
5668
5668
  });
5669
5669
 
5670
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyDocument.js
5670
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyDocument.js
5671
5671
  var require_stringifyDocument = __commonJS((exports) => {
5672
5672
  var identity = require_identity();
5673
5673
  var stringify = require_stringify();
@@ -5747,7 +5747,7 @@ var require_stringifyDocument = __commonJS((exports) => {
5747
5747
  exports.stringifyDocument = stringifyDocument;
5748
5748
  });
5749
5749
 
5750
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/Document.js
5750
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/Document.js
5751
5751
  var require_Document = __commonJS((exports) => {
5752
5752
  var Alias = require_Alias();
5753
5753
  var Collection = require_Collection();
@@ -5982,7 +5982,7 @@ var require_Document = __commonJS((exports) => {
5982
5982
  exports.Document = Document;
5983
5983
  });
5984
5984
 
5985
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/errors.js
5985
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/errors.js
5986
5986
  var require_errors = __commonJS((exports) => {
5987
5987
  class YAMLError extends Error {
5988
5988
  constructor(name, pos, code, message) {
@@ -6047,7 +6047,7 @@ ${pointer}
6047
6047
  exports.prettifyError = prettifyError;
6048
6048
  });
6049
6049
 
6050
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-props.js
6050
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-props.js
6051
6051
  var require_resolve_props = __commonJS((exports) => {
6052
6052
  function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
6053
6053
  let spaceBefore = false;
@@ -6177,7 +6177,7 @@ var require_resolve_props = __commonJS((exports) => {
6177
6177
  exports.resolveProps = resolveProps;
6178
6178
  });
6179
6179
 
6180
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-contains-newline.js
6180
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-contains-newline.js
6181
6181
  var require_util_contains_newline = __commonJS((exports) => {
6182
6182
  function containsNewline(key) {
6183
6183
  if (!key)
@@ -6217,7 +6217,7 @@ var require_util_contains_newline = __commonJS((exports) => {
6217
6217
  exports.containsNewline = containsNewline;
6218
6218
  });
6219
6219
 
6220
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-flow-indent-check.js
6220
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-flow-indent-check.js
6221
6221
  var require_util_flow_indent_check = __commonJS((exports) => {
6222
6222
  var utilContainsNewline = require_util_contains_newline();
6223
6223
  function flowIndentCheck(indent, fc, onError) {
@@ -6232,7 +6232,7 @@ var require_util_flow_indent_check = __commonJS((exports) => {
6232
6232
  exports.flowIndentCheck = flowIndentCheck;
6233
6233
  });
6234
6234
 
6235
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-map-includes.js
6235
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-map-includes.js
6236
6236
  var require_util_map_includes = __commonJS((exports) => {
6237
6237
  var identity = require_identity();
6238
6238
  function mapIncludes(ctx, items, search) {
@@ -6245,7 +6245,7 @@ var require_util_map_includes = __commonJS((exports) => {
6245
6245
  exports.mapIncludes = mapIncludes;
6246
6246
  });
6247
6247
 
6248
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-map.js
6248
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-map.js
6249
6249
  var require_resolve_block_map = __commonJS((exports) => {
6250
6250
  var Pair = require_Pair();
6251
6251
  var YAMLMap = require_YAMLMap();
@@ -6352,7 +6352,7 @@ var require_resolve_block_map = __commonJS((exports) => {
6352
6352
  exports.resolveBlockMap = resolveBlockMap;
6353
6353
  });
6354
6354
 
6355
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-seq.js
6355
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-seq.js
6356
6356
  var require_resolve_block_seq = __commonJS((exports) => {
6357
6357
  var YAMLSeq = require_YAMLSeq();
6358
6358
  var resolveProps = require_resolve_props();
@@ -6400,7 +6400,7 @@ var require_resolve_block_seq = __commonJS((exports) => {
6400
6400
  exports.resolveBlockSeq = resolveBlockSeq;
6401
6401
  });
6402
6402
 
6403
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-end.js
6403
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-end.js
6404
6404
  var require_resolve_end = __commonJS((exports) => {
6405
6405
  function resolveEnd(end, offset, reqSpace, onError) {
6406
6406
  let comment = "";
@@ -6440,7 +6440,7 @@ var require_resolve_end = __commonJS((exports) => {
6440
6440
  exports.resolveEnd = resolveEnd;
6441
6441
  });
6442
6442
 
6443
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-collection.js
6443
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-collection.js
6444
6444
  var require_resolve_flow_collection = __commonJS((exports) => {
6445
6445
  var identity = require_identity();
6446
6446
  var Pair = require_Pair();
@@ -6631,7 +6631,7 @@ var require_resolve_flow_collection = __commonJS((exports) => {
6631
6631
  exports.resolveFlowCollection = resolveFlowCollection;
6632
6632
  });
6633
6633
 
6634
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-collection.js
6634
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-collection.js
6635
6635
  var require_compose_collection = __commonJS((exports) => {
6636
6636
  var identity = require_identity();
6637
6637
  var Scalar = require_Scalar();
@@ -6693,7 +6693,7 @@ var require_compose_collection = __commonJS((exports) => {
6693
6693
  exports.composeCollection = composeCollection;
6694
6694
  });
6695
6695
 
6696
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-scalar.js
6696
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-scalar.js
6697
6697
  var require_resolve_block_scalar = __commonJS((exports) => {
6698
6698
  var Scalar = require_Scalar();
6699
6699
  function resolveBlockScalar(ctx, scalar, onError) {
@@ -6886,7 +6886,7 @@ var require_resolve_block_scalar = __commonJS((exports) => {
6886
6886
  exports.resolveBlockScalar = resolveBlockScalar;
6887
6887
  });
6888
6888
 
6889
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-scalar.js
6889
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-scalar.js
6890
6890
  var require_resolve_flow_scalar = __commonJS((exports) => {
6891
6891
  var Scalar = require_Scalar();
6892
6892
  var resolveEnd = require_resolve_end();
@@ -7102,7 +7102,7 @@ var require_resolve_flow_scalar = __commonJS((exports) => {
7102
7102
  exports.resolveFlowScalar = resolveFlowScalar;
7103
7103
  });
7104
7104
 
7105
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-scalar.js
7105
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-scalar.js
7106
7106
  var require_compose_scalar = __commonJS((exports) => {
7107
7107
  var identity = require_identity();
7108
7108
  var Scalar = require_Scalar();
@@ -7180,7 +7180,7 @@ var require_compose_scalar = __commonJS((exports) => {
7180
7180
  exports.composeScalar = composeScalar;
7181
7181
  });
7182
7182
 
7183
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-empty-scalar-position.js
7183
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-empty-scalar-position.js
7184
7184
  var require_util_empty_scalar_position = __commonJS((exports) => {
7185
7185
  function emptyScalarPosition(offset, before, pos) {
7186
7186
  if (before) {
@@ -7207,7 +7207,7 @@ var require_util_empty_scalar_position = __commonJS((exports) => {
7207
7207
  exports.emptyScalarPosition = emptyScalarPosition;
7208
7208
  });
7209
7209
 
7210
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-node.js
7210
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-node.js
7211
7211
  var require_compose_node = __commonJS((exports) => {
7212
7212
  var Alias = require_Alias();
7213
7213
  var identity = require_identity();
@@ -7310,7 +7310,7 @@ var require_compose_node = __commonJS((exports) => {
7310
7310
  exports.composeNode = composeNode;
7311
7311
  });
7312
7312
 
7313
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-doc.js
7313
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-doc.js
7314
7314
  var require_compose_doc = __commonJS((exports) => {
7315
7315
  var Document = require_Document();
7316
7316
  var composeNode = require_compose_node();
@@ -7350,7 +7350,7 @@ var require_compose_doc = __commonJS((exports) => {
7350
7350
  exports.composeDoc = composeDoc;
7351
7351
  });
7352
7352
 
7353
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/composer.js
7353
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/composer.js
7354
7354
  var require_composer = __commonJS((exports) => {
7355
7355
  var node_process = __require("process");
7356
7356
  var directives = require_directives();
@@ -7539,7 +7539,7 @@ ${end.comment}` : end.comment;
7539
7539
  exports.Composer = Composer;
7540
7540
  });
7541
7541
 
7542
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-scalar.js
7542
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-scalar.js
7543
7543
  var require_cst_scalar = __commonJS((exports) => {
7544
7544
  var resolveBlockScalar = require_resolve_block_scalar();
7545
7545
  var resolveFlowScalar = require_resolve_flow_scalar();
@@ -7729,7 +7729,7 @@ var require_cst_scalar = __commonJS((exports) => {
7729
7729
  exports.setScalarValue = setScalarValue;
7730
7730
  });
7731
7731
 
7732
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-stringify.js
7732
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-stringify.js
7733
7733
  var require_cst_stringify = __commonJS((exports) => {
7734
7734
  var stringify = (cst) => ("type" in cst) ? stringifyToken(cst) : stringifyItem(cst);
7735
7735
  function stringifyToken(token) {
@@ -7787,7 +7787,7 @@ var require_cst_stringify = __commonJS((exports) => {
7787
7787
  exports.stringify = stringify;
7788
7788
  });
7789
7789
 
7790
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-visit.js
7790
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-visit.js
7791
7791
  var require_cst_visit = __commonJS((exports) => {
7792
7792
  var BREAK = Symbol("break visit");
7793
7793
  var SKIP = Symbol("skip children");
@@ -7846,7 +7846,7 @@ var require_cst_visit = __commonJS((exports) => {
7846
7846
  exports.visit = visit;
7847
7847
  });
7848
7848
 
7849
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst.js
7849
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst.js
7850
7850
  var require_cst = __commonJS((exports) => {
7851
7851
  var cstScalar = require_cst_scalar();
7852
7852
  var cstStringify = require_cst_stringify();
@@ -7947,7 +7947,7 @@ var require_cst = __commonJS((exports) => {
7947
7947
  exports.tokenType = tokenType;
7948
7948
  });
7949
7949
 
7950
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/lexer.js
7950
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/lexer.js
7951
7951
  var require_lexer = __commonJS((exports) => {
7952
7952
  var cst = require_cst();
7953
7953
  function isEmpty(ch) {
@@ -8533,7 +8533,7 @@ var require_lexer = __commonJS((exports) => {
8533
8533
  exports.Lexer = Lexer;
8534
8534
  });
8535
8535
 
8536
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/line-counter.js
8536
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/line-counter.js
8537
8537
  var require_line_counter = __commonJS((exports) => {
8538
8538
  class LineCounter {
8539
8539
  constructor() {
@@ -8561,7 +8561,7 @@ var require_line_counter = __commonJS((exports) => {
8561
8561
  exports.LineCounter = LineCounter;
8562
8562
  });
8563
8563
 
8564
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/parser.js
8564
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/parser.js
8565
8565
  var require_parser = __commonJS((exports) => {
8566
8566
  var node_process = __require("process");
8567
8567
  var cst = require_cst();
@@ -9410,7 +9410,7 @@ var require_parser = __commonJS((exports) => {
9410
9410
  exports.Parser = Parser;
9411
9411
  });
9412
9412
 
9413
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/public-api.js
9413
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/public-api.js
9414
9414
  var require_public_api = __commonJS((exports) => {
9415
9415
  var composer = require_composer();
9416
9416
  var Document = require_Document();
@@ -9504,7 +9504,7 @@ var require_public_api = __commonJS((exports) => {
9504
9504
  exports.stringify = stringify;
9505
9505
  });
9506
9506
 
9507
- // ../switchroom-sec-1417/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/index.js
9507
+ // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/index.js
9508
9508
  var require_dist = __commonJS((exports) => {
9509
9509
  var composer = require_composer();
9510
9510
  var Document = require_Document();
@@ -9553,7 +9553,7 @@ var require_dist = __commonJS((exports) => {
9553
9553
  exports.visitAsync = visit.visitAsync;
9554
9554
  });
9555
9555
 
9556
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/util.js
9556
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/util.js
9557
9557
  var util, objectUtil, ZodParsedType, getParsedType = (data) => {
9558
9558
  const t = typeof data;
9559
9559
  switch (t) {
@@ -9684,7 +9684,7 @@ var init_util = __esm(() => {
9684
9684
  ]);
9685
9685
  });
9686
9686
 
9687
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/ZodError.js
9687
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/ZodError.js
9688
9688
  var ZodIssueCode, quotelessJson = (obj) => {
9689
9689
  const json = JSON.stringify(obj, null, 2);
9690
9690
  return json.replace(/"([^"]+)":/g, "$1:");
@@ -9805,7 +9805,7 @@ var init_ZodError = __esm(() => {
9805
9805
  };
9806
9806
  });
9807
9807
 
9808
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/locales/en.js
9808
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/locales/en.js
9809
9809
  var errorMap = (issue, _ctx) => {
9810
9810
  let message;
9811
9811
  switch (issue.code) {
@@ -9912,7 +9912,7 @@ var init_en = __esm(() => {
9912
9912
  en_default = errorMap;
9913
9913
  });
9914
9914
 
9915
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/errors.js
9915
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/errors.js
9916
9916
  function setErrorMap(map) {
9917
9917
  overrideErrorMap = map;
9918
9918
  }
@@ -9925,7 +9925,7 @@ var init_errors = __esm(() => {
9925
9925
  overrideErrorMap = en_default;
9926
9926
  });
9927
9927
 
9928
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js
9928
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js
9929
9929
  function addIssueToContext(ctx, issueData) {
9930
9930
  const overrideMap = getErrorMap();
9931
9931
  const issue = makeIssue({
@@ -10030,10 +10030,10 @@ var init_parseUtil = __esm(() => {
10030
10030
  });
10031
10031
  });
10032
10032
 
10033
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js
10033
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js
10034
10034
  var init_typeAliases = () => {};
10035
10035
 
10036
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js
10036
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js
10037
10037
  var errorUtil;
10038
10038
  var init_errorUtil = __esm(() => {
10039
10039
  (function(errorUtil2) {
@@ -10042,7 +10042,7 @@ var init_errorUtil = __esm(() => {
10042
10042
  })(errorUtil || (errorUtil = {}));
10043
10043
  });
10044
10044
 
10045
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/types.js
10045
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/types.js
10046
10046
  class ParseInputLazyPath {
10047
10047
  constructor(parent, value, path, key) {
10048
10048
  this._cachedPath = [];
@@ -13393,7 +13393,7 @@ var init_types = __esm(() => {
13393
13393
  NEVER = INVALID;
13394
13394
  });
13395
13395
 
13396
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/external.js
13396
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v3/external.js
13397
13397
  var exports_external = {};
13398
13398
  __export(exports_external, {
13399
13399
  void: () => voidType,
@@ -13513,7 +13513,7 @@ var init_external = __esm(() => {
13513
13513
  init_ZodError();
13514
13514
  });
13515
13515
 
13516
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/index.js
13516
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/index.js
13517
13517
  var init_zod = __esm(() => {
13518
13518
  init_external();
13519
13519
  init_external();
@@ -13565,7 +13565,7 @@ var init_schema = __esm(() => {
13565
13565
  ScheduleEntrySchema = exports_external.object({
13566
13566
  cron: exports_external.string().describe("Cron expression (e.g., '0 8 * * *')"),
13567
13567
  prompt: exports_external.string().optional().describe("Prompt to send at the scheduled time (the escalation prompt when " + "kind=poll; templated with {{diff}}). Required for kind prompt/poll; " + "absent for kind=action (an action has no model fire, so no prompt)."),
13568
- kind: exports_external.enum(["poll", "prompt", "action"]).optional().describe("Tier-0 routing (docs/rfcs/cheap-cron-sessions.md). 'prompt' (default) " + "fires a model turn every tick (Tier 1/2 per `context`). 'poll' runs a " + "model-free deterministic check (requires `poll`) and only escalates to " + "a model fire on a hit. 'action' runs a model-free deterministic verb " + "(requires `action`) that COMPLETES the work and never escalates \u2014 zero " + "tokens, no session. poll/prompt tiering is on by default " + "(SWITCHROOM_CHEAP_CRON=0 is the kill-switch); an action is model-free " + "regardless (the kill-switch governs model tiering, not deterministic " + "actions)."),
13568
+ kind: exports_external.enum(["poll", "prompt", "action"]).optional().describe("Tier-0 routing (reference/rfcs/cheap-cron-sessions.md). 'prompt' (default) " + "fires a model turn every tick (Tier 1/2 per `context`). 'poll' runs a " + "model-free deterministic check (requires `poll`) and only escalates to " + "a model fire on a hit. 'action' runs a model-free deterministic verb " + "(requires `action`) that COMPLETES the work and never escalates \u2014 zero " + "tokens, no session. poll/prompt tiering is on by default " + "(SWITCHROOM_CHEAP_CRON=0 is the kill-switch); an action is model-free " + "regardless (the kill-switch governs model tiering, not deterministic " + "actions)."),
13569
13569
  poll: PollSpecSchema.optional().describe("Required iff kind=poll. The declarative poll spec."),
13570
13570
  action: ActionSpecSchema.optional().describe("Required iff kind=action. The declarative action spec (telegram-message or webhook)."),
13571
13571
  model: exports_external.string().optional().describe("Cron model hint. Reactivated by SWITCHROOM_CHEAP_CRON (was DEPRECATED/" + "IGNORED in v0.8). A known-cheap id (sonnet/haiku family) routes the " + "fire to a fresh cheap cron session (Tier 1, `context: fresh`); 'opus', " + "a custom id, or unset routes to the agent's live session (Tier 2, " + "`context: agent`) \u2014 the conservative default that preserves pre-v0.8 " + "behaviour. Note: a live session's model is fixed at launch, so on Tier " + "2 this is informational. See docs/scheduling.md."),
@@ -13574,7 +13574,7 @@ var init_schema = __esm(() => {
13574
13574
  topic: exports_external.union([
13575
13575
  exports_external.string().min(1, "topic alias must be non-empty"),
13576
13576
  exports_external.number().int().positive("topic ID must be a positive integer")
13577
- ]).optional().describe("Forum topic this cron fires into when the owning agent is in " + "supergroup-owned mode (channels.telegram.chat_id set). Either a " + 'string alias resolved against `topic_aliases` (e.g. "planning") ' + "or a numeric topic ID. Falls back to the agent's `default_topic_id` " + "when unset. Ignored for agents in fleet-shared or dm_only mode. " + "Alias-resolution happens at config-load \u2014 typos surface immediately. " + "See docs/rfcs/supergroup-mode.md.")
13577
+ ]).optional().describe("Forum topic this cron fires into when the owning agent is in " + "supergroup-owned mode (channels.telegram.chat_id set). Either a " + 'string alias resolved against `topic_aliases` (e.g. "planning") ' + "or a numeric topic ID. Falls back to the agent's `default_topic_id` " + "when unset. Ignored for agents in fleet-shared or dm_only mode. " + "Alias-resolution happens at config-load \u2014 typos surface immediately. " + "See reference/rfcs/supergroup-mode.md.")
13578
13578
  }).superRefine((entry, ctx) => {
13579
13579
  const kind = entry.kind ?? "prompt";
13580
13580
  if (kind === "poll" && !entry.poll) {
@@ -13747,15 +13747,15 @@ var init_schema = __esm(() => {
13747
13747
  webhook_rate_limit: exports_external.object({
13748
13748
  rpm: exports_external.number().int().positive()
13749
13749
  }).optional().describe("Per-source rate limit for the webhook ingest path (#714). " + "Off by default \u2014 when this key is absent the handler skips " + "rate-limit checks entirely. Opt in by setting `rpm` to an " + "integer requests-per-minute (token bucket per (agent, source); " + "burst equal to rpm). When enabled, exceeding the limit returns " + "429 with Retry-After header; first throttle event per " + "(agent, source) per 60s window is written to " + "<agent>/telegram/issues.jsonl. " + "Cascades from defaults.channels.telegram.webhook_rate_limit."),
13750
- webhook_via_gateway: exports_external.boolean().optional().describe("Route verified webhook events to the agent's in-container gateway " + "over a peercred-gated UDS (<agent>/telegram/webhook.sock) instead " + "of having the host-side web receiver write the agent dir directly. " + "Required under the Docker runtime: the receiver runs as the host " + "operator UID and cannot write the per-agent-UID-owned agent dir " + "(EACCES 500) nor connect the gateway socket. When true the gateway " + "(running as the agent UID) becomes the sole writer of " + "webhook-events.jsonl + dedup/cooldown state and also fires " + "webhook_dispatch. Off by default for back-compat with host-runtime " + "installs. See docs/rfcs/webhook-via-gateway-socket.md."),
13751
- webhook_require_edge: exports_external.boolean().optional().describe("Cloudflare-only edge lock: require the X-Switchroom-Edge header " + "(injected by a Cloudflare Transform Rule on hooks.switchroom.ai) to " + "match the operator's edge secret at ~/.switchroom/webhook-edge-secret " + "before any HMAC verification; reject 403 otherwise. Proves the " + "request entered through our Cloudflare edge \u2014 the per-agent HMAC " + "alone can't (it proves body provenance, not network path). Stacks " + "on the GitHub-IP WAF + per-agent HMAC. Fail-closed: when required " + "but the secret file is missing/empty every request is rejected. Off " + "by default. See docs/rfcs/webhook-cloudflare-edge-lock.md."),
13750
+ webhook_via_gateway: exports_external.boolean().optional().describe("Route verified webhook events to the agent's in-container gateway " + "over a peercred-gated UDS (<agent>/telegram/webhook.sock) instead " + "of having the host-side web receiver write the agent dir directly. " + "Required under the Docker runtime: the receiver runs as the host " + "operator UID and cannot write the per-agent-UID-owned agent dir " + "(EACCES 500) nor connect the gateway socket. When true the gateway " + "(running as the agent UID) becomes the sole writer of " + "webhook-events.jsonl + dedup/cooldown state and also fires " + "webhook_dispatch. Off by default for back-compat with host-runtime " + "installs. See reference/rfcs/webhook-via-gateway-socket.md."),
13751
+ webhook_require_edge: exports_external.boolean().optional().describe("Cloudflare-only edge lock: require the X-Switchroom-Edge header " + "(injected by a Cloudflare Transform Rule on hooks.switchroom.ai) to " + "match the operator's edge secret at ~/.switchroom/webhook-edge-secret " + "before any HMAC verification; reject 403 otherwise. Proves the " + "request entered through our Cloudflare edge \u2014 the per-agent HMAC " + "alone can't (it proves body provenance, not network path). Stacks " + "on the GitHub-IP WAF + per-agent HMAC. Fail-closed: when required " + "but the secret file is missing/empty every request is rejected. Off " + "by default. See reference/rfcs/webhook-cloudflare-edge-lock.md."),
13752
13752
  linear_agent: exports_external.object({
13753
13753
  enabled: exports_external.boolean(),
13754
13754
  token: exports_external.string().describe("vault:<key> reference to the Linear OAuth app token (actor=app). " + "Resolved at runtime via the vault broker (canonically " + "vault:linear/<agent>/token). Never an inline literal."),
13755
13755
  workspace_id: exports_external.string().optional().describe("Optional Linear workspace (organization) id this agent is " + "installed into. Informational \u2014 used for setup hints and " + "multi-workspace disambiguation; the token already scopes the " + "app to its workspace."),
13756
13756
  default_team_id: exports_external.string().optional().describe("Optional Linear team id new captured issues file into when the " + "agent doesn't pass an explicit team_id. Unnecessary for a " + "single-team workspace (auto-resolved); set it only when the " + "workspace has multiple teams. Manage via " + "`switchroom linear-agent set-team <agent> <team>`.")
13757
13757
  }).optional().describe("Linear first-class agent integration (#2298). When enabled, the " + "agent appears in a Linear workspace as an app actor (own name/" + "avatar, @-mentionable, delegate-assignable). Linear AgentSessionEvent " + "webhooks (mention / delegation) wake the agent instantly via the " + "same gateway inject path as webhook_dispatch, tagged " + 'meta.source="linear" with the agent_session_id, and the agent ' + "responds with structured AgentActivity (thought/message/complete/" + "error) via the linear_agent_activity MCP tool. Builds the " + "session-lifecycle layer on top of the plain webhook_sources:[linear] " + "+ webhook_dispatch support (#2272). The OAuth app token is stored in " + "the vault and referenced here as vault:linear/<agent>/token; run " + "`switchroom linear-agent setup <agent>` to provision it. Off by " + "default \u2014 opt in per agent. Cascades from " + "defaults.channels.telegram.linear_agent."),
13758
- chat_id: exports_external.string().regex(/^-\d+$/, 'supergroup chat_id must be a negative integer as a string (e.g. "-1001234567890")').optional().describe("Per-agent supergroup ID \u2014 overrides fleet `telegram.forum_chat_id`. " + "When set, requires `default_topic_id`. Negative integer as string. " + "Forbidden when `dm_only: true`. See docs/rfcs/supergroup-mode.md."),
13758
+ chat_id: exports_external.string().regex(/^-\d+$/, 'supergroup chat_id must be a negative integer as a string (e.g. "-1001234567890")').optional().describe("Per-agent supergroup ID \u2014 overrides fleet `telegram.forum_chat_id`. " + "When set, requires `default_topic_id`. Negative integer as string. " + "Forbidden when `dm_only: true`. See reference/rfcs/supergroup-mode.md."),
13759
13759
  default_topic_id: exports_external.number().int().positive().optional().describe("Forum topic ID this agent's automated outbounds default to when " + "no more-specific alias resolves. Defaults to General (topic 1) when " + "`chat_id` is set and this is omitted \u2014 set it only to pin a different " + "fallback topic. " + "Telegram's General topic is `id=1` at MTProto but sends omit the " + "field \u2014 the outbound wrapper strips `message_thread_id === 1` " + "on send. Forbidden when `dm_only: true`."),
13760
13760
  topic_aliases: exports_external.record(exports_external.string(), exports_external.number().int().positive()).optional().describe("Operator-friendly names for forum topic IDs (e.g. " + "`{ general: 1, planning: 17, cron: 23, admin: 31, alerts: 41 }`). " + "Referenced from per-cron `topic:` fields and the outbound router " + "for autonomous events (boot \u2192 alerts, hostd \u2192 admin, etc.). " + "Cascades per-key through defaults \u2192 profile \u2192 agent.")
13761
13761
  }).optional().superRefine((tg, ctx) => {
@@ -13981,7 +13981,7 @@ var init_schema = __esm(() => {
13981
13981
  drive: AgentGoogleWorkspaceConfigSchema.describe("RFC D legacy key \u2014 use `google_workspace:` instead. Per-agent " + "google_workspace overrides (currently approvers + tier). When set, " + "replaces the top-level approvers list for this agent. " + "google_client_id/secret are not per-agent \u2014 they live at the top level."),
13982
13982
  google_workspace: AgentGoogleWorkspaceConfigSchema.describe("RFC G canonical key. Per-agent Google Workspace overrides \u2014 currently " + "approvers (replaces, does not extend the top-level list) and tier " + "(`core` | `extended` | `complete`, replaces top-level default). " + "google_client_id/secret are not per-agent \u2014 they live at the top level. " + "Mutually exclusive with `drive:` on the same agent (loader fails fast " + "if both are set)."),
13983
13983
  microsoft_workspace: AgentMicrosoftWorkspaceConfigSchema.describe("RFC #1873 (Microsoft 365 integration). Per-agent Microsoft Workspace " + "override \u2014 pins the Microsoft account this agent reads via the " + "auth-broker (must be a key in top-level `microsoft_accounts:` with " + "this agent in its `enabled_for[]`) and optionally overrides org_mode. " + "microsoft_client_id/secret are not per-agent."),
13984
- notion_workspace: AgentNotionWorkspaceConfigSchema.describe("RFC docs/rfcs/notion-integration.md. Per-agent Notion access. " + "Presence opts the agent IN (launcher scaffolded, MCP entry emitted, " + "broker grants the integration token). Optional `databases:` filter " + "narrows which DBs this agent may read/write \u2014 names must resolve in " + "top-level notion_workspace.databases. Absence opts the agent OUT."),
13984
+ notion_workspace: AgentNotionWorkspaceConfigSchema.describe("RFC reference/rfcs/notion-integration.md. Per-agent Notion access. " + "Presence opts the agent IN (launcher scaffolded, MCP entry emitted, " + "broker grants the integration token). Optional `databases:` filter " + "narrows which DBs this agent may read/write \u2014 names must resolve in " + "top-level notion_workspace.databases. Absence opts the agent OUT."),
13985
13985
  repos: exports_external.record(exports_external.string().regex(/^[a-z0-9][a-z0-9-]*$/, "Repo slug must be kebab-case ASCII: start with a lowercase letter or digit, contain only lowercase letters, digits, and hyphens"), exports_external.object({
13986
13986
  url: exports_external.string().min(1).describe("Git remote URL for the repo (e.g. 'git@github.com:org/repo.git' or " + "'https://github.com/org/repo.git'). Used verbatim for git clone."),
13987
13987
  branch_default: exports_external.string().optional().describe("Default branch to track (defaults to the remote's HEAD, typically 'main'). " + "The per-agent branch 'agent/<agentName>/main' fast-forwards to this branch " + "when the worktree is clean on session start.")
@@ -14116,9 +14116,9 @@ var init_schema = __esm(() => {
14116
14116
  drive: GoogleWorkspaceConfigSchema.describe("RFC D legacy key \u2014 use `google_workspace:` instead. Optional Google " + "Workspace onboarding configuration. When set, supplies Google OAuth " + "client credentials, the approver allowlist for `switchroom drive " + "connect`, and the optional tier knob. Env vars " + "(SWITCHROOM_GOOGLE_CLIENT_ID, SWITCHROOM_GOOGLE_CLIENT_SECRET, " + "SWITCHROOM_APPROVER_USER_ID) take precedence over this block when " + "set, preserving back-compat with the env-only flow shipped in #766."),
14117
14117
  google_workspace: GoogleWorkspaceConfigSchema.describe("RFC G canonical key. Top-level Google Workspace configuration \u2014 " + "OAuth client credentials, approver allowlist, and tier knob (`core` " + "| `extended` | `complete`, default `core`). Mutually exclusive with " + "`drive:` at the top level (loader fails fast if both are set)."),
14118
14118
  microsoft_workspace: MicrosoftWorkspaceConfigSchema.describe("RFC #1873 (Microsoft 365 integration). Top-level Microsoft Workspace " + "configuration \u2014 OAuth client credentials (Entra app), authority " + "endpoint (defaults to /common for personal MSA + work), and the " + "org_mode opt-in for Teams/SharePoint surfaces. Block is optional; " + "when omitted the broker does not register the Microsoft provider."),
14119
- notion_workspace: NotionWorkspaceConfigSchema.describe("RFC docs/rfcs/notion-integration.md. Top-level Notion integration " + "config \u2014 vault key for the integration token, friendly-name \u2192 " + "database UUID map, optional MCP-package version pin, and optional " + "global rate-limit override (default 3 rps, Notion's documented " + "public-API limit). Block is optional; when omitted no agent gets a " + "Notion MCP entry regardless of per-agent config."),
14119
+ notion_workspace: NotionWorkspaceConfigSchema.describe("RFC reference/rfcs/notion-integration.md. Top-level Notion integration " + "config \u2014 vault key for the integration token, friendly-name \u2192 " + "database UUID map, optional MCP-package version pin, and optional " + "global rate-limit override (default 3 rps, Notion's documented " + "public-API limit). Block is optional; when omitted no agent gets a " + "Notion MCP entry regardless of per-agent config."),
14120
14120
  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."),
14121
- host_control: HostControlConfigSchema.default({}).describe("Host-control daemon configuration. Defaults to enabled=true since " + "RFC C Phase 2 (docs/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)."),
14121
+ 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)."),
14122
14122
  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)."),
14123
14123
  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 \u2014 then `switchroom update` keeps it " + "refreshed. See `switchroom webd install`."),
14124
14124
  google_accounts: exports_external.record(exports_external.string().regex(/^[^@\s:]+@[^@\s:]+\.[^@\s:]+$/, {
@@ -14140,7 +14140,7 @@ var init_schema = __esm(() => {
14140
14140
  agents: exports_external.record(exports_external.string().regex(/^[a-z0-9][a-z0-9_-]{0,50}$/, {
14141
14141
  message: "Agent name must start with a letter/digit, contain only lowercase letters/digits/hyphens/underscores, and be at most 51 characters (Telegram callback_data byte limit)"
14142
14142
  }), AgentSchema).describe("Map of agent name to agent configuration"),
14143
- cron: CronConfigSchema.optional().describe("Cheap-cron settings (docs/rfcs/cheap-cron-sessions.md). Operator-owned " + "egress allowlist + host-pinned secret bindings for Tier-0 http-diff " + "polls (\u00a76.1). Required to enable any http-diff poll; not agent-writable.")
14143
+ cron: CronConfigSchema.optional().describe("Cheap-cron settings (reference/rfcs/cheap-cron-sessions.md). Operator-owned " + "egress allowlist + host-pinned secret bindings for Tier-0 http-diff " + "polls (\u00a76.1). Required to enable any http-diff poll; not agent-writable.")
14144
14144
  });
14145
14145
  });
14146
14146
 
@@ -15897,7 +15897,7 @@ var init_acl = __esm(() => {
15897
15897
  ]);
15898
15898
  });
15899
15899
 
15900
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/utils.js
15900
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/utils.js
15901
15901
  var require_utils = __commonJS((exports) => {
15902
15902
  exports.__esModule = true;
15903
15903
  exports.extend = extend;
@@ -15993,7 +15993,7 @@ var require_utils = __commonJS((exports) => {
15993
15993
  }
15994
15994
  });
15995
15995
 
15996
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/exception.js
15996
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/exception.js
15997
15997
  var require_exception = __commonJS((exports, module) => {
15998
15998
  exports.__esModule = true;
15999
15999
  var errorProps = ["description", "fileName", "lineNumber", "endLineNumber", "message", "name", "number", "stack"];
@@ -16038,7 +16038,7 @@ var require_exception = __commonJS((exports, module) => {
16038
16038
  module.exports = exports["default"];
16039
16039
  });
16040
16040
 
16041
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js
16041
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js
16042
16042
  var require_block_helper_missing = __commonJS((exports, module) => {
16043
16043
  exports.__esModule = true;
16044
16044
  var _utils = require_utils();
@@ -16071,7 +16071,7 @@ var require_block_helper_missing = __commonJS((exports, module) => {
16071
16071
  module.exports = exports["default"];
16072
16072
  });
16073
16073
 
16074
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js
16074
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js
16075
16075
  var require_each = __commonJS((exports, module) => {
16076
16076
  exports.__esModule = true;
16077
16077
  function _interopRequireDefault(obj) {
@@ -16152,7 +16152,7 @@ var require_each = __commonJS((exports, module) => {
16152
16152
  module.exports = exports["default"];
16153
16153
  });
16154
16154
 
16155
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js
16155
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js
16156
16156
  var require_helper_missing = __commonJS((exports, module) => {
16157
16157
  exports.__esModule = true;
16158
16158
  function _interopRequireDefault(obj) {
@@ -16172,7 +16172,7 @@ var require_helper_missing = __commonJS((exports, module) => {
16172
16172
  module.exports = exports["default"];
16173
16173
  });
16174
16174
 
16175
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/if.js
16175
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/if.js
16176
16176
  var require_if = __commonJS((exports, module) => {
16177
16177
  exports.__esModule = true;
16178
16178
  function _interopRequireDefault(obj) {
@@ -16209,7 +16209,7 @@ var require_if = __commonJS((exports, module) => {
16209
16209
  module.exports = exports["default"];
16210
16210
  });
16211
16211
 
16212
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/log.js
16212
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/log.js
16213
16213
  var require_log2 = __commonJS((exports, module) => {
16214
16214
  exports.__esModule = true;
16215
16215
  exports.default = function(instance) {
@@ -16231,7 +16231,7 @@ var require_log2 = __commonJS((exports, module) => {
16231
16231
  module.exports = exports["default"];
16232
16232
  });
16233
16233
 
16234
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js
16234
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js
16235
16235
  var require_lookup = __commonJS((exports, module) => {
16236
16236
  exports.__esModule = true;
16237
16237
  exports.default = function(instance) {
@@ -16245,7 +16245,7 @@ var require_lookup = __commonJS((exports, module) => {
16245
16245
  module.exports = exports["default"];
16246
16246
  });
16247
16247
 
16248
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/with.js
16248
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers/with.js
16249
16249
  var require_with = __commonJS((exports, module) => {
16250
16250
  exports.__esModule = true;
16251
16251
  function _interopRequireDefault(obj) {
@@ -16281,7 +16281,7 @@ var require_with = __commonJS((exports, module) => {
16281
16281
  module.exports = exports["default"];
16282
16282
  });
16283
16283
 
16284
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers.js
16284
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/helpers.js
16285
16285
  var require_helpers = __commonJS((exports) => {
16286
16286
  exports.__esModule = true;
16287
16287
  exports.registerDefaultHelpers = registerDefaultHelpers;
@@ -16322,7 +16322,7 @@ var require_helpers = __commonJS((exports) => {
16322
16322
  }
16323
16323
  });
16324
16324
 
16325
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js
16325
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js
16326
16326
  var require_inline = __commonJS((exports, module) => {
16327
16327
  exports.__esModule = true;
16328
16328
  var _utils = require_utils();
@@ -16346,7 +16346,7 @@ var require_inline = __commonJS((exports, module) => {
16346
16346
  module.exports = exports["default"];
16347
16347
  });
16348
16348
 
16349
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/decorators.js
16349
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/decorators.js
16350
16350
  var require_decorators = __commonJS((exports) => {
16351
16351
  exports.__esModule = true;
16352
16352
  exports.registerDefaultDecorators = registerDefaultDecorators;
@@ -16360,7 +16360,7 @@ var require_decorators = __commonJS((exports) => {
16360
16360
  }
16361
16361
  });
16362
16362
 
16363
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/logger.js
16363
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/logger.js
16364
16364
  var require_logger = __commonJS((exports, module) => {
16365
16365
  exports.__esModule = true;
16366
16366
  var _utils = require_utils();
@@ -16396,7 +16396,7 @@ var require_logger = __commonJS((exports, module) => {
16396
16396
  module.exports = exports["default"];
16397
16397
  });
16398
16398
 
16399
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js
16399
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js
16400
16400
  var require_proto_access = __commonJS((exports) => {
16401
16401
  exports.__esModule = true;
16402
16402
  exports.createProtoAccessControl = createProtoAccessControl;
@@ -16463,7 +16463,7 @@ var require_proto_access = __commonJS((exports) => {
16463
16463
  }
16464
16464
  });
16465
16465
 
16466
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/base.js
16466
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/base.js
16467
16467
  var require_base = __commonJS((exports) => {
16468
16468
  exports.__esModule = true;
16469
16469
  exports.HandlebarsEnvironment = HandlebarsEnvironment;
@@ -16556,7 +16556,7 @@ var require_base = __commonJS((exports) => {
16556
16556
  exports.logger = _logger2["default"];
16557
16557
  });
16558
16558
 
16559
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/safe-string.js
16559
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/safe-string.js
16560
16560
  var require_safe_string = __commonJS((exports, module) => {
16561
16561
  exports.__esModule = true;
16562
16562
  function SafeString(string) {
@@ -16569,7 +16569,7 @@ var require_safe_string = __commonJS((exports, module) => {
16569
16569
  module.exports = exports["default"];
16570
16570
  });
16571
16571
 
16572
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js
16572
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js
16573
16573
  var require_wrapHelper = __commonJS((exports) => {
16574
16574
  exports.__esModule = true;
16575
16575
  exports.wrapHelper = wrapHelper;
@@ -16586,7 +16586,7 @@ var require_wrapHelper = __commonJS((exports) => {
16586
16586
  }
16587
16587
  });
16588
16588
 
16589
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/runtime.js
16589
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/runtime.js
16590
16590
  var require_runtime = __commonJS((exports) => {
16591
16591
  exports.__esModule = true;
16592
16592
  exports.checkRevision = checkRevision;
@@ -16901,7 +16901,7 @@ var require_runtime = __commonJS((exports) => {
16901
16901
  }
16902
16902
  });
16903
16903
 
16904
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/no-conflict.js
16904
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/no-conflict.js
16905
16905
  var require_no_conflict = __commonJS((exports, module) => {
16906
16906
  exports.__esModule = true;
16907
16907
  exports.default = function(Handlebars) {
@@ -16925,7 +16925,7 @@ var require_no_conflict = __commonJS((exports, module) => {
16925
16925
  module.exports = exports["default"];
16926
16926
  });
16927
16927
 
16928
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars.runtime.js
16928
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars.runtime.js
16929
16929
  var require_handlebars_runtime = __commonJS((exports, module) => {
16930
16930
  exports.__esModule = true;
16931
16931
  function _interopRequireDefault(obj) {
@@ -16979,7 +16979,7 @@ var require_handlebars_runtime = __commonJS((exports, module) => {
16979
16979
  module.exports = exports["default"];
16980
16980
  });
16981
16981
 
16982
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js
16982
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js
16983
16983
  var require_ast = __commonJS((exports, module) => {
16984
16984
  exports.__esModule = true;
16985
16985
  var AST = {
@@ -16999,7 +16999,7 @@ var require_ast = __commonJS((exports, module) => {
16999
16999
  module.exports = exports["default"];
17000
17000
  });
17001
17001
 
17002
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js
17002
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js
17003
17003
  var require_parser2 = __commonJS((exports, module) => {
17004
17004
  exports.__esModule = true;
17005
17005
  var handlebars = function() {
@@ -17723,7 +17723,7 @@ Expecting ` + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symb
17723
17723
  module.exports = exports["default"];
17724
17724
  });
17725
17725
 
17726
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js
17726
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js
17727
17727
  var require_visitor = __commonJS((exports, module) => {
17728
17728
  exports.__esModule = true;
17729
17729
  function _interopRequireDefault(obj) {
@@ -17828,7 +17828,7 @@ var require_visitor = __commonJS((exports, module) => {
17828
17828
  module.exports = exports["default"];
17829
17829
  });
17830
17830
 
17831
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js
17831
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js
17832
17832
  var require_whitespace_control = __commonJS((exports, module) => {
17833
17833
  exports.__esModule = true;
17834
17834
  function _interopRequireDefault(obj) {
@@ -17974,7 +17974,7 @@ var require_whitespace_control = __commonJS((exports, module) => {
17974
17974
  module.exports = exports["default"];
17975
17975
  });
17976
17976
 
17977
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js
17977
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js
17978
17978
  var require_helpers2 = __commonJS((exports) => {
17979
17979
  exports.__esModule = true;
17980
17980
  exports.SourceLocation = SourceLocation;
@@ -18159,7 +18159,7 @@ var require_helpers2 = __commonJS((exports) => {
18159
18159
  }
18160
18160
  });
18161
18161
 
18162
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js
18162
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js
18163
18163
  var require_base2 = __commonJS((exports) => {
18164
18164
  exports.__esModule = true;
18165
18165
  exports.parseWithoutProcessing = parseWithoutProcessing;
@@ -18258,7 +18258,7 @@ var require_base2 = __commonJS((exports) => {
18258
18258
  }
18259
18259
  });
18260
18260
 
18261
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js
18261
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js
18262
18262
  var require_compiler = __commonJS((exports) => {
18263
18263
  exports.__esModule = true;
18264
18264
  exports.Compiler = Compiler;
@@ -18675,7 +18675,7 @@ var require_compiler = __commonJS((exports) => {
18675
18675
  }
18676
18676
  });
18677
18677
 
18678
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/base64.js
18678
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/base64.js
18679
18679
  var require_base64 = __commonJS((exports) => {
18680
18680
  var intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
18681
18681
  exports.encode = function(number) {
@@ -18714,7 +18714,7 @@ var require_base64 = __commonJS((exports) => {
18714
18714
  };
18715
18715
  });
18716
18716
 
18717
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/base64-vlq.js
18717
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/base64-vlq.js
18718
18718
  var require_base64_vlq = __commonJS((exports) => {
18719
18719
  var base64 = require_base64();
18720
18720
  var VLQ_BASE_SHIFT = 5;
@@ -18766,7 +18766,7 @@ var require_base64_vlq = __commonJS((exports) => {
18766
18766
  };
18767
18767
  });
18768
18768
 
18769
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/util.js
18769
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/util.js
18770
18770
  var require_util = __commonJS((exports) => {
18771
18771
  function getArg(aArgs, aName, aDefaultValue) {
18772
18772
  if (aName in aArgs) {
@@ -19065,7 +19065,7 @@ var require_util = __commonJS((exports) => {
19065
19065
  exports.computeSourceURL = computeSourceURL;
19066
19066
  });
19067
19067
 
19068
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/array-set.js
19068
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/array-set.js
19069
19069
  var require_array_set = __commonJS((exports) => {
19070
19070
  var util3 = require_util();
19071
19071
  var has = Object.prototype.hasOwnProperty;
@@ -19133,7 +19133,7 @@ var require_array_set = __commonJS((exports) => {
19133
19133
  exports.ArraySet = ArraySet;
19134
19134
  });
19135
19135
 
19136
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/mapping-list.js
19136
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/mapping-list.js
19137
19137
  var require_mapping_list = __commonJS((exports) => {
19138
19138
  var util3 = require_util();
19139
19139
  function generatedPositionAfter(mappingA, mappingB) {
@@ -19170,7 +19170,7 @@ var require_mapping_list = __commonJS((exports) => {
19170
19170
  exports.MappingList = MappingList;
19171
19171
  });
19172
19172
 
19173
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-map-generator.js
19173
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-map-generator.js
19174
19174
  var require_source_map_generator = __commonJS((exports) => {
19175
19175
  var base64VLQ = require_base64_vlq();
19176
19176
  var util3 = require_util();
@@ -19440,7 +19440,7 @@ var require_source_map_generator = __commonJS((exports) => {
19440
19440
  exports.SourceMapGenerator = SourceMapGenerator;
19441
19441
  });
19442
19442
 
19443
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/binary-search.js
19443
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/binary-search.js
19444
19444
  var require_binary_search = __commonJS((exports) => {
19445
19445
  exports.GREATEST_LOWER_BOUND = 1;
19446
19446
  exports.LEAST_UPPER_BOUND = 2;
@@ -19487,7 +19487,7 @@ var require_binary_search = __commonJS((exports) => {
19487
19487
  };
19488
19488
  });
19489
19489
 
19490
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/quick-sort.js
19490
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/quick-sort.js
19491
19491
  var require_quick_sort = __commonJS((exports) => {
19492
19492
  function swap(ary, x, y) {
19493
19493
  var temp = ary[x];
@@ -19520,7 +19520,7 @@ var require_quick_sort = __commonJS((exports) => {
19520
19520
  };
19521
19521
  });
19522
19522
 
19523
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-map-consumer.js
19523
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-map-consumer.js
19524
19524
  var require_source_map_consumer = __commonJS((exports) => {
19525
19525
  var util3 = require_util();
19526
19526
  var binarySearch = require_binary_search();
@@ -20089,7 +20089,7 @@ var require_source_map_consumer = __commonJS((exports) => {
20089
20089
  exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
20090
20090
  });
20091
20091
 
20092
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-node.js
20092
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-node.js
20093
20093
  var require_source_node = __commonJS((exports) => {
20094
20094
  var SourceMapGenerator = require_source_map_generator().SourceMapGenerator;
20095
20095
  var util3 = require_util();
@@ -20343,14 +20343,14 @@ var require_source_node = __commonJS((exports) => {
20343
20343
  exports.SourceNode = SourceNode;
20344
20344
  });
20345
20345
 
20346
- // ../switchroom-sec-1417/node_modules/.bun/source-map@0.6.1/node_modules/source-map/source-map.js
20346
+ // node_modules/.bun/source-map@0.6.1/node_modules/source-map/source-map.js
20347
20347
  var require_source_map = __commonJS((exports) => {
20348
20348
  exports.SourceMapGenerator = require_source_map_generator().SourceMapGenerator;
20349
20349
  exports.SourceMapConsumer = require_source_map_consumer().SourceMapConsumer;
20350
20350
  exports.SourceNode = require_source_node().SourceNode;
20351
20351
  });
20352
20352
 
20353
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js
20353
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js
20354
20354
  var require_code_gen = __commonJS((exports, module) => {
20355
20355
  exports.__esModule = true;
20356
20356
  var _utils = require_utils();
@@ -20483,7 +20483,7 @@ var require_code_gen = __commonJS((exports, module) => {
20483
20483
  module.exports = exports["default"];
20484
20484
  });
20485
20485
 
20486
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js
20486
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js
20487
20487
  var require_javascript_compiler = __commonJS((exports, module) => {
20488
20488
  exports.__esModule = true;
20489
20489
  function _interopRequireDefault(obj) {
@@ -21251,7 +21251,7 @@ var require_javascript_compiler = __commonJS((exports, module) => {
21251
21251
  module.exports = exports["default"];
21252
21252
  });
21253
21253
 
21254
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars.js
21254
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars.js
21255
21255
  var require_handlebars = __commonJS((exports, module) => {
21256
21256
  exports.__esModule = true;
21257
21257
  function _interopRequireDefault(obj) {
@@ -21295,7 +21295,7 @@ var require_handlebars = __commonJS((exports, module) => {
21295
21295
  module.exports = exports["default"];
21296
21296
  });
21297
21297
 
21298
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/printer.js
21298
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/dist/cjs/handlebars/compiler/printer.js
21299
21299
  var require_printer = __commonJS((exports) => {
21300
21300
  exports.__esModule = true;
21301
21301
  exports.print = print;
@@ -21439,7 +21439,7 @@ var require_printer = __commonJS((exports) => {
21439
21439
  };
21440
21440
  });
21441
21441
 
21442
- // ../switchroom-sec-1417/node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/lib/index.js
21442
+ // node_modules/.bun/handlebars@4.7.9/node_modules/handlebars/lib/index.js
21443
21443
  var require_lib = __commonJS((exports, module) => {
21444
21444
  var handlebars = require_handlebars()["default"];
21445
21445
  var printer = require_printer();
@@ -31570,6 +31570,112 @@ var init_doctor_notion = __esm(() => {
31570
31570
  HEARTBEAT_STALE_MS = 60 * 1000;
31571
31571
  });
31572
31572
 
31573
+ // src/cli/doctor-mcp-secrets.ts
31574
+ function entryScopeDenies(agent, allow, deny) {
31575
+ if (deny.includes(agent))
31576
+ return true;
31577
+ if (allow.length > 0 && !allow.includes(agent))
31578
+ return true;
31579
+ return false;
31580
+ }
31581
+ function computeMcpSecretRequirements(config) {
31582
+ const cfg = config;
31583
+ const reqs = [];
31584
+ for (const [agent, agentConfig] of Object.entries(cfg.agents ?? {})) {
31585
+ if (!agentConfig)
31586
+ continue;
31587
+ const profileName = agentConfig.extends;
31588
+ const profileMcp = profileName != null && profileName.length > 0 ? cfg.profiles?.[profileName]?.mcp_servers ?? {} : {};
31589
+ const effectiveMcp = {
31590
+ ...cfg.defaults?.mcp_servers ?? {},
31591
+ ...profileMcp,
31592
+ ...agentConfig.mcp_servers ?? {}
31593
+ };
31594
+ for (const [server, entry] of Object.entries(effectiveMcp)) {
31595
+ if (!entry || typeof entry !== "object")
31596
+ continue;
31597
+ const declared = entry.secrets;
31598
+ if (!Array.isArray(declared))
31599
+ continue;
31600
+ const keys = declared.filter((k) => typeof k === "string" && k.length > 0);
31601
+ if (keys.length === 0)
31602
+ continue;
31603
+ reqs.push({ agent, server, keys });
31604
+ }
31605
+ }
31606
+ return reqs;
31607
+ }
31608
+ async function runMcpSecretChecks(config, deps = {}) {
31609
+ const reqs = computeMcpSecretRequirements(config);
31610
+ if (reqs.length === 0)
31611
+ return [];
31612
+ const read = deps.vaultAclReader ?? (async () => ({
31613
+ kind: "unreachable",
31614
+ msg: "no vault reader wired"
31615
+ }));
31616
+ const aclCache = new Map;
31617
+ const readKey = async (key) => {
31618
+ const cached = aclCache.get(key);
31619
+ if (cached)
31620
+ return cached;
31621
+ const r = await read(key);
31622
+ aclCache.set(key, r);
31623
+ return r;
31624
+ };
31625
+ const agentsNeedingKey = new Map;
31626
+ for (const r of reqs) {
31627
+ for (const key of r.keys) {
31628
+ let set = agentsNeedingKey.get(key);
31629
+ if (!set) {
31630
+ set = new Set;
31631
+ agentsNeedingKey.set(key, set);
31632
+ }
31633
+ set.add(r.agent);
31634
+ }
31635
+ }
31636
+ const results = [];
31637
+ for (const r of reqs) {
31638
+ for (const key of r.keys) {
31639
+ const acl = await readKey(key);
31640
+ const name = `mcp-conn:${r.agent}:${r.server}:${key}`;
31641
+ const want = [...agentsNeedingKey.get(key) ?? new Set].sort();
31642
+ if (acl.kind === "unreachable") {
31643
+ results.push({
31644
+ name,
31645
+ status: "warn",
31646
+ detail: `vault-broker unreachable, can't verify '${key}' for MCP '${r.server}': ${acl.msg}`,
31647
+ fix: "Ensure the vault-broker is running and the operator socket is reachable, then re-run doctor."
31648
+ });
31649
+ continue;
31650
+ }
31651
+ if (acl.kind === "not_found") {
31652
+ results.push({
31653
+ name,
31654
+ status: "fail",
31655
+ detail: `agent '${r.agent}' loads MCP '${r.server}' which needs vault key '${key}', but the key is missing \u2014 '${r.server}' is configured but NOT authed and will fail at runtime`,
31656
+ fix: `switchroom vault set ${key} --allow ${want.join(",")} (then provide the value), or remove '${r.server}' from this agent's mcp_servers.`
31657
+ });
31658
+ continue;
31659
+ }
31660
+ if (entryScopeDenies(r.agent, acl.allow, acl.deny)) {
31661
+ results.push({
31662
+ name,
31663
+ status: "fail",
31664
+ detail: `agent '${r.agent}' loads MCP '${r.server}' but the vault entry scope for '${key}' denies it \u2014 the broker will deny at runtime`,
31665
+ fix: `switchroom vault set ${key} --allow ${[...new Set([...acl.allow, r.agent])].sort().join(",")} (vault set overwrites the scope \u2014 re-state the full list including '${r.agent}'; and drop it from --deny if present).`
31666
+ });
31667
+ continue;
31668
+ }
31669
+ results.push({
31670
+ name,
31671
+ status: "ok",
31672
+ detail: `MCP '${r.server}' \u2192 '${key}' present + scope-allowed`
31673
+ });
31674
+ }
31675
+ }
31676
+ return results;
31677
+ }
31678
+
31573
31679
  // src/cli/doctor-credentials-migration.ts
31574
31680
  import {
31575
31681
  existsSync as realExistsSync5,
@@ -33909,6 +34015,24 @@ function registerDoctorCommand(program3) {
33909
34015
  console.error(`Unknown skill: ${opts.skill}. Supported: mff`);
33910
34016
  process.exit(1);
33911
34017
  }
34018
+ const vaultAclReader = async (key) => {
34019
+ try {
34020
+ const { getViaBrokerStructured: getViaBrokerStructured2 } = await Promise.resolve().then(() => (init_client(), exports_client));
34021
+ const result = await getViaBrokerStructured2(key);
34022
+ if (result.kind === "ok") {
34023
+ return {
34024
+ kind: "ok",
34025
+ allow: result.entry.scope?.allow ?? [],
34026
+ deny: result.entry.scope?.deny ?? []
34027
+ };
34028
+ }
34029
+ if (result.kind === "not_found")
34030
+ return { kind: "not_found" };
34031
+ return { kind: "unreachable", msg: result.msg };
34032
+ } catch (err) {
34033
+ return { kind: "unreachable", msg: err.message };
34034
+ }
34035
+ };
33912
34036
  const sections = [
33913
34037
  { title: "Dependencies", results: checkDependencies() },
33914
34038
  { title: "Skills Prerequisites", results: checkSkillsPrerequisites() },
@@ -33950,25 +34074,11 @@ function registerDoctorCommand(program3) {
33950
34074
  },
33951
34075
  {
33952
34076
  title: "Notion (RFC notion-integration)",
33953
- results: await runNotionChecks(config, {
33954
- vaultAclReader: async (key) => {
33955
- try {
33956
- const { getViaBrokerStructured: getViaBrokerStructured2 } = await Promise.resolve().then(() => (init_client(), exports_client));
33957
- const result = await getViaBrokerStructured2(key);
33958
- if (result.kind === "ok") {
33959
- return {
33960
- kind: "ok",
33961
- allow: result.entry.scope?.allow ?? []
33962
- };
33963
- }
33964
- if (result.kind === "not_found")
33965
- return { kind: "not_found" };
33966
- return { kind: "unreachable", msg: result.msg };
33967
- } catch (err) {
33968
- return { kind: "unreachable", msg: err.message };
33969
- }
33970
- }
33971
- })
34077
+ results: await runNotionChecks(config, { vaultAclReader })
34078
+ },
34079
+ {
34080
+ title: "MCP Connections (auth)",
34081
+ results: await runMcpSecretChecks(config, { vaultAclReader })
33972
34082
  },
33973
34083
  { title: "MFF Skill", results: await checkMff(passphrase, vaultPath, config) },
33974
34084
  { title: "Webkite", results: runWebkiteChecks(config) },
@@ -34091,7 +34201,7 @@ function deriveSlug(inputs, existing) {
34091
34201
  return `${base}_${n}`;
34092
34202
  }
34093
34203
 
34094
- // ../switchroom-sec-1417/node_modules/.bun/boundary@2.0.0/node_modules/boundary/lib/index.js
34204
+ // node_modules/.bun/boundary@2.0.0/node_modules/boundary/lib/index.js
34095
34205
  var require_lib2 = __commonJS((exports2) => {
34096
34206
  Object.defineProperty(exports2, "__esModule", { value: true });
34097
34207
  exports2.binarySearch = exports2.upperBound = exports2.lowerBound = exports2.compare = undefined;
@@ -34138,7 +34248,7 @@ var require_lib2 = __commonJS((exports2) => {
34138
34248
  exports2.binarySearch = binarySearch;
34139
34249
  });
34140
34250
 
34141
- // ../switchroom-sec-1417/node_modules/.bun/structured-source@4.0.0/node_modules/structured-source/lib/structured-source.js
34251
+ // node_modules/.bun/structured-source@4.0.0/node_modules/structured-source/lib/structured-source.js
34142
34252
  var require_structured_source = __commonJS((exports2) => {
34143
34253
  Object.defineProperty(exports2, "__esModule", { value: true });
34144
34254
  exports2.StructuredSource = undefined;
@@ -34193,13 +34303,13 @@ var require_structured_source = __commonJS((exports2) => {
34193
34303
  }
34194
34304
  exports2.StructuredSource = StructuredSource;
34195
34305
  });
34196
- // ../switchroom-sec-1417/node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/SecretLintSourceCodeImpl.js
34306
+ // node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/SecretLintSourceCodeImpl.js
34197
34307
  var import_structured_source;
34198
34308
  var init_SecretLintSourceCodeImpl = __esm(() => {
34199
34309
  import_structured_source = __toESM(require_structured_source(), 1);
34200
34310
  });
34201
34311
 
34202
- // ../switchroom-sec-1417/node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/helper/promise-event-emitter.js
34312
+ // node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/helper/promise-event-emitter.js
34203
34313
  class EventEmitter {
34204
34314
  #listeners = new Map;
34205
34315
  on(type, listener) {
@@ -34238,9 +34348,9 @@ class EventEmitter {
34238
34348
  return Array.from(this.#listeners.get(type) ?? []);
34239
34349
  }
34240
34350
  }
34241
- // ../switchroom-sec-1417/node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/RuleContext.js
34351
+ // node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/RuleContext.js
34242
34352
  var init_RuleContext = () => {};
34243
- // ../switchroom-sec-1417/node_modules/.bun/@secretlint+profiler@12.2.0/node_modules/@secretlint/profiler/module/index.js
34353
+ // node_modules/.bun/@secretlint+profiler@12.2.0/node_modules/@secretlint/profiler/module/index.js
34244
34354
  class SecretLintProfiler {
34245
34355
  perf;
34246
34356
  entries = [];
@@ -34297,7 +34407,7 @@ class SecretLintProfiler {
34297
34407
  }
34298
34408
  }
34299
34409
 
34300
- // ../switchroom-sec-1417/node_modules/.bun/@secretlint+profiler@12.2.0/node_modules/@secretlint/profiler/module/node.js
34410
+ // node_modules/.bun/@secretlint+profiler@12.2.0/node_modules/@secretlint/profiler/module/node.js
34301
34411
  import perf_hooks from "node:perf_hooks";
34302
34412
 
34303
34413
  class NullPerformanceObserver {
@@ -34312,19 +34422,19 @@ var init_node = __esm(() => {
34312
34422
  });
34313
34423
  });
34314
34424
 
34315
- // ../switchroom-sec-1417/node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/RunningEvents.js
34425
+ // node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/RunningEvents.js
34316
34426
  var init_RunningEvents = __esm(() => {
34317
34427
  init_node();
34318
34428
  });
34319
34429
 
34320
- // ../switchroom-sec-1417/node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/RulePresetContext.js
34430
+ // node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/RulePresetContext.js
34321
34431
  var init_RulePresetContext = __esm(() => {
34322
34432
  init_RuleContext();
34323
34433
  });
34324
- // ../switchroom-sec-1417/node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/messages/index.js
34434
+ // node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/messages/index.js
34325
34435
  var init_messages = () => {};
34326
34436
 
34327
- // ../switchroom-sec-1417/node_modules/.bun/ms@2.1.3/node_modules/ms/index.js
34437
+ // node_modules/.bun/ms@2.1.3/node_modules/ms/index.js
34328
34438
  var require_ms = __commonJS((exports2, module) => {
34329
34439
  var s = 1000;
34330
34440
  var m = s * 60;
@@ -34434,7 +34544,7 @@ var require_ms = __commonJS((exports2, module) => {
34434
34544
  }
34435
34545
  });
34436
34546
 
34437
- // ../switchroom-sec-1417/node_modules/.bun/debug@4.4.3/node_modules/debug/src/common.js
34547
+ // node_modules/.bun/debug@4.4.3/node_modules/debug/src/common.js
34438
34548
  var require_common = __commonJS((exports2, module) => {
34439
34549
  function setup(env2) {
34440
34550
  createDebug.debug = createDebug;
@@ -34609,7 +34719,7 @@ var require_common = __commonJS((exports2, module) => {
34609
34719
  module.exports = setup;
34610
34720
  });
34611
34721
 
34612
- // ../switchroom-sec-1417/node_modules/.bun/debug@4.4.3/node_modules/debug/src/browser.js
34722
+ // node_modules/.bun/debug@4.4.3/node_modules/debug/src/browser.js
34613
34723
  var require_browser = __commonJS((exports2, module) => {
34614
34724
  exports2.formatArgs = formatArgs;
34615
34725
  exports2.save = save;
@@ -34769,7 +34879,7 @@ var require_browser = __commonJS((exports2, module) => {
34769
34879
  };
34770
34880
  });
34771
34881
 
34772
- // ../switchroom-sec-1417/node_modules/.bun/has-flag@4.0.0/node_modules/has-flag/index.js
34882
+ // node_modules/.bun/has-flag@4.0.0/node_modules/has-flag/index.js
34773
34883
  var require_has_flag = __commonJS((exports2, module) => {
34774
34884
  module.exports = (flag, argv = process.argv) => {
34775
34885
  const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
@@ -34779,7 +34889,7 @@ var require_has_flag = __commonJS((exports2, module) => {
34779
34889
  };
34780
34890
  });
34781
34891
 
34782
- // ../switchroom-sec-1417/node_modules/.bun/supports-color@7.2.0/node_modules/supports-color/index.js
34892
+ // node_modules/.bun/supports-color@7.2.0/node_modules/supports-color/index.js
34783
34893
  var require_supports_color = __commonJS((exports2, module) => {
34784
34894
  var os5 = __require("os");
34785
34895
  var tty2 = __require("tty");
@@ -34878,7 +34988,7 @@ var require_supports_color = __commonJS((exports2, module) => {
34878
34988
  };
34879
34989
  });
34880
34990
 
34881
- // ../switchroom-sec-1417/node_modules/.bun/debug@4.4.3/node_modules/debug/src/node.js
34991
+ // node_modules/.bun/debug@4.4.3/node_modules/debug/src/node.js
34882
34992
  var require_node = __commonJS((exports2, module) => {
34883
34993
  var tty2 = __require("tty");
34884
34994
  var util3 = __require("util");
@@ -35049,7 +35159,7 @@ var require_node = __commonJS((exports2, module) => {
35049
35159
  };
35050
35160
  });
35051
35161
 
35052
- // ../switchroom-sec-1417/node_modules/.bun/debug@4.4.3/node_modules/debug/src/index.js
35162
+ // node_modules/.bun/debug@4.4.3/node_modules/debug/src/index.js
35053
35163
  var require_src = __commonJS((exports2, module) => {
35054
35164
  if (typeof process === "undefined" || process.type === "renderer" || false || process.__nwjs) {
35055
35165
  module.exports = require_browser();
@@ -35058,7 +35168,7 @@ var require_src = __commonJS((exports2, module) => {
35058
35168
  }
35059
35169
  });
35060
35170
 
35061
- // ../switchroom-sec-1417/node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/index.js
35171
+ // node_modules/.bun/@secretlint+core@12.2.0/node_modules/@secretlint/core/module/index.js
35062
35172
  var import_debug, debug;
35063
35173
  var init_module = __esm(() => {
35064
35174
  init_SecretLintSourceCodeImpl();
@@ -35071,7 +35181,7 @@ var init_module = __esm(() => {
35071
35181
  debug = import_debug.default("@secretlint/core");
35072
35182
  });
35073
35183
 
35074
- // ../switchroom-sec-1417/node_modules/.bun/@secretlint+secretlint-rule-preset-recommend@12.2.0/node_modules/@secretlint/secretlint-rule-preset-recommend/module/index.js
35184
+ // node_modules/.bun/@secretlint+secretlint-rule-preset-recommend@12.2.0/node_modules/@secretlint/secretlint-rule-preset-recommend/module/index.js
35075
35185
  function requireLodash_uniq() {
35076
35186
  if (hasRequiredLodash_uniq)
35077
35187
  return lodash_uniq;
@@ -36754,7 +36864,7 @@ var init_secretlint_source = __esm(() => {
36754
36864
  init_suppressor();
36755
36865
  });
36756
36866
 
36757
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/core.js
36867
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/core.js
36758
36868
  function $constructor(name, initializer, params) {
36759
36869
  function init(inst, def) {
36760
36870
  var _a;
@@ -36817,7 +36927,7 @@ var init_core = __esm(() => {
36817
36927
  globalConfig = {};
36818
36928
  });
36819
36929
 
36820
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/util.js
36930
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/util.js
36821
36931
  var exports_util = {};
36822
36932
  __export(exports_util, {
36823
36933
  unwrapMessage: () => unwrapMessage,
@@ -37333,7 +37443,7 @@ var init_util2 = __esm(() => {
37333
37443
  };
37334
37444
  });
37335
37445
 
37336
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/errors.js
37446
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/errors.js
37337
37447
  function flattenError(error, mapper = (issue2) => issue2.message) {
37338
37448
  const fieldErrors = {};
37339
37449
  const formErrors = [];
@@ -37411,7 +37521,7 @@ var init_errors2 = __esm(() => {
37411
37521
  $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error });
37412
37522
  });
37413
37523
 
37414
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/parse.js
37524
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/parse.js
37415
37525
  var _parse = (_Err) => (schema, value, _ctx, _params) => {
37416
37526
  const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
37417
37527
  const result = schema._zod.run({ value, issues: [] }, ctx);
@@ -37463,7 +37573,7 @@ var init_parse = __esm(() => {
37463
37573
  safeParseAsync = /* @__PURE__ */ _safeParseAsync($ZodRealError);
37464
37574
  });
37465
37575
 
37466
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/regexes.js
37576
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/regexes.js
37467
37577
  function emoji() {
37468
37578
  return new RegExp(_emoji, "u");
37469
37579
  }
@@ -37520,7 +37630,7 @@ var init_regexes = __esm(() => {
37520
37630
  uppercase = /^[^a-z]*$/;
37521
37631
  });
37522
37632
 
37523
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/checks.js
37633
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/checks.js
37524
37634
  var $ZodCheck, numericOriginMap, $ZodCheckLessThan, $ZodCheckGreaterThan, $ZodCheckMultipleOf, $ZodCheckNumberFormat, $ZodCheckMaxLength, $ZodCheckMinLength, $ZodCheckLengthEquals, $ZodCheckStringFormat, $ZodCheckRegex, $ZodCheckLowerCase, $ZodCheckUpperCase, $ZodCheckIncludes, $ZodCheckStartsWith, $ZodCheckEndsWith, $ZodCheckOverwrite;
37525
37635
  var init_checks = __esm(() => {
37526
37636
  init_core();
@@ -37910,7 +38020,7 @@ var init_checks = __esm(() => {
37910
38020
  });
37911
38021
  });
37912
38022
 
37913
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/doc.js
38023
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/doc.js
37914
38024
  class Doc {
37915
38025
  constructor(args = []) {
37916
38026
  this.content = [];
@@ -37948,7 +38058,7 @@ class Doc {
37948
38058
  }
37949
38059
  }
37950
38060
 
37951
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/versions.js
38061
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/versions.js
37952
38062
  var version2;
37953
38063
  var init_versions = __esm(() => {
37954
38064
  version2 = {
@@ -37958,7 +38068,7 @@ var init_versions = __esm(() => {
37958
38068
  };
37959
38069
  });
37960
38070
 
37961
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/schemas.js
38071
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/schemas.js
37962
38072
  function isValidBase64(data) {
37963
38073
  if (data === "")
37964
38074
  return true;
@@ -39200,7 +39310,7 @@ var init_schemas = __esm(() => {
39200
39310
  });
39201
39311
  });
39202
39312
 
39203
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/locales/en.js
39313
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/locales/en.js
39204
39314
  function en_default2() {
39205
39315
  return {
39206
39316
  localeError: error()
@@ -39320,10 +39430,10 @@ var init_en2 = __esm(() => {
39320
39430
  init_util2();
39321
39431
  });
39322
39432
 
39323
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/locales/index.js
39433
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/locales/index.js
39324
39434
  var init_locales = () => {};
39325
39435
 
39326
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/registries.js
39436
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/registries.js
39327
39437
  class $ZodRegistry {
39328
39438
  constructor() {
39329
39439
  this._map = new Map;
@@ -39376,7 +39486,7 @@ var init_registries = __esm(() => {
39376
39486
  globalRegistry = /* @__PURE__ */ registry();
39377
39487
  });
39378
39488
 
39379
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/api.js
39489
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/api.js
39380
39490
  function _string(Class2, params) {
39381
39491
  return new Class2({
39382
39492
  type: "string",
@@ -39816,16 +39926,16 @@ var init_api = __esm(() => {
39816
39926
  init_util2();
39817
39927
  });
39818
39928
 
39819
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/function.js
39929
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/function.js
39820
39930
  var init_function = () => {};
39821
39931
 
39822
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/to-json-schema.js
39932
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/to-json-schema.js
39823
39933
  var init_to_json_schema = () => {};
39824
39934
 
39825
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/json-schema.js
39935
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/json-schema.js
39826
39936
  var init_json_schema = () => {};
39827
39937
 
39828
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/index.js
39938
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/core/index.js
39829
39939
  var init_core2 = __esm(() => {
39830
39940
  init_util2();
39831
39941
  init_regexes();
@@ -39843,24 +39953,24 @@ var init_core2 = __esm(() => {
39843
39953
  init_to_json_schema();
39844
39954
  });
39845
39955
 
39846
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/parse.js
39956
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/parse.js
39847
39957
  var init_parse2 = __esm(() => {
39848
39958
  init_core2();
39849
39959
  });
39850
39960
 
39851
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/schemas.js
39961
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/schemas.js
39852
39962
  var init_schemas2 = () => {};
39853
39963
 
39854
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/checks.js
39964
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/checks.js
39855
39965
  var init_checks2 = () => {};
39856
39966
 
39857
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/iso.js
39967
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/iso.js
39858
39968
  var init_iso = () => {};
39859
39969
 
39860
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/coerce.js
39970
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/coerce.js
39861
39971
  var init_coerce = () => {};
39862
39972
 
39863
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/external.js
39973
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/external.js
39864
39974
  var init_external2 = __esm(() => {
39865
39975
  init_core2();
39866
39976
  init_locales();
@@ -39871,17 +39981,17 @@ var init_external2 = __esm(() => {
39871
39981
  init_checks2();
39872
39982
  });
39873
39983
 
39874
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/index.js
39984
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/mini/index.js
39875
39985
  var init_mini = __esm(() => {
39876
39986
  init_external2();
39877
39987
  });
39878
39988
 
39879
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4-mini/index.js
39989
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4-mini/index.js
39880
39990
  var init_v4_mini = __esm(() => {
39881
39991
  init_mini();
39882
39992
  });
39883
39993
 
39884
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js
39994
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js
39885
39995
  function isZ4Schema(s) {
39886
39996
  const schema = s;
39887
39997
  return !!schema._zod;
@@ -39947,12 +40057,12 @@ var init_zod_compat = __esm(() => {
39947
40057
  init_v4_mini();
39948
40058
  });
39949
40059
 
39950
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/checks.js
40060
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/checks.js
39951
40061
  var init_checks3 = __esm(() => {
39952
40062
  init_core2();
39953
40063
  });
39954
40064
 
39955
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/iso.js
40065
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/iso.js
39956
40066
  var exports_iso2 = {};
39957
40067
  __export(exports_iso2, {
39958
40068
  time: () => time2,
@@ -39998,7 +40108,7 @@ var init_iso2 = __esm(() => {
39998
40108
  });
39999
40109
  });
40000
40110
 
40001
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/errors.js
40111
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/errors.js
40002
40112
  var initializer2 = (inst, issues) => {
40003
40113
  $ZodError.init(inst, issues);
40004
40114
  inst.name = "ZodError";
@@ -40031,7 +40141,7 @@ var init_errors3 = __esm(() => {
40031
40141
  });
40032
40142
  });
40033
40143
 
40034
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/parse.js
40144
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/parse.js
40035
40145
  var parse4, parseAsync2, safeParse3, safeParseAsync2;
40036
40146
  var init_parse3 = __esm(() => {
40037
40147
  init_core2();
@@ -40042,7 +40152,7 @@ var init_parse3 = __esm(() => {
40042
40152
  safeParseAsync2 = /* @__PURE__ */ _safeParseAsync(ZodRealError);
40043
40153
  });
40044
40154
 
40045
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/schemas.js
40155
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/schemas.js
40046
40156
  function string2(params) {
40047
40157
  return _string(ZodString2, params);
40048
40158
  }
@@ -40656,13 +40766,13 @@ var init_schemas3 = __esm(() => {
40656
40766
  });
40657
40767
  });
40658
40768
 
40659
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/compat.js
40769
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/compat.js
40660
40770
  var init_compat = () => {};
40661
40771
 
40662
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/coerce.js
40772
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/coerce.js
40663
40773
  var init_coerce2 = () => {};
40664
40774
 
40665
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/external.js
40775
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/external.js
40666
40776
  var init_external3 = __esm(() => {
40667
40777
  init_core2();
40668
40778
  init_core2();
@@ -40678,17 +40788,17 @@ var init_external3 = __esm(() => {
40678
40788
  config(en_default2());
40679
40789
  });
40680
40790
 
40681
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/index.js
40791
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/classic/index.js
40682
40792
  var init_classic = __esm(() => {
40683
40793
  init_external3();
40684
40794
  });
40685
40795
 
40686
- // ../switchroom-sec-1417/node_modules/.bun/zod@3.25.76/node_modules/zod/v4/index.js
40796
+ // node_modules/.bun/zod@3.25.76/node_modules/zod/v4/index.js
40687
40797
  var init_v4 = __esm(() => {
40688
40798
  init_classic();
40689
40799
  });
40690
40800
 
40691
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
40801
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
40692
40802
  var LATEST_PROTOCOL_VERSION = "2025-11-25", SUPPORTED_PROTOCOL_VERSIONS, RELATED_TASK_META_KEY = "io.modelcontextprotocol/related-task", JSONRPC_VERSION = "2.0", AssertObjectSchema, ProgressTokenSchema, CursorSchema, TaskCreationParamsSchema, TaskMetadataSchema, RelatedTaskMetadataSchema, RequestMetaSchema, BaseRequestParamsSchema, TaskAugmentedRequestParamsSchema, isTaskAugmentedRequestParams = (value) => TaskAugmentedRequestParamsSchema.safeParse(value).success, RequestSchema4, NotificationsParamsSchema, NotificationSchema, ResultSchema2, RequestIdSchema, JSONRPCRequestSchema, isJSONRPCRequest = (value) => JSONRPCRequestSchema.safeParse(value).success, JSONRPCNotificationSchema, isJSONRPCNotification = (value) => JSONRPCNotificationSchema.safeParse(value).success, JSONRPCResultResponseSchema, isJSONRPCResultResponse = (value) => JSONRPCResultResponseSchema.safeParse(value).success, ErrorCode2, JSONRPCErrorResponseSchema, isJSONRPCErrorResponse = (value) => JSONRPCErrorResponseSchema.safeParse(value).success, JSONRPCMessageSchema, JSONRPCResponseSchema, EmptyResultSchema, CancelledNotificationParamsSchema, CancelledNotificationSchema, IconSchema, IconsSchema, BaseMetadataSchema, ImplementationSchema, FormElicitationCapabilitySchema, ElicitationCapabilitySchema, ClientTasksCapabilitySchema, ServerTasksCapabilitySchema, ClientCapabilitiesSchema, InitializeRequestParamsSchema, InitializeRequestSchema, ServerCapabilitiesSchema, InitializeResultSchema, InitializedNotificationSchema, PingRequestSchema, ProgressSchema, ProgressNotificationParamsSchema, ProgressNotificationSchema, PaginatedRequestParamsSchema, PaginatedRequestSchema, PaginatedResultSchema, TaskStatusSchema, TaskSchema, CreateTaskResultSchema, TaskStatusNotificationParamsSchema, TaskStatusNotificationSchema, GetTaskRequestSchema, GetTaskResultSchema, GetTaskPayloadRequestSchema, GetTaskPayloadResultSchema, ListTasksRequestSchema, ListTasksResultSchema, CancelTaskRequestSchema, CancelTaskResultSchema, ResourceContentsSchema, TextResourceContentsSchema, Base64Schema, BlobResourceContentsSchema, RoleSchema, AnnotationsSchema, ResourceSchema, ResourceTemplateSchema, ListResourcesRequestSchema, ListResourcesResultSchema, ListResourceTemplatesRequestSchema, ListResourceTemplatesResultSchema, ResourceRequestParamsSchema, ReadResourceRequestParamsSchema, ReadResourceRequestSchema, ReadResourceResultSchema, ResourceListChangedNotificationSchema, SubscribeRequestParamsSchema, SubscribeRequestSchema, UnsubscribeRequestParamsSchema, UnsubscribeRequestSchema, ResourceUpdatedNotificationParamsSchema, ResourceUpdatedNotificationSchema, PromptArgumentSchema, PromptSchema, ListPromptsRequestSchema, ListPromptsResultSchema, GetPromptRequestParamsSchema, GetPromptRequestSchema, TextContentSchema, ImageContentSchema, AudioContentSchema, ToolUseContentSchema, EmbeddedResourceSchema, ResourceLinkSchema, ContentBlockSchema, PromptMessageSchema, GetPromptResultSchema, PromptListChangedNotificationSchema, ToolAnnotationsSchema, ToolExecutionSchema, ToolSchema, ListToolsRequestSchema, ListToolsResultSchema, CallToolResultSchema, CompatibilityCallToolResultSchema, CallToolRequestParamsSchema, CallToolRequestSchema, ToolListChangedNotificationSchema, ListChangedOptionsBaseSchema, LoggingLevelSchema, SetLevelRequestParamsSchema, SetLevelRequestSchema, LoggingMessageNotificationParamsSchema, LoggingMessageNotificationSchema, ModelHintSchema, ModelPreferencesSchema, ToolChoiceSchema, ToolResultContentSchema, SamplingContentSchema, SamplingMessageContentBlockSchema, SamplingMessageSchema, CreateMessageRequestParamsSchema, CreateMessageRequestSchema, CreateMessageResultSchema, CreateMessageResultWithToolsSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema, UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema, LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema, EnumSchemaSchema, PrimitiveSchemaDefinitionSchema, ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema, ElicitRequestParamsSchema, ElicitRequestSchema, ElicitationCompleteNotificationParamsSchema, ElicitationCompleteNotificationSchema, ElicitResultSchema, ResourceTemplateReferenceSchema, PromptReferenceSchema, CompleteRequestParamsSchema, CompleteRequestSchema, CompleteResultSchema, RootSchema, ListRootsRequestSchema, ListRootsResultSchema, RootsListChangedNotificationSchema, ClientRequestSchema, ClientNotificationSchema, ClientResultSchema, ServerRequestSchema, ServerNotificationSchema, ServerResultSchema, McpError, UrlElicitationRequiredError;
40693
40803
  var init_types2 = __esm(() => {
40694
40804
  init_v4();
@@ -41516,65 +41626,65 @@ var init_types2 = __esm(() => {
41516
41626
  };
41517
41627
  });
41518
41628
 
41519
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js
41629
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js
41520
41630
  function isTerminal(status) {
41521
41631
  return status === "completed" || status === "failed" || status === "cancelled";
41522
41632
  }
41523
41633
 
41524
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/Options.js
41634
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/Options.js
41525
41635
  var ignoreOverride;
41526
41636
  var init_Options = __esm(() => {
41527
41637
  ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
41528
41638
  });
41529
41639
 
41530
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/Refs.js
41640
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/Refs.js
41531
41641
  var init_Refs = __esm(() => {
41532
41642
  init_Options();
41533
41643
  });
41534
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/any.js
41644
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/any.js
41535
41645
  var init_any = () => {};
41536
41646
 
41537
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/array.js
41647
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/array.js
41538
41648
  var init_array = __esm(() => {
41539
41649
  init_parseDef();
41540
41650
  });
41541
41651
 
41542
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js
41652
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js
41543
41653
  var init_bigint = () => {};
41544
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js
41654
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js
41545
41655
  var init_branded = __esm(() => {
41546
41656
  init_parseDef();
41547
41657
  });
41548
41658
 
41549
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js
41659
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js
41550
41660
  var init_catch = __esm(() => {
41551
41661
  init_parseDef();
41552
41662
  });
41553
41663
 
41554
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/date.js
41664
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/date.js
41555
41665
  var init_date = () => {};
41556
41666
 
41557
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/default.js
41667
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/default.js
41558
41668
  var init_default = __esm(() => {
41559
41669
  init_parseDef();
41560
41670
  });
41561
41671
 
41562
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js
41672
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js
41563
41673
  var init_effects = __esm(() => {
41564
41674
  init_parseDef();
41565
41675
  init_any();
41566
41676
  });
41567
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js
41677
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js
41568
41678
  var init_intersection = __esm(() => {
41569
41679
  init_parseDef();
41570
41680
  });
41571
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/string.js
41681
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/string.js
41572
41682
  var ALPHA_NUMERIC;
41573
41683
  var init_string = __esm(() => {
41574
41684
  ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
41575
41685
  });
41576
41686
 
41577
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/record.js
41687
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/record.js
41578
41688
  var init_record = __esm(() => {
41579
41689
  init_parseDef();
41580
41690
  init_string();
@@ -41582,77 +41692,77 @@ var init_record = __esm(() => {
41582
41692
  init_any();
41583
41693
  });
41584
41694
 
41585
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/map.js
41695
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/map.js
41586
41696
  var init_map = __esm(() => {
41587
41697
  init_parseDef();
41588
41698
  init_record();
41589
41699
  init_any();
41590
41700
  });
41591
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/never.js
41701
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/never.js
41592
41702
  var init_never = __esm(() => {
41593
41703
  init_any();
41594
41704
  });
41595
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/union.js
41705
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/union.js
41596
41706
  var init_union = __esm(() => {
41597
41707
  init_parseDef();
41598
41708
  });
41599
41709
 
41600
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js
41710
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js
41601
41711
  var init_nullable = __esm(() => {
41602
41712
  init_parseDef();
41603
41713
  init_union();
41604
41714
  });
41605
41715
 
41606
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/number.js
41716
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/number.js
41607
41717
  var init_number = () => {};
41608
41718
 
41609
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/object.js
41719
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/object.js
41610
41720
  var init_object = __esm(() => {
41611
41721
  init_parseDef();
41612
41722
  });
41613
41723
 
41614
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js
41724
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js
41615
41725
  var init_optional = __esm(() => {
41616
41726
  init_parseDef();
41617
41727
  init_any();
41618
41728
  });
41619
41729
 
41620
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js
41730
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js
41621
41731
  var init_pipeline = __esm(() => {
41622
41732
  init_parseDef();
41623
41733
  });
41624
41734
 
41625
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js
41735
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js
41626
41736
  var init_promise = __esm(() => {
41627
41737
  init_parseDef();
41628
41738
  });
41629
41739
 
41630
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/set.js
41740
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/set.js
41631
41741
  var init_set = __esm(() => {
41632
41742
  init_parseDef();
41633
41743
  });
41634
41744
 
41635
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js
41745
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js
41636
41746
  var init_tuple = __esm(() => {
41637
41747
  init_parseDef();
41638
41748
  });
41639
41749
 
41640
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js
41750
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js
41641
41751
  var init_undefined = __esm(() => {
41642
41752
  init_any();
41643
41753
  });
41644
41754
 
41645
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js
41755
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js
41646
41756
  var init_unknown = __esm(() => {
41647
41757
  init_any();
41648
41758
  });
41649
41759
 
41650
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js
41760
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js
41651
41761
  var init_readonly = __esm(() => {
41652
41762
  init_parseDef();
41653
41763
  });
41654
41764
 
41655
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/selectParser.js
41765
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/selectParser.js
41656
41766
  var init_selectParser = __esm(() => {
41657
41767
  init_any();
41658
41768
  init_array();
@@ -41681,24 +41791,24 @@ var init_selectParser = __esm(() => {
41681
41791
  init_readonly();
41682
41792
  });
41683
41793
 
41684
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parseDef.js
41794
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parseDef.js
41685
41795
  var init_parseDef = __esm(() => {
41686
41796
  init_Options();
41687
41797
  init_selectParser();
41688
41798
  init_any();
41689
41799
  });
41690
41800
 
41691
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parseTypes.js
41801
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/parseTypes.js
41692
41802
  var init_parseTypes = () => {};
41693
41803
 
41694
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js
41804
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js
41695
41805
  var init_zodToJsonSchema = __esm(() => {
41696
41806
  init_parseDef();
41697
41807
  init_Refs();
41698
41808
  init_any();
41699
41809
  });
41700
41810
 
41701
- // ../switchroom-sec-1417/node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/index.js
41811
+ // node_modules/.bun/zod-to-json-schema@3.25.2+27912429049419a2/node_modules/zod-to-json-schema/dist/esm/index.js
41702
41812
  var init_esm = __esm(() => {
41703
41813
  init_zodToJsonSchema();
41704
41814
  init_Options();
@@ -41734,7 +41844,7 @@ var init_esm = __esm(() => {
41734
41844
  init_zodToJsonSchema();
41735
41845
  });
41736
41846
 
41737
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js
41847
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js
41738
41848
  function getMethodLiteral(schema) {
41739
41849
  const shape = getObjectShape(schema);
41740
41850
  const methodSchema = shape?.method;
@@ -41759,7 +41869,7 @@ var init_zod_json_schema_compat = __esm(() => {
41759
41869
  init_esm();
41760
41870
  });
41761
41871
 
41762
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js
41872
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js
41763
41873
  class Protocol {
41764
41874
  constructor(_options) {
41765
41875
  this._options = _options;
@@ -42604,7 +42714,7 @@ var init_protocol4 = __esm(() => {
42604
42714
  init_zod_json_schema_compat();
42605
42715
  });
42606
42716
 
42607
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js
42717
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js
42608
42718
  var require_code = __commonJS((exports2) => {
42609
42719
  Object.defineProperty(exports2, "__esModule", { value: true });
42610
42720
  exports2.regexpCode = exports2.getEsmExportName = exports2.getProperty = exports2.safeStringify = exports2.stringify = exports2.strConcat = exports2.addCodeArg = exports2.str = exports2._ = exports2.nil = exports2._Code = exports2.Name = exports2.IDENTIFIER = exports2._CodeOrName = undefined;
@@ -42758,7 +42868,7 @@ var require_code = __commonJS((exports2) => {
42758
42868
  exports2.regexpCode = regexpCode;
42759
42869
  });
42760
42870
 
42761
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/scope.js
42871
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/scope.js
42762
42872
  var require_scope = __commonJS((exports2) => {
42763
42873
  Object.defineProperty(exports2, "__esModule", { value: true });
42764
42874
  exports2.ValueScope = exports2.ValueScopeName = exports2.Scope = exports2.varKinds = exports2.UsedValueState = undefined;
@@ -42904,7 +43014,7 @@ var require_scope = __commonJS((exports2) => {
42904
43014
  exports2.ValueScope = ValueScope;
42905
43015
  });
42906
43016
 
42907
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js
43017
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js
42908
43018
  var require_codegen = __commonJS((exports2) => {
42909
43019
  Object.defineProperty(exports2, "__esModule", { value: true });
42910
43020
  exports2.or = exports2.and = exports2.not = exports2.CodeGen = exports2.operators = exports2.varKinds = exports2.ValueScopeName = exports2.ValueScope = exports2.Scope = exports2.Name = exports2.regexpCode = exports2.stringify = exports2.getProperty = exports2.nil = exports2.strConcat = exports2.str = exports2._ = undefined;
@@ -43614,7 +43724,7 @@ var require_codegen = __commonJS((exports2) => {
43614
43724
  }
43615
43725
  });
43616
43726
 
43617
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/util.js
43727
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/util.js
43618
43728
  var require_util2 = __commonJS((exports2) => {
43619
43729
  Object.defineProperty(exports2, "__esModule", { value: true });
43620
43730
  exports2.checkStrictMode = exports2.getErrorPath = exports2.Type = exports2.useFunc = exports2.setEvaluated = exports2.evaluatedPropsToName = exports2.mergeEvaluated = exports2.eachItem = exports2.unescapeJsonPointer = exports2.escapeJsonPointer = exports2.escapeFragment = exports2.unescapeFragment = exports2.schemaRefOrVal = exports2.schemaHasRulesButRef = exports2.schemaHasRules = exports2.checkUnknownRules = exports2.alwaysValidSchema = exports2.toHash = undefined;
@@ -43778,7 +43888,7 @@ var require_util2 = __commonJS((exports2) => {
43778
43888
  exports2.checkStrictMode = checkStrictMode;
43779
43889
  });
43780
43890
 
43781
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/names.js
43891
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/names.js
43782
43892
  var require_names = __commonJS((exports2) => {
43783
43893
  Object.defineProperty(exports2, "__esModule", { value: true });
43784
43894
  var codegen_1 = require_codegen();
@@ -43803,7 +43913,7 @@ var require_names = __commonJS((exports2) => {
43803
43913
  exports2.default = names;
43804
43914
  });
43805
43915
 
43806
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js
43916
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js
43807
43917
  var require_errors2 = __commonJS((exports2) => {
43808
43918
  Object.defineProperty(exports2, "__esModule", { value: true });
43809
43919
  exports2.extendErrors = exports2.resetErrorsCount = exports2.reportExtraError = exports2.reportError = exports2.keyword$DataError = exports2.keywordError = undefined;
@@ -43921,7 +44031,7 @@ var require_errors2 = __commonJS((exports2) => {
43921
44031
  }
43922
44032
  });
43923
44033
 
43924
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/boolSchema.js
44034
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/boolSchema.js
43925
44035
  var require_boolSchema = __commonJS((exports2) => {
43926
44036
  Object.defineProperty(exports2, "__esModule", { value: true });
43927
44037
  exports2.boolOrEmptySchema = exports2.topBoolOrEmptySchema = undefined;
@@ -43969,7 +44079,7 @@ var require_boolSchema = __commonJS((exports2) => {
43969
44079
  }
43970
44080
  });
43971
44081
 
43972
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/rules.js
44082
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/rules.js
43973
44083
  var require_rules = __commonJS((exports2) => {
43974
44084
  Object.defineProperty(exports2, "__esModule", { value: true });
43975
44085
  exports2.getRules = exports2.isJSONType = undefined;
@@ -43997,7 +44107,7 @@ var require_rules = __commonJS((exports2) => {
43997
44107
  exports2.getRules = getRules;
43998
44108
  });
43999
44109
 
44000
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/applicability.js
44110
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/applicability.js
44001
44111
  var require_applicability = __commonJS((exports2) => {
44002
44112
  Object.defineProperty(exports2, "__esModule", { value: true });
44003
44113
  exports2.shouldUseRule = exports2.shouldUseGroup = exports2.schemaHasRulesForType = undefined;
@@ -44017,7 +44127,7 @@ var require_applicability = __commonJS((exports2) => {
44017
44127
  exports2.shouldUseRule = shouldUseRule;
44018
44128
  });
44019
44129
 
44020
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js
44130
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js
44021
44131
  var require_dataType = __commonJS((exports2) => {
44022
44132
  Object.defineProperty(exports2, "__esModule", { value: true });
44023
44133
  exports2.reportTypeError = exports2.checkDataTypes = exports2.checkDataType = exports2.coerceAndCheckDataType = exports2.getJSONTypes = exports2.getSchemaTypes = exports2.DataType = undefined;
@@ -44198,7 +44308,7 @@ var require_dataType = __commonJS((exports2) => {
44198
44308
  }
44199
44309
  });
44200
44310
 
44201
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/defaults.js
44311
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/defaults.js
44202
44312
  var require_defaults = __commonJS((exports2) => {
44203
44313
  Object.defineProperty(exports2, "__esModule", { value: true });
44204
44314
  exports2.assignDefaults = undefined;
@@ -44232,7 +44342,7 @@ var require_defaults = __commonJS((exports2) => {
44232
44342
  }
44233
44343
  });
44234
44344
 
44235
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js
44345
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js
44236
44346
  var require_code2 = __commonJS((exports2) => {
44237
44347
  Object.defineProperty(exports2, "__esModule", { value: true });
44238
44348
  exports2.validateUnion = exports2.validateArray = exports2.usePattern = exports2.callValidateCode = exports2.schemaProperties = exports2.allSchemaProperties = exports2.noPropertyInData = exports2.propertyInData = exports2.isOwnProperty = exports2.hasPropFunc = exports2.reportMissingProp = exports2.checkMissingProp = exports2.checkReportMissingProp = undefined;
@@ -44361,7 +44471,7 @@ var require_code2 = __commonJS((exports2) => {
44361
44471
  exports2.validateUnion = validateUnion;
44362
44472
  });
44363
44473
 
44364
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/keyword.js
44474
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/keyword.js
44365
44475
  var require_keyword = __commonJS((exports2) => {
44366
44476
  Object.defineProperty(exports2, "__esModule", { value: true });
44367
44477
  exports2.validateKeywordUsage = exports2.validSchemaType = exports2.funcKeywordCode = exports2.macroKeywordCode = undefined;
@@ -44476,7 +44586,7 @@ var require_keyword = __commonJS((exports2) => {
44476
44586
  exports2.validateKeywordUsage = validateKeywordUsage;
44477
44587
  });
44478
44588
 
44479
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/subschema.js
44589
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/subschema.js
44480
44590
  var require_subschema = __commonJS((exports2) => {
44481
44591
  Object.defineProperty(exports2, "__esModule", { value: true });
44482
44592
  exports2.extendSubschemaMode = exports2.extendSubschemaData = exports2.getSubschema = undefined;
@@ -44556,7 +44666,7 @@ var require_subschema = __commonJS((exports2) => {
44556
44666
  exports2.extendSubschemaMode = extendSubschemaMode;
44557
44667
  });
44558
44668
 
44559
- // ../switchroom-sec-1417/node_modules/.bun/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js
44669
+ // node_modules/.bun/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js
44560
44670
  var require_fast_deep_equal = __commonJS((exports2, module) => {
44561
44671
  module.exports = function equal(a, b) {
44562
44672
  if (a === b)
@@ -44598,7 +44708,7 @@ var require_fast_deep_equal = __commonJS((exports2, module) => {
44598
44708
  };
44599
44709
  });
44600
44710
 
44601
- // ../switchroom-sec-1417/node_modules/.bun/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js
44711
+ // node_modules/.bun/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js
44602
44712
  var require_json_schema_traverse = __commonJS((exports2, module) => {
44603
44713
  var traverse = module.exports = function(schema, opts, cb) {
44604
44714
  if (typeof opts == "function") {
@@ -44681,7 +44791,7 @@ var require_json_schema_traverse = __commonJS((exports2, module) => {
44681
44791
  }
44682
44792
  });
44683
44793
 
44684
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js
44794
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js
44685
44795
  var require_resolve = __commonJS((exports2) => {
44686
44796
  Object.defineProperty(exports2, "__esModule", { value: true });
44687
44797
  exports2.getSchemaRefs = exports2.resolveUrl = exports2.normalizeId = exports2._getFullPath = exports2.getFullPath = exports2.inlineRef = undefined;
@@ -44834,7 +44944,7 @@ var require_resolve = __commonJS((exports2) => {
44834
44944
  exports2.getSchemaRefs = getSchemaRefs;
44835
44945
  });
44836
44946
 
44837
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js
44947
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js
44838
44948
  var require_validate = __commonJS((exports2) => {
44839
44949
  Object.defineProperty(exports2, "__esModule", { value: true });
44840
44950
  exports2.getData = exports2.KeywordCxt = exports2.validateFunctionCode = undefined;
@@ -45339,7 +45449,7 @@ var require_validate = __commonJS((exports2) => {
45339
45449
  exports2.getData = getData;
45340
45450
  });
45341
45451
 
45342
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js
45452
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js
45343
45453
  var require_validation_error = __commonJS((exports2) => {
45344
45454
  Object.defineProperty(exports2, "__esModule", { value: true });
45345
45455
 
@@ -45353,7 +45463,7 @@ var require_validation_error = __commonJS((exports2) => {
45353
45463
  exports2.default = ValidationError;
45354
45464
  });
45355
45465
 
45356
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js
45466
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js
45357
45467
  var require_ref_error = __commonJS((exports2) => {
45358
45468
  Object.defineProperty(exports2, "__esModule", { value: true });
45359
45469
  var resolve_1 = require_resolve();
@@ -45368,7 +45478,7 @@ var require_ref_error = __commonJS((exports2) => {
45368
45478
  exports2.default = MissingRefError;
45369
45479
  });
45370
45480
 
45371
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/index.js
45481
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/compile/index.js
45372
45482
  var require_compile = __commonJS((exports2) => {
45373
45483
  Object.defineProperty(exports2, "__esModule", { value: true });
45374
45484
  exports2.resolveSchema = exports2.getCompilingSchema = exports2.resolveRef = exports2.compileSchema = exports2.SchemaEnv = undefined;
@@ -45589,7 +45699,7 @@ var require_compile = __commonJS((exports2) => {
45589
45699
  }
45590
45700
  });
45591
45701
 
45592
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/refs/data.json
45702
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/refs/data.json
45593
45703
  var require_data = __commonJS((exports2, module) => {
45594
45704
  module.exports = {
45595
45705
  $id: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",
@@ -45606,7 +45716,7 @@ var require_data = __commonJS((exports2, module) => {
45606
45716
  };
45607
45717
  });
45608
45718
 
45609
- // ../switchroom-sec-1417/node_modules/.bun/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js
45719
+ // node_modules/.bun/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js
45610
45720
  var require_utils2 = __commonJS((exports2, module) => {
45611
45721
  var isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu);
45612
45722
  var isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);
@@ -45861,7 +45971,7 @@ var require_utils2 = __commonJS((exports2, module) => {
45861
45971
  };
45862
45972
  });
45863
45973
 
45864
- // ../switchroom-sec-1417/node_modules/.bun/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js
45974
+ // node_modules/.bun/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js
45865
45975
  var require_schemes = __commonJS((exports2, module) => {
45866
45976
  var { isUUID } = require_utils2();
45867
45977
  var URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu;
@@ -46035,7 +46145,7 @@ var require_schemes = __commonJS((exports2, module) => {
46035
46145
  };
46036
46146
  });
46037
46147
 
46038
- // ../switchroom-sec-1417/node_modules/.bun/fast-uri@3.1.0/node_modules/fast-uri/index.js
46148
+ // node_modules/.bun/fast-uri@3.1.0/node_modules/fast-uri/index.js
46039
46149
  var require_fast_uri = __commonJS((exports2, module) => {
46040
46150
  var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require_utils2();
46041
46151
  var { SCHEMES, getSchemeHandler } = require_schemes();
@@ -46286,7 +46396,7 @@ var require_fast_uri = __commonJS((exports2, module) => {
46286
46396
  module.exports.fastUri = fastUri;
46287
46397
  });
46288
46398
 
46289
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/runtime/uri.js
46399
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/runtime/uri.js
46290
46400
  var require_uri = __commonJS((exports2) => {
46291
46401
  Object.defineProperty(exports2, "__esModule", { value: true });
46292
46402
  var uri = require_fast_uri();
@@ -46294,7 +46404,7 @@ var require_uri = __commonJS((exports2) => {
46294
46404
  exports2.default = uri;
46295
46405
  });
46296
46406
 
46297
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/core.js
46407
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/core.js
46298
46408
  var require_core = __commonJS((exports2) => {
46299
46409
  Object.defineProperty(exports2, "__esModule", { value: true });
46300
46410
  exports2.CodeGen = exports2.Name = exports2.nil = exports2.stringify = exports2.str = exports2._ = exports2.KeywordCxt = undefined;
@@ -46887,7 +46997,7 @@ var require_core = __commonJS((exports2) => {
46887
46997
  }
46888
46998
  });
46889
46999
 
46890
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/id.js
47000
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/id.js
46891
47001
  var require_id = __commonJS((exports2) => {
46892
47002
  Object.defineProperty(exports2, "__esModule", { value: true });
46893
47003
  var def = {
@@ -46899,7 +47009,7 @@ var require_id = __commonJS((exports2) => {
46899
47009
  exports2.default = def;
46900
47010
  });
46901
47011
 
46902
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/ref.js
47012
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/ref.js
46903
47013
  var require_ref = __commonJS((exports2) => {
46904
47014
  Object.defineProperty(exports2, "__esModule", { value: true });
46905
47015
  exports2.callRef = exports2.getValidate = undefined;
@@ -47018,7 +47128,7 @@ var require_ref = __commonJS((exports2) => {
47018
47128
  exports2.default = def;
47019
47129
  });
47020
47130
 
47021
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/index.js
47131
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/index.js
47022
47132
  var require_core2 = __commonJS((exports2) => {
47023
47133
  Object.defineProperty(exports2, "__esModule", { value: true });
47024
47134
  var id_1 = require_id();
@@ -47036,7 +47146,7 @@ var require_core2 = __commonJS((exports2) => {
47036
47146
  exports2.default = core2;
47037
47147
  });
47038
47148
 
47039
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js
47149
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js
47040
47150
  var require_limitNumber = __commonJS((exports2) => {
47041
47151
  Object.defineProperty(exports2, "__esModule", { value: true });
47042
47152
  var codegen_1 = require_codegen();
@@ -47065,7 +47175,7 @@ var require_limitNumber = __commonJS((exports2) => {
47065
47175
  exports2.default = def;
47066
47176
  });
47067
47177
 
47068
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js
47178
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js
47069
47179
  var require_multipleOf = __commonJS((exports2) => {
47070
47180
  Object.defineProperty(exports2, "__esModule", { value: true });
47071
47181
  var codegen_1 = require_codegen();
@@ -47090,7 +47200,7 @@ var require_multipleOf = __commonJS((exports2) => {
47090
47200
  exports2.default = def;
47091
47201
  });
47092
47202
 
47093
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/runtime/ucs2length.js
47203
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/runtime/ucs2length.js
47094
47204
  var require_ucs2length = __commonJS((exports2) => {
47095
47205
  Object.defineProperty(exports2, "__esModule", { value: true });
47096
47206
  function ucs2length(str) {
@@ -47113,7 +47223,7 @@ var require_ucs2length = __commonJS((exports2) => {
47113
47223
  ucs2length.code = 'require("ajv/dist/runtime/ucs2length").default';
47114
47224
  });
47115
47225
 
47116
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js
47226
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js
47117
47227
  var require_limitLength = __commonJS((exports2) => {
47118
47228
  Object.defineProperty(exports2, "__esModule", { value: true });
47119
47229
  var codegen_1 = require_codegen();
@@ -47142,7 +47252,7 @@ var require_limitLength = __commonJS((exports2) => {
47142
47252
  exports2.default = def;
47143
47253
  });
47144
47254
 
47145
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/pattern.js
47255
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/pattern.js
47146
47256
  var require_pattern = __commonJS((exports2) => {
47147
47257
  Object.defineProperty(exports2, "__esModule", { value: true });
47148
47258
  var code_1 = require_code2();
@@ -47176,7 +47286,7 @@ var require_pattern = __commonJS((exports2) => {
47176
47286
  exports2.default = def;
47177
47287
  });
47178
47288
 
47179
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js
47289
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js
47180
47290
  var require_limitProperties = __commonJS((exports2) => {
47181
47291
  Object.defineProperty(exports2, "__esModule", { value: true });
47182
47292
  var codegen_1 = require_codegen();
@@ -47202,7 +47312,7 @@ var require_limitProperties = __commonJS((exports2) => {
47202
47312
  exports2.default = def;
47203
47313
  });
47204
47314
 
47205
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/required.js
47315
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/required.js
47206
47316
  var require_required = __commonJS((exports2) => {
47207
47317
  Object.defineProperty(exports2, "__esModule", { value: true });
47208
47318
  var code_1 = require_code2();
@@ -47281,7 +47391,7 @@ var require_required = __commonJS((exports2) => {
47281
47391
  exports2.default = def;
47282
47392
  });
47283
47393
 
47284
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js
47394
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js
47285
47395
  var require_limitItems = __commonJS((exports2) => {
47286
47396
  Object.defineProperty(exports2, "__esModule", { value: true });
47287
47397
  var codegen_1 = require_codegen();
@@ -47307,7 +47417,7 @@ var require_limitItems = __commonJS((exports2) => {
47307
47417
  exports2.default = def;
47308
47418
  });
47309
47419
 
47310
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js
47420
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js
47311
47421
  var require_equal = __commonJS((exports2) => {
47312
47422
  Object.defineProperty(exports2, "__esModule", { value: true });
47313
47423
  var equal = require_fast_deep_equal();
@@ -47315,7 +47425,7 @@ var require_equal = __commonJS((exports2) => {
47315
47425
  exports2.default = equal;
47316
47426
  });
47317
47427
 
47318
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js
47428
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js
47319
47429
  var require_uniqueItems = __commonJS((exports2) => {
47320
47430
  Object.defineProperty(exports2, "__esModule", { value: true });
47321
47431
  var dataType_1 = require_dataType();
@@ -47379,7 +47489,7 @@ var require_uniqueItems = __commonJS((exports2) => {
47379
47489
  exports2.default = def;
47380
47490
  });
47381
47491
 
47382
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/const.js
47492
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/const.js
47383
47493
  var require_const = __commonJS((exports2) => {
47384
47494
  Object.defineProperty(exports2, "__esModule", { value: true });
47385
47495
  var codegen_1 = require_codegen();
@@ -47405,7 +47515,7 @@ var require_const = __commonJS((exports2) => {
47405
47515
  exports2.default = def;
47406
47516
  });
47407
47517
 
47408
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/enum.js
47518
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/enum.js
47409
47519
  var require_enum = __commonJS((exports2) => {
47410
47520
  Object.defineProperty(exports2, "__esModule", { value: true });
47411
47521
  var codegen_1 = require_codegen();
@@ -47451,7 +47561,7 @@ var require_enum = __commonJS((exports2) => {
47451
47561
  exports2.default = def;
47452
47562
  });
47453
47563
 
47454
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/index.js
47564
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/index.js
47455
47565
  var require_validation = __commonJS((exports2) => {
47456
47566
  Object.defineProperty(exports2, "__esModule", { value: true });
47457
47567
  var limitNumber_1 = require_limitNumber();
@@ -47481,7 +47591,7 @@ var require_validation = __commonJS((exports2) => {
47481
47591
  exports2.default = validation;
47482
47592
  });
47483
47593
 
47484
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js
47594
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js
47485
47595
  var require_additionalItems = __commonJS((exports2) => {
47486
47596
  Object.defineProperty(exports2, "__esModule", { value: true });
47487
47597
  exports2.validateAdditionalItems = undefined;
@@ -47531,7 +47641,7 @@ var require_additionalItems = __commonJS((exports2) => {
47531
47641
  exports2.default = def;
47532
47642
  });
47533
47643
 
47534
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items.js
47644
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items.js
47535
47645
  var require_items = __commonJS((exports2) => {
47536
47646
  Object.defineProperty(exports2, "__esModule", { value: true });
47537
47647
  exports2.validateTuple = undefined;
@@ -47585,7 +47695,7 @@ var require_items = __commonJS((exports2) => {
47585
47695
  exports2.default = def;
47586
47696
  });
47587
47697
 
47588
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js
47698
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js
47589
47699
  var require_prefixItems = __commonJS((exports2) => {
47590
47700
  Object.defineProperty(exports2, "__esModule", { value: true });
47591
47701
  var items_1 = require_items();
@@ -47599,7 +47709,7 @@ var require_prefixItems = __commonJS((exports2) => {
47599
47709
  exports2.default = def;
47600
47710
  });
47601
47711
 
47602
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js
47712
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js
47603
47713
  var require_items2020 = __commonJS((exports2) => {
47604
47714
  Object.defineProperty(exports2, "__esModule", { value: true });
47605
47715
  var codegen_1 = require_codegen();
@@ -47631,7 +47741,7 @@ var require_items2020 = __commonJS((exports2) => {
47631
47741
  exports2.default = def;
47632
47742
  });
47633
47743
 
47634
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/contains.js
47744
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/contains.js
47635
47745
  var require_contains = __commonJS((exports2) => {
47636
47746
  Object.defineProperty(exports2, "__esModule", { value: true });
47637
47747
  var codegen_1 = require_codegen();
@@ -47722,7 +47832,7 @@ var require_contains = __commonJS((exports2) => {
47722
47832
  exports2.default = def;
47723
47833
  });
47724
47834
 
47725
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js
47835
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js
47726
47836
  var require_dependencies = __commonJS((exports2) => {
47727
47837
  Object.defineProperty(exports2, "__esModule", { value: true });
47728
47838
  exports2.validateSchemaDeps = exports2.validatePropertyDeps = exports2.error = undefined;
@@ -47807,7 +47917,7 @@ var require_dependencies = __commonJS((exports2) => {
47807
47917
  exports2.default = def;
47808
47918
  });
47809
47919
 
47810
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js
47920
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js
47811
47921
  var require_propertyNames = __commonJS((exports2) => {
47812
47922
  Object.defineProperty(exports2, "__esModule", { value: true });
47813
47923
  var codegen_1 = require_codegen();
@@ -47847,7 +47957,7 @@ var require_propertyNames = __commonJS((exports2) => {
47847
47957
  exports2.default = def;
47848
47958
  });
47849
47959
 
47850
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js
47960
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js
47851
47961
  var require_additionalProperties = __commonJS((exports2) => {
47852
47962
  Object.defineProperty(exports2, "__esModule", { value: true });
47853
47963
  var code_1 = require_code2();
@@ -47950,7 +48060,7 @@ var require_additionalProperties = __commonJS((exports2) => {
47950
48060
  exports2.default = def;
47951
48061
  });
47952
48062
 
47953
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/properties.js
48063
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/properties.js
47954
48064
  var require_properties = __commonJS((exports2) => {
47955
48065
  Object.defineProperty(exports2, "__esModule", { value: true });
47956
48066
  var validate_1 = require_validate();
@@ -48005,7 +48115,7 @@ var require_properties = __commonJS((exports2) => {
48005
48115
  exports2.default = def;
48006
48116
  });
48007
48117
 
48008
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js
48118
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js
48009
48119
  var require_patternProperties = __commonJS((exports2) => {
48010
48120
  Object.defineProperty(exports2, "__esModule", { value: true });
48011
48121
  var code_1 = require_code2();
@@ -48076,7 +48186,7 @@ var require_patternProperties = __commonJS((exports2) => {
48076
48186
  exports2.default = def;
48077
48187
  });
48078
48188
 
48079
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/not.js
48189
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/not.js
48080
48190
  var require_not = __commonJS((exports2) => {
48081
48191
  Object.defineProperty(exports2, "__esModule", { value: true });
48082
48192
  var util_1 = require_util2();
@@ -48104,7 +48214,7 @@ var require_not = __commonJS((exports2) => {
48104
48214
  exports2.default = def;
48105
48215
  });
48106
48216
 
48107
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js
48217
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js
48108
48218
  var require_anyOf = __commonJS((exports2) => {
48109
48219
  Object.defineProperty(exports2, "__esModule", { value: true });
48110
48220
  var code_1 = require_code2();
@@ -48118,7 +48228,7 @@ var require_anyOf = __commonJS((exports2) => {
48118
48228
  exports2.default = def;
48119
48229
  });
48120
48230
 
48121
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js
48231
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js
48122
48232
  var require_oneOf = __commonJS((exports2) => {
48123
48233
  Object.defineProperty(exports2, "__esModule", { value: true });
48124
48234
  var codegen_1 = require_codegen();
@@ -48173,7 +48283,7 @@ var require_oneOf = __commonJS((exports2) => {
48173
48283
  exports2.default = def;
48174
48284
  });
48175
48285
 
48176
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js
48286
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js
48177
48287
  var require_allOf = __commonJS((exports2) => {
48178
48288
  Object.defineProperty(exports2, "__esModule", { value: true });
48179
48289
  var util_1 = require_util2();
@@ -48197,7 +48307,7 @@ var require_allOf = __commonJS((exports2) => {
48197
48307
  exports2.default = def;
48198
48308
  });
48199
48309
 
48200
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/if.js
48310
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/if.js
48201
48311
  var require_if2 = __commonJS((exports2) => {
48202
48312
  Object.defineProperty(exports2, "__esModule", { value: true });
48203
48313
  var codegen_1 = require_codegen();
@@ -48263,7 +48373,7 @@ var require_if2 = __commonJS((exports2) => {
48263
48373
  exports2.default = def;
48264
48374
  });
48265
48375
 
48266
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js
48376
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js
48267
48377
  var require_thenElse = __commonJS((exports2) => {
48268
48378
  Object.defineProperty(exports2, "__esModule", { value: true });
48269
48379
  var util_1 = require_util2();
@@ -48278,7 +48388,7 @@ var require_thenElse = __commonJS((exports2) => {
48278
48388
  exports2.default = def;
48279
48389
  });
48280
48390
 
48281
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/index.js
48391
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/index.js
48282
48392
  var require_applicator = __commonJS((exports2) => {
48283
48393
  Object.defineProperty(exports2, "__esModule", { value: true });
48284
48394
  var additionalItems_1 = require_additionalItems();
@@ -48321,7 +48431,7 @@ var require_applicator = __commonJS((exports2) => {
48321
48431
  exports2.default = getApplicator;
48322
48432
  });
48323
48433
 
48324
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/format.js
48434
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/format.js
48325
48435
  var require_format = __commonJS((exports2) => {
48326
48436
  Object.defineProperty(exports2, "__esModule", { value: true });
48327
48437
  var codegen_1 = require_codegen();
@@ -48408,7 +48518,7 @@ var require_format = __commonJS((exports2) => {
48408
48518
  exports2.default = def;
48409
48519
  });
48410
48520
 
48411
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/index.js
48521
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/index.js
48412
48522
  var require_format2 = __commonJS((exports2) => {
48413
48523
  Object.defineProperty(exports2, "__esModule", { value: true });
48414
48524
  var format_1 = require_format();
@@ -48416,7 +48526,7 @@ var require_format2 = __commonJS((exports2) => {
48416
48526
  exports2.default = format;
48417
48527
  });
48418
48528
 
48419
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/metadata.js
48529
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/metadata.js
48420
48530
  var require_metadata = __commonJS((exports2) => {
48421
48531
  Object.defineProperty(exports2, "__esModule", { value: true });
48422
48532
  exports2.contentVocabulary = exports2.metadataVocabulary = undefined;
@@ -48436,7 +48546,7 @@ var require_metadata = __commonJS((exports2) => {
48436
48546
  ];
48437
48547
  });
48438
48548
 
48439
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/draft7.js
48549
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/draft7.js
48440
48550
  var require_draft7 = __commonJS((exports2) => {
48441
48551
  Object.defineProperty(exports2, "__esModule", { value: true });
48442
48552
  var core_1 = require_core2();
@@ -48455,7 +48565,7 @@ var require_draft7 = __commonJS((exports2) => {
48455
48565
  exports2.default = draft7Vocabularies;
48456
48566
  });
48457
48567
 
48458
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/types.js
48568
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/types.js
48459
48569
  var require_types = __commonJS((exports2) => {
48460
48570
  Object.defineProperty(exports2, "__esModule", { value: true });
48461
48571
  exports2.DiscrError = undefined;
@@ -48466,7 +48576,7 @@ var require_types = __commonJS((exports2) => {
48466
48576
  })(DiscrError || (exports2.DiscrError = DiscrError = {}));
48467
48577
  });
48468
48578
 
48469
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/index.js
48579
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/index.js
48470
48580
  var require_discriminator = __commonJS((exports2) => {
48471
48581
  Object.defineProperty(exports2, "__esModule", { value: true });
48472
48582
  var codegen_1 = require_codegen();
@@ -48568,7 +48678,7 @@ var require_discriminator = __commonJS((exports2) => {
48568
48678
  exports2.default = def;
48569
48679
  });
48570
48680
 
48571
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-draft-07.json
48681
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-draft-07.json
48572
48682
  var require_json_schema_draft_07 = __commonJS((exports2, module) => {
48573
48683
  module.exports = {
48574
48684
  $schema: "http://json-schema.org/draft-07/schema#",
@@ -48723,7 +48833,7 @@ var require_json_schema_draft_07 = __commonJS((exports2, module) => {
48723
48833
  };
48724
48834
  });
48725
48835
 
48726
- // ../switchroom-sec-1417/node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/ajv.js
48836
+ // node_modules/.bun/ajv@8.18.0/node_modules/ajv/dist/ajv.js
48727
48837
  var require_ajv = __commonJS((exports2, module) => {
48728
48838
  Object.defineProperty(exports2, "__esModule", { value: true });
48729
48839
  exports2.MissingRefError = exports2.ValidationError = exports2.CodeGen = exports2.Name = exports2.nil = exports2.stringify = exports2.str = exports2._ = exports2.KeywordCxt = exports2.Ajv = undefined;
@@ -48791,7 +48901,7 @@ var require_ajv = __commonJS((exports2, module) => {
48791
48901
  } });
48792
48902
  });
48793
48903
 
48794
- // ../switchroom-sec-1417/node_modules/.bun/ajv-formats@3.0.1/node_modules/ajv-formats/dist/formats.js
48904
+ // node_modules/.bun/ajv-formats@3.0.1/node_modules/ajv-formats/dist/formats.js
48795
48905
  var require_formats = __commonJS((exports2) => {
48796
48906
  Object.defineProperty(exports2, "__esModule", { value: true });
48797
48907
  exports2.formatNames = exports2.fastFormats = exports2.fullFormats = undefined;
@@ -48968,7 +49078,7 @@ var require_formats = __commonJS((exports2) => {
48968
49078
  }
48969
49079
  });
48970
49080
 
48971
- // ../switchroom-sec-1417/node_modules/.bun/ajv-formats@3.0.1/node_modules/ajv-formats/dist/limit.js
49081
+ // node_modules/.bun/ajv-formats@3.0.1/node_modules/ajv-formats/dist/limit.js
48972
49082
  var require_limit = __commonJS((exports2) => {
48973
49083
  Object.defineProperty(exports2, "__esModule", { value: true });
48974
49084
  exports2.formatLimitDefinition = undefined;
@@ -49037,7 +49147,7 @@ var require_limit = __commonJS((exports2) => {
49037
49147
  exports2.default = formatLimitPlugin;
49038
49148
  });
49039
49149
 
49040
- // ../switchroom-sec-1417/node_modules/.bun/ajv-formats@3.0.1/node_modules/ajv-formats/dist/index.js
49150
+ // node_modules/.bun/ajv-formats@3.0.1/node_modules/ajv-formats/dist/index.js
49041
49151
  var require_dist2 = __commonJS((exports2, module) => {
49042
49152
  Object.defineProperty(exports2, "__esModule", { value: true });
49043
49153
  var formats_1 = require_formats();
@@ -49076,7 +49186,7 @@ var require_dist2 = __commonJS((exports2, module) => {
49076
49186
  exports2.default = formatsPlugin;
49077
49187
  });
49078
49188
 
49079
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js
49189
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js
49080
49190
  function createDefaultAjvInstance() {
49081
49191
  const ajv = new import_ajv.default({
49082
49192
  strict: false,
@@ -49119,7 +49229,7 @@ var init_ajv_provider = __esm(() => {
49119
49229
  import_ajv_formats = __toESM(require_dist2(), 1);
49120
49230
  });
49121
49231
 
49122
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js
49232
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js
49123
49233
  class ExperimentalServerTasks {
49124
49234
  constructor(_server) {
49125
49235
  this._server = _server;
@@ -49200,7 +49310,7 @@ var init_server = __esm(() => {
49200
49310
  init_types2();
49201
49311
  });
49202
49312
 
49203
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js
49313
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js
49204
49314
  function assertToolsCallTaskCapability(requests, method, entityName) {
49205
49315
  if (!requests) {
49206
49316
  throw new Error(`${entityName} does not support task creation (required for ${method})`);
@@ -49235,7 +49345,7 @@ function assertClientRequestTaskCapability(requests, method, entityName) {
49235
49345
  }
49236
49346
  }
49237
49347
 
49238
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js
49348
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js
49239
49349
  var Server;
49240
49350
  var init_server2 = __esm(() => {
49241
49351
  init_protocol4();
@@ -49576,7 +49686,7 @@ var init_server2 = __esm(() => {
49576
49686
  };
49577
49687
  });
49578
49688
 
49579
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js
49689
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js
49580
49690
  class ReadBuffer {
49581
49691
  append(chunk2) {
49582
49692
  this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk2]) : chunk2;
@@ -49609,7 +49719,7 @@ var init_stdio = __esm(() => {
49609
49719
  init_types2();
49610
49720
  });
49611
49721
 
49612
- // ../switchroom-sec-1417/node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
49722
+ // node_modules/.bun/@modelcontextprotocol+sdk@1.29.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
49613
49723
  import process3 from "node:process";
49614
49724
 
49615
49725
  class StdioServerTransport {
@@ -50575,7 +50685,7 @@ var init_server4 = __esm(() => {
50575
50685
  ];
50576
50686
  });
50577
50687
 
50578
- // ../switchroom-sec-1417/node_modules/.bun/commander@13.1.0/node_modules/commander/esm.mjs
50688
+ // node_modules/.bun/commander@13.1.0/node_modules/commander/esm.mjs
50579
50689
  var import__ = __toESM(require_commander(), 1);
50580
50690
  var {
50581
50691
  program,
@@ -50592,8 +50702,8 @@ var {
50592
50702
  } = import__.default;
50593
50703
 
50594
50704
  // src/build-info.ts
50595
- var VERSION = "0.15.37";
50596
- var COMMIT_SHA = "bc83a0a6";
50705
+ var VERSION = "0.15.39";
50706
+ var COMMIT_SHA = "69e5a2e8";
50597
50707
 
50598
50708
  // src/cli/agent.ts
50599
50709
  init_source();
@@ -53134,6 +53244,7 @@ function scaffoldAgent(name, agentConfigRaw, agentsDir, telegramConfig, switchro
53134
53244
  const switchroomCliPath = "/usr/local/bin/switchroom";
53135
53245
  const resolvedConfigPath = DOCKER_CONFIG_PATH;
53136
53246
  const telegramStateDir = `${DOCKER_AGENT_HOME}/.switchroom/agents/${name}/telegram`;
53247
+ const linearAgentEnabled = agentConfig.channels?.telegram?.linear_agent?.enabled === true;
53137
53248
  const mcpServers = {
53138
53249
  "switchroom-telegram": {
53139
53250
  command: "bun",
@@ -53141,9 +53252,10 @@ function scaffoldAgent(name, agentConfigRaw, agentsDir, telegramConfig, switchro
53141
53252
  env: {
53142
53253
  TELEGRAM_STATE_DIR: telegramStateDir,
53143
53254
  SWITCHROOM_CONFIG: resolvedConfigPath,
53144
- SWITCHROOM_CLI_PATH: switchroomCliPath
53255
+ SWITCHROOM_CLI_PATH: switchroomCliPath,
53256
+ ...linearAgentEnabled ? { SWITCHROOM_TELEGRAM_LINEAR: "1" } : {}
53145
53257
  },
53146
- alwaysLoad: true
53258
+ alwaysLoad: false
53147
53259
  },
53148
53260
  "agent-config": {
53149
53261
  command: switchroomCliPath,
@@ -54203,6 +54315,7 @@ ${body}
54203
54315
  const switchroomCliPath = "/usr/local/bin/switchroom";
54204
54316
  const resolvedConfigPath = DOCKER_CONFIG_PATH;
54205
54317
  const telegramStateDir = `${DOCKER_AGENT_HOME}/.switchroom/agents/${name}/telegram`;
54318
+ const linearAgentEnabled = agentConfig.channels?.telegram?.linear_agent?.enabled === true;
54206
54319
  const mcpServers = {
54207
54320
  "switchroom-telegram": {
54208
54321
  command: "bun",
@@ -54210,9 +54323,10 @@ ${body}
54210
54323
  env: {
54211
54324
  TELEGRAM_STATE_DIR: telegramStateDir,
54212
54325
  SWITCHROOM_CONFIG: resolvedConfigPath,
54213
- SWITCHROOM_CLI_PATH: switchroomCliPath
54326
+ SWITCHROOM_CLI_PATH: switchroomCliPath,
54327
+ ...linearAgentEnabled ? { SWITCHROOM_TELEGRAM_LINEAR: "1" } : {}
54214
54328
  },
54215
- alwaysLoad: true
54329
+ alwaysLoad: false
54216
54330
  },
54217
54331
  "agent-config": {
54218
54332
  command: switchroomCliPath,
@@ -58912,7 +59026,7 @@ function hasGoogleAccountEntry(doc, account) {
58912
59026
  // src/cli/auth-google.ts
58913
59027
  init_helpers();
58914
59028
  function registerAuthGoogleSubcommands(program3, authParent) {
58915
- const google = authParent.command("google").description("Manage Google Workspace accounts shared across agents (RFC G \u2014 see docs/rfcs/google-workspace-generalization.md)");
59029
+ const google = authParent.command("google").description("Manage Google Workspace accounts shared across agents (RFC G \u2014 see reference/rfcs/google-workspace-generalization.md)");
58916
59030
  registerConnect(google, program3);
58917
59031
  registerEnable(google, program3);
58918
59032
  registerDisable(google, program3);
@@ -59696,7 +59810,7 @@ function buildMicrosoftCredentials(opts) {
59696
59810
 
59697
59811
  // src/cli/auth-microsoft.ts
59698
59812
  function registerAuthMicrosoftSubcommands(program3, authParent) {
59699
- const microsoft = authParent.command("microsoft").description("Manage Microsoft 365 accounts shared across agents (RFC #1873 \u2014 see docs/rfcs/microsoft-workspace.md)");
59813
+ const microsoft = authParent.command("microsoft").description("Manage Microsoft 365 accounts shared across agents (RFC #1873 \u2014 see reference/rfcs/microsoft-workspace.md)");
59700
59814
  registerEnable2(microsoft, program3);
59701
59815
  registerDisable2(microsoft, program3);
59702
59816
  registerList2(microsoft, program3);
@@ -61684,7 +61798,7 @@ function createAuditLogger(opts = {}) {
61684
61798
  // src/vault/grants.ts
61685
61799
  import { randomBytes as randomBytes8 } from "node:crypto";
61686
61800
 
61687
- // ../switchroom-sec-1417/node_modules/.bun/bcryptjs@3.0.3/node_modules/bcryptjs/index.js
61801
+ // node_modules/.bun/bcryptjs@3.0.3/node_modules/bcryptjs/index.js
61688
61802
  import nodeCrypto from "crypto";
61689
61803
  var randomFallback = null;
61690
61804
  function randomBytes7(len) {
@@ -68495,6 +68609,8 @@ var HINDSIGHT_DEFAULT_MEM_LIMIT = "4g";
68495
68609
  var HINDSIGHT_DEFAULT_MEM_RESERVATION = "2g";
68496
68610
  var HINDSIGHT_DEFAULT_PIDS_LIMIT = 1000;
68497
68611
  var HINDSIGHT_DEFAULT_SHM_SIZE = "2g";
68612
+ var HINDSIGHT_HEALTHCHECK_PY = 'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8888/health",timeout=4).getcode()==200 else 1)';
68613
+ var HINDSIGHT_HEALTHCHECK_CMD = `python3 -c '${HINDSIGHT_HEALTHCHECK_PY}'`;
68498
68614
  function isPortFree(port) {
68499
68615
  return new Promise((resolve28) => {
68500
68616
  const server = createServer4();
@@ -68586,6 +68702,16 @@ function startHindsight(ports) {
68586
68702
  `--memory-reservation=${HINDSIGHT_DEFAULT_MEM_RESERVATION}`,
68587
68703
  `--pids-limit=${HINDSIGHT_DEFAULT_PIDS_LIMIT}`,
68588
68704
  `--shm-size=${HINDSIGHT_DEFAULT_SHM_SIZE}`,
68705
+ "--health-cmd",
68706
+ HINDSIGHT_HEALTHCHECK_CMD,
68707
+ "--health-interval",
68708
+ "30s",
68709
+ "--health-timeout",
68710
+ "5s",
68711
+ "--health-retries",
68712
+ "3",
68713
+ "--health-start-period",
68714
+ "60s",
68589
68715
  "-p",
68590
68716
  `127.0.0.1:${apiPort}:8888`,
68591
68717
  "-p",
@@ -68593,6 +68719,8 @@ function startHindsight(ports) {
68593
68719
  "-v",
68594
68720
  "switchroom-hindsight-data:/home/hindsight/.pg0",
68595
68721
  "-v",
68722
+ "switchroom-hindsight-backups:/backups",
68723
+ "-v",
68596
68724
  `${HINDSIGHT_BROKER_SOCK_VOLUME}:/run/switchroom/auth-broker`,
68597
68725
  "--tmpfs",
68598
68726
  `/run/claude-creds:rw,mode=0700,uid=${HINDSIGHT_DEFAULT_UID},gid=${HINDSIGHT_DEFAULT_UID}`,
@@ -68640,8 +68768,15 @@ function generateHindsightComposeSnippet() {
68640
68768
  ` mem_reservation: ${HINDSIGHT_DEFAULT_MEM_RESERVATION}`,
68641
68769
  ` pids_limit: ${HINDSIGHT_DEFAULT_PIDS_LIMIT}`,
68642
68770
  ` shm_size: ${HINDSIGHT_DEFAULT_SHM_SIZE}`,
68771
+ " healthcheck:",
68772
+ ` test: ${JSON.stringify(["CMD", "python3", "-c", HINDSIGHT_HEALTHCHECK_PY])}`,
68773
+ " interval: 30s",
68774
+ " timeout: 5s",
68775
+ " retries: 3",
68776
+ " start_period: 60s",
68643
68777
  " volumes:",
68644
68778
  " - switchroom-hindsight-data:/home/hindsight/.pg0",
68779
+ " - switchroom-hindsight-backups:/backups",
68645
68780
  ` - ${HINDSIGHT_BROKER_SOCK_VOLUME}:/run/switchroom/auth-broker`,
68646
68781
  " tmpfs:",
68647
68782
  ` - /run/claude-creds:rw,mode=0700,uid=${HINDSIGHT_DEFAULT_UID},gid=${HINDSIGHT_DEFAULT_UID}`,
@@ -68649,6 +68784,7 @@ function generateHindsightComposeSnippet() {
68649
68784
  "",
68650
68785
  "volumes:",
68651
68786
  " switchroom-hindsight-data:",
68787
+ " switchroom-hindsight-backups:",
68652
68788
  ` ${HINDSIGHT_BROKER_SOCK_VOLUME}:`,
68653
68789
  " external: true",
68654
68790
  " # Bound by the switchroom-auth-broker singleton in the main",
@@ -69174,7 +69310,7 @@ init_client3();
69174
69310
  init_client();
69175
69311
  import { homedir as homedir23 } from "node:os";
69176
69312
 
69177
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/module.node.mjs
69313
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/module.node.mjs
69178
69314
  import { dirname as dirname9, posix, sep as sep2 } from "path";
69179
69315
  function createModulerModifier() {
69180
69316
  const getModuleFromFileName = createGetModuleFromFilename();
@@ -69210,7 +69346,7 @@ function normalizeWindowsPath(path4) {
69210
69346
  return path4.replace(/^[A-Z]:/, "").replace(/\\/g, "/");
69211
69347
  }
69212
69348
 
69213
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/featureFlagUtils.mjs
69349
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/featureFlagUtils.mjs
69214
69350
  var normalizeFlagsResponse = (flagsResponse) => {
69215
69351
  if ("flags" in flagsResponse) {
69216
69352
  const featureFlags = getFlagValuesFromFlags(flagsResponse.flags);
@@ -69281,7 +69417,7 @@ var parsePayload = (response) => {
69281
69417
  }
69282
69418
  };
69283
69419
 
69284
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/gzip.mjs
69420
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/gzip.mjs
69285
69421
  function isGzipSupported() {
69286
69422
  return "CompressionStream" in globalThis;
69287
69423
  }
@@ -69301,7 +69437,7 @@ async function gzipCompress(input, isDebug = true) {
69301
69437
  }
69302
69438
  }
69303
69439
 
69304
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/vendor/uuidv7.mjs
69440
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/vendor/uuidv7.mjs
69305
69441
  /*! For license information please see uuidv7.mjs.LICENSE.txt */
69306
69442
  var DIGITS = "0123456789abcdef";
69307
69443
 
@@ -69479,7 +69615,7 @@ var defaultGenerator;
69479
69615
  var uuidv7 = () => uuidv7obj().toString();
69480
69616
  var uuidv7obj = () => (defaultGenerator || (defaultGenerator = new V7Generator)).generate();
69481
69617
 
69482
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/types.mjs
69618
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/types.mjs
69483
69619
  var types_PostHogPersistedProperty = /* @__PURE__ */ function(PostHogPersistedProperty) {
69484
69620
  PostHogPersistedProperty["AnonymousId"] = "anonymous_id";
69485
69621
  PostHogPersistedProperty["DistinctId"] = "distinct_id";
@@ -69512,7 +69648,7 @@ var types_PostHogPersistedProperty = /* @__PURE__ */ function(PostHogPersistedPr
69512
69648
  return PostHogPersistedProperty;
69513
69649
  }({});
69514
69650
 
69515
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/bot-detection.mjs
69651
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/bot-detection.mjs
69516
69652
  var DEFAULT_BLOCKED_UA_STRS = [
69517
69653
  "amazonbot",
69518
69654
  "amazonproductbot",
@@ -69601,7 +69737,7 @@ var isBlockedUA = function(ua, customBlockedUserAgents = []) {
69601
69737
  return uaLower.indexOf(blockedUaLower) !== -1;
69602
69738
  });
69603
69739
  };
69604
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/type-utils.mjs
69740
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/type-utils.mjs
69605
69741
  var nativeIsArray = Array.isArray;
69606
69742
  var ObjProto = Object.prototype;
69607
69743
  var type_utils_hasOwnProperty = ObjProto.hasOwnProperty;
@@ -69638,7 +69774,7 @@ function isInstanceOf(candidate, base) {
69638
69774
  }
69639
69775
  }
69640
69776
 
69641
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/number-utils.mjs
69777
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/number-utils.mjs
69642
69778
  function clampToRange(value, min, max, logger, fallbackValue) {
69643
69779
  if (min > max) {
69644
69780
  logger.warn("min cannot be greater than max.");
@@ -69658,7 +69794,7 @@ function clampToRange(value, min, max, logger, fallbackValue) {
69658
69794
  return clampToRange(fallbackValue || max, min, max, logger);
69659
69795
  }
69660
69796
 
69661
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/bucketed-rate-limiter.mjs
69797
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/bucketed-rate-limiter.mjs
69662
69798
  var ONE_DAY_IN_MS = 86400000;
69663
69799
 
69664
69800
  class BucketedRateLimiter {
@@ -69702,7 +69838,7 @@ class BucketedRateLimiter {
69702
69838
  this._buckets = {};
69703
69839
  }
69704
69840
  }
69705
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/promise-queue.mjs
69841
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/promise-queue.mjs
69706
69842
  class PromiseQueue {
69707
69843
  add(promise) {
69708
69844
  const promiseUUID = uuidv7();
@@ -69728,7 +69864,7 @@ class PromiseQueue {
69728
69864
  this.promiseByIds = {};
69729
69865
  }
69730
69866
  }
69731
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/logger.mjs
69867
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/logger.mjs
69732
69868
  function createConsole(consoleLike = console) {
69733
69869
  const lockedMethods = {
69734
69870
  log: consoleLike.log.bind(consoleLike),
@@ -69766,7 +69902,7 @@ var passThrough = (fn) => fn();
69766
69902
  function createLogger(prefix, maybeCall = passThrough) {
69767
69903
  return _createLogger(prefix, maybeCall, createConsole());
69768
69904
  }
69769
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/user-agent-utils.mjs
69905
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/user-agent-utils.mjs
69770
69906
  var MOBILE = "Mobile";
69771
69907
  var IOS = "iOS";
69772
69908
  var ANDROID = "Android";
@@ -70023,7 +70159,7 @@ var osMatchers = [
70023
70159
  ]
70024
70160
  ];
70025
70161
 
70026
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/index.mjs
70162
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/utils/index.mjs
70027
70163
  var STRING_FORMAT = "utf8";
70028
70164
  function assert(truthyValue, message) {
70029
70165
  if (!truthyValue || typeof truthyValue != "string" || isEmpty(truthyValue))
@@ -70071,7 +70207,7 @@ function allSettled(promises) {
70071
70207
  reason
70072
70208
  }))));
70073
70209
  }
70074
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/eventemitter.mjs
70210
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/eventemitter.mjs
70075
70211
  class SimpleEventEmitter {
70076
70212
  constructor() {
70077
70213
  this.events = {};
@@ -70093,7 +70229,7 @@ class SimpleEventEmitter {
70093
70229
  }
70094
70230
  }
70095
70231
 
70096
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/posthog-core-stateless.mjs
70232
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/posthog-core-stateless.mjs
70097
70233
  class PostHogFetchHttpError extends Error {
70098
70234
  constructor(response, reqByteLength) {
70099
70235
  super("HTTP error while fetching PostHog: status=" + response.status + ", reqByteLength=" + reqByteLength), this.response = response, this.reqByteLength = reqByteLength, this.name = "PostHogFetchHttpError";
@@ -70808,7 +70944,7 @@ class PostHogCoreStateless {
70808
70944
  return this.shutdownPromise;
70809
70945
  }
70810
70946
  }
70811
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/index.mjs
70947
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/index.mjs
70812
70948
  var exports_error_tracking = {};
70813
70949
  __export(exports_error_tracking, {
70814
70950
  winjsStackLineParser: () => winjsStackLineParser,
@@ -70832,7 +70968,7 @@ __export(exports_error_tracking, {
70832
70968
  DOMExceptionCoercer: () => DOMExceptionCoercer
70833
70969
  });
70834
70970
 
70835
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/chunk-ids.mjs
70971
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/chunk-ids.mjs
70836
70972
  var parsedStackResults;
70837
70973
  var lastKeysCount;
70838
70974
  var cachedFilenameChunkIds;
@@ -70871,7 +71007,7 @@ function getFilenameToChunkIdMap(stackParser) {
70871
71007
  return cachedFilenameChunkIds;
70872
71008
  }
70873
71009
 
70874
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/error-properties-builder.mjs
71010
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/error-properties-builder.mjs
70875
71011
  var MAX_CAUSE_RECURSION = 4;
70876
71012
 
70877
71013
  class ErrorPropertiesBuilder {
@@ -70993,7 +71129,7 @@ class ErrorPropertiesBuilder {
70993
71129
  return context;
70994
71130
  }
70995
71131
  }
70996
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/base.mjs
71132
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/base.mjs
70997
71133
  var UNKNOWN_FUNCTION = "?";
70998
71134
  function createFrame(platform, filename, func, lineno, colno) {
70999
71135
  const frame = {
@@ -71009,7 +71145,7 @@ function createFrame(platform, filename, func, lineno, colno) {
71009
71145
  return frame;
71010
71146
  }
71011
71147
 
71012
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/safari.mjs
71148
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/safari.mjs
71013
71149
  var extractSafariExtensionDetails = (func, filename) => {
71014
71150
  const isSafariExtension = func.indexOf("safari-extension") !== -1;
71015
71151
  const isSafariWebExtension = func.indexOf("safari-web-extension") !== -1;
@@ -71022,7 +71158,7 @@ var extractSafariExtensionDetails = (func, filename) => {
71022
71158
  ];
71023
71159
  };
71024
71160
 
71025
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/chrome.mjs
71161
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/chrome.mjs
71026
71162
  var chromeRegexNoFnName = /^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i;
71027
71163
  var chromeRegex = /^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
71028
71164
  var chromeEvalRegex = /\((\S*)(?::(\d+))(?::(\d+))\)/;
@@ -71048,7 +71184,7 @@ var chromeStackLineParser = (line, platform) => {
71048
71184
  }
71049
71185
  };
71050
71186
 
71051
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/gecko.mjs
71187
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/gecko.mjs
71052
71188
  var geckoREgex = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i;
71053
71189
  var geckoEvalRegex = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
71054
71190
  var geckoStackLineParser = (line, platform) => {
@@ -71071,14 +71207,14 @@ var geckoStackLineParser = (line, platform) => {
71071
71207
  }
71072
71208
  };
71073
71209
 
71074
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/winjs.mjs
71210
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/winjs.mjs
71075
71211
  var winjsRegex = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
71076
71212
  var winjsStackLineParser = (line, platform) => {
71077
71213
  const parts = winjsRegex.exec(line);
71078
71214
  return parts ? createFrame(platform, parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined) : undefined;
71079
71215
  };
71080
71216
 
71081
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/opera.mjs
71217
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/opera.mjs
71082
71218
  var opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
71083
71219
  var opera10StackLineParser = (line, platform) => {
71084
71220
  const parts = opera10Regex.exec(line);
@@ -71090,7 +71226,7 @@ var opera11StackLineParser = (line, platform) => {
71090
71226
  return parts ? createFrame(platform, parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;
71091
71227
  };
71092
71228
 
71093
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/node.mjs
71229
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/node.mjs
71094
71230
  var FILENAME_MATCH = /^\s*[-]{4,}$/;
71095
71231
  var FULL_MATCH = /at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/;
71096
71232
  var nodeStackLineParser = (line, platform) => {
@@ -71159,7 +71295,7 @@ function _parseIntOrUndefined(input) {
71159
71295
  return parseInt(input || "", 10) || undefined;
71160
71296
  }
71161
71297
 
71162
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/index.mjs
71298
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/parsers/index.mjs
71163
71299
  var WEBPACK_ERROR_REGEXP = /\(error: (.*)\)/;
71164
71300
  var STACKTRACE_FRAME_LIMIT = 50;
71165
71301
  function reverseAndStripFrames(stack) {
@@ -71204,7 +71340,7 @@ function createStackParser(platform, ...parsers) {
71204
71340
  return reverseAndStripFrames(frames);
71205
71341
  };
71206
71342
  }
71207
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/dom-exception-coercer.mjs
71343
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/dom-exception-coercer.mjs
71208
71344
  class DOMExceptionCoercer {
71209
71345
  match(err) {
71210
71346
  return this.isDOMException(err) || this.isDOMError(err);
@@ -71234,7 +71370,7 @@ class DOMExceptionCoercer {
71234
71370
  return isBuiltin(err, "DOMError");
71235
71371
  }
71236
71372
  }
71237
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/error-coercer.mjs
71373
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/error-coercer.mjs
71238
71374
  class ErrorCoercer {
71239
71375
  match(err) {
71240
71376
  return isPlainError(err);
@@ -71261,7 +71397,7 @@ class ErrorCoercer {
71261
71397
  return err.stacktrace || err.stack || undefined;
71262
71398
  }
71263
71399
  }
71264
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/error-event-coercer.mjs
71400
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/error-event-coercer.mjs
71265
71401
  class ErrorEventCoercer {
71266
71402
  constructor() {}
71267
71403
  match(err) {
@@ -71279,7 +71415,7 @@ class ErrorEventCoercer {
71279
71415
  return exceptionLike;
71280
71416
  }
71281
71417
  }
71282
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/string-coercer.mjs
71418
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/string-coercer.mjs
71283
71419
  var ERROR_TYPES_PATTERN = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;
71284
71420
 
71285
71421
  class StringCoercer {
@@ -71309,7 +71445,7 @@ class StringCoercer {
71309
71445
  ];
71310
71446
  }
71311
71447
  }
71312
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/types.mjs
71448
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/types.mjs
71313
71449
  var severityLevels = [
71314
71450
  "fatal",
71315
71451
  "error",
@@ -71319,7 +71455,7 @@ var severityLevels = [
71319
71455
  "debug"
71320
71456
  ];
71321
71457
 
71322
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/utils.mjs
71458
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/utils.mjs
71323
71459
  function extractExceptionKeysForMessage(err, maxLength = 40) {
71324
71460
  const keys = Object.keys(err);
71325
71461
  keys.sort();
@@ -71336,7 +71472,7 @@ function extractExceptionKeysForMessage(err, maxLength = 40) {
71336
71472
  return "";
71337
71473
  }
71338
71474
 
71339
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/object-coercer.mjs
71475
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/object-coercer.mjs
71340
71476
  class ObjectCoercer {
71341
71477
  match(candidate) {
71342
71478
  return typeof candidate == "object" && candidate !== null;
@@ -71389,7 +71525,7 @@ class ObjectCoercer {
71389
71525
  }
71390
71526
  }
71391
71527
  }
71392
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/event-coercer.mjs
71528
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/event-coercer.mjs
71393
71529
  class EventCoercer {
71394
71530
  match(err) {
71395
71531
  return isEvent(err);
@@ -71404,7 +71540,7 @@ class EventCoercer {
71404
71540
  };
71405
71541
  }
71406
71542
  }
71407
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/primitive-coercer.mjs
71543
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/primitive-coercer.mjs
71408
71544
  class PrimitiveCoercer {
71409
71545
  match(candidate) {
71410
71546
  return isPrimitive(candidate);
@@ -71418,7 +71554,7 @@ class PrimitiveCoercer {
71418
71554
  };
71419
71555
  }
71420
71556
  }
71421
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/promise-rejection-event.mjs
71557
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/coercers/promise-rejection-event.mjs
71422
71558
  class PromiseRejectionEventCoercer {
71423
71559
  match(err) {
71424
71560
  return isBuiltin(err, "PromiseRejectionEvent") || this.isCustomEventWrappingRejection(err);
@@ -71454,7 +71590,7 @@ class PromiseRejectionEventCoercer {
71454
71590
  return error;
71455
71591
  }
71456
71592
  }
71457
- // ../switchroom-sec-1417/node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/utils.mjs
71593
+ // node_modules/.bun/@posthog+core@1.25.2/node_modules/@posthog/core/dist/error-tracking/utils.mjs
71458
71594
  class ReduceableCache {
71459
71595
  constructor(_maxSize) {
71460
71596
  this._maxSize = _maxSize;
@@ -71479,7 +71615,7 @@ class ReduceableCache {
71479
71615
  }
71480
71616
  }
71481
71617
  }
71482
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/context-lines.node.mjs
71618
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/context-lines.node.mjs
71483
71619
  import { createReadStream } from "node:fs";
71484
71620
  import { createInterface as createInterface5 } from "node:readline";
71485
71621
  var LRU_FILE_CONTENTS_CACHE = new exports_error_tracking.ReduceableCache(25);
@@ -71697,7 +71833,7 @@ function snipLine(line, colno) {
71697
71833
  return newLine;
71698
71834
  }
71699
71835
 
71700
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/error-tracking/autocapture.mjs
71836
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/error-tracking/autocapture.mjs
71701
71837
  function makeUncaughtExceptionHandler(captureFn, onFatalFn) {
71702
71838
  let calledFatalError = false;
71703
71839
  return Object.assign((error) => {
@@ -71729,7 +71865,7 @@ function addUnhandledRejectionListener(captureFn) {
71729
71865
  }));
71730
71866
  }
71731
71867
 
71732
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/error-tracking/index.mjs
71868
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/error-tracking/index.mjs
71733
71869
  var SHUTDOWN_TIMEOUT = 2000;
71734
71870
 
71735
71871
  class ErrorTracking {
@@ -71798,10 +71934,10 @@ class ErrorTracking {
71798
71934
  }
71799
71935
  }
71800
71936
 
71801
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/version.mjs
71937
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/version.mjs
71802
71938
  var version = "5.29.2";
71803
71939
 
71804
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/types.mjs
71940
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/types.mjs
71805
71941
  var FeatureFlagError2 = {
71806
71942
  ERRORS_WHILE_COMPUTING: "errors_while_computing_flags",
71807
71943
  FLAG_MISSING: "flag_missing",
@@ -71809,7 +71945,7 @@ var FeatureFlagError2 = {
71809
71945
  UNKNOWN_ERROR: "unknown_error"
71810
71946
  };
71811
71947
 
71812
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/feature-flags/crypto.mjs
71948
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/feature-flags/crypto.mjs
71813
71949
  async function hashSHA1(text) {
71814
71950
  const subtle = globalThis.crypto?.subtle;
71815
71951
  if (!subtle)
@@ -71819,7 +71955,7 @@ async function hashSHA1(text) {
71819
71955
  return hashArray.map((byte) => byte.toString(16).padStart(2, "0")).join("");
71820
71956
  }
71821
71957
 
71822
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/feature-flags/feature-flags.mjs
71958
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/feature-flags/feature-flags.mjs
71823
71959
  var SIXTY_SECONDS = 60000;
71824
71960
  var LONG_SCALE = 1152921504606847000;
71825
71961
  var NULL_VALUES_ALLOWED_OPERATORS = [
@@ -72693,7 +72829,7 @@ function relativeDateParseForFeatureFlagMatching(value) {
72693
72829
  }
72694
72830
  }
72695
72831
 
72696
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/storage-memory.mjs
72832
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/storage-memory.mjs
72697
72833
  class PostHogMemoryStorage {
72698
72834
  getProperty(key) {
72699
72835
  return this._memoryStorage[key];
@@ -72706,7 +72842,7 @@ class PostHogMemoryStorage {
72706
72842
  }
72707
72843
  }
72708
72844
 
72709
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/client.mjs
72845
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/client.mjs
72710
72846
  var MINIMUM_POLLING_INTERVAL = 100;
72711
72847
  var THIRTY_SECONDS = 30000;
72712
72848
  var MAX_CACHE_SIZE = 50000;
@@ -73494,7 +73630,7 @@ class PostHogBackendClient extends PostHogCoreStateless {
73494
73630
  }
73495
73631
  }
73496
73632
 
73497
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/context/context.mjs
73633
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/context/context.mjs
73498
73634
  import { AsyncLocalStorage } from "node:async_hooks";
73499
73635
 
73500
73636
  class PostHogContext {
@@ -73525,7 +73661,7 @@ class PostHogContext {
73525
73661
  }
73526
73662
  }
73527
73663
 
73528
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/sentry-integration.mjs
73664
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/extensions/sentry-integration.mjs
73529
73665
  var NAME = "posthog-node";
73530
73666
  function createEventProcessor(_posthog, { organization, projectId, prefix, severityAllowList = [
73531
73667
  "error"
@@ -73593,7 +73729,7 @@ class PostHogSentryIntegration {
73593
73729
  };
73594
73730
  }
73595
73731
  }
73596
- // ../switchroom-sec-1417/node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/entrypoints/index.node.mjs
73732
+ // node_modules/.bun/posthog-node@5.29.2/node_modules/posthog-node/dist/entrypoints/index.node.mjs
73597
73733
  ErrorTracking.errorPropertiesBuilder = new exports_error_tracking.ErrorPropertiesBuilder([
73598
73734
  new exports_error_tracking.EventCoercer,
73599
73735
  new exports_error_tracking.ErrorCoercer,
@@ -74806,6 +74942,28 @@ function handleGetNotionWorkspace(config) {
74806
74942
  fullAccessAgents
74807
74943
  };
74808
74944
  }
74945
+ function handleGetLinearAgents(config) {
74946
+ const agentNames = Object.keys(config.agents ?? {});
74947
+ const agents = [];
74948
+ for (const name of agentNames) {
74949
+ const rawAgent = config.agents?.[name];
74950
+ if (!rawAgent)
74951
+ continue;
74952
+ const linear = resolveAgentConfig(config.defaults, config.profiles, rawAgent).channels?.telegram?.linear_agent;
74953
+ if (!linear?.enabled)
74954
+ continue;
74955
+ const tok = linear.token;
74956
+ const tokenVaultKey = typeof tok === "string" && tok.startsWith("vault:") ? tok : null;
74957
+ agents.push({
74958
+ agent: name,
74959
+ workspaceId: linear.workspace_id ?? null,
74960
+ defaultTeamId: linear.default_team_id ?? null,
74961
+ tokenVaultKey
74962
+ });
74963
+ }
74964
+ agents.sort((a, b) => a.agent.localeCompare(b.agent));
74965
+ return { configured: agents.length > 0, agents };
74966
+ }
74809
74967
  var connectionAccessStatuses = new Map;
74810
74968
  function reapConnectionAccessStatuses(now = Date.now()) {
74811
74969
  for (const [id, s] of connectionAccessStatuses) {
@@ -75877,6 +76035,23 @@ var MIME_TYPES = {
75877
76035
  ".svg": "image/svg+xml",
75878
76036
  ".ico": "image/x-icon"
75879
76037
  };
76038
+ var SPA_TAB_ROUTES = new Set([
76039
+ "summary",
76040
+ "agents",
76041
+ "accounts",
76042
+ "system",
76043
+ "memory",
76044
+ "connections",
76045
+ "schedule",
76046
+ "approvals"
76047
+ ]);
76048
+ function resolveDashboardFilePath(pathname) {
76049
+ const routeName = pathname.replace(/^\/+/, "").replace(/\/+$/, "");
76050
+ return pathname === "/" || SPA_TAB_ROUTES.has(routeName) ? "/index.html" : pathname;
76051
+ }
76052
+ function dashboardCacheControl(ext) {
76053
+ return ext === ".html" ? "no-cache, must-revalidate" : undefined;
76054
+ }
75880
76055
  function jsonResponse(data, status = 200) {
75881
76056
  return new Response(JSON.stringify(data), {
75882
76057
  status,
@@ -76114,6 +76289,9 @@ function parseRoute(pathname, method) {
76114
76289
  if (method === "GET" && pathname === "/api/notion-workspace") {
76115
76290
  return { handler: "getNotionWorkspace", params: {} };
76116
76291
  }
76292
+ if (method === "GET" && pathname === "/api/linear-agents") {
76293
+ return { handler: "getLinearAgents", params: {} };
76294
+ }
76117
76295
  if (method === "GET" && pathname === "/api/schedule") {
76118
76296
  return { handler: "getSchedule", params: {} };
76119
76297
  }
@@ -76205,8 +76383,8 @@ function startWebServer(config, port, hostname = "127.0.0.1", configPath) {
76205
76383
  return new Response("Unauthorized", { status: 401 });
76206
76384
  }
76207
76385
  const wsProto = req.headers.get("Sec-WebSocket-Protocol");
76208
- const headers = wsProto && wsProto.split(",").map((s) => s.trim()).includes("bearer") ? { "Sec-WebSocket-Protocol": "bearer" } : undefined;
76209
- const upgraded = server2.upgrade(req, headers ? { headers } : undefined);
76386
+ const headers2 = wsProto && wsProto.split(",").map((s) => s.trim()).includes("bearer") ? { "Sec-WebSocket-Protocol": "bearer" } : undefined;
76387
+ const upgraded = server2.upgrade(req, headers2 ? { headers: headers2 } : undefined);
76210
76388
  if (!upgraded) {
76211
76389
  return new Response("WebSocket upgrade failed", { status: 400 });
76212
76390
  }
@@ -76294,6 +76472,8 @@ function startWebServer(config, port, hostname = "127.0.0.1", configPath) {
76294
76472
  return (async () => jsonResponse(await handleGetMicrosoftAccounts(freshConfig())))();
76295
76473
  case "getNotionWorkspace":
76296
76474
  return jsonResponse(handleGetNotionWorkspace(freshConfig()));
76475
+ case "getLinearAgents":
76476
+ return jsonResponse(handleGetLinearAgents(freshConfig()));
76297
76477
  case "getSchedule":
76298
76478
  return (async () => jsonResponse(withStamp(await cachedSchedule())))();
76299
76479
  case "getApprovals":
@@ -76428,7 +76608,7 @@ function startWebServer(config, port, hostname = "127.0.0.1", configPath) {
76428
76608
  }
76429
76609
  }
76430
76610
  }
76431
- let filePath = pathname === "/" ? "/index.html" : pathname;
76611
+ const filePath = resolveDashboardFilePath(pathname);
76432
76612
  const fullPath = join47(uiDir, filePath);
76433
76613
  if (!existsSync50(fullPath)) {
76434
76614
  return new Response("Not Found", { status: 404 });
@@ -76446,9 +76626,11 @@ function startWebServer(config, port, hostname = "127.0.0.1", configPath) {
76446
76626
  const ext = extname(realFullPath);
76447
76627
  const contentType = MIME_TYPES[ext] ?? "application/octet-stream";
76448
76628
  const content = readFileSync46(realFullPath);
76449
- return new Response(content, {
76450
- headers: { "Content-Type": contentType }
76451
- });
76629
+ const headers = { "Content-Type": contentType };
76630
+ const cacheControl = dashboardCacheControl(ext);
76631
+ if (cacheControl)
76632
+ headers["Cache-Control"] = cacheControl;
76633
+ return new Response(content, { headers });
76452
76634
  },
76453
76635
  websocket: {
76454
76636
  open(_ws) {},
@@ -82019,7 +82201,7 @@ async function runNotionMcpLauncher(opts, runtime) {
82019
82201
  return exitCode;
82020
82202
  }
82021
82203
  function registerNotionMcpLauncherCommand(program3) {
82022
- program3.command("notion-mcp-launcher", { hidden: true }).option("--vault-key <key>", "Override the vault key holding the Notion integration token. " + "Defaults to `notion/integration-token`.", DEFAULT_VAULT_KEY).option("--mcp-version <semver>", "Override the @notionhq/notion-mcp-server version to spawn.").option("--heartbeat-path <path>", "Override the heartbeat file path. Default: /state/agent/notion-launcher.heartbeat.json").description("Internal \u2014 Notion MCP launcher. Fetches the integration token from the vault-broker and execs @notionhq/notion-mcp-server in stdio mode. RFC docs/rfcs/notion-integration.md PR 2.").action(async (opts) => {
82204
+ program3.command("notion-mcp-launcher", { hidden: true }).option("--vault-key <key>", "Override the vault key holding the Notion integration token. " + "Defaults to `notion/integration-token`.", DEFAULT_VAULT_KEY).option("--mcp-version <semver>", "Override the @notionhq/notion-mcp-server version to spawn.").option("--heartbeat-path <path>", "Override the heartbeat file path. Default: /state/agent/notion-launcher.heartbeat.json").description("Internal \u2014 Notion MCP launcher. Fetches the integration token from the vault-broker and execs @notionhq/notion-mcp-server in stdio mode. RFC reference/rfcs/notion-integration.md PR 2.").action(async (opts) => {
82023
82205
  const { getViaBrokerStructured: getViaBrokerStructured2 } = await Promise.resolve().then(() => (init_client(), exports_client));
82024
82206
  const code = await runNotionMcpLauncher(opts, {
82025
82207
  fetchToken: async () => {
@@ -82492,7 +82674,7 @@ function createNotionApiClient(opts) {
82492
82674
  // src/cli/notion.ts
82493
82675
  init_client();
82494
82676
  function registerNotionCommand(program3) {
82495
- const cmd = program3.command("notion").description("Notion integration operator helpers (list-dbs, test). See docs/rfcs/notion-integration.md.");
82677
+ const cmd = program3.command("notion").description("Notion integration operator helpers (list-dbs, test). See reference/rfcs/notion-integration.md.");
82496
82678
  cmd.command("list-dbs").description("List the databases the Notion integration can access. Output is a ready-to-paste YAML block for `notion_workspace.databases`.").option("--vault-key <key>", "Override the vault key holding the integration token.", "notion/integration-token").action(async (opts) => {
82497
82679
  const code = await runListDbs(opts);
82498
82680
  process.exit(code);
@@ -82682,7 +82864,7 @@ async function fetchToken(vaultKey) {
82682
82864
 
82683
82865
  // src/cli/apply.ts
82684
82866
  init_source();
82685
- import { accessSync as accessSync3, chownSync as chownSync7, constants as fsConstants6, copyFileSync as copyFileSync11, existsSync as existsSync74, mkdirSync as mkdirSync42, readFileSync as readFileSync63, readdirSync as readdirSync26, renameSync as renameSync14, writeFileSync as writeFileSync37 } from "node:fs";
82867
+ import { accessSync as accessSync3, chownSync as chownSync7, constants as fsConstants6, copyFileSync as copyFileSync11, existsSync as existsSync74, mkdirSync as mkdirSync43, readFileSync as readFileSync63, readdirSync as readdirSync26, renameSync as renameSync14, writeFileSync as writeFileSync38 } from "node:fs";
82686
82868
  import { mkdir as mkdir2 } from "node:fs/promises";
82687
82869
  import { spawnSync as childSpawnSync } from "node:child_process";
82688
82870
  import readline from "node:readline";
@@ -83071,16 +83253,97 @@ agents:
83071
83253
 
83072
83254
  // src/cli/apply.ts
83073
83255
  init_resolver();
83074
- import { dirname as dirname23, join as join75, resolve as resolve46 } from "node:path";
83256
+ import { dirname as dirname23, join as join76, resolve as resolve46 } from "node:path";
83075
83257
  import { homedir as homedir44 } from "node:os";
83076
83258
  import { execFileSync as execFileSync24 } from "node:child_process";
83077
83259
  init_vault();
83078
83260
  init_loader();
83079
83261
  init_loader();
83080
83262
 
83081
- // src/cli/update-prompt-hook.ts
83082
- import { existsSync as existsSync72, readFileSync as readFileSync62, writeFileSync as writeFileSync36, chmodSync as chmodSync10, mkdirSync as mkdirSync41 } from "node:fs";
83263
+ // src/agents/connection-health.ts
83264
+ import { mkdirSync as mkdirSync41, writeFileSync as writeFileSync36 } from "node:fs";
83083
83265
  import { join as join73 } from "node:path";
83266
+ var CONNECTION_HEALTH_FILENAME = "connection-health.json";
83267
+ async function computeAgentConnectionIssues(config, agentName, vaultAclReader) {
83268
+ const reqs = computeMcpSecretRequirements(config).filter((r) => r.agent === agentName);
83269
+ if (reqs.length === 0)
83270
+ return [];
83271
+ const agentsNeedingKey = new Map;
83272
+ for (const r of computeMcpSecretRequirements(config)) {
83273
+ for (const key of r.keys) {
83274
+ let set = agentsNeedingKey.get(key);
83275
+ if (!set) {
83276
+ set = new Set;
83277
+ agentsNeedingKey.set(key, set);
83278
+ }
83279
+ set.add(r.agent);
83280
+ }
83281
+ }
83282
+ const aclCache = new Map;
83283
+ const readKey = async (key) => {
83284
+ const cached = aclCache.get(key);
83285
+ if (cached)
83286
+ return cached;
83287
+ const r = await vaultAclReader(key);
83288
+ aclCache.set(key, r);
83289
+ return r;
83290
+ };
83291
+ const issues = [];
83292
+ for (const r of reqs) {
83293
+ for (const key of r.keys) {
83294
+ const acl = await readKey(key);
83295
+ const want = [...agentsNeedingKey.get(key) ?? new Set].sort();
83296
+ if (acl.kind === "unreachable")
83297
+ continue;
83298
+ if (acl.kind === "not_found") {
83299
+ issues.push({
83300
+ server: r.server,
83301
+ key,
83302
+ kind: "missing",
83303
+ detail: `MCP '${r.server}' needs vault key '${key}', but it is missing \u2014 configured but not authed`,
83304
+ fix: `switchroom vault set ${key} --allow ${want.join(",")} (then provide the value)`
83305
+ });
83306
+ continue;
83307
+ }
83308
+ if (entryScopeDenies(agentName, acl.allow, acl.deny)) {
83309
+ const updated = [...new Set([...acl.allow, agentName])].sort().join(",");
83310
+ issues.push({
83311
+ server: r.server,
83312
+ key,
83313
+ kind: "acl",
83314
+ detail: `MCP '${r.server}' \u2014 vault entry scope for '${key}' denies this agent \u2014 broker will deny at runtime`,
83315
+ fix: `switchroom vault set ${key} --allow ${updated} (re-state the full list; drop from --deny if present)`
83316
+ });
83317
+ }
83318
+ }
83319
+ }
83320
+ return issues;
83321
+ }
83322
+ function writeConnectionHealthFile(agentDir, health, deps) {
83323
+ const dir = join73(agentDir, ".claude");
83324
+ const path7 = join73(dir, CONNECTION_HEALTH_FILENAME);
83325
+ (deps?.mkdir ?? ((p, o) => mkdirSync41(p, o)))(dir, { recursive: true });
83326
+ (deps?.writeFile ?? ((p, d) => writeFileSync36(p, d)))(path7, JSON.stringify(health, null, 2) + `
83327
+ `);
83328
+ }
83329
+ async function refreshAgentConnectionHealth(config, agentName, agentDir, deps) {
83330
+ const now = deps.now ?? Date.now;
83331
+ let issues = [];
83332
+ try {
83333
+ issues = await computeAgentConnectionIssues(config, agentName, deps.vaultAclReader);
83334
+ } catch {
83335
+ issues = [];
83336
+ }
83337
+ const health = { computedAt: now(), issues };
83338
+ try {
83339
+ writeConnectionHealthFile(agentDir, health, deps);
83340
+ } catch {}
83341
+ return health;
83342
+ }
83343
+
83344
+ // src/cli/update-prompt-hook.ts
83345
+ import { existsSync as existsSync72, readFileSync as readFileSync62, writeFileSync as writeFileSync37, chmodSync as chmodSync10, mkdirSync as mkdirSync42 } from "node:fs";
83346
+ import { join as join74 } from "node:path";
83084
83347
  var HOOK_FILENAME = "update-card-on-prompt.sh";
83085
83348
  function updatePromptHookScript() {
83086
83349
  return `#!/bin/bash
@@ -83146,14 +83409,14 @@ exit 0
83146
83409
  `;
83147
83410
  }
83148
83411
  function installUpdatePromptHook(agentDir) {
83149
- const hooksDir = join73(agentDir, ".claude", "hooks");
83150
- mkdirSync41(hooksDir, { recursive: true });
83151
- const scriptPath = join73(hooksDir, HOOK_FILENAME);
83412
+ const hooksDir = join74(agentDir, ".claude", "hooks");
83413
+ mkdirSync42(hooksDir, { recursive: true });
83414
+ const scriptPath = join74(hooksDir, HOOK_FILENAME);
83152
83415
  const desired = updatePromptHookScript();
83153
83416
  let installed = false;
83154
83417
  const existing = existsSync72(scriptPath) ? readFileSync62(scriptPath, "utf-8") : "";
83155
83418
  if (existing !== desired) {
83156
- writeFileSync36(scriptPath, desired, { mode: 493 });
83419
+ writeFileSync37(scriptPath, desired, { mode: 493 });
83157
83420
  chmodSync10(scriptPath, 493);
83158
83421
  installed = true;
83159
83422
  } else {
@@ -83161,7 +83424,7 @@ function installUpdatePromptHook(agentDir) {
83161
83424
  chmodSync10(scriptPath, 493);
83162
83425
  } catch {}
83163
83426
  }
83164
- const settingsPath = join73(agentDir, ".claude", "settings.json");
83427
+ const settingsPath = join74(agentDir, ".claude", "settings.json");
83165
83428
  if (!existsSync72(settingsPath)) {
83166
83429
  return { scriptPath, settingsPath, installed };
83167
83430
  }
@@ -83198,7 +83461,7 @@ function installUpdatePromptHook(agentDir) {
83198
83461
  });
83199
83462
  hooks.UserPromptSubmit = list2;
83200
83463
  parsed.hooks = hooks;
83201
- writeFileSync36(settingsPath, JSON.stringify(parsed, null, 2) + `
83464
+ writeFileSync37(settingsPath, JSON.stringify(parsed, null, 2) + `
83202
83465
  `, { mode: 384 });
83203
83466
  installed = true;
83204
83467
  }
@@ -83263,14 +83526,14 @@ var EMBEDDED_EXAMPLES = {
83263
83526
  switchroom: switchroom_default,
83264
83527
  minimal: minimal_default
83265
83528
  };
83266
- var DEFAULT_COMPOSE_PATH2 = join75(homedir44(), ".switchroom", "compose", "docker-compose.yml");
83529
+ var DEFAULT_COMPOSE_PATH2 = join76(homedir44(), ".switchroom", "compose", "docker-compose.yml");
83267
83530
  var COMPOSE_PROJECT2 = "switchroom";
83268
83531
  function resolveVaultBindMountDir(homeDir, ctx) {
83269
83532
  const isCustomPath = ctx.migrationKind === "custom-path-skipped";
83270
83533
  if (isCustomPath && ctx.customVaultPath) {
83271
83534
  return dirname23(ctx.customVaultPath);
83272
83535
  }
83273
- return join75(homeDir, ".switchroom", "vault");
83536
+ return join76(homeDir, ".switchroom", "vault");
83274
83537
  }
83275
83538
  function inspectVaultBindMountDir(vaultDir) {
83276
83539
  if (!existsSync74(vaultDir))
@@ -83301,61 +83564,61 @@ function hasVaultRefs(value) {
83301
83564
  async function ensureHostMountSources(config) {
83302
83565
  const home2 = homedir44();
83303
83566
  const dirs = [
83304
- join75(home2, ".switchroom", "approvals"),
83305
- join75(home2, ".switchroom", "scheduler"),
83306
- join75(home2, ".switchroom", "logs"),
83307
- join75(home2, ".switchroom", "compose"),
83308
- join75(home2, ".switchroom", "broker-operator")
83567
+ join76(home2, ".switchroom", "approvals"),
83568
+ join76(home2, ".switchroom", "scheduler"),
83569
+ join76(home2, ".switchroom", "logs"),
83570
+ join76(home2, ".switchroom", "compose"),
83571
+ join76(home2, ".switchroom", "broker-operator")
83309
83572
  ];
83310
83573
  for (const name of Object.keys(config.agents)) {
83311
- dirs.push(join75(home2, ".switchroom", "agents", name));
83312
- dirs.push(join75(home2, ".switchroom", "logs", name));
83313
- dirs.push(join75(home2, ".claude", "projects", name));
83314
- dirs.push(join75(home2, ".switchroom", "audit", name));
83315
- if (existsSync74(join75(home2, ".switchroom-config"))) {
83316
- dirs.push(join75(home2, ".switchroom-config", "agents", name, "personal-skills"));
83574
+ dirs.push(join76(home2, ".switchroom", "agents", name));
83575
+ dirs.push(join76(home2, ".switchroom", "logs", name));
83576
+ dirs.push(join76(home2, ".claude", "projects", name));
83577
+ dirs.push(join76(home2, ".switchroom", "audit", name));
83578
+ if (existsSync74(join76(home2, ".switchroom-config"))) {
83579
+ dirs.push(join76(home2, ".switchroom-config", "agents", name, "personal-skills"));
83317
83580
  }
83318
83581
  }
83319
83582
  for (const dir of dirs) {
83320
83583
  await mkdir2(dir, { recursive: true });
83321
83584
  }
83322
- const autoUnlockPath = join75(home2, ".switchroom", "vault-auto-unlock");
83585
+ const autoUnlockPath = join76(home2, ".switchroom", "vault-auto-unlock");
83323
83586
  if (!existsSync74(autoUnlockPath)) {
83324
- writeFileSync37(autoUnlockPath, "", { mode: 384 });
83587
+ writeFileSync38(autoUnlockPath, "", { mode: 384 });
83325
83588
  }
83326
- const auditLogPath = join75(home2, ".switchroom", "vault-audit.log");
83589
+ const auditLogPath = join76(home2, ".switchroom", "vault-audit.log");
83327
83590
  if (!existsSync74(auditLogPath)) {
83328
- writeFileSync37(auditLogPath, "", { mode: 420 });
83591
+ writeFileSync38(auditLogPath, "", { mode: 420 });
83329
83592
  }
83330
- const grantsDbPath = join75(home2, ".switchroom", "vault-grants.db");
83593
+ const grantsDbPath = join76(home2, ".switchroom", "vault-grants.db");
83331
83594
  if (!existsSync74(grantsDbPath)) {
83332
- writeFileSync37(grantsDbPath, "", { mode: 384 });
83595
+ writeFileSync38(grantsDbPath, "", { mode: 384 });
83333
83596
  }
83334
- const hostdAuditLogPath = join75(home2, ".switchroom", "host-control-audit.log");
83597
+ const hostdAuditLogPath = join76(home2, ".switchroom", "host-control-audit.log");
83335
83598
  if (!existsSync74(hostdAuditLogPath)) {
83336
- writeFileSync37(hostdAuditLogPath, "", { mode: 420 });
83599
+ writeFileSync38(hostdAuditLogPath, "", { mode: 420 });
83337
83600
  }
83338
83601
  for (const name of Object.keys(config.agents)) {
83339
- const tokenPath = join75(home2, ".switchroom", "agents", name, ".vault-token");
83602
+ const tokenPath = join76(home2, ".switchroom", "agents", name, ".vault-token");
83340
83603
  if (!existsSync74(tokenPath)) {
83341
- writeFileSync37(tokenPath, "", { mode: 384 });
83604
+ writeFileSync38(tokenPath, "", { mode: 384 });
83342
83605
  }
83343
83606
  try {
83344
83607
  const uid = allocateAgentUid(name);
83345
83608
  chownSync7(tokenPath, uid, uid);
83346
83609
  } catch {}
83347
83610
  }
83348
- const fleetDir = join75(home2, ".switchroom", "fleet");
83611
+ const fleetDir = join76(home2, ".switchroom", "fleet");
83349
83612
  await mkdir2(fleetDir, { recursive: true });
83350
- const invariantsPath = join75(fleetDir, "switchroom-invariants.md");
83613
+ const invariantsPath = join76(fleetDir, "switchroom-invariants.md");
83351
83614
  const invariantsCanonical = renderFleetInvariants();
83352
83615
  const invariantsCurrent = existsSync74(invariantsPath) ? readFileSync63(invariantsPath, "utf-8") : null;
83353
83616
  if (invariantsCurrent !== invariantsCanonical) {
83354
- writeFileSync37(invariantsPath, invariantsCanonical, { mode: 420 });
83617
+ writeFileSync38(invariantsPath, invariantsCanonical, { mode: 420 });
83355
83618
  }
83356
- const fleetClaudePath = join75(fleetDir, "CLAUDE.md");
83619
+ const fleetClaudePath = join76(fleetDir, "CLAUDE.md");
83357
83620
  if (!existsSync74(fleetClaudePath)) {
83358
- writeFileSync37(fleetClaudePath, [
83621
+ writeFileSync38(fleetClaudePath, [
83359
83622
  "# Switchroom fleet defaults",
83360
83623
  "",
83361
83624
  "Operator-owned fleet brain. Every agent reads this via",
@@ -83438,16 +83701,16 @@ function detectAndReportLegacyGdriveSlots(vaultPath) {
83438
83701
  }
83439
83702
  function writeInstallTypeCache(homeDir = homedir44()) {
83440
83703
  const ctx = detectInstallType();
83441
- const dir = join75(homeDir, ".switchroom");
83442
- const out = join75(dir, "install-type.json");
83704
+ const dir = join76(homeDir, ".switchroom");
83705
+ const out = join76(dir, "install-type.json");
83443
83706
  const tmp = `${out}.tmp`;
83444
- mkdirSync42(dir, { recursive: true });
83707
+ mkdirSync43(dir, { recursive: true });
83445
83708
  const payload = {
83446
83709
  install_type: ctx.install_type,
83447
83710
  detected_at: new Date().toISOString(),
83448
83711
  source_paths: ctx.source_paths
83449
83712
  };
83450
- writeFileSync37(tmp, JSON.stringify(payload, null, 2), { mode: 420 });
83713
+ writeFileSync38(tmp, JSON.stringify(payload, null, 2), { mode: 420 });
83451
83714
  renameSync14(tmp, out);
83452
83715
  return out;
83453
83716
  }
@@ -83474,6 +83737,24 @@ Applying switchroom config...
83474
83737
  writeOut(source_default.gray(` (--only=${options.only}: scaffolding/aligning this agent only; ` + `compose still covers all ${allAgentNames.length})
83475
83738
  `));
83476
83739
  }
83740
+ const connHealthVaultAclReader = async (key) => {
83741
+ try {
83742
+ const { getViaBrokerStructured: getViaBrokerStructured2 } = await Promise.resolve().then(() => (init_client(), exports_client));
83743
+ const result = await getViaBrokerStructured2(key);
83744
+ if (result.kind === "ok") {
83745
+ return {
83746
+ kind: "ok",
83747
+ allow: result.entry.scope?.allow ?? [],
83748
+ deny: result.entry.scope?.deny ?? []
83749
+ };
83750
+ }
83751
+ if (result.kind === "not_found")
83752
+ return { kind: "not_found" };
83753
+ return { kind: "unreachable", msg: result.msg };
83754
+ } catch (err) {
83755
+ return { kind: "unreachable", msg: err.message };
83756
+ }
83757
+ };
83477
83758
  let scaffolded = 0;
83478
83759
  const failures = [];
83479
83760
 
@@ -83488,14 +83769,17 @@ Applying switchroom config...
83488
83769
  writeOut(source_default.green(` + ${name}`) + source_default.gray(` (${agentConfig.extends ?? "default"}) \u2014 ${detail}
83489
83770
  `));
83490
83771
  try {
83491
- installUpdatePromptHook(join75(agentsDir, name));
83772
+ installUpdatePromptHook(join76(agentsDir, name));
83492
83773
  } catch (hookErr) {
83493
83774
  writeOut(source_default.gray(` (update-prompt hook install failed for ${name}: ${hookErr.message})
83494
83775
  `));
83495
83776
  }
83777
+ await refreshAgentConnectionHealth(config, name, join76(agentsDir, name), {
83778
+ vaultAclReader: connHealthVaultAclReader
83779
+ });
83496
83780
  try {
83497
83781
  const uid = allocateAgentUid(name);
83498
- alignAgentUid(name, join75(agentsDir, name), uid, {
83782
+ alignAgentUid(name, join76(agentsDir, name), uid, {
83499
83783
  confirm: !options.nonInteractive,
83500
83784
  writeOut
83501
83785
  });
@@ -83503,12 +83787,12 @@ Applying switchroom config...
83503
83787
  const msg = alignErr.message;
83504
83788
  if (options.allowUnaligned) {
83505
83789
  writeOut(source_default.yellow(` ! could not chown ${name} state dir: ${msg}
83506
- ` + ` continuing because --allow-unaligned was passed; agent may fail on first write.
83790
+ continuing because --allow-unaligned was passed; agent may fail on first write.
83507
83791
  `));
83508
83792
  } else {
83509
83793
  writeOut(source_default.red(` x could not chown ${name} state dir: ${msg}
83510
- ` + ` The bind-mounted state dir must be owned by the container's UID or the agent will fail on first write.
83511
- ` + ` Fix: run \`switchroom apply\` from a TTY so it can prompt for sudo, OR run the suggested chown manually, OR re-run with --allow-unaligned to skip this check.
83794
+ The bind-mounted state dir must be owned by the container's UID or the agent will fail on first write.
83795
+ Fix: run \`switchroom apply\` from a TTY so it can prompt for sudo, OR run the suggested chown manually, OR re-run with --allow-unaligned to skip this check.
83512
83796
  `));
83513
83797
  throw new UidAlignmentAbort(`UID alignment failed for agent ${name}; aborting apply (pass --allow-unaligned to override).`);
83514
83798
  }
@@ -83532,14 +83816,14 @@ Applying switchroom config...
83532
83816
  for (const name of agentNames) {
83533
83817
  try {
83534
83818
  const uid = allocateAgentUid(name);
83535
- alignAgentUid(name, join75(agentsDir, name), uid, {
83819
+ alignAgentUid(name, join76(agentsDir, name), uid, {
83536
83820
  confirm: !options.nonInteractive,
83537
83821
  writeOut
83538
83822
  });
83539
83823
  } catch (alignErr) {
83540
83824
  const msg = alignErr.message;
83541
83825
  writeOut(source_default.yellow(` ! post-mount-source UID re-align failed for ${name}: ${msg}
83542
- ` + ` Agent may fail to write supervisor logs on first boot.
83826
+ Agent may fail to write supervisor logs on first boot.
83543
83827
  `));
83544
83828
  }
83545
83829
  }
@@ -83582,7 +83866,7 @@ Applying switchroom config...
83582
83866
  ];
83583
83867
  if (!acceptable.includes(postMigrationInspect.kind)) {
83584
83868
  writeErr(source_default.red(`Post-migration verification failed: state is ${postMigrationInspect.kind}
83585
- ` + `Expected one of: ${acceptable.join(", ")}
83869
+ Expected one of: ${acceptable.join(", ")}
83586
83870
  ` + `This is a switchroom bug \u2014 please file an issue with the apply log.
83587
83871
  `));
83588
83872
  process.exit(5);
@@ -83597,11 +83881,11 @@ Applying switchroom config...
83597
83881
  writeErr(source_default.red(`Vault directory ${vaultDir} contains unexpected files:
83598
83882
  ` + unknown.map((n) => ` - ${n}
83599
83883
  `).join("") + `Refusing to bind-mount: a docker bind-mount source is the
83600
- ` + `entire directory, so unexpected files would be visible inside
83601
- ` + `the broker container. Move them out, then re-run apply.
83602
- ` + `Known artifacts: vault.enc, vault.enc.bak, vault.enc.tmp,
83603
- ` + `vault.enc.lock (PID-file flock from saveVault), and
83604
- ` + `.vault.enc.<pid>.<ms>.tmp (atomicWriteFileSync sibling-tmp).
83884
+ entire directory, so unexpected files would be visible inside
83885
+ the broker container. Move them out, then re-run apply.
83886
+ Known artifacts: vault.enc, vault.enc.bak, vault.enc.tmp,
83887
+ vault.enc.lock (PID-file flock from saveVault), and
83888
+ .vault.enc.<pid>.<ms>.tmp (atomicWriteFileSync sibling-tmp).
83605
83889
  `));
83606
83890
  process.exit(6);
83607
83891
  }
@@ -83620,8 +83904,8 @@ Applying switchroom config...
83620
83904
  Wrote `) + displayComposePath + source_default.gray(` (${composeBytes} bytes)
83621
83905
  `));
83622
83906
  writeOut(`Bring the fleet up with:
83623
- ` + ` docker compose -p ${COMPOSE_PROJECT2} -f ${displayComposePath} pull && \\
83624
- ` + ` docker compose -p ${COMPOSE_PROJECT2} -f ${displayComposePath} up -d --remove-orphans
83907
+ docker compose -p ${COMPOSE_PROJECT2} -f ${displayComposePath} pull && \\
83908
+ docker compose -p ${COMPOSE_PROJECT2} -f ${displayComposePath} up -d --remove-orphans
83625
83909
  `);
83626
83910
  writeOut(source_default.gray(` (If pull returns 401, login to ghcr.io first: see docs/operators/install.md#ghcr-auth)
83627
83911
  `));
@@ -83680,7 +83964,7 @@ function copyExampleConfig2(name) {
83680
83964
  }
83681
83965
  const embedded = EMBEDDED_EXAMPLES[name];
83682
83966
  if (embedded !== undefined) {
83683
- writeFileSync37(dest, embedded, { encoding: "utf8" });
83967
+ writeFileSync38(dest, embedded, { encoding: "utf8" });
83684
83968
  console.log(source_default.green(`Copied ${name}.yaml -> switchroom.yaml`));
83685
83969
  return;
83686
83970
  }
@@ -83696,7 +83980,7 @@ function findUnwritableAgentDirs(config, opts) {
83696
83980
  const targets = opts.only ? [opts.only] : Object.keys(config.agents ?? {});
83697
83981
  const unwritable = [];
83698
83982
  for (const name of targets) {
83699
- const startSh = join75(agentsDir, name, "start.sh");
83983
+ const startSh = join76(agentsDir, name, "start.sh");
83700
83984
  if (!existsSync74(startSh))
83701
83985
  continue;
83702
83986
  try {
@@ -83743,7 +84027,8 @@ function reexecUnderSudo() {
83743
84027
  if (errCode === "ENOENT") {
83744
84028
  process.stderr.write(source_default.red(`
83745
84029
  ERROR: sudo not found on PATH. Re-run as root, or use
83746
- ` + " `switchroom apply --compose-only` to skip the per-agent\n" + ` scaffold refresh entirely (compose file still regenerates).
84030
+ \`switchroom apply --compose-only\` to skip the per-agent
84031
+ scaffold refresh entirely (compose file still regenerates).
83747
84032
  `));
83748
84033
  process.exit(1);
83749
84034
  }
@@ -83756,7 +84041,7 @@ ERROR: failed to spawn sudo: ${result.error.message}
83756
84041
  process.exit(result.status ?? 1);
83757
84042
  }
83758
84043
  function registerApplyCommand(program3) {
83759
- program3.command("apply").description("Apply switchroom.yaml: scaffold every agent and (re)generate the compose file. Run `docker compose -f <path> up -d` afterwards to bring the fleet up.").option("--build-local [context]", "Dev-only: emit `build:` blocks instead of GHCR `image:` refs so `docker compose up --build` rebuilds from in-tree Dockerfiles. Optional context path (defaults to cwd).").option("-o, --out <path>", `Override compose output path (default: ${DEFAULT_COMPOSE_PATH2}).`).option("--example <name>", "Copy an example config into cwd before applying (e.g., 'switchroom' or 'minimal').").option("--non-interactive", "Skip prompts (e.g. sudo-chown explainer for UID alignment). Use in CI / scripts.").option("--allow-unaligned", "Treat UID-alignment chown failures as warnings instead of hard errors. Unsafe: an unaligned state dir will break the agent on first write. Use only if you know you'll fix ownership out-of-band.").option("--only <agent>", "Restrict scaffold + UID-alignment to a single agent (compose still covers the full fleet). Use during a v0.6 \u2192 v0.7 cutover to migrate agents one at a time without breaking the systemd-managed siblings.").option("--compose-only", "Skip the per-agent scaffold loop entirely; only (re)generate the compose file. Use in CI / scripts that can't chown into per-agent state dirs (mode 0700, owned by per-agent UIDs in v0.7+ docker mode). The full apply still runs preflight + emits compose; only the start.sh / .mcp.json / settings.json refresh is skipped.").option("--no-doctor", "Skip the post-apply doctor sweep that surfaces stale start.sh / unhealthy agents (#929). Default: doctor runs after a successful scaffold so the operator sees whether the v0.7+ post-Phase-4 supervisor block is now in place. `switchroom update` passes this internally to avoid running doctor twice (it has its own doctor step).").addOption(new Option("--channel <c>", "Override the resolved `release` block for this apply run: " + "follow the named channel pointer (dev|rc|latest). Mutually " + "exclusive with --pin.").choices(["dev", "rc", "latest"]).conflicts("pin")).addOption(new Option("--pin <p>", "Override the resolved `release` block for this apply run: " + "pin to a specific build (sha-<7-40 hex> or v<semver>). " + "Mutually exclusive with --channel.").conflicts("channel")).option("--print-sudo-cmd", "Print the sudo invocation that `apply` would re-exec itself with when escalation is needed, then exit. Operators who want to script the escalation themselves (CI, custom orchestration) can capture this. Note: tokens are space-separated and not shell-quoted; re-quote arguments if pasting into a shell.").addOption(new Option("--skip-self-elevate").default(false).hideHelp()).action(async (opts) => {
84044
+ program3.command("apply").description("Apply switchroom.yaml: scaffold every agent and (re)generate the compose file. Run `docker compose -f <path> up -d` afterwards to bring the fleet up.").option("--build-local [context]", "Dev-only: emit `build:` blocks instead of GHCR `image:` refs so `docker compose up --build` rebuilds from in-tree Dockerfiles. Optional context path (defaults to cwd).").option("-o, --out <path>", `Override compose output path (default: ${DEFAULT_COMPOSE_PATH2}).`).option("--example <name>", "Copy an example config into cwd before applying (e.g., 'switchroom' or 'minimal').").option("--non-interactive", "Skip prompts (e.g. sudo-chown explainer for UID alignment). Use in CI / scripts.").option("--allow-unaligned", "Treat UID-alignment chown failures as warnings instead of hard errors. Unsafe: an unaligned state dir will break the agent on first write. Use only if you know you'll fix ownership out-of-band.").option("--only <agent>", "Restrict scaffold + UID-alignment to a single agent (compose still covers the full fleet). Use during a v0.6 \u2192 v0.7 cutover to migrate agents one at a time without breaking the systemd-managed siblings.").option("--compose-only", "Skip the per-agent scaffold loop entirely; only (re)generate the compose file. Use in CI / scripts that can't chown into per-agent state dirs (mode 0700, owned by per-agent UIDs in v0.7+ docker mode). The full apply still runs preflight + emits compose; only the start.sh / .mcp.json / settings.json refresh is skipped.").option("--no-doctor", "Skip the post-apply doctor sweep that surfaces stale start.sh / unhealthy agents (#929). Default: doctor runs after a successful scaffold so the operator sees whether the v0.7+ post-Phase-4 supervisor block is now in place. `switchroom update` passes this internally to avoid running doctor twice (it has its own doctor step).").addOption(new Option("--channel <c>", "Override the resolved `release` block for this apply run: follow the named channel pointer (dev|rc|latest). Mutually exclusive with --pin.").choices(["dev", "rc", "latest"]).conflicts("pin")).addOption(new Option("--pin <p>", "Override the resolved `release` block for this apply run: pin to a specific build (sha-<7-40 hex> or v<semver>). Mutually exclusive with --channel.").conflicts("channel")).option("--print-sudo-cmd", "Print the sudo invocation that `apply` would re-exec itself with when escalation is needed, then exit. Operators who want to script the escalation themselves (CI, custom orchestration) can capture this. Note: tokens are space-separated and not shell-quoted; re-quote arguments if pasting into a shell.").addOption(new Option("--skip-self-elevate").default(false).hideHelp()).action(async (opts) => {
83760
84045
  try {
83761
84046
  if (opts.example) {
83762
84047
  copyExampleConfig2(opts.example);
@@ -83782,7 +84067,7 @@ function registerApplyCommand(program3) {
83782
84067
  const canPrompt = !opts.nonInteractive && process.stdin.isTTY === true;
83783
84068
  const proceed = canPrompt ? await confirmYesNo(`Re-exec under sudo to refresh them? [Y/n] `) : true;
83784
84069
  if (!proceed) {
83785
- process.stderr.write(source_default.gray("Skipping. Re-run with --compose-only to regenerate compose " + `without touching per-agent files.
84070
+ process.stderr.write(source_default.gray(`Skipping. Re-run with --compose-only to regenerate compose without touching per-agent files.
83786
84071
  `));
83787
84072
  process.exit(0);
83788
84073
  }
@@ -83876,7 +84161,7 @@ function runRedactStdin() {
83876
84161
 
83877
84162
  // src/cli/status-ask.ts
83878
84163
  import { readFileSync as readFileSync64, existsSync as existsSync75, readdirSync as readdirSync27 } from "node:fs";
83879
- import { join as join76 } from "node:path";
84164
+ import { join as join77 } from "node:path";
83880
84165
  import { homedir as homedir45 } from "node:os";
83881
84166
 
83882
84167
  // src/status-ask/report.ts
@@ -84212,7 +84497,7 @@ function resolveSources(explicitPath) {
84212
84497
  const config = loadConfig();
84213
84498
  agentsDir = resolveAgentsDir(config);
84214
84499
  } catch {
84215
- agentsDir = join76(homedir45(), ".switchroom", "agents");
84500
+ agentsDir = join77(homedir45(), ".switchroom", "agents");
84216
84501
  }
84217
84502
  if (!existsSync75(agentsDir))
84218
84503
  return [];
@@ -84224,7 +84509,7 @@ function resolveSources(explicitPath) {
84224
84509
  return [];
84225
84510
  }
84226
84511
  for (const name of entries) {
84227
- const path8 = join76(agentsDir, name, "runtime-metrics.jsonl");
84512
+ const path8 = join77(agentsDir, name, "runtime-metrics.jsonl");
84228
84513
  if (existsSync75(path8)) {
84229
84514
  sources.push({ path: path8, agent: name });
84230
84515
  }
@@ -84253,7 +84538,7 @@ import {
84253
84538
  closeSync as closeSync13,
84254
84539
  existsSync as existsSync76,
84255
84540
  fsyncSync as fsyncSync6,
84256
- mkdirSync as mkdirSync43,
84541
+ mkdirSync as mkdirSync44,
84257
84542
  openSync as openSync13,
84258
84543
  readdirSync as readdirSync28,
84259
84544
  readFileSync as readFileSync65,
@@ -84262,34 +84547,34 @@ import {
84262
84547
  unlinkSync as unlinkSync14,
84263
84548
  writeSync as writeSync8
84264
84549
  } from "node:fs";
84265
- import { join as join77, resolve as resolve47 } from "node:path";
84550
+ import { join as join78, resolve as resolve47 } from "node:path";
84266
84551
  var STAGING_SUBDIR = ".staging";
84267
84552
  function overlayPathsFor(agent, opts = {}) {
84268
84553
  const base = opts.root ? resolve47(opts.root, agent) : resolve47(resolveDualPath(`~/.switchroom/agents/${agent}`));
84269
- const scheduleDir = join77(base, "schedule.d");
84270
- const scheduleStagingDir = join77(scheduleDir, STAGING_SUBDIR);
84271
- const skillsDir = join77(base, "skills.d");
84272
- const skillsStagingDir = join77(skillsDir, STAGING_SUBDIR);
84554
+ const scheduleDir = join78(base, "schedule.d");
84555
+ const scheduleStagingDir = join78(scheduleDir, STAGING_SUBDIR);
84556
+ const skillsDir = join78(base, "skills.d");
84557
+ const skillsStagingDir = join78(skillsDir, STAGING_SUBDIR);
84273
84558
  return {
84274
84559
  agentRoot: base,
84275
84560
  scheduleDir,
84276
84561
  scheduleStagingDir,
84277
84562
  skillsDir,
84278
84563
  skillsStagingDir,
84279
- lockPath: join77(base, ".lock"),
84564
+ lockPath: join78(base, ".lock"),
84280
84565
  stagingDir: scheduleStagingDir
84281
84566
  };
84282
84567
  }
84283
84568
  function ensureDirs(paths) {
84284
- mkdirSync43(paths.scheduleDir, { recursive: true });
84285
- mkdirSync43(paths.scheduleStagingDir, { recursive: true });
84569
+ mkdirSync44(paths.scheduleDir, { recursive: true });
84570
+ mkdirSync44(paths.scheduleStagingDir, { recursive: true });
84286
84571
  }
84287
84572
  function ensureSkillsDirs(paths) {
84288
- mkdirSync43(paths.skillsDir, { recursive: true });
84289
- mkdirSync43(paths.skillsStagingDir, { recursive: true });
84573
+ mkdirSync44(paths.skillsDir, { recursive: true });
84574
+ mkdirSync44(paths.skillsStagingDir, { recursive: true });
84290
84575
  }
84291
84576
  function withAgentLock(paths, fn) {
84292
- mkdirSync43(paths.agentRoot, { recursive: true });
84577
+ mkdirSync44(paths.agentRoot, { recursive: true });
84293
84578
  const start = Date.now();
84294
84579
  const TIMEOUT_MS = 5000;
84295
84580
  let fd = null;
@@ -84330,8 +84615,8 @@ function writeOverlayEntry(agent, slug, yamlText, opts = {}) {
84330
84615
  const paths = overlayPathsFor(agent, opts);
84331
84616
  return withAgentLock(paths, () => {
84332
84617
  ensureDirs(paths);
84333
- const stagingPath = join77(paths.scheduleStagingDir, `${slug}.yaml`);
84334
- const finalPath = join77(paths.scheduleDir, `${slug}.yaml`);
84618
+ const stagingPath = join78(paths.scheduleStagingDir, `${slug}.yaml`);
84619
+ const finalPath = join78(paths.scheduleDir, `${slug}.yaml`);
84335
84620
  const fd = openSync13(stagingPath, "w", 384);
84336
84621
  try {
84337
84622
  writeSync8(fd, yamlText);
@@ -84347,8 +84632,8 @@ function writeSkillsOverlayEntry(agent, slug, yamlText, opts = {}) {
84347
84632
  const paths = overlayPathsFor(agent, opts);
84348
84633
  return withAgentLock(paths, () => {
84349
84634
  ensureSkillsDirs(paths);
84350
- const stagingPath = join77(paths.skillsStagingDir, `${slug}.yaml`);
84351
- const finalPath = join77(paths.skillsDir, `${slug}.yaml`);
84635
+ const stagingPath = join78(paths.skillsStagingDir, `${slug}.yaml`);
84636
+ const finalPath = join78(paths.skillsDir, `${slug}.yaml`);
84352
84637
  const fd = openSync13(stagingPath, "w", 384);
84353
84638
  try {
84354
84639
  writeSync8(fd, yamlText);
@@ -84363,7 +84648,7 @@ function writeSkillsOverlayEntry(agent, slug, yamlText, opts = {}) {
84363
84648
  function deleteSkillsOverlayEntry(agent, slug, opts = {}) {
84364
84649
  const paths = overlayPathsFor(agent, opts);
84365
84650
  return withAgentLock(paths, () => {
84366
- const finalPath = join77(paths.skillsDir, `${slug}.yaml`);
84651
+ const finalPath = join78(paths.skillsDir, `${slug}.yaml`);
84367
84652
  if (!existsSync76(finalPath))
84368
84653
  return false;
84369
84654
  unlinkSync14(finalPath);
@@ -84378,7 +84663,7 @@ function listSkillsOverlayEntries(agent, opts = {}) {
84378
84663
  for (const name of readdirSync28(paths.skillsDir)) {
84379
84664
  if (!/\.ya?ml$/i.test(name))
84380
84665
  continue;
84381
- const full = join77(paths.skillsDir, name);
84666
+ const full = join78(paths.skillsDir, name);
84382
84667
  try {
84383
84668
  const raw = readFileSync65(full, "utf-8");
84384
84669
  const slug = name.replace(/\.ya?ml$/i, "");
@@ -84390,7 +84675,7 @@ function listSkillsOverlayEntries(agent, opts = {}) {
84390
84675
  function deleteOverlayEntry(agent, slug, opts = {}) {
84391
84676
  const paths = overlayPathsFor(agent, opts);
84392
84677
  return withAgentLock(paths, () => {
84393
- const finalPath = join77(paths.scheduleDir, `${slug}.yaml`);
84678
+ const finalPath = join78(paths.scheduleDir, `${slug}.yaml`);
84394
84679
  if (!existsSync76(finalPath))
84395
84680
  return false;
84396
84681
  unlinkSync14(finalPath);
@@ -84405,7 +84690,7 @@ function listOverlayEntries(agent, opts = {}) {
84405
84690
  for (const name of readdirSync28(paths.scheduleDir)) {
84406
84691
  if (!/\.ya?ml$/i.test(name))
84407
84692
  continue;
84408
- const full = join77(paths.scheduleDir, name);
84693
+ const full = join78(paths.scheduleDir, name);
84409
84694
  try {
84410
84695
  const raw = readFileSync65(full, "utf-8");
84411
84696
  const slug = name.replace(/\.ya?ml$/i, "");
@@ -84552,25 +84837,25 @@ import {
84552
84837
  closeSync as closeSync14,
84553
84838
  existsSync as existsSync77,
84554
84839
  fsyncSync as fsyncSync7,
84555
- mkdirSync as mkdirSync44,
84840
+ mkdirSync as mkdirSync45,
84556
84841
  openSync as openSync14,
84557
84842
  readdirSync as readdirSync29,
84558
84843
  readFileSync as readFileSync66,
84559
84844
  renameSync as renameSync16,
84560
84845
  unlinkSync as unlinkSync15,
84561
- writeFileSync as writeFileSync38,
84846
+ writeFileSync as writeFileSync39,
84562
84847
  writeSync as writeSync9
84563
84848
  } from "node:fs";
84564
- import { join as join78 } from "node:path";
84849
+ import { join as join79 } from "node:path";
84565
84850
  import { randomBytes as randomBytes14 } from "node:crypto";
84566
84851
  var STAGE_ID_PREFIX = "cap_";
84567
84852
  function pendingDir(agent, opts = {}) {
84568
84853
  const paths = overlayPathsFor(agent, opts);
84569
- return join78(paths.scheduleDir, ".pending");
84854
+ return join79(paths.scheduleDir, ".pending");
84570
84855
  }
84571
84856
  function ensurePendingDir(agent, opts = {}) {
84572
84857
  const dir = pendingDir(agent, opts);
84573
- mkdirSync44(dir, { recursive: true });
84858
+ mkdirSync45(dir, { recursive: true });
84574
84859
  return dir;
84575
84860
  }
84576
84861
  function newStageId() {
@@ -84579,8 +84864,8 @@ function newStageId() {
84579
84864
  function stagePendingScheduleEntry(opts) {
84580
84865
  const dir = ensurePendingDir(opts.agent, { root: opts.root });
84581
84866
  const stageId = opts.stageId ?? newStageId();
84582
- const yamlPath = join78(dir, `${stageId}.yaml`);
84583
- const metaPath = join78(dir, `${stageId}.meta.json`);
84867
+ const yamlPath = join79(dir, `${stageId}.yaml`);
84868
+ const metaPath = join79(dir, `${stageId}.meta.json`);
84584
84869
  const meta = {
84585
84870
  v: 1,
84586
84871
  stage_id: stageId,
@@ -84601,7 +84886,7 @@ function stagePendingScheduleEntry(opts) {
84601
84886
  }
84602
84887
  renameSync16(yamlTmp, yamlPath);
84603
84888
  }
84604
- writeFileSync38(metaPath, JSON.stringify(meta, null, 2) + `
84889
+ writeFileSync39(metaPath, JSON.stringify(meta, null, 2) + `
84605
84890
  `, { mode: 384 });
84606
84891
  return { stageId, yamlPath, metaPath };
84607
84892
  }
@@ -84614,8 +84899,8 @@ function listPendingScheduleEntries(agent, opts = {}) {
84614
84899
  if (!name.endsWith(".meta.json"))
84615
84900
  continue;
84616
84901
  const stageId = name.slice(0, -".meta.json".length);
84617
- const metaPath = join78(dir, name);
84618
- const yamlPath = join78(dir, `${stageId}.yaml`);
84902
+ const metaPath = join79(dir, name);
84903
+ const yamlPath = join79(dir, `${stageId}.yaml`);
84619
84904
  if (!existsSync77(yamlPath))
84620
84905
  continue;
84621
84906
  try {
@@ -84634,7 +84919,7 @@ function commitPendingScheduleEntry(opts) {
84634
84919
  return { committed: false, reason: "not_found" };
84635
84920
  const slug = match.meta.entry.name ?? match.stageId;
84636
84921
  const paths = overlayPathsFor(opts.agent, { root: opts.root });
84637
- const finalPath = join78(paths.scheduleDir, `${slug}.yaml`);
84922
+ const finalPath = join79(paths.scheduleDir, `${slug}.yaml`);
84638
84923
  if (existsSync77(finalPath)) {
84639
84924
  return { committed: false, reason: "slug_collision" };
84640
84925
  }
@@ -85267,7 +85552,7 @@ var import_yaml21 = __toESM(require_dist(), 1);
85267
85552
  import { existsSync as existsSync79 } from "node:fs";
85268
85553
  init_reconcile_default_skills();
85269
85554
  var import_yaml22 = __toESM(require_dist(), 1);
85270
- import { join as join79 } from "node:path";
85555
+ import { join as join80 } from "node:path";
85271
85556
  var MAX_SKILLS_PER_AGENT = 20;
85272
85557
  var V1_ALLOWED_SOURCE_PREFIX = "bundled:";
85273
85558
  function exitCodeFor2(code) {
@@ -85342,7 +85627,7 @@ function skillInstall(opts) {
85342
85627
  return err("E_SKILL_QUOTA_EXCEEDED", `agent ${agent} already has ${used} overlay-installed skills (cap ${MAX_SKILLS_PER_AGENT})`);
85343
85628
  }
85344
85629
  const poolDir = opts.bundledSkillsPoolDir ?? getBundledSkillsPoolDir();
85345
- const skillPath = join79(poolDir, skillName);
85630
+ const skillPath = join80(poolDir, skillName);
85346
85631
  if (!existsSync79(skillPath)) {
85347
85632
  return err("E_SKILL_NOT_FOUND", `bundled skill not found at ${skillPath}. The operator needs to ` + `place the skill at this path before the agent can opt in.`);
85348
85633
  }
@@ -85509,7 +85794,7 @@ import {
85509
85794
  closeSync as closeSync15,
85510
85795
  existsSync as existsSync80,
85511
85796
  lstatSync as lstatSync9,
85512
- mkdirSync as mkdirSync45,
85797
+ mkdirSync as mkdirSync46,
85513
85798
  mkdtempSync as mkdtempSync5,
85514
85799
  openSync as openSync15,
85515
85800
  readFileSync as readFileSync68,
@@ -85518,10 +85803,10 @@ import {
85518
85803
  renameSync as renameSync17,
85519
85804
  rmSync as rmSync16,
85520
85805
  statSync as statSync32,
85521
- writeFileSync as writeFileSync39
85806
+ writeFileSync as writeFileSync40
85522
85807
  } from "node:fs";
85523
85808
  import { tmpdir as tmpdir5, homedir as homedir46 } from "node:os";
85524
- import { dirname as dirname24, join as join80, relative as relative2, resolve as resolve48 } from "node:path";
85809
+ import { dirname as dirname24, join as join81, relative as relative2, resolve as resolve48 } from "node:path";
85525
85810
  import { spawnSync as spawnSync12 } from "node:child_process";
85526
85811
 
85527
85812
  // src/cli/skill-common.ts
@@ -85715,7 +86000,7 @@ function scanForClaudeP2(content) {
85715
86000
  function resolveSkillsPoolDir2(override) {
85716
86001
  const raw = override ?? "~/.switchroom/skills";
85717
86002
  if (raw.startsWith("~/")) {
85718
- return join80(homedir46(), raw.slice(2));
86003
+ return join81(homedir46(), raw.slice(2));
85719
86004
  }
85720
86005
  if (raw === "~")
85721
86006
  return homedir46();
@@ -85754,7 +86039,7 @@ function loadFromDir(dir) {
85754
86039
  const walk2 = (sub) => {
85755
86040
  const entries = readdirSync30(sub, { withFileTypes: true });
85756
86041
  for (const ent of entries) {
85757
- const full = join80(sub, ent.name);
86042
+ const full = join81(sub, ent.name);
85758
86043
  const rel = relative2(abs, full);
85759
86044
  if (ent.isSymbolicLink()) {
85760
86045
  fail3(`refusing to read symlink inside --from dir: ${rel}`);
@@ -85789,7 +86074,7 @@ function loadFromTarball(tarPath) {
85789
86074
  fail3(`tarball contains disallowed path: ${JSON.stringify(entry)} \u2014 ` + `refusing to extract before any file is written`);
85790
86075
  }
85791
86076
  }
85792
- const staging = mkdtempSync5(join80(tmpdir5(), "skill-apply-extract-"));
86077
+ const staging = mkdtempSync5(join81(tmpdir5(), "skill-apply-extract-"));
85793
86078
  try {
85794
86079
  const flags = isGz ? ["-xzf"] : ["-xf"];
85795
86080
  const r = spawnSync12("tar", [
@@ -85875,10 +86160,10 @@ function validatePayload(name, files) {
85875
86160
  errors2.push(`${path8} fails \`bash -n\` syntax check: ${(r.stderr ?? "").trim()}`);
85876
86161
  }
85877
86162
  } else if (PY_SCRIPT_RE2.test(path8)) {
85878
- const tmp = mkdtempSync5(join80(tmpdir5(), "skill-apply-py-"));
85879
- const tmpPy = join80(tmp, "check.py");
86163
+ const tmp = mkdtempSync5(join81(tmpdir5(), "skill-apply-py-"));
86164
+ const tmpPy = join81(tmp, "check.py");
85880
86165
  try {
85881
- writeFileSync39(tmpPy, content);
86166
+ writeFileSync40(tmpPy, content);
85882
86167
  const r = spawnSync12("python3", ["-m", "py_compile", tmpPy], {
85883
86168
  encoding: "utf-8"
85884
86169
  });
@@ -85899,7 +86184,7 @@ function diffSummary(currentDir, files) {
85899
86184
  if (existsSync80(currentDir)) {
85900
86185
  const walk2 = (sub) => {
85901
86186
  for (const ent of readdirSync30(sub, { withFileTypes: true })) {
85902
- const full = join80(sub, ent.name);
86187
+ const full = join81(sub, ent.name);
85903
86188
  const rel = relative2(currentDir, full);
85904
86189
  if (ent.isDirectory()) {
85905
86190
  walk2(full);
@@ -85933,9 +86218,9 @@ function diffSummary(currentDir, files) {
85933
86218
  }
85934
86219
  function writePayload(poolDir, name, files) {
85935
86220
  if (!existsSync80(poolDir)) {
85936
- mkdirSync45(poolDir, { recursive: true, mode: 493 });
86221
+ mkdirSync46(poolDir, { recursive: true, mode: 493 });
85937
86222
  }
85938
- const target = join80(poolDir, name);
86223
+ const target = join81(poolDir, name);
85939
86224
  let targetIsSymlink = false;
85940
86225
  try {
85941
86226
  const st = lstatSync9(target);
@@ -85946,15 +86231,15 @@ function writePayload(poolDir, name, files) {
85946
86231
  if (targetIsSymlink) {
85947
86232
  fail3(`refusing to overwrite symlink at ${target}; investigate manually`);
85948
86233
  }
85949
- const staging = mkdtempSync5(join80(poolDir, `.skill-apply-stage-${name}-`));
86234
+ const staging = mkdtempSync5(join81(poolDir, `.skill-apply-stage-${name}-`));
85950
86235
  let oldRename = null;
85951
86236
  try {
85952
86237
  for (const [path8, content] of Object.entries(files)) {
85953
- const full = join80(staging, path8);
85954
- mkdirSync45(dirname24(full), { recursive: true, mode: 493 });
86238
+ const full = join81(staging, path8);
86239
+ mkdirSync46(dirname24(full), { recursive: true, mode: 493 });
85955
86240
  const fd = openSync15(full, "wx");
85956
86241
  try {
85957
- writeFileSync39(fd, content);
86242
+ writeFileSync40(fd, content);
85958
86243
  } finally {
85959
86244
  closeSync15(fd);
85960
86245
  }
@@ -86028,7 +86313,7 @@ function registerSkillCommand(program3) {
86028
86313
  }
86029
86314
  const config = loadConfig();
86030
86315
  const poolDir = resolveSkillsPoolDir2(config.switchroom?.skills_dir);
86031
- const currentDir = join80(poolDir, name);
86316
+ const currentDir = join81(poolDir, name);
86032
86317
  console.log(source_default.bold(`Skill: ${name}`) + source_default.gray(` (${Object.keys(files).length} files, ${sumBytes(files)} bytes)`));
86033
86318
  console.log(source_default.bold("Diff vs current pool content:"));
86034
86319
  console.log(diffSummary(currentDir, files));
@@ -86061,7 +86346,7 @@ import {
86061
86346
  closeSync as closeSync16,
86062
86347
  existsSync as existsSync81,
86063
86348
  lstatSync as lstatSync10,
86064
- mkdirSync as mkdirSync46,
86349
+ mkdirSync as mkdirSync47,
86065
86350
  mkdtempSync as mkdtempSync6,
86066
86351
  openSync as openSync16,
86067
86352
  readFileSync as readFileSync69,
@@ -86070,9 +86355,9 @@ import {
86070
86355
  rmSync as rmSync17,
86071
86356
  statSync as statSync33,
86072
86357
  utimesSync,
86073
- writeFileSync as writeFileSync40
86358
+ writeFileSync as writeFileSync41
86074
86359
  } from "node:fs";
86075
- import { dirname as dirname25, join as join81, relative as relative3, resolve as resolve49 } from "node:path";
86360
+ import { dirname as dirname25, join as join82, relative as relative3, resolve as resolve49 } from "node:path";
86076
86361
  import { homedir as homedir47, tmpdir as tmpdir6 } from "node:os";
86077
86362
  import { spawnSync as spawnSync13 } from "node:child_process";
86078
86363
  init_helpers();
@@ -86083,10 +86368,10 @@ var TRASH_TTL_MS = 24 * 60 * 60 * 1000;
86083
86368
  var PERSONAL_SKILLS_SUBPATH = "personal-skills";
86084
86369
  function resolveConfigSkillsDir(agent) {
86085
86370
  const override = process.env.SWITCHROOM_CONFIG_DIR;
86086
- const candidate = override ? resolve49(override) : join81(homedir47(), ".switchroom-config");
86371
+ const candidate = override ? resolve49(override) : join82(homedir47(), ".switchroom-config");
86087
86372
  if (!existsSync81(candidate))
86088
86373
  return null;
86089
- return join81(candidate, "agents", agent, PERSONAL_SKILLS_SUBPATH);
86374
+ return join82(candidate, "agents", agent, PERSONAL_SKILLS_SUBPATH);
86090
86375
  }
86091
86376
  var MIRROR_PRIOR_TTL_MS = 24 * 60 * 60 * 1000;
86092
86377
  function sweepMirrorPriors(configSkillsRoot) {
@@ -86104,7 +86389,7 @@ function sweepMirrorPriors(configSkillsRoot) {
86104
86389
  if (now - ts < MIRROR_PRIOR_TTL_MS)
86105
86390
  continue;
86106
86391
  try {
86107
- rmSync17(join81(configSkillsRoot, ent), { recursive: true, force: true });
86392
+ rmSync17(join82(configSkillsRoot, ent), { recursive: true, force: true });
86108
86393
  } catch {}
86109
86394
  }
86110
86395
  } catch {}
@@ -86113,7 +86398,7 @@ function mirrorToConfigRepo(agent, name, liveSkillDir) {
86113
86398
  const configSkillsRoot = resolveConfigSkillsDir(agent);
86114
86399
  if (!configSkillsRoot)
86115
86400
  return;
86116
- const dest = join81(configSkillsRoot, name);
86401
+ const dest = join82(configSkillsRoot, name);
86117
86402
  try {
86118
86403
  if (liveSkillDir !== null) {
86119
86404
  try {
@@ -86128,31 +86413,31 @@ function mirrorToConfigRepo(agent, name, liveSkillDir) {
86128
86413
  if (liveSkillDir === null) {
86129
86414
  sweepMirrorPriors(configSkillsRoot);
86130
86415
  if (existsSync81(dest)) {
86131
- const trash = join81(configSkillsRoot, `.${name}-trash-${Date.now()}`);
86416
+ const trash = join82(configSkillsRoot, `.${name}-trash-${Date.now()}`);
86132
86417
  renameSync18(dest, trash);
86133
86418
  }
86134
86419
  return;
86135
86420
  }
86136
- mkdirSync46(configSkillsRoot, { recursive: true, mode: 493 });
86421
+ mkdirSync47(configSkillsRoot, { recursive: true, mode: 493 });
86137
86422
  sweepMirrorPriors(configSkillsRoot);
86138
- const staging = mkdtempSync6(join81(configSkillsRoot, `.${name}-staging-`));
86423
+ const staging = mkdtempSync6(join82(configSkillsRoot, `.${name}-staging-`));
86139
86424
  const walk2 = (src, dst) => {
86140
- mkdirSync46(dst, { recursive: true, mode: 493 });
86425
+ mkdirSync47(dst, { recursive: true, mode: 493 });
86141
86426
  for (const ent of readdirSync31(src, { withFileTypes: true })) {
86142
- const s = join81(src, ent.name);
86143
- const d = join81(dst, ent.name);
86427
+ const s = join82(src, ent.name);
86428
+ const d = join82(dst, ent.name);
86144
86429
  if (ent.isSymbolicLink())
86145
86430
  continue;
86146
86431
  if (ent.isDirectory())
86147
86432
  walk2(s, d);
86148
86433
  else if (ent.isFile()) {
86149
- writeFileSync40(d, readFileSync69(s));
86434
+ writeFileSync41(d, readFileSync69(s));
86150
86435
  }
86151
86436
  }
86152
86437
  };
86153
86438
  walk2(liveSkillDir, staging);
86154
86439
  if (existsSync81(dest)) {
86155
- const prior = join81(configSkillsRoot, `.${name}-prior-${Date.now()}`);
86440
+ const prior = join82(configSkillsRoot, `.${name}-prior-${Date.now()}`);
86156
86441
  renameSync18(dest, prior);
86157
86442
  }
86158
86443
  renameSync18(staging, dest);
@@ -86179,13 +86464,13 @@ function resolveAgent(opts) {
86179
86464
  function resolveAgentsRoot(opts) {
86180
86465
  if (opts.root)
86181
86466
  return resolve49(opts.root);
86182
- return join81(homedir47(), ".switchroom", "agents");
86467
+ return join82(homedir47(), ".switchroom", "agents");
86183
86468
  }
86184
86469
  function personalSkillDir(agentsRoot, agent, name) {
86185
- return join81(agentsRoot, agent, ".claude", "skills", PERSONAL_PREFIX + name);
86470
+ return join82(agentsRoot, agent, ".claude", "skills", PERSONAL_PREFIX + name);
86186
86471
  }
86187
86472
  function trashDir(agentsRoot, agent) {
86188
- return join81(agentsRoot, agent, ".claude", TRASH_DIRNAME);
86473
+ return join82(agentsRoot, agent, ".claude", TRASH_DIRNAME);
86189
86474
  }
86190
86475
  function readStdinSync2() {
86191
86476
  const chunks = [];
@@ -86215,7 +86500,7 @@ function loadFromDir2(dir) {
86215
86500
  const files = {};
86216
86501
  const walk2 = (sub) => {
86217
86502
  for (const ent of readdirSync31(sub, { withFileTypes: true })) {
86218
- const full = join81(sub, ent.name);
86503
+ const full = join82(sub, ent.name);
86219
86504
  if (ent.isSymbolicLink()) {
86220
86505
  fail4(`refusing to read symlink in --from dir: ${relative3(abs, full)}`);
86221
86506
  }
@@ -86268,10 +86553,10 @@ function behavioralValidate(files) {
86268
86553
  errors2.push(`${path8} fails \`bash -n\`: ${(r.stderr ?? "").trim()}`);
86269
86554
  }
86270
86555
  } else if (PY_SCRIPT_RE.test(path8)) {
86271
- const tmp = mkdtempSync6(join81(tmpdir6(), "skill-personal-py-"));
86272
- const tmpPy = join81(tmp, "check.py");
86556
+ const tmp = mkdtempSync6(join82(tmpdir6(), "skill-personal-py-"));
86557
+ const tmpPy = join82(tmp, "check.py");
86273
86558
  try {
86274
- writeFileSync40(tmpPy, content);
86559
+ writeFileSync41(tmpPy, content);
86275
86560
  const r = spawnSync13("python3", ["-m", "py_compile", tmpPy], {
86276
86561
  encoding: "utf-8"
86277
86562
  });
@@ -86293,7 +86578,7 @@ function sweepTrash(agentsRoot, agent) {
86293
86578
  for (const ent of readdirSync31(trash, { withFileTypes: true })) {
86294
86579
  if (!ent.isDirectory())
86295
86580
  continue;
86296
- const entPath = join81(trash, ent.name);
86581
+ const entPath = join82(trash, ent.name);
86297
86582
  try {
86298
86583
  const st = statSync33(entPath);
86299
86584
  if (now - st.mtimeMs > TRASH_TTL_MS) {
@@ -86313,16 +86598,16 @@ function writePersonalSkill(targetDir, files) {
86313
86598
  if (targetIsSymlink) {
86314
86599
  fail4(`refusing to overwrite symlink at ${targetDir}; investigate manually`);
86315
86600
  }
86316
- mkdirSync46(dirname25(targetDir), { recursive: true, mode: 493 });
86317
- const staging = mkdtempSync6(join81(dirname25(targetDir), `.skill-personal-stage-`));
86601
+ mkdirSync47(dirname25(targetDir), { recursive: true, mode: 493 });
86602
+ const staging = mkdtempSync6(join82(dirname25(targetDir), `.skill-personal-stage-`));
86318
86603
  let oldRename = null;
86319
86604
  try {
86320
86605
  for (const [path8, content] of Object.entries(files)) {
86321
- const full = join81(staging, path8);
86322
- mkdirSync46(dirname25(full), { recursive: true, mode: 493 });
86606
+ const full = join82(staging, path8);
86607
+ mkdirSync47(dirname25(full), { recursive: true, mode: 493 });
86323
86608
  const fd = openSync16(full, "wx");
86324
86609
  try {
86325
- writeFileSync40(fd, content);
86610
+ writeFileSync41(fd, content);
86326
86611
  } finally {
86327
86612
  closeSync16(fd);
86328
86613
  }
@@ -86451,10 +86736,10 @@ function editPersonalAction(name, opts) {
86451
86736
  }
86452
86737
  var CLONE_SOURCE_RE = /^(shared|bundled):([a-z0-9][a-z0-9_-]{0,62})$/;
86453
86738
  function defaultSharedRoot() {
86454
- return join81(homedir47(), ".switchroom", "skills");
86739
+ return join82(homedir47(), ".switchroom", "skills");
86455
86740
  }
86456
86741
  function defaultBundledRoot() {
86457
- return join81(homedir47(), ".switchroom", "skills", "_bundled");
86742
+ return join82(homedir47(), ".switchroom", "skills", "_bundled");
86458
86743
  }
86459
86744
  function resolveCloneSource(source, opts) {
86460
86745
  const m = CLONE_SOURCE_RE.exec(source);
@@ -86464,7 +86749,7 @@ function resolveCloneSource(source, opts) {
86464
86749
  const tier = m[1];
86465
86750
  const slug = m[2];
86466
86751
  const root = tier === "bundled" ? opts.bundledRoot ?? defaultBundledRoot() : opts.sharedRoot ?? defaultSharedRoot();
86467
- const dir = join81(root, slug);
86752
+ const dir = join82(root, slug);
86468
86753
  if (!existsSync81(dir)) {
86469
86754
  fail4(`clone source ${JSON.stringify(source)} not found at ${dir}; ` + `check \`switchroom skill search --tier ${tier}\``, 1);
86470
86755
  }
@@ -86480,7 +86765,7 @@ function readSourceFiles(dir) {
86480
86765
  const skipped = [];
86481
86766
  const walk2 = (sub) => {
86482
86767
  for (const ent of readdirSync31(sub, { withFileTypes: true })) {
86483
- const full = join81(sub, ent.name);
86768
+ const full = join82(sub, ent.name);
86484
86769
  if (ent.isSymbolicLink()) {
86485
86770
  continue;
86486
86771
  }
@@ -86589,9 +86874,9 @@ function removePersonalAction(name, opts) {
86589
86874
  throw err2;
86590
86875
  }
86591
86876
  const trashRoot = trashDir(agentsRoot, agent);
86592
- mkdirSync46(trashRoot, { recursive: true, mode: 493 });
86877
+ mkdirSync47(trashRoot, { recursive: true, mode: 493 });
86593
86878
  const ts = Date.now();
86594
- const trashTarget = join81(trashRoot, `${name}-${ts}`);
86879
+ const trashTarget = join82(trashRoot, `${name}-${ts}`);
86595
86880
  renameSync18(target, trashTarget);
86596
86881
  const now = new Date(ts);
86597
86882
  utimesSync(trashTarget, now, now);
@@ -86610,7 +86895,7 @@ function listPersonalAction(opts) {
86610
86895
  const agent = resolveAgent(opts);
86611
86896
  const agentsRoot = resolveAgentsRoot(opts);
86612
86897
  sweepTrash(agentsRoot, agent);
86613
- const skillsDir = join81(agentsRoot, agent, ".claude", "skills");
86898
+ const skillsDir = join82(agentsRoot, agent, ".claude", "skills");
86614
86899
  const personal = [];
86615
86900
  if (existsSync81(skillsDir)) {
86616
86901
  for (const ent of readdirSync31(skillsDir, { withFileTypes: true })) {
@@ -86619,7 +86904,7 @@ function listPersonalAction(opts) {
86619
86904
  if (!ent.name.startsWith(PERSONAL_PREFIX))
86620
86905
  continue;
86621
86906
  const skillName = ent.name.slice(PERSONAL_PREFIX.length);
86622
- const skillPath = join81(skillsDir, ent.name);
86907
+ const skillPath = join82(skillsDir, ent.name);
86623
86908
  let fileCount = 0;
86624
86909
  let totalBytes = 0;
86625
86910
  const walk2 = (sub) => {
@@ -86627,10 +86912,10 @@ function listPersonalAction(opts) {
86627
86912
  if (e.isFile()) {
86628
86913
  fileCount += 1;
86629
86914
  try {
86630
- totalBytes += statSync33(join81(sub, e.name)).size;
86915
+ totalBytes += statSync33(join82(sub, e.name)).size;
86631
86916
  } catch {}
86632
86917
  } else if (e.isDirectory()) {
86633
- walk2(join81(sub, e.name));
86918
+ walk2(join82(sub, e.name));
86634
86919
  }
86635
86920
  }
86636
86921
  };
@@ -86671,7 +86956,7 @@ init_helpers();
86671
86956
  var import_yaml24 = __toESM(require_dist(), 1);
86672
86957
  import { existsSync as existsSync82, readdirSync as readdirSync32, readFileSync as readFileSync70, statSync as statSync34 } from "node:fs";
86673
86958
  import { homedir as homedir48 } from "node:os";
86674
- import { join as join82, resolve as resolve50 } from "node:path";
86959
+ import { join as join83, resolve as resolve50 } from "node:path";
86675
86960
  var PERSONAL_PREFIX2 = "personal-";
86676
86961
  var BUNDLED_SUBDIR = "_bundled";
86677
86962
  var AGENT_NAME_RE3 = /^[a-z][a-z0-9_-]{0,62}$/;
@@ -86685,7 +86970,7 @@ function defaultBundledRoot2() {
86685
86970
  return resolve50(homedir48(), ".switchroom/skills/_bundled");
86686
86971
  }
86687
86972
  function readSkillFrontmatter(skillDir) {
86688
- const mdPath = join82(skillDir, "SKILL.md");
86973
+ const mdPath = join83(skillDir, "SKILL.md");
86689
86974
  if (!existsSync82(mdPath))
86690
86975
  return null;
86691
86976
  let content;
@@ -86718,7 +87003,7 @@ function readSkillFrontmatter(skillDir) {
86718
87003
  return { fm: parsed };
86719
87004
  }
86720
87005
  function statSkillMd(skillDir) {
86721
- const mdPath = join82(skillDir, "SKILL.md");
87006
+ const mdPath = join83(skillDir, "SKILL.md");
86722
87007
  try {
86723
87008
  const st = statSync34(mdPath);
86724
87009
  return { size: st.size, mtime: st.mtime.toISOString() };
@@ -86729,7 +87014,7 @@ function statSkillMd(skillDir) {
86729
87014
  function listPersonalSkills(agent, agentsRoot = defaultAgentsRoot()) {
86730
87015
  if (!AGENT_NAME_RE3.test(agent))
86731
87016
  return [];
86732
- const skillsDir = join82(agentsRoot, agent, ".claude/skills");
87017
+ const skillsDir = join83(agentsRoot, agent, ".claude/skills");
86733
87018
  if (!existsSync82(skillsDir))
86734
87019
  return [];
86735
87020
  const out = [];
@@ -86742,7 +87027,7 @@ function listPersonalSkills(agent, agentsRoot = defaultAgentsRoot()) {
86742
87027
  for (const ent of entries) {
86743
87028
  if (!ent.startsWith(PERSONAL_PREFIX2))
86744
87029
  continue;
86745
- const dirPath = join82(skillsDir, ent);
87030
+ const dirPath = join83(skillsDir, ent);
86746
87031
  try {
86747
87032
  if (!statSync34(dirPath).isDirectory())
86748
87033
  continue;
@@ -86782,7 +87067,7 @@ function listSharedSkills(sharedRoot = defaultSharedRoot2()) {
86782
87067
  continue;
86783
87068
  if (ent.startsWith("."))
86784
87069
  continue;
86785
- const dirPath = join82(sharedRoot, ent);
87070
+ const dirPath = join83(sharedRoot, ent);
86786
87071
  try {
86787
87072
  if (!statSync34(dirPath).isDirectory())
86788
87073
  continue;
@@ -86818,7 +87103,7 @@ function listBundledSkills(bundledRoot = defaultBundledRoot2()) {
86818
87103
  for (const ent of entries) {
86819
87104
  if (ent.startsWith("."))
86820
87105
  continue;
86821
- const dirPath = join82(bundledRoot, ent);
87106
+ const dirPath = join83(bundledRoot, ent);
86822
87107
  try {
86823
87108
  if (!statSync34(dirPath).isDirectory())
86824
87109
  continue;
@@ -86962,9 +87247,9 @@ function registerHostdMcpCommand(program3) {
86962
87247
  // src/cli/hostd.ts
86963
87248
  init_source();
86964
87249
  init_helpers();
86965
- import { existsSync as existsSync84, mkdirSync as mkdirSync47, readdirSync as readdirSync33, readFileSync as readFileSync72, writeFileSync as writeFileSync41, statSync as statSync35, copyFileSync as copyFileSync12 } from "node:fs";
87250
+ import { existsSync as existsSync84, mkdirSync as mkdirSync48, readdirSync as readdirSync33, readFileSync as readFileSync72, writeFileSync as writeFileSync42, statSync as statSync35, copyFileSync as copyFileSync12 } from "node:fs";
86966
87251
  import { homedir as homedir49 } from "node:os";
86967
- import { join as join83 } from "node:path";
87252
+ import { join as join84 } from "node:path";
86968
87253
  import { spawnSync as spawnSync16 } from "node:child_process";
86969
87254
 
86970
87255
  // src/cli/deploy-version-guard.ts
@@ -87127,10 +87412,10 @@ function resolveHostdHostHome(env2 = process.env, home2 = homedir49()) {
87127
87412
  return resolved;
87128
87413
  }
87129
87414
  function hostdDir() {
87130
- return join83(homedir49(), ".switchroom", "hostd");
87415
+ return join84(homedir49(), ".switchroom", "hostd");
87131
87416
  }
87132
87417
  function hostdComposePath() {
87133
- return join83(hostdDir(), "docker-compose.yml");
87418
+ return join84(hostdDir(), "docker-compose.yml");
87134
87419
  }
87135
87420
  function backupExistingCompose() {
87136
87421
  const p = hostdComposePath();
@@ -87167,7 +87452,7 @@ async function doInstall(opts, program3) {
87167
87452
  }
87168
87453
  const dir = hostdDir();
87169
87454
  const composePath = hostdComposePath();
87170
- mkdirSync47(dir, { recursive: true });
87455
+ mkdirSync48(dir, { recursive: true });
87171
87456
  const imageTag = resolveHostdImageTag(opts.tag, cfg.release);
87172
87457
  const guard = checkDowngrade({
87173
87458
  container: "switchroom-hostd",
@@ -87192,7 +87477,7 @@ async function doInstall(opts, program3) {
87192
87477
  const bak = backupExistingCompose();
87193
87478
  if (bak)
87194
87479
  console.log(source_default.dim(` Backed up existing compose to ${bak}`));
87195
- writeFileSync41(composePath, yaml, "utf8");
87480
+ writeFileSync42(composePath, yaml, "utf8");
87196
87481
  console.log(source_default.green(` \u2713 Wrote ${composePath}`));
87197
87482
  const adminAgents = Object.entries(cfg.agents ?? {}).filter(([, a]) => a?.admin === true).map(([name]) => name);
87198
87483
  console.log(source_default.dim(` agents served (one socket each): ${allAgents.length === 0 ? "(none)" : allAgents.join(", ")}`));
@@ -87250,7 +87535,7 @@ function doStatus() {
87250
87535
  for (const name of readdirSync33(dir)) {
87251
87536
  if (name === "docker-compose.yml" || name.startsWith("docker-compose.yml."))
87252
87537
  continue;
87253
- const sockPath = join83(dir, name, "sock");
87538
+ const sockPath = join84(dir, name, "sock");
87254
87539
  if (existsSync84(sockPath)) {
87255
87540
  const st = statSync35(sockPath);
87256
87541
  if ((st.mode & 61440) === 49152) {
@@ -87341,9 +87626,9 @@ The log is created when hostd handles its first privileged-verb request.`));
87341
87626
  // src/cli/webd.ts
87342
87627
  init_source();
87343
87628
  init_helpers();
87344
- import { existsSync as existsSync85, mkdirSync as mkdirSync48, writeFileSync as writeFileSync42, copyFileSync as copyFileSync13 } from "node:fs";
87629
+ import { existsSync as existsSync85, mkdirSync as mkdirSync49, writeFileSync as writeFileSync43, copyFileSync as copyFileSync13 } from "node:fs";
87345
87630
  import { homedir as homedir50 } from "node:os";
87346
- import { join as join84 } from "node:path";
87631
+ import { join as join85 } from "node:path";
87347
87632
  import { spawnSync as spawnSync17 } from "node:child_process";
87348
87633
  function resolveWebImageTag(explicitTag, release) {
87349
87634
  if (explicitTag)
@@ -87428,10 +87713,10 @@ services:
87428
87713
  `;
87429
87714
  }
87430
87715
  function webdDir() {
87431
- return join84(homedir50(), ".switchroom", "web");
87716
+ return join85(homedir50(), ".switchroom", "web");
87432
87717
  }
87433
87718
  function webdComposePath() {
87434
- return join84(webdDir(), "docker-compose.yml");
87719
+ return join85(webdDir(), "docker-compose.yml");
87435
87720
  }
87436
87721
  function backupExistingCompose2() {
87437
87722
  const p = webdComposePath();
@@ -87460,7 +87745,7 @@ async function doInstall2(opts, program3) {
87460
87745
  }
87461
87746
  const dir = webdDir();
87462
87747
  const composePath = webdComposePath();
87463
- mkdirSync48(dir, { recursive: true });
87748
+ mkdirSync49(dir, { recursive: true });
87464
87749
  const cfg = getConfig(program3);
87465
87750
  const imageTag = resolveWebImageTag(opts.tag, cfg.release);
87466
87751
  const guard = checkDowngrade({
@@ -87486,7 +87771,7 @@ async function doInstall2(opts, program3) {
87486
87771
  const bak = backupExistingCompose2();
87487
87772
  if (bak)
87488
87773
  console.log(source_default.dim(` Backed up existing compose to ${bak}`));
87489
- writeFileSync42(composePath, yaml, "utf8");
87774
+ writeFileSync43(composePath, yaml, "utf8");
87490
87775
  console.log(source_default.green(` \u2713 Wrote ${composePath}`));
87491
87776
  console.log(source_default.dim(` running as uid ${operatorUid} (operator), network_mode: host`));
87492
87777
  console.log(source_default.dim(` Pulling ghcr.io/switchroom/switchroom-web:${imageTag}\u2026`));