switchroom 0.11.1 → 0.12.1
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 +32 -16
- package/dist/agent-scheduler/index.js +216 -97
- package/dist/auth-broker/index.js +176 -97
- package/dist/cli/drive-write-pretool.mjs +26 -11
- package/dist/cli/skill-validate-pretool.mjs +7209 -0
- package/dist/cli/switchroom.js +45571 -42642
- package/dist/cli/ui/index.html +1281 -0
- package/dist/host-control/main.js +3628 -309
- package/dist/vault/approvals/kernel-server.js +207 -98
- package/dist/vault/broker/server.js +249 -119
- package/examples/personal-google-workspace-mcp/README.md +8 -3
- package/examples/switchroom.yaml +91 -42
- package/package.json +4 -3
- package/profiles/_base/start.sh.hbs +76 -36
- package/profiles/_shared/agent-self-service.md.hbs +1 -1
- package/profiles/default/CLAUDE.md.hbs +4 -2
- package/skills/file-bug/SKILL.md +6 -4
- package/skills/skill-creator/SKILL.md +52 -0
- package/skills/switchroom-cli/SKILL.md +20 -4
- package/skills/switchroom-install/SKILL.md +3 -3
- package/telegram-plugin/auth-snapshot-format.ts +9 -9
- package/telegram-plugin/card-format.ts +3 -3
- package/telegram-plugin/dist/bridge/bridge.js +112 -112
- package/telegram-plugin/dist/gateway/gateway.js +853 -414
- package/telegram-plugin/dist/server.js +162 -161
- package/telegram-plugin/format.ts +71 -0
- package/telegram-plugin/gateway/access-validator.test.ts +8 -8
- package/telegram-plugin/gateway/access-validator.ts +1 -1
- package/telegram-plugin/gateway/approval-card.test.ts +18 -18
- package/telegram-plugin/gateway/approval-card.ts +1 -1
- package/telegram-plugin/gateway/auth-command.ts +2 -2
- package/telegram-plugin/gateway/boot-card.ts +40 -3
- package/telegram-plugin/gateway/boot-probes.ts +114 -30
- 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 +265 -22
- package/telegram-plugin/gateway/update-announce.ts +167 -0
- package/telegram-plugin/quota-check.ts +0 -195
- package/telegram-plugin/recent-outbound-dedup.ts +1 -1
- package/telegram-plugin/registry/turns-schema.ts +1 -1
- 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 +32 -3
- package/telegram-plugin/tests/auth-command-format2.test.ts +4 -4
- package/telegram-plugin/tests/auth-snapshot-format.test.ts +17 -17
- package/telegram-plugin/tests/auto-fallback-fleet.test.ts +10 -10
- package/telegram-plugin/tests/boot-probes.test.ts +90 -2
- package/telegram-plugin/tests/bot-runtime.test.ts +23 -1
- package/telegram-plugin/tests/fixtures/service-log-current-claude-code.bin +1 -1
- package/telegram-plugin/tests/fleet-state.test.ts +3 -2
- 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/secret-detect-audit.test.ts +1 -1
- package/telegram-plugin/tests/secret-detect-pipeline.test.ts +7 -6
- package/telegram-plugin/tests/secret-detect-suppressor-no-silent-allow.test.ts +6 -5
- package/telegram-plugin/tests/secret-detect.test.ts +8 -8
- package/telegram-plugin/tests/telegram-format.test.ts +84 -1
- package/telegram-plugin/tests/update-announce.test.ts +154 -0
- package/telegram-plugin/tests/vault-grant-inbound-builders.test.ts +8 -8
- package/telegram-plugin/tests/vault-request-access-tool.test.ts +51 -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/zod@3.25.76/node_modules/zod/v3/helpers/util.js
|
|
20
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/util.js
|
|
21
21
|
var util, objectUtil, ZodParsedType, getParsedType = (data) => {
|
|
22
22
|
const t = typeof data;
|
|
23
23
|
switch (t) {
|
|
@@ -148,7 +148,7 @@ var init_util = __esm(() => {
|
|
|
148
148
|
]);
|
|
149
149
|
});
|
|
150
150
|
|
|
151
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/ZodError.js
|
|
151
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/ZodError.js
|
|
152
152
|
var ZodIssueCode, quotelessJson = (obj) => {
|
|
153
153
|
const json = JSON.stringify(obj, null, 2);
|
|
154
154
|
return json.replace(/"([^"]+)":/g, "$1:");
|
|
@@ -269,7 +269,7 @@ var init_ZodError = __esm(() => {
|
|
|
269
269
|
};
|
|
270
270
|
});
|
|
271
271
|
|
|
272
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/locales/en.js
|
|
272
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/locales/en.js
|
|
273
273
|
var errorMap = (issue, _ctx) => {
|
|
274
274
|
let message;
|
|
275
275
|
switch (issue.code) {
|
|
@@ -376,7 +376,7 @@ var init_en = __esm(() => {
|
|
|
376
376
|
en_default = errorMap;
|
|
377
377
|
});
|
|
378
378
|
|
|
379
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/errors.js
|
|
379
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/errors.js
|
|
380
380
|
function setErrorMap(map) {
|
|
381
381
|
overrideErrorMap = map;
|
|
382
382
|
}
|
|
@@ -389,7 +389,7 @@ var init_errors = __esm(() => {
|
|
|
389
389
|
overrideErrorMap = en_default;
|
|
390
390
|
});
|
|
391
391
|
|
|
392
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js
|
|
392
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js
|
|
393
393
|
function addIssueToContext(ctx, issueData) {
|
|
394
394
|
const overrideMap = getErrorMap();
|
|
395
395
|
const issue = makeIssue({
|
|
@@ -494,10 +494,10 @@ var init_parseUtil = __esm(() => {
|
|
|
494
494
|
});
|
|
495
495
|
});
|
|
496
496
|
|
|
497
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js
|
|
497
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js
|
|
498
498
|
var init_typeAliases = () => {};
|
|
499
499
|
|
|
500
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js
|
|
500
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js
|
|
501
501
|
var errorUtil;
|
|
502
502
|
var init_errorUtil = __esm(() => {
|
|
503
503
|
(function(errorUtil2) {
|
|
@@ -506,7 +506,7 @@ var init_errorUtil = __esm(() => {
|
|
|
506
506
|
})(errorUtil || (errorUtil = {}));
|
|
507
507
|
});
|
|
508
508
|
|
|
509
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/types.js
|
|
509
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/types.js
|
|
510
510
|
class ParseInputLazyPath {
|
|
511
511
|
constructor(parent, value, path, key) {
|
|
512
512
|
this._cachedPath = [];
|
|
@@ -3857,7 +3857,7 @@ var init_types = __esm(() => {
|
|
|
3857
3857
|
NEVER = INVALID;
|
|
3858
3858
|
});
|
|
3859
3859
|
|
|
3860
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/v3/external.js
|
|
3860
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/v3/external.js
|
|
3861
3861
|
var exports_external = {};
|
|
3862
3862
|
__export(exports_external, {
|
|
3863
3863
|
void: () => voidType,
|
|
@@ -3977,13 +3977,13 @@ var init_external = __esm(() => {
|
|
|
3977
3977
|
init_ZodError();
|
|
3978
3978
|
});
|
|
3979
3979
|
|
|
3980
|
-
// node_modules/.bun/zod@3.25.76/node_modules/zod/index.js
|
|
3980
|
+
// ../switchroom/node_modules/.bun/zod@3.25.76/node_modules/zod/index.js
|
|
3981
3981
|
var init_zod = __esm(() => {
|
|
3982
3982
|
init_external();
|
|
3983
3983
|
init_external();
|
|
3984
3984
|
});
|
|
3985
3985
|
|
|
3986
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/identity.js
|
|
3986
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/identity.js
|
|
3987
3987
|
var require_identity = __commonJS((exports) => {
|
|
3988
3988
|
var ALIAS = Symbol.for("yaml.alias");
|
|
3989
3989
|
var DOC = Symbol.for("yaml.document");
|
|
@@ -4037,7 +4037,7 @@ var require_identity = __commonJS((exports) => {
|
|
|
4037
4037
|
exports.isSeq = isSeq;
|
|
4038
4038
|
});
|
|
4039
4039
|
|
|
4040
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/visit.js
|
|
4040
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/visit.js
|
|
4041
4041
|
var require_visit = __commonJS((exports) => {
|
|
4042
4042
|
var identity = require_identity();
|
|
4043
4043
|
var BREAK = Symbol("break visit");
|
|
@@ -4192,7 +4192,7 @@ var require_visit = __commonJS((exports) => {
|
|
|
4192
4192
|
exports.visitAsync = visitAsync;
|
|
4193
4193
|
});
|
|
4194
4194
|
|
|
4195
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/directives.js
|
|
4195
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/directives.js
|
|
4196
4196
|
var require_directives = __commonJS((exports) => {
|
|
4197
4197
|
var identity = require_identity();
|
|
4198
4198
|
var visit = require_visit();
|
|
@@ -4344,7 +4344,7 @@ var require_directives = __commonJS((exports) => {
|
|
|
4344
4344
|
exports.Directives = Directives;
|
|
4345
4345
|
});
|
|
4346
4346
|
|
|
4347
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/anchors.js
|
|
4347
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/anchors.js
|
|
4348
4348
|
var require_anchors = __commonJS((exports) => {
|
|
4349
4349
|
var identity = require_identity();
|
|
4350
4350
|
var visit = require_visit();
|
|
@@ -4406,7 +4406,7 @@ var require_anchors = __commonJS((exports) => {
|
|
|
4406
4406
|
exports.findNewAnchor = findNewAnchor;
|
|
4407
4407
|
});
|
|
4408
4408
|
|
|
4409
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/applyReviver.js
|
|
4409
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/applyReviver.js
|
|
4410
4410
|
var require_applyReviver = __commonJS((exports) => {
|
|
4411
4411
|
function applyReviver(reviver, obj, key, val) {
|
|
4412
4412
|
if (val && typeof val === "object") {
|
|
@@ -4453,7 +4453,7 @@ var require_applyReviver = __commonJS((exports) => {
|
|
|
4453
4453
|
exports.applyReviver = applyReviver;
|
|
4454
4454
|
});
|
|
4455
4455
|
|
|
4456
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/toJS.js
|
|
4456
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/toJS.js
|
|
4457
4457
|
var require_toJS = __commonJS((exports) => {
|
|
4458
4458
|
var identity = require_identity();
|
|
4459
4459
|
function toJS(value, arg, ctx) {
|
|
@@ -4480,7 +4480,7 @@ var require_toJS = __commonJS((exports) => {
|
|
|
4480
4480
|
exports.toJS = toJS;
|
|
4481
4481
|
});
|
|
4482
4482
|
|
|
4483
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Node.js
|
|
4483
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Node.js
|
|
4484
4484
|
var require_Node = __commonJS((exports) => {
|
|
4485
4485
|
var applyReviver = require_applyReviver();
|
|
4486
4486
|
var identity = require_identity();
|
|
@@ -4517,7 +4517,7 @@ var require_Node = __commonJS((exports) => {
|
|
|
4517
4517
|
exports.NodeBase = NodeBase;
|
|
4518
4518
|
});
|
|
4519
4519
|
|
|
4520
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Alias.js
|
|
4520
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Alias.js
|
|
4521
4521
|
var require_Alias = __commonJS((exports) => {
|
|
4522
4522
|
var anchors = require_anchors();
|
|
4523
4523
|
var visit = require_visit();
|
|
@@ -4625,7 +4625,7 @@ var require_Alias = __commonJS((exports) => {
|
|
|
4625
4625
|
exports.Alias = Alias;
|
|
4626
4626
|
});
|
|
4627
4627
|
|
|
4628
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Scalar.js
|
|
4628
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Scalar.js
|
|
4629
4629
|
var require_Scalar = __commonJS((exports) => {
|
|
4630
4630
|
var identity = require_identity();
|
|
4631
4631
|
var Node = require_Node();
|
|
@@ -4653,7 +4653,7 @@ var require_Scalar = __commonJS((exports) => {
|
|
|
4653
4653
|
exports.isScalarValue = isScalarValue;
|
|
4654
4654
|
});
|
|
4655
4655
|
|
|
4656
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/createNode.js
|
|
4656
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/createNode.js
|
|
4657
4657
|
var require_createNode = __commonJS((exports) => {
|
|
4658
4658
|
var Alias = require_Alias();
|
|
4659
4659
|
var identity = require_identity();
|
|
@@ -4725,7 +4725,7 @@ var require_createNode = __commonJS((exports) => {
|
|
|
4725
4725
|
exports.createNode = createNode;
|
|
4726
4726
|
});
|
|
4727
4727
|
|
|
4728
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Collection.js
|
|
4728
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Collection.js
|
|
4729
4729
|
var require_Collection = __commonJS((exports) => {
|
|
4730
4730
|
var createNode = require_createNode();
|
|
4731
4731
|
var identity = require_identity();
|
|
@@ -4840,7 +4840,7 @@ var require_Collection = __commonJS((exports) => {
|
|
|
4840
4840
|
exports.isEmptyPath = isEmptyPath;
|
|
4841
4841
|
});
|
|
4842
4842
|
|
|
4843
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyComment.js
|
|
4843
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyComment.js
|
|
4844
4844
|
var require_stringifyComment = __commonJS((exports) => {
|
|
4845
4845
|
var stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, "#");
|
|
4846
4846
|
function indentComment(comment, indent) {
|
|
@@ -4857,7 +4857,7 @@ var require_stringifyComment = __commonJS((exports) => {
|
|
|
4857
4857
|
exports.stringifyComment = stringifyComment;
|
|
4858
4858
|
});
|
|
4859
4859
|
|
|
4860
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/foldFlowLines.js
|
|
4860
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/foldFlowLines.js
|
|
4861
4861
|
var require_foldFlowLines = __commonJS((exports) => {
|
|
4862
4862
|
var FOLD_FLOW = "flow";
|
|
4863
4863
|
var FOLD_BLOCK = "block";
|
|
@@ -4994,7 +4994,7 @@ ${indent}${text.slice(fold + 1, end2)}`;
|
|
|
4994
4994
|
exports.foldFlowLines = foldFlowLines;
|
|
4995
4995
|
});
|
|
4996
4996
|
|
|
4997
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyString.js
|
|
4997
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyString.js
|
|
4998
4998
|
var require_stringifyString = __commonJS((exports) => {
|
|
4999
4999
|
var Scalar = require_Scalar();
|
|
5000
5000
|
var foldFlowLines = require_foldFlowLines();
|
|
@@ -5292,7 +5292,7 @@ ${indent}`);
|
|
|
5292
5292
|
exports.stringifyString = stringifyString;
|
|
5293
5293
|
});
|
|
5294
5294
|
|
|
5295
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringify.js
|
|
5295
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringify.js
|
|
5296
5296
|
var require_stringify = __commonJS((exports) => {
|
|
5297
5297
|
var anchors = require_anchors();
|
|
5298
5298
|
var identity = require_identity();
|
|
@@ -5413,7 +5413,7 @@ ${ctx.indent}${str}`;
|
|
|
5413
5413
|
exports.stringify = stringify;
|
|
5414
5414
|
});
|
|
5415
5415
|
|
|
5416
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyPair.js
|
|
5416
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyPair.js
|
|
5417
5417
|
var require_stringifyPair = __commonJS((exports) => {
|
|
5418
5418
|
var identity = require_identity();
|
|
5419
5419
|
var Scalar = require_Scalar();
|
|
@@ -5549,7 +5549,7 @@ ${ctx.indent}`;
|
|
|
5549
5549
|
exports.stringifyPair = stringifyPair;
|
|
5550
5550
|
});
|
|
5551
5551
|
|
|
5552
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/log.js
|
|
5552
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/log.js
|
|
5553
5553
|
var require_log = __commonJS((exports) => {
|
|
5554
5554
|
var node_process = __require("process");
|
|
5555
5555
|
function debug(logLevel, ...messages) {
|
|
@@ -5568,7 +5568,7 @@ var require_log = __commonJS((exports) => {
|
|
|
5568
5568
|
exports.warn = warn;
|
|
5569
5569
|
});
|
|
5570
5570
|
|
|
5571
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/merge.js
|
|
5571
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/merge.js
|
|
5572
5572
|
var require_merge = __commonJS((exports) => {
|
|
5573
5573
|
var identity = require_identity();
|
|
5574
5574
|
var Scalar = require_Scalar();
|
|
@@ -5622,7 +5622,7 @@ var require_merge = __commonJS((exports) => {
|
|
|
5622
5622
|
exports.merge = merge;
|
|
5623
5623
|
});
|
|
5624
5624
|
|
|
5625
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/addPairToJSMap.js
|
|
5625
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/addPairToJSMap.js
|
|
5626
5626
|
var require_addPairToJSMap = __commonJS((exports) => {
|
|
5627
5627
|
var log = require_log();
|
|
5628
5628
|
var merge = require_merge();
|
|
@@ -5683,7 +5683,7 @@ var require_addPairToJSMap = __commonJS((exports) => {
|
|
|
5683
5683
|
exports.addPairToJSMap = addPairToJSMap;
|
|
5684
5684
|
});
|
|
5685
5685
|
|
|
5686
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Pair.js
|
|
5686
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Pair.js
|
|
5687
5687
|
var require_Pair = __commonJS((exports) => {
|
|
5688
5688
|
var createNode = require_createNode();
|
|
5689
5689
|
var stringifyPair = require_stringifyPair();
|
|
@@ -5721,7 +5721,7 @@ var require_Pair = __commonJS((exports) => {
|
|
|
5721
5721
|
exports.createPair = createPair;
|
|
5722
5722
|
});
|
|
5723
5723
|
|
|
5724
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyCollection.js
|
|
5724
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyCollection.js
|
|
5725
5725
|
var require_stringifyCollection = __commonJS((exports) => {
|
|
5726
5726
|
var identity = require_identity();
|
|
5727
5727
|
var stringify = require_stringify();
|
|
@@ -5873,7 +5873,7 @@ ${indent}${end}`;
|
|
|
5873
5873
|
exports.stringifyCollection = stringifyCollection;
|
|
5874
5874
|
});
|
|
5875
5875
|
|
|
5876
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLMap.js
|
|
5876
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLMap.js
|
|
5877
5877
|
var require_YAMLMap = __commonJS((exports) => {
|
|
5878
5878
|
var stringifyCollection = require_stringifyCollection();
|
|
5879
5879
|
var addPairToJSMap = require_addPairToJSMap();
|
|
@@ -6000,7 +6000,7 @@ var require_YAMLMap = __commonJS((exports) => {
|
|
|
6000
6000
|
exports.findPair = findPair;
|
|
6001
6001
|
});
|
|
6002
6002
|
|
|
6003
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/map.js
|
|
6003
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/map.js
|
|
6004
6004
|
var require_map = __commonJS((exports) => {
|
|
6005
6005
|
var identity = require_identity();
|
|
6006
6006
|
var YAMLMap = require_YAMLMap();
|
|
@@ -6019,7 +6019,7 @@ var require_map = __commonJS((exports) => {
|
|
|
6019
6019
|
exports.map = map;
|
|
6020
6020
|
});
|
|
6021
6021
|
|
|
6022
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLSeq.js
|
|
6022
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLSeq.js
|
|
6023
6023
|
var require_YAMLSeq = __commonJS((exports) => {
|
|
6024
6024
|
var createNode = require_createNode();
|
|
6025
6025
|
var stringifyCollection = require_stringifyCollection();
|
|
@@ -6112,7 +6112,7 @@ var require_YAMLSeq = __commonJS((exports) => {
|
|
|
6112
6112
|
exports.YAMLSeq = YAMLSeq;
|
|
6113
6113
|
});
|
|
6114
6114
|
|
|
6115
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/seq.js
|
|
6115
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/seq.js
|
|
6116
6116
|
var require_seq = __commonJS((exports) => {
|
|
6117
6117
|
var identity = require_identity();
|
|
6118
6118
|
var YAMLSeq = require_YAMLSeq();
|
|
@@ -6131,7 +6131,7 @@ var require_seq = __commonJS((exports) => {
|
|
|
6131
6131
|
exports.seq = seq;
|
|
6132
6132
|
});
|
|
6133
6133
|
|
|
6134
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/string.js
|
|
6134
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/string.js
|
|
6135
6135
|
var require_string = __commonJS((exports) => {
|
|
6136
6136
|
var stringifyString = require_stringifyString();
|
|
6137
6137
|
var string = {
|
|
@@ -6147,7 +6147,7 @@ var require_string = __commonJS((exports) => {
|
|
|
6147
6147
|
exports.string = string;
|
|
6148
6148
|
});
|
|
6149
6149
|
|
|
6150
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/null.js
|
|
6150
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/null.js
|
|
6151
6151
|
var require_null = __commonJS((exports) => {
|
|
6152
6152
|
var Scalar = require_Scalar();
|
|
6153
6153
|
var nullTag = {
|
|
@@ -6162,7 +6162,7 @@ var require_null = __commonJS((exports) => {
|
|
|
6162
6162
|
exports.nullTag = nullTag;
|
|
6163
6163
|
});
|
|
6164
6164
|
|
|
6165
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/bool.js
|
|
6165
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/bool.js
|
|
6166
6166
|
var require_bool = __commonJS((exports) => {
|
|
6167
6167
|
var Scalar = require_Scalar();
|
|
6168
6168
|
var boolTag = {
|
|
@@ -6183,7 +6183,7 @@ var require_bool = __commonJS((exports) => {
|
|
|
6183
6183
|
exports.boolTag = boolTag;
|
|
6184
6184
|
});
|
|
6185
6185
|
|
|
6186
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyNumber.js
|
|
6186
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyNumber.js
|
|
6187
6187
|
var require_stringifyNumber = __commonJS((exports) => {
|
|
6188
6188
|
function stringifyNumber({ format, minFractionDigits, tag, value }) {
|
|
6189
6189
|
if (typeof value === "bigint")
|
|
@@ -6207,7 +6207,7 @@ var require_stringifyNumber = __commonJS((exports) => {
|
|
|
6207
6207
|
exports.stringifyNumber = stringifyNumber;
|
|
6208
6208
|
});
|
|
6209
6209
|
|
|
6210
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/float.js
|
|
6210
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/float.js
|
|
6211
6211
|
var require_float = __commonJS((exports) => {
|
|
6212
6212
|
var Scalar = require_Scalar();
|
|
6213
6213
|
var stringifyNumber = require_stringifyNumber();
|
|
@@ -6250,7 +6250,7 @@ var require_float = __commonJS((exports) => {
|
|
|
6250
6250
|
exports.floatNaN = floatNaN;
|
|
6251
6251
|
});
|
|
6252
6252
|
|
|
6253
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/int.js
|
|
6253
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/int.js
|
|
6254
6254
|
var require_int = __commonJS((exports) => {
|
|
6255
6255
|
var stringifyNumber = require_stringifyNumber();
|
|
6256
6256
|
var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
|
|
@@ -6292,7 +6292,7 @@ var require_int = __commonJS((exports) => {
|
|
|
6292
6292
|
exports.intOct = intOct;
|
|
6293
6293
|
});
|
|
6294
6294
|
|
|
6295
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/schema.js
|
|
6295
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/schema.js
|
|
6296
6296
|
var require_schema = __commonJS((exports) => {
|
|
6297
6297
|
var map = require_map();
|
|
6298
6298
|
var _null = require_null();
|
|
@@ -6317,7 +6317,7 @@ var require_schema = __commonJS((exports) => {
|
|
|
6317
6317
|
exports.schema = schema;
|
|
6318
6318
|
});
|
|
6319
6319
|
|
|
6320
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/json/schema.js
|
|
6320
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/json/schema.js
|
|
6321
6321
|
var require_schema2 = __commonJS((exports) => {
|
|
6322
6322
|
var Scalar = require_Scalar();
|
|
6323
6323
|
var map = require_map();
|
|
@@ -6381,7 +6381,7 @@ var require_schema2 = __commonJS((exports) => {
|
|
|
6381
6381
|
exports.schema = schema;
|
|
6382
6382
|
});
|
|
6383
6383
|
|
|
6384
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/binary.js
|
|
6384
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/binary.js
|
|
6385
6385
|
var require_binary = __commonJS((exports) => {
|
|
6386
6386
|
var node_buffer = __require("buffer");
|
|
6387
6387
|
var Scalar = require_Scalar();
|
|
@@ -6436,7 +6436,7 @@ var require_binary = __commonJS((exports) => {
|
|
|
6436
6436
|
exports.binary = binary;
|
|
6437
6437
|
});
|
|
6438
6438
|
|
|
6439
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
|
|
6439
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
|
|
6440
6440
|
var require_pairs = __commonJS((exports) => {
|
|
6441
6441
|
var identity = require_identity();
|
|
6442
6442
|
var Pair = require_Pair();
|
|
@@ -6511,7 +6511,7 @@ ${cn.comment}` : item.comment;
|
|
|
6511
6511
|
exports.resolvePairs = resolvePairs;
|
|
6512
6512
|
});
|
|
6513
6513
|
|
|
6514
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/omap.js
|
|
6514
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/omap.js
|
|
6515
6515
|
var require_omap = __commonJS((exports) => {
|
|
6516
6516
|
var identity = require_identity();
|
|
6517
6517
|
var toJS = require_toJS();
|
|
@@ -6583,7 +6583,7 @@ var require_omap = __commonJS((exports) => {
|
|
|
6583
6583
|
exports.omap = omap;
|
|
6584
6584
|
});
|
|
6585
6585
|
|
|
6586
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/bool.js
|
|
6586
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/bool.js
|
|
6587
6587
|
var require_bool2 = __commonJS((exports) => {
|
|
6588
6588
|
var Scalar = require_Scalar();
|
|
6589
6589
|
function boolStringify({ value, source }, ctx) {
|
|
@@ -6612,7 +6612,7 @@ var require_bool2 = __commonJS((exports) => {
|
|
|
6612
6612
|
exports.trueTag = trueTag;
|
|
6613
6613
|
});
|
|
6614
6614
|
|
|
6615
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/float.js
|
|
6615
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/float.js
|
|
6616
6616
|
var require_float2 = __commonJS((exports) => {
|
|
6617
6617
|
var Scalar = require_Scalar();
|
|
6618
6618
|
var stringifyNumber = require_stringifyNumber();
|
|
@@ -6658,7 +6658,7 @@ var require_float2 = __commonJS((exports) => {
|
|
|
6658
6658
|
exports.floatNaN = floatNaN;
|
|
6659
6659
|
});
|
|
6660
6660
|
|
|
6661
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/int.js
|
|
6661
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/int.js
|
|
6662
6662
|
var require_int2 = __commonJS((exports) => {
|
|
6663
6663
|
var stringifyNumber = require_stringifyNumber();
|
|
6664
6664
|
var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
|
|
@@ -6734,7 +6734,7 @@ var require_int2 = __commonJS((exports) => {
|
|
|
6734
6734
|
exports.intOct = intOct;
|
|
6735
6735
|
});
|
|
6736
6736
|
|
|
6737
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/set.js
|
|
6737
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/set.js
|
|
6738
6738
|
var require_set = __commonJS((exports) => {
|
|
6739
6739
|
var identity = require_identity();
|
|
6740
6740
|
var Pair = require_Pair();
|
|
@@ -6817,7 +6817,7 @@ var require_set = __commonJS((exports) => {
|
|
|
6817
6817
|
exports.set = set;
|
|
6818
6818
|
});
|
|
6819
6819
|
|
|
6820
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
|
|
6820
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
|
|
6821
6821
|
var require_timestamp = __commonJS((exports) => {
|
|
6822
6822
|
var stringifyNumber = require_stringifyNumber();
|
|
6823
6823
|
function parseSexagesimal(str, asBigInt) {
|
|
@@ -6899,7 +6899,7 @@ var require_timestamp = __commonJS((exports) => {
|
|
|
6899
6899
|
exports.timestamp = timestamp;
|
|
6900
6900
|
});
|
|
6901
6901
|
|
|
6902
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/schema.js
|
|
6902
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/schema.js
|
|
6903
6903
|
var require_schema3 = __commonJS((exports) => {
|
|
6904
6904
|
var map = require_map();
|
|
6905
6905
|
var _null = require_null();
|
|
@@ -6940,7 +6940,7 @@ var require_schema3 = __commonJS((exports) => {
|
|
|
6940
6940
|
exports.schema = schema;
|
|
6941
6941
|
});
|
|
6942
6942
|
|
|
6943
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/tags.js
|
|
6943
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/tags.js
|
|
6944
6944
|
var require_tags = __commonJS((exports) => {
|
|
6945
6945
|
var map = require_map();
|
|
6946
6946
|
var _null = require_null();
|
|
@@ -7031,7 +7031,7 @@ var require_tags = __commonJS((exports) => {
|
|
|
7031
7031
|
exports.getTags = getTags;
|
|
7032
7032
|
});
|
|
7033
7033
|
|
|
7034
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/Schema.js
|
|
7034
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/Schema.js
|
|
7035
7035
|
var require_Schema = __commonJS((exports) => {
|
|
7036
7036
|
var identity = require_identity();
|
|
7037
7037
|
var map = require_map();
|
|
@@ -7061,7 +7061,7 @@ var require_Schema = __commonJS((exports) => {
|
|
|
7061
7061
|
exports.Schema = Schema;
|
|
7062
7062
|
});
|
|
7063
7063
|
|
|
7064
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyDocument.js
|
|
7064
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyDocument.js
|
|
7065
7065
|
var require_stringifyDocument = __commonJS((exports) => {
|
|
7066
7066
|
var identity = require_identity();
|
|
7067
7067
|
var stringify = require_stringify();
|
|
@@ -7141,7 +7141,7 @@ var require_stringifyDocument = __commonJS((exports) => {
|
|
|
7141
7141
|
exports.stringifyDocument = stringifyDocument;
|
|
7142
7142
|
});
|
|
7143
7143
|
|
|
7144
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/Document.js
|
|
7144
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/Document.js
|
|
7145
7145
|
var require_Document = __commonJS((exports) => {
|
|
7146
7146
|
var Alias = require_Alias();
|
|
7147
7147
|
var Collection = require_Collection();
|
|
@@ -7376,7 +7376,7 @@ var require_Document = __commonJS((exports) => {
|
|
|
7376
7376
|
exports.Document = Document;
|
|
7377
7377
|
});
|
|
7378
7378
|
|
|
7379
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/errors.js
|
|
7379
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/errors.js
|
|
7380
7380
|
var require_errors = __commonJS((exports) => {
|
|
7381
7381
|
class YAMLError extends Error {
|
|
7382
7382
|
constructor(name, pos, code, message) {
|
|
@@ -7441,7 +7441,7 @@ ${pointer}
|
|
|
7441
7441
|
exports.prettifyError = prettifyError;
|
|
7442
7442
|
});
|
|
7443
7443
|
|
|
7444
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-props.js
|
|
7444
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-props.js
|
|
7445
7445
|
var require_resolve_props = __commonJS((exports) => {
|
|
7446
7446
|
function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
|
|
7447
7447
|
let spaceBefore = false;
|
|
@@ -7571,7 +7571,7 @@ var require_resolve_props = __commonJS((exports) => {
|
|
|
7571
7571
|
exports.resolveProps = resolveProps;
|
|
7572
7572
|
});
|
|
7573
7573
|
|
|
7574
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-contains-newline.js
|
|
7574
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-contains-newline.js
|
|
7575
7575
|
var require_util_contains_newline = __commonJS((exports) => {
|
|
7576
7576
|
function containsNewline(key) {
|
|
7577
7577
|
if (!key)
|
|
@@ -7611,7 +7611,7 @@ var require_util_contains_newline = __commonJS((exports) => {
|
|
|
7611
7611
|
exports.containsNewline = containsNewline;
|
|
7612
7612
|
});
|
|
7613
7613
|
|
|
7614
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-flow-indent-check.js
|
|
7614
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-flow-indent-check.js
|
|
7615
7615
|
var require_util_flow_indent_check = __commonJS((exports) => {
|
|
7616
7616
|
var utilContainsNewline = require_util_contains_newline();
|
|
7617
7617
|
function flowIndentCheck(indent, fc, onError) {
|
|
@@ -7626,7 +7626,7 @@ var require_util_flow_indent_check = __commonJS((exports) => {
|
|
|
7626
7626
|
exports.flowIndentCheck = flowIndentCheck;
|
|
7627
7627
|
});
|
|
7628
7628
|
|
|
7629
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-map-includes.js
|
|
7629
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-map-includes.js
|
|
7630
7630
|
var require_util_map_includes = __commonJS((exports) => {
|
|
7631
7631
|
var identity = require_identity();
|
|
7632
7632
|
function mapIncludes(ctx, items, search) {
|
|
@@ -7639,7 +7639,7 @@ var require_util_map_includes = __commonJS((exports) => {
|
|
|
7639
7639
|
exports.mapIncludes = mapIncludes;
|
|
7640
7640
|
});
|
|
7641
7641
|
|
|
7642
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-map.js
|
|
7642
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-map.js
|
|
7643
7643
|
var require_resolve_block_map = __commonJS((exports) => {
|
|
7644
7644
|
var Pair = require_Pair();
|
|
7645
7645
|
var YAMLMap = require_YAMLMap();
|
|
@@ -7746,7 +7746,7 @@ var require_resolve_block_map = __commonJS((exports) => {
|
|
|
7746
7746
|
exports.resolveBlockMap = resolveBlockMap;
|
|
7747
7747
|
});
|
|
7748
7748
|
|
|
7749
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-seq.js
|
|
7749
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-seq.js
|
|
7750
7750
|
var require_resolve_block_seq = __commonJS((exports) => {
|
|
7751
7751
|
var YAMLSeq = require_YAMLSeq();
|
|
7752
7752
|
var resolveProps = require_resolve_props();
|
|
@@ -7794,7 +7794,7 @@ var require_resolve_block_seq = __commonJS((exports) => {
|
|
|
7794
7794
|
exports.resolveBlockSeq = resolveBlockSeq;
|
|
7795
7795
|
});
|
|
7796
7796
|
|
|
7797
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-end.js
|
|
7797
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-end.js
|
|
7798
7798
|
var require_resolve_end = __commonJS((exports) => {
|
|
7799
7799
|
function resolveEnd(end, offset, reqSpace, onError) {
|
|
7800
7800
|
let comment = "";
|
|
@@ -7834,7 +7834,7 @@ var require_resolve_end = __commonJS((exports) => {
|
|
|
7834
7834
|
exports.resolveEnd = resolveEnd;
|
|
7835
7835
|
});
|
|
7836
7836
|
|
|
7837
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-collection.js
|
|
7837
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-collection.js
|
|
7838
7838
|
var require_resolve_flow_collection = __commonJS((exports) => {
|
|
7839
7839
|
var identity = require_identity();
|
|
7840
7840
|
var Pair = require_Pair();
|
|
@@ -8025,7 +8025,7 @@ var require_resolve_flow_collection = __commonJS((exports) => {
|
|
|
8025
8025
|
exports.resolveFlowCollection = resolveFlowCollection;
|
|
8026
8026
|
});
|
|
8027
8027
|
|
|
8028
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-collection.js
|
|
8028
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-collection.js
|
|
8029
8029
|
var require_compose_collection = __commonJS((exports) => {
|
|
8030
8030
|
var identity = require_identity();
|
|
8031
8031
|
var Scalar = require_Scalar();
|
|
@@ -8087,7 +8087,7 @@ var require_compose_collection = __commonJS((exports) => {
|
|
|
8087
8087
|
exports.composeCollection = composeCollection;
|
|
8088
8088
|
});
|
|
8089
8089
|
|
|
8090
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-scalar.js
|
|
8090
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-scalar.js
|
|
8091
8091
|
var require_resolve_block_scalar = __commonJS((exports) => {
|
|
8092
8092
|
var Scalar = require_Scalar();
|
|
8093
8093
|
function resolveBlockScalar(ctx, scalar, onError) {
|
|
@@ -8280,7 +8280,7 @@ var require_resolve_block_scalar = __commonJS((exports) => {
|
|
|
8280
8280
|
exports.resolveBlockScalar = resolveBlockScalar;
|
|
8281
8281
|
});
|
|
8282
8282
|
|
|
8283
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-scalar.js
|
|
8283
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-scalar.js
|
|
8284
8284
|
var require_resolve_flow_scalar = __commonJS((exports) => {
|
|
8285
8285
|
var Scalar = require_Scalar();
|
|
8286
8286
|
var resolveEnd = require_resolve_end();
|
|
@@ -8496,7 +8496,7 @@ var require_resolve_flow_scalar = __commonJS((exports) => {
|
|
|
8496
8496
|
exports.resolveFlowScalar = resolveFlowScalar;
|
|
8497
8497
|
});
|
|
8498
8498
|
|
|
8499
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-scalar.js
|
|
8499
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-scalar.js
|
|
8500
8500
|
var require_compose_scalar = __commonJS((exports) => {
|
|
8501
8501
|
var identity = require_identity();
|
|
8502
8502
|
var Scalar = require_Scalar();
|
|
@@ -8574,7 +8574,7 @@ var require_compose_scalar = __commonJS((exports) => {
|
|
|
8574
8574
|
exports.composeScalar = composeScalar;
|
|
8575
8575
|
});
|
|
8576
8576
|
|
|
8577
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-empty-scalar-position.js
|
|
8577
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-empty-scalar-position.js
|
|
8578
8578
|
var require_util_empty_scalar_position = __commonJS((exports) => {
|
|
8579
8579
|
function emptyScalarPosition(offset, before, pos) {
|
|
8580
8580
|
if (before) {
|
|
@@ -8601,7 +8601,7 @@ var require_util_empty_scalar_position = __commonJS((exports) => {
|
|
|
8601
8601
|
exports.emptyScalarPosition = emptyScalarPosition;
|
|
8602
8602
|
});
|
|
8603
8603
|
|
|
8604
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-node.js
|
|
8604
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-node.js
|
|
8605
8605
|
var require_compose_node = __commonJS((exports) => {
|
|
8606
8606
|
var Alias = require_Alias();
|
|
8607
8607
|
var identity = require_identity();
|
|
@@ -8704,7 +8704,7 @@ var require_compose_node = __commonJS((exports) => {
|
|
|
8704
8704
|
exports.composeNode = composeNode;
|
|
8705
8705
|
});
|
|
8706
8706
|
|
|
8707
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-doc.js
|
|
8707
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-doc.js
|
|
8708
8708
|
var require_compose_doc = __commonJS((exports) => {
|
|
8709
8709
|
var Document = require_Document();
|
|
8710
8710
|
var composeNode = require_compose_node();
|
|
@@ -8744,7 +8744,7 @@ var require_compose_doc = __commonJS((exports) => {
|
|
|
8744
8744
|
exports.composeDoc = composeDoc;
|
|
8745
8745
|
});
|
|
8746
8746
|
|
|
8747
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/composer.js
|
|
8747
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/composer.js
|
|
8748
8748
|
var require_composer = __commonJS((exports) => {
|
|
8749
8749
|
var node_process = __require("process");
|
|
8750
8750
|
var directives = require_directives();
|
|
@@ -8933,7 +8933,7 @@ ${end.comment}` : end.comment;
|
|
|
8933
8933
|
exports.Composer = Composer;
|
|
8934
8934
|
});
|
|
8935
8935
|
|
|
8936
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-scalar.js
|
|
8936
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-scalar.js
|
|
8937
8937
|
var require_cst_scalar = __commonJS((exports) => {
|
|
8938
8938
|
var resolveBlockScalar = require_resolve_block_scalar();
|
|
8939
8939
|
var resolveFlowScalar = require_resolve_flow_scalar();
|
|
@@ -9123,7 +9123,7 @@ var require_cst_scalar = __commonJS((exports) => {
|
|
|
9123
9123
|
exports.setScalarValue = setScalarValue;
|
|
9124
9124
|
});
|
|
9125
9125
|
|
|
9126
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-stringify.js
|
|
9126
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-stringify.js
|
|
9127
9127
|
var require_cst_stringify = __commonJS((exports) => {
|
|
9128
9128
|
var stringify = (cst) => ("type" in cst) ? stringifyToken(cst) : stringifyItem(cst);
|
|
9129
9129
|
function stringifyToken(token) {
|
|
@@ -9181,7 +9181,7 @@ var require_cst_stringify = __commonJS((exports) => {
|
|
|
9181
9181
|
exports.stringify = stringify;
|
|
9182
9182
|
});
|
|
9183
9183
|
|
|
9184
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-visit.js
|
|
9184
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-visit.js
|
|
9185
9185
|
var require_cst_visit = __commonJS((exports) => {
|
|
9186
9186
|
var BREAK = Symbol("break visit");
|
|
9187
9187
|
var SKIP = Symbol("skip children");
|
|
@@ -9240,7 +9240,7 @@ var require_cst_visit = __commonJS((exports) => {
|
|
|
9240
9240
|
exports.visit = visit;
|
|
9241
9241
|
});
|
|
9242
9242
|
|
|
9243
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst.js
|
|
9243
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst.js
|
|
9244
9244
|
var require_cst = __commonJS((exports) => {
|
|
9245
9245
|
var cstScalar = require_cst_scalar();
|
|
9246
9246
|
var cstStringify = require_cst_stringify();
|
|
@@ -9341,7 +9341,7 @@ var require_cst = __commonJS((exports) => {
|
|
|
9341
9341
|
exports.tokenType = tokenType;
|
|
9342
9342
|
});
|
|
9343
9343
|
|
|
9344
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/lexer.js
|
|
9344
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/lexer.js
|
|
9345
9345
|
var require_lexer = __commonJS((exports) => {
|
|
9346
9346
|
var cst = require_cst();
|
|
9347
9347
|
function isEmpty(ch) {
|
|
@@ -9927,7 +9927,7 @@ var require_lexer = __commonJS((exports) => {
|
|
|
9927
9927
|
exports.Lexer = Lexer;
|
|
9928
9928
|
});
|
|
9929
9929
|
|
|
9930
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/line-counter.js
|
|
9930
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/line-counter.js
|
|
9931
9931
|
var require_line_counter = __commonJS((exports) => {
|
|
9932
9932
|
class LineCounter {
|
|
9933
9933
|
constructor() {
|
|
@@ -9955,7 +9955,7 @@ var require_line_counter = __commonJS((exports) => {
|
|
|
9955
9955
|
exports.LineCounter = LineCounter;
|
|
9956
9956
|
});
|
|
9957
9957
|
|
|
9958
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/parser.js
|
|
9958
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/parser.js
|
|
9959
9959
|
var require_parser = __commonJS((exports) => {
|
|
9960
9960
|
var node_process = __require("process");
|
|
9961
9961
|
var cst = require_cst();
|
|
@@ -10804,7 +10804,7 @@ var require_parser = __commonJS((exports) => {
|
|
|
10804
10804
|
exports.Parser = Parser;
|
|
10805
10805
|
});
|
|
10806
10806
|
|
|
10807
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/public-api.js
|
|
10807
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/public-api.js
|
|
10808
10808
|
var require_public_api = __commonJS((exports) => {
|
|
10809
10809
|
var composer = require_composer();
|
|
10810
10810
|
var Document = require_Document();
|
|
@@ -10898,7 +10898,7 @@ var require_public_api = __commonJS((exports) => {
|
|
|
10898
10898
|
exports.stringify = stringify;
|
|
10899
10899
|
});
|
|
10900
10900
|
|
|
10901
|
-
// node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/index.js
|
|
10901
|
+
// ../switchroom/node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/index.js
|
|
10902
10902
|
var composer, Document, Schema, errors2, Alias, identity, Pair, Scalar, YAMLMap, YAMLSeq, cst, lexer, lineCounter, parser, publicApi, visit, $Composer, $Document, $Schema, $YAMLError, $YAMLParseError, $YAMLWarning, $Alias, $isAlias, $isCollection, $isDocument, $isMap, $isNode, $isPair, $isScalar, $isSeq, $Pair, $Scalar, $YAMLMap, $YAMLSeq, $Lexer, $LineCounter, $Parser, $parse, $parseAllDocuments, $parseDocument, $stringify, $visit, $visitAsync;
|
|
10903
10903
|
var init_dist = __esm(() => {
|
|
10904
10904
|
composer = require_composer();
|
|
@@ -10948,7 +10948,7 @@ var init_dist = __esm(() => {
|
|
|
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."),
|
|
@@ -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({
|
|
@@ -11326,6 +11340,13 @@ import { resolve } 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 (!existsSync(absolute)) {
|
|
11337
11358
|
const legacy = resolve(h, LEGACY_STATE_DIR, frag);
|
|
11338
|
-
if (existsSync(legacy))
|
|
11359
|
+
if (existsSync(legacy)) {
|
|
11360
|
+
warnLegacyStateOnce(legacy);
|
|
11339
11361
|
return legacy;
|
|
11362
|
+
}
|
|
11340
11363
|
}
|
|
11341
11364
|
}
|
|
11342
11365
|
return absolute;
|
|
11343
11366
|
}
|
|
11344
11367
|
return resolve(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
|
|
@@ -11717,7 +11740,7 @@ var ApprovalLookupRequestSchema = exports_external.object({
|
|
|
11717
11740
|
var ApprovalConsumeRequestSchema = exports_external.object({
|
|
11718
11741
|
v: exports_external.literal(1),
|
|
11719
11742
|
op: exports_external.literal("approval_consume"),
|
|
11720
|
-
request_id: exports_external.string().regex(/^[0-9a-f]{
|
|
11743
|
+
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/)
|
|
11721
11744
|
});
|
|
11722
11745
|
var ApprovalRevokeRequestSchema = exports_external.object({
|
|
11723
11746
|
v: exports_external.literal(1),
|
|
@@ -11741,7 +11764,7 @@ var ApprovalDecisionModeSchema = exports_external.enum([
|
|
|
11741
11764
|
var ApprovalRecordRequestSchema = exports_external.object({
|
|
11742
11765
|
v: exports_external.literal(1),
|
|
11743
11766
|
op: exports_external.literal("approval_record"),
|
|
11744
|
-
request_id: exports_external.string().regex(/^[0-9a-f]{
|
|
11767
|
+
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/),
|
|
11745
11768
|
decision: ApprovalDecisionModeSchema,
|
|
11746
11769
|
approver_set: exports_external.array(exports_external.string()),
|
|
11747
11770
|
granted_by_user_id: exports_external.number().int(),
|
|
@@ -11999,7 +12022,7 @@ var DEFAULT_MAX_TTL_LIFETIME_MS = 7 * 24 * 60 * 60 * 1000;
|
|
|
11999
12022
|
|
|
12000
12023
|
// src/vault/approvals/kernel.ts
|
|
12001
12024
|
function generateRequestId() {
|
|
12002
|
-
return randomBytes(
|
|
12025
|
+
return randomBytes(16).toString("hex");
|
|
12003
12026
|
}
|
|
12004
12027
|
function audit(db, event, fields) {
|
|
12005
12028
|
db.run(`INSERT INTO approval_audit
|
|
@@ -12257,6 +12280,10 @@ function listDecisions(db, filter, now = Date.now()) {
|
|
|
12257
12280
|
const rows = db.query(sql).all(...params);
|
|
12258
12281
|
return rows.map(rowToDecision);
|
|
12259
12282
|
}
|
|
12283
|
+
function getDecision(db, id) {
|
|
12284
|
+
const row = db.query(`SELECT * FROM approval_decisions WHERE id = ?`).get(id);
|
|
12285
|
+
return row ? rowToDecision(row) : null;
|
|
12286
|
+
}
|
|
12260
12287
|
function getNonce(db, request_id) {
|
|
12261
12288
|
const row = db.query(`SELECT * FROM approval_nonces WHERE request_id = ?`).get(request_id);
|
|
12262
12289
|
return row ? nonceFromRow(row) : null;
|
|
@@ -12352,8 +12379,8 @@ function mergeAgentConfig(defaultsIn, agentIn) {
|
|
|
12352
12379
|
if (defaults.dangerous_mode !== undefined && merged.dangerous_mode === undefined) {
|
|
12353
12380
|
merged.dangerous_mode = defaults.dangerous_mode;
|
|
12354
12381
|
}
|
|
12355
|
-
if (defaults.
|
|
12356
|
-
merged.
|
|
12382
|
+
if (defaults.network_isolation !== undefined && merged.network_isolation === undefined) {
|
|
12383
|
+
merged.network_isolation = defaults.network_isolation;
|
|
12357
12384
|
}
|
|
12358
12385
|
if (defaults.thinking_effort !== undefined && merged.thinking_effort === undefined) {
|
|
12359
12386
|
merged.thinking_effort = defaults.thinking_effort;
|
|
@@ -12473,6 +12500,9 @@ function mergeAgentConfig(defaultsIn, agentIn) {
|
|
|
12473
12500
|
}
|
|
12474
12501
|
merged.session_continuity = combined;
|
|
12475
12502
|
}
|
|
12503
|
+
if (merged.release === undefined && defaults.release !== undefined) {
|
|
12504
|
+
merged.release = defaults.release;
|
|
12505
|
+
}
|
|
12476
12506
|
if (defaults.channels || merged.channels) {
|
|
12477
12507
|
const dChan = defaults.channels ?? {};
|
|
12478
12508
|
const aChan = merged.channels ?? {};
|
|
@@ -12714,7 +12744,47 @@ async function bindAgentSocket(parentDir, agent, db) {
|
|
|
12714
12744
|
});
|
|
12715
12745
|
});
|
|
12716
12746
|
}
|
|
12717
|
-
function
|
|
12747
|
+
async function bindOperatorSocket(parentDir, operatorUid, db) {
|
|
12748
|
+
const dir = resolve4(parentDir, KERNEL_OPERATOR_NAME);
|
|
12749
|
+
mkdirSync(dir, { recursive: true, mode: 448 });
|
|
12750
|
+
try {
|
|
12751
|
+
chownSync(dir, 0, 0);
|
|
12752
|
+
} catch {}
|
|
12753
|
+
try {
|
|
12754
|
+
chmodSync(dir, 448);
|
|
12755
|
+
} catch {}
|
|
12756
|
+
const socketPath = resolve4(dir, "sock");
|
|
12757
|
+
if (existsSync4(socketPath)) {
|
|
12758
|
+
try {
|
|
12759
|
+
unlinkSync(socketPath);
|
|
12760
|
+
} catch (err) {
|
|
12761
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
12762
|
+
process.stderr.write(`[kernel] could not unlink stale operator socket sock=${socketPath}: ${msg}
|
|
12763
|
+
`);
|
|
12764
|
+
}
|
|
12765
|
+
}
|
|
12766
|
+
return new Promise((resolveP, rejectP) => {
|
|
12767
|
+
const server = net.createServer((sock) => handleConnection(sock, KERNEL_OPERATOR_NAME, db, true));
|
|
12768
|
+
server.on("error", (err) => {
|
|
12769
|
+
process.stderr.write(`[kernel] listen error operator sock=${socketPath}: ${err.message}
|
|
12770
|
+
`);
|
|
12771
|
+
rejectP(err);
|
|
12772
|
+
});
|
|
12773
|
+
server.listen(socketPath, () => {
|
|
12774
|
+
try {
|
|
12775
|
+
chmodSync(socketPath, 384);
|
|
12776
|
+
} catch {}
|
|
12777
|
+
try {
|
|
12778
|
+
chownSync(socketPath, operatorUid, operatorUid);
|
|
12779
|
+
} catch {}
|
|
12780
|
+
try {
|
|
12781
|
+
chownSync(dir, operatorUid, operatorUid);
|
|
12782
|
+
} catch {}
|
|
12783
|
+
resolveP({ agent: KERNEL_OPERATOR_NAME, socketPath, server });
|
|
12784
|
+
});
|
|
12785
|
+
});
|
|
12786
|
+
}
|
|
12787
|
+
function handleConnection(socket, agent, db, isOperator = false) {
|
|
12718
12788
|
let peerUid = null;
|
|
12719
12789
|
try {
|
|
12720
12790
|
const fd = socket._handle?.fd;
|
|
@@ -12746,7 +12816,7 @@ function handleConnection(socket, agent, db) {
|
|
|
12746
12816
|
continue;
|
|
12747
12817
|
}
|
|
12748
12818
|
try {
|
|
12749
|
-
handleRequest(socket, req, agent, db, peerUid);
|
|
12819
|
+
handleRequest(socket, req, agent, db, peerUid, isOperator);
|
|
12750
12820
|
} catch (err) {
|
|
12751
12821
|
socket.write(encodeResponse(errorResponse("INTERNAL", err.message)));
|
|
12752
12822
|
}
|
|
@@ -12754,7 +12824,13 @@ function handleConnection(socket, agent, db) {
|
|
|
12754
12824
|
});
|
|
12755
12825
|
socket.on("error", () => {});
|
|
12756
12826
|
}
|
|
12757
|
-
|
|
12827
|
+
var KERNEL_OPERATOR_NAME = "operator";
|
|
12828
|
+
var OPERATOR_ALLOWED_OPS = new Set(["approval_list"]);
|
|
12829
|
+
function handleRequest(socket, req, agent, db, peerUid, isOperator = false) {
|
|
12830
|
+
if (isOperator && !OPERATOR_ALLOWED_OPS.has(req.op)) {
|
|
12831
|
+
socket.write(encodeResponse(errorResponse("DENIED", `kernel operator socket is read-only: '${req.op}' is not permitted (only ${[...OPERATOR_ALLOWED_OPS].join(", ")})`)));
|
|
12832
|
+
return;
|
|
12833
|
+
}
|
|
12758
12834
|
if (req.op === "approval_request") {
|
|
12759
12835
|
const acl = checkApprovalAclByAgent(agent, req.agent_unit);
|
|
12760
12836
|
if (!acl.allow) {
|
|
@@ -12816,6 +12892,14 @@ function handleRequest(socket, req, agent, db, peerUid) {
|
|
|
12816
12892
|
return;
|
|
12817
12893
|
}
|
|
12818
12894
|
if (req.op === "approval_consume") {
|
|
12895
|
+
const peek = getNonce(db, req.request_id);
|
|
12896
|
+
if (peek !== null) {
|
|
12897
|
+
const acl = checkApprovalAclByAgent(agent, peek.agent_unit);
|
|
12898
|
+
if (!acl.allow) {
|
|
12899
|
+
socket.write(encodeResponse(errorResponse("DENIED", "approval_consume denied: nonce does not belong to the calling agent")));
|
|
12900
|
+
return;
|
|
12901
|
+
}
|
|
12902
|
+
}
|
|
12819
12903
|
const nonce = consumeNonce(db, req.request_id);
|
|
12820
12904
|
if (nonce === null) {
|
|
12821
12905
|
socket.write(encodeResponse({ ok: true, consumed: false }));
|
|
@@ -12832,6 +12916,14 @@ function handleRequest(socket, req, agent, db, peerUid) {
|
|
|
12832
12916
|
return;
|
|
12833
12917
|
}
|
|
12834
12918
|
if (req.op === "approval_revoke") {
|
|
12919
|
+
const dec = getDecision(db, req.decision_id);
|
|
12920
|
+
if (dec !== null) {
|
|
12921
|
+
const acl = checkApprovalAclByAgent(agent, dec.agent_unit);
|
|
12922
|
+
if (!acl.allow) {
|
|
12923
|
+
socket.write(encodeResponse(errorResponse("DENIED", "approval_revoke denied: decision does not belong to the calling agent")));
|
|
12924
|
+
return;
|
|
12925
|
+
}
|
|
12926
|
+
}
|
|
12835
12927
|
const revoked = revokeDecision(db, req.decision_id, req.actor, req.reason);
|
|
12836
12928
|
socket.write(encodeResponse({ ok: true, revoked }));
|
|
12837
12929
|
return;
|
|
@@ -12846,6 +12938,11 @@ function handleRequest(socket, req, agent, db, peerUid) {
|
|
|
12846
12938
|
socket.write(encodeResponse(errorResponse("BAD_REQUEST", "nonce must be consumed before recording — call approval_consume first")));
|
|
12847
12939
|
return;
|
|
12848
12940
|
}
|
|
12941
|
+
const recordAcl = checkApprovalAclByAgent(agent, nonce.agent_unit);
|
|
12942
|
+
if (!recordAcl.allow) {
|
|
12943
|
+
socket.write(encodeResponse(errorResponse("DENIED", "approval_record denied: nonce does not belong to the calling agent")));
|
|
12944
|
+
return;
|
|
12945
|
+
}
|
|
12849
12946
|
const decision_id = recordDecision(db, {
|
|
12850
12947
|
nonce,
|
|
12851
12948
|
decision: req.decision,
|
|
@@ -12888,6 +12985,12 @@ async function bootstrap(opts) {
|
|
|
12888
12985
|
const l = await bindAgentSocket(opts.socketParent, agent, db);
|
|
12889
12986
|
listeners.push(l);
|
|
12890
12987
|
}
|
|
12988
|
+
if (opts.operatorUid !== undefined) {
|
|
12989
|
+
const l = await bindOperatorSocket(opts.socketParent, opts.operatorUid, db);
|
|
12990
|
+
listeners.push(l);
|
|
12991
|
+
process.stdout.write(`approval-kernel: operator socket bound at ${l.socketPath} (read-only: approval_list)
|
|
12992
|
+
`);
|
|
12993
|
+
}
|
|
12891
12994
|
return {
|
|
12892
12995
|
listeners,
|
|
12893
12996
|
db,
|
|
@@ -12912,10 +13015,14 @@ async function main() {
|
|
|
12912
13015
|
const socketParent = dirname(resolve4(socketEnv));
|
|
12913
13016
|
const dbPath = process.env.SWITCHROOM_KERNEL_DB_PATH ?? DEFAULT_DB_PATH;
|
|
12914
13017
|
const configPath = process.env.SWITCHROOM_CONFIG;
|
|
13018
|
+
const operatorUidRaw = process.env.SWITCHROOM_KERNEL_OPERATOR_UID;
|
|
13019
|
+
const operatorUid = operatorUidRaw && /^\d+$/.test(operatorUidRaw) ? Number(operatorUidRaw) : undefined;
|
|
12915
13020
|
let agents = [];
|
|
12916
13021
|
try {
|
|
12917
13022
|
if (existsSync4(socketParent)) {
|
|
12918
13023
|
agents = readdirSync2(socketParent).filter((name) => {
|
|
13024
|
+
if (name === KERNEL_OPERATOR_NAME)
|
|
13025
|
+
return false;
|
|
12919
13026
|
try {
|
|
12920
13027
|
const p = resolve4(socketParent, name);
|
|
12921
13028
|
return statSync2(p).isDirectory();
|
|
@@ -12978,7 +13085,7 @@ async function main() {
|
|
|
12978
13085
|
});
|
|
12979
13086
|
return;
|
|
12980
13087
|
}
|
|
12981
|
-
const handle = await bootstrap({ socketParent, agents, dbPath });
|
|
13088
|
+
const handle = await bootstrap({ socketParent, agents, dbPath, operatorUid });
|
|
12982
13089
|
for (const l of handle.listeners) {
|
|
12983
13090
|
process.stdout.write(`approval-kernel: listening agent=${l.agent} sock=${l.socketPath}
|
|
12984
13091
|
`);
|
|
@@ -13008,5 +13115,7 @@ if (import.meta.url === `file://${process.argv[1]}` && /(?:^|[/\\])(?:vault[/\\]
|
|
|
13008
13115
|
}
|
|
13009
13116
|
export {
|
|
13010
13117
|
openKernelDb,
|
|
13011
|
-
main
|
|
13118
|
+
main,
|
|
13119
|
+
bootstrap,
|
|
13120
|
+
KERNEL_OPERATOR_NAME
|
|
13012
13121
|
};
|