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.
- package/dist/agents/cursor-agent.d.ts.map +1 -1
- package/dist/agents/cursor-agent.js +2 -2
- package/dist/agents/cursor-agent.js.map +1 -1
- package/dist/agents/implementation-bridge.d.ts.map +1 -1
- package/dist/agents/implementation-bridge.js +6 -8
- package/dist/agents/implementation-bridge.js.map +1 -1
- package/dist/ai/codebase/file-reader.js +7 -7
- package/dist/ai/codebase/file-reader.js.map +1 -1
- package/dist/ai/codebase/tree-generator.js +4 -4
- package/dist/ai/codebase/tree-generator.js.map +1 -1
- package/dist/ai/prompts/prompt-builder.d.ts +4 -1
- package/dist/ai/prompts/prompt-builder.d.ts.map +1 -1
- package/dist/ai/prompts/prompt-builder.js +6 -2
- package/dist/ai/prompts/prompt-builder.js.map +1 -1
- package/dist/ai/prompts/system-prompts.d.ts +1 -1
- package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
- package/dist/ai/prompts/system-prompts.js +8 -2
- package/dist/ai/prompts/system-prompts.js.map +1 -1
- package/dist/ai/providers/anthropic-provider.d.ts +3 -1
- package/dist/ai/providers/anthropic-provider.d.ts.map +1 -1
- package/dist/ai/providers/anthropic-provider.js +13 -0
- package/dist/ai/providers/anthropic-provider.js.map +1 -1
- package/dist/ai/providers/openai-provider.d.ts +3 -1
- package/dist/ai/providers/openai-provider.d.ts.map +1 -1
- package/dist/ai/providers/openai-provider.js +18 -0
- package/dist/ai/providers/openai-provider.js.map +1 -1
- package/dist/ai/schemas/ai-response-schemas.d.ts +28 -328
- package/dist/ai/schemas/ai-response-schemas.d.ts.map +1 -1
- package/dist/ai/schemas/ai-response-schemas.js +1 -1
- package/dist/ai/schemas/ai-response-schemas.js.map +1 -1
- package/dist/ai/types.d.ts +10 -0
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/ai/types.js.map +1 -1
- package/dist/cli/commands/epic.js +2 -2
- package/dist/cli/commands/epic.js.map +1 -1
- package/dist/cli/commands/feature.js +1 -1
- package/dist/cli/commands/feature.js.map +1 -1
- package/dist/cli/commands/plan.js +4 -4
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/refine.d.ts +1 -0
- package/dist/cli/commands/refine.d.ts.map +1 -1
- package/dist/cli/commands/refine.js +139 -54
- package/dist/cli/commands/refine.js.map +1 -1
- package/dist/cli/commands/story.js +1 -1
- package/dist/cli/commands/story.js.map +1 -1
- package/dist/cli/commands/task.js +2 -2
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/models/schema.d.ts +39 -95
- package/dist/models/schema.d.ts.map +1 -1
- package/dist/services/ai-service.d.ts +10 -3
- package/dist/services/ai-service.d.ts.map +1 -1
- package/dist/services/ai-service.js +27 -23
- package/dist/services/ai-service.js.map +1 -1
- package/dist/services/credentials-service.d.ts.map +1 -1
- package/dist/services/credentials-service.js +9 -6
- package/dist/services/credentials-service.js.map +1 -1
- package/dist/utils/fs.js +8 -8
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +32 -0
- package/dist/utils/logger.js.map +1 -1
- 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;
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
86
|
+
logger.debug(`Read parent epic ${epicId}`);
|
|
88
87
|
}
|
|
89
88
|
}
|
|
90
89
|
// 5. Build codebase context
|
|
91
|
-
|
|
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
|
-
|
|
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":"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
|
|
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,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAEnD,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,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;IAC/C,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,MAAM,CAAC,KAAK,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC;QACnD,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,MAAM,CAAC,KAAK,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrC,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,MAAM,CAAC,KAAK,CAAC,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,CAAC;QACpH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IAED,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"}
|
|
@@ -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
|
|
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
|
|
32
|
-
if (
|
|
31
|
+
const fileStat = await stat(fullPath);
|
|
32
|
+
if (fileStat.size > MAX_FILE_SIZE)
|
|
33
33
|
return null;
|
|
34
|
-
return await
|
|
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
|
|
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
|
|
70
|
-
if (
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"file-reader.js","sourceRoot":"","sources":["../../../src/ai/codebase/file-reader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE3D,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,gBAAgB;AAC9C,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,mCAAmC;AAEpE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC5C,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ;IAC7C,MAAM,EAAE,SAAS,EAAE,QAAQ;IAC3B,MAAM,EAAE,UAAU,EAAE,MAAM;IAC1B,MAAM,EAAE,OAAO,EAAE,OAAO;IACxB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IACjC,KAAK,EAAE,MAAM;CACd,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IACvD,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU;CACvD,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,YAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,QAAQ,CAAC,IAAI,GAAG,aAAa;YAAE,OAAO,IAAI,CAAC;QAC/C,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,QAAkB,EAClB,aAAqB,EAAE;IAEvB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,OAAe,EACf,UAAkB,EAClB,QAAkB,EAClB,OAAiB,EACjB,UAAkB,EAClB,KAAa;IAEb,IAAI,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;QAAE,OAAO;IAEtD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;YAAE,OAAO;QACzC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAE/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEvC,IAAI,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC5B,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/E,CAAC;iBAAM,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBACvC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;gBAE7C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAC3B,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC1D,CAAC;gBACF,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,aAAuB,EACvB,cAAsB,MAAM;IAE5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,SAAS,GAAG,WAAW,CAAC;IAE5B,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,IAAI,SAAS,IAAI,CAAC;YAAE,MAAM;QAE1B,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/B,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -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
|
|
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
|
|
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
|
|
62
|
-
if (
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
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
|
|
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,
|
|
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
|
-
|
|
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)
|
|
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,
|
|
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
|
|
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
|
|
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;
|
|
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":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAmB,WAAW,CAAC;IACnC,KAAK,CAAS;IAEf,aAAa,CAAoE;
|
|
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;
|
|
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":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,OAAO,cAAc;IAChB,IAAI,GAAmB,QAAQ,CAAC;IAChC,KAAK,CAAS;IAEb,aAAa,CAAyD;
|
|
1
|
+
{"version":3,"file":"openai-provider.js","sourceRoot":"","sources":["../../../src/ai/providers/openai-provider.ts"],"names":[],"mappings":"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"}
|