task-o-matic 0.1.2 ā 0.1.4
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/dist/commands/continue.d.ts +4 -0
- package/dist/commands/continue.d.ts.map +1 -0
- package/dist/commands/continue.js +87 -0
- package/dist/commands/detect.d.ts +4 -0
- package/dist/commands/detect.d.ts.map +1 -0
- package/dist/commands/detect.js +83 -0
- package/dist/commands/init.js +235 -0
- package/dist/commands/prd.d.ts.map +1 -1
- package/dist/commands/prd.js +94 -0
- package/dist/commands/tasks/execute-loop.d.ts.map +1 -1
- package/dist/commands/tasks/execute-loop.js +2 -0
- package/dist/commands/tasks/execute.d.ts.map +1 -1
- package/dist/commands/tasks/execute.js +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/test/commands.test.js +2 -1
- package/dist/types/cli-options.d.ts +2 -0
- package/dist/types/cli-options.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue.d.ts","sourceRoot":"","sources":["../../src/commands/continue.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,eAAe,SA4ExB,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.continueCommand = void 0;
|
|
8
|
+
const commander_1 = require("commander");
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const task_o_matic_core_1 = require("task-o-matic-core");
|
|
11
|
+
const progress_1 = require("../cli/display/progress");
|
|
12
|
+
exports.continueCommand = new commander_1.Command("continue")
|
|
13
|
+
.description("Continue working on an existing project")
|
|
14
|
+
.option("-s, --status", "Show project status overview")
|
|
15
|
+
.option("-a, --add-feature <feature>", "Add a new feature to the PRD")
|
|
16
|
+
.option("-u, --update-prd", "Update PRD with implementation progress")
|
|
17
|
+
.option("-g, --generate-tasks", "Generate tasks for unimplemented features")
|
|
18
|
+
.option("-p, --generate-plan", "Generate implementation plan for remaining work")
|
|
19
|
+
.action(async (options) => {
|
|
20
|
+
try {
|
|
21
|
+
const workingDir = task_o_matic_core_1.configManager.getWorkingDirectory() || process.cwd();
|
|
22
|
+
let action = "review-status"; // Default action
|
|
23
|
+
if (options.addFeature)
|
|
24
|
+
action = "add-feature";
|
|
25
|
+
else if (options.updatePrd)
|
|
26
|
+
action = "update-prd";
|
|
27
|
+
else if (options.generateTasks)
|
|
28
|
+
action = "generate-tasks";
|
|
29
|
+
else if (options.generatePlan)
|
|
30
|
+
action = "generate-plan";
|
|
31
|
+
// If just --status or no options, it falls to review-status which is correct
|
|
32
|
+
const result = await task_o_matic_core_1.workflowService.continueProject({
|
|
33
|
+
projectDir: workingDir,
|
|
34
|
+
action: action,
|
|
35
|
+
callbacks: {
|
|
36
|
+
onProgress: (event) => {
|
|
37
|
+
if (event.type === "started")
|
|
38
|
+
console.log(chalk_1.default.blue(event.message));
|
|
39
|
+
else if (event.type === "completed")
|
|
40
|
+
console.log(chalk_1.default.green(event.message));
|
|
41
|
+
else if (event.type === "progress")
|
|
42
|
+
console.log(chalk_1.default.gray(event.message));
|
|
43
|
+
else if (event.type === "info")
|
|
44
|
+
console.log(chalk_1.default.gray(event.message));
|
|
45
|
+
else if (event.type === "warning")
|
|
46
|
+
console.log(chalk_1.default.yellow(event.message));
|
|
47
|
+
// Ignore stream chunks for cleaner output
|
|
48
|
+
},
|
|
49
|
+
onError: (error) => {
|
|
50
|
+
console.error(chalk_1.default.red("Error:"), error.message);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
if (!result.success) {
|
|
55
|
+
console.log(chalk_1.default.red(`\nā ${result.message}`));
|
|
56
|
+
if (result.action === "initialize") {
|
|
57
|
+
console.log(chalk_1.default.cyan("Run 'task-o-matic init attach' to set up this project."));
|
|
58
|
+
}
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const status = result.projectStatus;
|
|
62
|
+
console.log(chalk_1.default.bold.blue(`\nš Project Status: ${status.prd?.exists ? "Active" : "No PRD"}`));
|
|
63
|
+
console.log(chalk_1.default.bold("\nTasks:"));
|
|
64
|
+
console.log(` ${chalk_1.default.green("ā")} ${status.tasks.completed} Completed`);
|
|
65
|
+
console.log(` ${chalk_1.default.yellow("ā")} ${status.tasks.inProgress} In Progress`);
|
|
66
|
+
console.log(` ${chalk_1.default.white("ā")} ${status.tasks.todo} Todo`);
|
|
67
|
+
console.log(` ${chalk_1.default.cyan("=")} ${status.tasks.total} Total (${status.tasks.completionPercentage}% Complete)`);
|
|
68
|
+
if (status.prd) {
|
|
69
|
+
console.log(chalk_1.default.bold("\nPRD:"));
|
|
70
|
+
console.log(` ${status.prd.exists ? chalk_1.default.green("ā Found") : chalk_1.default.red("ā Missing")}`);
|
|
71
|
+
if (status.prd.exists) {
|
|
72
|
+
console.log(` Path: ${status.prd.path}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (status.nextSteps && status.nextSteps.length > 0) {
|
|
76
|
+
console.log(chalk_1.default.bold("\nš Suggested Next Steps:"));
|
|
77
|
+
status.nextSteps.forEach(step => console.log(` - ${step}`));
|
|
78
|
+
}
|
|
79
|
+
if (result.message && result.message !== "Project status analysis complete") {
|
|
80
|
+
console.log(chalk_1.default.yellow(`\nā¹ļø ${result.message}`));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
(0, progress_1.displayError)(error);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/commands/detect.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAEzB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.detectCommand = void 0;
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const commander_1 = require("commander");
|
|
12
|
+
const task_o_matic_core_1 = require("task-o-matic-core");
|
|
13
|
+
const progress_1 = require("../cli/display/progress");
|
|
14
|
+
exports.detectCommand = new commander_1.Command("detect").description("Detect technology stack of the current project");
|
|
15
|
+
exports.detectCommand
|
|
16
|
+
.description("Detect technology stack of the current project")
|
|
17
|
+
.option("--save", "Save detected stack to .task-o-matic/stack.json")
|
|
18
|
+
.option("--json", "Output result as JSON")
|
|
19
|
+
.action(async (options) => {
|
|
20
|
+
try {
|
|
21
|
+
const workingDir = task_o_matic_core_1.configManager.getWorkingDirectory() || process.cwd();
|
|
22
|
+
if (!options.json) {
|
|
23
|
+
console.log(chalk_1.default.blue("š Detecting project stack..."));
|
|
24
|
+
console.log(chalk_1.default.cyan(` š Working directory: ${workingDir}`));
|
|
25
|
+
}
|
|
26
|
+
// Run ProjectAnalysisService
|
|
27
|
+
const analysisService = new task_o_matic_core_1.ProjectAnalysisService();
|
|
28
|
+
const stackResult = await analysisService.detectStack(workingDir);
|
|
29
|
+
if (!stackResult.success) {
|
|
30
|
+
if (options.json) {
|
|
31
|
+
console.log(JSON.stringify({ success: false, error: "Stack detection failed", warnings: stackResult.warnings }, null, 2));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log(chalk_1.default.yellow("ā ļø Stack detection had issues:"));
|
|
35
|
+
stackResult.warnings?.forEach((w) => console.log(chalk_1.default.yellow(` - ${w}`)));
|
|
36
|
+
}
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const stack = stackResult.stack;
|
|
40
|
+
if (options.json) {
|
|
41
|
+
console.log(JSON.stringify(stack, null, 2));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log(chalk_1.default.green("\nā
Stack detected:"));
|
|
45
|
+
console.log(` Language: ${chalk_1.default.cyan(stack.language)}`);
|
|
46
|
+
console.log(` Framework(s): ${chalk_1.default.cyan(stack.frameworks.join(", "))}`);
|
|
47
|
+
if (stack.database)
|
|
48
|
+
console.log(` Database: ${chalk_1.default.cyan(stack.database)}`);
|
|
49
|
+
if (stack.orm)
|
|
50
|
+
console.log(` ORM: ${chalk_1.default.cyan(stack.orm)}`);
|
|
51
|
+
if (stack.auth)
|
|
52
|
+
console.log(` Auth: ${chalk_1.default.cyan(stack.auth)}`);
|
|
53
|
+
console.log(` Package Manager: ${chalk_1.default.cyan(stack.packageManager)}`);
|
|
54
|
+
console.log(` Runtime: ${chalk_1.default.cyan(stack.runtime)}`);
|
|
55
|
+
if (stack.api)
|
|
56
|
+
console.log(` API: ${chalk_1.default.cyan(stack.api)}`);
|
|
57
|
+
console.log(` Confidence: ${chalk_1.default.cyan(`${Math.round(stack.confidence * 100)}%`)}`);
|
|
58
|
+
}
|
|
59
|
+
// Save if requested
|
|
60
|
+
if (options.save) {
|
|
61
|
+
const taskOMaticDir = task_o_matic_core_1.configManager.getTaskOMaticDir();
|
|
62
|
+
// Ensure .task-o-matic exists? usually configManager handles paths but directory might not exist if not initialized
|
|
63
|
+
// But detect command might be run on uninitialized project too?
|
|
64
|
+
// The plan implies it can be used standalone.
|
|
65
|
+
// However, configManager.getTaskOMaticDir() relies on working directory.
|
|
66
|
+
// If we want to save, we should probably check if .task-o-matic exists or create it.
|
|
67
|
+
// Actually, init attach creates it. If we run detect --save on a raw project, we should probably create it too?
|
|
68
|
+
// Let's assume we create it if it doesn't exist, similar to init attach.
|
|
69
|
+
if (!(0, node_fs_1.existsSync)(taskOMaticDir)) {
|
|
70
|
+
(0, node_fs_1.mkdirSync)(taskOMaticDir, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
const stackFilePath = (0, node_path_1.join)(taskOMaticDir, "stack.json");
|
|
73
|
+
(0, node_fs_1.writeFileSync)(stackFilePath, JSON.stringify(stack, null, 2));
|
|
74
|
+
if (!options.json) {
|
|
75
|
+
console.log(chalk_1.default.green(`\n ā Saved to ${stackFilePath}`));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
(0, progress_1.displayError)(error);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
});
|
package/dist/commands/init.js
CHANGED
|
@@ -202,15 +202,244 @@ exports.initCommand
|
|
|
202
202
|
(0, progress_1.displayError)(error);
|
|
203
203
|
}
|
|
204
204
|
});
|
|
205
|
+
// Attach to existing project
|
|
206
|
+
exports.initCommand
|
|
207
|
+
.command("attach")
|
|
208
|
+
.description("Attach task-o-matic to an existing project (detect stack automatically)")
|
|
209
|
+
.option("--analyze", "Run full project analysis including TODOs and features")
|
|
210
|
+
.option("--create-prd", "Auto-generate a PRD from codebase analysis")
|
|
211
|
+
.option("--dry-run", "Just detect, don't create files")
|
|
212
|
+
.option("--redetect", "Force re-detection of stack (overwrites cached stack.json)")
|
|
213
|
+
.option("--ai-provider <provider>", "AI provider (openrouter/anthropic/openai/custom)", "openrouter")
|
|
214
|
+
.option("--ai-model <model>", "AI model", "z-ai/glm-4.6")
|
|
215
|
+
.option("--ai-key <key>", "AI API key")
|
|
216
|
+
.option("--ai-provider-url <url>", "AI provider URL")
|
|
217
|
+
.option("--max-tokens <tokens>", "Max tokens for AI (min 32768 for 2025)", "32768")
|
|
218
|
+
.option("--temperature <temp>", "AI temperature", "0.5")
|
|
219
|
+
.option("--context7-api-key <key>", "Context7 API key")
|
|
220
|
+
.action(async (options) => {
|
|
221
|
+
const workingDir = task_o_matic_core_1.configManager.getWorkingDirectory() || process.cwd();
|
|
222
|
+
const taskOMaticDir = (0, path_1.join)(workingDir, ".task-o-matic");
|
|
223
|
+
console.log(chalk_1.default.blue("š Attaching task-o-matic to existing project..."));
|
|
224
|
+
console.log(chalk_1.default.cyan(` š Working directory: ${workingDir}`));
|
|
225
|
+
// Check if already initialized (unless --redetect is passed)
|
|
226
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(taskOMaticDir, "config.json")) && !options.redetect) {
|
|
227
|
+
console.log(chalk_1.default.yellow("ā ļø This project is already initialized with task-o-matic."));
|
|
228
|
+
console.log(chalk_1.default.cyan(" Use --redetect to re-analyze the stack."));
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
// Check for project markers
|
|
232
|
+
const hasPackageJson = (0, fs_1.existsSync)((0, path_1.join)(workingDir, "package.json"));
|
|
233
|
+
const hasGit = (0, fs_1.existsSync)((0, path_1.join)(workingDir, ".git"));
|
|
234
|
+
if (!hasPackageJson) {
|
|
235
|
+
console.log(chalk_1.default.red("ā No package.json found in this directory."));
|
|
236
|
+
console.log(chalk_1.default.cyan(" Run 'task-o-matic init init' to create a new project."));
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
console.log(chalk_1.default.blue("\nš Analyzing project..."));
|
|
240
|
+
// Run ProjectAnalysisService
|
|
241
|
+
const analysisService = new task_o_matic_core_1.ProjectAnalysisService();
|
|
242
|
+
// Detect stack
|
|
243
|
+
let stackResult;
|
|
244
|
+
try {
|
|
245
|
+
stackResult = await analysisService.detectStack(workingDir);
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.log(chalk_1.default.red("ā Stack detection failed:"), error instanceof Error ? error.message : String(error));
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (!stackResult.success) {
|
|
252
|
+
console.log(chalk_1.default.yellow("ā ļø Stack detection had issues:"));
|
|
253
|
+
stackResult.warnings?.forEach((w) => console.log(chalk_1.default.yellow(` - ${w}`)));
|
|
254
|
+
}
|
|
255
|
+
const stack = stackResult.stack;
|
|
256
|
+
// Display detected stack
|
|
257
|
+
console.log(chalk_1.default.green("\nā
Stack detected:"));
|
|
258
|
+
console.log(` Language: ${chalk_1.default.cyan(stack.language)}`);
|
|
259
|
+
console.log(` Framework(s): ${chalk_1.default.cyan(stack.frameworks.join(", "))}`);
|
|
260
|
+
if (stack.database)
|
|
261
|
+
console.log(` Database: ${chalk_1.default.cyan(stack.database)}`);
|
|
262
|
+
if (stack.orm)
|
|
263
|
+
console.log(` ORM: ${chalk_1.default.cyan(stack.orm)}`);
|
|
264
|
+
if (stack.auth)
|
|
265
|
+
console.log(` Auth: ${chalk_1.default.cyan(stack.auth)}`);
|
|
266
|
+
console.log(` Package Manager: ${chalk_1.default.cyan(stack.packageManager)}`);
|
|
267
|
+
console.log(` Runtime: ${chalk_1.default.cyan(stack.runtime)}`);
|
|
268
|
+
if (stack.api)
|
|
269
|
+
console.log(` API: ${chalk_1.default.cyan(stack.api)}`);
|
|
270
|
+
console.log(` Confidence: ${chalk_1.default.cyan(`${Math.round(stack.confidence * 100)}%`)}`);
|
|
271
|
+
// If dry run, stop here
|
|
272
|
+
if (options.dryRun) {
|
|
273
|
+
console.log(chalk_1.default.cyan("\nš Dry run complete. No files created."));
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
// Create .task-o-matic directory structure
|
|
277
|
+
const dirs = ["tasks", "prd", "logs", "docs"];
|
|
278
|
+
if (!(0, fs_1.existsSync)(taskOMaticDir)) {
|
|
279
|
+
(0, fs_1.mkdirSync)(taskOMaticDir, { recursive: true });
|
|
280
|
+
console.log(chalk_1.default.green(`\nā Created ${taskOMaticDir}`));
|
|
281
|
+
}
|
|
282
|
+
dirs.forEach((dir) => {
|
|
283
|
+
const fullPath = (0, path_1.join)(taskOMaticDir, dir);
|
|
284
|
+
if (!(0, fs_1.existsSync)(fullPath)) {
|
|
285
|
+
(0, fs_1.mkdirSync)(fullPath, { recursive: true });
|
|
286
|
+
console.log(chalk_1.default.green(` ā Created ${fullPath}`));
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
// Write stack.json (cached stack detection)
|
|
290
|
+
const stackFilePath = (0, path_1.join)(taskOMaticDir, "stack.json");
|
|
291
|
+
(0, fs_1.writeFileSync)(stackFilePath, JSON.stringify(stack, null, 2));
|
|
292
|
+
console.log(chalk_1.default.green(` ā Created ${stackFilePath}`));
|
|
293
|
+
// Initialize config with provided options
|
|
294
|
+
const config = {
|
|
295
|
+
ai: {
|
|
296
|
+
provider: options.aiProvider,
|
|
297
|
+
model: options.aiModel,
|
|
298
|
+
maxTokens: parseInt(options.maxTokens) || 32768,
|
|
299
|
+
temperature: parseFloat(options.temperature) || 0.5,
|
|
300
|
+
},
|
|
301
|
+
};
|
|
302
|
+
// Add API key if provided
|
|
303
|
+
if (options.aiKey) {
|
|
304
|
+
config.ai.apiKey = options.aiKey;
|
|
305
|
+
}
|
|
306
|
+
// Add provider URL if provided
|
|
307
|
+
if (options.aiProviderUrl) {
|
|
308
|
+
config.ai.baseURL = options.aiProviderUrl;
|
|
309
|
+
}
|
|
310
|
+
// Set working directory and save config
|
|
311
|
+
task_o_matic_core_1.configManager.setWorkingDirectory(workingDir);
|
|
312
|
+
task_o_matic_core_1.configManager.setConfig(config);
|
|
313
|
+
task_o_matic_core_1.configManager.save();
|
|
314
|
+
console.log(chalk_1.default.green(` ā Created ${taskOMaticDir}/config.json`));
|
|
315
|
+
// Initialize mcp.json with context7 config
|
|
316
|
+
const mcpConfig = {
|
|
317
|
+
context7: {},
|
|
318
|
+
};
|
|
319
|
+
if (options.context7ApiKey) {
|
|
320
|
+
mcpConfig.context7.apiKey = options.context7ApiKey;
|
|
321
|
+
}
|
|
322
|
+
const mcpFilePath = (0, path_1.join)(taskOMaticDir, "mcp.json");
|
|
323
|
+
(0, fs_1.writeFileSync)(mcpFilePath, JSON.stringify(mcpConfig, null, 2));
|
|
324
|
+
console.log(chalk_1.default.green(` ā Created ${mcpFilePath}`));
|
|
325
|
+
let analysisResult;
|
|
326
|
+
// Run full analysis if requested
|
|
327
|
+
if (options.analyze) {
|
|
328
|
+
console.log(chalk_1.default.blue("\nš Running full project analysis..."));
|
|
329
|
+
try {
|
|
330
|
+
analysisResult = await analysisService.analyzeProject(workingDir);
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
console.error(chalk_1.default.red("ā Project analysis failed:"), error instanceof Error ? error.message : String(error));
|
|
334
|
+
// Fallback or early exit if analysis is critical
|
|
335
|
+
}
|
|
336
|
+
if (analysisResult && analysisResult.success) {
|
|
337
|
+
const analysis = analysisResult.analysis;
|
|
338
|
+
console.log(chalk_1.default.green("\nā
Project analysis complete:"));
|
|
339
|
+
console.log(` Project: ${chalk_1.default.cyan(analysis.projectName)}`);
|
|
340
|
+
if (analysis.version)
|
|
341
|
+
console.log(` Version: ${chalk_1.default.cyan(analysis.version)}`);
|
|
342
|
+
console.log(chalk_1.default.blue("\nš Structure:"));
|
|
343
|
+
console.log(` Monorepo: ${analysis.structure.isMonorepo ? "Yes" : "No"}`);
|
|
344
|
+
console.log(` Source directories: ${analysis.structure.sourceDirectories.length}`);
|
|
345
|
+
console.log(` Has tests: ${analysis.structure.hasTests ? "Yes" : "No"}`);
|
|
346
|
+
console.log(` Has CI/CD: ${analysis.structure.hasCICD ? "Yes" : "No"}`);
|
|
347
|
+
console.log(` Has Docker: ${analysis.structure.hasDocker ? "Yes" : "No"}`);
|
|
348
|
+
if (analysis.documentation.length > 0) {
|
|
349
|
+
console.log(chalk_1.default.blue(`\nš Documentation found: ${analysis.documentation.length} files`));
|
|
350
|
+
}
|
|
351
|
+
if (analysis.todos.length > 0) {
|
|
352
|
+
console.log(chalk_1.default.blue(`\nš TODOs found: ${analysis.todos.length} comments`));
|
|
353
|
+
// Show first 5 TODOs
|
|
354
|
+
analysis.todos.slice(0, 5).forEach((todo) => {
|
|
355
|
+
console.log(chalk_1.default.gray(` [${todo.type}] ${todo.file}:${todo.line} - ${todo.text.substring(0, 60)}${todo.text.length > 60 ? "..." : ""}`));
|
|
356
|
+
});
|
|
357
|
+
if (analysis.todos.length > 5) {
|
|
358
|
+
console.log(chalk_1.default.gray(` ... and ${analysis.todos.length - 5} more`));
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
if (analysis.existingFeatures.length > 0) {
|
|
362
|
+
console.log(chalk_1.default.blue(`\nš§ Features detected: ${analysis.existingFeatures.length}`));
|
|
363
|
+
analysis.existingFeatures.forEach((feature) => {
|
|
364
|
+
console.log(chalk_1.default.gray(` - ${feature.name}: ${feature.description}`));
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
// Save analysis result
|
|
368
|
+
const analysisFilePath = (0, path_1.join)(taskOMaticDir, "analysis.json");
|
|
369
|
+
(0, fs_1.writeFileSync)(analysisFilePath, JSON.stringify(analysis, null, 2));
|
|
370
|
+
console.log(chalk_1.default.green(`\n ā Saved analysis to ${analysisFilePath}`));
|
|
371
|
+
// Show suggestions
|
|
372
|
+
if (analysisResult.suggestions && analysisResult.suggestions.length > 0) {
|
|
373
|
+
console.log(chalk_1.default.blue("\nš” Suggestions:"));
|
|
374
|
+
analysisResult.suggestions.forEach((suggestion) => {
|
|
375
|
+
console.log(chalk_1.default.cyan(` - ${suggestion}`));
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
console.log(chalk_1.default.yellow("ā ļø Analysis had issues:"));
|
|
381
|
+
analysisResult?.warnings?.forEach((w) => console.log(chalk_1.default.yellow(` - ${w}`)));
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
// Handle --create-prd (independent of analysis)
|
|
385
|
+
if (options.createPrd) {
|
|
386
|
+
console.log(chalk_1.default.blue("\nš Generating PRD from codebase..."));
|
|
387
|
+
try {
|
|
388
|
+
const prdResult = await task_o_matic_core_1.prdService.generateFromCodebase({
|
|
389
|
+
workingDirectory: workingDir,
|
|
390
|
+
outputFile: "current-state.md",
|
|
391
|
+
analysisResult,
|
|
392
|
+
});
|
|
393
|
+
console.log(chalk_1.default.green(` ā Generated PRD: ${prdResult.prdPath}`));
|
|
394
|
+
}
|
|
395
|
+
catch (error) {
|
|
396
|
+
console.error(chalk_1.default.red(" ā Failed to generate PRD:"), error instanceof Error ? error.message : String(error));
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
// Update .gitignore if git exists
|
|
400
|
+
if (hasGit) {
|
|
401
|
+
const gitignorePath = (0, path_1.join)(workingDir, ".gitignore");
|
|
402
|
+
const taskOMaticEntries = [
|
|
403
|
+
"",
|
|
404
|
+
"# Task-O-Matic",
|
|
405
|
+
".task-o-matic/logs/",
|
|
406
|
+
".task-o-matic/config.json",
|
|
407
|
+
".task-o-matic/mcp.json",
|
|
408
|
+
];
|
|
409
|
+
if ((0, fs_1.existsSync)(gitignorePath)) {
|
|
410
|
+
const existing = (0, fs_1.readFileSync)(gitignorePath, "utf-8");
|
|
411
|
+
if (!existing.includes(".task-o-matic/")) {
|
|
412
|
+
(0, fs_1.writeFileSync)(gitignorePath, existing + taskOMaticEntries.join("\n") + "\n");
|
|
413
|
+
console.log(chalk_1.default.green(" ā Updated .gitignore"));
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
(0, fs_1.writeFileSync)(gitignorePath, taskOMaticEntries.join("\n") + "\n");
|
|
418
|
+
console.log(chalk_1.default.green(" ā Created .gitignore"));
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
console.log(chalk_1.default.green("\nā
Task-O-Matic attached successfully!"));
|
|
422
|
+
console.log(chalk_1.default.cyan("\nNext steps:"));
|
|
423
|
+
console.log(" 1. Configure AI provider: task-o-matic config set-ai-provider <provider> <model>");
|
|
424
|
+
console.log(" 2. Generate PRD from codebase: task-o-matic prd generate --from-codebase");
|
|
425
|
+
console.log(' 3. Create your first task: task-o-matic tasks create --title "Your first task"');
|
|
426
|
+
});
|
|
205
427
|
// Default action - show help
|
|
206
428
|
exports.initCommand.action(() => {
|
|
207
429
|
console.log(chalk_1.default.blue("TaskOMatic Initialization"));
|
|
208
430
|
console.log("");
|
|
209
431
|
console.log(chalk_1.default.cyan("Usage:"));
|
|
210
432
|
console.log(" task-o-matic init init Initialize task-o-matic project");
|
|
433
|
+
console.log(" task-o-matic init attach Attach to existing project");
|
|
211
434
|
console.log(" task-o-matic init bootstrap <name> Bootstrap Better-T-Stack project");
|
|
212
435
|
console.log("");
|
|
213
436
|
console.log(chalk_1.default.cyan("Examples:"));
|
|
437
|
+
console.log(" # Attach to existing project:");
|
|
438
|
+
console.log(" task-o-matic init attach");
|
|
439
|
+
console.log(" task-o-matic init attach --analyze");
|
|
440
|
+
console.log(" task-o-matic init attach --dry-run");
|
|
441
|
+
console.log(" task-o-matic init attach --redetect");
|
|
442
|
+
console.log("");
|
|
214
443
|
console.log(" # Basic initialization:");
|
|
215
444
|
console.log(" task-o-matic init init");
|
|
216
445
|
console.log(" task-o-matic init init --project-name my-app");
|
|
@@ -263,4 +492,10 @@ exports.initCommand.action(() => {
|
|
|
263
492
|
console.log(" --package-manager <pm> Package manager (npm/pnpm/bun)");
|
|
264
493
|
console.log(" --runtime <runtime> Runtime (node/bun)");
|
|
265
494
|
console.log(" --payment <payment> Payment provider (none/polar)");
|
|
495
|
+
console.log("");
|
|
496
|
+
console.log(chalk_1.default.cyan("Attach Options:"));
|
|
497
|
+
console.log(" --analyze Run full project analysis (TODOs, features)");
|
|
498
|
+
console.log(" --create-prd Auto-generate a PRD from codebase analysis");
|
|
499
|
+
console.log(" --dry-run Just detect stack, don't create files");
|
|
500
|
+
console.log(" --redetect Force re-detection (overwrites stack.json)");
|
|
266
501
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prd.d.ts","sourceRoot":"","sources":["../../src/commands/prd.ts"],"names":[],"mappings":";AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"prd.d.ts","sourceRoot":"","sources":["../../src/commands/prd.ts"],"names":[],"mappings":";AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,UAAU,SAEtB,CAAC"}
|
package/dist/commands/prd.js
CHANGED
|
@@ -726,3 +726,97 @@ exports.prdCommand
|
|
|
726
726
|
process.exit(1);
|
|
727
727
|
}
|
|
728
728
|
});
|
|
729
|
+
// Generate PRD from existing codebase
|
|
730
|
+
exports.prdCommand
|
|
731
|
+
.command("generate")
|
|
732
|
+
.description("Generate a PRD from an existing codebase (reverse-engineering)")
|
|
733
|
+
.option("--output <filename>", "Output filename", "current-state.md")
|
|
734
|
+
.option("--ai <provider:model>", "AI model to use. Format: [provider:]model[;reasoning[=budget]]")
|
|
735
|
+
.option("--ai-reasoning <tokens>", "Enable reasoning for OpenRouter models (max reasoning tokens)")
|
|
736
|
+
.option("--stream", "Enable streaming output")
|
|
737
|
+
.option("--tools", "Enable filesystem tools for deeper analysis")
|
|
738
|
+
.option("--json", "Output result as JSON")
|
|
739
|
+
.action(async (options) => {
|
|
740
|
+
try {
|
|
741
|
+
const workingDirectory = process.cwd();
|
|
742
|
+
// Load configuration
|
|
743
|
+
await task_o_matic_core_1.configManager.load();
|
|
744
|
+
const aiConfig = task_o_matic_core_1.configManager.getAIConfig();
|
|
745
|
+
// Determine which AI model to use
|
|
746
|
+
let aiProvider = aiConfig.provider;
|
|
747
|
+
let aiModel = aiConfig.model;
|
|
748
|
+
let aiReasoning = aiConfig.reasoning?.maxTokens?.toString();
|
|
749
|
+
if (options.ai) {
|
|
750
|
+
const modelConfig = (0, task_o_matic_core_1.parseModelString)(options.ai);
|
|
751
|
+
aiProvider = modelConfig.provider || aiProvider;
|
|
752
|
+
aiModel = modelConfig.model;
|
|
753
|
+
if (modelConfig.reasoning) {
|
|
754
|
+
aiReasoning = modelConfig.reasoning.toString();
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
if (options.aiReasoning) {
|
|
758
|
+
aiReasoning = options.aiReasoning;
|
|
759
|
+
}
|
|
760
|
+
const streamingOptions = (0, streaming_options_1.createStreamingOptions)(options.stream, "Generating PRD from codebase");
|
|
761
|
+
// Default to codebase generation if from-codebase is specified OR if no description is provided (as implied by command)
|
|
762
|
+
// Actually this is the `generate` subcommand, so it *is* the from-codebase command essentially.
|
|
763
|
+
// But we should respect the flag if user explicitly provides it, or if it's the intended default mode for this command.
|
|
764
|
+
// Given the description "Generate a PRD from an existing codebase", it seems `from-codebase` is the primary function.
|
|
765
|
+
if (options.fromCodebase || true) {
|
|
766
|
+
// Always true for this subcommand per its description, but keeping check structure
|
|
767
|
+
console.log(chalk_1.default.blue("š Analyzing existing codebase...\n"));
|
|
768
|
+
const result = await task_o_matic_core_1.prdService.generateFromCodebase({
|
|
769
|
+
workingDirectory,
|
|
770
|
+
outputFile: options.output,
|
|
771
|
+
enableFilesystemTools: options.tools,
|
|
772
|
+
aiOptions: {
|
|
773
|
+
aiProvider,
|
|
774
|
+
aiModel,
|
|
775
|
+
aiReasoning,
|
|
776
|
+
},
|
|
777
|
+
streamingOptions,
|
|
778
|
+
callbacks: {
|
|
779
|
+
onProgress: progress_1.displayProgress,
|
|
780
|
+
onError: progress_1.displayError,
|
|
781
|
+
},
|
|
782
|
+
});
|
|
783
|
+
console.log("");
|
|
784
|
+
if (options.json) {
|
|
785
|
+
// JSON output mode
|
|
786
|
+
console.log(JSON.stringify({
|
|
787
|
+
prdPath: result.prdPath,
|
|
788
|
+
projectName: result.analysis.projectName,
|
|
789
|
+
stack: result.analysis.stack,
|
|
790
|
+
features: result.analysis.existingFeatures.length,
|
|
791
|
+
todos: result.analysis.todos.length,
|
|
792
|
+
stats: result.stats,
|
|
793
|
+
}, null, 2));
|
|
794
|
+
}
|
|
795
|
+
else {
|
|
796
|
+
// Human-readable output
|
|
797
|
+
console.log(chalk_1.default.green("ā PRD Generated from Codebase\n"));
|
|
798
|
+
console.log(chalk_1.default.cyan("Project Analysis:"));
|
|
799
|
+
console.log(chalk_1.default.white(` Project Name: ${result.analysis.projectName}`));
|
|
800
|
+
console.log(chalk_1.default.white(` Stack: ${result.analysis.stack.frameworks.join(", ")} (${result.analysis.stack.language})`));
|
|
801
|
+
console.log(chalk_1.default.white(` Features Detected: ${result.analysis.existingFeatures.length}`));
|
|
802
|
+
console.log(chalk_1.default.white(` TODOs Found: ${result.analysis.todos.length}`));
|
|
803
|
+
console.log(chalk_1.default.blue("\nStats:"));
|
|
804
|
+
console.log(chalk_1.default.cyan(` Duration: ${result.stats.duration}ms`));
|
|
805
|
+
if (result.stats.tokenUsage) {
|
|
806
|
+
console.log(chalk_1.default.cyan(` Tokens: ${result.stats.tokenUsage.total}`));
|
|
807
|
+
}
|
|
808
|
+
if (result.stats.timeToFirstToken) {
|
|
809
|
+
console.log(chalk_1.default.cyan(` TTFT: ${result.stats.timeToFirstToken}ms`));
|
|
810
|
+
}
|
|
811
|
+
console.log(chalk_1.default.green(`\nā PRD saved to: ${result.prdPath}`));
|
|
812
|
+
console.log(chalk_1.default.dim("\nTip: Use 'task-o-matic prd parse --file " +
|
|
813
|
+
result.prdPath +
|
|
814
|
+
"' to extract tasks"));
|
|
815
|
+
}
|
|
816
|
+
} // End of fromCodebase block
|
|
817
|
+
}
|
|
818
|
+
catch (error) {
|
|
819
|
+
(0, progress_1.displayError)(error);
|
|
820
|
+
process.exit(1);
|
|
821
|
+
}
|
|
822
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-loop.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/execute-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"execute-loop.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/execute-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,kBAAkB,SAiM5B,CAAC"}
|
|
@@ -30,6 +30,7 @@ exports.executeLoopCommand = new commander_1.Command("execute-loop")
|
|
|
30
30
|
.option("--auto-commit", "Automatically commit changes after each task", false)
|
|
31
31
|
.option("--plan", "Generate an implementation plan before execution", false)
|
|
32
32
|
.option("--plan-model <model>", "Model/executor to use for planning (e.g., 'opencode:gpt-4o' or 'gpt-4o')")
|
|
33
|
+
.option("--plan-tool <tool>", "Tool/Executor to use for planning (defaults to --tool)")
|
|
33
34
|
.option("--review-plan", "Pause for human review of the plan", false)
|
|
34
35
|
.option("--review", "Run AI review after execution", false)
|
|
35
36
|
.option("--review-model <model>", "Model/executor to use for review (e.g., 'opencode:gpt-4o' or 'gpt-4o')")
|
|
@@ -84,6 +85,7 @@ exports.executeLoopCommand = new commander_1.Command("execute-loop")
|
|
|
84
85
|
model: options.model,
|
|
85
86
|
plan: options.plan,
|
|
86
87
|
planModel: options.planModel,
|
|
88
|
+
planTool: options.planTool,
|
|
87
89
|
reviewPlan: options.reviewPlan,
|
|
88
90
|
review: options.review,
|
|
89
91
|
reviewModel: options.reviewModel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,cAAc,SAgIxB,CAAC"}
|
|
@@ -28,6 +28,7 @@ exports.executeCommand = new commander_1.Command("execute")
|
|
|
28
28
|
.option("--try-models <models>", "Progressive model/executor configs for retries (e.g., 'gpt-4o-mini,claude:sonnet-4')")
|
|
29
29
|
.option("--plan", "Generate an implementation plan before execution", false)
|
|
30
30
|
.option("--plan-model <model>", "Model/executor to use for planning (e.g., 'opencode:gpt-4o' or 'gpt-4o')")
|
|
31
|
+
.option("--plan-tool <tool>", "Tool/Executor to use for planning (defaults to --tool)")
|
|
31
32
|
.option("--review-plan", "Pause for human review of the plan", false)
|
|
32
33
|
.option("--review", "Run AI review after execution", false)
|
|
33
34
|
.option("--review-model <model>", "Model/executor to use for review (e.g., 'opencode:gpt-4o' or 'gpt-4o')")
|
|
@@ -67,6 +68,7 @@ exports.executeCommand = new commander_1.Command("execute")
|
|
|
67
68
|
tryModels,
|
|
68
69
|
plan: options.plan,
|
|
69
70
|
planModel: options.planModel,
|
|
71
|
+
planTool: options.planTool,
|
|
70
72
|
reviewPlan: options.reviewPlan,
|
|
71
73
|
review: options.review,
|
|
72
74
|
reviewModel: options.reviewModel,
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAoD9B;;;GAGG;AACH,eAAO,MAAM,MAAM,qBAgBlB,CAAC;AAEF;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,8 @@ const commander_1 = require("commander");
|
|
|
15
15
|
const task_o_matic_core_1 = require("task-o-matic-core");
|
|
16
16
|
const benchmark_1 = require("./commands/benchmark");
|
|
17
17
|
const config_1 = require("./commands/config");
|
|
18
|
+
const continue_1 = require("./commands/continue");
|
|
19
|
+
const detect_1 = require("./commands/detect");
|
|
18
20
|
const init_1 = require("./commands/init");
|
|
19
21
|
const install_1 = require("./commands/install");
|
|
20
22
|
const prd_1 = require("./commands/prd");
|
|
@@ -33,11 +35,13 @@ program
|
|
|
33
35
|
program.addCommand(config_1.configCommand);
|
|
34
36
|
program.addCommand(tasks_1.tasksCommand);
|
|
35
37
|
program.addCommand(prd_1.prdCommand);
|
|
38
|
+
program.addCommand(continue_1.continueCommand);
|
|
36
39
|
program.addCommand(prompt_1.promptCommand);
|
|
37
40
|
program.addCommand(init_1.initCommand);
|
|
38
41
|
program.addCommand(workflow_1.workflowCommand);
|
|
39
42
|
program.addCommand(benchmark_1.benchmarkCommand);
|
|
40
43
|
program.addCommand(install_1.installCommand);
|
|
44
|
+
program.addCommand(detect_1.detectCommand);
|
|
41
45
|
// Default action - show help
|
|
42
46
|
program.action(() => {
|
|
43
47
|
console.log(chalk_1.default.blue("š AI-Powered Task Management CLI"));
|
|
@@ -54,7 +58,7 @@ program.action(() => {
|
|
|
54
58
|
// Error handling
|
|
55
59
|
program.on("command:*", (operands) => {
|
|
56
60
|
console.error(chalk_1.default.red(`Unknown command: ${operands[0]}`));
|
|
57
|
-
console.log(chalk_1.default.blue("Available commands: config, tasks, prd, prompt, init, workflow, benchmark, install"));
|
|
61
|
+
console.log(chalk_1.default.blue("Available commands: config, tasks, prd, prompt, init, workflow, benchmark, install, continue, detect"));
|
|
58
62
|
console.log(chalk_1.default.blue("Use --help for available commands"));
|
|
59
63
|
process.exit(1);
|
|
60
64
|
});
|
|
@@ -88,6 +88,7 @@ export interface ExecuteCommandOptions extends DryRunOptions {
|
|
|
88
88
|
tryModels?: string;
|
|
89
89
|
plan?: boolean;
|
|
90
90
|
planModel?: string;
|
|
91
|
+
planTool?: string;
|
|
91
92
|
reviewPlan?: boolean;
|
|
92
93
|
review?: boolean;
|
|
93
94
|
reviewModel?: string;
|
|
@@ -109,6 +110,7 @@ export interface ExecuteLoopCommandOptions extends DryRunOptions {
|
|
|
109
110
|
autoCommit?: boolean;
|
|
110
111
|
plan?: boolean;
|
|
111
112
|
planModel?: string;
|
|
113
|
+
planTool?: string;
|
|
112
114
|
reviewPlan?: boolean;
|
|
113
115
|
review?: boolean;
|
|
114
116
|
reviewModel?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-options.d.ts","sourceRoot":"","sources":["../../src/types/cli-options.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-options.d.ts","sourceRoot":"","sources":["../../src/types/cli-options.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-o-matic",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "CLI for Task-O-Matic",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"test": "mocha -r tsx/cjs src/test/commands.test.ts"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"task-o-matic-core": "0.1.
|
|
32
|
+
"task-o-matic-core": "0.1.4",
|
|
33
33
|
"chalk": "^5.4.1",
|
|
34
34
|
"commander": "^14.0.2",
|
|
35
35
|
"create-better-t-stack": "^3.15.0",
|