@avantf/dsh-mem 0.1.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 (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +140 -0
  3. package/lib/client.js +5901 -0
  4. package/lib/client.js.map +1 -0
  5. package/lib/dsh-build.json +7 -0
  6. package/lib/index.js +14329 -0
  7. package/lib/types/client/domains.d.ts +52 -0
  8. package/lib/types/client/domains.d.ts.map +1 -0
  9. package/lib/types/client/domains.js +25 -0
  10. package/lib/types/client/domains.js.map +1 -0
  11. package/lib/types/client/index.d.ts +35 -0
  12. package/lib/types/client/index.d.ts.map +1 -0
  13. package/lib/types/client/index.js +1351 -0
  14. package/lib/types/client/index.js.map +1 -0
  15. package/lib/types/client/ingest.d.ts +24 -0
  16. package/lib/types/client/ingest.d.ts.map +1 -0
  17. package/lib/types/client/ingest.js +30 -0
  18. package/lib/types/client/ingest.js.map +1 -0
  19. package/lib/types/client/paging.d.ts +30 -0
  20. package/lib/types/client/paging.d.ts.map +1 -0
  21. package/lib/types/client/paging.js +36 -0
  22. package/lib/types/client/paging.js.map +1 -0
  23. package/lib/types/client/summarize.d.ts +11 -0
  24. package/lib/types/client/summarize.d.ts.map +1 -0
  25. package/lib/types/client/summarize.js +79 -0
  26. package/lib/types/client/summarize.js.map +1 -0
  27. package/lib/types/envinit-bootstrap.d.ts +43 -0
  28. package/lib/types/envinit-bootstrap.js +323 -0
  29. package/lib/types/envinit.d.ts +145 -0
  30. package/lib/types/envinit.d.ts.map +1 -0
  31. package/lib/types/envinit.js +495 -0
  32. package/lib/types/envinit.js.map +1 -0
  33. package/lib/types/hints.d.ts +42 -0
  34. package/lib/types/hints.d.ts.map +1 -0
  35. package/lib/types/hints.js +54 -0
  36. package/lib/types/hints.js.map +1 -0
  37. package/lib/types/index.d.ts +74 -0
  38. package/lib/types/index.d.ts.map +1 -0
  39. package/lib/types/index.js +708 -0
  40. package/lib/types/index.js.map +1 -0
  41. package/lib/types/inject.d.ts +14 -0
  42. package/lib/types/inject.d.ts.map +1 -0
  43. package/lib/types/inject.js +14 -0
  44. package/lib/types/inject.js.map +1 -0
  45. package/lib/types/open.d.ts +27 -0
  46. package/lib/types/open.d.ts.map +1 -0
  47. package/lib/types/open.js +133 -0
  48. package/lib/types/open.js.map +1 -0
  49. package/lib/types/prompt.d.ts +49 -0
  50. package/lib/types/prompt.d.ts.map +1 -0
  51. package/lib/types/prompt.js +65 -0
  52. package/lib/types/prompt.js.map +1 -0
  53. package/lib/types/provision.d.ts +117 -0
  54. package/lib/types/provision.d.ts.map +1 -0
  55. package/lib/types/provision.js +233 -0
  56. package/lib/types/provision.js.map +1 -0
  57. package/lib/types/remote.d.ts +17 -0
  58. package/lib/types/remote.d.ts.map +1 -0
  59. package/lib/types/remote.js +233 -0
  60. package/lib/types/remote.js.map +1 -0
  61. package/lib/types/tool_schema.d.ts +40 -0
  62. package/lib/types/tool_schema.d.ts.map +1 -0
  63. package/lib/types/tool_schema.js +149 -0
  64. package/lib/types/tool_schema.js.map +1 -0
  65. package/package.json +109 -0
@@ -0,0 +1,323 @@
1
+ /**
2
+ * Resolve the framework copy the caller's tree already has.
3
+ * @module bootstrap
4
+ */
5
+ import { promises as fsp } from 'node:fs';
6
+ import { createRequire } from 'node:module';
7
+ import { dirname, join } from 'node:path';
8
+ import { fileURLToPath, pathToFileURL } from 'node:url';
9
+ /** The bootstrap version; the resolved framework must satisfy {@link supportedRange}. */
10
+ export const VERSION = '0.1.3';
11
+ /** The framework interval this bootstrap can launch. */
12
+ export const supportedRange = '^0.1.3';
13
+ const PACKAGE = '@avantf/dsh-envinit';
14
+ function parseVersion(input) {
15
+ const match = /^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/.exec(input.trim());
16
+ if (match === null)
17
+ return undefined;
18
+ const minor = match[2] === undefined ? undefined : Number(match[2]);
19
+ const patch = match[3] === undefined ? undefined : Number(match[3]);
20
+ const parts = patch !== undefined ? 3 : minor !== undefined ? 2 : 1;
21
+ const pre = match[4] === undefined || match[4] === '' ? [] : match[4].split('.').map(part => (/^\d+$/.test(part) ? Number(part) : part));
22
+ return { major: Number(match[1]), minor: minor ?? 0, patch: patch ?? 0, pre, parts };
23
+ }
24
+ function comparePre(a, b) {
25
+ if (a.length === 0 && b.length === 0)
26
+ return 0;
27
+ if (a.length === 0)
28
+ return 1;
29
+ if (b.length === 0)
30
+ return -1;
31
+ for (let index = 0; index < Math.max(a.length, b.length); index += 1) {
32
+ const left = a[index];
33
+ const right = b[index];
34
+ if (left === undefined)
35
+ return -1;
36
+ if (right === undefined)
37
+ return 1;
38
+ if (typeof left === 'number' && typeof right === 'number') {
39
+ if (left !== right)
40
+ return left - right;
41
+ }
42
+ else if (typeof left === 'number')
43
+ return -1;
44
+ else if (typeof right === 'number')
45
+ return 1;
46
+ else if (left !== right)
47
+ return left < right ? -1 : 1;
48
+ }
49
+ return 0;
50
+ }
51
+ function compare(a, b) {
52
+ if (a.major !== b.major)
53
+ return a.major - b.major;
54
+ if (a.minor !== b.minor)
55
+ return a.minor - b.minor;
56
+ if (a.patch !== b.patch)
57
+ return a.patch - b.patch;
58
+ return comparePre(a.pre, b.pre);
59
+ }
60
+ function tuple(major, minor, patch) {
61
+ return { major, minor, patch, pre: [], parts: 3 };
62
+ }
63
+ /** The next release boundary a partial `>`/`<=` desugars to. */
64
+ function bumpPartial(partial, keepPrerelease) {
65
+ const pre = keepPrerelease ? partial.pre : [];
66
+ if (partial.parts === 2)
67
+ return { major: partial.major, minor: partial.minor + 1, patch: 0, pre, parts: 3 };
68
+ return { major: partial.major + 1, minor: 0, patch: 0, pre, parts: 3 };
69
+ }
70
+ /** Expand one range token into comparators; `undefined` for a token outside the subset. */
71
+ function comparatorsOf(token) {
72
+ const match = /^(\^|~|>=|<=|>|<|=)?(.*)$/.exec(token);
73
+ if (match === null)
74
+ return undefined;
75
+ const operator = match[1] ?? '';
76
+ const partial = parseVersion(match[2] ?? '');
77
+ if (partial === undefined)
78
+ return undefined;
79
+ switch (operator) {
80
+ case '>':
81
+ // A partial `>1.2` desugars to `>=1.3.0`.
82
+ return partial.parts === 3 ? [{ op: '>', version: partial }] : [{ op: '>=', version: bumpPartial(partial, true) }];
83
+ case '<=':
84
+ // A partial `<=1.2` desugars to `<1.3.0`.
85
+ return partial.parts === 3 ? [{ op: '<=', version: partial }] : [{ op: '<', version: bumpPartial(partial, false) }];
86
+ case '>=':
87
+ case '<':
88
+ return [{ op: operator, version: partial }];
89
+ case '':
90
+ case '=':
91
+ if (partial.parts === 3)
92
+ return [{ op: '=', version: partial }];
93
+ if (partial.parts === 2)
94
+ return [{ op: '>=', version: partial }, { op: '<', version: tuple(partial.major, partial.minor + 1, 0) }];
95
+ return [{ op: '>=', version: partial }, { op: '<', version: tuple(partial.major + 1, 0, 0) }];
96
+ case '^': {
97
+ const upper = partial.major > 0 || partial.parts === 1
98
+ ? tuple(partial.major + 1, 0, 0)
99
+ : partial.minor > 0 || partial.parts === 2
100
+ ? tuple(0, partial.minor + 1, 0)
101
+ : tuple(0, 0, partial.patch + 1);
102
+ return [{ op: '>=', version: partial }, { op: '<', version: upper }];
103
+ }
104
+ case '~': {
105
+ const upper = partial.parts === 1 ? tuple(partial.major + 1, 0, 0) : tuple(partial.major, partial.minor + 1, 0);
106
+ return [{ op: '>=', version: partial }, { op: '<', version: upper }];
107
+ }
108
+ default:
109
+ return undefined;
110
+ }
111
+ }
112
+ function matchesComparator(version, comparator) {
113
+ const order = compare(version, comparator.version);
114
+ switch (comparator.op) {
115
+ case '=':
116
+ return order === 0;
117
+ case '>':
118
+ return order > 0;
119
+ case '>=':
120
+ return order >= 0;
121
+ case '<':
122
+ return order < 0;
123
+ case '<=':
124
+ return order <= 0;
125
+ }
126
+ }
127
+ /**
128
+ * Does `parsed` satisfy `range`? Unsupported tokens answer `false`.
129
+ * A prerelease only matches a comparator naming a prerelease of the same tuple.
130
+ */
131
+ function satisfies(parsed, range) {
132
+ const text = range.trim();
133
+ if (text === '')
134
+ return false;
135
+ if (text === '*')
136
+ return true;
137
+ return text.split('||').some(branch => {
138
+ const tokens = branch.trim().split(/[\s,]+/).filter(token => token !== '');
139
+ if (tokens.length === 0)
140
+ return false;
141
+ const comparators = [];
142
+ for (const token of tokens) {
143
+ const expanded = comparatorsOf(token);
144
+ if (expanded === undefined)
145
+ return false;
146
+ comparators.push(...expanded);
147
+ }
148
+ if (!comparators.every(comparator => matchesComparator(parsed, comparator)))
149
+ return false;
150
+ if (parsed.pre.length === 0)
151
+ return true;
152
+ return comparators.some(comparator => comparator.version.pre.length > 0 &&
153
+ comparator.version.major === parsed.major &&
154
+ comparator.version.minor === parsed.minor &&
155
+ comparator.version.patch === parsed.patch);
156
+ });
157
+ }
158
+ /** Does `version` fall inside the `supported` interval? */
159
+ function withinSupported(version, supported) {
160
+ const parsed = parseVersion(version);
161
+ return parsed !== undefined && satisfies(parsed, supported);
162
+ }
163
+ // ─────────────────────────────────────────────────────────────────────────────
164
+ // Resolution
165
+ // ─────────────────────────────────────────────────────────────────────────────
166
+ /** Read `<dir>/package.json` as an object, or `undefined`. */
167
+ async function readManifest(dir) {
168
+ try {
169
+ const parsed = JSON.parse(await fsp.readFile(join(dir, 'package.json'), 'utf8'));
170
+ return typeof parsed === 'object' && parsed !== null ? parsed : undefined;
171
+ }
172
+ catch {
173
+ return undefined;
174
+ }
175
+ }
176
+ /** The entry file a `package.json` points at (`.` export → `main` → `index.js`). */
177
+ function entryOf(dir, manifest) {
178
+ const exported = manifest['exports'];
179
+ let relative;
180
+ if (typeof exported === 'string')
181
+ relative = exported;
182
+ else if (typeof exported === 'object' && exported !== null) {
183
+ const dot = exported['.'] ?? exported;
184
+ if (typeof dot === 'string')
185
+ relative = dot;
186
+ else if (typeof dot === 'object' && dot !== null) {
187
+ const conditions = dot;
188
+ for (const key of ['import', 'default', 'require']) {
189
+ const value = conditions[key];
190
+ if (typeof value === 'string') {
191
+ relative = value;
192
+ break;
193
+ }
194
+ }
195
+ }
196
+ }
197
+ if (relative === undefined && typeof manifest['main'] === 'string')
198
+ relative = manifest['main'];
199
+ return join(dir, relative ?? 'index.js');
200
+ }
201
+ /**
202
+ * Report the framework copy this caller's tree resolves to, or `undefined` with a warning.
203
+ * Never throws and never installs anything.
204
+ *
205
+ * @param options - the logger and an optional interval override.
206
+ * @returns the located copy, or `undefined` when it is absent or outside the interval.
207
+ */
208
+ export async function ensureFramework(options) {
209
+ const warn = (message) => {
210
+ try {
211
+ options.logger?.warn(`bootstrap: ${message}`);
212
+ }
213
+ catch {
214
+ // The warning is best-effort.
215
+ }
216
+ };
217
+ try {
218
+ if (options.supportedRange !== undefined && typeof options.supportedRange !== 'string') {
219
+ warn(`supportedRange must be a string; got ${typeof options.supportedRange}`);
220
+ return undefined;
221
+ }
222
+ const supported = options.supportedRange ?? supportedRange;
223
+ let dir;
224
+ try {
225
+ dir = dirname(createRequire(import.meta.url).resolve(`${PACKAGE}/package.json`));
226
+ }
227
+ catch {
228
+ warn(`${PACKAGE} is not installed for this plugin — install it with the package manager (pnpm install)`);
229
+ return undefined;
230
+ }
231
+ const manifest = await readManifest(dir);
232
+ const version = typeof manifest?.['version'] === 'string' ? manifest['version'] : undefined;
233
+ if (manifest === undefined || version === undefined) {
234
+ warn(`${join(dir, 'package.json')} is missing or has no version`);
235
+ return undefined;
236
+ }
237
+ if (!withinSupported(version, supported)) {
238
+ warn(`the installed ${PACKAGE}@${version} is outside supportedRange "${supported}"; install a supported version`);
239
+ return undefined;
240
+ }
241
+ return { url: pathToFileURL(entryOf(dir, manifest)).href, version, dir, source: 'resolved' };
242
+ }
243
+ catch (error) {
244
+ warn(`unexpected failure: ${error instanceof Error ? error.message : String(error)}`);
245
+ return undefined;
246
+ }
247
+ }
248
+ /** `ensureFramework` + a dynamic `import()` of the located module; never throws. */
249
+ export async function loadFramework(options) {
250
+ try {
251
+ const location = await ensureFramework(options);
252
+ if (location === undefined)
253
+ return undefined;
254
+ return (await import(location.url));
255
+ }
256
+ catch (error) {
257
+ try {
258
+ options.logger?.warn(`bootstrap: could not load ${PACKAGE}: ${error instanceof Error ? error.message : String(error)}`);
259
+ }
260
+ catch {
261
+ // best-effort
262
+ }
263
+ return undefined;
264
+ }
265
+ }
266
+ /**
267
+ * Read the range a plugin declares in the nearest `package.json`: walk up from `from`,
268
+ * preferring `peerDependencies` over `devDependencies`; `undefined` when none is found.
269
+ */
270
+ export async function readDependencyRange(from = process.cwd()) {
271
+ let current = from;
272
+ if (from.startsWith('file:')) {
273
+ try {
274
+ current = fileURLToPath(from);
275
+ }
276
+ catch {
277
+ // A malformed `file:` URL yields no range.
278
+ return undefined;
279
+ }
280
+ }
281
+ try {
282
+ const info = await fsp.stat(current);
283
+ if (info.isFile())
284
+ current = dirname(current);
285
+ }
286
+ catch {
287
+ // Not an existing path: treat it as a starting directory and walk up from its parent.
288
+ const parent = dirname(current);
289
+ if (parent !== current)
290
+ current = parent;
291
+ }
292
+ for (;;) {
293
+ const manifestPath = join(current, 'package.json');
294
+ let text;
295
+ try {
296
+ text = await fsp.readFile(manifestPath, 'utf8');
297
+ }
298
+ catch {
299
+ const parent = dirname(current);
300
+ if (parent === current)
301
+ return undefined;
302
+ current = parent;
303
+ continue;
304
+ }
305
+ try {
306
+ const parsed = JSON.parse(text);
307
+ if (typeof parsed !== 'object' || parsed === null)
308
+ return undefined;
309
+ const manifest = parsed;
310
+ return rangeOf(manifest['peerDependencies']) ?? rangeOf(manifest['devDependencies']);
311
+ }
312
+ catch {
313
+ // The nearest manifest is unparseable: stop.
314
+ return undefined;
315
+ }
316
+ }
317
+ }
318
+ function rangeOf(value) {
319
+ if (typeof value !== 'object' || value === null)
320
+ return undefined;
321
+ const range = value[PACKAGE];
322
+ return typeof range === 'string' && range.trim() !== '' ? range : undefined;
323
+ }
@@ -0,0 +1,145 @@
1
+ import type { ProvisionReportEntry } from '@avantf/dsh-envinit';
2
+ import { type CompatModule, type CompatRuntime } from './provision.js';
3
+ /** The framework's module shape; `import type` only — the value is always loaded dynamically. */
4
+ type EnvinitModule = typeof import('@avantf/dsh-envinit');
5
+ /**
6
+ * The item ids. `resolve()` / `onSettled` are keyed by them, so the DSH plugin compares against these
7
+ * names rather than re-spelling literals.
8
+ */
9
+ export declare const COMPAT_ITEM = "mem:compat";
10
+ export declare const PANDOC_ITEM = "mem:pandoc";
11
+ export declare const MODEL_ITEM = "mem:model";
12
+ /**
13
+ * The default ONNX embedding repository — the one `semantic.local_model` defaults to and the one
14
+ * {@link MODEL_FILES} describes. A DIFFERENT repo is a different file set, which is why the item
15
+ * omits `spec.files` for it (see {@link managedModelSpec}).
16
+ */
17
+ export declare const DEFAULT_MODEL_REPO = "Xenova/bge-small-zh-v1.5";
18
+ /**
19
+ * The files the local embedding runtime actually requests for the DEFAULT ONNX model.
20
+ *
21
+ * Measured, not guessed: with an empty cache, `@huggingface/transformers@4.x` resolving
22
+ * `feature-extraction` for `Xenova/bge-small-zh-v1.5` fetches exactly these four — `config.json`,
23
+ * `tokenizer.json`, `tokenizer_config.json` and the fp32 `onnx/model.onnx`. The repo ALSO carries
24
+ * `special_tokens_map.json`, `vocab.txt` and seven other ONNX quantisations the default run never
25
+ * opens; declaring them would download hundreds of megabytes of dead weight. The list stays narrow
26
+ * to what is read.
27
+ */
28
+ export declare const MODEL_FILES: readonly string[];
29
+ /** The logging surface this module needs — `AvantfLogger` satisfies it. */
30
+ export interface EnvinitLogger {
31
+ info(message: string): void;
32
+ warn(message: string): void;
33
+ error(message: string): void;
34
+ }
35
+ /**
36
+ * What the engine resolved from its config, handed to {@link EnvinitRuntime.provisionResources}.
37
+ *
38
+ * `pandoc` is "this build needs it": when `tools.auto_install` is off the item is NOT declared, so the
39
+ * framework never fetches something the operator disabled per feature. The model is declared either
40
+ * way (unless the runtime reads its models elsewhere), because WHEN it is off is a DOWNLOAD question,
41
+ * not a declaration question — see {@link ResourcePlan.modelAutoDownload}.
42
+ */
43
+ export interface ResourcePlan {
44
+ readonly pandoc: boolean;
45
+ /** `tools.mirror` — URL templates tried before the official source, for archive downloads. */
46
+ readonly archiveMirrors: readonly string[];
47
+ /**
48
+ * May the MODEL item fetch from the network? `semantic.auto_download`.
49
+ *
50
+ * Passed per call, because only the runtime knows the resolved config: the framework's own
51
+ * `autoDownload` policy was fixed before the config existed, so `semantic.auto_download: false`
52
+ * used to be ignored and the item still went to the network. Off → the item is still declared (its
53
+ * terminal state is `skipped (policy/download-disabled)`, the diagnosis an operator looks for) but
54
+ * the framework probes disk only; the engine then degrades to FTS+entity.
55
+ */
56
+ readonly modelAutoDownload: boolean;
57
+ /**
58
+ * The embedding model to provision through `model-cache`, or `undefined` when the semantic backend
59
+ * is not a local model OR the runtime reads its models from somewhere the framework does not own
60
+ * (an `AVANTF_MEM_MODEL_CACHE` override — see {@link managedModelSpec}). `endpoint` is the
61
+ * resolved mirror, `files` the explicit set the runtime reads for the DEFAULT repo (empty for any
62
+ * other repo, where the item falls back to the repository's own file list).
63
+ */
64
+ readonly model: {
65
+ readonly repo: string;
66
+ readonly files: readonly string[];
67
+ readonly endpoint: string;
68
+ } | undefined;
69
+ }
70
+ /**
71
+ * The model item the framework should own, or `undefined` when it should not.
72
+ *
73
+ * Two refusals, both deliberate:
74
+ *
75
+ * 1. **Not a local backend** — nothing to provision.
76
+ * 2. **The runtime reads its models from elsewhere** — `semantic.cache_dir` is not the framework's
77
+ * `<home>/models`. That happens through the operator escape hatch `AVANTF_MEM_MODEL_CACHE`
78
+ * (env layer ④): the runtime loads from that directory, so a `mem:model` item would install a
79
+ * full second copy under `<home>/models` that nothing ever reads (~190 MB). Declaring nothing
80
+ * is the fix; the caller warms from the override directory instead.
81
+ *
82
+ * `files` is the narrow {@link MODEL_FILES} set only for the DEFAULT repo; a user-changed repo has a
83
+ * different file set, and a stale six-file list would make the item `failed` while the runtime could
84
+ * serve it. Empty means "omit `spec.files`": the framework then installs the repository's own file
85
+ * list.
86
+ */
87
+ export declare function managedModelSpec(semantic: {
88
+ readonly backend: string;
89
+ readonly local_model: string;
90
+ readonly cache_dir: string;
91
+ readonly mirror: string;
92
+ }, modelsRoot: string): ResourcePlan['model'];
93
+ /** The loaded framework + gate + the roots the runtime should use. */
94
+ export interface EnvinitRuntime {
95
+ /** The family root (`<home>` of the framework); resources live under it. */
96
+ readonly home: string;
97
+ /** The gate runtime, or `undefined` when the base could not be provided (mount anyway). */
98
+ readonly compat: CompatRuntime | undefined;
99
+ /** The engine's managed roots while the framework is usable. */
100
+ readonly roots: {
101
+ readonly tools: string;
102
+ readonly models: string;
103
+ };
104
+ /**
105
+ * Declare the expensive resources and dispatch them in the BACKGROUND.
106
+ *
107
+ * Returns immediately; each item reaches `onSettled` when it settles (usually `present` right
108
+ * away, or `installed`/`failed`/`skipped` later). A callback that throws is logged by the
109
+ * framework, never fatal.
110
+ */
111
+ provisionResources(plan: ResourcePlan, onSettled: (entry: ProvisionReportEntry) => void): void;
112
+ /** Release every provisioner this runtime created (leases included). */
113
+ dispose(): void;
114
+ }
115
+ /** Options for {@link loadEnvinit}. */
116
+ export interface EnvinitLoadOptions {
117
+ readonly log?: EnvinitLogger;
118
+ /** The family root; default `$AVANTF_HOME`, else `~/.avantf/env` (framework DESIGN §6.3). */
119
+ readonly home?: string;
120
+ /** May a missing resource be downloaded? Default both kill switches on (see `envAutoDownload` in the contract). */
121
+ readonly autoDownload?: boolean;
122
+ readonly deadlineMs?: number;
123
+ /** Test seam: the framework module, instead of bootstrapping it from the tree/registry. */
124
+ readonly framework?: EnvinitModule;
125
+ /** Test seam: the base module, instead of importing the copy the framework provisioned. */
126
+ readonly compatModule?: CompatModule;
127
+ }
128
+ /**
129
+ * Ensure the framework, then the compatibility base, then dispatch the expensive resources.
130
+ *
131
+ * Never throws. Returns `undefined` when the framework cannot be loaded — the caller then warns and
132
+ * mounts on the legacy provisioning path (the engine's own `@avantf/mem-provision` sweep, whose
133
+ * default directories are the pre-migration ones). A framework that loads but cannot provide the
134
+ * base still returns a runtime, with `compat: undefined`: the mount must continue, and the resource
135
+ * items are still worth dispatching.
136
+ *
137
+ * The result is cached per process; a FAILED load is not, so a profile reload retries instead of
138
+ * replaying the first failure for the whole process lifetime.
139
+ *
140
+ * @param options - logger, family root, download policy and the test seams.
141
+ * @returns the loaded runtime, or `undefined` when the framework itself is unavailable.
142
+ */
143
+ export declare function loadEnvinit(options?: EnvinitLoadOptions): Promise<EnvinitRuntime | undefined>;
144
+ export {};
145
+ //# sourceMappingURL=envinit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envinit.d.ts","sourceRoot":"","sources":["../../src/envinit.ts"],"names":[],"mappings":"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"}