@avantf/dsh-plugin-base 0.3.1 → 0.4.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.
Files changed (98) hide show
  1. package/README.md +29 -15
  2. package/dist/bootstrap.d.ts +3 -2
  3. package/dist/bootstrap.d.ts.map +1 -1
  4. package/dist/bootstrap.js +3 -2
  5. package/dist/compat.d.ts +2 -2
  6. package/dist/compat.js +5 -5
  7. package/dist/errors.d.ts +6 -1
  8. package/dist/errors.d.ts.map +1 -1
  9. package/dist/index.d.ts +23 -9
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +45 -22
  12. package/dist/interface.d.ts +296 -23
  13. package/dist/interface.d.ts.map +1 -1
  14. package/dist/interface.js +206 -8
  15. package/dist/interface_gate.d.ts +20 -6
  16. package/dist/interface_gate.d.ts.map +1 -1
  17. package/dist/interface_gate.js +37 -7
  18. package/dist/internal.d.ts +26 -1
  19. package/dist/internal.d.ts.map +1 -1
  20. package/dist/internal.js +27 -1
  21. package/dist/kit/family.d.ts +2 -2
  22. package/dist/kit/family.js +3 -3
  23. package/dist/kit/index.d.ts +5 -1
  24. package/dist/kit/index.d.ts.map +1 -1
  25. package/dist/kit/index.js +5 -1
  26. package/dist/kit/logger.d.ts +1 -1
  27. package/dist/kit/logger.js +1 -1
  28. package/dist/kit/prompt_files.d.ts +37 -3
  29. package/dist/kit/prompt_files.d.ts.map +1 -1
  30. package/dist/kit/prompt_files.js +45 -0
  31. package/dist/kit/typert.d.ts +2 -2
  32. package/dist/kit/wellformed.d.ts +79 -0
  33. package/dist/kit/wellformed.d.ts.map +1 -0
  34. package/dist/kit/wellformed.js +155 -0
  35. package/dist/layout.d.ts +17 -2
  36. package/dist/layout.d.ts.map +1 -1
  37. package/dist/layout.js +15 -5
  38. package/dist/lint.d.ts.map +1 -1
  39. package/dist/lint.js +2 -2
  40. package/dist/lock.d.ts +18 -0
  41. package/dist/lock.d.ts.map +1 -1
  42. package/dist/lock.js +77 -10
  43. package/dist/net.d.ts +106 -3
  44. package/dist/net.d.ts.map +1 -1
  45. package/dist/net.js +128 -30
  46. package/dist/providers/archive.d.ts.map +1 -1
  47. package/dist/providers/archive.js +108 -20
  48. package/dist/providers/model.d.ts +26 -3
  49. package/dist/providers/model.d.ts.map +1 -1
  50. package/dist/providers/model.js +159 -32
  51. package/dist/providers/npm.d.ts +5 -0
  52. package/dist/providers/npm.d.ts.map +1 -1
  53. package/dist/providers/npm.js +62 -21
  54. package/dist/provisioner.d.ts.map +1 -1
  55. package/dist/provisioner.js +128 -31
  56. package/dist/state.d.ts.map +1 -1
  57. package/dist/state.js +8 -3
  58. package/dist/tar.d.ts +7 -0
  59. package/dist/tar.d.ts.map +1 -1
  60. package/dist/tar.js +12 -5
  61. package/dist/types.d.ts +11 -1
  62. package/dist/types.d.ts.map +1 -1
  63. package/dist/zip.d.ts.map +1 -1
  64. package/dist/zip.js +10 -1
  65. package/package.json +18 -19
  66. package/dist/artifact.js.map +0 -1
  67. package/dist/bootstrap.js.map +0 -1
  68. package/dist/cli.js.map +0 -1
  69. package/dist/compat.js.map +0 -1
  70. package/dist/conformance.js.map +0 -1
  71. package/dist/errors.js.map +0 -1
  72. package/dist/fs.js.map +0 -1
  73. package/dist/index.js.map +0 -1
  74. package/dist/integrity.js.map +0 -1
  75. package/dist/interface.js.map +0 -1
  76. package/dist/interface_gate.js.map +0 -1
  77. package/dist/internal.js.map +0 -1
  78. package/dist/kit/family.js.map +0 -1
  79. package/dist/kit/index.js.map +0 -1
  80. package/dist/kit/logger.js.map +0 -1
  81. package/dist/kit/prompt_files.js.map +0 -1
  82. package/dist/kit/typert.js.map +0 -1
  83. package/dist/layout.js.map +0 -1
  84. package/dist/lint.js.map +0 -1
  85. package/dist/lock.js.map +0 -1
  86. package/dist/manifest.js.map +0 -1
  87. package/dist/net.js.map +0 -1
  88. package/dist/package-name.js.map +0 -1
  89. package/dist/preset.js.map +0 -1
  90. package/dist/providers/archive.js.map +0 -1
  91. package/dist/providers/model.js.map +0 -1
  92. package/dist/providers/npm.js.map +0 -1
  93. package/dist/provisioner.js.map +0 -1
  94. package/dist/semver.js.map +0 -1
  95. package/dist/state.js.map +0 -1
  96. package/dist/tar.js.map +0 -1
  97. package/dist/types.js.map +0 -1
  98. package/dist/zip.js.map +0 -1
package/README.md CHANGED
@@ -20,6 +20,9 @@
20
20
 
21
21
  - 已经在盘上 / PATH 上的直接用,不重复下载;
22
22
  - 需要安装的由框架下载、校验完整性、**原子落盘**(同目录临时文件 + rename;跨进程一把族根锁);
23
+ - 锁被活体进程长期持有(锁文件 mtime 越过 `staleMs` 而 holder 的 pid 仍活着)时**不抢锁**:打一条用户可见的
24
+ `warn`(写明 holder 的 pid、已持有时长、本次已等待时长)后继续按预算等待;等不到就报 `lock/timeout`,
25
+ 消息里带 holder 与 mtime 诊断。抢一个活写者的锁会让两个写者进同一目录,超时只是报告;
23
26
  - 每一项给出 `present / installed / skipped / failed`,失败带稳定 `code`;
24
27
  - 三种内置资源种类:`npm-package`、`binary-archive`、`model-cache`。新的种类 = 一个新的 provider,
25
28
  核心不动;
@@ -41,10 +44,13 @@
41
44
 
42
45
  | 工具 | 作用 |
43
46
  | --- | --- |
44
- | `PromptFiles` | "缺失或空白就写入默认、有内容则逐字读回"的用户可编辑文本文件层(含崩溃残留的死临时文件清理) |
45
- | `createPluginLogger` | 带统一前缀、可镜像到宿主 logger 的 logger |
47
+ | `PromptFiles` | "缺失或空白就写入默认、有内容则逐字读回"的用户可编辑文本文件层(含崩溃残留的死临时文件清理)。可传 `namespace` 把 `<dataHome>/prompts` 里属于本插件的 `mem-*` / `mission-*` 前缀变成 base 校验的字段(不传则行为不变) |
46
48
  | `familyHome` / `familyToolsDir` / `familyModelsDir` / `resolveDataHome` / `expandHome` | 家族根与数据根解析:**⑤ 显式 → ④ 环境变量 → ② 配置值 → 默认**,一律传**具名 slot** |
47
- | `strictCodec` / `endpointId` / `fieldSymbol` / `resultSymbol` | 组装 Typert wire 描述符的几行约定 |
49
+ | `wellFormedText` / `wellFormedDeep` | 出站文本的良构修复:孤立代理(lone surrogate)会被 `JSON.stringify` 原样写出、被严格解析器整篇拒收,这里统一换成 U+FFFD;引擎没有 `String.prototype.toWellFormed` 时走等价扫描。递归版只修字符串、数组与普通对象(含键),`Date` / 类实例等一律按同一性原样返回 |
50
+
51
+ > 世代 v3 把没有运行期消费者的构件移到了 `./internal`(如 `createPluginLogger`、Typert 符号
52
+ > `strictCodec` / `endpointId` / `fieldSymbol` / `resultSymbol`、compat 门禁的单个探针、`npmPackageProvider`)。
53
+ > 它们不再是 `.` 接口的一部分;本包自己的插件各有自己的 logger 与 Typert 镜像,不需要它们。
48
54
 
49
55
  ### 4. 接口世代
50
56
 
@@ -53,12 +59,14 @@
53
59
  - `INTERFACE_VERSION`(正整数)+ `api/interface-vN.json` 快照(该代的值名与类型名,随源码在仓库里,
54
60
  不进产物);
55
61
  - `checkInterface(required, module)`:把"调用方构建时所对的世代"与"运行时加载到的本包报告的世代"
56
- 比一比,返回 `ok` / `incompatible` / `cannot-tell`。纯函数、**双向**、读属性有守卫(取属性就抛的
57
- 对象读成"没报")、**永不抛**;
62
+ 比一比,返回 `ok` / `incompatible` / `cannot-tell`。纯函数、**非对称**、读属性有守卫(取属性就抛的
63
+ 对象读成"没报")、**永不抛**。只有加载到的世代**更旧**(成员可能缺失)才是 `incompatible`;加载到的
64
+ 世代**更新**是 `ok` + 一句话的 `warning`(新世代不拿走有消费者的成员 —— v1→v2 是名字超集,v2→v3 是
65
+ 剪枝,剪掉的 18 个成员经证明零消费者),相等是 `ok`;
58
66
  - `readInterfaceRequirement(url)`:读调用方产物里烘着的那条记录 `{ baseVersion, interfaceVersion }`;
59
67
  缺失或畸形返回 `undefined`("没烘"),不抛;
60
- - 拿到 `incompatible` 时的建议动作是**降级**(不使用本包的共享能力)而不是拒绝挂载 —— 本包只把裁决与
61
- 一句话的 `reason` 交出去,怎么处理由调用方决定。
68
+ - 拿到 `incompatible` 时的建议动作是**降级**(不使用本包的共享能力)而不是拒绝挂载;拿到 `ok` + `warning`
69
+ 时照常使用、只把那条警告记下来 —— 本包只把裁决与一句话的 `reason` / `warning` 交出去,怎么处理由调用方决定。
62
70
 
63
71
  ## 怎么用
64
72
 
@@ -78,7 +86,6 @@ import type { Provisioner } from '@avantf/dsh-plugin-base'
78
86
  const home = join(homedir(), '.avantf', 'env')
79
87
 
80
88
  const provisioner: Provisioner = framework.createProvisioner({ home, logger })
81
- provisioner.register(framework.npmPackageProvider())
82
89
  provisioner.register(framework.binaryArchiveProvider())
83
90
  provisioner.register(framework.modelCacheProvider())
84
91
  provisioner.declare(manifest)
@@ -205,10 +212,10 @@ if (!verdict.load) {
205
212
  ### 取用共享工具
206
213
 
207
214
  ```ts
208
- import { PromptFiles, createPluginLogger } from '@avantf/dsh-plugin-base'
215
+ import { PromptFiles } from '@avantf/dsh-plugin-base'
209
216
 
210
- const log = createPluginLogger({ prefix: '@scope/my-plugin' })
211
- const files = new PromptFiles({ dir: join(dataHome, 'prompts'), logger: log })
217
+ // 插件自己的 logger(base 解析之前就要用);提示词层传 `namespace` 让 base 校验前缀。
218
+ const files = new PromptFiles({ dir: join(dataHome, 'prompts'), namespace: 'my-plugin', logger })
212
219
  .load([{ file: 'my-plugin-prompt.md', fallback: '内置默认正文\n' }])
213
220
  // files[0].text —— 用户写的正文(逐字),或刚写下的默认正文
214
221
  ```
@@ -282,8 +289,16 @@ assertProviderConformance(report)
282
289
 
283
290
  ## 版本承诺
284
291
 
285
- - 承诺稳定的接口是 `.` 上的导出(值 + 类型)与 `./preset` / `./conformance` / `./bootstrap` 三个子路径;
286
- `./internal` 是内部件,不承诺稳定。
292
+ - 接口面是 `.` 上的导出(值 + 类型)加上 `./preset` / `./conformance` / `./bootstrap` 三个子路径;`./internal`
293
+ 是内部件,从不承诺稳定(v3 起落在这里的还有那些没有运行期消费者的构件:compat 的单个探针、
294
+ provisioner 的常量、`npmPackageProvider`、Typert 符号、`createPluginLogger`)。
295
+ - **当前这一代(v3)把 `.` 收成了一个稳定子集**:`.` 只列"插件真取用、或插件作者被期望调用"的成员
296
+ (32 个值 + 66 个类型),其余进 `./internal`。名字面落在 `api/interface-vN.json` 快照里,随源码在仓库、
297
+ 不进产物。这是为了把"内部件的改动"与"接口"解耦(v3 之前 `.` 是两句 `export *` 的副产品,加一个内部
298
+ helper 就算接口变更),不是"这个集合永远不变":新能力从明确标注为不稳定的入口引入,既有成员按弃用
299
+ 周期退出。
300
+ - **v3 是第一次破坏性换代**:v2 的成员如果有消费者,v3 一个不少(剪掉的 18 个经跨树证明零消费者);
301
+ 但 v3 不再对 v2 做结构超集。旧调用方遇到更新的 base 仍判 `ok` + `warning`,遇到更旧的 base 才降级。
287
302
  - **接口与包版本是两条轴**:接口换代只升 `INTERFACE_VERSION` 并新增 `api/interface-vN.json`;包版本是
288
303
  普通 semver,只表达包自身(行为变更 minor、修复 patch)。
289
304
  - 顺序敏感的参数一律传**具名对象**(如 `resolveDataHome({ explicit, env, configured })`);可观察的文案
@@ -294,8 +309,7 @@ assertProviderConformance(report)
294
309
  ```bash
295
310
  pnpm check # 类型检查 + 测试
296
311
  pnpm build # tsc → dist/
297
- pnpm pack # 打包到 release/ 并断言产物
298
- pnpm release:check # 发布门禁:typecheck → build → test → pack
312
+ pnpm pack # 打包出 tarball
299
313
  ```
300
314
 
301
315
  ## 许可
@@ -3,7 +3,7 @@
3
3
  * @module bootstrap
4
4
  */
5
5
  /** The bootstrap version; the resolved framework must satisfy {@link supportedRange}. */
6
- export declare const VERSION = "0.3.1";
6
+ export declare const VERSION = "0.4.0";
7
7
  /**
8
8
  * The framework interval this bootstrap can launch.
9
9
  *
@@ -13,7 +13,8 @@ export declare const VERSION = "0.3.1";
13
13
  * compatibility promise — `>=0.3.0 <1.0.0` admits every 0.x base this generation of plugins can
14
14
  * consume, and stops at the major that invented a new interface generation. The interface itself is
15
15
  * the separate, runtime axis: a base inside this interval whose `INTERFACE_VERSION` differs is judged
16
- * by the base's own gate (INTERFACE.md §1, §3), which degrades rather than refusing.
16
+ * by the base's own gate (INTERFACE.md §1, §3) — an OLDER base degrades, a NEWER one is `ok` + a
17
+ * warning (generations are additive), and neither ever refuses the mount.
17
18
  */
18
19
  export declare const supportedRange = ">=0.3.0 <1.0.0";
19
20
  /** Sink for the warnings that replace a throw. */
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,yFAAyF;AACzF,eAAO,MAAM,OAAO,UAAU,CAAA;AAC9B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,mBAAmB,CAAA;AAI9C,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAA;IACjC,iDAAiD;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAC5B;AA8LD;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAoC7G;AAED,oFAAoF;AACpF,wBAAsB,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAaxG;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuCnG"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,yFAAyF;AACzF,eAAO,MAAM,OAAO,UAAU,CAAA;AAC9B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,mBAAmB,CAAA;AAI9C,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAA;IACjC,iDAAiD;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAC5B;AA8LD;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAoC7G;AAED,oFAAoF;AACpF,wBAAsB,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAaxG;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuCnG"}
package/dist/bootstrap.js CHANGED
@@ -7,7 +7,7 @@ import { createRequire } from 'node:module';
7
7
  import { dirname, join } from 'node:path';
8
8
  import { fileURLToPath, pathToFileURL } from 'node:url';
9
9
  /** The bootstrap version; the resolved framework must satisfy {@link supportedRange}. */
10
- export const VERSION = '0.3.1';
10
+ export const VERSION = '0.4.0';
11
11
  /**
12
12
  * The framework interval this bootstrap can launch.
13
13
  *
@@ -17,7 +17,8 @@ export const VERSION = '0.3.1';
17
17
  * compatibility promise — `>=0.3.0 <1.0.0` admits every 0.x base this generation of plugins can
18
18
  * consume, and stops at the major that invented a new interface generation. The interface itself is
19
19
  * the separate, runtime axis: a base inside this interval whose `INTERFACE_VERSION` differs is judged
20
- * by the base's own gate (INTERFACE.md §1, §3), which degrades rather than refusing.
20
+ * by the base's own gate (INTERFACE.md §1, §3) — an OLDER base degrades, a NEWER one is `ok` + a
21
+ * warning (generations are additive), and neither ever refuses the mount.
21
22
  */
22
23
  export const supportedRange = '>=0.3.0 <1.0.0';
23
24
  const PACKAGE = '@avantf/dsh-plugin-base';
package/dist/compat.d.ts CHANGED
@@ -247,7 +247,7 @@ export declare function toolProbeDeclaration(defineTool: ToolDeclarationHelper):
247
247
  *
248
248
  * What this proves that a method-presence check cannot: the registry ACCEPTED our
249
249
  * declaration shape and still lists it. It is the difference between "`register` is a
250
- * function" and "registering what we register works".
250
+ * function" and "registering what we register missions".
251
251
  * @param registry - `ctx.tools`.
252
252
  * @returns the outcome; never throws.
253
253
  */
@@ -279,7 +279,7 @@ export declare function readRuntimeVersions(packages: readonly string[], base?:
279
279
  * Read a live context into the plain evidence the rules consume.
280
280
  *
281
281
  * The probes are throwaway declarations shaped like the real ones: "`register` is a function" and
282
- * "registering what we register works" are different claims, and only the second one catches a
282
+ * "registering what we register missions" are different claims, and only the second one catches a
283
283
  * moved contract.
284
284
  * @param ctx - the live context (structural: only `get` is used).
285
285
  * @param spec - what the caller declared about itself.
package/dist/compat.js CHANGED
@@ -252,7 +252,7 @@ export function toolProbeDeclaration(defineTool) {
252
252
  *
253
253
  * What this proves that a method-presence check cannot: the registry ACCEPTED our
254
254
  * declaration shape and still lists it. It is the difference between "`register` is a
255
- * function" and "registering what we register works".
255
+ * function" and "registering what we register missions".
256
256
  * @param registry - `ctx.tools`.
257
257
  * @returns the outcome; never throws.
258
258
  */
@@ -423,7 +423,7 @@ export function readRuntimeVersions(packages, base = import.meta.url) {
423
423
  * Read a live context into the plain evidence the rules consume.
424
424
  *
425
425
  * The probes are throwaway declarations shaped like the real ones: "`register` is a function" and
426
- * "registering what we register works" are different claims, and only the second one catches a
426
+ * "registering what we register missions" are different claims, and only the second one catches a
427
427
  * moved contract.
428
428
  * @param ctx - the live context (structural: only `get` is used).
429
429
  * @param spec - what the caller declared about itself.
@@ -519,7 +519,7 @@ export function verdictOf(evidence) {
519
519
  }
520
520
  if (version.runtime !== version.declared) {
521
521
  versionDiffered = true;
522
- warnings.push(`this build was compiled against ${version.package} ${version.declared}, but its links now resolve to ${version.runtime} — rebuild against this machine's dsh (\`pnpm build:dsh\`)`);
522
+ warnings.push(`this build was compiled against ${version.package} ${version.declared}, but its links now resolve to ${version.runtime} — switch to the dsh version this build declares compatible, or upgrade this package`);
523
523
  }
524
524
  }
525
525
  if (evidence.events.length > 0) {
@@ -553,7 +553,7 @@ export function verdictOf(evidence) {
553
553
  else {
554
554
  lines.push({
555
555
  level: 'error',
556
- message: `${COMPAT_PREFIX} REFUSING to load — ${String(problems.length)} proven incompatibility(ies). Rebuild against this machine's dsh (\`pnpm build:dsh\`) or install the @deepseek-ai/dsh this build declares.`,
556
+ message: `${COMPAT_PREFIX} REFUSING to load — ${String(problems.length)} proven incompatibility(ies). Switch to the @deepseek-ai/dsh this build declares compatible, or upgrade this package.`,
557
557
  });
558
558
  }
559
559
  // `probe-failed` covers every PROVEN break — a service or method that is gone is the same finding
@@ -735,7 +735,7 @@ export function verifyRegisteredFaces(input) {
735
735
  if (missing.length > 0) {
736
736
  input.log.warn(`${COMPAT_PREFIX} WARNING — ${String(missing.length)} of ${String(expectedKeys.length + input.toolNames.length)} `
737
737
  + `real registrations are not visible afterwards: ${missing.join(', ')} — the plugin is already mounted, so this is `
738
- + 'reported rather than undone; rebuild against this machine\'s dsh (`pnpm build:dsh`), restart `dsh`, and check again');
738
+ + 'reported rather than undone; switch to the dsh version this build declares compatible (or upgrade this package), restart `dsh`, and check again');
739
739
  }
740
740
  return { missing };
741
741
  }
package/dist/errors.d.ts CHANGED
@@ -10,7 +10,12 @@ export type ProvisionCode = 'invalid-option' | 'ignored-field' | 'missing-need'
10
10
  /** `.layout.json` exists but could not be read (EACCES / ENOSPC / half-written). It shares the
11
11
  * read-only CONSEQUENCE with the two above and not their meaning: "a newer layout wrote this, do
12
12
  * not touch it" is a verdict about the home, while this is a fact about the read. */
13
- | 'layout/unreadable' | 'lock/timeout' | 'publish/cross-device' | 'fetch/failed' | 'extract/failed' | 'verify/failed' | 'unknown-error';
13
+ | 'layout/unreadable' | 'lock/timeout' | 'publish/cross-device' | 'fetch/failed'
14
+ /** A response body crossed a hard byte cap — either the declared `content-length` or the bytes
15
+ * actually read. Unlike a short read (which is a truncated DOWNLOAD and retries the next mirror),
16
+ * this is TERMINAL: every mirror serves the same oversized object, so trying another one cannot
17
+ * help. Providers branch on this code to decide whether to fall through. */
18
+ | 'fetch/too-large' | 'extract/failed' | 'verify/failed' | 'unknown-error';
14
19
  /** An error that carries a stable `code`; a caller branches on `code`, never on message text. */
15
20
  export declare class ProvisionError extends Error {
16
21
  readonly code: ProvisionCode;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;cACc;AACd,MAAM,MAAM,aAAa,GAErB,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,0BAA0B,GAC1B,gBAAgB,GAEhB,kBAAkB,GAClB,sBAAsB,GACtB,mBAAmB,GACnB,kBAAkB,GAElB,2BAA2B,GAC3B,kBAAkB,GAClB,wBAAwB,GACxB,kCAAkC,GAElC,wBAAwB,GACxB,4BAA4B;AAC9B,0DAA0D;GACxD,0BAA0B,GAE1B,qBAAqB,GACrB,yBAAyB,GACzB,gBAAgB,GAChB,iBAAiB;AACnB;;sFAEsF;GACpF,mBAAmB,GAEnB,cAAc,GACd,sBAAsB,GACtB,cAAc,GACd,gBAAgB,GAChB,eAAe,GAEf,eAAe,CAAA;AAEnB,iGAAiG;AACjG,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;gBAEvB,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAMlE;AAED,wEAAwE;AACxE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAQjF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;cACc;AACd,MAAM,MAAM,aAAa,GAErB,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,0BAA0B,GAC1B,gBAAgB,GAEhB,kBAAkB,GAClB,sBAAsB,GACtB,mBAAmB,GACnB,kBAAkB,GAElB,2BAA2B,GAC3B,kBAAkB,GAClB,wBAAwB,GACxB,kCAAkC,GAElC,wBAAwB,GACxB,4BAA4B;AAC9B,0DAA0D;GACxD,0BAA0B,GAE1B,qBAAqB,GACrB,yBAAyB,GACzB,gBAAgB,GAChB,iBAAiB;AACnB;;sFAEsF;GACpF,mBAAmB,GAEnB,cAAc,GACd,sBAAsB,GACtB,cAAc;AAChB;;;6EAG6E;GAC3E,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GAEf,eAAe,CAAA;AAEnB,iGAAiG;AACjG,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;gBAEvB,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAMlE;AAED,wEAAwE;AACxE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAQjF"}
package/dist/index.d.ts CHANGED
@@ -1,22 +1,36 @@
1
1
  /**
2
- * Plugin environment initialisation at startup.
2
+ * Plugin environment initialisation at startup — the `.` entry, written as an EXPLICIT list.
3
+ *
4
+ * Generation v3 (INTERFACE.md §9) replaced the two `export *` re-exports this file used to carry
5
+ * (`./compat.js`, `./kit/index.js`) with the list below. That is the whole point of the generation:
6
+ * before v3 the frozen surface was "whatever those two files happened to export", so adding an
7
+ * internal helper to `compat.ts` was silently an interface change. Now `.` carries the members the
8
+ * installed plugins actually consume plus the extension points a plugin author is expected to call,
9
+ * and nothing else: the zero-consumer composition pieces moved to `./internal` (see that module).
10
+ *
11
+ * The same surface is stated as a type + two name lists in `./interface.js`; `api/interface-v3.json`
12
+ * is its snapshot, and `test/public-surface.spec.ts` keeps the three in step. Do not add a member
13
+ * here without a generation decision.
14
+ *
3
15
  * @module index
4
16
  */
5
- export { CAPABILITIES, DEFAULT_DEADLINE_MS, ITEM_SCHEMA_VERSION, createProvisioner, normalizeOnMissing, } from './provisioner.js';
17
+ export { ITEM_SCHEMA_VERSION, createProvisioner } from './provisioner.js';
6
18
  export { ProvisionError, reasonOf } from './errors.js';
7
19
  export type { ProvisionCode } from './errors.js';
8
- export { npmPackageProvider, NPM_PACKAGE_KIND } from './providers/npm.js';
9
- export type { NpmPackageSpec } from './providers/npm.js';
10
20
  export { binaryArchiveProvider, BINARY_ARCHIVE_KIND } from './providers/archive.js';
11
21
  export type { ArchivePack, BinaryArchiveSpec } from './providers/archive.js';
12
22
  export { modelCacheProvider, MODEL_CACHE_KIND } from './providers/model.js';
13
23
  export type { ModelCacheLayout, ModelCacheSpec } from './providers/model.js';
14
- export * from './compat.js';
15
- export * from './kit/index.js';
24
+ export { BUILD_VERSIONS_FILE, COMPAT_PREFIX, compatReport, gatherEvidence, provision, readBuildVersions, readDeclaredVersions, readRuntimeVersions, registerMegaphone, schemaNamesFrom, toolProbeDeclaration, verdictOf, verifyRegisteredFaces, } from './compat.js';
25
+ export type { CompatContext, CompatEvidence, CompatLine, CompatLogger, CompatReportWords, CompatSpec, CompatVerdict, ProbeOutcome, ServiceContract, ServiceProbe, } from './compat.js';
26
+ export { expandHome, familyHome, familyModelsDir, familyToolsDir, resolveDataHome } from './kit/family.js';
27
+ export type { DataHomeInput } from './kit/family.js';
28
+ export { PromptFiles } from './kit/prompt_files.js';
29
+ export type { LoadedPromptText, PromptFileSpec, PromptFilesIo, PromptFilesLogger, PromptFilesOptions } from './kit/prompt_files.js';
30
+ export { wellFormedDeep, wellFormedText } from './kit/wellformed.js';
16
31
  export { INTERFACE_VERSION } from './interface.js';
17
- export type { BaseRuntimeV1, BaseTypeSurfaceV1 } from './interface.js';
32
+ export type { BaseRuntimeV1, BaseRuntimeV2, BaseRuntimeV3, BaseTypeSurfaceV1, BaseTypeSurfaceV2, BaseTypeSurfaceV3, } from './interface.js';
18
33
  export { checkInterface, readInterfaceRequirement } from './interface_gate.js';
19
- export type { InterfaceVerdict, InterfaceRequirement } from './interface_gate.js';
34
+ export type { InterfaceRequirement, InterfaceVerdict } from './interface_gate.js';
20
35
  export type { AtStartup, AtUse, BuiltinKind, ItemPolicy, Kind, Manifest, MirrorPolicy, OnMissing, ProvisionItem, ResourceHandle, ResourceSource, ResourceState, Startup, EnsureOptions, Plan, PlanAction, PlanEntry, PlanOptions, ProvisionEvent, ProvisionReport, ProvisionReportEntry, ProvisionStatus, ReportAction, Disposable, ProgressEvent, ProvisionFs, ProvisionLock, ProvisionLogger, ProvisionPolicy, Provisioner, ProvisionerExperimental, ProvisionerOptions, PrunePolicy, PruneReport, InstallContext, InstallManifest, Provider, ProviderContext, ProviderPlan, ProbeResult, PublishMeta, Resolved, ResourceIdentity, } from './types.js';
21
- export type { PluginLogger, PluginLoggerOptions, PromptFilesIo, PromptFilesLogger, PromptFilesOptions, StrictCodec, } from './kit/index.js';
22
36
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACzE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACnF,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC3E,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAM5E,cAAc,aAAa,CAAA;AAM3B,cAAc,gBAAgB,CAAA;AAW9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAMtE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9E,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAEjF,YAAY,EAEV,SAAS,EACT,KAAK,EACL,WAAW,EACX,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,aAAa,EAEb,cAAc,EACd,cAAc,EACd,aAAa,EACb,OAAO,EAEP,aAAa,EACb,IAAI,EACJ,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,YAAY,EAEZ,UAAU,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACX,uBAAuB,EACvB,kBAAkB,EAClB,WAAW,EACX,WAAW,EAEX,cAAc,EACd,eAAe,EACf,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,QAAQ,EACR,gBAAgB,GACjB,MAAM,YAAY,CAAA;AAKnB,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,GACZ,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACnF,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC3E,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAQ5E,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,qBAAqB,GACtB,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,YAAY,EACZ,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAA;AAYpB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1G,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACnI,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAapE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,YAAY,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAA;AAMvB,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9E,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEjF,YAAY,EAEV,SAAS,EACT,KAAK,EACL,WAAW,EACX,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,aAAa,EAEb,cAAc,EACd,cAAc,EACd,aAAa,EACb,OAAO,EAEP,aAAa,EACb,IAAI,EACJ,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,YAAY,EAEZ,UAAU,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACX,uBAAuB,EACvB,kBAAkB,EAClB,WAAW,EACX,WAAW,EAEX,cAAc,EACd,eAAe,EACf,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,QAAQ,EACR,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -1,35 +1,58 @@
1
1
  /**
2
- * Plugin environment initialisation at startup.
2
+ * Plugin environment initialisation at startup — the `.` entry, written as an EXPLICIT list.
3
+ *
4
+ * Generation v3 (INTERFACE.md §9) replaced the two `export *` re-exports this file used to carry
5
+ * (`./compat.js`, `./kit/index.js`) with the list below. That is the whole point of the generation:
6
+ * before v3 the frozen surface was "whatever those two files happened to export", so adding an
7
+ * internal helper to `compat.ts` was silently an interface change. Now `.` carries the members the
8
+ * installed plugins actually consume plus the extension points a plugin author is expected to call,
9
+ * and nothing else: the zero-consumer composition pieces moved to `./internal` (see that module).
10
+ *
11
+ * The same surface is stated as a type + two name lists in `./interface.js`; `api/interface-v3.json`
12
+ * is its snapshot, and `test/public-surface.spec.ts` keeps the three in step. Do not add a member
13
+ * here without a generation decision.
14
+ *
3
15
  * @module index
4
16
  */
5
- export { CAPABILITIES, DEFAULT_DEADLINE_MS, ITEM_SCHEMA_VERSION, createProvisioner, normalizeOnMissing, } from './provisioner.js';
17
+ export { ITEM_SCHEMA_VERSION, createProvisioner } from './provisioner.js';
6
18
  export { ProvisionError, reasonOf } from './errors.js';
7
- export { npmPackageProvider, NPM_PACKAGE_KIND } from './providers/npm.js';
8
19
  export { binaryArchiveProvider, BINARY_ARCHIVE_KIND } from './providers/archive.js';
9
20
  export { modelCacheProvider, MODEL_CACHE_KIND } from './providers/model.js';
10
- // The compatibility gate lives in the SAME package now (it used to be `@avantf/dsh-compat`,
11
- // provisioned into the framework's managed root as an `npm-package` item). Re-exported from the root
12
- // so a plugin that loaded this package through the inlined bootstrap already holds the gate — no
13
- // second import path, and no plugin ever names the base by specifier at runtime.
14
- export * from './compat.js';
15
- // The shared KIT: pure, DSH-free helpers (prompt files, plugin logger, Typert wire conventions).
16
- // They are part of THIS package on purpose — fixing or extending a shared helper must be possible
17
- // with one base release, without rebuilding or republishing any plugin. Plugins therefore never
18
- // inline this code: they load the base at startup and take these capabilities from it at runtime.
19
- export * from './kit/index.js';
20
- // The INTERFACE TYPE: the named, frozen v1 surface of this `.` entry. Plugins hold this ONE name
21
- // instead of the whole `typeof import(...)` namespace, and `api/interface-v1.json` records its names
22
- // as a machine-checked snapshot. `INTERFACE_VERSION` is the integer plugins bake at build time and
23
- // compare against the value the base they loaded at runtime reports — it is the one value here whose
24
- // job is the RUNTIME interface gate rather than a caller's API, so it belongs on `.`.
21
+ // The compatibility gate (rules / probes / verdict / report / post-registration check). It used to
22
+ // be the separate `@avantf/dsh-compat` package, provisioned into the framework's managed root; it
23
+ // lives in THIS package now and its composition-layer members are on `.` — a plugin that loaded the
24
+ // base through the inlined bootstrap already holds the gate, with no second import path. The
25
+ // INDIVIDUAL probes (`floorOf` / `checkServices` / `probeToolsRegistry` …) are composition pieces of
26
+ // `gatherEvidence` and moved to `./internal` in v3.
27
+ export { BUILD_VERSIONS_FILE, COMPAT_PREFIX, compatReport, gatherEvidence, provision, readBuildVersions, readDeclaredVersions, readRuntimeVersions, registerMegaphone, schemaNamesFrom, toolProbeDeclaration, verdictOf, verifyRegisteredFaces, } from './compat.js';
28
+ // The shared KIT: pure, DSH-free helpers (prompt files, family paths, well-formed text). They are
29
+ // part of THIS package on purpose — fixing or extending a shared helper must be possible with one
30
+ // base release, without rebuilding or republishing any plugin. Plugins therefore never inline this
31
+ // code: they load the base at startup and take these capabilities from it at runtime.
25
32
  //
26
- // `VALUE_NAMES_V1` / `TYPE_NAMES_V1` are deliberately NOT re-exported: they are the snapshot gate's
27
- // data (read from the source by `test/public-surface.spec.ts`), and exporting them would put the
28
- // inventory itself into the inventory it describes.
33
+ // Generation v3 moved the members with no runtime consumer off `.`: `createPluginLogger` (both trees
34
+ // use their own logger, which must exist before the base is resolved) and the Typert symbol kit
35
+ // (`strictCodec` / `endpointId` / `fieldSymbol` / `resultSymbol`), which both trees keep as local
36
+ // two-line mirrors because the Remote/wire faces are assembled at module load. Both live on
37
+ // `./internal` now.
38
+ export { expandHome, familyHome, familyModelsDir, familyToolsDir, resolveDataHome } from './kit/family.js';
39
+ export { PromptFiles } from './kit/prompt_files.js';
40
+ export { wellFormedDeep, wellFormedText } from './kit/wellformed.js';
41
+ // The INTERFACE TYPE: the named, frozen surface of this `.` entry. Plugins hold ONE of these names
42
+ // instead of the whole `typeof import(...)` namespace, and `api/interface-vN.json` records the current
43
+ // generation's names as a machine-checked snapshot. `INTERFACE_VERSION` is the integer plugins bake at
44
+ // build time and compare against the value the base they loaded at runtime reports — it is the one
45
+ // value here whose job is the RUNTIME interface gate rather than a caller's API, so it belongs on `.`.
46
+ //
47
+ // v1/v2 stay exported as their generations' type records: a caller compiled against them keeps a
48
+ // name. v3 is the first generation that is NOT `extends` its predecessor — it PRUNES the zero-consumer
49
+ // members to `./internal` (INTERFACE.md §9); the proof that this lost nothing is
50
+ // `VALUE_NAMES_V3 ∪ PRUNED_VALUE_NAMES === VALUE_NAMES_V2` plus the cross-tree zero-consumer check in
51
+ // `test/public-surface.spec.ts`.
29
52
  export { INTERFACE_VERSION } from './interface.js';
30
53
  // The runtime interface gate: the verdict function the plugins call with the generation they baked,
31
54
  // and the ONE reader of a plugin's `lib/interface-version.json`. They live here rather than in each
32
- // plugin so their semantics (bidirectional, guarded, total) are fixable with one base release; the
55
+ // plugin so their semantics (asymmetric, guarded, total) are fixable with one base release; the
33
56
  // plugins keep only the consumption and the degrade decision.
34
57
  export { checkInterface, readInterfaceRequirement } from './interface_gate.js';
35
58
  //# sourceMappingURL=index.js.map