mycontext-cli 2.0.24 → 2.0.26
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 +169 -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 +3 -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 +8 -0
- package/dist/utils/claudeAgentClient.d.ts.map +1 -1
- package/dist/utils/claudeAgentClient.js +101 -25
- package/dist/utils/claudeAgentClient.js.map +1 -1
- package/dist/utils/envExampleGenerator.d.ts.map +1 -1
- package/dist/utils/envExampleGenerator.js +12 -1
- package/dist/utils/envExampleGenerator.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.d.ts.map +1 -1
- package/dist/utils/hybridAIClient.js +48 -14
- 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 +3 -1
|
@@ -0,0 +1,552 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ExportProgressCommand = void 0;
|
|
40
|
+
const fs_1 = __importDefault(require("fs"));
|
|
41
|
+
const path_1 = __importDefault(require("path"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
class ExportProgressCommand {
|
|
44
|
+
register(program) {
|
|
45
|
+
program
|
|
46
|
+
.command("export-progress")
|
|
47
|
+
.description("Export project progress for mycontext PM synchronization")
|
|
48
|
+
.option("-o, --output <file>", "Output file path", "progress-export.json")
|
|
49
|
+
.option("-f, --format <type>", "Output format: json|summary", "json")
|
|
50
|
+
.option("-w, --webhook <url>", "Webhook URL to send progress to mycontext PM")
|
|
51
|
+
.option("-p, --project-id <id>", "Project ID for mycontext PM sync")
|
|
52
|
+
.option("--verbose", "Detailed output", false)
|
|
53
|
+
.option("--include-tasks", "Include detailed task information", true)
|
|
54
|
+
.option("--include-components", "Include generated components list", true)
|
|
55
|
+
.option("--include-metrics", "Include project metrics", true)
|
|
56
|
+
.action(async (options) => {
|
|
57
|
+
await this.exportProgress(options);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async exportProgress(options) {
|
|
61
|
+
const { output, format, webhook, projectId, verbose, includeTasks = true, includeComponents = true, includeMetrics = true, } = options;
|
|
62
|
+
console.log(chalk_1.default.blue.bold("📊 Exporting Project Progress\n"));
|
|
63
|
+
try {
|
|
64
|
+
// Load project context
|
|
65
|
+
const projectContext = await this.loadProjectContext();
|
|
66
|
+
// Load current tasks
|
|
67
|
+
const tasks = await this.loadTasks();
|
|
68
|
+
// Analyze generated components
|
|
69
|
+
const components = await this.analyzeComponents();
|
|
70
|
+
// Calculate metrics
|
|
71
|
+
const metrics = this.calculateMetrics(tasks, components);
|
|
72
|
+
// Create mycontext PM output
|
|
73
|
+
const pmOutput = {
|
|
74
|
+
projectId: projectId || projectContext?.projectId || this.generateProjectId(),
|
|
75
|
+
timestamp: new Date().toISOString(),
|
|
76
|
+
status: "success",
|
|
77
|
+
progress: {
|
|
78
|
+
completedTasks: tasks.filter((t) => t.status === "completed").length,
|
|
79
|
+
totalTasks: tasks.length,
|
|
80
|
+
completionPercentage: tasks.length > 0
|
|
81
|
+
? (tasks.filter((t) => t.status === "completed").length /
|
|
82
|
+
tasks.length) *
|
|
83
|
+
100
|
|
84
|
+
: 0,
|
|
85
|
+
currentPhase: this.determineCurrentPhase(tasks),
|
|
86
|
+
nextMilestone: this.determineNextMilestone(tasks),
|
|
87
|
+
blockers: this.identifyBlockers(tasks),
|
|
88
|
+
},
|
|
89
|
+
generated: {
|
|
90
|
+
components: components.componentFiles,
|
|
91
|
+
pages: components.pageFiles,
|
|
92
|
+
apiEndpoints: components.apiFiles,
|
|
93
|
+
tests: components.testFiles,
|
|
94
|
+
},
|
|
95
|
+
errors: [],
|
|
96
|
+
suggestions: this.generateSuggestions(tasks, metrics),
|
|
97
|
+
nextSteps: this.generateNextSteps(tasks, metrics),
|
|
98
|
+
};
|
|
99
|
+
// Output based on format
|
|
100
|
+
if (format === "summary") {
|
|
101
|
+
this.displaySummary(pmOutput, tasks, components, metrics);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Save JSON output
|
|
105
|
+
const outputPath = path_1.default.resolve(output || "progress-export.json");
|
|
106
|
+
fs_1.default.writeFileSync(outputPath, JSON.stringify(pmOutput, null, 2));
|
|
107
|
+
console.log(chalk_1.default.green(`✅ Progress exported to: ${outputPath}`));
|
|
108
|
+
if (verbose) {
|
|
109
|
+
this.displayDetailedProgress(pmOutput);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Send to webhook if specified
|
|
113
|
+
if (webhook) {
|
|
114
|
+
await this.sendToWebhook(webhook, pmOutput);
|
|
115
|
+
}
|
|
116
|
+
// Display key insights
|
|
117
|
+
this.displayInsights(pmOutput);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
console.error(chalk_1.default.red("❌ Export failed:"), error instanceof Error ? error.message : "Unknown error");
|
|
121
|
+
if (verbose) {
|
|
122
|
+
console.error(chalk_1.default.red("Full error:"), error);
|
|
123
|
+
}
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async loadProjectContext() {
|
|
128
|
+
const contextPaths = [
|
|
129
|
+
path_1.default.join(process.cwd(), ".mycontext", "project-context.json"),
|
|
130
|
+
path_1.default.join(process.cwd(), ".mycontext", "context.json"),
|
|
131
|
+
];
|
|
132
|
+
for (const contextPath of contextPaths) {
|
|
133
|
+
if (fs_1.default.existsSync(contextPath)) {
|
|
134
|
+
try {
|
|
135
|
+
const context = JSON.parse(fs_1.default.readFileSync(contextPath, "utf8"));
|
|
136
|
+
return context;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
console.warn(chalk_1.default.yellow(`Warning: Could not parse ${contextPath}`));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
console.log(chalk_1.default.yellow("⚠️ No project context found, using defaults"));
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
async loadTasks() {
|
|
147
|
+
const todosPath = path_1.default.join(process.cwd(), ".mycontext", "todos.json");
|
|
148
|
+
if (fs_1.default.existsSync(todosPath)) {
|
|
149
|
+
try {
|
|
150
|
+
const todos = JSON.parse(fs_1.default.readFileSync(todosPath, "utf8"));
|
|
151
|
+
return Array.isArray(todos) ? todos : [];
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
console.warn(chalk_1.default.yellow("Warning: Could not parse todos.json"));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
console.log(chalk_1.default.yellow("⚠️ No tasks found"));
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
async analyzeComponents() {
|
|
161
|
+
const result = {
|
|
162
|
+
componentFiles: [],
|
|
163
|
+
pageFiles: [],
|
|
164
|
+
apiFiles: [],
|
|
165
|
+
testFiles: [],
|
|
166
|
+
totalFiles: 0,
|
|
167
|
+
};
|
|
168
|
+
try {
|
|
169
|
+
// Analyze components directory
|
|
170
|
+
const componentsDir = path_1.default.join(process.cwd(), "components");
|
|
171
|
+
if (fs_1.default.existsSync(componentsDir)) {
|
|
172
|
+
const componentFiles = await this.findFiles(componentsDir, [
|
|
173
|
+
"**/*.{tsx,ts,jsx,js}",
|
|
174
|
+
]);
|
|
175
|
+
result.componentFiles = componentFiles.map((f) => path_1.default.relative(process.cwd(), f));
|
|
176
|
+
}
|
|
177
|
+
// Analyze pages/app directory
|
|
178
|
+
const pagesDir = path_1.default.join(process.cwd(), "app");
|
|
179
|
+
const pagesDirAlt = path_1.default.join(process.cwd(), "pages");
|
|
180
|
+
const pageDir = fs_1.default.existsSync(pagesDir)
|
|
181
|
+
? pagesDir
|
|
182
|
+
: fs_1.default.existsSync(pagesDirAlt)
|
|
183
|
+
? pagesDirAlt
|
|
184
|
+
: null;
|
|
185
|
+
if (pageDir) {
|
|
186
|
+
const pageFiles = await this.findFiles(pageDir, [
|
|
187
|
+
"**/*.{tsx,ts,jsx,js}",
|
|
188
|
+
]);
|
|
189
|
+
result.pageFiles = pageFiles.map((f) => path_1.default.relative(process.cwd(), f));
|
|
190
|
+
}
|
|
191
|
+
// Analyze API routes
|
|
192
|
+
const apiDir = path_1.default.join(process.cwd(), "app", "api");
|
|
193
|
+
if (fs_1.default.existsSync(apiDir)) {
|
|
194
|
+
const apiFiles = await this.findFiles(apiDir, ["**/*.{ts,js}"]);
|
|
195
|
+
result.apiFiles = apiFiles.map((f) => path_1.default.relative(process.cwd(), f));
|
|
196
|
+
}
|
|
197
|
+
// Analyze test files
|
|
198
|
+
const testFiles = await this.findFiles(process.cwd(), [
|
|
199
|
+
"**/*.{test,spec}.{tsx,ts,jsx,js}",
|
|
200
|
+
]);
|
|
201
|
+
result.testFiles = testFiles.map((f) => path_1.default.relative(process.cwd(), f));
|
|
202
|
+
result.totalFiles =
|
|
203
|
+
result.componentFiles.length +
|
|
204
|
+
result.pageFiles.length +
|
|
205
|
+
result.apiFiles.length +
|
|
206
|
+
result.testFiles.length;
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.warn(chalk_1.default.yellow("Warning: Could not analyze components:"), error);
|
|
210
|
+
}
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
async findFiles(dir, patterns) {
|
|
214
|
+
// Simple file finder - in production, this would use glob properly
|
|
215
|
+
const results = [];
|
|
216
|
+
const walk = (currentDir) => {
|
|
217
|
+
const items = fs_1.default.readdirSync(currentDir);
|
|
218
|
+
for (const item of items) {
|
|
219
|
+
const fullPath = path_1.default.join(currentDir, item);
|
|
220
|
+
const stat = fs_1.default.statSync(fullPath);
|
|
221
|
+
if (stat.isDirectory() &&
|
|
222
|
+
!item.startsWith(".") &&
|
|
223
|
+
item !== "node_modules") {
|
|
224
|
+
walk(fullPath);
|
|
225
|
+
}
|
|
226
|
+
else if (stat.isFile()) {
|
|
227
|
+
// Simple pattern matching
|
|
228
|
+
for (const pattern of patterns) {
|
|
229
|
+
if (this.matchesPattern(fullPath, pattern)) {
|
|
230
|
+
results.push(fullPath);
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
walk(dir);
|
|
238
|
+
return results;
|
|
239
|
+
}
|
|
240
|
+
matchesPattern(filePath, pattern) {
|
|
241
|
+
// Very basic pattern matching - in production, use proper glob library
|
|
242
|
+
const fileName = path_1.default.basename(filePath);
|
|
243
|
+
const ext = path_1.default.extname(fileName);
|
|
244
|
+
if (pattern.includes("{")) {
|
|
245
|
+
// Handle {tsx,ts,jsx,js} patterns
|
|
246
|
+
const extPattern = pattern.match(/\{([^}]+)\}/)?.[1];
|
|
247
|
+
if (extPattern) {
|
|
248
|
+
const exts = extPattern.split(",");
|
|
249
|
+
return exts.some((e) => fileName.endsWith(`.${e.trim()}`));
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (pattern.includes(".test") || pattern.includes(".spec")) {
|
|
253
|
+
return fileName.includes(".test") || fileName.includes(".spec");
|
|
254
|
+
}
|
|
255
|
+
return pattern.includes(ext.substring(1));
|
|
256
|
+
}
|
|
257
|
+
calculateMetrics(tasks, components) {
|
|
258
|
+
const completedTasks = tasks.filter((t) => t.status === "completed");
|
|
259
|
+
const inProgressTasks = tasks.filter((t) => t.status === "in_progress");
|
|
260
|
+
const blockedTasks = tasks.filter((t) => t.status === "blocked");
|
|
261
|
+
const estimatedHours = tasks.reduce((sum, t) => sum + (t.estimatedHours || 0), 0);
|
|
262
|
+
const actualHours = completedTasks.reduce((sum, t) => sum + (t.actualHours || 0), 0);
|
|
263
|
+
return {
|
|
264
|
+
totalTasks: tasks.length,
|
|
265
|
+
completedTasks: completedTasks.length,
|
|
266
|
+
inProgressTasks: inProgressTasks.length,
|
|
267
|
+
blockedTasks: blockedTasks.length,
|
|
268
|
+
completionPercentage: tasks.length > 0 ? (completedTasks.length / tasks.length) * 100 : 0,
|
|
269
|
+
estimatedHours,
|
|
270
|
+
actualHours,
|
|
271
|
+
velocity: actualHours > 0 ? completedTasks.length / actualHours : 0,
|
|
272
|
+
componentsGenerated: components.totalFiles,
|
|
273
|
+
testCoverage: components.testFiles.length > 0
|
|
274
|
+
? (components.testFiles.length /
|
|
275
|
+
(components.componentFiles.length +
|
|
276
|
+
components.pageFiles.length)) *
|
|
277
|
+
100
|
|
278
|
+
: 0,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
determineCurrentPhase(tasks) {
|
|
282
|
+
// Simple phase detection based on task completion patterns
|
|
283
|
+
const completedCount = tasks.filter((t) => t.status === "completed").length;
|
|
284
|
+
const totalCount = tasks.length;
|
|
285
|
+
if (completedCount === 0)
|
|
286
|
+
return "Planning";
|
|
287
|
+
if (completedCount < totalCount * 0.3)
|
|
288
|
+
return "Setup";
|
|
289
|
+
if (completedCount < totalCount * 0.7)
|
|
290
|
+
return "Development";
|
|
291
|
+
if (completedCount < totalCount)
|
|
292
|
+
return "Testing";
|
|
293
|
+
return "Completed";
|
|
294
|
+
}
|
|
295
|
+
determineNextMilestone(tasks) {
|
|
296
|
+
const pendingTasks = tasks.filter((t) => t.status !== "completed");
|
|
297
|
+
if (pendingTasks.length === 0)
|
|
298
|
+
return "Project Complete";
|
|
299
|
+
// Find next high-priority task
|
|
300
|
+
const nextTask = pendingTasks
|
|
301
|
+
.filter((t) => t.priority === "critical" || t.priority === "high")
|
|
302
|
+
.sort((a, b) => {
|
|
303
|
+
const priorityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
304
|
+
const aPriority = priorityOrder[a.priority] ?? 2;
|
|
305
|
+
const bPriority = priorityOrder[b.priority] ?? 2;
|
|
306
|
+
return aPriority - bPriority;
|
|
307
|
+
})[0];
|
|
308
|
+
return nextTask ? nextTask.title : "Continue development";
|
|
309
|
+
}
|
|
310
|
+
identifyBlockers(tasks) {
|
|
311
|
+
return tasks.filter((t) => t.status === "blocked").map((t) => t.title);
|
|
312
|
+
}
|
|
313
|
+
generateSuggestions(tasks, metrics) {
|
|
314
|
+
const suggestions = [];
|
|
315
|
+
if (metrics.blockedTasks > 0) {
|
|
316
|
+
suggestions.push("Resolve blocked tasks to maintain momentum");
|
|
317
|
+
}
|
|
318
|
+
if (metrics.completionPercentage < 50 && tasks.length > 10) {
|
|
319
|
+
suggestions.push("Consider breaking large tasks into smaller, manageable units");
|
|
320
|
+
}
|
|
321
|
+
if (metrics.testCoverage < 50) {
|
|
322
|
+
suggestions.push("Increase test coverage for better code quality");
|
|
323
|
+
}
|
|
324
|
+
if (metrics.velocity > 0 && metrics.velocity < 0.5) {
|
|
325
|
+
suggestions.push("Consider optimizing development workflow for better velocity");
|
|
326
|
+
}
|
|
327
|
+
return suggestions;
|
|
328
|
+
}
|
|
329
|
+
generateNextSteps(tasks, metrics) {
|
|
330
|
+
const nextSteps = [];
|
|
331
|
+
if (metrics.blockedTasks > 0) {
|
|
332
|
+
nextSteps.push("Address blocked tasks and dependencies");
|
|
333
|
+
}
|
|
334
|
+
const pendingHighPriority = tasks.filter((t) => (t.status === "pending" || t.status === "todo") &&
|
|
335
|
+
(t.priority === "critical" || t.priority === "high"));
|
|
336
|
+
if (pendingHighPriority.length > 0) {
|
|
337
|
+
nextSteps.push(`Focus on ${pendingHighPriority.length} high-priority tasks`);
|
|
338
|
+
}
|
|
339
|
+
if (metrics.testCoverage < 70) {
|
|
340
|
+
nextSteps.push("Add unit tests for generated components");
|
|
341
|
+
}
|
|
342
|
+
if (metrics.completionPercentage < 100) {
|
|
343
|
+
nextSteps.push("Continue development on remaining tasks");
|
|
344
|
+
}
|
|
345
|
+
return nextSteps;
|
|
346
|
+
}
|
|
347
|
+
displaySummary(pmOutput, tasks, components, metrics) {
|
|
348
|
+
console.log(chalk_1.default.blue.bold("📊 Project Progress Summary"));
|
|
349
|
+
console.log(chalk_1.default.gray("─".repeat(50)));
|
|
350
|
+
console.log(chalk_1.default.cyan("🎯 Progress:"));
|
|
351
|
+
console.log(` Completion: ${chalk_1.default.white(pmOutput.progress.completionPercentage.toFixed(1))}%`);
|
|
352
|
+
console.log(` Tasks: ${chalk_1.default.white(pmOutput.progress.completedTasks)}/${pmOutput.progress.totalTasks} completed`);
|
|
353
|
+
console.log(` Current Phase: ${chalk_1.default.white(pmOutput.progress.currentPhase)}`);
|
|
354
|
+
if (pmOutput.progress.nextMilestone) {
|
|
355
|
+
console.log(` Next Milestone: ${chalk_1.default.white(pmOutput.progress.nextMilestone)}`);
|
|
356
|
+
}
|
|
357
|
+
console.log(chalk_1.default.cyan("\n📁 Generated Files:"));
|
|
358
|
+
console.log(` Components: ${chalk_1.default.white(components.componentFiles.length)}`);
|
|
359
|
+
console.log(` Pages: ${chalk_1.default.white(components.pageFiles.length)}`);
|
|
360
|
+
console.log(` API Endpoints: ${chalk_1.default.white(components.apiFiles.length)}`);
|
|
361
|
+
console.log(` Tests: ${chalk_1.default.white(components.testFiles.length)}`);
|
|
362
|
+
console.log(chalk_1.default.cyan("\n📈 Metrics:"));
|
|
363
|
+
console.log(` Estimated Hours: ${chalk_1.default.white(metrics.estimatedHours)}`);
|
|
364
|
+
console.log(` Actual Hours: ${chalk_1.default.white(metrics.actualHours)}`);
|
|
365
|
+
if (metrics.velocity > 0) {
|
|
366
|
+
console.log(` Velocity: ${chalk_1.default.white(metrics.velocity.toFixed(2))} tasks/hour`);
|
|
367
|
+
}
|
|
368
|
+
if (pmOutput.progress.blockers && pmOutput.progress.blockers.length > 0) {
|
|
369
|
+
console.log(chalk_1.default.cyan("\n🚫 Blockers:"));
|
|
370
|
+
pmOutput.progress.blockers.forEach((blocker) => {
|
|
371
|
+
console.log(` • ${chalk_1.default.red(blocker)}`);
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
if (pmOutput.suggestions && pmOutput.suggestions.length > 0) {
|
|
375
|
+
console.log(chalk_1.default.cyan("\n💡 Suggestions:"));
|
|
376
|
+
pmOutput.suggestions.forEach((suggestion) => {
|
|
377
|
+
console.log(` • ${chalk_1.default.yellow(suggestion)}`);
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
displayDetailedProgress(pmOutput) {
|
|
382
|
+
console.log(chalk_1.default.blue.bold("\n📋 Detailed Progress Export"));
|
|
383
|
+
console.log(chalk_1.default.gray("─".repeat(50)));
|
|
384
|
+
console.log(JSON.stringify(pmOutput, null, 2));
|
|
385
|
+
}
|
|
386
|
+
async sendToWebhook(webhookUrl, pmOutput) {
|
|
387
|
+
try {
|
|
388
|
+
console.log(chalk_1.default.gray(`📤 Sending progress to webhook...`));
|
|
389
|
+
// Use PM Integration Service for robust webhook communication
|
|
390
|
+
const { PMIntegrationService } = await Promise.resolve().then(() => __importStar(require("../services/PMIntegrationService")));
|
|
391
|
+
const integrationService = new PMIntegrationService({
|
|
392
|
+
webhookUrl: webhookUrl,
|
|
393
|
+
retryAttempts: 3,
|
|
394
|
+
timeout: 30000,
|
|
395
|
+
});
|
|
396
|
+
await integrationService.exportProgress(pmOutput, webhookUrl);
|
|
397
|
+
console.log(chalk_1.default.green(`✅ Progress sent to mycontext PM webhook`));
|
|
398
|
+
console.log(chalk_1.default.gray(` Webhook: ${webhookUrl}`));
|
|
399
|
+
console.log(chalk_1.default.gray(` Project: ${pmOutput.projectId}`));
|
|
400
|
+
}
|
|
401
|
+
catch (error) {
|
|
402
|
+
console.warn(chalk_1.default.yellow(`Warning: Could not send to webhook: ${error}`));
|
|
403
|
+
throw error;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
displayInsights(pmOutput) {
|
|
407
|
+
console.log(chalk_1.default.blue.bold("\n🎯 mycontext PM Integration Ready"));
|
|
408
|
+
console.log(chalk_1.default.cyan("🔄 Sync Commands:"));
|
|
409
|
+
console.log(` ${chalk_1.default.gray("mycontext export-progress --webhook <pm-url>")}`);
|
|
410
|
+
console.log(` ${chalk_1.default.gray("mycontext sync-with-pm --project-id " + pmOutput.projectId)}`);
|
|
411
|
+
if (pmOutput.nextSteps && pmOutput.nextSteps.length > 0) {
|
|
412
|
+
console.log(chalk_1.default.cyan("\n📋 Recommended Next Steps:"));
|
|
413
|
+
pmOutput.nextSteps.forEach((step, index) => {
|
|
414
|
+
console.log(` ${index + 1}. ${chalk_1.default.white(step)}`);
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
generateProjectId() {
|
|
419
|
+
// Generate a project ID based on current directory and timestamp
|
|
420
|
+
const dirName = path_1.default.basename(process.cwd());
|
|
421
|
+
const timestamp = Date.now();
|
|
422
|
+
return `${dirName}-${timestamp}`;
|
|
423
|
+
}
|
|
424
|
+
static getHelpText() {
|
|
425
|
+
return `
|
|
426
|
+
${chalk_1.default.blue.bold("📊 MyContext Export Progress Command")}
|
|
427
|
+
|
|
428
|
+
${chalk_1.default.yellow("Description:")}
|
|
429
|
+
Export project progress and status for mycontext PM synchronization and monitoring
|
|
430
|
+
|
|
431
|
+
${chalk_1.default.yellow("Usage:")}
|
|
432
|
+
mycontext export-progress [options]
|
|
433
|
+
|
|
434
|
+
${chalk_1.default.yellow("Options:")}
|
|
435
|
+
-o, --output <file> Output file path (default: progress-export.json)
|
|
436
|
+
-f, --format <type> Output format: json|summary (default: json)
|
|
437
|
+
-w, --webhook <url> Webhook URL to send progress to mycontext PM
|
|
438
|
+
-p, --project-id <id> Project ID for mycontext PM sync
|
|
439
|
+
--verbose Detailed output
|
|
440
|
+
--include-tasks Include detailed task information (default: true)
|
|
441
|
+
--include-components Include generated components list (default: true)
|
|
442
|
+
--include-metrics Include project metrics (default: true)
|
|
443
|
+
|
|
444
|
+
${chalk_1.default.yellow("Output Formats:")}
|
|
445
|
+
|
|
446
|
+
${chalk_1.default.cyan("JSON Format:")} Complete structured data for mycontext PM consumption
|
|
447
|
+
\`\`\`json
|
|
448
|
+
{
|
|
449
|
+
"projectId": "my-project-1234567890",
|
|
450
|
+
"timestamp": "2024-01-15T10:30:00Z",
|
|
451
|
+
"status": "success",
|
|
452
|
+
"progress": {
|
|
453
|
+
"completedTasks": 8,
|
|
454
|
+
"totalTasks": 12,
|
|
455
|
+
"completionPercentage": 66.7,
|
|
456
|
+
"currentPhase": "Development",
|
|
457
|
+
"nextMilestone": "API Integration",
|
|
458
|
+
"blockers": ["Database setup pending"]
|
|
459
|
+
},
|
|
460
|
+
"generated": {
|
|
461
|
+
"components": ["Button.tsx", "Input.tsx", "Card.tsx"],
|
|
462
|
+
"pages": ["Home.tsx", "Dashboard.tsx"],
|
|
463
|
+
"apiEndpoints": ["users.ts", "posts.ts"],
|
|
464
|
+
"tests": ["Button.test.tsx", "Input.test.tsx"]
|
|
465
|
+
},
|
|
466
|
+
"suggestions": [
|
|
467
|
+
"Consider adding error boundaries",
|
|
468
|
+
"Increase test coverage"
|
|
469
|
+
],
|
|
470
|
+
"nextSteps": [
|
|
471
|
+
"Complete API integration",
|
|
472
|
+
"Add user authentication"
|
|
473
|
+
]
|
|
474
|
+
}
|
|
475
|
+
\`\`\`
|
|
476
|
+
|
|
477
|
+
${chalk_1.default.cyan("Summary Format:")} Human-readable progress report
|
|
478
|
+
\`\`\`
|
|
479
|
+
📊 Project Progress Summary
|
|
480
|
+
──────────────────────────────────────────────────
|
|
481
|
+
🎯 Progress:
|
|
482
|
+
Completion: 66.7%
|
|
483
|
+
Tasks: 8/12 completed
|
|
484
|
+
Current Phase: Development
|
|
485
|
+
Next Milestone: API Integration
|
|
486
|
+
|
|
487
|
+
📁 Generated Files:
|
|
488
|
+
Components: 15
|
|
489
|
+
Pages: 3
|
|
490
|
+
API Endpoints: 5
|
|
491
|
+
Tests: 8
|
|
492
|
+
|
|
493
|
+
📈 Metrics:
|
|
494
|
+
Estimated Hours: 120
|
|
495
|
+
Actual Hours: 85
|
|
496
|
+
Velocity: 0.094 tasks/hour
|
|
497
|
+
\`\`\`
|
|
498
|
+
|
|
499
|
+
${chalk_1.default.yellow("Examples:")}
|
|
500
|
+
${chalk_1.default.gray("# Export progress to file")}
|
|
501
|
+
${chalk_1.default.cyan("mycontext export-progress -o ./progress.json")}
|
|
502
|
+
|
|
503
|
+
${chalk_1.default.gray("# Export summary to console")}
|
|
504
|
+
${chalk_1.default.cyan("mycontext export-progress --format summary")}
|
|
505
|
+
|
|
506
|
+
${chalk_1.default.gray("# Send progress to mycontext PM webhook")}
|
|
507
|
+
${chalk_1.default.cyan("mycontext export-progress --webhook https://mycontext-pm.example.com/webhook")}
|
|
508
|
+
|
|
509
|
+
${chalk_1.default.gray("# Export with custom project ID")}
|
|
510
|
+
${chalk_1.default.cyan("mycontext export-progress --project-id my-project-001")}
|
|
511
|
+
|
|
512
|
+
${chalk_1.default.yellow("mycontext PM Integration:")}
|
|
513
|
+
This command enables seamless integration between MyContext development workflow
|
|
514
|
+
and mycontext PM monitoring. The exported progress data includes:
|
|
515
|
+
|
|
516
|
+
• Task completion status and metrics
|
|
517
|
+
• Generated components and files
|
|
518
|
+
• Project velocity and estimates
|
|
519
|
+
• Blockers and suggestions
|
|
520
|
+
• Next steps and milestones
|
|
521
|
+
|
|
522
|
+
mycontext PM can use this data to:
|
|
523
|
+
• Monitor development progress in real-time
|
|
524
|
+
• Provide contextual suggestions and tips
|
|
525
|
+
• Identify blockers and propose solutions
|
|
526
|
+
• Generate status reports and updates
|
|
527
|
+
• Adjust timelines and resource allocation
|
|
528
|
+
|
|
529
|
+
${chalk_1.default.yellow("Webhook Integration:")}
|
|
530
|
+
When using webhooks, the progress data is automatically sent to your mycontext PM
|
|
531
|
+
system for real-time synchronization. This enables:
|
|
532
|
+
|
|
533
|
+
• Live dashboard updates
|
|
534
|
+
• Automated status reporting
|
|
535
|
+
• Proactive issue detection
|
|
536
|
+
• Intelligent resource suggestions
|
|
537
|
+
|
|
538
|
+
${chalk_1.default.yellow("Automation:")}
|
|
539
|
+
Combine with cron jobs or CI/CD for automatic progress reporting:
|
|
540
|
+
|
|
541
|
+
\`\`\`bash
|
|
542
|
+
# Daily progress report
|
|
543
|
+
0 18 * * 1-5 mycontext export-progress --webhook https://pm-ai.example.com/daily
|
|
544
|
+
|
|
545
|
+
# CI/CD integration
|
|
546
|
+
mycontext export-progress --webhook https://pm-ai.example.com/ci
|
|
547
|
+
\`\`\`
|
|
548
|
+
`;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
exports.ExportProgressCommand = ExportProgressCommand;
|
|
552
|
+
//# sourceMappingURL=export-progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-progress.js","sourceRoot":"","sources":["../../src/commands/export-progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-context-files.d.ts","sourceRoot":"","sources":["../../src/commands/generate-context-files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate-context-files.d.ts","sourceRoot":"","sources":["../../src/commands/generate-context-files.ts"],"names":[],"mappings":"AAWA,UAAU,mBAAmB;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,OAAO,CAAkB;;IAO3B,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;YAmF5C,kBAAkB;YAkBlB,oBAAoB;YA6BpB,qBAAqB;YA6BrB,qBAAqB;YA6BrB,0BAA0B;IAgCxC,OAAO,CAAC,mBAAmB;IA4G3B,OAAO,CAAC,oBAAoB;IAyH5B,OAAO,CAAC,oBAAoB;IAsH5B,OAAO,CAAC,yBAAyB;IA6HjC,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,2BAA2B;IAWnC;;OAEG;YACW,uBAAuB;IA0ErC;;OAEG;IACH,OAAO,CAAC,aAAa;CA2CtB"}
|
|
@@ -43,6 +43,8 @@ const path_1 = __importDefault(require("path"));
|
|
|
43
43
|
const hybridAIClient_1 = require("../utils/hybridAIClient");
|
|
44
44
|
const spinner_1 = require("../utils/spinner");
|
|
45
45
|
const logger_1 = require("../utils/logger");
|
|
46
|
+
const errorHandler_1 = require("../utils/errorHandler");
|
|
47
|
+
const nextStepsSuggester_1 = require("../utils/nextStepsSuggester");
|
|
46
48
|
class GenerateContextFilesCommand {
|
|
47
49
|
constructor() {
|
|
48
50
|
this.aiClient = new hybridAIClient_1.HybridAIClient();
|
|
@@ -78,8 +80,8 @@ class GenerateContextFilesCommand {
|
|
|
78
80
|
const successCount = results.filter((result) => result.status === "fulfilled").length;
|
|
79
81
|
const failureCount = results.filter((result) => result.status === "rejected").length;
|
|
80
82
|
if (successCount === 0) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
const error = errorHandler_1.ErrorHandler.createError(errorHandler_1.ErrorType.AI_PROVIDER_ERROR, "All context file generation failed - no AI providers available", undefined, { successCount, failureCount });
|
|
84
|
+
errorHandler_1.ErrorHandler.handleErrorGracefully(error);
|
|
83
85
|
throw new Error("All context file generation failed - configure API keys and retry");
|
|
84
86
|
}
|
|
85
87
|
else if (failureCount > 0) {
|
|
@@ -90,6 +92,12 @@ class GenerateContextFilesCommand {
|
|
|
90
92
|
logger_1.logger.success("✅ Context files generated successfully!");
|
|
91
93
|
}
|
|
92
94
|
this.spinner.succeed("User-centric context documentation generated successfully!");
|
|
95
|
+
// Show next steps
|
|
96
|
+
const workflowContext = await nextStepsSuggester_1.NextStepsSuggester.getWorkflowContext();
|
|
97
|
+
workflowContext.lastCommand = "generate-context-files";
|
|
98
|
+
workflowContext.hasContextFiles = true;
|
|
99
|
+
const nextSteps = nextStepsSuggester_1.NextStepsSuggester.getNextSteps(workflowContext);
|
|
100
|
+
nextStepsSuggester_1.NextStepsSuggester.displayNextSteps(nextSteps);
|
|
93
101
|
}
|
|
94
102
|
catch (error) {
|
|
95
103
|
this.spinner.fail("Context file generation failed");
|