@stackmemoryai/stackmemory 0.2.4 → 0.2.6
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 +108 -0
- package/dist/index.js +382 -0
- package/dist/src/analytics/api/analytics-api.d.ts +24 -0
- package/dist/src/analytics/api/analytics-api.d.ts.map +1 -0
- package/dist/src/analytics/api/analytics-api.js +279 -0
- package/dist/src/analytics/api/analytics-api.js.map +1 -0
- package/dist/src/analytics/core/analytics-service.d.ts +23 -0
- package/dist/src/analytics/core/analytics-service.d.ts.map +1 -0
- package/dist/src/analytics/core/analytics-service.js +160 -0
- package/dist/src/analytics/core/analytics-service.js.map +1 -0
- package/dist/src/analytics/index.d.ts +12 -0
- package/dist/src/analytics/index.d.ts.map +1 -0
- package/dist/src/analytics/index.js +11 -0
- package/dist/src/analytics/index.js.map +1 -0
- package/dist/src/analytics/queries/metrics-queries.d.ts +11 -0
- package/dist/src/analytics/queries/metrics-queries.d.ts.map +1 -0
- package/dist/src/analytics/queries/metrics-queries.js +179 -0
- package/dist/src/analytics/queries/metrics-queries.js.map +1 -0
- package/dist/src/analytics/types/metrics.d.ts +60 -0
- package/dist/src/analytics/types/metrics.d.ts.map +1 -0
- package/dist/src/analytics/types/metrics.js +2 -0
- package/dist/src/analytics/types/metrics.js.map +1 -0
- package/dist/src/cli/analytics-viewer.d.ts +3 -0
- package/dist/src/cli/analytics-viewer.d.ts.map +1 -0
- package/dist/src/cli/analytics-viewer.js +89 -0
- package/dist/src/cli/analytics-viewer.js.map +1 -0
- package/dist/src/cli/browser-test.d.ts +6 -0
- package/dist/src/cli/browser-test.d.ts.map +1 -0
- package/dist/src/cli/browser-test.js +32 -0
- package/dist/src/cli/browser-test.js.map +1 -0
- package/dist/src/cli/cli.js +157 -0
- package/dist/src/cli/cli.js.map +1 -1
- package/dist/src/cli/commands/projects.d.ts +8 -0
- package/dist/src/cli/commands/projects.d.ts.map +1 -0
- package/dist/src/cli/commands/projects.js +220 -0
- package/dist/src/cli/commands/projects.js.map +1 -0
- package/dist/src/cli/index.d.ts +7 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +704 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/project-commands.d.ts +8 -0
- package/dist/src/cli/project-commands.d.ts.map +1 -0
- package/dist/src/cli/project-commands.js +212 -0
- package/dist/src/cli/project-commands.js.map +1 -0
- package/dist/src/cli/utils/viewer.d.ts +3 -0
- package/dist/src/cli/utils/viewer.d.ts.map +1 -0
- package/dist/src/cli/utils/viewer.js +89 -0
- package/dist/src/cli/utils/viewer.js.map +1 -0
- package/dist/src/core/context/frame-manager.d.ts +106 -0
- package/dist/src/core/context/frame-manager.d.ts.map +1 -0
- package/dist/src/core/context/frame-manager.js +387 -0
- package/dist/src/core/context/frame-manager.js.map +1 -0
- package/dist/src/core/logger.test.js +1 -1
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/monitoring/error-handler.d.ts +46 -0
- package/dist/src/core/monitoring/error-handler.d.ts.map +1 -0
- package/dist/src/core/monitoring/error-handler.js +212 -0
- package/dist/src/core/monitoring/error-handler.js.map +1 -0
- package/dist/src/core/monitoring/logger.d.ts +24 -0
- package/dist/src/core/monitoring/logger.d.ts.map +1 -0
- package/dist/src/core/monitoring/logger.js +121 -0
- package/dist/src/core/monitoring/logger.js.map +1 -0
- package/dist/src/core/monitoring/metrics.d.ts +7 -0
- package/dist/src/core/monitoring/metrics.d.ts.map +1 -0
- package/dist/src/core/monitoring/metrics.js +13 -0
- package/dist/src/core/monitoring/metrics.js.map +1 -0
- package/dist/src/core/monitoring/progress-tracker.d.ts +95 -0
- package/dist/src/core/monitoring/progress-tracker.d.ts.map +1 -0
- package/dist/src/core/monitoring/progress-tracker.js +178 -0
- package/dist/src/core/monitoring/progress-tracker.js.map +1 -0
- package/dist/src/core/project-manager.d.ts +130 -0
- package/dist/src/core/project-manager.d.ts.map +1 -0
- package/dist/src/core/project-manager.js +582 -0
- package/dist/src/core/project-manager.js.map +1 -0
- package/dist/src/core/projects/project-manager.d.ts +130 -0
- package/dist/src/core/projects/project-manager.d.ts.map +1 -0
- package/dist/src/core/projects/project-manager.js +591 -0
- package/dist/src/core/projects/project-manager.js.map +1 -0
- package/dist/src/core/utils/update-checker.d.ts +38 -0
- package/dist/src/core/utils/update-checker.d.ts.map +1 -0
- package/dist/src/core/utils/update-checker.js +156 -0
- package/dist/src/core/utils/update-checker.js.map +1 -0
- package/dist/src/features/analytics/api/analytics-api.d.ts +24 -0
- package/dist/src/features/analytics/api/analytics-api.d.ts.map +1 -0
- package/dist/src/features/analytics/api/analytics-api.js +289 -0
- package/dist/src/features/analytics/api/analytics-api.js.map +1 -0
- package/dist/src/features/analytics/core/analytics-service.d.ts +23 -0
- package/dist/src/features/analytics/core/analytics-service.d.ts.map +1 -0
- package/dist/src/features/analytics/core/analytics-service.js +160 -0
- package/dist/src/features/analytics/core/analytics-service.js.map +1 -0
- package/dist/src/features/analytics/index.d.ts +12 -0
- package/dist/src/features/analytics/index.d.ts.map +1 -0
- package/dist/src/features/analytics/index.js +11 -0
- package/dist/src/features/analytics/index.js.map +1 -0
- package/dist/src/features/analytics/queries/metrics-queries.d.ts +11 -0
- package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +1 -0
- package/dist/src/features/analytics/queries/metrics-queries.js +183 -0
- package/dist/src/features/analytics/queries/metrics-queries.js.map +1 -0
- package/dist/src/features/analytics/types/metrics.d.ts +60 -0
- package/dist/src/features/analytics/types/metrics.d.ts.map +1 -0
- package/dist/src/features/analytics/types/metrics.js +2 -0
- package/dist/src/features/analytics/types/metrics.js.map +1 -0
- package/dist/src/features/browser/browser-mcp.d.ts +94 -0
- package/dist/src/features/browser/browser-mcp.d.ts.map +1 -0
- package/dist/src/features/browser/browser-mcp.js +456 -0
- package/dist/src/features/browser/browser-mcp.js.map +1 -0
- package/dist/src/features/tasks/pebbles-task-store.d.ts +117 -0
- package/dist/src/features/tasks/pebbles-task-store.d.ts.map +1 -0
- package/dist/src/features/tasks/pebbles-task-store.js +335 -0
- package/dist/src/features/tasks/pebbles-task-store.js.map +1 -0
- package/dist/src/features/tasks/task-aware-context.d.ts +103 -0
- package/dist/src/features/tasks/task-aware-context.d.ts.map +1 -0
- package/dist/src/features/tasks/task-aware-context.js +412 -0
- package/dist/src/features/tasks/task-aware-context.js.map +1 -0
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/integrations/browser-mcp.d.ts +94 -0
- package/dist/src/integrations/browser-mcp.d.ts.map +1 -0
- package/dist/src/integrations/browser-mcp.js +431 -0
- package/dist/src/integrations/browser-mcp.js.map +1 -0
- package/dist/src/integrations/linear/auth.d.ts +99 -0
- package/dist/src/integrations/linear/auth.d.ts.map +1 -0
- package/dist/src/integrations/linear/auth.js +319 -0
- package/dist/src/integrations/linear/auth.js.map +1 -0
- package/dist/src/integrations/linear/auto-sync.d.ts +77 -0
- package/dist/src/integrations/linear/auto-sync.d.ts.map +1 -0
- package/dist/src/integrations/linear/auto-sync.js +268 -0
- package/dist/src/integrations/linear/auto-sync.js.map +1 -0
- package/dist/src/integrations/linear/client.d.ts +86 -0
- package/dist/src/integrations/linear/client.d.ts.map +1 -0
- package/dist/src/integrations/linear/client.js +277 -0
- package/dist/src/integrations/linear/client.js.map +1 -0
- package/dist/src/integrations/linear/config.d.ts +51 -0
- package/dist/src/integrations/linear/config.d.ts.map +1 -0
- package/dist/src/integrations/linear/config.js +103 -0
- package/dist/src/integrations/linear/config.js.map +1 -0
- package/dist/src/integrations/linear/sync.d.ts +97 -0
- package/dist/src/integrations/linear/sync.d.ts.map +1 -0
- package/dist/src/integrations/linear/sync.js +391 -0
- package/dist/src/integrations/linear/sync.js.map +1 -0
- package/dist/src/integrations/mcp/server.d.ts +40 -0
- package/dist/src/integrations/mcp/server.d.ts.map +1 -0
- package/dist/src/integrations/mcp/server.js +828 -0
- package/dist/src/integrations/mcp/server.js.map +1 -0
- package/dist/src/mcp/mcp-server.d.ts +1 -0
- package/dist/src/mcp/mcp-server.d.ts.map +1 -1
- package/dist/src/mcp/mcp-server.js +11 -0
- package/dist/src/mcp/mcp-server.js.map +1 -1
- package/dist/src/railway/index.d.ts +7 -0
- package/dist/src/railway/index.d.ts.map +1 -0
- package/dist/src/railway/index.js +401 -0
- package/dist/src/railway/index.js.map +1 -0
- package/dist/src/runway/auth/auth-middleware.d.ts +66 -0
- package/dist/src/runway/auth/auth-middleware.d.ts.map +1 -0
- package/dist/src/runway/auth/auth-middleware.js +337 -0
- package/dist/src/runway/auth/auth-middleware.js.map +1 -0
- package/dist/src/runway/server/runway-mcp-server.d.ts +46 -0
- package/dist/src/runway/server/runway-mcp-server.d.ts.map +1 -0
- package/dist/src/runway/server/runway-mcp-server.js +601 -0
- package/dist/src/runway/server/runway-mcp-server.js.map +1 -0
- package/dist/src/runway.bak/auth/auth-middleware.d.ts +66 -0
- package/dist/src/runway.bak/auth/auth-middleware.d.ts.map +1 -0
- package/dist/src/runway.bak/auth/auth-middleware.js +337 -0
- package/dist/src/runway.bak/auth/auth-middleware.js.map +1 -0
- package/dist/src/runway.bak/server/runway-mcp-server.d.ts +46 -0
- package/dist/src/runway.bak/server/runway-mcp-server.d.ts.map +1 -0
- package/dist/src/runway.bak/server/runway-mcp-server.js +601 -0
- package/dist/src/runway.bak/server/runway-mcp-server.js.map +1 -0
- package/dist/src/servers/production/auth-middleware.d.ts +66 -0
- package/dist/src/servers/production/auth-middleware.d.ts.map +1 -0
- package/dist/src/servers/production/auth-middleware.js +346 -0
- package/dist/src/servers/production/auth-middleware.js.map +1 -0
- package/dist/src/servers/railway/index.d.ts +7 -0
- package/dist/src/servers/railway/index.d.ts.map +1 -0
- package/dist/src/servers/railway/index.js +401 -0
- package/dist/src/servers/railway/index.js.map +1 -0
- package/package.json +27 -5
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive error handling for StackMemory CLI
|
|
3
|
+
*/
|
|
4
|
+
import { logger } from './logger.js';
|
|
5
|
+
export var ErrorCode;
|
|
6
|
+
(function (ErrorCode) {
|
|
7
|
+
// Authentication errors
|
|
8
|
+
ErrorCode["AUTH_FAILED"] = "AUTH_FAILED";
|
|
9
|
+
ErrorCode["TOKEN_EXPIRED"] = "TOKEN_EXPIRED";
|
|
10
|
+
ErrorCode["INVALID_CREDENTIALS"] = "INVALID_CREDENTIALS";
|
|
11
|
+
// File system errors
|
|
12
|
+
ErrorCode["FILE_NOT_FOUND"] = "FILE_NOT_FOUND";
|
|
13
|
+
ErrorCode["PERMISSION_DENIED"] = "PERMISSION_DENIED";
|
|
14
|
+
ErrorCode["DISK_FULL"] = "DISK_FULL";
|
|
15
|
+
// Git operation errors
|
|
16
|
+
ErrorCode["NOT_GIT_REPO"] = "NOT_GIT_REPO";
|
|
17
|
+
ErrorCode["GIT_COMMAND_FAILED"] = "GIT_COMMAND_FAILED";
|
|
18
|
+
ErrorCode["INVALID_BRANCH"] = "INVALID_BRANCH";
|
|
19
|
+
// Database errors
|
|
20
|
+
ErrorCode["DB_CONNECTION_FAILED"] = "DB_CONNECTION_FAILED";
|
|
21
|
+
ErrorCode["DB_QUERY_FAILED"] = "DB_QUERY_FAILED";
|
|
22
|
+
ErrorCode["DB_CORRUPTION"] = "DB_CORRUPTION";
|
|
23
|
+
// Network errors
|
|
24
|
+
ErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
25
|
+
ErrorCode["API_ERROR"] = "API_ERROR";
|
|
26
|
+
ErrorCode["TIMEOUT"] = "TIMEOUT";
|
|
27
|
+
// Validation errors
|
|
28
|
+
ErrorCode["INVALID_INPUT"] = "INVALID_INPUT";
|
|
29
|
+
ErrorCode["VALIDATION_FAILED"] = "VALIDATION_FAILED";
|
|
30
|
+
// General errors
|
|
31
|
+
ErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
|
|
32
|
+
ErrorCode["OPERATION_FAILED"] = "OPERATION_FAILED";
|
|
33
|
+
ErrorCode["CONFIGURATION_ERROR"] = "CONFIGURATION_ERROR";
|
|
34
|
+
})(ErrorCode || (ErrorCode = {}));
|
|
35
|
+
export class StackMemoryError extends Error {
|
|
36
|
+
code;
|
|
37
|
+
context;
|
|
38
|
+
userMessage;
|
|
39
|
+
recoverable;
|
|
40
|
+
constructor(code, message, userMessage, context = {}, recoverable = false, cause) {
|
|
41
|
+
super(message);
|
|
42
|
+
this.name = 'StackMemoryError';
|
|
43
|
+
this.code = code;
|
|
44
|
+
this.context = context;
|
|
45
|
+
this.userMessage = userMessage || this.getDefaultUserMessage(code);
|
|
46
|
+
this.recoverable = recoverable;
|
|
47
|
+
if (cause && Error.captureStackTrace) {
|
|
48
|
+
Error.captureStackTrace(this, StackMemoryError);
|
|
49
|
+
}
|
|
50
|
+
// Log the error
|
|
51
|
+
logger.error(message, cause, {
|
|
52
|
+
code,
|
|
53
|
+
context,
|
|
54
|
+
recoverable,
|
|
55
|
+
userMessage: this.userMessage,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
getDefaultUserMessage(code) {
|
|
59
|
+
switch (code) {
|
|
60
|
+
case ErrorCode.AUTH_FAILED:
|
|
61
|
+
return 'Authentication failed. Please check your credentials and try again.';
|
|
62
|
+
case ErrorCode.NOT_GIT_REPO:
|
|
63
|
+
return 'This command requires a git repository. Please run it from within a git repository.';
|
|
64
|
+
case ErrorCode.PERMISSION_DENIED:
|
|
65
|
+
return 'Permission denied. Please check file permissions or run with appropriate privileges.';
|
|
66
|
+
case ErrorCode.NETWORK_ERROR:
|
|
67
|
+
return 'Network error. Please check your internet connection and try again.';
|
|
68
|
+
case ErrorCode.INVALID_INPUT:
|
|
69
|
+
return 'Invalid input provided. Please check your command and try again.';
|
|
70
|
+
case ErrorCode.DB_CONNECTION_FAILED:
|
|
71
|
+
return 'Database connection failed. Please try again or contact support if the issue persists.';
|
|
72
|
+
case ErrorCode.GIT_COMMAND_FAILED:
|
|
73
|
+
return 'Git operation failed. Please ensure your repository is in a valid state.';
|
|
74
|
+
default:
|
|
75
|
+
return 'An unexpected error occurred. Please try again or contact support.';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
static fromNodeError(nodeError, context = {}) {
|
|
79
|
+
const code = nodeError.code;
|
|
80
|
+
switch (code) {
|
|
81
|
+
case 'ENOENT':
|
|
82
|
+
return new StackMemoryError(ErrorCode.FILE_NOT_FOUND, `File or directory not found: ${nodeError.path}`, 'The requested file or directory was not found.', { ...context, path: nodeError.path }, false, nodeError);
|
|
83
|
+
case 'EACCES':
|
|
84
|
+
case 'EPERM':
|
|
85
|
+
return new StackMemoryError(ErrorCode.PERMISSION_DENIED, `Permission denied: ${nodeError.path}`, 'Permission denied. Please check file permissions.', { ...context, path: nodeError.path }, true, nodeError);
|
|
86
|
+
case 'ENOSPC':
|
|
87
|
+
return new StackMemoryError(ErrorCode.DISK_FULL, 'No space left on device', 'Insufficient disk space. Please free up space and try again.', context, true, nodeError);
|
|
88
|
+
case 'ETIMEDOUT':
|
|
89
|
+
return new StackMemoryError(ErrorCode.TIMEOUT, 'Operation timed out', 'The operation timed out. Please try again.', context, true, nodeError);
|
|
90
|
+
default:
|
|
91
|
+
return new StackMemoryError(ErrorCode.UNKNOWN_ERROR, nodeError.message, 'An unexpected system error occurred.', { ...context, nodeErrorCode: code }, false, nodeError);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export class ErrorHandler {
|
|
96
|
+
static retryMap = new Map();
|
|
97
|
+
static MAX_RETRIES = 3;
|
|
98
|
+
static handle(error, operation) {
|
|
99
|
+
if (error instanceof StackMemoryError) {
|
|
100
|
+
// Already a well-formed StackMemory error
|
|
101
|
+
console.error(`❌ ${error.userMessage}`);
|
|
102
|
+
if (error.recoverable) {
|
|
103
|
+
console.error('💡 This error may be recoverable. Please try again.');
|
|
104
|
+
}
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
if (error instanceof Error) {
|
|
108
|
+
// Convert Node.js error to StackMemoryError
|
|
109
|
+
let stackMemoryError;
|
|
110
|
+
if ('code' in error && typeof error.code === 'string') {
|
|
111
|
+
stackMemoryError = StackMemoryError.fromNodeError(error, { operation });
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
stackMemoryError = new StackMemoryError(ErrorCode.OPERATION_FAILED, `Operation '${operation}' failed: ${error.message}`, `Operation failed: ${error.message}`, { operation }, false, error);
|
|
115
|
+
}
|
|
116
|
+
console.error(`❌ ${stackMemoryError.userMessage}`);
|
|
117
|
+
if (stackMemoryError.recoverable) {
|
|
118
|
+
console.error('💡 This error may be recoverable. Please try again.');
|
|
119
|
+
}
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
// Unknown error type
|
|
123
|
+
const unknownError = new StackMemoryError(ErrorCode.UNKNOWN_ERROR, `Unknown error in operation '${operation}': ${String(error)}`, 'An unexpected error occurred.', { operation, errorType: typeof error }, false);
|
|
124
|
+
console.error(`❌ ${unknownError.userMessage}`);
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
static async safeExecute(operation, operationName, fallback) {
|
|
128
|
+
try {
|
|
129
|
+
return await operation();
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
if (fallback !== undefined) {
|
|
133
|
+
logger.warn(`Operation '${operationName}' failed, using fallback`, {
|
|
134
|
+
error: String(error),
|
|
135
|
+
});
|
|
136
|
+
return fallback;
|
|
137
|
+
}
|
|
138
|
+
ErrorHandler.handle(error, operationName);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
static async withRetry(operation, operationName, maxRetries = ErrorHandler.MAX_RETRIES) {
|
|
142
|
+
let lastError;
|
|
143
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
144
|
+
try {
|
|
145
|
+
const result = await operation();
|
|
146
|
+
// Clear retry count on success
|
|
147
|
+
ErrorHandler.retryMap.delete(operationName);
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
lastError = error;
|
|
152
|
+
if (error instanceof StackMemoryError && !error.recoverable) {
|
|
153
|
+
// Don't retry non-recoverable errors
|
|
154
|
+
ErrorHandler.handle(error, operationName);
|
|
155
|
+
}
|
|
156
|
+
if (attempt === maxRetries) {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
const delay = Math.min(1000 * Math.pow(2, attempt - 1), 5000); // Exponential backoff
|
|
160
|
+
logger.warn(`Attempt ${attempt}/${maxRetries} failed for '${operationName}', retrying in ${delay}ms`, {
|
|
161
|
+
error: String(error),
|
|
162
|
+
});
|
|
163
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
ErrorHandler.handle(lastError, `${operationName} (after ${maxRetries} attempts)`);
|
|
167
|
+
}
|
|
168
|
+
static createCircuitBreaker(operation, operationName, threshold = 5) {
|
|
169
|
+
let failures = 0;
|
|
170
|
+
let lastFailure = 0;
|
|
171
|
+
const resetTimeout = 30000; // 30 seconds
|
|
172
|
+
return async () => {
|
|
173
|
+
const now = Date.now();
|
|
174
|
+
// Reset circuit breaker after timeout
|
|
175
|
+
if (now - lastFailure > resetTimeout) {
|
|
176
|
+
failures = 0;
|
|
177
|
+
}
|
|
178
|
+
// Circuit is open (too many failures)
|
|
179
|
+
if (failures >= threshold) {
|
|
180
|
+
throw new StackMemoryError(ErrorCode.OPERATION_FAILED, `Circuit breaker open for '${operationName}'`, `Operation temporarily unavailable. Please try again later.`, { operationName, failures, threshold }, true);
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
const result = await operation();
|
|
184
|
+
failures = 0; // Reset on success
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
failures++;
|
|
189
|
+
lastFailure = now;
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Utility functions for common error scenarios
|
|
196
|
+
export const validateInput = (value, name, validator) => {
|
|
197
|
+
if (!validator(value)) {
|
|
198
|
+
throw new StackMemoryError(ErrorCode.INVALID_INPUT, `Invalid ${name}: ${String(value)}`, `Please provide a valid ${name}.`, { name, value }, true);
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
export const validateEmail = (email) => {
|
|
202
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
203
|
+
if (!emailRegex.test(email) || email.length > 254) {
|
|
204
|
+
throw new StackMemoryError(ErrorCode.INVALID_INPUT, `Invalid email format: ${email}`, 'Please provide a valid email address.', { email }, true);
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
export const validatePath = (filePath) => {
|
|
208
|
+
if (!filePath || filePath.includes('..') || filePath.includes('\0')) {
|
|
209
|
+
throw new StackMemoryError(ErrorCode.INVALID_INPUT, `Invalid path: ${filePath}`, 'Invalid file path provided.', { path: filePath }, true);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../../src/core/monitoring/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logging utility for StackMemory CLI
|
|
3
|
+
*/
|
|
4
|
+
export declare enum LogLevel {
|
|
5
|
+
ERROR = 0,
|
|
6
|
+
WARN = 1,
|
|
7
|
+
INFO = 2,
|
|
8
|
+
DEBUG = 3
|
|
9
|
+
}
|
|
10
|
+
export declare class Logger {
|
|
11
|
+
private static instance;
|
|
12
|
+
private logLevel;
|
|
13
|
+
private logFile?;
|
|
14
|
+
private constructor();
|
|
15
|
+
static getInstance(): Logger;
|
|
16
|
+
private ensureLogDirectory;
|
|
17
|
+
private writeLog;
|
|
18
|
+
error(message: string, error?: Error, context?: Record<string, unknown>): void;
|
|
19
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
20
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
21
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
22
|
+
}
|
|
23
|
+
export declare const logger: Logger;
|
|
24
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/core/monitoring/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAUD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,OAAO,CAAC,CAAS;IAEzB,OAAO;IA0BP,MAAM,CAAC,WAAW,IAAI,MAAM;IAO5B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,QAAQ;IAgChB,KAAK,CACH,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,KAAK,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI;IAUP,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAS9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAS9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAQhE;AAGD,eAAO,MAAM,MAAM,QAAuB,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logging utility for StackMemory CLI
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
export var LogLevel;
|
|
7
|
+
(function (LogLevel) {
|
|
8
|
+
LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
|
|
9
|
+
LogLevel[LogLevel["WARN"] = 1] = "WARN";
|
|
10
|
+
LogLevel[LogLevel["INFO"] = 2] = "INFO";
|
|
11
|
+
LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
|
|
12
|
+
})(LogLevel || (LogLevel = {}));
|
|
13
|
+
export class Logger {
|
|
14
|
+
static instance;
|
|
15
|
+
logLevel = LogLevel.INFO;
|
|
16
|
+
logFile;
|
|
17
|
+
constructor() {
|
|
18
|
+
// Set log level from environment
|
|
19
|
+
const envLevel = process.env.STACKMEMORY_LOG_LEVEL?.toUpperCase();
|
|
20
|
+
switch (envLevel) {
|
|
21
|
+
case 'ERROR':
|
|
22
|
+
this.logLevel = LogLevel.ERROR;
|
|
23
|
+
break;
|
|
24
|
+
case 'WARN':
|
|
25
|
+
this.logLevel = LogLevel.WARN;
|
|
26
|
+
break;
|
|
27
|
+
case 'DEBUG':
|
|
28
|
+
this.logLevel = LogLevel.DEBUG;
|
|
29
|
+
break;
|
|
30
|
+
default:
|
|
31
|
+
this.logLevel = LogLevel.INFO;
|
|
32
|
+
}
|
|
33
|
+
// Set up log file if in debug mode or if specified
|
|
34
|
+
if (this.logLevel === LogLevel.DEBUG || process.env.STACKMEMORY_LOG_FILE) {
|
|
35
|
+
this.logFile =
|
|
36
|
+
process.env.STACKMEMORY_LOG_FILE ||
|
|
37
|
+
path.join(process.env.HOME || '.', '.stackmemory', 'logs', 'cli.log');
|
|
38
|
+
this.ensureLogDirectory();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
static getInstance() {
|
|
42
|
+
if (!Logger.instance) {
|
|
43
|
+
Logger.instance = new Logger();
|
|
44
|
+
}
|
|
45
|
+
return Logger.instance;
|
|
46
|
+
}
|
|
47
|
+
ensureLogDirectory() {
|
|
48
|
+
if (this.logFile) {
|
|
49
|
+
const logDir = path.dirname(this.logFile);
|
|
50
|
+
if (!fs.existsSync(logDir)) {
|
|
51
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
writeLog(entry) {
|
|
56
|
+
const logLine = JSON.stringify(entry) + '\n';
|
|
57
|
+
// Always write to file if configured
|
|
58
|
+
if (this.logFile) {
|
|
59
|
+
try {
|
|
60
|
+
fs.appendFileSync(this.logFile, logLine);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Silent failure to prevent recursive logging
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Console output based on level
|
|
67
|
+
if (entry.level <= this.logLevel) {
|
|
68
|
+
const levelNames = ['ERROR', 'WARN', 'INFO', 'DEBUG'];
|
|
69
|
+
const levelName = levelNames[entry.level] || 'UNKNOWN';
|
|
70
|
+
const consoleMessage = `[${entry.timestamp}] ${levelName}: ${entry.message}`;
|
|
71
|
+
if (entry.level === LogLevel.ERROR) {
|
|
72
|
+
console.error(consoleMessage);
|
|
73
|
+
if (entry.error) {
|
|
74
|
+
console.error(entry.error.stack);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (entry.level === LogLevel.WARN) {
|
|
78
|
+
console.warn(consoleMessage);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log(consoleMessage);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
error(message, error, context) {
|
|
86
|
+
this.writeLog({
|
|
87
|
+
timestamp: new Date().toISOString(),
|
|
88
|
+
level: LogLevel.ERROR,
|
|
89
|
+
message,
|
|
90
|
+
context,
|
|
91
|
+
error,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
warn(message, context) {
|
|
95
|
+
this.writeLog({
|
|
96
|
+
timestamp: new Date().toISOString(),
|
|
97
|
+
level: LogLevel.WARN,
|
|
98
|
+
message,
|
|
99
|
+
context,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
info(message, context) {
|
|
103
|
+
this.writeLog({
|
|
104
|
+
timestamp: new Date().toISOString(),
|
|
105
|
+
level: LogLevel.INFO,
|
|
106
|
+
message,
|
|
107
|
+
context,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
debug(message, context) {
|
|
111
|
+
this.writeLog({
|
|
112
|
+
timestamp: new Date().toISOString(),
|
|
113
|
+
level: LogLevel.DEBUG,
|
|
114
|
+
message,
|
|
115
|
+
context,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Export singleton instance
|
|
120
|
+
export const logger = Logger.getInstance();
|
|
121
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../src/core/monitoring/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;AACX,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAUD,MAAM,OAAO,MAAM;IACT,MAAM,CAAC,QAAQ,CAAS;IACxB,QAAQ,GAAa,QAAQ,CAAC,IAAI,CAAC;IACnC,OAAO,CAAU;IAEzB;QACE,iCAAiC;QACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,EAAE,CAAC;QAClE,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,OAAO;gBACV,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC/B,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAC9B,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC/B,MAAM;YACR;gBACE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;QAClC,CAAC;QAED,mDAAmD;QACnD,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACzE,IAAI,CAAC,OAAO;gBACV,OAAO,CAAC,GAAG,CAAC,oBAAoB;oBAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YACxE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEO,kBAAkB;QACxB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,KAAe;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAE7C,qCAAqC;QACrC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;YAEvD,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;YAE7E,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC9B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CACH,OAAe,EACf,KAAa,EACb,OAAiC;QAEjC,IAAI,CAAC,QAAQ,CAAC;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO;YACP,OAAO;YACP,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAiC;QACrD,IAAI,CAAC,QAAQ,CAAC;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,QAAQ,CAAC,IAAI;YACpB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAiC;QACrD,IAAI,CAAC,QAAQ,CAAC;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,QAAQ,CAAC,IAAI;YACpB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAiC;QACtD,IAAI,CAAC,QAAQ,CAAC;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare class Metrics {
|
|
2
|
+
static record(metric: string, value: number, tags?: Record<string, string>): Promise<void>;
|
|
3
|
+
static increment(metric: string, tags?: Record<string, string>): Promise<void>;
|
|
4
|
+
static timing(metric: string, duration: number, tags?: Record<string, string>): Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export declare const metrics: typeof Metrics;
|
|
7
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../../src/core/monitoring/metrics.ts"],"names":[],"mappings":"AAAA,qBAAa,OAAO;WACL,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC;WAIH,SAAS,CACpB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC;WAIH,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC;CAGjB;AAED,eAAO,MAAM,OAAO,gBAAU,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class Metrics {
|
|
2
|
+
static async record(metric, value, tags) {
|
|
3
|
+
// TODO: Implement metrics recording
|
|
4
|
+
}
|
|
5
|
+
static async increment(metric, tags) {
|
|
6
|
+
// TODO: Implement metric increment
|
|
7
|
+
}
|
|
8
|
+
static async timing(metric, duration, tags) {
|
|
9
|
+
// TODO: Implement timing metrics
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export const metrics = Metrics;
|
|
13
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../../src/core/monitoring/metrics.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,OAAO;IAClB,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,MAAc,EACd,KAAa,EACb,IAA6B;QAE7B,oCAAoC;IACtC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAAS,CACpB,MAAc,EACd,IAA6B;QAE7B,mCAAmC;IACrC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,MAAc,EACd,QAAgB,EAChB,IAA6B;QAE7B,iCAAiC;IACnC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Tracker for StackMemory
|
|
3
|
+
* Maintains a JSON file with recent changes and progress
|
|
4
|
+
*/
|
|
5
|
+
export interface TaskProgress {
|
|
6
|
+
task: string;
|
|
7
|
+
completedAt?: string;
|
|
8
|
+
startedAt?: string;
|
|
9
|
+
status: 'completed' | 'in_progress' | 'pending';
|
|
10
|
+
changes?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface Change {
|
|
13
|
+
date: string;
|
|
14
|
+
version: string;
|
|
15
|
+
type: 'feature' | 'bugfix' | 'refactor' | 'docs';
|
|
16
|
+
description: string;
|
|
17
|
+
files?: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface ProgressData {
|
|
20
|
+
version: string;
|
|
21
|
+
lastUpdated: string;
|
|
22
|
+
currentSession?: {
|
|
23
|
+
startTime: string;
|
|
24
|
+
tasksCompleted: TaskProgress[];
|
|
25
|
+
inProgress: string[];
|
|
26
|
+
};
|
|
27
|
+
recentChanges: Change[];
|
|
28
|
+
linearIntegration?: {
|
|
29
|
+
status: string;
|
|
30
|
+
lastSync?: string;
|
|
31
|
+
tasksSynced?: number;
|
|
32
|
+
issues?: string[];
|
|
33
|
+
};
|
|
34
|
+
roadmap?: {
|
|
35
|
+
immediate: string[];
|
|
36
|
+
thisWeek: string[];
|
|
37
|
+
nextSprint: string[];
|
|
38
|
+
};
|
|
39
|
+
metrics?: Record<string, any>;
|
|
40
|
+
notes?: string[];
|
|
41
|
+
}
|
|
42
|
+
export declare class ProgressTracker {
|
|
43
|
+
private progressFile;
|
|
44
|
+
private data;
|
|
45
|
+
constructor(projectRoot: string);
|
|
46
|
+
/**
|
|
47
|
+
* Load progress data from file
|
|
48
|
+
*/
|
|
49
|
+
private load;
|
|
50
|
+
/**
|
|
51
|
+
* Save progress data to file
|
|
52
|
+
*/
|
|
53
|
+
private save;
|
|
54
|
+
/**
|
|
55
|
+
* Start a new session
|
|
56
|
+
*/
|
|
57
|
+
startSession(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Add a task as in progress
|
|
60
|
+
*/
|
|
61
|
+
startTask(task: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* Mark a task as completed
|
|
64
|
+
*/
|
|
65
|
+
completeTask(task: string, changes?: string[]): void;
|
|
66
|
+
/**
|
|
67
|
+
* Add a recent change
|
|
68
|
+
*/
|
|
69
|
+
addChange(change: Change): void;
|
|
70
|
+
/**
|
|
71
|
+
* Update Linear integration status
|
|
72
|
+
*/
|
|
73
|
+
updateLinearStatus(status: {
|
|
74
|
+
lastSync?: string;
|
|
75
|
+
tasksSynced?: number;
|
|
76
|
+
issues?: string[];
|
|
77
|
+
}): void;
|
|
78
|
+
/**
|
|
79
|
+
* Add a note
|
|
80
|
+
*/
|
|
81
|
+
addNote(note: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* Get current progress
|
|
84
|
+
*/
|
|
85
|
+
getProgress(): ProgressData;
|
|
86
|
+
/**
|
|
87
|
+
* Get summary for display
|
|
88
|
+
*/
|
|
89
|
+
getSummary(): string;
|
|
90
|
+
/**
|
|
91
|
+
* Clear current session
|
|
92
|
+
*/
|
|
93
|
+
endSession(): void;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=progress-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-tracker.d.ts","sourceRoot":"","sources":["../../../../src/core/monitoring/progress-tracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;IAChD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,YAAY,EAAE,CAAC;QAC/B,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,IAAI,CAAe;gBAEf,WAAW,EAAE,MAAM;IAK/B;;OAEG;IACH,OAAO,CAAC,IAAI;IAkBZ;;OAEG;IACH,OAAO,CAAC,IAAI;IAKZ;;OAEG;IACH,YAAY,IAAI,IAAI;IASpB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW7B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAsBpD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS/B;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,GAAG,IAAI;IAWR;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa3B;;OAEG;IACH,WAAW,IAAI,YAAY;IAI3B;;OAEG;IACH,UAAU,IAAI,MAAM;IAmDpB;;OAEG;IACH,UAAU,IAAI,IAAI;CAInB"}
|