switchroom 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/dist/agent-scheduler/index.js +218 -99
- package/dist/auth-broker/index.js +300 -99
- package/dist/cli/drive-write-pretool.mjs +45 -12
- package/dist/cli/switchroom.js +44972 -42457
- package/dist/cli/ui/index.html +1281 -0
- package/dist/host-control/main.js +3630 -311
- package/dist/vault/approvals/kernel-server.js +209 -100
- package/dist/vault/broker/server.js +220 -99
- package/examples/personal-google-workspace-mcp/README.md +8 -3
- package/examples/switchroom.yaml +91 -42
- package/package.json +2 -2
- package/profiles/_base/start.sh.hbs +76 -36
- package/profiles/default/CLAUDE.md.hbs +4 -2
- package/skills/file-bug/SKILL.md +6 -4
- package/skills/switchroom-cli/SKILL.md +20 -4
- package/skills/switchroom-install/SKILL.md +3 -3
- package/telegram-plugin/auth-snapshot-format.ts +4 -4
- package/telegram-plugin/auto-fallback-fleet.ts +4 -4
- package/telegram-plugin/card-format.ts +3 -3
- package/telegram-plugin/dist/bridge/bridge.js +112 -112
- package/telegram-plugin/dist/gateway/gateway.js +1029 -628
- package/telegram-plugin/dist/server.js +162 -161
- package/telegram-plugin/format.ts +71 -0
- package/telegram-plugin/gateway/approval-card.test.ts +18 -18
- package/telegram-plugin/gateway/approval-card.ts +1 -1
- package/telegram-plugin/gateway/auth-broker-client.ts +2 -0
- package/telegram-plugin/gateway/auth-command.ts +12 -2
- package/telegram-plugin/gateway/boot-card.ts +40 -3
- package/telegram-plugin/gateway/boot-probes.ts +71 -27
- package/telegram-plugin/gateway/diff-preview-card.test.ts +15 -15
- package/telegram-plugin/gateway/diff-preview-card.ts +1 -1
- package/telegram-plugin/gateway/drive-write-approval.test.ts +2 -2
- package/telegram-plugin/gateway/gateway.ts +244 -46
- package/telegram-plugin/gateway/hostd-dispatch.ts +10 -2
- package/telegram-plugin/gateway/update-announce.ts +167 -0
- package/telegram-plugin/quota-check.ts +0 -195
- package/telegram-plugin/retry-api-call.ts +24 -0
- package/telegram-plugin/server.ts +8 -5
- package/telegram-plugin/tests/auth-add-flow.test.ts +31 -2
- package/telegram-plugin/tests/boot-probes.test.ts +53 -0
- package/telegram-plugin/tests/bot-runtime.test.ts +23 -1
- package/telegram-plugin/tests/quota-check.test.ts +0 -409
- package/telegram-plugin/tests/retry-api-call.test.ts +76 -0
- package/telegram-plugin/tests/telegram-format.test.ts +84 -1
- package/telegram-plugin/tests/update-announce.test.ts +154 -0
- package/telegram-plugin/welcome-text.ts +1 -8
- package/profiles/default/CLAUDE.md +0 -192
- package/skills/docx/scripts/office/validators/__pycache__/__init__.cpython-313.pyc +0 -0
- package/skills/docx/scripts/office/validators/__pycache__/base.cpython-313.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/__init__.cpython-313.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/generate_report.cpython-313.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/improve_description.cpython-313.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/run_eval.cpython-313.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/run_loop.cpython-313.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/utils.cpython-313.pyc +0 -0
- package/telegram-plugin/first-paint.ts +0 -225
- package/telegram-plugin/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/telegram-plugin/server.js +0 -41795
- package/telegram-plugin/tests/html-balanced.ts +0 -63
- package/telegram-plugin/tests/snapshot-serializer.ts +0 -79
- package/telegram-plugin/tool-error-filter.ts +0 -89
|
@@ -17,7 +17,7 @@ var __export = (target, all) => {
|
|
|
17
17
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
18
18
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
19
19
|
|
|
20
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/identity.js
|
|
20
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/identity.js
|
|
21
21
|
var require_identity = __commonJS((exports) => {
|
|
22
22
|
var ALIAS = Symbol.for("yaml.alias");
|
|
23
23
|
var DOC = Symbol.for("yaml.document");
|
|
@@ -71,7 +71,7 @@ var require_identity = __commonJS((exports) => {
|
|
|
71
71
|
exports.isSeq = isSeq;
|
|
72
72
|
});
|
|
73
73
|
|
|
74
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/visit.js
|
|
74
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/visit.js
|
|
75
75
|
var require_visit = __commonJS((exports) => {
|
|
76
76
|
var identity = require_identity();
|
|
77
77
|
var BREAK = Symbol("break visit");
|
|
@@ -226,7 +226,7 @@ var require_visit = __commonJS((exports) => {
|
|
|
226
226
|
exports.visitAsync = visitAsync;
|
|
227
227
|
});
|
|
228
228
|
|
|
229
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/directives.js
|
|
229
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/directives.js
|
|
230
230
|
var require_directives = __commonJS((exports) => {
|
|
231
231
|
var identity = require_identity();
|
|
232
232
|
var visit = require_visit();
|
|
@@ -378,7 +378,7 @@ var require_directives = __commonJS((exports) => {
|
|
|
378
378
|
exports.Directives = Directives;
|
|
379
379
|
});
|
|
380
380
|
|
|
381
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/anchors.js
|
|
381
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/anchors.js
|
|
382
382
|
var require_anchors = __commonJS((exports) => {
|
|
383
383
|
var identity = require_identity();
|
|
384
384
|
var visit = require_visit();
|
|
@@ -440,7 +440,7 @@ var require_anchors = __commonJS((exports) => {
|
|
|
440
440
|
exports.findNewAnchor = findNewAnchor;
|
|
441
441
|
});
|
|
442
442
|
|
|
443
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/applyReviver.js
|
|
443
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/applyReviver.js
|
|
444
444
|
var require_applyReviver = __commonJS((exports) => {
|
|
445
445
|
function applyReviver(reviver, obj, key, val) {
|
|
446
446
|
if (val && typeof val === "object") {
|
|
@@ -487,7 +487,7 @@ var require_applyReviver = __commonJS((exports) => {
|
|
|
487
487
|
exports.applyReviver = applyReviver;
|
|
488
488
|
});
|
|
489
489
|
|
|
490
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/toJS.js
|
|
490
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/toJS.js
|
|
491
491
|
var require_toJS = __commonJS((exports) => {
|
|
492
492
|
var identity = require_identity();
|
|
493
493
|
function toJS(value, arg, ctx) {
|
|
@@ -514,7 +514,7 @@ var require_toJS = __commonJS((exports) => {
|
|
|
514
514
|
exports.toJS = toJS;
|
|
515
515
|
});
|
|
516
516
|
|
|
517
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Node.js
|
|
517
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Node.js
|
|
518
518
|
var require_Node = __commonJS((exports) => {
|
|
519
519
|
var applyReviver = require_applyReviver();
|
|
520
520
|
var identity = require_identity();
|
|
@@ -551,7 +551,7 @@ var require_Node = __commonJS((exports) => {
|
|
|
551
551
|
exports.NodeBase = NodeBase;
|
|
552
552
|
});
|
|
553
553
|
|
|
554
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Alias.js
|
|
554
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Alias.js
|
|
555
555
|
var require_Alias = __commonJS((exports) => {
|
|
556
556
|
var anchors = require_anchors();
|
|
557
557
|
var visit = require_visit();
|
|
@@ -659,7 +659,7 @@ var require_Alias = __commonJS((exports) => {
|
|
|
659
659
|
exports.Alias = Alias;
|
|
660
660
|
});
|
|
661
661
|
|
|
662
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Scalar.js
|
|
662
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Scalar.js
|
|
663
663
|
var require_Scalar = __commonJS((exports) => {
|
|
664
664
|
var identity = require_identity();
|
|
665
665
|
var Node = require_Node();
|
|
@@ -687,7 +687,7 @@ var require_Scalar = __commonJS((exports) => {
|
|
|
687
687
|
exports.isScalarValue = isScalarValue;
|
|
688
688
|
});
|
|
689
689
|
|
|
690
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/createNode.js
|
|
690
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/createNode.js
|
|
691
691
|
var require_createNode = __commonJS((exports) => {
|
|
692
692
|
var Alias = require_Alias();
|
|
693
693
|
var identity = require_identity();
|
|
@@ -759,7 +759,7 @@ var require_createNode = __commonJS((exports) => {
|
|
|
759
759
|
exports.createNode = createNode;
|
|
760
760
|
});
|
|
761
761
|
|
|
762
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Collection.js
|
|
762
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Collection.js
|
|
763
763
|
var require_Collection = __commonJS((exports) => {
|
|
764
764
|
var createNode = require_createNode();
|
|
765
765
|
var identity = require_identity();
|
|
@@ -874,7 +874,7 @@ var require_Collection = __commonJS((exports) => {
|
|
|
874
874
|
exports.isEmptyPath = isEmptyPath;
|
|
875
875
|
});
|
|
876
876
|
|
|
877
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyComment.js
|
|
877
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyComment.js
|
|
878
878
|
var require_stringifyComment = __commonJS((exports) => {
|
|
879
879
|
var stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, "#");
|
|
880
880
|
function indentComment(comment, indent) {
|
|
@@ -891,7 +891,7 @@ var require_stringifyComment = __commonJS((exports) => {
|
|
|
891
891
|
exports.stringifyComment = stringifyComment;
|
|
892
892
|
});
|
|
893
893
|
|
|
894
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/foldFlowLines.js
|
|
894
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/foldFlowLines.js
|
|
895
895
|
var require_foldFlowLines = __commonJS((exports) => {
|
|
896
896
|
var FOLD_FLOW = "flow";
|
|
897
897
|
var FOLD_BLOCK = "block";
|
|
@@ -1028,7 +1028,7 @@ ${indent}${text.slice(fold + 1, end2)}`;
|
|
|
1028
1028
|
exports.foldFlowLines = foldFlowLines;
|
|
1029
1029
|
});
|
|
1030
1030
|
|
|
1031
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyString.js
|
|
1031
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyString.js
|
|
1032
1032
|
var require_stringifyString = __commonJS((exports) => {
|
|
1033
1033
|
var Scalar = require_Scalar();
|
|
1034
1034
|
var foldFlowLines = require_foldFlowLines();
|
|
@@ -1326,7 +1326,7 @@ ${indent}`);
|
|
|
1326
1326
|
exports.stringifyString = stringifyString;
|
|
1327
1327
|
});
|
|
1328
1328
|
|
|
1329
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringify.js
|
|
1329
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringify.js
|
|
1330
1330
|
var require_stringify = __commonJS((exports) => {
|
|
1331
1331
|
var anchors = require_anchors();
|
|
1332
1332
|
var identity = require_identity();
|
|
@@ -1447,7 +1447,7 @@ ${ctx.indent}${str}`;
|
|
|
1447
1447
|
exports.stringify = stringify;
|
|
1448
1448
|
});
|
|
1449
1449
|
|
|
1450
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyPair.js
|
|
1450
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyPair.js
|
|
1451
1451
|
var require_stringifyPair = __commonJS((exports) => {
|
|
1452
1452
|
var identity = require_identity();
|
|
1453
1453
|
var Scalar = require_Scalar();
|
|
@@ -1583,7 +1583,7 @@ ${ctx.indent}`;
|
|
|
1583
1583
|
exports.stringifyPair = stringifyPair;
|
|
1584
1584
|
});
|
|
1585
1585
|
|
|
1586
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/log.js
|
|
1586
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/log.js
|
|
1587
1587
|
var require_log = __commonJS((exports) => {
|
|
1588
1588
|
var node_process = __require("process");
|
|
1589
1589
|
function debug(logLevel, ...messages) {
|
|
@@ -1602,7 +1602,7 @@ var require_log = __commonJS((exports) => {
|
|
|
1602
1602
|
exports.warn = warn;
|
|
1603
1603
|
});
|
|
1604
1604
|
|
|
1605
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/merge.js
|
|
1605
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/merge.js
|
|
1606
1606
|
var require_merge = __commonJS((exports) => {
|
|
1607
1607
|
var identity = require_identity();
|
|
1608
1608
|
var Scalar = require_Scalar();
|
|
@@ -1656,7 +1656,7 @@ var require_merge = __commonJS((exports) => {
|
|
|
1656
1656
|
exports.merge = merge;
|
|
1657
1657
|
});
|
|
1658
1658
|
|
|
1659
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/addPairToJSMap.js
|
|
1659
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/addPairToJSMap.js
|
|
1660
1660
|
var require_addPairToJSMap = __commonJS((exports) => {
|
|
1661
1661
|
var log = require_log();
|
|
1662
1662
|
var merge = require_merge();
|
|
@@ -1717,7 +1717,7 @@ var require_addPairToJSMap = __commonJS((exports) => {
|
|
|
1717
1717
|
exports.addPairToJSMap = addPairToJSMap;
|
|
1718
1718
|
});
|
|
1719
1719
|
|
|
1720
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Pair.js
|
|
1720
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Pair.js
|
|
1721
1721
|
var require_Pair = __commonJS((exports) => {
|
|
1722
1722
|
var createNode = require_createNode();
|
|
1723
1723
|
var stringifyPair = require_stringifyPair();
|
|
@@ -1755,7 +1755,7 @@ var require_Pair = __commonJS((exports) => {
|
|
|
1755
1755
|
exports.createPair = createPair;
|
|
1756
1756
|
});
|
|
1757
1757
|
|
|
1758
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyCollection.js
|
|
1758
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyCollection.js
|
|
1759
1759
|
var require_stringifyCollection = __commonJS((exports) => {
|
|
1760
1760
|
var identity = require_identity();
|
|
1761
1761
|
var stringify = require_stringify();
|
|
@@ -1907,7 +1907,7 @@ ${indent}${end}`;
|
|
|
1907
1907
|
exports.stringifyCollection = stringifyCollection;
|
|
1908
1908
|
});
|
|
1909
1909
|
|
|
1910
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLMap.js
|
|
1910
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLMap.js
|
|
1911
1911
|
var require_YAMLMap = __commonJS((exports) => {
|
|
1912
1912
|
var stringifyCollection = require_stringifyCollection();
|
|
1913
1913
|
var addPairToJSMap = require_addPairToJSMap();
|
|
@@ -2034,7 +2034,7 @@ var require_YAMLMap = __commonJS((exports) => {
|
|
|
2034
2034
|
exports.findPair = findPair;
|
|
2035
2035
|
});
|
|
2036
2036
|
|
|
2037
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/map.js
|
|
2037
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/map.js
|
|
2038
2038
|
var require_map = __commonJS((exports) => {
|
|
2039
2039
|
var identity = require_identity();
|
|
2040
2040
|
var YAMLMap = require_YAMLMap();
|
|
@@ -2053,7 +2053,7 @@ var require_map = __commonJS((exports) => {
|
|
|
2053
2053
|
exports.map = map;
|
|
2054
2054
|
});
|
|
2055
2055
|
|
|
2056
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLSeq.js
|
|
2056
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLSeq.js
|
|
2057
2057
|
var require_YAMLSeq = __commonJS((exports) => {
|
|
2058
2058
|
var createNode = require_createNode();
|
|
2059
2059
|
var stringifyCollection = require_stringifyCollection();
|
|
@@ -2146,7 +2146,7 @@ var require_YAMLSeq = __commonJS((exports) => {
|
|
|
2146
2146
|
exports.YAMLSeq = YAMLSeq;
|
|
2147
2147
|
});
|
|
2148
2148
|
|
|
2149
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/seq.js
|
|
2149
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/seq.js
|
|
2150
2150
|
var require_seq = __commonJS((exports) => {
|
|
2151
2151
|
var identity = require_identity();
|
|
2152
2152
|
var YAMLSeq = require_YAMLSeq();
|
|
@@ -2165,7 +2165,7 @@ var require_seq = __commonJS((exports) => {
|
|
|
2165
2165
|
exports.seq = seq;
|
|
2166
2166
|
});
|
|
2167
2167
|
|
|
2168
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/string.js
|
|
2168
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/string.js
|
|
2169
2169
|
var require_string = __commonJS((exports) => {
|
|
2170
2170
|
var stringifyString = require_stringifyString();
|
|
2171
2171
|
var string = {
|
|
@@ -2181,7 +2181,7 @@ var require_string = __commonJS((exports) => {
|
|
|
2181
2181
|
exports.string = string;
|
|
2182
2182
|
});
|
|
2183
2183
|
|
|
2184
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/null.js
|
|
2184
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/null.js
|
|
2185
2185
|
var require_null = __commonJS((exports) => {
|
|
2186
2186
|
var Scalar = require_Scalar();
|
|
2187
2187
|
var nullTag = {
|
|
@@ -2196,7 +2196,7 @@ var require_null = __commonJS((exports) => {
|
|
|
2196
2196
|
exports.nullTag = nullTag;
|
|
2197
2197
|
});
|
|
2198
2198
|
|
|
2199
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/bool.js
|
|
2199
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/bool.js
|
|
2200
2200
|
var require_bool = __commonJS((exports) => {
|
|
2201
2201
|
var Scalar = require_Scalar();
|
|
2202
2202
|
var boolTag = {
|
|
@@ -2217,7 +2217,7 @@ var require_bool = __commonJS((exports) => {
|
|
|
2217
2217
|
exports.boolTag = boolTag;
|
|
2218
2218
|
});
|
|
2219
2219
|
|
|
2220
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyNumber.js
|
|
2220
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyNumber.js
|
|
2221
2221
|
var require_stringifyNumber = __commonJS((exports) => {
|
|
2222
2222
|
function stringifyNumber({ format, minFractionDigits, tag, value }) {
|
|
2223
2223
|
if (typeof value === "bigint")
|
|
@@ -2241,7 +2241,7 @@ var require_stringifyNumber = __commonJS((exports) => {
|
|
|
2241
2241
|
exports.stringifyNumber = stringifyNumber;
|
|
2242
2242
|
});
|
|
2243
2243
|
|
|
2244
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/float.js
|
|
2244
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/float.js
|
|
2245
2245
|
var require_float = __commonJS((exports) => {
|
|
2246
2246
|
var Scalar = require_Scalar();
|
|
2247
2247
|
var stringifyNumber = require_stringifyNumber();
|
|
@@ -2284,7 +2284,7 @@ var require_float = __commonJS((exports) => {
|
|
|
2284
2284
|
exports.floatNaN = floatNaN;
|
|
2285
2285
|
});
|
|
2286
2286
|
|
|
2287
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/int.js
|
|
2287
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/int.js
|
|
2288
2288
|
var require_int = __commonJS((exports) => {
|
|
2289
2289
|
var stringifyNumber = require_stringifyNumber();
|
|
2290
2290
|
var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
|
|
@@ -2326,7 +2326,7 @@ var require_int = __commonJS((exports) => {
|
|
|
2326
2326
|
exports.intOct = intOct;
|
|
2327
2327
|
});
|
|
2328
2328
|
|
|
2329
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/schema.js
|
|
2329
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/schema.js
|
|
2330
2330
|
var require_schema = __commonJS((exports) => {
|
|
2331
2331
|
var map = require_map();
|
|
2332
2332
|
var _null = require_null();
|
|
@@ -2351,7 +2351,7 @@ var require_schema = __commonJS((exports) => {
|
|
|
2351
2351
|
exports.schema = schema;
|
|
2352
2352
|
});
|
|
2353
2353
|
|
|
2354
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/json/schema.js
|
|
2354
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/json/schema.js
|
|
2355
2355
|
var require_schema2 = __commonJS((exports) => {
|
|
2356
2356
|
var Scalar = require_Scalar();
|
|
2357
2357
|
var map = require_map();
|
|
@@ -2415,7 +2415,7 @@ var require_schema2 = __commonJS((exports) => {
|
|
|
2415
2415
|
exports.schema = schema;
|
|
2416
2416
|
});
|
|
2417
2417
|
|
|
2418
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/binary.js
|
|
2418
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/binary.js
|
|
2419
2419
|
var require_binary = __commonJS((exports) => {
|
|
2420
2420
|
var node_buffer = __require("buffer");
|
|
2421
2421
|
var Scalar = require_Scalar();
|
|
@@ -2470,7 +2470,7 @@ var require_binary = __commonJS((exports) => {
|
|
|
2470
2470
|
exports.binary = binary;
|
|
2471
2471
|
});
|
|
2472
2472
|
|
|
2473
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
|
|
2473
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
|
|
2474
2474
|
var require_pairs = __commonJS((exports) => {
|
|
2475
2475
|
var identity = require_identity();
|
|
2476
2476
|
var Pair = require_Pair();
|
|
@@ -2545,7 +2545,7 @@ ${cn.comment}` : item.comment;
|
|
|
2545
2545
|
exports.resolvePairs = resolvePairs;
|
|
2546
2546
|
});
|
|
2547
2547
|
|
|
2548
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/omap.js
|
|
2548
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/omap.js
|
|
2549
2549
|
var require_omap = __commonJS((exports) => {
|
|
2550
2550
|
var identity = require_identity();
|
|
2551
2551
|
var toJS = require_toJS();
|
|
@@ -2617,7 +2617,7 @@ var require_omap = __commonJS((exports) => {
|
|
|
2617
2617
|
exports.omap = omap;
|
|
2618
2618
|
});
|
|
2619
2619
|
|
|
2620
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/bool.js
|
|
2620
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/bool.js
|
|
2621
2621
|
var require_bool2 = __commonJS((exports) => {
|
|
2622
2622
|
var Scalar = require_Scalar();
|
|
2623
2623
|
function boolStringify({ value, source }, ctx) {
|
|
@@ -2646,7 +2646,7 @@ var require_bool2 = __commonJS((exports) => {
|
|
|
2646
2646
|
exports.trueTag = trueTag;
|
|
2647
2647
|
});
|
|
2648
2648
|
|
|
2649
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/float.js
|
|
2649
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/float.js
|
|
2650
2650
|
var require_float2 = __commonJS((exports) => {
|
|
2651
2651
|
var Scalar = require_Scalar();
|
|
2652
2652
|
var stringifyNumber = require_stringifyNumber();
|
|
@@ -2692,7 +2692,7 @@ var require_float2 = __commonJS((exports) => {
|
|
|
2692
2692
|
exports.floatNaN = floatNaN;
|
|
2693
2693
|
});
|
|
2694
2694
|
|
|
2695
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/int.js
|
|
2695
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/int.js
|
|
2696
2696
|
var require_int2 = __commonJS((exports) => {
|
|
2697
2697
|
var stringifyNumber = require_stringifyNumber();
|
|
2698
2698
|
var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
|
|
@@ -2768,7 +2768,7 @@ var require_int2 = __commonJS((exports) => {
|
|
|
2768
2768
|
exports.intOct = intOct;
|
|
2769
2769
|
});
|
|
2770
2770
|
|
|
2771
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/set.js
|
|
2771
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/set.js
|
|
2772
2772
|
var require_set = __commonJS((exports) => {
|
|
2773
2773
|
var identity = require_identity();
|
|
2774
2774
|
var Pair = require_Pair();
|
|
@@ -2851,7 +2851,7 @@ var require_set = __commonJS((exports) => {
|
|
|
2851
2851
|
exports.set = set;
|
|
2852
2852
|
});
|
|
2853
2853
|
|
|
2854
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
|
|
2854
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
|
|
2855
2855
|
var require_timestamp = __commonJS((exports) => {
|
|
2856
2856
|
var stringifyNumber = require_stringifyNumber();
|
|
2857
2857
|
function parseSexagesimal(str, asBigInt) {
|
|
@@ -2933,7 +2933,7 @@ var require_timestamp = __commonJS((exports) => {
|
|
|
2933
2933
|
exports.timestamp = timestamp;
|
|
2934
2934
|
});
|
|
2935
2935
|
|
|
2936
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/schema.js
|
|
2936
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/schema.js
|
|
2937
2937
|
var require_schema3 = __commonJS((exports) => {
|
|
2938
2938
|
var map = require_map();
|
|
2939
2939
|
var _null = require_null();
|
|
@@ -2974,7 +2974,7 @@ var require_schema3 = __commonJS((exports) => {
|
|
|
2974
2974
|
exports.schema = schema;
|
|
2975
2975
|
});
|
|
2976
2976
|
|
|
2977
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/tags.js
|
|
2977
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/tags.js
|
|
2978
2978
|
var require_tags = __commonJS((exports) => {
|
|
2979
2979
|
var map = require_map();
|
|
2980
2980
|
var _null = require_null();
|
|
@@ -3065,7 +3065,7 @@ var require_tags = __commonJS((exports) => {
|
|
|
3065
3065
|
exports.getTags = getTags;
|
|
3066
3066
|
});
|
|
3067
3067
|
|
|
3068
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/Schema.js
|
|
3068
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/Schema.js
|
|
3069
3069
|
var require_Schema = __commonJS((exports) => {
|
|
3070
3070
|
var identity = require_identity();
|
|
3071
3071
|
var map = require_map();
|
|
@@ -3095,7 +3095,7 @@ var require_Schema = __commonJS((exports) => {
|
|
|
3095
3095
|
exports.Schema = Schema;
|
|
3096
3096
|
});
|
|
3097
3097
|
|
|
3098
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyDocument.js
|
|
3098
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyDocument.js
|
|
3099
3099
|
var require_stringifyDocument = __commonJS((exports) => {
|
|
3100
3100
|
var identity = require_identity();
|
|
3101
3101
|
var stringify = require_stringify();
|
|
@@ -3175,7 +3175,7 @@ var require_stringifyDocument = __commonJS((exports) => {
|
|
|
3175
3175
|
exports.stringifyDocument = stringifyDocument;
|
|
3176
3176
|
});
|
|
3177
3177
|
|
|
3178
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/Document.js
|
|
3178
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/Document.js
|
|
3179
3179
|
var require_Document = __commonJS((exports) => {
|
|
3180
3180
|
var Alias = require_Alias();
|
|
3181
3181
|
var Collection = require_Collection();
|
|
@@ -3410,7 +3410,7 @@ var require_Document = __commonJS((exports) => {
|
|
|
3410
3410
|
exports.Document = Document;
|
|
3411
3411
|
});
|
|
3412
3412
|
|
|
3413
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/errors.js
|
|
3413
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/errors.js
|
|
3414
3414
|
var require_errors = __commonJS((exports) => {
|
|
3415
3415
|
class YAMLError extends Error {
|
|
3416
3416
|
constructor(name, pos, code, message) {
|
|
@@ -3475,7 +3475,7 @@ ${pointer}
|
|
|
3475
3475
|
exports.prettifyError = prettifyError;
|
|
3476
3476
|
});
|
|
3477
3477
|
|
|
3478
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-props.js
|
|
3478
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-props.js
|
|
3479
3479
|
var require_resolve_props = __commonJS((exports) => {
|
|
3480
3480
|
function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
|
|
3481
3481
|
let spaceBefore = false;
|
|
@@ -3605,7 +3605,7 @@ var require_resolve_props = __commonJS((exports) => {
|
|
|
3605
3605
|
exports.resolveProps = resolveProps;
|
|
3606
3606
|
});
|
|
3607
3607
|
|
|
3608
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-contains-newline.js
|
|
3608
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-contains-newline.js
|
|
3609
3609
|
var require_util_contains_newline = __commonJS((exports) => {
|
|
3610
3610
|
function containsNewline(key) {
|
|
3611
3611
|
if (!key)
|
|
@@ -3645,7 +3645,7 @@ var require_util_contains_newline = __commonJS((exports) => {
|
|
|
3645
3645
|
exports.containsNewline = containsNewline;
|
|
3646
3646
|
});
|
|
3647
3647
|
|
|
3648
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-flow-indent-check.js
|
|
3648
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-flow-indent-check.js
|
|
3649
3649
|
var require_util_flow_indent_check = __commonJS((exports) => {
|
|
3650
3650
|
var utilContainsNewline = require_util_contains_newline();
|
|
3651
3651
|
function flowIndentCheck(indent, fc, onError) {
|
|
@@ -3660,7 +3660,7 @@ var require_util_flow_indent_check = __commonJS((exports) => {
|
|
|
3660
3660
|
exports.flowIndentCheck = flowIndentCheck;
|
|
3661
3661
|
});
|
|
3662
3662
|
|
|
3663
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-map-includes.js
|
|
3663
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-map-includes.js
|
|
3664
3664
|
var require_util_map_includes = __commonJS((exports) => {
|
|
3665
3665
|
var identity = require_identity();
|
|
3666
3666
|
function mapIncludes(ctx, items, search) {
|
|
@@ -3673,7 +3673,7 @@ var require_util_map_includes = __commonJS((exports) => {
|
|
|
3673
3673
|
exports.mapIncludes = mapIncludes;
|
|
3674
3674
|
});
|
|
3675
3675
|
|
|
3676
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-map.js
|
|
3676
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-map.js
|
|
3677
3677
|
var require_resolve_block_map = __commonJS((exports) => {
|
|
3678
3678
|
var Pair = require_Pair();
|
|
3679
3679
|
var YAMLMap = require_YAMLMap();
|
|
@@ -3780,7 +3780,7 @@ var require_resolve_block_map = __commonJS((exports) => {
|
|
|
3780
3780
|
exports.resolveBlockMap = resolveBlockMap;
|
|
3781
3781
|
});
|
|
3782
3782
|
|
|
3783
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-seq.js
|
|
3783
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-seq.js
|
|
3784
3784
|
var require_resolve_block_seq = __commonJS((exports) => {
|
|
3785
3785
|
var YAMLSeq = require_YAMLSeq();
|
|
3786
3786
|
var resolveProps = require_resolve_props();
|
|
@@ -3828,7 +3828,7 @@ var require_resolve_block_seq = __commonJS((exports) => {
|
|
|
3828
3828
|
exports.resolveBlockSeq = resolveBlockSeq;
|
|
3829
3829
|
});
|
|
3830
3830
|
|
|
3831
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-end.js
|
|
3831
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-end.js
|
|
3832
3832
|
var require_resolve_end = __commonJS((exports) => {
|
|
3833
3833
|
function resolveEnd(end, offset, reqSpace, onError) {
|
|
3834
3834
|
let comment = "";
|
|
@@ -3868,7 +3868,7 @@ var require_resolve_end = __commonJS((exports) => {
|
|
|
3868
3868
|
exports.resolveEnd = resolveEnd;
|
|
3869
3869
|
});
|
|
3870
3870
|
|
|
3871
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-collection.js
|
|
3871
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-collection.js
|
|
3872
3872
|
var require_resolve_flow_collection = __commonJS((exports) => {
|
|
3873
3873
|
var identity = require_identity();
|
|
3874
3874
|
var Pair = require_Pair();
|
|
@@ -4059,7 +4059,7 @@ var require_resolve_flow_collection = __commonJS((exports) => {
|
|
|
4059
4059
|
exports.resolveFlowCollection = resolveFlowCollection;
|
|
4060
4060
|
});
|
|
4061
4061
|
|
|
4062
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-collection.js
|
|
4062
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-collection.js
|
|
4063
4063
|
var require_compose_collection = __commonJS((exports) => {
|
|
4064
4064
|
var identity = require_identity();
|
|
4065
4065
|
var Scalar = require_Scalar();
|
|
@@ -4121,7 +4121,7 @@ var require_compose_collection = __commonJS((exports) => {
|
|
|
4121
4121
|
exports.composeCollection = composeCollection;
|
|
4122
4122
|
});
|
|
4123
4123
|
|
|
4124
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-scalar.js
|
|
4124
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-scalar.js
|
|
4125
4125
|
var require_resolve_block_scalar = __commonJS((exports) => {
|
|
4126
4126
|
var Scalar = require_Scalar();
|
|
4127
4127
|
function resolveBlockScalar(ctx, scalar, onError) {
|
|
@@ -4314,7 +4314,7 @@ var require_resolve_block_scalar = __commonJS((exports) => {
|
|
|
4314
4314
|
exports.resolveBlockScalar = resolveBlockScalar;
|
|
4315
4315
|
});
|
|
4316
4316
|
|
|
4317
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-scalar.js
|
|
4317
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-scalar.js
|
|
4318
4318
|
var require_resolve_flow_scalar = __commonJS((exports) => {
|
|
4319
4319
|
var Scalar = require_Scalar();
|
|
4320
4320
|
var resolveEnd = require_resolve_end();
|
|
@@ -4530,7 +4530,7 @@ var require_resolve_flow_scalar = __commonJS((exports) => {
|
|
|
4530
4530
|
exports.resolveFlowScalar = resolveFlowScalar;
|
|
4531
4531
|
});
|
|
4532
4532
|
|
|
4533
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-scalar.js
|
|
4533
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-scalar.js
|
|
4534
4534
|
var require_compose_scalar = __commonJS((exports) => {
|
|
4535
4535
|
var identity = require_identity();
|
|
4536
4536
|
var Scalar = require_Scalar();
|
|
@@ -4608,7 +4608,7 @@ var require_compose_scalar = __commonJS((exports) => {
|
|
|
4608
4608
|
exports.composeScalar = composeScalar;
|
|
4609
4609
|
});
|
|
4610
4610
|
|
|
4611
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-empty-scalar-position.js
|
|
4611
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-empty-scalar-position.js
|
|
4612
4612
|
var require_util_empty_scalar_position = __commonJS((exports) => {
|
|
4613
4613
|
function emptyScalarPosition(offset, before, pos) {
|
|
4614
4614
|
if (before) {
|
|
@@ -4635,7 +4635,7 @@ var require_util_empty_scalar_position = __commonJS((exports) => {
|
|
|
4635
4635
|
exports.emptyScalarPosition = emptyScalarPosition;
|
|
4636
4636
|
});
|
|
4637
4637
|
|
|
4638
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-node.js
|
|
4638
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-node.js
|
|
4639
4639
|
var require_compose_node = __commonJS((exports) => {
|
|
4640
4640
|
var Alias = require_Alias();
|
|
4641
4641
|
var identity = require_identity();
|
|
@@ -4738,7 +4738,7 @@ var require_compose_node = __commonJS((exports) => {
|
|
|
4738
4738
|
exports.composeNode = composeNode;
|
|
4739
4739
|
});
|
|
4740
4740
|
|
|
4741
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-doc.js
|
|
4741
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-doc.js
|
|
4742
4742
|
var require_compose_doc = __commonJS((exports) => {
|
|
4743
4743
|
var Document = require_Document();
|
|
4744
4744
|
var composeNode = require_compose_node();
|
|
@@ -4778,7 +4778,7 @@ var require_compose_doc = __commonJS((exports) => {
|
|
|
4778
4778
|
exports.composeDoc = composeDoc;
|
|
4779
4779
|
});
|
|
4780
4780
|
|
|
4781
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/composer.js
|
|
4781
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/composer.js
|
|
4782
4782
|
var require_composer = __commonJS((exports) => {
|
|
4783
4783
|
var node_process = __require("process");
|
|
4784
4784
|
var directives = require_directives();
|
|
@@ -4967,7 +4967,7 @@ ${end.comment}` : end.comment;
|
|
|
4967
4967
|
exports.Composer = Composer;
|
|
4968
4968
|
});
|
|
4969
4969
|
|
|
4970
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-scalar.js
|
|
4970
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-scalar.js
|
|
4971
4971
|
var require_cst_scalar = __commonJS((exports) => {
|
|
4972
4972
|
var resolveBlockScalar = require_resolve_block_scalar();
|
|
4973
4973
|
var resolveFlowScalar = require_resolve_flow_scalar();
|
|
@@ -5157,7 +5157,7 @@ var require_cst_scalar = __commonJS((exports) => {
|
|
|
5157
5157
|
exports.setScalarValue = setScalarValue;
|
|
5158
5158
|
});
|
|
5159
5159
|
|
|
5160
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-stringify.js
|
|
5160
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-stringify.js
|
|
5161
5161
|
var require_cst_stringify = __commonJS((exports) => {
|
|
5162
5162
|
var stringify = (cst) => ("type" in cst) ? stringifyToken(cst) : stringifyItem(cst);
|
|
5163
5163
|
function stringifyToken(token) {
|
|
@@ -5215,7 +5215,7 @@ var require_cst_stringify = __commonJS((exports) => {
|
|
|
5215
5215
|
exports.stringify = stringify;
|
|
5216
5216
|
});
|
|
5217
5217
|
|
|
5218
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-visit.js
|
|
5218
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-visit.js
|
|
5219
5219
|
var require_cst_visit = __commonJS((exports) => {
|
|
5220
5220
|
var BREAK = Symbol("break visit");
|
|
5221
5221
|
var SKIP = Symbol("skip children");
|
|
@@ -5274,7 +5274,7 @@ var require_cst_visit = __commonJS((exports) => {
|
|
|
5274
5274
|
exports.visit = visit;
|
|
5275
5275
|
});
|
|
5276
5276
|
|
|
5277
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst.js
|
|
5277
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst.js
|
|
5278
5278
|
var require_cst = __commonJS((exports) => {
|
|
5279
5279
|
var cstScalar = require_cst_scalar();
|
|
5280
5280
|
var cstStringify = require_cst_stringify();
|
|
@@ -5375,7 +5375,7 @@ var require_cst = __commonJS((exports) => {
|
|
|
5375
5375
|
exports.tokenType = tokenType;
|
|
5376
5376
|
});
|
|
5377
5377
|
|
|
5378
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/lexer.js
|
|
5378
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/lexer.js
|
|
5379
5379
|
var require_lexer = __commonJS((exports) => {
|
|
5380
5380
|
var cst = require_cst();
|
|
5381
5381
|
function isEmpty(ch) {
|
|
@@ -5961,7 +5961,7 @@ var require_lexer = __commonJS((exports) => {
|
|
|
5961
5961
|
exports.Lexer = Lexer;
|
|
5962
5962
|
});
|
|
5963
5963
|
|
|
5964
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/line-counter.js
|
|
5964
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/line-counter.js
|
|
5965
5965
|
var require_line_counter = __commonJS((exports) => {
|
|
5966
5966
|
class LineCounter {
|
|
5967
5967
|
constructor() {
|
|
@@ -5989,7 +5989,7 @@ var require_line_counter = __commonJS((exports) => {
|
|
|
5989
5989
|
exports.LineCounter = LineCounter;
|
|
5990
5990
|
});
|
|
5991
5991
|
|
|
5992
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/parser.js
|
|
5992
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/parser.js
|
|
5993
5993
|
var require_parser = __commonJS((exports) => {
|
|
5994
5994
|
var node_process = __require("process");
|
|
5995
5995
|
var cst = require_cst();
|
|
@@ -6838,7 +6838,7 @@ var require_parser = __commonJS((exports) => {
|
|
|
6838
6838
|
exports.Parser = Parser;
|
|
6839
6839
|
});
|
|
6840
6840
|
|
|
6841
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/public-api.js
|
|
6841
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/public-api.js
|
|
6842
6842
|
var require_public_api = __commonJS((exports) => {
|
|
6843
6843
|
var composer = require_composer();
|
|
6844
6844
|
var Document = require_Document();
|
|
@@ -6932,7 +6932,7 @@ var require_public_api = __commonJS((exports) => {
|
|
|
6932
6932
|
exports.stringify = stringify;
|
|
6933
6933
|
});
|
|
6934
6934
|
|
|
6935
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/index.js
|
|
6935
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/index.js
|
|
6936
6936
|
var composer, Document, Schema, errors, Alias, identity, Pair, Scalar, YAMLMap, YAMLSeq, cst, lexer, lineCounter, parser, publicApi, visit, $Composer, $Document, $Schema, $YAMLError, $YAMLParseError, $YAMLWarning, $Alias, $isAlias, $isCollection, $isDocument, $isMap, $isNode, $isPair, $isScalar, $isSeq, $Pair, $Scalar, $YAMLMap, $YAMLSeq, $Lexer, $LineCounter, $Parser, $parse, $parseAllDocuments, $parseDocument, $stringify, $visit, $visitAsync;
|
|
6937
6937
|
var init_dist = __esm(() => {
|
|
6938
6938
|
composer = require_composer();
|
|
@@ -6981,7 +6981,7 @@ var init_dist = __esm(() => {
|
|
|
6981
6981
|
$visitAsync = visit.visitAsync;
|
|
6982
6982
|
});
|
|
6983
6983
|
|
|
6984
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/util.js
|
|
6984
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/util.js
|
|
6985
6985
|
var util, objectUtil, ZodParsedType, getParsedType = (data) => {
|
|
6986
6986
|
const t = typeof data;
|
|
6987
6987
|
switch (t) {
|
|
@@ -7112,7 +7112,7 @@ var init_util = __esm(() => {
|
|
|
7112
7112
|
]);
|
|
7113
7113
|
});
|
|
7114
7114
|
|
|
7115
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/ZodError.js
|
|
7115
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/ZodError.js
|
|
7116
7116
|
var ZodIssueCode, quotelessJson = (obj) => {
|
|
7117
7117
|
const json = JSON.stringify(obj, null, 2);
|
|
7118
7118
|
return json.replace(/"([^"]+)":/g, "$1:");
|
|
@@ -7233,7 +7233,7 @@ var init_ZodError = __esm(() => {
|
|
|
7233
7233
|
};
|
|
7234
7234
|
});
|
|
7235
7235
|
|
|
7236
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/locales/en.js
|
|
7236
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/locales/en.js
|
|
7237
7237
|
var errorMap = (issue, _ctx) => {
|
|
7238
7238
|
let message;
|
|
7239
7239
|
switch (issue.code) {
|
|
@@ -7340,7 +7340,7 @@ var init_en = __esm(() => {
|
|
|
7340
7340
|
en_default = errorMap;
|
|
7341
7341
|
});
|
|
7342
7342
|
|
|
7343
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/errors.js
|
|
7343
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/errors.js
|
|
7344
7344
|
function setErrorMap(map) {
|
|
7345
7345
|
overrideErrorMap = map;
|
|
7346
7346
|
}
|
|
@@ -7353,7 +7353,7 @@ var init_errors = __esm(() => {
|
|
|
7353
7353
|
overrideErrorMap = en_default;
|
|
7354
7354
|
});
|
|
7355
7355
|
|
|
7356
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js
|
|
7356
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js
|
|
7357
7357
|
function addIssueToContext(ctx, issueData) {
|
|
7358
7358
|
const overrideMap = getErrorMap();
|
|
7359
7359
|
const issue = makeIssue({
|
|
@@ -7458,10 +7458,10 @@ var init_parseUtil = __esm(() => {
|
|
|
7458
7458
|
});
|
|
7459
7459
|
});
|
|
7460
7460
|
|
|
7461
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js
|
|
7461
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js
|
|
7462
7462
|
var init_typeAliases = () => {};
|
|
7463
7463
|
|
|
7464
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js
|
|
7464
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js
|
|
7465
7465
|
var errorUtil;
|
|
7466
7466
|
var init_errorUtil = __esm(() => {
|
|
7467
7467
|
(function(errorUtil2) {
|
|
@@ -7470,7 +7470,7 @@ var init_errorUtil = __esm(() => {
|
|
|
7470
7470
|
})(errorUtil || (errorUtil = {}));
|
|
7471
7471
|
});
|
|
7472
7472
|
|
|
7473
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/types.js
|
|
7473
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/types.js
|
|
7474
7474
|
class ParseInputLazyPath {
|
|
7475
7475
|
constructor(parent, value, path, key) {
|
|
7476
7476
|
this._cachedPath = [];
|
|
@@ -10821,7 +10821,7 @@ var init_types = __esm(() => {
|
|
|
10821
10821
|
NEVER = INVALID;
|
|
10822
10822
|
});
|
|
10823
10823
|
|
|
10824
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/external.js
|
|
10824
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/external.js
|
|
10825
10825
|
var exports_external = {};
|
|
10826
10826
|
__export(exports_external, {
|
|
10827
10827
|
void: () => voidType,
|
|
@@ -10941,14 +10941,14 @@ var init_external = __esm(() => {
|
|
|
10941
10941
|
init_ZodError();
|
|
10942
10942
|
});
|
|
10943
10943
|
|
|
10944
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/index.js
|
|
10944
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/index.js
|
|
10945
10945
|
var init_zod = __esm(() => {
|
|
10946
10946
|
init_external();
|
|
10947
10947
|
init_external();
|
|
10948
10948
|
});
|
|
10949
10949
|
|
|
10950
10950
|
// src/config/schema.ts
|
|
10951
|
-
var CodeRepoEntrySchema, AgentBindMountSchema, ScheduleEntrySchema, AgentSoulSchema, AgentToolsSchema, AgentMemorySchema, HookEntrySchema, AgentHooksSchema, SubagentSchema, SessionSchema, SessionContinuitySchema, TelegramChannelSchema, ChannelsSchema, TIMEZONE_REGEX, ApproverIdSchema, GoogleWorkspaceTierSchema, GoogleWorkspaceConfigSchema, AgentGoogleWorkspaceConfigSchema, ReactionsSchema, profileFields, ProfileSchema, _omitExtends, defaultsFields, AgentDefaultsSchema, AgentSchema, TelegramConfigSchema, MemoryBackendConfigSchema, VaultConfigSchema, QuotaConfigSchema, HostControlConfigSchema, SwitchroomConfigSchema;
|
|
10951
|
+
var CodeRepoEntrySchema, AgentBindMountSchema, ScheduleEntrySchema, AgentSoulSchema, AgentToolsSchema, AgentMemorySchema, HookEntrySchema, AgentHooksSchema, SubagentSchema, SessionSchema, SessionContinuitySchema, TelegramChannelSchema, ChannelsSchema, TIMEZONE_REGEX, ApproverIdSchema, GoogleWorkspaceTierSchema, GoogleWorkspaceConfigSchema, AgentGoogleWorkspaceConfigSchema, ReactionsSchema, ReleaseBlock, NetworkIsolationSchema, profileFields, ProfileSchema, _omitExtends, defaultsFields, AgentDefaultsSchema, AgentSchema, TelegramConfigSchema, MemoryBackendConfigSchema, VaultConfigSchema, QuotaConfigSchema, HostControlConfigSchema, SwitchroomConfigSchema;
|
|
10952
10952
|
var init_schema = __esm(() => {
|
|
10953
10953
|
init_zod();
|
|
10954
10954
|
CodeRepoEntrySchema = exports_external.object({
|
|
@@ -10964,7 +10964,7 @@ var init_schema = __esm(() => {
|
|
|
10964
10964
|
ScheduleEntrySchema = exports_external.object({
|
|
10965
10965
|
cron: exports_external.string().describe("Cron expression (e.g., '0 8 * * *')"),
|
|
10966
10966
|
prompt: exports_external.string().describe("Prompt to send at the scheduled time"),
|
|
10967
|
-
model: exports_external.string().optional().describe("
|
|
10967
|
+
model: exports_external.string().optional().describe("DEPRECATED / IGNORED. Pre-v0.8 the singleton scheduler ran each " + "task as an isolated `claude -p` and could set --model per task. " + "Post cron-fold-in (v0.8) the fire is injected into the agent's " + "running session, so it always uses the agent's configured model " + "— this field has no effect. Accepted (optional) only so existing " + "configs keep validating; set the model at the agent level instead. " + "See docs/scheduling.md."),
|
|
10968
10968
|
secrets: exports_external.array(exports_external.string().regex(/^[a-zA-Z0-9_\-/]+$/, "Secret key names must contain only alphanumeric characters, underscores, hyphens, and forward slashes")).default([]).describe("Vault key names this cron task may read via the vault-broker daemon. " + "Empty by default — broker requests for unlisted keys are denied. " + "Note: this is misconfiguration protection (a typo in cron-A doesn't " + "accidentally read cron-B's keys) rather than a security boundary — " + "anyone who can edit cron scripts can also edit switchroom.yaml, and " + "anyone with the vault passphrase can read the vault file directly. " + "See docs/configuration.md for the full framing.")
|
|
10969
10969
|
});
|
|
10970
10970
|
AgentSoulSchema = exports_external.object({
|
|
@@ -11031,6 +11031,7 @@ var init_schema = __esm(() => {
|
|
|
11031
11031
|
resume_max_bytes: exports_external.number().int().positive().optional().describe("Byte threshold above which 'auto' mode falls back to handoff " + "instead of --continue. Default 2_000_000 (~2MB). Large transcripts " + "can blow out the context window even with prefix caching, and " + "--continue replay is known-fragile at scale.")
|
|
11032
11032
|
}).optional();
|
|
11033
11033
|
TelegramChannelSchema = exports_external.object({
|
|
11034
|
+
enabled: exports_external.boolean().default(true).describe("Master switch for the per-agent Telegram gateway sidecar. " + "When false, start.sh skips the gateway supervise loop and the " + "agent boots without bot-token requirements (smoke-test + " + "offline-dev use case)."),
|
|
11034
11035
|
plugin: exports_external.enum(["switchroom", "official"]).optional().describe("Which Telegram MCP plugin to load. Default is 'switchroom' — the " + "enhanced fork with streaming edits, reactions, history, and " + "access control. Set to 'official' for the upstream marketplace " + "plugin (basic send/receive only)."),
|
|
11035
11036
|
format: exports_external.enum(["html", "markdownv2", "text"]).optional().describe("Default reply format passed to the plugin"),
|
|
11036
11037
|
rate_limit_ms: exports_external.number().optional().describe("Minimum delay between outgoing messages in ms"),
|
|
@@ -11095,6 +11096,9 @@ var init_schema = __esm(() => {
|
|
|
11095
11096
|
tier: GoogleWorkspaceTierSchema.optional().describe("RFC G Phase 1: which upstream MCP tier to expose. " + "core (default) = ~16 tools (Drive+Docs+Sheets+Calendar). " + "extended = ~40 tools (+Slides, Forms, Tasks, Chat). " + "complete = ~60+ tools (+Gmail; not recommended yet — see RFC G §5).")
|
|
11096
11097
|
}).optional();
|
|
11097
11098
|
AgentGoogleWorkspaceConfigSchema = exports_external.object({
|
|
11099
|
+
account: exports_external.string().regex(/^[^@\s:]+@[^@\s:]+\.[^@\s:]+$/, {
|
|
11100
|
+
message: "google_workspace.account must be a Google account email like " + "'alice@example.com' (colons not allowed)"
|
|
11101
|
+
}).transform((v) => v.trim().toLowerCase()).optional().describe("RFC G: the Google account this agent uses for the Workspace MCP. " + "Must be a key in top-level `google_accounts:` with this agent " + "listed in its `enabled_for[]`. Read by the auth-broker " + "(get-credentials, provider=google) and by the scaffold to decide " + "whether to emit the `gdrive` MCP entry. Normalized to lowercase " + "so it matches the google_accounts key (which is also normalized)."),
|
|
11098
11102
|
approvers: exports_external.array(ApproverIdSchema).min(1).optional().describe("Per-agent approver override. When set, replaces (does not extend) " + "the top-level drive.approvers list for this agent's onboarding card."),
|
|
11099
11103
|
tier: GoogleWorkspaceTierSchema.optional().describe("Per-agent tier override (RFC G Phase 1). When set, replaces the " + "top-level google_workspace.tier for this agent. Common case: most " + "agents on `core`, one specialist on `extended` for Slides access.")
|
|
11100
11104
|
}).optional();
|
|
@@ -11105,9 +11109,17 @@ var init_schema = __esm(() => {
|
|
|
11105
11109
|
per_hour_cap: exports_external.number().int().nonnegative().optional().describe("Max reaction-triggered synthetic turns per chat per rolling hour. " + "Refusals are stderr-logged but not surfaced to the agent. " + "Default 10. Set to 0 to disable triggering via the cap path."),
|
|
11106
11110
|
group_admin_only: exports_external.boolean().optional().describe("In groups/supergroups (negative chat_id), only trigger a synthetic " + "turn when the reacter is a chat admin (creator or administrator). " + "Failing the lookup is treated as non-admin (fail-closed). " + "DMs are never affected by this flag — the reacter IS the user. " + "Default true.")
|
|
11107
11111
|
}).optional();
|
|
11112
|
+
ReleaseBlock = exports_external.object({
|
|
11113
|
+
channel: exports_external.enum(["dev", "rc", "latest"]).optional(),
|
|
11114
|
+
pin: exports_external.string().regex(/^(sha-[0-9a-f]{7,40}|v\d+\.\d+\.\d+)$/).optional()
|
|
11115
|
+
}).strict().refine((r) => !(r.channel && r.pin), {
|
|
11116
|
+
message: "release.channel and release.pin are mutually exclusive"
|
|
11117
|
+
});
|
|
11118
|
+
NetworkIsolationSchema = exports_external.enum(["host", "strict"]).optional().describe("Container network mode (sec WS6-F1 #1390 / feature #1413). " + "'host' (DEFAULT when unset): `network_mode: host` — the agent " + "shares the host network stack; hindsight 127.0.0.1:18888 and " + "operator-LAN devices are reachable, but there is NO network " + "isolation from sibling agents or host services (the documented, " + "deliberate shared-host tradeoff). 'strict': the agent joins its " + "OWN dedicated docker bridge network instead — it cannot reach " + "sibling agents; host services are reached via " + "`host.docker.internal`. OPT-IN: validate hindsight / operator-" + "LAN / cron / boot-self-test paths for your deployment before " + "adopting fleet-wide (default-flip is deferred to that validation " + "cycle, #1413). Cascades override (agent → profile → defaults).");
|
|
11108
11119
|
profileFields = {
|
|
11109
11120
|
extends: exports_external.string().optional(),
|
|
11110
11121
|
bot_token: exports_external.string().optional(),
|
|
11122
|
+
release: ReleaseBlock.optional().describe("Release-channel pin / pointer. Either `channel` (dev|rc|latest) or " + "`pin` (sha-<hex>|v<semver>) — mutually exclusive. Per-agent value " + "REPLACES the root entirely (no field merge)."),
|
|
11111
11123
|
timezone: exports_external.string().regex(TIMEZONE_REGEX, "timezone must be an IANA zone name like 'Australia/Melbourne' or 'UTC' " + "(three-letter aliases like EST/PST and bare offsets like UTC+10 are not accepted)").optional().describe("IANA timezone name (e.g. 'Australia/Melbourne', 'America/New_York', " + "'UTC'). Used to generate the per-turn local-time hint the agent's " + "UserPromptSubmit timezone hook emits, and baked into the systemd " + "unit as TZ= so subprocess `date`/`Date.now()` are correct. If unset " + "at every cascade layer, switchroom auto-detects from /etc/timezone " + "and warns on `reconcile` when the detected zone is UTC."),
|
|
11112
11124
|
soul: exports_external.object({
|
|
11113
11125
|
name: exports_external.string().optional(),
|
|
@@ -11144,8 +11156,8 @@ var init_schema = __esm(() => {
|
|
|
11144
11156
|
session: SessionSchema,
|
|
11145
11157
|
session_continuity: SessionContinuitySchema,
|
|
11146
11158
|
channels: ChannelsSchema,
|
|
11159
|
+
network_isolation: NetworkIsolationSchema,
|
|
11147
11160
|
dangerous_mode: exports_external.boolean().optional(),
|
|
11148
|
-
skip_permission_prompt: exports_external.boolean().optional(),
|
|
11149
11161
|
settings_raw: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
|
|
11150
11162
|
claude_md_raw: exports_external.string().optional(),
|
|
11151
11163
|
cli_args: exports_external.array(exports_external.string()).optional(),
|
|
@@ -11167,6 +11179,7 @@ var init_schema = __esm(() => {
|
|
|
11167
11179
|
AgentSchema = exports_external.object({
|
|
11168
11180
|
extends: exports_external.string().optional().describe("Name of a profile to inherit from (e.g., 'coding', 'health-coach'). " + "Profiles may be defined inline under switchroom.yaml `profiles:` or as a " + "filesystem directory `profiles/<name>/`. Defaults to DEFAULT_PROFILE " + "('default') when unset."),
|
|
11169
11181
|
bot_token: exports_external.string().optional().describe("Per-agent Telegram bot token or vault reference (overrides global telegram.bot_token)"),
|
|
11182
|
+
release: ReleaseBlock.optional().describe("Per-agent release-channel pin / pointer. REPLACES the root " + "`release` block entirely (no field merge) — a pinned agent does " + "not inherit the fleet channel, and vice versa."),
|
|
11170
11183
|
bot_username: exports_external.string().optional().describe("Per-agent Telegram bot username (without leading @) when it doesn't " + "contain the agent slug. Replaces the default 'username includes slug' " + "preflight check with an exact (case-insensitive) match. Use when an " + "agent and its bot have intentionally divergent names (e.g. agent " + "'lawgpt' paired with bot '@meken_law_bot')."),
|
|
11171
11184
|
timezone: exports_external.string().regex(TIMEZONE_REGEX, "timezone must be an IANA zone name like 'Australia/Melbourne' or 'UTC' " + "(three-letter aliases like EST/PST and bare offsets like UTC+10 are not accepted)").optional().describe("Per-agent IANA timezone override. Wins over any profile/defaults " + "value and over the top-level switchroom.timezone global. Controls " + "the UserPromptSubmit timezone hook's emitted local time and the " + "systemd unit's TZ= env."),
|
|
11172
11185
|
auth: exports_external.object({
|
|
@@ -11211,7 +11224,7 @@ var init_schema = __esm(() => {
|
|
|
11211
11224
|
session_continuity: SessionContinuitySchema.describe("Handoff-briefing settings. When enabled (default), a Stop hook " + "summarizes each session at shutdown and start.sh injects that " + "briefing into the next session via --append-system-prompt."),
|
|
11212
11225
|
channels: ChannelsSchema.describe("Per-channel configuration. Today only `telegram` is defined; the " + "shape is designed to expand to other channels (Slack, Discord, " + "Matrix, Email) as they're added."),
|
|
11213
11226
|
dangerous_mode: exports_external.boolean().optional().describe("If true, include --dangerously-skip-permissions in start.sh"),
|
|
11214
|
-
|
|
11227
|
+
network_isolation: NetworkIsolationSchema,
|
|
11215
11228
|
admin: exports_external.boolean().optional().describe("If true, the agent's Telegram gateway intercepts admin slash commands " + "(/agents, /logs, /restart, /delete, /update, /auth, /reconcile, etc.) " + "locally before forwarding to Claude. Commands are handled silently — " + "Claude never sees them. Requires the agent to use the switchroom-telegram " + "plugin. When false or absent, all messages pass through to Claude unchanged."),
|
|
11216
11229
|
settings_raw: exports_external.record(exports_external.string(), exports_external.unknown()).optional().describe("Escape hatch: raw object deep-merged into the generated " + "settings.json as the final step. Use for Claude Code settings " + "keys switchroom doesn't wrap directly (e.g. effort, apiKeyHelper). " + "Power-user-only — prefer the typed fields when they exist."),
|
|
11217
11230
|
claude_md_raw: exports_external.string().optional().describe("Escape hatch: markdown text appended verbatim to CLAUDE.md on " + "initial scaffold. Not re-applied on reconcile (CLAUDE.md is " + "user-protected). Use for one-off persona tuning that isn't " + "worth a template."),
|
|
@@ -11278,7 +11291,7 @@ var init_schema = __esm(() => {
|
|
|
11278
11291
|
monthly_budget_usd: exports_external.number().positive().optional().describe("Monthly USD spend budget. If unset, the greeting shows raw usage only.")
|
|
11279
11292
|
});
|
|
11280
11293
|
HostControlConfigSchema = exports_external.object({
|
|
11281
|
-
enabled: exports_external.boolean().
|
|
11294
|
+
enabled: exports_external.boolean().default(true).describe("Whether the host-control daemon is in use. Default: true (since " + "RFC C Phase 2 default-flip — the gateway's /restart, /new, /reset, " + "and /update apply slash-commands all dispatch through hostd, and " + "without it those verbs fail on docker-mode installs because the " + "agent container has no docker binary/socket). " + "When true, the compose generator emits per-agent bind mounts " + "at `~/.switchroom/hostd/<name>/sock` for every admin-flagged " + "agent. Install the daemon with `switchroom hostd install` — " + "it runs as a docker container in its own compose project " + "(`switchroom-hostd`), separate from the agent fleet's compose " + "project so `up -d --remove-orphans` cycles of the fleet " + "can't recreate the daemon mid-RPC. See RFC C §5.1. " + "Set enabled: false only on legacy systemd-mode installs that " + "still rely on the in-container `spawnSwitchroomDetached` " + "shellout (removal is tracked as RFC C Phase 3).")
|
|
11282
11295
|
});
|
|
11283
11296
|
SwitchroomConfigSchema = exports_external.object({
|
|
11284
11297
|
switchroom: exports_external.object({
|
|
@@ -11288,6 +11301,7 @@ var init_schema = __esm(() => {
|
|
|
11288
11301
|
timezone: exports_external.string().regex(TIMEZONE_REGEX, "timezone must be an IANA zone name like 'Australia/Melbourne' or 'UTC'").optional().describe("Global default IANA timezone applied to every agent unless the " + "agent (or its profile) declares its own. See the per-agent " + "timezone field for the full cascade and auto-detection fallback.")
|
|
11289
11302
|
}),
|
|
11290
11303
|
telegram: TelegramConfigSchema,
|
|
11304
|
+
release: ReleaseBlock.optional().describe("Fleet-wide default release-channel pin / pointer for the update " + "flow. Either `channel` (dev|rc|latest) or `pin` (sha-<hex>|v<semver>) " + "— mutually exclusive. Per-agent `release` REPLACES this entirely."),
|
|
11291
11305
|
memory: MemoryBackendConfigSchema.optional(),
|
|
11292
11306
|
vault: VaultConfigSchema.optional(),
|
|
11293
11307
|
auth: exports_external.object({
|
|
@@ -11304,7 +11318,7 @@ var init_schema = __esm(() => {
|
|
|
11304
11318
|
drive: GoogleWorkspaceConfigSchema.describe("RFC D legacy key — 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."),
|
|
11305
11319
|
google_workspace: GoogleWorkspaceConfigSchema.describe("RFC G canonical key. Top-level Google Workspace configuration — " + "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)."),
|
|
11306
11320
|
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."),
|
|
11307
|
-
host_control: HostControlConfigSchema.
|
|
11321
|
+
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)."),
|
|
11308
11322
|
google_accounts: exports_external.record(exports_external.string().regex(/^[^@\s:]+@[^@\s:]+\.[^@\s:]+$/, {
|
|
11309
11323
|
message: "Account key must be a Google account email like 'alice@example.com' (colons not allowed)"
|
|
11310
11324
|
}).transform((v) => v.trim().toLowerCase()), exports_external.object({
|
|
@@ -11326,6 +11340,13 @@ import { resolve as resolve2 } from "node:path";
|
|
|
11326
11340
|
function home() {
|
|
11327
11341
|
return process.env.HOME ?? "/root";
|
|
11328
11342
|
}
|
|
11343
|
+
function warnLegacyStateOnce(legacy) {
|
|
11344
|
+
if (_legacyStateWarned)
|
|
11345
|
+
return;
|
|
11346
|
+
_legacyStateWarned = true;
|
|
11347
|
+
process.stderr.write(`[switchroom] DEPRECATED: reading legacy state from ${legacy}. ` + "Run `mv ~/.clerk ~/.switchroom` (and rename any top-level `clerk:` " + "key in switchroom.yaml to `switchroom:`). This back-compat shim is " + `REMOVED in v0.13.0 — no automatic migration exists.
|
|
11348
|
+
`);
|
|
11349
|
+
}
|
|
11329
11350
|
function resolveDualPath(pathStr) {
|
|
11330
11351
|
const h = home();
|
|
11331
11352
|
if (pathStr.startsWith("~/")) {
|
|
@@ -11335,15 +11356,17 @@ function resolveDualPath(pathStr) {
|
|
|
11335
11356
|
const frag = rest.slice(DEFAULT_STATE_DIR.length + 1);
|
|
11336
11357
|
if (!existsSync4(absolute)) {
|
|
11337
11358
|
const legacy = resolve2(h, LEGACY_STATE_DIR, frag);
|
|
11338
|
-
if (existsSync4(legacy))
|
|
11359
|
+
if (existsSync4(legacy)) {
|
|
11360
|
+
warnLegacyStateOnce(legacy);
|
|
11339
11361
|
return legacy;
|
|
11362
|
+
}
|
|
11340
11363
|
}
|
|
11341
11364
|
}
|
|
11342
11365
|
return absolute;
|
|
11343
11366
|
}
|
|
11344
11367
|
return resolve2(pathStr);
|
|
11345
11368
|
}
|
|
11346
|
-
var DEFAULT_STATE_DIR = ".switchroom", LEGACY_STATE_DIR = ".clerk";
|
|
11369
|
+
var DEFAULT_STATE_DIR = ".switchroom", LEGACY_STATE_DIR = ".clerk", _legacyStateWarned = false;
|
|
11347
11370
|
var init_paths = () => {};
|
|
11348
11371
|
|
|
11349
11372
|
// src/config/overlay-schema.ts
|
|
@@ -11634,7 +11657,7 @@ var init_loader = __esm(() => {
|
|
|
11634
11657
|
|
|
11635
11658
|
// src/vault/broker/server.ts
|
|
11636
11659
|
import * as net from "node:net";
|
|
11637
|
-
import { mkdirSync as mkdirSync5, chmodSync as chmodSync4, chownSync, existsSync as existsSync8, readFileSync as readFileSync8, readdirSync as readdirSync3, unlinkSync as unlinkSync4, writeFileSync as writeFileSync3, renameSync as renameSync3 } from "node:fs";
|
|
11660
|
+
import { mkdirSync as mkdirSync5, chmodSync as chmodSync4, chownSync, existsSync as existsSync8, readFileSync as readFileSync8, readdirSync as readdirSync3, statSync as statSync4, unlinkSync as unlinkSync4, writeFileSync as writeFileSync3, renameSync as renameSync3 } from "node:fs";
|
|
11638
11661
|
|
|
11639
11662
|
// src/agents/compose.ts
|
|
11640
11663
|
import { createHash } from "node:crypto";
|
|
@@ -11726,8 +11749,8 @@ function mergeAgentConfig(defaultsIn, agentIn) {
|
|
|
11726
11749
|
if (defaults.dangerous_mode !== undefined && merged.dangerous_mode === undefined) {
|
|
11727
11750
|
merged.dangerous_mode = defaults.dangerous_mode;
|
|
11728
11751
|
}
|
|
11729
|
-
if (defaults.
|
|
11730
|
-
merged.
|
|
11752
|
+
if (defaults.network_isolation !== undefined && merged.network_isolation === undefined) {
|
|
11753
|
+
merged.network_isolation = defaults.network_isolation;
|
|
11731
11754
|
}
|
|
11732
11755
|
if (defaults.thinking_effort !== undefined && merged.thinking_effort === undefined) {
|
|
11733
11756
|
merged.thinking_effort = defaults.thinking_effort;
|
|
@@ -11847,6 +11870,9 @@ function mergeAgentConfig(defaultsIn, agentIn) {
|
|
|
11847
11870
|
}
|
|
11848
11871
|
merged.session_continuity = combined;
|
|
11849
11872
|
}
|
|
11873
|
+
if (merged.release === undefined && defaults.release !== undefined) {
|
|
11874
|
+
merged.release = defaults.release;
|
|
11875
|
+
}
|
|
11850
11876
|
if (defaults.channels || merged.channels) {
|
|
11851
11877
|
const dChan = defaults.channels ?? {};
|
|
11852
11878
|
const aChan = merged.channels ?? {};
|
|
@@ -12814,6 +12840,13 @@ class AutoUnlockDecryptError extends Error {
|
|
|
12814
12840
|
}
|
|
12815
12841
|
}
|
|
12816
12842
|
function readMachineId() {
|
|
12843
|
+
const vitestVal = process.env.VITEST;
|
|
12844
|
+
const isTestEnv = vitestVal !== undefined && vitestVal.length > 0;
|
|
12845
|
+
if (isTestEnv) {
|
|
12846
|
+
const override = process.env.SWITCHROOM_VAULT_MACHINE_ID_OVERRIDE;
|
|
12847
|
+
if (override && override.length > 0)
|
|
12848
|
+
return override;
|
|
12849
|
+
}
|
|
12817
12850
|
for (const path of [MACHINE_ID_PRIMARY, MACHINE_ID_FALLBACK]) {
|
|
12818
12851
|
try {
|
|
12819
12852
|
const id = readFileSync7(path, "utf8").trim();
|
|
@@ -13082,7 +13115,7 @@ var ApprovalLookupRequestSchema = exports_external.object({
|
|
|
13082
13115
|
var ApprovalConsumeRequestSchema = exports_external.object({
|
|
13083
13116
|
v: exports_external.literal(1),
|
|
13084
13117
|
op: exports_external.literal("approval_consume"),
|
|
13085
|
-
request_id: exports_external.string().regex(/^[0-9a-f]{
|
|
13118
|
+
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/)
|
|
13086
13119
|
});
|
|
13087
13120
|
var ApprovalRevokeRequestSchema = exports_external.object({
|
|
13088
13121
|
v: exports_external.literal(1),
|
|
@@ -13106,7 +13139,7 @@ var ApprovalDecisionModeSchema = exports_external.enum([
|
|
|
13106
13139
|
var ApprovalRecordRequestSchema = exports_external.object({
|
|
13107
13140
|
v: exports_external.literal(1),
|
|
13108
13141
|
op: exports_external.literal("approval_record"),
|
|
13109
|
-
request_id: exports_external.string().regex(/^[0-9a-f]{
|
|
13142
|
+
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/),
|
|
13110
13143
|
decision: ApprovalDecisionModeSchema,
|
|
13111
13144
|
approver_set: exports_external.array(exports_external.string()),
|
|
13112
13145
|
granted_by_user_id: exports_external.number().int(),
|
|
@@ -13310,6 +13343,73 @@ function stripWireFields(entry) {
|
|
|
13310
13343
|
import * as fs from "node:fs";
|
|
13311
13344
|
import * as os from "node:os";
|
|
13312
13345
|
import * as path from "node:path";
|
|
13346
|
+
|
|
13347
|
+
// src/util/audit-hashchain.ts
|
|
13348
|
+
import { createHash as createHash4 } from "node:crypto";
|
|
13349
|
+
import { openSync as openSync4, readSync, fstatSync as fstatSync2, closeSync as closeSync4 } from "node:fs";
|
|
13350
|
+
var CHAIN_GENESIS = "GENESIS";
|
|
13351
|
+
var SEP = "\x00";
|
|
13352
|
+
function rowHash(prev, seq, rowJsonNoChain) {
|
|
13353
|
+
return createHash4("sha256").update(prev + SEP + String(seq) + SEP + rowJsonNoChain).digest("hex");
|
|
13354
|
+
}
|
|
13355
|
+
function chainRow(state, entry) {
|
|
13356
|
+
const seq = state.seq + 1;
|
|
13357
|
+
const prev = state.lastHash;
|
|
13358
|
+
const entryJson = JSON.stringify(entry);
|
|
13359
|
+
const hash = rowHash(prev, seq, entryJson);
|
|
13360
|
+
const chained = { ...entry, _seq: seq, _prev: prev, _hash: hash };
|
|
13361
|
+
return {
|
|
13362
|
+
line: JSON.stringify(chained) + `
|
|
13363
|
+
`,
|
|
13364
|
+
next: { seq, lastHash: hash }
|
|
13365
|
+
};
|
|
13366
|
+
}
|
|
13367
|
+
function readTail(path, tailBytes = 64 * 1024) {
|
|
13368
|
+
let fd;
|
|
13369
|
+
try {
|
|
13370
|
+
fd = openSync4(path, "r");
|
|
13371
|
+
} catch {
|
|
13372
|
+
return null;
|
|
13373
|
+
}
|
|
13374
|
+
try {
|
|
13375
|
+
const size = fstatSync2(fd).size;
|
|
13376
|
+
if (size === 0)
|
|
13377
|
+
return "";
|
|
13378
|
+
const len = Math.min(size, tailBytes);
|
|
13379
|
+
const buf = Buffer.allocUnsafe(len);
|
|
13380
|
+
readSync(fd, buf, 0, len, size - len);
|
|
13381
|
+
return buf.toString("utf8");
|
|
13382
|
+
} catch {
|
|
13383
|
+
return null;
|
|
13384
|
+
} finally {
|
|
13385
|
+
try {
|
|
13386
|
+
closeSync4(fd);
|
|
13387
|
+
} catch {}
|
|
13388
|
+
}
|
|
13389
|
+
}
|
|
13390
|
+
function seedChain(path) {
|
|
13391
|
+
const tail = readTail(path);
|
|
13392
|
+
if (tail === null || tail === "") {
|
|
13393
|
+
return { seq: 0, lastHash: CHAIN_GENESIS };
|
|
13394
|
+
}
|
|
13395
|
+
const lines = tail.split(`
|
|
13396
|
+
`).filter((l) => l.length > 0);
|
|
13397
|
+
const last = lines[lines.length - 1];
|
|
13398
|
+
if (last !== undefined) {
|
|
13399
|
+
try {
|
|
13400
|
+
const obj = JSON.parse(last);
|
|
13401
|
+
if (typeof obj._seq === "number" && typeof obj._hash === "string" && obj._hash.length > 0) {
|
|
13402
|
+
return { seq: obj._seq, lastHash: obj._hash };
|
|
13403
|
+
}
|
|
13404
|
+
} catch {}
|
|
13405
|
+
}
|
|
13406
|
+
return {
|
|
13407
|
+
seq: 0,
|
|
13408
|
+
lastHash: "CORRUPT-TAIL-" + createHash4("sha256").update(tail).digest("hex").slice(0, 16)
|
|
13409
|
+
};
|
|
13410
|
+
}
|
|
13411
|
+
|
|
13412
|
+
// src/vault/broker/audit-log.ts
|
|
13313
13413
|
function defaultAuditLogPath() {
|
|
13314
13414
|
return path.join(os.homedir(), ".switchroom", "vault-audit.log");
|
|
13315
13415
|
}
|
|
@@ -13321,10 +13421,10 @@ function callerFromPeer(peer) {
|
|
|
13321
13421
|
}
|
|
13322
13422
|
function createAuditLogger(opts = {}) {
|
|
13323
13423
|
const logPath = opts.path ?? defaultAuditLogPath();
|
|
13424
|
+
let chain = seedChain(logPath);
|
|
13324
13425
|
return {
|
|
13325
13426
|
write(entry) {
|
|
13326
|
-
const line =
|
|
13327
|
-
`;
|
|
13427
|
+
const { line, next } = chainRow(chain, entry);
|
|
13328
13428
|
let fd;
|
|
13329
13429
|
try {
|
|
13330
13430
|
fd = fs.openSync(logPath, "a", 384);
|
|
@@ -13335,6 +13435,7 @@ function createAuditLogger(opts = {}) {
|
|
|
13335
13435
|
}
|
|
13336
13436
|
try {
|
|
13337
13437
|
fs.writeSync(fd, line);
|
|
13438
|
+
chain = next;
|
|
13338
13439
|
} catch (err) {
|
|
13339
13440
|
process.stderr.write(`[vault-audit] ERROR: could not write to audit log ${logPath}: ${err.message}
|
|
13340
13441
|
`);
|
|
@@ -13353,7 +13454,7 @@ function createAuditLogger(opts = {}) {
|
|
|
13353
13454
|
// src/vault/grants.ts
|
|
13354
13455
|
import { randomBytes as randomBytes4 } from "node:crypto";
|
|
13355
13456
|
|
|
13356
|
-
// node_modules/.bun/bcryptjs@3.0.3/node_modules/bcryptjs/index.js
|
|
13457
|
+
// ../switchroom/node_modules/.bun/bcryptjs@3.0.3/node_modules/bcryptjs/index.js
|
|
13357
13458
|
import nodeCrypto from "crypto";
|
|
13358
13459
|
var randomFallback = null;
|
|
13359
13460
|
function randomBytes3(len) {
|
|
@@ -15294,7 +15395,7 @@ function canonicalizeApproverSet(approvers) {
|
|
|
15294
15395
|
|
|
15295
15396
|
// src/vault/approvals/kernel.ts
|
|
15296
15397
|
function generateRequestId() {
|
|
15297
|
-
return randomBytes5(
|
|
15398
|
+
return randomBytes5(16).toString("hex");
|
|
15298
15399
|
}
|
|
15299
15400
|
function audit(db, event, fields) {
|
|
15300
15401
|
db.run(`INSERT INTO approval_audit
|
|
@@ -15643,6 +15744,19 @@ class VaultBroker {
|
|
|
15643
15744
|
const secrets = openVault(passphrase, this.vaultPath);
|
|
15644
15745
|
this.secrets = secrets;
|
|
15645
15746
|
this.passphrase = passphrase;
|
|
15747
|
+
this._setReadinessSentinel(true);
|
|
15748
|
+
}
|
|
15749
|
+
_setReadinessSentinel(ready) {
|
|
15750
|
+
const p = process.env.SWITCHROOM_VAULT_BROKER_READY_PATH;
|
|
15751
|
+
if (!p || p.length === 0)
|
|
15752
|
+
return;
|
|
15753
|
+
try {
|
|
15754
|
+
if (ready) {
|
|
15755
|
+
writeFileSync3(p, "", { mode: 384 });
|
|
15756
|
+
} else if (existsSync8(p)) {
|
|
15757
|
+
unlinkSync4(p);
|
|
15758
|
+
}
|
|
15759
|
+
} catch {}
|
|
15646
15760
|
}
|
|
15647
15761
|
lock() {
|
|
15648
15762
|
if (this.secrets !== null) {
|
|
@@ -15656,6 +15770,7 @@ class VaultBroker {
|
|
|
15656
15770
|
this.secrets = null;
|
|
15657
15771
|
}
|
|
15658
15772
|
this.passphrase = null;
|
|
15773
|
+
this._setReadinessSentinel(false);
|
|
15659
15774
|
}
|
|
15660
15775
|
stop() {
|
|
15661
15776
|
this.lock();
|
|
@@ -16861,6 +16976,12 @@ class VaultBroker {
|
|
|
16861
16976
|
const filePath = resolvePath(configuredPath);
|
|
16862
16977
|
if (!existsSync8(filePath))
|
|
16863
16978
|
return false;
|
|
16979
|
+
try {
|
|
16980
|
+
if (statSync4(filePath).size === 0)
|
|
16981
|
+
return false;
|
|
16982
|
+
} catch {
|
|
16983
|
+
return false;
|
|
16984
|
+
}
|
|
16864
16985
|
let passphrase;
|
|
16865
16986
|
try {
|
|
16866
16987
|
passphrase = readAutoUnlockFile(filePath);
|