From 1e1e1dfcae9e8ec4deffaa64d40acdecfec64627 Mon Sep 17 00:00:00 2001 From: "rayson951005@gmail.com" Date: Fri, 26 Jun 2026 20:14:14 +0800 Subject: [PATCH] =?UTF-8?q?docs(fix):=20=E4=BF=AE=E6=AD=A3=E6=96=87?= =?UTF-8?q?=E6=A1=A3/UX=20=E5=A4=B1=E5=AE=9E=20bug=20=E2=80=94=20=E6=88=90?= =?UTF-8?q?=E5=91=98=E5=88=B6=E6=8E=88=E6=9D=83/hooks/=E6=89=8B=E5=86=8C/p?= =?UTF-8?q?rintHelp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复审计发现的 4 处文档与实际实现不符的问题: 1. docs/10 §2:删除「broker subscribe 不做成员校验」的过时声明(实际 broker.ts 在 subscribe 和 publish 路径均有 isMember 门控,closed-by-default, fail-closed);改为如实描述三层鉴权(Tailscale ACL + PSK + 成员制授权)。 2. docs/09 附录C:修正 hooks.json 示例 —— 钩子类型从 TaskCompleted(Claude Code 不存在此类型)改为 Stop;命令从 abg publish --from-hook 改为 bash "${CLAUDE_PLUGIN_ROOT}/scripts/publish-completion.sh"; 删除不存在的 async/timeout 字段。与 plugins/agentbridge/hooks/hooks.json 对齐。 3. docs/manual/使用手册.md + manual-en.md: a) 将 abg install:global(不存在的 abg 子命令)改为 bun run install:global。 b) §3.3(b) 跨机 auth 流程标注 ⚠️ 当前不通:abg auth login 在本机自签新 token, 但 broker 只认 broker 机 collab.db 里的 token(本机自签 → 4401); 标注手动 workaround + 正式 CLI 在 feat/v3-xnet-onboarding 中。 4. src/cli.ts printHelp:补全已实现但遗漏的 room add 和 room remove 子命令描述。 --- fix(docs): correct stale doc/UX bugs — membership auth, hooks, manual, printHelp 1. docs/10 §2: remove false claim "broker subscribe skips room membership check" (broker.ts gates both subscribe and publish on isMember, closed-by-default, fail-closed); restate accurate three-layer auth model. 2. docs/09 Appendix C: fix hooks.json example — hook type TaskCompleted (which does not exist in Claude Code) → Stop; command → actual script path; drop non-existent async/timeout fields. Aligned with real hooks.json. 3. manual (ZH + EN): fix abg install:global (invalid subcommand) → bun run install:global; mark §3.3(b) cross-machine auth as ⚠️ currently broken (self-signed local token unknown to broker → 4401); add workaround note. 4. src/cli.ts printHelp: add missing room add/remove subcommand descriptions. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_012rhWKm1VUSnEVxmjpYwNfc --- ...73\347\273\237\350\247\204\346\240\274.md" | 20 +- ...62\344\270\216\350\277\220\347\273\264.md" | 3 +- docs/manual/manual-en.md | 12 +- docs/manual/manual.html | 3 +- ...77\347\224\250\346\211\213\345\206\214.md" | 11 +- docs/test-plans/13-acceptance.md | 2 +- plugins/agentbridge/server/bridge-server.js | 212 +++++++++--------- plugins/agentbridge/server/daemon.js | 4 +- src/cli.ts | 5 +- 9 files changed, 144 insertions(+), 128 deletions(-) diff --git "a/docs/09-v3\345\215\217\344\275\234\347\263\273\347\273\237\350\247\204\346\240\274.md" "b/docs/09-v3\345\215\217\344\275\234\347\263\273\347\273\237\350\247\204\346\240\274.md" index e45a126..127fd12 100644 --- "a/docs/09-v3\345\215\217\344\275\234\347\263\273\347\273\237\350\247\204\346\240\274.md" +++ "b/docs/09-v3\345\215\217\344\275\234\347\263\273\347\273\237\350\247\204\346\240\274.md" @@ -145,7 +145,7 @@ adapter 暴露成 `abg send --to ` 或 MCP 工具一个 `to` 参数。 新增事件类型,结构化字段(见附录 A schema):`summary`(一句话人类可读)、`repo`、`branch`、`commit?`、`contract?`、`unblocks?`(房间内相关性高亮用)。 -- **发布侧**:复用 `plugins/agentbridge/hooks/hooks.json`,把 agent 完成钩子(Claude `TaskCompleted`/`Stop`、Cursor `stop`、OpenCode `session.idle`……)接到 `abg publish`,干完自动发进当前 room。再补 MCP 工具 `announce` 作为 agent 主动宣布的手动路径。 +- **发布侧**:复用 `plugins/agentbridge/hooks/hooks.json`,把 agent 完成钩子(Claude `Stop`、Cursor `stop`、OpenCode `session.idle`……)接到 `abg publish`,干完自动发进当前 room。再补 MCP 工具 `announce` 作为 agent 主动宣布的手动路径。 - **订阅侧**:复用现有 channel 推送(`claude-adapter.ts`)/ `turn/start` 注入(`codex-adapter.ts`),新增对该事件类型的分支。 - **完成的判断权(MVP)**:默认 agent 钩子触发 = **软通知**("一轮结束"≠"真完成",仅作进度);可选由人确认 `abg done` 下硬判断。**不做 CI 背书那一档**(与跨 room 一起砍,见第 10 节)。 - **噪音控制(重要)**:多人多 agent 下每个 `Stop` 都发会刷屏。`abg publish` 内必须做**去重 + 节流**(如同一 `(agentId, repo, branch)` 短时间窗内合并、空内容轮次不发),附录 C 说明。 @@ -509,17 +509,21 @@ interface TaskCompletedEvent { ```jsonc { "hooks": { - "TaskCompleted": [ - { "hooks": [ { - "type": "command", - "command": "abg publish --from-hook", // 组装 task_completed 发进当前 room;自身不应再触发发布(防回环) - "async": true, "timeout": 30 - } ] } + "Stop": [ + { + "matcher": "*", + "hooks": [ + { + "type": "command", + "command": "bash \"${CLAUDE_PLUGIN_ROOT}/scripts/publish-completion.sh\"" + } + ] + } ] } } ``` -> 无 `TaskCompleted` 的 agent 退用其完成钩子(Cursor `stop`、OpenCode `session.idle`),并在 `abg publish` 内做**去重/节流**,避免把每轮普通回复当"完成"广播。 +> Claude Code 实际使用 `Stop` 钩子(**每轮 Claude 停止响应时触发**,非会话终结);`TaskCompleted` 在 Claude Code 中**不存在**。命令通过 `publish-completion.sh` 脚本组装并发布完成事件,内置去重/节流,避免每轮普通回复都广播。字段 `async`/`timeout` 不属于 Claude Code hooks.json 规范,不需要填写。 ## 附录 D:Adapter 接口(Edge 层每个 agent 实现) diff --git "a/docs/10-\350\267\250\347\275\221\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264.md" "b/docs/10-\350\267\250\347\275\221\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264.md" index d02668a..86882d2 100644 --- "a/docs/10-\350\267\250\347\275\221\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264.md" +++ "b/docs/10-\350\267\250\347\275\221\351\203\250\347\275\262\344\270\216\350\277\220\347\273\264.md" @@ -22,7 +22,7 @@ 1. **网络层(Tailscale ACL)**:设备没打 `tag:agent` → 连 `100.x:4700` 直接被 tailnet ACL 拒,WS 都建立不起来。 2. **应用层(broker PSK)**:已在 tailnet 内的设备,仍需 `abg auth login` 签发的 token;握手失败 broker 直接 4401 关连接,且从不回显 token。 -> 🔸 **重要边界:鉴权 ≠ room 授权**。当前 MVP 是「单团队、共享 tailnet、扁平信任」模型——broker 的 `subscribe` 不做 room 成员校验,**任何通过 PSK 的身份能订阅任意 room**。ACL 限的是"哪些设备能碰 broker",**限不了一个 token 能进哪些 room**(per-room 授权是 §11.2 演进档)。别误以为 ACL/PSK 提供了房间级隔离。 +> 🔐 **三层叠加**:Tailscale ACL(设备层)+ PSK(应用层连接)+ **成员制授权**(room 层)。broker 的 `subscribe` 和 `publish` 都经过 `isMember` 门控,**非成员一律拒绝(closed-by-default,fail-closed)**;被 `abg room remove` 踢出后,存活订阅在下次成员复检(≤ 缓存 TTL,默认 3s)时被驱逐——窃听窗口 ≤ 3s,不再到断连为止。 --- @@ -63,6 +63,7 @@ abg broker start --host 100.x.y.z --port 4700 abg auth login --id --name <显示名> # → 打印 token ``` +- ⚠️ **必须在 broker 机上跑**:token 签进**本机** store,而 broker 只认**自己** store 里的 token。边机自己跑 `abg auth login` 自签的 token broker **不认(4401)**。跨机正确做法是在 broker 机为每个参与者签发 + 带外分发——真正的一条龙 `abg auth issue`(broker 侧签发)/ `abg auth login --token`(边机安装)/ `abg room invite` **正在实现**;在那之前跨机靠 broker 机签发 + 边机手动写 `/auth-token`。 - token 落 `/auth-token`(0600)+ `collab.db`(0700 目录);broker 从不回显。 - **带外分发**(IM / 密码器),勿提交 git。 - ⚠️ **目前没有 revoke/rotation CLI**:泄漏的 PSK 永久有效。临时手段=换 token 重签 + 清理旧库(token hashing at rest / revoke 列入 backlog)。 diff --git a/docs/manual/manual-en.md b/docs/manual/manual-en.md index e03c490..c62fe72 100644 --- a/docs/manual/manual-en.md +++ b/docs/manual/manual-en.md @@ -28,7 +28,7 @@ **Release install:** ```bash -abg install:global # install/update the global abg + agentbridge commands + plugin +bun run install:global # install/update the global abg + agentbridge commands + plugin ``` **Testing (from the repo):** @@ -112,8 +112,14 @@ Distribute each person's token **out of band** (IM / password manager; never com # (a) point at the remote broker (Tailscale 100.x or MagicDNS) export AGENTBRIDGE_BROKER_URL=ws://100.x.y.z:4700/ws -# (b) place the admin-issued token (abg auth login writes it locally) -abg auth login --id bob@team.dev --name Bob # local login state +# (b) ⚠️ Cross-machine auth is NOT yet functional — do NOT follow this step +# Problem: abg auth login creates a brand-new self-signed token locally, but the +# broker only accepts tokens already in its own collab.db store; a locally-created +# token is unknown to the broker → connection rejected with 4401. +# Current workaround: the admin issues the token on the broker machine (§3.2(b)), +# delivers it out-of-band, and the participant writes it into /auth-token +# on their machine (path shown by `abg doctor`). +# ⚠️ A proper `abg auth issue` / `abg auth login --token` command is in progress (feat/v3-xnet-onboarding). # (c) map the current working directory to the room (auto-joins this dir next time) abg join checkout diff --git a/docs/manual/manual.html b/docs/manual/manual.html index ddd8582..8ca3c9a 100644 --- a/docs/manual/manual.html +++ b/docs/manual/manual.html @@ -65,7 +65,7 @@

0 · 5 分钟理解0 · Understand

1 · 安装1 · Install

运行时是 Bun。正式发布后:Runtime is Bun. After release:

-
abg install:global   # 安装/更新全局命令 + 插件install/update global commands + plugin
+
bun run install:global   # 安装/更新全局命令 + 插件install/update global commands + plugin

测试期(从仓库):During testing (from the repo):

bun install
 bun run build:cli
@@ -104,6 +104,7 @@ 

② 每台参与者机:连 broker + 落 token + 起 agent abg join checkout # 关联当前目录→房间map cwd → room abg claude # 或 abg codexor abg codex abg init

+

⚠️ 注意:上面的 abg auth login --id 跨机当前不通——边机自签的 token 不在 broker 机的库里,会被拒(4401)。正在补 abg auth issue(broker 侧签发)+ abg auth login --token(边机安装)+ abg room invite 一条龙;在那之前跨机请按 docs/10 的手动流程。⚠️ The abg auth login --id step above does NOT work cross-machine yet (an edge-signed token isn't in the broker's store → 4401); a real onboarding flow is being added.

diff --git "a/docs/manual/\344\275\277\347\224\250\346\211\213\345\206\214.md" "b/docs/manual/\344\275\277\347\224\250\346\211\213\345\206\214.md" index e20216b..41ec1e6 100644 --- "a/docs/manual/\344\275\277\347\224\250\346\211\213\345\206\214.md" +++ "b/docs/manual/\344\275\277\347\224\250\346\211\213\345\206\214.md" @@ -28,7 +28,7 @@ **正式安装(发布后)**: ```bash -abg install:global # 安装/更新全局 abg + agentbridge 命令 + 插件 +bun run install:global # 安装/更新全局 abg + agentbridge 命令 + 插件 ``` **测试期(从仓库)**: @@ -112,9 +112,12 @@ abg room list # 看所有房间 # (a) 指向远程 broker(Tailscale 100.x 或 MagicDNS) export AGENTBRIDGE_BROKER_URL=ws://100.x.y.z:4700/ws -# (b) 放入管理员发来的 token(abg auth login 写本地,或直接落 auth-token 文件) -abg auth login --id bob@team.dev --name Bob # 本机登录态 -# (token 与 broker 端一致即可被鉴权) +# (b) ⚠️ 跨机 auth 当前不通,勿照此操作 +# 问题:abg auth login 在本机自签新 token,但 broker 只认 broker 机 collab.db 里的 token; +# 本机自签的 token 不在 broker store → 连接时收到 4401 鉴权失败。 +# 当前手动流程:由管理员在 broker 机上签发 token(§3.2(b)),带外发给参与者, +# 手动写入参与者机的 /auth-token 文件(路径见 abg doctor 输出)。 +# ⚠️ 正式的 abg auth issue / abg auth login --token 子命令尚在开发中,见 feat/v3-xnet-onboarding。 # (c) 把当前工作目录关联到房间(今后该目录自动加入) abg join checkout diff --git a/docs/test-plans/13-acceptance.md b/docs/test-plans/13-acceptance.md index 3db2ab3..73fb964 100644 --- a/docs/test-plans/13-acceptance.md +++ b/docs/test-plans/13-acceptance.md @@ -55,4 +55,4 @@ docker compose -f docker/docker-compose.scenario.yml logs -f ## 真·三机(后续) -家里机 + 公司 MacBook + Mac mini 的真实跨机测试:先在各机装 v3 build(建议合并后 `abg install:global`)、各机 `abg auth login` + 同房间、一台 `abg broker start --host 100.x`、起真实 Claude 会话。步骤见 [docs/10](../10-跨网部署与运维.md)。 +家里机 + 公司 MacBook + Mac mini 的真实跨机测试:先在各机装 v3 build(建议合并后 `bun run install:global`)、一台 `abg broker start --host 100.x`、**在 broker 机**为各参与者签发 token(⚠️ 边机自己 `abg auth login` 自签的 token broker 不认 4401;跨机签发/安装的 `abg auth issue` / `auth login --token` / `room invite` 一条龙正在实现)、参与者带外拿 token + join 同房间、起真实 Claude 会话。步骤见 [docs/10](../10-跨网部署与运维.md)。 diff --git a/plugins/agentbridge/server/bridge-server.js b/plugins/agentbridge/server/bridge-server.js index ae4455f..00d3e02 100755 --- a/plugins/agentbridge/server/bridge-server.js +++ b/plugins/agentbridge/server/bridge-server.js @@ -45,7 +45,7 @@ var __export = (target, all) => { }); }; -// node_modules/ajv/dist/compile/codegen/code.js +// ../../../node_modules/ajv/dist/compile/codegen/code.js var require_code = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = undefined; @@ -199,7 +199,7 @@ var require_code = __commonJS((exports) => { exports.regexpCode = regexpCode; }); -// node_modules/ajv/dist/compile/codegen/scope.js +// ../../../node_modules/ajv/dist/compile/codegen/scope.js var require_scope = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = undefined; @@ -345,7 +345,7 @@ var require_scope = __commonJS((exports) => { exports.ValueScope = ValueScope; }); -// node_modules/ajv/dist/compile/codegen/index.js +// ../../../node_modules/ajv/dist/compile/codegen/index.js var require_codegen = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = undefined; @@ -1055,7 +1055,7 @@ var require_codegen = __commonJS((exports) => { } }); -// node_modules/ajv/dist/compile/util.js +// ../../../node_modules/ajv/dist/compile/util.js var require_util = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = undefined; @@ -1219,7 +1219,7 @@ var require_util = __commonJS((exports) => { exports.checkStrictMode = checkStrictMode; }); -// node_modules/ajv/dist/compile/names.js +// ../../../node_modules/ajv/dist/compile/names.js var require_names = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -1244,7 +1244,7 @@ var require_names = __commonJS((exports) => { exports.default = names; }); -// node_modules/ajv/dist/compile/errors.js +// ../../../node_modules/ajv/dist/compile/errors.js var require_errors = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = undefined; @@ -1362,7 +1362,7 @@ var require_errors = __commonJS((exports) => { } }); -// node_modules/ajv/dist/compile/validate/boolSchema.js +// ../../../node_modules/ajv/dist/compile/validate/boolSchema.js var require_boolSchema = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.boolOrEmptySchema = exports.topBoolOrEmptySchema = undefined; @@ -1410,7 +1410,7 @@ var require_boolSchema = __commonJS((exports) => { } }); -// node_modules/ajv/dist/compile/rules.js +// ../../../node_modules/ajv/dist/compile/rules.js var require_rules = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getRules = exports.isJSONType = undefined; @@ -1438,7 +1438,7 @@ var require_rules = __commonJS((exports) => { exports.getRules = getRules; }); -// node_modules/ajv/dist/compile/validate/applicability.js +// ../../../node_modules/ajv/dist/compile/validate/applicability.js var require_applicability = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = undefined; @@ -1458,7 +1458,7 @@ var require_applicability = __commonJS((exports) => { exports.shouldUseRule = shouldUseRule; }); -// node_modules/ajv/dist/compile/validate/dataType.js +// ../../../node_modules/ajv/dist/compile/validate/dataType.js var require_dataType = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = undefined; @@ -1639,7 +1639,7 @@ var require_dataType = __commonJS((exports) => { } }); -// node_modules/ajv/dist/compile/validate/defaults.js +// ../../../node_modules/ajv/dist/compile/validate/defaults.js var require_defaults = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.assignDefaults = undefined; @@ -1673,7 +1673,7 @@ var require_defaults = __commonJS((exports) => { } }); -// node_modules/ajv/dist/vocabularies/code.js +// ../../../node_modules/ajv/dist/vocabularies/code.js var require_code2 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = undefined; @@ -1802,7 +1802,7 @@ var require_code2 = __commonJS((exports) => { exports.validateUnion = validateUnion; }); -// node_modules/ajv/dist/compile/validate/keyword.js +// ../../../node_modules/ajv/dist/compile/validate/keyword.js var require_keyword = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = undefined; @@ -1917,7 +1917,7 @@ var require_keyword = __commonJS((exports) => { exports.validateKeywordUsage = validateKeywordUsage; }); -// node_modules/ajv/dist/compile/validate/subschema.js +// ../../../node_modules/ajv/dist/compile/validate/subschema.js var require_subschema = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = undefined; @@ -1997,7 +1997,7 @@ var require_subschema = __commonJS((exports) => { exports.extendSubschemaMode = extendSubschemaMode; }); -// node_modules/fast-deep-equal/index.js +// ../../../node_modules/fast-deep-equal/index.js var require_fast_deep_equal = __commonJS((exports, module) => { module.exports = function equal(a, b) { if (a === b) @@ -2039,7 +2039,7 @@ var require_fast_deep_equal = __commonJS((exports, module) => { }; }); -// node_modules/json-schema-traverse/index.js +// ../../../node_modules/json-schema-traverse/index.js var require_json_schema_traverse = __commonJS((exports, module) => { var traverse = module.exports = function(schema, opts, cb) { if (typeof opts == "function") { @@ -2122,7 +2122,7 @@ var require_json_schema_traverse = __commonJS((exports, module) => { } }); -// node_modules/ajv/dist/compile/resolve.js +// ../../../node_modules/ajv/dist/compile/resolve.js var require_resolve = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = undefined; @@ -2275,7 +2275,7 @@ var require_resolve = __commonJS((exports) => { exports.getSchemaRefs = getSchemaRefs; }); -// node_modules/ajv/dist/compile/validate/index.js +// ../../../node_modules/ajv/dist/compile/validate/index.js var require_validate = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getData = exports.KeywordCxt = exports.validateFunctionCode = undefined; @@ -2780,7 +2780,7 @@ var require_validate = __commonJS((exports) => { exports.getData = getData; }); -// node_modules/ajv/dist/runtime/validation_error.js +// ../../../node_modules/ajv/dist/runtime/validation_error.js var require_validation_error = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); @@ -2794,7 +2794,7 @@ var require_validation_error = __commonJS((exports) => { exports.default = ValidationError; }); -// node_modules/ajv/dist/compile/ref_error.js +// ../../../node_modules/ajv/dist/compile/ref_error.js var require_ref_error = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var resolve_1 = require_resolve(); @@ -2809,7 +2809,7 @@ var require_ref_error = __commonJS((exports) => { exports.default = MissingRefError; }); -// node_modules/ajv/dist/compile/index.js +// ../../../node_modules/ajv/dist/compile/index.js var require_compile = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = undefined; @@ -3030,7 +3030,7 @@ var require_compile = __commonJS((exports) => { } }); -// node_modules/ajv/dist/refs/data.json +// ../../../node_modules/ajv/dist/refs/data.json var require_data = __commonJS((exports, module) => { module.exports = { $id: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#", @@ -3047,7 +3047,7 @@ var require_data = __commonJS((exports, module) => { }; }); -// node_modules/fast-uri/lib/utils.js +// ../../../node_modules/fast-uri/lib/utils.js var require_utils = __commonJS((exports, module) => { var isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu); var isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u); @@ -3302,7 +3302,7 @@ var require_utils = __commonJS((exports, module) => { }; }); -// node_modules/fast-uri/lib/schemes.js +// ../../../node_modules/fast-uri/lib/schemes.js var require_schemes = __commonJS((exports, module) => { var { isUUID } = require_utils(); var URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu; @@ -3476,7 +3476,7 @@ var require_schemes = __commonJS((exports, module) => { }; }); -// node_modules/fast-uri/index.js +// ../../../node_modules/fast-uri/index.js var require_fast_uri = __commonJS((exports, module) => { var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require_utils(); var { SCHEMES, getSchemeHandler } = require_schemes(); @@ -3727,7 +3727,7 @@ var require_fast_uri = __commonJS((exports, module) => { module.exports.fastUri = fastUri; }); -// node_modules/ajv/dist/runtime/uri.js +// ../../../node_modules/ajv/dist/runtime/uri.js var require_uri = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var uri = require_fast_uri(); @@ -3735,7 +3735,7 @@ var require_uri = __commonJS((exports) => { exports.default = uri; }); -// node_modules/ajv/dist/core.js +// ../../../node_modules/ajv/dist/core.js var require_core = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = undefined; @@ -4328,7 +4328,7 @@ var require_core = __commonJS((exports) => { } }); -// node_modules/ajv/dist/vocabularies/core/id.js +// ../../../node_modules/ajv/dist/vocabularies/core/id.js var require_id = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var def = { @@ -4340,7 +4340,7 @@ var require_id = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/core/ref.js +// ../../../node_modules/ajv/dist/vocabularies/core/ref.js var require_ref = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.callRef = exports.getValidate = undefined; @@ -4459,7 +4459,7 @@ var require_ref = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/core/index.js +// ../../../node_modules/ajv/dist/vocabularies/core/index.js var require_core2 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var id_1 = require_id(); @@ -4477,7 +4477,7 @@ var require_core2 = __commonJS((exports) => { exports.default = core2; }); -// node_modules/ajv/dist/vocabularies/validation/limitNumber.js +// ../../../node_modules/ajv/dist/vocabularies/validation/limitNumber.js var require_limitNumber = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -4506,7 +4506,7 @@ var require_limitNumber = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/validation/multipleOf.js +// ../../../node_modules/ajv/dist/vocabularies/validation/multipleOf.js var require_multipleOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -4531,7 +4531,7 @@ var require_multipleOf = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/runtime/ucs2length.js +// ../../../node_modules/ajv/dist/runtime/ucs2length.js var require_ucs2length = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); function ucs2length(str) { @@ -4554,7 +4554,7 @@ var require_ucs2length = __commonJS((exports) => { ucs2length.code = 'require("ajv/dist/runtime/ucs2length").default'; }); -// node_modules/ajv/dist/vocabularies/validation/limitLength.js +// ../../../node_modules/ajv/dist/vocabularies/validation/limitLength.js var require_limitLength = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -4583,7 +4583,7 @@ var require_limitLength = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/validation/pattern.js +// ../../../node_modules/ajv/dist/vocabularies/validation/pattern.js var require_pattern = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); @@ -4617,7 +4617,7 @@ var require_pattern = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/validation/limitProperties.js +// ../../../node_modules/ajv/dist/vocabularies/validation/limitProperties.js var require_limitProperties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -4643,7 +4643,7 @@ var require_limitProperties = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/validation/required.js +// ../../../node_modules/ajv/dist/vocabularies/validation/required.js var require_required = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); @@ -4722,7 +4722,7 @@ var require_required = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/validation/limitItems.js +// ../../../node_modules/ajv/dist/vocabularies/validation/limitItems.js var require_limitItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -4748,7 +4748,7 @@ var require_limitItems = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/runtime/equal.js +// ../../../node_modules/ajv/dist/runtime/equal.js var require_equal = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var equal = require_fast_deep_equal(); @@ -4756,7 +4756,7 @@ var require_equal = __commonJS((exports) => { exports.default = equal; }); -// node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +// ../../../node_modules/ajv/dist/vocabularies/validation/uniqueItems.js var require_uniqueItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var dataType_1 = require_dataType(); @@ -4820,7 +4820,7 @@ var require_uniqueItems = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/validation/const.js +// ../../../node_modules/ajv/dist/vocabularies/validation/const.js var require_const = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -4846,7 +4846,7 @@ var require_const = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/validation/enum.js +// ../../../node_modules/ajv/dist/vocabularies/validation/enum.js var require_enum = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -4892,7 +4892,7 @@ var require_enum = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/validation/index.js +// ../../../node_modules/ajv/dist/vocabularies/validation/index.js var require_validation = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var limitNumber_1 = require_limitNumber(); @@ -4922,7 +4922,7 @@ var require_validation = __commonJS((exports) => { exports.default = validation; }); -// node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/additionalItems.js var require_additionalItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateAdditionalItems = undefined; @@ -4972,7 +4972,7 @@ var require_additionalItems = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/items.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/items.js var require_items = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateTuple = undefined; @@ -5026,7 +5026,7 @@ var require_items = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/prefixItems.js var require_prefixItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var items_1 = require_items(); @@ -5040,7 +5040,7 @@ var require_prefixItems = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/items2020.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/items2020.js var require_items2020 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -5072,7 +5072,7 @@ var require_items2020 = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/contains.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/contains.js var require_contains = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -5163,7 +5163,7 @@ var require_contains = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/dependencies.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/dependencies.js var require_dependencies = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = undefined; @@ -5248,7 +5248,7 @@ var require_dependencies = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/propertyNames.js var require_propertyNames = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -5288,7 +5288,7 @@ var require_propertyNames = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js var require_additionalProperties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); @@ -5391,7 +5391,7 @@ var require_additionalProperties = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/properties.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/properties.js var require_properties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var validate_1 = require_validate(); @@ -5446,7 +5446,7 @@ var require_properties = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/patternProperties.js var require_patternProperties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); @@ -5517,7 +5517,7 @@ var require_patternProperties = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/not.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/not.js var require_not = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); @@ -5545,7 +5545,7 @@ var require_not = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/anyOf.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/anyOf.js var require_anyOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); @@ -5559,7 +5559,7 @@ var require_anyOf = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/oneOf.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/oneOf.js var require_oneOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -5614,7 +5614,7 @@ var require_oneOf = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/allOf.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/allOf.js var require_allOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); @@ -5638,7 +5638,7 @@ var require_allOf = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/if.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/if.js var require_if = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -5704,7 +5704,7 @@ var require_if = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/thenElse.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/thenElse.js var require_thenElse = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); @@ -5719,7 +5719,7 @@ var require_thenElse = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/applicator/index.js +// ../../../node_modules/ajv/dist/vocabularies/applicator/index.js var require_applicator = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var additionalItems_1 = require_additionalItems(); @@ -5762,7 +5762,7 @@ var require_applicator = __commonJS((exports) => { exports.default = getApplicator; }); -// node_modules/ajv/dist/vocabularies/format/format.js +// ../../../node_modules/ajv/dist/vocabularies/format/format.js var require_format = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -5849,7 +5849,7 @@ var require_format = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/vocabularies/format/index.js +// ../../../node_modules/ajv/dist/vocabularies/format/index.js var require_format2 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var format_1 = require_format(); @@ -5857,7 +5857,7 @@ var require_format2 = __commonJS((exports) => { exports.default = format; }); -// node_modules/ajv/dist/vocabularies/metadata.js +// ../../../node_modules/ajv/dist/vocabularies/metadata.js var require_metadata = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.contentVocabulary = exports.metadataVocabulary = undefined; @@ -5877,7 +5877,7 @@ var require_metadata = __commonJS((exports) => { ]; }); -// node_modules/ajv/dist/vocabularies/draft7.js +// ../../../node_modules/ajv/dist/vocabularies/draft7.js var require_draft7 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require_core2(); @@ -5896,7 +5896,7 @@ var require_draft7 = __commonJS((exports) => { exports.default = draft7Vocabularies; }); -// node_modules/ajv/dist/vocabularies/discriminator/types.js +// ../../../node_modules/ajv/dist/vocabularies/discriminator/types.js var require_types = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.DiscrError = undefined; @@ -5907,7 +5907,7 @@ var require_types = __commonJS((exports) => { })(DiscrError || (exports.DiscrError = DiscrError = {})); }); -// node_modules/ajv/dist/vocabularies/discriminator/index.js +// ../../../node_modules/ajv/dist/vocabularies/discriminator/index.js var require_discriminator = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); @@ -6009,7 +6009,7 @@ var require_discriminator = __commonJS((exports) => { exports.default = def; }); -// node_modules/ajv/dist/refs/json-schema-draft-07.json +// ../../../node_modules/ajv/dist/refs/json-schema-draft-07.json var require_json_schema_draft_07 = __commonJS((exports, module) => { module.exports = { $schema: "http://json-schema.org/draft-07/schema#", @@ -6164,7 +6164,7 @@ var require_json_schema_draft_07 = __commonJS((exports, module) => { }; }); -// node_modules/ajv/dist/ajv.js +// ../../../node_modules/ajv/dist/ajv.js var require_ajv = __commonJS((exports, module) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = undefined; @@ -6232,7 +6232,7 @@ var require_ajv = __commonJS((exports, module) => { } }); }); -// node_modules/ajv-formats/dist/formats.js +// ../../../node_modules/ajv-formats/dist/formats.js var require_formats = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.formatNames = exports.fastFormats = exports.fullFormats = undefined; @@ -6409,7 +6409,7 @@ var require_formats = __commonJS((exports) => { } }); -// node_modules/ajv-formats/dist/limit.js +// ../../../node_modules/ajv-formats/dist/limit.js var require_limit = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.formatLimitDefinition = undefined; @@ -6478,7 +6478,7 @@ var require_limit = __commonJS((exports) => { exports.default = formatLimitPlugin; }); -// node_modules/ajv-formats/dist/index.js +// ../../../node_modules/ajv-formats/dist/index.js var require_dist = __commonJS((exports, module) => { Object.defineProperty(exports, "__esModule", { value: true }); var formats_1 = require_formats(); @@ -6520,7 +6520,7 @@ var require_dist = __commonJS((exports, module) => { // src/bridge.ts import { existsSync as existsSync7 } from "fs"; -// node_modules/zod/v4/core/core.js +// ../../../node_modules/zod/v4/core/core.js var NEVER = Object.freeze({ status: "aborted" }); @@ -6596,7 +6596,7 @@ function config(newConfig) { Object.assign(globalConfig, newConfig); return globalConfig; } -// node_modules/zod/v4/core/util.js +// ../../../node_modules/zod/v4/core/util.js var exports_util = {}; __export(exports_util, { unwrapMessage: () => unwrapMessage, @@ -7270,7 +7270,7 @@ class Class { constructor(..._args) {} } -// node_modules/zod/v4/core/errors.js +// ../../../node_modules/zod/v4/core/errors.js var initializer = (inst, def) => { inst.name = "$ZodError"; Object.defineProperty(inst, "_zod", { @@ -7336,7 +7336,7 @@ function formatError(error, mapper = (issue2) => issue2.message) { return fieldErrors; } -// node_modules/zod/v4/core/parse.js +// ../../../node_modules/zod/v4/core/parse.js var _parse = (_Err) => (schema, value, _ctx, _params) => { const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false }; const result = schema._zod.run({ value, issues: [] }, ctx); @@ -7413,7 +7413,7 @@ var _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => { var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => { return _safeParseAsync(_Err)(schema, value, _ctx); }; -// node_modules/zod/v4/core/regexes.js +// ../../../node_modules/zod/v4/core/regexes.js var cuid = /^[cC][^\s-]{8,}$/; var cuid2 = /^[0-9a-z]+$/; var ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/; @@ -7470,7 +7470,7 @@ var _null = /^null$/i; var lowercase = /^[^A-Z]*$/; var uppercase = /^[^a-z]*$/; -// node_modules/zod/v4/core/checks.js +// ../../../node_modules/zod/v4/core/checks.js var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => { var _a; inst._zod ?? (inst._zod = {}); @@ -7859,7 +7859,7 @@ var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (ins }; }); -// node_modules/zod/v4/core/doc.js +// ../../../node_modules/zod/v4/core/doc.js class Doc { constructor(args = []) { this.content = []; @@ -7897,14 +7897,14 @@ class Doc { } } -// node_modules/zod/v4/core/versions.js +// ../../../node_modules/zod/v4/core/versions.js var version = { major: 4, minor: 3, patch: 6 }; -// node_modules/zod/v4/core/schemas.js +// ../../../node_modules/zod/v4/core/schemas.js var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => { var _a; inst ?? (inst = {}); @@ -9289,7 +9289,7 @@ function handleRefineResult(result, payload, input, inst) { payload.issues.push(issue(_iss)); } } -// node_modules/zod/v4/locales/en.js +// ../../../node_modules/zod/v4/locales/en.js var error = () => { const Sizable = { string: { unit: "characters", verb: "to have" }, @@ -9395,7 +9395,7 @@ function en_default() { localeError: error() }; } -// node_modules/zod/v4/core/registries.js +// ../../../node_modules/zod/v4/core/registries.js var _a; var $output = Symbol("ZodOutput"); var $input = Symbol("ZodInput"); @@ -9445,7 +9445,7 @@ function registry() { } (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry()); var globalRegistry = globalThis.__zod_globalRegistry; -// node_modules/zod/v4/core/api.js +// ../../../node_modules/zod/v4/core/api.js function _string(Class2, params) { return new Class2({ type: "string", @@ -9911,7 +9911,7 @@ function _check(fn, params) { ch._zod.check = fn; return ch; } -// node_modules/zod/v4/core/to-json-schema.js +// ../../../node_modules/zod/v4/core/to-json-schema.js function initializeContext(params) { let target = params?.target ?? "draft-2020-12"; if (target === "draft-4") @@ -10256,7 +10256,7 @@ var createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) = extractDefs(ctx, schema); return finalize(ctx, schema); }; -// node_modules/zod/v4/core/json-schema-processors.js +// ../../../node_modules/zod/v4/core/json-schema-processors.js var formatMap = { guid: "uuid", url: "uri", @@ -10591,7 +10591,7 @@ var optionalProcessor = (schema, ctx, _json, params) => { const seen = ctx.seen.get(schema); seen.ref = def.innerType; }; -// node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js function isZ4Schema(s) { const schema = s; return !!schema._zod; @@ -10653,7 +10653,7 @@ function getLiteralValue(schema) { return directValue; return; } -// node_modules/zod/v4/classic/iso.js +// ../../../node_modules/zod/v4/classic/iso.js var exports_iso = {}; __export(exports_iso, { time: () => time2, @@ -10694,7 +10694,7 @@ function duration2(params) { return _isoDuration(ZodISODuration, params); } -// node_modules/zod/v4/classic/errors.js +// ../../../node_modules/zod/v4/classic/errors.js var initializer2 = (inst, issues) => { $ZodError.init(inst, issues); inst.name = "ZodError"; @@ -10729,7 +10729,7 @@ var ZodRealError = $constructor("ZodError", initializer2, { Parent: Error }); -// node_modules/zod/v4/classic/parse.js +// ../../../node_modules/zod/v4/classic/parse.js var parse3 = /* @__PURE__ */ _parse(ZodRealError); var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError); var safeParse3 = /* @__PURE__ */ _safeParse(ZodRealError); @@ -10743,7 +10743,7 @@ var safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError); var safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError); var safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError); -// node_modules/zod/v4/classic/schemas.js +// ../../../node_modules/zod/v4/classic/schemas.js var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => { $ZodType.init(inst, def); Object.assign(inst["~standard"], { @@ -11382,10 +11382,10 @@ function superRefine(fn) { function preprocess(fn, schema) { return pipe(transform(fn), schema); } -// node_modules/zod/v4/classic/external.js +// ../../../node_modules/zod/v4/classic/external.js config(en_default()); -// node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/types.js var LATEST_PROTOCOL_VERSION = "2025-11-25"; var SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, "2025-06-18", "2025-03-26", "2024-11-05", "2024-10-07"]; var RELATED_TASK_META_KEY = "io.modelcontextprotocol/related-task"; @@ -12217,16 +12217,16 @@ class UrlElicitationRequiredError extends McpError { } } -// node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js function isTerminal(status) { return status === "completed" || status === "failed" || status === "cancelled"; } -// node_modules/zod-to-json-schema/dist/esm/Options.js +// ../../../node_modules/zod-to-json-schema/dist/esm/Options.js var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use"); -// node_modules/zod-to-json-schema/dist/esm/parsers/string.js +// ../../../node_modules/zod-to-json-schema/dist/esm/parsers/string.js var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789"); -// node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js function getMethodLiteral(schema) { const shape = getObjectShape(schema); const methodSchema = shape?.method; @@ -12247,7 +12247,7 @@ function parseWithCompat(schema, data) { return result.data; } -// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js var DEFAULT_REQUEST_TIMEOUT_MSEC = 60000; class Protocol { @@ -13082,7 +13082,7 @@ function mergeCapabilities(base, additional) { return result; } -// node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js var import_ajv = __toESM(require_ajv(), 1); var import_ajv_formats = __toESM(require_dist(), 1); function createDefaultAjvInstance() { @@ -13122,7 +13122,7 @@ class AjvJsonSchemaValidator { } } -// node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js class ExperimentalServerTasks { constructor(_server) { this._server = _server; @@ -13200,7 +13200,7 @@ class ExperimentalServerTasks { } } -// node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js function assertToolsCallTaskCapability(requests, method, entityName) { if (!requests) { throw new Error(`${entityName} does not support task creation (required for ${method})`); @@ -13235,7 +13235,7 @@ function assertClientRequestTaskCapability(requests, method, entityName) { } } -// node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js class Server extends Protocol { constructor(_serverInfo, options) { super(options); @@ -13568,10 +13568,10 @@ class Server extends Protocol { } } -// node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js import process3 from "process"; -// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js class ReadBuffer { append(chunk) { this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk; @@ -13601,7 +13601,7 @@ function serializeMessage(message) { `; } -// node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js +// ../../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js class StdioServerTransport { constructor(_stdin = process3.stdin, _stdout = process3.stdout) { this._stdin = _stdin; @@ -14707,10 +14707,10 @@ function defineNumber(value, fallback) { } var BUILD_INFO = Object.freeze({ version: defineString("0.1.24", "0.0.0-source"), - commit: defineString("fdc78c6", "source"), + commit: defineString("c11cc5f", "source"), bundle: defineBundle("plugin"), contractVersion: defineNumber(1, CONTRACT_VERSION), - codeHash: defineString("ace71209327c", "source") + codeHash: defineString("c37e0e5b8a43", "source") }); function sameRuntimeContract(a, b) { if (!a || !b) diff --git a/plugins/agentbridge/server/daemon.js b/plugins/agentbridge/server/daemon.js index 59a3354..b3a689c 100755 --- a/plugins/agentbridge/server/daemon.js +++ b/plugins/agentbridge/server/daemon.js @@ -30,10 +30,10 @@ function defineNumber(value, fallback) { } var BUILD_INFO = Object.freeze({ version: defineString("0.1.24", "0.0.0-source"), - commit: defineString("fdc78c6", "source"), + commit: defineString("c11cc5f", "source"), bundle: defineBundle("plugin"), contractVersion: defineNumber(1, CONTRACT_VERSION), - codeHash: defineString("ace71209327c", "source") + codeHash: defineString("c37e0e5b8a43", "source") }); function daemonStatusBuildInfo() { return { ...BUILD_INFO }; diff --git a/src/cli.ts b/src/cli.ts index 6fa3e7e..96117aa 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -186,8 +186,9 @@ Commands: budget [--json] Show both agents' subscription quota snapshot (5h/weekly, drift, pause state) auth login --id --name Issue a collaboration PSK token and write it to /auth-token (0600) - room create | room list - Create a collaboration room (id = slugified name) or list rooms + room create | room list | room add | room remove + Create a collaboration room (id = slugified name), list rooms, + or add/remove a member (caller must be a member) join Join a room and auto-join this directory next time (§2.4) broker start [--host ] [--port ] [--db ] [--web-port ] [--no-web] [--no-open] Run the always-on control-plane broker (§11.1) + a loopback-only