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.
- package/LICENSE +21 -0
- package/README.md +552 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +8 -0
- package/dist/cli/display/common.d.ts +5 -0
- package/dist/cli/display/common.d.ts.map +1 -0
- package/dist/cli/display/common.js +44 -0
- package/dist/cli/display/plan.d.ts +11 -0
- package/dist/cli/display/plan.d.ts.map +1 -0
- package/dist/cli/display/plan.js +42 -0
- package/dist/cli/display/progress.d.ts +11 -0
- package/dist/cli/display/progress.d.ts.map +1 -0
- package/dist/cli/display/progress.js +47 -0
- package/dist/cli/display/task.d.ts +18 -0
- package/dist/cli/display/task.d.ts.map +1 -0
- package/dist/cli/display/task.js +250 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +61 -0
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +197 -0
- package/dist/commands/prd.d.ts +4 -0
- package/dist/commands/prd.d.ts.map +1 -0
- package/dist/commands/prd.js +131 -0
- package/dist/commands/prompt.d.ts +3 -0
- package/dist/commands/prompt.d.ts.map +1 -0
- package/dist/commands/prompt.js +192 -0
- package/dist/commands/tasks.d.ts +3 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +599 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/lib/ai-service/ai-operations.d.ts +31 -0
- package/dist/lib/ai-service/ai-operations.d.ts.map +1 -0
- package/dist/lib/ai-service/ai-operations.js +648 -0
- package/dist/lib/ai-service/json-parser.d.ts +9 -0
- package/dist/lib/ai-service/json-parser.d.ts.map +1 -0
- package/dist/lib/ai-service/json-parser.js +37 -0
- package/dist/lib/ai-service/mcp-client.d.ts +9 -0
- package/dist/lib/ai-service/mcp-client.d.ts.map +1 -0
- package/dist/lib/ai-service/mcp-client.js +48 -0
- package/dist/lib/ai-service/model-provider.d.ts +8 -0
- package/dist/lib/ai-service/model-provider.d.ts.map +1 -0
- package/dist/lib/ai-service/model-provider.js +71 -0
- package/dist/lib/ai-service/research-tools.d.ts +4 -0
- package/dist/lib/ai-service/research-tools.d.ts.map +1 -0
- package/dist/lib/ai-service/research-tools.js +8 -0
- package/dist/lib/ai-service/retry-handler.d.ts +8 -0
- package/dist/lib/ai-service/retry-handler.d.ts.map +1 -0
- package/dist/lib/ai-service/retry-handler.js +62 -0
- package/dist/lib/better-t-stack-cli.d.ts +35 -0
- package/dist/lib/better-t-stack-cli.d.ts.map +1 -0
- package/dist/lib/better-t-stack-cli.js +118 -0
- package/dist/lib/config.d.ts +24 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +160 -0
- package/dist/lib/context-builder.d.ts +53 -0
- package/dist/lib/context-builder.d.ts.map +1 -0
- package/dist/lib/context-builder.js +294 -0
- package/dist/lib/executors/executor-factory.d.ts +5 -0
- package/dist/lib/executors/executor-factory.d.ts.map +1 -0
- package/dist/lib/executors/executor-factory.js +21 -0
- package/dist/lib/executors/opencode-executor.d.ts +6 -0
- package/dist/lib/executors/opencode-executor.d.ts.map +1 -0
- package/dist/lib/executors/opencode-executor.js +46 -0
- package/dist/lib/index.d.ts +89 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +134 -0
- package/dist/lib/prompt-builder.d.ts +50 -0
- package/dist/lib/prompt-builder.d.ts.map +1 -0
- package/dist/lib/prompt-builder.js +171 -0
- package/dist/lib/prompt-registry.d.ts +22 -0
- package/dist/lib/prompt-registry.d.ts.map +1 -0
- package/dist/lib/prompt-registry.js +201 -0
- package/dist/lib/storage.d.ts +60 -0
- package/dist/lib/storage.d.ts.map +1 -0
- package/dist/lib/storage.js +768 -0
- package/dist/lib/task-execution.d.ts +3 -0
- package/dist/lib/task-execution.d.ts.map +1 -0
- package/dist/lib/task-execution.js +130 -0
- package/dist/lib/validation.d.ts +4 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +52 -0
- package/dist/mcp/prompts.d.ts +3 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +7 -0
- package/dist/mcp/resources.d.ts +3 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +7 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +25 -0
- package/dist/mcp/tools.d.ts +3 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +99 -0
- package/dist/prompts/documentation-detection.d.ts +2 -0
- package/dist/prompts/documentation-detection.d.ts.map +1 -0
- package/dist/prompts/documentation-detection.js +24 -0
- package/dist/prompts/index.d.ts +7 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +22 -0
- package/dist/prompts/prd-parsing.d.ts +3 -0
- package/dist/prompts/prd-parsing.d.ts.map +1 -0
- package/dist/prompts/prd-parsing.js +172 -0
- package/dist/prompts/prd-rework.d.ts +3 -0
- package/dist/prompts/prd-rework.d.ts.map +1 -0
- package/dist/prompts/prd-rework.js +81 -0
- package/dist/prompts/task-breakdown.d.ts +3 -0
- package/dist/prompts/task-breakdown.d.ts.map +1 -0
- package/dist/prompts/task-breakdown.js +151 -0
- package/dist/prompts/task-enhancement.d.ts +3 -0
- package/dist/prompts/task-enhancement.d.ts.map +1 -0
- package/dist/prompts/task-enhancement.js +140 -0
- package/dist/prompts/task-planning.d.ts +3 -0
- package/dist/prompts/task-planning.d.ts.map +1 -0
- package/dist/prompts/task-planning.js +66 -0
- package/dist/services/prd.d.ts +32 -0
- package/dist/services/prd.d.ts.map +1 -0
- package/dist/services/prd.js +191 -0
- package/dist/services/tasks.d.ts +67 -0
- package/dist/services/tasks.d.ts.map +1 -0
- package/dist/services/tasks.js +596 -0
- package/dist/test/commands.test.d.ts +2 -0
- package/dist/test/commands.test.d.ts.map +1 -0
- package/dist/test/commands.test.js +74 -0
- package/dist/test/storage.test.d.ts +2 -0
- package/dist/test/storage.test.d.ts.map +1 -0
- package/dist/test/storage.test.js +207 -0
- package/dist/types/callbacks.d.ts +27 -0
- package/dist/types/callbacks.d.ts.map +1 -0
- package/dist/types/callbacks.js +2 -0
- package/dist/types/index.d.ts +252 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/mcp.d.ts +3 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +3 -0
- package/dist/types/options.d.ts +94 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +2 -0
- package/dist/types/results.d.ts +90 -0
- package/dist/types/results.d.ts.map +1 -0
- package/dist/types/results.js +2 -0
- package/dist/utils/ai-config-builder.d.ts +14 -0
- package/dist/utils/ai-config-builder.d.ts.map +1 -0
- package/dist/utils/ai-config-builder.js +22 -0
- package/dist/utils/ai-service-factory.d.ts +10 -0
- package/dist/utils/ai-service-factory.d.ts.map +1 -0
- package/dist/utils/ai-service-factory.js +52 -0
- package/dist/utils/stack-formatter.d.ts +11 -0
- package/dist/utils/stack-formatter.d.ts.map +1 -0
- package/dist/utils/stack-formatter.js +30 -0
- package/dist/utils/streaming-options.d.ts +10 -0
- package/dist/utils/streaming-options.d.ts.map +1 -0
- package/dist/utils/streaming-options.js +53 -0
- 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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"}
|