@askdb/config 1.0.0-beta.16 → 1.0.0-beta.18

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 (69) hide show
  1. package/README.md +15 -4
  2. package/dist/ai-env.d.ts +31 -0
  3. package/dist/ai-env.d.ts.map +1 -0
  4. package/dist/ai-env.js +88 -0
  5. package/dist/ai-env.js.map +1 -0
  6. package/dist/bootstrap.d.ts +6 -4
  7. package/dist/bootstrap.d.ts.map +1 -1
  8. package/dist/bootstrap.js +6 -17
  9. package/dist/bootstrap.js.map +1 -1
  10. package/dist/defaults.d.ts +7 -20
  11. package/dist/defaults.d.ts.map +1 -1
  12. package/dist/defaults.js +7 -58
  13. package/dist/defaults.js.map +1 -1
  14. package/dist/env.d.ts +2 -1
  15. package/dist/env.d.ts.map +1 -1
  16. package/dist/env.js +2 -1
  17. package/dist/env.js.map +1 -1
  18. package/dist/index.d.ts +2 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/load-merge.js +1 -1
  23. package/dist/load-merge.js.map +1 -1
  24. package/dist/projection.d.ts +12 -2
  25. package/dist/projection.d.ts.map +1 -1
  26. package/dist/projection.js +18 -6
  27. package/dist/projection.js.map +1 -1
  28. package/dist/resolve.d.ts +36 -0
  29. package/dist/resolve.d.ts.map +1 -0
  30. package/dist/{normalize.js → resolve.js} +375 -8
  31. package/dist/resolve.js.map +1 -0
  32. package/dist/runtime-config.d.ts +5 -173
  33. package/dist/runtime-config.d.ts.map +1 -1
  34. package/dist/runtime-config.js +18 -222
  35. package/dist/runtime-config.js.map +1 -1
  36. package/dist/runtime-store.d.ts +9 -6
  37. package/dist/runtime-store.d.ts.map +1 -1
  38. package/dist/runtime-store.js +9 -11
  39. package/dist/runtime-store.js.map +1 -1
  40. package/dist/runtime-types.d.ts +176 -0
  41. package/dist/runtime-types.d.ts.map +1 -0
  42. package/dist/runtime-types.js +2 -0
  43. package/dist/runtime-types.js.map +1 -0
  44. package/dist/scaffold/ai.d.ts +3 -0
  45. package/dist/scaffold/ai.d.ts.map +1 -1
  46. package/dist/scaffold/ai.js +3 -0
  47. package/dist/scaffold/ai.js.map +1 -1
  48. package/dist/scaffold/index.d.ts +12 -3
  49. package/dist/scaffold/index.d.ts.map +1 -1
  50. package/dist/scaffold/index.js +10 -3
  51. package/dist/scaffold/index.js.map +1 -1
  52. package/dist/scaffold/package-manager.d.ts +93 -0
  53. package/dist/scaffold/package-manager.d.ts.map +1 -0
  54. package/dist/scaffold/package-manager.js +200 -0
  55. package/dist/scaffold/package-manager.js.map +1 -0
  56. package/dist/scaffold/plan.d.ts +110 -0
  57. package/dist/scaffold/plan.d.ts.map +1 -0
  58. package/dist/scaffold/plan.js +301 -0
  59. package/dist/scaffold/plan.js.map +1 -0
  60. package/dist/types.d.ts +6 -13
  61. package/dist/types.d.ts.map +1 -1
  62. package/package.json +1 -1
  63. package/dist/flatten.d.ts +0 -14
  64. package/dist/flatten.d.ts.map +0 -1
  65. package/dist/flatten.js +0 -255
  66. package/dist/flatten.js.map +0 -1
  67. package/dist/normalize.d.ts +0 -58
  68. package/dist/normalize.d.ts.map +0 -1
  69. package/dist/normalize.js.map +0 -1
@@ -1,9 +1,9 @@
1
- import { flattenNormalizedAskDbConfig } from "./flatten.js";
2
- import { normalizeAskDbConfig } from "./normalize.js";
1
+ import { resolveAskDbConfig } from "./resolve.js";
3
2
  export const ASKDB_ENV_PROJECTION = Symbol.for("askdb.envProjection");
4
3
  /**
5
- * Wraps a nested {@link AskDbConfig} for bootstrap merge. Check the object with TypeScript’s
6
- * `satisfies AskDbConfig` so excess or mistyped keys fail at compile time while literals stay narrow, e.g.:
4
+ * Checks a nested {@link AskDbConfig} and wraps it with its canonical env keys, for `bootstrapAskDbEnv`
5
+ * to install. Use TypeScript’s `satisfies AskDbConfig` on the object so excess or mistyped keys fail
6
+ * at compile time while literals stay narrow, e.g.:
7
7
  *
8
8
  * ```ts
9
9
  * export default defineConfig({
@@ -19,19 +19,31 @@ export const ASKDB_ENV_PROJECTION = Symbol.for("askdb.envProjection");
19
19
  * Throws an `askdb.config: …` error for a config that can't load.
20
20
  */
21
21
  export function defineConfig(config) {
22
- const { config: normalized, deprecations } = normalizeAskDbConfig(config);
22
+ const { flat, deprecations } = resolveAskDbConfig(config);
23
23
  return {
24
24
  [ASKDB_ENV_PROJECTION]: true,
25
25
  config,
26
- entries: flattenNormalizedAskDbConfig(normalized),
26
+ entries: flat,
27
27
  deprecations,
28
28
  };
29
29
  }
30
+ /**
31
+ * Flattens a nested {@link AskDbConfig} into the canonical env keys of the runtime snapshot
32
+ * (`AskDbEnvProjection.entries`), for example to build a child process's env. Most optional keys are
33
+ * written only when the config sets them, so defaults such as the HTTP port stay out of the env;
34
+ * `ASKDB_RAG_EMBEDDER`, `ASKDB_INTROSPECT_OUT` and, with the pgvector store,
35
+ * `ASKDB_PGVECTOR_INDEX_STRATEGY` and the mock embedder's `ASKDB_RAG_EMBEDDER_DIMENSIONS` are always
36
+ * written. Throws the same `askdb.config: …` errors as `defineConfig`.
37
+ */
38
+ export function flattenAskDbConfig(config) {
39
+ return resolveAskDbConfig(config).flat;
40
+ }
30
41
  export function isAskDbEnvProjection(value) {
31
42
  return (typeof value === "object" &&
32
43
  value !== null &&
33
44
  ASKDB_ENV_PROJECTION in value &&
34
45
  value[ASKDB_ENV_PROJECTION] === true &&
46
+ "entries" in value &&
35
47
  typeof value.entries === "object" &&
36
48
  value.entries !== null &&
37
49
  "config" in value &&
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AActE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAA8B,MAAS;IACjE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1E,OAAO;QACL,CAAC,oBAAoB,CAAC,EAAE,IAAI;QAC5B,MAAM;QACN,OAAO,EAAE,4BAA4B,CAAC,UAAU,CAAC;QACjD,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,oBAAoB,IAAI,KAAK;QAC5B,KAA4B,CAAC,oBAAoB,CAAC,KAAK,IAAI;QAC5D,OAAQ,KAA4B,CAAC,OAAO,KAAK,QAAQ;QACxD,KAA4B,CAAC,OAAO,KAAK,IAAI;QAC9C,QAAQ,IAAI,KAAK;QACjB,OAAQ,KAA4B,CAAC,MAAM,KAAK,QAAQ;QACvD,KAA4B,CAAC,MAAM,KAAK,IAAI,CAC9C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AActE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAA8B,MAAS;IACjE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO;QACL,CAAC,oBAAoB,CAAC,EAAE,IAAI;QAC5B,MAAM;QACN,OAAO,EAAE,IAAI;QACb,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,oBAAoB,IAAI,KAAK;QAC7B,KAAK,CAAC,oBAAoB,CAAC,KAAK,IAAI;QACpC,SAAS,IAAI,KAAK;QAClB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,KAAK,CAAC,OAAO,KAAK,IAAI;QACtB,QAAQ,IAAI,KAAK;QACjB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,KAAK,CAAC,MAAM,KAAK,IAAI,CACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { AskDbRuntimeConfig, AskDbRuntimeAiConfig } from "./runtime-types.js";
2
+ import type { AskDbConfig } from "./types.js";
3
+ /**
4
+ * The config resolver: the one place that checks, translates and defaults every `askdb.config`
5
+ * setting. Each setting's runtime value and its flat-map key come out of the same pass, so
6
+ * `defineConfig` and `getAskDbRuntimeConfig` agree, and `@askdb/config` never reads a setting
7
+ * back from a flat map.
8
+ */
9
+ /**
10
+ * Every {@link AskDbRuntimeConfig} section, checked, translated and defaulted. Not `structured`,
11
+ * `flat`, `deprecations` or `ai.aiEnv`, which is built from `flat`.
12
+ */
13
+ type ResolvedAskDbConfig = Omit<AskDbRuntimeConfig, "structured" | "flat" | "ai" | "deprecations"> & {
14
+ ai: Omit<AskDbRuntimeAiConfig, "aiEnv">;
15
+ };
16
+ /**
17
+ * A plain `{ ... }` object: not null, an array, a Promise or a module namespace. Read through
18
+ * `Object.prototype.toString`, so an object from another realm still counts.
19
+ */
20
+ export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
21
+ /** What {@link resolveAskDbConfig} returns. */
22
+ export type AskDbConfigResolution = {
23
+ resolved: ResolvedAskDbConfig;
24
+ /** The flat map: each setting's canonical env key, written in the same pass that checks it. */
25
+ flat: Record<string, string>;
26
+ deprecations: string[];
27
+ };
28
+ /**
29
+ * Resolves every setting of an authored config: checks it, translates deprecated keys and fills in
30
+ * defaults, and writes its flat key. Pure: it reads no environment. Returns one deprecation
31
+ * message per legacy key in use. Throws `askdb.config: …` errors that name the config key for a
32
+ * config that can't load (the loader adds the file name).
33
+ */
34
+ export declare function resolveAskDbConfig(config: AskDbConfig): AskDbConfigResolution;
35
+ export {};
36
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EACV,kBAAkB,EAKlB,oBAAoB,EAGrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAA0B,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtE;;;;;GAKG;AAEH;;;GAGG;AACH,KAAK,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,cAAc,CAAC,GAAG;IACnG,EAAE,EAAE,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;CACzC,CAAC;AAqEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E;AAw3BD,+CAA+C;AAC/C,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,+FAA+F;IAC/F,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,qBAAqB,CA6B7E"}
@@ -1,7 +1,6 @@
1
- import { ASKDB_AI_PROVIDERS, ASKDB_RAG_EMBEDDERS, ASKDB_REASONING_EFFORTS, } from "./constants.js";
2
- import { DEFAULT_ANTHROPIC_LANGUAGE_MODEL, DEFAULT_AZURE_OPENAI_DEPLOYMENT, DEFAULT_GATEWAY_LANGUAGE_MODEL, DEFAULT_GOOGLE_LANGUAGE_MODEL, DEFAULT_MOCK_RAG_EMBEDDING_DIMENSIONS, DEFAULT_OPENAI_LANGUAGE_MODEL, DEFAULT_RAG_EMBEDDING_MODEL, defaultRagEmbeddingDimensions, parsePositiveInteger, } from "./defaults.js";
3
- /** Every setting a built-in provider connection can carry, besides its name. */
4
- const CONNECTION_FIELDS = ["apiKey", "secondaryApiKey", "resourceName", "baseUrl", "apiVersion"];
1
+ import { ASKDB_AI_PROVIDERS, ASKDB_LOG_LEVELS, ASKDB_MODES_V1, ASKDB_RAG_EMBEDDERS, ASKDB_RAG_STORES, ASKDB_REASONING_EFFORTS, ASKDB_STUDIO_EXECUTE_PROVIDERS, } from "./constants.js";
2
+ import { aiEmbeddingEnv, aiLanguageEnv, CONNECTION_FIELDS, setEnvKey, } from "./ai-env.js";
3
+ import { DEFAULT_ANTHROPIC_LANGUAGE_MODEL, DEFAULT_AZURE_OPENAI_DEPLOYMENT, DEFAULT_GATEWAY_LANGUAGE_MODEL, DEFAULT_GOOGLE_LANGUAGE_MODEL, DEFAULT_HTTP_API_HOST, DEFAULT_HTTP_API_PORT, DEFAULT_HTTP_API_REQUEST_TIMEOUT_MS, DEFAULT_INTROSPECT_OUTPUT_DIR, DEFAULT_MOCK_RAG_EMBEDDING_DIMENSIONS, DEFAULT_OPENAI_LANGUAGE_MODEL, DEFAULT_PGVECTOR_INDEX_STRATEGY, DEFAULT_RAG_EMBEDDING_MODEL, DEFAULT_STUDIO_EXECUTE_MAX_ROWS, DEFAULT_STUDIO_EXECUTE_TIMEOUT_MS, MAX_HTTP_API_REQUEST_TIMEOUT_MS, defaultRagEmbeddingDimensions, } from "./defaults.js";
5
4
  const DEFAULT_CONNECTION = "default";
6
5
  /** Name of the connection a legacy RAG key moves to when it differs from the provider's default connection. */
7
6
  const LEGACY_RAG_CONNECTION = "rag-embeddings";
@@ -16,7 +15,7 @@ const LEGACY_DEFAULT_EMBEDDING_MODEL_PROVIDERS = new Set(["openai", "azure", "fo
16
15
  function widthEarlierVersionsAssumed(model) {
17
16
  return defaultRagEmbeddingDimensions(model);
18
17
  }
19
- export function isMember(value, allowed) {
18
+ function isMember(value, allowed) {
20
19
  return allowed.includes(value);
21
20
  }
22
21
  function isBuiltinProvider(provider) {
@@ -129,7 +128,7 @@ function parseConfiguredDimensions(value, key) {
129
128
  return undefined;
130
129
  const parsed = parsePositiveInteger(value);
131
130
  if (parsed === undefined) {
132
- throw new Error(`askdb.config: ${key} must be a positive integer (got ${JSON.stringify(value)}).`);
131
+ throw new Error(`askdb.config: ${key} must be a positive integer (got ${describeValue(value)}).`);
133
132
  }
134
133
  return parsed;
135
134
  }
@@ -267,7 +266,7 @@ function translateLegacyLanguageField(field, configured, table, languageEntry, w
267
266
  * the old and new location, never a value). Throws `askdb.config: …` errors for a config that
268
267
  * can't load.
269
268
  */
270
- export function normalizeAskDbConfig(config) {
269
+ function normalizeAskDbConfig(config) {
271
270
  // The type requires both blocks, but a JS config (or a TS one run without a type check) can
272
271
  // leave one out. Name it here rather than crash on it below (#626).
273
272
  if (!isPlainObject(config.ai)) {
@@ -415,4 +414,372 @@ export function normalizeAskDbConfig(config) {
415
414
  deprecations,
416
415
  };
417
416
  }
418
- //# sourceMappingURL=normalize.js.map
417
+ // ---------------------------------------------------------------------------
418
+ // Reading one value. Each reader names the config key in its error, never a flat key.
419
+ // ---------------------------------------------------------------------------
420
+ /**
421
+ * A value for an error message: a string quoted, `null`, `undefined`, a number or a boolean as
422
+ * written, anything else by its type. An object or a function is never printed, since its text
423
+ * could hold a key or a connection string.
424
+ */
425
+ function describeValue(value) {
426
+ if (typeof value === "string")
427
+ return JSON.stringify(value);
428
+ if (value === null || value === undefined || typeof value === "number" || typeof value === "boolean") {
429
+ return String(value);
430
+ }
431
+ if (Array.isArray(value))
432
+ return "an array";
433
+ return typeof value === "object" ? "an object" : `a ${typeof value}`;
434
+ }
435
+ /**
436
+ * A string key: trimmed, or `undefined` when unset (`undefined` or `null`) or blank. Any other
437
+ * value fails: hosts read some string keys from the structured config as written (`host.*`,
438
+ * `studio.listen.host`), so a wrong type must stop the load, not a later call.
439
+ */
440
+ function readString(value, key) {
441
+ if (typeof value === "string")
442
+ return nonBlank(value);
443
+ if (value === undefined || value === null)
444
+ return undefined;
445
+ throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected a string).`);
446
+ }
447
+ /**
448
+ * A boolean key must be `true`, `false` or unset. Anything else fails: the string `"false"` is
449
+ * truthy, so reading it as a flag would turn the setting on.
450
+ */
451
+ function readBoolean(value, key) {
452
+ if (value === undefined || typeof value === "boolean")
453
+ return value;
454
+ throw new Error(`askdb.config: ${key} must be a boolean (got ${describeValue(value)}).`);
455
+ }
456
+ /** One of `allowed`, or `undefined` when unset (`undefined`, `null` or `""`). */
457
+ function readMember(value, allowed, key) {
458
+ if (value === undefined || value === null || value === "")
459
+ return undefined;
460
+ if (isMember(value, allowed))
461
+ return value;
462
+ throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected one of: ${allowed.join(", ")}).`);
463
+ }
464
+ /** A list of strings, each trimmed, blanks dropped; `undefined` when unset or empty. */
465
+ function readStringList(value, key) {
466
+ if (value === undefined || value === null)
467
+ return undefined;
468
+ if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
469
+ throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected an array of strings).`);
470
+ }
471
+ const list = value.map((item) => item.trim()).filter(Boolean);
472
+ return list.length > 0 ? list : undefined;
473
+ }
474
+ /** A positive integer, or a string holding one; `undefined` for anything else. */
475
+ function parsePositiveInteger(value) {
476
+ if (typeof value === "number")
477
+ return Number.isInteger(value) && value > 0 ? value : undefined;
478
+ if (typeof value !== "string")
479
+ return undefined;
480
+ const t = value.trim();
481
+ if (t === "")
482
+ return undefined;
483
+ const n = Number(t);
484
+ return Number.isInteger(n) && n > 0 ? n : undefined;
485
+ }
486
+ /** A positive-integer key, as a number or a string holding one. */
487
+ function readPositiveInteger(value, key) {
488
+ if (value === undefined)
489
+ return undefined;
490
+ const n = parsePositiveInteger(value);
491
+ if (n === undefined) {
492
+ throw new Error(`askdb.config: ${key} must be a positive integer (got ${describeValue(value)}).`);
493
+ }
494
+ return n;
495
+ }
496
+ /**
497
+ * `httpApi.requestTimeoutMs`: `undefined` when unset; otherwise a positive integer no larger than
498
+ * {@link MAX_HTTP_API_REQUEST_TIMEOUT_MS}, as a number or a string holding one.
499
+ */
500
+ function readRequestTimeoutMs(value, key) {
501
+ if (value === undefined)
502
+ return undefined;
503
+ const n = parsePositiveInteger(value);
504
+ if (n === undefined || n > MAX_HTTP_API_REQUEST_TIMEOUT_MS) {
505
+ throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected a positive integer number of milliseconds, at most ${MAX_HTTP_API_REQUEST_TIMEOUT_MS}).`);
506
+ }
507
+ return n;
508
+ }
509
+ /**
510
+ * `httpApi.listen.port`: `undefined` when unset or `NaN` (`Number(env("PORT"))` with `PORT`
511
+ * unset), as Studio does for `studio.listen.port`. Port `0` asks the OS for a free port. Anything
512
+ * but an integer from 0 to 65535, or a string holding one, fails.
513
+ */
514
+ function readListenPort(value, key) {
515
+ if (value === undefined || (typeof value === "number" && Number.isNaN(value)))
516
+ return undefined;
517
+ const text = typeof value === "string" ? value.trim() : undefined;
518
+ // `Number("")` is 0, so a blank string is checked before it's converted.
519
+ const port = typeof value === "number" ? value : text ? Number(text) : NaN;
520
+ if (!Number.isInteger(port) || port < 0 || port > 65535) {
521
+ throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected an integer from 0 to 65535).`);
522
+ }
523
+ return port;
524
+ }
525
+ const PGVECTOR_INDEX_STRATEGIES = ["ivfflat", "hnsw", "none"];
526
+ /**
527
+ * `rag.storeConfig.pgvector.indexStrategy`, lowercased, or the default when unset or blank. A
528
+ * value that isn't a string counts as unset.
529
+ */
530
+ function pgvectorIndexStrategy(raw) {
531
+ if (typeof raw !== "string" || raw.trim() === "")
532
+ return DEFAULT_PGVECTOR_INDEX_STRATEGY;
533
+ const v = raw.trim().toLowerCase();
534
+ if (isMember(v, PGVECTOR_INDEX_STRATEGIES))
535
+ return v;
536
+ throw new Error(`askdb.config: invalid rag.storeConfig.pgvector.indexStrategy "${raw}" (expected one of: ${PGVECTOR_INDEX_STRATEGIES.join(", ")}).`);
537
+ }
538
+ /** Writes `value` under `key` unless it's unset or blank. */
539
+ function setFlat(flat, key, value) {
540
+ setEnvKey(flat, key, value === undefined ? undefined : String(value));
541
+ }
542
+ function resolveIntrospection(intro, flat) {
543
+ const { provider } = intro;
544
+ const engines = intro.providerConfig;
545
+ // Only the active engine's connection is read, so other branches stay `undefined`.
546
+ const connection = (engine) => provider === engine
547
+ ? readString(engines?.[engine]?.databaseUrl, `introspection.providerConfig.${engine}.databaseUrl`)
548
+ : undefined;
549
+ const resolved = {
550
+ provider,
551
+ postgresDatabaseUrl: connection("postgres"),
552
+ prismaSchemaPath: provider === "prisma"
553
+ ? readString(engines?.prisma?.schemaPath, "introspection.providerConfig.prisma.schemaPath")
554
+ : undefined,
555
+ mysqlDatabaseUrl: connection("mysql"),
556
+ schemas: readStringList(intro.schemas, "introspection.schemas"),
557
+ sqliteFile: provider === "sqlite" ? readString(engines?.sqlite?.file, "introspection.providerConfig.sqlite.file") : undefined,
558
+ sqlserverDatabaseUrl: connection("sqlserver"),
559
+ outputDir: readString(intro.outputDir, "introspection.outputDir") ?? DEFAULT_INTROSPECT_OUTPUT_DIR,
560
+ };
561
+ setFlat(flat, "ASKDB_INTROSPECT_POSTGRES_URL", resolved.postgresDatabaseUrl);
562
+ setFlat(flat, "ASKDB_INTROSPECT_MYSQL_URL", resolved.mysqlDatabaseUrl);
563
+ setFlat(flat, "ASKDB_INTROSPECT_SQLITE_FILE", resolved.sqliteFile);
564
+ setFlat(flat, "ASKDB_INTROSPECT_SQLSERVER_URL", resolved.sqlserverDatabaseUrl);
565
+ // The Prisma schema path has no flat key: @askdb/prisma reads `prismaSchemaPath`.
566
+ setFlat(flat, "ASKDB_INTROSPECT_OUT", resolved.outputDir);
567
+ setFlat(flat, "ASKDB_INTROSPECT_SCHEMAS", resolved.schemas?.join(","));
568
+ return resolved;
569
+ }
570
+ function resolveAi(ai, flat) {
571
+ const { language, embedding } = ai;
572
+ const languageEnv = aiLanguageEnv(language);
573
+ // The flat map carries the language section's env view; the embedding section's stays on its own.
574
+ Object.assign(flat, languageEnv);
575
+ return {
576
+ language: {
577
+ provider: language.provider,
578
+ connection: language.connection.name,
579
+ model: language.model,
580
+ env: languageEnv,
581
+ modelFamily: language.modelFamily,
582
+ },
583
+ embedding: embedding
584
+ ? {
585
+ provider: embedding.provider,
586
+ connection: embedding.connection.name,
587
+ model: embedding.model,
588
+ env: aiEmbeddingEnv(embedding),
589
+ dimensions: embedding.dimensions,
590
+ }
591
+ : undefined,
592
+ };
593
+ }
594
+ function resolveRag(rag, ai, flat) {
595
+ const { store, storeConfig } = rag;
596
+ const embedding = ai.embedding;
597
+ setFlat(flat, "ASKDB_RAG_EMBEDDER", embedding ? "ai" : "mock");
598
+ if (embedding) {
599
+ setFlat(flat, "ASKDB_RAG_EMBEDDER_MODEL", embedding.model);
600
+ setFlat(flat, "ASKDB_RAG_EMBEDDER_DIMENSIONS", embedding.dimensions);
601
+ }
602
+ if (!isMember(store, ASKDB_RAG_STORES)) {
603
+ throw new Error(`askdb.config: invalid rag.store ${describeValue(store)} (expected one of: ${ASKDB_RAG_STORES.join(", ")}).`);
604
+ }
605
+ if (store === "file") {
606
+ if (!storeConfig.file)
607
+ throw new Error('askdb.config: rag.store is "file" but `rag.storeConfig.file` is missing.');
608
+ // Unset, the CLI and Studio use `<schema dir>/schema`.
609
+ setFlat(flat, "ASKDB_RAG_FILE_BASE_PATH", readString(storeConfig.file.basePath, "rag.storeConfig.file.basePath"));
610
+ }
611
+ else if (store === "pgvector") {
612
+ const pgvector = storeConfig.pgvector;
613
+ if (!pgvector)
614
+ throw new Error('askdb.config: rag.store is "pgvector" but `rag.storeConfig.pgvector` is missing.');
615
+ const url = readString(pgvector.databaseUrl, "rag.storeConfig.pgvector.databaseUrl");
616
+ if (!url) {
617
+ throw new Error('askdb.config: rag.store is "pgvector" but `rag.storeConfig.pgvector.databaseUrl` is missing; set it, for example `databaseUrl: env("PGVECTOR_URL")`.');
618
+ }
619
+ setFlat(flat, "ASKDB_PGVECTOR_URL", url);
620
+ // The mock embedder's vectors are always 64 wide. With `ai.embedding`, the dimensions written
621
+ // above are only a size to request: unset, the model's own width applies, learned at index time.
622
+ if (!embedding)
623
+ setFlat(flat, "ASKDB_RAG_EMBEDDER_DIMENSIONS", DEFAULT_MOCK_RAG_EMBEDDING_DIMENSIONS);
624
+ setFlat(flat, "ASKDB_PGVECTOR_INDEX_STRATEGY", pgvectorIndexStrategy(pgvector.indexStrategy));
625
+ }
626
+ // The RAG CLI's OpenAI embedder never reads another provider's key or base URL: it uses the
627
+ // embedding connection when that is OpenAI's, else only the OpenAI language connection.
628
+ const openaiEmbedding = embedding?.provider === "openai" ? embedding : undefined;
629
+ const source = openaiEmbedding ?? ai.language;
630
+ return {
631
+ embedder: {
632
+ apiKey: source.env.OPENAI_API_KEY,
633
+ baseURL: source.env.OPENAI_BASE_URL,
634
+ model: openaiEmbedding?.model,
635
+ },
636
+ store,
637
+ storeConfig,
638
+ };
639
+ }
640
+ function resolveLogging(logging, flat) {
641
+ const resolved = {
642
+ level: readMember(logging?.level, ASKDB_LOG_LEVELS, "logging.level"),
643
+ correlationId: readString(logging?.correlationId, "logging.correlationId"),
644
+ logFile: readString(logging?.logFile, "logging.logFile"),
645
+ logStdout: readBoolean(logging?.logStdout, "logging.logStdout") ?? false,
646
+ };
647
+ setFlat(flat, "ASKDB_LOG_LEVEL", resolved.level);
648
+ setFlat(flat, "ASKDB_CORRELATION_ID", resolved.correlationId);
649
+ setFlat(flat, "ASKDB_LOG_FILE", resolved.logFile);
650
+ if (resolved.logStdout)
651
+ setFlat(flat, "ASKDB_LOG_STDOUT", "true");
652
+ return resolved;
653
+ }
654
+ function resolveModes(modes, flat) {
655
+ const resolved = {
656
+ askdbMode: readMember(modes?.askdbMode, ASKDB_MODES_V1, "modes.askdbMode"),
657
+ omitSensitiveFromPrompt: readBoolean(modes?.omitSensitiveFromPrompt, "modes.omitSensitiveFromPrompt") ?? false,
658
+ };
659
+ setFlat(flat, "ASKDB_MODE", resolved.askdbMode);
660
+ if (resolved.omitSensitiveFromPrompt)
661
+ setFlat(flat, "ASKDB_OMIT_SENSITIVE_FROM_PROMPT", "true");
662
+ return resolved;
663
+ }
664
+ /** `host` has no runtime section: `createAskDb` reads `structured.host`. It's checked here all the same. */
665
+ function resolveHost(host, flat) {
666
+ setFlat(flat, "ASKDB_SCHEMA_PATH", readString(host?.schemaPath, "host.schemaPath"));
667
+ setFlat(flat, "ASKDB_SCHEMA_JSON", readString(host?.schemaJson, "host.schemaJson"));
668
+ }
669
+ function resolveHttpApi(httpApi, flat) {
670
+ const port = readListenPort(httpApi?.listen?.port, "httpApi.listen.port");
671
+ const host = readString(httpApi?.listen?.host, "httpApi.listen.host");
672
+ const allowSchemaOverride = readBoolean(httpApi?.allowSchemaOverride, "httpApi.allowSchemaOverride") ?? false;
673
+ const requestTimeoutMs = readRequestTimeoutMs(httpApi?.requestTimeoutMs, "httpApi.requestTimeoutMs");
674
+ setFlat(flat, "PORT", port);
675
+ setFlat(flat, "HOST", host);
676
+ if (allowSchemaOverride)
677
+ setFlat(flat, "ASKDB_HTTP_ALLOW_SCHEMA_OVERRIDE", "true");
678
+ setFlat(flat, "ASKDB_HTTP_REQUEST_TIMEOUT_MS", requestTimeoutMs);
679
+ return {
680
+ listen: { port: port ?? DEFAULT_HTTP_API_PORT, host: host ?? DEFAULT_HTTP_API_HOST },
681
+ allowSchemaOverride,
682
+ requestTimeoutMs: requestTimeoutMs ?? DEFAULT_HTTP_API_REQUEST_TIMEOUT_MS,
683
+ };
684
+ }
685
+ /** The introspection connection for `provider`, when introspection uses that engine. */
686
+ function introspectionConnectionFor(provider, introspection) {
687
+ switch (provider) {
688
+ case "postgres":
689
+ return introspection.postgresDatabaseUrl;
690
+ case "mysql":
691
+ return introspection.mysqlDatabaseUrl;
692
+ case "sqlserver":
693
+ return introspection.sqlserverDatabaseUrl;
694
+ case "sqlite":
695
+ return introspection.sqliteFile;
696
+ }
697
+ }
698
+ function resolveStudio(studio, introspection, flat) {
699
+ // `listen` has no runtime section: Studio reads `structured.studio.listen` and checks the port
700
+ // when it starts, so only the host's type is checked here.
701
+ const listen = studio?.listen;
702
+ setFlat(flat, "ASKDB_STUDIO_HOST", readString(listen?.host, "studio.listen.host"));
703
+ if (listen?.port !== undefined && !Number.isNaN(listen.port))
704
+ setFlat(flat, "ASKDB_STUDIO_PORT", listen.port);
705
+ const execute = studio?.execute;
706
+ // An explicit provider, else the introspection provider when it's a live engine, else postgres.
707
+ // An unknown provider falls back the same way.
708
+ const configured = readString(execute?.provider, "studio.execute.provider");
709
+ const provider = isMember(configured, ASKDB_STUDIO_EXECUTE_PROVIDERS)
710
+ ? configured
711
+ : isMember(introspection.provider, ASKDB_STUDIO_EXECUTE_PROVIDERS)
712
+ ? introspection.provider
713
+ : "postgres";
714
+ const enabled = readBoolean(execute?.enabled, "studio.execute.enabled");
715
+ const useIntrospectionConnection = readBoolean(execute?.useIntrospectionConnection, "studio.execute.useIntrospectionConnection");
716
+ const timeoutMs = readPositiveInteger(execute?.timeoutMs, "studio.execute.timeoutMs");
717
+ const maxRows = readPositiveInteger(execute?.maxRows, "studio.execute.maxRows");
718
+ const configuredUrl = readString(execute?.databaseUrl, "studio.execute.databaseUrl");
719
+ const configuredFile = readString(execute?.file, "studio.execute.file");
720
+ if (configured !== undefined)
721
+ setFlat(flat, "ASKDB_STUDIO_EXECUTE_PROVIDER", provider);
722
+ setFlat(flat, "ASKDB_STUDIO_DATABASE_URL", configuredUrl);
723
+ setFlat(flat, "ASKDB_STUDIO_SQLITE_FILE", configuredFile);
724
+ if (enabled !== undefined)
725
+ setFlat(flat, "ASKDB_STUDIO_EXECUTE_ENABLED", String(enabled));
726
+ if (useIntrospectionConnection !== undefined) {
727
+ setFlat(flat, "ASKDB_STUDIO_EXECUTE_USE_INTROSPECTION_CONNECTION", String(useIntrospectionConnection));
728
+ }
729
+ setFlat(flat, "ASKDB_STUDIO_EXECUTE_TIMEOUT_MS", timeoutMs);
730
+ setFlat(flat, "ASKDB_STUDIO_EXECUTE_MAX_ROWS", maxRows);
731
+ // The introspection connection is reused only when `useIntrospectionConnection` is on, so
732
+ // turning execute on never runs ad-hoc SQL with introspection credentials by accident.
733
+ const explicit = provider === "sqlite" ? configuredFile : configuredUrl;
734
+ const introspectionConnection = introspectionConnectionFor(provider, introspection);
735
+ const connection = explicit ?? (useIntrospectionConnection ? introspectionConnection : undefined);
736
+ return {
737
+ execute: {
738
+ provider,
739
+ databaseUrl: provider === "sqlite" ? undefined : connection,
740
+ file: provider === "sqlite" ? connection : undefined,
741
+ enabled: enabled ?? false,
742
+ useIntrospectionConnection: useIntrospectionConnection ?? false,
743
+ introspectionConnectionAvailable: explicit === undefined && !useIntrospectionConnection && introspectionConnection !== undefined,
744
+ timeoutMs: timeoutMs ?? DEFAULT_STUDIO_EXECUTE_TIMEOUT_MS,
745
+ maxRows: maxRows ?? DEFAULT_STUDIO_EXECUTE_MAX_ROWS,
746
+ },
747
+ };
748
+ }
749
+ /**
750
+ * Resolves every setting of an authored config: checks it, translates deprecated keys and fills in
751
+ * defaults, and writes its flat key. Pure: it reads no environment. Returns one deprecation
752
+ * message per legacy key in use. Throws `askdb.config: …` errors that name the config key for a
753
+ * config that can't load (the loader adds the file name).
754
+ */
755
+ export function resolveAskDbConfig(config) {
756
+ const { config: normalized, deprecations } = normalizeAskDbConfig(config);
757
+ const flat = {};
758
+ const ai = resolveAi(normalized.ai, flat);
759
+ const introspection = resolveIntrospection(config.introspection, flat);
760
+ const rag = resolveRag(normalized.rag, ai, flat);
761
+ const logging = resolveLogging(config.logging, flat);
762
+ const modes = resolveModes(config.modes, flat);
763
+ resolveHost(config.host, flat);
764
+ const dev = { mockSql: readString(config.dev?.mockSql, "dev.mockSql") };
765
+ setFlat(flat, "ASKDB_MOCK_SQL", dev.mockSql);
766
+ const studio = resolveStudio(config.studio, introspection, flat);
767
+ const httpApi = resolveHttpApi(config.httpApi, flat);
768
+ return {
769
+ resolved: {
770
+ ai,
771
+ introspection,
772
+ rag,
773
+ logging,
774
+ httpApi,
775
+ dev,
776
+ modes,
777
+ // Passed through as written: loading doesn't check it.
778
+ nlToSql: { dialect: config.dialect },
779
+ studio,
780
+ },
781
+ flat,
782
+ deprecations,
783
+ };
784
+ }
785
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}