openplanr 0.9.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -58
- package/dist/agents/index.d.ts +1 -5
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +1 -4
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/task-parser.d.ts +4 -1
- package/dist/agents/task-parser.d.ts.map +1 -1
- package/dist/agents/task-parser.js +6 -3
- package/dist/agents/task-parser.js.map +1 -1
- package/dist/agents/utils.d.ts +0 -4
- package/dist/agents/utils.d.ts.map +1 -1
- package/dist/agents/utils.js +3 -24
- package/dist/agents/utils.js.map +1 -1
- package/dist/ai/codebase/context-builder.d.ts +22 -3
- package/dist/ai/codebase/context-builder.d.ts.map +1 -1
- package/dist/ai/codebase/context-builder.js +202 -14
- package/dist/ai/codebase/context-builder.js.map +1 -1
- package/dist/ai/codebase/file-reader.d.ts.map +1 -1
- package/dist/ai/codebase/file-reader.js +7 -3
- package/dist/ai/codebase/file-reader.js.map +1 -1
- package/dist/ai/codebase/index.d.ts +3 -1
- package/dist/ai/codebase/index.d.ts.map +1 -1
- package/dist/ai/codebase/index.js +3 -1
- package/dist/ai/codebase/index.js.map +1 -1
- package/dist/ai/codebase/pattern-rules.d.ts +28 -0
- package/dist/ai/codebase/pattern-rules.d.ts.map +1 -0
- package/dist/ai/codebase/pattern-rules.js +186 -0
- package/dist/ai/codebase/pattern-rules.js.map +1 -0
- package/dist/ai/codebase/rules-reader.d.ts +14 -0
- package/dist/ai/codebase/rules-reader.d.ts.map +1 -0
- package/dist/ai/codebase/rules-reader.js +25 -0
- package/dist/ai/codebase/rules-reader.js.map +1 -0
- package/dist/ai/codebase/stack-detector.d.ts.map +1 -1
- package/dist/ai/codebase/stack-detector.js +4 -1
- package/dist/ai/codebase/stack-detector.js.map +1 -1
- package/dist/ai/codebase/tree-generator.d.ts.map +1 -1
- package/dist/ai/codebase/tree-generator.js +5 -2
- package/dist/ai/codebase/tree-generator.js.map +1 -1
- package/dist/ai/errors.js +1 -1
- package/dist/ai/errors.js.map +1 -1
- package/dist/ai/prompts/prompt-builder.d.ts +12 -0
- package/dist/ai/prompts/prompt-builder.d.ts.map +1 -1
- package/dist/ai/prompts/prompt-builder.js +38 -3
- package/dist/ai/prompts/prompt-builder.js.map +1 -1
- package/dist/ai/prompts/system-prompts.d.ts +4 -2
- package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
- package/dist/ai/prompts/system-prompts.js +72 -12
- package/dist/ai/prompts/system-prompts.js.map +1 -1
- package/dist/ai/schemas/ai-response-schemas.d.ts +48 -2
- package/dist/ai/schemas/ai-response-schemas.d.ts.map +1 -1
- package/dist/ai/schemas/ai-response-schemas.js +19 -0
- package/dist/ai/schemas/ai-response-schemas.js.map +1 -1
- package/dist/ai/types.d.ts +3 -1
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -1
- package/dist/ai/validation/dependency-chains.d.ts +21 -0
- package/dist/ai/validation/dependency-chains.d.ts.map +1 -0
- package/dist/ai/validation/dependency-chains.js +114 -0
- package/dist/ai/validation/dependency-chains.js.map +1 -0
- package/dist/ai/validation/index.d.ts +3 -0
- package/dist/ai/validation/index.d.ts.map +1 -0
- package/dist/ai/validation/index.js +3 -0
- package/dist/ai/validation/index.js.map +1 -0
- package/dist/ai/validation/task-validator.d.ts +37 -0
- package/dist/ai/validation/task-validator.d.ts.map +1 -0
- package/dist/ai/validation/task-validator.js +89 -0
- package/dist/ai/validation/task-validator.js.map +1 -0
- package/dist/cli/commands/backlog.d.ts +10 -0
- package/dist/cli/commands/backlog.d.ts.map +1 -0
- package/dist/cli/commands/backlog.js +292 -0
- package/dist/cli/commands/backlog.js.map +1 -0
- package/dist/cli/commands/checklist.js +4 -4
- package/dist/cli/commands/checklist.js.map +1 -1
- package/dist/cli/commands/config.js +13 -13
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/epic.d.ts.map +1 -1
- package/dist/cli/commands/epic.js +29 -23
- package/dist/cli/commands/epic.js.map +1 -1
- package/dist/cli/commands/estimate.d.ts.map +1 -1
- package/dist/cli/commands/estimate.js +40 -39
- package/dist/cli/commands/estimate.js.map +1 -1
- package/dist/cli/commands/export.js +6 -4
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/feature.js +9 -9
- package/dist/cli/commands/feature.js.map +1 -1
- package/dist/cli/commands/github.d.ts.map +1 -1
- package/dist/cli/commands/github.js +30 -27
- package/dist/cli/commands/github.js.map +1 -1
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +27 -42
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/quick.d.ts.map +1 -1
- package/dist/cli/commands/quick.js +37 -107
- package/dist/cli/commands/quick.js.map +1 -1
- package/dist/cli/commands/refine.js +21 -21
- package/dist/cli/commands/refine.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +18 -7
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/sprint.d.ts +9 -0
- package/dist/cli/commands/sprint.d.ts.map +1 -0
- package/dist/cli/commands/sprint.js +519 -0
- package/dist/cli/commands/sprint.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +77 -32
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/story.js +15 -15
- package/dist/cli/commands/story.js.map +1 -1
- package/dist/cli/commands/sync.js +11 -7
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/task.d.ts +0 -2
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +14 -169
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/commands/template.d.ts +10 -0
- package/dist/cli/commands/template.d.ts.map +1 -0
- package/dist/cli/commands/template.js +269 -0
- package/dist/cli/commands/template.js.map +1 -0
- package/dist/cli/helpers/task-creation.d.ts +89 -0
- package/dist/cli/helpers/task-creation.d.ts.map +1 -0
- package/dist/cli/helpers/task-creation.js +140 -0
- package/dist/cli/helpers/task-creation.js.map +1 -0
- package/dist/cli/index.js +25 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/models/schema.d.ts +2 -0
- package/dist/models/schema.d.ts.map +1 -1
- package/dist/models/schema.js +2 -0
- package/dist/models/schema.js.map +1 -1
- package/dist/models/types.d.ts +32 -1
- package/dist/models/types.d.ts.map +1 -1
- package/dist/services/artifact-gathering.d.ts +2 -0
- package/dist/services/artifact-gathering.d.ts.map +1 -1
- package/dist/services/artifact-gathering.js +26 -7
- package/dist/services/artifact-gathering.js.map +1 -1
- package/dist/services/artifact-service.d.ts +5 -5
- package/dist/services/artifact-service.d.ts.map +1 -1
- package/dist/services/artifact-service.js +4 -0
- package/dist/services/artifact-service.js.map +1 -1
- package/dist/services/config-service.d.ts.map +1 -1
- package/dist/services/config-service.js +2 -0
- package/dist/services/config-service.js.map +1 -1
- package/dist/services/credential-backends.d.ts.map +1 -1
- package/dist/services/credential-backends.js +15 -7
- package/dist/services/credential-backends.js.map +1 -1
- package/dist/services/credentials-service.d.ts.map +1 -1
- package/dist/services/credentials-service.js +6 -3
- package/dist/services/credentials-service.js.map +1 -1
- package/dist/services/github-service.d.ts +2 -2
- package/dist/services/github-service.d.ts.map +1 -1
- package/dist/services/github-service.js +9 -4
- package/dist/services/github-service.js.map +1 -1
- package/dist/services/template-service.d.ts +2 -1
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +2 -1
- package/dist/services/template-service.js.map +1 -1
- package/dist/templates/backlog/backlog-item.md.hbs +40 -0
- package/dist/templates/checklists/agile-checklist.md.hbs +1 -1
- package/dist/templates/quick/quick-task.md.hbs +1 -1
- package/dist/templates/rules/claude/CLAUDE.md.hbs +78 -35
- package/dist/templates/rules/codex/AGENTS.md.hbs +73 -17
- package/dist/templates/rules/cursor/2101-implement-task-list.mdc.hbs +66 -14
- package/dist/templates/sprints/sprint.md.hbs +42 -0
- package/dist/templates/task-templates/api-integration.json +45 -0
- package/dist/templates/task-templates/auth-flow.json +48 -0
- package/dist/templates/task-templates/database-migration.json +44 -0
- package/dist/templates/task-templates/react-component.json +45 -0
- package/dist/templates/task-templates/rest-endpoint.json +53 -0
- package/dist/templates/tasks/task-list.md.hbs +1 -1
- package/dist/utils/constants.d.ts +4 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +4 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/logger.d.ts +31 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +92 -9
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/markdown.d.ts +3 -2
- package/dist/utils/markdown.d.ts.map +1 -1
- package/dist/utils/markdown.js +3 -1
- package/dist/utils/markdown.js.map +1 -1
- package/dist/utils/slugify.d.ts +8 -1
- package/dist/utils/slugify.d.ts.map +1 -1
- package/dist/utils/slugify.js +18 -2
- package/dist/utils/slugify.js.map +1 -1
- package/package.json +14 -3
- package/dist/agents/agent-factory.d.ts +0 -7
- package/dist/agents/agent-factory.d.ts.map +0 -1
- package/dist/agents/agent-factory.js +0 -22
- package/dist/agents/agent-factory.js.map +0 -1
- package/dist/agents/claude-agent.d.ts +0 -18
- package/dist/agents/claude-agent.d.ts.map +0 -1
- package/dist/agents/claude-agent.js +0 -183
- package/dist/agents/claude-agent.js.map +0 -1
- package/dist/agents/codex-agent.d.ts +0 -17
- package/dist/agents/codex-agent.d.ts.map +0 -1
- package/dist/agents/codex-agent.js +0 -124
- package/dist/agents/codex-agent.js.map +0 -1
- package/dist/agents/cursor-agent.d.ts +0 -14
- package/dist/agents/cursor-agent.d.ts.map +0 -1
- package/dist/agents/cursor-agent.js +0 -49
- package/dist/agents/cursor-agent.js.map +0 -1
- package/dist/agents/implementation-bridge.d.ts +0 -30
- package/dist/agents/implementation-bridge.d.ts.map +0 -1
- package/dist/agents/implementation-bridge.js +0 -256
- package/dist/agents/implementation-bridge.js.map +0 -1
- package/dist/agents/progress.d.ts +0 -62
- package/dist/agents/progress.d.ts.map +0 -1
- package/dist/agents/progress.js +0 -155
- package/dist/agents/progress.js.map +0 -1
- package/dist/agents/prompt-composer.d.ts +0 -30
- package/dist/agents/prompt-composer.d.ts.map +0 -1
- package/dist/agents/prompt-composer.js +0 -81
- package/dist/agents/prompt-composer.js.map +0 -1
- package/dist/agents/types.d.ts +0 -25
- package/dist/agents/types.d.ts.map +0 -1
- package/dist/agents/types.js +0 -8
- package/dist/agents/types.js.map +0 -1
- package/dist/utils/error-context.d.ts +0 -23
- package/dist/utils/error-context.d.ts.map +0 -1
- package/dist/utils/error-context.js +0 -94
- package/dist/utils/error-context.js.map +0 -1
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenAI Codex CLI agent adapter.
|
|
3
|
-
*
|
|
4
|
-
* Invokes `codex exec --full-auto --json` for non-interactive mode with
|
|
5
|
-
* write access. Parses JSONL events for real-time progress display.
|
|
6
|
-
* Includes retry logic for transient errors.
|
|
7
|
-
*/
|
|
8
|
-
import { spawn } from 'node:child_process';
|
|
9
|
-
import { createReadStream } from 'node:fs';
|
|
10
|
-
import { unlink, writeFile } from 'node:fs/promises';
|
|
11
|
-
import { tmpdir } from 'node:os';
|
|
12
|
-
import path from 'node:path';
|
|
13
|
-
import chalk from 'chalk';
|
|
14
|
-
import { createProgressSpinner, describeCodexActivity } from './progress.js';
|
|
15
|
-
import { isRetryableError, MAX_RETRIES, RETRY_DELAY_MS, sleep, which } from './utils.js';
|
|
16
|
-
export class CodexAgent {
|
|
17
|
-
name = 'codex';
|
|
18
|
-
async isAvailable() {
|
|
19
|
-
return (await which('codex')) !== null;
|
|
20
|
-
}
|
|
21
|
-
async execute(prompt, options) {
|
|
22
|
-
const tmpFile = path.join(tmpdir(), `planr-prompt-${Date.now()}.txt`);
|
|
23
|
-
await writeFile(tmpFile, prompt, 'utf-8');
|
|
24
|
-
try {
|
|
25
|
-
let lastExitCode = 1;
|
|
26
|
-
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
27
|
-
if (attempt > 0) {
|
|
28
|
-
const delaySec = (RETRY_DELAY_MS * attempt) / 1000;
|
|
29
|
-
process.stderr.write(`\n⟳ Retrying (attempt ${attempt + 1}/${MAX_RETRIES + 1}) in ${delaySec}s...\n`);
|
|
30
|
-
await sleep(RETRY_DELAY_MS * attempt);
|
|
31
|
-
}
|
|
32
|
-
const result = await this.spawnCodex(tmpFile, options);
|
|
33
|
-
lastExitCode = result.exitCode;
|
|
34
|
-
if (result.exitCode === 0)
|
|
35
|
-
return result;
|
|
36
|
-
if (result.stderr && isRetryableError(result.stderr))
|
|
37
|
-
continue;
|
|
38
|
-
return result;
|
|
39
|
-
}
|
|
40
|
-
return { output: '', exitCode: lastExitCode };
|
|
41
|
-
}
|
|
42
|
-
finally {
|
|
43
|
-
await unlink(tmpFile).catch(() => { });
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
spawnCodex(tmpFile, options) {
|
|
47
|
-
return new Promise((resolve, reject) => {
|
|
48
|
-
const args = this.buildArgs(options);
|
|
49
|
-
const child = spawn('codex', args, {
|
|
50
|
-
cwd: options.cwd,
|
|
51
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
52
|
-
env: { ...process.env },
|
|
53
|
-
});
|
|
54
|
-
// Stream the temp file into stdin
|
|
55
|
-
const fileStream = createReadStream(tmpFile, 'utf-8');
|
|
56
|
-
fileStream.pipe(child.stdin);
|
|
57
|
-
const { spinner, stderrChunks, resultRef } = this.attachListeners(child);
|
|
58
|
-
child.on('error', (err) => {
|
|
59
|
-
spinner.stop();
|
|
60
|
-
reject(new Error(`Failed to launch codex CLI: ${err.message}`));
|
|
61
|
-
});
|
|
62
|
-
child.on('close', (code) => {
|
|
63
|
-
spinner.stop();
|
|
64
|
-
if (resultRef.text) {
|
|
65
|
-
console.log(resultRef.text);
|
|
66
|
-
}
|
|
67
|
-
if (code !== 0) {
|
|
68
|
-
const stderr = stderrChunks.join('');
|
|
69
|
-
if (stderr)
|
|
70
|
-
process.stderr.write(stderr);
|
|
71
|
-
}
|
|
72
|
-
resolve({
|
|
73
|
-
output: resultRef.text,
|
|
74
|
-
exitCode: code ?? 1,
|
|
75
|
-
stderr: stderrChunks.join(''),
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
buildArgs(options) {
|
|
81
|
-
if (options.continueSession) {
|
|
82
|
-
return ['exec', 'resume', '--last'];
|
|
83
|
-
}
|
|
84
|
-
return ['exec', '--full-auto', '--json'];
|
|
85
|
-
}
|
|
86
|
-
attachListeners(child) {
|
|
87
|
-
const spinner = createProgressSpinner();
|
|
88
|
-
const stderrChunks = [];
|
|
89
|
-
const resultRef = { text: '' };
|
|
90
|
-
let jsonBuffer = '';
|
|
91
|
-
child.stdout?.on('data', (data) => {
|
|
92
|
-
jsonBuffer += data.toString();
|
|
93
|
-
const lines = jsonBuffer.split('\n');
|
|
94
|
-
jsonBuffer = lines.pop() || '';
|
|
95
|
-
for (const line of lines) {
|
|
96
|
-
const trimmed = line.trim();
|
|
97
|
-
if (!trimmed)
|
|
98
|
-
continue;
|
|
99
|
-
try {
|
|
100
|
-
const event = JSON.parse(trimmed);
|
|
101
|
-
const activity = describeCodexActivity(event);
|
|
102
|
-
if (activity) {
|
|
103
|
-
spinner.setActivity(activity);
|
|
104
|
-
process.stderr.write(`\r\x1b[K${chalk.green('✓')} ${chalk.dim(activity)}\n`);
|
|
105
|
-
}
|
|
106
|
-
// Capture the last agent message as the result text
|
|
107
|
-
if (event.type === 'item.completed' &&
|
|
108
|
-
event.item?.type === 'agent_message' &&
|
|
109
|
-
event.item.text) {
|
|
110
|
-
resultRef.text = event.item.text;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
// Incomplete JSON line — skip
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
child.stderr?.on('data', (data) => {
|
|
119
|
-
stderrChunks.push(data.toString());
|
|
120
|
-
});
|
|
121
|
-
return { spinner, stderrChunks, resultRef };
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=codex-agent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-agent.js","sourceRoot":"","sources":["../../src/agents/codex-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cursor agent adapter.
|
|
3
|
-
*
|
|
4
|
-
* Since Cursor is GUI-based, this agent writes the implementation
|
|
5
|
-
* prompt to a file that Cursor can read from its Composer panel.
|
|
6
|
-
* For follow-up/fix prompts, it appends to the same file.
|
|
7
|
-
*/
|
|
8
|
-
import type { AgentOptions, AgentResult, CodingAgent } from './types.js';
|
|
9
|
-
export declare class CursorAgent implements CodingAgent {
|
|
10
|
-
readonly name = "cursor";
|
|
11
|
-
isAvailable(): Promise<boolean>;
|
|
12
|
-
execute(prompt: string, options: AgentOptions): Promise<AgentResult>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=cursor-agent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-agent.d.ts","sourceRoot":"","sources":["../../src/agents/cursor-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,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;CAqC3E"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cursor agent adapter.
|
|
3
|
-
*
|
|
4
|
-
* Since Cursor is GUI-based, this agent writes the implementation
|
|
5
|
-
* prompt to a file that Cursor can read from its Composer panel.
|
|
6
|
-
* For follow-up/fix prompts, it appends to the same file.
|
|
7
|
-
*/
|
|
8
|
-
import { access } from 'node:fs/promises';
|
|
9
|
-
import path from 'node:path';
|
|
10
|
-
import { ensureDir, writeFile } from '../utils/fs.js';
|
|
11
|
-
import { logger } from '../utils/logger.js';
|
|
12
|
-
export class CursorAgent {
|
|
13
|
-
name = 'cursor';
|
|
14
|
-
async isAvailable() {
|
|
15
|
-
// Cursor is available if the project has a .cursor directory
|
|
16
|
-
return access(path.join(process.cwd(), '.cursor'))
|
|
17
|
-
.then(() => true)
|
|
18
|
-
.catch(() => false);
|
|
19
|
-
}
|
|
20
|
-
async execute(prompt, options) {
|
|
21
|
-
const promptDir = path.join(options.cwd, '.cursor', 'prompts');
|
|
22
|
-
await ensureDir(promptDir);
|
|
23
|
-
// Extract task ID from prompt for a meaningful filename
|
|
24
|
-
const taskMatch = prompt.match(/TASK-\d{3}/);
|
|
25
|
-
const filename = taskMatch ? `${taskMatch[0]}.md` : `implement-${Date.now()}.md`;
|
|
26
|
-
const filePath = path.join(promptDir, filename);
|
|
27
|
-
const header = options.continueSession ? '<!-- Follow-up / Fix prompt -->\n\n' : '';
|
|
28
|
-
await writeFile(filePath, header + prompt);
|
|
29
|
-
const action = options.continueSession ? 'Fix' : 'Implementation';
|
|
30
|
-
const output = [
|
|
31
|
-
`${action} prompt saved to: ${filePath}`,
|
|
32
|
-
'',
|
|
33
|
-
'To use in Cursor:',
|
|
34
|
-
' 1. Open Cursor in this project',
|
|
35
|
-
' 2. Open Composer (Cmd+I / Ctrl+I)',
|
|
36
|
-
` 3. Reference the file: @${path.relative(options.cwd, filePath)}`,
|
|
37
|
-
' 4. Or copy-paste the prompt directly into Composer',
|
|
38
|
-
].join('\n');
|
|
39
|
-
if (options.stream) {
|
|
40
|
-
console.log(output);
|
|
41
|
-
}
|
|
42
|
-
if (options.continueSession) {
|
|
43
|
-
logger.dim('Note: Cursor does not support session continuation.');
|
|
44
|
-
logger.dim('The fix prompt has been saved as a new file — paste it into your existing Composer thread.');
|
|
45
|
-
}
|
|
46
|
-
return { output, exitCode: 0 };
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=cursor-agent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-agent.js","sourceRoot":"","sources":["../../src/agents/cursor-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,QAAQ,CAAC;IAEzB,KAAK,CAAC,WAAW;QACf,6DAA6D;QAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;aAC/C,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;aAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACxB,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,wDAAwD;QACxD,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,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpF,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAClE,MAAM,MAAM,GAAG;YACb,GAAG,MAAM,qBAAqB,QAAQ,EAAE;YACxC,EAAE;YACF,mBAAmB;YACnB,kCAAkC;YAClC,qCAAqC;YACrC,6BAA6B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;YACnE,sDAAsD;SACvD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YAClE,MAAM,CAAC,GAAG,CACR,4FAA4F,CAC7F,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Task implementation bridge.
|
|
3
|
-
*
|
|
4
|
-
* Orchestrates the full flow:
|
|
5
|
-
* 1. Read and parse the task artifact
|
|
6
|
-
* 2. Resolve target subtask(s)
|
|
7
|
-
* 3. Gather parent chain context (story → feature → epic)
|
|
8
|
-
* 4. Build codebase context
|
|
9
|
-
* 5. Compose the implementation prompt
|
|
10
|
-
* 6. Dispatch to the configured coding agent
|
|
11
|
-
*/
|
|
12
|
-
import type { OpenPlanrConfig } from '../models/types.js';
|
|
13
|
-
export interface ImplementOptions {
|
|
14
|
-
subtask?: string;
|
|
15
|
-
next?: boolean;
|
|
16
|
-
agent?: string;
|
|
17
|
-
dryRun?: boolean;
|
|
18
|
-
markDone?: boolean;
|
|
19
|
-
}
|
|
20
|
-
export declare function executeImplementation(projectDir: string, config: OpenPlanrConfig, taskId: string, opts: ImplementOptions): Promise<void>;
|
|
21
|
-
export interface FollowUpOptions {
|
|
22
|
-
agent?: string;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Send a follow-up message to the coding agent, continuing the
|
|
26
|
-
* previous session. This is the feedback loop for fixing issues
|
|
27
|
-
* found after implementation.
|
|
28
|
-
*/
|
|
29
|
-
export declare function executeFollowUp(projectDir: string, config: OpenPlanrConfig, message: string, opts: FollowUpOptions): Promise<void>;
|
|
30
|
-
//# sourceMappingURL=implementation-bridge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"implementation-bridge.d.ts","sourceRoot":"","sources":["../../src/agents/implementation-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAiB3E,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,CA2Kf;AAoCD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,IAAI,CAAC,CAsCf"}
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Task implementation bridge.
|
|
3
|
-
*
|
|
4
|
-
* Orchestrates the full flow:
|
|
5
|
-
* 1. Read and parse the task artifact
|
|
6
|
-
* 2. Resolve target subtask(s)
|
|
7
|
-
* 3. Gather parent chain context (story → feature → epic)
|
|
8
|
-
* 4. Build codebase context
|
|
9
|
-
* 5. Compose the implementation prompt
|
|
10
|
-
* 6. Dispatch to the configured coding agent
|
|
11
|
-
*/
|
|
12
|
-
import chalk from 'chalk';
|
|
13
|
-
import { getParentChain, readArtifact, readArtifactRaw, updateArtifact, } from '../services/artifact-service.js';
|
|
14
|
-
import { logger } from '../utils/logger.js';
|
|
15
|
-
import { createAgent } from './agent-factory.js';
|
|
16
|
-
import { composeImplementationPrompt } from './prompt-composer.js';
|
|
17
|
-
import { findSubtasks, formatSubtaskList, getNextPending, parseTaskMarkdown, } from './task-parser.js';
|
|
18
|
-
export async function executeImplementation(projectDir, config, taskId, opts) {
|
|
19
|
-
// 1. Read the task artifact (supports both TASK-xxx and QT-xxx)
|
|
20
|
-
const artifactType = taskId.startsWith('QT-') ? 'quick' : 'task';
|
|
21
|
-
const taskData = await readArtifact(projectDir, config, artifactType, taskId);
|
|
22
|
-
if (!taskData) {
|
|
23
|
-
logger.error(`Task list ${taskId} not found.`);
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
logger.heading(`Implement: ${taskId}`);
|
|
27
|
-
// 2. Parse subtasks
|
|
28
|
-
const allSubtasks = parseTaskMarkdown(taskData.content);
|
|
29
|
-
if (allSubtasks.length === 0) {
|
|
30
|
-
logger.warn('No subtasks found in this task list.');
|
|
31
|
-
logger.info('Task list content:');
|
|
32
|
-
console.log(taskData.content);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
// 3. Resolve target subtask(s)
|
|
36
|
-
let targetSubtasks = allSubtasks;
|
|
37
|
-
if (opts.next) {
|
|
38
|
-
const next = getNextPending(allSubtasks);
|
|
39
|
-
if (!next) {
|
|
40
|
-
logger.success('All subtasks are completed!');
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
targetSubtasks = [next];
|
|
44
|
-
logger.info(`Next pending: ${next.id} ${next.title}`);
|
|
45
|
-
}
|
|
46
|
-
else if (opts.subtask) {
|
|
47
|
-
const matches = findSubtasks(allSubtasks, opts.subtask);
|
|
48
|
-
if (matches.length === 0) {
|
|
49
|
-
logger.error(`No subtask matching "${opts.subtask}" found.`);
|
|
50
|
-
logger.dim('Available subtasks:');
|
|
51
|
-
console.log(formatSubtaskList(allSubtasks));
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
targetSubtasks = matches;
|
|
55
|
-
logger.info(`Matched ${matches.length} subtask(s):`);
|
|
56
|
-
for (const m of matches) {
|
|
57
|
-
logger.dim(` ${m.id} ${m.title}`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
// Implementing all subtasks
|
|
62
|
-
logger.info(`Implementing all ${allSubtasks.length} subtasks`);
|
|
63
|
-
}
|
|
64
|
-
// 4. Gather parent chain context
|
|
65
|
-
logger.info('Preparing implementation context...');
|
|
66
|
-
const parents = await getParentChain(projectDir, config, artifactType, taskId);
|
|
67
|
-
logger.success(`Read ${taskId} (${allSubtasks.length} subtasks)`);
|
|
68
|
-
let storyContent;
|
|
69
|
-
let featureContent;
|
|
70
|
-
let epicContent;
|
|
71
|
-
const storyId = taskData.data.storyId;
|
|
72
|
-
if (storyId) {
|
|
73
|
-
storyContent = (await readArtifactRaw(projectDir, config, 'story', storyId)) || undefined;
|
|
74
|
-
if (storyContent)
|
|
75
|
-
logger.success(`Read parent story (${storyId})`);
|
|
76
|
-
}
|
|
77
|
-
if (parents.feature) {
|
|
78
|
-
const featureId = parents.story?.data?.featureId;
|
|
79
|
-
if (featureId) {
|
|
80
|
-
featureContent =
|
|
81
|
-
(await readArtifactRaw(projectDir, config, 'feature', featureId)) || undefined;
|
|
82
|
-
if (featureContent)
|
|
83
|
-
logger.success(`Read parent feature (${featureId})`);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (parents.epic) {
|
|
87
|
-
const epicId = parents.feature?.data?.epicId;
|
|
88
|
-
if (epicId) {
|
|
89
|
-
epicContent = (await readArtifactRaw(projectDir, config, 'epic', epicId)) || undefined;
|
|
90
|
-
if (epicContent)
|
|
91
|
-
logger.success(`Read parent epic (${epicId})`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// 5. Build codebase context
|
|
95
|
-
let codebaseContext;
|
|
96
|
-
try {
|
|
97
|
-
const { buildCodebaseContext, formatCodebaseContext, extractKeywords } = await import('../ai/codebase/index.js');
|
|
98
|
-
const textToAnalyze = [taskData.content, storyContent || '', featureContent || ''].join(' ');
|
|
99
|
-
const keywords = extractKeywords(textToAnalyze);
|
|
100
|
-
const ctx = await buildCodebaseContext(projectDir, keywords);
|
|
101
|
-
codebaseContext = formatCodebaseContext(ctx);
|
|
102
|
-
const stackInfo = ctx.techStack
|
|
103
|
-
? ` — ${ctx.techStack.language}${ctx.techStack.framework ? ` + ${ctx.techStack.framework}` : ''}`
|
|
104
|
-
: '';
|
|
105
|
-
logger.success(`Scanned codebase${stackInfo}`);
|
|
106
|
-
}
|
|
107
|
-
catch {
|
|
108
|
-
// Codebase scanning is best-effort
|
|
109
|
-
}
|
|
110
|
-
// 6. Compose prompt
|
|
111
|
-
const prompt = composeImplementationPrompt({
|
|
112
|
-
taskId,
|
|
113
|
-
taskTitle: taskData.data.title || taskId,
|
|
114
|
-
taskContent: taskData.content,
|
|
115
|
-
targetSubtasks,
|
|
116
|
-
allSubtasks,
|
|
117
|
-
storyContent,
|
|
118
|
-
featureContent,
|
|
119
|
-
epicContent,
|
|
120
|
-
codebaseContext,
|
|
121
|
-
});
|
|
122
|
-
// 7. Handle dry run
|
|
123
|
-
if (opts.dryRun) {
|
|
124
|
-
logger.heading('Dry Run — Composed Prompt:');
|
|
125
|
-
console.log(chalk.dim('━'.repeat(60)));
|
|
126
|
-
console.log(prompt);
|
|
127
|
-
console.log(chalk.dim('━'.repeat(60)));
|
|
128
|
-
logger.dim(`Prompt length: ${prompt.length} chars (~${Math.ceil(prompt.length / 4)} tokens)`);
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
// 8. Resolve and launch coding agent
|
|
132
|
-
const agentName = (opts.agent || config.defaultAgent || 'claude');
|
|
133
|
-
const agent = await createAgent(agentName);
|
|
134
|
-
const available = await agent.isAvailable();
|
|
135
|
-
if (!available) {
|
|
136
|
-
logger.error(`Coding agent "${agentName}" is not available on this machine.`);
|
|
137
|
-
logger.dim(`Make sure the "${agentName}" CLI is installed and in your PATH.`);
|
|
138
|
-
logger.dim('');
|
|
139
|
-
logger.dim('Install instructions:');
|
|
140
|
-
logger.dim(' Claude: npm install -g @anthropic-ai/claude-code');
|
|
141
|
-
logger.dim(' Codex: npm install -g @openai/codex');
|
|
142
|
-
logger.dim(' Cursor: Install from https://cursor.sh');
|
|
143
|
-
logger.dim('');
|
|
144
|
-
logger.dim('Or use --dry-run to see the prompt without executing.');
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
logger.dim(`Prompt: ${prompt.length.toLocaleString()} chars (~${Math.ceil(prompt.length / 4).toLocaleString()} tokens)`);
|
|
148
|
-
logger.heading(`Launching ${agentName}...`);
|
|
149
|
-
console.log(chalk.dim('━'.repeat(60)));
|
|
150
|
-
const result = await agent.execute(prompt, {
|
|
151
|
-
cwd: projectDir,
|
|
152
|
-
stream: true,
|
|
153
|
-
dryRun: false,
|
|
154
|
-
});
|
|
155
|
-
console.log(chalk.dim('━'.repeat(60)));
|
|
156
|
-
if (result.exitCode === 0) {
|
|
157
|
-
// Mark implemented subtasks as done in the task file
|
|
158
|
-
await markSubtasksDone(projectDir, config, artifactType, taskId, targetSubtasks);
|
|
159
|
-
logger.success(`${agentName} completed successfully.`);
|
|
160
|
-
logger.dim('');
|
|
161
|
-
logger.dim('If something needs fixing, run:');
|
|
162
|
-
logger.dim(' planr task fix "describe the issue"');
|
|
163
|
-
logger.dim(' make build 2>&1 | planr task fix');
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
logger.warn(`${agentName} exited with code ${result.exitCode}.`);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
// ---------------------------------------------------------------------------
|
|
170
|
-
// Mark subtasks as done
|
|
171
|
-
// ---------------------------------------------------------------------------
|
|
172
|
-
async function markSubtasksDone(projectDir, config, artifactType, taskId, subtasks) {
|
|
173
|
-
const raw = await readArtifactRaw(projectDir, config, artifactType, taskId);
|
|
174
|
-
if (!raw)
|
|
175
|
-
return;
|
|
176
|
-
const ids = new Set(subtasks.map((s) => s.id));
|
|
177
|
-
let updated = raw;
|
|
178
|
-
for (const id of ids) {
|
|
179
|
-
// Match: `- [ ] 1.1 Title` (with optional leading whitespace for indented subtasks)
|
|
180
|
-
const pattern = new RegExp(`^(\\s*- )\\[ \\](\\s+${id.replace('.', '\\.')}\\s)`, 'm');
|
|
181
|
-
updated = updated.replace(pattern, '$1[x]$2');
|
|
182
|
-
}
|
|
183
|
-
if (updated !== raw) {
|
|
184
|
-
await updateArtifact(projectDir, config, artifactType, taskId, updated);
|
|
185
|
-
const count = ids.size;
|
|
186
|
-
logger.success(`Marked ${count} subtask${count > 1 ? 's' : ''} as done in ${taskId}`);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Send a follow-up message to the coding agent, continuing the
|
|
191
|
-
* previous session. This is the feedback loop for fixing issues
|
|
192
|
-
* found after implementation.
|
|
193
|
-
*/
|
|
194
|
-
export async function executeFollowUp(projectDir, config, message, opts) {
|
|
195
|
-
logger.heading('Fix / Follow-up');
|
|
196
|
-
// Compose a focused fix prompt
|
|
197
|
-
const prompt = composeFixPrompt(message);
|
|
198
|
-
logger.dim(`Prompt: ${prompt.length.toLocaleString()} chars (~${Math.ceil(prompt.length / 4).toLocaleString()} tokens)`);
|
|
199
|
-
const agentName = (opts.agent || config.defaultAgent || 'claude');
|
|
200
|
-
const agent = await createAgent(agentName);
|
|
201
|
-
const available = await agent.isAvailable();
|
|
202
|
-
if (!available) {
|
|
203
|
-
logger.error(`Coding agent "${agentName}" is not available.`);
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
logger.heading(`Continuing ${agentName} session...`);
|
|
207
|
-
console.log(chalk.dim('━'.repeat(60)));
|
|
208
|
-
const result = await agent.execute(prompt, {
|
|
209
|
-
cwd: projectDir,
|
|
210
|
-
stream: true,
|
|
211
|
-
dryRun: false,
|
|
212
|
-
continueSession: true,
|
|
213
|
-
});
|
|
214
|
-
console.log(chalk.dim('━'.repeat(60)));
|
|
215
|
-
if (result.exitCode === 0) {
|
|
216
|
-
logger.success(`${agentName} completed fix successfully.`);
|
|
217
|
-
logger.dim('');
|
|
218
|
-
logger.dim('Still broken? Run planr task fix again with the new error.');
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
logger.warn(`${agentName} exited with code ${result.exitCode}.`);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Compose a follow-up prompt that includes the error/issue context
|
|
226
|
-
* and clear instructions to fix the previously implemented code.
|
|
227
|
-
*/
|
|
228
|
-
function composeFixPrompt(userMessage) {
|
|
229
|
-
const sections = [];
|
|
230
|
-
sections.push('# Fix Required\n');
|
|
231
|
-
sections.push('The previously implemented code has an issue that needs fixing.\n');
|
|
232
|
-
// Detect if the message looks like error output (long, has stack traces, etc.)
|
|
233
|
-
const isErrorOutput = userMessage.length > 200 ||
|
|
234
|
-
userMessage.includes('Error:') ||
|
|
235
|
-
userMessage.includes('error:') ||
|
|
236
|
-
userMessage.includes('FAIL') ||
|
|
237
|
-
userMessage.includes('exit code');
|
|
238
|
-
if (isErrorOutput) {
|
|
239
|
-
sections.push('## Error Output\n');
|
|
240
|
-
sections.push('```');
|
|
241
|
-
sections.push(userMessage.trim());
|
|
242
|
-
sections.push('```');
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
sections.push('## Issue Description\n');
|
|
246
|
-
sections.push(userMessage.trim());
|
|
247
|
-
}
|
|
248
|
-
sections.push('\n## Instructions\n');
|
|
249
|
-
sections.push('1. Analyze the error/issue above.');
|
|
250
|
-
sections.push('2. Identify the root cause in the code you previously created.');
|
|
251
|
-
sections.push('3. Fix ONLY what is needed — do not rewrite unrelated code.');
|
|
252
|
-
sections.push('4. Verify the fix addresses the reported issue.');
|
|
253
|
-
sections.push('5. If the error involves missing dependencies, use compatible versions.');
|
|
254
|
-
return sections.join('\n');
|
|
255
|
-
}
|
|
256
|
-
//# sourceMappingURL=implementation-bridge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"implementation-bridge.js","sourceRoot":"","sources":["../../src/agents/implementation-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Progress display for coding agent execution.
|
|
3
|
-
*
|
|
4
|
-
* Provides a dynamic spinner with rotating messages, elapsed time,
|
|
5
|
-
* and real-time activity updates parsed from Claude's stream-json events.
|
|
6
|
-
* Extracted as a shared module so any agent adapter can reuse it.
|
|
7
|
-
*/
|
|
8
|
-
export interface ProgressSpinner {
|
|
9
|
-
/** Update the spinner with a specific tool-activity message */
|
|
10
|
-
setActivity(msg: string): void;
|
|
11
|
-
/** Stop the spinner and clear the line */
|
|
12
|
-
stop(): void;
|
|
13
|
-
}
|
|
14
|
-
export declare function formatElapsed(seconds: number): string;
|
|
15
|
-
/**
|
|
16
|
-
* Create a dynamic progress spinner that:
|
|
17
|
-
* - Rotates through varied waiting messages every 8 seconds
|
|
18
|
-
* - Switches to a specific activity when `setActivity()` is called
|
|
19
|
-
* - Always shows elapsed time
|
|
20
|
-
*/
|
|
21
|
-
export declare function createProgressSpinner(): ProgressSpinner;
|
|
22
|
-
/** Minimal shape of the Claude stream-json events we need */
|
|
23
|
-
export interface StreamEvent {
|
|
24
|
-
type: string;
|
|
25
|
-
message?: {
|
|
26
|
-
content?: Array<{
|
|
27
|
-
type: string;
|
|
28
|
-
name?: string;
|
|
29
|
-
input?: Record<string, unknown>;
|
|
30
|
-
}>;
|
|
31
|
-
};
|
|
32
|
-
result?: string;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Parse a stream-json event into a human-readable activity description.
|
|
36
|
-
* Returns `null` for events that don't represent a notable tool action.
|
|
37
|
-
*/
|
|
38
|
-
export declare function describeActivity(event: StreamEvent): string | null;
|
|
39
|
-
/** Minimal shape of Codex exec --json events */
|
|
40
|
-
export interface CodexEvent {
|
|
41
|
-
type: string;
|
|
42
|
-
item?: {
|
|
43
|
-
id?: string;
|
|
44
|
-
type?: string;
|
|
45
|
-
text?: string;
|
|
46
|
-
command?: string;
|
|
47
|
-
aggregated_output?: string;
|
|
48
|
-
exit_code?: number | null;
|
|
49
|
-
status?: string;
|
|
50
|
-
};
|
|
51
|
-
usage?: {
|
|
52
|
-
input_tokens?: number;
|
|
53
|
-
cached_input_tokens?: number;
|
|
54
|
-
output_tokens?: number;
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Parse a Codex JSONL event into a human-readable activity description.
|
|
59
|
-
* Returns `null` for events that don't represent a notable action.
|
|
60
|
-
*/
|
|
61
|
-
export declare function describeCodexActivity(event: CodexEvent): string | null;
|
|
62
|
-
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/agents/progress.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+BH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,0CAA0C;IAC1C,IAAI,IAAI,IAAI,CAAC;CACd;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAwCvD;AAMD,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACjC,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CA8BlE;AAaD,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE;QACL,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CA6BtE"}
|