takt 0.2.3 → 0.3.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 +161 -133
- package/dist/agents/runner.d.ts +2 -4
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +6 -35
- package/dist/agents/runner.js.map +1 -1
- package/dist/claude/client.d.ts +31 -6
- package/dist/claude/client.d.ts.map +1 -1
- package/dist/claude/client.js +78 -30
- package/dist/claude/client.js.map +1 -1
- package/dist/claude/index.d.ts +1 -1
- package/dist/claude/index.d.ts.map +1 -1
- package/dist/claude/index.js +1 -1
- package/dist/claude/index.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +22 -6
- package/dist/cli.js.map +1 -1
- package/dist/codex/client.d.ts +0 -1
- package/dist/codex/client.d.ts.map +1 -1
- package/dist/codex/client.js +3 -6
- package/dist/codex/client.js.map +1 -1
- package/dist/commands/addTask.d.ts.map +1 -1
- package/dist/commands/addTask.js +17 -2
- package/dist/commands/addTask.js.map +1 -1
- package/dist/commands/eject.d.ts +13 -0
- package/dist/commands/eject.d.ts.map +1 -0
- package/dist/commands/eject.js +105 -0
- package/dist/commands/eject.js.map +1 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +9 -2
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/refreshBuiltin.d.ts +4 -4
- package/dist/commands/refreshBuiltin.d.ts.map +1 -1
- package/dist/commands/refreshBuiltin.js +13 -29
- package/dist/commands/refreshBuiltin.js.map +1 -1
- package/dist/commands/workflowExecution.d.ts.map +1 -1
- package/dist/commands/workflowExecution.js +85 -18
- package/dist/commands/workflowExecution.js.map +1 -1
- package/dist/config/agentLoader.d.ts +3 -1
- package/dist/config/agentLoader.d.ts.map +1 -1
- package/dist/config/agentLoader.js +17 -24
- package/dist/config/agentLoader.js.map +1 -1
- package/dist/config/globalConfig.d.ts +2 -0
- package/dist/config/globalConfig.d.ts.map +1 -1
- package/dist/config/globalConfig.js +14 -0
- package/dist/config/globalConfig.js.map +1 -1
- package/dist/config/initialization.d.ts +7 -5
- package/dist/config/initialization.d.ts.map +1 -1
- package/dist/config/initialization.js +23 -21
- package/dist/config/initialization.js.map +1 -1
- package/dist/config/paths.d.ts +5 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +9 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/workflowLoader.d.ts +6 -4
- package/dist/config/workflowLoader.d.ts.map +1 -1
- package/dist/config/workflowLoader.js +190 -35
- package/dist/config/workflowLoader.js.map +1 -1
- package/dist/github/issue.d.ts +72 -0
- package/dist/github/issue.d.ts.map +1 -0
- package/dist/github/issue.js +143 -0
- package/dist/github/issue.js.map +1 -0
- package/dist/models/index.d.ts +1 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js.map +1 -1
- package/dist/models/schemas.d.ts +164 -90
- package/dist/models/schemas.d.ts.map +1 -1
- package/dist/models/schemas.js +77 -51
- package/dist/models/schemas.js.map +1 -1
- package/dist/models/types.d.ts +51 -20
- package/dist/models/types.d.ts.map +1 -1
- package/dist/providers/claude.js +2 -2
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/codex.d.ts.map +1 -1
- package/dist/providers/codex.js +0 -2
- package/dist/providers/codex.js.map +1 -1
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/resources/index.d.ts +3 -22
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +3 -73
- package/dist/resources/index.js.map +1 -1
- package/dist/utils/session.d.ts +74 -10
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +101 -51
- package/dist/utils/session.js.map +1 -1
- package/dist/workflow/engine.d.ts +34 -1
- package/dist/workflow/engine.d.ts.map +1 -1
- package/dist/workflow/engine.js +228 -36
- package/dist/workflow/engine.js.map +1 -1
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +1 -1
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/instruction-builder.d.ts +87 -18
- package/dist/workflow/instruction-builder.d.ts.map +1 -1
- package/dist/workflow/instruction-builder.js +404 -57
- package/dist/workflow/instruction-builder.js.map +1 -1
- package/dist/workflow/parallel-logger.d.ts +76 -0
- package/dist/workflow/parallel-logger.d.ts.map +1 -0
- package/dist/workflow/parallel-logger.js +173 -0
- package/dist/workflow/parallel-logger.js.map +1 -0
- package/dist/workflow/phase-runner.d.ts +40 -0
- package/dist/workflow/phase-runner.d.ts.map +1 -0
- package/dist/workflow/phase-runner.js +69 -0
- package/dist/workflow/phase-runner.js.map +1 -0
- package/dist/workflow/rule-evaluator.d.ts +64 -0
- package/dist/workflow/rule-evaluator.d.ts.map +1 -0
- package/dist/workflow/rule-evaluator.js +178 -0
- package/dist/workflow/rule-evaluator.js.map +1 -0
- package/dist/workflow/rule-utils.d.ts +13 -0
- package/dist/workflow/rule-utils.d.ts.map +1 -0
- package/dist/workflow/rule-utils.js +17 -0
- package/dist/workflow/rule-utils.js.map +1 -0
- package/dist/workflow/transitions.d.ts +5 -13
- package/dist/workflow/transitions.d.ts.map +1 -1
- package/dist/workflow/transitions.js +8 -78
- package/dist/workflow/transitions.js.map +1 -1
- package/dist/workflow/types.d.ts +2 -1
- package/dist/workflow/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/resources/global/en/agents/default/ai-antipattern-reviewer.md +71 -15
- package/resources/global/en/agents/default/{architect.md → architecture-reviewer.md} +144 -44
- package/resources/global/en/agents/default/coder.md +4 -4
- package/resources/global/en/agents/default/planner.md +16 -9
- package/resources/global/en/agents/default/{security.md → security-reviewer.md} +23 -5
- package/resources/global/en/agents/default/supervisor.md +13 -2
- package/resources/global/en/agents/expert/frontend-reviewer.md +0 -17
- package/resources/global/en/agents/expert/qa-reviewer.md +0 -16
- package/resources/global/en/agents/expert/security-reviewer.md +0 -16
- package/resources/global/en/agents/expert-cqrs/cqrs-es-reviewer.md +0 -17
- package/resources/global/en/agents/templates/coder.md +128 -0
- package/resources/global/en/agents/templates/planner.md +44 -0
- package/resources/global/en/agents/templates/reviewer.md +57 -0
- package/resources/global/en/agents/templates/supervisor.md +64 -0
- package/resources/global/en/workflows/default.yaml +232 -772
- package/resources/global/en/workflows/expert-cqrs.yaml +319 -698
- package/resources/global/en/workflows/expert.yaml +348 -723
- package/resources/global/en/workflows/magi.yaml +45 -52
- package/resources/global/en/workflows/research.yaml +18 -99
- package/resources/global/en/workflows/simple.yaml +152 -421
- package/resources/global/ja/agents/default/ai-antipattern-reviewer.md +71 -15
- package/resources/global/ja/agents/default/{architect.md → architecture-reviewer.md} +148 -48
- package/resources/global/ja/agents/default/coder.md +4 -4
- package/resources/global/ja/agents/default/planner.md +16 -9
- package/resources/global/ja/agents/default/{security.md → security-reviewer.md} +23 -5
- package/resources/global/ja/agents/default/supervisor.md +13 -2
- package/resources/global/ja/agents/expert/frontend-reviewer.md +0 -18
- package/resources/global/ja/agents/expert/qa-reviewer.md +0 -16
- package/resources/global/ja/agents/expert/security-reviewer.md +0 -16
- package/resources/global/ja/agents/expert-cqrs/cqrs-es-reviewer.md +0 -18
- package/resources/global/ja/agents/templates/coder.md +128 -0
- package/resources/global/ja/agents/templates/planner.md +44 -0
- package/resources/global/ja/agents/templates/reviewer.md +57 -0
- package/resources/global/ja/agents/templates/supervisor.md +64 -0
- package/resources/global/ja/workflows/default.yaml +227 -773
- package/resources/global/ja/workflows/expert-cqrs.yaml +309 -833
- package/resources/global/ja/workflows/expert.yaml +325 -712
- package/resources/global/ja/workflows/magi.yaml +45 -52
- package/resources/global/ja/workflows/research.yaml +18 -99
- package/resources/global/ja/workflows/simple.yaml +145 -415
|
@@ -1,41 +1,101 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Instruction template builder for workflow steps
|
|
3
3
|
*
|
|
4
|
-
* Builds the instruction string for agent execution by
|
|
5
|
-
*
|
|
4
|
+
* Builds the instruction string for agent execution by:
|
|
5
|
+
* 1. Auto-injecting standard sections (Execution Context, Workflow Context,
|
|
6
|
+
* User Request, Previous Response, Additional User Inputs, Instructions header,
|
|
7
|
+
* Status Output Rules)
|
|
8
|
+
* 2. Replacing template placeholders with actual values
|
|
9
|
+
*
|
|
10
|
+
* Status rules are injected into Phase 1 for tag-based detection,
|
|
11
|
+
* and also used in Phase 3 (buildStatusJudgmentInstruction) as a dedicated follow-up.
|
|
6
12
|
*/
|
|
7
|
-
import {
|
|
13
|
+
import { hasTagBasedRules } from './rule-utils.js';
|
|
8
14
|
/**
|
|
9
|
-
* Build execution metadata from instruction context.
|
|
15
|
+
* Build execution metadata from instruction context and step config.
|
|
10
16
|
*
|
|
11
|
-
* Pure function: InstructionContext → ExecutionMetadata.
|
|
17
|
+
* Pure function: (InstructionContext, edit?) → ExecutionMetadata.
|
|
12
18
|
*/
|
|
13
|
-
export function buildExecutionMetadata(context) {
|
|
19
|
+
export function buildExecutionMetadata(context, edit) {
|
|
14
20
|
return {
|
|
15
21
|
workingDirectory: context.cwd,
|
|
16
22
|
language: context.language ?? 'en',
|
|
23
|
+
edit,
|
|
17
24
|
};
|
|
18
25
|
}
|
|
19
|
-
/** Localized strings for status
|
|
20
|
-
const
|
|
26
|
+
/** Localized strings for rules-based status prompt */
|
|
27
|
+
const RULES_PROMPT_STRINGS = {
|
|
21
28
|
en: {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
criteriaHeading: '## Decision Criteria',
|
|
30
|
+
headerNum: '#',
|
|
31
|
+
headerCondition: 'Condition',
|
|
32
|
+
headerTag: 'Tag',
|
|
33
|
+
outputHeading: '## Output Format',
|
|
34
|
+
outputInstruction: 'Output the tag corresponding to your decision:',
|
|
35
|
+
appendixHeading: '### Appendix Template',
|
|
36
|
+
appendixInstruction: 'When outputting `[{tag}]`, append the following:',
|
|
25
37
|
},
|
|
26
38
|
ja: {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
39
|
+
criteriaHeading: '## 判定基準',
|
|
40
|
+
headerNum: '#',
|
|
41
|
+
headerCondition: '状況',
|
|
42
|
+
headerTag: 'タグ',
|
|
43
|
+
outputHeading: '## 出力フォーマット',
|
|
44
|
+
outputInstruction: '判定に対応するタグを出力してください:',
|
|
45
|
+
appendixHeading: '### 追加出力テンプレート',
|
|
46
|
+
appendixInstruction: '`[{tag}]` を出力する場合、以下を追記してください:',
|
|
30
47
|
},
|
|
31
48
|
};
|
|
32
49
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
50
|
+
* Generate status rules prompt from rules configuration.
|
|
51
|
+
* Creates a structured prompt that tells the agent which numbered tags to output.
|
|
52
|
+
*
|
|
53
|
+
* Example output for step "plan" with 3 rules:
|
|
54
|
+
* ## 判定基準
|
|
55
|
+
* | # | 状況 | タグ |
|
|
56
|
+
* |---|------|------|
|
|
57
|
+
* | 1 | 要件が明確で実装可能 | `[PLAN:1]` |
|
|
58
|
+
* | 2 | ユーザーが質問をしている | `[PLAN:2]` |
|
|
59
|
+
* | 3 | 要件が不明確、情報不足 | `[PLAN:3]` |
|
|
35
60
|
*/
|
|
36
|
-
export function
|
|
37
|
-
const
|
|
38
|
-
|
|
61
|
+
export function generateStatusRulesFromRules(stepName, rules, language) {
|
|
62
|
+
const tag = stepName.toUpperCase();
|
|
63
|
+
const strings = RULES_PROMPT_STRINGS[language];
|
|
64
|
+
const lines = [];
|
|
65
|
+
// Criteria table
|
|
66
|
+
lines.push(strings.criteriaHeading);
|
|
67
|
+
lines.push('');
|
|
68
|
+
lines.push(`| ${strings.headerNum} | ${strings.headerCondition} | ${strings.headerTag} |`);
|
|
69
|
+
lines.push('|---|------|------|');
|
|
70
|
+
for (const [i, rule] of rules.entries()) {
|
|
71
|
+
lines.push(`| ${i + 1} | ${rule.condition} | \`[${tag}:${i + 1}]\` |`);
|
|
72
|
+
}
|
|
73
|
+
lines.push('');
|
|
74
|
+
// Output format
|
|
75
|
+
lines.push(strings.outputHeading);
|
|
76
|
+
lines.push('');
|
|
77
|
+
lines.push(strings.outputInstruction);
|
|
78
|
+
lines.push('');
|
|
79
|
+
for (const [i, rule] of rules.entries()) {
|
|
80
|
+
lines.push(`- \`[${tag}:${i + 1}]\` — ${rule.condition}`);
|
|
81
|
+
}
|
|
82
|
+
// Appendix templates (if any rules have appendix)
|
|
83
|
+
const rulesWithAppendix = rules.filter((r) => r.appendix);
|
|
84
|
+
if (rulesWithAppendix.length > 0) {
|
|
85
|
+
lines.push('');
|
|
86
|
+
lines.push(strings.appendixHeading);
|
|
87
|
+
for (const [i, rule] of rules.entries()) {
|
|
88
|
+
if (!rule.appendix)
|
|
89
|
+
continue;
|
|
90
|
+
const tagStr = `[${tag}:${i + 1}]`;
|
|
91
|
+
lines.push('');
|
|
92
|
+
lines.push(strings.appendixInstruction.replace('{tag}', tagStr));
|
|
93
|
+
lines.push('```');
|
|
94
|
+
lines.push(rule.appendix.trimEnd());
|
|
95
|
+
lines.push('```');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return lines.join('\n');
|
|
39
99
|
}
|
|
40
100
|
/** Localized strings for execution metadata rendering */
|
|
41
101
|
const METADATA_STRINGS = {
|
|
@@ -45,6 +105,8 @@ const METADATA_STRINGS = {
|
|
|
45
105
|
rulesHeading: '## Execution Rules',
|
|
46
106
|
noCommit: '**Do NOT run git commit.** Commits are handled automatically by the system after workflow completion.',
|
|
47
107
|
noCd: '**Do NOT use `cd` in Bash commands.** Your working directory is already set correctly. Run commands directly without changing directories.',
|
|
108
|
+
editEnabled: '**Editing is ENABLED for this step.** You may create, modify, and delete files as needed to fulfill the user\'s request.',
|
|
109
|
+
editDisabled: '**Editing is DISABLED for this step.** Do NOT create, modify, or delete any project source files. You may only read/search code and write to report files in the Report Directory.',
|
|
48
110
|
note: 'Note: This section is metadata. Follow the language used in the rest of the prompt.',
|
|
49
111
|
},
|
|
50
112
|
ja: {
|
|
@@ -53,6 +115,8 @@ const METADATA_STRINGS = {
|
|
|
53
115
|
rulesHeading: '## 実行ルール',
|
|
54
116
|
noCommit: '**git commit を実行しないでください。** コミットはワークフロー完了後にシステムが自動で行います。',
|
|
55
117
|
noCd: '**Bashコマンドで `cd` を使用しないでください。** 作業ディレクトリは既に正しく設定されています。ディレクトリを変更せずにコマンドを実行してください。',
|
|
118
|
+
editEnabled: '**このステップでは編集が許可されています。** ユーザーの要求に応じて、ファイルの作成・変更・削除を行ってください。',
|
|
119
|
+
editDisabled: '**このステップでは編集が禁止されています。** プロジェクトのソースファイルを作成・変更・削除しないでください。コードの読み取り・検索と、Report Directoryへのレポート出力のみ行えます。',
|
|
56
120
|
note: '',
|
|
57
121
|
},
|
|
58
122
|
};
|
|
@@ -73,6 +137,12 @@ export function renderExecutionMetadata(metadata) {
|
|
|
73
137
|
`- ${strings.noCommit}`,
|
|
74
138
|
`- ${strings.noCd}`,
|
|
75
139
|
];
|
|
140
|
+
if (metadata.edit === true) {
|
|
141
|
+
lines.push(`- ${strings.editEnabled}`);
|
|
142
|
+
}
|
|
143
|
+
else if (metadata.edit === false) {
|
|
144
|
+
lines.push(`- ${strings.editDisabled}`);
|
|
145
|
+
}
|
|
76
146
|
if (strings.note) {
|
|
77
147
|
lines.push('');
|
|
78
148
|
lines.push(strings.note);
|
|
@@ -87,57 +157,334 @@ function escapeTemplateChars(str) {
|
|
|
87
157
|
return str.replace(/\{/g, '{').replace(/\}/g, '}');
|
|
88
158
|
}
|
|
89
159
|
/**
|
|
90
|
-
*
|
|
160
|
+
* Check if a report config is the object form (ReportObjectConfig).
|
|
161
|
+
*/
|
|
162
|
+
export function isReportObjectConfig(report) {
|
|
163
|
+
return typeof report === 'object' && !Array.isArray(report) && 'name' in report;
|
|
164
|
+
}
|
|
165
|
+
/** Localized strings for auto-injected sections */
|
|
166
|
+
const SECTION_STRINGS = {
|
|
167
|
+
en: {
|
|
168
|
+
workflowContext: '## Workflow Context',
|
|
169
|
+
iteration: 'Iteration',
|
|
170
|
+
iterationWorkflowWide: '(workflow-wide)',
|
|
171
|
+
stepIteration: 'Step Iteration',
|
|
172
|
+
stepIterationTimes: '(times this step has run)',
|
|
173
|
+
step: 'Step',
|
|
174
|
+
reportDirectory: 'Report Directory',
|
|
175
|
+
reportFile: 'Report File',
|
|
176
|
+
reportFiles: 'Report Files',
|
|
177
|
+
userRequest: '## User Request',
|
|
178
|
+
previousResponse: '## Previous Response',
|
|
179
|
+
additionalUserInputs: '## Additional User Inputs',
|
|
180
|
+
instructions: '## Instructions',
|
|
181
|
+
},
|
|
182
|
+
ja: {
|
|
183
|
+
workflowContext: '## Workflow Context',
|
|
184
|
+
iteration: 'Iteration',
|
|
185
|
+
iterationWorkflowWide: '(ワークフロー全体)',
|
|
186
|
+
stepIteration: 'Step Iteration',
|
|
187
|
+
stepIterationTimes: '(このステップの実行回数)',
|
|
188
|
+
step: 'Step',
|
|
189
|
+
reportDirectory: 'Report Directory',
|
|
190
|
+
reportFile: 'Report File',
|
|
191
|
+
reportFiles: 'Report Files',
|
|
192
|
+
userRequest: '## User Request',
|
|
193
|
+
previousResponse: '## Previous Response',
|
|
194
|
+
additionalUserInputs: '## Additional User Inputs',
|
|
195
|
+
instructions: '## Instructions',
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
/** Localized strings for auto-generated report output instructions */
|
|
199
|
+
const REPORT_OUTPUT_STRINGS = {
|
|
200
|
+
en: {
|
|
201
|
+
singleHeading: '**Report output:** Output to the `Report File` specified above.',
|
|
202
|
+
multiHeading: '**Report output:** Output to the `Report Files` specified above.',
|
|
203
|
+
createRule: '- If file does not exist: Create new file',
|
|
204
|
+
appendRule: '- If file exists: Append with `## Iteration {step_iteration}` section',
|
|
205
|
+
},
|
|
206
|
+
ja: {
|
|
207
|
+
singleHeading: '**レポート出力:** `Report File` に出力してください。',
|
|
208
|
+
multiHeading: '**レポート出力:** Report Files に出力してください。',
|
|
209
|
+
createRule: '- ファイルが存在しない場合: 新規作成',
|
|
210
|
+
appendRule: '- ファイルが存在する場合: `## Iteration {step_iteration}` セクションを追記',
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Generate report output instructions from step.report config.
|
|
215
|
+
* Returns undefined if step has no report or no reportDir.
|
|
91
216
|
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* - {iteration} - Current iteration number (workflow-wide turn count)
|
|
95
|
-
* - {max_iterations} - Maximum iterations allowed
|
|
96
|
-
* - {step_iteration} - Current step's iteration number (how many times this step has been executed)
|
|
97
|
-
* - {previous_response} - Output from previous step (if passPreviousResponse is true)
|
|
98
|
-
* - {git_diff} - Current git diff output
|
|
99
|
-
* - {user_inputs} - Accumulated user inputs
|
|
100
|
-
* - {report_dir} - Report directory name (e.g., "20250126-143052-task-summary")
|
|
217
|
+
* This replaces the manual `order:` fields and instruction_template
|
|
218
|
+
* report output blocks that were previously hand-written in each YAML.
|
|
101
219
|
*/
|
|
102
|
-
|
|
103
|
-
|
|
220
|
+
function renderReportOutputInstruction(step, context, language) {
|
|
221
|
+
if (!step.report || !context.reportDir)
|
|
222
|
+
return undefined;
|
|
223
|
+
const s = REPORT_OUTPUT_STRINGS[language];
|
|
224
|
+
const isMulti = Array.isArray(step.report);
|
|
225
|
+
const heading = isMulti ? s.multiHeading : s.singleHeading;
|
|
226
|
+
const appendRule = s.appendRule.replace('{step_iteration}', String(context.stepIteration));
|
|
227
|
+
return [heading, s.createRule, appendRule].join('\n');
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Render the Workflow Context section.
|
|
231
|
+
*/
|
|
232
|
+
function renderWorkflowContext(step, context, language) {
|
|
233
|
+
const s = SECTION_STRINGS[language];
|
|
234
|
+
const lines = [
|
|
235
|
+
s.workflowContext,
|
|
236
|
+
`- ${s.iteration}: ${context.iteration}/${context.maxIterations}${s.iterationWorkflowWide}`,
|
|
237
|
+
`- ${s.stepIteration}: ${context.stepIteration}${s.stepIterationTimes}`,
|
|
238
|
+
`- ${s.step}: ${step.name}`,
|
|
239
|
+
];
|
|
240
|
+
return lines.join('\n');
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Render report info for the Workflow Context section.
|
|
244
|
+
* Used only by buildReportInstruction() (phase 2).
|
|
245
|
+
*/
|
|
246
|
+
function renderReportContext(report, reportDir, language) {
|
|
247
|
+
const s = SECTION_STRINGS[language];
|
|
248
|
+
const lines = [
|
|
249
|
+
`- ${s.reportDirectory}: ${reportDir}/`,
|
|
250
|
+
];
|
|
251
|
+
if (typeof report === 'string') {
|
|
252
|
+
lines.push(`- ${s.reportFile}: ${reportDir}/${report}`);
|
|
253
|
+
}
|
|
254
|
+
else if (isReportObjectConfig(report)) {
|
|
255
|
+
lines.push(`- ${s.reportFile}: ${reportDir}/${report.name}`);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
lines.push(`- ${s.reportFiles}:`);
|
|
259
|
+
for (const file of report) {
|
|
260
|
+
lines.push(` - ${file.label}: ${reportDir}/${file.path}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return lines.join('\n');
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Replace template placeholders in the instruction_template body.
|
|
267
|
+
*
|
|
268
|
+
* These placeholders may still be used in instruction_template for
|
|
269
|
+
* backward compatibility or special cases.
|
|
270
|
+
*/
|
|
271
|
+
function replaceTemplatePlaceholders(template, step, context) {
|
|
272
|
+
let result = template;
|
|
273
|
+
// These placeholders are also covered by auto-injected sections
|
|
274
|
+
// (User Request, Previous Response, Additional User Inputs), but kept here
|
|
275
|
+
// for backward compatibility with workflows that still embed them in
|
|
276
|
+
// instruction_template (e.g., research.yaml, magi.yaml).
|
|
277
|
+
// New workflows should NOT use {task} or {user_inputs} in instruction_template
|
|
278
|
+
// since they are auto-injected as separate sections.
|
|
104
279
|
// Replace {task}
|
|
105
|
-
|
|
280
|
+
result = result.replace(/\{task\}/g, escapeTemplateChars(context.task));
|
|
106
281
|
// Replace {iteration}, {max_iterations}, and {step_iteration}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
282
|
+
result = result.replace(/\{iteration\}/g, String(context.iteration));
|
|
283
|
+
result = result.replace(/\{max_iterations\}/g, String(context.maxIterations));
|
|
284
|
+
result = result.replace(/\{step_iteration\}/g, String(context.stepIteration));
|
|
110
285
|
// Replace {previous_response}
|
|
111
286
|
if (step.passPreviousResponse) {
|
|
112
287
|
if (context.previousOutput) {
|
|
113
|
-
|
|
288
|
+
result = result.replace(/\{previous_response\}/g, escapeTemplateChars(context.previousOutput.content));
|
|
114
289
|
}
|
|
115
290
|
else {
|
|
116
|
-
|
|
291
|
+
result = result.replace(/\{previous_response\}/g, '');
|
|
117
292
|
}
|
|
118
293
|
}
|
|
119
|
-
// Replace {git_diff}
|
|
120
|
-
const gitDiff = getGitDiff(context.cwd);
|
|
121
|
-
instruction = instruction.replace(/\{git_diff\}/g, gitDiff);
|
|
122
294
|
// Replace {user_inputs}
|
|
123
295
|
const userInputsStr = context.userInputs.join('\n');
|
|
124
|
-
|
|
125
|
-
// Replace {report_dir}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
296
|
+
result = result.replace(/\{user_inputs\}/g, escapeTemplateChars(userInputsStr));
|
|
297
|
+
// Replace {report_dir}
|
|
298
|
+
if (context.reportDir) {
|
|
299
|
+
result = result.replace(/\{report_dir\}/g, context.reportDir);
|
|
300
|
+
}
|
|
301
|
+
// Replace {report:filename} with reportDir/filename
|
|
129
302
|
if (context.reportDir) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
303
|
+
result = result.replace(/\{report:([^}]+)\}/g, (_match, filename) => {
|
|
304
|
+
return `${context.reportDir}/${filename}`;
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
return result;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Build instruction from template with context values.
|
|
311
|
+
*
|
|
312
|
+
* Generates a complete instruction by auto-injecting standard sections
|
|
313
|
+
* around the step-specific instruction_template content:
|
|
314
|
+
*
|
|
315
|
+
* 1. Execution Context (working directory, rules) — always
|
|
316
|
+
* 2. Workflow Context (iteration, step, report info) — always
|
|
317
|
+
* 3. User Request ({task}) — unless template contains {task}
|
|
318
|
+
* 4. Previous Response — if passPreviousResponse and has content, unless template contains {previous_response}
|
|
319
|
+
* 5. Additional User Inputs — unless template contains {user_inputs}
|
|
320
|
+
* 6. Instructions header + instruction_template content — always
|
|
321
|
+
* 7. Status Output Rules — when step has tag-based rules (not all ai()/aggregate)
|
|
322
|
+
*
|
|
323
|
+
* Template placeholders ({task}, {previous_response}, etc.) are still replaced
|
|
324
|
+
* within the instruction_template body for backward compatibility.
|
|
325
|
+
* When a placeholder is present in the template, the corresponding
|
|
326
|
+
* auto-injected section is skipped to avoid duplication.
|
|
327
|
+
*/
|
|
328
|
+
export function buildInstruction(step, context) {
|
|
329
|
+
const language = context.language ?? 'en';
|
|
330
|
+
const s = SECTION_STRINGS[language];
|
|
331
|
+
const sections = [];
|
|
332
|
+
// 1. Execution context metadata (working directory + rules + edit permission)
|
|
333
|
+
const metadata = buildExecutionMetadata(context, step.edit);
|
|
334
|
+
sections.push(renderExecutionMetadata(metadata));
|
|
335
|
+
// 2. Workflow Context (iteration, step, report info)
|
|
336
|
+
sections.push(renderWorkflowContext(step, context, language));
|
|
337
|
+
// Skip auto-injection for sections whose placeholders exist in the template,
|
|
338
|
+
// to avoid duplicate content. Templates using placeholders handle their own layout.
|
|
339
|
+
const tmpl = step.instructionTemplate;
|
|
340
|
+
const hasTaskPlaceholder = tmpl.includes('{task}');
|
|
341
|
+
const hasPreviousResponsePlaceholder = tmpl.includes('{previous_response}');
|
|
342
|
+
const hasUserInputsPlaceholder = tmpl.includes('{user_inputs}');
|
|
343
|
+
// 3. User Request (skip if template embeds {task} directly)
|
|
344
|
+
if (!hasTaskPlaceholder) {
|
|
345
|
+
sections.push(`${s.userRequest}\n${escapeTemplateChars(context.task)}`);
|
|
346
|
+
}
|
|
347
|
+
// 4. Previous Response (skip if template embeds {previous_response} directly)
|
|
348
|
+
if (step.passPreviousResponse && context.previousOutput && !hasPreviousResponsePlaceholder) {
|
|
349
|
+
sections.push(`${s.previousResponse}\n${escapeTemplateChars(context.previousOutput.content)}`);
|
|
350
|
+
}
|
|
351
|
+
// 5. Additional User Inputs (skip if template embeds {user_inputs} directly)
|
|
352
|
+
if (!hasUserInputsPlaceholder) {
|
|
353
|
+
const userInputsStr = context.userInputs.join('\n');
|
|
354
|
+
sections.push(`${s.additionalUserInputs}\n${escapeTemplateChars(userInputsStr)}`);
|
|
355
|
+
}
|
|
356
|
+
// 6. Instructions header + instruction_template content
|
|
357
|
+
const processedTemplate = replaceTemplatePlaceholders(step.instructionTemplate, step, context);
|
|
358
|
+
sections.push(`${s.instructions}\n${processedTemplate}`);
|
|
359
|
+
// 7. Status Output Rules (for tag-based detection in Phase 1)
|
|
360
|
+
// Skip if all rules are ai() or aggregate conditions (no tags needed)
|
|
361
|
+
if (hasTagBasedRules(step)) {
|
|
362
|
+
const statusRulesPrompt = generateStatusRulesFromRules(step.name, step.rules, language);
|
|
363
|
+
sections.push(statusRulesPrompt);
|
|
364
|
+
}
|
|
365
|
+
return sections.join('\n\n');
|
|
366
|
+
}
|
|
367
|
+
/** Localized strings for report phase execution rules */
|
|
368
|
+
const REPORT_PHASE_STRINGS = {
|
|
369
|
+
en: {
|
|
370
|
+
noSourceEdit: '**Do NOT modify project source files.** Only output report files.',
|
|
371
|
+
instructionBody: 'Output the results of your previous work as a report.',
|
|
372
|
+
},
|
|
373
|
+
ja: {
|
|
374
|
+
noSourceEdit: '**プロジェクトのソースファイルを変更しないでください。** レポートファイルのみ出力してください。',
|
|
375
|
+
instructionBody: '前のステップの作業結果をレポートとして出力してください。',
|
|
376
|
+
},
|
|
377
|
+
};
|
|
378
|
+
/**
|
|
379
|
+
* Build instruction for phase 2 (report output).
|
|
380
|
+
*
|
|
381
|
+
* Separate from buildInstruction() — only includes:
|
|
382
|
+
* - Execution Context (cwd + rules)
|
|
383
|
+
* - Workflow Context (report info only)
|
|
384
|
+
* - Report output instruction + format
|
|
385
|
+
*
|
|
386
|
+
* Does NOT include: User Request, Previous Response, User Inputs,
|
|
387
|
+
* Status rules, instruction_template.
|
|
388
|
+
*/
|
|
389
|
+
export function buildReportInstruction(step, context) {
|
|
390
|
+
if (!step.report) {
|
|
391
|
+
throw new Error(`buildReportInstruction called for step "${step.name}" which has no report config`);
|
|
392
|
+
}
|
|
393
|
+
const language = context.language ?? 'en';
|
|
394
|
+
const s = SECTION_STRINGS[language];
|
|
395
|
+
const r = REPORT_PHASE_STRINGS[language];
|
|
396
|
+
const m = METADATA_STRINGS[language];
|
|
397
|
+
const sections = [];
|
|
398
|
+
// 1. Execution Context
|
|
399
|
+
const execLines = [
|
|
400
|
+
m.heading,
|
|
401
|
+
`- ${m.workingDirectory}: ${context.cwd}`,
|
|
402
|
+
'',
|
|
403
|
+
m.rulesHeading,
|
|
404
|
+
`- ${m.noCommit}`,
|
|
405
|
+
`- ${m.noCd}`,
|
|
406
|
+
`- ${r.noSourceEdit}`,
|
|
407
|
+
];
|
|
408
|
+
if (m.note) {
|
|
409
|
+
execLines.push('');
|
|
410
|
+
execLines.push(m.note);
|
|
411
|
+
}
|
|
412
|
+
execLines.push('');
|
|
413
|
+
sections.push(execLines.join('\n'));
|
|
414
|
+
// 2. Workflow Context (report info only)
|
|
415
|
+
const workflowLines = [
|
|
416
|
+
s.workflowContext,
|
|
417
|
+
renderReportContext(step.report, context.reportDir, language),
|
|
418
|
+
];
|
|
419
|
+
sections.push(workflowLines.join('\n'));
|
|
420
|
+
// 3. Instructions + report output instruction + format
|
|
421
|
+
const instrParts = [
|
|
422
|
+
`${s.instructions}`,
|
|
423
|
+
r.instructionBody,
|
|
424
|
+
];
|
|
425
|
+
// Report output instruction (auto-generated or explicit order)
|
|
426
|
+
const reportContext = {
|
|
427
|
+
task: '',
|
|
428
|
+
iteration: 0,
|
|
429
|
+
maxIterations: 0,
|
|
430
|
+
stepIteration: context.stepIteration,
|
|
431
|
+
cwd: context.cwd,
|
|
432
|
+
userInputs: [],
|
|
433
|
+
reportDir: context.reportDir,
|
|
434
|
+
language,
|
|
435
|
+
};
|
|
436
|
+
if (isReportObjectConfig(step.report) && step.report.order) {
|
|
437
|
+
const processedOrder = replaceTemplatePlaceholders(step.report.order.trimEnd(), step, reportContext);
|
|
438
|
+
instrParts.push('');
|
|
439
|
+
instrParts.push(processedOrder);
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
const reportInstruction = renderReportOutputInstruction(step, reportContext, language);
|
|
443
|
+
if (reportInstruction) {
|
|
444
|
+
instrParts.push('');
|
|
445
|
+
instrParts.push(reportInstruction);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
// Report format
|
|
449
|
+
if (isReportObjectConfig(step.report) && step.report.format) {
|
|
450
|
+
const processedFormat = replaceTemplatePlaceholders(step.report.format.trimEnd(), step, reportContext);
|
|
451
|
+
instrParts.push('');
|
|
452
|
+
instrParts.push(processedFormat);
|
|
453
|
+
}
|
|
454
|
+
sections.push(instrParts.join('\n'));
|
|
455
|
+
return sections.join('\n\n');
|
|
456
|
+
}
|
|
457
|
+
/** Localized strings for status judgment phase (Phase 3) */
|
|
458
|
+
const STATUS_JUDGMENT_STRINGS = {
|
|
459
|
+
en: {
|
|
460
|
+
header: 'Review your work results and determine the status. Do NOT perform any additional work.',
|
|
461
|
+
},
|
|
462
|
+
ja: {
|
|
463
|
+
header: '作業結果を振り返り、ステータスを判定してください。追加の作業は行わないでください。',
|
|
464
|
+
},
|
|
465
|
+
};
|
|
466
|
+
/**
|
|
467
|
+
* Build instruction for Phase 3 (status judgment).
|
|
468
|
+
*
|
|
469
|
+
* Resumes the agent session and asks it to evaluate its work
|
|
470
|
+
* and output the appropriate status tag. No tools are allowed.
|
|
471
|
+
*
|
|
472
|
+
* Includes:
|
|
473
|
+
* - Header instruction (review and determine status)
|
|
474
|
+
* - Status rules (criteria table + output format) from generateStatusRulesFromRules()
|
|
475
|
+
*/
|
|
476
|
+
export function buildStatusJudgmentInstruction(step, context) {
|
|
477
|
+
if (!step.rules || step.rules.length === 0) {
|
|
478
|
+
throw new Error(`buildStatusJudgmentInstruction called for step "${step.name}" which has no rules`);
|
|
479
|
+
}
|
|
480
|
+
const language = context.language ?? 'en';
|
|
481
|
+
const s = STATUS_JUDGMENT_STRINGS[language];
|
|
482
|
+
const sections = [];
|
|
483
|
+
// Header
|
|
484
|
+
sections.push(s.header);
|
|
485
|
+
// Status rules (criteria table + output format)
|
|
486
|
+
const generatedPrompt = generateStatusRulesFromRules(step.name, step.rules, language);
|
|
487
|
+
sections.push(generatedPrompt);
|
|
488
|
+
return sections.join('\n\n');
|
|
142
489
|
}
|
|
143
490
|
//# sourceMappingURL=instruction-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruction-builder.js","sourceRoot":"","sources":["../../src/workflow/instruction-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instruction-builder.js","sourceRoot":"","sources":["../../src/workflow/instruction-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel step log display
|
|
3
|
+
*
|
|
4
|
+
* Provides prefixed, color-coded interleaved output for parallel sub-steps.
|
|
5
|
+
* Each sub-step's stream output gets a `[name]` prefix with right-padding
|
|
6
|
+
* aligned to the longest sub-step name.
|
|
7
|
+
*/
|
|
8
|
+
import type { StreamCallback } from '../claude/types.js';
|
|
9
|
+
export interface ParallelLoggerOptions {
|
|
10
|
+
/** Sub-step names (used to calculate prefix width) */
|
|
11
|
+
subStepNames: string[];
|
|
12
|
+
/** Parent onStream callback to delegate non-prefixed events */
|
|
13
|
+
parentOnStream?: StreamCallback;
|
|
14
|
+
/** Override process.stdout.write for testing */
|
|
15
|
+
writeFn?: (text: string) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Logger for parallel step execution.
|
|
19
|
+
*
|
|
20
|
+
* Creates per-sub-step StreamCallback wrappers that:
|
|
21
|
+
* - Buffer partial lines until newline
|
|
22
|
+
* - Prepend colored `[name]` prefix to each complete line
|
|
23
|
+
* - Delegate init/result/error events to the parent callback
|
|
24
|
+
*/
|
|
25
|
+
export declare class ParallelLogger {
|
|
26
|
+
private readonly maxNameLength;
|
|
27
|
+
private readonly lineBuffers;
|
|
28
|
+
private readonly parentOnStream?;
|
|
29
|
+
private readonly writeFn;
|
|
30
|
+
constructor(options: ParallelLoggerOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Build the colored prefix string for a sub-step.
|
|
33
|
+
* Format: `\x1b[COLORm[name]\x1b[0m` + padding spaces
|
|
34
|
+
*/
|
|
35
|
+
buildPrefix(name: string, index: number): string;
|
|
36
|
+
/**
|
|
37
|
+
* Create a StreamCallback wrapper for a specific sub-step.
|
|
38
|
+
*
|
|
39
|
+
* - `text`: buffered line-by-line with prefix
|
|
40
|
+
* - `tool_use`, `tool_result`, `tool_output`, `thinking`: prefixed per-line, no buffering
|
|
41
|
+
* - `init`, `result`, `error`: delegated to parent callback (no prefix)
|
|
42
|
+
*/
|
|
43
|
+
createStreamHandler(subStepName: string, index: number): StreamCallback;
|
|
44
|
+
/**
|
|
45
|
+
* Handle text event with line buffering.
|
|
46
|
+
* Buffer until newline, then output prefixed complete lines.
|
|
47
|
+
* Empty lines get no prefix per spec.
|
|
48
|
+
*/
|
|
49
|
+
private handleTextEvent;
|
|
50
|
+
/**
|
|
51
|
+
* Handle block events (tool_use, tool_result, tool_output, thinking).
|
|
52
|
+
* Output with prefix, splitting multi-line content.
|
|
53
|
+
*/
|
|
54
|
+
private handleBlockEvent;
|
|
55
|
+
/**
|
|
56
|
+
* Flush remaining line buffers for all sub-steps.
|
|
57
|
+
* Call after all sub-steps complete to output any trailing partial lines.
|
|
58
|
+
*/
|
|
59
|
+
flush(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Print completion summary after all sub-steps finish.
|
|
62
|
+
*
|
|
63
|
+
* Format:
|
|
64
|
+
* ```
|
|
65
|
+
* ── parallel-review results ──
|
|
66
|
+
* arch-review: approved
|
|
67
|
+
* security-review: rejected
|
|
68
|
+
* ──────────────────────────────
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
printSummary(parentStepName: string, results: Array<{
|
|
72
|
+
name: string;
|
|
73
|
+
condition: string | undefined;
|
|
74
|
+
}>): void;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=parallel-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-logger.d.ts","sourceRoot":"","sources":["../../src/workflow/parallel-logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,oBAAoB,CAAC;AAMtE,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,OAAO,EAAE,qBAAqB;IAU1C;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAMhD;;;;;;OAMG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc;IA0BvE;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAkBvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAeb;;;;;;;;;;OAUG;IACH,YAAY,CACV,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,GAC9D,IAAI;CA2BR"}
|