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.
- package/README.md +199 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +214 -0
- package/dist/cli.js.map +1 -0
- package/dist/demo-generator.d.ts +12 -0
- package/dist/demo-generator.d.ts.map +1 -0
- package/dist/demo-generator.js +352 -0
- package/dist/demo-generator.js.map +1 -0
- package/dist/demo-output.d.ts +13 -0
- package/dist/demo-output.d.ts.map +1 -0
- package/dist/demo-output.js +116 -0
- package/dist/demo-output.js.map +1 -0
- package/dist/demo-schema.d.ts +66 -0
- package/dist/demo-schema.d.ts.map +1 -0
- package/dist/demo-schema.js +11 -0
- package/dist/demo-schema.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/investigation-types.d.ts +47 -0
- package/dist/investigation-types.d.ts.map +1 -0
- package/dist/investigation-types.js +5 -0
- package/dist/investigation-types.js.map +1 -0
- package/dist/investigation.d.ts +24 -0
- package/dist/investigation.d.ts.map +1 -0
- package/dist/investigation.js +135 -0
- package/dist/investigation.js.map +1 -0
- package/dist/output.d.ts +20 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +151 -0
- package/dist/output.js.map +1 -0
- package/dist/parser.d.ts +16 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +146 -0
- package/dist/parser.js.map +1 -0
- package/dist/storage.d.ts +47 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +133 -0
- package/dist/storage.js.map +1 -0
- package/dist/timeline.d.ts +27 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +145 -0
- package/dist/timeline.js.map +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|