@askdb/config 1.0.0-beta.16 → 1.0.0-beta.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/ai-env.d.ts +31 -0
- package/dist/ai-env.d.ts.map +1 -0
- package/dist/ai-env.js +88 -0
- package/dist/ai-env.js.map +1 -0
- package/dist/defaults.d.ts +1 -19
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +1 -57
- package/dist/defaults.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/load-merge.js +1 -1
- package/dist/load-merge.js.map +1 -1
- package/dist/projection.d.ts +6 -0
- package/dist/projection.d.ts.map +1 -1
- package/dist/projection.js +11 -4
- package/dist/projection.js.map +1 -1
- package/dist/resolve.d.ts +36 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/{normalize.js → resolve.js} +377 -7
- package/dist/resolve.js.map +1 -0
- package/dist/runtime-config.d.ts +5 -173
- package/dist/runtime-config.d.ts.map +1 -1
- package/dist/runtime-config.js +18 -222
- package/dist/runtime-config.js.map +1 -1
- package/dist/runtime-store.d.ts +9 -5
- package/dist/runtime-store.d.ts.map +1 -1
- package/dist/runtime-store.js +8 -7
- package/dist/runtime-store.js.map +1 -1
- package/dist/runtime-types.d.ts +176 -0
- package/dist/runtime-types.d.ts.map +1 -0
- package/dist/runtime-types.js +2 -0
- package/dist/runtime-types.js.map +1 -0
- package/package.json +1 -1
- package/dist/flatten.d.ts +0 -14
- package/dist/flatten.d.ts.map +0 -1
- package/dist/flatten.js +0 -255
- package/dist/flatten.js.map +0 -1
- package/dist/normalize.d.ts +0 -58
- package/dist/normalize.d.ts.map +0 -1
- package/dist/normalize.js.map +0 -1
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { ASKDB_AI_PROVIDERS, ASKDB_RAG_EMBEDDERS, ASKDB_REASONING_EFFORTS, } from "./constants.js";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
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_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";
|
|
4
|
+
/** The default `httpApi.listen.port`. */
|
|
5
|
+
const DEFAULT_HTTP_API_PORT = 3000;
|
|
6
|
+
/** The default `httpApi.listen.host`. */
|
|
7
|
+
const DEFAULT_HTTP_API_HOST = "127.0.0.1";
|
|
5
8
|
const DEFAULT_CONNECTION = "default";
|
|
6
9
|
/** Name of the connection a legacy RAG key moves to when it differs from the provider's default connection. */
|
|
7
10
|
const LEGACY_RAG_CONNECTION = "rag-embeddings";
|
|
@@ -129,7 +132,7 @@ function parseConfiguredDimensions(value, key) {
|
|
|
129
132
|
return undefined;
|
|
130
133
|
const parsed = parsePositiveInteger(value);
|
|
131
134
|
if (parsed === undefined) {
|
|
132
|
-
throw new Error(`askdb.config: ${key} must be a positive integer (got ${
|
|
135
|
+
throw new Error(`askdb.config: ${key} must be a positive integer (got ${describeValue(value)}).`);
|
|
133
136
|
}
|
|
134
137
|
return parsed;
|
|
135
138
|
}
|
|
@@ -267,7 +270,7 @@ function translateLegacyLanguageField(field, configured, table, languageEntry, w
|
|
|
267
270
|
* the old and new location, never a value). Throws `askdb.config: …` errors for a config that
|
|
268
271
|
* can't load.
|
|
269
272
|
*/
|
|
270
|
-
|
|
273
|
+
function normalizeAskDbConfig(config) {
|
|
271
274
|
// The type requires both blocks, but a JS config (or a TS one run without a type check) can
|
|
272
275
|
// leave one out. Name it here rather than crash on it below (#626).
|
|
273
276
|
if (!isPlainObject(config.ai)) {
|
|
@@ -415,4 +418,371 @@ export function normalizeAskDbConfig(config) {
|
|
|
415
418
|
deprecations,
|
|
416
419
|
};
|
|
417
420
|
}
|
|
418
|
-
|
|
421
|
+
// ---------------------------------------------------------------------------
|
|
422
|
+
// Reading one value. Each reader names the config key in its error, never a flat key.
|
|
423
|
+
// ---------------------------------------------------------------------------
|
|
424
|
+
/**
|
|
425
|
+
* A value for an error message: a string quoted, `null`, `undefined`, a number or a boolean as
|
|
426
|
+
* written, anything else by its type. An object or a function is never printed, since its text
|
|
427
|
+
* could hold a key or a connection string.
|
|
428
|
+
*/
|
|
429
|
+
function describeValue(value) {
|
|
430
|
+
if (typeof value === "string")
|
|
431
|
+
return JSON.stringify(value);
|
|
432
|
+
if (value === null || value === undefined || typeof value === "number" || typeof value === "boolean") {
|
|
433
|
+
return String(value);
|
|
434
|
+
}
|
|
435
|
+
if (Array.isArray(value))
|
|
436
|
+
return "an array";
|
|
437
|
+
return typeof value === "object" ? "an object" : `a ${typeof value}`;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* A string key: trimmed, or `undefined` when unset (`undefined` or `null`) or blank. Any other
|
|
441
|
+
* value fails: hosts read some string keys from the structured config as written (`host.*`,
|
|
442
|
+
* `studio.listen.host`), so a wrong type must stop the load, not a later call.
|
|
443
|
+
*/
|
|
444
|
+
function readString(value, key) {
|
|
445
|
+
if (typeof value === "string")
|
|
446
|
+
return nonBlank(value);
|
|
447
|
+
if (value === undefined || value === null)
|
|
448
|
+
return undefined;
|
|
449
|
+
throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected a string).`);
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* A boolean key must be `true`, `false` or unset. Anything else fails: the string `"false"` is
|
|
453
|
+
* truthy, so reading it as a flag would turn the setting on.
|
|
454
|
+
*/
|
|
455
|
+
function readBoolean(value, key) {
|
|
456
|
+
if (value === undefined || typeof value === "boolean")
|
|
457
|
+
return value;
|
|
458
|
+
throw new Error(`askdb.config: ${key} must be a boolean (got ${describeValue(value)}).`);
|
|
459
|
+
}
|
|
460
|
+
/** One of `allowed`, or `undefined` when unset (`undefined`, `null` or `""`). */
|
|
461
|
+
function readMember(value, allowed, key) {
|
|
462
|
+
if (value === undefined || value === null || value === "")
|
|
463
|
+
return undefined;
|
|
464
|
+
if (isMember(value, allowed))
|
|
465
|
+
return value;
|
|
466
|
+
throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected one of: ${allowed.join(", ")}).`);
|
|
467
|
+
}
|
|
468
|
+
/** A list of strings, each trimmed, blanks dropped; `undefined` when unset or empty. */
|
|
469
|
+
function readStringList(value, key) {
|
|
470
|
+
if (value === undefined || value === null)
|
|
471
|
+
return undefined;
|
|
472
|
+
if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
|
|
473
|
+
throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected an array of strings).`);
|
|
474
|
+
}
|
|
475
|
+
const list = value.map((item) => item.trim()).filter(Boolean);
|
|
476
|
+
return list.length > 0 ? list : undefined;
|
|
477
|
+
}
|
|
478
|
+
/** A positive integer, or a string holding one; `undefined` for anything else. */
|
|
479
|
+
function parsePositiveInteger(value) {
|
|
480
|
+
if (typeof value === "number")
|
|
481
|
+
return Number.isInteger(value) && value > 0 ? value : undefined;
|
|
482
|
+
if (typeof value !== "string")
|
|
483
|
+
return undefined;
|
|
484
|
+
const t = value.trim();
|
|
485
|
+
if (t === "")
|
|
486
|
+
return undefined;
|
|
487
|
+
const n = Number(t);
|
|
488
|
+
return Number.isInteger(n) && n > 0 ? n : undefined;
|
|
489
|
+
}
|
|
490
|
+
/** A positive-integer key, as a number or a string holding one. */
|
|
491
|
+
function readPositiveInteger(value, key) {
|
|
492
|
+
if (value === undefined)
|
|
493
|
+
return undefined;
|
|
494
|
+
const n = parsePositiveInteger(value);
|
|
495
|
+
if (n === undefined) {
|
|
496
|
+
throw new Error(`askdb.config: ${key} must be a positive integer (got ${describeValue(value)}).`);
|
|
497
|
+
}
|
|
498
|
+
return n;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* `httpApi.requestTimeoutMs`: `undefined` when unset; otherwise a positive integer no larger than
|
|
502
|
+
* {@link MAX_HTTP_API_REQUEST_TIMEOUT_MS}, as a number or a string holding one.
|
|
503
|
+
*/
|
|
504
|
+
function readRequestTimeoutMs(value, key) {
|
|
505
|
+
if (value === undefined)
|
|
506
|
+
return undefined;
|
|
507
|
+
const n = parsePositiveInteger(value);
|
|
508
|
+
if (n === undefined || n > MAX_HTTP_API_REQUEST_TIMEOUT_MS) {
|
|
509
|
+
throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected a positive integer number of milliseconds, at most ${MAX_HTTP_API_REQUEST_TIMEOUT_MS}).`);
|
|
510
|
+
}
|
|
511
|
+
return n;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* `httpApi.listen.port`: `undefined` when unset or `NaN` (`Number(env("PORT"))` with `PORT`
|
|
515
|
+
* unset), as Studio does for `studio.listen.port`. Port `0` asks the OS for a free port. Anything
|
|
516
|
+
* but an integer from 0 to 65535, or a string holding one, fails.
|
|
517
|
+
*/
|
|
518
|
+
function readListenPort(value, key) {
|
|
519
|
+
if (value === undefined || (typeof value === "number" && Number.isNaN(value)))
|
|
520
|
+
return undefined;
|
|
521
|
+
const text = typeof value === "string" ? value.trim() : undefined;
|
|
522
|
+
// `Number("")` is 0, so a blank string is checked before it's converted.
|
|
523
|
+
const port = typeof value === "number" ? value : text ? Number(text) : NaN;
|
|
524
|
+
if (!Number.isInteger(port) || port < 0 || port > 65535) {
|
|
525
|
+
throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected an integer from 0 to 65535).`);
|
|
526
|
+
}
|
|
527
|
+
return port;
|
|
528
|
+
}
|
|
529
|
+
const PGVECTOR_INDEX_STRATEGIES = ["ivfflat", "hnsw", "none"];
|
|
530
|
+
/**
|
|
531
|
+
* `rag.storeConfig.pgvector.indexStrategy`, lowercased, or the default when unset or blank. A
|
|
532
|
+
* value that isn't a string counts as unset, as it always has.
|
|
533
|
+
*/
|
|
534
|
+
function pgvectorIndexStrategy(raw) {
|
|
535
|
+
if (typeof raw !== "string" || raw.trim() === "")
|
|
536
|
+
return DEFAULT_PGVECTOR_INDEX_STRATEGY;
|
|
537
|
+
const v = raw.trim().toLowerCase();
|
|
538
|
+
if (isMember(v, PGVECTOR_INDEX_STRATEGIES))
|
|
539
|
+
return v;
|
|
540
|
+
throw new Error(`askdb.config: invalid rag.storeConfig.pgvector.indexStrategy "${raw}" (expected one of: ${PGVECTOR_INDEX_STRATEGIES.join(", ")}).`);
|
|
541
|
+
}
|
|
542
|
+
/** Writes `value` under `key` unless it's unset or blank. */
|
|
543
|
+
function setFlat(flat, key, value) {
|
|
544
|
+
setEnvKey(flat, key, value === undefined ? undefined : String(value));
|
|
545
|
+
}
|
|
546
|
+
function resolveIntrospection(intro, flat) {
|
|
547
|
+
const { provider } = intro;
|
|
548
|
+
const engines = intro.providerConfig;
|
|
549
|
+
// Only the active engine's connection is read, so other branches stay `undefined`.
|
|
550
|
+
const connection = (engine) => provider === engine
|
|
551
|
+
? readString(engines?.[engine]?.databaseUrl, `introspection.providerConfig.${engine}.databaseUrl`)
|
|
552
|
+
: undefined;
|
|
553
|
+
const resolved = {
|
|
554
|
+
provider,
|
|
555
|
+
postgresDatabaseUrl: connection("postgres"),
|
|
556
|
+
prismaSchemaPath: provider === "prisma"
|
|
557
|
+
? readString(engines?.prisma?.schemaPath, "introspection.providerConfig.prisma.schemaPath")
|
|
558
|
+
: undefined,
|
|
559
|
+
mysqlDatabaseUrl: connection("mysql"),
|
|
560
|
+
schemas: readStringList(intro.schemas, "introspection.schemas"),
|
|
561
|
+
sqliteFile: provider === "sqlite" ? readString(engines?.sqlite?.file, "introspection.providerConfig.sqlite.file") : undefined,
|
|
562
|
+
sqlserverDatabaseUrl: connection("sqlserver"),
|
|
563
|
+
outputDir: readString(intro.outputDir, "introspection.outputDir") ?? DEFAULT_INTROSPECT_OUTPUT_DIR,
|
|
564
|
+
};
|
|
565
|
+
setFlat(flat, "ASKDB_INTROSPECT_POSTGRES_URL", resolved.postgresDatabaseUrl);
|
|
566
|
+
setFlat(flat, "ASKDB_INTROSPECT_MYSQL_URL", resolved.mysqlDatabaseUrl);
|
|
567
|
+
setFlat(flat, "ASKDB_INTROSPECT_SQLITE_FILE", resolved.sqliteFile);
|
|
568
|
+
setFlat(flat, "ASKDB_INTROSPECT_SQLSERVER_URL", resolved.sqlserverDatabaseUrl);
|
|
569
|
+
// The Prisma schema path has no flat key: @askdb/prisma reads `prismaSchemaPath`.
|
|
570
|
+
setFlat(flat, "ASKDB_INTROSPECT_OUT", resolved.outputDir);
|
|
571
|
+
setFlat(flat, "ASKDB_INTROSPECT_SCHEMAS", resolved.schemas?.join(","));
|
|
572
|
+
return resolved;
|
|
573
|
+
}
|
|
574
|
+
function resolveAi(ai, flat) {
|
|
575
|
+
const { language, embedding } = ai;
|
|
576
|
+
const languageEnv = aiLanguageEnv(language);
|
|
577
|
+
// The flat map carries the language section's env view; the embedding section's stays on its own.
|
|
578
|
+
Object.assign(flat, languageEnv);
|
|
579
|
+
return {
|
|
580
|
+
language: {
|
|
581
|
+
provider: language.provider,
|
|
582
|
+
connection: language.connection.name,
|
|
583
|
+
model: language.model,
|
|
584
|
+
env: languageEnv,
|
|
585
|
+
modelFamily: language.modelFamily,
|
|
586
|
+
},
|
|
587
|
+
embedding: embedding
|
|
588
|
+
? {
|
|
589
|
+
provider: embedding.provider,
|
|
590
|
+
connection: embedding.connection.name,
|
|
591
|
+
model: embedding.model,
|
|
592
|
+
env: aiEmbeddingEnv(embedding),
|
|
593
|
+
dimensions: embedding.dimensions,
|
|
594
|
+
}
|
|
595
|
+
: undefined,
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
function resolveRag(rag, ai, flat) {
|
|
599
|
+
const { store, storeConfig } = rag;
|
|
600
|
+
const embedding = ai.embedding;
|
|
601
|
+
setFlat(flat, "ASKDB_RAG_EMBEDDER", embedding ? "ai" : "mock");
|
|
602
|
+
if (embedding) {
|
|
603
|
+
setFlat(flat, "ASKDB_RAG_EMBEDDER_MODEL", embedding.model);
|
|
604
|
+
setFlat(flat, "ASKDB_RAG_EMBEDDER_DIMENSIONS", embedding.dimensions);
|
|
605
|
+
}
|
|
606
|
+
if (!isMember(store, ASKDB_RAG_STORES)) {
|
|
607
|
+
throw new Error(`askdb.config: invalid rag.store ${describeValue(store)} (expected one of: ${ASKDB_RAG_STORES.join(", ")}).`);
|
|
608
|
+
}
|
|
609
|
+
if (store === "file") {
|
|
610
|
+
if (!storeConfig.file)
|
|
611
|
+
throw new Error('askdb.config: rag.store is "file" but `rag.storeConfig.file` is missing.');
|
|
612
|
+
// Unset, the CLI and Studio use `<schema dir>/schema`.
|
|
613
|
+
setFlat(flat, "ASKDB_RAG_FILE_BASE_PATH", readString(storeConfig.file.basePath, "rag.storeConfig.file.basePath"));
|
|
614
|
+
}
|
|
615
|
+
else if (store === "pgvector") {
|
|
616
|
+
const pgvector = storeConfig.pgvector;
|
|
617
|
+
if (!pgvector)
|
|
618
|
+
throw new Error('askdb.config: rag.store is "pgvector" but `rag.storeConfig.pgvector` is missing.');
|
|
619
|
+
const url = readString(pgvector.databaseUrl, "rag.storeConfig.pgvector.databaseUrl");
|
|
620
|
+
if (!url) {
|
|
621
|
+
throw new Error('askdb.config: rag.store is "pgvector" but `rag.storeConfig.pgvector.databaseUrl` is missing; set it, for example `databaseUrl: env("PGVECTOR_URL")`.');
|
|
622
|
+
}
|
|
623
|
+
setFlat(flat, "ASKDB_PGVECTOR_URL", url);
|
|
624
|
+
// With `rag.embedder: "ai"` this is only a size to request: unset, the model's own width
|
|
625
|
+
// applies, learned at index time. The mock embedder's vectors are always 64 wide.
|
|
626
|
+
setFlat(flat, "ASKDB_RAG_EMBEDDER_DIMENSIONS", embedding ? embedding.dimensions : DEFAULT_MOCK_RAG_EMBEDDING_DIMENSIONS);
|
|
627
|
+
setFlat(flat, "ASKDB_PGVECTOR_INDEX_STRATEGY", pgvectorIndexStrategy(pgvector.indexStrategy));
|
|
628
|
+
}
|
|
629
|
+
// The RAG CLI's OpenAI embedder never reads another provider's key or base URL: it uses the
|
|
630
|
+
// embedding connection when that is OpenAI's, else only the OpenAI language connection.
|
|
631
|
+
const openaiEmbedding = embedding?.provider === "openai" ? embedding : undefined;
|
|
632
|
+
const source = openaiEmbedding ?? ai.language;
|
|
633
|
+
return {
|
|
634
|
+
embedder: {
|
|
635
|
+
apiKey: source.env.OPENAI_API_KEY,
|
|
636
|
+
baseURL: source.env.OPENAI_BASE_URL,
|
|
637
|
+
model: openaiEmbedding?.model,
|
|
638
|
+
},
|
|
639
|
+
store,
|
|
640
|
+
storeConfig,
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
function resolveLogging(logging, flat) {
|
|
644
|
+
const resolved = {
|
|
645
|
+
level: readMember(logging?.level, ASKDB_LOG_LEVELS, "logging.level"),
|
|
646
|
+
correlationId: readString(logging?.correlationId, "logging.correlationId"),
|
|
647
|
+
logFile: readString(logging?.logFile, "logging.logFile"),
|
|
648
|
+
logStdout: readBoolean(logging?.logStdout, "logging.logStdout") ?? false,
|
|
649
|
+
};
|
|
650
|
+
setFlat(flat, "ASKDB_LOG_LEVEL", resolved.level);
|
|
651
|
+
setFlat(flat, "ASKDB_CORRELATION_ID", resolved.correlationId);
|
|
652
|
+
setFlat(flat, "ASKDB_LOG_FILE", resolved.logFile);
|
|
653
|
+
if (resolved.logStdout)
|
|
654
|
+
setFlat(flat, "ASKDB_LOG_STDOUT", "true");
|
|
655
|
+
return resolved;
|
|
656
|
+
}
|
|
657
|
+
function resolveModes(modes, flat) {
|
|
658
|
+
const resolved = {
|
|
659
|
+
askdbMode: readMember(modes?.askdbMode, ASKDB_MODES_V1, "modes.askdbMode"),
|
|
660
|
+
omitSensitiveFromPrompt: readBoolean(modes?.omitSensitiveFromPrompt, "modes.omitSensitiveFromPrompt") ?? false,
|
|
661
|
+
};
|
|
662
|
+
setFlat(flat, "ASKDB_MODE", resolved.askdbMode);
|
|
663
|
+
if (resolved.omitSensitiveFromPrompt)
|
|
664
|
+
setFlat(flat, "ASKDB_OMIT_SENSITIVE_FROM_PROMPT", "true");
|
|
665
|
+
return resolved;
|
|
666
|
+
}
|
|
667
|
+
/** `host` has no runtime section: `createAskDb` reads `structured.host`. It's checked here all the same. */
|
|
668
|
+
function resolveHost(host, flat) {
|
|
669
|
+
setFlat(flat, "ASKDB_SCHEMA_PATH", readString(host?.schemaPath, "host.schemaPath"));
|
|
670
|
+
setFlat(flat, "ASKDB_SCHEMA_JSON", readString(host?.schemaJson, "host.schemaJson"));
|
|
671
|
+
}
|
|
672
|
+
function resolveHttpApi(httpApi, flat) {
|
|
673
|
+
const port = readListenPort(httpApi?.listen?.port, "httpApi.listen.port");
|
|
674
|
+
const host = readString(httpApi?.listen?.host, "httpApi.listen.host");
|
|
675
|
+
const allowSchemaOverride = readBoolean(httpApi?.allowSchemaOverride, "httpApi.allowSchemaOverride") ?? false;
|
|
676
|
+
const requestTimeoutMs = readRequestTimeoutMs(httpApi?.requestTimeoutMs, "httpApi.requestTimeoutMs");
|
|
677
|
+
setFlat(flat, "PORT", port);
|
|
678
|
+
setFlat(flat, "HOST", host);
|
|
679
|
+
if (allowSchemaOverride)
|
|
680
|
+
setFlat(flat, "ASKDB_HTTP_ALLOW_SCHEMA_OVERRIDE", "true");
|
|
681
|
+
setFlat(flat, "ASKDB_HTTP_REQUEST_TIMEOUT_MS", requestTimeoutMs);
|
|
682
|
+
return {
|
|
683
|
+
listen: { port: port ?? DEFAULT_HTTP_API_PORT, host: host ?? DEFAULT_HTTP_API_HOST },
|
|
684
|
+
allowSchemaOverride,
|
|
685
|
+
requestTimeoutMs: requestTimeoutMs ?? DEFAULT_HTTP_API_REQUEST_TIMEOUT_MS,
|
|
686
|
+
};
|
|
687
|
+
}
|
|
688
|
+
/** The introspection connection for `provider`, when introspection uses that engine. */
|
|
689
|
+
function introspectionConnectionFor(provider, introspection) {
|
|
690
|
+
switch (provider) {
|
|
691
|
+
case "postgres":
|
|
692
|
+
return introspection.postgresDatabaseUrl;
|
|
693
|
+
case "mysql":
|
|
694
|
+
return introspection.mysqlDatabaseUrl;
|
|
695
|
+
case "sqlserver":
|
|
696
|
+
return introspection.sqlserverDatabaseUrl;
|
|
697
|
+
case "sqlite":
|
|
698
|
+
return introspection.sqliteFile;
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
function resolveStudio(studio, introspection, flat) {
|
|
702
|
+
// `listen` has no runtime section: Studio reads `structured.studio.listen` and checks the port
|
|
703
|
+
// when it starts, so only the host's type is checked here.
|
|
704
|
+
const listen = studio?.listen;
|
|
705
|
+
setFlat(flat, "ASKDB_STUDIO_HOST", readString(listen?.host, "studio.listen.host"));
|
|
706
|
+
if (listen?.port !== undefined && !Number.isNaN(listen.port))
|
|
707
|
+
setFlat(flat, "ASKDB_STUDIO_PORT", listen.port);
|
|
708
|
+
const execute = studio?.execute;
|
|
709
|
+
// An explicit provider, else the introspection provider when it's a live engine, else postgres.
|
|
710
|
+
// An unknown provider falls back the same way.
|
|
711
|
+
const configured = readString(execute?.provider, "studio.execute.provider");
|
|
712
|
+
const provider = isMember(configured, ASKDB_STUDIO_EXECUTE_PROVIDERS)
|
|
713
|
+
? configured
|
|
714
|
+
: isMember(introspection.provider, ASKDB_STUDIO_EXECUTE_PROVIDERS)
|
|
715
|
+
? introspection.provider
|
|
716
|
+
: "postgres";
|
|
717
|
+
const enabled = readBoolean(execute?.enabled, "studio.execute.enabled");
|
|
718
|
+
const useIntrospectionConnection = readBoolean(execute?.useIntrospectionConnection, "studio.execute.useIntrospectionConnection");
|
|
719
|
+
const timeoutMs = readPositiveInteger(execute?.timeoutMs, "studio.execute.timeoutMs");
|
|
720
|
+
const maxRows = readPositiveInteger(execute?.maxRows, "studio.execute.maxRows");
|
|
721
|
+
const configuredUrl = readString(execute?.databaseUrl, "studio.execute.databaseUrl");
|
|
722
|
+
const configuredFile = readString(execute?.file, "studio.execute.file");
|
|
723
|
+
if (configured !== undefined)
|
|
724
|
+
setFlat(flat, "ASKDB_STUDIO_EXECUTE_PROVIDER", provider);
|
|
725
|
+
setFlat(flat, "ASKDB_STUDIO_DATABASE_URL", configuredUrl);
|
|
726
|
+
setFlat(flat, "ASKDB_STUDIO_SQLITE_FILE", configuredFile);
|
|
727
|
+
if (enabled !== undefined)
|
|
728
|
+
setFlat(flat, "ASKDB_STUDIO_EXECUTE_ENABLED", String(enabled));
|
|
729
|
+
if (useIntrospectionConnection !== undefined) {
|
|
730
|
+
setFlat(flat, "ASKDB_STUDIO_EXECUTE_USE_INTROSPECTION_CONNECTION", String(useIntrospectionConnection));
|
|
731
|
+
}
|
|
732
|
+
setFlat(flat, "ASKDB_STUDIO_EXECUTE_TIMEOUT_MS", timeoutMs);
|
|
733
|
+
setFlat(flat, "ASKDB_STUDIO_EXECUTE_MAX_ROWS", maxRows);
|
|
734
|
+
// The introspection connection is reused only when `useIntrospectionConnection` is on, so
|
|
735
|
+
// turning execute on never runs ad-hoc SQL with introspection credentials by accident.
|
|
736
|
+
const explicit = provider === "sqlite" ? configuredFile : configuredUrl;
|
|
737
|
+
const introspectionConnection = introspectionConnectionFor(provider, introspection);
|
|
738
|
+
const connection = explicit ?? (useIntrospectionConnection ? introspectionConnection : undefined);
|
|
739
|
+
return {
|
|
740
|
+
execute: {
|
|
741
|
+
provider,
|
|
742
|
+
databaseUrl: provider === "sqlite" ? undefined : connection,
|
|
743
|
+
file: provider === "sqlite" ? connection : undefined,
|
|
744
|
+
enabled: enabled ?? false,
|
|
745
|
+
useIntrospectionConnection: useIntrospectionConnection ?? false,
|
|
746
|
+
introspectionConnectionAvailable: explicit === undefined && !useIntrospectionConnection && introspectionConnection !== undefined,
|
|
747
|
+
timeoutMs: timeoutMs ?? DEFAULT_STUDIO_EXECUTE_TIMEOUT_MS,
|
|
748
|
+
maxRows: maxRows ?? DEFAULT_STUDIO_EXECUTE_MAX_ROWS,
|
|
749
|
+
},
|
|
750
|
+
};
|
|
751
|
+
}
|
|
752
|
+
/**
|
|
753
|
+
* Resolves every setting of an authored config: checks it, translates deprecated keys and fills in
|
|
754
|
+
* defaults, and writes its flat key. Pure: it reads no environment. Returns one deprecation
|
|
755
|
+
* message per legacy key in use. Throws `askdb.config: …` errors that name the config key for a
|
|
756
|
+
* config that can't load (the loader adds the file name).
|
|
757
|
+
*/
|
|
758
|
+
export function resolveAskDbConfig(config) {
|
|
759
|
+
const { config: normalized, deprecations } = normalizeAskDbConfig(config);
|
|
760
|
+
const flat = {};
|
|
761
|
+
const ai = resolveAi(normalized.ai, flat);
|
|
762
|
+
const introspection = resolveIntrospection(config.introspection, flat);
|
|
763
|
+
const rag = resolveRag(normalized.rag, ai, flat);
|
|
764
|
+
const logging = resolveLogging(config.logging, flat);
|
|
765
|
+
const modes = resolveModes(config.modes, flat);
|
|
766
|
+
resolveHost(config.host, flat);
|
|
767
|
+
const dev = { mockSql: readString(config.dev?.mockSql, "dev.mockSql") };
|
|
768
|
+
setFlat(flat, "ASKDB_MOCK_SQL", dev.mockSql);
|
|
769
|
+
const studio = resolveStudio(config.studio, introspection, flat);
|
|
770
|
+
const httpApi = resolveHttpApi(config.httpApi, flat);
|
|
771
|
+
return {
|
|
772
|
+
resolved: {
|
|
773
|
+
ai,
|
|
774
|
+
introspection,
|
|
775
|
+
rag,
|
|
776
|
+
logging,
|
|
777
|
+
httpApi,
|
|
778
|
+
dev,
|
|
779
|
+
modes,
|
|
780
|
+
// Passed through as written: loading has never checked it.
|
|
781
|
+
nlToSql: { dialect: config.dialect },
|
|
782
|
+
studio,
|
|
783
|
+
},
|
|
784
|
+
flat,
|
|
785
|
+
deprecations,
|
|
786
|
+
};
|
|
787
|
+
}
|
|
788
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime-config.d.ts
CHANGED
|
@@ -1,178 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { AskDbConfig } from "./types.js";
|
|
3
|
-
/** One resolved `ai` section: its provider, the connection it uses, its model, and an env view built from that connection only. */
|
|
4
|
-
export type AskDbRuntimeAiSection = {
|
|
5
|
-
provider: string;
|
|
6
|
-
/** Connection name within `ai.providerConfig.<provider>`. */
|
|
7
|
-
connection: string;
|
|
8
|
-
model: string | undefined;
|
|
9
|
-
/** `AiEnv` for `@askdb/ai` registry calls, built from this section's connection only. */
|
|
10
|
-
env: Record<string, string | undefined>;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Typed AI runtime settings for `@askdb/core` (not `process.env`).
|
|
14
|
-
*/
|
|
15
|
-
export type AskDbRuntimeAiConfig = {
|
|
16
|
-
/**
|
|
17
|
-
* Flat env-shaped map built from the runtime snapshot: the language view plus every other
|
|
18
|
-
* canonical key. Pass to `@askdb/ai` registry methods such as `resolveAiConfig` and
|
|
19
|
-
* `createLanguageModelFromEnv`.
|
|
20
|
-
*/
|
|
21
|
-
aiEnv: Record<string, string | undefined>;
|
|
22
|
-
/** `ai.language`: the language model. `model` is undefined only for a custom provider with no model set. */
|
|
23
|
-
language: AskDbRuntimeAiSection & {
|
|
24
|
-
modelFamily: string | undefined;
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* `ai.embedding`: the embedding model. Undefined unless `rag.embedder` is `"ai"`. Pass `env`
|
|
28
|
-
* to `resolveEmbeddingConfig` / `createEmbeddingModelFromEnv`, and `{ dimensions }` as the
|
|
29
|
-
* latter's options: `env` holds the connection and model, not the width.
|
|
30
|
-
*/
|
|
31
|
-
embedding: (AskDbRuntimeAiSection & {
|
|
32
|
-
model: string;
|
|
33
|
-
/**
|
|
34
|
-
* `ai.embedding.dimensions`: the vector size to request from the provider. Undefined
|
|
35
|
-
* leaves the width to the model; `detectEmbeddingDimensions` in `@askdb/rag` learns it.
|
|
36
|
-
*/
|
|
37
|
-
dimensions: number | undefined;
|
|
38
|
-
}) | undefined;
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* OpenAI embedder settings for the `askdb-rag` CLI. Filled from `ai.embedding` when its provider
|
|
42
|
-
* is `openai`; otherwise only from the OpenAI language connection.
|
|
43
|
-
*/
|
|
44
|
-
export type AskDbRuntimeRagEmbedderConfig = {
|
|
45
|
-
apiKey: string | undefined;
|
|
46
|
-
baseURL: string | undefined;
|
|
47
|
-
model: string | undefined;
|
|
48
|
-
};
|
|
49
|
-
export type AskDbRuntimeRagConfig = {
|
|
50
|
-
embedder: AskDbRuntimeRagEmbedderConfig;
|
|
51
|
-
/** `rag.store`, or `"memory"` when the config has no `rag` block. Read this rather than `structured.rag`, which is `undefined` when the block is omitted. */
|
|
52
|
-
store: AskDbRagStore;
|
|
53
|
-
/** `rag.storeConfig` as written, with no defaults filled in; `{}` when the config has no `rag` block or the block has no `storeConfig`. */
|
|
54
|
-
storeConfig: NonNullable<AskDbConfig["rag"]>["storeConfig"];
|
|
55
|
-
};
|
|
56
|
-
export type AskDbRuntimeLoggingConfig = {
|
|
57
|
-
level: string | undefined;
|
|
58
|
-
correlationId: string | undefined;
|
|
59
|
-
logFile: string | undefined;
|
|
60
|
-
logStdout: boolean;
|
|
61
|
-
};
|
|
62
|
-
export type AskDbRuntimeHttpApiConfig = {
|
|
63
|
-
listen: {
|
|
64
|
-
port: number;
|
|
65
|
-
host: string;
|
|
66
|
-
};
|
|
67
|
-
/** Whether `POST /ask` accepts a per-request `schemaJson` override. Default `false`. */
|
|
68
|
-
allowSchemaOverride: boolean;
|
|
69
|
-
/** Model-call timeout per `POST /ask` request, in milliseconds (1 to 2147483647). Default `60000`. */
|
|
70
|
-
requestTimeoutMs: number;
|
|
71
|
-
};
|
|
72
|
-
export type AskDbRuntimeIntrospectionConfig = {
|
|
73
|
-
provider: AskDbIntrospectionProvider;
|
|
74
|
-
/**
|
|
75
|
-
* Resolved Postgres connection URL when `provider === "postgres"`:
|
|
76
|
-
* `providerConfig.postgres.databaseUrl`, or its flat key `ASKDB_INTROSPECT_POSTGRES_URL`. Never read from `process.env`.
|
|
77
|
-
* `undefined` for non-Postgres providers.
|
|
78
|
-
*/
|
|
79
|
-
postgresDatabaseUrl: string | undefined;
|
|
80
|
-
/** Resolved from `introspection.providerConfig.prisma.schemaPath`; `undefined` triggers auto-discovery in `@askdb/prisma`. */
|
|
81
|
-
prismaSchemaPath: string | undefined;
|
|
82
|
-
/**
|
|
83
|
-
* Resolved MySQL connection URL when `provider === "mysql"`:
|
|
84
|
-
* `providerConfig.mysql.databaseUrl`, or its flat key `ASKDB_INTROSPECT_MYSQL_URL`. Never read from `process.env`.
|
|
85
|
-
* `undefined` for non-MySQL providers.
|
|
86
|
-
*/
|
|
87
|
-
mysqlDatabaseUrl: string | undefined;
|
|
88
|
-
/**
|
|
89
|
-
* Schemas (MySQL/MariaDB: databases) to introspect, for every provider:
|
|
90
|
-
* `introspection.schemas` → `ASKDB_INTROSPECT_SCHEMAS` (comma-separated).
|
|
91
|
-
* `undefined` means the engine's default. `askdb introspect --schemas` overrides it.
|
|
92
|
-
*/
|
|
93
|
-
schemas: string[] | undefined;
|
|
94
|
-
/**
|
|
95
|
-
* Resolved SQLite file path when `provider === "sqlite"`:
|
|
96
|
-
* `providerConfig.sqlite.file`, or its flat key `ASKDB_INTROSPECT_SQLITE_FILE`. Never read from `process.env`.
|
|
97
|
-
* `undefined` for non-SQLite providers.
|
|
98
|
-
*/
|
|
99
|
-
sqliteFile: string | undefined;
|
|
100
|
-
/**
|
|
101
|
-
* Resolved SQL Server connection URL when `provider === "sqlserver"`:
|
|
102
|
-
* `providerConfig.sqlserver.databaseUrl`, or its flat key `ASKDB_INTROSPECT_SQLSERVER_URL`. Never read from `process.env`.
|
|
103
|
-
* `undefined` for non-SQL Server providers.
|
|
104
|
-
*/
|
|
105
|
-
sqlserverDatabaseUrl: string | undefined;
|
|
106
|
-
/** Resolved from `introspection.outputDir`; falls back to the package default (`./askdb/`). */
|
|
107
|
-
outputDir: string;
|
|
108
|
-
};
|
|
109
|
-
export type AskDbRuntimeDevConfig = {
|
|
110
|
-
mockSql: string | undefined;
|
|
111
|
-
};
|
|
112
|
-
export type AskDbRuntimeModesConfig = {
|
|
113
|
-
askdbMode: string | undefined;
|
|
114
|
-
omitSensitiveFromPrompt: boolean;
|
|
115
|
-
};
|
|
116
|
-
export type AskDbRuntimeNlToSqlConfig = {
|
|
117
|
-
/**
|
|
118
|
-
* Optional NL→SQL dialect override from `askdb.config.ts`. When set, hosts
|
|
119
|
-
* (CLI / HTTP API / Studio) pass this to `ask({ dialect })` instead of
|
|
120
|
-
* inferring from the introspection provider.
|
|
121
|
-
*/
|
|
122
|
-
dialect: AskDbDialectId | undefined;
|
|
123
|
-
};
|
|
124
|
-
export type AskDbRuntimeStudioConfig = {
|
|
125
|
-
execute: {
|
|
126
|
-
/**
|
|
127
|
-
* Resolved execute provider. Falls back to the active introspection provider when it
|
|
128
|
-
* is a live engine (`postgres`, `mysql`, `sqlite`, `sqlserver`), then defaults to
|
|
129
|
-
* `"postgres"` for backward compatibility.
|
|
130
|
-
*/
|
|
131
|
-
provider: AskDbStudioExecuteProvider;
|
|
132
|
-
/** Connection URL used by the Studio playground query runner for network databases. */
|
|
133
|
-
databaseUrl: string | undefined;
|
|
134
|
-
/** SQLite file path used when `provider === "sqlite"`. */
|
|
135
|
-
file: string | undefined;
|
|
136
|
-
/** Whether `POST /api/execute` is allowed. Default `false` (opt-in). */
|
|
137
|
-
enabled: boolean;
|
|
138
|
-
/**
|
|
139
|
-
* Whether `databaseUrl` / `file` may fall back to the active introspection
|
|
140
|
-
* connection. Default `false`.
|
|
141
|
-
*/
|
|
142
|
-
useIntrospectionConnection: boolean;
|
|
143
|
-
/**
|
|
144
|
-
* True when the introspection config has a connection for this provider that
|
|
145
|
-
* Studio did not use because `useIntrospectionConnection` is off. Lets hosts
|
|
146
|
-
* explain why execute reports "not configured".
|
|
147
|
-
*/
|
|
148
|
-
introspectionConnectionAvailable: boolean;
|
|
149
|
-
/** Per-query timeout in milliseconds. Default `30000`. */
|
|
150
|
-
timeoutMs: number;
|
|
151
|
-
/** Maximum rows returned per query. Default `500`. */
|
|
152
|
-
maxRows: number;
|
|
153
|
-
};
|
|
154
|
-
};
|
|
155
|
-
/**
|
|
156
|
-
* Typed runtime view over the bootstrapped AskDB config snapshot.
|
|
157
|
-
*/
|
|
158
|
-
export type AskDbRuntimeConfig = {
|
|
159
|
-
readonly structured: Readonly<AskDbConfig>;
|
|
160
|
-
/** Canonical flattened map (subprocess env via {@link mergeAskDbFlatIntoEnvMap}). */
|
|
161
|
-
readonly flat: Readonly<Record<string, string>>;
|
|
162
|
-
ai: AskDbRuntimeAiConfig;
|
|
163
|
-
introspection: AskDbRuntimeIntrospectionConfig;
|
|
164
|
-
rag: AskDbRuntimeRagConfig;
|
|
165
|
-
logging: AskDbRuntimeLoggingConfig;
|
|
166
|
-
httpApi: AskDbRuntimeHttpApiConfig;
|
|
167
|
-
dev: AskDbRuntimeDevConfig;
|
|
168
|
-
modes: AskDbRuntimeModesConfig;
|
|
169
|
-
nlToSql: AskDbRuntimeNlToSqlConfig;
|
|
170
|
-
studio: AskDbRuntimeStudioConfig;
|
|
171
|
-
/** One message per deprecated config key in use (it names the old and new key, never a value). */
|
|
172
|
-
deprecations: readonly string[];
|
|
173
|
-
};
|
|
1
|
+
import type { AskDbRuntimeConfig } from "./runtime-types.js";
|
|
174
2
|
/**
|
|
175
3
|
* Returns typed runtime configuration from the snapshot installed by {@link bootstrapAskDbEnv}.
|
|
4
|
+
*
|
|
5
|
+
* Every value is resolved from the snapshot's structured config. The snapshot's own flat map is
|
|
6
|
+
* never read back: another copy of `@askdb/config` may have installed it (ADR 0005), so `flat`
|
|
7
|
+
* and `ai.aiEnv` are this copy's projection of the same structured config.
|
|
176
8
|
*/
|
|
177
9
|
export declare function getAskDbRuntimeConfig(): AskDbRuntimeConfig;
|
|
178
10
|
//# sourceMappingURL=runtime-config.d.ts.map
|