resolve-solo 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 (50) hide show
  1. package/README.md +199 -0
  2. package/dist/cli.d.ts +8 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +214 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/demo-generator.d.ts +12 -0
  7. package/dist/demo-generator.d.ts.map +1 -0
  8. package/dist/demo-generator.js +352 -0
  9. package/dist/demo-generator.js.map +1 -0
  10. package/dist/demo-output.d.ts +13 -0
  11. package/dist/demo-output.d.ts.map +1 -0
  12. package/dist/demo-output.js +116 -0
  13. package/dist/demo-output.js.map +1 -0
  14. package/dist/demo-schema.d.ts +66 -0
  15. package/dist/demo-schema.d.ts.map +1 -0
  16. package/dist/demo-schema.js +11 -0
  17. package/dist/demo-schema.js.map +1 -0
  18. package/dist/index.d.ts +9 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +10 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/investigation-types.d.ts +47 -0
  23. package/dist/investigation-types.d.ts.map +1 -0
  24. package/dist/investigation-types.js +5 -0
  25. package/dist/investigation-types.js.map +1 -0
  26. package/dist/investigation.d.ts +24 -0
  27. package/dist/investigation.d.ts.map +1 -0
  28. package/dist/investigation.js +135 -0
  29. package/dist/investigation.js.map +1 -0
  30. package/dist/output.d.ts +20 -0
  31. package/dist/output.d.ts.map +1 -0
  32. package/dist/output.js +151 -0
  33. package/dist/output.js.map +1 -0
  34. package/dist/parser.d.ts +16 -0
  35. package/dist/parser.d.ts.map +1 -0
  36. package/dist/parser.js +146 -0
  37. package/dist/parser.js.map +1 -0
  38. package/dist/storage.d.ts +47 -0
  39. package/dist/storage.d.ts.map +1 -0
  40. package/dist/storage.js +133 -0
  41. package/dist/storage.js.map +1 -0
  42. package/dist/timeline.d.ts +27 -0
  43. package/dist/timeline.d.ts.map +1 -0
  44. package/dist/timeline.js +145 -0
  45. package/dist/timeline.js.map +1 -0
  46. package/dist/types.d.ts +10 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +5 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +57 -0
package/README.md ADDED
@@ -0,0 +1,199 @@
1
+ # Resolve Solo
2
+
3
+ A local-first CLI on-call assistant for individual developers. Natural language investigation support with timeline analysis, incident recall, and reporting—all demo-grade with mock data.
4
+
5
+ ## Quick Start
6
+
7
+ Try the demo with a single command:
8
+
9
+ ```bash
10
+ npx git+https://github.cbhq.net/srinath-sinha/resolve-solo demo
11
+ ```
12
+
13
+ This will:
14
+ - Seed realistic demo data (incidents, deploys, logs, services)
15
+ - Run an automated investigation
16
+ - Show you what Resolve Solo can do
17
+
18
+ ## Installation
19
+
20
+ ### Option 1: Run directly via npx (Recommended)
21
+
22
+ No installation needed! Just run:
23
+
24
+ ```bash
25
+ npx git+https://github.cbhq.net/srinath-sinha/resolve-solo <command>
26
+ ```
27
+
28
+ ### Option 2: Install from GitHub
29
+
30
+ ```bash
31
+ npm install -g git+https://github.cbhq.net/srinath-sinha/resolve-solo
32
+ ```
33
+
34
+ Then use the `resolveai` command:
35
+
36
+ ```bash
37
+ resolveai demo
38
+ ```
39
+
40
+ ### Option 3: Install from npm (when published)
41
+
42
+ ```bash
43
+ npm install -g resolve-solo
44
+ resolveai demo
45
+ ```
46
+
47
+ ## Usage
48
+
49
+ Resolve Solo uses **natural language** commands—no flags needed.
50
+
51
+ ### Try these commands:
52
+
53
+ ```bash
54
+ # See what Resolve Solo can do
55
+ resolveai demo
56
+
57
+ # Get help
58
+ resolveai help
59
+
60
+ # Investigate an issue (demo mode)
61
+ resolveai investigate timeouts
62
+
63
+ # Show details for a timeline item
64
+ resolveai show details for item 3
65
+
66
+ # Add a note to your investigation
67
+ resolveai note checking database connection pool
68
+
69
+ # Close an investigation
70
+ resolveai close fixed connection pool size
71
+
72
+ # Generate weekly report
73
+ resolveai report weekly
74
+
75
+ # Check system health
76
+ resolveai doctor
77
+
78
+ # Uninstall
79
+ resolveai uninstall
80
+ ```
81
+
82
+ ## What You'll See
83
+
84
+ When you run `resolveai demo`, you'll get:
85
+
86
+ **A) What changed recently** - Timeline of deploys, errors, and past incidents
87
+ **B) Where to look next** - Investigation paths with confidence levels
88
+ **C) Similar past incidents** - What worked before, what didn't
89
+ **D) What I'm missing** - Gaps in observability
90
+
91
+ All demo data is clearly labeled with `(demo)` so you know it's synthetic.
92
+
93
+ ## Data Storage
94
+
95
+ Resolve Solo stores all data locally in `./.resolveai/`:
96
+
97
+ ```
98
+ .resolveai/
99
+ ├── demo-data/ # Demo dataset (services, deploys, logs, incidents)
100
+ ├── runs/ # Investigation sessions (created in M6+)
101
+ ├── memory.sqlite # Incident recall database (created in M6+)
102
+ └── reports/ # Weekly reports (created in M8+)
103
+ ```
104
+
105
+ Export your demo data:
106
+
107
+ ```bash
108
+ # See where demo data is stored
109
+ resolveai doctor
110
+
111
+ # Copy demo data elsewhere
112
+ cp -r .resolveai/demo-data ~/my-demo-backup/
113
+
114
+ # Reset demo data
115
+ resolveai demo reset
116
+ ```
117
+
118
+ ## Requirements
119
+
120
+ - **Node.js 18+** (uses ES modules)
121
+ - Runs on macOS, Linux, Windows
122
+
123
+ ## Development
124
+
125
+ Want to contribute or modify Resolve Solo?
126
+
127
+ ```bash
128
+ # Clone the repository
129
+ git clone https://github.com/srinathsinha/resolve-solo.git
130
+ cd resolve-solo
131
+
132
+ # Install dependencies
133
+ npm install
134
+
135
+ # Run in development mode
136
+ npm run dev
137
+
138
+ # Run tests
139
+ npm test
140
+
141
+ # Build for distribution
142
+ npm run build
143
+
144
+ # Type-check
145
+ npm run typecheck
146
+ ```
147
+
148
+ ## Current Status
149
+
150
+ **Version**: 0.1.0 (Demo Release)
151
+ **Milestones Complete**: M1-M4 (4/12)
152
+
153
+ - ✅ M1: Project Foundation
154
+ - ✅ M2: CLI Entry & Help
155
+ - ✅ M3: Demo Data System
156
+ - ✅ M4: Flow A - First-Time Demo
157
+ - 🚧 M5-M11: Interactive investigation, sessions, reports (planned)
158
+
159
+ **This is a demo release** - all investigations use mock data. Real integrations with observability tools (Datadog, Sentry, PagerDuty, etc.) are planned for future releases.
160
+
161
+ ## Uninstall
162
+
163
+ To remove Resolve Solo:
164
+
165
+ ```bash
166
+ # If installed globally
167
+ resolveai uninstall
168
+
169
+ # Or manually
170
+ npm uninstall -g resolve-solo # or github:srinathsinha/resolve-solo
171
+
172
+ # Remove local data (optional)
173
+ rm -rf .resolveai
174
+ ```
175
+
176
+ ## Architecture
177
+
178
+ - **Language**: TypeScript (compiled to ESM JavaScript)
179
+ - **Test Framework**: Vitest
180
+ - **CLI**: Natural language parser (no flag dependencies)
181
+ - **Data**: Deterministic mock generation (same seed = identical output)
182
+ - **Storage**: JSON files + SQLite (planned)
183
+
184
+ ## Documentation
185
+
186
+ - `SPEC.md` - Requirements specification
187
+ - `PLAN.md` - Implementation milestones
188
+ - `DECISIONS.md` - Key technical decisions
189
+ - `CHANGELOG.md` - Progress log
190
+ - `BUGLOG.md` - Bug tracking
191
+ - `CONTEXT.md` - Cross-session context
192
+
193
+ ## License
194
+
195
+ MIT
196
+
197
+ ## Credits
198
+
199
+ Built by [Resolve.ai](https://resolve.ai) - On-call assistant for engineers.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Resolve Solo CLI Entry Point
4
+ *
5
+ * Natural language CLI for on-call investigation assistance.
6
+ */
7
+ export declare function main(args?: string[]): Promise<void>;
8
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AA4BH,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAgEhE"}
package/dist/cli.js ADDED
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Resolve Solo CLI Entry Point
4
+ *
5
+ * Natural language CLI for on-call investigation assistance.
6
+ */
7
+ import { parseIntent } from './parser.js';
8
+ import { showWelcome, showHelp, showUnknownCommand, showNotImplemented, } from './output.js';
9
+ import { generateDemoData } from './demo-generator.js';
10
+ import { saveDemoData, loadDemoData, deleteDemoData, demoDataExists, getStorageInfo, } from './storage.js';
11
+ import { buildTimeline, deduplicateTimeline } from './timeline.js';
12
+ import { generateInvestigationPaths, findRecallMatches, detectMissingSignals, generateSuggestions, } from './investigation.js';
13
+ import { displayInvestigation, promptTimeSaved } from './demo-output.js';
14
+ import chalk from 'chalk';
15
+ export async function main(args = process.argv.slice(2)) {
16
+ // Join all args into a single natural language input
17
+ const input = args.join(' ').trim();
18
+ // No args = welcome message
19
+ if (!input) {
20
+ showWelcome();
21
+ return;
22
+ }
23
+ // Parse the natural language input
24
+ const parsed = parseIntent(input);
25
+ // Route based on intent
26
+ switch (parsed.intent) {
27
+ case 'help':
28
+ showHelp();
29
+ break;
30
+ case 'demo':
31
+ await handleDemo();
32
+ break;
33
+ case 'demo-seed':
34
+ handleDemoSeed();
35
+ break;
36
+ case 'demo-reset':
37
+ handleDemoReset();
38
+ break;
39
+ case 'investigate':
40
+ showNotImplemented('investigate');
41
+ break;
42
+ case 'details':
43
+ showNotImplemented('details');
44
+ break;
45
+ case 'note':
46
+ showNotImplemented('note');
47
+ break;
48
+ case 'close':
49
+ showNotImplemented('close');
50
+ break;
51
+ case 'report-weekly':
52
+ showNotImplemented('report weekly');
53
+ break;
54
+ case 'doctor':
55
+ showNotImplemented('doctor');
56
+ break;
57
+ case 'uninstall':
58
+ showNotImplemented('uninstall');
59
+ break;
60
+ case 'unknown':
61
+ default:
62
+ showUnknownCommand(input);
63
+ break;
64
+ }
65
+ }
66
+ /**
67
+ * Handle demo command (Flow A: automated investigation)
68
+ */
69
+ async function handleDemo() {
70
+ console.log();
71
+ console.log(chalk.cyan('🔍 Running demo investigation...'));
72
+ console.log();
73
+ // Step 1: Seed data if needed
74
+ if (!demoDataExists()) {
75
+ console.log(chalk.gray('Seeding demo data...'));
76
+ const dataset = generateDemoData();
77
+ saveDemoData(dataset);
78
+ console.log(chalk.green('✓ Demo data ready'));
79
+ console.log();
80
+ }
81
+ // Step 2: Load demo data
82
+ const dataset = loadDemoData();
83
+ if (!dataset) {
84
+ console.log(chalk.red('✗ Failed to load demo data'));
85
+ console.log();
86
+ console.log('Try running:');
87
+ console.log(chalk.cyan(' resolveai demo reset'));
88
+ console.log();
89
+ return;
90
+ }
91
+ // Step 3: Run investigation for "API Gateway timeout spike"
92
+ const query = 'API Gateway timeout spike';
93
+ console.log(chalk.gray(`Investigating: "${query}"`));
94
+ console.log();
95
+ // Build timeline
96
+ const rawTimeline = buildTimeline(dataset, {
97
+ hoursAgo: 48, // Last 2 days for demo
98
+ maxItems: 20,
99
+ });
100
+ const timeline = deduplicateTimeline(rawTimeline);
101
+ // Generate investigation paths
102
+ const paths = generateInvestigationPaths(timeline, dataset);
103
+ // Find similar past incidents
104
+ const recall = findRecallMatches(query, dataset);
105
+ // Detect missing signals
106
+ const missingSignals = detectMissingSignals(timeline);
107
+ // Generate suggestions
108
+ const suggestions = generateSuggestions(timeline);
109
+ // Create investigation result
110
+ const result = {
111
+ mode: 'demo',
112
+ sessionId: `demo-${Date.now()}`,
113
+ query,
114
+ timeWindow: 'Last 48 hours',
115
+ timeline,
116
+ paths,
117
+ recall,
118
+ missingSignals,
119
+ suggestions,
120
+ };
121
+ // Step 4: Display investigation
122
+ displayInvestigation(result);
123
+ // Step 5: Prompt for time saved
124
+ const timeSaved = await promptTimeSaved();
125
+ console.log(chalk.green(`✓ Recorded: ${timeSaved} minutes saved`));
126
+ console.log();
127
+ // Step 6: Suggest next commands
128
+ console.log(chalk.bold('Try these next:'));
129
+ console.log();
130
+ console.log(chalk.cyan(' resolveai investigate schema mismatch'));
131
+ console.log(chalk.cyan(' resolveai what changed in the last 2 hours'));
132
+ console.log(chalk.cyan(' resolveai report weekly'));
133
+ console.log();
134
+ console.log(chalk.gray('To remove this demo later:'));
135
+ console.log(chalk.gray(' resolveai uninstall'));
136
+ console.log();
137
+ }
138
+ /**
139
+ * Handle demo seed command
140
+ */
141
+ function handleDemoSeed() {
142
+ console.log();
143
+ console.log(chalk.cyan('🌱 Seeding demo data...'));
144
+ console.log();
145
+ const alreadyExists = demoDataExists();
146
+ if (alreadyExists) {
147
+ console.log(chalk.yellow('⚠️ Demo data already exists.'));
148
+ console.log();
149
+ console.log('To regenerate, use:');
150
+ console.log(chalk.cyan(' resolveai demo reset'));
151
+ console.log();
152
+ const info = getStorageInfo();
153
+ if (info.counts) {
154
+ console.log('Current dataset:');
155
+ console.log(chalk.gray(` Services: ${info.counts.services}`));
156
+ console.log(chalk.gray(` Deploys: ${info.counts.deploys}`));
157
+ console.log(chalk.gray(` Logs: ${info.counts.logs}`));
158
+ console.log(chalk.gray(` Incidents: ${info.counts.incidents}`));
159
+ console.log(chalk.gray(` Location: ${info.path}`));
160
+ }
161
+ console.log();
162
+ return;
163
+ }
164
+ // Generate deterministic data
165
+ const dataset = generateDemoData();
166
+ saveDemoData(dataset);
167
+ console.log(chalk.green('✅ Demo data seeded successfully!'));
168
+ console.log();
169
+ console.log('Generated:');
170
+ console.log(chalk.gray(` ${dataset.services.length} services`));
171
+ console.log(chalk.gray(` ${dataset.deploys.length} deploy events`));
172
+ console.log(chalk.gray(` ${dataset.logs.length} log entries`));
173
+ console.log(chalk.gray(` ${dataset.incidents.length} past incidents`));
174
+ console.log();
175
+ console.log(chalk.gray(`Location: ${getStorageInfo().path}`));
176
+ console.log();
177
+ console.log('Next steps:');
178
+ console.log(chalk.cyan(' resolveai demo'));
179
+ console.log(chalk.cyan(' resolveai investigate timeouts'));
180
+ console.log();
181
+ }
182
+ /**
183
+ * Handle demo reset command
184
+ */
185
+ function handleDemoReset() {
186
+ console.log();
187
+ console.log(chalk.cyan('🔄 Resetting demo data...'));
188
+ console.log();
189
+ const exists = demoDataExists();
190
+ if (exists) {
191
+ deleteDemoData();
192
+ console.log(chalk.gray('Deleted existing demo data'));
193
+ }
194
+ // Generate fresh data
195
+ const dataset = generateDemoData();
196
+ saveDemoData(dataset);
197
+ console.log(chalk.green('✅ Demo data reset successfully!'));
198
+ console.log();
199
+ console.log('Generated:');
200
+ console.log(chalk.gray(` ${dataset.services.length} services`));
201
+ console.log(chalk.gray(` ${dataset.deploys.length} deploy events`));
202
+ console.log(chalk.gray(` ${dataset.logs.length} log entries`));
203
+ console.log(chalk.gray(` ${dataset.incidents.length} past incidents`));
204
+ console.log();
205
+ console.log(chalk.gray(`Location: ${getStorageInfo().path}`));
206
+ console.log();
207
+ }
208
+ // Only run if called directly (not imported)
209
+ // Always run main() when this file is executed (not imported as a module)
210
+ main().catch((error) => {
211
+ console.error('Error:', error);
212
+ process.exit(1);
213
+ });
214
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,qDAAqD;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpC,4BAA4B;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,WAAW,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAElC,wBAAwB;IACxB,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,MAAM;YACT,QAAQ,EAAE,CAAC;YACX,MAAM;QAER,KAAK,MAAM;YACT,MAAM,UAAU,EAAE,CAAC;YACnB,MAAM;QAER,KAAK,WAAW;YACd,cAAc,EAAE,CAAC;YACjB,MAAM;QAER,KAAK,YAAY;YACf,eAAe,EAAE,CAAC;YAClB,MAAM;QAER,KAAK,aAAa;YAChB,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAClC,MAAM;QAER,KAAK,SAAS;YACZ,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAC9B,MAAM;QAER,KAAK,MAAM;YACT,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC3B,MAAM;QAER,KAAK,OAAO;YACV,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM;QAER,KAAK,eAAe;YAClB,kBAAkB,CAAC,eAAe,CAAC,CAAC;YACpC,MAAM;QAER,KAAK,QAAQ;YACX,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM;QAER,KAAK,WAAW;YACd,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAChC,MAAM;QAER,KAAK,SAAS,CAAC;QACf;YACE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM;IACV,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU;IACvB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,8BAA8B;IAC9B,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,yBAAyB;IACzB,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,4DAA4D;IAC5D,MAAM,KAAK,GAAG,2BAA2B,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,iBAAiB;IACjB,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,EAAE;QACzC,QAAQ,EAAE,EAAE,EAAE,uBAAuB;QACrC,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAElD,+BAA+B;IAC/B,MAAM,KAAK,GAAG,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE5D,8BAA8B;IAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEjD,yBAAyB;IACzB,MAAM,cAAc,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAEtD,uBAAuB;IACvB,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAElD,8BAA8B;IAC9B,MAAM,MAAM,GAAwB;QAClC,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;QAC/B,KAAK;QACL,UAAU,EAAE,eAAe;QAC3B,QAAQ;QACR,KAAK;QACL,MAAM;QACN,cAAc;QACd,WAAW;KACZ,CAAC;IAEF,gCAAgC;IAChC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,gCAAgC;IAChC,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,SAAS,gBAAgB,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,gCAAgC;IAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc;IACrB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,aAAa,GAAG,cAAc,EAAE,CAAC;IACvC,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,IAAI,MAAM,EAAE,CAAC;QACX,cAAc,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,sBAAsB;IACtB,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,6CAA6C;AAC7C,0EAA0E;AAC1E,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Demo Data Generator
3
+ *
4
+ * Generates deterministic mock data for demo mode.
5
+ * Uses a fixed seed to ensure reproducibility.
6
+ */
7
+ import type { DemoDataset } from './demo-schema.js';
8
+ /**
9
+ * Generate complete demo dataset
10
+ */
11
+ export declare function generateDemoData(seed?: number, baseDate?: Date): DemoDataset;
12
+ //# sourceMappingURL=demo-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-generator.d.ts","sourceRoot":"","sources":["../src/demo-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,kBAAkB,CAAC;AA6W1B;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAkB,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,WAAW,CAoBvF"}