db4ai 0.1.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.
Files changed (79) hide show
  1. package/README.md +438 -0
  2. package/dist/cli/bin.d.ts +50 -0
  3. package/dist/cli/bin.d.ts.map +1 -0
  4. package/dist/cli/bin.js +418 -0
  5. package/dist/cli/bin.js.map +1 -0
  6. package/dist/cli/dashboard/App.d.ts +16 -0
  7. package/dist/cli/dashboard/App.d.ts.map +1 -0
  8. package/dist/cli/dashboard/App.js +116 -0
  9. package/dist/cli/dashboard/App.js.map +1 -0
  10. package/dist/cli/dashboard/components/index.d.ts +70 -0
  11. package/dist/cli/dashboard/components/index.d.ts.map +1 -0
  12. package/dist/cli/dashboard/components/index.js +192 -0
  13. package/dist/cli/dashboard/components/index.js.map +1 -0
  14. package/dist/cli/dashboard/hooks/index.d.ts +76 -0
  15. package/dist/cli/dashboard/hooks/index.d.ts.map +1 -0
  16. package/dist/cli/dashboard/hooks/index.js +201 -0
  17. package/dist/cli/dashboard/hooks/index.js.map +1 -0
  18. package/dist/cli/dashboard/index.d.ts +17 -0
  19. package/dist/cli/dashboard/index.d.ts.map +1 -0
  20. package/dist/cli/dashboard/index.js +16 -0
  21. package/dist/cli/dashboard/index.js.map +1 -0
  22. package/dist/cli/dashboard/types.d.ts +84 -0
  23. package/dist/cli/dashboard/types.d.ts.map +1 -0
  24. package/dist/cli/dashboard/types.js +5 -0
  25. package/dist/cli/dashboard/types.js.map +1 -0
  26. package/dist/cli/dashboard/views/index.d.ts +51 -0
  27. package/dist/cli/dashboard/views/index.d.ts.map +1 -0
  28. package/dist/cli/dashboard/views/index.js +72 -0
  29. package/dist/cli/dashboard/views/index.js.map +1 -0
  30. package/dist/cli/index.d.ts +16 -0
  31. package/dist/cli/index.d.ts.map +1 -0
  32. package/dist/cli/index.js +48 -0
  33. package/dist/cli/index.js.map +1 -0
  34. package/dist/cli/runtime/index.d.ts +236 -0
  35. package/dist/cli/runtime/index.d.ts.map +1 -0
  36. package/dist/cli/runtime/index.js +705 -0
  37. package/dist/cli/runtime/index.js.map +1 -0
  38. package/dist/cli/scanner/index.d.ts +90 -0
  39. package/dist/cli/scanner/index.d.ts.map +1 -0
  40. package/dist/cli/scanner/index.js +640 -0
  41. package/dist/cli/scanner/index.js.map +1 -0
  42. package/dist/cli/seed/index.d.ts +160 -0
  43. package/dist/cli/seed/index.d.ts.map +1 -0
  44. package/dist/cli/seed/index.js +774 -0
  45. package/dist/cli/seed/index.js.map +1 -0
  46. package/dist/cli/sync/index.d.ts +197 -0
  47. package/dist/cli/sync/index.d.ts.map +1 -0
  48. package/dist/cli/sync/index.js +706 -0
  49. package/dist/cli/sync/index.js.map +1 -0
  50. package/dist/cli/terminal.d.ts +60 -0
  51. package/dist/cli/terminal.d.ts.map +1 -0
  52. package/dist/cli/terminal.js +210 -0
  53. package/dist/cli/terminal.js.map +1 -0
  54. package/dist/cli/workflow/index.d.ts +152 -0
  55. package/dist/cli/workflow/index.d.ts.map +1 -0
  56. package/dist/cli/workflow/index.js +308 -0
  57. package/dist/cli/workflow/index.js.map +1 -0
  58. package/dist/errors.d.ts +43 -0
  59. package/dist/errors.d.ts.map +1 -0
  60. package/dist/errors.js +47 -0
  61. package/dist/errors.js.map +1 -0
  62. package/dist/handlers.d.ts +147 -0
  63. package/dist/handlers.d.ts.map +1 -0
  64. package/dist/handlers.js +39 -0
  65. package/dist/handlers.js.map +1 -0
  66. package/dist/index.d.ts +1281 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +3164 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/types.d.ts +215 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +12 -0
  73. package/dist/types.js.map +1 -0
  74. package/docs/api-reference.mdx +3 -0
  75. package/docs/examples.mdx +3 -0
  76. package/docs/getting-started.mdx +3 -0
  77. package/docs/index.mdx +3 -0
  78. package/docs/schema-dsl.mdx +3 -0
  79. package/package.json +121 -0
@@ -0,0 +1,418 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * db4ai CLI - Command Line Interface
4
+ *
5
+ * Entry point for the db4ai CLI tool.
6
+ */
7
+ import { existsSync } from 'fs';
8
+ import { resolve } from 'path';
9
+ // Version from package.json
10
+ export const CLI_VERSION = '0.1.0';
11
+ const COMMANDS = ['scan', 'seed', 'workflow', 'sync', 'dashboard'];
12
+ const COMMAND_DESCRIPTIONS = {
13
+ scan: 'Scan project for schemas',
14
+ seed: 'Run seed files',
15
+ workflow: 'Execute workflows',
16
+ sync: 'Synchronize data',
17
+ dashboard: 'Launch dashboard',
18
+ };
19
+ // Main help text
20
+ function getMainHelp() {
21
+ let help = 'Usage: db4ai [options] [command]\n\n';
22
+ help += 'Commands:\n';
23
+ for (const cmd of COMMANDS) {
24
+ help += ` ${cmd.padEnd(12)} ${COMMAND_DESCRIPTIONS[cmd]}\n`;
25
+ }
26
+ help += '\nGlobal Options:\n';
27
+ help += ' --version, -v Show version number\n';
28
+ help += ' --help, -h Show help\n';
29
+ help += ' --config <file> Path to config file\n';
30
+ help += ' --verbose Enable verbose output\n';
31
+ help += ' --quiet Suppress output\n';
32
+ help += ' --no-color Disable colored output\n';
33
+ help += ' --json Output as JSON\n';
34
+ return help;
35
+ }
36
+ // Command-specific help
37
+ function getScanHelp() {
38
+ return `Usage: db4ai scan [options]
39
+
40
+ Scan project for schemas
41
+
42
+ Options:
43
+ --root <path> Root directory to scan
44
+ --include <glob> Glob pattern for files to include
45
+ --exclude <glob> Glob pattern for files to exclude
46
+ --json Output as JSON
47
+ --help Show help
48
+ `;
49
+ }
50
+ function getSeedHelp() {
51
+ return `Usage: db4ai seed [file] [options]
52
+
53
+ Run seed files
54
+
55
+ Options:
56
+ --dry-run Show what would be created without making changes
57
+ --concurrency <n> Number of concurrent operations
58
+ --continue-on-error Continue running even if errors occur
59
+ --reset Reset before seeding
60
+ --help Show help
61
+ `;
62
+ }
63
+ function getWorkflowHelp() {
64
+ return `Usage: db4ai workflow [name] [options]
65
+
66
+ Execute workflows
67
+
68
+ Options:
69
+ --list List all workflows
70
+ --watch Watch for changes
71
+ --timeout <ms> Timeout in milliseconds
72
+ --help Show help
73
+ `;
74
+ }
75
+ function getSyncHelp() {
76
+ return `Usage: db4ai sync [subcommand] [options]
77
+
78
+ Synchronize data
79
+
80
+ Subcommands:
81
+ push Push local changes to remote
82
+ pull Pull remote changes to local
83
+
84
+ Options:
85
+ --remote <url> Remote URL
86
+ --force Force sync
87
+ --conflict-strategy Strategy for handling conflicts
88
+ --help Show help
89
+ `;
90
+ }
91
+ function getSyncPushHelp() {
92
+ return `Usage: db4ai sync push [options]
93
+
94
+ Push local changes to remote
95
+
96
+ Options:
97
+ --remote <url> Remote URL
98
+ --force Force push
99
+ --help Show help
100
+ `;
101
+ }
102
+ function getSyncPullHelp() {
103
+ return `Usage: db4ai sync pull [options]
104
+
105
+ Pull remote changes to local
106
+
107
+ Options:
108
+ --remote <url> Remote URL
109
+ --force Force pull
110
+ --help Show help
111
+ `;
112
+ }
113
+ function getDashboardHelp() {
114
+ return `Usage: db4ai dashboard [options]
115
+
116
+ Launch dashboard
117
+
118
+ Options:
119
+ --port <port> Port to run on
120
+ --db <path> Path to database
121
+ --open Open in browser
122
+ --help Show help
123
+ `;
124
+ }
125
+ // Find similar commands for typo suggestions
126
+ function findSimilarCommand(input) {
127
+ const threshold = 2; // Levenshtein distance threshold
128
+ function levenshtein(a, b) {
129
+ const matrix = [];
130
+ for (let i = 0; i <= b.length; i++) {
131
+ matrix[i] = [i];
132
+ }
133
+ for (let j = 0; j <= a.length; j++) {
134
+ matrix[0][j] = j;
135
+ }
136
+ for (let i = 1; i <= b.length; i++) {
137
+ for (let j = 1; j <= a.length; j++) {
138
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
139
+ matrix[i][j] = matrix[i - 1][j - 1];
140
+ }
141
+ else {
142
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
143
+ }
144
+ }
145
+ }
146
+ return matrix[b.length][a.length];
147
+ }
148
+ let closest = null;
149
+ let closestDistance = Infinity;
150
+ for (const cmd of COMMANDS) {
151
+ const distance = levenshtein(input, cmd);
152
+ if (distance < closestDistance && distance <= threshold) {
153
+ closest = cmd;
154
+ closestDistance = distance;
155
+ }
156
+ }
157
+ return closest;
158
+ }
159
+ /**
160
+ * Parse CLI arguments into a structured format
161
+ * @param args - Raw command line arguments (process.argv.slice(2))
162
+ * @returns Parsed arguments with flags, command, and remaining args
163
+ */
164
+ export function parseArgs(args) {
165
+ const result = {
166
+ version: false,
167
+ help: false,
168
+ args: [],
169
+ verbose: false,
170
+ quiet: false,
171
+ noColor: false,
172
+ json: false,
173
+ };
174
+ let i = 0;
175
+ let foundCommand = false;
176
+ while (i < args.length) {
177
+ const arg = args[i];
178
+ if (!foundCommand) {
179
+ // Global flags before command
180
+ if (arg === '--version' || arg === '-v') {
181
+ result.version = true;
182
+ i++;
183
+ continue;
184
+ }
185
+ if (arg === '--help' || arg === '-h') {
186
+ result.help = true;
187
+ i++;
188
+ continue;
189
+ }
190
+ if (arg === '--config') {
191
+ result.config = args[i + 1];
192
+ i += 2;
193
+ continue;
194
+ }
195
+ if (arg === '--verbose') {
196
+ result.verbose = true;
197
+ i++;
198
+ continue;
199
+ }
200
+ if (arg === '--quiet') {
201
+ result.quiet = true;
202
+ i++;
203
+ continue;
204
+ }
205
+ if (arg === '--no-color') {
206
+ result.noColor = true;
207
+ i++;
208
+ continue;
209
+ }
210
+ if (arg === '--json') {
211
+ result.json = true;
212
+ i++;
213
+ continue;
214
+ }
215
+ // Check if it's a command
216
+ if (COMMANDS.includes(arg)) {
217
+ result.command = arg;
218
+ foundCommand = true;
219
+ i++;
220
+ continue;
221
+ }
222
+ // Unknown argument before command - treat as command (will error later)
223
+ if (!arg.startsWith('-')) {
224
+ result.command = arg;
225
+ foundCommand = true;
226
+ i++;
227
+ continue;
228
+ }
229
+ }
230
+ // After command, collect all remaining args
231
+ if (foundCommand) {
232
+ // Check for subcommand (for sync)
233
+ if (result.command === 'sync' && !result.subcommand && !arg.startsWith('-')) {
234
+ if (arg === 'push' || arg === 'pull') {
235
+ result.subcommand = arg;
236
+ i++;
237
+ continue;
238
+ }
239
+ }
240
+ // Check for global options after command
241
+ if (arg === '--verbose') {
242
+ result.verbose = true;
243
+ i++;
244
+ continue;
245
+ }
246
+ if (arg === '--quiet') {
247
+ result.quiet = true;
248
+ i++;
249
+ continue;
250
+ }
251
+ if (arg === '--help' || arg === '-h') {
252
+ result.help = true;
253
+ i++;
254
+ continue;
255
+ }
256
+ if (arg === '--json') {
257
+ result.json = true;
258
+ i++;
259
+ continue;
260
+ }
261
+ result.args.push(arg);
262
+ }
263
+ i++;
264
+ }
265
+ return result;
266
+ }
267
+ // Command handlers
268
+ export async function handleScan(args, streams) {
269
+ // Check for help
270
+ if (args.includes('--help') || args.includes('-h')) {
271
+ streams.stdout.write(getScanHelp());
272
+ return 0;
273
+ }
274
+ // Check for unknown options
275
+ for (const arg of args) {
276
+ if (arg.startsWith('--') && !['--root', '--include', '--exclude', '--json', '--verbose', '--quiet'].includes(arg)) {
277
+ streams.stderr.write(`Unknown option: ${arg}\n`);
278
+ return 2;
279
+ }
280
+ }
281
+ // Actual scan implementation would go here
282
+ streams.stdout.write('Scanning...\n');
283
+ return 0;
284
+ }
285
+ export async function handleSeed(args, streams) {
286
+ // Check for help
287
+ if (args.includes('--help') || args.includes('-h')) {
288
+ streams.stdout.write(getSeedHelp());
289
+ return 0;
290
+ }
291
+ // Actual seed implementation would go here
292
+ streams.stdout.write('Seeding...\n');
293
+ return 0;
294
+ }
295
+ export async function handleWorkflow(args, streams) {
296
+ // Check for help
297
+ if (args.includes('--help') || args.includes('-h')) {
298
+ streams.stdout.write(getWorkflowHelp());
299
+ return 0;
300
+ }
301
+ // Actual workflow implementation would go here
302
+ streams.stdout.write('Running workflow...\n');
303
+ return 0;
304
+ }
305
+ export async function handleSync(args, subcommand, streams) {
306
+ // Check for help on main sync command
307
+ if (args.includes('--help') || args.includes('-h')) {
308
+ if (subcommand === 'push') {
309
+ streams.stdout.write(getSyncPushHelp());
310
+ }
311
+ else if (subcommand === 'pull') {
312
+ streams.stdout.write(getSyncPullHelp());
313
+ }
314
+ else {
315
+ streams.stdout.write(getSyncHelp());
316
+ }
317
+ return 0;
318
+ }
319
+ // Actual sync implementation would go here
320
+ if (subcommand) {
321
+ streams.stdout.write(`Syncing (${subcommand})...\n`);
322
+ }
323
+ else {
324
+ streams.stdout.write('Syncing...\n');
325
+ }
326
+ return 0;
327
+ }
328
+ export async function handleDashboard(args, streams) {
329
+ // Check for help
330
+ if (args.includes('--help') || args.includes('-h')) {
331
+ streams.stdout.write(getDashboardHelp());
332
+ return 0;
333
+ }
334
+ // Actual dashboard implementation would go here
335
+ streams.stdout.write('Launching dashboard...\n');
336
+ return 0;
337
+ }
338
+ /**
339
+ * Main CLI entry point
340
+ * @param args - Command line arguments
341
+ * @param options - Optional output streams for testing
342
+ * @returns Exit code (0 = success, 1 = error, 2 = invalid args)
343
+ */
344
+ export async function run(args, options = {}) {
345
+ const streams = {
346
+ stdout: options.stdout || process.stdout,
347
+ stderr: options.stderr || process.stderr,
348
+ };
349
+ const parsed = parseArgs(args);
350
+ // Handle version
351
+ if (parsed.version) {
352
+ if (parsed.json) {
353
+ streams.stdout.write(JSON.stringify({ version: CLI_VERSION }) + '\n');
354
+ }
355
+ else {
356
+ streams.stdout.write(CLI_VERSION + '\n');
357
+ }
358
+ return 0;
359
+ }
360
+ // Check for config file if specified - do this early, before help
361
+ // Only error on missing config if it's a custom config file (not default db4.config.ts/js)
362
+ if (parsed.config) {
363
+ const configPath = resolve(process.cwd(), parsed.config);
364
+ const isDefaultConfig = parsed.config === 'db4.config.ts' || parsed.config === 'db4.config.js';
365
+ if (!existsSync(configPath) && !isDefaultConfig) {
366
+ streams.stderr.write(`Config file not found: ${parsed.config}\n`);
367
+ return 1;
368
+ }
369
+ }
370
+ // Handle help (no command)
371
+ if (parsed.help && !parsed.command) {
372
+ streams.stdout.write(getMainHelp());
373
+ return 0;
374
+ }
375
+ // No command - show help
376
+ if (!parsed.command) {
377
+ streams.stdout.write(getMainHelp());
378
+ return 0;
379
+ }
380
+ // Check for unknown command
381
+ if (!COMMANDS.includes(parsed.command)) {
382
+ const similar = findSimilarCommand(parsed.command);
383
+ streams.stderr.write(`Unknown command: ${parsed.command}\n`);
384
+ if (similar) {
385
+ streams.stderr.write(`Did you mean '${similar}'?\n`);
386
+ }
387
+ streams.stderr.write(`Run 'db4ai --help' for usage.\n`);
388
+ return 1;
389
+ }
390
+ // Route to command handler
391
+ // If help flag is set, pass it to the handler
392
+ const commandArgs = parsed.help ? ['--help', ...parsed.args] : parsed.args;
393
+ switch (parsed.command) {
394
+ case 'scan':
395
+ return handleScan(commandArgs, streams);
396
+ case 'seed':
397
+ return handleSeed(commandArgs, streams);
398
+ case 'workflow':
399
+ return handleWorkflow(commandArgs, streams);
400
+ case 'sync':
401
+ return handleSync(commandArgs, parsed.subcommand, streams);
402
+ case 'dashboard':
403
+ return handleDashboard(commandArgs, streams);
404
+ default:
405
+ streams.stderr.write(`Unknown command: ${parsed.command}\n`);
406
+ return 1;
407
+ }
408
+ }
409
+ // CLI entry point
410
+ if (process.argv[1] === import.meta.url.replace('file://', '') ||
411
+ process.argv[1]?.endsWith('/bin.ts') ||
412
+ process.argv[1]?.endsWith('/bin.js')) {
413
+ const args = process.argv.slice(2);
414
+ run(args).then((code) => {
415
+ process.exit(code);
416
+ });
417
+ }
418
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../cli/bin.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAE9B,4BAA4B;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAA;AAyBlC,MAAM,QAAQ,GAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;AAE7E,MAAM,oBAAoB,GAA4B;IACpD,IAAI,EAAE,0BAA0B;IAChC,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,mBAAmB;IAC7B,IAAI,EAAE,kBAAkB;IACxB,SAAS,EAAE,kBAAkB;CAC9B,CAAA;AAED,iBAAiB;AACjB,SAAS,WAAW;IAClB,IAAI,IAAI,GAAG,sCAAsC,CAAA;IACjD,IAAI,IAAI,aAAa,CAAA;IACrB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAA;IAC9D,CAAC;IACD,IAAI,IAAI,qBAAqB,CAAA;IAC7B,IAAI,IAAI,2CAA2C,CAAA;IACnD,IAAI,IAAI,iCAAiC,CAAA;IACzC,IAAI,IAAI,2CAA2C,CAAA;IACnD,IAAI,IAAI,6CAA6C,CAAA;IACrD,IAAI,IAAI,uCAAuC,CAAA;IAC/C,IAAI,IAAI,8CAA8C,CAAA;IACtD,IAAI,IAAI,sCAAsC,CAAA;IAC9C,OAAO,IAAI,CAAA;AACb,CAAC;AAED,wBAAwB;AACxB,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;CAUR,CAAA;AACD,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;CAUR,CAAA;AACD,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;;CASR,CAAA;AACD,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;CAaR,CAAA;AACD,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;CAQR,CAAA;AACD,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;CAQR,CAAA;AACD,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;;;;;;;;;CASR,CAAA;AACD,CAAC;AAED,6CAA6C;AAC7C,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,SAAS,GAAG,CAAC,CAAA,CAAC,iCAAiC;IAErD,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS;QACvC,MAAM,MAAM,GAAe,EAAE,CAAA;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBACrC,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACrB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EACxB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EACpB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CACrB,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,IAAI,OAAO,GAAkB,IAAI,CAAA;IACjC,IAAI,eAAe,GAAG,QAAQ,CAAA;IAE9B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACxC,IAAI,QAAQ,GAAG,eAAe,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;YACxD,OAAO,GAAG,GAAG,CAAA;YACb,eAAe,GAAG,QAAQ,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,MAAM,GAAe;QACzB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,KAAK;KACZ,CAAA;IAED,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,YAAY,GAAG,KAAK,CAAA;IAExB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAEnB,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,8BAA8B;YAC9B,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACxC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;gBACrB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;gBAClB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;gBACvB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC3B,CAAC,IAAI,CAAC,CAAA;gBACN,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;gBACxB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;gBACrB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;gBACnB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;gBACzB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;gBACrB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;gBAClB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YAED,0BAA0B;YAC1B,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAc,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,OAAO,GAAG,GAAc,CAAA;gBAC/B,YAAY,GAAG,IAAI,CAAA;gBACnB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YAED,wEAAwE;YACxE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,OAAO,GAAG,GAAc,CAAA;gBAC/B,YAAY,GAAG,IAAI,CAAA;gBACnB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,IAAI,YAAY,EAAE,CAAC;YACjB,kCAAkC;YAClC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5E,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBACrC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAA;oBACvB,CAAC,EAAE,CAAA;oBACH,SAAQ;gBACV,CAAC;YACH,CAAC;YAED,yCAAyC;YACzC,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;gBACxB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;gBACrB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;gBACnB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;gBAClB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;gBAClB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvB,CAAC;QAED,CAAC,EAAE,CAAA;IACL,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,mBAAmB;AACnB,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAc,EACd,OAAsB;IAEtB,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QACnC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,4BAA4B;IAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAA;YAChD,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IACrC,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAc,EACd,OAAsB;IAEtB,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QACnC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,2CAA2C;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IACpC,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAc,EACd,OAAsB;IAEtB,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAA;QACvC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAC7C,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAc,EACd,UAA8B,EAC9B,OAAsB;IAEtB,sCAAsC;IACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAA;QACzC,CAAC;aAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAA;QACzC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QACrC,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,2CAA2C;IAC3C,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,UAAU,QAAQ,CAAC,CAAA;IACtD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAc,EACd,OAAsB;IAEtB,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,gDAAgD;IAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAChD,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,IAAc,EACd,UAAkC,EAAE;IAEpC,MAAM,OAAO,GAAkB;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;QACxC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;KACzC,CAAA;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAE9B,iBAAiB;IACjB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;QACvE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;QAC1C,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,kEAAkE;IAClE,2FAA2F;IAC3F,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QACxD,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,KAAK,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,eAAe,CAAA;QAC9F,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,IAAI,CAAC,CAAA;YACjE,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QACnC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QACnC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAA;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,MAAM,CAAC,CAAA;QACtD,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACvD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,2BAA2B;IAC3B,8CAA8C;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;IAE1E,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACzC,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACzC,KAAK,UAAU;YACb,OAAO,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAC7C,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC5D,KAAK,WAAW;YACd,OAAO,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAC9C;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAA;YAC5D,OAAO,CAAC,CAAA;IACZ,CAAC;AACH,CAAC;AAED,kBAAkB;AAClB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Module 17: React Ink Dashboard - App Component
3
+ */
4
+ import React from 'react';
5
+ import type { DbConfig } from './types';
6
+ export interface AppProps {
7
+ db: DbConfig;
8
+ theme?: 'dark' | 'light';
9
+ onQuit?: () => void;
10
+ onAnnounce?: (message: string) => void;
11
+ onRetry?: () => void;
12
+ connectionError?: string;
13
+ children?: React.ReactNode;
14
+ }
15
+ export declare function App({ db, theme, onQuit, onAnnounce, onRetry, connectionError, children, }: AppProps): React.ReactElement;
16
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../cli/dashboard/App.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAsD,MAAM,OAAO,CAAA;AAE1E,OAAO,KAAK,EAAE,QAAQ,EAAwC,MAAM,SAAS,CAAA;AAgE7E,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,QAAQ,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,wBAAgB,GAAG,CAAC,EAClB,EAAE,EACF,KAAK,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,eAAe,EACf,QAAQ,GACT,EAAE,QAAQ,GAAG,KAAK,CAAC,YAAY,CA6I/B"}
@@ -0,0 +1,116 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Module 17: React Ink Dashboard - App Component
4
+ */
5
+ import React, { useState, useCallback } from 'react';
6
+ import { Box, Text, useApp } from 'ink';
7
+ import { useKeyboard, useStats, useActivity, useCascade, useWorkflow, useGeneration } from './hooks';
8
+ import { Layout, Header, HelpOverlay } from './components';
9
+ import { MainView, GenerateView, CascadeView, SeedView, WorkflowView, QueryView, LogsView, } from './views';
10
+ class ErrorBoundary extends React.Component {
11
+ constructor(props) {
12
+ super(props);
13
+ this.state = { hasError: false };
14
+ }
15
+ static getDerivedStateFromError(error) {
16
+ return { hasError: true, error };
17
+ }
18
+ componentDidCatch(error, errorInfo) {
19
+ console.error('Dashboard error:', error, errorInfo);
20
+ }
21
+ render() {
22
+ if (this.state.hasError) {
23
+ return (this.props.fallback ?? (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "red", children: "Something went wrong" }), _jsx(Text, { color: "gray", children: this.state.error?.message })] })));
24
+ }
25
+ return this.props.children;
26
+ }
27
+ }
28
+ export function App({ db, theme, onQuit, onAnnounce, onRetry, connectionError, children, }) {
29
+ const { exit } = useApp();
30
+ const [currentView, setCurrentView] = useState('main');
31
+ const [showHelp, setShowHelp] = useState(false);
32
+ // Data hooks
33
+ const { stats, loading: statsLoading } = useStats(db);
34
+ const { activity } = useActivity(db);
35
+ const { nodes: cascadeNodes } = useCascade(db);
36
+ const { workflow } = useWorkflow(db);
37
+ const { generate, generating } = useGeneration(db);
38
+ // Mock data for types
39
+ const [types] = useState(() => Object.keys(db.schema).map(name => ({
40
+ name,
41
+ count: Math.floor(Math.random() * 100),
42
+ lastGenerated: new Date(),
43
+ })));
44
+ // Navigation handlers
45
+ const handleQuit = useCallback(() => {
46
+ // Call the callback first to ensure it's tracked by tests
47
+ if (onQuit) {
48
+ onQuit();
49
+ }
50
+ // Then exit the app (wrapped to handle test environments gracefully)
51
+ try {
52
+ exit();
53
+ }
54
+ catch {
55
+ // In test environment, exit() may throw
56
+ }
57
+ }, [onQuit, exit]);
58
+ const handleBack = useCallback(() => {
59
+ if (showHelp) {
60
+ setShowHelp(false);
61
+ }
62
+ else if (currentView !== 'main') {
63
+ setCurrentView('main');
64
+ }
65
+ }, [showHelp, currentView]);
66
+ const handleViewChange = useCallback((view) => {
67
+ setCurrentView(view);
68
+ onAnnounce?.(`${view.charAt(0).toUpperCase() + view.slice(1)} view`);
69
+ }, [onAnnounce]);
70
+ // Keyboard navigation
71
+ useKeyboard({
72
+ onQuit: handleQuit,
73
+ onGenerate: () => handleViewChange('generate'),
74
+ onSeed: () => handleViewChange('seed'),
75
+ onWorkflow: () => handleViewChange('workflow'),
76
+ onCascade: () => handleViewChange('cascade'),
77
+ onQuery: () => handleViewChange('query'),
78
+ onLogs: () => handleViewChange('logs'),
79
+ onHelp: () => setShowHelp(h => !h),
80
+ onBack: handleBack,
81
+ onRetry,
82
+ });
83
+ // Handle generation
84
+ const handleGenerate = useCallback(async (type, options) => {
85
+ await generate(type, options);
86
+ }, [generate]);
87
+ // Render current view
88
+ const renderView = () => {
89
+ // Show connection error if present
90
+ if (connectionError) {
91
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "red", children: connectionError }), _jsx(Text, { color: "gray", children: "Press [r] to retry" })] }));
92
+ }
93
+ // Show loading state
94
+ if (statsLoading) {
95
+ return _jsx(Text, { color: "gray", children: "Loading..." });
96
+ }
97
+ switch (currentView) {
98
+ case 'generate':
99
+ return (_jsx(GenerateView, { types: types, onGenerate: handleGenerate, generating: generating }));
100
+ case 'cascade':
101
+ return _jsx(CascadeView, { nodes: cascadeNodes });
102
+ case 'seed':
103
+ return _jsx(SeedView, { seedFiles: [], onSeed: () => { } });
104
+ case 'workflow':
105
+ return _jsx(WorkflowView, { workflow: workflow });
106
+ case 'query':
107
+ return _jsx(QueryView, { db: db });
108
+ case 'logs':
109
+ return _jsx(LogsView, { logs: [] });
110
+ default:
111
+ return (_jsx(MainView, { stats: stats, types: types, activity: activity }));
112
+ }
113
+ };
114
+ return (_jsx(ErrorBoundary, { children: _jsxs(Layout, { header: _jsx(Header, { namespace: db.namespace, view: currentView !== 'main' ? currentView : undefined }), footer: _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "[g]enerate [s]eed [w]orkflow [c]ascade [/]query [l]ogs [?]help [q]uit" }) }), children: [showHelp ? (_jsx(HelpOverlay, { visible: true, context: currentView })) : (renderView()), children] }) }));
115
+ }
116
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../../cli/dashboard/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Module 17: React Ink Dashboard - Components
3
+ */
4
+ import React from 'react';
5
+ import type { DashboardStats, TypeInfo, ActivityEvent, CascadeNode } from '../types';
6
+ export interface LayoutProps {
7
+ children: React.ReactNode;
8
+ header?: React.ReactNode;
9
+ footer?: React.ReactNode;
10
+ }
11
+ export declare function Layout({ children, header, footer }: LayoutProps): React.ReactElement;
12
+ export interface HeaderProps {
13
+ namespace: string;
14
+ connected?: boolean;
15
+ view?: string;
16
+ }
17
+ export declare function Header({ namespace, connected, view }: HeaderProps): React.ReactElement;
18
+ export interface StatsProps {
19
+ stats: DashboardStats;
20
+ }
21
+ export declare function Stats({ stats }: StatsProps): React.ReactElement;
22
+ export interface TypeListProps {
23
+ types: TypeInfo[];
24
+ selectedIndex?: number;
25
+ onSelect?: (type: TypeInfo) => void;
26
+ maxWidth?: number;
27
+ }
28
+ export declare function TypeList({ types, selectedIndex, onSelect, maxWidth, }: TypeListProps): React.ReactElement;
29
+ export interface ActivityFeedProps {
30
+ events: ActivityEvent[];
31
+ limit?: number;
32
+ autoScroll?: boolean;
33
+ filter?: 'generate' | 'seed' | 'workflow';
34
+ }
35
+ export declare function ActivityFeed({ events, limit, autoScroll, filter, }: ActivityFeedProps): React.ReactElement;
36
+ export interface ProgressBarProps {
37
+ current: number;
38
+ total: number;
39
+ label?: string;
40
+ showCount?: boolean;
41
+ width?: number;
42
+ color?: string;
43
+ animated?: boolean;
44
+ }
45
+ export declare function ProgressBar({ current, total, label, showCount, width, color, }: ProgressBarProps): React.ReactElement;
46
+ export interface CascadeTreeProps {
47
+ nodes: CascadeNode[];
48
+ flat?: boolean;
49
+ onNodeSelect?: (node: CascadeNode) => void;
50
+ }
51
+ export declare function CascadeTree({ nodes, flat, onNodeSelect, }: CascadeTreeProps): React.ReactElement;
52
+ export interface TableProps<T extends Record<string, unknown>> {
53
+ data: T[];
54
+ columns: (keyof T)[];
55
+ headers?: Partial<Record<keyof T, string>>;
56
+ }
57
+ export declare function Table<T extends Record<string, unknown>>({ data, columns, headers, }: TableProps<T>): React.ReactElement;
58
+ export interface InputProps {
59
+ placeholder?: string;
60
+ value?: string;
61
+ onChange: (value: string) => void;
62
+ onSubmit?: (value: string) => void;
63
+ }
64
+ export declare function Input({ placeholder, value: initialValue, onChange, onSubmit, }: InputProps): React.ReactElement;
65
+ export interface HelpOverlayProps {
66
+ visible: boolean;
67
+ context?: string;
68
+ }
69
+ export declare function HelpOverlay({ visible, context }: HelpOverlayProps): React.ReactElement | null;
70
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../cli/dashboard/components/index.tsx"],"names":[],"mappings":"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"}