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
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Types for investigation output
3
+ */
4
+ export type SignalType = 'deploy' | 'log' | 'incident' | 'metric';
5
+ export type Confidence = 'high' | 'medium' | 'low';
6
+ export interface TimelineItem {
7
+ id: string;
8
+ timestamp: string;
9
+ signal: SignalType;
10
+ target: string;
11
+ summary: string;
12
+ whyItMatters: string;
13
+ confidence: Confidence;
14
+ details?: Record<string, unknown>;
15
+ isDemo: boolean;
16
+ }
17
+ export interface InvestigationPath {
18
+ title: string;
19
+ whyPlausible: string;
20
+ nextStep: string;
21
+ expectedSignal: string;
22
+ }
23
+ export interface RecallMatch {
24
+ incidentId: string;
25
+ title: string;
26
+ matchReason: string;
27
+ whatWorked: string;
28
+ deadEnds: string[];
29
+ similarity: number;
30
+ }
31
+ export interface MissingSignal {
32
+ type: string;
33
+ reason: string;
34
+ impact: 'high' | 'medium' | 'low';
35
+ }
36
+ export interface InvestigationResult {
37
+ mode: 'demo' | 'real';
38
+ sessionId: string;
39
+ query: string;
40
+ timeWindow: string;
41
+ timeline: TimelineItem[];
42
+ paths: InvestigationPath[];
43
+ recall: RecallMatch[];
44
+ missingSignals: MissingSignal[];
45
+ suggestions: string[];
46
+ }
47
+ //# sourceMappingURL=investigation-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"investigation-types.d.ts","sourceRoot":"","sources":["../src/investigation-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Types for investigation output
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=investigation-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"investigation-types.js","sourceRoot":"","sources":["../src/investigation-types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Investigation engine
3
+ *
4
+ * Generates investigation paths, recall matches, and missing signals.
5
+ */
6
+ import type { DemoDataset } from './demo-schema.js';
7
+ import type { InvestigationPath, RecallMatch, MissingSignal, TimelineItem } from './investigation-types.js';
8
+ /**
9
+ * Generate investigation paths based on timeline
10
+ */
11
+ export declare function generateInvestigationPaths(timeline: TimelineItem[], dataset: DemoDataset): InvestigationPath[];
12
+ /**
13
+ * Find recall matches (similar past incidents)
14
+ */
15
+ export declare function findRecallMatches(query: string, dataset: DemoDataset): RecallMatch[];
16
+ /**
17
+ * Detect missing signals that would help investigation
18
+ */
19
+ export declare function detectMissingSignals(timeline: TimelineItem[]): MissingSignal[];
20
+ /**
21
+ * Generate next command suggestions
22
+ */
23
+ export declare function generateSuggestions(timeline: TimelineItem[]): string[];
24
+ //# sourceMappingURL=investigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"investigation.d.ts","sourceRoot":"","sources":["../src/investigation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,WAAW,GACnB,iBAAiB,EAAE,CAuDrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,WAAW,GACnB,WAAW,EAAE,CAuCf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,YAAY,EAAE,GACvB,aAAa,EAAE,CAsCjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAYtE"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Investigation engine
3
+ *
4
+ * Generates investigation paths, recall matches, and missing signals.
5
+ */
6
+ /**
7
+ * Generate investigation paths based on timeline
8
+ */
9
+ export function generateInvestigationPaths(timeline, dataset) {
10
+ const paths = [];
11
+ // Path 1: Check recent deploys
12
+ const recentDeploys = timeline.filter((item) => item.signal === 'deploy');
13
+ if (recentDeploys.length > 0) {
14
+ const deploy = recentDeploys[0];
15
+ paths.push({
16
+ title: 'Investigate recent deploy',
17
+ whyPlausible: `${deploy.target} deployed ${deploy.details?.version || 'new version'} recently`,
18
+ nextStep: `Check deploy logs and compare error rates before/after ${new Date(deploy.timestamp).toLocaleTimeString()}`,
19
+ expectedSignal: 'Spike in errors or latency after deploy time',
20
+ });
21
+ }
22
+ // Path 2: Check error patterns
23
+ const errorLogs = timeline.filter((item) => item.signal === 'log');
24
+ if (errorLogs.length > 0) {
25
+ const errorsByService = new Map();
26
+ for (const log of errorLogs) {
27
+ errorsByService.set(log.target, (errorsByService.get(log.target) || 0) + 1);
28
+ }
29
+ const [topService, count] = Array.from(errorsByService.entries()).sort((a, b) => b[1] - a[1])[0] || ['unknown', 0];
30
+ if (count > 0) {
31
+ paths.push({
32
+ title: 'Investigate error spike',
33
+ whyPlausible: `${topService} shows ${count} error(s) in recent logs`,
34
+ nextStep: 'Check service health metrics and upstream dependencies',
35
+ expectedSignal: 'Correlation with deploy or external service issues',
36
+ });
37
+ }
38
+ }
39
+ // Path 3: Check for similar past incidents
40
+ const incidents = timeline.filter((item) => item.signal === 'incident');
41
+ if (incidents.length > 0) {
42
+ const incident = incidents[0];
43
+ paths.push({
44
+ title: 'Review similar past incident',
45
+ whyPlausible: `Similar symptoms seen in "${incident.summary}"`,
46
+ nextStep: 'Compare current symptoms with past incident pattern',
47
+ expectedSignal: 'Matching root cause or resolution approach',
48
+ });
49
+ }
50
+ // Limit to top 3 paths
51
+ return paths.slice(0, 3);
52
+ }
53
+ /**
54
+ * Find recall matches (similar past incidents)
55
+ */
56
+ export function findRecallMatches(query, dataset) {
57
+ const matches = [];
58
+ const queryLower = query.toLowerCase();
59
+ for (const incident of dataset.incidents) {
60
+ // Simple similarity: check if query terms appear in incident title/symptoms
61
+ const titleLower = incident.title.toLowerCase();
62
+ const symptomsLower = incident.symptoms.join(' ').toLowerCase();
63
+ const titleMatch = queryLower.split(' ').some((term) => titleLower.includes(term));
64
+ const symptomsMatch = queryLower.split(' ').some((term) => symptomsLower.includes(term));
65
+ if (titleMatch || symptomsMatch) {
66
+ // Calculate simple similarity score
67
+ const queryTerms = queryLower.split(' ').filter((t) => t.length > 2);
68
+ const matchCount = queryTerms.filter((term) => titleLower.includes(term) || symptomsLower.includes(term)).length;
69
+ const similarity = matchCount / Math.max(queryTerms.length, 1);
70
+ matches.push({
71
+ incidentId: incident.id,
72
+ title: incident.title,
73
+ matchReason: titleMatch
74
+ ? 'Similar issue title'
75
+ : 'Similar symptoms reported',
76
+ whatWorked: incident.resolution || 'Resolution documented in incident',
77
+ deadEnds: [], // Could be populated from incident notes
78
+ similarity,
79
+ });
80
+ }
81
+ }
82
+ // Sort by similarity and return top 3
83
+ return matches.sort((a, b) => b.similarity - a.similarity).slice(0, 3);
84
+ }
85
+ /**
86
+ * Detect missing signals that would help investigation
87
+ */
88
+ export function detectMissingSignals(timeline) {
89
+ const signals = [];
90
+ // Always suggest metrics in demo mode
91
+ signals.push({
92
+ type: 'Metrics Dashboard',
93
+ reason: 'Would show latency, error rate, and throughput trends',
94
+ impact: 'high',
95
+ });
96
+ // If we have errors, suggest distributed tracing
97
+ const hasErrors = timeline.some((item) => item.signal === 'log');
98
+ if (hasErrors) {
99
+ signals.push({
100
+ type: 'Distributed Tracing',
101
+ reason: 'Would pinpoint exact failure point in request flow',
102
+ impact: 'high',
103
+ });
104
+ }
105
+ // If we have deploys, suggest rollback capability
106
+ const hasDeploys = timeline.some((item) => item.signal === 'deploy');
107
+ if (hasDeploys) {
108
+ signals.push({
109
+ type: 'Automated Rollback',
110
+ reason: 'Could quickly revert problematic deploy',
111
+ impact: 'medium',
112
+ });
113
+ }
114
+ // Suggest alerting
115
+ signals.push({
116
+ type: 'Real-time Alerting',
117
+ reason: 'Would detect issues proactively before customer impact',
118
+ impact: 'high',
119
+ });
120
+ return signals;
121
+ }
122
+ /**
123
+ * Generate next command suggestions
124
+ */
125
+ export function generateSuggestions(timeline) {
126
+ const suggestions = [];
127
+ if (timeline.length > 0) {
128
+ suggestions.push('resolveai show details for item 1');
129
+ }
130
+ suggestions.push('resolveai note checked recent deploys');
131
+ suggestions.push('resolveai investigate schema mismatch');
132
+ suggestions.push('resolveai report weekly');
133
+ return suggestions;
134
+ }
135
+ //# sourceMappingURL=investigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"investigation.js","sourceRoot":"","sources":["../src/investigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Output formatting and display utilities
3
+ */
4
+ /**
5
+ * Display welcome message (when user runs `resolveai` with no args)
6
+ */
7
+ export declare function showWelcome(): void;
8
+ /**
9
+ * Display help documentation
10
+ */
11
+ export declare function showHelp(): void;
12
+ /**
13
+ * Display "unknown command" fallback
14
+ */
15
+ export declare function showUnknownCommand(input: string): void;
16
+ /**
17
+ * Display "not implemented yet" placeholder
18
+ */
19
+ export declare function showNotImplemented(intent: string): void;
20
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAkBlC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CA+F/B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAiBtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CASvD"}
package/dist/output.js ADDED
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Output formatting and display utilities
3
+ */
4
+ import chalk from 'chalk';
5
+ import { getExamples } from './parser.js';
6
+ import { VERSION } from './index.js';
7
+ /**
8
+ * Display welcome message (when user runs `resolveai` with no args)
9
+ */
10
+ export function showWelcome() {
11
+ console.log();
12
+ console.log(chalk.bold.cyan('🔍 Resolve Solo'));
13
+ console.log(chalk.gray(`v${VERSION} - Local-first on-call assistant`));
14
+ console.log();
15
+ console.log('Your personal investigation companion for incident response.');
16
+ console.log();
17
+ console.log(chalk.bold('Try these commands:'));
18
+ console.log();
19
+ const examples = getExamples();
20
+ examples.forEach((example) => {
21
+ console.log(chalk.cyan(` ${example}`));
22
+ });
23
+ console.log();
24
+ console.log(chalk.gray(`Type ${chalk.white('resolveai help')} for more information.`));
25
+ console.log();
26
+ }
27
+ /**
28
+ * Display help documentation
29
+ */
30
+ export function showHelp() {
31
+ console.log();
32
+ console.log(chalk.bold.cyan('🔍 Resolve Solo'));
33
+ console.log(chalk.gray(`v${VERSION} - Local-first on-call assistant`));
34
+ console.log();
35
+ console.log(chalk.bold('WHAT IT DOES'));
36
+ console.log('Resolve Solo helps you investigate incidents using natural language.');
37
+ console.log('It provides timeline analysis, investigation paths, and learning from past incidents.');
38
+ console.log();
39
+ console.log(chalk.bold('GETTING STARTED'));
40
+ console.log();
41
+ console.log(' 1. Try the demo:');
42
+ console.log(chalk.cyan(' resolveai demo'));
43
+ console.log();
44
+ console.log(' 2. Investigate an issue:');
45
+ console.log(chalk.cyan(' resolveai investigate timeouts on api gateway'));
46
+ console.log();
47
+ console.log(' 3. Get weekly report:');
48
+ console.log(chalk.cyan(' resolveai report weekly'));
49
+ console.log();
50
+ console.log(chalk.bold('COMMANDS'));
51
+ console.log();
52
+ console.log(chalk.cyan(' resolveai'));
53
+ console.log(' Show welcome message with examples');
54
+ console.log();
55
+ console.log(chalk.cyan(' resolveai help'));
56
+ console.log(' Show this help documentation');
57
+ console.log();
58
+ console.log(chalk.cyan(' resolveai demo'));
59
+ console.log(' Run an automated demo investigation (seeds data if needed)');
60
+ console.log();
61
+ console.log(chalk.cyan(' resolveai demo seed'));
62
+ console.log(' Generate demo data for testing');
63
+ console.log();
64
+ console.log(chalk.cyan(' resolveai demo reset'));
65
+ console.log(' Clear and regenerate all demo data');
66
+ console.log();
67
+ console.log(chalk.cyan(' resolveai investigate <description>'));
68
+ console.log(' Start an investigation using natural language');
69
+ console.log(chalk.gray(' Examples:'));
70
+ console.log(chalk.gray(' resolveai investigate timeouts on api gateway'));
71
+ console.log(chalk.gray(' resolveai what changed in the last 2 hours'));
72
+ console.log(chalk.gray(' resolveai check database connection errors'));
73
+ console.log();
74
+ console.log(chalk.cyan(' resolveai show details for item <n>'));
75
+ console.log(chalk.gray(' (or: resolveai details <n>)'));
76
+ console.log(' Show detailed information about a timeline item');
77
+ console.log();
78
+ console.log(chalk.cyan(' resolveai note <text>'));
79
+ console.log(' Add a note to the current investigation');
80
+ console.log(chalk.gray(' Example: resolveai note rolled back to previous version'));
81
+ console.log();
82
+ console.log(chalk.cyan(' resolveai close <summary>'));
83
+ console.log(' Close the current investigation and log resolution');
84
+ console.log(chalk.gray(' Example: resolveai close rollback fixed it'));
85
+ console.log();
86
+ console.log(chalk.cyan(' resolveai report weekly'));
87
+ console.log(' Generate a weekly usage and impact report');
88
+ console.log();
89
+ console.log(chalk.cyan(' resolveai doctor'));
90
+ console.log(' Check system health and configuration');
91
+ console.log();
92
+ console.log(chalk.cyan(' resolveai uninstall [--yes]'));
93
+ console.log(' Remove Resolve Solo and optionally clean up data');
94
+ console.log(chalk.gray(' Flags: --keep-data, --all-data, --yes'));
95
+ console.log();
96
+ console.log(chalk.bold('DEMO MODE'));
97
+ console.log('Resolve Solo starts in demo mode with mock data.');
98
+ console.log('All demo signals are labeled (demo) to avoid confusion.');
99
+ console.log();
100
+ console.log('Demo data is stored in:');
101
+ console.log(chalk.gray(' ./.resolveai/demo-data/'));
102
+ console.log();
103
+ console.log(chalk.bold('DATA STORAGE'));
104
+ console.log('Runtime data is stored locally in your project:');
105
+ console.log(chalk.gray(' ./.resolveai/memory.sqlite # Investigation history'));
106
+ console.log(chalk.gray(' ./.resolveai/runs/ # Session logs'));
107
+ console.log(chalk.gray(' ./.resolveai/reports/ # Weekly reports'));
108
+ console.log(chalk.gray(' ./.resolveai/demo-data/ # Demo mock data'));
109
+ console.log();
110
+ console.log(chalk.bold('UNINSTALL'));
111
+ console.log('To remove Resolve Solo:');
112
+ console.log(chalk.cyan(' resolveai uninstall'));
113
+ console.log();
114
+ console.log('This will remove the tool and optionally clean up local data.');
115
+ console.log();
116
+ console.log(chalk.gray('For more examples, visit: https://github.com/resolve-ai/resolve-solo'));
117
+ console.log();
118
+ }
119
+ /**
120
+ * Display "unknown command" fallback
121
+ */
122
+ export function showUnknownCommand(input) {
123
+ console.log();
124
+ console.log(chalk.yellow('⚠️ I\'m not sure what you mean.'));
125
+ console.log();
126
+ console.log(`You typed: ${chalk.gray(input)}`);
127
+ console.log();
128
+ console.log('Try one of these commands:');
129
+ console.log();
130
+ const examples = getExamples();
131
+ examples.forEach((example) => {
132
+ console.log(chalk.cyan(` ${example}`));
133
+ });
134
+ console.log();
135
+ console.log(chalk.gray(`Type ${chalk.white('resolveai help')} for full documentation.`));
136
+ console.log();
137
+ }
138
+ /**
139
+ * Display "not implemented yet" placeholder
140
+ */
141
+ export function showNotImplemented(intent) {
142
+ console.log();
143
+ console.log(chalk.yellow(`⚠️ The ${chalk.white(intent)} command is not yet implemented.`));
144
+ console.log();
145
+ console.log('This feature will be available in a future milestone.');
146
+ console.log();
147
+ console.log(chalk.gray('Current milestone: M2 (CLI Entry & Help)'));
148
+ console.log(chalk.gray('This command will be implemented in: M3-M11'));
149
+ console.log();
150
+ }
151
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Natural Language Intent Parser
3
+ *
4
+ * Parses natural language input to determine user intent.
5
+ * Uses pattern matching for v1 (no LLM required).
6
+ */
7
+ import type { Intent, ParsedCommand } from './types.js';
8
+ /**
9
+ * Parse natural language input into a structured command
10
+ */
11
+ export declare function parseIntent(input: string): ParsedCommand;
12
+ /**
13
+ * Get example commands for a given intent
14
+ */
15
+ export declare function getExamples(intent?: Intent): string[];
16
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAmFxD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAqBxD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAwCrD"}
package/dist/parser.js ADDED
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Natural Language Intent Parser
3
+ *
4
+ * Parses natural language input to determine user intent.
5
+ * Uses pattern matching for v1 (no LLM required).
6
+ */
7
+ // Intent patterns ordered by specificity (most specific first)
8
+ const INTENT_PATTERNS = [
9
+ {
10
+ intent: 'help',
11
+ patterns: [/^help$/i, /^--help$/i, /^-h$/i],
12
+ },
13
+ {
14
+ intent: 'demo-seed',
15
+ patterns: [/^demo\s+seed$/i, /^seed\s+demo$/i],
16
+ },
17
+ {
18
+ intent: 'demo-reset',
19
+ patterns: [/^demo\s+reset$/i, /^reset\s+demo$/i],
20
+ },
21
+ {
22
+ intent: 'demo',
23
+ patterns: [/^demo$/i],
24
+ },
25
+ {
26
+ intent: 'details',
27
+ patterns: [
28
+ /^show\s+(me\s+)?(the\s+)?details?\s+(for\s+)?item\s+\d+/i,
29
+ /^details?\s+\d+/i,
30
+ /^item\s+\d+/i,
31
+ ],
32
+ },
33
+ {
34
+ intent: 'note',
35
+ patterns: [
36
+ /^note\s+/i,
37
+ /^add\s+note\s+/i,
38
+ /^log\s+/i,
39
+ ],
40
+ },
41
+ {
42
+ intent: 'close',
43
+ patterns: [
44
+ /^close(\s+|$)/i,
45
+ /^resolve(\s+|$)/i,
46
+ /^end\s+incident(\s+|$)/i,
47
+ /^mark\s+(as\s+)?resolved(\s+|$)/i,
48
+ ],
49
+ },
50
+ {
51
+ intent: 'report-weekly',
52
+ patterns: [
53
+ /^report\s+weekly$/i,
54
+ /^weekly\s+report$/i,
55
+ /^report$/i,
56
+ ],
57
+ },
58
+ {
59
+ intent: 'doctor',
60
+ patterns: [/^doctor$/i, /^health\s*check$/i],
61
+ },
62
+ {
63
+ intent: 'uninstall',
64
+ patterns: [
65
+ /^uninstall$/i,
66
+ /^remove$/i,
67
+ /^cleanup$/i,
68
+ ],
69
+ },
70
+ {
71
+ intent: 'investigate',
72
+ patterns: [
73
+ /^investigate\s+/i,
74
+ /^what\s+changed/i,
75
+ /^show\s+me\s+/i,
76
+ /^debug\s+/i,
77
+ /^look\s+into\s+/i,
78
+ /^check\s+/i,
79
+ ],
80
+ },
81
+ ];
82
+ /**
83
+ * Parse natural language input into a structured command
84
+ */
85
+ export function parseIntent(input) {
86
+ const trimmed = input.trim();
87
+ // Empty input = welcome message (not an intent)
88
+ if (!trimmed) {
89
+ return { intent: 'unknown', args: [], raw: '' };
90
+ }
91
+ // Try to match against known patterns
92
+ for (const { intent, patterns } of INTENT_PATTERNS) {
93
+ for (const pattern of patterns) {
94
+ if (pattern.test(trimmed)) {
95
+ // Extract remaining args by removing the matched pattern
96
+ const args = trimmed.split(/\s+/).slice(1);
97
+ return { intent, args, raw: trimmed };
98
+ }
99
+ }
100
+ }
101
+ // No match = unknown intent
102
+ return { intent: 'unknown', args: trimmed.split(/\s+/), raw: trimmed };
103
+ }
104
+ /**
105
+ * Get example commands for a given intent
106
+ */
107
+ export function getExamples(intent) {
108
+ const examples = {
109
+ help: ['resolveai help'],
110
+ demo: ['resolveai demo'],
111
+ 'demo-seed': ['resolveai demo seed'],
112
+ 'demo-reset': ['resolveai demo reset'],
113
+ investigate: [
114
+ 'resolveai investigate timeouts on api gateway',
115
+ 'resolveai what changed in the last 2 hours for payments service',
116
+ 'resolveai check database connection errors',
117
+ ],
118
+ details: [
119
+ 'resolveai show details for item 1',
120
+ 'resolveai details 3',
121
+ ],
122
+ note: [
123
+ 'resolveai note we rolled back payments-service',
124
+ 'resolveai note spike started after deploy 2026-01-21T01:20Z',
125
+ ],
126
+ close: [
127
+ 'resolveai close rollback fixed it',
128
+ 'resolveai resolve incident was false alarm',
129
+ ],
130
+ 'report-weekly': ['resolveai report weekly'],
131
+ doctor: ['resolveai doctor'],
132
+ uninstall: ['resolveai uninstall'],
133
+ unknown: [],
134
+ };
135
+ if (intent) {
136
+ return examples[intent] || [];
137
+ }
138
+ // Return a curated subset for welcome message (most common use cases)
139
+ return [
140
+ 'resolveai demo',
141
+ 'resolveai investigate timeouts on api gateway',
142
+ 'resolveai what changed in the last 2 hours',
143
+ 'resolveai help',
144
+ ];
145
+ }
146
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Storage utilities for local data persistence
3
+ */
4
+ import type { DemoDataset } from './demo-schema.js';
5
+ /**
6
+ * Get the .resolveai directory path (project-local)
7
+ */
8
+ export declare function getResolveaiDir(): string;
9
+ /**
10
+ * Get the demo data directory path
11
+ */
12
+ export declare function getDemoDataDir(): string;
13
+ /**
14
+ * Ensure a directory exists (create if missing)
15
+ */
16
+ export declare function ensureDir(dirPath: string): void;
17
+ /**
18
+ * Check if demo data exists
19
+ */
20
+ export declare function demoDataExists(): boolean;
21
+ /**
22
+ * Save demo dataset to disk
23
+ */
24
+ export declare function saveDemoData(dataset: DemoDataset): void;
25
+ /**
26
+ * Load demo dataset from disk
27
+ */
28
+ export declare function loadDemoData(): DemoDataset | null;
29
+ /**
30
+ * Delete all demo data
31
+ */
32
+ export declare function deleteDemoData(): void;
33
+ /**
34
+ * Get storage info (sizes, counts)
35
+ */
36
+ export declare function getStorageInfo(): {
37
+ exists: boolean;
38
+ path: string;
39
+ size?: number;
40
+ counts?: {
41
+ services: number;
42
+ deploys: number;
43
+ logs: number;
44
+ incidents: number;
45
+ };
46
+ };
47
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAkBxC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CA6BvD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,WAAW,GAAG,IAAI,CAmCjD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAyCA"}