task-o-matic 0.0.13 → 0.0.15
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/cli/display/progress.d.ts +15 -2
- package/dist/cli/display/progress.d.ts.map +1 -1
- package/dist/cli/display/progress.js +72 -4
- package/dist/commands/benchmark.d.ts.map +1 -1
- package/dist/commands/benchmark.js +11 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +60 -12
- package/dist/commands/prd.js +7 -1
- package/dist/commands/tasks/delete.d.ts.map +1 -1
- package/dist/commands/tasks/delete.js +2 -1
- package/dist/commands/tasks/document/add.d.ts.map +1 -1
- package/dist/commands/tasks/document/add.js +5 -4
- package/dist/commands/tasks/document/get.d.ts.map +1 -1
- package/dist/commands/tasks/document/get.js +2 -1
- package/dist/commands/tasks/list.js +2 -2
- package/dist/commands/tasks/next.js +4 -4
- package/dist/commands/tasks/plan/set.d.ts.map +1 -1
- package/dist/commands/tasks/plan/set.js +11 -3
- package/dist/commands/tasks/show.d.ts.map +1 -1
- package/dist/commands/tasks/show.js +2 -1
- package/dist/commands/tasks/status.d.ts.map +1 -1
- package/dist/commands/tasks/status.js +4 -3
- package/dist/commands/tasks/update.d.ts.map +1 -1
- package/dist/commands/tasks/update.js +7 -1
- package/dist/lib/ai-service/ai-operations.d.ts +1 -1
- package/dist/lib/ai-service/ai-operations.d.ts.map +1 -1
- package/dist/lib/ai-service/base-operations.d.ts +22 -0
- package/dist/lib/ai-service/base-operations.d.ts.map +1 -1
- package/dist/lib/ai-service/base-operations.js +29 -1
- package/dist/lib/ai-service/model-provider.d.ts.map +1 -1
- package/dist/lib/ai-service/model-provider.js +37 -6
- package/dist/lib/ai-service/task-operations.d.ts +2 -1
- package/dist/lib/ai-service/task-operations.d.ts.map +1 -1
- package/dist/lib/ai-service/task-operations.js +135 -173
- package/dist/lib/benchmark/registry.d.ts.map +1 -1
- package/dist/lib/benchmark/registry.js +6 -10
- package/dist/lib/better-t-stack-cli.d.ts +36 -21
- package/dist/lib/better-t-stack-cli.d.ts.map +1 -1
- package/dist/lib/better-t-stack-cli.js +212 -33
- package/dist/lib/bootstrap/cli-bootstrap.d.ts +14 -0
- package/dist/lib/bootstrap/cli-bootstrap.d.ts.map +1 -0
- package/dist/lib/bootstrap/cli-bootstrap.js +325 -0
- package/dist/lib/bootstrap/index.d.ts +4 -0
- package/dist/lib/bootstrap/index.d.ts.map +1 -0
- package/dist/lib/bootstrap/index.js +19 -0
- package/dist/lib/bootstrap/medusa-bootstrap.d.ts +14 -0
- package/dist/lib/bootstrap/medusa-bootstrap.d.ts.map +1 -0
- package/dist/lib/bootstrap/medusa-bootstrap.js +218 -0
- package/dist/lib/bootstrap/opentui-bootstrap.d.ts +11 -0
- package/dist/lib/bootstrap/opentui-bootstrap.d.ts.map +1 -0
- package/dist/lib/bootstrap/opentui-bootstrap.js +342 -0
- package/dist/lib/config-validation.d.ts +215 -0
- package/dist/lib/config-validation.d.ts.map +1 -0
- package/dist/lib/config-validation.js +246 -0
- package/dist/lib/config.d.ts +14 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +37 -5
- package/dist/lib/storage/file-system.d.ts.map +1 -1
- package/dist/lib/storage/file-system.js +81 -21
- package/dist/lib/task-execution-core.d.ts.map +1 -1
- package/dist/lib/task-execution-core.js +3 -2
- package/dist/services/prd.d.ts +17 -0
- package/dist/services/prd.d.ts.map +1 -1
- package/dist/services/prd.js +67 -60
- package/dist/services/tasks.d.ts +317 -3
- package/dist/services/tasks.d.ts.map +1 -1
- package/dist/services/tasks.js +531 -185
- package/dist/services/workflow-ai-assistant.d.ts.map +1 -1
- package/dist/services/workflow-ai-assistant.js +19 -6
- package/dist/test/lib/ai-service/task-operations.test.d.ts +2 -0
- package/dist/test/lib/ai-service/task-operations.test.d.ts.map +1 -0
- package/dist/test/lib/ai-service/task-operations.test.js +362 -0
- package/dist/test/mocks/mock-ai-operations.d.ts +15 -0
- package/dist/test/mocks/mock-ai-operations.d.ts.map +1 -0
- package/dist/test/mocks/mock-ai-operations.js +107 -0
- package/dist/test/mocks/mock-context-builder.d.ts +10 -0
- package/dist/test/mocks/mock-context-builder.d.ts.map +1 -0
- package/dist/test/mocks/mock-context-builder.js +81 -0
- package/dist/test/mocks/mock-model-provider.d.ts +7 -0
- package/dist/test/mocks/mock-model-provider.d.ts.map +1 -0
- package/dist/test/mocks/mock-model-provider.js +21 -0
- package/dist/test/mocks/mock-service-factory.d.ts +11 -0
- package/dist/test/mocks/mock-service-factory.d.ts.map +1 -0
- package/dist/test/mocks/mock-service-factory.js +61 -0
- package/dist/test/mocks/mock-storage.d.ts +50 -0
- package/dist/test/mocks/mock-storage.d.ts.map +1 -0
- package/dist/test/mocks/mock-storage.js +145 -0
- package/dist/test/services/task-service.test.d.ts +2 -0
- package/dist/test/services/task-service.test.d.ts.map +1 -0
- package/dist/test/services/task-service.test.js +352 -0
- package/dist/test/test-mock-setup.d.ts +26 -0
- package/dist/test/test-mock-setup.d.ts.map +1 -0
- package/dist/test/test-mock-setup.js +41 -0
- package/dist/test/test-setup.d.ts +9 -0
- package/dist/test/test-setup.d.ts.map +1 -0
- package/dist/test/test-setup.js +44 -0
- package/dist/test/test-utils.d.ts +22 -0
- package/dist/test/test-utils.d.ts.map +1 -0
- package/dist/test/test-utils.js +37 -0
- package/dist/test/utils/ai-operation-utility.test.d.ts +2 -0
- package/dist/test/utils/ai-operation-utility.test.d.ts.map +1 -0
- package/dist/test/utils/ai-operation-utility.test.js +290 -0
- package/dist/test/utils/error-handling.test.d.ts +2 -0
- package/dist/test/utils/error-handling.test.d.ts.map +1 -0
- package/dist/test/utils/error-handling.test.js +231 -0
- package/dist/types/index.d.ts +36 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/results.d.ts +60 -6
- package/dist/types/results.d.ts.map +1 -1
- package/dist/utils/ai-operation-utility.d.ts +142 -0
- package/dist/utils/ai-operation-utility.d.ts.map +1 -0
- package/dist/utils/ai-operation-utility.js +288 -0
- package/dist/utils/ai-service-factory.d.ts +10 -0
- package/dist/utils/ai-service-factory.d.ts.map +1 -1
- package/dist/utils/ai-service-factory.js +19 -1
- package/dist/utils/cli-validators.d.ts +2 -2
- package/dist/utils/cli-validators.d.ts.map +1 -1
- package/dist/utils/cli-validators.js +7 -6
- package/dist/utils/error-utils.d.ts +70 -0
- package/dist/utils/error-utils.d.ts.map +1 -0
- package/dist/utils/error-utils.js +104 -0
- package/dist/utils/file-utils.d.ts +49 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +82 -0
- package/dist/utils/id-generator.d.ts +92 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +146 -0
- package/dist/utils/model-executor-parser.d.ts +1 -1
- package/dist/utils/model-executor-parser.d.ts.map +1 -1
- package/dist/utils/model-executor-parser.js +3 -2
- package/dist/utils/stack-formatter.d.ts +2 -1
- package/dist/utils/stack-formatter.d.ts.map +1 -1
- package/dist/utils/stack-formatter.js +8 -2
- package/dist/utils/storage-utils.d.ts +49 -0
- package/dist/utils/storage-utils.d.ts.map +1 -0
- package/dist/utils/storage-utils.js +80 -0
- package/dist/utils/streaming-utils.d.ts +38 -0
- package/dist/utils/streaming-utils.d.ts.map +1 -0
- package/dist/utils/streaming-utils.js +56 -0
- package/dist/utils/task-o-matic-error.d.ts +206 -0
- package/dist/utils/task-o-matic-error.d.ts.map +1 -0
- package/dist/utils/task-o-matic-error.js +304 -0
- package/docs/agents/cli.md +58 -149
- package/package.json +2 -2
|
@@ -5,7 +5,20 @@ import type { ProgressEvent } from "../../types/callbacks";
|
|
|
5
5
|
*/
|
|
6
6
|
export declare function displayProgress(event: ProgressEvent): void;
|
|
7
7
|
/**
|
|
8
|
-
* Display an error message
|
|
8
|
+
* Display an error message with full TaskOMaticError details
|
|
9
|
+
*
|
|
10
|
+
* If the error is a TaskOMaticError, displays:
|
|
11
|
+
* - Error code (e.g., [TASK_NOT_FOUND])
|
|
12
|
+
* - Error message
|
|
13
|
+
* - Context information
|
|
14
|
+
* - Actionable suggestions
|
|
15
|
+
* - Metadata (in verbose mode)
|
|
16
|
+
* - Stack trace (in debug mode)
|
|
17
|
+
*
|
|
18
|
+
* For regular errors, displays the message and stack trace.
|
|
9
19
|
*/
|
|
10
|
-
export declare function displayError(error: Error | unknown
|
|
20
|
+
export declare function displayError(error: Error | unknown, options?: {
|
|
21
|
+
verbose?: boolean;
|
|
22
|
+
debug?: boolean;
|
|
23
|
+
}): void;
|
|
11
24
|
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/cli/display/progress.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/cli/display/progress.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAuC1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAmE3G"}
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.displayProgress = displayProgress;
|
|
7
7
|
exports.displayError = displayError;
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const task_o_matic_error_1 = require("../../utils/task-o-matic-error");
|
|
9
10
|
/**
|
|
10
11
|
* Display progress events for the CLI
|
|
11
12
|
* This function is used as a callback for services to report progress
|
|
@@ -42,9 +43,76 @@ function displayProgress(event) {
|
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
/**
|
|
45
|
-
* Display an error message
|
|
46
|
+
* Display an error message with full TaskOMaticError details
|
|
47
|
+
*
|
|
48
|
+
* If the error is a TaskOMaticError, displays:
|
|
49
|
+
* - Error code (e.g., [TASK_NOT_FOUND])
|
|
50
|
+
* - Error message
|
|
51
|
+
* - Context information
|
|
52
|
+
* - Actionable suggestions
|
|
53
|
+
* - Metadata (in verbose mode)
|
|
54
|
+
* - Stack trace (in debug mode)
|
|
55
|
+
*
|
|
56
|
+
* For regular errors, displays the message and stack trace.
|
|
46
57
|
*/
|
|
47
|
-
function displayError(error) {
|
|
48
|
-
const
|
|
49
|
-
|
|
58
|
+
function displayError(error, options) {
|
|
59
|
+
const verbose = options?.verbose ?? false;
|
|
60
|
+
const debug = options?.debug ?? process.env.DEBUG === "true";
|
|
61
|
+
if ((0, task_o_matic_error_1.isTaskOMaticError)(error)) {
|
|
62
|
+
// Display TaskOMaticError with full formatting
|
|
63
|
+
const taskError = error;
|
|
64
|
+
// Error header with code
|
|
65
|
+
console.error(chalk_1.default.red(`❌ [${taskError.code}] ${taskError.message}`));
|
|
66
|
+
// Context information
|
|
67
|
+
if (taskError.context) {
|
|
68
|
+
console.error(chalk_1.default.gray(`\nContext: ${taskError.context}`));
|
|
69
|
+
}
|
|
70
|
+
// Actionable suggestions
|
|
71
|
+
if (taskError.suggestions && taskError.suggestions.length > 0) {
|
|
72
|
+
console.error(chalk_1.default.yellow("\n💡 Suggestions:"));
|
|
73
|
+
taskError.suggestions.forEach((suggestion, index) => {
|
|
74
|
+
console.error(chalk_1.default.yellow(` ${index + 1}. ${suggestion}`));
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
// Metadata (only in verbose mode)
|
|
78
|
+
if (verbose && taskError.metadata) {
|
|
79
|
+
console.error(chalk_1.default.gray("\nMetadata:"));
|
|
80
|
+
Object.entries(taskError.metadata).forEach(([key, value]) => {
|
|
81
|
+
console.error(chalk_1.default.gray(` ${key}: ${JSON.stringify(value)}`));
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// Cause chain
|
|
85
|
+
if (taskError.cause && verbose) {
|
|
86
|
+
console.error(chalk_1.default.gray("\nCaused by:"));
|
|
87
|
+
let cause = taskError.cause;
|
|
88
|
+
let depth = 1;
|
|
89
|
+
while (cause && depth <= 3) {
|
|
90
|
+
const causeMsg = cause instanceof Error ? cause.message : String(cause);
|
|
91
|
+
console.error(chalk_1.default.gray(` ${" ".repeat(depth - 1)}↳ ${causeMsg}`));
|
|
92
|
+
cause = cause.cause;
|
|
93
|
+
depth++;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Stack trace (only in debug mode)
|
|
97
|
+
if (debug && taskError.stack) {
|
|
98
|
+
console.error(chalk_1.default.gray("\nStack trace:"));
|
|
99
|
+
console.error(chalk_1.default.gray(taskError.stack));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else if (error instanceof Error) {
|
|
103
|
+
// Regular Error object
|
|
104
|
+
console.error(chalk_1.default.red("❌ Error:"), error.message);
|
|
105
|
+
if (debug && error.stack) {
|
|
106
|
+
console.error(chalk_1.default.gray("\nStack trace:"));
|
|
107
|
+
console.error(chalk_1.default.gray(error.stack));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Unknown error type
|
|
112
|
+
console.error(chalk_1.default.red("❌ Unknown error:"), String(error));
|
|
113
|
+
}
|
|
114
|
+
// Footer with help hint
|
|
115
|
+
if (!verbose && !debug) {
|
|
116
|
+
console.error(chalk_1.default.gray("\n💭 Run with --verbose for more details, or --debug for stack traces"));
|
|
117
|
+
}
|
|
50
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/commands/benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/commands/benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,gBAAgB,SAE5B,CAAC"}
|
|
@@ -40,14 +40,22 @@ exports.benchmarkCommand = void 0;
|
|
|
40
40
|
const commander_1 = require("commander");
|
|
41
41
|
const chalk_1 = __importDefault(require("chalk"));
|
|
42
42
|
const benchmark_1 = require("../services/benchmark");
|
|
43
|
+
const progress_1 = require("../cli/display/progress");
|
|
43
44
|
const workflow_prompts_1 = require("../utils/workflow-prompts");
|
|
44
45
|
exports.benchmarkCommand = new commander_1.Command("benchmark").description("Run and manage AI benchmarks");
|
|
46
|
+
const task_o_matic_error_1 = require("../utils/task-o-matic-error");
|
|
45
47
|
// Helper to parse model string
|
|
46
48
|
// Format: provider:model[:reasoning=<tokens>]
|
|
47
49
|
function parseModelString(modelStr) {
|
|
48
50
|
const parts = modelStr.split(":");
|
|
49
51
|
if (parts.length < 2) {
|
|
50
|
-
throw
|
|
52
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.INVALID_INPUT, `Invalid model format: ${modelStr}. Expected provider:model[:reasoning=<tokens>]`, {
|
|
53
|
+
suggestions: [
|
|
54
|
+
"Use the format 'provider:model'",
|
|
55
|
+
"Example: 'anthropic:claude-3.5-sonnet'",
|
|
56
|
+
"Optionally add reasoning tokens: 'openai:gpt-4:reasoning=2048'",
|
|
57
|
+
],
|
|
58
|
+
});
|
|
51
59
|
}
|
|
52
60
|
const provider = parts[0];
|
|
53
61
|
const model = parts[1];
|
|
@@ -192,7 +200,7 @@ exports.benchmarkCommand
|
|
|
192
200
|
});
|
|
193
201
|
}
|
|
194
202
|
catch (error) {
|
|
195
|
-
|
|
203
|
+
(0, progress_1.displayError)(error);
|
|
196
204
|
process.exit(1);
|
|
197
205
|
}
|
|
198
206
|
});
|
|
@@ -375,7 +383,7 @@ exports.benchmarkCommand
|
|
|
375
383
|
await runWorkflowBenchmark(options);
|
|
376
384
|
}
|
|
377
385
|
catch (error) {
|
|
378
|
-
|
|
386
|
+
(0, progress_1.displayError)(error);
|
|
379
387
|
process.exit(1);
|
|
380
388
|
}
|
|
381
389
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,WAAW,SAEvB,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -10,8 +10,10 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
10
10
|
const fs_1 = require("fs");
|
|
11
11
|
const path_1 = require("path");
|
|
12
12
|
const config_1 = require("../lib/config");
|
|
13
|
+
const progress_1 = require("../cli/display/progress");
|
|
14
|
+
const task_o_matic_error_1 = require("../utils/task-o-matic-error");
|
|
13
15
|
const better_t_stack_cli_1 = require("../lib/better-t-stack-cli");
|
|
14
|
-
exports.initCommand = new commander_1.Command("init").description("Initialize task-o-matic project and bootstrap
|
|
16
|
+
exports.initCommand = new commander_1.Command("init").description("Initialize task-o-matic project and bootstrap projects (web/native/cli/tui)");
|
|
15
17
|
// Initialize task-o-matic project
|
|
16
18
|
exports.initCommand
|
|
17
19
|
.command("init")
|
|
@@ -24,7 +26,7 @@ exports.initCommand
|
|
|
24
26
|
.option("--temperature <temp>", "AI temperature", "0.5")
|
|
25
27
|
.option("--no-bootstrap", "Skip bootstrap after initialization")
|
|
26
28
|
.option("--project-name <name>", "Project name for bootstrap")
|
|
27
|
-
.option("--frontend <
|
|
29
|
+
.option("--frontend <frontends...>", "Frontend framework(s) - space/comma-separated (next, native-bare, cli, tui, etc.)", "next")
|
|
28
30
|
.option("--backend <backend>", "Backend framework for bootstrap", "convex")
|
|
29
31
|
.option("--database <database>", "Database for bootstrap")
|
|
30
32
|
.option("--auth <auth>", "Authentication for bootstrap", "better-auth")
|
|
@@ -33,6 +35,8 @@ exports.initCommand
|
|
|
33
35
|
.option("--package-manager <pm>", "Package manager (npm/pnpm/bun)", "npm")
|
|
34
36
|
.option("--runtime <runtime>", "Runtime (bun/node)", "node")
|
|
35
37
|
.option("--payment <payment>", "Payment provider (none/polar)", "none")
|
|
38
|
+
.option("--cli-deps <level>", "CLI dependency level (minimal/standard/full/task-o-matic)", "standard")
|
|
39
|
+
.option("--tui-framework <framework>", "TUI framework (solid/vue/react)", "solid")
|
|
36
40
|
.action(async (options) => {
|
|
37
41
|
// Handle directory creation/setup first
|
|
38
42
|
if (options.directory) {
|
|
@@ -61,13 +65,20 @@ exports.initCommand
|
|
|
61
65
|
await config_1.configManager.load();
|
|
62
66
|
// Initialize task-o-matic structure in the new project directory
|
|
63
67
|
await initializeProjectStructure(options);
|
|
68
|
+
// ... (existing code)
|
|
64
69
|
}
|
|
65
70
|
else {
|
|
66
|
-
throw
|
|
71
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.UNEXPECTED_ERROR, result.message, {
|
|
72
|
+
context: "Bootstrap process failed. The error originated from the 'better-t-stack-cli' tool.",
|
|
73
|
+
suggestions: [
|
|
74
|
+
"Check the output from 'better-t-stack-cli' for more details.",
|
|
75
|
+
"Ensure that 'better-t-stack-cli' is installed and configured correctly.",
|
|
76
|
+
],
|
|
77
|
+
});
|
|
67
78
|
}
|
|
68
79
|
}
|
|
69
80
|
catch (error) {
|
|
70
|
-
|
|
81
|
+
(0, progress_1.displayError)(error);
|
|
71
82
|
return; // Stop if bootstrap fails
|
|
72
83
|
}
|
|
73
84
|
}
|
|
@@ -136,9 +147,9 @@ async function initializeProjectStructure(options) {
|
|
|
136
147
|
// Bootstrap project with Better-T-Stack
|
|
137
148
|
exports.initCommand
|
|
138
149
|
.command("bootstrap")
|
|
139
|
-
.description("Bootstrap a new project
|
|
150
|
+
.description("Bootstrap a new project (web/native/cli/tui)")
|
|
140
151
|
.argument("<name>", "Project name")
|
|
141
|
-
.option("--frontend <
|
|
152
|
+
.option("--frontend <frontends...>", "Frontend framework(s) - space/comma-separated (next, native-bare, cli, tui, etc.)", "next")
|
|
142
153
|
.option("--backend <backend>", "Backend framework (hono/express/elysia)", "hono")
|
|
143
154
|
.option("--database <database>", "Database (sqlite/postgres/mysql/mongodb)", "sqlite")
|
|
144
155
|
.option("--orm <orm>", "ORM (drizzle/prisma/none)", "drizzle")
|
|
@@ -152,6 +163,8 @@ exports.initCommand
|
|
|
152
163
|
.option("--runtime <runtime>", "Runtime (bun/node)", "node")
|
|
153
164
|
.option("--api <type>", "API type (trpc/orpc)")
|
|
154
165
|
.option("--payment <payment>", "Payment provider (none/polar)", "none")
|
|
166
|
+
.option("--cli-deps <level>", "CLI dependency level (minimal/standard/full/task-o-matic)", "standard")
|
|
167
|
+
.option("--tui-framework <framework>", "TUI framework (solid/vue/react)", "solid")
|
|
155
168
|
.action(async (name, options) => {
|
|
156
169
|
const taskOMaticDir = config_1.configManager.getTaskOMaticDir();
|
|
157
170
|
if (!(0, fs_1.existsSync)(taskOMaticDir)) {
|
|
@@ -176,11 +189,17 @@ exports.initCommand
|
|
|
176
189
|
console.log(chalk_1.default.green(result.message));
|
|
177
190
|
}
|
|
178
191
|
else {
|
|
179
|
-
throw
|
|
192
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.UNEXPECTED_ERROR, result.message, {
|
|
193
|
+
context: "Bootstrap process failed. The error originated from the 'better-t-stack-cli' tool.",
|
|
194
|
+
suggestions: [
|
|
195
|
+
"Check the output from 'better-t-stack-cli' for more details.",
|
|
196
|
+
"Ensure that 'better-t-stack-cli' is installed and configured correctly.",
|
|
197
|
+
],
|
|
198
|
+
});
|
|
180
199
|
}
|
|
181
200
|
}
|
|
182
201
|
catch (error) {
|
|
183
|
-
|
|
202
|
+
(0, progress_1.displayError)(error);
|
|
184
203
|
}
|
|
185
204
|
});
|
|
186
205
|
// Default action - show help
|
|
@@ -192,11 +211,32 @@ exports.initCommand.action(() => {
|
|
|
192
211
|
console.log(" task-o-matic init bootstrap <name> Bootstrap Better-T-Stack project");
|
|
193
212
|
console.log("");
|
|
194
213
|
console.log(chalk_1.default.cyan("Examples:"));
|
|
214
|
+
console.log(" # Basic initialization:");
|
|
195
215
|
console.log(" task-o-matic init init");
|
|
196
216
|
console.log(" task-o-matic init init --project-name my-app");
|
|
197
|
-
console.log("
|
|
217
|
+
console.log("");
|
|
218
|
+
console.log(" # Web + Native + CLI + TUI (monorepo):");
|
|
219
|
+
console.log(" task-o-matic init init --project-name my-app --frontend \"next native-uniwind cli tui\" --backend hono");
|
|
220
|
+
console.log("");
|
|
221
|
+
console.log(" # CLI only:");
|
|
222
|
+
console.log(" task-o-matic init init --project-name my-cli --frontend cli --cli-deps full");
|
|
223
|
+
console.log("");
|
|
224
|
+
console.log(" # TUI only:");
|
|
225
|
+
console.log(" task-o-matic init init --project-name my-tui --frontend tui --tui-framework solid");
|
|
226
|
+
console.log("");
|
|
227
|
+
console.log(" # Web + Native (monorepo):");
|
|
228
|
+
console.log(" task-o-matic init init --project-name my-app --frontend \"next native-bare\" --backend hono");
|
|
229
|
+
console.log("");
|
|
230
|
+
console.log(" # Multiple web frontends:");
|
|
231
|
+
console.log(" task-o-matic init init --project-name my-app --frontend \"next tanstack-router\" --backend hono");
|
|
232
|
+
console.log("");
|
|
233
|
+
console.log(" # No bootstrap:");
|
|
198
234
|
console.log(" task-o-matic init init --project-name my-app --no-bootstrap");
|
|
235
|
+
console.log("");
|
|
236
|
+
console.log(" # Custom directory:");
|
|
199
237
|
console.log(" task-o-matic init init --directory my-workspace --project-name my-app");
|
|
238
|
+
console.log("");
|
|
239
|
+
console.log(" # Bootstrap command:");
|
|
200
240
|
console.log(" task-o-matic init bootstrap my-app --frontend next --backend hono --database postgres");
|
|
201
241
|
console.log("");
|
|
202
242
|
console.log(chalk_1.default.cyan("Init Options:"));
|
|
@@ -211,8 +251,16 @@ exports.initCommand.action(() => {
|
|
|
211
251
|
console.log(" --directory <dir> Working directory for the project");
|
|
212
252
|
console.log("");
|
|
213
253
|
console.log(chalk_1.default.cyan("Bootstrap Options:"));
|
|
214
|
-
console.log(" --frontend <
|
|
215
|
-
console.log("
|
|
254
|
+
console.log(" --frontend <frontends...> Frontend framework(s) - multiple values supported");
|
|
255
|
+
console.log(" Web: next, tanstack-router, react-router, nuxt, svelte, solid");
|
|
256
|
+
console.log(" Native: native-bare, native-uniwind, native-unistyles");
|
|
257
|
+
console.log(" Custom: cli, tui");
|
|
258
|
+
console.log(" --backend <backend> Backend framework (hono/express/elysia/convex)");
|
|
216
259
|
console.log(" --database <database> Database (sqlite/postgres/mysql/mongodb)");
|
|
217
|
-
console.log(" --auth
|
|
260
|
+
console.log(" --auth <auth> Authentication (better-auth/none)");
|
|
261
|
+
console.log(" --cli-deps <level> CLI dependency level (minimal/standard/full/task-o-matic)");
|
|
262
|
+
console.log(" --tui-framework <framework> TUI framework (solid/vue/react)");
|
|
263
|
+
console.log(" --package-manager <pm> Package manager (npm/pnpm/bun)");
|
|
264
|
+
console.log(" --runtime <runtime> Runtime (node/bun)");
|
|
265
|
+
console.log(" --payment <payment> Payment provider (none/polar)");
|
|
218
266
|
});
|
package/dist/commands/prd.js
CHANGED
|
@@ -46,11 +46,17 @@ const prd_1 = require("../services/prd");
|
|
|
46
46
|
const streaming_options_1 = require("../utils/streaming-options");
|
|
47
47
|
const progress_1 = require("../cli/display/progress");
|
|
48
48
|
exports.prdCommand = new commander_1.Command("prd").description("Manage PRDs and generate tasks");
|
|
49
|
+
const task_o_matic_error_1 = require("../utils/task-o-matic-error");
|
|
49
50
|
// Helper to parse model string (provider:model)
|
|
50
51
|
function parseModelString(modelStr) {
|
|
51
52
|
const parts = modelStr.split(":");
|
|
52
53
|
if (parts.length < 2) {
|
|
53
|
-
throw
|
|
54
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.INVALID_INPUT, `Invalid model format: ${modelStr}. Expected provider:model`, {
|
|
55
|
+
suggestions: [
|
|
56
|
+
"Use the format 'provider:model'",
|
|
57
|
+
"Example: 'anthropic:claude-3.5-sonnet'",
|
|
58
|
+
],
|
|
59
|
+
});
|
|
54
60
|
}
|
|
55
61
|
return { provider: parts[0], model: parts[1] };
|
|
56
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,aAAa,SAmCtB,CAAC"}
|
|
@@ -9,6 +9,7 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
9
9
|
const tasks_1 = require("../../services/tasks");
|
|
10
10
|
const task_1 = require("../../cli/display/task");
|
|
11
11
|
const progress_1 = require("../../cli/display/progress");
|
|
12
|
+
const task_o_matic_error_1 = require("../../utils/task-o-matic-error");
|
|
12
13
|
exports.deleteCommand = new commander_1.Command("delete")
|
|
13
14
|
.description("Delete a task")
|
|
14
15
|
.requiredOption("--id <id>", "Task ID to delete")
|
|
@@ -19,7 +20,7 @@ exports.deleteCommand = new commander_1.Command("delete")
|
|
|
19
20
|
if (!options.force) {
|
|
20
21
|
const task = await tasks_1.taskService.getTask(options.id);
|
|
21
22
|
if (!task) {
|
|
22
|
-
throw
|
|
23
|
+
throw (0, task_o_matic_error_1.formatTaskNotFoundError)(options.id);
|
|
23
24
|
}
|
|
24
25
|
console.log(chalk_1.default.red(`\n⚠️ Are you sure you want to delete task: ${task.title} (${task.id})?`));
|
|
25
26
|
console.log(chalk_1.default.red("This action cannot be undone."));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/tasks/document/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/tasks/document/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,uBAAuB,SAyC/B,CAAC"}
|
|
@@ -8,15 +8,16 @@ const commander_1 = require("commander");
|
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
9
|
const tasks_1 = require("../../../services/tasks");
|
|
10
10
|
const command_error_handler_1 = require("../../../utils/command-error-handler");
|
|
11
|
+
const task_o_matic_error_1 = require("../../../utils/task-o-matic-error");
|
|
11
12
|
exports.addDocumentationCommand = new commander_1.Command("add-documentation")
|
|
12
13
|
.description("Add documentation to a task from a file")
|
|
13
|
-
.requiredOption("--id <id>", "Task ID")
|
|
14
|
-
.requiredOption("--doc-file <path>", "Path to documentation file")
|
|
15
|
-
.option("--overwrite", "Overwrite existing documentation")
|
|
14
|
+
.requiredOption("-i, --id <id>", "Task ID")
|
|
15
|
+
.requiredOption("-f, --doc-file <path>", "Path to documentation file")
|
|
16
|
+
.option("-o, --overwrite", "Overwrite existing documentation")
|
|
16
17
|
.action((0, command_error_handler_1.wrapCommandHandler)("Add documentation", async (options) => {
|
|
17
18
|
const task = await tasks_1.taskService.getTask(options.id);
|
|
18
19
|
if (!task) {
|
|
19
|
-
throw
|
|
20
|
+
throw (0, task_o_matic_error_1.formatTaskNotFoundError)(options.id);
|
|
20
21
|
}
|
|
21
22
|
// Check if documentation already exists
|
|
22
23
|
const existingDoc = await tasks_1.taskService.getTaskDocumentation(options.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/tasks/document/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/tasks/document/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,uBAAuB,SA2B/B,CAAC"}
|
|
@@ -8,13 +8,14 @@ const commander_1 = require("commander");
|
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
9
|
const tasks_1 = require("../../../services/tasks");
|
|
10
10
|
const command_error_handler_1 = require("../../../utils/command-error-handler");
|
|
11
|
+
const task_o_matic_error_1 = require("../../../utils/task-o-matic-error");
|
|
11
12
|
exports.getDocumentationCommand = new commander_1.Command("get-documentation")
|
|
12
13
|
.description("Get existing documentation for a task")
|
|
13
14
|
.requiredOption("--id <id>", "Task ID")
|
|
14
15
|
.action((0, command_error_handler_1.wrapCommandHandler)("Get documentation", async (options) => {
|
|
15
16
|
const task = await tasks_1.taskService.getTask(options.id);
|
|
16
17
|
if (!task) {
|
|
17
|
-
throw
|
|
18
|
+
throw (0, task_o_matic_error_1.formatTaskNotFoundError)(options.id);
|
|
18
19
|
}
|
|
19
20
|
const documentation = await tasks_1.taskService.getTaskDocumentation(options.id);
|
|
20
21
|
if (!documentation) {
|
|
@@ -7,8 +7,8 @@ const task_1 = require("../../cli/display/task");
|
|
|
7
7
|
const progress_1 = require("../../cli/display/progress");
|
|
8
8
|
exports.listCommand = new commander_1.Command("list")
|
|
9
9
|
.description("List all tasks")
|
|
10
|
-
.option("--status <status>", "Filter by status (todo/in-progress/completed)")
|
|
11
|
-
.option("--tag <tag>", "Filter by tag")
|
|
10
|
+
.option("-s, --status <status>", "Filter by status (todo/in-progress/completed)")
|
|
11
|
+
.option("-t, --tag <tag>", "Filter by tag")
|
|
12
12
|
.action(async (options) => {
|
|
13
13
|
try {
|
|
14
14
|
const tasks = await tasks_1.taskService.listTasks({
|
|
@@ -11,10 +11,10 @@ const task_1 = require("../../cli/display/task");
|
|
|
11
11
|
const progress_1 = require("../../cli/display/progress");
|
|
12
12
|
exports.nextCommand = new commander_1.Command("get-next")
|
|
13
13
|
.description("Get the next task to work on (defaults to hierarchical order)")
|
|
14
|
-
.option("--status <status>", "Filter by status (todo/in-progress)")
|
|
15
|
-
.option("--tag <tag>", "Filter by tag")
|
|
16
|
-
.option("--effort <effort>", "Filter by effort (small/medium/large)")
|
|
17
|
-
.option("--priority <priority>", "Sort priority (newest/oldest/effort)", "hierarchical")
|
|
14
|
+
.option("-s, --status <status>", "Filter by status (todo/in-progress)")
|
|
15
|
+
.option("-t, --tag <tag>", "Filter by tag")
|
|
16
|
+
.option("-e, --effort <effort>", "Filter by effort (small/medium/large)")
|
|
17
|
+
.option("-p, --priority <priority>", "Sort priority (newest/oldest/effort)", "hierarchical")
|
|
18
18
|
.action(async (options) => {
|
|
19
19
|
try {
|
|
20
20
|
// Default to todo status if not specified
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../../src/commands/tasks/plan/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../../src/commands/tasks/plan/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,cAAc,SAkDxB,CAAC"}
|
|
@@ -8,6 +8,7 @@ const commander_1 = require("commander");
|
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
9
|
const tasks_1 = require("../../../services/tasks");
|
|
10
10
|
const command_error_handler_1 = require("../../../utils/command-error-handler");
|
|
11
|
+
const task_o_matic_error_1 = require("../../../utils/task-o-matic-error");
|
|
11
12
|
exports.setPlanCommand = new commander_1.Command("set-plan")
|
|
12
13
|
.description("Set implementation plan for a task")
|
|
13
14
|
.requiredOption("--id <id>", "Task ID")
|
|
@@ -16,13 +17,20 @@ exports.setPlanCommand = new commander_1.Command("set-plan")
|
|
|
16
17
|
.action((0, command_error_handler_1.wrapCommandHandler)("Set plan", async (options) => {
|
|
17
18
|
const task = await tasks_1.taskService.getTask(options.id);
|
|
18
19
|
if (!task) {
|
|
19
|
-
throw
|
|
20
|
+
throw (0, task_o_matic_error_1.formatTaskNotFoundError)(options.id);
|
|
20
21
|
}
|
|
21
22
|
if (!options.plan && !options.planFile) {
|
|
22
|
-
throw
|
|
23
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.INVALID_INPUT, "Either --plan or --plan-file must be specified", {
|
|
24
|
+
suggestions: [
|
|
25
|
+
"Provide the plan directly using --plan '...' ",
|
|
26
|
+
"Provide a file containing the plan using --plan-file <path>",
|
|
27
|
+
],
|
|
28
|
+
});
|
|
23
29
|
}
|
|
24
30
|
if (options.plan && options.planFile) {
|
|
25
|
-
throw
|
|
31
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.INVALID_INPUT, "Cannot specify both --plan and --plan-file", {
|
|
32
|
+
suggestions: ["Provide either --plan or --plan-file, but not both."],
|
|
33
|
+
});
|
|
26
34
|
}
|
|
27
35
|
const result = await tasks_1.taskService.setTaskPlan(options.id, options.plan || undefined, options.planFile || undefined);
|
|
28
36
|
console.log(chalk_1.default.green(`✓ Plan set for task: ${task.title} (${options.id})`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,WAAW,SAgBpB,CAAC"}
|
|
@@ -5,6 +5,7 @@ const commander_1 = require("commander");
|
|
|
5
5
|
const tasks_1 = require("../../services/tasks");
|
|
6
6
|
const task_1 = require("../../cli/display/task");
|
|
7
7
|
const progress_1 = require("../../cli/display/progress");
|
|
8
|
+
const task_o_matic_error_1 = require("../../utils/task-o-matic-error");
|
|
8
9
|
exports.showCommand = new commander_1.Command("show")
|
|
9
10
|
.description("Show detailed information about a task")
|
|
10
11
|
.requiredOption("--id <id>", "Task ID")
|
|
@@ -12,7 +13,7 @@ exports.showCommand = new commander_1.Command("show")
|
|
|
12
13
|
try {
|
|
13
14
|
const task = await tasks_1.taskService.getTask(options.id);
|
|
14
15
|
if (!task) {
|
|
15
|
-
throw
|
|
16
|
+
throw (0, task_o_matic_error_1.formatTaskNotFoundError)(options.id);
|
|
16
17
|
}
|
|
17
18
|
await (0, task_1.displayTaskDetails)(task);
|
|
18
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SAyBtB,CAAC"}
|
|
@@ -5,15 +5,16 @@ const commander_1 = require("commander");
|
|
|
5
5
|
const tasks_1 = require("../../services/tasks");
|
|
6
6
|
const task_1 = require("../../cli/display/task");
|
|
7
7
|
const progress_1 = require("../../cli/display/progress");
|
|
8
|
+
const task_o_matic_error_1 = require("../../utils/task-o-matic-error");
|
|
8
9
|
exports.statusCommand = new commander_1.Command("status")
|
|
9
10
|
.description("Set task status")
|
|
10
|
-
.requiredOption("--id <id>", "Task ID")
|
|
11
|
-
.requiredOption("--status <status>", "New status (todo/in-progress/completed)")
|
|
11
|
+
.requiredOption("-i, --id <id>", "Task ID")
|
|
12
|
+
.requiredOption("-s, --status <status>", "New status (todo/in-progress/completed)")
|
|
12
13
|
.action(async (options) => {
|
|
13
14
|
try {
|
|
14
15
|
const task = await tasks_1.taskService.getTask(options.id);
|
|
15
16
|
if (!task) {
|
|
16
|
-
throw
|
|
17
|
+
throw (0, task_o_matic_error_1.formatTaskNotFoundError)(options.id);
|
|
17
18
|
}
|
|
18
19
|
const oldStatus = task.status;
|
|
19
20
|
const updatedTask = await tasks_1.taskService.setTaskStatus(options.id, options.status);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,aAAa,SAqCtB,CAAC"}
|
|
@@ -5,6 +5,7 @@ const commander_1 = require("commander");
|
|
|
5
5
|
const tasks_1 = require("../../services/tasks");
|
|
6
6
|
const task_1 = require("../../cli/display/task");
|
|
7
7
|
const progress_1 = require("../../cli/display/progress");
|
|
8
|
+
const task_o_matic_error_1 = require("../../utils/task-o-matic-error");
|
|
8
9
|
exports.updateCommand = new commander_1.Command("update")
|
|
9
10
|
.description("Update an existing task")
|
|
10
11
|
.requiredOption("--id <id>", "Task ID to update")
|
|
@@ -17,7 +18,12 @@ exports.updateCommand = new commander_1.Command("update")
|
|
|
17
18
|
try {
|
|
18
19
|
const { id, ...updates } = options;
|
|
19
20
|
if (Object.keys(updates).length === 0) {
|
|
20
|
-
throw
|
|
21
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.INVALID_INPUT, "At least one field must be specified for update", {
|
|
22
|
+
suggestions: [
|
|
23
|
+
"Specify a field to update, e.g., --title 'New Title'",
|
|
24
|
+
"Use --help for a list of available options",
|
|
25
|
+
],
|
|
26
|
+
});
|
|
21
27
|
}
|
|
22
28
|
const updatedTask = await tasks_1.taskService.updateTask(id, {
|
|
23
29
|
title: updates.title,
|
|
@@ -36,6 +36,6 @@ export declare class AIOperations extends BaseOperations {
|
|
|
36
36
|
library: string;
|
|
37
37
|
content: string;
|
|
38
38
|
}>, streamingOptions?: StreamingOptions, retryConfig?: Partial<RetryConfig>): Promise<string>;
|
|
39
|
-
planTask(taskContext: string, taskDetails: string, config?: Partial<AIConfig>, promptOverride?: string, userMessage?: string, streamingOptions?: StreamingOptions, retryConfig?: Partial<RetryConfig>): Promise<
|
|
39
|
+
planTask(taskContext: string, taskDetails: string, config?: Partial<AIConfig>, promptOverride?: string, userMessage?: string, streamingOptions?: StreamingOptions, retryConfig?: Partial<RetryConfig>): Promise<string>;
|
|
40
40
|
}
|
|
41
41
|
//# sourceMappingURL=ai-operations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-operations.d.ts","sourceRoot":"","sources":["../../../src/lib/ai-service/ai-operations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ai-operations.d.ts","sourceRoot":"","sources":["../../../src/lib/ai-service/ai-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,28 @@ export declare class BaseOperations {
|
|
|
8
8
|
protected context7Client: Context7Client;
|
|
9
9
|
protected retryHandler: RetryHandler;
|
|
10
10
|
protected modelProvider: ModelProvider;
|
|
11
|
+
/**
|
|
12
|
+
* Merges AI configuration with proper precedence.
|
|
13
|
+
*
|
|
14
|
+
* Configuration precedence (highest to lowest):
|
|
15
|
+
* 1. Method parameter `config` (operation-specific overrides)
|
|
16
|
+
* 2. ConfigManager global config (project-level settings)
|
|
17
|
+
* 3. Environment variables (OPENAI_API_KEY, etc.)
|
|
18
|
+
* 4. Provider defaults (defined in config.ts)
|
|
19
|
+
*
|
|
20
|
+
* @param config - Optional operation-specific config overrides
|
|
21
|
+
* @returns Merged AIConfig with all precedence levels applied
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Override just the model for this operation
|
|
26
|
+
* const finalConfig = this.mergeAIConfig({ model: "gpt-4o" });
|
|
27
|
+
*
|
|
28
|
+
* // Use default config (from ConfigManager + env vars)
|
|
29
|
+
* const finalConfig = this.mergeAIConfig();
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
protected mergeAIConfig(config?: Partial<AIConfig>): AIConfig;
|
|
11
33
|
streamText(prompt: string, config?: Partial<AIConfig>, systemPrompt?: string, userMessage?: string, streamingOptions?: StreamingOptions, retryConfig?: Partial<RetryConfig>): Promise<string>;
|
|
12
34
|
}
|
|
13
35
|
//# sourceMappingURL=base-operations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-operations.d.ts","sourceRoot":"","sources":["../../../src/lib/ai-service/base-operations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAa,cAAc;IACzB,SAAS,CAAC,UAAU,aAAoB;IACxC,SAAS,CAAC,cAAc,iBAAwB;IAChD,SAAS,CAAC,YAAY,eAAsB;IAC5C,SAAS,CAAC,aAAa,gBAAuB;
|
|
1
|
+
{"version":3,"file":"base-operations.d.ts","sourceRoot":"","sources":["../../../src/lib/ai-service/base-operations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAa,cAAc;IACzB,SAAS,CAAC,UAAU,aAAoB;IACxC,SAAS,CAAC,cAAc,iBAAwB;IAChD,SAAS,CAAC,YAAY,eAAsB;IAC5C,SAAS,CAAC,aAAa,gBAAuB;IAE9C;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ;IAQvD,UAAU,CACd,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC;CAgFnB"}
|