@askdb/studio 0.2.0-beta.37 → 0.2.0-beta.39
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 +9 -9
- package/dist/cli.js +20 -10
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/index-CgbreUa6.js +100 -0
- package/dist/client/assets/index-DpkWiK_X.css +2 -0
- package/dist/client/index.html +2 -2
- package/dist/execute-registry.d.ts +2 -1
- package/dist/execute-registry.d.ts.map +1 -1
- package/dist/execute-registry.js +7 -2
- package/dist/execute-registry.js.map +1 -1
- package/dist/introspection.d.ts +2 -2
- package/dist/introspection.d.ts.map +1 -1
- package/dist/introspection.js +28 -6
- package/dist/introspection.js.map +1 -1
- package/dist/package-manager.d.ts +16 -3
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js +40 -8
- package/dist/package-manager.js.map +1 -1
- package/dist/prisma-install.d.ts +7 -0
- package/dist/prisma-install.d.ts.map +1 -0
- package/dist/prisma-install.js +7 -0
- package/dist/prisma-install.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +127 -54
- package/dist/server.js.map +1 -1
- package/dist/setup.d.ts +2 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +66 -17
- package/dist/setup.js.map +1 -1
- package/dist/shared/api.d.ts +5 -0
- package/dist/shared/api.d.ts.map +1 -1
- package/package.json +16 -12
- package/dist/client/assets/index-CULOwR3W.css +0 -2
- package/dist/client/assets/index-xswUSrtO.js +0 -100
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ Studio serves a local web app at `http://127.0.0.1:5556` by default. The publish
|
|
|
13
13
|
- browse all physical tables and columns in `schema.json`
|
|
14
14
|
- edit table descriptions, aliases, primary entities, tags, common query language, example questions, and column metadata
|
|
15
15
|
- write the describable layer back to `tables/*.md`
|
|
16
|
-
- request AI enrichment suggestions when `
|
|
16
|
+
- request AI enrichment suggestions when the `ai` block in `askdb.config.*` has an API key
|
|
17
17
|
- build and query the configured RAG index (`memory`, file-backed, or `pgvector`)
|
|
18
18
|
- generate sample Postgres SQL for natural-language questions against the currently saved enrichment
|
|
19
19
|
- define and manage multi-tenancy policy (tenant roots, hierarchy, scoped/polymorphic/global tables) via the Tenancy view
|
|
@@ -51,16 +51,16 @@ The React client is styled with Tailwind CSS and shadcn-style primitives. The re
|
|
|
51
51
|
pnpm dlx shadcn@latest init --preset b1D0eCA4
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
Configuration, in `askdb.config.*` (bind any value to an environment variable of your choosing with `env("NAME")`; Studio loads `.env` first):
|
|
55
55
|
|
|
56
|
-
|
|
|
56
|
+
| Config key | Purpose |
|
|
57
57
|
| --- | --- |
|
|
58
|
-
| `
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
58
|
+
| `ai.provider`, `ai.providerConfig.<provider>.apiKey` | Enables AI suggestions and sample NL-to-SQL generation. |
|
|
59
|
+
| `ai.providerConfig.<provider>.baseUrl` | Optional base URL, e.g. an OpenAI-compatible endpoint. |
|
|
60
|
+
| `studio.listen.host` | Bind host. Defaults to `127.0.0.1`. `--host` overrides it. |
|
|
61
|
+
| `studio.listen.port` | Bind port. Defaults to `5556`. `--port` overrides it. |
|
|
62
|
+
| `dev.mockSql` | Deterministic generated SQL for tests or offline demos. |
|
|
63
63
|
|
|
64
64
|
Security: every `/api/*` request must carry the per-launch session token that Studio injects into the page it serves (`x-askdb-studio-token` header), come with an allowed `Host` (`localhost`, `127.0.0.1`, `[::1]`, or the bound host), and, for writes, be same-origin JSON. Programmatic callers of `createStudioServer()` can read the token from `server.sessionToken`. Binding to a non-loopback host exposes query execution and schema writes to anyone on that network who can load the page. Only do that on a trusted network. See [Studio → Security model](https://askdb.tools/studio/#security-model).
|
|
65
65
|
|
|
66
|
-
Studio uses the active `rag.store` branch from `askdb.config.*`, and embeds with `rag.embedder`: `mock`, a local lexical embedder that needs no key, or `ai`, the `ai.embedding` model, built from that section's connection only (see the [configuration reference](https://askdb.tools/reference/config/#aiembedding)). For `pgvector`, make sure `
|
|
66
|
+
Studio uses the active `rag.store` branch from `askdb.config.*`, and embeds with `rag.embedder`: `mock`, a local lexical embedder that needs no key, or `ai`, the `ai.embedding` model, built from that section's connection only (see the [configuration reference](https://askdb.tools/reference/config/#aiembedding)). For `pgvector`, make sure `rag.storeConfig.pgvector.databaseUrl` resolves; there's no need to create the table. The first index build creates it, and the `vector` extension, at the width the embedding model returns (or `ai.embedding.dimensions`). A table that already exists at another width is refused, with a message saying how to resolve it. If Studio's database role can't create extensions, create `vector` first.
|
package/dist/cli.js
CHANGED
|
@@ -77,16 +77,14 @@ function parseOptions(argv) {
|
|
|
77
77
|
}
|
|
78
78
|
})();
|
|
79
79
|
const listen = rt?.structured.studio?.listen;
|
|
80
|
-
const portFromEnv = rt?.ai.aiEnv.ASKDB_STUDIO_PORT;
|
|
81
|
-
const parsedPort = listen?.port ??
|
|
82
|
-
(portFromEnv !== undefined && portFromEnv.trim() !== "" ? Number(portFromEnv) : NaN);
|
|
83
80
|
const introspectOut = rt?.flat["ASKDB_INTROSPECT_OUT"] ?? DEFAULT_INTROSPECT_OUTPUT_DIR;
|
|
84
81
|
const opts = {
|
|
85
82
|
schema: introspectOut,
|
|
86
83
|
schemaFromFlag: false,
|
|
87
|
-
host: listen?.host ??
|
|
88
|
-
port:
|
|
84
|
+
host: listen?.host ?? "127.0.0.1",
|
|
85
|
+
port: 5556,
|
|
89
86
|
};
|
|
87
|
+
let portFromFlag = false;
|
|
90
88
|
for (let i = 0; i < argv.length; i += 1) {
|
|
91
89
|
const arg = argv[i];
|
|
92
90
|
switch (arg) {
|
|
@@ -105,6 +103,7 @@ function parseOptions(argv) {
|
|
|
105
103
|
throw new Error(`Invalid --port: ${raw}`);
|
|
106
104
|
}
|
|
107
105
|
opts.port = port;
|
|
106
|
+
portFromFlag = true;
|
|
108
107
|
break;
|
|
109
108
|
}
|
|
110
109
|
case "--help":
|
|
@@ -119,6 +118,16 @@ function parseOptions(argv) {
|
|
|
119
118
|
throw new Error(`Unknown option: ${arg}`);
|
|
120
119
|
}
|
|
121
120
|
}
|
|
121
|
+
// A bad configured port must fail, not quietly bind 5556. `NaN` (`Number(env("X"))` with X
|
|
122
|
+
// unset) counts as unset, as it does in @askdb/config; a numeric string works like a number.
|
|
123
|
+
const configPort = listen?.port;
|
|
124
|
+
if (!portFromFlag && !opts.help && !opts.version && configPort !== undefined && !Number.isNaN(configPort)) {
|
|
125
|
+
const port = Number(configPort);
|
|
126
|
+
if (!Number.isInteger(port) || port <= 0 || port > 65535) {
|
|
127
|
+
throw new Error(`Invalid studio.listen.port in askdb.config: ${String(configPort)} (expected an integer from 1 to 65535).`);
|
|
128
|
+
}
|
|
129
|
+
opts.port = port;
|
|
130
|
+
}
|
|
122
131
|
return opts;
|
|
123
132
|
}
|
|
124
133
|
/**
|
|
@@ -149,14 +158,15 @@ function printHelp(stream) {
|
|
|
149
158
|
"",
|
|
150
159
|
"Options:",
|
|
151
160
|
" -s, --schema <dir> Schema v2 directory (default: introspection.outputDir from",
|
|
152
|
-
" askdb.config, or
|
|
153
|
-
" --port <number> Port to listen on (default:
|
|
154
|
-
" --host <host> Host to bind (default: 127.0.0.1
|
|
161
|
+
" askdb.config, or ./askdb/)",
|
|
162
|
+
" --port <number> Port to listen on (default: studio.listen.port from askdb.config, or 5556)",
|
|
163
|
+
" --host <host> Host to bind (default: studio.listen.host from askdb.config, or 127.0.0.1)",
|
|
155
164
|
" -V, --version Print package version",
|
|
156
165
|
" -h, --help Print this help",
|
|
157
166
|
"",
|
|
158
|
-
"AI enrichment and sample NL-to-SQL use
|
|
159
|
-
"
|
|
167
|
+
"AI enrichment and sample NL-to-SQL use the ai block in askdb.config: ai.provider,",
|
|
168
|
+
"the key in ai.providerConfig.<provider>.apiKey, and the model in ai.language.model.",
|
|
169
|
+
"Bind any value to an environment variable with env(\"NAME\").",
|
|
160
170
|
"",
|
|
161
171
|
].join("\n"));
|
|
162
172
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|