developing-agent-forge 1.0.0 → 2.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 +42 -39
- package/README.zh-CN.md +42 -39
- package/developing-forge.yaml +35 -0
- package/dist/agents/developer.d.ts +15 -1
- package/dist/agents/developer.d.ts.map +1 -1
- package/dist/agents/developer.js +41 -4
- package/dist/agents/developer.js.map +1 -1
- package/dist/agents/manager.d.ts +7 -4
- package/dist/agents/manager.d.ts.map +1 -1
- package/dist/agents/manager.js +26 -13
- package/dist/agents/manager.js.map +1 -1
- package/dist/agents/reviewer.js +2 -2
- package/dist/agents/trajectory-optimizer.d.ts +1 -2
- package/dist/agents/trajectory-optimizer.d.ts.map +1 -1
- package/dist/agents/trajectory-optimizer.js +5 -8
- package/dist/agents/trajectory-optimizer.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pipeline/factory.d.ts +3 -0
- package/dist/pipeline/factory.d.ts.map +1 -0
- package/dist/pipeline/factory.js +7 -0
- package/dist/pipeline/factory.js.map +1 -0
- package/dist/pipeline/index.d.ts +2 -2
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +2 -2
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/pipeline.d.ts +49 -29
- package/dist/pipeline/pipeline.d.ts.map +1 -1
- package/dist/pipeline/pipeline.js +37 -24
- package/dist/pipeline/pipeline.js.map +1 -1
- package/dist/pipeline/pipelineskill.d.ts +43 -25
- package/dist/pipeline/pipelineskill.d.ts.map +1 -1
- package/dist/pipeline/pipelineskill.js +4 -5
- package/dist/pipeline/pipelineskill.js.map +1 -1
- package/dist/pipeline/project-devloop.d.ts +15 -0
- package/dist/pipeline/project-devloop.d.ts.map +1 -0
- package/dist/pipeline/project-devloop.js +59 -0
- package/dist/pipeline/project-devloop.js.map +1 -0
- package/dist/pipeline/task-devloop.d.ts +11 -0
- package/dist/pipeline/task-devloop.d.ts.map +1 -0
- package/dist/pipeline/task-devloop.js +77 -0
- package/dist/pipeline/task-devloop.js.map +1 -0
- package/package.json +3 -2
- package/skills/coding-style/SKILL.md +4 -4
- package/dist/pipeline/development.d.ts +0 -14
- package/dist/pipeline/development.d.ts.map +0 -1
- package/dist/pipeline/development.js +0 -55
- package/dist/pipeline/development.js.map +0 -1
- package/dist/pipeline/revision.d.ts +0 -10
- package/dist/pipeline/revision.d.ts.map +0 -1
- package/dist/pipeline/revision.js +0 -52
- package/dist/pipeline/revision.js.map +0 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Memory, defaultMemoryAgentNames, } from "memory-agent-forge";
|
|
2
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { TaskDevLoop } from "./task-devloop.js";
|
|
5
|
+
const MEMORY_DOMAIN_HINT = "Project progress memory for goals, completed tasks, current status, and task-selection context across project iterations.";
|
|
6
|
+
const FINISH_MARK = "FINISHED";
|
|
7
|
+
export class ProjectDevLoop {
|
|
8
|
+
async develop(team, targetPath, codingStyleSkillPath, goal, achiveDir, maxIterations, maxTaskDevLoopIterations, projectProgressMemoryPath, codeDesignMemoryPath, maxMemoryRounds, callbacks, logRecord) {
|
|
9
|
+
const agentVariables = {
|
|
10
|
+
targetPath: path.resolve(targetPath),
|
|
11
|
+
codingStyleSkillPath: path.resolve(codingStyleSkillPath),
|
|
12
|
+
goal,
|
|
13
|
+
};
|
|
14
|
+
await mkdir(achiveDir, { recursive: true });
|
|
15
|
+
const memoryStore = new Memory(defaultMemoryAgentNames);
|
|
16
|
+
const taskDevLoop = new TaskDevLoop();
|
|
17
|
+
for (let iteration = 1; iteration <= maxIterations; iteration++) {
|
|
18
|
+
console.log(`\n# Project dev loop iteration ${String(iteration)}\n`);
|
|
19
|
+
const archiveDir = path.join(achiveDir, new Date().toISOString().replace(/[:.]/g, "-"));
|
|
20
|
+
await mkdir(archiveDir, { recursive: true });
|
|
21
|
+
const codingManager = await team.createAgent("coding-manager");
|
|
22
|
+
const memoryGuidance = (await codingManager.runStreamed({
|
|
23
|
+
...agentVariables,
|
|
24
|
+
phase: "recall",
|
|
25
|
+
}, logRecord)).trim();
|
|
26
|
+
await writeFile(path.join(archiveDir, "project_devloop_memory_recall_guidance.md"), memoryGuidance, "utf8");
|
|
27
|
+
const memory = (await memoryStore.recall(team, MEMORY_DOMAIN_HINT, projectProgressMemoryPath, maxMemoryRounds, memoryGuidance, logRecord))
|
|
28
|
+
.map(({ content }) => content)
|
|
29
|
+
.join("\n\n");
|
|
30
|
+
await writeFile(path.join(archiveDir, "project_devloop_recalled_memory.md"), memory, "utf8");
|
|
31
|
+
const currentTask = (await codingManager.runStreamed({
|
|
32
|
+
...agentVariables,
|
|
33
|
+
memory,
|
|
34
|
+
finishMark: FINISH_MARK,
|
|
35
|
+
phase: "select",
|
|
36
|
+
}, logRecord)).trim();
|
|
37
|
+
await writeFile(path.join(archiveDir, "current_task.md"), currentTask, "utf8");
|
|
38
|
+
if (currentTask.trim() === FINISH_MARK) {
|
|
39
|
+
console.log(`\n# ${FINISH_MARK}\n`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
await callbacks?.onTaskStart?.(agentVariables, currentTask);
|
|
43
|
+
const taskDevReports = await taskDevLoop.develop(team, agentVariables.targetPath, agentVariables.codingStyleSkillPath, agentVariables.goal, archiveDir, maxTaskDevLoopIterations, currentTask, codeDesignMemoryPath, maxMemoryRounds, logRecord);
|
|
44
|
+
const thingsToRemember = (await codingManager.runStreamed({
|
|
45
|
+
...agentVariables,
|
|
46
|
+
memory,
|
|
47
|
+
finishMark: FINISH_MARK,
|
|
48
|
+
phase: "update",
|
|
49
|
+
currentTask,
|
|
50
|
+
taskDevReport: taskDevReports.join("\n\n"),
|
|
51
|
+
}, logRecord)).trim();
|
|
52
|
+
await writeFile(path.join(archiveDir, "project_devloop_things_to_remember.md"), thingsToRemember, "utf8");
|
|
53
|
+
await memoryStore.remember(team, MEMORY_DOMAIN_HINT, projectProgressMemoryPath, maxMemoryRounds, thingsToRemember, logRecord);
|
|
54
|
+
await callbacks?.onTaskFinish?.(agentVariables, currentTask, taskDevReports, thingsToRemember);
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`Reached --max-iterations ${String(maxIterations)} before the coding-manager returned ${FINISH_MARK}.`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=project-devloop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-devloop.js","sourceRoot":"","sources":["../../src/pipeline/project-devloop.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EACN,uBAAuB,GAExB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAwC,MAAM,mBAAmB,CAAC;AAEtF,MAAM,kBAAkB,GACtB,2HAA2H,CAAC;AAmB9H,MAAM,WAAW,GAAG,UAAU,CAAC;AAE/B,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,OAAO,CACX,IAAmD,EACnD,UAAkB,EAClB,oBAA4B,EAC5B,IAAY,EACZ,SAAiB,EACjB,aAAqB,EACrB,wBAAgC,EAChC,yBAAiC,EACjC,oBAA4B,EAC5B,eAAuB,EACvB,SAAmC,EACnC,SAA0B;QAE1B,MAAM,cAAc,GAA6B;YAC/C,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACpC,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;YACxD,IAAI;SACL,CAAC;QAEF,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QAEtC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,IAAI,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YACxF,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE7C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;YAC/D,MAAM,cAAc,GAAG,CACrB,MAAM,aAAa,CAAC,WAAW,CAC7B;gBACE,GAAG,cAAc;gBACjB,KAAK,EAAE,QAAQ;aAChB,EACD,SAAS,CACV,CACF,CAAC,IAAI,EAAE,CAAC;YACT,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,2CAA2C,CAAC,EAClE,cAAc,EACd,MAAM,CACP,CAAC;YAEF,MAAM,MAAM,GAAG,CACb,MAAM,WAAW,CAAC,MAAM,CACtB,IAAI,EACJ,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,cAAc,EACd,SAAS,CACV,CACF;iBACE,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC;iBAC7B,IAAI,CAAC,MAAM,CAAC,CAAC;YAChB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oCAAoC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAE7F,MAAM,WAAW,GAAG,CAClB,MAAM,aAAa,CAAC,WAAW,CAC7B;gBACE,GAAG,cAAc;gBACjB,MAAM;gBACN,UAAU,EAAE,WAAW;gBACvB,KAAK,EAAE,QAAQ;aAChB,EACD,SAAS,CACV,CACF,CAAC,IAAI,EAAE,CAAC;YACT,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAE/E,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,OAAO,WAAW,IAAI,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,MAAM,SAAS,EAAE,WAAW,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAE5D,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,OAAO,CAC9C,IAAI,EACJ,cAAc,CAAC,UAAU,EACzB,cAAc,CAAC,oBAAoB,EACnC,cAAc,CAAC,IAAI,EACnB,UAAU,EACV,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,SAAS,CACV,CAAC;YAEF,MAAM,gBAAgB,GAAG,CACvB,MAAM,aAAa,CAAC,WAAW,CAC7B;gBACE,GAAG,cAAc;gBACjB,MAAM;gBACN,UAAU,EAAE,WAAW;gBACvB,KAAK,EAAE,QAAQ;gBACf,WAAW;gBACX,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;aAC3C,EACD,SAAS,CACV,CACF,CAAC,IAAI,EAAE,CAAC;YACT,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,uCAAuC,CAAC,EAC9D,gBAAgB,EAChB,MAAM,CACP,CAAC;YACF,MAAM,WAAW,CAAC,QAAQ,CACxB,IAAI,EACJ,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,EAChB,SAAS,CACV,CAAC;YAEF,MAAM,SAAS,EAAE,YAAY,EAAE,CAC7B,cAAc,EACd,WAAW,EACX,cAAc,EACd,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,aAAa,CAAC,uCAAuC,WAAW,GAAG,CACvG,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AgentTeam, RecordCallback } from "coding-agent-forge";
|
|
2
|
+
import { type MemoryAgentVariablesByName } from "memory-agent-forge";
|
|
3
|
+
import type { CodeReviewerVariables, DeveloperVariables } from "../agents/index.js";
|
|
4
|
+
export type TaskDevLoopAgentVariablesByName = {
|
|
5
|
+
developer: DeveloperVariables;
|
|
6
|
+
"code-reviewer": CodeReviewerVariables;
|
|
7
|
+
} & MemoryAgentVariablesByName;
|
|
8
|
+
export declare class TaskDevLoop {
|
|
9
|
+
develop(team: AgentTeam<TaskDevLoopAgentVariablesByName>, targetPath: string, codingStyleSkillPath: string, goal: string, archiveDir: string, maxIterations: number, currentTask: string, codeDesignMemoryPath: string, maxMemoryRounds: number, logRecord?: RecordCallback): Promise<string[]>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=task-devloop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-devloop.d.ts","sourceRoot":"","sources":["../../src/pipeline/task-devloop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,EAAE,kBAAkB,CAAC;IAC9B,eAAe,EAAE,qBAAqB,CAAC;CACxC,GAAG,0BAA0B,CAAC;AAM/B,qBAAa,WAAW;IAChB,OAAO,CACX,IAAI,EAAE,SAAS,CAAC,+BAA+B,CAAC,EAChD,UAAU,EAAE,MAAM,EAClB,oBAAoB,EAAE,MAAM,EAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,oBAAoB,EAAE,MAAM,EAC5B,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC;CAiIrB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Memory, defaultMemoryAgentNames, } from "memory-agent-forge";
|
|
2
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
const ACCEPT_MARK = "ACCEPT";
|
|
5
|
+
const MEMORY_DOMAIN_HINT = "Code design memory for logic relationships between code, design rationale, invariants, and implementation decisions in the target repository.";
|
|
6
|
+
export class TaskDevLoop {
|
|
7
|
+
async develop(team, targetPath, codingStyleSkillPath, goal, archiveDir, maxIterations, currentTask, codeDesignMemoryPath, maxMemoryRounds, logRecord) {
|
|
8
|
+
const agentVariables = {
|
|
9
|
+
targetPath,
|
|
10
|
+
codingStyleSkillPath,
|
|
11
|
+
goal,
|
|
12
|
+
};
|
|
13
|
+
await mkdir(archiveDir, { recursive: true });
|
|
14
|
+
const developer = await team.createAgent("developer");
|
|
15
|
+
const codeReviewer = await team.createAgent("code-reviewer");
|
|
16
|
+
const memoryStore = new Memory(defaultMemoryAgentNames);
|
|
17
|
+
const memoryGuidance = (await developer.runStreamed({
|
|
18
|
+
...agentVariables,
|
|
19
|
+
currentTask,
|
|
20
|
+
phase: "recall",
|
|
21
|
+
}, logRecord)).trim();
|
|
22
|
+
await writeFile(path.join(archiveDir, "task_devloop_memory_recall_guidance.md"), memoryGuidance, "utf8");
|
|
23
|
+
const memory = (await memoryStore.recall(team, MEMORY_DOMAIN_HINT, codeDesignMemoryPath, maxMemoryRounds, memoryGuidance, logRecord))
|
|
24
|
+
.map(({ content }) => content)
|
|
25
|
+
.join("\n\n");
|
|
26
|
+
await writeFile(path.join(archiveDir, "task_devloop_recalled_memory.md"), memory, "utf8");
|
|
27
|
+
let previousReviewerReport = "";
|
|
28
|
+
const taskDevReports = [];
|
|
29
|
+
for (let iteration = 1; iteration <= maxIterations; iteration++) {
|
|
30
|
+
console.log(`\n# Developer/reviewer iteration ${String(iteration)}\n`);
|
|
31
|
+
const developerVariables = {
|
|
32
|
+
...agentVariables,
|
|
33
|
+
currentTask,
|
|
34
|
+
memory,
|
|
35
|
+
phase: "develop",
|
|
36
|
+
};
|
|
37
|
+
if (previousReviewerReport) {
|
|
38
|
+
developerVariables.reviewerReport = previousReviewerReport;
|
|
39
|
+
}
|
|
40
|
+
const developerReport = (await developer.runStreamed(developerVariables, logRecord)).trim();
|
|
41
|
+
await writeFile(path.join(archiveDir, `developer_report_${String(iteration).padStart(3, "0")}.md`), developerReport, "utf8");
|
|
42
|
+
taskDevReports.push(`Developer report ${String(iteration)}:\n${developerReport}`);
|
|
43
|
+
const reviewerReport = (await codeReviewer.runStreamed({
|
|
44
|
+
...agentVariables,
|
|
45
|
+
acceptMark: ACCEPT_MARK,
|
|
46
|
+
currentTask,
|
|
47
|
+
developerReport,
|
|
48
|
+
}, logRecord)).trim();
|
|
49
|
+
await writeFile(path.join(archiveDir, `code_review_${String(iteration).padStart(3, "0")}.md`), reviewerReport, "utf8");
|
|
50
|
+
taskDevReports.push(`Reviewer report ${String(iteration)}:\n${reviewerReport}`);
|
|
51
|
+
const accepted = reviewerReport.trim() === ACCEPT_MARK;
|
|
52
|
+
if (accepted) {
|
|
53
|
+
taskDevReports.push("Reviewer accepted the changes.");
|
|
54
|
+
}
|
|
55
|
+
if (!accepted && iteration === maxIterations) {
|
|
56
|
+
taskDevReports.push("Reviewer did not accept the changes before the maximum review attempts.");
|
|
57
|
+
}
|
|
58
|
+
if (accepted) {
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
previousReviewerReport = reviewerReport;
|
|
62
|
+
}
|
|
63
|
+
const taskDevReport = taskDevReports.join("\n\n");
|
|
64
|
+
await writeFile(path.join(archiveDir, "task_devloop_report.md"), taskDevReport, "utf8");
|
|
65
|
+
const thingsToRemember = (await developer.runStreamed({
|
|
66
|
+
...agentVariables,
|
|
67
|
+
currentTask,
|
|
68
|
+
memory,
|
|
69
|
+
phase: "update",
|
|
70
|
+
taskDevReport,
|
|
71
|
+
}, logRecord)).trim();
|
|
72
|
+
await writeFile(path.join(archiveDir, "task_devloop_things_to_remember.md"), thingsToRemember, "utf8");
|
|
73
|
+
await memoryStore.remember(team, MEMORY_DOMAIN_HINT, codeDesignMemoryPath, maxMemoryRounds, thingsToRemember, logRecord);
|
|
74
|
+
return taskDevReports;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=task-devloop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-devloop.js","sourceRoot":"","sources":["../../src/pipeline/task-devloop.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "developing-agent-forge",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Goal-driven code development pipelines for coding agents, built on coding-agent-forge.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -48,7 +48,8 @@
|
|
|
48
48
|
"developing-skill": "tsx src/cli.ts developing-skill"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"coding-agent-forge": "^1.3.1"
|
|
51
|
+
"coding-agent-forge": "^1.3.1",
|
|
52
|
+
"memory-agent-forge": "^1.0.0"
|
|
52
53
|
},
|
|
53
54
|
"devDependencies": {
|
|
54
55
|
"@eslint/js": "^9.39.4",
|
|
@@ -393,7 +393,7 @@ Queue or perform docs sync only when docs are explicitly requested, are part of
|
|
|
393
393
|
the active workflow, or the accepted change would leave a current documented
|
|
394
394
|
surface materially misleading. If docs are excluded from the source/test task,
|
|
395
395
|
do not promote stale documentation found during validation or TODO maintenance
|
|
396
|
-
into the next
|
|
396
|
+
into the next developing task unless the user, active workflow, or existing
|
|
397
397
|
trajectory explicitly selects docs sync. Record possible docs staleness as a
|
|
398
398
|
caveat or candidate, not as a selected handoff.
|
|
399
399
|
|
|
@@ -420,7 +420,7 @@ Do not use TODO or handoff files to invent the next source, harness, docs, or
|
|
|
420
420
|
implementation task. Select a next task only when the user has explicitly selected
|
|
421
421
|
it, the current workflow instruction names that handoff, or an existing active
|
|
422
422
|
trajectory already contains that selected task. Otherwise leave a neutral
|
|
423
|
-
waiting state such as "no next
|
|
423
|
+
waiting state such as "no next developing task is selected."
|
|
424
424
|
|
|
425
425
|
When the accepted source/test task explicitly excluded docs, TODO, exports,
|
|
426
426
|
harnesses, or generated outputs, preserve that exclusion in the
|
|
@@ -432,7 +432,7 @@ task-selection pass, not a selected next task by themselves. A repository habit,
|
|
|
432
432
|
recent sequence, or reasonable maintenance preference is not explicit selection
|
|
433
433
|
when the just-finished task excluded that surface. Require selection language
|
|
434
434
|
from the user, a workflow instruction, or an already-active backlog item before
|
|
435
|
-
writing "next
|
|
435
|
+
writing "next developing task: sync docs" or any equivalent handoff after a
|
|
436
436
|
source/test task that excluded docs.
|
|
437
437
|
Explicit exclusions in the current task are not backlog seeds. If the user says
|
|
438
438
|
not to add a capability, parser family, registry, export, adapter, harness,
|
|
@@ -448,7 +448,7 @@ otherwise leave the trajectory neutral.
|
|
|
448
448
|
Do not use a docs-only sync that merely documented an accepted helper as the
|
|
449
449
|
reason to select an adjacent implementation task. Newly visible omissions in
|
|
450
450
|
the docs may be recorded as candidates for later selection, but the next
|
|
451
|
-
|
|
451
|
+
developing task stays neutral unless the user or active workflow explicitly
|
|
452
452
|
selects that implementation work.
|
|
453
453
|
|
|
454
454
|
If a docs-only sync is explicitly selected, name the exact stale current
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { AgentTeam, RecordCallback } from "coding-agent-forge";
|
|
2
|
-
import type { CodingManagerVariables, DevelopingAgentVariables } from "../agents/index.js";
|
|
3
|
-
import { type RevisionAgentVariablesByName } from "./revision.js";
|
|
4
|
-
export type DevelopmentAgentVariablesByName = RevisionAgentVariablesByName & {
|
|
5
|
-
"coding-manager": CodingManagerVariables;
|
|
6
|
-
};
|
|
7
|
-
export type DevelopmentCallbacks = {
|
|
8
|
-
onTaskStart?: (agentVariables: DevelopingAgentVariables, currentTask: string) => Promise<void> | void;
|
|
9
|
-
onTaskFinish?: (agentVariables: DevelopingAgentVariables, currentTask: string, revisionReports: readonly string[], todoUpdateReport: string) => Promise<void> | void;
|
|
10
|
-
};
|
|
11
|
-
export declare class Development {
|
|
12
|
-
develop(team: AgentTeam<DevelopmentAgentVariablesByName>, targetPath: string, achiveDir: string, artifactPath: string, codingStyleSkillPath: string, goal: string, maxIterations: number, maxRevisionIterations: number, callbacks?: DevelopmentCallbacks, logRecord?: RecordCallback): Promise<void>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=development.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"development.d.ts","sourceRoot":"","sources":["../../src/pipeline/development.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAY,KAAK,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,MAAM,+BAA+B,GAAG,4BAA4B,GAAG;IAC3E,gBAAgB,EAAE,sBAAsB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,CACZ,cAAc,EAAE,wBAAwB,EACxC,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,CACb,cAAc,EAAE,wBAAwB,EACxC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,gBAAgB,EAAE,MAAM,KACrB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B,CAAC;AAIF,qBAAa,WAAW;IAChB,OAAO,CACX,IAAI,EAAE,SAAS,CAAC,+BAA+B,CAAC,EAChD,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,oBAAoB,EAAE,MAAM,EAC5B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,MAAM,EAC7B,SAAS,CAAC,EAAE,oBAAoB,EAChC,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,IAAI,CAAC;CAsFjB"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
2
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { Revision } from "./revision.js";
|
|
5
|
-
const FINISH_MARK = "FINISHED";
|
|
6
|
-
export class Development {
|
|
7
|
-
async develop(team, targetPath, achiveDir, artifactPath, codingStyleSkillPath, goal, maxIterations, maxRevisionIterations, callbacks, logRecord) {
|
|
8
|
-
const resolvedAchiveDir = path.resolve(achiveDir);
|
|
9
|
-
const resolvedArtifactPath = path.resolve(artifactPath);
|
|
10
|
-
const todoPath = path.join(resolvedArtifactPath, "TODO.md");
|
|
11
|
-
const agentVariables = {
|
|
12
|
-
targetPath: path.resolve(targetPath),
|
|
13
|
-
codingStyleSkillPath: path.resolve(codingStyleSkillPath),
|
|
14
|
-
goal,
|
|
15
|
-
};
|
|
16
|
-
const revision = new Revision();
|
|
17
|
-
await mkdir(resolvedAchiveDir, { recursive: true });
|
|
18
|
-
await mkdir(resolvedArtifactPath, { recursive: true });
|
|
19
|
-
if (!existsSync(todoPath)) {
|
|
20
|
-
await writeFile(todoPath, "# TODO", "utf8");
|
|
21
|
-
}
|
|
22
|
-
await mkdir(agentVariables.targetPath, { recursive: true });
|
|
23
|
-
for (let iteration = 1; iteration <= maxIterations; iteration++) {
|
|
24
|
-
console.log(`\n# Developing iteration ${String(iteration)}\n`);
|
|
25
|
-
const archiveDir = path.join(resolvedAchiveDir, new Date().toISOString().replace(/[:.]/g, "-"));
|
|
26
|
-
await mkdir(archiveDir, { recursive: true });
|
|
27
|
-
const codingManager = await team.createAgent("coding-manager");
|
|
28
|
-
const currentTask = (await codingManager.runStreamed({
|
|
29
|
-
...agentVariables,
|
|
30
|
-
todoPath,
|
|
31
|
-
finishMark: FINISH_MARK,
|
|
32
|
-
phase: "select",
|
|
33
|
-
}, logRecord)).trim();
|
|
34
|
-
await writeFile(path.join(archiveDir, "current_task.md"), currentTask, "utf8");
|
|
35
|
-
if (currentTask.trim() === FINISH_MARK) {
|
|
36
|
-
console.log(`\n# ${FINISH_MARK}\n`);
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
await callbacks?.onTaskStart?.(agentVariables, currentTask);
|
|
40
|
-
const revisionReports = await revision.revise(team, agentVariables.targetPath, agentVariables.codingStyleSkillPath, agentVariables.goal, archiveDir, maxRevisionIterations, currentTask, logRecord);
|
|
41
|
-
const todoUpdateReport = (await codingManager.runStreamed({
|
|
42
|
-
...agentVariables,
|
|
43
|
-
todoPath,
|
|
44
|
-
finishMark: FINISH_MARK,
|
|
45
|
-
phase: "update",
|
|
46
|
-
currentTask,
|
|
47
|
-
revisionReport: revisionReports.join("\n\n"),
|
|
48
|
-
}, logRecord)).trim();
|
|
49
|
-
await writeFile(path.join(archiveDir, "todo_update_report.md"), todoUpdateReport, "utf8");
|
|
50
|
-
await callbacks?.onTaskFinish?.(agentVariables, currentTask, revisionReports, todoUpdateReport);
|
|
51
|
-
}
|
|
52
|
-
throw new Error(`Reached --max-iterations ${String(maxIterations)} before the coding-manager returned ${FINISH_MARK}.`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=development.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"development.js","sourceRoot":"","sources":["../../src/pipeline/development.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { AgentTeam, RecordCallback } from "coding-agent-forge";
|
|
2
|
-
import type { CodeReviewerVariables, DeveloperVariables } from "../agents/index.js";
|
|
3
|
-
export type RevisionAgentVariablesByName = {
|
|
4
|
-
developer: DeveloperVariables;
|
|
5
|
-
"code-reviewer": CodeReviewerVariables;
|
|
6
|
-
};
|
|
7
|
-
export declare class Revision {
|
|
8
|
-
revise(team: AgentTeam<RevisionAgentVariablesByName>, targetPath: string, codingStyleSkillPath: string, goal: string, archiveDir: string, maxIterations: number, currentTask: string, logRecord?: RecordCallback): Promise<string[]>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=revision.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"revision.d.ts","sourceRoot":"","sources":["../../src/pipeline/revision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpE,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,eAAe,EAAE,qBAAqB,CAAC;CACxC,CAAC;AAIF,qBAAa,QAAQ;IACb,MAAM,CACV,IAAI,EAAE,SAAS,CAAC,4BAA4B,CAAC,EAC7C,UAAU,EAAE,MAAM,EAClB,oBAAoB,EAAE,MAAM,EAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC;CAyErB"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
const ACCEPT_MARK = "ACCEPT";
|
|
4
|
-
export class Revision {
|
|
5
|
-
async revise(team, targetPath, codingStyleSkillPath, goal, archiveDir, maxIterations, currentTask, logRecord) {
|
|
6
|
-
const agentVariables = {
|
|
7
|
-
targetPath,
|
|
8
|
-
codingStyleSkillPath,
|
|
9
|
-
goal,
|
|
10
|
-
};
|
|
11
|
-
await mkdir(archiveDir, { recursive: true });
|
|
12
|
-
const developer = await team.createAgent("developer");
|
|
13
|
-
const codeReviewer = await team.createAgent("code-reviewer");
|
|
14
|
-
let previousReviewerReport = "";
|
|
15
|
-
const revisionReports = [];
|
|
16
|
-
for (let revision = 1; revision <= maxIterations; revision++) {
|
|
17
|
-
console.log(`\n# Revision ${String(revision)}\n`);
|
|
18
|
-
const developerVariables = {
|
|
19
|
-
...agentVariables,
|
|
20
|
-
currentTask,
|
|
21
|
-
};
|
|
22
|
-
if (previousReviewerReport) {
|
|
23
|
-
developerVariables.reviewerReport = previousReviewerReport;
|
|
24
|
-
}
|
|
25
|
-
const developerReport = (await developer.runStreamed(developerVariables, logRecord)).trim();
|
|
26
|
-
await writeFile(path.join(archiveDir, `developer_report_${String(revision).padStart(3, "0")}.md`), developerReport, "utf8");
|
|
27
|
-
revisionReports.push(`Developer report ${String(revision)}:\n${developerReport}`);
|
|
28
|
-
const reviewerReport = (await codeReviewer.runStreamed({
|
|
29
|
-
...agentVariables,
|
|
30
|
-
acceptMark: ACCEPT_MARK,
|
|
31
|
-
currentTask,
|
|
32
|
-
developerReport,
|
|
33
|
-
}, logRecord)).trim();
|
|
34
|
-
await writeFile(path.join(archiveDir, `code_review_${String(revision).padStart(3, "0")}.md`), reviewerReport, "utf8");
|
|
35
|
-
revisionReports.push(`Reviewer report ${String(revision)}:\n${reviewerReport}`);
|
|
36
|
-
const accepted = reviewerReport.trim() === ACCEPT_MARK;
|
|
37
|
-
if (accepted) {
|
|
38
|
-
revisionReports.push("Reviewer accepted the changes.");
|
|
39
|
-
}
|
|
40
|
-
if (!accepted && revision === maxIterations) {
|
|
41
|
-
revisionReports.push("Reviewer did not accept the changes before max revision iterations.");
|
|
42
|
-
}
|
|
43
|
-
if (accepted) {
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
previousReviewerReport = reviewerReport;
|
|
47
|
-
}
|
|
48
|
-
await writeFile(path.join(archiveDir, "revision_report.md"), revisionReports.join("\n\n"), "utf8");
|
|
49
|
-
return revisionReports;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=revision.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"revision.js","sourceRoot":"","sources":["../../src/pipeline/revision.ts"],"names":[],"mappings":"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"}
|