mycontext-cli 2.0.25 → 2.0.27
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 +184 -37
- package/dist/cli.js +92 -80
- package/dist/cli.js.map +1 -1
- package/dist/commands/build-app.d.ts +6 -1
- package/dist/commands/build-app.d.ts.map +1 -1
- package/dist/commands/build-app.js +97 -9
- package/dist/commands/build-app.js.map +1 -1
- package/dist/commands/compile-prd.d.ts.map +1 -1
- package/dist/commands/compile-prd.js +7 -0
- package/dist/commands/compile-prd.js.map +1 -1
- package/dist/commands/export-progress.d.ts +34 -0
- package/dist/commands/export-progress.d.ts.map +1 -0
- package/dist/commands/export-progress.js +552 -0
- package/dist/commands/export-progress.js.map +1 -0
- package/dist/commands/generate-context-files.d.ts.map +1 -1
- package/dist/commands/generate-context-files.js +10 -2
- package/dist/commands/generate-context-files.js.map +1 -1
- package/dist/commands/generate.d.ts +8 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +212 -0
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/help.d.ts +17 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +329 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/import-project-plan.d.ts +27 -0
- package/dist/commands/import-project-plan.d.ts.map +1 -0
- package/dist/commands/import-project-plan.js +411 -0
- package/dist/commands/import-project-plan.js.map +1 -0
- package/dist/commands/pm-integration.d.ts +18 -0
- package/dist/commands/pm-integration.d.ts.map +1 -0
- package/dist/commands/pm-integration.js +385 -0
- package/dist/commands/pm-integration.js.map +1 -0
- package/dist/commands/setup-complete.d.ts +16 -0
- package/dist/commands/setup-complete.d.ts.map +1 -0
- package/dist/commands/setup-complete.js +468 -0
- package/dist/commands/setup-complete.js.map +1 -0
- package/dist/commands/setup-shadcn.d.ts +20 -0
- package/dist/commands/setup-shadcn.d.ts.map +1 -0
- package/dist/commands/setup-shadcn.js +241 -0
- package/dist/commands/setup-shadcn.js.map +1 -0
- package/dist/commands/suggest.d.ts +15 -0
- package/dist/commands/suggest.d.ts.map +1 -0
- package/dist/commands/suggest.js +288 -0
- package/dist/commands/suggest.js.map +1 -0
- package/dist/commands/update.d.ts +0 -4
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +7 -197
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/workflow.d.ts +16 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +464 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/package.json +1 -1
- package/dist/services/PMIntegrationService.d.ts +46 -0
- package/dist/services/PMIntegrationService.d.ts.map +1 -0
- package/dist/services/PMIntegrationService.js +363 -0
- package/dist/services/PMIntegrationService.js.map +1 -0
- package/dist/services/WebhookServer.d.ts +37 -0
- package/dist/services/WebhookServer.d.ts.map +1 -0
- package/dist/services/WebhookServer.js +231 -0
- package/dist/services/WebhookServer.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/pm-integration.d.ts +241 -0
- package/dist/types/pm-integration.d.ts.map +1 -0
- package/dist/types/pm-integration.js +24 -0
- package/dist/types/pm-integration.js.map +1 -0
- package/dist/utils/NextJSProjectValidator.d.ts.map +1 -1
- package/dist/utils/NextJSProjectValidator.js +14 -7
- package/dist/utils/NextJSProjectValidator.js.map +1 -1
- package/dist/utils/ProjectStateAnalyzer.d.ts +46 -0
- package/dist/utils/ProjectStateAnalyzer.d.ts.map +1 -0
- package/dist/utils/ProjectStateAnalyzer.js +311 -0
- package/dist/utils/ProjectStateAnalyzer.js.map +1 -0
- package/dist/utils/ProjectStructureValidator.d.ts +12 -0
- package/dist/utils/ProjectStructureValidator.d.ts.map +1 -1
- package/dist/utils/ProjectStructureValidator.js +111 -14
- package/dist/utils/ProjectStructureValidator.js.map +1 -1
- package/dist/utils/claudeAgentClient.d.ts +4 -0
- package/dist/utils/claudeAgentClient.d.ts.map +1 -1
- package/dist/utils/claudeAgentClient.js +90 -20
- package/dist/utils/claudeAgentClient.js.map +1 -1
- package/dist/utils/errorHandler.d.ts +31 -74
- package/dist/utils/errorHandler.d.ts.map +1 -1
- package/dist/utils/errorHandler.js +190 -276
- package/dist/utils/errorHandler.js.map +1 -1
- package/dist/utils/hybridAIClient.js +1 -1
- package/dist/utils/hybridAIClient.js.map +1 -1
- package/dist/utils/mcpTools.d.ts +9 -9
- package/dist/utils/nextStepsSuggester.d.ts +52 -0
- package/dist/utils/nextStepsSuggester.d.ts.map +1 -0
- package/dist/utils/nextStepsSuggester.js +438 -0
- package/dist/utils/nextStepsSuggester.js.map +1 -0
- package/dist/utils/progress.d.ts +31 -1
- package/dist/utils/progress.d.ts.map +1 -1
- package/dist/utils/progress.js +110 -2
- package/dist/utils/progress.js.map +1 -1
- package/dist/utils/workflowEngine.d.ts +96 -0
- package/dist/utils/workflowEngine.d.ts.map +1 -0
- package/dist/utils/workflowEngine.js +793 -0
- package/dist/utils/workflowEngine.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,333 +1,247 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* Provides structured error handling, logging, and recovery mechanisms
|
|
6
|
-
* for AI providers, API calls, and CLI operations.
|
|
7
|
-
*/
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
8
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.
|
|
10
|
-
const
|
|
6
|
+
exports.ErrorHandler = exports.ErrorType = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
8
|
var ErrorType;
|
|
12
9
|
(function (ErrorType) {
|
|
13
|
-
ErrorType["API_ERROR"] = "API_ERROR";
|
|
14
|
-
ErrorType["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
15
|
-
ErrorType["AUTHENTICATION_ERROR"] = "AUTHENTICATION_ERROR";
|
|
16
10
|
ErrorType["VALIDATION_ERROR"] = "VALIDATION_ERROR";
|
|
11
|
+
ErrorType["AI_PROVIDER_ERROR"] = "AI_PROVIDER_ERROR";
|
|
17
12
|
ErrorType["FILE_SYSTEM_ERROR"] = "FILE_SYSTEM_ERROR";
|
|
13
|
+
ErrorType["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
18
14
|
ErrorType["CONFIGURATION_ERROR"] = "CONFIGURATION_ERROR";
|
|
19
|
-
ErrorType["
|
|
20
|
-
ErrorType["
|
|
21
|
-
ErrorType["
|
|
15
|
+
ErrorType["COMPONENT_GENERATION_ERROR"] = "COMPONENT_GENERATION_ERROR";
|
|
16
|
+
ErrorType["PROJECT_SETUP_ERROR"] = "PROJECT_SETUP_ERROR";
|
|
17
|
+
ErrorType["DEPENDENCY_ERROR"] = "DEPENDENCY_ERROR";
|
|
18
|
+
ErrorType["AUTHENTICATION_ERROR"] = "AUTHENTICATION_ERROR";
|
|
22
19
|
ErrorType["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
|
|
23
20
|
})(ErrorType || (exports.ErrorType = ErrorType = {}));
|
|
24
|
-
var ErrorSeverity;
|
|
25
|
-
(function (ErrorSeverity) {
|
|
26
|
-
ErrorSeverity["LOW"] = "LOW";
|
|
27
|
-
ErrorSeverity["MEDIUM"] = "MEDIUM";
|
|
28
|
-
ErrorSeverity["HIGH"] = "HIGH";
|
|
29
|
-
ErrorSeverity["CRITICAL"] = "CRITICAL";
|
|
30
|
-
})(ErrorSeverity || (exports.ErrorSeverity = ErrorSeverity = {}));
|
|
31
|
-
class MyContextError extends Error {
|
|
32
|
-
constructor(structuredError) {
|
|
33
|
-
super(structuredError.message);
|
|
34
|
-
this.name = "MyContextError";
|
|
35
|
-
this.type = structuredError.type;
|
|
36
|
-
this.severity = structuredError.severity;
|
|
37
|
-
this.code = structuredError.code;
|
|
38
|
-
this.details = structuredError.details;
|
|
39
|
-
this.timestamp = structuredError.timestamp;
|
|
40
|
-
this.source = structuredError.source;
|
|
41
|
-
this.retryable = structuredError.retryable;
|
|
42
|
-
this.retryAfter = structuredError.retryAfter;
|
|
43
|
-
this.suggestions = structuredError.suggestions;
|
|
44
|
-
}
|
|
45
|
-
toJSON() {
|
|
46
|
-
return {
|
|
47
|
-
type: this.type,
|
|
48
|
-
severity: this.severity,
|
|
49
|
-
message: this.message,
|
|
50
|
-
code: this.code,
|
|
51
|
-
details: this.details,
|
|
52
|
-
timestamp: this.timestamp,
|
|
53
|
-
source: this.source,
|
|
54
|
-
retryable: this.retryable,
|
|
55
|
-
retryAfter: this.retryAfter,
|
|
56
|
-
suggestions: this.suggestions,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
exports.MyContextError = MyContextError;
|
|
61
21
|
class ErrorHandler {
|
|
62
|
-
constructor() {
|
|
63
|
-
this.errorLog = [];
|
|
64
|
-
this.maxLogSize = 100;
|
|
65
|
-
}
|
|
66
|
-
static getInstance() {
|
|
67
|
-
if (!ErrorHandler.instance) {
|
|
68
|
-
ErrorHandler.instance = new ErrorHandler();
|
|
69
|
-
}
|
|
70
|
-
return ErrorHandler.instance;
|
|
71
|
-
}
|
|
72
22
|
/**
|
|
73
|
-
*
|
|
23
|
+
* Format a user-friendly error message with suggestions
|
|
74
24
|
*/
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
25
|
+
static formatError(error) {
|
|
26
|
+
const baseMessage = `${this.getErrorIcon(error.type)} ${this.getErrorTitle(error.type)}\n\n`;
|
|
27
|
+
let message = `${chalk_1.default.red("❌")} ${this.getErrorTitle(error.type)}\n\n`;
|
|
28
|
+
message += `${chalk_1.default.blue("💡")} ${this.getErrorDescription(error.type)}\n`;
|
|
29
|
+
if (error.context) {
|
|
30
|
+
message += `\n${chalk_1.default.gray("Context:")}\n`;
|
|
31
|
+
Object.entries(error.context).forEach(([key, value]) => {
|
|
32
|
+
message += ` ${key}: ${value}\n`;
|
|
33
|
+
});
|
|
83
34
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
message
|
|
89
|
-
timestamp,
|
|
90
|
-
source: context.operation,
|
|
91
|
-
retryable: false,
|
|
35
|
+
const suggestions = this.getErrorSuggestions(error);
|
|
36
|
+
if (suggestions.length > 0) {
|
|
37
|
+
message += `\n${chalk_1.default.yellow("🔧 Solutions:")}\n`;
|
|
38
|
+
suggestions.forEach((suggestion, index) => {
|
|
39
|
+
message += ` ${index + 1}. ${suggestion}\n`;
|
|
92
40
|
});
|
|
93
41
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return this.handleObjectError(error, context, timestamp);
|
|
42
|
+
if (error.originalError) {
|
|
43
|
+
message += `\n${chalk_1.default.gray("Technical details:")} ${error.originalError.message}\n`;
|
|
97
44
|
}
|
|
98
|
-
return
|
|
99
|
-
type: ErrorType.UNKNOWN_ERROR,
|
|
100
|
-
severity: ErrorSeverity.MEDIUM,
|
|
101
|
-
message: "An unknown error occurred",
|
|
102
|
-
timestamp,
|
|
103
|
-
source: context.operation,
|
|
104
|
-
details: { originalError: error },
|
|
105
|
-
retryable: false,
|
|
106
|
-
});
|
|
45
|
+
return message;
|
|
107
46
|
}
|
|
108
47
|
/**
|
|
109
|
-
*
|
|
48
|
+
* Create a structured error object
|
|
110
49
|
*/
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
50
|
+
static createError(type, message, originalError, context) {
|
|
51
|
+
return {
|
|
52
|
+
type,
|
|
53
|
+
message,
|
|
54
|
+
originalError,
|
|
55
|
+
context,
|
|
116
56
|
};
|
|
117
|
-
const structuredError = this.createError(error, context, ErrorType.AI_PROVIDER_ERROR);
|
|
118
|
-
// Add provider-specific error handling
|
|
119
|
-
if (typeof error === "object" && error !== null && "status" in error) {
|
|
120
|
-
const status = error.status;
|
|
121
|
-
switch (status) {
|
|
122
|
-
case 401:
|
|
123
|
-
return new MyContextError({
|
|
124
|
-
...structuredError,
|
|
125
|
-
type: ErrorType.AUTHENTICATION_ERROR,
|
|
126
|
-
suggestions: [
|
|
127
|
-
"Check your API key configuration",
|
|
128
|
-
"Verify API key permissions",
|
|
129
|
-
"Contact support if the issue persists",
|
|
130
|
-
],
|
|
131
|
-
});
|
|
132
|
-
case 429:
|
|
133
|
-
return new MyContextError({
|
|
134
|
-
...structuredError,
|
|
135
|
-
type: ErrorType.RATE_LIMIT_ERROR,
|
|
136
|
-
retryable: true,
|
|
137
|
-
retryAfter: 60, // Default retry after 60 seconds
|
|
138
|
-
suggestions: [
|
|
139
|
-
"Wait before retrying",
|
|
140
|
-
"Consider upgrading your API plan",
|
|
141
|
-
"Implement exponential backoff",
|
|
142
|
-
],
|
|
143
|
-
});
|
|
144
|
-
case 500:
|
|
145
|
-
case 502:
|
|
146
|
-
case 503:
|
|
147
|
-
case 504:
|
|
148
|
-
return new MyContextError({
|
|
149
|
-
...structuredError,
|
|
150
|
-
retryable: true,
|
|
151
|
-
retryAfter: 30,
|
|
152
|
-
suggestions: [
|
|
153
|
-
"Retry the request after a short delay",
|
|
154
|
-
"Check provider status page",
|
|
155
|
-
"Try a different AI provider if available",
|
|
156
|
-
],
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
this.logError(structuredError);
|
|
161
|
-
return structuredError;
|
|
162
57
|
}
|
|
163
58
|
/**
|
|
164
|
-
*
|
|
59
|
+
* Wrap an error with additional context and suggestions
|
|
165
60
|
*/
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
const networkError = new MyContextError({
|
|
169
|
-
...baseError.toJSON(),
|
|
170
|
-
retryable: true,
|
|
171
|
-
retryAfter: 10,
|
|
172
|
-
suggestions: [
|
|
173
|
-
"Check your internet connection",
|
|
174
|
-
"Verify firewall settings",
|
|
175
|
-
"Try again in a few moments",
|
|
176
|
-
],
|
|
177
|
-
});
|
|
178
|
-
this.logError(networkError);
|
|
179
|
-
return networkError;
|
|
61
|
+
static wrapError(error, type, context) {
|
|
62
|
+
return this.createError(type, error.message, error, context);
|
|
180
63
|
}
|
|
181
64
|
/**
|
|
182
|
-
*
|
|
65
|
+
* Get error icon based on type
|
|
183
66
|
*/
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
67
|
+
static getErrorIcon(type) {
|
|
68
|
+
switch (type) {
|
|
69
|
+
case ErrorType.VALIDATION_ERROR:
|
|
70
|
+
return "🔍";
|
|
71
|
+
case ErrorType.AI_PROVIDER_ERROR:
|
|
72
|
+
return "🤖";
|
|
73
|
+
case ErrorType.FILE_SYSTEM_ERROR:
|
|
74
|
+
return "📁";
|
|
75
|
+
case ErrorType.NETWORK_ERROR:
|
|
76
|
+
return "🌐";
|
|
77
|
+
case ErrorType.CONFIGURATION_ERROR:
|
|
78
|
+
return "⚙️";
|
|
79
|
+
case ErrorType.COMPONENT_GENERATION_ERROR:
|
|
80
|
+
return "🧩";
|
|
81
|
+
case ErrorType.PROJECT_SETUP_ERROR:
|
|
82
|
+
return "🏗️";
|
|
83
|
+
case ErrorType.DEPENDENCY_ERROR:
|
|
84
|
+
return "📦";
|
|
85
|
+
case ErrorType.AUTHENTICATION_ERROR:
|
|
86
|
+
return "🔐";
|
|
87
|
+
default:
|
|
88
|
+
return "❌";
|
|
89
|
+
}
|
|
201
90
|
}
|
|
202
91
|
/**
|
|
203
|
-
*
|
|
92
|
+
* Get user-friendly error title
|
|
204
93
|
*/
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
94
|
+
static getErrorTitle(type) {
|
|
95
|
+
switch (type) {
|
|
96
|
+
case ErrorType.VALIDATION_ERROR:
|
|
97
|
+
return "Project Validation Failed";
|
|
98
|
+
case ErrorType.AI_PROVIDER_ERROR:
|
|
99
|
+
return "AI Provider Error";
|
|
100
|
+
case ErrorType.FILE_SYSTEM_ERROR:
|
|
101
|
+
return "File System Error";
|
|
102
|
+
case ErrorType.NETWORK_ERROR:
|
|
103
|
+
return "Network Connection Error";
|
|
104
|
+
case ErrorType.CONFIGURATION_ERROR:
|
|
105
|
+
return "Configuration Error";
|
|
106
|
+
case ErrorType.COMPONENT_GENERATION_ERROR:
|
|
107
|
+
return "Component Generation Failed";
|
|
108
|
+
case ErrorType.PROJECT_SETUP_ERROR:
|
|
109
|
+
return "Project Setup Failed";
|
|
110
|
+
case ErrorType.DEPENDENCY_ERROR:
|
|
111
|
+
return "Dependency Error";
|
|
112
|
+
case ErrorType.AUTHENTICATION_ERROR:
|
|
113
|
+
return "Authentication Error";
|
|
114
|
+
default:
|
|
115
|
+
return "An Error Occurred";
|
|
211
116
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get error description
|
|
120
|
+
*/
|
|
121
|
+
static getErrorDescription(type) {
|
|
122
|
+
switch (type) {
|
|
123
|
+
case ErrorType.VALIDATION_ERROR:
|
|
124
|
+
return "Unable to validate the project structure.";
|
|
125
|
+
case ErrorType.AI_PROVIDER_ERROR:
|
|
126
|
+
return "Failed to communicate with the AI provider.";
|
|
127
|
+
case ErrorType.FILE_SYSTEM_ERROR:
|
|
128
|
+
return "Unable to access or modify files.";
|
|
129
|
+
case ErrorType.NETWORK_ERROR:
|
|
130
|
+
return "Network connection issue.";
|
|
131
|
+
case ErrorType.CONFIGURATION_ERROR:
|
|
132
|
+
return "Configuration is invalid or incomplete.";
|
|
133
|
+
case ErrorType.COMPONENT_GENERATION_ERROR:
|
|
134
|
+
return "Failed to generate React components.";
|
|
135
|
+
case ErrorType.PROJECT_SETUP_ERROR:
|
|
136
|
+
return "Unable to initialize or configure the project.";
|
|
137
|
+
case ErrorType.DEPENDENCY_ERROR:
|
|
138
|
+
return "Missing or incompatible dependencies.";
|
|
139
|
+
case ErrorType.AUTHENTICATION_ERROR:
|
|
140
|
+
return "Authentication failed.";
|
|
141
|
+
default:
|
|
142
|
+
return "An unexpected error occurred.";
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get error-specific suggestions
|
|
147
|
+
*/
|
|
148
|
+
static getErrorSuggestions(error) {
|
|
149
|
+
const suggestions = [];
|
|
150
|
+
switch (error.type) {
|
|
151
|
+
case ErrorType.VALIDATION_ERROR:
|
|
152
|
+
if (error.message.includes("glob")) {
|
|
153
|
+
suggestions.push("Install missing dependencies: npm install glob@latest");
|
|
154
|
+
suggestions.push("Clear node_modules and reinstall: rm -rf node_modules && npm install");
|
|
155
|
+
}
|
|
156
|
+
suggestions.push("Check project structure: mycontext validate --verbose");
|
|
157
|
+
suggestions.push("Verify Node.js version: node --version (should be 18+)");
|
|
216
158
|
break;
|
|
217
|
-
case
|
|
218
|
-
|
|
159
|
+
case ErrorType.AI_PROVIDER_ERROR:
|
|
160
|
+
suggestions.push("Check API key configuration in .env files");
|
|
161
|
+
suggestions.push("Verify API key validity and rate limits");
|
|
162
|
+
suggestions.push("Test connection: mycontext status --check-health");
|
|
163
|
+
suggestions.push("Try a different AI provider in MYCONTEXT_PROVIDER");
|
|
219
164
|
break;
|
|
220
|
-
case
|
|
221
|
-
|
|
165
|
+
case ErrorType.COMPONENT_GENERATION_ERROR:
|
|
166
|
+
suggestions.push("Ensure PRD is complete: check .mycontext/01-prd.md");
|
|
167
|
+
suggestions.push("Verify AI provider is configured correctly");
|
|
168
|
+
suggestions.push("Check available disk space");
|
|
169
|
+
suggestions.push("Try generating a single component first: mycontext generate-components Button");
|
|
222
170
|
break;
|
|
223
|
-
case
|
|
224
|
-
|
|
171
|
+
case ErrorType.DEPENDENCY_ERROR:
|
|
172
|
+
suggestions.push("Install missing packages: npm install");
|
|
173
|
+
suggestions.push("Update dependencies: npm update");
|
|
174
|
+
suggestions.push("Check package.json for conflicts");
|
|
225
175
|
break;
|
|
176
|
+
case ErrorType.CONFIGURATION_ERROR:
|
|
177
|
+
suggestions.push("Run setup commands: mycontext setup-database, mycontext setup-shadcn");
|
|
178
|
+
suggestions.push("Check .env files for required variables");
|
|
179
|
+
suggestions.push("Verify configuration files are valid JSON/YAML");
|
|
180
|
+
break;
|
|
181
|
+
case ErrorType.PROJECT_SETUP_ERROR:
|
|
182
|
+
suggestions.push("Ensure you're in a Next.js project root");
|
|
183
|
+
suggestions.push("Check Node.js and npm versions");
|
|
184
|
+
suggestions.push("Verify write permissions in the project directory");
|
|
185
|
+
break;
|
|
186
|
+
default:
|
|
187
|
+
suggestions.push("Check logs for more details");
|
|
188
|
+
suggestions.push("Try the command again");
|
|
189
|
+
suggestions.push("Update MyContext CLI: mycontext --up");
|
|
226
190
|
}
|
|
191
|
+
return suggestions;
|
|
227
192
|
}
|
|
228
193
|
/**
|
|
229
|
-
*
|
|
194
|
+
* Handle and display an error, then exit
|
|
230
195
|
*/
|
|
231
|
-
|
|
232
|
-
|
|
196
|
+
static handleError(error) {
|
|
197
|
+
console.error(this.formatError(error));
|
|
198
|
+
process.exit(1);
|
|
233
199
|
}
|
|
234
200
|
/**
|
|
235
|
-
*
|
|
201
|
+
* Handle an error gracefully without exiting
|
|
236
202
|
*/
|
|
237
|
-
|
|
238
|
-
this.
|
|
203
|
+
static handleErrorGracefully(error) {
|
|
204
|
+
console.error(this.formatError(error));
|
|
239
205
|
}
|
|
240
206
|
/**
|
|
241
|
-
*
|
|
207
|
+
* Convert common errors to structured errors
|
|
242
208
|
*/
|
|
243
|
-
|
|
209
|
+
static fromError(error, context) {
|
|
210
|
+
// Try to infer error type from message
|
|
244
211
|
let type = ErrorType.UNKNOWN_ERROR;
|
|
245
|
-
let severity = ErrorSeverity.MEDIUM;
|
|
246
|
-
let retryable = false;
|
|
247
|
-
const suggestions = [];
|
|
248
|
-
// Categorize by error message patterns
|
|
249
212
|
const message = error.message.toLowerCase();
|
|
250
|
-
if (message.includes("
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
213
|
+
if (message.includes("glob") ||
|
|
214
|
+
message.includes("module") ||
|
|
215
|
+
message.includes("cannot find")) {
|
|
216
|
+
type = ErrorType.DEPENDENCY_ERROR;
|
|
254
217
|
}
|
|
255
|
-
else if (message.includes("
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
218
|
+
else if (message.includes("api") ||
|
|
219
|
+
message.includes("provider") ||
|
|
220
|
+
message.includes("claude") ||
|
|
221
|
+
message.includes("grok")) {
|
|
222
|
+
type = ErrorType.AI_PROVIDER_ERROR;
|
|
259
223
|
}
|
|
260
|
-
else if (message.includes("
|
|
261
|
-
type = ErrorType.
|
|
262
|
-
suggestions.push("Check file permissions and access rights");
|
|
224
|
+
else if (message.includes("validation") || message.includes("invalid")) {
|
|
225
|
+
type = ErrorType.VALIDATION_ERROR;
|
|
263
226
|
}
|
|
264
|
-
else if (message.includes("
|
|
227
|
+
else if (message.includes("network") || message.includes("connection")) {
|
|
228
|
+
type = ErrorType.NETWORK_ERROR;
|
|
229
|
+
}
|
|
230
|
+
else if (message.includes("config") ||
|
|
231
|
+
message.includes("configuration")) {
|
|
265
232
|
type = ErrorType.CONFIGURATION_ERROR;
|
|
266
|
-
suggestions.push("Check your configuration settings");
|
|
267
233
|
}
|
|
268
|
-
else if (message.includes("
|
|
269
|
-
type = ErrorType.
|
|
270
|
-
suggestions.push("Verify your input data");
|
|
234
|
+
else if (message.includes("component") || message.includes("generate")) {
|
|
235
|
+
type = ErrorType.COMPONENT_GENERATION_ERROR;
|
|
271
236
|
}
|
|
272
|
-
|
|
273
|
-
type
|
|
274
|
-
severity,
|
|
275
|
-
message: error.message,
|
|
276
|
-
timestamp,
|
|
277
|
-
source: context.operation,
|
|
278
|
-
details: {
|
|
279
|
-
stack: error.stack,
|
|
280
|
-
name: error.name,
|
|
281
|
-
},
|
|
282
|
-
retryable,
|
|
283
|
-
suggestions,
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Handle object-type errors (API responses, etc.)
|
|
288
|
-
*/
|
|
289
|
-
handleObjectError(error, context, timestamp) {
|
|
290
|
-
const message = String(error.message || error.error || "Unknown error");
|
|
291
|
-
const code = error.code || error.status;
|
|
292
|
-
let type = ErrorType.API_ERROR;
|
|
293
|
-
let severity = ErrorSeverity.MEDIUM;
|
|
294
|
-
let retryable = false;
|
|
295
|
-
if (typeof code === "number") {
|
|
296
|
-
if (code >= 500) {
|
|
297
|
-
severity = ErrorSeverity.HIGH;
|
|
298
|
-
retryable = true;
|
|
299
|
-
}
|
|
300
|
-
else if (code === 429) {
|
|
301
|
-
type = ErrorType.RATE_LIMIT_ERROR;
|
|
302
|
-
retryable = true;
|
|
303
|
-
}
|
|
304
|
-
else if (code === 401 || code === 403) {
|
|
305
|
-
type = ErrorType.AUTHENTICATION_ERROR;
|
|
306
|
-
severity = ErrorSeverity.HIGH;
|
|
307
|
-
}
|
|
237
|
+
else if (message.includes("setup") || message.includes("init")) {
|
|
238
|
+
type = ErrorType.PROJECT_SETUP_ERROR;
|
|
308
239
|
}
|
|
309
|
-
|
|
310
|
-
type
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
code: typeof code === "string" || typeof code === "number" ? code : undefined,
|
|
314
|
-
timestamp,
|
|
315
|
-
source: context.operation,
|
|
316
|
-
details: error,
|
|
317
|
-
retryable,
|
|
318
|
-
});
|
|
240
|
+
else if (message.includes("auth") || message.includes("login")) {
|
|
241
|
+
type = ErrorType.AUTHENTICATION_ERROR;
|
|
242
|
+
}
|
|
243
|
+
return this.createError(type, error.message, error, context);
|
|
319
244
|
}
|
|
320
245
|
}
|
|
321
246
|
exports.ErrorHandler = ErrorHandler;
|
|
322
|
-
// Export singleton instance
|
|
323
|
-
exports.errorHandler = ErrorHandler.getInstance();
|
|
324
|
-
// Utility functions for common error scenarios
|
|
325
|
-
const createAIProviderError = (error, provider, operation) => exports.errorHandler.handleAIProviderError(error, provider, operation);
|
|
326
|
-
exports.createAIProviderError = createAIProviderError;
|
|
327
|
-
const createNetworkError = (error, context) => exports.errorHandler.handleNetworkError(error, context);
|
|
328
|
-
exports.createNetworkError = createNetworkError;
|
|
329
|
-
const createFileSystemError = (error, filePath) => exports.errorHandler.handleFileSystemError(error, filePath);
|
|
330
|
-
exports.createFileSystemError = createFileSystemError;
|
|
331
|
-
const createError = (error, context, type) => exports.errorHandler.createError(error, context, type);
|
|
332
|
-
exports.createError = createError;
|
|
333
247
|
//# sourceMappingURL=errorHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/utils/errorHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/utils/errorHandler.ts"],"names":[],"mappings":"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"}
|