border-customs 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -413,6 +413,7 @@ border <command> [options]
413
413
  | `llm-request` | emit the masked review bundle for LLM-authored commits |
414
414
  | `llm-ingest <findings.json>` | validate agent findings and record the combined verdict |
415
415
  | `scan <[ecosystem:]name@version>` | inspect a third-party published artifact for residue before installing it |
416
+ | `opencode <install\|status\|uninstall>` | install/status/uninstall the official OpenCode plugin adapter |
416
417
 
417
418
  Every subcommand accepts the same global flags (verified against `border <cmd> --help`):
418
419
 
@@ -629,6 +630,45 @@ same one that wrote the commit) how to run the five subcommands, how to produce
629
630
  `llm-ingest` findings file, and the two standing rules for agents driving pushes: never pass
630
631
  `--yes` without a visible human go-ahead, and never push over an exit-2 gate.
631
632
 
633
+ **OpenCode plugin (install-free).** Since 0.5.0 the package ships an adapter for the official
634
+ OpenCode plugin system, loadable two ways with zero manual setup. The primary route is
635
+ config-declared: one line in `opencode.jsonc`, and opencode downloads the package itself (the
636
+ plugin entry ships as `exports["./server"]`):
637
+
638
+ ```jsonc
639
+ {
640
+ // pin the exact version — an @latest channel hits the registry on every cold start
641
+ "plugin": ["border-customs@0.5.0"]
642
+ }
643
+ ```
644
+
645
+ No global install and no PATH entry are required for it: the plugin resolves its CLI from the
646
+ package's own `dist/index.js` sitting next to the plugin module, with `BORDER_BIN` as an
647
+ explicit override that wins first and `border` on `PATH` as the file-drop route's fallback.
648
+ The alternative is the file-drop installer, `border opencode install|status|uninstall`, which
649
+ writes `plugins/border.ts` and `commands/border.md` into `$XDG_CONFIG_HOME/opencode` (with an
650
+ `HOME/.config` fallback) under marker identity: a foreign file at either path is refused with
651
+ exit 2 and never overwritten, uninstall removes only marker-bearing files, and identical bytes
652
+ report `up to date`. Either route, restart opencode afterwards — tools and commands are
653
+ scanned at startup.
654
+
655
+ What loads is one agent tool `border` plus a `/border` slash command. The tool spawns the CLI
656
+ argv-only (no shell; 300 s cap, 64 KiB per stream) restricted to the closed command list
657
+ `check`, `push`, `status`, `llm-request`, `llm-ingest`, `scan`, `roundtrip`, `--help`, and
658
+ renders the exit-code contract unchanged: 0 pass, 1 gate-blocked or partial push, 2 the gate
659
+ could not answer. The tool REFUSES `--yes` — a real push is the human gate, terminal-only, and
660
+ a bare `border push` from the session is DRY-RUN by the CLI's own contract anyway. `/border`
661
+ self-registers via the plugin `config` hook with `??=`, so a user file command of the same
662
+ name — including a Route-A `commands/border.md` — stays authoritative.
663
+
664
+ **Boundary honesty.** The command allowlist is fool-proofing (UX), not a security boundary: an
665
+ opencode plugin runs with the opencode process's rights, and the gate's teeth are the CLI and
666
+ its ledger, never the adapter. Loading is verified by the opt-in sandboxed-HOME probe
667
+ (`BORDER_OPENCODE_PROBE=1`): a temp HOME/XDG, `opencode serve` on a control config, and two
668
+ HTTP assertions — the `border` tool id present, `/border` present exactly once (a duplicate
669
+ fails); plugin load failures are silent, so judge by the HTTP responses, never by the exit
670
+ code.
671
+
632
672
  ## What this is not
633
673
 
634
674
  - **Not a vault or secret manager.** It detects credentials on their way out; it does not
@@ -675,6 +715,29 @@ same one that wrote the commit) how to run the five subcommands, how to produce
675
715
 
676
716
  ## Changelog
677
717
 
718
+ ### 0.5.0 (2026-09-12)
719
+ - Add: OpenCode plugin adapter (`exports["./server"]` + `/border` + `border` tool) loadable
720
+ two ways with zero manual install — config-declared `"plugin": ["border-customs@0.5.0"]`
721
+ (opencode downloads the package; the plugin spawns its own packaged CLI via a
722
+ package-relative `dist/index.js` resolution, `BORDER_BIN` override, PATH fallback) or
723
+ `border opencode install` (marker-identified idempotent file drop, foreign files refused,
724
+ never overwritten). Trigger: an agent session drives the gate without a shell-out or an
725
+ install ritual; `push --yes` stays terminal-only by design — the tool refuses it.
726
+
727
+ ### 0.4.2 (2026-09-12)
728
+ - Fix: `npm publish` no longer prints the misleading "bin[border] script name
729
+ dist/index.js was invalid and removed" warning — package.json now carries the
730
+ canonical bare-relative bin form npm normalizes to anyway (mechanism traced to
731
+ @npmcli/package-json publish-side; artifacts were never broken; an always-on
732
+ test locks the form).
733
+ - Change: RubyGems freshness (skip-ledger) parity compares a normalized CONTENT
734
+ digest instead of raw file bytes — `gem build` stamps the building toolchain
735
+ (RubyGems <3.6 embeds the build second in gzip headers), so raw-sha repack
736
+ parity could never be honored on those machines. The ledger digest and the
737
+ publish-time same-bytes re-hash stay RAW: what gets uploaded is still exactly
738
+ the certified bytes, and any unparseable artifact fails closed to a full
739
+ re-check.
740
+
678
741
  ### 0.4.1 (2026-09-11)
679
742
  - Add: release-coherence rule family — every version source inside a published artifact
680
743
  must agree (pyproject vs MODULE vs filename, gemspec vs gem metadata, Cargo.toml vs
@@ -791,3 +854,5 @@ border 是一个 fail-closed(失败即拦截)的推送前门禁 CLI:`npm install
791
854
  机器上"的事实证明,不是安全担保。可选 LLM 层 border 自身从不调用模型 API:`llm-request` 导出掩码审阅包,`llm-ingest` 严格校验 agent 结论并重算裁决。退出码即合同:0 通过、1 拦截、2 门禁无法作答,任何"工具不健康"都不可能被误读为干净。MIT 许可,无遥测,除你配置的注册表预检外不联网。
792
855
 
793
856
  发布一致性(0.4.1):起因是 aihr 事故——PyPI 上标为 0.2.2 的 wheel 里 `__init__.__version__` 却写着 0.2.1,构件名、元数据与实际模块行为三者不一致,所有 `==0.2.2` 的用户静默装上了旧行为;同类漂移在本仓库也出现过两次(npm tarball 的 User-Agent 停在 0.3.0 而 package.json 是 0.3.1;package-lock.json 根版本两个 release 一直躺在 0.1.0)。发布阶段扫描器因此在构件内部逐源交叉核对版本号:`release-coherence-version-drift` 为 CRITICAL(package.json 与被强制打包的 package-lock、wheel 文件名对 dist-info 目录对 METADATA `Version:` 对 `__init__` 字面量、sdist 的 pyproject 对 PKG-INFO/setup 系字面量、Cargo.toml 对已打包的 Cargo.lock、.gemspec 对 metadata.gz、dist 文件名对 sdist 内 PKG-INFO);版本源存在但无法静态解析(动态 `__version__`、`attr:`、`dynamic = ["version"]`、坏 lockfile)判 MEDIUM `release-coherence-unverifiable-source`——不可核查绝不静默算干净;第二版本源根本没被打包时不发现在内,缺源不是漂移,这条边界是承重的,误报的门禁会把用户训练成 `--force`。唯一可静态强制的跨包管理器声明是 opt-in `release.twin`(`{pypi, npm}` 严格 zod 对列表,未知键 exit 2):同一 run 的 dist 里孪生版本不等 ⇒ CRITICAL `release-coherence-twin-drift`,消息点名两个构件。规则源文件与 residue 指纹表一样并入 rulesHash,改一个匹配器即令全部缓存 PASS 失效。
857
+
858
+ OpenCode 插件适配层(0.5.0):零手工装载两条路线——主路是在 `opencode.jsonc` 声明 `"plugin": ["border-customs@0.5.0"]`(建议钉具体版本,@latest 每次冷启动都打注册表),opencode 自行下载构件,插件入口走 `exports["./server"]`;插件自带 CLI 解析,顺序为 `BORDER_BIN` 覆盖 > 包内同侧 `dist/index.js` > PATH 上的 `border`,免全局安装、免 PATH 配置。备路是 `border opencode install|status|uninstall` 文件投递,落盘 `$XDG_CONFIG_HOME/opencode` 下的 `plugins/border.ts` 与 `commands/border.md`(无 XDG 回退 HOME/.config):受管文件凭 marker 行识别身份,同名外人文件 exit 2 拒绝、绝不覆盖,卸载只删自己带 marker 的文件,字节相同即 `up to date`。装载面只有一个 `border` 工具(argv-only 生成、无 shell、300 秒与每流 64 KiB 上限,命令闭集 check/push/status/llm-request/llm-ingest/scan/roundtrip/--help)与一条 `/border` 斜杠命令(config 钩子以 `??=` 自注册,用户同名文件命令保持权威)。边界如实说:allowlist 是 UX/防呆而非安全边界——插件进程与 opencode 进程同权,门禁的牙齿在 CLI 与账本,不在适配层;`push --yes` 按设计留在终端人审,工具端机械拒绝,会话内裸 push 本就是 CLI 合同的 DRY-RUN。装载验证走 opt-in 探针 `BORDER_OPENCODE_PROBE=1`(临时 HOME/XDG 起 `opencode serve` 对照组,断言 `border` 工具 id 与恰好一条 border 命令,重复即 FAIL;插件加载失败是静默的,只认 HTTP 响应不认退出码)。两条路线装载后都需重启 opencode:工具与命令在启动时扫描。
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "border-customs",
3
- "version": "0.3.1",
3
+ "version": "0.5.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "border-customs",
9
- "version": "0.3.1",
9
+ "version": "0.5.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
+ "@opencode-ai/plugin": "^1.17.4",
12
13
  "@secretlint/core": "13.0.5",
13
14
  "@secretlint/secretlint-rule-no-dotenv": "13.0.5",
14
15
  "@secretlint/secretlint-rule-no-homedir": "13.0.5",
@@ -32,6 +33,18 @@
32
33
  "node": ">=22.0.0"
33
34
  }
34
35
  },
36
+ "node_modules/@ai-sdk/provider": {
37
+ "version": "3.0.8",
38
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.8.tgz",
39
+ "integrity": "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==",
40
+ "license": "Apache-2.0",
41
+ "dependencies": {
42
+ "json-schema": "^0.4.0"
43
+ },
44
+ "engines": {
45
+ "node": ">=18"
46
+ }
47
+ },
35
48
  "node_modules/@azu/format-text": {
36
49
  "version": "1.0.2",
37
50
  "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz",
@@ -552,6 +565,84 @@
552
565
  "dev": true,
553
566
  "license": "MIT"
554
567
  },
568
+ "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
569
+ "version": "3.0.4",
570
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz",
571
+ "integrity": "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==",
572
+ "cpu": [
573
+ "arm64"
574
+ ],
575
+ "license": "MIT",
576
+ "optional": true,
577
+ "os": [
578
+ "darwin"
579
+ ]
580
+ },
581
+ "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": {
582
+ "version": "3.0.4",
583
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz",
584
+ "integrity": "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==",
585
+ "cpu": [
586
+ "x64"
587
+ ],
588
+ "license": "MIT",
589
+ "optional": true,
590
+ "os": [
591
+ "darwin"
592
+ ]
593
+ },
594
+ "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": {
595
+ "version": "3.0.4",
596
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz",
597
+ "integrity": "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==",
598
+ "cpu": [
599
+ "arm"
600
+ ],
601
+ "license": "MIT",
602
+ "optional": true,
603
+ "os": [
604
+ "linux"
605
+ ]
606
+ },
607
+ "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": {
608
+ "version": "3.0.4",
609
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz",
610
+ "integrity": "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==",
611
+ "cpu": [
612
+ "arm64"
613
+ ],
614
+ "license": "MIT",
615
+ "optional": true,
616
+ "os": [
617
+ "linux"
618
+ ]
619
+ },
620
+ "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": {
621
+ "version": "3.0.4",
622
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz",
623
+ "integrity": "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==",
624
+ "cpu": [
625
+ "x64"
626
+ ],
627
+ "license": "MIT",
628
+ "optional": true,
629
+ "os": [
630
+ "linux"
631
+ ]
632
+ },
633
+ "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": {
634
+ "version": "3.0.4",
635
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz",
636
+ "integrity": "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==",
637
+ "cpu": [
638
+ "x64"
639
+ ],
640
+ "license": "MIT",
641
+ "optional": true,
642
+ "os": [
643
+ "win32"
644
+ ]
645
+ },
555
646
  "node_modules/@nodelib/fs.scandir": {
556
647
  "version": "2.1.5",
557
648
  "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -590,6 +681,52 @@
590
681
  "node": ">= 8"
591
682
  }
592
683
  },
684
+ "node_modules/@opencode-ai/plugin": {
685
+ "version": "1.18.30",
686
+ "resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.18.30.tgz",
687
+ "integrity": "sha512-bXWcA2VD478PXXke1qAYANTq58fCcbgY0GAUqZIFZqPpo48FoG8RH37nNZ78eHtz+ddiKIhFTBZJRaHF3IgFqw==",
688
+ "license": "MIT",
689
+ "dependencies": {
690
+ "@ai-sdk/provider": "3.0.8",
691
+ "@opencode-ai/sdk": "1.18.30",
692
+ "effect": "4.0.0-beta.83",
693
+ "zod": "4.1.8"
694
+ },
695
+ "peerDependencies": {
696
+ "@opentui/core": ">=0.4.5",
697
+ "@opentui/keymap": ">=0.4.5",
698
+ "@opentui/solid": ">=0.4.5"
699
+ },
700
+ "peerDependenciesMeta": {
701
+ "@opentui/core": {
702
+ "optional": true
703
+ },
704
+ "@opentui/keymap": {
705
+ "optional": true
706
+ },
707
+ "@opentui/solid": {
708
+ "optional": true
709
+ }
710
+ }
711
+ },
712
+ "node_modules/@opencode-ai/plugin/node_modules/zod": {
713
+ "version": "4.1.8",
714
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.8.tgz",
715
+ "integrity": "sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==",
716
+ "license": "MIT",
717
+ "funding": {
718
+ "url": "https://github.com/sponsors/colinhacks"
719
+ }
720
+ },
721
+ "node_modules/@opencode-ai/sdk": {
722
+ "version": "1.18.30",
723
+ "resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.18.30.tgz",
724
+ "integrity": "sha512-uviJ+PZLc/D1szt33WGzzt/rqJ+IaNmRGBb+UcOXrcQANl8XXKJrp4CNQQ2UAnUJ3Ek+VqcamIwjtKHUW/OjOQ==",
725
+ "license": "MIT",
726
+ "dependencies": {
727
+ "cross-spawn": "7.0.6"
728
+ }
729
+ },
593
730
  "node_modules/@pinojs/redact": {
594
731
  "version": "0.4.0",
595
732
  "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
@@ -856,6 +993,12 @@
856
993
  "url": "https://github.com/sindresorhus/is?sponsor=1"
857
994
  }
858
995
  },
996
+ "node_modules/@standard-schema/spec": {
997
+ "version": "1.1.0",
998
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
999
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
1000
+ "license": "MIT"
1001
+ },
859
1002
  "node_modules/@textlint/ast-node-types": {
860
1003
  "version": "15.8.0",
861
1004
  "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.8.0.tgz",
@@ -2170,6 +2313,20 @@
2170
2313
  "url": "https://opencollective.com/express"
2171
2314
  }
2172
2315
  },
2316
+ "node_modules/cross-spawn": {
2317
+ "version": "7.0.6",
2318
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
2319
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
2320
+ "license": "MIT",
2321
+ "dependencies": {
2322
+ "path-key": "^3.1.0",
2323
+ "shebang-command": "^2.0.0",
2324
+ "which": "^2.0.1"
2325
+ },
2326
+ "engines": {
2327
+ "node": ">= 8"
2328
+ }
2329
+ },
2173
2330
  "node_modules/dashdash": {
2174
2331
  "version": "1.14.1",
2175
2332
  "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -2254,6 +2411,16 @@
2254
2411
  "npm": "1.2.8000 || >= 1.4.16"
2255
2412
  }
2256
2413
  },
2414
+ "node_modules/detect-libc": {
2415
+ "version": "2.1.2",
2416
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
2417
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
2418
+ "license": "Apache-2.0",
2419
+ "optional": true,
2420
+ "engines": {
2421
+ "node": ">=8"
2422
+ }
2423
+ },
2257
2424
  "node_modules/dir-glob": {
2258
2425
  "version": "3.0.1",
2259
2426
  "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -2339,6 +2506,24 @@
2339
2506
  "dev": true,
2340
2507
  "license": "MIT"
2341
2508
  },
2509
+ "node_modules/effect": {
2510
+ "version": "4.0.0-beta.83",
2511
+ "resolved": "https://registry.npmjs.org/effect/-/effect-4.0.0-beta.83.tgz",
2512
+ "integrity": "sha512-0wsak8RtgGAr9UWSbVDgJHZcUqMSvicHcvaZv1MbMM7MCGgW4Rn/137J1MHQbwYPcwYGxT/IqehFd+UbYuj78w==",
2513
+ "license": "MIT",
2514
+ "dependencies": {
2515
+ "@standard-schema/spec": "^1.1.0",
2516
+ "fast-check": "^4.8.0",
2517
+ "find-my-way-ts": "^0.1.6",
2518
+ "ini": "^7.0.0",
2519
+ "kubernetes-types": "^1.30.0",
2520
+ "msgpackr": "^2.0.1",
2521
+ "multipasta": "^0.2.7",
2522
+ "toml": "^4.1.1",
2523
+ "uuid": "^14.0.0",
2524
+ "yaml": "^2.9.0"
2525
+ }
2526
+ },
2342
2527
  "node_modules/emoji-regex": {
2343
2528
  "version": "8.0.0",
2344
2529
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -2647,6 +2832,28 @@
2647
2832
  ],
2648
2833
  "license": "MIT"
2649
2834
  },
2835
+ "node_modules/fast-check": {
2836
+ "version": "4.10.0",
2837
+ "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-4.10.0.tgz",
2838
+ "integrity": "sha512-hhqQL+IJllZi3aM4TKvmCj3bywLEcycNTTLZeLhA9ttMxBrCqM07q7Di4kl+j9EWSTXvJH1+EpIgsDbF/+8H5Q==",
2839
+ "funding": [
2840
+ {
2841
+ "type": "individual",
2842
+ "url": "https://github.com/sponsors/dubzzz"
2843
+ },
2844
+ {
2845
+ "type": "opencollective",
2846
+ "url": "https://opencollective.com/fast-check"
2847
+ }
2848
+ ],
2849
+ "license": "MIT",
2850
+ "dependencies": {
2851
+ "pure-rand": "^8.0.0"
2852
+ },
2853
+ "engines": {
2854
+ "node": ">=12.17.0"
2855
+ }
2856
+ },
2650
2857
  "node_modules/fast-deep-equal": {
2651
2858
  "version": "3.1.3",
2652
2859
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -2751,6 +2958,12 @@
2751
2958
  "dev": true,
2752
2959
  "license": "MIT"
2753
2960
  },
2961
+ "node_modules/find-my-way-ts": {
2962
+ "version": "0.1.6",
2963
+ "resolved": "https://registry.npmjs.org/find-my-way-ts/-/find-my-way-ts-0.1.6.tgz",
2964
+ "integrity": "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==",
2965
+ "license": "MIT"
2966
+ },
2754
2967
  "node_modules/forever-agent": {
2755
2968
  "version": "0.6.1",
2756
2969
  "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -3229,6 +3442,15 @@
3229
3442
  "dev": true,
3230
3443
  "license": "ISC"
3231
3444
  },
3445
+ "node_modules/ini": {
3446
+ "version": "7.0.0",
3447
+ "resolved": "https://registry.npmjs.org/ini/-/ini-7.0.0.tgz",
3448
+ "integrity": "sha512-ifK0CgjALofS5bkrcTy4RaQ9Vx2Knf/eLeIO+NaswQEpH1UblrtTSCIvN71qQDMq0PeQ/SSPojvEJp9vvvfr+w==",
3449
+ "license": "ISC",
3450
+ "engines": {
3451
+ "node": "^22.22.2 || ^24.15.0 || >=26.0.0"
3452
+ }
3453
+ },
3232
3454
  "node_modules/ipaddr.js": {
3233
3455
  "version": "1.9.1",
3234
3456
  "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
@@ -3332,6 +3554,12 @@
3332
3554
  "dev": true,
3333
3555
  "license": "MIT"
3334
3556
  },
3557
+ "node_modules/isexe": {
3558
+ "version": "2.0.0",
3559
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
3560
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
3561
+ "license": "ISC"
3562
+ },
3335
3563
  "node_modules/isstream": {
3336
3564
  "version": "0.1.2",
3337
3565
  "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -3397,7 +3625,6 @@
3397
3625
  "version": "0.4.0",
3398
3626
  "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
3399
3627
  "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
3400
- "dev": true,
3401
3628
  "license": "(AFL-2.1 OR BSD-3-Clause)"
3402
3629
  },
3403
3630
  "node_modules/json-schema-traverse": {
@@ -3524,6 +3751,12 @@
3524
3751
  "@keyv/serialize": "^1.1.1"
3525
3752
  }
3526
3753
  },
3754
+ "node_modules/kubernetes-types": {
3755
+ "version": "1.30.0",
3756
+ "resolved": "https://registry.npmjs.org/kubernetes-types/-/kubernetes-types-1.30.0.tgz",
3757
+ "integrity": "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q==",
3758
+ "license": "Apache-2.0"
3759
+ },
3527
3760
  "node_modules/lockfile": {
3528
3761
  "version": "1.0.4",
3529
3762
  "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz",
@@ -3831,6 +4064,43 @@
3831
4064
  "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
3832
4065
  "license": "MIT"
3833
4066
  },
4067
+ "node_modules/msgpackr": {
4068
+ "version": "2.1.0",
4069
+ "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-2.1.0.tgz",
4070
+ "integrity": "sha512-p/pBCVO63CsvvpkomUnNNag6+n38rULuDA6HHe70o2gtC8ODI52foF/4ko2qQcp6OiErJXTmrZeXmsGGHsIQNQ==",
4071
+ "license": "MIT",
4072
+ "optionalDependencies": {
4073
+ "msgpackr-extract": "^3.0.4"
4074
+ }
4075
+ },
4076
+ "node_modules/msgpackr-extract": {
4077
+ "version": "3.0.4",
4078
+ "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz",
4079
+ "integrity": "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==",
4080
+ "hasInstallScript": true,
4081
+ "license": "MIT",
4082
+ "optional": true,
4083
+ "dependencies": {
4084
+ "node-gyp-build-optional-packages": "5.2.2"
4085
+ },
4086
+ "bin": {
4087
+ "download-msgpackr-prebuilds": "bin/download-prebuilds.js"
4088
+ },
4089
+ "optionalDependencies": {
4090
+ "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4",
4091
+ "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4",
4092
+ "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4",
4093
+ "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4",
4094
+ "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4",
4095
+ "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4"
4096
+ }
4097
+ },
4098
+ "node_modules/multipasta": {
4099
+ "version": "0.2.8",
4100
+ "resolved": "https://registry.npmjs.org/multipasta/-/multipasta-0.2.8.tgz",
4101
+ "integrity": "sha512-ZPWuMKyv0cSO29f7hozp+k6+crZbQijV8ipMvxNxRf2SwtYGTX1ZX89Kd20VV4H9Znonx+EQn+iy1wGQsJ+b+Q==",
4102
+ "license": "MIT"
4103
+ },
3834
4104
  "node_modules/negotiator": {
3835
4105
  "version": "0.6.4",
3836
4106
  "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
@@ -3869,6 +4139,21 @@
3869
4139
  }
3870
4140
  }
3871
4141
  },
4142
+ "node_modules/node-gyp-build-optional-packages": {
4143
+ "version": "5.2.2",
4144
+ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz",
4145
+ "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==",
4146
+ "license": "MIT",
4147
+ "optional": true,
4148
+ "dependencies": {
4149
+ "detect-libc": "^2.0.1"
4150
+ },
4151
+ "bin": {
4152
+ "node-gyp-build-optional-packages": "bin.js",
4153
+ "node-gyp-build-optional-packages-optional": "optional.js",
4154
+ "node-gyp-build-optional-packages-test": "build-test.js"
4155
+ }
4156
+ },
3872
4157
  "node_modules/normalize-package-data": {
3873
4158
  "version": "8.0.0",
3874
4159
  "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz",
@@ -4030,6 +4315,15 @@
4030
4315
  "node": ">= 0.8"
4031
4316
  }
4032
4317
  },
4318
+ "node_modules/path-key": {
4319
+ "version": "3.1.1",
4320
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
4321
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
4322
+ "license": "MIT",
4323
+ "engines": {
4324
+ "node": ">=8"
4325
+ }
4326
+ },
4033
4327
  "node_modules/path-to-regexp": {
4034
4328
  "version": "0.1.13",
4035
4329
  "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
@@ -4291,6 +4585,22 @@
4291
4585
  "pump": "^2.0.0"
4292
4586
  }
4293
4587
  },
4588
+ "node_modules/pure-rand": {
4589
+ "version": "8.4.2",
4590
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-8.4.2.tgz",
4591
+ "integrity": "sha512-vvuOGgcuPJAirlHvuQw1TrOiw7ptaIXXmIbNuiNOY6lNGJJH49PQ1Kj4nd783nPdQhQdicgOjVI2yI/9BD6/Ng==",
4592
+ "funding": [
4593
+ {
4594
+ "type": "individual",
4595
+ "url": "https://github.com/sponsors/dubzzz"
4596
+ },
4597
+ {
4598
+ "type": "opencollective",
4599
+ "url": "https://opencollective.com/fast-check"
4600
+ }
4601
+ ],
4602
+ "license": "MIT"
4603
+ },
4294
4604
  "node_modules/qs": {
4295
4605
  "version": "6.16.0",
4296
4606
  "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz",
@@ -4716,6 +5026,27 @@
4716
5026
  "dev": true,
4717
5027
  "license": "ISC"
4718
5028
  },
5029
+ "node_modules/shebang-command": {
5030
+ "version": "2.0.0",
5031
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
5032
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
5033
+ "license": "MIT",
5034
+ "dependencies": {
5035
+ "shebang-regex": "^3.0.0"
5036
+ },
5037
+ "engines": {
5038
+ "node": ">=8"
5039
+ }
5040
+ },
5041
+ "node_modules/shebang-regex": {
5042
+ "version": "3.0.0",
5043
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
5044
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
5045
+ "license": "MIT",
5046
+ "engines": {
5047
+ "node": ">=8"
5048
+ }
5049
+ },
4719
5050
  "node_modules/side-channel": {
4720
5051
  "version": "1.1.1",
4721
5052
  "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
@@ -5272,6 +5603,15 @@
5272
5603
  "node": ">=0.6"
5273
5604
  }
5274
5605
  },
5606
+ "node_modules/toml": {
5607
+ "version": "4.3.0",
5608
+ "resolved": "https://registry.npmjs.org/toml/-/toml-4.3.0.tgz",
5609
+ "integrity": "sha512-lVb8X9BsPVuH0M4BKeS91tXAmJvCjQ5UIyAbQFaxkKGyUFK2RPkhwaFSQH8vbpl1d23eu/IBH+dwVMHWaq9A5A==",
5610
+ "license": "MIT",
5611
+ "engines": {
5612
+ "node": ">=20"
5613
+ }
5614
+ },
5275
5615
  "node_modules/tough-cookie": {
5276
5616
  "version": "5.1.2",
5277
5617
  "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
@@ -5464,6 +5804,19 @@
5464
5804
  "node": ">= 0.4.0"
5465
5805
  }
5466
5806
  },
5807
+ "node_modules/uuid": {
5808
+ "version": "14.0.2",
5809
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz",
5810
+ "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==",
5811
+ "funding": [
5812
+ "https://github.com/sponsors/broofa",
5813
+ "https://github.com/sponsors/ctavan"
5814
+ ],
5815
+ "license": "MIT",
5816
+ "bin": {
5817
+ "uuid": "dist-node/bin/uuid"
5818
+ }
5819
+ },
5467
5820
  "node_modules/validate-npm-package-license": {
5468
5821
  "version": "3.0.4",
5469
5822
  "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -5640,6 +5993,21 @@
5640
5993
  "webidl-conversions": "^3.0.0"
5641
5994
  }
5642
5995
  },
5996
+ "node_modules/which": {
5997
+ "version": "2.0.2",
5998
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
5999
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
6000
+ "license": "ISC",
6001
+ "dependencies": {
6002
+ "isexe": "^2.0.0"
6003
+ },
6004
+ "bin": {
6005
+ "node-which": "bin/node-which"
6006
+ },
6007
+ "engines": {
6008
+ "node": ">= 8"
6009
+ }
6010
+ },
5643
6011
  "node_modules/wordwrap": {
5644
6012
  "version": "1.0.0",
5645
6013
  "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",