aui-agent-builder 0.4.2 → 0.4.3
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 +13 -1
- package/dist/api-client/apollo-client.d.ts +40 -0
- package/dist/api-client/apollo-client.d.ts.map +1 -1
- package/dist/api-client/apollo-client.js.map +1 -1
- package/dist/api-client/mock-db-client.d.ts +144 -0
- package/dist/api-client/mock-db-client.d.ts.map +1 -0
- package/dist/api-client/mock-db-client.js +345 -0
- package/dist/api-client/mock-db-client.js.map +1 -0
- package/dist/commands/apollo.d.ts +53 -0
- package/dist/commands/apollo.d.ts.map +1 -1
- package/dist/commands/apollo.js +121 -10
- package/dist/commands/apollo.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/mockdb-guide.d.ts +7 -0
- package/dist/commands/mockdb-guide.d.ts.map +1 -0
- package/dist/commands/mockdb-guide.js +100 -0
- package/dist/commands/mockdb-guide.js.map +1 -0
- package/dist/commands/mockdb.d.ts +76 -0
- package/dist/commands/mockdb.d.ts.map +1 -0
- package/dist/commands/mockdb.js +535 -0
- package/dist/commands/mockdb.js.map +1 -0
- package/dist/config/index.d.ts +33 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +58 -0
- package/dist/config/index.js.map +1 -1
- package/dist/index.js +301 -3
- package/dist/index.js.map +1 -1
- package/dist/services/mock-db.service.d.ts +66 -0
- package/dist/services/mock-db.service.d.ts.map +1 -0
- package/dist/services/mock-db.service.js +177 -0
- package/dist/services/mock-db.service.js.map +1 -0
- package/dist/utils/fetch-with-timeout.d.ts +2 -2
- package/dist/utils/fetch-with-timeout.js +3 -3
- package/dist/utils/fetch-with-timeout.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mockdb command group — drive the per-agent mock database service.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands wrap the mock-db management + runtime planes so a builder (or a
|
|
5
|
+
* coding agent) can stand up and exercise a mock data backend WITHOUT
|
|
6
|
+
* forwarding the raw AUI token to an external host: the token is sent
|
|
7
|
+
* first-party from the CLI only on the first provision, and every call after
|
|
8
|
+
* that uses the per-agent management / runtime keys.
|
|
9
|
+
*
|
|
10
|
+
* Design (mirrors `apollo`):
|
|
11
|
+
* - Fully non-interactive; every input is a flag.
|
|
12
|
+
* - Always emits the canonical JSON `{ success, data }` envelope — built for
|
|
13
|
+
* tooling / coding agents. (A human `--pretty` table view exists in this
|
|
14
|
+
* file — `renderDescribe`/`renderExport`/… — but the `--pretty` flag is
|
|
15
|
+
* temporarily DISABLED at the command layer in `src/index.ts`; the
|
|
16
|
+
* renderers are kept so it can be re-enabled later. They render plain text
|
|
17
|
+
* + color, not Ink, so they stay correct whether stdout is a TTY or piped.)
|
|
18
|
+
* - Each subcommand opens an `aui.mockdb.*` span with redacted curl repro +
|
|
19
|
+
* HTTP telemetry (via the client), exactly like the other clients.
|
|
20
|
+
* - Agent/account context comes from `.auirc`; auth-mode selection + key
|
|
21
|
+
* storage live in `services/mock-db.service.ts`.
|
|
22
|
+
*/
|
|
23
|
+
import { type MockDbCommandOptions } from "../services/mock-db.service.js";
|
|
24
|
+
export interface MockDbBaseOptions extends MockDbCommandOptions {
|
|
25
|
+
/** Render the human view instead of the default JSON envelope. */
|
|
26
|
+
pretty?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface MockDbCollectionsCreateOptions extends MockDbBaseOptions {
|
|
29
|
+
name?: string;
|
|
30
|
+
schema?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface MockDbSeedOptions extends MockDbBaseOptions {
|
|
33
|
+
collection?: string;
|
|
34
|
+
rows?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface MockDbEndpointCreateOptions extends MockDbBaseOptions {
|
|
37
|
+
slug?: string;
|
|
38
|
+
spec?: string;
|
|
39
|
+
paramSchema?: string;
|
|
40
|
+
description?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface MockDbExecuteOptions extends MockDbBaseOptions {
|
|
43
|
+
slug?: string;
|
|
44
|
+
session?: string;
|
|
45
|
+
body?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface MockDbSessionOptions extends MockDbBaseOptions {
|
|
48
|
+
key?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface MockDbDeleteOptions extends MockDbBaseOptions {
|
|
51
|
+
force?: boolean;
|
|
52
|
+
}
|
|
53
|
+
export interface MockDbGuideOptions {
|
|
54
|
+
output?: string;
|
|
55
|
+
pretty?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export declare function mockdbProvision(options?: MockDbBaseOptions): Promise<void>;
|
|
58
|
+
export declare function mockdbDescribe(options?: MockDbBaseOptions): Promise<void>;
|
|
59
|
+
export declare function mockdbCollectionsCreate(options?: MockDbCollectionsCreateOptions): Promise<void>;
|
|
60
|
+
export declare function mockdbCollectionsList(options?: MockDbBaseOptions): Promise<void>;
|
|
61
|
+
export declare function mockdbSeed(options?: MockDbSeedOptions): Promise<void>;
|
|
62
|
+
export declare function mockdbEndpointCreate(options?: MockDbEndpointCreateOptions): Promise<void>;
|
|
63
|
+
export declare function mockdbEndpointList(options?: MockDbBaseOptions): Promise<void>;
|
|
64
|
+
export declare function mockdbExecute(options?: MockDbExecuteOptions): Promise<void>;
|
|
65
|
+
export declare function mockdbSessionGet(options?: MockDbSessionOptions): Promise<void>;
|
|
66
|
+
export declare function mockdbSessionReset(options?: MockDbSessionOptions): Promise<void>;
|
|
67
|
+
export declare function mockdbRotateMgmtKey(options?: MockDbBaseOptions): Promise<void>;
|
|
68
|
+
export declare function mockdbRotateRuntimeKey(options?: MockDbBaseOptions): Promise<void>;
|
|
69
|
+
export declare function mockdbExport(options?: MockDbBaseOptions): Promise<void>;
|
|
70
|
+
export declare function mockdbKeys(options?: MockDbBaseOptions): Promise<void>;
|
|
71
|
+
export declare function mockdbDelete(options?: MockDbDeleteOptions): Promise<void>;
|
|
72
|
+
export declare function mockdbGuide(options?: MockDbGuideOptions): Promise<void>;
|
|
73
|
+
export declare function mockdbMenu(options?: {
|
|
74
|
+
pretty?: boolean;
|
|
75
|
+
}): Promise<void>;
|
|
76
|
+
//# sourceMappingURL=mockdb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockdb.d.ts","sourceRoot":"","sources":["../../src/commands/mockdb.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mockdb command group — drive the per-agent mock database service.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands wrap the mock-db management + runtime planes so a builder (or a
|
|
5
|
+
* coding agent) can stand up and exercise a mock data backend WITHOUT
|
|
6
|
+
* forwarding the raw AUI token to an external host: the token is sent
|
|
7
|
+
* first-party from the CLI only on the first provision, and every call after
|
|
8
|
+
* that uses the per-agent management / runtime keys.
|
|
9
|
+
*
|
|
10
|
+
* Design (mirrors `apollo`):
|
|
11
|
+
* - Fully non-interactive; every input is a flag.
|
|
12
|
+
* - Always emits the canonical JSON `{ success, data }` envelope — built for
|
|
13
|
+
* tooling / coding agents. (A human `--pretty` table view exists in this
|
|
14
|
+
* file — `renderDescribe`/`renderExport`/… — but the `--pretty` flag is
|
|
15
|
+
* temporarily DISABLED at the command layer in `src/index.ts`; the
|
|
16
|
+
* renderers are kept so it can be re-enabled later. They render plain text
|
|
17
|
+
* + color, not Ink, so they stay correct whether stdout is a TTY or piped.)
|
|
18
|
+
* - Each subcommand opens an `aui.mockdb.*` span with redacted curl repro +
|
|
19
|
+
* HTTP telemetry (via the client), exactly like the other clients.
|
|
20
|
+
* - Agent/account context comes from `.auirc`; auth-mode selection + key
|
|
21
|
+
* storage live in `services/mock-db.service.ts`.
|
|
22
|
+
*/
|
|
23
|
+
import * as fs from "fs";
|
|
24
|
+
import * as path from "path";
|
|
25
|
+
import chalk from "chalk";
|
|
26
|
+
import { isJsonMode, outputJson, setJsonMode, stderrLog, } from "../utils/json-output.js";
|
|
27
|
+
import { ValidationError } from "../errors/index.js";
|
|
28
|
+
import { getTracer, SpanStatusCode } from "../telemetry.js";
|
|
29
|
+
import { resolveMockDbContext, provisionMockDb, describeMockDb, createCollection, listCollections, seedRows, createEndpoint, listEndpoints, executeEndpoint, inspectSession, resetSession, rotateMgmtKey, rotateRuntimeKey, exportMockDb, deleteMockDb, storedKeyInfo, } from "../services/mock-db.service.js";
|
|
30
|
+
import { MOCKDB_GUIDE } from "./mockdb-guide.js";
|
|
31
|
+
// ─── Generic helpers ───
|
|
32
|
+
function write(text) {
|
|
33
|
+
process.stdout.write(text.endsWith("\n") ? text : text + "\n");
|
|
34
|
+
}
|
|
35
|
+
/** Parse a JSON flag value, throwing a clean ValidationError on bad input. */
|
|
36
|
+
function parseJsonOption(flag, raw) {
|
|
37
|
+
try {
|
|
38
|
+
return JSON.parse(raw);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
throw new ValidationError(`${flag} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`, { suggestion: `Pass a valid JSON value to ${flag}.` });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function requireFlag(value, flag, example) {
|
|
45
|
+
const v = value?.trim();
|
|
46
|
+
if (!v) {
|
|
47
|
+
throw new ValidationError(`Missing required option: ${flag}.`, {
|
|
48
|
+
suggestion: `Pass ${flag} ${example}.`,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return v;
|
|
52
|
+
}
|
|
53
|
+
function recordSpanError(span, error) {
|
|
54
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
55
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: msg });
|
|
56
|
+
span.recordException(error instanceof Error ? error : new Error(msg));
|
|
57
|
+
}
|
|
58
|
+
/** Open an `aui.mockdb.*` span, run `fn`, record success/error, always end. */
|
|
59
|
+
async function runSpan(name, fn) {
|
|
60
|
+
const tracer = getTracer();
|
|
61
|
+
await tracer.startActiveSpan(name, async (span) => {
|
|
62
|
+
try {
|
|
63
|
+
await fn(span);
|
|
64
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
recordSpanError(span, error);
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
span.end();
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/** Normalize the `--schema` value into `{ columns: [...] }`. */
|
|
76
|
+
function normalizeSchema(raw) {
|
|
77
|
+
if (Array.isArray(raw))
|
|
78
|
+
return { columns: raw };
|
|
79
|
+
if (raw && typeof raw === "object" && Array.isArray(raw.columns)) {
|
|
80
|
+
return raw;
|
|
81
|
+
}
|
|
82
|
+
throw new ValidationError("--schema must be a JSON array of columns, or an object with a `columns` array.", {
|
|
83
|
+
suggestion: 'e.g. --schema \'{"columns":[{"name":"id","type":"text","primaryKey":true}]}\'',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Emit a result as the JSON envelope (default) or a human view (--pretty).
|
|
88
|
+
* When a `renderer` is given it produces the pretty text (e.g. tables for
|
|
89
|
+
* describe/export); otherwise a heading + indented JSON is printed.
|
|
90
|
+
*/
|
|
91
|
+
function emitResult(title, data, renderer) {
|
|
92
|
+
if (isJsonMode()) {
|
|
93
|
+
outputJson(data);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (renderer) {
|
|
97
|
+
write(renderer(data));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
write(`${chalk.bold.cyan(title)}\n${indent(JSON.stringify(data, null, 2))}`);
|
|
101
|
+
}
|
|
102
|
+
// ─── Pretty-print helpers (plain-text tables for --pretty) ───
|
|
103
|
+
function asObj(v) {
|
|
104
|
+
return v && typeof v === "object" && !Array.isArray(v)
|
|
105
|
+
? v
|
|
106
|
+
: {};
|
|
107
|
+
}
|
|
108
|
+
function asArr(v) {
|
|
109
|
+
return Array.isArray(v) ? v : [];
|
|
110
|
+
}
|
|
111
|
+
function cell(v) {
|
|
112
|
+
if (v === null || v === undefined)
|
|
113
|
+
return "";
|
|
114
|
+
if (typeof v === "object")
|
|
115
|
+
return JSON.stringify(v);
|
|
116
|
+
return String(v);
|
|
117
|
+
}
|
|
118
|
+
function truncate(s, n) {
|
|
119
|
+
return s.length > n ? s.slice(0, Math.max(0, n - 1)) + "…" : s;
|
|
120
|
+
}
|
|
121
|
+
function indent(s, pad = " ") {
|
|
122
|
+
return s
|
|
123
|
+
.split("\n")
|
|
124
|
+
.map((l) => pad + l)
|
|
125
|
+
.join("\n");
|
|
126
|
+
}
|
|
127
|
+
function heading(title, subtitle) {
|
|
128
|
+
return chalk.bold.cyan(title) + (subtitle ? chalk.gray(` ${subtitle}`) : "");
|
|
129
|
+
}
|
|
130
|
+
function sectionTitle(t) {
|
|
131
|
+
return chalk.bold(t);
|
|
132
|
+
}
|
|
133
|
+
/** Build an aligned monospace table (header + separator + rows) as text. */
|
|
134
|
+
function table(headers, rows) {
|
|
135
|
+
const widths = headers.map((h, i) => Math.max(h.length, 0, ...rows.map((r) => (r[i] ?? "").length)));
|
|
136
|
+
const fmt = (cells) => cells.map((c, i) => (c ?? "").padEnd(widths[i])).join(" ");
|
|
137
|
+
const lines = [];
|
|
138
|
+
lines.push(chalk.bold.cyan(fmt(headers)));
|
|
139
|
+
lines.push(chalk.gray(widths.map((w) => "─".repeat(w)).join(" ")));
|
|
140
|
+
for (const r of rows)
|
|
141
|
+
lines.push(fmt(r));
|
|
142
|
+
return lines.join("\n");
|
|
143
|
+
}
|
|
144
|
+
/** `describe` — collections (columns/types/flags/row counts) + endpoints. */
|
|
145
|
+
function renderDescribe(raw) {
|
|
146
|
+
const d = asObj(raw);
|
|
147
|
+
const collections = asArr(d.collections);
|
|
148
|
+
const endpoints = asArr(d.endpoints);
|
|
149
|
+
const out = [heading("Mock DB", d.agentId ? cell(d.agentId) : undefined)];
|
|
150
|
+
if (collections.length === 0) {
|
|
151
|
+
out.push("", sectionTitle("Collections"), chalk.gray(" No collections yet — create one with: aui mockdb collections create"));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
for (const c of collections) {
|
|
155
|
+
const co = asObj(c);
|
|
156
|
+
const cols = asArr(co.columns);
|
|
157
|
+
out.push("", sectionTitle(`${cell(co.name)} ${chalk.gray(`(${cell(co.baseRowCount ?? 0)} rows)`)}`));
|
|
158
|
+
out.push(indent(table(["Column", "Type", "PK", "Nullable", "References"], cols.map((col) => {
|
|
159
|
+
const cc = asObj(col);
|
|
160
|
+
return [
|
|
161
|
+
truncate(cell(cc.name), 30),
|
|
162
|
+
truncate(cell(cc.relative ? `${cell(cc.type)} (rel)` : cc.type), 24),
|
|
163
|
+
cc.primaryKey ? "✓" : "",
|
|
164
|
+
cc.nullable === false ? "" : "✓",
|
|
165
|
+
truncate(cell(cc.references), 30),
|
|
166
|
+
];
|
|
167
|
+
}))));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
out.push("", sectionTitle("Endpoints"));
|
|
171
|
+
if (endpoints.length === 0) {
|
|
172
|
+
out.push(chalk.gray(" No endpoints yet."));
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
out.push(indent(table(["Slug", "Kind", "Description"], endpoints.map((e) => {
|
|
176
|
+
const ee = asObj(e);
|
|
177
|
+
return [
|
|
178
|
+
truncate(cell(ee.slug), 28),
|
|
179
|
+
truncate(cell(ee.kind), 10),
|
|
180
|
+
truncate(cell(ee.description), 50),
|
|
181
|
+
];
|
|
182
|
+
}))));
|
|
183
|
+
}
|
|
184
|
+
return out.join("\n");
|
|
185
|
+
}
|
|
186
|
+
/** `collections list` — name / PK strategy / column count. */
|
|
187
|
+
function renderCollectionsList(raw) {
|
|
188
|
+
const cols = asArr(asObj(raw).collections);
|
|
189
|
+
if (cols.length === 0) {
|
|
190
|
+
return `${heading("Collections")}\n${chalk.gray(" No collections yet.")}`;
|
|
191
|
+
}
|
|
192
|
+
return `${heading("Collections")}\n${indent(table(["Collection", "PK Strategy", "# Columns"], cols.map((c) => {
|
|
193
|
+
const co = asObj(c);
|
|
194
|
+
return [
|
|
195
|
+
truncate(cell(co.name), 30),
|
|
196
|
+
truncate(cell(co.pkStrategy), 16),
|
|
197
|
+
String(asArr(asObj(co.schema).columns).length),
|
|
198
|
+
];
|
|
199
|
+
})))}`;
|
|
200
|
+
}
|
|
201
|
+
/** `endpoint list` — slug / kind / description. */
|
|
202
|
+
function renderEndpointList(raw) {
|
|
203
|
+
const eps = asArr(asObj(raw).endpoints);
|
|
204
|
+
if (eps.length === 0) {
|
|
205
|
+
return `${heading("Endpoints")}\n${chalk.gray(" No endpoints yet.")}`;
|
|
206
|
+
}
|
|
207
|
+
return `${heading("Endpoints")}\n${indent(table(["Slug", "Kind", "Description"], eps.map((e) => {
|
|
208
|
+
const ee = asObj(e);
|
|
209
|
+
return [
|
|
210
|
+
truncate(cell(ee.slug), 28),
|
|
211
|
+
truncate(cell(ee.kind), 10),
|
|
212
|
+
truncate(cell(ee.description), 60),
|
|
213
|
+
];
|
|
214
|
+
})))}`;
|
|
215
|
+
}
|
|
216
|
+
/** Render a collection's rows as a table keyed by its schema columns. */
|
|
217
|
+
function rowsSection(name, schemaColumns, rows) {
|
|
218
|
+
const keys = schemaColumns.length > 0
|
|
219
|
+
? schemaColumns
|
|
220
|
+
: rows.length > 0
|
|
221
|
+
? Object.keys(asObj(rows[0])).filter((k) => !k.startsWith("__"))
|
|
222
|
+
: [];
|
|
223
|
+
const title = sectionTitle(`${name} ${chalk.gray(`(${rows.length} rows)`)}`);
|
|
224
|
+
if (rows.length === 0 || keys.length === 0) {
|
|
225
|
+
return `${title}\n${chalk.gray(" No rows.")}`;
|
|
226
|
+
}
|
|
227
|
+
return `${title}\n${indent(table(keys.map((k) => truncate(k, 18)), rows.map((r) => {
|
|
228
|
+
const ro = asObj(r);
|
|
229
|
+
return keys.map((k) => truncate(cell(ro[k]), 24));
|
|
230
|
+
})))}`;
|
|
231
|
+
}
|
|
232
|
+
/** `export` — schema + base data (rows per collection) + endpoints. */
|
|
233
|
+
function renderExport(raw) {
|
|
234
|
+
const d = asObj(raw);
|
|
235
|
+
const collections = asArr(d.collections);
|
|
236
|
+
const endpoints = asArr(d.endpoints);
|
|
237
|
+
const out = [heading("Mock DB Export", d.agentId ? cell(d.agentId) : undefined)];
|
|
238
|
+
if (collections.length === 0) {
|
|
239
|
+
out.push("", sectionTitle("Collections"), chalk.gray(" Empty."));
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
for (const c of collections) {
|
|
243
|
+
const co = asObj(c);
|
|
244
|
+
const schemaColumns = asArr(asObj(co.schema).columns).map((col) => cell(asObj(col).name));
|
|
245
|
+
out.push("", rowsSection(cell(co.name), schemaColumns, asArr(co.rows)));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (endpoints.length > 0) {
|
|
249
|
+
out.push("", sectionTitle("Endpoints"), indent(table(["Slug", "Kind"], endpoints.map((e) => {
|
|
250
|
+
const ee = asObj(e);
|
|
251
|
+
return [truncate(cell(ee.slug), 28), truncate(cell(ee.kind), 10)];
|
|
252
|
+
}))));
|
|
253
|
+
}
|
|
254
|
+
return out.join("\n");
|
|
255
|
+
}
|
|
256
|
+
/** `execute` — success/count + the returned rows as a table. */
|
|
257
|
+
function renderExecute(raw) {
|
|
258
|
+
const d = asObj(raw);
|
|
259
|
+
const inner = asObj(d.data);
|
|
260
|
+
const rows = asArr(inner.rows);
|
|
261
|
+
const keys = rows.length > 0 ? Object.keys(asObj(rows[0])) : [];
|
|
262
|
+
const out = [
|
|
263
|
+
heading("Endpoint Result"),
|
|
264
|
+
` ${chalk.gray("Success:")} ${cell(d.success)} ${chalk.gray("Count:")} ${cell(inner.count ?? rows.length)}`,
|
|
265
|
+
];
|
|
266
|
+
if (d.error)
|
|
267
|
+
out.push(` ${chalk.red("Error:")} ${cell(d.error)}`);
|
|
268
|
+
if (rows.length > 0) {
|
|
269
|
+
out.push("", indent(table(keys.map((k) => truncate(k, 18)), rows.map((r) => {
|
|
270
|
+
const ro = asObj(r);
|
|
271
|
+
return keys.map((k) => truncate(cell(ro[k]), 24));
|
|
272
|
+
}))));
|
|
273
|
+
}
|
|
274
|
+
return out.join("\n");
|
|
275
|
+
}
|
|
276
|
+
// ─── Subcommands ───
|
|
277
|
+
export async function mockdbProvision(options = {}) {
|
|
278
|
+
if (!options.pretty)
|
|
279
|
+
setJsonMode(true);
|
|
280
|
+
await runSpan("aui.mockdb.provision", async (span) => {
|
|
281
|
+
const ctx = await resolveMockDbContext(options);
|
|
282
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
283
|
+
if (isJsonMode())
|
|
284
|
+
stderrLog("Provisioning mock DB...");
|
|
285
|
+
const resp = await provisionMockDb(ctx);
|
|
286
|
+
emitResult("Mock DB Provisioned", resp);
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
export async function mockdbDescribe(options = {}) {
|
|
290
|
+
if (!options.pretty)
|
|
291
|
+
setJsonMode(true);
|
|
292
|
+
await runSpan("aui.mockdb.describe", async (span) => {
|
|
293
|
+
const ctx = await resolveMockDbContext(options);
|
|
294
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
295
|
+
const data = await describeMockDb(ctx);
|
|
296
|
+
emitResult("Mock DB", data, renderDescribe);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
export async function mockdbCollectionsCreate(options = {}) {
|
|
300
|
+
if (!options.pretty)
|
|
301
|
+
setJsonMode(true);
|
|
302
|
+
await runSpan("aui.mockdb.collections_create", async (span) => {
|
|
303
|
+
const name = requireFlag(options.name, "--name", "<collection name>");
|
|
304
|
+
const schemaRaw = requireFlag(options.schema, "--schema", "'{\"columns\":[...]}'");
|
|
305
|
+
const schema = normalizeSchema(parseJsonOption("--schema", schemaRaw));
|
|
306
|
+
const ctx = await resolveMockDbContext(options);
|
|
307
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
308
|
+
span.setAttribute("mockdb.collection", name);
|
|
309
|
+
const data = await createCollection(ctx, name, schema);
|
|
310
|
+
emitResult("Collection Created", data);
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
export async function mockdbCollectionsList(options = {}) {
|
|
314
|
+
if (!options.pretty)
|
|
315
|
+
setJsonMode(true);
|
|
316
|
+
await runSpan("aui.mockdb.collections_list", async (span) => {
|
|
317
|
+
const ctx = await resolveMockDbContext(options);
|
|
318
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
319
|
+
const data = await listCollections(ctx);
|
|
320
|
+
emitResult("Collections", data, renderCollectionsList);
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
export async function mockdbSeed(options = {}) {
|
|
324
|
+
if (!options.pretty)
|
|
325
|
+
setJsonMode(true);
|
|
326
|
+
await runSpan("aui.mockdb.seed", async (span) => {
|
|
327
|
+
const collection = requireFlag(options.collection, "--collection", "<collection name>");
|
|
328
|
+
const rowsRaw = requireFlag(options.rows, "--rows", "'[{...}]'");
|
|
329
|
+
const rows = parseJsonOption("--rows", rowsRaw);
|
|
330
|
+
if (!Array.isArray(rows)) {
|
|
331
|
+
throw new ValidationError("--rows must be a JSON array of row objects.", {
|
|
332
|
+
suggestion: "e.g. --rows '[{\"id\":\"A1\",\"balance\":100}]'",
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
const ctx = await resolveMockDbContext(options);
|
|
336
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
337
|
+
span.setAttribute("mockdb.collection", collection);
|
|
338
|
+
span.setAttribute("mockdb.row_count", rows.length);
|
|
339
|
+
const data = await seedRows(ctx, collection, rows);
|
|
340
|
+
emitResult("Rows Seeded", data);
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
export async function mockdbEndpointCreate(options = {}) {
|
|
344
|
+
if (!options.pretty)
|
|
345
|
+
setJsonMode(true);
|
|
346
|
+
await runSpan("aui.mockdb.endpoint_create", async (span) => {
|
|
347
|
+
const slug = requireFlag(options.slug, "--slug", "<endpoint-slug>");
|
|
348
|
+
const specRaw = requireFlag(options.spec, "--spec", "'{\"kind\":\"read\",...}'");
|
|
349
|
+
const spec = parseJsonOption("--spec", specRaw);
|
|
350
|
+
if (!spec || typeof spec !== "object" || typeof spec.kind !== "string") {
|
|
351
|
+
throw new ValidationError("--spec must be a JSON object with a `kind` (read|insert|update|delete).", {
|
|
352
|
+
suggestion: 'e.g. --spec \'{"kind":"read","collection":"accounts","where":[]}\'',
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
const body = { slug, spec };
|
|
356
|
+
if (options.paramSchema?.trim()) {
|
|
357
|
+
body.paramSchema = parseJsonOption("--param-schema", options.paramSchema);
|
|
358
|
+
}
|
|
359
|
+
if (options.description?.trim())
|
|
360
|
+
body.description = options.description.trim();
|
|
361
|
+
const ctx = await resolveMockDbContext(options);
|
|
362
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
363
|
+
span.setAttribute("mockdb.endpoint_slug", slug);
|
|
364
|
+
span.setAttribute("mockdb.endpoint_kind", spec.kind);
|
|
365
|
+
const data = await createEndpoint(ctx, body);
|
|
366
|
+
emitResult("Endpoint Created", data);
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
export async function mockdbEndpointList(options = {}) {
|
|
370
|
+
if (!options.pretty)
|
|
371
|
+
setJsonMode(true);
|
|
372
|
+
await runSpan("aui.mockdb.endpoint_list", async (span) => {
|
|
373
|
+
const ctx = await resolveMockDbContext(options);
|
|
374
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
375
|
+
const data = await listEndpoints(ctx);
|
|
376
|
+
emitResult("Endpoints", data, renderEndpointList);
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
export async function mockdbExecute(options = {}) {
|
|
380
|
+
if (!options.pretty)
|
|
381
|
+
setJsonMode(true);
|
|
382
|
+
await runSpan("aui.mockdb.execute", async (span) => {
|
|
383
|
+
const slug = requireFlag(options.slug, "--slug", "<endpoint-slug>");
|
|
384
|
+
const sessionKey = options.session?.trim() || undefined;
|
|
385
|
+
let body = {};
|
|
386
|
+
if (options.body?.trim()) {
|
|
387
|
+
const parsed = parseJsonOption("--body", options.body);
|
|
388
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
389
|
+
throw new ValidationError("--body must be a JSON object.", {
|
|
390
|
+
suggestion: "e.g. --body '{\"user_id\":\"U1\"}'",
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
body = parsed;
|
|
394
|
+
}
|
|
395
|
+
const ctx = await resolveMockDbContext(options);
|
|
396
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
397
|
+
span.setAttribute("mockdb.endpoint_slug", slug);
|
|
398
|
+
if (sessionKey)
|
|
399
|
+
span.setAttribute("mockdb.session_key", sessionKey);
|
|
400
|
+
const data = await executeEndpoint(ctx, slug, sessionKey, body);
|
|
401
|
+
emitResult("Endpoint Result", data, renderExecute);
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
export async function mockdbSessionGet(options = {}) {
|
|
405
|
+
if (!options.pretty)
|
|
406
|
+
setJsonMode(true);
|
|
407
|
+
await runSpan("aui.mockdb.session_get", async (span) => {
|
|
408
|
+
const key = requireFlag(options.key, "--key", "<session-key>");
|
|
409
|
+
const ctx = await resolveMockDbContext(options);
|
|
410
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
411
|
+
span.setAttribute("mockdb.session_key", key);
|
|
412
|
+
const data = await inspectSession(ctx, key);
|
|
413
|
+
emitResult("Session", data);
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
export async function mockdbSessionReset(options = {}) {
|
|
417
|
+
if (!options.pretty)
|
|
418
|
+
setJsonMode(true);
|
|
419
|
+
await runSpan("aui.mockdb.session_reset", async (span) => {
|
|
420
|
+
const key = requireFlag(options.key, "--key", "<session-key>");
|
|
421
|
+
const ctx = await resolveMockDbContext(options);
|
|
422
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
423
|
+
span.setAttribute("mockdb.session_key", key);
|
|
424
|
+
const data = await resetSession(ctx, key);
|
|
425
|
+
emitResult("Session Reset", data);
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
export async function mockdbRotateMgmtKey(options = {}) {
|
|
429
|
+
if (!options.pretty)
|
|
430
|
+
setJsonMode(true);
|
|
431
|
+
await runSpan("aui.mockdb.rotate_mgmt_key", async (span) => {
|
|
432
|
+
const ctx = await resolveMockDbContext(options);
|
|
433
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
434
|
+
const data = await rotateMgmtKey(ctx);
|
|
435
|
+
emitResult("Management Key Rotated", data);
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
export async function mockdbRotateRuntimeKey(options = {}) {
|
|
439
|
+
if (!options.pretty)
|
|
440
|
+
setJsonMode(true);
|
|
441
|
+
await runSpan("aui.mockdb.rotate_runtime_key", async (span) => {
|
|
442
|
+
const ctx = await resolveMockDbContext(options);
|
|
443
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
444
|
+
const data = await rotateRuntimeKey(ctx);
|
|
445
|
+
emitResult("Runtime Key Rotated", data);
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
export async function mockdbExport(options = {}) {
|
|
449
|
+
if (!options.pretty)
|
|
450
|
+
setJsonMode(true);
|
|
451
|
+
await runSpan("aui.mockdb.export", async (span) => {
|
|
452
|
+
const ctx = await resolveMockDbContext(options);
|
|
453
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
454
|
+
const data = await exportMockDb(ctx);
|
|
455
|
+
emitResult("Mock DB Export", data, renderExport);
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
export async function mockdbKeys(options = {}) {
|
|
459
|
+
if (!options.pretty)
|
|
460
|
+
setJsonMode(true);
|
|
461
|
+
await runSpan("aui.mockdb.keys", async (span) => {
|
|
462
|
+
const ctx = await resolveMockDbContext(options);
|
|
463
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
464
|
+
emitResult("Stored Keys", storedKeyInfo(ctx.agentId));
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
export async function mockdbDelete(options = {}) {
|
|
468
|
+
if (!options.pretty)
|
|
469
|
+
setJsonMode(true);
|
|
470
|
+
await runSpan("aui.mockdb.delete", async (span) => {
|
|
471
|
+
if (!options.force) {
|
|
472
|
+
throw new ValidationError("Refusing to delete the mock DB without --force.", {
|
|
473
|
+
suggestion: "This permanently drops the mock DB and all its data. Re-run with --force to confirm.",
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
const ctx = await resolveMockDbContext(options);
|
|
477
|
+
span.setAttribute("mockdb.agent_id", ctx.agentId);
|
|
478
|
+
const data = await deleteMockDb(ctx);
|
|
479
|
+
emitResult("Mock DB Deleted", data);
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
export async function mockdbGuide(options = {}) {
|
|
483
|
+
if (!options.pretty)
|
|
484
|
+
setJsonMode(true);
|
|
485
|
+
const outPath = path.resolve(options.output?.trim() || "GUIDE.md");
|
|
486
|
+
fs.writeFileSync(outPath, MOCKDB_GUIDE);
|
|
487
|
+
const result = {
|
|
488
|
+
written: true,
|
|
489
|
+
path: outPath,
|
|
490
|
+
bytes: Buffer.byteLength(MOCKDB_GUIDE),
|
|
491
|
+
};
|
|
492
|
+
if (isJsonMode()) {
|
|
493
|
+
outputJson(result);
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
write(`${heading("Mock DB Guide Written", outPath)}\n ${chalk.gray("Size:")} ${result.bytes} bytes`);
|
|
497
|
+
}
|
|
498
|
+
export async function mockdbMenu(options = {}) {
|
|
499
|
+
// Like every mockdb subcommand, the overview defaults to the JSON envelope
|
|
500
|
+
// (these commands are primarily consumed by tooling / coding agents).
|
|
501
|
+
// `--pretty` opts into the human view.
|
|
502
|
+
if (!options.pretty)
|
|
503
|
+
setJsonMode(true);
|
|
504
|
+
const commands = [
|
|
505
|
+
{ name: "provision", description: "Create the agent's mock DB; store runtime + management keys" },
|
|
506
|
+
{ name: "describe", description: "Schema, relationships, relative-field flags, endpoints, row counts" },
|
|
507
|
+
{ name: "collections create / list", description: "Create or list collections (tables)" },
|
|
508
|
+
{ name: "seed", description: "Seed base rows into a collection" },
|
|
509
|
+
{ name: "endpoint create / list", description: "Declare or list read/insert/update/delete endpoints" },
|
|
510
|
+
{ name: "execute", description: "Run an endpoint with the runtime key (test, per-session)" },
|
|
511
|
+
{ name: "session-get / session-reset", description: "Inspect or reset a session's overlay" },
|
|
512
|
+
{ name: "rotate-mgmt-key / rotate-runtime-key", description: "Mint fresh keys" },
|
|
513
|
+
{ name: "export", description: "Export schema + base data + endpoints" },
|
|
514
|
+
{ name: "keys", description: "Show locally stored key prefixes (no secrets)" },
|
|
515
|
+
{ name: "delete", description: "Permanently delete the mock DB (--force)" },
|
|
516
|
+
{ name: "guide", description: "Write the CLI guide to GUIDE.md" },
|
|
517
|
+
];
|
|
518
|
+
if (isJsonMode()) {
|
|
519
|
+
outputJson({
|
|
520
|
+
note: "Per-agent mock database for building/testing agents. Subcommands default to JSON; pass --pretty for the human view.",
|
|
521
|
+
commands,
|
|
522
|
+
});
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
const out = [
|
|
526
|
+
heading("Mock DB", "Per-agent mock database for building/testing agents"),
|
|
527
|
+
"",
|
|
528
|
+
sectionTitle("Commands"),
|
|
529
|
+
indent(table(["Command", "Description"], commands.map((c) => [c.name, c.description]))),
|
|
530
|
+
"",
|
|
531
|
+
chalk.gray("Run aui mockdb <command> --help for flags, or aui mockdb guide for the full how-to."),
|
|
532
|
+
];
|
|
533
|
+
write(out.join("\n"));
|
|
534
|
+
}
|
|
535
|
+
//# sourceMappingURL=mockdb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockdb.js","sourceRoot":"","sources":["../../src/commands/mockdb.tsx"],"names":[],"mappings":"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"}
|