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.
Files changed (144) hide show
  1. package/dist/cli/display/progress.d.ts +15 -2
  2. package/dist/cli/display/progress.d.ts.map +1 -1
  3. package/dist/cli/display/progress.js +72 -4
  4. package/dist/commands/benchmark.d.ts.map +1 -1
  5. package/dist/commands/benchmark.js +11 -3
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +60 -12
  8. package/dist/commands/prd.js +7 -1
  9. package/dist/commands/tasks/delete.d.ts.map +1 -1
  10. package/dist/commands/tasks/delete.js +2 -1
  11. package/dist/commands/tasks/document/add.d.ts.map +1 -1
  12. package/dist/commands/tasks/document/add.js +5 -4
  13. package/dist/commands/tasks/document/get.d.ts.map +1 -1
  14. package/dist/commands/tasks/document/get.js +2 -1
  15. package/dist/commands/tasks/list.js +2 -2
  16. package/dist/commands/tasks/next.js +4 -4
  17. package/dist/commands/tasks/plan/set.d.ts.map +1 -1
  18. package/dist/commands/tasks/plan/set.js +11 -3
  19. package/dist/commands/tasks/show.d.ts.map +1 -1
  20. package/dist/commands/tasks/show.js +2 -1
  21. package/dist/commands/tasks/status.d.ts.map +1 -1
  22. package/dist/commands/tasks/status.js +4 -3
  23. package/dist/commands/tasks/update.d.ts.map +1 -1
  24. package/dist/commands/tasks/update.js +7 -1
  25. package/dist/lib/ai-service/ai-operations.d.ts +1 -1
  26. package/dist/lib/ai-service/ai-operations.d.ts.map +1 -1
  27. package/dist/lib/ai-service/base-operations.d.ts +22 -0
  28. package/dist/lib/ai-service/base-operations.d.ts.map +1 -1
  29. package/dist/lib/ai-service/base-operations.js +29 -1
  30. package/dist/lib/ai-service/model-provider.d.ts.map +1 -1
  31. package/dist/lib/ai-service/model-provider.js +37 -6
  32. package/dist/lib/ai-service/task-operations.d.ts +2 -1
  33. package/dist/lib/ai-service/task-operations.d.ts.map +1 -1
  34. package/dist/lib/ai-service/task-operations.js +135 -173
  35. package/dist/lib/benchmark/registry.d.ts.map +1 -1
  36. package/dist/lib/benchmark/registry.js +6 -10
  37. package/dist/lib/better-t-stack-cli.d.ts +36 -21
  38. package/dist/lib/better-t-stack-cli.d.ts.map +1 -1
  39. package/dist/lib/better-t-stack-cli.js +212 -33
  40. package/dist/lib/bootstrap/cli-bootstrap.d.ts +14 -0
  41. package/dist/lib/bootstrap/cli-bootstrap.d.ts.map +1 -0
  42. package/dist/lib/bootstrap/cli-bootstrap.js +325 -0
  43. package/dist/lib/bootstrap/index.d.ts +4 -0
  44. package/dist/lib/bootstrap/index.d.ts.map +1 -0
  45. package/dist/lib/bootstrap/index.js +19 -0
  46. package/dist/lib/bootstrap/medusa-bootstrap.d.ts +14 -0
  47. package/dist/lib/bootstrap/medusa-bootstrap.d.ts.map +1 -0
  48. package/dist/lib/bootstrap/medusa-bootstrap.js +218 -0
  49. package/dist/lib/bootstrap/opentui-bootstrap.d.ts +11 -0
  50. package/dist/lib/bootstrap/opentui-bootstrap.d.ts.map +1 -0
  51. package/dist/lib/bootstrap/opentui-bootstrap.js +342 -0
  52. package/dist/lib/config-validation.d.ts +215 -0
  53. package/dist/lib/config-validation.d.ts.map +1 -0
  54. package/dist/lib/config-validation.js +246 -0
  55. package/dist/lib/config.d.ts +14 -0
  56. package/dist/lib/config.d.ts.map +1 -1
  57. package/dist/lib/config.js +37 -5
  58. package/dist/lib/storage/file-system.d.ts.map +1 -1
  59. package/dist/lib/storage/file-system.js +81 -21
  60. package/dist/lib/task-execution-core.d.ts.map +1 -1
  61. package/dist/lib/task-execution-core.js +3 -2
  62. package/dist/services/prd.d.ts +17 -0
  63. package/dist/services/prd.d.ts.map +1 -1
  64. package/dist/services/prd.js +67 -60
  65. package/dist/services/tasks.d.ts +317 -3
  66. package/dist/services/tasks.d.ts.map +1 -1
  67. package/dist/services/tasks.js +531 -185
  68. package/dist/services/workflow-ai-assistant.d.ts.map +1 -1
  69. package/dist/services/workflow-ai-assistant.js +19 -6
  70. package/dist/test/lib/ai-service/task-operations.test.d.ts +2 -0
  71. package/dist/test/lib/ai-service/task-operations.test.d.ts.map +1 -0
  72. package/dist/test/lib/ai-service/task-operations.test.js +362 -0
  73. package/dist/test/mocks/mock-ai-operations.d.ts +15 -0
  74. package/dist/test/mocks/mock-ai-operations.d.ts.map +1 -0
  75. package/dist/test/mocks/mock-ai-operations.js +107 -0
  76. package/dist/test/mocks/mock-context-builder.d.ts +10 -0
  77. package/dist/test/mocks/mock-context-builder.d.ts.map +1 -0
  78. package/dist/test/mocks/mock-context-builder.js +81 -0
  79. package/dist/test/mocks/mock-model-provider.d.ts +7 -0
  80. package/dist/test/mocks/mock-model-provider.d.ts.map +1 -0
  81. package/dist/test/mocks/mock-model-provider.js +21 -0
  82. package/dist/test/mocks/mock-service-factory.d.ts +11 -0
  83. package/dist/test/mocks/mock-service-factory.d.ts.map +1 -0
  84. package/dist/test/mocks/mock-service-factory.js +61 -0
  85. package/dist/test/mocks/mock-storage.d.ts +50 -0
  86. package/dist/test/mocks/mock-storage.d.ts.map +1 -0
  87. package/dist/test/mocks/mock-storage.js +145 -0
  88. package/dist/test/services/task-service.test.d.ts +2 -0
  89. package/dist/test/services/task-service.test.d.ts.map +1 -0
  90. package/dist/test/services/task-service.test.js +352 -0
  91. package/dist/test/test-mock-setup.d.ts +26 -0
  92. package/dist/test/test-mock-setup.d.ts.map +1 -0
  93. package/dist/test/test-mock-setup.js +41 -0
  94. package/dist/test/test-setup.d.ts +9 -0
  95. package/dist/test/test-setup.d.ts.map +1 -0
  96. package/dist/test/test-setup.js +44 -0
  97. package/dist/test/test-utils.d.ts +22 -0
  98. package/dist/test/test-utils.d.ts.map +1 -0
  99. package/dist/test/test-utils.js +37 -0
  100. package/dist/test/utils/ai-operation-utility.test.d.ts +2 -0
  101. package/dist/test/utils/ai-operation-utility.test.d.ts.map +1 -0
  102. package/dist/test/utils/ai-operation-utility.test.js +290 -0
  103. package/dist/test/utils/error-handling.test.d.ts +2 -0
  104. package/dist/test/utils/error-handling.test.d.ts.map +1 -0
  105. package/dist/test/utils/error-handling.test.js +231 -0
  106. package/dist/types/index.d.ts +36 -1
  107. package/dist/types/index.d.ts.map +1 -1
  108. package/dist/types/results.d.ts +60 -6
  109. package/dist/types/results.d.ts.map +1 -1
  110. package/dist/utils/ai-operation-utility.d.ts +142 -0
  111. package/dist/utils/ai-operation-utility.d.ts.map +1 -0
  112. package/dist/utils/ai-operation-utility.js +288 -0
  113. package/dist/utils/ai-service-factory.d.ts +10 -0
  114. package/dist/utils/ai-service-factory.d.ts.map +1 -1
  115. package/dist/utils/ai-service-factory.js +19 -1
  116. package/dist/utils/cli-validators.d.ts +2 -2
  117. package/dist/utils/cli-validators.d.ts.map +1 -1
  118. package/dist/utils/cli-validators.js +7 -6
  119. package/dist/utils/error-utils.d.ts +70 -0
  120. package/dist/utils/error-utils.d.ts.map +1 -0
  121. package/dist/utils/error-utils.js +104 -0
  122. package/dist/utils/file-utils.d.ts +49 -0
  123. package/dist/utils/file-utils.d.ts.map +1 -0
  124. package/dist/utils/file-utils.js +82 -0
  125. package/dist/utils/id-generator.d.ts +92 -0
  126. package/dist/utils/id-generator.d.ts.map +1 -0
  127. package/dist/utils/id-generator.js +146 -0
  128. package/dist/utils/model-executor-parser.d.ts +1 -1
  129. package/dist/utils/model-executor-parser.d.ts.map +1 -1
  130. package/dist/utils/model-executor-parser.js +3 -2
  131. package/dist/utils/stack-formatter.d.ts +2 -1
  132. package/dist/utils/stack-formatter.d.ts.map +1 -1
  133. package/dist/utils/stack-formatter.js +8 -2
  134. package/dist/utils/storage-utils.d.ts +49 -0
  135. package/dist/utils/storage-utils.d.ts.map +1 -0
  136. package/dist/utils/storage-utils.js +80 -0
  137. package/dist/utils/streaming-utils.d.ts +38 -0
  138. package/dist/utils/streaming-utils.d.ts.map +1 -0
  139. package/dist/utils/streaming-utils.js +56 -0
  140. package/dist/utils/task-o-matic-error.d.ts +206 -0
  141. package/dist/utils/task-o-matic-error.d.ts.map +1 -0
  142. package/dist/utils/task-o-matic-error.js +304 -0
  143. package/docs/agents/cli.md +58 -149
  144. 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): void;
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;AAE3D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAuC1D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI,CAGzD"}
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 message = error instanceof Error ? error.message : "Unknown error";
49
- console.error(chalk_1.default.red("❌ Error:"), message);
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;AAapC,eAAO,MAAM,gBAAgB,SAE5B,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 new Error(`Invalid model format: ${modelStr}. Expected provider:model[:reasoning=<tokens>]`);
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
- console.error(chalk_1.default.red("Benchmark failed:"), error.message);
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
- console.error(chalk_1.default.red("Workflow benchmark failed:"), error.message);
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;AAOpC,eAAO,MAAM,WAAW,SAEvB,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"}
@@ -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 Better-T-Stack");
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 <frontend>", "Frontend framework for bootstrap", "next")
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 new Error(result.message);
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
- console.error(chalk_1.default.red("Bootstrap failed:"), error);
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 using Better-T-Stack")
150
+ .description("Bootstrap a new project (web/native/cli/tui)")
140
151
  .argument("<name>", "Project name")
141
- .option("--frontend <frontend>", "Frontend framework (next/tanstack-router/react-router/etc)", "next")
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 new Error(result.message);
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
- // No chdir needed anymore
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(" task-o-matic init init --project-name my-app --ai-provider openrouter --ai-key your-key --frontend next --backend hono");
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 <frontend> Frontend framework (next/tanstack-router/react-router/etc)");
215
- console.log(" --backend <backend> Backend framework (hono/express/elysia)");
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 Include authentication");
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
  });
@@ -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 new Error(`Invalid model format: ${modelStr}. Expected provider:model`);
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;AAMpC,eAAO,MAAM,aAAa,SAmCtB,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 new Error(`Task with ID ${options.id} not found`);
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;AAMpC,eAAO,MAAM,uBAAuB,SAyC/B,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 new Error(`Task with ID ${options.id} not found`);
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;AAMpC,eAAO,MAAM,uBAAuB,SA2B/B,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 new Error(`Task with ID ${options.id} not found`);
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;AAMpC,eAAO,MAAM,cAAc,SAiCtB,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 new Error(`Task with ID ${options.id} not found`);
20
+ throw (0, task_o_matic_error_1.formatTaskNotFoundError)(options.id);
20
21
  }
21
22
  if (!options.plan && !options.planFile) {
22
- throw new Error("Either --plan or --plan-file must be specified");
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 new Error("Cannot specify both --plan and --plan-file");
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;AAKpC,eAAO,MAAM,WAAW,SAgBpB,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 new Error(`Task with ID ${options.id} not found`);
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;AAKpC,eAAO,MAAM,aAAa,SAyBtB,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 new Error(`Task with ID ${options.id} not found`);
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;AAKpC,eAAO,MAAM,aAAa,SA4BtB,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 new Error("At least one field must be specified for update");
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<any>;
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;IAExC,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;CA+EnB"}
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"}