takt 0.1.7 → 0.2.1
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 +179 -43
- package/dist/agents/runner.d.ts +3 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +15 -0
- package/dist/agents/runner.js.map +1 -1
- package/dist/claude/client.d.ts +3 -1
- package/dist/claude/client.d.ts.map +1 -1
- package/dist/claude/client.js +17 -0
- package/dist/claude/client.js.map +1 -1
- package/dist/cli.d.ts +9 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +73 -18
- package/dist/cli.js.map +1 -1
- package/dist/commands/addTask.d.ts +15 -0
- package/dist/commands/addTask.d.ts.map +1 -0
- package/dist/commands/addTask.js +119 -0
- package/dist/commands/addTask.js.map +1 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +18 -5
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +4 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +4 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/refreshBuiltin.d.ts +11 -0
- package/dist/commands/refreshBuiltin.d.ts.map +1 -0
- package/dist/commands/refreshBuiltin.js +37 -0
- package/dist/commands/refreshBuiltin.js.map +1 -0
- package/dist/commands/reviewTasks.d.ts +32 -0
- package/dist/commands/reviewTasks.d.ts.map +1 -0
- package/dist/commands/reviewTasks.js +198 -0
- package/dist/commands/reviewTasks.js.map +1 -0
- package/dist/commands/taskExecution.d.ts +24 -1
- package/dist/commands/taskExecution.d.ts.map +1 -1
- package/dist/commands/taskExecution.js +100 -36
- package/dist/commands/taskExecution.js.map +1 -1
- package/dist/commands/watchTasks.d.ts +12 -0
- package/dist/commands/watchTasks.d.ts.map +1 -0
- package/dist/commands/watchTasks.js +68 -0
- package/dist/commands/watchTasks.js.map +1 -0
- package/dist/commands/workflowExecution.d.ts +5 -1
- package/dist/commands/workflowExecution.d.ts.map +1 -1
- package/dist/commands/workflowExecution.js +35 -12
- package/dist/commands/workflowExecution.js.map +1 -1
- package/dist/config/initialization.d.ts +2 -0
- package/dist/config/initialization.d.ts.map +1 -1
- package/dist/config/initialization.js +12 -2
- package/dist/config/initialization.js.map +1 -1
- package/dist/config/paths.d.ts +1 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +1 -1
- package/dist/config/paths.js.map +1 -1
- package/dist/config/sessionStore.d.ts +5 -0
- package/dist/config/sessionStore.d.ts.map +1 -1
- package/dist/config/sessionStore.js +1 -1
- package/dist/config/sessionStore.js.map +1 -1
- package/dist/config/workflowLoader.d.ts.map +1 -1
- package/dist/config/workflowLoader.js +1 -0
- package/dist/config/workflowLoader.js.map +1 -1
- package/dist/models/schemas.d.ts +22 -0
- package/dist/models/schemas.d.ts.map +1 -1
- package/dist/models/schemas.js +8 -0
- package/dist/models/schemas.js.map +1 -1
- package/dist/models/types.d.ts +8 -2
- package/dist/models/types.d.ts.map +1 -1
- package/dist/prompt/index.d.ts +60 -11
- package/dist/prompt/index.d.ts.map +1 -1
- package/dist/prompt/index.js +246 -72
- package/dist/prompt/index.js.map +1 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +2 -0
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/index.d.ts +3 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/resources/index.d.ts +5 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +33 -9
- package/dist/resources/index.js.map +1 -1
- package/dist/task/autoCommit.d.ts +28 -0
- package/dist/task/autoCommit.d.ts.map +1 -0
- package/dist/task/autoCommit.js +68 -0
- package/dist/task/autoCommit.js.map +1 -0
- package/dist/task/display.d.ts.map +1 -1
- package/dist/task/display.js +19 -1
- package/dist/task/display.js.map +1 -1
- package/dist/task/index.d.ts +5 -0
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +5 -0
- package/dist/task/index.js.map +1 -1
- package/dist/task/parser.d.ts +33 -0
- package/dist/task/parser.d.ts.map +1 -0
- package/dist/task/parser.js +86 -0
- package/dist/task/parser.js.map +1 -0
- package/dist/task/runner.d.ts +6 -0
- package/dist/task/runner.d.ts.map +1 -1
- package/dist/task/runner.js +33 -42
- package/dist/task/runner.js.map +1 -1
- package/dist/task/schema.d.ts +32 -0
- package/dist/task/schema.d.ts.map +1 -0
- package/dist/task/schema.js +31 -0
- package/dist/task/schema.js.map +1 -0
- package/dist/task/watcher.d.ts +33 -0
- package/dist/task/watcher.d.ts.map +1 -0
- package/dist/task/watcher.js +69 -0
- package/dist/task/watcher.js.map +1 -0
- package/dist/task/worktree.d.ts +70 -0
- package/dist/task/worktree.d.ts.map +1 -0
- package/dist/task/worktree.js +221 -0
- package/dist/task/worktree.js.map +1 -0
- package/dist/utils/debug.d.ts +6 -1
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js +30 -24
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +20 -0
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +32 -3
- package/dist/utils/session.js.map +1 -1
- package/dist/utils/slug.d.ts +12 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +18 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/text.d.ts +22 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +54 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/workflow/engine.d.ts +5 -6
- package/dist/workflow/engine.d.ts.map +1 -1
- package/dist/workflow/engine.js +32 -12
- package/dist/workflow/engine.js.map +1 -1
- package/dist/workflow/index.d.ts +2 -2
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -2
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/instruction-builder.d.ts +31 -2
- package/dist/workflow/instruction-builder.d.ts.map +1 -1
- package/dist/workflow/instruction-builder.js +69 -1
- package/dist/workflow/instruction-builder.js.map +1 -1
- package/dist/workflow/transitions.d.ts.map +1 -1
- package/dist/workflow/transitions.js +1 -0
- package/dist/workflow/transitions.js.map +1 -1
- package/dist/workflow/types.d.ts +5 -1
- package/dist/workflow/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/resources/global/en/workflows/default.yaml +22 -1
- package/resources/global/en/workflows/simple.yaml +18 -1
- package/resources/global/ja/agents/default/ai-reviewer.md +24 -1
- package/resources/global/ja/agents/default/architect.md +157 -4
- package/resources/global/ja/agents/default/coder.md +1 -0
- package/resources/global/ja/workflows/default.yaml +38 -1
- package/resources/global/ja/workflows/expert-review.yaml +169 -10
- package/resources/global/ja/workflows/simple.yaml +18 -1
|
@@ -4,7 +4,65 @@
|
|
|
4
4
|
* Builds the instruction string for agent execution by replacing
|
|
5
5
|
* template placeholders with actual values.
|
|
6
6
|
*/
|
|
7
|
+
import { join } from 'node:path';
|
|
7
8
|
import { getGitDiff } from '../agents/runner.js';
|
|
9
|
+
/**
|
|
10
|
+
* Build execution metadata from instruction context.
|
|
11
|
+
*
|
|
12
|
+
* Pure function: InstructionContext → ExecutionMetadata.
|
|
13
|
+
* Sets `projectRoot` only when cwd differs from projectCwd (worktree mode).
|
|
14
|
+
*/
|
|
15
|
+
export function buildExecutionMetadata(context) {
|
|
16
|
+
const projectRoot = context.projectCwd ?? context.cwd;
|
|
17
|
+
const isWorktree = context.cwd !== projectRoot;
|
|
18
|
+
return {
|
|
19
|
+
workingDirectory: context.cwd,
|
|
20
|
+
...(isWorktree ? { projectRoot } : {}),
|
|
21
|
+
language: context.language ?? 'en',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Localized strings for execution metadata rendering */
|
|
25
|
+
const METADATA_STRINGS = {
|
|
26
|
+
en: {
|
|
27
|
+
heading: '## Execution Context',
|
|
28
|
+
workingDirectory: 'Working Directory',
|
|
29
|
+
projectRoot: 'Project Root',
|
|
30
|
+
mode: 'Mode: worktree (source edits in Working Directory, reports in Project Root)',
|
|
31
|
+
note: 'Note: This section is metadata. Follow the language used in the rest of the prompt.',
|
|
32
|
+
},
|
|
33
|
+
ja: {
|
|
34
|
+
heading: '## 実行コンテキスト',
|
|
35
|
+
workingDirectory: '作業ディレクトリ',
|
|
36
|
+
projectRoot: 'プロジェクトルート',
|
|
37
|
+
mode: 'モード: worktree(ソース編集は作業ディレクトリ、レポートはプロジェクトルート)',
|
|
38
|
+
note: '',
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Render execution metadata as a markdown string.
|
|
43
|
+
*
|
|
44
|
+
* Pure function: ExecutionMetadata → string.
|
|
45
|
+
* Always includes heading + Working Directory.
|
|
46
|
+
* Adds Project Root and Mode only in worktree mode (when projectRoot is present).
|
|
47
|
+
* Language determines the output language; 'en' includes a note about language consistency.
|
|
48
|
+
*/
|
|
49
|
+
export function renderExecutionMetadata(metadata) {
|
|
50
|
+
const strings = METADATA_STRINGS[metadata.language];
|
|
51
|
+
const lines = [
|
|
52
|
+
strings.heading,
|
|
53
|
+
`- ${strings.workingDirectory}: ${metadata.workingDirectory}`,
|
|
54
|
+
];
|
|
55
|
+
if (metadata.projectRoot !== undefined) {
|
|
56
|
+
lines.push(`- ${strings.projectRoot}: ${metadata.projectRoot}`);
|
|
57
|
+
lines.push(`- ${strings.mode}`);
|
|
58
|
+
}
|
|
59
|
+
if (strings.note) {
|
|
60
|
+
lines.push('');
|
|
61
|
+
lines.push(strings.note);
|
|
62
|
+
}
|
|
63
|
+
lines.push('');
|
|
64
|
+
return lines.join('\n');
|
|
65
|
+
}
|
|
8
66
|
/**
|
|
9
67
|
* Escape special characters in dynamic content to prevent template injection.
|
|
10
68
|
*/
|
|
@@ -47,14 +105,24 @@ export function buildInstruction(step, context) {
|
|
|
47
105
|
// Replace {user_inputs}
|
|
48
106
|
const userInputsStr = context.userInputs.join('\n');
|
|
49
107
|
instruction = instruction.replace(/\{user_inputs\}/g, escapeTemplateChars(userInputsStr));
|
|
50
|
-
// Replace {report_dir}
|
|
108
|
+
// Replace .takt/reports/{report_dir} with absolute path first,
|
|
109
|
+
// then replace standalone {report_dir} with the directory name.
|
|
110
|
+
// This ensures agents always use the correct project root for reports,
|
|
111
|
+
// even when their cwd is a worktree.
|
|
51
112
|
if (context.reportDir) {
|
|
113
|
+
const projectRoot = context.projectCwd ?? context.cwd;
|
|
114
|
+
const reportDirFullPath = join(projectRoot, '.takt', 'reports', context.reportDir);
|
|
115
|
+
instruction = instruction.replace(/\.takt\/reports\/\{report_dir\}/g, reportDirFullPath);
|
|
52
116
|
instruction = instruction.replace(/\{report_dir\}/g, context.reportDir);
|
|
53
117
|
}
|
|
54
118
|
// Append status_rules_prompt if present
|
|
55
119
|
if (step.statusRulesPrompt) {
|
|
56
120
|
instruction = `${instruction}\n\n${step.statusRulesPrompt}`;
|
|
57
121
|
}
|
|
122
|
+
// Prepend execution context metadata so agents see it first.
|
|
123
|
+
// Now language-aware, so no need to hide it at the end.
|
|
124
|
+
const metadata = buildExecutionMetadata(context);
|
|
125
|
+
instruction = `${renderExecutionMetadata(metadata)}\n${instruction}`;
|
|
58
126
|
return instruction;
|
|
59
127
|
}
|
|
60
128
|
//# sourceMappingURL=instruction-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruction-builder.js","sourceRoot":"","sources":["../../src/workflow/instruction-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"instruction-builder.js","sourceRoot":"","sources":["../../src/workflow/instruction-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transitions.d.ts","sourceRoot":"","sources":["../../src/workflow/transitions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,MAAM,EACN,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAG5B;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,mBAAmB,GAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"transitions.d.ts","sourceRoot":"","sources":["../../src/workflow/transitions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,MAAM,EACN,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAG5B;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAqBT;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,GACrB,MAAM,CAkCR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,GACrB,MAAM,CAoBR;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkB5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transitions.js","sourceRoot":"","sources":["../../src/workflow/transitions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transitions.js","sourceRoot":"","sources":["../../src/workflow/transitions.ts"],"names":[],"mappings":"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"}
|
package/dist/workflow/types.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Contains types for workflow events, requests, and callbacks
|
|
5
5
|
* used by the workflow execution engine.
|
|
6
6
|
*/
|
|
7
|
-
import type { WorkflowStep, AgentResponse, WorkflowState } from '../models/types.js';
|
|
7
|
+
import type { WorkflowStep, AgentResponse, WorkflowState, Language } from '../models/types.js';
|
|
8
8
|
import type { StreamCallback } from '../agents/runner.js';
|
|
9
9
|
import type { PermissionHandler, AskUserQuestionHandler } from '../claude/process.js';
|
|
10
10
|
/** Events emitted by workflow engine */
|
|
@@ -63,6 +63,10 @@ export interface WorkflowEngineOptions {
|
|
|
63
63
|
onIterationLimit?: IterationLimitCallback;
|
|
64
64
|
/** Bypass all permission checks (sacrifice-my-pc mode) */
|
|
65
65
|
bypassPermissions?: boolean;
|
|
66
|
+
/** Project root directory (where .takt/ lives). Defaults to cwd if not specified. */
|
|
67
|
+
projectCwd?: string;
|
|
68
|
+
/** Language for instruction metadata. Defaults to 'en'. */
|
|
69
|
+
language?: Language;
|
|
66
70
|
}
|
|
67
71
|
/** Loop detection result */
|
|
68
72
|
export interface LoopCheckResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workflow/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workflow/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "takt",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "TAKT: Task Agent Koordination Tool - AI Agent Workflow Orchestration",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
"test": "vitest run",
|
|
16
16
|
"test:watch": "vitest",
|
|
17
17
|
"lint": "eslint src/",
|
|
18
|
-
"prepublishOnly": "npm run lint && npm run build && npm run test"
|
|
18
|
+
"prepublishOnly": "npm run lint && npm run build && npm run test",
|
|
19
|
+
"postversion": "git push --follow-tags"
|
|
19
20
|
},
|
|
20
21
|
"keywords": [
|
|
21
22
|
"claude",
|
|
@@ -39,6 +39,7 @@ steps:
|
|
|
39
39
|
| Situation | Judgment |
|
|
40
40
|
|-----------|----------|
|
|
41
41
|
| Requirements clear and implementable | DONE |
|
|
42
|
+
| User is asking a question (not an implementation task) | ANSWER |
|
|
42
43
|
| Requirements unclear, insufficient info | BLOCKED |
|
|
43
44
|
|
|
44
45
|
## Output Format
|
|
@@ -46,6 +47,7 @@ steps:
|
|
|
46
47
|
| Situation | Tag |
|
|
47
48
|
|-----------|-----|
|
|
48
49
|
| Analysis complete | `[PLANNER:DONE]` |
|
|
50
|
+
| Question answered | `[PLANNER:ANSWER]` |
|
|
49
51
|
| Insufficient info | `[PLANNER:BLOCKED]` |
|
|
50
52
|
|
|
51
53
|
### Output Examples
|
|
@@ -55,6 +57,13 @@ steps:
|
|
|
55
57
|
[PLANNER:DONE]
|
|
56
58
|
```
|
|
57
59
|
|
|
60
|
+
**ANSWER case:**
|
|
61
|
+
```
|
|
62
|
+
{Answer to the question}
|
|
63
|
+
|
|
64
|
+
[PLANNER:ANSWER]
|
|
65
|
+
```
|
|
66
|
+
|
|
58
67
|
**BLOCKED case:**
|
|
59
68
|
```
|
|
60
69
|
[PLANNER:BLOCKED]
|
|
@@ -80,10 +89,15 @@ steps:
|
|
|
80
89
|
## Instructions
|
|
81
90
|
Analyze the task and create an implementation plan.
|
|
82
91
|
|
|
92
|
+
**Judgment criteria:**
|
|
93
|
+
- If the user input is an implementation task → create a plan and output `[PLANNER:DONE]`
|
|
94
|
+
- If the user input is a question → research, answer, and output `[PLANNER:ANSWER]`
|
|
95
|
+
- If there is insufficient information → output `[PLANNER:BLOCKED]`
|
|
96
|
+
|
|
83
97
|
**Note:** If returned from implement step (Previous Response exists),
|
|
84
98
|
review and revise the plan based on that feedback (replan).
|
|
85
99
|
|
|
86
|
-
**Tasks:**
|
|
100
|
+
**Tasks (for implementation tasks):**
|
|
87
101
|
1. Understand the requirements
|
|
88
102
|
2. Identify impact scope
|
|
89
103
|
3. Decide implementation approach
|
|
@@ -117,6 +131,8 @@ steps:
|
|
|
117
131
|
transitions:
|
|
118
132
|
- condition: done
|
|
119
133
|
next_step: implement
|
|
134
|
+
- condition: answer
|
|
135
|
+
next_step: COMPLETE
|
|
120
136
|
- condition: blocked
|
|
121
137
|
next_step: ABORT
|
|
122
138
|
|
|
@@ -131,6 +147,7 @@ steps:
|
|
|
131
147
|
- Bash
|
|
132
148
|
- WebSearch
|
|
133
149
|
- WebFetch
|
|
150
|
+
permission_mode: acceptEdits
|
|
134
151
|
status_rules_prompt: |
|
|
135
152
|
# ⚠️ REQUIRED: Status Output Rules ⚠️
|
|
136
153
|
|
|
@@ -360,6 +377,7 @@ steps:
|
|
|
360
377
|
- Bash
|
|
361
378
|
- WebSearch
|
|
362
379
|
- WebFetch
|
|
380
|
+
permission_mode: acceptEdits
|
|
363
381
|
status_rules_prompt: |
|
|
364
382
|
# ⚠️ REQUIRED: Status Output Rules ⚠️
|
|
365
383
|
|
|
@@ -545,6 +563,7 @@ steps:
|
|
|
545
563
|
- Bash
|
|
546
564
|
- WebSearch
|
|
547
565
|
- WebFetch
|
|
566
|
+
permission_mode: acceptEdits
|
|
548
567
|
status_rules_prompt: |
|
|
549
568
|
# ⚠️ REQUIRED: Status Output Rules ⚠️
|
|
550
569
|
|
|
@@ -727,6 +746,7 @@ steps:
|
|
|
727
746
|
- Bash
|
|
728
747
|
- WebSearch
|
|
729
748
|
- WebFetch
|
|
749
|
+
permission_mode: acceptEdits
|
|
730
750
|
status_rules_prompt: |
|
|
731
751
|
# ⚠️ REQUIRED: Status Output Rules ⚠️
|
|
732
752
|
|
|
@@ -796,6 +816,7 @@ steps:
|
|
|
796
816
|
- Bash
|
|
797
817
|
- WebSearch
|
|
798
818
|
- WebFetch
|
|
819
|
+
permission_mode: acceptEdits
|
|
799
820
|
status_rules_prompt: |
|
|
800
821
|
# ⚠️ REQUIRED: Status Output Rules ⚠️
|
|
801
822
|
|
|
@@ -40,6 +40,7 @@ steps:
|
|
|
40
40
|
| Situation | Judgment |
|
|
41
41
|
|-----------|----------|
|
|
42
42
|
| Requirements clear and implementable | DONE |
|
|
43
|
+
| User is asking a question (not an implementation task) | ANSWER |
|
|
43
44
|
| Requirements unclear, insufficient info | BLOCKED |
|
|
44
45
|
|
|
45
46
|
## Output Format
|
|
@@ -47,6 +48,7 @@ steps:
|
|
|
47
48
|
| Situation | Tag |
|
|
48
49
|
|-----------|-----|
|
|
49
50
|
| Analysis complete | `[PLANNER:DONE]` |
|
|
51
|
+
| Question answered | `[PLANNER:ANSWER]` |
|
|
50
52
|
| Insufficient info | `[PLANNER:BLOCKED]` |
|
|
51
53
|
|
|
52
54
|
### Output Examples
|
|
@@ -56,6 +58,13 @@ steps:
|
|
|
56
58
|
[PLANNER:DONE]
|
|
57
59
|
```
|
|
58
60
|
|
|
61
|
+
**ANSWER case:**
|
|
62
|
+
```
|
|
63
|
+
{Answer to the question}
|
|
64
|
+
|
|
65
|
+
[PLANNER:ANSWER]
|
|
66
|
+
```
|
|
67
|
+
|
|
59
68
|
**BLOCKED case:**
|
|
60
69
|
```
|
|
61
70
|
[PLANNER:BLOCKED]
|
|
@@ -81,10 +90,15 @@ steps:
|
|
|
81
90
|
## Instructions
|
|
82
91
|
Analyze the task and create an implementation plan.
|
|
83
92
|
|
|
93
|
+
**Judgment criteria:**
|
|
94
|
+
- If the user input is an implementation task → create a plan and output `[PLANNER:DONE]`
|
|
95
|
+
- If the user input is a question → research, answer, and output `[PLANNER:ANSWER]`
|
|
96
|
+
- If there is insufficient information → output `[PLANNER:BLOCKED]`
|
|
97
|
+
|
|
84
98
|
**Note:** If returned from implement step (Previous Response exists),
|
|
85
99
|
review and revise the plan based on that feedback (replan).
|
|
86
100
|
|
|
87
|
-
**Tasks:**
|
|
101
|
+
**Tasks (for implementation tasks):**
|
|
88
102
|
1. Understand the requirements
|
|
89
103
|
2. Identify impact scope
|
|
90
104
|
3. Decide implementation approach
|
|
@@ -118,6 +132,8 @@ steps:
|
|
|
118
132
|
transitions:
|
|
119
133
|
- condition: done
|
|
120
134
|
next_step: implement
|
|
135
|
+
- condition: answer
|
|
136
|
+
next_step: COMPLETE
|
|
121
137
|
- condition: blocked
|
|
122
138
|
next_step: ABORT
|
|
123
139
|
|
|
@@ -132,6 +148,7 @@ steps:
|
|
|
132
148
|
- Bash
|
|
133
149
|
- WebSearch
|
|
134
150
|
- WebFetch
|
|
151
|
+
permission_mode: acceptEdits
|
|
135
152
|
status_rules_prompt: |
|
|
136
153
|
# ⚠️ REQUIRED: Status Output Rules ⚠️
|
|
137
154
|
|
|
@@ -51,11 +51,15 @@ AI生成コードには特有の特徴があります:
|
|
|
51
51
|
| 古いパターン | 学習データからの非推奨アプローチの使用 |
|
|
52
52
|
| 過剰エンジニアリング | タスクに不要な抽象化レイヤーの追加 |
|
|
53
53
|
| 過小エンジニアリング | 現実的なシナリオのエラーハンドリングの欠如 |
|
|
54
|
+
| 配線忘れ | 機構は実装されているが、エントリポイントから渡されていない |
|
|
54
55
|
|
|
55
56
|
**検証アプローチ:**
|
|
56
57
|
1. このコードは実際にコンパイル/実行できるか?
|
|
57
58
|
2. インポートされたモジュール/関数は存在するか?
|
|
58
59
|
3. このライブラリバージョンでAPIは正しく使用されているか?
|
|
60
|
+
4. 新しいパラメータ/フィールドが追加された場合、呼び出し元から実際に渡されているか?
|
|
61
|
+
- AIは個々のファイル内では正しく実装するが、ファイル横断の結合を忘れがち
|
|
62
|
+
- `options.xxx ?? fallback` で常にフォールバックが使われていないか grep で確認
|
|
59
63
|
|
|
60
64
|
### 3. コピペパターン検出
|
|
61
65
|
|
|
@@ -96,7 +100,26 @@ AI生成コードには特有の特徴があります:
|
|
|
96
100
|
|
|
97
101
|
**原則:** 最良のコードは、問題を解決する最小限のコード。
|
|
98
102
|
|
|
99
|
-
### 6.
|
|
103
|
+
### 6. デッドコード検出
|
|
104
|
+
|
|
105
|
+
**AIは新しいコードを追加するが、不要になったコードの削除を忘れることが多い。**
|
|
106
|
+
|
|
107
|
+
| パターン | 例 |
|
|
108
|
+
|---------|-----|
|
|
109
|
+
| 未使用の関数・メソッド | リファクタリング後に残った旧実装 |
|
|
110
|
+
| 未使用の変数・定数 | 条件変更で不要になった定義 |
|
|
111
|
+
| 到達不能コード | 早期returnの後に残った処理、常に真/偽になる条件分岐 |
|
|
112
|
+
| 未使用のインポート・依存 | 削除された機能のimport文やパッケージ依存 |
|
|
113
|
+
| 孤立したエクスポート・公開API | 実体が消えたのにre-exportやindex登録が残っている |
|
|
114
|
+
| 未使用のインターフェース・型定義 | 実装側が変更されたのに残った古い型 |
|
|
115
|
+
| 無効化されたコード | コメントアウトされたまま放置されたコード |
|
|
116
|
+
|
|
117
|
+
**検証アプローチ:**
|
|
118
|
+
1. 変更・削除されたコードを参照している箇所がないか grep で確認
|
|
119
|
+
2. 公開モジュール(index ファイル等)のエクスポート一覧と実体が一致しているか確認
|
|
120
|
+
3. 新規追加されたコードに対応する古いコードが残っていないか確認
|
|
121
|
+
|
|
122
|
+
### 7. 決定トレーサビリティレビュー
|
|
100
123
|
|
|
101
124
|
**Coderの決定ログが妥当か検証する。**
|
|
102
125
|
|
|
@@ -264,7 +264,160 @@ function createUser(data: UserData) {
|
|
|
264
264
|
|
|
265
265
|
**これらを見つけたら必ず指摘する。** 一時的な対応でも本番に残る。
|
|
266
266
|
|
|
267
|
-
###
|
|
267
|
+
### 7.5. TODOコメントの厳格な禁止
|
|
268
|
+
|
|
269
|
+
**「将来やる」は決してやらない。今やらないことは永遠にやらない。**
|
|
270
|
+
|
|
271
|
+
**原則: TODOコメントは即REJECT**
|
|
272
|
+
|
|
273
|
+
```kotlin
|
|
274
|
+
// ❌ REJECT - 将来を見越したTODO
|
|
275
|
+
// TODO: 施設IDによる認可チェックを追加
|
|
276
|
+
fun deleteCustomHoliday(@PathVariable id: String) {
|
|
277
|
+
deleteCustomHolidayInputPort.execute(input)
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// ✅ APPROVE - 今実装する
|
|
281
|
+
fun deleteCustomHoliday(@PathVariable id: String) {
|
|
282
|
+
val currentUserFacilityId = getCurrentUserFacilityId()
|
|
283
|
+
val holiday = findHolidayById(id)
|
|
284
|
+
require(holiday.facilityId == currentUserFacilityId) {
|
|
285
|
+
"Cannot delete holiday from another facility"
|
|
286
|
+
}
|
|
287
|
+
deleteCustomHolidayInputPort.execute(input)
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**TODOが許容される唯一のケース:**
|
|
292
|
+
|
|
293
|
+
| 条件 | 例 | 判定 |
|
|
294
|
+
|------|-----|------|
|
|
295
|
+
| 外部依存で今は実装不可 + Issue化済み | `// TODO(#123): APIキー取得後に実装` | 許容 |
|
|
296
|
+
| 技術的制約で回避不可 + Issue化済み | `// TODO(#456): ライブラリバグ修正待ち` | 許容 |
|
|
297
|
+
| 「将来実装」「後で追加」 | `// TODO: バリデーション追加` | **REJECT** |
|
|
298
|
+
| 「時間がないので」 | `// TODO: リファクタリング` | **REJECT** |
|
|
299
|
+
|
|
300
|
+
**判断基準:**
|
|
301
|
+
1. **今実装できるか?** → できるなら今やる。TODOは禁止
|
|
302
|
+
2. **外部要因で不可能か?** → Issue化して番号をコメントに記載。それ以外は禁止
|
|
303
|
+
3. **「後でやる」か?** → それは「やらない」と同義。今やるかコードから削除
|
|
304
|
+
|
|
305
|
+
**なぜTODOは悪か:**
|
|
306
|
+
- 時間が経つと文脈が失われる
|
|
307
|
+
- 誰も気づかなくなる
|
|
308
|
+
- セキュリティホールや技術的負債として残る
|
|
309
|
+
- Issue管理と二重管理になる
|
|
310
|
+
|
|
311
|
+
**正しい対処:**
|
|
312
|
+
- 今必要 → 今実装する
|
|
313
|
+
- 今不要 → コードを削除する
|
|
314
|
+
- 外部要因で不可 → Issue化してチケット番号をコメントに入れる
|
|
315
|
+
|
|
316
|
+
### 7.6. DRY原則の即時適用
|
|
317
|
+
|
|
318
|
+
**「後でまとめる」は決して実現しない。重複は見つけた瞬間に抽出する。**
|
|
319
|
+
|
|
320
|
+
**原則: 3回以上の重複を見つけたら即REJECT**
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
// ❌ REJECT - 3箇所で同じバリデーション
|
|
324
|
+
function createOrder(data: OrderData) {
|
|
325
|
+
if (!data.customerId) throw new Error('Customer ID required')
|
|
326
|
+
if (!data.items || data.items.length === 0) throw new Error('Items required')
|
|
327
|
+
// ...
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function updateOrder(id: string, data: OrderData) {
|
|
331
|
+
if (!data.customerId) throw new Error('Customer ID required')
|
|
332
|
+
if (!data.items || data.items.length === 0) throw new Error('Items required')
|
|
333
|
+
// ...
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function validateOrder(data: OrderData) {
|
|
337
|
+
if (!data.customerId) throw new Error('Customer ID required')
|
|
338
|
+
if (!data.items || data.items.length === 0) throw new Error('Items required')
|
|
339
|
+
// ...
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// ✅ APPROVE - 共通化
|
|
343
|
+
function validateOrderData(data: OrderData) {
|
|
344
|
+
if (!data.customerId) throw new Error('Customer ID required')
|
|
345
|
+
if (!data.items || data.items.length === 0) throw new Error('Items required')
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
function createOrder(data: OrderData) {
|
|
349
|
+
validateOrderData(data)
|
|
350
|
+
// ...
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
**DRY違反の検出:**
|
|
355
|
+
|
|
356
|
+
| パターン | 判定 |
|
|
357
|
+
|---------|------|
|
|
358
|
+
| 同じロジックが3箇所以上 | **即REJECT** - 関数/メソッドに抽出 |
|
|
359
|
+
| 同じバリデーションが2箇所以上 | **即REJECT** - バリデーター関数に抽出 |
|
|
360
|
+
| 似たようなコンポーネントが3個以上 | **即REJECT** - 共通コンポーネント化 |
|
|
361
|
+
| コピペで派生したコード | **即REJECT** - パラメータ化または抽象化 |
|
|
362
|
+
|
|
363
|
+
**「後でまとめる」が実現しない理由:**
|
|
364
|
+
1. **気づけない** - 新しいコードを書く人は既存の重複に気づかない
|
|
365
|
+
2. **忘れる** - 「次のタスクでまとめよう」は忘れられる
|
|
366
|
+
3. **コストが増す** - 後から抽出するより今抽出する方が簡単
|
|
367
|
+
4. **バグが増殖** - 重複コードはバグ修正時に修正漏れを生む
|
|
368
|
+
|
|
369
|
+
**正しい対処:**
|
|
370
|
+
- 2回目の重複を書く時点で「3回目が来る」と予測し、抽出を検討
|
|
371
|
+
- 3回目の重複を見つけたら即座に抽出
|
|
372
|
+
- 「似ているが微妙に違う」場合はパラメータ化を検討
|
|
373
|
+
|
|
374
|
+
**例外: 抽象化が早すぎる場合**
|
|
375
|
+
|
|
376
|
+
| 状況 | 対応 |
|
|
377
|
+
|------|------|
|
|
378
|
+
| 2回しか使われていない | 様子見(3回目で抽出) |
|
|
379
|
+
| 偶然似ているだけ | 抽象化しない |
|
|
380
|
+
| ドメインが異なる | 別々に保つ(AHA原則) |
|
|
381
|
+
|
|
382
|
+
**AHA原則(Avoid Hasty Abstractions)とのバランス:**
|
|
383
|
+
- 2回の重複 → 様子見
|
|
384
|
+
- 3回の重複 → 即抽出
|
|
385
|
+
- ドメインが異なる重複 → 抽象化しない(例: 顧客用バリデーションと管理者用バリデーションは別物)
|
|
386
|
+
|
|
387
|
+
### 8. 呼び出しチェーン検証
|
|
388
|
+
|
|
389
|
+
**新しいパラメータ・フィールドが追加された場合、変更ファイル内だけでなく呼び出し元も検証する。**
|
|
390
|
+
|
|
391
|
+
**検証手順:**
|
|
392
|
+
1. 新しいオプショナルパラメータや interface フィールドを見つけたら、`Grep` で全呼び出し元を検索
|
|
393
|
+
2. 全呼び出し元が新しいパラメータを渡しているか確認
|
|
394
|
+
3. フォールバック値(`?? default`)がある場合、フォールバックが使われるケースが意図通りか確認
|
|
395
|
+
|
|
396
|
+
**危険パターン:**
|
|
397
|
+
|
|
398
|
+
| パターン | 問題 | 検出方法 |
|
|
399
|
+
|---------|------|---------|
|
|
400
|
+
| `options.xxx ?? fallback` で全呼び出し元が `xxx` を省略 | 機能が実装されているのに常にフォールバック | grep で呼び出し元を確認 |
|
|
401
|
+
| テストがモックで直接値をセット | 実際の呼び出しチェーンを経由しない | テストの構築方法を確認 |
|
|
402
|
+
| `executeXxx()` が内部で使う `options` を引数で受け取らない | 上位から値を渡す口がない | 関数シグネチャを確認 |
|
|
403
|
+
|
|
404
|
+
**具体例:**
|
|
405
|
+
|
|
406
|
+
```typescript
|
|
407
|
+
// ❌ 配線漏れ: projectCwd を受け取る口がない
|
|
408
|
+
export async function executeWorkflow(config, cwd, task) {
|
|
409
|
+
const engine = new WorkflowEngine(config, cwd, task); // options なし
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// ✅ 配線済み: projectCwd を渡せる
|
|
413
|
+
export async function executeWorkflow(config, cwd, task, options?) {
|
|
414
|
+
const engine = new WorkflowEngine(config, cwd, task, options);
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
**このパターンを見つけたら REJECT。** 個々のファイルが正しくても、結合されていなければ機能しない。
|
|
419
|
+
|
|
420
|
+
### 9. 品質特性
|
|
268
421
|
|
|
269
422
|
| 特性 | 確認観点 |
|
|
270
423
|
|------|---------|
|
|
@@ -272,7 +425,7 @@ function createUser(data: UserData) {
|
|
|
272
425
|
| Maintainability | 変更・修正が容易か |
|
|
273
426
|
| Observability | ログ・監視が可能な設計か |
|
|
274
427
|
|
|
275
|
-
###
|
|
428
|
+
### 10. 大局観
|
|
276
429
|
|
|
277
430
|
**注意**: 細かい「クリーンコード」の指摘に終始しない。
|
|
278
431
|
|
|
@@ -283,7 +436,7 @@ function createUser(data: UserData) {
|
|
|
283
436
|
- ビジネス要件と整合しているか
|
|
284
437
|
- 命名がドメインと一貫しているか
|
|
285
438
|
|
|
286
|
-
###
|
|
439
|
+
### 11. 変更スコープの評価
|
|
287
440
|
|
|
288
441
|
**変更スコープを確認し、レポートに記載する(ブロッキングではない)。**
|
|
289
442
|
|
|
@@ -302,7 +455,7 @@ function createUser(data: UserData) {
|
|
|
302
455
|
**提案として記載すること(ブロッキングではない):**
|
|
303
456
|
- 分割可能な場合は分割案を提示
|
|
304
457
|
|
|
305
|
-
###
|
|
458
|
+
### 12. 堂々巡りの検出
|
|
306
459
|
|
|
307
460
|
レビュー回数が渡される場合(例: 「レビュー回数: 3回目」)、回数に応じて判断を変える。
|
|
308
461
|
|