mycontext-cli 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 (94) hide show
  1. package/README.md +440 -0
  2. package/dist/cli/src/agents/implementations/CodeGenSubAgent.d.ts +43 -0
  3. package/dist/cli/src/agents/implementations/CodeGenSubAgent.d.ts.map +1 -0
  4. package/dist/cli/src/agents/implementations/CodeGenSubAgent.js +1440 -0
  5. package/dist/cli/src/agents/implementations/CodeGenSubAgent.js.map +1 -0
  6. package/dist/cli/src/agents/implementations/DocsSubAgent.d.ts +35 -0
  7. package/dist/cli/src/agents/implementations/DocsSubAgent.d.ts.map +1 -0
  8. package/dist/cli/src/agents/implementations/DocsSubAgent.js +351 -0
  9. package/dist/cli/src/agents/implementations/DocsSubAgent.js.map +1 -0
  10. package/dist/cli/src/agents/implementations/QASubAgent.d.ts +31 -0
  11. package/dist/cli/src/agents/implementations/QASubAgent.d.ts.map +1 -0
  12. package/dist/cli/src/agents/implementations/QASubAgent.js +190 -0
  13. package/dist/cli/src/agents/implementations/QASubAgent.js.map +1 -0
  14. package/dist/cli/src/agents/interfaces/SubAgent.d.ts +157 -0
  15. package/dist/cli/src/agents/interfaces/SubAgent.d.ts.map +1 -0
  16. package/dist/cli/src/agents/interfaces/SubAgent.js +7 -0
  17. package/dist/cli/src/agents/interfaces/SubAgent.js.map +1 -0
  18. package/dist/cli/src/agents/orchestrator/SubAgentOrchestrator.d.ts +59 -0
  19. package/dist/cli/src/agents/orchestrator/SubAgentOrchestrator.d.ts.map +1 -0
  20. package/dist/cli/src/agents/orchestrator/SubAgentOrchestrator.js +305 -0
  21. package/dist/cli/src/agents/orchestrator/SubAgentOrchestrator.js.map +1 -0
  22. package/dist/cli/src/agents/personalities/definitions.d.ts +34 -0
  23. package/dist/cli/src/agents/personalities/definitions.d.ts.map +1 -0
  24. package/dist/cli/src/agents/personalities/definitions.js +360 -0
  25. package/dist/cli/src/agents/personalities/definitions.js.map +1 -0
  26. package/dist/cli/src/cli.d.ts +3 -0
  27. package/dist/cli/src/cli.d.ts.map +1 -0
  28. package/dist/cli/src/cli.js +286 -0
  29. package/dist/cli/src/cli.js.map +1 -0
  30. package/dist/cli/src/commands/auth.d.ts +23 -0
  31. package/dist/cli/src/commands/auth.d.ts.map +1 -0
  32. package/dist/cli/src/commands/auth.js +212 -0
  33. package/dist/cli/src/commands/auth.js.map +1 -0
  34. package/dist/cli/src/commands/generate-components.d.ts +28 -0
  35. package/dist/cli/src/commands/generate-components.d.ts.map +1 -0
  36. package/dist/cli/src/commands/generate-components.js +680 -0
  37. package/dist/cli/src/commands/generate-components.js.map +1 -0
  38. package/dist/cli/src/commands/generate.d.ts +108 -0
  39. package/dist/cli/src/commands/generate.d.ts.map +1 -0
  40. package/dist/cli/src/commands/generate.js +1984 -0
  41. package/dist/cli/src/commands/generate.js.map +1 -0
  42. package/dist/cli/src/commands/init.d.ts +13 -0
  43. package/dist/cli/src/commands/init.d.ts.map +1 -0
  44. package/dist/cli/src/commands/init.js +91 -0
  45. package/dist/cli/src/commands/init.js.map +1 -0
  46. package/dist/cli/src/commands/list.d.ts +17 -0
  47. package/dist/cli/src/commands/list.d.ts.map +1 -0
  48. package/dist/cli/src/commands/list.js +209 -0
  49. package/dist/cli/src/commands/list.js.map +1 -0
  50. package/dist/cli/src/commands/preview.d.ts +23 -0
  51. package/dist/cli/src/commands/preview.d.ts.map +1 -0
  52. package/dist/cli/src/commands/preview.js +1200 -0
  53. package/dist/cli/src/commands/preview.js.map +1 -0
  54. package/dist/cli/src/commands/status.d.ts +21 -0
  55. package/dist/cli/src/commands/status.d.ts.map +1 -0
  56. package/dist/cli/src/commands/status.js +287 -0
  57. package/dist/cli/src/commands/status.js.map +1 -0
  58. package/dist/cli/src/commands/validate.d.ts +22 -0
  59. package/dist/cli/src/commands/validate.d.ts.map +1 -0
  60. package/dist/cli/src/commands/validate.js +259 -0
  61. package/dist/cli/src/commands/validate.js.map +1 -0
  62. package/dist/cli/src/types/index.d.ts +152 -0
  63. package/dist/cli/src/types/index.d.ts.map +1 -0
  64. package/dist/cli/src/types/index.js +3 -0
  65. package/dist/cli/src/types/index.js.map +1 -0
  66. package/dist/cli/src/utils/apiKeyManager.d.ts +137 -0
  67. package/dist/cli/src/utils/apiKeyManager.d.ts.map +1 -0
  68. package/dist/cli/src/utils/apiKeyManager.js +471 -0
  69. package/dist/cli/src/utils/apiKeyManager.js.map +1 -0
  70. package/dist/cli/src/utils/errorHandler.d.ts +105 -0
  71. package/dist/cli/src/utils/errorHandler.d.ts.map +1 -0
  72. package/dist/cli/src/utils/errorHandler.js +332 -0
  73. package/dist/cli/src/utils/errorHandler.js.map +1 -0
  74. package/dist/cli/src/utils/fileSystem.d.ts +58 -0
  75. package/dist/cli/src/utils/fileSystem.d.ts.map +1 -0
  76. package/dist/cli/src/utils/fileSystem.js +230 -0
  77. package/dist/cli/src/utils/fileSystem.js.map +1 -0
  78. package/dist/cli/src/utils/githubModels.d.ts +53 -0
  79. package/dist/cli/src/utils/githubModels.d.ts.map +1 -0
  80. package/dist/cli/src/utils/githubModels.js +239 -0
  81. package/dist/cli/src/utils/githubModels.js.map +1 -0
  82. package/dist/cli/src/utils/spinner.d.ts +28 -0
  83. package/dist/cli/src/utils/spinner.d.ts.map +1 -0
  84. package/dist/cli/src/utils/spinner.js +112 -0
  85. package/dist/cli/src/utils/spinner.js.map +1 -0
  86. package/dist/cli/src/utils/xaiClient.d.ts +59 -0
  87. package/dist/cli/src/utils/xaiClient.d.ts.map +1 -0
  88. package/dist/cli/src/utils/xaiClient.js +244 -0
  89. package/dist/cli/src/utils/xaiClient.js.map +1 -0
  90. package/dist/lib/analytics/usage-tracker.d.ts +125 -0
  91. package/dist/lib/analytics/usage-tracker.d.ts.map +1 -0
  92. package/dist/lib/analytics/usage-tracker.js +429 -0
  93. package/dist/lib/analytics/usage-tracker.js.map +1 -0
  94. package/package.json +64 -0
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ /**
3
+ * Comprehensive Error Handling System for MyContext CLI
4
+ *
5
+ * Provides structured error handling, logging, and recovery mechanisms
6
+ * for AI providers, API calls, and CLI operations.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createError = exports.createFileSystemError = exports.createNetworkError = exports.createAIProviderError = exports.errorHandler = exports.ErrorHandler = exports.MyContextError = exports.ErrorSeverity = exports.ErrorType = void 0;
10
+ var ErrorType;
11
+ (function (ErrorType) {
12
+ ErrorType["API_ERROR"] = "API_ERROR";
13
+ ErrorType["NETWORK_ERROR"] = "NETWORK_ERROR";
14
+ ErrorType["AUTHENTICATION_ERROR"] = "AUTHENTICATION_ERROR";
15
+ ErrorType["VALIDATION_ERROR"] = "VALIDATION_ERROR";
16
+ ErrorType["FILE_SYSTEM_ERROR"] = "FILE_SYSTEM_ERROR";
17
+ ErrorType["CONFIGURATION_ERROR"] = "CONFIGURATION_ERROR";
18
+ ErrorType["AI_PROVIDER_ERROR"] = "AI_PROVIDER_ERROR";
19
+ ErrorType["RATE_LIMIT_ERROR"] = "RATE_LIMIT_ERROR";
20
+ ErrorType["TIMEOUT_ERROR"] = "TIMEOUT_ERROR";
21
+ ErrorType["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
22
+ })(ErrorType || (exports.ErrorType = ErrorType = {}));
23
+ var ErrorSeverity;
24
+ (function (ErrorSeverity) {
25
+ ErrorSeverity["LOW"] = "LOW";
26
+ ErrorSeverity["MEDIUM"] = "MEDIUM";
27
+ ErrorSeverity["HIGH"] = "HIGH";
28
+ ErrorSeverity["CRITICAL"] = "CRITICAL";
29
+ })(ErrorSeverity || (exports.ErrorSeverity = ErrorSeverity = {}));
30
+ class MyContextError extends Error {
31
+ constructor(structuredError) {
32
+ super(structuredError.message);
33
+ this.name = "MyContextError";
34
+ this.type = structuredError.type;
35
+ this.severity = structuredError.severity;
36
+ this.code = structuredError.code;
37
+ this.details = structuredError.details;
38
+ this.timestamp = structuredError.timestamp;
39
+ this.source = structuredError.source;
40
+ this.retryable = structuredError.retryable;
41
+ this.retryAfter = structuredError.retryAfter;
42
+ this.suggestions = structuredError.suggestions;
43
+ }
44
+ toJSON() {
45
+ return {
46
+ type: this.type,
47
+ severity: this.severity,
48
+ message: this.message,
49
+ code: this.code,
50
+ details: this.details,
51
+ timestamp: this.timestamp,
52
+ source: this.source,
53
+ retryable: this.retryable,
54
+ retryAfter: this.retryAfter,
55
+ suggestions: this.suggestions,
56
+ };
57
+ }
58
+ }
59
+ exports.MyContextError = MyContextError;
60
+ class ErrorHandler {
61
+ constructor() {
62
+ this.errorLog = [];
63
+ this.maxLogSize = 100;
64
+ }
65
+ static getInstance() {
66
+ if (!ErrorHandler.instance) {
67
+ ErrorHandler.instance = new ErrorHandler();
68
+ }
69
+ return ErrorHandler.instance;
70
+ }
71
+ /**
72
+ * Create a structured error from various input types
73
+ */
74
+ createError(error, context = {}, defaultType = ErrorType.UNKNOWN_ERROR) {
75
+ const timestamp = new Date().toISOString();
76
+ // Handle different error types
77
+ if (error instanceof MyContextError) {
78
+ return error;
79
+ }
80
+ if (error instanceof Error) {
81
+ return this.handleStandardError(error, context, timestamp);
82
+ }
83
+ if (typeof error === "string") {
84
+ return new MyContextError({
85
+ type: defaultType,
86
+ severity: ErrorSeverity.MEDIUM,
87
+ message: error,
88
+ timestamp,
89
+ source: context.operation,
90
+ retryable: false,
91
+ });
92
+ }
93
+ // Handle fetch errors and API responses
94
+ if (typeof error === "object" && error !== null) {
95
+ return this.handleObjectError(error, context, timestamp);
96
+ }
97
+ return new MyContextError({
98
+ type: ErrorType.UNKNOWN_ERROR,
99
+ severity: ErrorSeverity.MEDIUM,
100
+ message: "An unknown error occurred",
101
+ timestamp,
102
+ source: context.operation,
103
+ details: { originalError: error },
104
+ retryable: false,
105
+ });
106
+ }
107
+ /**
108
+ * Handle AI provider specific errors
109
+ */
110
+ handleAIProviderError(error, provider, operation, requestData) {
111
+ const context = {
112
+ operation,
113
+ provider,
114
+ metadata: requestData,
115
+ };
116
+ const structuredError = this.createError(error, context, ErrorType.AI_PROVIDER_ERROR);
117
+ // Add provider-specific error handling
118
+ if (typeof error === "object" && error !== null && "status" in error) {
119
+ const status = error.status;
120
+ switch (status) {
121
+ case 401:
122
+ return new MyContextError({
123
+ ...structuredError,
124
+ type: ErrorType.AUTHENTICATION_ERROR,
125
+ suggestions: [
126
+ "Check your API key configuration",
127
+ "Verify API key permissions",
128
+ "Contact support if the issue persists",
129
+ ],
130
+ });
131
+ case 429:
132
+ return new MyContextError({
133
+ ...structuredError,
134
+ type: ErrorType.RATE_LIMIT_ERROR,
135
+ retryable: true,
136
+ retryAfter: 60, // Default retry after 60 seconds
137
+ suggestions: [
138
+ "Wait before retrying",
139
+ "Consider upgrading your API plan",
140
+ "Implement exponential backoff",
141
+ ],
142
+ });
143
+ case 500:
144
+ case 502:
145
+ case 503:
146
+ case 504:
147
+ return new MyContextError({
148
+ ...structuredError,
149
+ retryable: true,
150
+ retryAfter: 30,
151
+ suggestions: [
152
+ "Retry the request after a short delay",
153
+ "Check provider status page",
154
+ "Try a different AI provider if available",
155
+ ],
156
+ });
157
+ }
158
+ }
159
+ this.logError(structuredError);
160
+ return structuredError;
161
+ }
162
+ /**
163
+ * Handle network and connectivity errors
164
+ */
165
+ handleNetworkError(error, context = {}) {
166
+ const baseError = this.createError(error, context, ErrorType.NETWORK_ERROR);
167
+ const networkError = new MyContextError({
168
+ ...baseError.toJSON(),
169
+ retryable: true,
170
+ retryAfter: 10,
171
+ suggestions: [
172
+ "Check your internet connection",
173
+ "Verify firewall settings",
174
+ "Try again in a few moments",
175
+ ],
176
+ });
177
+ this.logError(networkError);
178
+ return networkError;
179
+ }
180
+ /**
181
+ * Handle file system errors
182
+ */
183
+ handleFileSystemError(error, filePath) {
184
+ const context = {
185
+ operation: "file_system",
186
+ metadata: { filePath },
187
+ };
188
+ const baseError = this.createError(error, context, ErrorType.FILE_SYSTEM_ERROR);
189
+ const fileSystemError = new MyContextError({
190
+ ...baseError.toJSON(),
191
+ suggestions: [
192
+ "Check file permissions",
193
+ "Verify the file path exists",
194
+ "Ensure sufficient disk space",
195
+ "Check if the file is in use by another process",
196
+ ],
197
+ });
198
+ this.logError(fileSystemError);
199
+ return fileSystemError;
200
+ }
201
+ /**
202
+ * Log error for debugging and monitoring
203
+ */
204
+ logError(error) {
205
+ const errorData = error instanceof MyContextError ? error.toJSON() : error;
206
+ this.errorLog.push(errorData);
207
+ // Maintain log size
208
+ if (this.errorLog.length > this.maxLogSize) {
209
+ this.errorLog = this.errorLog.slice(-this.maxLogSize);
210
+ }
211
+ // Console logging based on severity
212
+ switch (errorData.severity) {
213
+ case ErrorSeverity.CRITICAL:
214
+ console.error("🔴 CRITICAL ERROR:", errorData);
215
+ break;
216
+ case ErrorSeverity.HIGH:
217
+ console.error("🟠 HIGH SEVERITY ERROR:", errorData);
218
+ break;
219
+ case ErrorSeverity.MEDIUM:
220
+ console.warn("🟡 MEDIUM SEVERITY ERROR:", errorData);
221
+ break;
222
+ case ErrorSeverity.LOW:
223
+ console.log("🟢 LOW SEVERITY ERROR:", errorData);
224
+ break;
225
+ }
226
+ }
227
+ /**
228
+ * Get recent errors for debugging
229
+ */
230
+ getRecentErrors(count = 10) {
231
+ return this.errorLog.slice(-count);
232
+ }
233
+ /**
234
+ * Clear error log
235
+ */
236
+ clearErrors() {
237
+ this.errorLog = [];
238
+ }
239
+ /**
240
+ * Handle standard JavaScript errors
241
+ */
242
+ handleStandardError(error, context, timestamp) {
243
+ let type = ErrorType.UNKNOWN_ERROR;
244
+ let severity = ErrorSeverity.MEDIUM;
245
+ let retryable = false;
246
+ const suggestions = [];
247
+ // Categorize by error message patterns
248
+ const message = error.message.toLowerCase();
249
+ if (message.includes("network") || message.includes("fetch")) {
250
+ type = ErrorType.NETWORK_ERROR;
251
+ retryable = true;
252
+ suggestions.push("Check your internet connection");
253
+ }
254
+ else if (message.includes("timeout")) {
255
+ type = ErrorType.TIMEOUT_ERROR;
256
+ retryable = true;
257
+ suggestions.push("Try again with a longer timeout");
258
+ }
259
+ else if (message.includes("permission") || message.includes("access")) {
260
+ type = ErrorType.FILE_SYSTEM_ERROR;
261
+ suggestions.push("Check file permissions and access rights");
262
+ }
263
+ else if (message.includes("config") || message.includes("setting")) {
264
+ type = ErrorType.CONFIGURATION_ERROR;
265
+ suggestions.push("Check your configuration settings");
266
+ }
267
+ else if (message.includes("validation") || message.includes("invalid")) {
268
+ type = ErrorType.VALIDATION_ERROR;
269
+ suggestions.push("Verify your input data");
270
+ }
271
+ return new MyContextError({
272
+ type,
273
+ severity,
274
+ message: error.message,
275
+ timestamp,
276
+ source: context.operation,
277
+ details: {
278
+ stack: error.stack,
279
+ name: error.name,
280
+ },
281
+ retryable,
282
+ suggestions,
283
+ });
284
+ }
285
+ /**
286
+ * Handle object-type errors (API responses, etc.)
287
+ */
288
+ handleObjectError(error, context, timestamp) {
289
+ const message = String(error.message || error.error || "Unknown error");
290
+ const code = error.code || error.status;
291
+ let type = ErrorType.API_ERROR;
292
+ let severity = ErrorSeverity.MEDIUM;
293
+ let retryable = false;
294
+ if (typeof code === "number") {
295
+ if (code >= 500) {
296
+ severity = ErrorSeverity.HIGH;
297
+ retryable = true;
298
+ }
299
+ else if (code === 429) {
300
+ type = ErrorType.RATE_LIMIT_ERROR;
301
+ retryable = true;
302
+ }
303
+ else if (code === 401 || code === 403) {
304
+ type = ErrorType.AUTHENTICATION_ERROR;
305
+ severity = ErrorSeverity.HIGH;
306
+ }
307
+ }
308
+ return new MyContextError({
309
+ type,
310
+ severity,
311
+ message,
312
+ code: typeof code === "string" || typeof code === "number" ? code : undefined,
313
+ timestamp,
314
+ source: context.operation,
315
+ details: error,
316
+ retryable,
317
+ });
318
+ }
319
+ }
320
+ exports.ErrorHandler = ErrorHandler;
321
+ // Export singleton instance
322
+ exports.errorHandler = ErrorHandler.getInstance();
323
+ // Utility functions for common error scenarios
324
+ const createAIProviderError = (error, provider, operation) => exports.errorHandler.handleAIProviderError(error, provider, operation);
325
+ exports.createAIProviderError = createAIProviderError;
326
+ const createNetworkError = (error, context) => exports.errorHandler.handleNetworkError(error, context);
327
+ exports.createNetworkError = createNetworkError;
328
+ const createFileSystemError = (error, filePath) => exports.errorHandler.handleFileSystemError(error, filePath);
329
+ exports.createFileSystemError = createFileSystemError;
330
+ const createError = (error, context, type) => exports.errorHandler.createError(error, context, type);
331
+ exports.createError = createError;
332
+ //# sourceMappingURL=errorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../../src/utils/errorHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { ProjectConfig } from "../types";
2
+ export declare class FileSystemManager {
3
+ private readonly mycontextDir;
4
+ private readonly contextDir;
5
+ /**
6
+ * Initialize a new project directory structure
7
+ */
8
+ initializeProject(projectName: string, description: string, workingDir: string): Promise<ProjectConfig>;
9
+ /**
10
+ * Read a file from the filesystem
11
+ */
12
+ readFile(filePath: string): Promise<string>;
13
+ /**
14
+ * Write a file to the filesystem
15
+ */
16
+ writeFile(filePath: string, content: string): Promise<void>;
17
+ /**
18
+ * Check if a file or directory exists
19
+ */
20
+ exists(filePath: string): Promise<boolean>;
21
+ /**
22
+ * Ensure a directory exists (create if it doesn't)
23
+ */
24
+ ensureDir(dirPath: string): Promise<void>;
25
+ /**
26
+ * Check if a directory is a MyContext project
27
+ */
28
+ isMyContextProject(dir: string): Promise<boolean>;
29
+ /**
30
+ * Get project configuration
31
+ */
32
+ getProjectConfig(projectPath: string): Promise<ProjectConfig | null>;
33
+ /**
34
+ * Update project configuration
35
+ */
36
+ updateProjectConfig(projectPath: string, updates: Partial<ProjectConfig>): Promise<void>;
37
+ /**
38
+ * List context files
39
+ */
40
+ listContextFiles(projectPath: string): Promise<string[]>;
41
+ /**
42
+ * Create a PRD template
43
+ */
44
+ private createPRDTemplate;
45
+ /**
46
+ * Create atomic file operations
47
+ */
48
+ atomicWrite(filePath: string, content: string): Promise<void>;
49
+ /**
50
+ * Backup a file
51
+ */
52
+ backupFile(filePath: string): Promise<string>;
53
+ /**
54
+ * Restore a file from backup
55
+ */
56
+ restoreFile(backupPath: string, targetPath: string): Promise<void>;
57
+ }
58
+ //# sourceMappingURL=fileSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileSystem.d.ts","sourceRoot":"","sources":["../../../../src/utils/fileSystem.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAgB,MAAM,UAAU,CAAC;AAEvD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC;;OAEG;IACG,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IAoCzB;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjD;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjE;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACG,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUvD;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAa1E;;OAEG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC;IAiBhB;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAa9D;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBnE;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMnD;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzE"}
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.FileSystemManager = void 0;
37
+ const fs = __importStar(require("fs-extra"));
38
+ const path = __importStar(require("path"));
39
+ const uuid_1 = require("uuid");
40
+ class FileSystemManager {
41
+ constructor() {
42
+ this.mycontextDir = ".mycontext";
43
+ this.contextDir = "context";
44
+ }
45
+ /**
46
+ * Initialize a new project directory structure
47
+ */
48
+ async initializeProject(projectName, description, workingDir) {
49
+ const projectId = (0, uuid_1.v4)();
50
+ const timestamp = new Date().toISOString();
51
+ const config = {
52
+ id: projectId,
53
+ name: projectName,
54
+ description,
55
+ createdAt: timestamp,
56
+ updatedAt: timestamp,
57
+ contextPath: path.join(this.contextDir, projectId),
58
+ version: "0.1.0",
59
+ status: "initialized",
60
+ };
61
+ // Create directory structure
62
+ const projectPath = path.join(workingDir, projectName);
63
+ const contextPath = path.join(projectPath, this.contextDir);
64
+ const mycontextPath = path.join(projectPath, this.mycontextDir);
65
+ await fs.ensureDir(projectPath);
66
+ await fs.ensureDir(contextPath);
67
+ await fs.ensureDir(mycontextPath);
68
+ // Write config file
69
+ await fs.writeJson(path.join(mycontextPath, "config.json"), config, {
70
+ spaces: 2,
71
+ });
72
+ // Create initial PRD template
73
+ const prdTemplate = this.createPRDTemplate(projectName, description);
74
+ await fs.writeFile(path.join(contextPath, "prd.md"), prdTemplate);
75
+ return config;
76
+ }
77
+ /**
78
+ * Read a file from the filesystem
79
+ */
80
+ async readFile(filePath) {
81
+ return await fs.readFile(filePath, "utf-8");
82
+ }
83
+ /**
84
+ * Write a file to the filesystem
85
+ */
86
+ async writeFile(filePath, content) {
87
+ // Ensure directory exists
88
+ const dir = path.dirname(filePath);
89
+ await fs.ensureDir(dir);
90
+ await fs.writeFile(filePath, content, "utf-8");
91
+ }
92
+ /**
93
+ * Check if a file or directory exists
94
+ */
95
+ async exists(filePath) {
96
+ return await fs.pathExists(filePath);
97
+ }
98
+ /**
99
+ * Ensure a directory exists (create if it doesn't)
100
+ */
101
+ async ensureDir(dirPath) {
102
+ await fs.ensureDir(dirPath);
103
+ }
104
+ /**
105
+ * Check if a directory is a MyContext project
106
+ */
107
+ async isMyContextProject(dir) {
108
+ try {
109
+ const configPath = path.join(dir, this.mycontextDir, "config.json");
110
+ await fs.access(configPath);
111
+ return true;
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ }
117
+ /**
118
+ * Get project configuration
119
+ */
120
+ async getProjectConfig(projectPath) {
121
+ try {
122
+ const configPath = path.join(projectPath, this.mycontextDir, "config.json");
123
+ return await fs.readJson(configPath);
124
+ }
125
+ catch {
126
+ return null;
127
+ }
128
+ }
129
+ /**
130
+ * Update project configuration
131
+ */
132
+ async updateProjectConfig(projectPath, updates) {
133
+ const configPath = path.join(projectPath, this.mycontextDir, "config.json");
134
+ const config = await this.getProjectConfig(projectPath);
135
+ if (!config) {
136
+ throw new Error("Project configuration not found");
137
+ }
138
+ const updatedConfig = {
139
+ ...config,
140
+ ...updates,
141
+ updatedAt: new Date().toISOString(),
142
+ };
143
+ await fs.writeJson(configPath, updatedConfig, { spaces: 2 });
144
+ }
145
+ /**
146
+ * List context files
147
+ */
148
+ async listContextFiles(projectPath) {
149
+ try {
150
+ const contextPath = path.join(projectPath, this.contextDir);
151
+ const files = await fs.readdir(contextPath);
152
+ return files.filter((file) => file.endsWith(".md") || file.endsWith(".ts") || file.endsWith(".json"));
153
+ }
154
+ catch {
155
+ return [];
156
+ }
157
+ }
158
+ /**
159
+ * Create a PRD template
160
+ */
161
+ createPRDTemplate(projectName, description) {
162
+ return `# Product Requirements Document
163
+
164
+ ## Project Overview
165
+ **Project Name:** ${projectName}
166
+ **Description:** ${description}
167
+
168
+ ## Core Features
169
+ - [Feature 1]: Brief description
170
+ - [Feature 2]: Brief description
171
+ - [Feature 3]: Brief description
172
+
173
+ ## User Stories
174
+ - As a user, I want to [action] so that [benefit]
175
+ - As an admin, I need to [action] so that [benefit]
176
+
177
+ ## Technical Requirements
178
+ - Technology Stack: [List technologies]
179
+ - Database: [Database choice]
180
+ - Authentication: [Auth method]
181
+
182
+ ## Acceptance Criteria
183
+ - [ ] Feature 1 works correctly
184
+ - [ ] Feature 2 is responsive
185
+ - [ ] Feature 3 is accessible
186
+
187
+ ## Notes
188
+ - Add more details as needed
189
+ - Update this document as requirements evolve
190
+ `;
191
+ }
192
+ /**
193
+ * Create atomic file operations
194
+ */
195
+ async atomicWrite(filePath, content) {
196
+ const tempPath = `${filePath}.tmp`;
197
+ try {
198
+ // Write to temporary file first
199
+ await this.writeFile(tempPath, content);
200
+ // Atomic move
201
+ await fs.move(tempPath, filePath, { overwrite: true });
202
+ }
203
+ catch (error) {
204
+ // Clean up temp file if it exists
205
+ try {
206
+ await fs.remove(tempPath);
207
+ }
208
+ catch {
209
+ // Ignore cleanup errors
210
+ }
211
+ throw error;
212
+ }
213
+ }
214
+ /**
215
+ * Backup a file
216
+ */
217
+ async backupFile(filePath) {
218
+ const backupPath = `${filePath}.backup.${Date.now()}`;
219
+ await fs.copy(filePath, backupPath);
220
+ return backupPath;
221
+ }
222
+ /**
223
+ * Restore a file from backup
224
+ */
225
+ async restoreFile(backupPath, targetPath) {
226
+ await fs.copy(backupPath, targetPath);
227
+ }
228
+ }
229
+ exports.FileSystemManager = FileSystemManager;
230
+ //# sourceMappingURL=fileSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileSystem.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem.ts"],"names":[],"mappings":"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"}