developing-agent-forge 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +25 -25
  2. package/README.zh-CN.md +30 -30
  3. package/dist/agents/developer.d.ts +6 -6
  4. package/dist/agents/developer.d.ts.map +1 -1
  5. package/dist/agents/developer.js +49 -30
  6. package/dist/agents/developer.js.map +1 -1
  7. package/dist/agents/index.d.ts +2 -2
  8. package/dist/agents/index.d.ts.map +1 -1
  9. package/dist/agents/index.js +1 -1
  10. package/dist/agents/index.js.map +1 -1
  11. package/dist/agents/manager.d.ts +8 -6
  12. package/dist/agents/manager.d.ts.map +1 -1
  13. package/dist/agents/manager.js +99 -23
  14. package/dist/agents/manager.js.map +1 -1
  15. package/dist/agents/reviewer.d.ts +6 -2
  16. package/dist/agents/reviewer.d.ts.map +1 -1
  17. package/dist/agents/reviewer.js +69 -9
  18. package/dist/agents/reviewer.js.map +1 -1
  19. package/dist/agents/trajectory-optimizer.d.ts +3 -3
  20. package/dist/agents/trajectory-optimizer.d.ts.map +1 -1
  21. package/dist/agents/trajectory-optimizer.js +28 -17
  22. package/dist/agents/trajectory-optimizer.js.map +1 -1
  23. package/dist/pipeline/index.d.ts +1 -1
  24. package/dist/pipeline/index.d.ts.map +1 -1
  25. package/dist/pipeline/index.js +1 -1
  26. package/dist/pipeline/index.js.map +1 -1
  27. package/dist/pipeline/pipelineskill.d.ts.map +1 -1
  28. package/dist/pipeline/pipelineskill.js +5 -6
  29. package/dist/pipeline/pipelineskill.js.map +1 -1
  30. package/dist/pipeline/project-devloop.d.ts +3 -3
  31. package/dist/pipeline/project-devloop.d.ts.map +1 -1
  32. package/dist/pipeline/project-devloop.js +19 -21
  33. package/dist/pipeline/project-devloop.js.map +1 -1
  34. package/dist/pipeline/task-devloop.d.ts +8 -2
  35. package/dist/pipeline/task-devloop.d.ts.map +1 -1
  36. package/dist/pipeline/task-devloop.js +44 -23
  37. package/dist/pipeline/task-devloop.js.map +1 -1
  38. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/agents/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAiC,MAAM,YAAY,CAAC;AAyB5E,MAAM,OAAO,kBAAmB,SAAQ,eAAuC;IACnE,WAAW,CAAC,SAA2C;QAC/D,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpE,MAAM,+BAA+B,GAAG,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;QAC1F,MAAM,mBAAmB,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5D,IAAI,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO;EACX,+BAA+B;;EAE/B,mBAAmB;;gCAEW,UAAU;;;CAGzC,CAAC;QACE,CAAC;QAED,IAAI,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO;EACX,+BAA+B;;EAE/B,mBAAmB;;;EAGnB,SAAS,CAAC,WAAW;;;EAGrB,SAAS,CAAC,MAAM;;;EAGhB,SAAS,CAAC,aAAa;;gCAEO,UAAU;;;CAGzC,CAAC;QACE,CAAC;QAED,OAAO;EACT,+BAA+B;;EAE/B,mBAAmB;;;EAGnB,SAAS,CAAC,MAAM;;gCAEc,UAAU;;;;;;EAMxC,SAAS,CAAC,UAAU;CACrB,CAAC;IACA,CAAC;CACF"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/agents/manager.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,14 @@
1
+ import type { RecordCallback } from "coding-agent-forge";
1
2
  import { DevelopingAgent, type DevelopingAgentVariables } from "./types.js";
2
3
  export type CodeReviewerVariables = DevelopingAgentVariables & {
3
- acceptMark: string;
4
- currentTask: string;
4
+ taskBrief: string;
5
5
  developerReport: string;
6
+ codeDesignMemory: string;
6
7
  };
8
+ export type ReviewDecision = "ACCEPT" | "REVISE" | "REDIRECT";
7
9
  export declare class CodeReviewerAgent extends DevelopingAgent<CodeReviewerVariables> {
10
+ runStreamed(variables: CodeReviewerVariables, onRecord?: RecordCallback): Promise<string>;
11
+ parseDecision(reviewerReport: string): ReviewDecision;
8
12
  protected buildPrompt(variables: Readonly<CodeReviewerVariables>): string;
9
13
  }
10
14
  //# sourceMappingURL=reviewer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,KAAK,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE5E,MAAM,MAAM,qBAAqB,GAAG,wBAAwB,GAAG;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,qBAAa,iBAAkB,SAAQ,eAAe,CAAC,qBAAqB,CAAC;IAC3E,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,MAAM;CA4B1E"}
1
+ {"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,KAAK,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE5E,MAAM,MAAM,qBAAqB,GAAG,wBAAwB,GAAG;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAI9D,qBAAa,iBAAkB,SAAQ,eAAe,CAAC,qBAAqB,CAAC;IAC5D,WAAW,CACxB,SAAS,EAAE,qBAAqB,EAChC,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,MAAM,CAAC;IAuClB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc;IAQrD,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,MAAM;CA4C1E"}
@@ -1,30 +1,90 @@
1
1
  import { codingStyleSkillInstruction, goalInstruction } from "./prompts.js";
2
2
  import { DevelopingAgent } from "./types.js";
3
+ const REVIEW_DECISION_PATTERN = /^(ACCEPT|REVISE|REDIRECT)/;
4
+ const MAX_FORMAT_CORRECTION_ATTEMPTS = 8;
3
5
  export class CodeReviewerAgent extends DevelopingAgent {
6
+ async runStreamed(variables, onRecord) {
7
+ let reviewerReport = await super.runStreamed(variables, onRecord);
8
+ try {
9
+ this.parseDecision(reviewerReport);
10
+ return reviewerReport;
11
+ }
12
+ catch {
13
+ for (let attempt = 1; attempt <= MAX_FORMAT_CORRECTION_ATTEMPTS; attempt++) {
14
+ reviewerReport = (await this.thread.runStreamed(`
15
+ Previous review output did not follow the required format.
16
+ The output must start with exactly one of:
17
+ ACCEPT
18
+ REVISE
19
+ REDIRECT
20
+
21
+ Previous output:
22
+ ${reviewerReport}
23
+
24
+ Please correct it.
25
+ `, onRecord)).trim();
26
+ try {
27
+ this.parseDecision(reviewerReport);
28
+ return reviewerReport;
29
+ }
30
+ catch {
31
+ if (attempt === MAX_FORMAT_CORRECTION_ATTEMPTS) {
32
+ throw new Error(`code-reviewer did not output a valid first-line decision after ${String(MAX_FORMAT_CORRECTION_ATTEMPTS)} correction attempts.`);
33
+ }
34
+ }
35
+ }
36
+ }
37
+ throw new Error("Unreachable code-reviewer format correction state.");
38
+ }
39
+ parseDecision(reviewerReport) {
40
+ const match = REVIEW_DECISION_PATTERN.exec(reviewerReport.trimStart());
41
+ if (match === null) {
42
+ throw new Error("Review report must start with ACCEPT, REVISE, or REDIRECT.");
43
+ }
44
+ return match[1];
45
+ }
4
46
  buildPrompt(variables) {
5
47
  const codingStyleSkillPath = this.workspaceRelativePath(variables.codingStyleSkillPath);
6
48
  const targetPath = this.workspaceRelativePath(variables.targetPath);
7
49
  const codingStyleSkillInstructionText = codingStyleSkillInstruction(codingStyleSkillPath);
8
50
  const goalInstructionText = goalInstruction(variables.goal);
9
- return (codingStyleSkillInstructionText +
10
- `
51
+ return `
52
+ ${codingStyleSkillInstructionText}
53
+
54
+ ${goalInstructionText}
11
55
 
12
56
  Work in the target repository at ${targetPath}/.
13
57
  Review the current code. Read only.
14
58
 
15
- ${goalInstructionText}
59
+ Task Brief:
60
+ ${variables.taskBrief}
16
61
 
17
- Current developing task:
18
- ${variables.currentTask}
62
+ Related code design memory:
63
+ ${variables.codeDesignMemory}
19
64
 
20
65
  Developer report:
21
66
  ${variables.developerReport}
22
67
 
23
- If the code for the current task is complete and needs no more changes, output exactly:
24
- ${variables.acceptMark}
68
+ Review the Developer's result using the Task Brief, Developer report, and code design memory.
69
+
70
+ Focus on:
71
+ - whether the Objective is actually improved
72
+ - whether the evidence supports the Developer's claims
73
+ - whether the code quality and design remain healthy
74
+ - whether the change respects existing code relationships and design memory
75
+ - whether the next action should be revision, manager redirection, or acceptance
76
+
77
+ On the first non-empty line, output exactly one decision:
78
+ ACCEPT
79
+ REVISE
80
+ REDIRECT
81
+
82
+ Use ACCEPT when the result is good enough.
83
+ Use REVISE when the Developer can improve the result within the same task direction.
84
+ Use REDIRECT when the task direction, scope, dependency, or premise should be reconsidered by the Manager.
25
85
 
26
- Otherwise output the revision feedback for the Developer.
27
- `);
86
+ After the decision, give concise feedback unless ACCEPT. Also list any reusable memory candidates.
87
+ `;
28
88
  }
29
89
  }
30
90
  //# sourceMappingURL=reviewer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAiC,MAAM,YAAY,CAAC;AAQ5E,MAAM,OAAO,iBAAkB,SAAQ,eAAsC;IACjE,WAAW,CAAC,SAA0C;QAC9D,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpE,MAAM,+BAA+B,GAAG,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;QAC1F,MAAM,mBAAmB,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5D,OAAO,CACL,+BAA+B;YAC/B;;mCAE6B,UAAU;;;EAG3C,mBAAmB;;;EAGnB,SAAS,CAAC,WAAW;;;EAGrB,SAAS,CAAC,eAAe;;;EAGzB,SAAS,CAAC,UAAU;;;CAGrB,CACI,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAiC,MAAM,YAAY,CAAC;AAS5E,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAC5D,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEzC,MAAM,OAAO,iBAAkB,SAAQ,eAAsC;IAClE,KAAK,CAAC,WAAW,CACxB,SAAgC,EAChC,QAAyB;QAEzB,IAAI,cAAc,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YACnC,OAAO,cAAc,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,8BAA8B,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC3E,cAAc,GAAG,CACf,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAC3B;;;;;;;;EAQV,cAAc;;;CAGf,EACW,QAAQ,CACT,CACF,CAAC,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC;oBACH,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;oBACnC,OAAO,cAAc,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,OAAO,KAAK,8BAA8B,EAAE,CAAC;wBAC/C,MAAM,IAAI,KAAK,CACb,kEAAkE,MAAM,CAAC,8BAA8B,CAAC,uBAAuB,CAChI,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,aAAa,CAAC,cAAsB;QAClC,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;QACvE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,CAAmB,CAAC;IACpC,CAAC;IAES,WAAW,CAAC,SAA0C;QAC9D,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpE,MAAM,+BAA+B,GAAG,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;QAC1F,MAAM,mBAAmB,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5D,OAAO;EACT,+BAA+B;;EAE/B,mBAAmB;;mCAEc,UAAU;;;;EAI3C,SAAS,CAAC,SAAS;;;EAGnB,SAAS,CAAC,gBAAgB;;;EAG1B,SAAS,CAAC,eAAe;;;;;;;;;;;;;;;;;;;;;CAqB1B,CAAC;IACA,CAAC;CACF"}
@@ -2,12 +2,12 @@ import { Agent } from "coding-agent-forge/agent";
2
2
  import type { DevelopingAgentVariables } from "./types.js";
3
3
  type ScanTrajectoryOptimizerVariables = DevelopingAgentVariables & {
4
4
  phase: "scan";
5
- currentTask: string;
5
+ taskBrief: string;
6
6
  };
7
7
  type OptimizeTrajectoryOptimizerVariables = DevelopingAgentVariables & {
8
8
  phase: "optimize";
9
- currentTask: string;
10
- taskDevReport: string;
9
+ taskBrief: string;
10
+ taskRoundSummary: string;
11
11
  metaskillPath: string;
12
12
  };
13
13
  export type TrajectoryOptimizerVariables = ScanTrajectoryOptimizerVariables | OptimizeTrajectoryOptimizerVariables;
@@ -1 +1 @@
1
- {"version":3,"file":"trajectory-optimizer.d.ts","sourceRoot":"","sources":["../../src/agents/trajectory-optimizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAGjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,KAAK,gCAAgC,GAAG,wBAAwB,GAAG;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,KAAK,oCAAoC,GAAG,wBAAwB,GAAG;IACrE,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GACpC,gCAAgC,GAChC,oCAAoC,CAAC;AAEzC,qBAAa,wBAAyB,SAAQ,KAAK,CAAC,4BAA4B,CAAC;IAC/E,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAAG,MAAM;CAwCjF"}
1
+ {"version":3,"file":"trajectory-optimizer.d.ts","sourceRoot":"","sources":["../../src/agents/trajectory-optimizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAGjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,KAAK,gCAAgC,GAAG,wBAAwB,GAAG;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,oCAAoC,GAAG,wBAAwB,GAAG;IACrE,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GACpC,gCAAgC,GAChC,oCAAoC,CAAC;AAEzC,qBAAa,wBAAyB,SAAQ,KAAK,CAAC,4BAA4B,CAAC;IAC/E,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAAG,MAAM;CAwBjF"}
@@ -4,41 +4,52 @@ import { goalInstruction } from "./prompts.js";
4
4
  export class TrajectoryOptimizerAgent extends Agent {
5
5
  buildPrompt(variables) {
6
6
  const goalInstructionText = goalInstruction(variables.goal);
7
- if (variables.phase === "scan") {
8
- return `
9
- Work in the target repository at ${variables.targetPath}/.
10
- Scan the target repository at ${variables.targetPath}/ and the skill at ${variables.codingStyleSkillPath} before the Developer starts the current task. Read only.
7
+ switch (variables.phase) {
8
+ case "scan":
9
+ return buildScanPrompt(variables.targetPath, variables.codingStyleSkillPath, goalInstructionText, variables.taskBrief);
10
+ case "optimize": {
11
+ const metaskill = readFileSync(variables.metaskillPath, "utf8");
12
+ return buildOptimizePrompt(variables.targetPath, variables.codingStyleSkillPath, goalInstructionText, variables.taskBrief, variables.taskRoundSummary, metaskill);
13
+ }
14
+ }
15
+ }
16
+ }
17
+ function buildScanPrompt(targetPath, codingStyleSkillPath, goalInstructionText, taskBrief) {
18
+ return `
19
+ Work in the target repository at ${targetPath}/.
20
+ Scan the target repository at ${targetPath}/ and the skill at ${codingStyleSkillPath} before the Developer starts the Task Brief. Read only.
11
21
 
12
22
  ${goalInstructionText}
13
23
 
14
- Current developing task:
15
- ${variables.currentTask}
24
+ Task Brief:
25
+ ${taskBrief}
16
26
 
17
27
  Output a concise baseline of the repository state relevant to this task and the main guidance the skill should provide.
18
28
  `;
19
- }
20
- const metaskill = readFileSync(variables.metaskillPath, "utf8");
21
- return `
22
- Revise the skill at ${variables.codingStyleSkillPath} so it produces better development trajectories.
29
+ }
30
+ function buildOptimizePrompt(targetPath, codingStyleSkillPath, goalInstructionText, taskBrief, taskRoundSummary, metaskill) {
31
+ return `
32
+ Revise the skill at ${codingStyleSkillPath} so it produces better development trajectories.
23
33
 
24
34
  The metaskill below contains the design goals and tips of this skill:
25
35
 
26
36
  ${metaskill}
27
37
 
28
- Read:
29
- - target repository: ${variables.targetPath}
38
+ The sections below describe the task this skill just executed and what happened during that round.
39
+
40
+ Target repository at ${targetPath}/.
41
+
30
42
  ${goalInstructionText}
31
43
 
32
- Current developing task:
33
- ${variables.currentTask}
44
+ Task Brief:
45
+ ${taskBrief}
34
46
 
35
- Revision process for completing the developing task:
36
- ${variables.taskDevReport}
47
+ Reality-aware task round summary:
48
+ ${taskRoundSummary}
37
49
 
38
50
  Evaluate whether the skill produced a good modification trajectory, then edit the skill directly. Focus on missing, misleading, or redundant guidance that affected task selection, coding, or review.
39
51
 
40
52
  Output a concise optimizer report with the main skill changes.
41
53
  `;
42
- }
43
54
  }
44
55
  //# sourceMappingURL=trajectory-optimizer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trajectory-optimizer.js","sourceRoot":"","sources":["../../src/agents/trajectory-optimizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAmB/C,MAAM,OAAO,wBAAyB,SAAQ,KAAmC;IACrE,WAAW,CAAC,SAAiD;QACrE,MAAM,mBAAmB,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5D,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC/B,OAAO;mCACsB,SAAS,CAAC,UAAU;gCACvB,SAAS,CAAC,UAAU,sBAAsB,SAAS,CAAC,oBAAoB;;EAEtG,mBAAmB;;;EAGnB,SAAS,CAAC,WAAW;;;CAGtB,CAAC;QACE,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO;sBACW,SAAS,CAAC,oBAAoB;;;;EAIlD,SAAS;;;uBAGY,SAAS,CAAC,UAAU;EACzC,mBAAmB;;;EAGnB,SAAS,CAAC,WAAW;;;EAGrB,SAAS,CAAC,aAAa;;;;;CAKxB,CAAC;IACA,CAAC;CACF"}
1
+ {"version":3,"file":"trajectory-optimizer.js","sourceRoot":"","sources":["../../src/agents/trajectory-optimizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAmB/C,MAAM,OAAO,wBAAyB,SAAQ,KAAmC;IACrE,WAAW,CAAC,SAAiD;QACrE,MAAM,mBAAmB,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5D,QAAQ,SAAS,CAAC,KAAK,EAAE,CAAC;YACxB,KAAK,MAAM;gBACT,OAAO,eAAe,CACpB,SAAS,CAAC,UAAU,EACpB,SAAS,CAAC,oBAAoB,EAC9B,mBAAmB,EACnB,SAAS,CAAC,SAAS,CACpB,CAAC;YACJ,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;gBAChE,OAAO,mBAAmB,CACxB,SAAS,CAAC,UAAU,EACpB,SAAS,CAAC,oBAAoB,EAC9B,mBAAmB,EACnB,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,gBAAgB,EAC1B,SAAS,CACV,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,SAAS,eAAe,CACtB,UAAkB,EAClB,oBAA4B,EAC5B,mBAA2B,EAC3B,SAAiB;IAEjB,OAAO;mCAC0B,UAAU;gCACb,UAAU,sBAAsB,oBAAoB;;EAElF,mBAAmB;;;EAGnB,SAAS;;;CAGV,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAC1B,UAAkB,EAClB,oBAA4B,EAC5B,mBAA2B,EAC3B,SAAiB,EACjB,gBAAwB,EACxB,SAAiB;IAEjB,OAAO;sBACa,oBAAoB;;;;EAIxC,SAAS;;;;uBAIY,UAAU;;EAE/B,mBAAmB;;;EAGnB,SAAS;;;EAGT,gBAAgB;;;;;CAKjB,CAAC;AACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { ProjectDevLoop, type ProjectDevLoopAgentVariablesByName, type ProjectDevLoopCallbacks, } from "./project-devloop.js";
2
- export { TaskDevLoop, type TaskDevLoopAgentVariablesByName } from "./task-devloop.js";
2
+ export { TaskDevLoop, type TaskDevLoopAgentVariablesByName, type TaskDevLoopResult, } from "./task-devloop.js";
3
3
  export { developing, developingArgsOptions, developingPipeline, type DevelopingOptions, } from "./pipeline.js";
4
4
  export { developingSkill, developingSkillArgsOptions, developingSkillPipeline, type DevelopingSkillAgentVariables, type DevelopingSkillOptions, } from "./pipelineskill.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,kCAAkC,EACvC,KAAK,uBAAuB,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,KAAK,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,kCAAkC,EACvC,KAAK,uBAAuB,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,WAAW,EACX,KAAK,+BAA+B,EACpC,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { ProjectDevLoop, } from "./project-devloop.js";
2
- export { TaskDevLoop } from "./task-devloop.js";
2
+ export { TaskDevLoop, } from "./task-devloop.js";
3
3
  export { developing, developingArgsOptions, developingPipeline, } from "./pipeline.js";
4
4
  export { developingSkill, developingSkillArgsOptions, developingSkillPipeline, } from "./pipelineskill.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAwC,MAAM,mBAAmB,CAAC;AACtF,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,kBAAkB,GAEnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,GAGxB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,WAAW,GAGZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,kBAAkB,GAEnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,GAGxB,MAAM,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pipelineskill.d.ts","sourceRoot":"","sources":["../../src/pipeline/pipelineskill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAGT,KAAK,eAAe,EAErB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,KAAK,EACV,kCAAkC,EAEnC,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,6BAA6B,GAAG,kCAAkC,GAAG;IAC/E,sBAAsB,EAAE,4BAA4B,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMC,CAAC;AAEzC,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAExF,wBAAsB,eAAe,CACnC,IAAI,EAAE,SAAS,CAAC,6BAA6B,CAAC,EAC9C,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAWlC,CAAC"}
1
+ {"version":3,"file":"pipelineskill.d.ts","sourceRoot":"","sources":["../../src/pipeline/pipelineskill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAGT,KAAK,eAAe,EAErB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,KAAK,EACV,kCAAkC,EAEnC,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,6BAA6B,GAAG,kCAAkC,GAAG;IAC/E,sBAAsB,EAAE,4BAA4B,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMC,CAAC;AAEzC,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAExF,wBAAsB,eAAe,CACnC,IAAI,EAAE,SAAS,CAAC,6BAA6B,CAAC,EAC9C,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAWlC,CAAC"}
@@ -20,25 +20,24 @@ export async function developingSkill(team, options) {
20
20
  const developingOptions = {
21
21
  ...options,
22
22
  callbacks: {
23
- onTaskStart: async (agentVariables, currentTask) => {
23
+ onTaskStart: async (agentVariables, taskBrief) => {
24
24
  trajectoryOptimizer = await team.createAgent("trajectory-optimizer");
25
25
  const repositoryScan = (await trajectoryOptimizer.runStreamed({
26
26
  ...agentVariables,
27
27
  phase: "scan",
28
- currentTask,
28
+ taskBrief,
29
29
  }, logRecord)).trim();
30
30
  console.log(`\n# Skill trajectory repository scan\n${repositoryScan}\n`);
31
31
  },
32
- onTaskFinish: async (agentVariables, currentTask, taskDevReports) => {
32
+ onTaskFinish: async (agentVariables, taskBrief, taskResult) => {
33
33
  if (trajectoryOptimizer === undefined) {
34
34
  throw new Error("Trajectory optimizer must scan the repository before optimizing.");
35
35
  }
36
- const taskDevReport = taskDevReports.join("\n\n");
37
36
  const optimizerReport = (await trajectoryOptimizer.runStreamed({
38
37
  ...agentVariables,
39
38
  phase: "optimize",
40
- currentTask,
41
- taskDevReport,
39
+ taskBrief,
40
+ taskRoundSummary: taskResult.taskRoundSummary,
42
41
  metaskillPath,
43
42
  }, logRecord)).trim();
44
43
  console.log(`\n# Skill trajectory optimizer report\n${optimizerReport}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"pipelineskill.js","sourceRoot":"","sources":["../../src/pipeline/pipelineskill.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,GAIf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAU1E,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,gBAAgB,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,4DAA4D;KAC1E;IACD,GAAG,qBAAqB;CACc,CAAC;AAIzC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAA8C,EAC9C,OAA+B;IAE/B,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,SAAS,GAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;IACF,IAAI,mBAAoE,CAAC;IAEzE,MAAM,iBAAiB,GAAG;QACxB,GAAG,OAAO;QACV,SAAS,EAAE;YACT,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE;gBACjD,mBAAmB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;gBACrE,MAAM,cAAc,GAAG,CACrB,MAAM,mBAAmB,CAAC,WAAW,CACnC;oBACE,GAAG,cAAc;oBACjB,KAAK,EAAE,MAAM;oBACb,WAAW;iBACZ,EACD,SAAS,CACV,CACF,CAAC,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,yCAAyC,cAAc,IAAI,CAAC,CAAC;YAC3E,CAAC;YACD,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;gBAClE,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;oBACtC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;gBACtF,CAAC;gBAED,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClD,MAAM,eAAe,GAAG,CACtB,MAAM,mBAAmB,CAAC,WAAW,CACnC;oBACE,GAAG,cAAc;oBACjB,KAAK,EAAE,UAAU;oBACjB,WAAW;oBACX,aAAa;oBACb,aAAa;iBACd,EACD,SAAS,CACV,CACF,CAAC,IAAI,EAAE,CAAC;gBAET,OAAO,CAAC,GAAG,CAAC,0CAA0C,eAAe,IAAI,CAAC,CAAC;YAC7E,CAAC;SACyC;KAC7C,CAAC;IACF,MAAM,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAC;IACpD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,qDAAqD;IAClE,WAAW,EAAE,0BAA0B;IACvC,cAAc;IACd,KAAK,CAAC,GAAG,CACP,IAA8C,EAC9C,OAA2D;QAE3D,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"pipelineskill.js","sourceRoot":"","sources":["../../src/pipeline/pipelineskill.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,GAIf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAU1E,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,gBAAgB,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,4DAA4D;KAC1E;IACD,GAAG,qBAAqB;CACc,CAAC;AAIzC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAA8C,EAC9C,OAA+B;IAE/B,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,SAAS,GAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;IACF,IAAI,mBAAoE,CAAC;IAEzE,MAAM,iBAAiB,GAAG;QACxB,GAAG,OAAO;QACV,SAAS,EAAE;YACT,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE;gBAC/C,mBAAmB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;gBACrE,MAAM,cAAc,GAAG,CACrB,MAAM,mBAAmB,CAAC,WAAW,CACnC;oBACE,GAAG,cAAc;oBACjB,KAAK,EAAE,MAAM;oBACb,SAAS;iBACV,EACD,SAAS,CACV,CACF,CAAC,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,yCAAyC,cAAc,IAAI,CAAC,CAAC;YAC3E,CAAC;YACD,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE;gBAC5D,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;oBACtC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;gBACtF,CAAC;gBAED,MAAM,eAAe,GAAG,CACtB,MAAM,mBAAmB,CAAC,WAAW,CACnC;oBACE,GAAG,cAAc;oBACjB,KAAK,EAAE,UAAU;oBACjB,SAAS;oBACT,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;oBAC7C,aAAa;iBACd,EACD,SAAS,CACV,CACF,CAAC,IAAI,EAAE,CAAC;gBAET,OAAO,CAAC,GAAG,CAAC,0CAA0C,eAAe,IAAI,CAAC,CAAC;YAC7E,CAAC;SACyC;KAC7C,CAAC;IACF,MAAM,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAC;IACpD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,qDAAqD;IAClE,WAAW,EAAE,0BAA0B;IACvC,cAAc;IACd,KAAK,CAAC,GAAG,CACP,IAA8C,EAC9C,OAA2D;QAE3D,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;CACF,CAAC,CAAC"}
@@ -1,13 +1,13 @@
1
1
  import type { AgentTeam, RecordCallback } from "coding-agent-forge";
2
2
  import { type MemoryAgentVariablesByName } from "memory-agent-forge";
3
3
  import type { CodingManagerVariables, DevelopingAgentVariables } from "../agents/index.js";
4
- import { type TaskDevLoopAgentVariablesByName } from "./task-devloop.js";
4
+ import { type TaskDevLoopAgentVariablesByName, type TaskDevLoopResult } from "./task-devloop.js";
5
5
  export type ProjectDevLoopAgentVariablesByName = TaskDevLoopAgentVariablesByName & {
6
6
  "coding-manager": CodingManagerVariables;
7
7
  } & MemoryAgentVariablesByName;
8
8
  export type ProjectDevLoopCallbacks = {
9
- onTaskStart?: (agentVariables: DevelopingAgentVariables, currentTask: string) => Promise<void> | void;
10
- onTaskFinish?: (agentVariables: DevelopingAgentVariables, currentTask: string, taskDevReports: readonly string[], thingsToRemember: string) => Promise<void> | void;
9
+ onTaskStart?: (agentVariables: DevelopingAgentVariables, taskBrief: string) => Promise<void> | void;
10
+ onTaskFinish?: (agentVariables: DevelopingAgentVariables, taskBrief: string, taskResult: TaskDevLoopResult, thingsToRemember: string) => Promise<void> | void;
11
11
  };
12
12
  export declare class ProjectDevLoop {
13
13
  develop(team: AgentTeam<ProjectDevLoopAgentVariablesByName>, targetPath: string, codingStyleSkillPath: string, goal: string, achiveDir: string, maxIterations: number, maxTaskDevLoopIterations: number, projectProgressMemoryPath: string, codeDesignMemoryPath: string, maxMemoryRounds: number, callbacks?: ProjectDevLoopCallbacks, logRecord?: RecordCallback): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"project-devloop.d.ts","sourceRoot":"","sources":["../../src/pipeline/project-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,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAe,KAAK,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAKtF,MAAM,MAAM,kCAAkC,GAAG,+BAA+B,GAAG;IACjF,gBAAgB,EAAE,sBAAsB,CAAC;CAC1C,GAAG,0BAA0B,CAAC;AAE/B,MAAM,MAAM,uBAAuB,GAAG;IACpC,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,cAAc,EAAE,SAAS,MAAM,EAAE,EACjC,gBAAgB,EAAE,MAAM,KACrB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B,CAAC;AAIF,qBAAa,cAAc;IACnB,OAAO,CACX,IAAI,EAAE,SAAS,CAAC,kCAAkC,CAAC,EACnD,UAAU,EAAE,MAAM,EAClB,oBAAoB,EAAE,MAAM,EAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,wBAAwB,EAAE,MAAM,EAChC,yBAAyB,EAAE,MAAM,EACjC,oBAAoB,EAAE,MAAM,EAC5B,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,uBAAuB,EACnC,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,IAAI,CAAC;CAuHjB"}
1
+ {"version":3,"file":"project-devloop.d.ts","sourceRoot":"","sources":["../../src/pipeline/project-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,EAEV,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAK3B,MAAM,MAAM,kCAAkC,GAAG,+BAA+B,GAAG;IACjF,gBAAgB,EAAE,sBAAsB,CAAC;CAC1C,GAAG,0BAA0B,CAAC;AAE/B,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,CAAC,EAAE,CACZ,cAAc,EAAE,wBAAwB,EACxC,SAAS,EAAE,MAAM,KACd,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,CACb,cAAc,EAAE,wBAAwB,EACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,iBAAiB,EAC7B,gBAAgB,EAAE,MAAM,KACrB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,qBAAa,cAAc;IACnB,OAAO,CACX,IAAI,EAAE,SAAS,CAAC,kCAAkC,CAAC,EACnD,UAAU,EAAE,MAAM,EAClB,oBAAoB,EAAE,MAAM,EAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,wBAAwB,EAAE,MAAM,EAChC,yBAAyB,EAAE,MAAM,EACjC,oBAAoB,EAAE,MAAM,EAC5B,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,uBAAuB,EACnC,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,IAAI,CAAC;CAqHjB"}
@@ -1,9 +1,8 @@
1
1
  import { Memory, defaultMemoryAgentNames, } from "memory-agent-forge";
2
2
  import { mkdir, writeFile } from "node:fs/promises";
3
3
  import path from "node:path";
4
- import { TaskDevLoop } from "./task-devloop.js";
4
+ import { TaskDevLoop, } from "./task-devloop.js";
5
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
6
  export class ProjectDevLoop {
8
7
  async develop(team, targetPath, codingStyleSkillPath, goal, achiveDir, maxIterations, maxTaskDevLoopIterations, projectProgressMemoryPath, codeDesignMemoryPath, maxMemoryRounds, callbacks, logRecord) {
9
8
  const agentVariables = {
@@ -18,42 +17,41 @@ export class ProjectDevLoop {
18
17
  console.log(`\n# Project dev loop iteration ${String(iteration)}\n`);
19
18
  const archiveDir = path.join(achiveDir, new Date().toISOString().replace(/[:.]/g, "-"));
20
19
  await mkdir(archiveDir, { recursive: true });
21
- const codingManager = await team.createAgent("coding-manager");
22
- const memoryGuidance = (await codingManager.runStreamed({
20
+ const codingManager = (await team.createAgent("coding-manager"));
21
+ const projectProgressMemoryGuidance = (await codingManager.runStreamed({
23
22
  ...agentVariables,
24
23
  phase: "recall",
25
24
  }, 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))
25
+ await writeFile(path.join(archiveDir, "project_devloop_memory_recall_guidance.md"), projectProgressMemoryGuidance, "utf8");
26
+ const projectProgressMemory = (await memoryStore.recall(team, MEMORY_DOMAIN_HINT, projectProgressMemoryPath, maxMemoryRounds, projectProgressMemoryGuidance, logRecord))
28
27
  .map(({ content }) => content)
29
28
  .join("\n\n");
30
- await writeFile(path.join(archiveDir, "project_devloop_recalled_memory.md"), memory, "utf8");
31
- const currentTask = (await codingManager.runStreamed({
29
+ await writeFile(path.join(archiveDir, "project_devloop_memory_recalled.md"), projectProgressMemory, "utf8");
30
+ const taskBrief = (await codingManager.runStreamed({
32
31
  ...agentVariables,
33
- memory,
34
- finishMark: FINISH_MARK,
32
+ projectProgressMemory,
35
33
  phase: "select",
36
34
  }, 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`);
35
+ await writeFile(path.join(archiveDir, "task_brief.md"), taskBrief, "utf8");
36
+ const managerDecision = codingManager.parseDecision(taskBrief);
37
+ if (managerDecision === "FINISHED") {
38
+ console.log("\n# FINISHED\n");
40
39
  return;
41
40
  }
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);
41
+ await callbacks?.onTaskStart?.(agentVariables, taskBrief);
42
+ const taskResult = await taskDevLoop.develop(team, agentVariables.targetPath, agentVariables.codingStyleSkillPath, agentVariables.goal, archiveDir, maxTaskDevLoopIterations, taskBrief, codeDesignMemoryPath, maxMemoryRounds, logRecord);
44
43
  const thingsToRemember = (await codingManager.runStreamed({
45
44
  ...agentVariables,
46
- memory,
47
- finishMark: FINISH_MARK,
45
+ projectProgressMemory,
48
46
  phase: "update",
49
- currentTask,
50
- taskDevReport: taskDevReports.join("\n\n"),
47
+ taskBrief,
48
+ taskRoundSummary: taskResult.taskRoundSummary,
51
49
  }, logRecord)).trim();
52
50
  await writeFile(path.join(archiveDir, "project_devloop_things_to_remember.md"), thingsToRemember, "utf8");
53
51
  await memoryStore.remember(team, MEMORY_DOMAIN_HINT, projectProgressMemoryPath, maxMemoryRounds, thingsToRemember, logRecord);
54
- await callbacks?.onTaskFinish?.(agentVariables, currentTask, taskDevReports, thingsToRemember);
52
+ await callbacks?.onTaskFinish?.(agentVariables, taskBrief, taskResult, thingsToRemember);
55
53
  }
56
- throw new Error(`Reached --max-iterations ${String(maxIterations)} before the coding-manager returned ${FINISH_MARK}.`);
54
+ throw new Error(`Reached --max-iterations ${String(maxIterations)} before the coding-manager returned FINISHED.`);
57
55
  }
58
56
  }
59
57
  //# sourceMappingURL=project-devloop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-devloop.js","sourceRoot":"","sources":["../../src/pipeline/project-devloop.ts"],"names":[],"mappings":"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"}
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;AAO7B,OAAO,EACL,WAAW,GAGZ,MAAM,mBAAmB,CAAC;AAE3B,MAAM,kBAAkB,GACtB,2HAA2H,CAAC;AAmB9H,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,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAuB,CAAC;YACvF,MAAM,6BAA6B,GAAG,CACpC,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,6BAA6B,EAC7B,MAAM,CACP,CAAC;YAEF,MAAM,qBAAqB,GAAG,CAC5B,MAAM,WAAW,CAAC,MAAM,CACtB,IAAI,EACJ,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,6BAA6B,EAC7B,SAAS,CACV,CACF;iBACE,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC;iBAC7B,IAAI,CAAC,MAAM,CAAC,CAAC;YAChB,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oCAAoC,CAAC,EAC3D,qBAAqB,EACrB,MAAM,CACP,CAAC;YAEF,MAAM,SAAS,GAAG,CAChB,MAAM,aAAa,CAAC,WAAW,CAC7B;gBACE,GAAG,cAAc;gBACjB,qBAAqB;gBACrB,KAAK,EAAE,QAAQ;aAChB,EACD,SAAS,CACV,CACF,CAAC,IAAI,EAAE,CAAC;YACT,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAE3E,MAAM,eAAe,GAAG,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC/D,IAAI,eAAe,KAAK,UAAU,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YAED,MAAM,SAAS,EAAE,WAAW,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YAE1D,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,OAAO,CAC1C,IAAI,EACJ,cAAc,CAAC,UAAU,EACzB,cAAc,CAAC,oBAAoB,EACnC,cAAc,CAAC,IAAI,EACnB,UAAU,EACV,wBAAwB,EACxB,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,SAAS,CACV,CAAC;YAEF,MAAM,gBAAgB,GAAG,CACvB,MAAM,aAAa,CAAC,WAAW,CAC7B;gBACE,GAAG,cAAc;gBACjB,qBAAqB;gBACrB,KAAK,EAAE,QAAQ;gBACf,SAAS;gBACT,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;aAC9C,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,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,aAAa,CAAC,+CAA+C,CACjG,CAAC;IACJ,CAAC;CACF"}
@@ -1,11 +1,17 @@
1
1
  import type { AgentTeam, RecordCallback } from "coding-agent-forge";
2
2
  import { type MemoryAgentVariablesByName } from "memory-agent-forge";
3
- import type { CodeReviewerVariables, DeveloperVariables } from "../agents/index.js";
3
+ import { type CodeReviewerVariables, type DeveloperVariables } from "../agents/index.js";
4
4
  export type TaskDevLoopAgentVariablesByName = {
5
5
  developer: DeveloperVariables;
6
6
  "code-reviewer": CodeReviewerVariables;
7
7
  } & MemoryAgentVariablesByName;
8
+ type TaskRoundFinalDecision = "ACCEPT" | "REDIRECT" | "FAILED";
9
+ export type TaskDevLoopResult = {
10
+ finalDecision: TaskRoundFinalDecision;
11
+ taskRoundSummary: string;
12
+ };
8
13
  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[]>;
14
+ develop(team: AgentTeam<TaskDevLoopAgentVariablesByName>, targetPath: string, codingStyleSkillPath: string, goal: string, archiveDir: string, maxIterations: number, taskBrief: string, codeDesignMemoryPath: string, maxMemoryRounds: number, logRecord?: RecordCallback): Promise<TaskDevLoopResult>;
10
15
  }
16
+ export {};
11
17
  //# sourceMappingURL=task-devloop.d.ts.map
@@ -1 +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"}
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,EAEL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EAExB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,EAAE,kBAAkB,CAAC;IAC9B,eAAe,EAAE,qBAAqB,CAAC;CACxC,GAAG,0BAA0B,CAAC;AAK/B,KAAK,sBAAsB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,sBAAsB,CAAC;IACtC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,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,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,MAAM,EAC5B,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,iBAAiB,CAAC;CA8J9B"}
@@ -1,10 +1,9 @@
1
1
  import { Memory, defaultMemoryAgentNames, } from "memory-agent-forge";
2
2
  import { mkdir, writeFile } from "node:fs/promises";
3
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.";
4
+ const CODE_DESIGN_MEMORY_DOMAIN_HINT = "Code design memory for logic relationships between code, design rationale, invariants, and implementation decisions in the target repository.";
6
5
  export class TaskDevLoop {
7
- async develop(team, targetPath, codingStyleSkillPath, goal, archiveDir, maxIterations, currentTask, codeDesignMemoryPath, maxMemoryRounds, logRecord) {
6
+ async develop(team, targetPath, codingStyleSkillPath, goal, archiveDir, maxIterations, taskBrief, codeDesignMemoryPath, maxMemoryRounds, logRecord) {
8
7
  const agentVariables = {
9
8
  targetPath,
10
9
  codingStyleSkillPath,
@@ -12,26 +11,27 @@ export class TaskDevLoop {
12
11
  };
13
12
  await mkdir(archiveDir, { recursive: true });
14
13
  const developer = await team.createAgent("developer");
15
- const codeReviewer = await team.createAgent("code-reviewer");
14
+ const codeReviewer = (await team.createAgent("code-reviewer"));
16
15
  const memoryStore = new Memory(defaultMemoryAgentNames);
17
- const memoryGuidance = (await developer.runStreamed({
16
+ const codeDesignMemoryGuidance = (await developer.runStreamed({
18
17
  ...agentVariables,
19
- currentTask,
18
+ taskBrief,
20
19
  phase: "recall",
21
20
  }, 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))
21
+ await writeFile(path.join(archiveDir, "task_devloop_memory_recall_guidance.md"), codeDesignMemoryGuidance, "utf8");
22
+ const codeDesignMemory = (await memoryStore.recall(team, CODE_DESIGN_MEMORY_DOMAIN_HINT, codeDesignMemoryPath, maxMemoryRounds, codeDesignMemoryGuidance, logRecord))
24
23
  .map(({ content }) => content)
25
24
  .join("\n\n");
26
- await writeFile(path.join(archiveDir, "task_devloop_recalled_memory.md"), memory, "utf8");
25
+ await writeFile(path.join(archiveDir, "task_devloop_memory_recalled.md"), codeDesignMemory, "utf8");
27
26
  let previousReviewerReport = "";
28
27
  const taskDevReports = [];
28
+ let finalDecision = "FAILED";
29
29
  for (let iteration = 1; iteration <= maxIterations; iteration++) {
30
30
  console.log(`\n# Developer/reviewer iteration ${String(iteration)}\n`);
31
31
  const developerVariables = {
32
32
  ...agentVariables,
33
- currentTask,
34
- memory,
33
+ taskBrief,
34
+ codeDesignMemory,
35
35
  phase: "develop",
36
36
  };
37
37
  if (previousReviewerReport) {
@@ -42,36 +42,57 @@ export class TaskDevLoop {
42
42
  taskDevReports.push(`Developer report ${String(iteration)}:\n${developerReport}`);
43
43
  const reviewerReport = (await codeReviewer.runStreamed({
44
44
  ...agentVariables,
45
- acceptMark: ACCEPT_MARK,
46
- currentTask,
45
+ taskBrief,
47
46
  developerReport,
47
+ codeDesignMemory,
48
48
  }, logRecord)).trim();
49
49
  await writeFile(path.join(archiveDir, `code_review_${String(iteration).padStart(3, "0")}.md`), reviewerReport, "utf8");
50
50
  taskDevReports.push(`Reviewer report ${String(iteration)}:\n${reviewerReport}`);
51
- const accepted = reviewerReport.trim() === ACCEPT_MARK;
52
- if (accepted) {
51
+ const reviewDecision = codeReviewer.parseDecision(reviewerReport);
52
+ if (reviewDecision === "ACCEPT") {
53
53
  taskDevReports.push("Reviewer accepted the changes.");
54
+ finalDecision = "ACCEPT";
55
+ break;
54
56
  }
55
- if (!accepted && iteration === maxIterations) {
56
- taskDevReports.push("Reviewer did not accept the changes before the maximum review attempts.");
57
+ if (reviewDecision === "REDIRECT") {
58
+ taskDevReports.push("Reviewer redirected the task to the Manager.");
59
+ finalDecision = "REDIRECT";
60
+ break;
57
61
  }
58
- if (accepted) {
62
+ if (iteration === maxIterations) {
63
+ taskDevReports.push("Reviewer did not accept the changes before the maximum review attempts.");
64
+ finalDecision = "FAILED";
59
65
  break;
60
66
  }
61
67
  previousReviewerReport = reviewerReport;
62
68
  }
63
69
  const taskDevReport = taskDevReports.join("\n\n");
64
70
  await writeFile(path.join(archiveDir, "task_devloop_report.md"), taskDevReport, "utf8");
71
+ const taskRoundSummary = `# Task Round Summary
72
+
73
+ ## Task Brief
74
+ ${taskBrief}
75
+
76
+ ## Final Decision
77
+ ${finalDecision}
78
+
79
+ ## Developer/Reviewer Reports
80
+ ${taskDevReport}
81
+ `;
82
+ await writeFile(path.join(archiveDir, "task_round_summary.md"), taskRoundSummary, "utf8");
65
83
  const thingsToRemember = (await developer.runStreamed({
66
84
  ...agentVariables,
67
- currentTask,
68
- memory,
85
+ taskBrief,
86
+ codeDesignMemory,
69
87
  phase: "update",
70
- taskDevReport,
88
+ taskRoundSummary,
71
89
  }, logRecord)).trim();
72
90
  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;
91
+ await memoryStore.remember(team, CODE_DESIGN_MEMORY_DOMAIN_HINT, codeDesignMemoryPath, maxMemoryRounds, thingsToRemember, logRecord);
92
+ return {
93
+ finalDecision,
94
+ taskRoundSummary,
95
+ };
75
96
  }
76
97
  }
77
98
  //# sourceMappingURL=task-devloop.js.map