task-o-matic 0.0.13 → 0.0.14

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 (59) hide show
  1. package/dist/commands/init.js +41 -8
  2. package/dist/commands/tasks/document/add.js +3 -3
  3. package/dist/commands/tasks/list.js +2 -2
  4. package/dist/commands/tasks/next.js +4 -4
  5. package/dist/commands/tasks/status.js +2 -2
  6. package/dist/lib/ai-service/ai-operations.d.ts +1 -1
  7. package/dist/lib/ai-service/ai-operations.d.ts.map +1 -1
  8. package/dist/lib/ai-service/base-operations.d.ts +22 -0
  9. package/dist/lib/ai-service/base-operations.d.ts.map +1 -1
  10. package/dist/lib/ai-service/base-operations.js +29 -1
  11. package/dist/lib/ai-service/task-operations.d.ts +1 -1
  12. package/dist/lib/ai-service/task-operations.d.ts.map +1 -1
  13. package/dist/lib/better-t-stack-cli.d.ts +36 -21
  14. package/dist/lib/better-t-stack-cli.d.ts.map +1 -1
  15. package/dist/lib/better-t-stack-cli.js +212 -33
  16. package/dist/lib/bootstrap/cli-bootstrap.d.ts +14 -0
  17. package/dist/lib/bootstrap/cli-bootstrap.d.ts.map +1 -0
  18. package/dist/lib/bootstrap/cli-bootstrap.js +325 -0
  19. package/dist/lib/bootstrap/index.d.ts +4 -0
  20. package/dist/lib/bootstrap/index.d.ts.map +1 -0
  21. package/dist/lib/bootstrap/index.js +19 -0
  22. package/dist/lib/bootstrap/medusa-bootstrap.d.ts +14 -0
  23. package/dist/lib/bootstrap/medusa-bootstrap.d.ts.map +1 -0
  24. package/dist/lib/bootstrap/medusa-bootstrap.js +218 -0
  25. package/dist/lib/bootstrap/opentui-bootstrap.d.ts +11 -0
  26. package/dist/lib/bootstrap/opentui-bootstrap.d.ts.map +1 -0
  27. package/dist/lib/bootstrap/opentui-bootstrap.js +342 -0
  28. package/dist/lib/config.d.ts +14 -0
  29. package/dist/lib/config.d.ts.map +1 -1
  30. package/dist/lib/config.js +18 -0
  31. package/dist/services/prd.d.ts.map +1 -1
  32. package/dist/services/prd.js +18 -45
  33. package/dist/services/tasks.d.ts +2 -2
  34. package/dist/services/tasks.d.ts.map +1 -1
  35. package/dist/services/tasks.js +55 -85
  36. package/dist/types/index.d.ts +36 -1
  37. package/dist/types/index.d.ts.map +1 -1
  38. package/dist/types/results.d.ts +60 -6
  39. package/dist/types/results.d.ts.map +1 -1
  40. package/dist/utils/error-utils.d.ts +70 -0
  41. package/dist/utils/error-utils.d.ts.map +1 -0
  42. package/dist/utils/error-utils.js +103 -0
  43. package/dist/utils/file-utils.d.ts +49 -0
  44. package/dist/utils/file-utils.d.ts.map +1 -0
  45. package/dist/utils/file-utils.js +77 -0
  46. package/dist/utils/id-generator.d.ts +92 -0
  47. package/dist/utils/id-generator.d.ts.map +1 -0
  48. package/dist/utils/id-generator.js +140 -0
  49. package/dist/utils/stack-formatter.d.ts +2 -1
  50. package/dist/utils/stack-formatter.d.ts.map +1 -1
  51. package/dist/utils/stack-formatter.js +8 -2
  52. package/dist/utils/storage-utils.d.ts +49 -0
  53. package/dist/utils/storage-utils.d.ts.map +1 -0
  54. package/dist/utils/storage-utils.js +79 -0
  55. package/dist/utils/streaming-utils.d.ts +38 -0
  56. package/dist/utils/streaming-utils.d.ts.map +1 -0
  57. package/dist/utils/streaming-utils.js +56 -0
  58. package/docs/agents/cli.md +58 -149
  59. package/package.json +1 -1
@@ -0,0 +1,342 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.bootstrapOpenTuiProject = bootstrapOpenTuiProject;
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const child_process_1 = require("child_process");
11
+ const util_1 = require("util");
12
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
13
+ async function bootstrapOpenTuiProject(options) {
14
+ try {
15
+ console.log(chalk_1.default.blue(`\nšŸš€ Bootstrapping OpenTUI project: ${options.projectName}`));
16
+ // Warn if not using Bun
17
+ if (options.packageManager !== "bun") {
18
+ console.log(chalk_1.default.yellow(` āš ļø OpenTUI works best with Bun. Consider using --package-manager bun`));
19
+ }
20
+ // Create project directory
21
+ if (!(0, fs_1.existsSync)(options.projectPath)) {
22
+ (0, fs_1.mkdirSync)(options.projectPath, { recursive: true });
23
+ console.log(chalk_1.default.green(` āœ“ Created project directory`));
24
+ }
25
+ // Create directory structure
26
+ const dirs = ["src", "src/components"];
27
+ dirs.forEach(dir => {
28
+ const fullPath = (0, path_1.join)(options.projectPath, dir);
29
+ (0, fs_1.mkdirSync)(fullPath, { recursive: true });
30
+ });
31
+ console.log(chalk_1.default.green(` āœ“ Created directory structure`));
32
+ // Generate files
33
+ (0, fs_1.writeFileSync)((0, path_1.join)(options.projectPath, "package.json"), generatePackageJson(options));
34
+ console.log(chalk_1.default.green(` āœ“ Created package.json`));
35
+ (0, fs_1.writeFileSync)((0, path_1.join)(options.projectPath, "tsconfig.json"), generateTsConfig());
36
+ console.log(chalk_1.default.green(` āœ“ Created tsconfig.json`));
37
+ (0, fs_1.writeFileSync)((0, path_1.join)(options.projectPath, "build.ts"), generateBuildScriptTemplate(options.framework));
38
+ console.log(chalk_1.default.green(` āœ“ Created build.ts`));
39
+ // Generate framework-specific files
40
+ const extension = options.framework === "vue" ? "vue" : "tsx";
41
+ const indexContent = getFrameworkIndexTemplate(options.framework);
42
+ const appContent = getFrameworkAppTemplate(options.framework);
43
+ (0, fs_1.writeFileSync)((0, path_1.join)(options.projectPath, "src/index.ts"), indexContent);
44
+ console.log(chalk_1.default.green(` āœ“ Created src/index.ts`));
45
+ (0, fs_1.writeFileSync)((0, path_1.join)(options.projectPath, `src/App.${extension}`), appContent);
46
+ console.log(chalk_1.default.green(` āœ“ Created src/App.${extension}`));
47
+ (0, fs_1.writeFileSync)((0, path_1.join)(options.projectPath, "README.md"), generateReadmeTemplate(options));
48
+ console.log(chalk_1.default.green(` āœ“ Created README.md`));
49
+ (0, fs_1.writeFileSync)((0, path_1.join)(options.projectPath, ".gitignore"), generateGitignoreTemplate());
50
+ console.log(chalk_1.default.green(` āœ“ Created .gitignore`));
51
+ // Install dependencies
52
+ console.log(chalk_1.default.cyan(`\n šŸ“¦ Installing dependencies with ${options.packageManager}...`));
53
+ const installCmd = options.packageManager === "npm" ? "npm install" :
54
+ options.packageManager === "pnpm" ? "pnpm install" :
55
+ "bun install";
56
+ await execAsync(installCmd, { cwd: options.projectPath });
57
+ console.log(chalk_1.default.green(` āœ“ Dependencies installed`));
58
+ return {
59
+ success: true,
60
+ message: `OpenTUI project "${options.projectName}" created successfully!`
61
+ };
62
+ }
63
+ catch (error) {
64
+ const message = error instanceof Error ? error.message : String(error);
65
+ return {
66
+ success: false,
67
+ message: `Failed to bootstrap OpenTUI project: ${message}`
68
+ };
69
+ }
70
+ }
71
+ function generatePackageJson(options) {
72
+ const frameworkDeps = getFrameworkDependencies(options.framework);
73
+ const frameworkDevDeps = getFrameworkDevDependencies(options.framework);
74
+ const pkg = {
75
+ name: options.projectName,
76
+ version: "0.1.0",
77
+ type: "module",
78
+ scripts: {
79
+ build: "bun run build.ts",
80
+ dev: "bun run --watch src/index.ts",
81
+ start: "bun run dist/index.js"
82
+ },
83
+ dependencies: {
84
+ "@opentui/core": "latest",
85
+ ...frameworkDeps
86
+ },
87
+ devDependencies: {
88
+ typescript: "latest",
89
+ "@types/node": "latest",
90
+ ...frameworkDevDeps
91
+ }
92
+ };
93
+ return JSON.stringify(pkg, null, 2);
94
+ }
95
+ function getFrameworkDependencies(framework) {
96
+ const deps = {
97
+ solid: {
98
+ "@opentui/solid": "latest",
99
+ "solid-js": "latest"
100
+ },
101
+ vue: {
102
+ "@opentui/vue": "latest",
103
+ vue: "latest"
104
+ },
105
+ react: {
106
+ "@opentui/react": "latest",
107
+ react: "latest"
108
+ }
109
+ };
110
+ return deps[framework];
111
+ }
112
+ function getFrameworkDevDependencies(framework) {
113
+ const devDeps = {
114
+ solid: {
115
+ "bun-plugin-solid": "latest"
116
+ },
117
+ vue: {
118
+ "bun-plugin-vue3": "latest"
119
+ },
120
+ react: {}
121
+ };
122
+ return devDeps[framework];
123
+ }
124
+ function generateTsConfig() {
125
+ const config = {
126
+ compilerOptions: {
127
+ target: "ES2022",
128
+ module: "ESNext",
129
+ moduleResolution: "bundler",
130
+ strict: true,
131
+ esModuleInterop: true,
132
+ skipLibCheck: true,
133
+ jsx: "preserve",
134
+ jsxImportSource: "solid-js",
135
+ types: ["bun-types"]
136
+ },
137
+ include: ["src/**/*", "build.ts"],
138
+ exclude: ["node_modules", "dist"]
139
+ };
140
+ return JSON.stringify(config, null, 2);
141
+ }
142
+ function generateBuildScriptTemplate(framework) {
143
+ const plugins = {
144
+ solid: `import { pluginSolid } from "bun-plugin-solid";`,
145
+ vue: `import { pluginVue3 } from "bun-plugin-vue3";`,
146
+ react: ``
147
+ };
148
+ const pluginArray = {
149
+ solid: `plugins: [pluginSolid()]`,
150
+ vue: `plugins: [pluginVue3()]`,
151
+ react: `plugins: []`
152
+ };
153
+ return `${plugins[framework] ? plugins[framework] + "\n\n" : ""}const result = await Bun.build({
154
+ entrypoints: ["./src/index.ts"],
155
+ outdir: "./dist",
156
+ target: "bun",
157
+ ${pluginArray[framework]},
158
+ });
159
+
160
+ if (!result.success) {
161
+ console.error("Build failed");
162
+ for (const message of result.logs) {
163
+ console.error(message);
164
+ }
165
+ process.exit(1);
166
+ }
167
+
168
+ console.log("Build successful!");
169
+ `;
170
+ }
171
+ function getFrameworkIndexTemplate(framework) {
172
+ const templates = {
173
+ solid: `import { createCliRenderer } from "@opentui/core";
174
+ import { createRoot } from "@opentui/solid";
175
+ import { App } from "./App";
176
+
177
+ const renderer = await createCliRenderer({
178
+ exitOnCtrlC: true,
179
+ targetFps: 60,
180
+ });
181
+
182
+ renderer.start();
183
+ createRoot(renderer).render(() => <App />);
184
+ `,
185
+ vue: `import { createCliRenderer } from "@opentui/core";
186
+ import { createRoot } from "@opentui/vue";
187
+ import App from "./App.vue";
188
+
189
+ const renderer = await createCliRenderer({
190
+ exitOnCtrlC: true,
191
+ targetFps: 60,
192
+ });
193
+
194
+ renderer.start();
195
+ createRoot(renderer).render(App);
196
+ `,
197
+ react: `import { createCliRenderer } from "@opentui/core";
198
+ import { createRoot } from "@opentui/react";
199
+ import { App } from "./App";
200
+
201
+ const renderer = await createCliRenderer({
202
+ exitOnCtrlC: true,
203
+ targetFps: 60,
204
+ });
205
+
206
+ renderer.start();
207
+ createRoot(renderer).render(<App />);
208
+ `
209
+ };
210
+ return templates[framework];
211
+ }
212
+ function getFrameworkAppTemplate(framework) {
213
+ const templates = {
214
+ solid: `import { TextRenderable } from "@opentui/core";
215
+
216
+ export function App() {
217
+ return (
218
+ <TextRenderable
219
+ content="Hello from OpenTUI with Solid!"
220
+ fg="#00FF00"
221
+ position="absolute"
222
+ left={10}
223
+ top={5}
224
+ />
225
+ );
226
+ }
227
+ `,
228
+ vue: `<script setup lang="ts">
229
+ </script>
230
+
231
+ <template>
232
+ <textRenderable
233
+ content="Hello from OpenTUI with Vue!"
234
+ :style="{ fg: '#00FF00', position: 'absolute', left: 10, top: 5 }"
235
+ />
236
+ </template>
237
+ `,
238
+ react: `import { TextRenderable } from "@opentui/core";
239
+
240
+ export function App() {
241
+ return (
242
+ <TextRenderable
243
+ content="Hello from OpenTUI with React!"
244
+ fg="#00FF00"
245
+ position="absolute"
246
+ left={10}
247
+ top={5}
248
+ />
249
+ );
250
+ }
251
+ `
252
+ };
253
+ return templates[framework];
254
+ }
255
+ function generateReadmeTemplate(options) {
256
+ return `# ${options.projectName}
257
+
258
+ Terminal User Interface (TUI) application built with OpenTUI and ${options.framework === "solid" ? "Solid.js" : options.framework === "vue" ? "Vue.js" : "React"}
259
+
260
+ Generated by task-o-matic
261
+
262
+ ## Installation
263
+
264
+ \`\`\`bash
265
+ ${options.packageManager} install
266
+ \`\`\`
267
+
268
+ ## Development
269
+
270
+ \`\`\`bash
271
+ # Run in development mode with watch
272
+ ${options.packageManager} run dev
273
+
274
+ # Build the project
275
+ ${options.packageManager} run build
276
+
277
+ # Run the built TUI app
278
+ ${options.packageManager} start
279
+ \`\`\`
280
+
281
+ ## Project Structure
282
+
283
+ - \`src/index.ts\` - Application entry point
284
+ - \`src/App.${options.framework === "vue" ? "vue" : "tsx"}\` - Main TUI component
285
+ - \`src/components/\` - Reusable TUI components
286
+ - \`build.ts\` - Bun build configuration
287
+
288
+ ## Technologies
289
+
290
+ - **OpenTUI** - Terminal UI framework
291
+ - **${options.framework === "solid" ? "Solid.js" : options.framework === "vue" ? "Vue.js" : "React"}** - Component framework
292
+ - **TypeScript** - Type-safe development
293
+ - **Bun** - Fast JavaScript runtime and bundler
294
+
295
+ ## Controls
296
+
297
+ - \`Ctrl+C\` - Exit the application
298
+
299
+ ---
300
+
301
+ Generated with [task-o-matic](https://github.com/anthropics/task-o-matic)
302
+ `;
303
+ }
304
+ function generateGitignoreTemplate() {
305
+ return `# Dependencies
306
+ node_modules/
307
+ .pnp
308
+ .pnp.js
309
+
310
+ # Testing
311
+ coverage/
312
+
313
+ # Production
314
+ dist/
315
+ build/
316
+
317
+ # Misc
318
+ .DS_Store
319
+ .env
320
+ .env.local
321
+ .env.development.local
322
+ .env.test.local
323
+ .env.production.local
324
+
325
+ # Logs
326
+ npm-debug.log*
327
+ yarn-debug.log*
328
+ yarn-error.log*
329
+ lerna-debug.log*
330
+ bun-debug.log*
331
+
332
+ # IDEs
333
+ .idea/
334
+ .vscode/
335
+ *.swp
336
+ *.swo
337
+ *~
338
+
339
+ # TypeScript
340
+ *.tsbuildinfo
341
+ `;
342
+ }
@@ -28,4 +28,18 @@ export declare class ConfigManager {
28
28
  getConfigFilePath(): string;
29
29
  }
30
30
  export declare const configManager: ConfigManager;
31
+ /**
32
+ * Helper function to set working directory and reload config.
33
+ * Combines the common pattern of setWorkingDirectory + load.
34
+ *
35
+ * @param dir - Working directory path
36
+ * @param manager - ConfigManager instance (defaults to singleton)
37
+ * @returns Loaded config
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * await setupWorkingDirectory("/path/to/project");
42
+ * ```
43
+ */
44
+ export declare function setupWorkingDirectory(dir: string, manager?: ConfigManager): Promise<Config>;
31
45
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAA6C,MAAM,UAAU,CAAC;AAI/E,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,QAAQ,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC7C;AA4CD,wBAAgB,4BAA4B,CAC1C,UAAU,GAAE,MAAc,GACzB,eAAe,CA+BjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,SAAS,CAAkB;gBAEvB,SAAS,CAAC,EAAE,eAAe,EAAE,gBAAgB,CAAC,EAAE,MAAM;IAiBlE,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQtC,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAK9C,mBAAmB,IAAI,MAAM;IAI7B,gBAAgB,IAAI,MAAM;IAI1B,OAAO,CAAC,aAAa;IAoBf,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAsCvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,SAAS,IAAI,MAAM;IAanB,WAAW,IAAI,QAAQ;IAIjB,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,iBAAiB,IAAI,MAAM;CAG5B;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAA6C,MAAM,UAAU,CAAC;AAI/E,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,QAAQ,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC7C;AA4CD,wBAAgB,4BAA4B,CAC1C,UAAU,GAAE,MAAc,GACzB,eAAe,CA+BjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,SAAS,CAAkB;gBAEvB,SAAS,CAAC,EAAE,eAAe,EAAE,gBAAgB,CAAC,EAAE,MAAM;IAiBlE,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQtC,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAK9C,mBAAmB,IAAI,MAAM;IAI7B,gBAAgB,IAAI,MAAM;IAI1B,OAAO,CAAC,aAAa;IAoBf,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAsCvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,SAAS,IAAI,MAAM;IAanB,WAAW,IAAI,QAAQ;IAIjB,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,iBAAiB,IAAI,MAAM;CAG5B;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC;AAEjD;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,aAA6B,GACrC,OAAO,CAAC,MAAM,CAAC,CAGjB"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.configManager = exports.ConfigManager = void 0;
4
4
  exports.createDefaultConfigCallbacks = createDefaultConfigCallbacks;
5
+ exports.setupWorkingDirectory = setupWorkingDirectory;
5
6
  const path_1 = require("path");
6
7
  const process_1 = require("process");
7
8
  const fs_1 = require("fs");
@@ -200,3 +201,20 @@ class ConfigManager {
200
201
  }
201
202
  exports.ConfigManager = ConfigManager;
202
203
  exports.configManager = new ConfigManager();
204
+ /**
205
+ * Helper function to set working directory and reload config.
206
+ * Combines the common pattern of setWorkingDirectory + load.
207
+ *
208
+ * @param dir - Working directory path
209
+ * @param manager - ConfigManager instance (defaults to singleton)
210
+ * @returns Loaded config
211
+ *
212
+ * @example
213
+ * ```typescript
214
+ * await setupWorkingDirectory("/path/to/project");
215
+ * ```
216
+ */
217
+ async function setupWorkingDirectory(dir, manager = exports.configManager) {
218
+ manager.setWorkingDirectory(dir);
219
+ return await manager.load();
220
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"prd.d.ts","sourceRoot":"","sources":["../../src/services/prd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prd.d.ts","sourceRoot":"","sources":["../../src/services/prd.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,8 @@ const ai_service_factory_1 = require("../utils/ai-service-factory");
40
40
  const ai_config_builder_1 = require("../utils/ai-config-builder");
41
41
  const config_1 = require("../lib/config");
42
42
  const validation_1 = require("../lib/validation");
43
+ const streaming_utils_1 = require("../utils/streaming-utils");
44
+ const file_utils_1 = require("../utils/file-utils");
43
45
  /**
44
46
  * PRDService - Business logic for PRD operations
45
47
  * Handles PRD parsing, task extraction, and PRD improvement
@@ -52,20 +54,16 @@ class PRDService {
52
54
  type: "started",
53
55
  message: "Starting PRD parsing...",
54
56
  });
55
- // Validate file exists
56
- if (!(0, fs_1.existsSync)(input.file)) {
57
- throw new Error(`PRD file not found: ${input.file}`);
58
- }
57
+ // Validate file exists (DRY fix 1.2)
58
+ (0, file_utils_1.validateFileExists)(input.file, `PRD file not found: ${input.file}`);
59
59
  // Ensure we're in a task-o-matic project
60
60
  const taskOMaticDir = config_1.configManager.getTaskOMaticDir();
61
61
  if (!(0, fs_1.existsSync)(taskOMaticDir)) {
62
62
  throw new Error(`Not a task-o-matic project. Run 'task-o-matic init init' first.`);
63
63
  }
64
- // Set working directory from CLI layer (defaults to process.cwd() for backward compatibility)
64
+ // Set working directory and reload config (DRY fix 1.4)
65
65
  const workingDir = input.workingDirectory || process.cwd();
66
- config_1.configManager.setWorkingDirectory(workingDir);
67
- // Reload config after changing working directory
68
- await config_1.configManager.load();
66
+ await (0, config_1.setupWorkingDirectory)(workingDir);
69
67
  input.callbacks?.onProgress?.({
70
68
  type: "progress",
71
69
  message: "Reading PRD file...",
@@ -104,34 +102,13 @@ class PRDService {
104
102
  message: "Parsing PRD with AI...",
105
103
  });
106
104
  const stepStart2 = Date.now();
107
- // Capture metrics
108
- let tokenUsage;
109
- let timeToFirstToken;
110
- // Wrap streaming options to capture metrics
111
- const metricsStreamingOptions = {
112
- ...input.streamingOptions,
113
- onFinish: async (result) => {
114
- if (result.usage) {
115
- tokenUsage = {
116
- prompt: result.usage.inputTokens || result.usage.promptTokens || 0,
117
- completion: result.usage.outputTokens || result.usage.completionTokens || 0,
118
- total: result.usage.totalTokens || 0,
119
- };
120
- }
121
- // Call original onFinish if provided
122
- await input.streamingOptions?.onFinish?.(result);
123
- },
124
- onChunk: (chunk) => {
125
- if (chunk && !timeToFirstToken) {
126
- timeToFirstToken = Date.now() - stepStart2;
127
- }
128
- // Call original onChunk if provided
129
- input.streamingOptions?.onChunk?.(chunk);
130
- },
131
- };
105
+ // Use utility to wrap streaming options and capture metrics (DRY fix 1.1)
106
+ const { options: metricsStreamingOptions, getMetrics } = (0, streaming_utils_1.createMetricsStreamingOptions)(input.streamingOptions, stepStart2);
132
107
  const result = await (0, ai_service_factory_1.getAIOperations)().parsePRD(prdContent, aiConfig, input.promptOverride, input.messageOverride, metricsStreamingOptions, undefined, // retryConfig
133
108
  workingDir, // Pass working directory to AI operations
134
109
  input.enableFilesystemTools);
110
+ // Extract metrics after AI call
111
+ const { tokenUsage, timeToFirstToken } = getMetrics();
135
112
  steps.push({
136
113
  step: "AI Parsing",
137
114
  status: "completed",
@@ -220,12 +197,11 @@ class PRDService {
220
197
  type: "started",
221
198
  message: "Generating clarifying questions...",
222
199
  });
223
- if (!(0, fs_1.existsSync)(input.file)) {
224
- throw new Error(`PRD file not found: ${input.file}`);
225
- }
200
+ // Validate file exists (DRY fix 1.2)
201
+ (0, file_utils_1.validateFileExists)(input.file, `PRD file not found: ${input.file}`);
202
+ // Set working directory and reload config (DRY fix 1.4)
226
203
  const workingDir = input.workingDirectory || process.cwd();
227
- config_1.configManager.setWorkingDirectory(workingDir);
228
- await config_1.configManager.load();
204
+ await (0, config_1.setupWorkingDirectory)(workingDir);
229
205
  input.callbacks?.onProgress?.({
230
206
  type: "progress",
231
207
  message: "Reading PRD file...",
@@ -252,14 +228,11 @@ class PRDService {
252
228
  type: "started",
253
229
  message: "Starting PRD improvement...",
254
230
  });
255
- // Validate file exists
256
- if (!(0, fs_1.existsSync)(input.file)) {
257
- throw new Error(`PRD file not found: ${input.file}`);
258
- }
259
- // Set working directory from CLI layer (defaults to process.cwd() for backward compatibility)
231
+ // Validate file exists (DRY fix 1.2)
232
+ (0, file_utils_1.validateFileExists)(input.file, `PRD file not found: ${input.file}`);
233
+ // Set working directory and reload config (DRY fix 1.4)
260
234
  const workingDir = input.workingDirectory || process.cwd();
261
- config_1.configManager.setWorkingDirectory(workingDir);
262
- await config_1.configManager.load();
235
+ await (0, config_1.setupWorkingDirectory)(workingDir);
263
236
  input.callbacks?.onProgress?.({
264
237
  type: "progress",
265
238
  message: "Reading PRD file...",
@@ -1,5 +1,5 @@
1
1
  import { AIOptions } from "../utils/ai-config-builder";
2
- import { Task, StreamingOptions } from "../types";
2
+ import { Task, StreamingOptions, TaskAIMetadata } from "../types";
3
3
  import { CreateTaskResult, EnhanceTaskResult, SplitTaskResult, PlanTaskResult, DocumentTaskResult, DeleteTaskResult } from "../types/results";
4
4
  /**
5
5
  * TaskService - Centralized business logic for all task operations
@@ -21,7 +21,7 @@ export declare class TaskService {
21
21
  }): Promise<Task[]>;
22
22
  getTask(id: string): Promise<Task | null>;
23
23
  getTaskContent(id: string): Promise<string | null>;
24
- getTaskAIMetadata(id: string): Promise<any | null>;
24
+ getTaskAIMetadata(id: string): Promise<TaskAIMetadata | null>;
25
25
  getSubtasks(id: string): Promise<Task[]>;
26
26
  updateTask(id: string, updates: {
27
27
  title?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/services/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/services/tasks.ts"],"names":[],"mappings":"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"}