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.
Files changed (156) hide show
  1. package/README.md +179 -43
  2. package/dist/agents/runner.d.ts +3 -1
  3. package/dist/agents/runner.d.ts.map +1 -1
  4. package/dist/agents/runner.js +15 -0
  5. package/dist/agents/runner.js.map +1 -1
  6. package/dist/claude/client.d.ts +3 -1
  7. package/dist/claude/client.d.ts.map +1 -1
  8. package/dist/claude/client.js +17 -0
  9. package/dist/claude/client.js.map +1 -1
  10. package/dist/cli.d.ts +9 -1
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +73 -18
  13. package/dist/cli.js.map +1 -1
  14. package/dist/commands/addTask.d.ts +15 -0
  15. package/dist/commands/addTask.d.ts.map +1 -0
  16. package/dist/commands/addTask.js +119 -0
  17. package/dist/commands/addTask.js.map +1 -0
  18. package/dist/commands/help.d.ts.map +1 -1
  19. package/dist/commands/help.js +18 -5
  20. package/dist/commands/help.js.map +1 -1
  21. package/dist/commands/index.d.ts +4 -0
  22. package/dist/commands/index.d.ts.map +1 -1
  23. package/dist/commands/index.js +4 -0
  24. package/dist/commands/index.js.map +1 -1
  25. package/dist/commands/refreshBuiltin.d.ts +11 -0
  26. package/dist/commands/refreshBuiltin.d.ts.map +1 -0
  27. package/dist/commands/refreshBuiltin.js +37 -0
  28. package/dist/commands/refreshBuiltin.js.map +1 -0
  29. package/dist/commands/reviewTasks.d.ts +32 -0
  30. package/dist/commands/reviewTasks.d.ts.map +1 -0
  31. package/dist/commands/reviewTasks.js +198 -0
  32. package/dist/commands/reviewTasks.js.map +1 -0
  33. package/dist/commands/taskExecution.d.ts +24 -1
  34. package/dist/commands/taskExecution.d.ts.map +1 -1
  35. package/dist/commands/taskExecution.js +100 -36
  36. package/dist/commands/taskExecution.js.map +1 -1
  37. package/dist/commands/watchTasks.d.ts +12 -0
  38. package/dist/commands/watchTasks.d.ts.map +1 -0
  39. package/dist/commands/watchTasks.js +68 -0
  40. package/dist/commands/watchTasks.js.map +1 -0
  41. package/dist/commands/workflowExecution.d.ts +5 -1
  42. package/dist/commands/workflowExecution.d.ts.map +1 -1
  43. package/dist/commands/workflowExecution.js +35 -12
  44. package/dist/commands/workflowExecution.js.map +1 -1
  45. package/dist/config/initialization.d.ts +2 -0
  46. package/dist/config/initialization.d.ts.map +1 -1
  47. package/dist/config/initialization.js +12 -2
  48. package/dist/config/initialization.js.map +1 -1
  49. package/dist/config/paths.d.ts +1 -1
  50. package/dist/config/paths.d.ts.map +1 -1
  51. package/dist/config/paths.js +1 -1
  52. package/dist/config/paths.js.map +1 -1
  53. package/dist/config/sessionStore.d.ts +5 -0
  54. package/dist/config/sessionStore.d.ts.map +1 -1
  55. package/dist/config/sessionStore.js +1 -1
  56. package/dist/config/sessionStore.js.map +1 -1
  57. package/dist/config/workflowLoader.d.ts.map +1 -1
  58. package/dist/config/workflowLoader.js +1 -0
  59. package/dist/config/workflowLoader.js.map +1 -1
  60. package/dist/models/schemas.d.ts +22 -0
  61. package/dist/models/schemas.d.ts.map +1 -1
  62. package/dist/models/schemas.js +8 -0
  63. package/dist/models/schemas.js.map +1 -1
  64. package/dist/models/types.d.ts +8 -2
  65. package/dist/models/types.d.ts.map +1 -1
  66. package/dist/prompt/index.d.ts +60 -11
  67. package/dist/prompt/index.d.ts.map +1 -1
  68. package/dist/prompt/index.js +246 -72
  69. package/dist/prompt/index.js.map +1 -1
  70. package/dist/providers/claude.d.ts.map +1 -1
  71. package/dist/providers/claude.js +2 -0
  72. package/dist/providers/claude.js.map +1 -1
  73. package/dist/providers/index.d.ts +3 -1
  74. package/dist/providers/index.d.ts.map +1 -1
  75. package/dist/providers/index.js.map +1 -1
  76. package/dist/resources/index.d.ts +5 -0
  77. package/dist/resources/index.d.ts.map +1 -1
  78. package/dist/resources/index.js +33 -9
  79. package/dist/resources/index.js.map +1 -1
  80. package/dist/task/autoCommit.d.ts +28 -0
  81. package/dist/task/autoCommit.d.ts.map +1 -0
  82. package/dist/task/autoCommit.js +68 -0
  83. package/dist/task/autoCommit.js.map +1 -0
  84. package/dist/task/display.d.ts.map +1 -1
  85. package/dist/task/display.js +19 -1
  86. package/dist/task/display.js.map +1 -1
  87. package/dist/task/index.d.ts +5 -0
  88. package/dist/task/index.d.ts.map +1 -1
  89. package/dist/task/index.js +5 -0
  90. package/dist/task/index.js.map +1 -1
  91. package/dist/task/parser.d.ts +33 -0
  92. package/dist/task/parser.d.ts.map +1 -0
  93. package/dist/task/parser.js +86 -0
  94. package/dist/task/parser.js.map +1 -0
  95. package/dist/task/runner.d.ts +6 -0
  96. package/dist/task/runner.d.ts.map +1 -1
  97. package/dist/task/runner.js +33 -42
  98. package/dist/task/runner.js.map +1 -1
  99. package/dist/task/schema.d.ts +32 -0
  100. package/dist/task/schema.d.ts.map +1 -0
  101. package/dist/task/schema.js +31 -0
  102. package/dist/task/schema.js.map +1 -0
  103. package/dist/task/watcher.d.ts +33 -0
  104. package/dist/task/watcher.d.ts.map +1 -0
  105. package/dist/task/watcher.js +69 -0
  106. package/dist/task/watcher.js.map +1 -0
  107. package/dist/task/worktree.d.ts +70 -0
  108. package/dist/task/worktree.d.ts.map +1 -0
  109. package/dist/task/worktree.js +221 -0
  110. package/dist/task/worktree.js.map +1 -0
  111. package/dist/utils/debug.d.ts +6 -1
  112. package/dist/utils/debug.d.ts.map +1 -1
  113. package/dist/utils/debug.js +30 -24
  114. package/dist/utils/debug.js.map +1 -1
  115. package/dist/utils/index.d.ts +1 -0
  116. package/dist/utils/index.d.ts.map +1 -1
  117. package/dist/utils/index.js +1 -0
  118. package/dist/utils/index.js.map +1 -1
  119. package/dist/utils/session.d.ts +20 -0
  120. package/dist/utils/session.d.ts.map +1 -1
  121. package/dist/utils/session.js +32 -3
  122. package/dist/utils/session.js.map +1 -1
  123. package/dist/utils/slug.d.ts +12 -0
  124. package/dist/utils/slug.d.ts.map +1 -0
  125. package/dist/utils/slug.js +18 -0
  126. package/dist/utils/slug.js.map +1 -0
  127. package/dist/utils/text.d.ts +22 -0
  128. package/dist/utils/text.d.ts.map +1 -0
  129. package/dist/utils/text.js +54 -0
  130. package/dist/utils/text.js.map +1 -0
  131. package/dist/workflow/engine.d.ts +5 -6
  132. package/dist/workflow/engine.d.ts.map +1 -1
  133. package/dist/workflow/engine.js +32 -12
  134. package/dist/workflow/engine.js.map +1 -1
  135. package/dist/workflow/index.d.ts +2 -2
  136. package/dist/workflow/index.d.ts.map +1 -1
  137. package/dist/workflow/index.js +2 -2
  138. package/dist/workflow/index.js.map +1 -1
  139. package/dist/workflow/instruction-builder.d.ts +31 -2
  140. package/dist/workflow/instruction-builder.d.ts.map +1 -1
  141. package/dist/workflow/instruction-builder.js +69 -1
  142. package/dist/workflow/instruction-builder.js.map +1 -1
  143. package/dist/workflow/transitions.d.ts.map +1 -1
  144. package/dist/workflow/transitions.js +1 -0
  145. package/dist/workflow/transitions.js.map +1 -1
  146. package/dist/workflow/types.d.ts +5 -1
  147. package/dist/workflow/types.d.ts.map +1 -1
  148. package/package.json +3 -2
  149. package/resources/global/en/workflows/default.yaml +22 -1
  150. package/resources/global/en/workflows/simple.yaml +18 -1
  151. package/resources/global/ja/agents/default/ai-reviewer.md +24 -1
  152. package/resources/global/ja/agents/default/architect.md +157 -4
  153. package/resources/global/ja/agents/default/coder.md +1 -0
  154. package/resources/global/ja/workflows/default.yaml +38 -1
  155. package/resources/global/ja/workflows/expert-review.yaml +169 -10
  156. 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;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAwBjD;;GAEG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAkB,EAClB,OAA2B;IAE3B,IAAI,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC;IAE3C,iBAAiB;IACjB,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAElF,8DAA8D;IAC9D,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/E,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IACxF,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IAExF,8BAA8B;IAC9B,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,WAAW,GAAG,WAAW,CAAC,OAAO,CAC/B,wBAAwB,EACxB,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CACpD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAE5D,wBAAwB;IACxB,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,WAAW,GAAG,WAAW,CAAC,OAAO,CAC/B,kBAAkB,EAClB,mBAAmB,CAAC,aAAa,CAAC,CACnC,CAAC;IAEF,uBAAuB;IACvB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1E,CAAC;IAED,wCAAwC;IACxC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,WAAW,GAAG,GAAG,WAAW,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC9D,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
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,CAoBT;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
+ {"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"}
@@ -19,6 +19,7 @@ export function matchesCondition(status, condition) {
19
19
  approved: ['approved'],
20
20
  rejected: ['rejected'],
21
21
  improve: ['improve'],
22
+ answer: ['answer'],
22
23
  pending: [],
23
24
  in_progress: [],
24
25
  cancelled: [],
@@ -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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"}
@@ -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;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEtF,wCAAwC;AACxC,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IACvE,cAAc,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IACtE,iBAAiB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,mBAAmB,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACpD,gBAAgB,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,oBAAoB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9E;AAED,2CAA2C;AAC3C,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,aAAa,CAAC;IACxB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,8BAA8B;AAC9B,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,mEAAmE;AACnE,MAAM,MAAM,qBAAqB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAEhG,kCAAkC;AAClC,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,kEAAkE;IAClE,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpE,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gDAAgD;IAChD,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,iBAAiB,CAAC;IACxC,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,4BAA4B;AAC5B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
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.7",
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
- ### 8. 品質特性
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
- ### 9. 大局観
428
+ ### 10. 大局観
276
429
 
277
430
  **注意**: 細かい「クリーンコード」の指摘に終始しない。
278
431
 
@@ -283,7 +436,7 @@ function createUser(data: UserData) {
283
436
  - ビジネス要件と整合しているか
284
437
  - 命名がドメインと一貫しているか
285
438
 
286
- ### 10. 変更スコープの評価
439
+ ### 11. 変更スコープの評価
287
440
 
288
441
  **変更スコープを確認し、レポートに記載する(ブロッキングではない)。**
289
442
 
@@ -302,7 +455,7 @@ function createUser(data: UserData) {
302
455
  **提案として記載すること(ブロッキングではない):**
303
456
  - 分割可能な場合は分割案を提示
304
457
 
305
- ### 11. 堂々巡りの検出
458
+ ### 12. 堂々巡りの検出
306
459
 
307
460
  レビュー回数が渡される場合(例: 「レビュー回数: 3回目」)、回数に応じて判断を変える。
308
461
 
@@ -90,6 +90,7 @@
90
90
  | 構文エラー | ビルド・コンパイル |
91
91
  | テスト | テスト実行 |
92
92
  | 要求充足 | 元のタスク要求と照合 |
93
+ | デッドコード | 変更・削除した機能を参照する未使用コードが残っていないか確認(未使用の関数、変数、インポート、エクスポート、型定義、到達不能コード) |
93
94
 
94
95
  **すべて確認してから `[DONE]` を出力。**
95
96