openplanr 0.3.0 → 0.4.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 (63) hide show
  1. package/dist/agents/cursor-agent.d.ts.map +1 -1
  2. package/dist/agents/cursor-agent.js +2 -2
  3. package/dist/agents/cursor-agent.js.map +1 -1
  4. package/dist/agents/implementation-bridge.d.ts.map +1 -1
  5. package/dist/agents/implementation-bridge.js +6 -8
  6. package/dist/agents/implementation-bridge.js.map +1 -1
  7. package/dist/ai/codebase/file-reader.js +7 -7
  8. package/dist/ai/codebase/file-reader.js.map +1 -1
  9. package/dist/ai/codebase/tree-generator.js +4 -4
  10. package/dist/ai/codebase/tree-generator.js.map +1 -1
  11. package/dist/ai/prompts/prompt-builder.d.ts +4 -1
  12. package/dist/ai/prompts/prompt-builder.d.ts.map +1 -1
  13. package/dist/ai/prompts/prompt-builder.js +6 -2
  14. package/dist/ai/prompts/prompt-builder.js.map +1 -1
  15. package/dist/ai/prompts/system-prompts.d.ts +1 -1
  16. package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
  17. package/dist/ai/prompts/system-prompts.js +8 -2
  18. package/dist/ai/prompts/system-prompts.js.map +1 -1
  19. package/dist/ai/providers/anthropic-provider.d.ts +3 -1
  20. package/dist/ai/providers/anthropic-provider.d.ts.map +1 -1
  21. package/dist/ai/providers/anthropic-provider.js +13 -0
  22. package/dist/ai/providers/anthropic-provider.js.map +1 -1
  23. package/dist/ai/providers/openai-provider.d.ts +3 -1
  24. package/dist/ai/providers/openai-provider.d.ts.map +1 -1
  25. package/dist/ai/providers/openai-provider.js +18 -0
  26. package/dist/ai/providers/openai-provider.js.map +1 -1
  27. package/dist/ai/schemas/ai-response-schemas.d.ts +28 -328
  28. package/dist/ai/schemas/ai-response-schemas.d.ts.map +1 -1
  29. package/dist/ai/schemas/ai-response-schemas.js +1 -1
  30. package/dist/ai/schemas/ai-response-schemas.js.map +1 -1
  31. package/dist/ai/types.d.ts +10 -0
  32. package/dist/ai/types.d.ts.map +1 -1
  33. package/dist/ai/types.js.map +1 -1
  34. package/dist/cli/commands/epic.js +2 -2
  35. package/dist/cli/commands/epic.js.map +1 -1
  36. package/dist/cli/commands/feature.js +1 -1
  37. package/dist/cli/commands/feature.js.map +1 -1
  38. package/dist/cli/commands/plan.js +4 -4
  39. package/dist/cli/commands/plan.js.map +1 -1
  40. package/dist/cli/commands/refine.d.ts +1 -0
  41. package/dist/cli/commands/refine.d.ts.map +1 -1
  42. package/dist/cli/commands/refine.js +139 -54
  43. package/dist/cli/commands/refine.js.map +1 -1
  44. package/dist/cli/commands/story.js +1 -1
  45. package/dist/cli/commands/story.js.map +1 -1
  46. package/dist/cli/commands/task.js +2 -2
  47. package/dist/cli/commands/task.js.map +1 -1
  48. package/dist/models/schema.d.ts +39 -95
  49. package/dist/models/schema.d.ts.map +1 -1
  50. package/dist/services/ai-service.d.ts +10 -3
  51. package/dist/services/ai-service.d.ts.map +1 -1
  52. package/dist/services/ai-service.js +27 -23
  53. package/dist/services/ai-service.js.map +1 -1
  54. package/dist/services/credentials-service.d.ts.map +1 -1
  55. package/dist/services/credentials-service.js +9 -6
  56. package/dist/services/credentials-service.js.map +1 -1
  57. package/dist/utils/fs.js +8 -8
  58. package/dist/utils/fs.js.map +1 -1
  59. package/dist/utils/logger.d.ts +9 -0
  60. package/dist/utils/logger.d.ts.map +1 -1
  61. package/dist/utils/logger.js +32 -0
  62. package/dist/utils/logger.js.map +1 -1
  63. package/package.json +9 -12
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-agent.d.ts","sourceRoot":"","sources":["../../src/agents/cursor-agent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzE,qBAAa,WAAY,YAAW,WAAW;IAC7C,QAAQ,CAAC,IAAI,YAAY;IAEnB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAO/B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CA2B3E"}
1
+ {"version":3,"file":"cursor-agent.d.ts","sourceRoot":"","sources":["../../src/agents/cursor-agent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzE,qBAAa,WAAY,YAAW,WAAW;IAC7C,QAAQ,CAAC,IAAI,YAAY;IAEnB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAM/B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CA2B3E"}
@@ -5,14 +5,14 @@
5
5
  * prompt to a file that Cursor can read from its prompt panel.
6
6
  */
7
7
  import path from 'node:path';
8
+ import { access } from 'node:fs/promises';
8
9
  import { writeFile, ensureDir } from '../utils/fs.js';
9
10
  export class CursorAgent {
10
11
  name = 'cursor';
11
12
  async isAvailable() {
12
13
  // Cursor is available if the project has a .cursor directory
13
14
  // or the cursor binary exists
14
- const fse = await import('fs-extra');
15
- return fse.pathExists(path.join(process.cwd(), '.cursor'));
15
+ return access(path.join(process.cwd(), '.cursor')).then(() => true).catch(() => false);
16
16
  }
17
17
  async execute(prompt, options) {
18
18
  const promptDir = path.join(options.cwd, '.cursor', 'prompts');
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-agent.js","sourceRoot":"","sources":["../../src/agents/cursor-agent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,QAAQ,CAAC;IAEzB,KAAK,CAAC,WAAW;QACf,6DAA6D;QAC7D,8BAA8B;QAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACrC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAqB;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QAE3B,2CAA2C;QAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhD,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG;YACb,mCAAmC,QAAQ,EAAE;YAC7C,EAAE;YACF,yBAAyB;YACzB,kCAAkC;YAClC,6CAA6C;YAC7C,0DAA0D;YAC1D,0DAA0D;SAC3D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACjC,CAAC;CACF"}
1
+ {"version":3,"file":"cursor-agent.js","sourceRoot":"","sources":["../../src/agents/cursor-agent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,QAAQ,CAAC;IAEzB,KAAK,CAAC,WAAW;QACf,6DAA6D;QAC7D,8BAA8B;QAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAqB;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QAE3B,2CAA2C;QAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhD,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG;YACb,mCAAmC,QAAQ,EAAE;YAC7C,EAAE;YACF,yBAAyB;YACzB,kCAAkC;YAClC,6CAA6C;YAC7C,0DAA0D;YAC1D,0DAA0D;SAC3D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACjC,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"implementation-bridge.d.ts","sourceRoot":"","sources":["../../src/agents/implementation-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,oBAAoB,CAAC;AAY3E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Kf"}
1
+ {"version":3,"file":"implementation-bridge.d.ts","sourceRoot":"","sources":["../../src/agents/implementation-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,oBAAoB,CAAC;AAY3E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CA0Kf"}
@@ -62,8 +62,7 @@ export async function executeImplementation(projectDir, config, taskId, opts) {
62
62
  logger.info(`Implementing all ${allSubtasks.length} subtasks`);
63
63
  }
64
64
  // 4. Gather parent chain context
65
- const ora = (await import('ora')).default;
66
- const spinner = ora('Preparing implementation context...').start();
65
+ logger.info('Preparing implementation context...');
67
66
  const parents = await getParentChain(projectDir, config, 'task', taskId);
68
67
  let storyContent;
69
68
  let featureContent;
@@ -71,24 +70,24 @@ export async function executeImplementation(projectDir, config, taskId, opts) {
71
70
  const storyId = taskData.data.storyId;
72
71
  if (storyId) {
73
72
  storyContent = (await readArtifactRaw(projectDir, config, 'story', storyId)) || undefined;
74
- spinner.text = `Read parent story ${storyId}`;
73
+ logger.debug(`Read parent story ${storyId}`);
75
74
  }
76
75
  if (parents.feature) {
77
76
  const featureId = parents.story?.data?.featureId;
78
77
  if (featureId) {
79
78
  featureContent = (await readArtifactRaw(projectDir, config, 'feature', featureId)) || undefined;
80
- spinner.text = `Read parent feature ${featureId}`;
79
+ logger.debug(`Read parent feature ${featureId}`);
81
80
  }
82
81
  }
83
82
  if (parents.epic) {
84
83
  const epicId = parents.feature?.data?.epicId;
85
84
  if (epicId) {
86
85
  epicContent = (await readArtifactRaw(projectDir, config, 'epic', epicId)) || undefined;
87
- spinner.text = `Read parent epic ${epicId}`;
86
+ logger.debug(`Read parent epic ${epicId}`);
88
87
  }
89
88
  }
90
89
  // 5. Build codebase context
91
- spinner.text = 'Scanning codebase...';
90
+ logger.debug('Scanning codebase...');
92
91
  let codebaseContext;
93
92
  try {
94
93
  const { buildCodebaseContext, formatCodebaseContext, extractKeywords } = await import('../ai/codebase/index.js');
@@ -101,13 +100,12 @@ export async function executeImplementation(projectDir, config, taskId, opts) {
101
100
  const ctx = await buildCodebaseContext(projectDir, keywords);
102
101
  codebaseContext = formatCodebaseContext(ctx);
103
102
  if (ctx.techStack) {
104
- spinner.text = `Stack: ${ctx.techStack.language}${ctx.techStack.framework ? ' + ' + ctx.techStack.framework : ''}`;
103
+ logger.debug(`Stack: ${ctx.techStack.language}${ctx.techStack.framework ? ' + ' + ctx.techStack.framework : ''}`);
105
104
  }
106
105
  }
107
106
  catch {
108
107
  // Codebase scanning is best-effort
109
108
  }
110
- spinner.stop();
111
109
  // Show context summary
112
110
  logger.success(`Read ${taskId} (${allSubtasks.length} subtasks)`);
113
111
  if (storyContent)
@@ -1 +1 @@
1
- {"version":3,"file":"implementation-bridge.js","sourceRoot":"","sources":["../../src/agents/implementation-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EACL,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAkB,EAClB,MAAuB,EACvB,MAAc,EACd,IAAsB;IAEtB,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,aAAa,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1E,MAAM,CAAC,OAAO,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;IAEvC,oBAAoB;IACpB,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAExD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,IAAI,cAAc,GAAG,WAAW,CAAC;IAEjC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,cAAc,GAAG,OAAO,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,cAAc,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,4BAA4B;QAC5B,MAAM,CAAC,IAAI,CAAC,oBAAoB,WAAW,CAAC,MAAM,WAAW,CAAC,CAAC;IACjE,CAAC;IAED,iCAAiC;IACjC,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,qCAAqC,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzE,IAAI,YAAgC,CAAC;IACrC,IAAI,cAAkC,CAAC;IACvC,IAAI,WAA+B,CAAC;IAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAA6B,CAAC;IAC5D,IAAI,OAAO,EAAE,CAAC;QACZ,YAAY,GAAG,CAAC,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC;QAC1F,OAAO,CAAC,IAAI,GAAG,qBAAqB,OAAO,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAA+B,CAAC;QACvE,IAAI,SAAS,EAAE,CAAC;YACd,cAAc,GAAG,CAAC,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC;YAChG,OAAO,CAAC,IAAI,GAAG,uBAAuB,SAAS,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,MAA4B,CAAC;QACnE,IAAI,MAAM,EAAE,CAAC;YACX,WAAW,GAAG,CAAC,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC;YACvF,OAAO,CAAC,IAAI,GAAG,oBAAoB,MAAM,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACtC,IAAI,eAAmC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,eAAe,EAAE,GACpE,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAE1C,MAAM,aAAa,GAAG;YACpB,QAAQ,CAAC,OAAO;YAChB,YAAY,IAAI,EAAE;YAClB,cAAc,IAAI,EAAE;SACrB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC7D,eAAe,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAE7C,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,GAAG,UAAU,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACrH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,uBAAuB;IACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,MAAM,KAAK,WAAW,CAAC,MAAM,YAAY,CAAC,CAAC;IAClE,IAAI,YAAY;QAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtD,IAAI,cAAc;QAAE,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC1D,IAAI,WAAW;QAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpD,IAAI,eAAe;QAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAExD,oBAAoB;IACpB,MAAM,MAAM,GAAG,2BAA2B,CAAC;QACzC,MAAM;QACN,SAAS,EAAG,QAAQ,CAAC,IAAI,CAAC,KAAgB,IAAI,MAAM;QACpD,WAAW,EAAE,QAAQ,CAAC,OAAO;QAC7B,cAAc;QACd,WAAW;QACX,YAAY;QACZ,cAAc;QACd,WAAW;QACX,eAAe;KAChB,CAAC,CAAC;IAEH,oBAAoB;IACpB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,MAAM,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9F,OAAO;IACT,CAAC;IAED,qCAAqC;IACrC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,YAAY,IAAI,QAAQ,CAAoB,CAAC;IACrF,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,iBAAiB,SAAS,qCAAqC,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,CAAC,kBAAkB,SAAS,sCAAsC,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,aAAa,SAAS,KAAK,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;QACzC,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,0BAA0B,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,qBAAqB,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"implementation-bridge.js","sourceRoot":"","sources":["../../src/agents/implementation-bridge.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * with relevant code context. Files larger than MAX_FILE_SIZE are skipped.
6
6
  */
7
7
  import path from 'node:path';
8
- import fse from 'fs-extra';
8
+ import { readFile, readdir, stat } from 'node:fs/promises';
9
9
  const MAX_FILE_SIZE = 50_000; // 50KB per file
10
10
  const MAX_SNIPPET_CHARS = 3_000; // Truncate snippets to this length
11
11
  const SOURCE_EXTENSIONS = new Set([
@@ -28,10 +28,10 @@ const IGNORED_DIRS = new Set([
28
28
  export async function readProjectFile(projectDir, relativePath) {
29
29
  const fullPath = path.join(projectDir, relativePath);
30
30
  try {
31
- const stat = await fse.stat(fullPath);
32
- if (stat.size > MAX_FILE_SIZE)
31
+ const fileStat = await stat(fullPath);
32
+ if (fileStat.size > MAX_FILE_SIZE)
33
33
  return null;
34
- return await fse.readFile(fullPath, 'utf-8');
34
+ return await readFile(fullPath, 'utf-8');
35
35
  }
36
36
  catch {
37
37
  return null;
@@ -54,7 +54,7 @@ async function searchDir(rootDir, currentDir, keywords, matches, maxResults, dep
54
54
  return;
55
55
  let entries;
56
56
  try {
57
- entries = await fse.readdir(currentDir);
57
+ entries = await readdir(currentDir);
58
58
  }
59
59
  catch {
60
60
  return;
@@ -66,8 +66,8 @@ async function searchDir(rootDir, currentDir, keywords, matches, maxResults, dep
66
66
  continue;
67
67
  const fullPath = path.join(currentDir, entry);
68
68
  try {
69
- const stat = await fse.stat(fullPath);
70
- if (stat.isDirectory()) {
69
+ const entryStat = await stat(fullPath);
70
+ if (entryStat.isDirectory()) {
71
71
  await searchDir(rootDir, fullPath, keywords, matches, maxResults, depth + 1);
72
72
  }
73
73
  else if (isSourceFile(entry)) {
@@ -1 +1 @@
1
- {"version":3,"file":"file-reader.js","sourceRoot":"","sources":["../../../src/ai/codebase/file-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-reader.js","sourceRoot":"","sources":["../../../src/ai/codebase/file-reader.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * without reading every file. Ignores common non-source directories.
6
6
  */
7
7
  import path from 'node:path';
8
- import fse from 'fs-extra';
8
+ import { readdir, stat } from 'node:fs/promises';
9
9
  const IGNORED_DIRS = new Set([
10
10
  'node_modules',
11
11
  '.git',
@@ -46,7 +46,7 @@ async function walkDir(dirPath, prefix, maxDepth, currentDepth, lines) {
46
46
  return;
47
47
  let entries;
48
48
  try {
49
- entries = await fse.readdir(dirPath);
49
+ entries = await readdir(dirPath);
50
50
  }
51
51
  catch {
52
52
  return;
@@ -58,8 +58,8 @@ async function walkDir(dirPath, prefix, maxDepth, currentDepth, lines) {
58
58
  for (const entry of filtered) {
59
59
  const fullPath = path.join(dirPath, entry);
60
60
  try {
61
- const stat = await fse.stat(fullPath);
62
- if (stat.isDirectory())
61
+ const entryStat = await stat(fullPath);
62
+ if (entryStat.isDirectory())
63
63
  dirs.push(entry);
64
64
  else
65
65
  files.push(entry);
@@ -1 +1 @@
1
- {"version":3,"file":"tree-generator.js","sourceRoot":"","sources":["../../../src/ai/codebase/tree-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tree-generator.js","sourceRoot":"","sources":["../../../src/ai/codebase/tree-generator.ts"],"names":[],"mappings":"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"}
@@ -38,5 +38,8 @@ export interface TasksPromptInput {
38
38
  };
39
39
  }
40
40
  export declare function buildTasksPrompt(ctx: TasksPromptInput): AIMessage[];
41
- export declare function buildRefinePrompt(artifactContent: string, artifactType: string): AIMessage[];
41
+ export declare function buildRefinePrompt(artifactContent: string, artifactType: string, parentContext?: {
42
+ type: string;
43
+ content: string;
44
+ }): AIMessage[];
42
45
  //# sourceMappingURL=prompt-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/ai/prompts/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,MAAM,EAAO,GAC3B,SAAS,EAAE,CAWb;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,gBAAgB,GAAE,MAAM,EAAO,EAC/B,YAAY,CAAC,EAAE,MAAM,GACpB,SAAS,EAAE,CAeb;AAED,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,eAAe,GAAE,MAAM,EAAO,GAC7B,SAAS,EAAE,CAYb;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACzE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,SAAS,EAAE,CAqDnE;AAED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,GACnB,SAAS,EAAE,CAOb"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/ai/prompts/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,MAAM,EAAO,GAC3B,SAAS,EAAE,CAWb;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,gBAAgB,GAAE,MAAM,EAAO,EAC/B,YAAY,CAAC,EAAE,MAAM,GACpB,SAAS,EAAE,CAeb;AAED,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,eAAe,GAAE,MAAM,EAAO,GAC7B,SAAS,EAAE,CAYb;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACzE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,SAAS,EAAE,CAqDnE;AAED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChD,SAAS,EAAE,CAYb"}
@@ -86,8 +86,12 @@ export function buildTasksPrompt(ctx) {
86
86
  { role: 'user', content: userContent },
87
87
  ];
88
88
  }
89
- export function buildRefinePrompt(artifactContent, artifactType) {
90
- const userContent = `Review and improve this ${artifactType} artifact. The "improvedMarkdown" in your response must preserve the same file format (YAML frontmatter + markdown body) as shown below:\n\n${artifactContent}`;
89
+ export function buildRefinePrompt(artifactContent, artifactType, parentContext) {
90
+ let userContent = `Review and improve this ${artifactType} artifact. The "improvedMarkdown" in your response must preserve the same file format (YAML frontmatter + markdown body) as shown below:\n\n${artifactContent}`;
91
+ if (parentContext) {
92
+ userContent += `\n\n--- Updated Parent ${parentContext.type} (align with this) ---\n${parentContext.content}`;
93
+ userContent += `\n\nIMPORTANT: The parent ${parentContext.type} above was just refined. Ensure this ${artifactType} is aligned with the updated parent — its scope, terminology, requirements, and priorities should be consistent.`;
94
+ }
91
95
  return [
92
96
  { role: 'system', content: REFINE_SYSTEM_PROMPT },
93
97
  { role: 'user', content: userContent },
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/ai/prompts/prompt-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/ai/prompts/prompt-builder.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,5 @@ export declare const EPIC_SYSTEM_PROMPT = "You are an expert agile planning cons
9
9
  export declare const FEATURES_SYSTEM_PROMPT = "You are an expert agile planning consultant with deep experience in software development, product management, and technical architecture. You help teams create clear, actionable, and well-structured planning artifacts.\n\nYour task is to decompose an epic into individual features. Read the epic carefully and generate features that fully cover its scope.\n\nYou MUST respond with a valid JSON object containing:\n- \"features\": An array of feature objects, each with:\n - \"title\": A clear feature title (max 80 chars)\n - \"overview\": What this feature does (2-3 sentences)\n - \"functionalRequirements\": Array of 3-6 specific functional requirements\n - \"dependencies\": Dependencies on other features or systems, or \"None\"\n - \"technicalConsiderations\": Technical notes for implementation, or \"None\"\n - \"risks\": Feature-specific risks, or \"None\"\n - \"successMetrics\": How to measure success of this feature\n\nGenerate features that are:\n- Independently deliverable where possible\n- Roughly equal in scope\n- Non-overlapping (no duplicate functionality)\n\nRespond with JSON only, no markdown or explanation.";
10
10
  export declare const STORIES_SYSTEM_PROMPT = "You are an expert agile planning consultant with deep experience in software development, product management, and technical architecture. You help teams create clear, actionable, and well-structured planning artifacts.\n\nYour task is to break a feature into user stories. Read the feature and its parent epic context carefully.\n\nYou MUST respond with a valid JSON object containing:\n- \"stories\": An array of story objects, each with:\n - \"title\": Concise story title (max 80 chars)\n - \"role\": The user role (\"As a <role>\")\n - \"goal\": What they want to do (\"I want to <goal>\")\n - \"benefit\": Why (\"So that <benefit>\")\n - \"additionalNotes\": Implementation notes or edge cases (optional, can be empty string)\n - \"gherkinScenarios\": Array of scenario objects, each with:\n - \"name\": Scenario name\n - \"given\": Given precondition\n - \"when\": When action\n - \"then\": Then expected outcome\n\nEach story should:\n- Follow INVEST principles (Independent, Negotiable, Valuable, Estimable, Small, Testable)\n- Include 1-3 Gherkin scenarios (happy path + edge cases)\n- Be specific enough for a developer to implement\n\nRespond with JSON only, no markdown or explanation.";
11
11
  export declare const TASKS_SYSTEM_PROMPT = "You are an expert agile planning consultant with deep experience in software development, product management, and technical architecture. You help teams create clear, actionable, and well-structured planning artifacts.\n\nYour task is to generate a comprehensive implementation task list from agile artifacts (user stories, gherkin acceptance criteria, feature specs, epic context, ADRs, and codebase context).\n\nYou MUST respond with a valid JSON object containing:\n- \"title\": A task list title \u2014 use the scope ID if provided (e.g., \"Tasks for FEAT-001: Feature Name\" when scope is a feature, or \"Tasks for US-001: Story Name\" when scope is a story)\n- \"tasks\": An array of task group objects, each with:\n - \"id\": Numbering like \"1.0\", \"2.0\", \"3.0\"\n - \"title\": Task group title\n - \"subtasks\": Array of subtask objects, each with:\n - \"id\": Numbering like \"1.1\", \"1.2\", \"2.1\"\n - \"title\": Specific, actionable subtask description\n- \"acceptanceCriteriaMapping\": Array of objects mapping acceptance criteria to tasks:\n - \"criterion\": The acceptance criterion text (from gherkin scenarios or story requirements)\n - \"sourceStoryId\": Which user story this criterion comes from (e.g., \"US-001\")\n - \"taskIds\": Array of task/subtask IDs that satisfy this criterion (e.g., [\"1.1\", \"2.3\"])\n- \"relevantFiles\": Array of files to create or modify:\n - \"path\": File path relative to project root (e.g., \"src/auth/login.ts\")\n - \"reason\": Brief explanation of why this file needs changes\n\nTasks should:\n- Reference actual files/paths from the codebase when possible\n- Follow existing code patterns and conventions\n- Include setup, implementation, testing, and cleanup steps\n- Be ordered logically (dependencies first)\n- Address specific acceptance criteria from gherkin scenarios\n- Respect architectural decisions from ADRs when provided\n- Align with component structure and system architecture\n\nWhen multiple user stories and gherkin scenarios are provided, ensure every acceptance criterion is covered by at least one task. When codebase context is available, identify specific files to modify in relevantFiles.\n\nRespond with JSON only, no markdown or explanation.";
12
- export declare const REFINE_SYSTEM_PROMPT = "You are an expert agile planning consultant with deep experience in software development, product management, and technical architecture. You help teams create clear, actionable, and well-structured planning artifacts.\n\nYour task is to review and improve an existing agile artifact. Analyze the content and suggest improvements for:\n- Clarity and specificity\n- Missing details or edge cases\n- Consistency with agile best practices\n- Technical accuracy\n\nYou MUST respond with a valid JSON object containing:\n- \"suggestions\": Array of improvement suggestions (strings)\n- \"improved\": The improved artifact data as a JSON object with the same fields as the original frontmatter\n- \"improvedMarkdown\": A raw markdown string that will be written directly to a .md file. It MUST preserve the original file format: YAML frontmatter between --- delimiters followed by the markdown body. Do NOT put JSON in this field.\n\nCRITICAL: The \"improvedMarkdown\" field must be a plain markdown string, NOT a JSON object. It should look exactly like the original artifact the user provided, but with improvements applied. For example, if the original starts with:\n---\nid: \"EPIC-001\"\ntitle: \"My Epic\"\n---\n# EPIC-001: My Epic\n...then \"improvedMarkdown\" must also start with --- frontmatter and contain markdown content. Keep the same structure and sections as the original.\n\nRespond with JSON only, no markdown or explanation.";
12
+ export declare const REFINE_SYSTEM_PROMPT = "You are an expert agile planning consultant with deep experience in software development, product management, and technical architecture. You help teams create clear, actionable, and well-structured planning artifacts.\n\nYour task is to review and improve an existing agile artifact. Analyze the content and suggest improvements for:\n- Clarity and specificity\n- Missing details or edge cases\n- Consistency with agile best practices\n- Technical accuracy\n\nIMPORTANT RULES:\n- Do NOT add, remove, or modify cross-reference links (## Features, ## User Stories, ## Tasks sections). These sections link to actual files on disk and must be preserved exactly as-is.\n- Do NOT invent new feature, story, or task references. Creating new artifacts is handled by separate commands.\n- If you think new features/stories should be added, mention it in \"suggestions\" instead of adding links.\n- Focus on improving the artifact's own content: descriptions, requirements, risks, success criteria, etc.\n\nYou MUST respond with a valid JSON object containing:\n- \"suggestions\": Array of improvement suggestions (strings). Include suggestions for new features/stories here if applicable, rather than adding them to the document.\n- \"improved\": The improved artifact data as a JSON object with the same fields as the original frontmatter\n- \"improvedMarkdown\": A raw markdown string that will be written directly to a .md file. It MUST preserve the original file format: YAML frontmatter between --- delimiters followed by the markdown body. Do NOT put JSON in this field.\n\nCRITICAL: The \"improvedMarkdown\" field must be a plain markdown string, NOT a JSON object. It should look exactly like the original artifact the user provided, but with improvements applied. For example, if the original starts with:\n---\nid: \"EPIC-001\"\ntitle: \"My Epic\"\n---\n# EPIC-001: My Epic\n...then \"improvedMarkdown\" must also start with --- frontmatter and contain markdown content. Keep the same structure, sections, and cross-reference links as the original.\n\nRespond with JSON only, no markdown or explanation.";
13
13
  //# sourceMappingURL=system-prompts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompts.d.ts","sourceRoot":"","sources":["../../../src/ai/prompts/system-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,eAAO,MAAM,kBAAkB,ovCAiBqB,CAAC;AAErD,eAAO,MAAM,sBAAsB,wnCAmBiB,CAAC;AAErD,eAAO,MAAM,qBAAqB,osCAsBkB,CAAC;AAErD,eAAO,MAAM,mBAAmB,0sEA+BoB,CAAC;AAErD,eAAO,MAAM,oBAAoB,k6CAqBmB,CAAC"}
1
+ {"version":3,"file":"system-prompts.d.ts","sourceRoot":"","sources":["../../../src/ai/prompts/system-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,eAAO,MAAM,kBAAkB,ovCAiBqB,CAAC;AAErD,eAAO,MAAM,sBAAsB,wnCAmBiB,CAAC;AAErD,eAAO,MAAM,qBAAqB,osCAsBkB,CAAC;AAErD,eAAO,MAAM,mBAAmB,0sEA+BoB,CAAC;AAErD,eAAO,MAAM,oBAAoB,8jEA2BmB,CAAC"}
@@ -107,8 +107,14 @@ Your task is to review and improve an existing agile artifact. Analyze the conte
107
107
  - Consistency with agile best practices
108
108
  - Technical accuracy
109
109
 
110
+ IMPORTANT RULES:
111
+ - Do NOT add, remove, or modify cross-reference links (## Features, ## User Stories, ## Tasks sections). These sections link to actual files on disk and must be preserved exactly as-is.
112
+ - Do NOT invent new feature, story, or task references. Creating new artifacts is handled by separate commands.
113
+ - If you think new features/stories should be added, mention it in "suggestions" instead of adding links.
114
+ - Focus on improving the artifact's own content: descriptions, requirements, risks, success criteria, etc.
115
+
110
116
  You MUST respond with a valid JSON object containing:
111
- - "suggestions": Array of improvement suggestions (strings)
117
+ - "suggestions": Array of improvement suggestions (strings). Include suggestions for new features/stories here if applicable, rather than adding them to the document.
112
118
  - "improved": The improved artifact data as a JSON object with the same fields as the original frontmatter
113
119
  - "improvedMarkdown": A raw markdown string that will be written directly to a .md file. It MUST preserve the original file format: YAML frontmatter between --- delimiters followed by the markdown body. Do NOT put JSON in this field.
114
120
 
@@ -118,7 +124,7 @@ id: "EPIC-001"
118
124
  title: "My Epic"
119
125
  ---
120
126
  # EPIC-001: My Epic
121
- ...then "improvedMarkdown" must also start with --- frontmatter and contain markdown content. Keep the same structure and sections as the original.
127
+ ...then "improvedMarkdown" must also start with --- frontmatter and contain markdown content. Keep the same structure, sections, and cross-reference links as the original.
122
128
 
123
129
  Respond with JSON only, no markdown or explanation.`;
124
130
  //# sourceMappingURL=system-prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompts.js","sourceRoot":"","sources":["../../../src/ai/prompts/system-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,YAAY,GAAG,4NAA4N,CAAC;AAElP,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;oDAiBG,CAAC;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;oDAmBD,CAAC;AAErD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;oDAsBA,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oDA+BE,CAAC;AAErD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;oDAqBC,CAAC"}
1
+ {"version":3,"file":"system-prompts.js","sourceRoot":"","sources":["../../../src/ai/prompts/system-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,YAAY,GAAG,4NAA4N,CAAC;AAElP,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;oDAiBG,CAAC;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;oDAmBD,CAAC;AAErD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;oDAsBA,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oDA+BE,CAAC;AAErD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;oDA2BC,CAAC"}
@@ -4,15 +4,17 @@
4
4
  * Uses the official @anthropic-ai/sdk with streaming support.
5
5
  * Lazily imported to avoid loading the SDK until actually needed.
6
6
  */
7
- import type { AIProvider, AIMessage, AIRequestOptions, AIProviderName } from '../types.js';
7
+ import type { AIProvider, AIMessage, AIRequestOptions, AIProviderName, AIUsage } from '../types.js';
8
8
  export declare class AnthropicProvider implements AIProvider {
9
9
  readonly name: AIProviderName;
10
10
  readonly model: string;
11
11
  private clientPromise;
12
+ private lastUsageData;
12
13
  constructor(apiKey: string, model?: string);
13
14
  private initClient;
14
15
  chat(messages: AIMessage[], options?: AIRequestOptions): AsyncIterable<string>;
15
16
  chatSync(messages: AIMessage[], options?: AIRequestOptions): Promise<string>;
17
+ getLastUsage(): AIUsage | undefined;
16
18
  /**
17
19
  * Anthropic's API uses a separate `system` parameter rather than
18
20
  * a system role in the messages array.
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/anthropic-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG3F,qBAAa,iBAAkB,YAAW,UAAU;IAClD,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAe;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,aAAa,CAAoE;gBAE7E,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;YAK5B,UAAU;IAKjB,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC;IA6B/E,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BlF;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAQ3B"}
1
+ {"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/anthropic-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGpG,qBAAa,iBAAkB,YAAW,UAAU;IAClD,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAe;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,aAAa,CAAoE;IACzF,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;YAK5B,UAAU;IAKjB,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC;IAmC/E,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiClF,YAAY,IAAI,OAAO,GAAG,SAAS;IAInC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAQ3B"}
@@ -9,6 +9,7 @@ export class AnthropicProvider {
9
9
  name = 'anthropic';
10
10
  model;
11
11
  clientPromise;
12
+ lastUsageData;
12
13
  constructor(apiKey, model) {
13
14
  this.model = model || 'claude-sonnet-4-20250514';
14
15
  this.clientPromise = this.initClient(apiKey);
@@ -37,6 +38,11 @@ export class AnthropicProvider {
37
38
  yield event.delta.text;
38
39
  }
39
40
  }
41
+ const finalMessage = await stream.finalMessage();
42
+ this.lastUsageData = {
43
+ inputTokens: finalMessage.usage.input_tokens,
44
+ outputTokens: finalMessage.usage.output_tokens,
45
+ };
40
46
  }
41
47
  catch (err) {
42
48
  throw wrapProviderError(err, 'anthropic');
@@ -56,6 +62,10 @@ export class AnthropicProvider {
56
62
  content: m.content,
57
63
  })),
58
64
  });
65
+ this.lastUsageData = {
66
+ inputTokens: response.usage.input_tokens,
67
+ outputTokens: response.usage.output_tokens,
68
+ };
59
69
  return response.content
60
70
  .filter((block) => block.type === 'text')
61
71
  .map((block) => {
@@ -69,6 +79,9 @@ export class AnthropicProvider {
69
79
  throw wrapProviderError(err, 'anthropic');
70
80
  }
71
81
  }
82
+ getLastUsage() {
83
+ return this.lastUsageData;
84
+ }
72
85
  /**
73
86
  * Anthropic's API uses a separate `system` parameter rather than
74
87
  * a system role in the messages array.
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-provider.js","sourceRoot":"","sources":["../../../src/ai/providers/anthropic-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anthropic-provider.js","sourceRoot":"","sources":["../../../src/ai/providers/anthropic-provider.ts"],"names":[],"mappings":"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"}
@@ -4,14 +4,16 @@
4
4
  * Uses the official openai SDK with streaming and JSON mode support.
5
5
  * Also serves as the base for the Ollama provider (OpenAI-compatible API).
6
6
  */
7
- import type { AIProvider, AIMessage, AIRequestOptions, AIProviderName } from '../types.js';
7
+ import type { AIProvider, AIMessage, AIRequestOptions, AIProviderName, AIUsage } from '../types.js';
8
8
  export declare class OpenAIProvider implements AIProvider {
9
9
  readonly name: AIProviderName;
10
10
  readonly model: string;
11
11
  protected clientPromise: Promise<InstanceType<typeof import('openai').default>>;
12
+ private lastUsageData;
12
13
  constructor(apiKey: string, model?: string, baseUrl?: string);
13
14
  private initClient;
14
15
  chat(messages: AIMessage[], options?: AIRequestOptions): AsyncIterable<string>;
15
16
  chatSync(messages: AIMessage[], options?: AIRequestOptions): Promise<string>;
17
+ getLastUsage(): AIUsage | undefined;
16
18
  }
17
19
  //# sourceMappingURL=openai-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG3F,qBAAa,cAAe,YAAW,UAAU;IAC/C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAY;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,cAAc,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBAEpE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;YAK9C,UAAU;IAKjB,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC;IAsB/E,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;CAiBnF"}
1
+ {"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGpG,qBAAa,cAAe,YAAW,UAAU;IAC/C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAY;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,cAAc,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;YAK9C,UAAU;IAKjB,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC;IA8B/E,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAyBlF,YAAY,IAAI,OAAO,GAAG,SAAS;CAGpC"}
@@ -9,6 +9,7 @@ export class OpenAIProvider {
9
9
  name = 'openai';
10
10
  model;
11
11
  clientPromise;
12
+ lastUsageData;
12
13
  constructor(apiKey, model, baseUrl) {
13
14
  this.model = model || 'gpt-4o';
14
15
  this.clientPromise = this.initClient(apiKey, baseUrl);
@@ -23,6 +24,7 @@ export class OpenAIProvider {
23
24
  const stream = await client.chat.completions.create({
24
25
  model: this.model,
25
26
  stream: true,
27
+ stream_options: { include_usage: true },
26
28
  temperature: options?.temperature ?? 0.7,
27
29
  max_tokens: options?.maxTokens || 4096,
28
30
  messages: messages.map((m) => ({ role: m.role, content: m.content })),
@@ -32,6 +34,13 @@ export class OpenAIProvider {
32
34
  const delta = chunk.choices[0]?.delta?.content;
33
35
  if (delta)
34
36
  yield delta;
37
+ // Capture usage from the final chunk (OpenAI includes it when stream ends)
38
+ if (chunk.usage) {
39
+ this.lastUsageData = {
40
+ inputTokens: chunk.usage.prompt_tokens ?? 0,
41
+ outputTokens: chunk.usage.completion_tokens ?? 0,
42
+ };
43
+ }
35
44
  }
36
45
  }
37
46
  catch (err) {
@@ -48,11 +57,20 @@ export class OpenAIProvider {
48
57
  messages: messages.map((m) => ({ role: m.role, content: m.content })),
49
58
  ...(options?.jsonMode && { response_format: { type: 'json_object' } }),
50
59
  });
60
+ if (response.usage) {
61
+ this.lastUsageData = {
62
+ inputTokens: response.usage.prompt_tokens ?? 0,
63
+ outputTokens: response.usage.completion_tokens ?? 0,
64
+ };
65
+ }
51
66
  return response.choices[0]?.message?.content || '';
52
67
  }
53
68
  catch (err) {
54
69
  throw wrapProviderError(err, this.name);
55
70
  }
56
71
  }
72
+ getLastUsage() {
73
+ return this.lastUsageData;
74
+ }
57
75
  }
58
76
  //# sourceMappingURL=openai-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-provider.js","sourceRoot":"","sources":["../../../src/ai/providers/openai-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai-provider.js","sourceRoot":"","sources":["../../../src/ai/providers/openai-provider.ts"],"names":[],"mappings":"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"}