task-o-matic 0.0.1

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 (159) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +552 -0
  3. package/dist/cli/bin.d.ts +3 -0
  4. package/dist/cli/bin.d.ts.map +1 -0
  5. package/dist/cli/bin.js +8 -0
  6. package/dist/cli/display/common.d.ts +5 -0
  7. package/dist/cli/display/common.d.ts.map +1 -0
  8. package/dist/cli/display/common.js +44 -0
  9. package/dist/cli/display/plan.d.ts +11 -0
  10. package/dist/cli/display/plan.d.ts.map +1 -0
  11. package/dist/cli/display/plan.js +42 -0
  12. package/dist/cli/display/progress.d.ts +11 -0
  13. package/dist/cli/display/progress.d.ts.map +1 -0
  14. package/dist/cli/display/progress.js +47 -0
  15. package/dist/cli/display/task.d.ts +18 -0
  16. package/dist/cli/display/task.d.ts.map +1 -0
  17. package/dist/cli/display/task.js +250 -0
  18. package/dist/commands/config.d.ts +3 -0
  19. package/dist/commands/config.d.ts.map +1 -0
  20. package/dist/commands/config.js +61 -0
  21. package/dist/commands/init.d.ts +4 -0
  22. package/dist/commands/init.d.ts.map +1 -0
  23. package/dist/commands/init.js +197 -0
  24. package/dist/commands/prd.d.ts +4 -0
  25. package/dist/commands/prd.d.ts.map +1 -0
  26. package/dist/commands/prd.js +131 -0
  27. package/dist/commands/prompt.d.ts +3 -0
  28. package/dist/commands/prompt.d.ts.map +1 -0
  29. package/dist/commands/prompt.js +192 -0
  30. package/dist/commands/tasks.d.ts +3 -0
  31. package/dist/commands/tasks.d.ts.map +1 -0
  32. package/dist/commands/tasks.js +599 -0
  33. package/dist/index.d.ts +18 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +67 -0
  36. package/dist/lib/ai-service/ai-operations.d.ts +31 -0
  37. package/dist/lib/ai-service/ai-operations.d.ts.map +1 -0
  38. package/dist/lib/ai-service/ai-operations.js +648 -0
  39. package/dist/lib/ai-service/json-parser.d.ts +9 -0
  40. package/dist/lib/ai-service/json-parser.d.ts.map +1 -0
  41. package/dist/lib/ai-service/json-parser.js +37 -0
  42. package/dist/lib/ai-service/mcp-client.d.ts +9 -0
  43. package/dist/lib/ai-service/mcp-client.d.ts.map +1 -0
  44. package/dist/lib/ai-service/mcp-client.js +48 -0
  45. package/dist/lib/ai-service/model-provider.d.ts +8 -0
  46. package/dist/lib/ai-service/model-provider.d.ts.map +1 -0
  47. package/dist/lib/ai-service/model-provider.js +71 -0
  48. package/dist/lib/ai-service/research-tools.d.ts +4 -0
  49. package/dist/lib/ai-service/research-tools.d.ts.map +1 -0
  50. package/dist/lib/ai-service/research-tools.js +8 -0
  51. package/dist/lib/ai-service/retry-handler.d.ts +8 -0
  52. package/dist/lib/ai-service/retry-handler.d.ts.map +1 -0
  53. package/dist/lib/ai-service/retry-handler.js +62 -0
  54. package/dist/lib/better-t-stack-cli.d.ts +35 -0
  55. package/dist/lib/better-t-stack-cli.d.ts.map +1 -0
  56. package/dist/lib/better-t-stack-cli.js +118 -0
  57. package/dist/lib/config.d.ts +24 -0
  58. package/dist/lib/config.d.ts.map +1 -0
  59. package/dist/lib/config.js +160 -0
  60. package/dist/lib/context-builder.d.ts +53 -0
  61. package/dist/lib/context-builder.d.ts.map +1 -0
  62. package/dist/lib/context-builder.js +294 -0
  63. package/dist/lib/executors/executor-factory.d.ts +5 -0
  64. package/dist/lib/executors/executor-factory.d.ts.map +1 -0
  65. package/dist/lib/executors/executor-factory.js +21 -0
  66. package/dist/lib/executors/opencode-executor.d.ts +6 -0
  67. package/dist/lib/executors/opencode-executor.d.ts.map +1 -0
  68. package/dist/lib/executors/opencode-executor.js +46 -0
  69. package/dist/lib/index.d.ts +89 -0
  70. package/dist/lib/index.d.ts.map +1 -0
  71. package/dist/lib/index.js +134 -0
  72. package/dist/lib/prompt-builder.d.ts +50 -0
  73. package/dist/lib/prompt-builder.d.ts.map +1 -0
  74. package/dist/lib/prompt-builder.js +171 -0
  75. package/dist/lib/prompt-registry.d.ts +22 -0
  76. package/dist/lib/prompt-registry.d.ts.map +1 -0
  77. package/dist/lib/prompt-registry.js +201 -0
  78. package/dist/lib/storage.d.ts +60 -0
  79. package/dist/lib/storage.d.ts.map +1 -0
  80. package/dist/lib/storage.js +768 -0
  81. package/dist/lib/task-execution.d.ts +3 -0
  82. package/dist/lib/task-execution.d.ts.map +1 -0
  83. package/dist/lib/task-execution.js +130 -0
  84. package/dist/lib/validation.d.ts +4 -0
  85. package/dist/lib/validation.d.ts.map +1 -0
  86. package/dist/lib/validation.js +52 -0
  87. package/dist/mcp/prompts.d.ts +3 -0
  88. package/dist/mcp/prompts.d.ts.map +1 -0
  89. package/dist/mcp/prompts.js +7 -0
  90. package/dist/mcp/resources.d.ts +3 -0
  91. package/dist/mcp/resources.d.ts.map +1 -0
  92. package/dist/mcp/resources.js +7 -0
  93. package/dist/mcp/server.d.ts +3 -0
  94. package/dist/mcp/server.d.ts.map +1 -0
  95. package/dist/mcp/server.js +25 -0
  96. package/dist/mcp/tools.d.ts +3 -0
  97. package/dist/mcp/tools.d.ts.map +1 -0
  98. package/dist/mcp/tools.js +99 -0
  99. package/dist/prompts/documentation-detection.d.ts +2 -0
  100. package/dist/prompts/documentation-detection.d.ts.map +1 -0
  101. package/dist/prompts/documentation-detection.js +24 -0
  102. package/dist/prompts/index.d.ts +7 -0
  103. package/dist/prompts/index.d.ts.map +1 -0
  104. package/dist/prompts/index.js +22 -0
  105. package/dist/prompts/prd-parsing.d.ts +3 -0
  106. package/dist/prompts/prd-parsing.d.ts.map +1 -0
  107. package/dist/prompts/prd-parsing.js +172 -0
  108. package/dist/prompts/prd-rework.d.ts +3 -0
  109. package/dist/prompts/prd-rework.d.ts.map +1 -0
  110. package/dist/prompts/prd-rework.js +81 -0
  111. package/dist/prompts/task-breakdown.d.ts +3 -0
  112. package/dist/prompts/task-breakdown.d.ts.map +1 -0
  113. package/dist/prompts/task-breakdown.js +151 -0
  114. package/dist/prompts/task-enhancement.d.ts +3 -0
  115. package/dist/prompts/task-enhancement.d.ts.map +1 -0
  116. package/dist/prompts/task-enhancement.js +140 -0
  117. package/dist/prompts/task-planning.d.ts +3 -0
  118. package/dist/prompts/task-planning.d.ts.map +1 -0
  119. package/dist/prompts/task-planning.js +66 -0
  120. package/dist/services/prd.d.ts +32 -0
  121. package/dist/services/prd.d.ts.map +1 -0
  122. package/dist/services/prd.js +191 -0
  123. package/dist/services/tasks.d.ts +67 -0
  124. package/dist/services/tasks.d.ts.map +1 -0
  125. package/dist/services/tasks.js +596 -0
  126. package/dist/test/commands.test.d.ts +2 -0
  127. package/dist/test/commands.test.d.ts.map +1 -0
  128. package/dist/test/commands.test.js +74 -0
  129. package/dist/test/storage.test.d.ts +2 -0
  130. package/dist/test/storage.test.d.ts.map +1 -0
  131. package/dist/test/storage.test.js +207 -0
  132. package/dist/types/callbacks.d.ts +27 -0
  133. package/dist/types/callbacks.d.ts.map +1 -0
  134. package/dist/types/callbacks.js +2 -0
  135. package/dist/types/index.d.ts +252 -0
  136. package/dist/types/index.d.ts.map +1 -0
  137. package/dist/types/index.js +2 -0
  138. package/dist/types/mcp.d.ts +3 -0
  139. package/dist/types/mcp.d.ts.map +1 -0
  140. package/dist/types/mcp.js +3 -0
  141. package/dist/types/options.d.ts +94 -0
  142. package/dist/types/options.d.ts.map +1 -0
  143. package/dist/types/options.js +2 -0
  144. package/dist/types/results.d.ts +90 -0
  145. package/dist/types/results.d.ts.map +1 -0
  146. package/dist/types/results.js +2 -0
  147. package/dist/utils/ai-config-builder.d.ts +14 -0
  148. package/dist/utils/ai-config-builder.d.ts.map +1 -0
  149. package/dist/utils/ai-config-builder.js +22 -0
  150. package/dist/utils/ai-service-factory.d.ts +10 -0
  151. package/dist/utils/ai-service-factory.d.ts.map +1 -0
  152. package/dist/utils/ai-service-factory.js +52 -0
  153. package/dist/utils/stack-formatter.d.ts +11 -0
  154. package/dist/utils/stack-formatter.d.ts.map +1 -0
  155. package/dist/utils/stack-formatter.js +30 -0
  156. package/dist/utils/streaming-options.d.ts +10 -0
  157. package/dist/utils/streaming-options.d.ts.map +1 -0
  158. package/dist/utils/streaming-options.js +53 -0
  159. package/package.json +82 -0
@@ -0,0 +1,50 @@
1
+ import { PromptMetadata } from "./prompt-registry";
2
+ export interface PromptBuilderOptions {
3
+ name: string;
4
+ type?: "system" | "user";
5
+ variables: Record<string, string>;
6
+ prdContent?: string;
7
+ taskTitle?: string;
8
+ taskDescription?: string;
9
+ stackInfo?: string;
10
+ contextInfo?: string;
11
+ userFeedback?: string;
12
+ }
13
+ export interface PromptBuilderResult {
14
+ success: boolean;
15
+ prompt?: string;
16
+ metadata?: PromptMetadata;
17
+ error?: string;
18
+ missingVariables?: string[];
19
+ }
20
+ export declare class PromptBuilder {
21
+ /**
22
+ * Build a prompt with variable replacement
23
+ */
24
+ static buildPrompt(options: PromptBuilderOptions): PromptBuilderResult;
25
+ /**
26
+ * List all available prompts
27
+ */
28
+ static listPrompts(): string;
29
+ /**
30
+ * Get metadata for a specific prompt
31
+ */
32
+ static getPromptMetadata(name: string, type?: "system" | "user"): PromptMetadata | null;
33
+ /**
34
+ * Load PRD content from file
35
+ */
36
+ static loadPRDContent(filePath: string): string;
37
+ /**
38
+ * Auto-detect and load PRD content from project
39
+ */
40
+ static autoDetectPRDContent(): Promise<string | undefined>;
41
+ /**
42
+ * Build task context from file or content using ContextBuilder
43
+ */
44
+ static buildTaskContext(taskTitle: string, content?: string, filePath?: string): Promise<string>;
45
+ /**
46
+ * Detect stack info using ContextBuilder (proper BTS config loading)
47
+ */
48
+ static detectStackInfo(projectPath?: string): Promise<string>;
49
+ }
50
+ //# sourceMappingURL=prompt-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKnE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB;IAyEtE;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM;IAI5B;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GACvB,cAAc,GAAG,IAAI;IAKxB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAO/C;;OAEG;WACU,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAiBhE;;OAEG;WACU,gBAAgB,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAmClB;;OAEG;WACU,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAsCpE"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PromptBuilder = void 0;
4
+ const prompt_registry_1 = require("./prompt-registry");
5
+ const fs_1 = require("fs");
6
+ const config_1 = require("./config");
7
+ const context_builder_1 = require("./context-builder");
8
+ class PromptBuilder {
9
+ /**
10
+ * Build a prompt with variable replacement
11
+ */
12
+ static buildPrompt(options) {
13
+ const { name, type = "user", variables, ...directVars } = options;
14
+ // Get the prompt name with type suffix if specified
15
+ const promptName = type === "system" ? `${name}-system` : name;
16
+ // Get prompt metadata from registry
17
+ const metadata = prompt_registry_1.PromptRegistry.getPrompt(promptName);
18
+ if (!metadata) {
19
+ return {
20
+ success: false,
21
+ error: `Prompt not found: ${promptName}. Available prompts:\n${prompt_registry_1.PromptRegistry.listPrompts()}`,
22
+ };
23
+ }
24
+ // Combine all variables (direct variables + variables object)
25
+ const allVariables = { ...variables, ...directVars };
26
+ // Validate required variables
27
+ const validation = prompt_registry_1.PromptRegistry.validatePrompt(promptName, allVariables);
28
+ if (!validation.valid) {
29
+ return {
30
+ success: false,
31
+ error: `Missing required variables: ${validation.missingRequired.join(", ")}`,
32
+ missingVariables: validation.missingRequired,
33
+ };
34
+ }
35
+ // Log missing optional variables for user awareness
36
+ if (validation.missingOptional.length > 0) {
37
+ console.warn(`Note: Missing optional variables: ${validation.missingOptional.join(", ")}`);
38
+ }
39
+ try {
40
+ // Replace variables in the prompt text
41
+ let promptText = metadata.promptText;
42
+ // Replace all {VAR_NAME} patterns with their values
43
+ for (const [key, value] of Object.entries(allVariables)) {
44
+ const pattern = new RegExp(`\\{${key}\\}`, "g");
45
+ promptText = promptText.replace(pattern, value || "");
46
+ }
47
+ // Check for any unreplaced variables (optional ones that weren't provided)
48
+ const unreplacedVars = promptText.match(/\{[^}]+\}/g);
49
+ if (unreplacedVars && unreplacedVars.length > 0) {
50
+ const varNames = unreplacedVars.map((v) => v.slice(1, -1));
51
+ const optionalUnreplaced = varNames.filter((v) => metadata.optionalVariables.includes(v));
52
+ if (optionalUnreplaced.length > 0) {
53
+ console.warn(`Note: Optional variables not replaced: ${optionalUnreplaced.join(", ")}`);
54
+ }
55
+ }
56
+ return {
57
+ success: true,
58
+ prompt: promptText,
59
+ metadata,
60
+ };
61
+ }
62
+ catch (error) {
63
+ return {
64
+ success: false,
65
+ error: `Error building prompt: ${error instanceof Error ? error.message : "Unknown error"}`,
66
+ };
67
+ }
68
+ }
69
+ /**
70
+ * List all available prompts
71
+ */
72
+ static listPrompts() {
73
+ return prompt_registry_1.PromptRegistry.listPrompts();
74
+ }
75
+ /**
76
+ * Get metadata for a specific prompt
77
+ */
78
+ static getPromptMetadata(name, type) {
79
+ const promptName = type === "system" ? `${name}-system` : name;
80
+ return prompt_registry_1.PromptRegistry.getPrompt(promptName) || null;
81
+ }
82
+ /**
83
+ * Load PRD content from file
84
+ */
85
+ static loadPRDContent(filePath) {
86
+ if (!(0, fs_1.existsSync)(filePath)) {
87
+ throw new Error(`PRD file not found: ${filePath}`);
88
+ }
89
+ return (0, fs_1.readFileSync)(filePath, "utf-8");
90
+ }
91
+ /**
92
+ * Auto-detect and load PRD content from project
93
+ */
94
+ static async autoDetectPRDContent() {
95
+ try {
96
+ const contextBuilder = new context_builder_1.ContextBuilder();
97
+ // Build context for a dummy task to get PRD content
98
+ const context = await contextBuilder.buildContextForNewTask("Dummy Task", "For PRD detection");
99
+ return context.prdContent;
100
+ }
101
+ catch (error) {
102
+ console.warn("Could not auto-detect PRD content:", error);
103
+ return undefined;
104
+ }
105
+ }
106
+ /**
107
+ * Build task context from file or content using ContextBuilder
108
+ */
109
+ static async buildTaskContext(taskTitle, content, filePath) {
110
+ let taskDescription = "";
111
+ if (filePath) {
112
+ if (!(0, fs_1.existsSync)(filePath)) {
113
+ throw new Error(`Task file not found: ${filePath}`);
114
+ }
115
+ taskDescription = (0, fs_1.readFileSync)(filePath, "utf-8");
116
+ }
117
+ else if (content) {
118
+ taskDescription = content;
119
+ }
120
+ // Use ContextBuilder to get rich context if we have a title
121
+ if (taskTitle) {
122
+ try {
123
+ const contextBuilder = new context_builder_1.ContextBuilder();
124
+ const context = await contextBuilder.buildContextForNewTask(taskTitle, taskDescription);
125
+ // Return formatted context instead of just description
126
+ return contextBuilder.formatContextForAI(context);
127
+ }
128
+ catch (error) {
129
+ console.warn("Could not build rich task context, using basic description:", error);
130
+ return taskDescription;
131
+ }
132
+ }
133
+ return taskDescription;
134
+ }
135
+ /**
136
+ * Detect stack info using ContextBuilder (proper BTS config loading)
137
+ */
138
+ static async detectStackInfo(projectPath) {
139
+ try {
140
+ // Default to current working directory if not provided
141
+ const workDir = projectPath || process.cwd();
142
+ config_1.configManager.setWorkingDirectory(workDir);
143
+ const contextBuilder = new context_builder_1.ContextBuilder();
144
+ // Build context for a dummy task to get stack info
145
+ const context = await contextBuilder.buildContextForNewTask("Dummy Task", "For stack detection");
146
+ if (context.stack && context.stack._source === "file") {
147
+ const parts = [
148
+ `Frontend: ${context.stack.frontend}`,
149
+ `Backend: ${context.stack.backend}`,
150
+ ];
151
+ if (context.stack.database !== "none") {
152
+ parts.push(`Database: ${context.stack.database}`);
153
+ }
154
+ if (context.stack.orm !== "none") {
155
+ parts.push(`ORM: ${context.stack.orm}`);
156
+ }
157
+ parts.push(`Auth: ${context.stack.auth}`);
158
+ if (context.stack.addons.length > 0) {
159
+ parts.push(`Addons: ${context.stack.addons.join(", ")}`);
160
+ }
161
+ return parts.join(", ");
162
+ }
163
+ return "Not detected";
164
+ }
165
+ catch (error) {
166
+ console.warn("Could not detect stack info using ContextBuilder:", error);
167
+ return "Not detected";
168
+ }
169
+ }
170
+ }
171
+ exports.PromptBuilder = PromptBuilder;
@@ -0,0 +1,22 @@
1
+ export interface PromptMetadata {
2
+ name: string;
3
+ description: string;
4
+ type: "system" | "user";
5
+ requiredVariables: string[];
6
+ optionalVariables: string[];
7
+ promptText: string;
8
+ }
9
+ export declare class PromptRegistry {
10
+ private static prompts;
11
+ static getPrompt(name: string): PromptMetadata | undefined;
12
+ static getAllPrompts(): PromptMetadata[];
13
+ static getPromptsByType(type: "system" | "user"): PromptMetadata[];
14
+ static hasPrompt(name: string): boolean;
15
+ static listPrompts(): string;
16
+ static validatePrompt(name: string, variables: Record<string, string>): {
17
+ valid: boolean;
18
+ missingRequired: string[];
19
+ missingOptional: string[];
20
+ };
21
+ }
22
+ //# sourceMappingURL=prompt-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-registry.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-registry.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,OAAO,CAuInB;IAEH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI1D,MAAM,CAAC,aAAa,IAAI,cAAc,EAAE;IAIxC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,cAAc,EAAE;IAMlE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIvC,MAAM,CAAC,WAAW,IAAI,MAAM;IAyC5B,MAAM,CAAC,cAAc,CACnB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC;QACD,KAAK,EAAE,OAAO,CAAC;QACf,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B;CAuBF"}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PromptRegistry = void 0;
4
+ const prompts_1 = require("../prompts");
5
+ class PromptRegistry {
6
+ static prompts = new Map([
7
+ // PRD Parsing Prompts
8
+ [
9
+ "prd-parsing",
10
+ {
11
+ name: "prd-parsing",
12
+ description: "Parse PRD into structured tasks with dependency analysis",
13
+ type: "user",
14
+ requiredVariables: ["PRD_CONTENT"],
15
+ optionalVariables: ["STACK_INFO"],
16
+ promptText: prompts_1.PRD_PARSING_PROMPT,
17
+ },
18
+ ],
19
+ [
20
+ "prd-parsing-system",
21
+ {
22
+ name: "prd-parsing-system",
23
+ description: "System prompt for PRD parsing with task breakdown rules",
24
+ type: "system",
25
+ requiredVariables: [],
26
+ optionalVariables: [],
27
+ promptText: prompts_1.PRD_PARSING_SYSTEM_PROMPT,
28
+ },
29
+ ],
30
+ // Task Enhancement Prompts
31
+ [
32
+ "task-enhancement",
33
+ {
34
+ name: "task-enhancement",
35
+ description: "Enhance task description with Context7 documentation",
36
+ type: "user",
37
+ requiredVariables: ["TASK_TITLE"],
38
+ optionalVariables: ["TASK_DESCRIPTION", "CONTEXT_INFO", "PRD_CONTENT"],
39
+ promptText: prompts_1.TASK_ENHANCEMENT_PROMPT,
40
+ },
41
+ ],
42
+ [
43
+ "task-enhancement-system",
44
+ {
45
+ name: "task-enhancement-system",
46
+ description: "System prompt for task enhancement with documentation integration",
47
+ type: "system",
48
+ requiredVariables: [],
49
+ optionalVariables: [],
50
+ promptText: prompts_1.TASK_ENHANCEMENT_SYSTEM_PROMPT,
51
+ },
52
+ ],
53
+ // Task Breakdown Prompts
54
+ [
55
+ "task-breakdown",
56
+ {
57
+ name: "task-breakdown",
58
+ description: "Break down complex tasks into smaller subtasks",
59
+ type: "user",
60
+ requiredVariables: ["TASK_TITLE"],
61
+ optionalVariables: ["TASK_DESCRIPTION"],
62
+ promptText: prompts_1.TASK_BREAKDOWN_PROMPT,
63
+ },
64
+ ],
65
+ [
66
+ "task-breakdown-system",
67
+ {
68
+ name: "task-breakdown-system",
69
+ description: "System prompt for task breakdown methodology",
70
+ type: "system",
71
+ requiredVariables: [],
72
+ optionalVariables: [],
73
+ promptText: prompts_1.TASK_BREAKDOWN_SYSTEM_PROMPT,
74
+ },
75
+ ],
76
+ // PRD Rework Prompts
77
+ [
78
+ "prd-rework",
79
+ {
80
+ name: "prd-rework",
81
+ description: "Improve PRD based on user feedback",
82
+ type: "user",
83
+ requiredVariables: ["PRD_CONTENT", "USER_FEEDBACK"],
84
+ optionalVariables: ["STACK_INFO"],
85
+ promptText: prompts_1.PRD_REWORK_PROMPT,
86
+ },
87
+ ],
88
+ [
89
+ "prd-rework-system",
90
+ {
91
+ name: "prd-rework-system",
92
+ description: "System prompt for PRD improvement and enhancement",
93
+ type: "system",
94
+ requiredVariables: [],
95
+ optionalVariables: [],
96
+ promptText: prompts_1.PRD_REWORK_SYSTEM_PROMPT,
97
+ },
98
+ ],
99
+ // Documentation Detection Prompts
100
+ [
101
+ "documentation-detection",
102
+ {
103
+ name: "documentation-detection",
104
+ description: "Analyze task and identify required documentation libraries",
105
+ type: "user",
106
+ requiredVariables: ["TASK_TITLE"],
107
+ optionalVariables: ["TASK_DESCRIPTION", "STACK_INFO"],
108
+ promptText: prompts_1.DOCUMENTATION_DETECTION_PROMPT,
109
+ },
110
+ ],
111
+ // Task Planning Prompts
112
+ [
113
+ "task-planning",
114
+ {
115
+ name: "task-planning",
116
+ description: "Create detailed implementation plan for task or subtask",
117
+ type: "user",
118
+ requiredVariables: ["TASK_CONTEXT", "TASK_DETAILS"],
119
+ optionalVariables: [],
120
+ promptText: prompts_1.TASK_PLANNING_PROMPT,
121
+ },
122
+ ],
123
+ [
124
+ "task-planning-system",
125
+ {
126
+ name: "task-planning-system",
127
+ description: "System prompt for detailed task implementation planning",
128
+ type: "system",
129
+ requiredVariables: [],
130
+ optionalVariables: [],
131
+ promptText: prompts_1.TASK_PLANNING_SYSTEM_PROMPT,
132
+ },
133
+ ],
134
+ ]);
135
+ static getPrompt(name) {
136
+ return this.prompts.get(name);
137
+ }
138
+ static getAllPrompts() {
139
+ return Array.from(this.prompts.values());
140
+ }
141
+ static getPromptsByType(type) {
142
+ return Array.from(this.prompts.values()).filter((prompt) => prompt.type === type);
143
+ }
144
+ static hasPrompt(name) {
145
+ return this.prompts.has(name);
146
+ }
147
+ static listPrompts() {
148
+ const prompts = this.getAllPrompts();
149
+ let output = "Available prompts:\n\n";
150
+ // Group by type
151
+ const systemPrompts = prompts.filter((p) => p.type === "system");
152
+ const userPrompts = prompts.filter((p) => p.type === "user");
153
+ if (systemPrompts.length > 0) {
154
+ output += "System Prompts:\n";
155
+ systemPrompts.forEach((prompt) => {
156
+ output += ` ${prompt.name}\n`;
157
+ output += ` ${prompt.description}\n`;
158
+ if (prompt.requiredVariables.length > 0) {
159
+ output += ` Required variables: ${prompt.requiredVariables.join(", ")}\n`;
160
+ }
161
+ if (prompt.optionalVariables.length > 0) {
162
+ output += ` Optional variables: ${prompt.optionalVariables.join(", ")}\n`;
163
+ }
164
+ output += "\n";
165
+ });
166
+ }
167
+ if (userPrompts.length > 0) {
168
+ output += "User Prompts:\n";
169
+ userPrompts.forEach((prompt) => {
170
+ output += ` ${prompt.name}\n`;
171
+ output += ` ${prompt.description}\n`;
172
+ if (prompt.requiredVariables.length > 0) {
173
+ output += ` Required variables: ${prompt.requiredVariables.join(", ")}\n`;
174
+ }
175
+ if (prompt.optionalVariables.length > 0) {
176
+ output += ` Optional variables: ${prompt.optionalVariables.join(", ")}\n`;
177
+ }
178
+ output += "\n";
179
+ });
180
+ }
181
+ return output;
182
+ }
183
+ static validatePrompt(name, variables) {
184
+ const prompt = this.getPrompt(name);
185
+ if (!prompt) {
186
+ return {
187
+ valid: false,
188
+ missingRequired: [],
189
+ missingOptional: [],
190
+ };
191
+ }
192
+ const missingRequired = prompt.requiredVariables.filter((variable) => !variables[variable]);
193
+ const missingOptional = prompt.optionalVariables.filter((variable) => !variables[variable]);
194
+ return {
195
+ valid: missingRequired.length === 0,
196
+ missingRequired,
197
+ missingOptional,
198
+ };
199
+ }
200
+ }
201
+ exports.PromptRegistry = PromptRegistry;
@@ -0,0 +1,60 @@
1
+ import { Task, CreateTaskRequest, TaskAIMetadata } from "../types";
2
+ export declare class LocalStorage {
3
+ private taskOMatic;
4
+ private tasksFile;
5
+ private initialized;
6
+ constructor();
7
+ sanitizeForFilename(name: string): string;
8
+ private validateTaskId;
9
+ private validateTaskRequest;
10
+ private ensureInitialized;
11
+ private ensureDirectories;
12
+ private loadTasksData;
13
+ private saveTasksData;
14
+ private findTaskInHierarchy;
15
+ private flattenTasks;
16
+ getTasks(): Promise<Task[]>;
17
+ getTopLevelTasks(): Promise<Task[]>;
18
+ getTask(id: string): Promise<Task | null>;
19
+ createTask(task: CreateTaskRequest, aiMetadata?: TaskAIMetadata): Promise<Task>;
20
+ updateTask(id: string, updates: Partial<Task>): Promise<Task | null>;
21
+ deleteTask(id: string): Promise<boolean>;
22
+ getSubtasks(parentId: string): Promise<Task[]>;
23
+ private taskExists;
24
+ private wouldCreateCircularDependency;
25
+ private getAIMetadataFile;
26
+ private loadAIMetadata;
27
+ private saveAIMetadata;
28
+ getTaskAIMetadata(taskId: string): Promise<TaskAIMetadata | null>;
29
+ saveTaskAIMetadata(metadata: TaskAIMetadata): Promise<void>;
30
+ deleteTaskAIMetadata(taskId: string): Promise<void>;
31
+ saveTaskContent(taskId: string, content: string): Promise<string>;
32
+ saveEnhancedTaskContent(taskId: string, content: string): Promise<string>;
33
+ getTaskContent(taskId: string): Promise<string | null>;
34
+ deleteTaskContent(taskId: string): Promise<void>;
35
+ saveContext7Documentation(library: string, query: string, content: string): Promise<string>;
36
+ getDocumentationFile(fileName: string): Promise<string | null>;
37
+ listDocumentationFiles(): Promise<string[]>;
38
+ migrateTaskContent(): Promise<number>;
39
+ cleanupOrphanedContent(): Promise<number>;
40
+ validateStorageIntegrity(): Promise<{
41
+ isValid: boolean;
42
+ issues: string[];
43
+ }>;
44
+ savePlan(taskId: string, plan: string): Promise<void>;
45
+ getPlan(taskId: string): Promise<{
46
+ plan: string;
47
+ createdAt: number;
48
+ updatedAt: number;
49
+ } | null>;
50
+ listPlans(): Promise<Array<{
51
+ taskId: string;
52
+ plan: string;
53
+ createdAt: number;
54
+ updatedAt: number;
55
+ }>>;
56
+ deletePlan(taskId: string): Promise<boolean>;
57
+ saveTaskDocumentation(taskId: string, documentation: string): Promise<string>;
58
+ getTaskDocumentation(taskId: string): Promise<string | null>;
59
+ }
60
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"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"}