dsh-plugin-local-infer 0.1.2 → 0.1.4

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 (251) hide show
  1. package/README.md +32 -6
  2. package/cordis.patch.yml +7 -0
  3. package/docs/zh/README.md +24 -4
  4. package/dsh/client.js +4200 -4049
  5. package/package.json +33 -11
  6. package/packages/core/lib/adapter.d.ts +177 -11
  7. package/packages/core/lib/adapter.js +74 -1
  8. package/packages/core/lib/config.d.ts +1 -1
  9. package/packages/core/lib/config.js +1 -1
  10. package/packages/core/lib/debug.d.ts +1 -1
  11. package/packages/core/lib/debug.js +1 -1
  12. package/packages/core/lib/defaults.d.ts +1 -1
  13. package/packages/core/lib/defaults.js +1 -1
  14. package/packages/core/lib/deps.d.ts +48 -20
  15. package/packages/core/lib/deps.js +24 -8
  16. package/packages/core/lib/estimator.d.ts +1 -1
  17. package/packages/core/lib/estimator.js +1 -1
  18. package/packages/core/lib/guideline.d.ts +1 -1
  19. package/packages/core/lib/guideline.js +1 -1
  20. package/packages/core/lib/hardware.d.ts +1 -1
  21. package/packages/core/lib/hardware.js +1 -1
  22. package/packages/core/lib/hf-cache.d.ts +70 -0
  23. package/packages/core/lib/hf-cache.js +83 -0
  24. package/packages/core/lib/index.d.ts +16 -9
  25. package/packages/core/lib/index.js +10 -6
  26. package/packages/core/lib/infer-cache.d.ts +39 -0
  27. package/packages/core/lib/infer-cache.js +53 -0
  28. package/packages/core/lib/launch-command.d.ts +8 -4
  29. package/packages/core/lib/launch-command.js +13 -6
  30. package/packages/core/lib/launch-record.d.ts +1 -1
  31. package/packages/core/lib/launch-record.js +1 -1
  32. package/packages/core/lib/logs.d.ts +8 -1
  33. package/packages/core/lib/logs.js +12 -4
  34. package/packages/core/lib/models.d.ts +120 -14
  35. package/packages/core/lib/models.js +209 -17
  36. package/packages/core/lib/parameter.d.ts +31 -3
  37. package/packages/core/lib/parameter.js +1 -1
  38. package/packages/core/lib/progress.d.ts +54 -0
  39. package/packages/core/lib/progress.js +120 -0
  40. package/packages/core/lib/registrar.d.ts +25 -14
  41. package/packages/core/lib/registrar.js +30 -10
  42. package/packages/core/lib/reserve.d.ts +11 -3
  43. package/packages/core/lib/reserve.js +6 -4
  44. package/packages/core/lib/status.d.ts +12 -6
  45. package/packages/core/lib/status.js +21 -10
  46. package/packages/core/lib/sudo.d.ts +80 -0
  47. package/packages/core/lib/sudo.js +78 -0
  48. package/packages/core/package.json +1 -1
  49. package/packages/orchestrator/lib/config.d.ts +63 -0
  50. package/packages/orchestrator/lib/config.js +111 -0
  51. package/packages/orchestrator/lib/index.d.ts +51 -0
  52. package/packages/orchestrator/lib/index.js +73 -0
  53. package/packages/orchestrator/lib/route.d.ts +60 -0
  54. package/packages/orchestrator/lib/route.js +159 -0
  55. package/packages/orchestrator/locale/en.json +6 -0
  56. package/packages/orchestrator/package.json +39 -0
  57. package/packages/orchestrator/prompt.md +87 -0
  58. package/packages/providers/lib/acquire.d.ts +95 -15
  59. package/packages/providers/lib/acquire.js +239 -40
  60. package/packages/providers/lib/adapters.d.ts +155 -221
  61. package/packages/providers/lib/adapters.js +589 -935
  62. package/packages/providers/lib/debug.d.ts +1 -1
  63. package/packages/providers/lib/debug.js +1 -1
  64. package/packages/providers/lib/deps.d.ts +31 -212
  65. package/packages/providers/lib/deps.js +71 -205
  66. package/packages/providers/lib/engines/basalt/basalt.d.ts +130 -0
  67. package/packages/providers/lib/engines/basalt/basalt.js +304 -0
  68. package/packages/providers/lib/engines/basalt/basaltAdapter.d.ts +85 -0
  69. package/packages/providers/lib/engines/basalt/basaltAdapter.js +439 -0
  70. package/packages/providers/lib/engines/basalt/basaltLinux.d.ts +23 -0
  71. package/packages/providers/lib/engines/basalt/basaltLinux.js +47 -0
  72. package/packages/providers/lib/engines/basalt/basaltMacOS.d.ts +17 -0
  73. package/packages/providers/lib/engines/basalt/basaltMacOS.js +19 -0
  74. package/packages/providers/lib/engines/basalt/basaltWindows.d.ts +24 -0
  75. package/packages/providers/lib/engines/basalt/basaltWindows.js +49 -0
  76. package/packages/providers/lib/engines/engineOs.d.ts +24 -0
  77. package/packages/providers/lib/engines/engineOs.js +17 -0
  78. package/packages/providers/lib/{hyperqwen.d.ts → engines/hyperqwen/hyperqwen.d.ts} +2 -2
  79. package/packages/providers/lib/{hyperqwen.js → engines/hyperqwen/hyperqwen.js} +14 -2
  80. package/packages/providers/lib/engines/hyperqwen/hyperqwenAdapter.d.ts +38 -0
  81. package/packages/providers/lib/engines/hyperqwen/hyperqwenAdapter.js +115 -0
  82. package/packages/providers/lib/engines/hyperqwen/hyperqwenArch.d.ts +9 -0
  83. package/packages/providers/lib/engines/hyperqwen/hyperqwenArch.js +9 -0
  84. package/packages/providers/lib/engines/hyperqwen/hyperqwenDebian.d.ts +9 -0
  85. package/packages/providers/lib/engines/hyperqwen/hyperqwenDebian.js +9 -0
  86. package/packages/providers/lib/engines/hyperqwen/hyperqwenFedora.d.ts +9 -0
  87. package/packages/providers/lib/engines/hyperqwen/hyperqwenFedora.js +9 -0
  88. package/packages/providers/lib/engines/hyperqwen/hyperqwenLinux.d.ts +10 -0
  89. package/packages/providers/lib/engines/hyperqwen/hyperqwenLinux.js +14 -0
  90. package/packages/providers/lib/engines/hyperqwen/hyperqwenMacOS.d.ts +9 -0
  91. package/packages/providers/lib/engines/hyperqwen/hyperqwenMacOS.js +9 -0
  92. package/packages/providers/lib/engines/hyperqwen/hyperqwenWindows.d.ts +9 -0
  93. package/packages/providers/lib/engines/hyperqwen/hyperqwenWindows.js +9 -0
  94. package/packages/providers/lib/{infernix.d.ts → engines/infernix/infernix.d.ts} +7 -4
  95. package/packages/providers/lib/{infernix.js → engines/infernix/infernix.js} +53 -8
  96. package/packages/providers/lib/engines/infernix/infernixAdapter.d.ts +52 -0
  97. package/packages/providers/lib/engines/infernix/infernixAdapter.js +235 -0
  98. package/packages/providers/lib/engines/infernix/infernixArch.d.ts +9 -0
  99. package/packages/providers/lib/engines/infernix/infernixArch.js +9 -0
  100. package/packages/providers/lib/engines/infernix/infernixDebian.d.ts +9 -0
  101. package/packages/providers/lib/engines/infernix/infernixDebian.js +9 -0
  102. package/packages/providers/lib/engines/infernix/infernixFedora.d.ts +9 -0
  103. package/packages/providers/lib/engines/infernix/infernixFedora.js +9 -0
  104. package/packages/providers/lib/engines/infernix/infernixLinux.d.ts +17 -0
  105. package/packages/providers/lib/engines/infernix/infernixLinux.js +35 -0
  106. package/packages/providers/lib/engines/infernix/infernixMacOS.d.ts +16 -0
  107. package/packages/providers/lib/engines/infernix/infernixMacOS.js +18 -0
  108. package/packages/providers/lib/engines/infernix/infernixWindows.d.ts +16 -0
  109. package/packages/providers/lib/engines/infernix/infernixWindows.js +34 -0
  110. package/packages/providers/lib/{llamacpp.d.ts → engines/llamacpp/llamacpp.d.ts} +2 -2
  111. package/packages/providers/lib/{llamacpp.js → engines/llamacpp/llamacpp.js} +12 -2
  112. package/packages/providers/lib/engines/llamacpp/llamacppAdapter.d.ts +50 -0
  113. package/packages/providers/lib/engines/llamacpp/llamacppAdapter.js +274 -0
  114. package/packages/providers/lib/engines/llamacpp/llamacppArch.d.ts +9 -0
  115. package/packages/providers/lib/engines/llamacpp/llamacppArch.js +9 -0
  116. package/packages/providers/lib/engines/llamacpp/llamacppDebian.d.ts +9 -0
  117. package/packages/providers/lib/engines/llamacpp/llamacppDebian.js +9 -0
  118. package/packages/providers/lib/engines/llamacpp/llamacppFedora.d.ts +9 -0
  119. package/packages/providers/lib/engines/llamacpp/llamacppFedora.js +9 -0
  120. package/packages/providers/lib/engines/llamacpp/llamacppLinux.d.ts +17 -0
  121. package/packages/providers/lib/engines/llamacpp/llamacppLinux.js +28 -0
  122. package/packages/providers/lib/engines/llamacpp/llamacppMacOS.d.ts +15 -0
  123. package/packages/providers/lib/engines/llamacpp/llamacppMacOS.js +17 -0
  124. package/packages/providers/lib/engines/llamacpp/llamacppWindows.d.ts +15 -0
  125. package/packages/providers/lib/engines/llamacpp/llamacppWindows.js +26 -0
  126. package/packages/providers/lib/{ninfer.d.ts → engines/ninfer/ninfer.d.ts} +2 -2
  127. package/packages/providers/lib/{ninfer.js → engines/ninfer/ninfer.js} +25 -3
  128. package/packages/providers/lib/engines/ninfer/ninferAdapter.d.ts +81 -0
  129. package/packages/providers/lib/engines/ninfer/ninferAdapter.js +392 -0
  130. package/packages/providers/lib/engines/ninfer/ninferArch.d.ts +9 -0
  131. package/packages/providers/lib/engines/ninfer/ninferArch.js +9 -0
  132. package/packages/providers/lib/engines/ninfer/ninferDebian.d.ts +9 -0
  133. package/packages/providers/lib/engines/ninfer/ninferDebian.js +9 -0
  134. package/packages/providers/lib/engines/ninfer/ninferFedora.d.ts +9 -0
  135. package/packages/providers/lib/engines/ninfer/ninferFedora.js +9 -0
  136. package/packages/providers/lib/engines/ninfer/ninferLinux.d.ts +17 -0
  137. package/packages/providers/lib/engines/ninfer/ninferLinux.js +37 -0
  138. package/packages/providers/lib/engines/ninfer/ninferMacOS.d.ts +15 -0
  139. package/packages/providers/lib/engines/ninfer/ninferMacOS.js +17 -0
  140. package/packages/providers/lib/engines/ninfer/ninferWindows.d.ts +29 -0
  141. package/packages/providers/lib/engines/ninfer/ninferWindows.js +59 -0
  142. package/packages/providers/lib/engines/strata/strata.d.ts +1 -0
  143. package/packages/providers/lib/engines/strata/strata.js +264 -0
  144. package/packages/providers/lib/engines/strata/strataAdapter.d.ts +97 -0
  145. package/packages/providers/lib/engines/strata/strataAdapter.js +463 -0
  146. package/packages/providers/lib/engines/strata/strataArch.d.ts +9 -0
  147. package/packages/providers/lib/engines/strata/strataArch.js +9 -0
  148. package/packages/providers/lib/engines/strata/strataDebian.d.ts +9 -0
  149. package/packages/providers/lib/engines/strata/strataDebian.js +9 -0
  150. package/packages/providers/lib/engines/strata/strataFedora.d.ts +9 -0
  151. package/packages/providers/lib/engines/strata/strataFedora.js +9 -0
  152. package/packages/providers/lib/engines/strata/strataLinux.d.ts +21 -0
  153. package/packages/providers/lib/engines/strata/strataLinux.js +30 -0
  154. package/packages/providers/lib/engines/strata/strataMacOS.d.ts +16 -0
  155. package/packages/providers/lib/engines/strata/strataMacOS.js +17 -0
  156. package/packages/providers/lib/engines/strata/strataWindows.d.ts +27 -0
  157. package/packages/providers/lib/engines/strata/strataWindows.js +37 -0
  158. package/packages/providers/lib/engines.d.ts +8 -5
  159. package/packages/providers/lib/engines.js +22 -11
  160. package/packages/providers/lib/guidelines.d.ts +5 -4
  161. package/packages/providers/lib/guidelines.js +18 -5
  162. package/packages/providers/lib/index.d.ts +33 -24
  163. package/packages/providers/lib/index.js +46 -24
  164. package/packages/providers/lib/model-defaults.d.ts +10 -5
  165. package/packages/providers/lib/model-defaults.js +47 -5
  166. package/packages/providers/lib/platform.d.ts +8 -5
  167. package/packages/providers/lib/platform.js +27 -7
  168. package/packages/providers/lib/presets.d.ts +6 -4
  169. package/packages/providers/lib/presets.js +53 -5
  170. package/packages/providers/lib/systemDeps.d.ts +313 -0
  171. package/packages/providers/lib/systemDeps.js +284 -0
  172. package/packages/providers/lib/vram.d.ts +34 -8
  173. package/packages/providers/lib/vram.js +81 -8
  174. package/packages/providers/package.json +2 -2
  175. package/packages/service/lib/index.d.ts +187 -23
  176. package/packages/service/lib/index.js +667 -90
  177. package/packages/service/lib/launch-target.d.ts +19 -0
  178. package/packages/service/lib/launch-target.js +28 -0
  179. package/packages/service/lib/run-logs.d.ts +72 -0
  180. package/packages/service/lib/run-logs.js +125 -0
  181. package/packages/service/lib/types.d.ts +166 -8
  182. package/packages/service/lib/types.js +1 -1
  183. package/packages/service/package.json +2 -2
  184. package/packages/tool/lib/index.d.ts +1 -1
  185. package/packages/tool/lib/index.js +1 -1
  186. package/packages/tool/package.json +2 -2
  187. package/packages/ui/lib/config.d.ts +89 -0
  188. package/packages/ui/lib/config.js +251 -0
  189. package/packages/ui/lib/deps.d.ts +4 -4
  190. package/packages/ui/lib/deps.js +1 -1
  191. package/packages/ui/lib/form.d.ts +1 -1
  192. package/packages/ui/lib/form.js +1 -1
  193. package/packages/ui/lib/index.d.ts +7 -1
  194. package/packages/ui/lib/index.js +12 -2
  195. package/packages/ui/lib/meter.d.ts +1 -1
  196. package/packages/ui/lib/meter.js +1 -1
  197. package/packages/ui/lib/ops/engine.d.ts +216 -0
  198. package/packages/ui/lib/ops/engine.js +697 -0
  199. package/packages/ui/lib/ops/get-steps.d.ts +98 -0
  200. package/packages/ui/lib/ops/get-steps.js +359 -0
  201. package/packages/ui/lib/ops/hf.d.ts +42 -0
  202. package/packages/ui/lib/ops/hf.js +150 -0
  203. package/packages/ui/lib/ops/logs.d.ts +78 -0
  204. package/packages/ui/lib/ops/logs.js +119 -0
  205. package/packages/ui/lib/ops/model.d.ts +71 -0
  206. package/packages/ui/lib/ops/model.js +123 -0
  207. package/packages/ui/lib/request.d.ts +106 -0
  208. package/packages/ui/lib/request.js +80 -0
  209. package/packages/ui/lib/route.d.ts +106 -422
  210. package/packages/ui/lib/route.js +136 -1845
  211. package/packages/ui/lib/routes/chat-template.d.ts +1 -0
  212. package/packages/ui/lib/routes/chat-template.js +1 -0
  213. package/packages/ui/lib/routes/deps.d.ts +1 -0
  214. package/packages/ui/lib/routes/deps.js +1 -0
  215. package/packages/ui/lib/routes/download.d.ts +1 -0
  216. package/packages/ui/lib/routes/download.js +1 -0
  217. package/packages/ui/lib/routes/get.d.ts +1 -0
  218. package/packages/ui/lib/routes/get.js +106 -0
  219. package/packages/ui/lib/routes/install.d.ts +16 -0
  220. package/packages/ui/lib/routes/install.js +36 -0
  221. package/packages/ui/lib/routes/launch.d.ts +24 -0
  222. package/packages/ui/lib/routes/launch.js +74 -0
  223. package/packages/ui/lib/routes/logs.d.ts +57 -0
  224. package/packages/ui/lib/routes/logs.js +117 -0
  225. package/packages/ui/lib/routes/provider-delete.d.ts +15 -0
  226. package/packages/ui/lib/routes/provider-delete.js +37 -0
  227. package/packages/ui/lib/routes/register.d.ts +16 -0
  228. package/packages/ui/lib/routes/register.js +28 -0
  229. package/packages/ui/lib/routes/save.d.ts +18 -0
  230. package/packages/ui/lib/routes/save.js +159 -0
  231. package/packages/ui/lib/routes/stop.d.ts +19 -0
  232. package/packages/ui/lib/routes/stop.js +32 -0
  233. package/packages/ui/lib/routes/stream.d.ts +40 -0
  234. package/packages/ui/lib/routes/stream.js +68 -0
  235. package/packages/ui/lib/routes/summary.d.ts +15 -0
  236. package/packages/ui/lib/routes/summary.js +26 -0
  237. package/packages/ui/lib/routes/unregister.d.ts +14 -0
  238. package/packages/ui/lib/routes/unregister.js +26 -0
  239. package/packages/ui/lib/viewmodels/deps.d.ts +1 -0
  240. package/packages/ui/lib/viewmodels/deps.js +1 -0
  241. package/packages/ui/lib/viewmodels/depsHelpers.d.ts +1 -0
  242. package/packages/ui/lib/viewmodels/depsHelpers.js +94 -0
  243. package/packages/ui/lib/viewmodels/summary.d.ts +145 -0
  244. package/packages/ui/lib/viewmodels/summary.js +245 -0
  245. package/packages/ui/lib/viewmodels/summaryHelpers.d.ts +30 -0
  246. package/packages/ui/lib/viewmodels/summaryHelpers.js +42 -0
  247. package/packages/ui/lib/warnings.d.ts +1 -1
  248. package/packages/ui/lib/warnings.js +1 -1
  249. package/packages/ui/package.json +4 -4
  250. package/packages/providers/lib/strata.d.ts +0 -15
  251. package/packages/providers/lib/strata.js +0 -14
@@ -1,11 +1,14 @@
1
1
  /**
2
- * NInfer VramModel data. The measured memory constants for the two Qwen
3
- * artifacts NInfer serves, ported from `docs/config-calculator.html` in the
4
- * NInfer fork: every byte figure is measured on an RTX 3090 (24 GiB, sm_86,
5
- * CUDA 12.8) against the engine's own capacity report, not estimated from
6
- * parameter counts. The provenance note on each model names the exact weight
7
- * artifact the figures apply to, because the runtime also recognizes other
8
- * weight profiles with different resident sizes.
2
+ * VramModel data for the engines the card prices. The NInfer models are the
3
+ * measured memory constants for the two Qwen artifacts NInfer serves, ported
4
+ * from `docs/config-calculator.html` in the NInfer fork: every byte figure is
5
+ * measured on an RTX 3090 (24 GiB, sm_86, CUDA 12.8) against the engine's own
6
+ * capacity report, not estimated from parameter counts. The provenance note on
7
+ * each model names the exact weight artifact the figures apply to, because the
8
+ * runtime also recognizes other weight profiles with different resident sizes.
9
+ * The Basalt models are the estimated sets for the engine's `.basalt`
10
+ * artifacts: the measured figures are not yet available, so their terms are
11
+ * estimated from the model size and flagged `source: 'estimated'`.
9
12
  * @module dsh-plugin-local-infer/providers/vram
10
13
  */
11
14
  import type { VramModel } from 'dsh-plugin-local-infer/core';
@@ -21,4 +24,27 @@ export declare const NINFER_VRAM_MODELS: readonly VramModel[];
21
24
  * Resolves one NInfer VramModel by its registry id, e.g. `qwen3-27b`.
22
25
  */
23
26
  export declare function ninferVramModel(modelId: string): VramModel | undefined;
24
- //# sourceMappingURL=vram.d.ts.map
27
+ /**
28
+ * The Basalt estimated VramModels, one per `.basalt` artifact the engine
29
+ * serves.
30
+ *
31
+ * The first is the Qwen3.8-Flash-Next NVFP4 artifact
32
+ * (`Qwen3.8-FN-NVFP4-DQ6_K.basalt`). The measured figures are not yet
33
+ * available, so every term is estimated from the model size, not measured
34
+ * against the engine: the weights price a ~48B-total-parameter MoE in NVFP4
35
+ * (0.5 bytes per parameter, ~24 GiB), and the KV per-token terms price a
36
+ * 48-layer, 8-KV-head, 128-head-dim GQA layout across the four KV formats
37
+ * Basalt serves (fp16, int8, q4_0, k8v4). The `source: 'estimated'` flag is
38
+ * what keeps the meter from reading these as authoritative.
39
+ *
40
+ * Basalt's `spec` setting is a token-window count (a number), not a named
41
+ * speculation backend, so neither model carries a `speculation` table or a
42
+ * `specKey`: the estimator prices them from the base terms.
43
+ */
44
+ export declare const BASALT_VRAM_MODELS: readonly VramModel[];
45
+ /**
46
+ * Resolves a Basalt VramModel by its registry id, `qwen38-flash-next` or
47
+ * `deepseek-v41-flash`.
48
+ */
49
+ export declare function basaltVramModel(modelId: string): VramModel | undefined;
50
+ //# sourceMappingURL=vram.d.ts.map
@@ -1,13 +1,17 @@
1
1
  /**
2
- * NInfer VramModel data. The measured memory constants for the two Qwen
3
- * artifacts NInfer serves, ported from `docs/config-calculator.html` in the
4
- * NInfer fork: every byte figure is measured on an RTX 3090 (24 GiB, sm_86,
5
- * CUDA 12.8) against the engine's own capacity report, not estimated from
6
- * parameter counts. The provenance note on each model names the exact weight
7
- * artifact the figures apply to, because the runtime also recognizes other
8
- * weight profiles with different resident sizes.
2
+ * VramModel data for the engines the card prices. The NInfer models are the
3
+ * measured memory constants for the two Qwen artifacts NInfer serves, ported
4
+ * from `docs/config-calculator.html` in the NInfer fork: every byte figure is
5
+ * measured on an RTX 3090 (24 GiB, sm_86, CUDA 12.8) against the engine's own
6
+ * capacity report, not estimated from parameter counts. The provenance note on
7
+ * each model names the exact weight artifact the figures apply to, because the
8
+ * runtime also recognizes other weight profiles with different resident sizes.
9
+ * The Basalt models are the estimated sets for the engine's `.basalt`
10
+ * artifacts: the measured figures are not yet available, so their terms are
11
+ * estimated from the model size and flagged `source: 'estimated'`.
9
12
  * @module dsh-plugin-local-infer/providers/vram
10
13
  */
14
+ import { BASALT_DEEPSEEK_MODEL_ID, BASALT_DEFAULT_MODEL_ID, } from "./engines/basalt/basalt.js";
11
15
  /**
12
16
  * DFlash2's CUDA-graph allowance is a step in context, measured at 8,192 /
13
17
  * 16,384 / 32,768: 288 MiB up to 8,192 tokens and 384 MiB beyond. Only three
@@ -247,4 +251,73 @@ export const NINFER_VRAM_MODELS = [
247
251
  export function ninferVramModel(modelId) {
248
252
  return NINFER_VRAM_MODELS.find(model => model.id === modelId);
249
253
  }
250
- //# sourceMappingURL=vram.js.map
254
+ /**
255
+ * The Basalt estimated VramModels, one per `.basalt` artifact the engine
256
+ * serves.
257
+ *
258
+ * The first is the Qwen3.8-Flash-Next NVFP4 artifact
259
+ * (`Qwen3.8-FN-NVFP4-DQ6_K.basalt`). The measured figures are not yet
260
+ * available, so every term is estimated from the model size, not measured
261
+ * against the engine: the weights price a ~48B-total-parameter MoE in NVFP4
262
+ * (0.5 bytes per parameter, ~24 GiB), and the KV per-token terms price a
263
+ * 48-layer, 8-KV-head, 128-head-dim GQA layout across the four KV formats
264
+ * Basalt serves (fp16, int8, q4_0, k8v4). The `source: 'estimated'` flag is
265
+ * what keeps the meter from reading these as authoritative.
266
+ *
267
+ * Basalt's `spec` setting is a token-window count (a number), not a named
268
+ * speculation backend, so neither model carries a `speculation` table or a
269
+ * `specKey`: the estimator prices them from the base terms.
270
+ */
271
+ export const BASALT_VRAM_MODELS = [
272
+ {
273
+ id: BASALT_DEFAULT_MODEL_ID,
274
+ source: 'estimated',
275
+ weightsBytes: 24000000000,
276
+ workspaceBytes: 536870912,
277
+ nativeMaxContext: 262144,
278
+ seqFixedBytes: 10485760,
279
+ seqPerToken: 0.0625,
280
+ kvBytesPerToken: {
281
+ fp16: 196608,
282
+ int8: 98304,
283
+ q4_0: 49152,
284
+ k8v4: 73728,
285
+ },
286
+ },
287
+ // The DeepSeek-V4.1-Flash UD-IQ1_M pack
288
+ // (`DeepSeek-V4.1-Flash-1017-UD-IQ1_M.basalt`). Every term is estimated
289
+ // from the public pack facts, like the Qwen row. The weights: the native
290
+ // checkpoint is ~510 GB of BF16 dense plus MXFP4 expert weights, a
291
+ // ~6.8 bits-per-weight average, which prices ~600B weights; the pack
292
+ // requantizes them to UD-IQ1_M's ~1.7 bits per weight, ~1.3e11 bytes
293
+ // (~121 GiB) resident. The checkpoint's other ~393 GB of engram lookup
294
+ // tables stream from RAM and file, so they add no resident weights and no
295
+ // term prices them. The KV: the pack has no KV-format choice, so the
296
+ // engine's single format is priced under the `fp16` key the kv surface
297
+ // defaults to; a DeepSeek latent-KV (MLA-family) layout carries ~576
298
+ // fp16 elements per layer (~1152 bytes), and ~46080 bytes per token is
299
+ // that order at ~40 attention layers, the compact pool that makes the
300
+ // pack's 1,048,576-token cap a ~48 GB KV pool at all. The workspace,
301
+ // fixed-session, and per-token activation terms ride at the Blackwell
302
+ // order for a model this size, a few times the Qwen estimates.
303
+ {
304
+ id: BASALT_DEEPSEEK_MODEL_ID,
305
+ source: 'estimated',
306
+ weightsBytes: 130000000000,
307
+ workspaceBytes: 1073741824,
308
+ nativeMaxContext: 1048576,
309
+ seqFixedBytes: 33554432,
310
+ seqPerToken: 0.125,
311
+ kvBytesPerToken: {
312
+ fp16: 46080,
313
+ },
314
+ },
315
+ ];
316
+ /**
317
+ * Resolves a Basalt VramModel by its registry id, `qwen38-flash-next` or
318
+ * `deepseek-v41-flash`.
319
+ */
320
+ export function basaltVramModel(modelId) {
321
+ return BASALT_VRAM_MODELS.find(model => model.id === modelId);
322
+ }
323
+ //# sourceMappingURL=vram.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-local-infer-providers",
3
- "version": "0.1.0",
3
+ "version": "0.1.4",
4
4
  "description": "Concrete providers for the dsh local-inference plugin: the ninfer, hyperqwen, llamacpp, and strata engine adapters, the NInfer VramModel, the built-in presets, the built-in guidelines, and the per-OS SystemDep install command data. Each registers itself with ctx.localInfer.",
5
5
  "keywords": [
6
6
  "dsh",
@@ -38,6 +38,6 @@
38
38
  "@deepseek-ai/cordis": ">=4.0.1"
39
39
  },
40
40
  "devDependencies": {
41
- "@deepseek-ai/cordis": "^4.0.1"
41
+ "@deepseek-ai/cordis": "^4.0.6-alpha.2"
42
42
  }
43
43
  }
@@ -18,9 +18,12 @@
18
18
  * @module dsh-plugin-local-infer/service
19
19
  */
20
20
  import { Context, Service } from '@deepseek-ai/cordis';
21
- import type { Config, DefaultModel, ModelDirectoryEntry, EngineAdapter, EngineDepPlan, EnginePlatformConfig, GpuUsageProbe, Guideline, GuidelineResult, HardwareProfile, HardwareProbes, InstallResult, LaunchPlan, ModelRow, Preset, PresetSource, ProcessLine, ProviderLaunchRecord, ProviderRef, ProviderStatus, ReLinkOutcome, RegisterResult, ReserveResolution, ResolvedDefaults, SystemDep, VramModel } from 'dsh-plugin-local-infer/core';
22
- import type { DetectOsReserveOptions, DownloadModelOptions, DownloadResult, EngineDeathEvent, EstimateResult, FetchPresetOptions, FetchPresetResult, HfCliOptions, LaunchOptions, LaunchResult, LocalInferService, ProviderStatusOptions, RegisterModelOptions } from './types.ts';
23
- export type { DetectOsReserveOptions, DownloadModelOptions, DownloadResult, EngineDeathEvent, EstimateResult, FetchPresetOptions, FetchPresetResult, HfCliOptions, LaunchOptions, LaunchResult, LocalInferService, ProviderStatusOptions, RegisterModelOptions, SettingsDescribeResult, SettingsForms, SettingsNamespaceDescriptor, } from './types.ts';
21
+ import type { BuildMode, CommandLogger, CommandOutcome, CommandRunner, Config, DefaultModel, ModelCacheEntry, ModelDirectoryEntry, EngineAdapter, EngineDepPlan, EnginePlatformConfig, GpuUsageProbe, Guideline, GuidelineResult, HardwareProfile, HardwareProbes, InstallResult, LaunchPlan, ModelRow, Preset, PresetSource, ProcessLine, ProviderLaunchRecord, ProviderRef, ProviderStatus, ReLinkOutcome, RegisterResult, ReserveResolution, ResolvedDefaults, SudoGuard, SystemDep, VramModel } from 'dsh-plugin-local-infer/core';
22
+ import type { DetectOsReserveOptions, DownloadModelOptions, DownloadResult, EngineDeathEvent, EstimateResult, FetchPresetOptions, FetchPresetResult, HfCliOptions, LaunchOptions, LaunchResult, LocalInferService, ProviderStatusOptions, RegisterModelOptions, RunInstallOptions, RunLogListener, RunLogSnapshot } from './types.ts';
23
+ import { RunLogStore, runLogKey } from './run-logs.ts';
24
+ import { findLaunchTarget } from './launch-target.ts';
25
+ export { RunLogStore, runLogKey, findLaunchTarget };
26
+ export type { DetectOsReserveOptions, DownloadModelOptions, DownloadResult, EngineDeathEvent, EstimateResult, FetchPresetOptions, FetchPresetResult, HfCliOptions, LaunchOptions, LaunchResult, LaunchTargetEntry, LocalInferService, ProviderStatusOptions, RegisterModelOptions, RunInstallOptions, RunLogAppendEvent, RunLogEndEvent, RunLogEvent, RunLogListener, RunLogResetEvent, RunLogSnapshot, SettingsDescribeResult, SettingsForms, SettingsNamespaceDescriptor, } from './types.ts';
24
27
  declare module '@deepseek-ai/cordis' {
25
28
  interface Context {
26
29
  localInfer: LocalInferService;
@@ -53,7 +56,11 @@ export declare class LocalInfer extends Service implements LocalInferService {
53
56
  private readonly launchedPorts;
54
57
  private readonly engineWatchers;
55
58
  private readonly handledPids;
59
+ private readonly launchingEngines;
60
+ private readonly stoppingEngines;
56
61
  private deathObserver;
62
+ private readonly sudoObservers;
63
+ private readonly runLogs;
57
64
  constructor(ctx: Context);
58
65
  registerEngine(adapter: EngineAdapter): () => void;
59
66
  registerPreset(preset: Preset): () => void;
@@ -139,14 +146,16 @@ export declare class LocalInfer extends Service implements LocalInferService {
139
146
  */
140
147
  providerStatuses(providers: readonly ProviderRef[], options?: ProviderStatusOptions): Promise<Record<string, ProviderStatus>>;
141
148
  /**
142
- * unsureBannerKillCommands returns the bash kill commands for the engine
149
+ * unsureBannerKillCommands returns the stop commands for the engine
143
150
  * processes the detector saw holding VRAM, for the "unsure" banner the card
144
151
  * shows when no provider is confirmed running but at least one reads as
145
152
  * unsure. A process is included when its command line carries an engine
146
153
  * binary marker and the card's VRAM usage is above 30% of the total (the
147
154
  * threshold below which a foreign engine is not considered to be holding
148
- * the card). The commands are one `kill <pid>` per matching process, in
149
- * pid order. An empty list means no matching process was seen, so the
155
+ * the card). The command form switches on the host OS: one
156
+ * `Stop-Process -Id <pid>` per matching process on Windows (the PowerShell
157
+ * cmdlet the banner's text area runs), one `kill <pid>` on Linux and macOS,
158
+ * in pid order. An empty list means no matching process was seen, so the
150
159
  * banner's text area renders empty.
151
160
  */
152
161
  unsureBannerKillCommands(options?: {
@@ -166,21 +175,32 @@ export declare class LocalInfer extends Service implements LocalInferService {
166
175
  * deps resolves the host deps an engine's deploy step needs for a build
167
176
  * mode. A registered adapter that declares systemDeps wins; the provider-
168
177
  * registered plan for the engine id is the fallback, and an engine with
169
- * neither plans an empty list (nothing to install, the gate passes).
178
+ * neither plans an empty list (nothing to install, the gate passes). The
179
+ * local list is per-OS: a Windows host reads the plan's windows entry (the
180
+ * winget toolchain the providers sourced from the Windows profile), every
181
+ * other host reads the linux entry, so the System dependencies section
182
+ * shows the right toolchain for the host.
170
183
  */
171
- deps(engineId: string, buildMode: 'docker' | 'local', hw: HardwareProfile): Promise<readonly SystemDep[]>;
184
+ deps(engineId: string, buildMode: BuildMode, hw: HardwareProfile): Promise<readonly SystemDep[]>;
172
185
  /**
173
186
  * installString renders the copy/paste block for the resolved dep plan,
174
187
  * keyed to the detected package manager, with the by-hand note for a dep
175
188
  * the manager has no commands for.
176
189
  */
177
- installString(engineId: string, buildMode: 'docker' | 'local', hw: HardwareProfile): Promise<string>;
190
+ installString(engineId: string, buildMode: BuildMode, hw: HardwareProfile): Promise<string>;
178
191
  /**
179
192
  * runInstall is the Play/Run path: it runs the resolved dep plan's commands
180
- * through the shell runner and re-probes each dep. The runner captures the
181
- * per-command exit, so a failure names the command that broke.
182
- */
183
- runInstall(engineId: string, buildMode: 'docker' | 'local', hw: HardwareProfile): Promise<InstallResult>;
193
+ * through the guarded shell runner and re-probes each dep. The runner
194
+ * captures the per-command exit, so a failure names the command that broke,
195
+ * and a declared-sudo command whose probe finds no cached credentials
196
+ * announces the CLI prompt through the sudo observer and fails at the
197
+ * sudo deadline. options.onLog is the install run's log sink: the command
198
+ * line reaches it as a `$ <command>` line before the guarded runner spawns
199
+ * the child (and before the sudo guard's probe announces), so the run text
200
+ * carries the command ahead of the per-dep results. options.runner injects
201
+ * the command runner so a test reads the command lines without a real shell.
202
+ */
203
+ runInstall(engineId: string, buildMode: BuildMode, hw: HardwareProfile, options?: RunInstallOptions): Promise<InstallResult>;
184
204
  /**
185
205
  * launch is the lifecycle entry point: it resolves the adapter that rendered
186
206
  * the plan (by the plan's engineId), runs the adapter's deploy step (build
@@ -221,6 +241,60 @@ export declare class LocalInfer extends Service implements LocalInferService {
221
241
  * clears it, which the route's effect does on dispose.
222
242
  */
223
243
  setEngineDeathObserver(observer: ((event: EngineDeathEvent) => void) | undefined): void;
244
+ /**
245
+ * registerSudoObserver reserves `key`'s slot (the runLogKey rule every run
246
+ * path shares) for one run's hook for commands the sudo guard found
247
+ * waiting for a password on the launching CLI: the observer lands core's
248
+ * SUDO_CLI_NOTE line while the command waits. Registering a key that is
249
+ * taken replaces the old hook (a re-launch under the same key owns the
250
+ * note), and the disposer removes only its own hook, so a stale run's
251
+ * settle never clears a live one's routing. The run calls the disposer in
252
+ * a finally.
253
+ */
254
+ registerSudoObserver(key: string, observer: (command: string) => void): () => void;
255
+ /**
256
+ * notifySudoNeeded announces one guarded command to every registered sudo
257
+ * observer (the shared CLI password wait can block any run, and the
258
+ * announce seam does not name the run that triggered it). A throwing
259
+ * observer is isolated per announce: the note is a log courtesy, and a
260
+ * broken route must not fail the install that is already racing the sudo
261
+ * deadline. Published on the service surface so a command runner outside
262
+ * this package (the providers' lifecycle host) reports through the same
263
+ * seam.
264
+ */
265
+ notifySudoNeeded(command: string): void;
266
+ /**
267
+ * beginRun starts one provider process's live run-log run under the key
268
+ * runLogKey names: the buffer resets to the seed separator line, the
269
+ * running flag goes true, the seq restarts, and subscribers get the reset
270
+ * notice a mid-run attached reader needs to replace its display.
271
+ */
272
+ beginRun(key: string, seed: string): void;
273
+ /**
274
+ * appendRunLog appends one chunk to the key's live log (tail-capped to
275
+ * LOG_TAIL_BYTES) and notifies subscribers. Appending with no open run
276
+ * opens one lazily without a seed, so a late note (an engine-death line)
277
+ * still lands.
278
+ */
279
+ appendRunLog(key: string, text: string): void;
280
+ /**
281
+ * readRunLog answers the key's catch-up snapshot: the seq reached, the
282
+ * bounded tail text, and the running flag, the data a mid-run page
283
+ * refresh or a late-opened Logs pane renders from.
284
+ */
285
+ readRunLog(key: string): RunLogSnapshot;
286
+ /**
287
+ * subscribeRunLog registers a listener for the key's run-log events and
288
+ * returns the disposer (the route calls it when its stream closes).
289
+ * Listeners are independent per connection; none can block a writer.
290
+ */
291
+ subscribeRunLog(key: string, listener: RunLogListener): () => void;
292
+ /**
293
+ * endRun settles the key's run: the running flag clears and subscribers
294
+ * get the end event. The text stays readable until the next beginRun, so
295
+ * a late Logs pane still shows the finished run.
296
+ */
297
+ endRun(key: string): void;
224
298
  /**
225
299
  * watchLaunchedHandle ties a launched child's one-shot exit to the live
226
300
  * state: the host's close/error event (a crash, a pkill, or the stop kill)
@@ -238,6 +312,13 @@ export declare class LocalInfer extends Service implements LocalInferService {
238
312
  * record dead.
239
313
  */
240
314
  private watchAdoptedEngine;
315
+ /**
316
+ * engineKey is the in-flight state machine's key for one engine: the engine
317
+ * id plus its port when the plan names one, so two configs of one engine on
318
+ * different ports are distinct engines. A plan with no port keys on the
319
+ * engine id alone.
320
+ */
321
+ private engineKey;
241
322
  /**
242
323
  * stopEngineWatcher cancels one port's adopted-process poll, if it has one.
243
324
  */
@@ -256,9 +337,12 @@ export declare class LocalInfer extends Service implements LocalInferService {
256
337
  /**
257
338
  * stop signals the engine a launch started: it resolves the adapter by the
258
339
  * plan's engineId and runs the adapter's stop step (kill the tracked process,
259
- * stop the named container, or compose down).
340
+ * stop the named container, or compose down). The optional `log` is the
341
+ * stop run's log sink: the adapter writes the `$ <command>` line of every
342
+ * command it runs (compose down, docker stop, a pid signal) through it
343
+ * before the child runs, so the stop's live run reads the command first.
260
344
  */
261
- stop(plan: LaunchPlan): Promise<void>;
345
+ stop(plan: LaunchPlan, log?: CommandLogger): Promise<void>;
262
346
  /**
263
347
  * registerModel publishes a confirmed-working engine as a DSH model. It
264
348
  * builds the entry from the plan (the provider id, the base URL, and the
@@ -299,12 +383,21 @@ export declare class LocalInfer extends Service implements LocalInferService {
299
383
  */
300
384
  fetchPreset(source: PresetSource, options?: FetchPresetOptions): Promise<FetchPresetResult>;
301
385
  /**
302
- * defaultModelDirectory is the plugin's model download directory: under
303
- * the dsh home so a web user and a CLI user share one location, the way the
304
- * config file does. The directory is created when absent, so the field's
305
- * default is always a real path the deploy step can target.
386
+ * defaultModelDirectory is the plugin's model download directory: the
387
+ * Hugging Face hub cache the hf CLI and huggingface_hub share (HF_HUB_CACHE
388
+ * when set, then $HF_HOME/hub, then ~/.cache/huggingface/hub), so a model
389
+ * the plugin pulls lands where every other HF tooling looks. The directory
390
+ * is created when absent, so the field's default is always a real path the
391
+ * deploy step can target.
306
392
  */
307
393
  defaultModelDirectory(): string;
394
+ /**
395
+ * defaultDatasetDirectory is the plugin's dataset download directory: the
396
+ * Hugging Face datasets cache (HF_DATASETS_CACHE when set, then
397
+ * $HF_HOME/datasets, then ~/.cache/huggingface/datasets). Created when
398
+ * absent, for the same reason the model directory is.
399
+ */
400
+ defaultDatasetDirectory(): string;
308
401
  /**
309
402
  * hfCliAvailable probes for the hf CLI the model download runs: an
310
403
  * injected cliPath wins, then the `hf` binary on PATH. None found reads as
@@ -315,7 +408,10 @@ export declare class LocalInfer extends Service implements LocalInferService {
315
408
  * downloadModel runs the hf CLI download for one default model into the
316
409
  * model directory: it creates the target directory when absent (the
317
410
  * recursive flag covers the parents too), renders the command through the
318
- * core builder (the single source the card shows), and runs it through the
411
+ * core builder (the single source the card shows), logs the rendered
412
+ * command's `$ <command>` line through options.onLog before the runner
413
+ * spawns the child (so every caller's run reads command first, output
414
+ * after, and the line is written once, here), and runs it through the
319
415
  * injected runner when one is given, so a test captures the command without
320
416
  * a live hf. A failure keeps the runner's detail, so the card names the
321
417
  * broken step.
@@ -325,8 +421,9 @@ export declare class LocalInfer extends Service implements LocalInferService {
325
421
  * downloadChatTemplate pulls the chat template file for one HF repo
326
422
  * reference into the model directory, so a selected template (the Froggeric
327
423
  * set, a custom repo) works out of the box. It shares the model download's
328
- * recursive directory creation, runner, and long timeout: a template is a
329
- * small file, but the hf CLI's cold start and auth are the same cost.
424
+ * recursive directory creation, runner, log line before the spawn, and long
425
+ * timeout: a template is a small file, but the hf CLI's cold start and auth
426
+ * are the same cost.
330
427
  */
331
428
  downloadChatTemplate(repo: string, directory: string, options?: DownloadModelOptions): Promise<DownloadResult>;
332
429
  /**
@@ -347,6 +444,22 @@ export declare class LocalInfer extends Service implements LocalInferService {
347
444
  * route renders as "no local models".
348
445
  */
349
446
  listModelDirectory(directory: string): ModelDirectoryEntry[];
447
+ /**
448
+ * listModelCache lists the hub cache's `models--*` directories, the data the
449
+ * per-engine model dropdown's cache scan draws from when the model directory
450
+ * is the plugin default (the hub cache). Each entry carries the repo id the
451
+ * directory names (the `{namespace}/{name}` decoded from the
452
+ * `models--{ns}--{name}` form) and the artifact file names its snapshots
453
+ * hold (the union across every commit). A missing or unreadable cache reads
454
+ * as an empty list, which the route renders as "no cached models".
455
+ */
456
+ listModelCache(): ModelCacheEntry[];
457
+ /**
458
+ * snapshotFiles unions the file names across every commit directory under a
459
+ * `models--*` dir's `snapshots/`, the artifact set the per-engine cache scan
460
+ * filters. A missing snapshots folder reads as an empty set.
461
+ */
462
+ private snapshotFiles;
350
463
  /**
351
464
  * specsForEngine reads the parameter surface of the registered adapter for
352
465
  * an engine id, so the defaults resolver floors the result on that engine's
@@ -436,6 +549,57 @@ export declare class LocalInfer extends Service implements LocalInferService {
436
549
  */
437
550
  private collectSpecs;
438
551
  }
552
+ /**
553
+ * sudoProbe answers whether sudo already holds cached (or NOPASSWD)
554
+ * credentials: it runs SUDO_PROBE_COMMAND non-interactively through the
555
+ * probe timeout and reads a clean exit as "no prompt is coming". A refused
556
+ * -n, a missing sudo, and a hung probe all read as "a prompt is coming",
557
+ * the safe side: the run announces and caps instead of dead-locking on a
558
+ * TTY the card user cannot see.
559
+ */
560
+ export declare function sudoProbe(): Promise<boolean>;
561
+ /**
562
+ * sudoGuardFor is the service-side binding of core's guardSudoCommand: it
563
+ * supplies sudoProbe, so this package's install runner and the providers'
564
+ * lifecycle host drive one probe and one rule from one function. Calling
565
+ * it is itself the sudo declaration (needsSudo is true); callers gate on
566
+ * their own needsSudo fact first and never run a plain command through it.
567
+ */
568
+ export declare function sudoGuardFor(command: string, notify: (command: string) => void, kill: () => void, timeoutMs?: number): Promise<SudoGuard>;
569
+ /**
570
+ * guardedShellRunner builds the Play/Run runner: it runs one command line
571
+ * through the system shell and reports the exit. stdin stays closed. When
572
+ * core hands the command the dep's sudo declaration and sudoProbe finds no
573
+ * cached credentials, core's guard announces the CLI prompt through notify
574
+ * and arms the password deadline; its fire signals the child through the
575
+ * shared signalChild rule (SIGINT, then SIGTERM; the group signal reaches a
576
+ * sudo survivor of a compound line) and the run settles with
577
+ * sudoFailureDetail instead of the shell's bare signal exit. The guard adds
578
+ * only probe, notify, and deadline to the existing spawn; the copy/paste
579
+ * path stays the fallback for a passwordless host.
580
+ */
581
+ export declare function guardedShellRunner(notify: (command: string) => void): CommandRunner;
582
+ /**
583
+ * downloadRunner is the model-download runner: it spawns the rendered hf CLI
584
+ * command through the system shell and reports the exit. The spawned child's
585
+ * stdout and stderr chunks stream to onChunk as they land (the hf CLI's tqdm
586
+ * progress), while the output tail keeps the last kilobyte, the same rule the
587
+ * install runner uses, so a failure names the broken line. An abort on the
588
+ * optional signal interrupts the in-flight child (SIGINT, then SIGTERM), so a
589
+ * canceled download stops instead of running to the timeout. The optional
590
+ * graceMs overrides the 5 s SIGTERM escalation window for the abort path.
591
+ */
592
+ export declare const downloadRunner: (command: string, signal?: AbortSignal, onChunk?: (chunk: string) => void, graceMs?: number) => Promise<CommandOutcome>;
593
+ /**
594
+ * parseWindowsProcessTable reads the `pid<TAB>commandLine` rows PowerShell's
595
+ * Win32_Process probe emits into process lines the launch-signature matcher
596
+ * consumes. Each row is split on its first tab: the pid is the left field, the
597
+ * command line the right. A row with no tab (a system process with an empty
598
+ * command line, trimmed to its pid alone) is skipped, and a non-numeric pid is
599
+ * dropped. The env element stays undefined: Windows has no /proc environ to
600
+ * read, and the matcher reads a missing env as neutral.
601
+ */
602
+ export declare function parseWindowsProcessTable(stdout: string): ProcessLine[];
439
603
  /**
440
604
  * runHardwareProbes collects the raw probe results the detector consumes: the
441
605
  * OS, CPU thread count, host RAM, the GPU reading, docker availability,
@@ -445,4 +609,4 @@ export declare class LocalInfer extends Service implements LocalInferService {
445
609
  */
446
610
  export declare function runHardwareProbes(): Promise<HardwareProbes>;
447
611
  export default LocalInfer;
448
- //# sourceMappingURL=index.d.ts.map
612
+ //# sourceMappingURL=index.d.ts.map