openplanr 0.8.0 → 1.0.0

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 (227) hide show
  1. package/README.md +142 -52
  2. package/dist/agents/index.d.ts +1 -5
  3. package/dist/agents/index.d.ts.map +1 -1
  4. package/dist/agents/index.js +1 -4
  5. package/dist/agents/index.js.map +1 -1
  6. package/dist/agents/task-parser.d.ts +4 -1
  7. package/dist/agents/task-parser.d.ts.map +1 -1
  8. package/dist/agents/task-parser.js +6 -3
  9. package/dist/agents/task-parser.js.map +1 -1
  10. package/dist/agents/utils.d.ts +0 -4
  11. package/dist/agents/utils.d.ts.map +1 -1
  12. package/dist/agents/utils.js +3 -24
  13. package/dist/agents/utils.js.map +1 -1
  14. package/dist/ai/codebase/context-builder.d.ts +22 -3
  15. package/dist/ai/codebase/context-builder.d.ts.map +1 -1
  16. package/dist/ai/codebase/context-builder.js +202 -14
  17. package/dist/ai/codebase/context-builder.js.map +1 -1
  18. package/dist/ai/codebase/file-reader.d.ts.map +1 -1
  19. package/dist/ai/codebase/file-reader.js +7 -3
  20. package/dist/ai/codebase/file-reader.js.map +1 -1
  21. package/dist/ai/codebase/index.d.ts +3 -1
  22. package/dist/ai/codebase/index.d.ts.map +1 -1
  23. package/dist/ai/codebase/index.js +3 -1
  24. package/dist/ai/codebase/index.js.map +1 -1
  25. package/dist/ai/codebase/pattern-rules.d.ts +28 -0
  26. package/dist/ai/codebase/pattern-rules.d.ts.map +1 -0
  27. package/dist/ai/codebase/pattern-rules.js +186 -0
  28. package/dist/ai/codebase/pattern-rules.js.map +1 -0
  29. package/dist/ai/codebase/rules-reader.d.ts +14 -0
  30. package/dist/ai/codebase/rules-reader.d.ts.map +1 -0
  31. package/dist/ai/codebase/rules-reader.js +25 -0
  32. package/dist/ai/codebase/rules-reader.js.map +1 -0
  33. package/dist/ai/codebase/stack-detector.d.ts.map +1 -1
  34. package/dist/ai/codebase/stack-detector.js +4 -1
  35. package/dist/ai/codebase/stack-detector.js.map +1 -1
  36. package/dist/ai/codebase/tree-generator.d.ts.map +1 -1
  37. package/dist/ai/codebase/tree-generator.js +5 -2
  38. package/dist/ai/codebase/tree-generator.js.map +1 -1
  39. package/dist/ai/errors.js +1 -1
  40. package/dist/ai/errors.js.map +1 -1
  41. package/dist/ai/prompts/prompt-builder.d.ts +12 -0
  42. package/dist/ai/prompts/prompt-builder.d.ts.map +1 -1
  43. package/dist/ai/prompts/prompt-builder.js +45 -3
  44. package/dist/ai/prompts/prompt-builder.js.map +1 -1
  45. package/dist/ai/prompts/system-prompts.d.ts +5 -3
  46. package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
  47. package/dist/ai/prompts/system-prompts.js +74 -13
  48. package/dist/ai/prompts/system-prompts.js.map +1 -1
  49. package/dist/ai/schemas/ai-response-schemas.d.ts +48 -2
  50. package/dist/ai/schemas/ai-response-schemas.d.ts.map +1 -1
  51. package/dist/ai/schemas/ai-response-schemas.js +19 -0
  52. package/dist/ai/schemas/ai-response-schemas.js.map +1 -1
  53. package/dist/ai/types.d.ts +4 -2
  54. package/dist/ai/types.d.ts.map +1 -1
  55. package/dist/ai/types.js +3 -1
  56. package/dist/ai/types.js.map +1 -1
  57. package/dist/ai/validation/dependency-chains.d.ts +21 -0
  58. package/dist/ai/validation/dependency-chains.d.ts.map +1 -0
  59. package/dist/ai/validation/dependency-chains.js +114 -0
  60. package/dist/ai/validation/dependency-chains.js.map +1 -0
  61. package/dist/ai/validation/index.d.ts +3 -0
  62. package/dist/ai/validation/index.d.ts.map +1 -0
  63. package/dist/ai/validation/index.js +3 -0
  64. package/dist/ai/validation/index.js.map +1 -0
  65. package/dist/ai/validation/task-validator.d.ts +37 -0
  66. package/dist/ai/validation/task-validator.d.ts.map +1 -0
  67. package/dist/ai/validation/task-validator.js +89 -0
  68. package/dist/ai/validation/task-validator.js.map +1 -0
  69. package/dist/cli/commands/backlog.d.ts +10 -0
  70. package/dist/cli/commands/backlog.d.ts.map +1 -0
  71. package/dist/cli/commands/backlog.js +292 -0
  72. package/dist/cli/commands/backlog.js.map +1 -0
  73. package/dist/cli/commands/checklist.js +4 -4
  74. package/dist/cli/commands/checklist.js.map +1 -1
  75. package/dist/cli/commands/config.js +13 -13
  76. package/dist/cli/commands/config.js.map +1 -1
  77. package/dist/cli/commands/epic.d.ts.map +1 -1
  78. package/dist/cli/commands/epic.js +41 -22
  79. package/dist/cli/commands/epic.js.map +1 -1
  80. package/dist/cli/commands/estimate.d.ts.map +1 -1
  81. package/dist/cli/commands/estimate.js +40 -39
  82. package/dist/cli/commands/estimate.js.map +1 -1
  83. package/dist/cli/commands/export.d.ts +8 -0
  84. package/dist/cli/commands/export.d.ts.map +1 -0
  85. package/dist/cli/commands/export.js +282 -0
  86. package/dist/cli/commands/export.js.map +1 -0
  87. package/dist/cli/commands/feature.js +9 -9
  88. package/dist/cli/commands/feature.js.map +1 -1
  89. package/dist/cli/commands/github.d.ts +8 -0
  90. package/dist/cli/commands/github.d.ts.map +1 -0
  91. package/dist/cli/commands/github.js +415 -0
  92. package/dist/cli/commands/github.js.map +1 -0
  93. package/dist/cli/commands/plan.d.ts.map +1 -1
  94. package/dist/cli/commands/plan.js +104 -50
  95. package/dist/cli/commands/plan.js.map +1 -1
  96. package/dist/cli/commands/quick.d.ts.map +1 -1
  97. package/dist/cli/commands/quick.js +37 -107
  98. package/dist/cli/commands/quick.js.map +1 -1
  99. package/dist/cli/commands/refine.js +21 -21
  100. package/dist/cli/commands/refine.js.map +1 -1
  101. package/dist/cli/commands/search.d.ts.map +1 -1
  102. package/dist/cli/commands/search.js +18 -7
  103. package/dist/cli/commands/search.js.map +1 -1
  104. package/dist/cli/commands/sprint.d.ts +9 -0
  105. package/dist/cli/commands/sprint.d.ts.map +1 -0
  106. package/dist/cli/commands/sprint.js +519 -0
  107. package/dist/cli/commands/sprint.js.map +1 -0
  108. package/dist/cli/commands/status.d.ts.map +1 -1
  109. package/dist/cli/commands/status.js +77 -32
  110. package/dist/cli/commands/status.js.map +1 -1
  111. package/dist/cli/commands/story.js +15 -15
  112. package/dist/cli/commands/story.js.map +1 -1
  113. package/dist/cli/commands/sync.js +11 -7
  114. package/dist/cli/commands/sync.js.map +1 -1
  115. package/dist/cli/commands/task.d.ts +0 -2
  116. package/dist/cli/commands/task.d.ts.map +1 -1
  117. package/dist/cli/commands/task.js +14 -169
  118. package/dist/cli/commands/task.js.map +1 -1
  119. package/dist/cli/commands/template.d.ts +10 -0
  120. package/dist/cli/commands/template.d.ts.map +1 -0
  121. package/dist/cli/commands/template.js +269 -0
  122. package/dist/cli/commands/template.js.map +1 -0
  123. package/dist/cli/helpers/task-creation.d.ts +89 -0
  124. package/dist/cli/helpers/task-creation.d.ts.map +1 -0
  125. package/dist/cli/helpers/task-creation.js +140 -0
  126. package/dist/cli/helpers/task-creation.js.map +1 -0
  127. package/dist/cli/index.js +29 -2
  128. package/dist/cli/index.js.map +1 -1
  129. package/dist/models/schema.d.ts +2 -0
  130. package/dist/models/schema.d.ts.map +1 -1
  131. package/dist/models/schema.js +2 -0
  132. package/dist/models/schema.js.map +1 -1
  133. package/dist/models/types.d.ts +32 -1
  134. package/dist/models/types.d.ts.map +1 -1
  135. package/dist/services/artifact-gathering.d.ts +2 -0
  136. package/dist/services/artifact-gathering.d.ts.map +1 -1
  137. package/dist/services/artifact-gathering.js +26 -7
  138. package/dist/services/artifact-gathering.js.map +1 -1
  139. package/dist/services/artifact-service.d.ts +5 -5
  140. package/dist/services/artifact-service.d.ts.map +1 -1
  141. package/dist/services/artifact-service.js +4 -0
  142. package/dist/services/artifact-service.js.map +1 -1
  143. package/dist/services/config-service.d.ts.map +1 -1
  144. package/dist/services/config-service.js +2 -0
  145. package/dist/services/config-service.js.map +1 -1
  146. package/dist/services/credential-backends.d.ts.map +1 -1
  147. package/dist/services/credential-backends.js +15 -7
  148. package/dist/services/credential-backends.js.map +1 -1
  149. package/dist/services/credentials-service.d.ts.map +1 -1
  150. package/dist/services/credentials-service.js +6 -3
  151. package/dist/services/credentials-service.js.map +1 -1
  152. package/dist/services/github-service.d.ts +83 -0
  153. package/dist/services/github-service.d.ts.map +1 -0
  154. package/dist/services/github-service.js +440 -0
  155. package/dist/services/github-service.js.map +1 -0
  156. package/dist/services/template-service.d.ts +2 -1
  157. package/dist/services/template-service.d.ts.map +1 -1
  158. package/dist/services/template-service.js +3 -1
  159. package/dist/services/template-service.js.map +1 -1
  160. package/dist/templates/backlog/backlog-item.md.hbs +40 -0
  161. package/dist/templates/checklists/agile-checklist.md.hbs +1 -1
  162. package/dist/templates/export/planning-report.html.hbs +230 -0
  163. package/dist/templates/export/planning-report.md.hbs +136 -0
  164. package/dist/templates/quick/quick-task.md.hbs +1 -1
  165. package/dist/templates/rules/claude/CLAUDE.md.hbs +78 -35
  166. package/dist/templates/rules/codex/AGENTS.md.hbs +73 -17
  167. package/dist/templates/rules/cursor/2101-implement-task-list.mdc.hbs +66 -14
  168. package/dist/templates/sprints/sprint.md.hbs +42 -0
  169. package/dist/templates/task-templates/api-integration.json +45 -0
  170. package/dist/templates/task-templates/auth-flow.json +48 -0
  171. package/dist/templates/task-templates/database-migration.json +44 -0
  172. package/dist/templates/task-templates/react-component.json +45 -0
  173. package/dist/templates/task-templates/rest-endpoint.json +53 -0
  174. package/dist/templates/tasks/task-list.md.hbs +1 -1
  175. package/dist/utils/constants.d.ts +4 -0
  176. package/dist/utils/constants.d.ts.map +1 -1
  177. package/dist/utils/constants.js +4 -0
  178. package/dist/utils/constants.js.map +1 -1
  179. package/dist/utils/logger.d.ts +31 -1
  180. package/dist/utils/logger.d.ts.map +1 -1
  181. package/dist/utils/logger.js +92 -9
  182. package/dist/utils/logger.js.map +1 -1
  183. package/dist/utils/markdown.d.ts +3 -2
  184. package/dist/utils/markdown.d.ts.map +1 -1
  185. package/dist/utils/markdown.js +3 -1
  186. package/dist/utils/markdown.js.map +1 -1
  187. package/dist/utils/slugify.d.ts +8 -1
  188. package/dist/utils/slugify.d.ts.map +1 -1
  189. package/dist/utils/slugify.js +18 -2
  190. package/dist/utils/slugify.js.map +1 -1
  191. package/package.json +14 -3
  192. package/dist/agents/agent-factory.d.ts +0 -7
  193. package/dist/agents/agent-factory.d.ts.map +0 -1
  194. package/dist/agents/agent-factory.js +0 -22
  195. package/dist/agents/agent-factory.js.map +0 -1
  196. package/dist/agents/claude-agent.d.ts +0 -18
  197. package/dist/agents/claude-agent.d.ts.map +0 -1
  198. package/dist/agents/claude-agent.js +0 -183
  199. package/dist/agents/claude-agent.js.map +0 -1
  200. package/dist/agents/codex-agent.d.ts +0 -17
  201. package/dist/agents/codex-agent.d.ts.map +0 -1
  202. package/dist/agents/codex-agent.js +0 -124
  203. package/dist/agents/codex-agent.js.map +0 -1
  204. package/dist/agents/cursor-agent.d.ts +0 -14
  205. package/dist/agents/cursor-agent.d.ts.map +0 -1
  206. package/dist/agents/cursor-agent.js +0 -49
  207. package/dist/agents/cursor-agent.js.map +0 -1
  208. package/dist/agents/implementation-bridge.d.ts +0 -30
  209. package/dist/agents/implementation-bridge.d.ts.map +0 -1
  210. package/dist/agents/implementation-bridge.js +0 -256
  211. package/dist/agents/implementation-bridge.js.map +0 -1
  212. package/dist/agents/progress.d.ts +0 -62
  213. package/dist/agents/progress.d.ts.map +0 -1
  214. package/dist/agents/progress.js +0 -155
  215. package/dist/agents/progress.js.map +0 -1
  216. package/dist/agents/prompt-composer.d.ts +0 -30
  217. package/dist/agents/prompt-composer.d.ts.map +0 -1
  218. package/dist/agents/prompt-composer.js +0 -81
  219. package/dist/agents/prompt-composer.js.map +0 -1
  220. package/dist/agents/types.d.ts +0 -25
  221. package/dist/agents/types.d.ts.map +0 -1
  222. package/dist/agents/types.js +0 -8
  223. package/dist/agents/types.js.map +0 -1
  224. package/dist/utils/error-context.d.ts +0 -23
  225. package/dist/utils/error-context.d.ts.map +0 -1
  226. package/dist/utils/error-context.js +0 -94
  227. package/dist/utils/error-context.js.map +0 -1
@@ -1,256 +0,0 @@
1
- /**
2
- * Task implementation bridge.
3
- *
4
- * Orchestrates the full flow:
5
- * 1. Read and parse the task artifact
6
- * 2. Resolve target subtask(s)
7
- * 3. Gather parent chain context (story → feature → epic)
8
- * 4. Build codebase context
9
- * 5. Compose the implementation prompt
10
- * 6. Dispatch to the configured coding agent
11
- */
12
- import chalk from 'chalk';
13
- import { getParentChain, readArtifact, readArtifactRaw, updateArtifact, } from '../services/artifact-service.js';
14
- import { logger } from '../utils/logger.js';
15
- import { createAgent } from './agent-factory.js';
16
- import { composeImplementationPrompt } from './prompt-composer.js';
17
- import { findSubtasks, formatSubtaskList, getNextPending, parseTaskMarkdown, } from './task-parser.js';
18
- export async function executeImplementation(projectDir, config, taskId, opts) {
19
- // 1. Read the task artifact (supports both TASK-xxx and QT-xxx)
20
- const artifactType = taskId.startsWith('QT-') ? 'quick' : 'task';
21
- const taskData = await readArtifact(projectDir, config, artifactType, taskId);
22
- if (!taskData) {
23
- logger.error(`Task list ${taskId} not found.`);
24
- process.exit(1);
25
- }
26
- logger.heading(`Implement: ${taskId}`);
27
- // 2. Parse subtasks
28
- const allSubtasks = parseTaskMarkdown(taskData.content);
29
- if (allSubtasks.length === 0) {
30
- logger.warn('No subtasks found in this task list.');
31
- logger.info('Task list content:');
32
- console.log(taskData.content);
33
- return;
34
- }
35
- // 3. Resolve target subtask(s)
36
- let targetSubtasks = allSubtasks;
37
- if (opts.next) {
38
- const next = getNextPending(allSubtasks);
39
- if (!next) {
40
- logger.success('All subtasks are completed!');
41
- return;
42
- }
43
- targetSubtasks = [next];
44
- logger.info(`Next pending: ${next.id} ${next.title}`);
45
- }
46
- else if (opts.subtask) {
47
- const matches = findSubtasks(allSubtasks, opts.subtask);
48
- if (matches.length === 0) {
49
- logger.error(`No subtask matching "${opts.subtask}" found.`);
50
- logger.dim('Available subtasks:');
51
- console.log(formatSubtaskList(allSubtasks));
52
- return;
53
- }
54
- targetSubtasks = matches;
55
- logger.info(`Matched ${matches.length} subtask(s):`);
56
- for (const m of matches) {
57
- logger.dim(` ${m.id} ${m.title}`);
58
- }
59
- }
60
- else {
61
- // Implementing all subtasks
62
- logger.info(`Implementing all ${allSubtasks.length} subtasks`);
63
- }
64
- // 4. Gather parent chain context
65
- logger.info('Preparing implementation context...');
66
- const parents = await getParentChain(projectDir, config, artifactType, taskId);
67
- logger.success(`Read ${taskId} (${allSubtasks.length} subtasks)`);
68
- let storyContent;
69
- let featureContent;
70
- let epicContent;
71
- const storyId = taskData.data.storyId;
72
- if (storyId) {
73
- storyContent = (await readArtifactRaw(projectDir, config, 'story', storyId)) || undefined;
74
- if (storyContent)
75
- logger.success(`Read parent story (${storyId})`);
76
- }
77
- if (parents.feature) {
78
- const featureId = parents.story?.data?.featureId;
79
- if (featureId) {
80
- featureContent =
81
- (await readArtifactRaw(projectDir, config, 'feature', featureId)) || undefined;
82
- if (featureContent)
83
- logger.success(`Read parent feature (${featureId})`);
84
- }
85
- }
86
- if (parents.epic) {
87
- const epicId = parents.feature?.data?.epicId;
88
- if (epicId) {
89
- epicContent = (await readArtifactRaw(projectDir, config, 'epic', epicId)) || undefined;
90
- if (epicContent)
91
- logger.success(`Read parent epic (${epicId})`);
92
- }
93
- }
94
- // 5. Build codebase context
95
- let codebaseContext;
96
- try {
97
- const { buildCodebaseContext, formatCodebaseContext, extractKeywords } = await import('../ai/codebase/index.js');
98
- const textToAnalyze = [taskData.content, storyContent || '', featureContent || ''].join(' ');
99
- const keywords = extractKeywords(textToAnalyze);
100
- const ctx = await buildCodebaseContext(projectDir, keywords);
101
- codebaseContext = formatCodebaseContext(ctx);
102
- const stackInfo = ctx.techStack
103
- ? ` — ${ctx.techStack.language}${ctx.techStack.framework ? ` + ${ctx.techStack.framework}` : ''}`
104
- : '';
105
- logger.success(`Scanned codebase${stackInfo}`);
106
- }
107
- catch {
108
- // Codebase scanning is best-effort
109
- }
110
- // 6. Compose prompt
111
- const prompt = composeImplementationPrompt({
112
- taskId,
113
- taskTitle: taskData.data.title || taskId,
114
- taskContent: taskData.content,
115
- targetSubtasks,
116
- allSubtasks,
117
- storyContent,
118
- featureContent,
119
- epicContent,
120
- codebaseContext,
121
- });
122
- // 7. Handle dry run
123
- if (opts.dryRun) {
124
- logger.heading('Dry Run — Composed Prompt:');
125
- console.log(chalk.dim('━'.repeat(60)));
126
- console.log(prompt);
127
- console.log(chalk.dim('━'.repeat(60)));
128
- logger.dim(`Prompt length: ${prompt.length} chars (~${Math.ceil(prompt.length / 4)} tokens)`);
129
- return;
130
- }
131
- // 8. Resolve and launch coding agent
132
- const agentName = (opts.agent || config.defaultAgent || 'claude');
133
- const agent = await createAgent(agentName);
134
- const available = await agent.isAvailable();
135
- if (!available) {
136
- logger.error(`Coding agent "${agentName}" is not available on this machine.`);
137
- logger.dim(`Make sure the "${agentName}" CLI is installed and in your PATH.`);
138
- logger.dim('');
139
- logger.dim('Install instructions:');
140
- logger.dim(' Claude: npm install -g @anthropic-ai/claude-code');
141
- logger.dim(' Codex: npm install -g @openai/codex');
142
- logger.dim(' Cursor: Install from https://cursor.sh');
143
- logger.dim('');
144
- logger.dim('Or use --dry-run to see the prompt without executing.');
145
- return;
146
- }
147
- logger.dim(`Prompt: ${prompt.length.toLocaleString()} chars (~${Math.ceil(prompt.length / 4).toLocaleString()} tokens)`);
148
- logger.heading(`Launching ${agentName}...`);
149
- console.log(chalk.dim('━'.repeat(60)));
150
- const result = await agent.execute(prompt, {
151
- cwd: projectDir,
152
- stream: true,
153
- dryRun: false,
154
- });
155
- console.log(chalk.dim('━'.repeat(60)));
156
- if (result.exitCode === 0) {
157
- // Mark implemented subtasks as done in the task file
158
- await markSubtasksDone(projectDir, config, artifactType, taskId, targetSubtasks);
159
- logger.success(`${agentName} completed successfully.`);
160
- logger.dim('');
161
- logger.dim('If something needs fixing, run:');
162
- logger.dim(' planr task fix "describe the issue"');
163
- logger.dim(' make build 2>&1 | planr task fix');
164
- }
165
- else {
166
- logger.warn(`${agentName} exited with code ${result.exitCode}.`);
167
- }
168
- }
169
- // ---------------------------------------------------------------------------
170
- // Mark subtasks as done
171
- // ---------------------------------------------------------------------------
172
- async function markSubtasksDone(projectDir, config, artifactType, taskId, subtasks) {
173
- const raw = await readArtifactRaw(projectDir, config, artifactType, taskId);
174
- if (!raw)
175
- return;
176
- const ids = new Set(subtasks.map((s) => s.id));
177
- let updated = raw;
178
- for (const id of ids) {
179
- // Match: `- [ ] 1.1 Title` (with optional leading whitespace for indented subtasks)
180
- const pattern = new RegExp(`^(\\s*- )\\[ \\](\\s+${id.replace('.', '\\.')}\\s)`, 'm');
181
- updated = updated.replace(pattern, '$1[x]$2');
182
- }
183
- if (updated !== raw) {
184
- await updateArtifact(projectDir, config, artifactType, taskId, updated);
185
- const count = ids.size;
186
- logger.success(`Marked ${count} subtask${count > 1 ? 's' : ''} as done in ${taskId}`);
187
- }
188
- }
189
- /**
190
- * Send a follow-up message to the coding agent, continuing the
191
- * previous session. This is the feedback loop for fixing issues
192
- * found after implementation.
193
- */
194
- export async function executeFollowUp(projectDir, config, message, opts) {
195
- logger.heading('Fix / Follow-up');
196
- // Compose a focused fix prompt
197
- const prompt = composeFixPrompt(message);
198
- logger.dim(`Prompt: ${prompt.length.toLocaleString()} chars (~${Math.ceil(prompt.length / 4).toLocaleString()} tokens)`);
199
- const agentName = (opts.agent || config.defaultAgent || 'claude');
200
- const agent = await createAgent(agentName);
201
- const available = await agent.isAvailable();
202
- if (!available) {
203
- logger.error(`Coding agent "${agentName}" is not available.`);
204
- return;
205
- }
206
- logger.heading(`Continuing ${agentName} session...`);
207
- console.log(chalk.dim('━'.repeat(60)));
208
- const result = await agent.execute(prompt, {
209
- cwd: projectDir,
210
- stream: true,
211
- dryRun: false,
212
- continueSession: true,
213
- });
214
- console.log(chalk.dim('━'.repeat(60)));
215
- if (result.exitCode === 0) {
216
- logger.success(`${agentName} completed fix successfully.`);
217
- logger.dim('');
218
- logger.dim('Still broken? Run planr task fix again with the new error.');
219
- }
220
- else {
221
- logger.warn(`${agentName} exited with code ${result.exitCode}.`);
222
- }
223
- }
224
- /**
225
- * Compose a follow-up prompt that includes the error/issue context
226
- * and clear instructions to fix the previously implemented code.
227
- */
228
- function composeFixPrompt(userMessage) {
229
- const sections = [];
230
- sections.push('# Fix Required\n');
231
- sections.push('The previously implemented code has an issue that needs fixing.\n');
232
- // Detect if the message looks like error output (long, has stack traces, etc.)
233
- const isErrorOutput = userMessage.length > 200 ||
234
- userMessage.includes('Error:') ||
235
- userMessage.includes('error:') ||
236
- userMessage.includes('FAIL') ||
237
- userMessage.includes('exit code');
238
- if (isErrorOutput) {
239
- sections.push('## Error Output\n');
240
- sections.push('```');
241
- sections.push(userMessage.trim());
242
- sections.push('```');
243
- }
244
- else {
245
- sections.push('## Issue Description\n');
246
- sections.push(userMessage.trim());
247
- }
248
- sections.push('\n## Instructions\n');
249
- sections.push('1. Analyze the error/issue above.');
250
- sections.push('2. Identify the root cause in the code you previously created.');
251
- sections.push('3. Fix ONLY what is needed — do not rewrite unrelated code.');
252
- sections.push('4. Verify the fix addresses the reported issue.');
253
- sections.push('5. If the error involves missing dependencies, use compatible versions.');
254
- return sections.join('\n');
255
- }
256
- //# sourceMappingURL=implementation-bridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"implementation-bridge.js","sourceRoot":"","sources":["../../src/agents/implementation-bridge.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- /**
2
- * Progress display for coding agent execution.
3
- *
4
- * Provides a dynamic spinner with rotating messages, elapsed time,
5
- * and real-time activity updates parsed from Claude's stream-json events.
6
- * Extracted as a shared module so any agent adapter can reuse it.
7
- */
8
- export interface ProgressSpinner {
9
- /** Update the spinner with a specific tool-activity message */
10
- setActivity(msg: string): void;
11
- /** Stop the spinner and clear the line */
12
- stop(): void;
13
- }
14
- export declare function formatElapsed(seconds: number): string;
15
- /**
16
- * Create a dynamic progress spinner that:
17
- * - Rotates through varied waiting messages every 8 seconds
18
- * - Switches to a specific activity when `setActivity()` is called
19
- * - Always shows elapsed time
20
- */
21
- export declare function createProgressSpinner(): ProgressSpinner;
22
- /** Minimal shape of the Claude stream-json events we need */
23
- export interface StreamEvent {
24
- type: string;
25
- message?: {
26
- content?: Array<{
27
- type: string;
28
- name?: string;
29
- input?: Record<string, unknown>;
30
- }>;
31
- };
32
- result?: string;
33
- }
34
- /**
35
- * Parse a stream-json event into a human-readable activity description.
36
- * Returns `null` for events that don't represent a notable tool action.
37
- */
38
- export declare function describeActivity(event: StreamEvent): string | null;
39
- /** Minimal shape of Codex exec --json events */
40
- export interface CodexEvent {
41
- type: string;
42
- item?: {
43
- id?: string;
44
- type?: string;
45
- text?: string;
46
- command?: string;
47
- aggregated_output?: string;
48
- exit_code?: number | null;
49
- status?: string;
50
- };
51
- usage?: {
52
- input_tokens?: number;
53
- cached_input_tokens?: number;
54
- output_tokens?: number;
55
- };
56
- }
57
- /**
58
- * Parse a Codex JSONL event into a human-readable activity description.
59
- * Returns `null` for events that don't represent a notable action.
60
- */
61
- export declare function describeCodexActivity(event: CodexEvent): string | null;
62
- //# sourceMappingURL=progress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/agents/progress.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+BH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,0CAA0C;IAC1C,IAAI,IAAI,IAAI,CAAC;CACd;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAwCvD;AAMD,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACjC,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CA8BlE;AAaD,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE;QACL,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CA6BtE"}
@@ -1,155 +0,0 @@
1
- /**
2
- * Progress display for coding agent execution.
3
- *
4
- * Provides a dynamic spinner with rotating messages, elapsed time,
5
- * and real-time activity updates parsed from Claude's stream-json events.
6
- * Extracted as a shared module so any agent adapter can reuse it.
7
- */
8
- import chalk from 'chalk';
9
- // ---------------------------------------------------------------------------
10
- // Spinner
11
- // ---------------------------------------------------------------------------
12
- const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
13
- const WAITING_MESSAGES = [
14
- 'Warming up...',
15
- 'Analyzing the task...',
16
- 'Planning implementation...',
17
- 'Thinking about the approach...',
18
- 'Working on it...',
19
- 'Crafting the solution...',
20
- 'Reviewing the codebase...',
21
- 'Preparing changes...',
22
- 'Designing the architecture...',
23
- 'Almost ready...',
24
- 'Putting it all together...',
25
- 'Fine-tuning the details...',
26
- 'Working through the requirements...',
27
- 'Building the implementation...',
28
- 'Connecting the pieces...',
29
- ];
30
- /** How often to rotate the generic waiting message (ms) */
31
- const MESSAGE_ROTATE_MS = 8000;
32
- export function formatElapsed(seconds) {
33
- if (seconds < 60)
34
- return `${seconds}s`;
35
- const m = Math.floor(seconds / 60);
36
- const s = seconds % 60;
37
- return `${m}m${s > 0 ? ` ${s}s` : ''}`;
38
- }
39
- /**
40
- * Create a dynamic progress spinner that:
41
- * - Rotates through varied waiting messages every 8 seconds
42
- * - Switches to a specific activity when `setActivity()` is called
43
- * - Always shows elapsed time
44
- */
45
- export function createProgressSpinner() {
46
- let frameIndex = 0;
47
- let messageIndex = 0;
48
- let currentActivity = '';
49
- let lastMessageChange = Date.now();
50
- const startTime = Date.now();
51
- const write = () => {
52
- const frame = chalk.cyan(SPINNER_FRAMES[frameIndex % SPINNER_FRAMES.length]);
53
- const elapsed = Math.floor((Date.now() - startTime) / 1000);
54
- const timeStr = chalk.dim(`(${formatElapsed(elapsed)})`);
55
- let msg;
56
- if (currentActivity) {
57
- msg = currentActivity;
58
- }
59
- else {
60
- const now = Date.now();
61
- if (now - lastMessageChange > MESSAGE_ROTATE_MS) {
62
- messageIndex = (messageIndex + 1) % WAITING_MESSAGES.length;
63
- lastMessageChange = now;
64
- }
65
- msg = WAITING_MESSAGES[messageIndex];
66
- }
67
- process.stderr.write(`\r\x1b[K${frame} ${chalk.dim(msg)} ${timeStr}`);
68
- frameIndex++;
69
- };
70
- write();
71
- const interval = setInterval(write, 80);
72
- return {
73
- setActivity(msg) {
74
- currentActivity = msg;
75
- },
76
- stop() {
77
- clearInterval(interval);
78
- process.stderr.write('\r\x1b[K');
79
- },
80
- };
81
- }
82
- /**
83
- * Parse a stream-json event into a human-readable activity description.
84
- * Returns `null` for events that don't represent a notable tool action.
85
- */
86
- export function describeActivity(event) {
87
- if (event.type !== 'assistant' || !event.message?.content)
88
- return null;
89
- for (const block of event.message.content) {
90
- if (block.type !== 'tool_use')
91
- continue;
92
- const input = block.input;
93
- switch (block.name) {
94
- case 'Write':
95
- return `Creating ${shortPath(input?.file_path)}`;
96
- case 'Edit':
97
- return `Editing ${shortPath(input?.file_path)}`;
98
- case 'Read':
99
- return `Reading ${shortPath(input?.file_path)}`;
100
- case 'Bash': {
101
- const cmd = input?.command || '';
102
- const firstLine = cmd.split('\n')[0] || 'command';
103
- const display = firstLine.length > 80 ? `${firstLine.slice(0, 77)}...` : firstLine;
104
- return `$ ${display}`;
105
- }
106
- case 'Glob':
107
- return 'Searching files...';
108
- case 'Grep':
109
- return 'Searching code...';
110
- default:
111
- return `Using ${block.name}...`;
112
- }
113
- }
114
- return null;
115
- }
116
- /** Shorten a file path to its last two segments for display */
117
- function shortPath(filePath) {
118
- if (!filePath)
119
- return 'file';
120
- const parts = filePath.split('/');
121
- return parts.length > 2 ? parts.slice(-2).join('/') : filePath;
122
- }
123
- /**
124
- * Parse a Codex JSONL event into a human-readable activity description.
125
- * Returns `null` for events that don't represent a notable action.
126
- */
127
- export function describeCodexActivity(event) {
128
- if (!event.item)
129
- return null;
130
- if (event.type === 'item.started' && event.item.type === 'command_execution') {
131
- const cmd = event.item.command || '';
132
- // Strip the shell wrapper (e.g., `/bin/zsh -lc "..."`)
133
- const inner = cmd.replace(/^\/bin\/\w+\s+-\w+\s+/, '').replace(/^["']|["']$/g, '');
134
- const firstLine = inner.split('\n')[0] || 'command';
135
- const display = firstLine.length > 80 ? `${firstLine.slice(0, 77)}...` : firstLine;
136
- return `$ ${display}`;
137
- }
138
- if (event.type === 'item.completed' && event.item.type === 'command_execution') {
139
- const code = event.item.exit_code;
140
- if (code !== null && code !== undefined && code !== 0) {
141
- return `Command exited with code ${code}`;
142
- }
143
- return null; // Successful command completion — already shown at start
144
- }
145
- if (event.type === 'item.completed' && event.item.type === 'agent_message') {
146
- const text = event.item.text || '';
147
- // Show a brief preview of what the agent is saying
148
- const firstLine = text.split('\n')[0] || '';
149
- if (firstLine.length > 80)
150
- return `${firstLine.slice(0, 77)}...`;
151
- return firstLine || null;
152
- }
153
- return null;
154
- }
155
- //# sourceMappingURL=progress.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/agents/progress.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- /**
2
- * Composes rich implementation prompts for coding agents.
3
- *
4
- * Assembles a structured prompt from:
5
- * 1. Target subtask details
6
- * 2. Full task list context (what's done, what's next)
7
- * 3. Parent story and feature context
8
- * 4. Codebase context (tech stack, folder tree, related files)
9
- *
10
- * The output is a detailed markdown prompt that any coding agent
11
- * (Claude, Cursor, Codex) can understand and act on.
12
- */
13
- import type { ParsedSubtask } from './task-parser.js';
14
- export interface ImplementationContext {
15
- taskId: string;
16
- taskTitle: string;
17
- taskContent: string;
18
- targetSubtasks: ParsedSubtask[];
19
- allSubtasks: ParsedSubtask[];
20
- storyContent?: string;
21
- featureContent?: string;
22
- epicContent?: string;
23
- codebaseContext?: string;
24
- }
25
- /**
26
- * Compose a complete implementation prompt from gathered context.
27
- * Returns a markdown string ready to be sent to a coding agent.
28
- */
29
- export declare function composeImplementationPrompt(ctx: ImplementationContext): string;
30
- //# sourceMappingURL=prompt-composer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-composer.d.ts","sourceRoot":"","sources":["../../src/agents/prompt-composer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAmE9E"}
@@ -1,81 +0,0 @@
1
- /**
2
- * Composes rich implementation prompts for coding agents.
3
- *
4
- * Assembles a structured prompt from:
5
- * 1. Target subtask details
6
- * 2. Full task list context (what's done, what's next)
7
- * 3. Parent story and feature context
8
- * 4. Codebase context (tech stack, folder tree, related files)
9
- *
10
- * The output is a detailed markdown prompt that any coding agent
11
- * (Claude, Cursor, Codex) can understand and act on.
12
- */
13
- import { formatSubtaskList } from './task-parser.js';
14
- /**
15
- * Compose a complete implementation prompt from gathered context.
16
- * Returns a markdown string ready to be sent to a coding agent.
17
- */
18
- export function composeImplementationPrompt(ctx) {
19
- const sections = [];
20
- // Header
21
- sections.push(`# Implementation Task: ${ctx.taskId}`);
22
- // Target subtask(s)
23
- if (ctx.targetSubtasks.length > 0) {
24
- sections.push('## Target Subtask(s)\n');
25
- sections.push('Implement ONLY the following subtask(s):');
26
- sections.push('');
27
- for (const st of ctx.targetSubtasks) {
28
- sections.push(`- **${st.id}**: ${st.title}`);
29
- }
30
- // Parent group context
31
- const parentId = ctx.targetSubtasks[0]?.parentId;
32
- if (parentId) {
33
- const parentGroup = ctx.allSubtasks.find((t) => t.id === parentId);
34
- if (parentGroup) {
35
- sections.push(`\nParent task group: **${parentGroup.id}** ${parentGroup.title}`);
36
- }
37
- }
38
- }
39
- // Full task list (shows what's done and what's pending)
40
- sections.push('\n## Full Task List\n');
41
- sections.push('```');
42
- const _targetIds = new Set(ctx.targetSubtasks.map((t) => t.id));
43
- const firstTargetId = ctx.targetSubtasks[0]?.id;
44
- sections.push(formatSubtaskList(ctx.allSubtasks, firstTargetId));
45
- sections.push('```');
46
- // Parent story context
47
- if (ctx.storyContent) {
48
- sections.push('\n## User Story Context\n');
49
- sections.push(truncate(ctx.storyContent, 3000));
50
- }
51
- // Parent feature context
52
- if (ctx.featureContent) {
53
- sections.push('\n## Feature Context\n');
54
- sections.push(truncate(ctx.featureContent, 2000));
55
- }
56
- // Parent epic context (brief)
57
- if (ctx.epicContent) {
58
- sections.push('\n## Epic Context (summary)\n');
59
- sections.push(truncate(ctx.epicContent, 1000));
60
- }
61
- // Codebase context
62
- if (ctx.codebaseContext) {
63
- sections.push('\n## Codebase Context\n');
64
- sections.push(ctx.codebaseContext);
65
- }
66
- // Instructions
67
- sections.push('\n## Instructions\n');
68
- sections.push('1. Implement ONLY the target subtask(s) listed above.');
69
- sections.push('2. Follow existing code patterns and conventions in the codebase.');
70
- sections.push('3. Write clean, well-documented code.');
71
- sections.push('4. Include appropriate error handling.');
72
- sections.push('5. Add or update tests for the changes.');
73
- sections.push('6. Do NOT modify code unrelated to the target subtask(s).');
74
- return sections.join('\n');
75
- }
76
- function truncate(text, maxChars) {
77
- if (text.length <= maxChars)
78
- return text;
79
- return `${text.slice(0, maxChars)}\n\n... (truncated)`;
80
- }
81
- //# sourceMappingURL=prompt-composer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-composer.js","sourceRoot":"","sources":["../../src/agents/prompt-composer.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Coding agent abstraction types.
3
- *
4
- * Each supported coding agent (Claude CLI, Cursor, Codex) implements
5
- * the CodingAgent interface for unified task implementation dispatch.
6
- */
7
- export interface AgentOptions {
8
- cwd: string;
9
- stream: boolean;
10
- dryRun: boolean;
11
- /** Continue a previous session instead of starting fresh */
12
- continueSession?: boolean;
13
- }
14
- export interface AgentResult {
15
- output: string;
16
- exitCode: number;
17
- }
18
- export interface CodingAgent {
19
- readonly name: string;
20
- /** Check if the coding agent CLI/tool is available on this machine. */
21
- isAvailable(): Promise<boolean>;
22
- /** Execute an implementation prompt via the coding agent. */
23
- execute(prompt: string, options: AgentOptions): Promise<AgentResult>;
24
- }
25
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC,6DAA6D;IAC7D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACtE"}