dsh-permission-rules 0.5.3 → 0.5.5

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/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  All notable changes to dsh-permission-rules are recorded here, newest first.
4
4
 
5
+ ## v0.5.5 — 2026-08-23
6
+
7
+ ### Docs
8
+
9
+ - Document the `network` match dimension in the rule-format references: `docs/rules-format.en.md` and `docs/rules-format.md` now list `network` among the allowed `match` fields, add a `network` dimension row plus a dedicated section (domains / ips / ports / schemes semantics, tool scoping, the mode/boundary cross-reference), and `docs/rules-format.schema.json` gains the `network` property so editor completion covers it. This closes the v0.5.0 gap where the implementation shipped but the vocabulary docs still listed only six `match` fields.
10
+ - The injected network-policy system-prompt paragraph now opens with a short role sentence (Minimal persona style), as the engineering standard requires.
11
+ - Refresh the five-language README Development section test count to the current `236 tests, 20 files` (was `139 tests, 9 suites`).
12
+
13
+ ## v0.5.4 — 2026-08-22
14
+
15
+ ### DeepSeek Harness rc.2 compatibility
16
+
17
+ - The dsh peer family moves to `0.1.1-rc.2`: devDependencies pin the exact rc.2 line, peerDependencies keep the `>=0.1.0-rc.8 <0.2.0` range (which already covers `0.1.1-rc.2`), and the workshop compatibility manifest lists `0.1.1-rc.2`. The five-language Harness compatibility row declares the rc.2 line.
18
+ - The sibling `dsh-auto-review` integration tarball is repacked to `vendor/dsh-auto-review-0.5.4.tgz` and the `file:` devDependency updated to match.
19
+ - `pnpm-workspace.yaml` now excludes the whole `@deepseek-ai/*` scope from `minimumReleaseAge`; the compat workflow pins the rc.2 CLI and `dsh-base`/`dsh-headless` bundles.
20
+ - The rc.2 `@deepseek-ai/dsh-*` prereleases resolve from `next` (their `latest` tags are stale), so the fresh transitive peers cannot be hoisted. The workspace drops `nodeLinker: hoisted` (the default isolated linker skips unresolvable peers, as the sibling repo does), and the load-bearing peers are pinned explicitly as devDependencies: `dsh-brand`, `dsh-invariants`, `dsh-session-projection` (sibling tarball peers) and `cordis-plugin-include` (the Loader composition runner).
21
+
5
22
  ## v0.5.3 — 2026-08-21
6
23
 
7
24
  ### DeepSeek Harness rc.8 compatibility
package/README.es.md CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  | Surface | Status |
26
26
  |---|---|
27
- | Harness | DeepSeek Harness `0.1.0-rc.8` |
27
+ | Harness | DeepSeek Harness `0.1.1-rc.2` |
28
28
  | Node | `^22.19.0 || >=24.0.0` |
29
29
  | Platforms | Todas (host + cliente web de settings) |
30
30
  | Model | Cualquiera (las razones deny/ask se muestran a través de los resultados de herramienta) |
@@ -193,7 +193,7 @@ node scripts/repair-session-logs.mjs repair [--home DIR] [--dry-run]
193
193
  pnpm install # node ^22.19 || >=24
194
194
  pnpm run typecheck # tsc, src + tests
195
195
  pnpm run lint # eslint, src + tests + scripts
196
- pnpm test # vitest: 139 tests, 9 suites
196
+ pnpm test # vitest: 236 tests, 20 files
197
197
  pnpm run test:coverage # coverage gate (90/80/90/90)
198
198
  pnpm run build # tsc declarations + tsdown bundles (lib/)
199
199
  pnpm run pack:check # build + pack (the published artifact)
package/README.hi.md CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  | Surface | Status |
26
26
  |---|---|
27
- | Harness | DeepSeek Harness `0.1.0-rc.8` |
27
+ | Harness | DeepSeek Harness `0.1.1-rc.2` |
28
28
  | Node | `^22.19.0 || >=24.0.0` |
29
29
  | Platforms | सभी (host + वेब settings क्लाइंट) |
30
30
  | Model | कोई भी (deny/ask कारण टूल परिणामों के माध्यम से दिखते हैं) |
@@ -193,7 +193,7 @@ node scripts/repair-session-logs.mjs repair [--home DIR] [--dry-run]
193
193
  pnpm install # node ^22.19 || >=24
194
194
  pnpm run typecheck # tsc, src + tests
195
195
  pnpm run lint # eslint, src + tests + scripts
196
- pnpm test # vitest: 139 tests, 9 suites
196
+ pnpm test # vitest: 236 tests, 20 files
197
197
  pnpm run test:coverage # coverage gate (90/80/90/90)
198
198
  pnpm run build # tsc declarations + tsdown bundles (lib/)
199
199
  pnpm run pack:check # build + pack (the published artifact)
package/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  <div align="center">
2
2
 
3
3
  # 🛡️ dsh-permission-rules
4
+ [![Gitee](https://img.shields.io/badge/Gitee-mirror-c71d23?logo=gitee)](https://gitee.com/perrylink/dsh-permission-rules)
4
5
 
5
6
  **Claude Code-style declarative permission rules for DeepSeek Harness.**
6
7
 
@@ -24,7 +25,7 @@
24
25
 
25
26
  | Surface | Status |
26
27
  |---|---|
27
- | Harness | DeepSeek Harness `0.1.0-rc.8` |
28
+ | Harness | DeepSeek Harness `0.1.1-rc.2` |
28
29
  | Node | `^22.19.0 || >=24.0.0` |
29
30
  | Platforms | All (host + web settings client) |
30
31
  | Model | Any (deny/ask reasons surface through tool results) |
@@ -193,7 +194,7 @@ node scripts/repair-session-logs.mjs repair [--home DIR] [--dry-run]
193
194
  pnpm install # node ^22.19 || >=24
194
195
  pnpm run typecheck # tsc, src + tests
195
196
  pnpm run lint # eslint, src + tests + scripts
196
- pnpm test # vitest: 139 tests, 9 suites
197
+ pnpm test # vitest: 236 tests, 20 files
197
198
  pnpm run test:coverage # coverage gate (90/80/90/90)
198
199
  pnpm run build # tsc declarations + tsdown bundles (lib/)
199
200
  pnpm run pack:check # build + pack (the published artifact)
package/README.pt.md CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  | Surface | Status |
26
26
  |---|---|
27
- | Harness | DeepSeek Harness `0.1.0-rc.8` |
27
+ | Harness | DeepSeek Harness `0.1.1-rc.2` |
28
28
  | Node | `^22.19.0 || >=24.0.0` |
29
29
  | Platforms | Todas (host + cliente web de settings) |
30
30
  | Model | Qualquer (razões deny/ask aparecem pelos resultados de ferramenta) |
@@ -193,7 +193,7 @@ node scripts/repair-session-logs.mjs repair [--home DIR] [--dry-run]
193
193
  pnpm install # node ^22.19 || >=24
194
194
  pnpm run typecheck # tsc, src + tests
195
195
  pnpm run lint # eslint, src + tests + scripts
196
- pnpm test # vitest: 139 tests, 9 suites
196
+ pnpm test # vitest: 236 tests, 20 files
197
197
  pnpm run test:coverage # coverage gate (90/80/90/90)
198
198
  pnpm run build # tsc declarations + tsdown bundles (lib/)
199
199
  pnpm run pack:check # build + pack (the published artifact)
package/README.zh.md CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  | Surface | Status |
26
26
  |---|---|
27
- | Harness | DeepSeek Harness `0.1.0-rc.8` |
27
+ | Harness | DeepSeek Harness `0.1.1-rc.2` |
28
28
  | Node | `^22.19.0 || >=24.0.0` |
29
29
  | Platforms | 全部(host + Web 设置客户端) |
30
30
  | Model | 任意(deny/ask 原因经工具结果呈现) |
@@ -193,7 +193,7 @@ node scripts/repair-session-logs.mjs repair [--home DIR] [--dry-run]
193
193
  pnpm install # node ^22.19 || >=24
194
194
  pnpm run typecheck # tsc, src + tests
195
195
  pnpm run lint # eslint, src + tests + scripts
196
- pnpm test # vitest: 139 tests, 9 suites
196
+ pnpm test # vitest: 236 tests, 20 files
197
197
  pnpm run test:coverage # coverage gate (90/80/90/90)
198
198
  pnpm run build # tsc declarations + tsdown bundles (lib/)
199
199
  pnpm run pack:check # build + pack (the published artifact)
@@ -17,7 +17,7 @@ rules: # rule list, evaluated in written order; may be omitted or empty
17
17
  reason: ...
18
18
  ```
19
19
 
20
- Only `rules` is allowed at the top level; each rule allows only `match`, `action`, `reason`, `enabled`, `description`, `tags`; each `match` allows only `tools`, `agents`, `params`, `paths`, `absent`, `when`. Any unknown field fails the load loudly — never silently ignored.
20
+ Only `rules` is allowed at the top level; each rule allows only `match`, `action`, `reason`, `enabled`, `description`, `tags`; each `match` allows only `tools`, `agents`, `params`, `paths`, `absent`, `when`, `network`. Any unknown field fails the load loudly — never silently ignored.
21
21
 
22
22
  ## match dimensions (AND)
23
23
 
@@ -29,9 +29,36 @@ Only `rules` is allowed at the top level; each rule allows only `match`, `action
29
29
  | `paths` | `string[]` | Workspace-relative path patterns; any candidate matching any pattern satisfies the dimension. Candidates come from argument values under these keys at ANY nesting depth (depth-capped): `path` `paths` `file` `files` `file_path` `dir` `directory` `directories` `cwd` `workspace` `root` `target` `targets` `output`. Absolute candidates outside the workspace are dropped; relative `../` forms are kept so explicit out-of-root globs still work. In path patterns `*` does not cross `/`; `**` crosses any depth (including zero). With `caseInsensitivePaths` on (Windows default) the root comparison and the patterns ignore ASCII case. |
30
30
  | `absent` | `string[]` | Argument keys that must be ABSENT; **every listed key must be missing** (non-object arguments satisfy this trivially). |
31
31
  | `when` | `{ env, platform }` | Host conditions: `env` is env-var name → pattern(s), **every listed var must be present AND match**; `platform` is any-of a closed list (`aix` `android` `darwin` `freebsd` `linux` `openbsd` `sunos` `win32`). |
32
+ | `network` | `{ domains, ips, ports, schemes }` | Network scope (a network rule): the call must carry a URL candidate satisfying every listed dimension. `domains` (subdomain-inclusive unless wildcarded), `ips` (literals/globs/CIDRs), `ports` (`*`, one port, or a range), `schemes` (`http`/`https`). See the next section. |
32
33
 
33
34
  All dimensions are ANDed: a rule matches only when **every non-empty dimension matches**. Rules evaluate in order — **the first match wins**; no match = passthrough.
34
35
 
36
+ ## network dimension
37
+
38
+ A rule whose `match` carries a `network` block is a **network rule**. It matches a tool call only when the call carries a URL candidate — a web-tool URL argument (`url`, `endpoint`, `webhook`, …) or a URL embedded in `bash`/`pwsh` command text — that satisfies every listed dimension (AND); at the proxy layer it matches the shell subprocess connection target directly. A rule WITHOUT `network` keeps its file/command behavior exactly as before.
39
+
40
+ | Field | Semantics |
41
+ |---|---|
42
+ | `domains` | Domain patterns, lowercased with a trailing dot stripped. A pattern without wildcards is subdomain-inclusive — `example.com` also matches `api.example.com`; `*.example.com` matches subdomains only; `*`/`**` compile as ordinary globs. ANY pattern matching the target host satisfies the dimension. |
43
+ | `ips` | Exact IPv4/IPv6 literal, a glob (`10.0.*.*`), or an IPv4 CIDR (`10.0.0.0/8`). A literal IP in the URL is always a candidate; the proxy additionally resolves hostnames and tests their addresses, while `tools/pre-execute` matches literal IPs only (no DNS in the hot path). ANY match satisfies the dimension. |
44
+ | `ports` | `*`, one port (`443`), or an inclusive range (`8000-9000`); numeric YAML ports are accepted. Evaluated against the effective port (URL port, else 80/443 by scheme). ANY match satisfies the dimension. |
45
+ | `schemes` | `http` and/or `https`; the target scheme must be one of them. |
46
+
47
+ A network block must name at least one of the four fields. Scope a network rule by tool with `tools: [bash, pwsh]` (shell traffic), `tools: [web_fetch, web_search]` (web tools), or leave `tools` empty to cover both. The three policy modes that decide unlisted targets (`deny-all` / `whitelist` / `allow-all`, with an `auto` mode mapped onto the sandbox presets) are plugin config, not rule syntax — see the README "Network policy" section.
48
+
49
+ ```yaml
50
+ rules:
51
+ # block one host for web tools; the shell proxy enforces the same for curl
52
+ - match: { tools: [web_fetch, web_search], network: { domains: [blocked.example] } }
53
+ action: deny
54
+ reason: "blocked.example is off-limits"
55
+
56
+ # allow only pinned package registries over https (whitelist-friendly rule)
57
+ - match: { tools: [bash, pwsh], network: { domains: ["registry.npmjs.org", "proxy.golang.org"], schemes: [https] } }
58
+ action: allow
59
+ reason: "pinned package registries"
60
+ ```
61
+
35
62
  ## action, reason, and metadata
36
63
 
37
64
  - `action: allow | deny | ask` (required).
@@ -17,7 +17,7 @@ rules: # 规则列表,按书写顺序求值;可以省略或为空
17
17
  reason: ...
18
18
  ```
19
19
 
20
- 顶层只允许 `rules` 一个键;每条规则只允许 `match`、`action`、`reason`、`enabled`、`description`、`tags` 六个键;`match` 只允许 `tools`、`agents`、`params`、`paths`、`absent`、`when` 六个键。出现任何未知键都在加载期报错(响亮失败),绝不静默忽略。
20
+ 顶层只允许 `rules` 一个键;每条规则只允许 `match`、`action`、`reason`、`enabled`、`description`、`tags` 六个键;`match` 只允许 `tools`、`agents`、`params`、`paths`、`absent`、`when`、`network` 七个键。出现任何未知键都在加载期报错(响亮失败),绝不静默忽略。
21
21
 
22
22
  ## match 维度(全部 AND)
23
23
 
@@ -29,9 +29,36 @@ rules: # 规则列表,按书写顺序求值;可以省略或为空
29
29
  | `paths` | `string[]` | 工作区相对路径模式,任一候选命中任一模式即可。候选来自参数中下列键的值(**任意嵌套深度**、深度上限):`path` `paths` `file` `files` `file_path` `dir` `directory` `directories` `cwd` `workspace` `root` `target` `targets` `output`。工作区外的绝对候选被丢弃;相对 `../` 形式保留,可显式匹配工作区外。路径模式中 `*` 不跨 `/`,`**` 跨任意深度(含零层)。`caseInsensitivePaths` 开启时(Windows 默认)根比较与模式匹配忽略 ASCII 大小写。 |
30
30
  | `absent` | `string[]` | 必须**缺席**的参数键;**每个列出的键都必须缺失**(非对象参数天然满足)。 |
31
31
  | `when` | `{ env, platform }` | 宿主条件:`env` 为环境变量名 → 模式(**每个列出的变量都必须存在且命中**);`platform` 为任一命中即可的封闭列表(`aix` `android` `darwin` `freebsd` `linux` `openbsd` `sunos` `win32`)。 |
32
+ | `network` | `{ domains, ips, ports, schemes }` | 网络作用域(网络规则):调用必须携带命中每个列出维度的 URL 候选。`domains`(无通配符时包含子域)、`ips`(字面量/glob/CIDR)、`ports`(`*`、单端口或区间)、`schemes`(`http`/`https`)。详见下一节。 |
32
33
 
33
34
  所有维度为 AND:一条规则只有在它的**每个非空维度都命中**时才命中。规则按顺序求值,**首条命中生效**;无命中 = 透传。
34
35
 
36
+ ## network 维度
37
+
38
+ `match` 带 `network` 块的规则是**网络规则**。它只有在调用携带命中每个列出维度(AND)的 URL 候选时才命中——候选来自 web 工具的 URL 参数(`url`、`endpoint`、`webhook` 等)或 `bash`/`pwsh` 命令文本中嵌入的 URL;在代理层则直接对 shell 子进程的连接目标求值。不带 `network` 的规则保持原有文件/命令行为不变。
39
+
40
+ | 字段 | 语义 |
41
+ |---|---|
42
+ | `domains` | 域名模式,小写化并去掉末尾点。无通配符的模式包含子域——`example.com` 同时命中 `api.example.com`;`*.example.com` 只匹配子域;`*`/`**` 按普通 glob 编译。任一模式命中目标主机即满足该维度。 |
43
+ | `ips` | 精确 IPv4/IPv6 字面量、glob(`10.0.*.*`)或 IPv4 CIDR(`10.0.0.0/8`)。URL 中的字面量 IP 始终是候选;代理额外解析主机名并测试其地址,而 `tools/pre-execute` 只匹配字面量 IP(热路径不做 DNS)。任一命中即满足。 |
44
+ | `ports` | `*`、单端口(`443`)或闭区间(`8000-9000`);接受数值型 YAML 端口。按有效端口求值(URL 端口,否则按 scheme 取 80/443)。任一命中即满足。 |
45
+ | `schemes` | `http` 和/或 `https`;目标 scheme 必须是其中之一。 |
46
+
47
+ 网络块必须至少命名四个字段之一。用工具作用域限定网络规则:`tools: [bash, pwsh]`(shell 流量)、`tools: [web_fetch, web_search]`(web 工具),或留空 `tools` 同时覆盖两者。决定未列出目标的三档策略模式(`deny-all` / `whitelist` / `allow-all`,以及映射到沙箱预设的 `auto` 模式)是插件配置而非规则语法——见 README「Network policy」一节。
48
+
49
+ ```yaml
50
+ rules:
51
+ # 对 web 工具封锁一个主机;shell 代理对 curl 同样生效
52
+ - match: { tools: [web_fetch, web_search], network: { domains: [blocked.example] } }
53
+ action: deny
54
+ reason: "blocked.example 禁止访问"
55
+
56
+ # 仅放行固定的包镜像(https,白名单友好规则)
57
+ - match: { tools: [bash, pwsh], network: { domains: ["registry.npmjs.org", "proxy.golang.org"], schemes: [https] } }
58
+ action: allow
59
+ reason: "固定包镜像"
60
+ ```
61
+
35
62
  ## action、reason 与元数据
36
63
 
37
64
  - `action: allow | deny | ask`(必填)。
@@ -108,6 +108,38 @@
108
108
  }
109
109
  }
110
110
  }
111
+ },
112
+ "network": {
113
+ "description": "Network scope (a network rule): the call must carry a URL candidate (a web-tool URL argument, or a URL embedded in bash/pwsh command text) — or, at the proxy layer, a connection target — satisfying every listed dimension. domains are subdomain-inclusive unless wildcarded; ips accept IPv4/IPv6 literals, globs, and IPv4 CIDRs; ports accept \"*\", one port, or an inclusive low-high range (numeric YAML ports accepted); schemes are http/https. A network block must name at least one dimension.",
114
+ "type": "object",
115
+ "additionalProperties": false,
116
+ "properties": {
117
+ "domains": {
118
+ "description": "Domain patterns; ANY matching the target host satisfies the dimension.",
119
+ "type": "array",
120
+ "items": { "type": "string", "minLength": 1 }
121
+ },
122
+ "ips": {
123
+ "description": "IP literals, globs, or IPv4 CIDRs; ANY matching the target address satisfies the dimension.",
124
+ "type": "array",
125
+ "items": { "type": "string", "minLength": 1 }
126
+ },
127
+ "ports": {
128
+ "description": "\"*\", one port, or an inclusive low-high range; ANY matching the effective port satisfies the dimension.",
129
+ "type": "array",
130
+ "items": {
131
+ "oneOf": [
132
+ { "type": "string", "minLength": 1 },
133
+ { "type": "integer", "minimum": 0, "maximum": 65535 }
134
+ ]
135
+ }
136
+ },
137
+ "schemes": {
138
+ "description": "Target scheme must be one of these.",
139
+ "type": "array",
140
+ "items": { "enum": ["http", "https"] }
141
+ }
142
+ }
111
143
  }
112
144
  }
113
145
  },
package/lib/client.js CHANGED
@@ -28,7 +28,7 @@ window.__ModuleLoader__.load({
28
28
  //#endregion
29
29
  let react = require("react");
30
30
  react = __toESM(react, 1);
31
- //#region node_modules/zod/v4/core/core.js
31
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.js
32
32
  var _a$1;
33
33
  function $constructor(name, initializer, params) {
34
34
  function init(inst, def) {
@@ -87,7 +87,7 @@ window.__ModuleLoader__.load({
87
87
  return globalConfig;
88
88
  }
89
89
  //#endregion
90
- //#region node_modules/zod/v4/core/util.js
90
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.js
91
91
  function getEnumValues(entries) {
92
92
  const numericValues = Object.values(entries).filter((v) => typeof v === "number");
93
93
  return Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
@@ -401,7 +401,7 @@ window.__ModuleLoader__.load({
401
401
  return { ...iss };
402
402
  }
403
403
  //#endregion
404
- //#region node_modules/zod/v4/core/errors.js
404
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.js
405
405
  const initializer$1 = (inst, def) => {
406
406
  inst.name = "$ZodError";
407
407
  Object.defineProperty(inst, "_zod", {
@@ -461,7 +461,7 @@ window.__ModuleLoader__.load({
461
461
  return fieldErrors;
462
462
  }
463
463
  //#endregion
464
- //#region node_modules/zod/v4/core/parse.js
464
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.js
465
465
  const _parse = (_Err) => (schema, value, _ctx, _params) => {
466
466
  const ctx = _ctx ? {
467
467
  ..._ctx,
@@ -575,7 +575,7 @@ window.__ModuleLoader__.load({
575
575
  return _safeParseAsync(_Err)(schema, value, _ctx);
576
576
  };
577
577
  //#endregion
578
- //#region node_modules/zod/v4/core/regexes.js
578
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.js
579
579
  /**
580
580
  * @deprecated CUID v1 is deprecated by its authors due to information leakage
581
581
  * (timestamps embedded in the id). Use {@link cuid2} instead.
@@ -640,7 +640,7 @@ window.__ModuleLoader__.load({
640
640
  const lowercase = /^[^A-Z]*$/;
641
641
  const uppercase = /^[^a-z]*$/;
642
642
  //#endregion
643
- //#region node_modules/zod/v4/core/checks.js
643
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.js
644
644
  const $ZodCheck = /*@__PURE__*/ $constructor("$ZodCheck", (inst, def) => {
645
645
  var _a;
646
646
  inst._zod ?? (inst._zod = {});
@@ -1002,7 +1002,7 @@ window.__ModuleLoader__.load({
1002
1002
  };
1003
1003
  });
1004
1004
  //#endregion
1005
- //#region node_modules/zod/v4/core/doc.js
1005
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.js
1006
1006
  var Doc = class {
1007
1007
  constructor(args = []) {
1008
1008
  this.content = [];
@@ -1033,14 +1033,14 @@ window.__ModuleLoader__.load({
1033
1033
  }
1034
1034
  };
1035
1035
  //#endregion
1036
- //#region node_modules/zod/v4/core/versions.js
1036
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.js
1037
1037
  const version = {
1038
1038
  major: 4,
1039
1039
  minor: 4,
1040
1040
  patch: 3
1041
1041
  };
1042
1042
  //#endregion
1043
- //#region node_modules/zod/v4/core/schemas.js
1043
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.js
1044
1044
  const $ZodType = /*@__PURE__*/ $constructor("$ZodType", (inst, def) => {
1045
1045
  var _a;
1046
1046
  inst ?? (inst = {});
@@ -2177,7 +2177,7 @@ window.__ModuleLoader__.load({
2177
2177
  }
2178
2178
  }
2179
2179
  //#endregion
2180
- //#region node_modules/zod/v4/core/registries.js
2180
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/registries.js
2181
2181
  var _a;
2182
2182
  var $ZodRegistry = class {
2183
2183
  constructor() {
@@ -2224,7 +2224,7 @@ window.__ModuleLoader__.load({
2224
2224
  (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());
2225
2225
  const globalRegistry = globalThis.__zod_globalRegistry;
2226
2226
  //#endregion
2227
- //#region node_modules/zod/v4/core/api.js
2227
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.js
2228
2228
  // @__NO_SIDE_EFFECTS__
2229
2229
  function _string(Class, params) {
2230
2230
  return new Class({
@@ -2736,7 +2736,7 @@ window.__ModuleLoader__.load({
2736
2736
  return ch;
2737
2737
  }
2738
2738
  //#endregion
2739
- //#region node_modules/zod/v4/core/to-json-schema.js
2739
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.js
2740
2740
  function initializeContext(params) {
2741
2741
  let target = params?.target ?? "draft-2020-12";
2742
2742
  if (target === "draft-4") target = "draft-04";
@@ -3031,7 +3031,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
3031
3031
  return finalize(ctx, schema);
3032
3032
  };
3033
3033
  //#endregion
3034
- //#region node_modules/zod/v4/core/json-schema-processors.js
3034
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.js
3035
3035
  const formatMap = {
3036
3036
  guid: "uuid",
3037
3037
  url: "uri",
@@ -3270,7 +3270,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
3270
3270
  seen.ref = def.innerType;
3271
3271
  };
3272
3272
  //#endregion
3273
- //#region node_modules/zod/v4/classic/iso.js
3273
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.js
3274
3274
  const ZodISODateTime = /*@__PURE__*/ $constructor("ZodISODateTime", (inst, def) => {
3275
3275
  $ZodISODateTime.init(inst, def);
3276
3276
  ZodStringFormat.init(inst, def);
@@ -3300,7 +3300,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
3300
3300
  return /* @__PURE__ */ _isoDuration(ZodISODuration, params);
3301
3301
  }
3302
3302
  //#endregion
3303
- //#region node_modules/zod/v4/classic/errors.js
3303
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.js
3304
3304
  const initializer = (inst, issues) => {
3305
3305
  $ZodError.init(inst, issues);
3306
3306
  inst.name = "ZodError";
@@ -3322,7 +3322,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
3322
3322
  };
3323
3323
  const ZodRealError = /*@__PURE__*/ $constructor("ZodError", initializer, { Parent: Error });
3324
3324
  //#endregion
3325
- //#region node_modules/zod/v4/classic/parse.js
3325
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.js
3326
3326
  const parse = /* @__PURE__ */ _parse(ZodRealError);
3327
3327
  const parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);
3328
3328
  const safeParse = /* @__PURE__ */ _safeParse(ZodRealError);
@@ -3336,7 +3336,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
3336
3336
  const safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
3337
3337
  const safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
3338
3338
  //#endregion
3339
- //#region node_modules/zod/v4/classic/schemas.js
3339
+ //#region node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js
3340
3340
  const _installedGroups = /* @__PURE__ */ new WeakMap();
3341
3341
  function _installLazyMethods(inst, group, methods) {
3342
3342
  const proto = Object.getPrototypeOf(inst);