@omaikit/agents 0.1.2 → 0.1.4

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 (131) hide show
  1. package/README.md +17 -0
  2. package/dist/ai-provider/openai.d.ts +2 -2
  3. package/dist/ai-provider/openai.d.ts.map +1 -1
  4. package/dist/ai-provider/openai.js +74 -135
  5. package/dist/ai-provider/openai.js.map +1 -1
  6. package/dist/ai-provider/provider.d.ts +8 -1
  7. package/dist/ai-provider/provider.d.ts.map +1 -1
  8. package/dist/analysis/cache-manager.d.ts +9 -0
  9. package/dist/analysis/cache-manager.d.ts.map +1 -0
  10. package/dist/analysis/cache-manager.js +33 -0
  11. package/dist/analysis/cache-manager.js.map +1 -0
  12. package/dist/analysis/context-writer.d.ts +29 -0
  13. package/dist/analysis/context-writer.d.ts.map +1 -0
  14. package/dist/analysis/context-writer.js +168 -0
  15. package/dist/analysis/context-writer.js.map +1 -0
  16. package/dist/analysis/index.d.ts +5 -0
  17. package/dist/analysis/index.d.ts.map +1 -0
  18. package/dist/analysis/index.js +5 -0
  19. package/dist/analysis/index.js.map +1 -0
  20. package/dist/analysis/plan-writer.d.ts +11 -0
  21. package/dist/analysis/plan-writer.d.ts.map +1 -0
  22. package/dist/analysis/plan-writer.js +87 -0
  23. package/dist/analysis/plan-writer.js.map +1 -0
  24. package/dist/analysis/test-writer.d.ts +9 -0
  25. package/dist/analysis/test-writer.d.ts.map +1 -0
  26. package/dist/analysis/test-writer.js +42 -0
  27. package/dist/analysis/test-writer.js.map +1 -0
  28. package/dist/coder/coder.d.ts +0 -16
  29. package/dist/coder/coder.d.ts.map +1 -1
  30. package/dist/coder/coder.js +35 -245
  31. package/dist/coder/coder.js.map +1 -1
  32. package/dist/coder/prompt-templates.d.ts +1 -1
  33. package/dist/coder/prompt-templates.d.ts.map +1 -1
  34. package/dist/coder/prompt-templates.js +25 -46
  35. package/dist/coder/prompt-templates.js.map +1 -1
  36. package/dist/index.d.ts +1 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +1 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/manager/manager.d.ts.map +1 -1
  41. package/dist/manager/manager.js +5 -16
  42. package/dist/manager/manager.js.map +1 -1
  43. package/dist/memory/memory-store.d.ts +2 -0
  44. package/dist/memory/memory-store.d.ts.map +1 -1
  45. package/dist/memory/memory-store.js +27 -0
  46. package/dist/memory/memory-store.js.map +1 -1
  47. package/dist/planner/clarification-handler.d.ts.map +1 -1
  48. package/dist/planner/clarification-handler.js +2 -12
  49. package/dist/planner/clarification-handler.js.map +1 -1
  50. package/dist/planner/plan-parser.d.ts.map +1 -1
  51. package/dist/planner/plan-parser.js +33 -31
  52. package/dist/planner/plan-parser.js.map +1 -1
  53. package/dist/planner/planner.d.ts +3 -7
  54. package/dist/planner/planner.d.ts.map +1 -1
  55. package/dist/planner/planner.js +77 -230
  56. package/dist/planner/planner.js.map +1 -1
  57. package/dist/planner/prompt-templates.d.ts +4 -2
  58. package/dist/planner/prompt-templates.d.ts.map +1 -1
  59. package/dist/planner/prompt-templates.js +38 -137
  60. package/dist/planner/prompt-templates.js.map +1 -1
  61. package/dist/tester/prompt-templates.d.ts.map +1 -1
  62. package/dist/tester/prompt-templates.js +14 -21
  63. package/dist/tester/prompt-templates.js.map +1 -1
  64. package/dist/tools/apply-patch.d.ts.map +1 -1
  65. package/dist/tools/apply-patch.js +76 -86
  66. package/dist/tools/apply-patch.js.map +1 -1
  67. package/dist/tools/default-registry.d.ts.map +1 -1
  68. package/dist/tools/default-registry.js +6 -2
  69. package/dist/tools/default-registry.js.map +1 -1
  70. package/dist/tools/edit-file.d.ts +4 -0
  71. package/dist/tools/edit-file.d.ts.map +1 -0
  72. package/dist/tools/edit-file.js +95 -0
  73. package/dist/tools/edit-file.js.map +1 -0
  74. package/dist/tools/index.d.ts +3 -2
  75. package/dist/tools/index.d.ts.map +1 -1
  76. package/dist/tools/index.js +3 -2
  77. package/dist/tools/index.js.map +1 -1
  78. package/dist/tools/list-files.d.ts +4 -0
  79. package/dist/tools/list-files.d.ts.map +1 -0
  80. package/dist/tools/list-files.js +45 -0
  81. package/dist/tools/list-files.js.map +1 -0
  82. package/dist/tools/read-file.d.ts +4 -0
  83. package/dist/tools/read-file.d.ts.map +1 -0
  84. package/dist/tools/read-file.js +39 -0
  85. package/dist/tools/read-file.js.map +1 -0
  86. package/dist/tools/registry.d.ts.map +1 -1
  87. package/dist/tools/registry.js +1 -0
  88. package/dist/tools/registry.js.map +1 -1
  89. package/dist/tools/search.js +1 -1
  90. package/dist/tools/search.js.map +1 -1
  91. package/dist/tools/types.d.ts +1 -0
  92. package/dist/tools/types.d.ts.map +1 -1
  93. package/dist/tools/utils.d.ts.map +1 -1
  94. package/dist/tools/utils.js +34 -3
  95. package/dist/tools/utils.js.map +1 -1
  96. package/dist/utils/cache-manager.d.ts +9 -0
  97. package/dist/utils/cache-manager.d.ts.map +1 -0
  98. package/dist/utils/cache-manager.js +33 -0
  99. package/dist/utils/cache-manager.js.map +1 -0
  100. package/dist/utils/context-writer.d.ts +29 -0
  101. package/dist/utils/context-writer.d.ts.map +1 -0
  102. package/dist/utils/context-writer.js +168 -0
  103. package/dist/utils/context-writer.js.map +1 -0
  104. package/dist/utils/index.d.ts +7 -0
  105. package/dist/utils/index.d.ts.map +1 -0
  106. package/dist/utils/index.js +7 -0
  107. package/dist/utils/index.js.map +1 -0
  108. package/dist/utils/plan-writer.d.ts +17 -0
  109. package/dist/utils/plan-writer.d.ts.map +1 -0
  110. package/dist/utils/plan-writer.js +175 -0
  111. package/dist/utils/plan-writer.js.map +1 -0
  112. package/dist/utils/prompt.d.ts +3 -0
  113. package/dist/utils/prompt.d.ts.map +1 -0
  114. package/dist/utils/prompt.js +55 -0
  115. package/dist/utils/prompt.js.map +1 -0
  116. package/dist/utils/test-writer.d.ts +9 -0
  117. package/dist/utils/test-writer.d.ts.map +1 -0
  118. package/dist/utils/test-writer.js +42 -0
  119. package/dist/utils/test-writer.js.map +1 -0
  120. package/package.json +3 -3
  121. package/prompts/coder/task.md +59 -0
  122. package/prompts/manager/context.md +11 -0
  123. package/prompts/planner/clarification.md +12 -0
  124. package/prompts/planner/clarification.questions.md +10 -0
  125. package/prompts/planner/optimize.md +75 -0
  126. package/prompts/planner/plan-milestones.md +73 -0
  127. package/prompts/planner/repair.md +6 -0
  128. package/prompts/planner/summary.md +22 -0
  129. package/prompts/planner/system.md +4 -0
  130. package/prompts/planner/tasks.md +82 -0
  131. package/prompts/tester/prompt.md +19 -0
@@ -3,17 +3,18 @@ import { Agent } from '../agent.js';
3
3
  import { createProvider } from '../ai-provider/factory.js';
4
4
  import { PromptTemplates } from './prompt-templates.js';
5
5
  import { PlanParser } from './plan-parser.js';
6
- import { PlanValidator } from './plan-validator.js';
7
- import { ClarificationHandler } from './clarification-handler.js';
8
6
  import { createDefaultToolRegistry } from '../tools/default-registry.js';
9
7
  import { MemoryStore } from '../memory/memory-store.js';
10
8
  import { loadConfig } from '@omaikit/config';
9
+ import { ContextWriter, PlanWriter } from '../utils/index.js';
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
11
12
  export class Planner extends Agent {
12
13
  name = 'Planner';
13
14
  promptTemplates;
14
15
  planParser;
15
- validator;
16
- clarificationHandler;
16
+ planWriter;
17
+ contextWriter;
17
18
  provider;
18
19
  progressCallbacks = [];
19
20
  memoryStore;
@@ -22,15 +23,14 @@ export class Planner extends Agent {
22
23
  super(logger);
23
24
  this.promptTemplates = new PromptTemplates();
24
25
  this.planParser = new PlanParser();
25
- this.validator = new PlanValidator();
26
- this.clarificationHandler = new ClarificationHandler();
26
+ this.planWriter = new PlanWriter();
27
+ this.contextWriter = new ContextWriter();
27
28
  this.memoryStore = new MemoryStore();
28
29
  this.cfg = loadConfig();
29
30
  }
30
31
  async init() {
31
32
  try {
32
33
  this.provider = await createProvider();
33
- this.logger.info('Planner initialized');
34
34
  }
35
35
  catch (error) {
36
36
  this.logger.warn('Could not initialize Planner, using mock mode');
@@ -50,96 +50,87 @@ export class Planner extends Agent {
50
50
  await this.beforeExecute(input);
51
51
  // Always initialize provider (will use real API if key is available)
52
52
  await this.init();
53
+ if (!this.provider) {
54
+ throw new Error('AI provider not initialized');
55
+ }
53
56
  // Validate input
54
57
  if (!planInput.description || planInput.description.trim().length === 0) {
55
58
  throw new Error('Description is required');
56
59
  }
57
- // Generate prompt from input
58
- const basePrompt = this.promptTemplates.generatePrompt(planInput.description, planInput.projectType, planInput.techStack);
60
+ // Generate prompts from input (step-by-step)
61
+ const step1Prompt = this.promptTemplates.generatePlanMilestonesPrompt(planInput.description, planInput.projectDescription, planInput.techStack);
59
62
  const recentMemory = await this.memoryStore.readRecent(this.name, 3);
60
63
  const memoryContext = this.memoryStore.formatRecent(recentMemory);
61
64
  const prompt = memoryContext
62
- ? `${basePrompt}\n\n## Recent Agent Memory\n${memoryContext}`
63
- : basePrompt;
65
+ ? `${step1Prompt}\n\n## Recent Agent Memory\n${memoryContext}`
66
+ : step1Prompt;
64
67
  this.logger.info(`Generating plan for: ${planInput.description.substring(0, 50)}...`);
65
- // Call AI provider to generate plan
66
- this.emit('progress', { status: 'generating', message: 'Calling AI provider' });
67
- // In test mode, use mock generation for speed
68
- let llmResponse;
69
- if (process.env.VITEST !== undefined) {
70
- this.logger.info('Using mock plan generation (test mode)');
71
- llmResponse = this.generateMockPlan(planInput);
68
+ this.emit('progress', { status: 'generating', message: 'Generating plan & milestones', percent: 20 });
69
+ const toolRegistry = createDefaultToolRegistry();
70
+ const toolContext = this.buildToolContext(planInput);
71
+ const step1Response = await this.provider.generate(prompt, {
72
+ model: this.cfg.plannerModel,
73
+ tools: toolRegistry.getDefinitions(),
74
+ toolRegistry,
75
+ toolContext,
76
+ toolChoice: 'auto',
77
+ maxToolCalls: 3,
78
+ });
79
+ await this.memoryStore.append(this.name, {
80
+ timestamp: new Date().toISOString(),
81
+ prompt,
82
+ response: step1Response,
83
+ metadata: { step: 'plan_milestones' },
84
+ });
85
+ const projectContext = await this.contextWriter.readContext();
86
+ if (!projectContext) {
87
+ throw new Error('Project context file not found or invalid');
88
+ }
89
+ const planFile = this.getLatestPlanFile();
90
+ if (!planFile) {
91
+ throw new Error('Planner did not create a plan file');
72
92
  }
73
- else {
74
- if (!this.provider) {
75
- throw new Error('AI provider not initialized');
76
- }
77
- const toolRegistry = createDefaultToolRegistry();
78
- const toolContext = this.buildToolContext(planInput);
79
- llmResponse = await this.provider.generate(prompt, {
93
+ const planFromFile = await this.planWriter.readPlan(planFile);
94
+ if (!planFromFile) {
95
+ throw new Error('Plan file not found or invalid');
96
+ }
97
+ for (const m of planFromFile.milestones) {
98
+ const percent = 20 +
99
+ Math.floor(((planFromFile.milestones.indexOf(m) + 1) / planFromFile.milestones.length) * 80);
100
+ this.emit('progress', {
101
+ status: 'generating',
102
+ message: `Generating tasks for Milestone: ${m.title}`,
103
+ percent,
104
+ });
105
+ const taskPrompt = this.promptTemplates.generateTasksPrompt(projectContext, planFromFile, m);
106
+ const taskResp = await this.provider.generate(taskPrompt, {
80
107
  model: this.cfg.plannerModel,
81
108
  tools: toolRegistry.getDefinitions(),
82
109
  toolRegistry,
83
110
  toolContext,
84
111
  toolChoice: 'auto',
112
+ maxToolCalls: 8,
113
+ });
114
+ await this.memoryStore.append(this.name, {
115
+ timestamp: new Date().toISOString(),
116
+ prompt: taskPrompt,
117
+ response: taskResp,
118
+ metadata: { step: 'tasks' },
85
119
  });
86
- if (llmResponse.startsWith('OPENAI_ECHO') || llmResponse.startsWith('ANTHROPIC_ECHO')) {
87
- this.logger.warn('Using mock plan generation (no API key configured)');
88
- llmResponse = this.generateMockPlan(planInput);
89
- }
90
- }
91
- if (this.isLikelyTruncated(llmResponse)) {
92
- if (this.provider && process.env.VITEST === undefined) {
93
- this.logger.warn('LLM response appears truncated; attempting repair');
94
- const repairPrompt = this.promptTemplates.generateRepairPrompt(llmResponse);
95
- llmResponse = await this.provider.generate(repairPrompt);
96
- }
97
- }
98
- this.emit('progress', { status: 'parsing', message: 'Parsing LLM response' });
99
- let parsedPlan;
100
- try {
101
- parsedPlan = this.planParser.parse(llmResponse);
102
- }
103
- catch (parseError) {
104
- if (this.provider && process.env.VITEST === undefined) {
105
- this.logger.warn('Plan JSON parse failed, attempting repair');
106
- const repairPrompt = this.promptTemplates.generateRepairPrompt(llmResponse);
107
- const repaired = await this.provider.generate(repairPrompt);
108
- parsedPlan = this.planParser.parse(repaired);
109
- }
110
- else {
111
- throw parseError;
112
- }
113
- }
114
- this.emit('progress', {
115
- status: 'validating',
116
- message: 'Validating plan structure',
117
- });
118
- const validationResult = this.validator.validate(parsedPlan);
119
- if (!validationResult.valid) {
120
- throw new Error(`Plan validation failed: ${validationResult.errors.join(', ')}`);
121
- }
122
- const depResult = this.validator.validateDependencies(parsedPlan.milestones.flatMap((m) => m.tasks));
123
- if (depResult.hasCycles) {
124
- throw new Error('Plan contains circular dependencies');
125
120
  }
126
121
  this.emit('progress', {
127
122
  status: 'complete',
128
123
  message: 'Plan generation complete',
124
+ percent: 100,
129
125
  });
130
- const projectContext = this.buildProjectContext(planInput);
126
+ const plan = this.planParser.parse(JSON.stringify(planFromFile));
131
127
  const result = {
132
128
  data: {
133
- plan: parsedPlan,
129
+ plan,
134
130
  projectContext,
135
131
  },
136
132
  };
137
133
  await this.afterExecute(result);
138
- await this.memoryStore.append(this.name, {
139
- timestamp: new Date().toISOString(),
140
- prompt,
141
- response: llmResponse,
142
- });
143
134
  return result;
144
135
  }
145
136
  catch (error) {
@@ -160,128 +151,6 @@ export class Planner extends Agent {
160
151
  };
161
152
  }
162
153
  }
163
- generateMockPlan(input) {
164
- // Fallback mock response when no API key is available
165
- const mockPlan = {
166
- id: `plan-${Date.now()}`,
167
- title: `Plan for: ${input.description.substring(0, 30)}`,
168
- description: input.description,
169
- clarifications: [],
170
- milestones: [
171
- {
172
- id: 'M1',
173
- title: 'Setup & Foundation',
174
- description: 'Project setup and baseline configuration',
175
- duration: 5,
176
- successCriteria: ['Project structure created', 'Tooling configured'],
177
- tasks: [
178
- {
179
- id: 'T1',
180
- title: 'Project initialization',
181
- description: 'Setup project structure and configuration',
182
- type: 'infrastructure',
183
- estimatedEffort: 3,
184
- acceptanceCriteria: [
185
- 'Repository structure is created',
186
- 'Configuration files are added',
187
- ],
188
- inputDependencies: [],
189
- outputDependencies: ['T2'],
190
- affectedModules: ['core'],
191
- status: 'planned',
192
- },
193
- {
194
- id: 'T2',
195
- title: 'Development environment',
196
- description: 'Configure development tools and dependencies',
197
- type: 'infrastructure',
198
- estimatedEffort: 2,
199
- acceptanceCriteria: ['Dependencies installed', 'Linting and formatting configured'],
200
- inputDependencies: ['T1'],
201
- outputDependencies: ['T3'],
202
- affectedModules: ['tooling'],
203
- status: 'planned',
204
- },
205
- ],
206
- },
207
- {
208
- id: 'M2',
209
- title: 'Core Development',
210
- description: 'Implement primary functionality',
211
- duration: 10,
212
- successCriteria: ['Core features implemented', 'Basic tests pass'],
213
- tasks: [
214
- {
215
- id: 'T3',
216
- title: 'Implement core features',
217
- description: 'Build main functionality',
218
- type: 'feature',
219
- estimatedEffort: 8,
220
- acceptanceCriteria: [
221
- 'Core functionality implemented',
222
- 'Endpoints/modules behave as expected',
223
- ],
224
- inputDependencies: ['T1', 'T2'],
225
- outputDependencies: [],
226
- affectedModules: ['core'],
227
- status: 'planned',
228
- },
229
- ],
230
- },
231
- ],
232
- };
233
- return JSON.stringify(mockPlan);
234
- }
235
- isLikelyTruncated(response) {
236
- const trimmed = response.trim();
237
- if (!trimmed || trimmed === '{}') {
238
- return true;
239
- }
240
- const openBraces = (trimmed.match(/{/g) || []).length;
241
- const closeBraces = (trimmed.match(/}/g) || []).length;
242
- if (openBraces === 0 || closeBraces === 0) {
243
- return true;
244
- }
245
- if (closeBraces < openBraces) {
246
- return true;
247
- }
248
- if (!trimmed.includes('milestones') && !trimmed.includes('"milestones"')) {
249
- return true;
250
- }
251
- return false;
252
- }
253
- buildProjectContext(input) {
254
- const languages = this.inferLanguages(input.techStack);
255
- return {
256
- name: input.projectName || 'omaikit-project',
257
- root: input.rootPath || process.cwd(),
258
- modules: [],
259
- dependencyGraph: { modules: {}, edges: [] },
260
- metadata: {
261
- totalLOC: 0,
262
- fileCount: 0,
263
- languages,
264
- dependencies: this.inferDependencies(input.techStack),
265
- },
266
- codePatterns: {
267
- namingConventions: {
268
- variables: 'camelCase',
269
- functions: 'camelCase',
270
- classes: 'PascalCase',
271
- constants: 'UPPER_SNAKE_CASE',
272
- files: 'kebab-case',
273
- },
274
- errorHandling: { pattern: 'try-catch', examples: [] },
275
- structuralPattern: {
276
- modulesPerFeature: 2,
277
- averageModuleSize: 'medium',
278
- organizationStyle: 'by-feature',
279
- },
280
- comments: { docstringFormat: 'jsdoc', commentCoverage: 0 },
281
- testOrganization: { colocated: true, pattern: '__tests__' },
282
- },
283
- };
284
- }
285
154
  buildToolContext(input) {
286
155
  return {
287
156
  rootPath: input.rootPath || input.projectRoot || process.cwd(),
@@ -289,45 +158,23 @@ export class Planner extends Agent {
289
158
  logger: this.logger,
290
159
  };
291
160
  }
292
- inferLanguages(techStack) {
293
- if (!Array.isArray(techStack) || techStack.length === 0) {
294
- return ['typescript'];
161
+ getLatestPlanFile() {
162
+ const planDir = path.join('.omaikit', 'plans');
163
+ if (!fs.existsSync(planDir)) {
164
+ return undefined;
295
165
  }
296
- const normalized = techStack.map((t) => t.toLowerCase());
297
- const languages = new Set();
298
- if (normalized.some((t) => t.includes('typescript') || t === 'ts'))
299
- languages.add('typescript');
300
- if (normalized.some((t) => t.includes('javascript') || t === 'js' || t.includes('node')))
301
- languages.add('javascript');
302
- if (normalized.some((t) => t.includes('python') || t === 'py'))
303
- languages.add('python');
304
- if (normalized.some((t) => t.includes('go') || t.includes('golang')))
305
- languages.add('go');
306
- if (normalized.some((t) => t.includes('rust')))
307
- languages.add('rust');
308
- if (normalized.some((t) => t.includes('c#') || t.includes('csharp')))
309
- languages.add('csharp');
310
- if (normalized.some((t) => t.includes('php')))
311
- languages.add('php');
312
- return languages.size > 0 ? Array.from(languages) : ['typescript'];
313
- }
314
- inferDependencies(techStack) {
315
- if (!Array.isArray(techStack)) {
316
- return [];
166
+ const indices = fs
167
+ .readdirSync(planDir)
168
+ .map((file) => /^P(\d+)\.json$/i.exec(file))
169
+ .filter((match) => match !== null)
170
+ .map((match) => Number.parseInt(match[1], 10))
171
+ .filter((value) => !Number.isNaN(value));
172
+ if (indices.length === 0) {
173
+ return undefined;
317
174
  }
318
- const deps = new Set();
319
- techStack.forEach((entry) => {
320
- const normalized = entry.toLowerCase();
321
- if (normalized.includes('express'))
322
- deps.add('express');
323
- if (normalized.includes('react'))
324
- deps.add('react');
325
- if (normalized.includes('nestjs'))
326
- deps.add('@nestjs/core');
327
- if (normalized.includes('prisma'))
328
- deps.add('prisma');
329
- });
330
- return Array.from(deps);
175
+ const latest = Math.max(...indices);
176
+ const planId = `P${String(latest).padStart(3, '0')}`;
177
+ return path.join('plans', `${planId}.json`);
331
178
  }
332
179
  }
333
180
  //# sourceMappingURL=planner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/planner/planner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/planner/planner.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  export declare class PromptTemplates {
2
- generatePrompt(description: string, projectType?: string, techStack?: string[]): string;
2
+ generatePlanMilestonesPrompt(description: string, projectType?: string, techStack?: string[]): string;
3
+ generateTasksPrompt(context: any, plan: any, milestone: any): string;
4
+ generateOptimizePrompt(fullPlan: string): string;
5
+ generateSummaryPrompt(): string;
3
6
  private getLanguageHint;
4
- private getStructureHint;
5
7
  generateClarificationPrompt(description: string, ambiguities: string[]): string;
6
8
  getSystemPrompt(): string;
7
9
  generateRepairPrompt(rawResponse: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-templates.d.ts","sourceRoot":"","sources":["../../src/planner/prompt-templates.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IA4EvF,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,gBAAgB;IAoDxB,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IAe/E,eAAe,IAAI,MAAM;IAOzB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAQlD"}
1
+ {"version":3,"file":"prompt-templates.d.ts","sourceRoot":"","sources":["../../src/planner/prompt-templates.ts"],"names":[],"mappings":"AAEA,qBAAa,eAAe;IAC1B,4BAA4B,CAC1B,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,MAAM;IAgBT,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,MAAM;IAqBpE,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIhD,qBAAqB,IAAI,MAAM;IAI/B,OAAO,CAAC,eAAe;IAmBvB,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IAK/E,eAAe,IAAI,MAAM;IAIzB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAGlD"}
@@ -1,75 +1,40 @@
1
+ import { readPrompt } from '../utils/prompt.js';
1
2
  export class PromptTemplates {
2
- generatePrompt(description, projectType, techStack) {
3
- const techStackStr = techStack && techStack.length > 0 ? `Technology Stack: ${techStack.join(', ')}` : '';
4
- const projectTypeStr = projectType ? `Project Type: ${projectType}` : '';
3
+ generatePlanMilestonesPrompt(description, projectType, techStack) {
4
+ const techStackLine = techStack && techStack.length > 0 ? `Technology Stack: ${techStack.join(', ')}` : '';
5
+ const projectTypeLine = projectType ? `Project Type: ${projectType}` : '';
5
6
  const languageHint = this.getLanguageHint(projectType, techStack);
6
- const structureHint = this.getStructureHint(languageHint, projectType);
7
- return `You are an expert project planner. Generate a detailed Agile project plan for the following feature request.
8
-
9
- Feature Description: ${description}
10
-
11
- ${projectTypeStr}
12
- ${techStackStr}
13
- ${languageHint ? `Programming Language: ${languageHint}` : ''}
14
-
15
- Project Structure Guidance:
16
- ${structureHint}
17
-
18
- Generate a comprehensive plan with the following JSON structure:
19
- {
20
- "id": "P-0",
21
- "title": "Brief project title",
22
- "description": "Full description",
23
- "clarifications": [],
24
- "milestones": [
25
- {
26
- "id": "M1",
27
- "title": "Milestone name",
28
- "description": "Milestone description",
29
- "duration": 5,
30
- "successCriteria": ["Milestone success criteria"],
31
- "tasks": [
32
- {
33
- "id": "T1",
34
- "title": "Task name",
35
- "description": "Task description",
36
- "type": "feature",
37
- "estimatedEffort": 3,
38
- "acceptanceCriteria": ["Acceptance criteria"],
39
- "inputDependencies": ["T0"],
40
- "outputDependencies": ["T2"],
41
- "targetModule": "module-path",
42
- "affectedModules": ["module-path"],
43
- "suggestedApproach": "Brief implementation guidance",
44
- "technicalNotes": "Optional technical notes",
45
- "riskFactors": [
46
- {
47
- "description": "Risk description",
48
- "likelihood": "low",
49
- "impact": "medium",
50
- "mitigation": "Mitigation steps"
51
- }
52
- ],
53
- "status": "planned",
54
- "blockers": []
55
- }
56
- ]
7
+ const languageHintLine = languageHint ? `Programming Language: ${languageHint}` : '';
8
+ return readPrompt('planner.plan-milestones', {
9
+ description,
10
+ projectTypeLine,
11
+ techStackLine,
12
+ languageHintLine,
13
+ });
57
14
  }
58
- ]
59
- }
60
-
61
- Requirements:
62
- 1. Create 2-5 milestones
63
- 2. Each milestone should have 3-8 tasks
64
- 3. Effort estimates should be in hours (1-40)
65
- 4. Include realistic dependencies between tasks
66
- 5. Tasks should cover all aspects: design, implementation, testing, documentation
67
- 6. Use clear, actionable task titles
68
- 7. Ensure each task includes all required fields in the schema
69
- 8. Ensure dependency DAG is acyclic
70
- 9. Each task must reference the intended files/folders via targetModule and affectedModules using the project structure guidance
71
-
72
- Return ONLY valid JSON, no markdown or extra text.`;
15
+ generateTasksPrompt(context, plan, milestone) {
16
+ const languages = Array.isArray(context?.analysis?.languages)
17
+ ? context.analysis.languages.join(', ')
18
+ : 'unknown';
19
+ const summary = [
20
+ `Project Name: ${context?.project.name || 'Unknown project'}`,
21
+ `Project Description: ${context?.project?.description || 'No description provided.'}`,
22
+ `Project Root Path: ${context?.project?.rootPath || 'Unknown root path'}`,
23
+ `Languages Used: ${languages}`,
24
+ `Current Plan ID: ${plan?.id || 'P001'}`,
25
+ `Current Plan Title: ${plan?.title || 'No plan title provided.'}`,
26
+ `Current Plan Description: ${plan?.description || 'No plan description provided.'}`,
27
+ `Current Milestone ID: ${milestone.id || 'M001'}`,
28
+ `Current Milestone Title: ${milestone.title}`,
29
+ `Current Milestone Description: ${milestone.description || 'No description provided.'}`,
30
+ ].join('\n');
31
+ return readPrompt('planner.tasks', { summary });
32
+ }
33
+ generateOptimizePrompt(fullPlan) {
34
+ return readPrompt('planner.optimize', { fullPlan });
35
+ }
36
+ generateSummaryPrompt() {
37
+ return readPrompt('planner.summary');
73
38
  }
74
39
  getLanguageHint(projectType, techStack) {
75
40
  const entries = [projectType, ...(techStack ?? [])].filter((value) => Boolean(value));
@@ -90,79 +55,15 @@ Return ONLY valid JSON, no markdown or extra text.`;
90
55
  return 'PHP';
91
56
  return undefined;
92
57
  }
93
- getStructureHint(languageHint, projectType) {
94
- const type = (projectType || '').toLowerCase();
95
- if (languageHint === 'Go') {
96
- return `Use standard Go layout:
97
- - cmd/<app>/ (entrypoints)
98
- - internal/ (private packages)
99
- - pkg/ (public packages)
100
- - api/ (OpenAPI/protos)
101
- - configs/ (config files)
102
- - scripts/ (tooling)`;
103
- }
104
- if (languageHint === 'PHP') {
105
- return `Use PSR-4 layout:
106
- - src/ (application code)
107
- - tests/ (tests)
108
- - public/ (entrypoint)
109
- - config/ (configuration)
110
- - routes/ (routing)`;
111
- }
112
- if (type.includes('api') || type.includes('backend')) {
113
- return `Use a service-style layout:
114
- - src/
115
- - api/ (routes/controllers)
116
- - services/
117
- - repositories/
118
- - models/
119
- - middleware/
120
- - tests/
121
- - config/`;
122
- }
123
- if (type.includes('frontend') || type.includes('web')) {
124
- return `Use a web-app layout:
125
- - src/
126
- - components/
127
- - pages/ (or routes/)
128
- - hooks/ or utils/
129
- - styles/
130
- - public/
131
- - tests/`;
132
- }
133
- return `Use a standard modular layout:
134
- - src/ (core code)
135
- - tests/ (unit/integration tests)
136
- - config/ (configuration)
137
- - scripts/ (tooling)`;
138
- }
139
58
  generateClarificationPrompt(description, ambiguities) {
140
- return `Given this feature description: "${description}"
141
-
142
- I need clarification on these points:
143
- ${ambiguities.map((a) => `- ${a}`).join('\n')}
144
-
145
- Please provide brief, specific clarifications for each point. Format as JSON:
146
- {
147
- "clarifications": {
148
- "point1": "answer",
149
- "point2": "answer"
150
- }
151
- }`;
59
+ const ambiguitiesList = ambiguities.map((a) => `- ${a}`).join('\n');
60
+ return readPrompt('planner.clarification', { description, ambiguitiesList });
152
61
  }
153
62
  getSystemPrompt() {
154
- return `You are an expert Agile project planner with 10+ years of experience planning software projects.
155
- You excel at breaking down complex features into manageable tasks, identifying dependencies, and creating realistic effort estimates.
156
- You always think about the critical path and bottlenecks.
157
- You prefer generating plans in valid JSON format without any markdown formatting.`;
63
+ return readPrompt('planner.system');
158
64
  }
159
65
  generateRepairPrompt(rawResponse) {
160
- return `You are a JSON repair assistant. Fix the following malformed JSON and return ONLY valid JSON with the same schema as the planner output.
161
-
162
- Malformed JSON:
163
- ${rawResponse}
164
-
165
- Return ONLY valid JSON, no markdown or extra text.`;
66
+ return readPrompt('planner.repair', { rawResponse });
166
67
  }
167
68
  }
168
69
  //# sourceMappingURL=prompt-templates.js.map