kozou 0.1.0 → 0.2.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.
- package/README.md +85 -14
- package/dist/cli.js +37 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/codegen.d.ts +8 -0
- package/dist/commands/codegen.d.ts.map +1 -0
- package/dist/commands/codegen.js +54 -0
- package/dist/commands/codegen.js.map +1 -0
- package/dist/commands/dev-runtime.d.ts +21 -0
- package/dist/commands/dev-runtime.d.ts.map +1 -0
- package/dist/commands/dev-runtime.js +111 -0
- package/dist/commands/dev-runtime.js.map +1 -0
- package/dist/commands/dev.d.ts +5 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +168 -17
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs.d.ts +8 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +44 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/mcp.d.ts +1 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +12 -12
- package/dist/commands/mcp.js.map +1 -1
- package/dist/config.d.ts +39 -141
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +127 -10
- package/dist/config.js.map +1 -1
- package/dist/docs.d.ts +3 -0
- package/dist/docs.d.ts.map +1 -0
- package/dist/docs.js +204 -0
- package/dist/docs.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +17 -6
- package/dist/scaffold.js.map +1 -1
- package/dist/templates/docker-compose.yml +27 -26
- package/dist/templates/env.example +14 -0
- package/package.json +19 -7
package/dist/commands/dev.js
CHANGED
|
@@ -1,21 +1,172 @@
|
|
|
1
1
|
// `kozou dev` command implementation.
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// The
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
3
|
+
// Brings up the full local runtime described in Kozou v0.1 spec §9.1:
|
|
4
|
+
// - the bundled @kozou/svelte-ui Admin UI, spawned as a child process
|
|
5
|
+
// (`node <svelte-ui>/build/index.js` — the adapter-node standalone
|
|
6
|
+
// server, the same entry the svelte-ui E2E suite exercises);
|
|
7
|
+
// - the MCP Streamable HTTP server, run in-process via @kozou/mcp's
|
|
8
|
+
// startHttpServer (spec §7.1).
|
|
9
|
+
//
|
|
10
|
+
// Both default to 0.0.0.0 (spec §9.1, so `docker compose` port mapping
|
|
11
|
+
// works); a loud warning fires on a non-loopback bind because neither
|
|
12
|
+
// surface authenticates in v0.1 (spec §18.5).
|
|
13
|
+
//
|
|
14
|
+
// The Admin UI is an adapter-node (SvelteKit) server: without ORIGIN it
|
|
15
|
+
// assumes https and rejects every form POST over plain http with a 403.
|
|
16
|
+
// We default ORIGIN to http://localhost:<ui-port>; override via the
|
|
17
|
+
// ORIGIN / KOZOU_ORIGIN env when serving on a different public URL.
|
|
18
|
+
import { spawn } from 'node:child_process';
|
|
19
|
+
import { existsSync } from 'node:fs';
|
|
20
|
+
import { SchemaCache, startHttpServer, isLoopbackHost } from '@kozou/mcp';
|
|
21
|
+
import { loadConfig } from '../config.js';
|
|
22
|
+
import { buildAdminUiEnv, resolveAdminUiEntry, resolveAdminUiToken, resolveOrigin, } from './dev-runtime.js';
|
|
23
|
+
const PREFIX = '[kozou dev]';
|
|
24
|
+
// The in-house @kozou/api server is reached only by the Admin UI's
|
|
25
|
+
// server-side fetch (same host), so bind it to loopback — no need to
|
|
26
|
+
// expose it to the browser or the network.
|
|
27
|
+
const API_HOST = '127.0.0.1';
|
|
28
|
+
const DEFAULT_API_PORT = 3335;
|
|
29
|
+
// Start the in-house @kozou/api server in-process: introspect the
|
|
30
|
+
// configured database, build its SchemaContext, and serve it over a pg
|
|
31
|
+
// pool. @kozou/api is an experimental, unpublished workspace package, so
|
|
32
|
+
// it is imported dynamically and is only resolvable from a source /
|
|
33
|
+
// workspace checkout — a published `kozou` install gets a clear error.
|
|
34
|
+
async function startInhouseApi(config, port) {
|
|
35
|
+
let apiModule;
|
|
36
|
+
try {
|
|
37
|
+
apiModule = await import('@kozou/api');
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
throw new Error(`${PREFIX} --adapter api needs the experimental @kozou/api package, which is ` +
|
|
41
|
+
'not bundled in this release. Run kozou from a source / workspace checkout ' +
|
|
42
|
+
'to use it, or drop --adapter api to use the default REST adapter.');
|
|
43
|
+
}
|
|
44
|
+
const { introspect } = await import('@kozou/introspect');
|
|
45
|
+
const { buildSchemaContext } = await import('@kozou/core');
|
|
46
|
+
const { default: pg } = await import('pg');
|
|
47
|
+
const raw = await introspect({
|
|
48
|
+
connection: config.database.url,
|
|
49
|
+
schemas: config.database.schemas,
|
|
50
|
+
});
|
|
51
|
+
const schema = await buildSchemaContext({ raw });
|
|
52
|
+
const pool = new pg.Pool({ connectionString: config.database.url });
|
|
53
|
+
const server = await apiModule.startApiServer({
|
|
54
|
+
schema,
|
|
55
|
+
db: { query: (text, values) => pool.query(text, values) },
|
|
56
|
+
// When `auth` is configured the API verifies a JWT and runs each request
|
|
57
|
+
// under SET LOCAL ROLE, which needs a dedicated client per request — pass
|
|
58
|
+
// the pool. With no `auth`, the pool is unused and the API stays
|
|
59
|
+
// unauthenticated (loopback-only), exactly as before.
|
|
60
|
+
pool,
|
|
61
|
+
auth: config.auth,
|
|
62
|
+
host: API_HOST,
|
|
63
|
+
port,
|
|
64
|
+
logPrefix: `${PREFIX} api`,
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
url: `http://${API_HOST}:${server.port}`,
|
|
68
|
+
close: async () => {
|
|
69
|
+
await server.close();
|
|
70
|
+
await pool.end();
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function warnIfPublic(label, host) {
|
|
75
|
+
if (isLoopbackHost(host))
|
|
76
|
+
return;
|
|
77
|
+
process.stderr.write(`${PREFIX} WARNING: ${label} bound to non-loopback host "${host}".\n` +
|
|
78
|
+
`${PREFIX} v0.1 has NO authentication (spec §18.5). Anyone who can reach\n` +
|
|
79
|
+
`${PREFIX} ${host} can use it. This is expected inside docker compose;\n` +
|
|
80
|
+
`${PREFIX} avoid it on an untrusted network or put an auth proxy in front.\n`);
|
|
81
|
+
}
|
|
82
|
+
export async function devCommand(opts = {}) {
|
|
83
|
+
if (opts.adapter !== undefined && opts.adapter !== 'api') {
|
|
84
|
+
throw new Error(`${PREFIX} unknown --adapter "${opts.adapter}" ` +
|
|
85
|
+
'(the only supported value is "api"; omit it for the default REST adapter).');
|
|
86
|
+
}
|
|
87
|
+
const config = await loadConfig({ path: opts.config });
|
|
88
|
+
const adminUiEntry = resolveAdminUiEntry();
|
|
89
|
+
if (!existsSync(adminUiEntry)) {
|
|
90
|
+
throw new Error(`${PREFIX} Admin UI build not found at ${adminUiEntry}. ` +
|
|
91
|
+
'Reinstall @kozou/svelte-ui (its `build/` output ships in the package), ' +
|
|
92
|
+
'or in a workspace checkout run `pnpm --filter @kozou/svelte-ui run build`.');
|
|
93
|
+
}
|
|
94
|
+
// Optional in-house @kozou/api backend (--adapter api), started before
|
|
95
|
+
// the other servers so its URL can be wired into the UI environment.
|
|
96
|
+
const api = opts.adapter === 'api'
|
|
97
|
+
? await startInhouseApi(config, opts.apiPort ?? DEFAULT_API_PORT)
|
|
98
|
+
: null;
|
|
99
|
+
if (api) {
|
|
100
|
+
process.stderr.write(`${PREFIX} in-house @kozou/api on ${api.url}\n`);
|
|
101
|
+
}
|
|
102
|
+
// When the in-house API enforces auth, resolve the token the bundled Admin
|
|
103
|
+
// UI presents to it: a minted HS256 token, a supplied RS256 / external one,
|
|
104
|
+
// or none (with a warning) when neither is available. @kozou/api is already
|
|
105
|
+
// imported (startInhouseApi succeeded), so this dynamic import is cached.
|
|
106
|
+
let apiToken;
|
|
107
|
+
if (api && config.auth) {
|
|
108
|
+
const apiModule = await import('@kozou/api');
|
|
109
|
+
const resolved = await resolveAdminUiToken(config, apiModule, process.env);
|
|
110
|
+
if (resolved.warning) {
|
|
111
|
+
process.stderr.write(`${PREFIX} WARNING: ${resolved.warning}\n`);
|
|
112
|
+
}
|
|
113
|
+
apiToken = resolved.token;
|
|
114
|
+
}
|
|
115
|
+
const cache = new SchemaCache({
|
|
116
|
+
connection: config.database.url,
|
|
117
|
+
schemas: config.database.schemas,
|
|
118
|
+
ttlMs: config.cache.ttlMs,
|
|
119
|
+
});
|
|
120
|
+
// 1. MCP HTTP, in-process. startHttpServer already warns on a
|
|
121
|
+
// non-loopback bind, so we do not double-warn for it.
|
|
122
|
+
const mcp = await startHttpServer(cache, {
|
|
123
|
+
port: config.server.mcp.http.port,
|
|
124
|
+
host: config.server.mcp.http.host,
|
|
125
|
+
logPrefix: `${PREFIX} mcp`,
|
|
126
|
+
});
|
|
127
|
+
// 2. Admin UI, as a child process.
|
|
128
|
+
warnIfPublic('Admin UI', config.server.ui.host);
|
|
129
|
+
const origin = resolveOrigin(config, process.env);
|
|
130
|
+
const child = spawn('node', [adminUiEntry], {
|
|
131
|
+
env: buildAdminUiEnv(config, origin, process.env, api?.url, apiToken),
|
|
132
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
133
|
+
});
|
|
134
|
+
child.stdout?.on('data', (b) => process.stdout.write(`${PREFIX} ui | ${b}`));
|
|
135
|
+
child.stderr?.on('data', (b) => process.stderr.write(`${PREFIX} ui | ${b}`));
|
|
136
|
+
process.stderr.write(`${PREFIX} Admin UI on http://${config.server.ui.host}:${config.server.ui.port}` +
|
|
137
|
+
` (origin ${origin})\n`);
|
|
138
|
+
// 3. Lifecycle: tear everything down together. Resolve the promise (and
|
|
139
|
+
// thus let the CLI exit) only once everything has stopped.
|
|
140
|
+
const closeBackends = () => Promise.allSettled([mcp.close(), api ? api.close() : Promise.resolve()]);
|
|
141
|
+
await new Promise((resolve) => {
|
|
142
|
+
let shuttingDown = false;
|
|
143
|
+
const shutdown = (reason) => {
|
|
144
|
+
if (shuttingDown)
|
|
145
|
+
return;
|
|
146
|
+
shuttingDown = true;
|
|
147
|
+
process.stderr.write(`${PREFIX} ${reason}, shutting down\n`);
|
|
148
|
+
if (child.exitCode === null && child.signalCode === null) {
|
|
149
|
+
child.kill('SIGTERM');
|
|
150
|
+
}
|
|
151
|
+
void closeBackends().finally(() => resolve());
|
|
152
|
+
};
|
|
153
|
+
process.on('SIGINT', () => shutdown('SIGINT received'));
|
|
154
|
+
process.on('SIGTERM', () => shutdown('SIGTERM received'));
|
|
155
|
+
child.on('exit', (code, signal) => {
|
|
156
|
+
if (shuttingDown)
|
|
157
|
+
return;
|
|
158
|
+
// The Admin UI process died on its own — surface its exit status
|
|
159
|
+
// and bring the MCP server down with it.
|
|
160
|
+
process.stderr.write(`${PREFIX} Admin UI exited (code=${code ?? 'null'}, signal=${signal ?? 'null'})\n`);
|
|
161
|
+
process.exitCode = code ?? 1;
|
|
162
|
+
shuttingDown = true;
|
|
163
|
+
void closeBackends().finally(() => resolve());
|
|
164
|
+
});
|
|
165
|
+
child.on('error', (err) => {
|
|
166
|
+
process.stderr.write(`${PREFIX} failed to spawn Admin UI: ${err.message}\n`);
|
|
167
|
+
process.exitCode = 1;
|
|
168
|
+
shutdown('spawn error');
|
|
169
|
+
});
|
|
170
|
+
});
|
|
20
171
|
}
|
|
21
172
|
//# sourceMappingURL=dev.js.map
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type DocsOptions = {
|
|
2
|
+
/** Output destination. '-' = stdout (default), otherwise a file path. */
|
|
3
|
+
output?: string;
|
|
4
|
+
/** Path to kozou.config.yaml. Default: ./kozou.config.yaml. */
|
|
5
|
+
config?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function docsCommand(opts?: DocsOptions): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=docs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,WAAW,GAAG;IACxB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,WAAW,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BvE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// `kozou docs` command implementation.
|
|
2
|
+
//
|
|
3
|
+
// Pipeline (mirrors `kozou inspect`):
|
|
4
|
+
// 1. Load the kozou.config.yaml (or fall back to defaults).
|
|
5
|
+
// 2. Introspect the target Postgres schema (@kozou/introspect).
|
|
6
|
+
// 3. Optionally load UI hints (@kozou/core.loadUIHints).
|
|
7
|
+
// 4. Build a SchemaContext (@kozou/core.buildSchemaContext).
|
|
8
|
+
// 5. Render a Markdown schema document and write it out.
|
|
9
|
+
//
|
|
10
|
+
// See product_architecture_v3 §3.4 (the "docs" emit target).
|
|
11
|
+
import { writeFile } from 'node:fs/promises';
|
|
12
|
+
import { buildSchemaContext, loadUIHints } from '@kozou/core';
|
|
13
|
+
import { introspect } from '@kozou/introspect';
|
|
14
|
+
import { loadConfig } from '../config.js';
|
|
15
|
+
import { emitMarkdown } from '../docs.js';
|
|
16
|
+
const PREFIX = '[kozou docs]';
|
|
17
|
+
export async function docsCommand(opts = {}) {
|
|
18
|
+
const output = opts.output ?? '-';
|
|
19
|
+
const config = await loadConfig({ path: opts.config });
|
|
20
|
+
const raw = await introspect({
|
|
21
|
+
connection: config.database.url,
|
|
22
|
+
schemas: config.database.schemas,
|
|
23
|
+
});
|
|
24
|
+
let uiHints;
|
|
25
|
+
if (config.uiHints.path !== null && config.uiHints.path !== '') {
|
|
26
|
+
try {
|
|
27
|
+
uiHints = await loadUIHints(config.uiHints.path);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
// UI hints are optional; warn but continue without them.
|
|
31
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
32
|
+
process.stderr.write(`${PREFIX} could not load UI hints: ${message}\n`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const ctx = await buildSchemaContext({ raw, uiHints });
|
|
36
|
+
const serialized = emitMarkdown(ctx);
|
|
37
|
+
const payload = serialized.endsWith('\n') ? serialized : serialized + '\n';
|
|
38
|
+
if (output === '-') {
|
|
39
|
+
process.stdout.write(payload);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
await writeFile(output, payload, 'utf8');
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,sCAAsC;AACtC,8DAA8D;AAC9D,kEAAkE;AAClE,2DAA2D;AAC3D,+DAA+D;AAC/D,2DAA2D;AAC3D,EAAE;AACF,6DAA6D;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,MAAM,GAAG,cAAc,CAAC;AAS9B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB,EAAE;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;IAElC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC;QAC3B,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;QAC/B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;KACjC,CAAC,CAAC;IAEH,IAAI,OAA4B,CAAC;IACjC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,yDAAyD;YACzD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,6BAA6B,OAAO,IAAI,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;IAE3E,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC"}
|
package/dist/commands/mcp.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,UAAU,CAAC,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrE"}
|
package/dist/commands/mcp.js
CHANGED
|
@@ -2,28 +2,28 @@
|
|
|
2
2
|
//
|
|
3
3
|
// --stdio: spins up the @kozou/mcp server with a stdio transport, reading
|
|
4
4
|
// connection details from kozou.config.yaml / environment.
|
|
5
|
-
// --http:
|
|
6
|
-
//
|
|
5
|
+
// --http: spins up the @kozou/mcp server with the Streamable HTTP
|
|
6
|
+
// transport (Kozou v0.1 spec §7.1), binding to localhost by default and
|
|
7
|
+
// exposing POST /admin/refresh for cache invalidation (§7.5).
|
|
7
8
|
//
|
|
8
9
|
// See Kozou v0.1 design spec §9.1 and §7.
|
|
9
|
-
import { SchemaCache, startStdioServer } from '@kozou/mcp';
|
|
10
|
+
import { SchemaCache, startHttpServer, startStdioServer } from '@kozou/mcp';
|
|
10
11
|
import { loadConfig } from '../config.js';
|
|
11
|
-
const HTTP_HANDOFF_MESSAGE = 'kozou mcp --http: HTTP transport is scheduled for v0.1.1.\n' +
|
|
12
|
-
' See Kozou v0.1 design spec §16.1.1 B for the roadmap.\n' +
|
|
13
|
-
' Use --stdio for now (the default).\n';
|
|
14
12
|
export async function mcpCommand(opts = {}) {
|
|
15
|
-
// --http is deferred to v0.1.1 (HTTP transport not yet implemented in
|
|
16
|
-
// the underlying @kozou/mcp package).
|
|
17
|
-
if (opts.http === true) {
|
|
18
|
-
process.stderr.write(HTTP_HANDOFF_MESSAGE);
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
13
|
const config = await loadConfig({ path: opts.config });
|
|
22
14
|
const cache = new SchemaCache({
|
|
23
15
|
connection: config.database.url,
|
|
24
16
|
schemas: config.database.schemas,
|
|
25
17
|
ttlMs: config.cache.ttlMs,
|
|
26
18
|
});
|
|
19
|
+
if (opts.http === true) {
|
|
20
|
+
await startHttpServer(cache, {
|
|
21
|
+
port: opts.port,
|
|
22
|
+
host: opts.host,
|
|
23
|
+
logPrefix: '[kozou mcp]',
|
|
24
|
+
});
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
27
|
await startStdioServer(cache, { logPrefix: '[kozou mcp]' });
|
|
28
28
|
}
|
|
29
29
|
//# sourceMappingURL=mcp.js.map
|
package/dist/commands/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,0EAA0E;AAC1E,6DAA6D;AAC7D,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,0EAA0E;AAC1E,6DAA6D;AAC7D,kEAAkE;AAClE,0EAA0E;AAC1E,gEAAgE;AAChE,EAAE;AACF,0CAA0C;AAE1C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAU1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB,EAAE;IACpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;QAC/B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK;KAC1B,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,eAAe,CAAC,KAAK,EAAE;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,aAAa;SACzB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;AAC9D,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -2,156 +2,54 @@ import { z } from 'zod';
|
|
|
2
2
|
declare const configSchema: z.ZodObject<{
|
|
3
3
|
database: z.ZodObject<{
|
|
4
4
|
url: z.ZodString;
|
|
5
|
-
schemas: z.ZodDefault<z.ZodArray<z.ZodString
|
|
6
|
-
},
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}, {
|
|
10
|
-
url: string;
|
|
11
|
-
schemas?: string[] | undefined;
|
|
12
|
-
}>;
|
|
13
|
-
server: z.ZodDefault<z.ZodObject<{
|
|
14
|
-
ui: z.ZodDefault<z.ZodObject<{
|
|
5
|
+
schemas: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
server: z.ZodPrefault<z.ZodObject<{
|
|
8
|
+
ui: z.ZodPrefault<z.ZodObject<{
|
|
15
9
|
port: z.ZodDefault<z.ZodNumber>;
|
|
16
10
|
host: z.ZodDefault<z.ZodString>;
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}, {
|
|
21
|
-
port?: number | undefined;
|
|
22
|
-
host?: string | undefined;
|
|
23
|
-
}>>;
|
|
24
|
-
mcp: z.ZodDefault<z.ZodObject<{
|
|
25
|
-
http: z.ZodDefault<z.ZodObject<{
|
|
11
|
+
}, z.core.$strip>>;
|
|
12
|
+
mcp: z.ZodPrefault<z.ZodObject<{
|
|
13
|
+
http: z.ZodPrefault<z.ZodObject<{
|
|
26
14
|
port: z.ZodDefault<z.ZodNumber>;
|
|
27
15
|
host: z.ZodDefault<z.ZodString>;
|
|
28
|
-
},
|
|
29
|
-
port: number;
|
|
30
|
-
host: string;
|
|
31
|
-
}, {
|
|
32
|
-
port?: number | undefined;
|
|
33
|
-
host?: string | undefined;
|
|
34
|
-
}>>;
|
|
16
|
+
}, z.core.$strip>>;
|
|
35
17
|
stdio: z.ZodDefault<z.ZodBoolean>;
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
host: string;
|
|
40
|
-
};
|
|
41
|
-
stdio: boolean;
|
|
42
|
-
}, {
|
|
43
|
-
http?: {
|
|
44
|
-
port?: number | undefined;
|
|
45
|
-
host?: string | undefined;
|
|
46
|
-
} | undefined;
|
|
47
|
-
stdio?: boolean | undefined;
|
|
48
|
-
}>>;
|
|
49
|
-
}, "strip", z.ZodTypeAny, {
|
|
50
|
-
ui: {
|
|
51
|
-
port: number;
|
|
52
|
-
host: string;
|
|
53
|
-
};
|
|
54
|
-
mcp: {
|
|
55
|
-
http: {
|
|
56
|
-
port: number;
|
|
57
|
-
host: string;
|
|
58
|
-
};
|
|
59
|
-
stdio: boolean;
|
|
60
|
-
};
|
|
61
|
-
}, {
|
|
62
|
-
ui?: {
|
|
63
|
-
port?: number | undefined;
|
|
64
|
-
host?: string | undefined;
|
|
65
|
-
} | undefined;
|
|
66
|
-
mcp?: {
|
|
67
|
-
http?: {
|
|
68
|
-
port?: number | undefined;
|
|
69
|
-
host?: string | undefined;
|
|
70
|
-
} | undefined;
|
|
71
|
-
stdio?: boolean | undefined;
|
|
72
|
-
} | undefined;
|
|
73
|
-
}>>;
|
|
74
|
-
adapter: z.ZodDefault<z.ZodObject<{
|
|
18
|
+
}, z.core.$strip>>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
adapter: z.ZodPrefault<z.ZodObject<{
|
|
75
21
|
type: z.ZodDefault<z.ZodLiteral<"postgrest">>;
|
|
76
22
|
url: z.ZodDefault<z.ZodString>;
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
url: string;
|
|
80
|
-
}, {
|
|
81
|
-
type?: "postgrest" | undefined;
|
|
82
|
-
url?: string | undefined;
|
|
83
|
-
}>>;
|
|
84
|
-
uiHints: z.ZodDefault<z.ZodObject<{
|
|
23
|
+
}, z.core.$strip>>;
|
|
24
|
+
uiHints: z.ZodPrefault<z.ZodObject<{
|
|
85
25
|
path: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
86
|
-
},
|
|
87
|
-
|
|
88
|
-
}, {
|
|
89
|
-
path?: string | null | undefined;
|
|
90
|
-
}>>;
|
|
91
|
-
cache: z.ZodDefault<z.ZodObject<{
|
|
26
|
+
}, z.core.$strip>>;
|
|
27
|
+
cache: z.ZodPrefault<z.ZodObject<{
|
|
92
28
|
ttlMs: z.ZodDefault<z.ZodNumber>;
|
|
93
|
-
},
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
type: "postgrest";
|
|
118
|
-
url: string;
|
|
119
|
-
};
|
|
120
|
-
uiHints: {
|
|
121
|
-
path: string | null;
|
|
122
|
-
};
|
|
123
|
-
cache: {
|
|
124
|
-
ttlMs: number;
|
|
125
|
-
};
|
|
126
|
-
}, {
|
|
127
|
-
database: {
|
|
128
|
-
url: string;
|
|
129
|
-
schemas?: string[] | undefined;
|
|
130
|
-
};
|
|
131
|
-
server?: {
|
|
132
|
-
ui?: {
|
|
133
|
-
port?: number | undefined;
|
|
134
|
-
host?: string | undefined;
|
|
135
|
-
} | undefined;
|
|
136
|
-
mcp?: {
|
|
137
|
-
http?: {
|
|
138
|
-
port?: number | undefined;
|
|
139
|
-
host?: string | undefined;
|
|
140
|
-
} | undefined;
|
|
141
|
-
stdio?: boolean | undefined;
|
|
142
|
-
} | undefined;
|
|
143
|
-
} | undefined;
|
|
144
|
-
adapter?: {
|
|
145
|
-
type?: "postgrest" | undefined;
|
|
146
|
-
url?: string | undefined;
|
|
147
|
-
} | undefined;
|
|
148
|
-
uiHints?: {
|
|
149
|
-
path?: string | null | undefined;
|
|
150
|
-
} | undefined;
|
|
151
|
-
cache?: {
|
|
152
|
-
ttlMs?: number | undefined;
|
|
153
|
-
} | undefined;
|
|
154
|
-
}>;
|
|
29
|
+
}, z.core.$strip>>;
|
|
30
|
+
auth: z.ZodOptional<z.ZodObject<{
|
|
31
|
+
jwt: z.ZodObject<{
|
|
32
|
+
secret: z.ZodOptional<z.ZodString>;
|
|
33
|
+
publicKey: z.ZodOptional<z.ZodString>;
|
|
34
|
+
jwksUri: z.ZodOptional<z.ZodString>;
|
|
35
|
+
algorithms: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
36
|
+
HS256: "HS256";
|
|
37
|
+
RS256: "RS256";
|
|
38
|
+
}>>>;
|
|
39
|
+
issuer: z.ZodOptional<z.ZodString>;
|
|
40
|
+
audience: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
roleClaim: z.ZodOptional<z.ZodString>;
|
|
43
|
+
allowedRoles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
44
|
+
defaultRole: z.ZodOptional<z.ZodString>;
|
|
45
|
+
anonRole: z.ZodOptional<z.ZodString>;
|
|
46
|
+
claimsGuc: z.ZodOptional<z.ZodString>;
|
|
47
|
+
ui: z.ZodOptional<z.ZodObject<{
|
|
48
|
+
role: z.ZodOptional<z.ZodString>;
|
|
49
|
+
token: z.ZodOptional<z.ZodString>;
|
|
50
|
+
}, z.core.$strip>>;
|
|
51
|
+
}, z.core.$strip>>;
|
|
52
|
+
}, z.core.$strip>;
|
|
155
53
|
export type KozouConfig = z.infer<typeof configSchema>;
|
|
156
54
|
export type KozouConfigIssue = {
|
|
157
55
|
path: string;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA+FxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOhB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAIvD,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;gBACrB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;CAMjF;AAMD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AA4GF,wBAAsB,UAAU,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC,CA6CnF"}
|