takt 0.2.1 → 0.2.3

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 (121) hide show
  1. package/README.md +67 -38
  2. package/dist/cli.d.ts +4 -2
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +27 -17
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/addTask.d.ts.map +1 -1
  7. package/dist/commands/addTask.js +6 -5
  8. package/dist/commands/addTask.js.map +1 -1
  9. package/dist/commands/help.js +3 -3
  10. package/dist/commands/index.d.ts +1 -1
  11. package/dist/commands/index.d.ts.map +1 -1
  12. package/dist/commands/index.js +1 -1
  13. package/dist/commands/index.js.map +1 -1
  14. package/dist/commands/listTasks.d.ts +45 -0
  15. package/dist/commands/listTasks.d.ts.map +1 -0
  16. package/dist/commands/listTasks.js +353 -0
  17. package/dist/commands/listTasks.js.map +1 -0
  18. package/dist/commands/taskExecution.d.ts +7 -5
  19. package/dist/commands/taskExecution.d.ts.map +1 -1
  20. package/dist/commands/taskExecution.js +26 -17
  21. package/dist/commands/taskExecution.js.map +1 -1
  22. package/dist/commands/workflowExecution.d.ts.map +1 -1
  23. package/dist/commands/workflowExecution.js +11 -10
  24. package/dist/commands/workflowExecution.js.map +1 -1
  25. package/dist/config/globalConfig.d.ts.map +1 -1
  26. package/dist/config/globalConfig.js +4 -0
  27. package/dist/config/globalConfig.js.map +1 -1
  28. package/dist/config/paths.d.ts +1 -1
  29. package/dist/config/paths.d.ts.map +1 -1
  30. package/dist/config/paths.js +3 -1
  31. package/dist/config/paths.js.map +1 -1
  32. package/dist/config/sessionStore.d.ts +10 -0
  33. package/dist/config/sessionStore.d.ts.map +1 -1
  34. package/dist/config/sessionStore.js +54 -0
  35. package/dist/config/sessionStore.js.map +1 -1
  36. package/dist/models/schemas.d.ts +1 -0
  37. package/dist/models/schemas.d.ts.map +1 -1
  38. package/dist/models/schemas.js +2 -0
  39. package/dist/models/schemas.js.map +1 -1
  40. package/dist/models/types.d.ts +2 -0
  41. package/dist/models/types.d.ts.map +1 -1
  42. package/dist/resources/index.d.ts.map +1 -1
  43. package/dist/resources/index.js +6 -3
  44. package/dist/resources/index.js.map +1 -1
  45. package/dist/task/autoCommit.d.ts +9 -6
  46. package/dist/task/autoCommit.d.ts.map +1 -1
  47. package/dist/task/autoCommit.js +21 -12
  48. package/dist/task/autoCommit.js.map +1 -1
  49. package/dist/task/branchList.d.ts +55 -0
  50. package/dist/task/branchList.d.ts.map +1 -0
  51. package/dist/task/branchList.js +131 -0
  52. package/dist/task/branchList.js.map +1 -0
  53. package/dist/task/clone.d.ts +53 -0
  54. package/dist/task/clone.d.ts.map +1 -0
  55. package/dist/task/clone.js +181 -0
  56. package/dist/task/clone.js.map +1 -0
  57. package/dist/task/index.d.ts +3 -2
  58. package/dist/task/index.d.ts.map +1 -1
  59. package/dist/task/index.js +3 -2
  60. package/dist/task/index.js.map +1 -1
  61. package/dist/task/runner.d.ts +14 -0
  62. package/dist/task/runner.d.ts.map +1 -1
  63. package/dist/task/runner.js +30 -7
  64. package/dist/task/runner.js.map +1 -1
  65. package/dist/task/schema.d.ts +4 -4
  66. package/dist/task/schema.js +4 -4
  67. package/dist/task/summarize.d.ts +22 -0
  68. package/dist/task/summarize.d.ts.map +1 -0
  69. package/dist/task/summarize.js +83 -0
  70. package/dist/task/summarize.js.map +1 -0
  71. package/dist/utils/updateNotifier.d.ts +6 -0
  72. package/dist/utils/updateNotifier.d.ts.map +1 -0
  73. package/dist/utils/updateNotifier.js +17 -0
  74. package/dist/utils/updateNotifier.js.map +1 -0
  75. package/dist/workflow/engine.d.ts +1 -1
  76. package/dist/workflow/engine.d.ts.map +1 -1
  77. package/dist/workflow/engine.js +10 -2
  78. package/dist/workflow/engine.js.map +1 -1
  79. package/dist/workflow/instruction-builder.d.ts +8 -7
  80. package/dist/workflow/instruction-builder.d.ts.map +1 -1
  81. package/dist/workflow/instruction-builder.js +39 -24
  82. package/dist/workflow/instruction-builder.js.map +1 -1
  83. package/package.json +4 -1
  84. package/resources/global/en/agents/default/{ai-reviewer.md → ai-antipattern-reviewer.md} +22 -1
  85. package/resources/global/en/agents/default/coder.md +3 -3
  86. package/resources/global/en/agents/default/planner.md +14 -1
  87. package/resources/global/en/workflows/default.yaml +6 -51
  88. package/resources/global/en/workflows/{expert-review.yaml → expert-cqrs.yaml} +14 -49
  89. package/resources/global/en/workflows/expert.yaml +1106 -0
  90. package/resources/global/en/workflows/magi.yaml +0 -9
  91. package/resources/global/en/workflows/research.yaml +0 -9
  92. package/resources/global/en/workflows/simple.yaml +5 -26
  93. package/resources/global/ja/agents/default/{ai-reviewer.md → ai-antipattern-reviewer.md} +22 -1
  94. package/resources/global/ja/agents/default/coder.md +3 -3
  95. package/resources/global/ja/agents/default/planner.md +14 -1
  96. package/resources/global/ja/workflows/default.yaml +6 -51
  97. package/resources/global/ja/workflows/{expert-review.yaml → expert-cqrs.yaml} +15 -55
  98. package/resources/global/ja/workflows/expert.yaml +1106 -0
  99. package/resources/global/ja/workflows/magi.yaml +0 -9
  100. package/resources/global/ja/workflows/research.yaml +0 -9
  101. package/resources/global/ja/workflows/simple.yaml +5 -26
  102. package/resources/project/dotgitignore +10 -0
  103. package/resources/project/tasks/TASK-FORMAT +37 -0
  104. package/dist/commands/reviewTasks.d.ts +0 -32
  105. package/dist/commands/reviewTasks.d.ts.map +0 -1
  106. package/dist/commands/reviewTasks.js +0 -198
  107. package/dist/commands/reviewTasks.js.map +0 -1
  108. package/dist/task/worktree.d.ts +0 -70
  109. package/dist/task/worktree.d.ts.map +0 -1
  110. package/dist/task/worktree.js +0 -221
  111. package/dist/task/worktree.js.map +0 -1
  112. /package/resources/global/en/agents/{expert-review → expert}/frontend-reviewer.md +0 -0
  113. /package/resources/global/en/agents/{expert-review → expert}/qa-reviewer.md +0 -0
  114. /package/resources/global/en/agents/{expert-review → expert}/security-reviewer.md +0 -0
  115. /package/resources/global/en/agents/{expert-review → expert}/supervisor.md +0 -0
  116. /package/resources/global/en/agents/{expert-review → expert-cqrs}/cqrs-es-reviewer.md +0 -0
  117. /package/resources/global/ja/agents/{expert-review → expert}/frontend-reviewer.md +0 -0
  118. /package/resources/global/ja/agents/{expert-review → expert}/qa-reviewer.md +0 -0
  119. /package/resources/global/ja/agents/{expert-review → expert}/security-reviewer.md +0 -0
  120. /package/resources/global/ja/agents/{expert-review → expert}/supervisor.md +0 -0
  121. /package/resources/global/ja/agents/{expert-review → expert-cqrs}/cqrs-es-reviewer.md +0 -0
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Branch list helpers
3
+ *
4
+ * Functions for listing, parsing, and enriching takt-managed branches
5
+ * with metadata (diff stats, original instruction, task slug).
6
+ * Used by the /list command.
7
+ */
8
+ import { execFileSync } from 'node:child_process';
9
+ import { createLogger } from '../utils/debug.js';
10
+ const log = createLogger('branchList');
11
+ const TAKT_BRANCH_PREFIX = 'takt/';
12
+ /**
13
+ * Detect the default branch name (main or master).
14
+ * Checks local branch refs directly. Falls back to 'main'.
15
+ */
16
+ export function detectDefaultBranch(cwd) {
17
+ try {
18
+ const ref = execFileSync('git', ['symbolic-ref', 'refs/remotes/origin/HEAD'], { cwd, encoding: 'utf-8', stdio: 'pipe' }).trim();
19
+ const parts = ref.split('/');
20
+ return parts[parts.length - 1] || 'main';
21
+ }
22
+ catch {
23
+ try {
24
+ execFileSync('git', ['rev-parse', '--verify', 'main'], {
25
+ cwd, encoding: 'utf-8', stdio: 'pipe',
26
+ });
27
+ return 'main';
28
+ }
29
+ catch {
30
+ try {
31
+ execFileSync('git', ['rev-parse', '--verify', 'master'], {
32
+ cwd, encoding: 'utf-8', stdio: 'pipe',
33
+ });
34
+ return 'master';
35
+ }
36
+ catch {
37
+ return 'main';
38
+ }
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ * List all takt-managed branches.
44
+ */
45
+ export function listTaktBranches(projectDir) {
46
+ try {
47
+ const output = execFileSync('git', ['branch', '--list', 'takt/*', '--format=%(refname:short) %(objectname:short)'], { cwd: projectDir, encoding: 'utf-8', stdio: 'pipe' });
48
+ return parseTaktBranches(output);
49
+ }
50
+ catch (err) {
51
+ log.error('Failed to list takt branches', { error: String(err) });
52
+ return [];
53
+ }
54
+ }
55
+ /**
56
+ * Parse `git branch --list` formatted output into BranchInfo entries.
57
+ */
58
+ export function parseTaktBranches(output) {
59
+ const entries = [];
60
+ const lines = output.trim().split('\n');
61
+ for (const line of lines) {
62
+ const trimmed = line.trim();
63
+ if (!trimmed)
64
+ continue;
65
+ const spaceIdx = trimmed.lastIndexOf(' ');
66
+ if (spaceIdx === -1)
67
+ continue;
68
+ const branch = trimmed.slice(0, spaceIdx);
69
+ const commit = trimmed.slice(spaceIdx + 1);
70
+ if (branch.startsWith(TAKT_BRANCH_PREFIX)) {
71
+ entries.push({ branch, commit });
72
+ }
73
+ }
74
+ return entries;
75
+ }
76
+ /**
77
+ * Get the number of files changed between the default branch and a given branch.
78
+ */
79
+ export function getFilesChanged(cwd, defaultBranch, branch) {
80
+ try {
81
+ const output = execFileSync('git', ['diff', '--numstat', `${defaultBranch}...${branch}`], { cwd, encoding: 'utf-8', stdio: 'pipe' });
82
+ return output.trim().split('\n').filter(l => l.length > 0).length;
83
+ }
84
+ catch {
85
+ return 0;
86
+ }
87
+ }
88
+ /**
89
+ * Extract a human-readable task slug from a takt branch name.
90
+ * e.g. "takt/20260128T032800-fix-auth" -> "fix-auth"
91
+ */
92
+ export function extractTaskSlug(branch) {
93
+ const name = branch.replace(TAKT_BRANCH_PREFIX, '');
94
+ const withoutTimestamp = name.replace(/^\d{8,}T?\d{0,6}-?/, '');
95
+ return withoutTimestamp || name;
96
+ }
97
+ /**
98
+ * Extract the original task instruction from the first commit message on a branch.
99
+ *
100
+ * The first commit on a takt branch has the format: "takt: {original instruction}".
101
+ * Strips the "takt: " prefix and returns the instruction text.
102
+ * Returns empty string if extraction fails.
103
+ */
104
+ export function getOriginalInstruction(cwd, defaultBranch, branch) {
105
+ try {
106
+ const output = execFileSync('git', ['log', '--format=%s', '--reverse', `${defaultBranch}..${branch}`], { cwd, encoding: 'utf-8', stdio: 'pipe' }).trim();
107
+ if (!output)
108
+ return '';
109
+ const firstLine = output.split('\n')[0] || '';
110
+ const TAKT_COMMIT_PREFIX = 'takt:';
111
+ if (firstLine.startsWith(TAKT_COMMIT_PREFIX)) {
112
+ return firstLine.slice(TAKT_COMMIT_PREFIX.length).trim();
113
+ }
114
+ return firstLine;
115
+ }
116
+ catch {
117
+ return '';
118
+ }
119
+ }
120
+ /**
121
+ * Build list items from branch list, enriching with diff stats.
122
+ */
123
+ export function buildListItems(projectDir, branches, defaultBranch) {
124
+ return branches.map(br => ({
125
+ info: br,
126
+ filesChanged: getFilesChanged(projectDir, defaultBranch, br.branch),
127
+ taskSlug: extractTaskSlug(br.branch),
128
+ originalInstruction: getOriginalInstruction(projectDir, defaultBranch, br.branch),
129
+ }));
130
+ }
131
+ //# sourceMappingURL=branchList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branchList.js","sourceRoot":"","sources":["../../src/task/branchList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Git clone lifecycle management
3
+ *
4
+ * Creates, removes, and tracks git clones for task isolation.
5
+ * Uses `git clone --reference --dissociate` so each clone has a fully
6
+ * independent .git directory, then removes the origin remote to prevent
7
+ * Claude Code SDK from traversing back to the main repository.
8
+ */
9
+ export interface WorktreeOptions {
10
+ /** worktree setting: true = auto path, string = custom path */
11
+ worktree: boolean | string;
12
+ /** Branch name (optional, auto-generated if omitted) */
13
+ branch?: string;
14
+ /** Task slug for auto-generated paths/branches */
15
+ taskSlug: string;
16
+ }
17
+ export interface WorktreeResult {
18
+ /** Absolute path to the clone */
19
+ path: string;
20
+ /** Branch name used */
21
+ branch: string;
22
+ }
23
+ /**
24
+ * Create a git clone for a task.
25
+ *
26
+ * Uses `git clone --reference --dissociate` to create an independent clone,
27
+ * then removes origin and checks out a new branch.
28
+ */
29
+ export declare function createSharedClone(projectDir: string, options: WorktreeOptions): WorktreeResult;
30
+ /**
31
+ * Create a temporary clone for an existing branch.
32
+ * Used by review/instruct to work on a branch that was previously pushed.
33
+ */
34
+ export declare function createTempCloneForBranch(projectDir: string, branch: string): WorktreeResult;
35
+ /**
36
+ * Remove a clone directory.
37
+ */
38
+ export declare function removeClone(clonePath: string): void;
39
+ /**
40
+ * Save clone metadata (branch → clonePath mapping).
41
+ * Used to clean up orphaned clone directories on merge/delete.
42
+ */
43
+ export declare function saveCloneMeta(projectDir: string, branch: string, clonePath: string): void;
44
+ /**
45
+ * Remove clone metadata for a branch.
46
+ */
47
+ export declare function removeCloneMeta(projectDir: string, branch: string): void;
48
+ /**
49
+ * Clean up an orphaned clone directory associated with a branch.
50
+ * Reads metadata, removes clone directory if it still exists, then removes metadata.
51
+ */
52
+ export declare function cleanupOrphanedClone(projectDir: string, branch: string): void;
53
+ //# sourceMappingURL=clone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../src/task/clone.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAgFD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,cAAc,CAkB9F;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAc3F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQnD;AAcD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAKzF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAOxE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAY7E"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Git clone lifecycle management
3
+ *
4
+ * Creates, removes, and tracks git clones for task isolation.
5
+ * Uses `git clone --reference --dissociate` so each clone has a fully
6
+ * independent .git directory, then removes the origin remote to prevent
7
+ * Claude Code SDK from traversing back to the main repository.
8
+ */
9
+ import * as fs from 'node:fs';
10
+ import * as path from 'node:path';
11
+ import { execFileSync } from 'node:child_process';
12
+ import { createLogger } from '../utils/debug.js';
13
+ import { slugify } from '../utils/slug.js';
14
+ import { loadGlobalConfig } from '../config/globalConfig.js';
15
+ const log = createLogger('clone');
16
+ function generateTimestamp() {
17
+ return new Date().toISOString().replace(/[-:.]/g, '').slice(0, 13);
18
+ }
19
+ /**
20
+ * Resolve the base directory for clones from global config.
21
+ * Returns the configured worktree_dir (resolved to absolute), or ../
22
+ */
23
+ function resolveCloneBaseDir(projectDir) {
24
+ const globalConfig = loadGlobalConfig();
25
+ if (globalConfig.worktreeDir) {
26
+ return path.isAbsolute(globalConfig.worktreeDir)
27
+ ? globalConfig.worktreeDir
28
+ : path.resolve(projectDir, globalConfig.worktreeDir);
29
+ }
30
+ return path.join(projectDir, '..');
31
+ }
32
+ /**
33
+ * Resolve the clone path based on options and global config.
34
+ *
35
+ * Priority:
36
+ * 1. Custom path in options.worktree (string)
37
+ * 2. worktree_dir from config.yaml (if set)
38
+ * 3. Default: ../{dir-name}
39
+ */
40
+ function resolveClonePath(projectDir, options) {
41
+ const timestamp = generateTimestamp();
42
+ const slug = slugify(options.taskSlug);
43
+ const dirName = slug ? `${timestamp}-${slug}` : timestamp;
44
+ if (typeof options.worktree === 'string') {
45
+ return path.isAbsolute(options.worktree)
46
+ ? options.worktree
47
+ : path.resolve(projectDir, options.worktree);
48
+ }
49
+ return path.join(resolveCloneBaseDir(projectDir), dirName);
50
+ }
51
+ function resolveBranchName(options) {
52
+ if (options.branch) {
53
+ return options.branch;
54
+ }
55
+ const timestamp = generateTimestamp();
56
+ const slug = slugify(options.taskSlug);
57
+ return slug ? `takt/${timestamp}-${slug}` : `takt/${timestamp}`;
58
+ }
59
+ function branchExists(projectDir, branch) {
60
+ try {
61
+ execFileSync('git', ['rev-parse', '--verify', branch], {
62
+ cwd: projectDir,
63
+ stdio: 'pipe',
64
+ });
65
+ return true;
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ }
71
+ /**
72
+ * Clone a repository and remove origin to isolate from the main repo.
73
+ */
74
+ function cloneAndIsolate(projectDir, clonePath) {
75
+ fs.mkdirSync(path.dirname(clonePath), { recursive: true });
76
+ execFileSync('git', ['clone', '--reference', projectDir, '--dissociate', projectDir, clonePath], {
77
+ cwd: projectDir,
78
+ stdio: 'pipe',
79
+ });
80
+ execFileSync('git', ['remote', 'remove', 'origin'], {
81
+ cwd: clonePath,
82
+ stdio: 'pipe',
83
+ });
84
+ }
85
+ /**
86
+ * Create a git clone for a task.
87
+ *
88
+ * Uses `git clone --reference --dissociate` to create an independent clone,
89
+ * then removes origin and checks out a new branch.
90
+ */
91
+ export function createSharedClone(projectDir, options) {
92
+ const clonePath = resolveClonePath(projectDir, options);
93
+ const branch = resolveBranchName(options);
94
+ log.info('Creating shared clone', { path: clonePath, branch });
95
+ cloneAndIsolate(projectDir, clonePath);
96
+ if (branchExists(clonePath, branch)) {
97
+ execFileSync('git', ['checkout', branch], { cwd: clonePath, stdio: 'pipe' });
98
+ }
99
+ else {
100
+ execFileSync('git', ['checkout', '-b', branch], { cwd: clonePath, stdio: 'pipe' });
101
+ }
102
+ saveCloneMeta(projectDir, branch, clonePath);
103
+ log.info('Clone created', { path: clonePath, branch });
104
+ return { path: clonePath, branch };
105
+ }
106
+ /**
107
+ * Create a temporary clone for an existing branch.
108
+ * Used by review/instruct to work on a branch that was previously pushed.
109
+ */
110
+ export function createTempCloneForBranch(projectDir, branch) {
111
+ const timestamp = generateTimestamp();
112
+ const clonePath = path.join(resolveCloneBaseDir(projectDir), `tmp-${timestamp}`);
113
+ log.info('Creating temp clone for branch', { path: clonePath, branch });
114
+ cloneAndIsolate(projectDir, clonePath);
115
+ execFileSync('git', ['checkout', branch], { cwd: clonePath, stdio: 'pipe' });
116
+ saveCloneMeta(projectDir, branch, clonePath);
117
+ log.info('Temp clone created', { path: clonePath, branch });
118
+ return { path: clonePath, branch };
119
+ }
120
+ /**
121
+ * Remove a clone directory.
122
+ */
123
+ export function removeClone(clonePath) {
124
+ log.info('Removing clone', { path: clonePath });
125
+ try {
126
+ fs.rmSync(clonePath, { recursive: true, force: true });
127
+ log.info('Clone removed', { path: clonePath });
128
+ }
129
+ catch (err) {
130
+ log.error('Failed to remove clone', { path: clonePath, error: String(err) });
131
+ }
132
+ }
133
+ // --- Clone metadata ---
134
+ const CLONE_META_DIR = 'clone-meta';
135
+ function encodeBranchName(branch) {
136
+ return branch.replace(/\//g, '--');
137
+ }
138
+ function getCloneMetaPath(projectDir, branch) {
139
+ return path.join(projectDir, '.takt', CLONE_META_DIR, `${encodeBranchName(branch)}.json`);
140
+ }
141
+ /**
142
+ * Save clone metadata (branch → clonePath mapping).
143
+ * Used to clean up orphaned clone directories on merge/delete.
144
+ */
145
+ export function saveCloneMeta(projectDir, branch, clonePath) {
146
+ const filePath = getCloneMetaPath(projectDir, branch);
147
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
148
+ fs.writeFileSync(filePath, JSON.stringify({ branch, clonePath }));
149
+ log.info('Clone meta saved', { branch, clonePath });
150
+ }
151
+ /**
152
+ * Remove clone metadata for a branch.
153
+ */
154
+ export function removeCloneMeta(projectDir, branch) {
155
+ try {
156
+ fs.unlinkSync(getCloneMetaPath(projectDir, branch));
157
+ log.info('Clone meta removed', { branch });
158
+ }
159
+ catch {
160
+ // File may not exist — ignore
161
+ }
162
+ }
163
+ /**
164
+ * Clean up an orphaned clone directory associated with a branch.
165
+ * Reads metadata, removes clone directory if it still exists, then removes metadata.
166
+ */
167
+ export function cleanupOrphanedClone(projectDir, branch) {
168
+ try {
169
+ const raw = fs.readFileSync(getCloneMetaPath(projectDir, branch), 'utf-8');
170
+ const meta = JSON.parse(raw);
171
+ if (fs.existsSync(meta.clonePath)) {
172
+ removeClone(meta.clonePath);
173
+ log.info('Orphaned clone cleaned up', { branch, clonePath: meta.clonePath });
174
+ }
175
+ }
176
+ catch {
177
+ // No metadata or parse error — nothing to clean up
178
+ }
179
+ removeCloneMeta(projectDir, branch);
180
+ }
181
+ //# sourceMappingURL=clone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone.js","sourceRoot":"","sources":["../../src/task/clone.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,8 @@ export { TaskRunner, type TaskInfo, type TaskResult, } from './runner.js';
5
5
  export { showTaskList } from './display.js';
6
6
  export { TaskFileSchema, type TaskFileData } from './schema.js';
7
7
  export { parseTaskFile, parseTaskFiles, type ParsedTask } from './parser.js';
8
- export { createWorktree, removeWorktree, detectDefaultBranch, parseTaktWorktrees, listTaktWorktrees, getFilesChanged, extractTaskSlug, buildReviewItems, type WorktreeOptions, type WorktreeResult, type WorktreeInfo, type WorktreeReviewItem, } from './worktree.js';
9
- export { autoCommitWorktree, type AutoCommitResult } from './autoCommit.js';
8
+ export { createSharedClone, removeClone, createTempCloneForBranch, saveCloneMeta, removeCloneMeta, cleanupOrphanedClone, type WorktreeOptions, type WorktreeResult, } from './clone.js';
9
+ export { detectDefaultBranch, listTaktBranches, parseTaktBranches, getFilesChanged, extractTaskSlug, getOriginalInstruction, buildListItems, type BranchInfo, type BranchListItem, } from './branchList.js';
10
+ export { autoCommitAndPush, type AutoCommitResult } from './autoCommit.js';
10
11
  export { TaskWatcher, type TaskWatcherOptions } from './watcher.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,wBAAwB,EACxB,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -5,7 +5,8 @@ export { TaskRunner, } from './runner.js';
5
5
  export { showTaskList } from './display.js';
6
6
  export { TaskFileSchema } from './schema.js';
7
7
  export { parseTaskFile, parseTaskFiles } from './parser.js';
8
- export { createWorktree, removeWorktree, detectDefaultBranch, parseTaktWorktrees, listTaktWorktrees, getFilesChanged, extractTaskSlug, buildReviewItems, } from './worktree.js';
9
- export { autoCommitWorktree } from './autoCommit.js';
8
+ export { createSharedClone, removeClone, createTempCloneForBranch, saveCloneMeta, removeCloneMeta, cleanupOrphanedClone, } from './clone.js';
9
+ export { detectDefaultBranch, listTaktBranches, parseTaktBranches, getFilesChanged, extractTaskSlug, getOriginalInstruction, buildListItems, } from './branchList.js';
10
+ export { autoCommitAndPush } from './autoCommit.js';
10
11
  export { TaskWatcher } from './watcher.js';
11
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,GAGX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAmB,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,gBAAgB,GAKjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAyB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAA2B,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,GAGX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAmB,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,wBAAwB,EACxB,aAAa,EACb,eAAe,EACf,oBAAoB,GAGrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,cAAc,GAGf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAyB,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAA2B,MAAM,cAAc,CAAC"}
@@ -38,6 +38,7 @@ export declare class TaskRunner {
38
38
  private projectDir;
39
39
  private tasksDir;
40
40
  private completedDir;
41
+ private failedDir;
41
42
  constructor(projectDir: string);
42
43
  /** ディレクトリ構造を作成 */
43
44
  ensureDirs(): void;
@@ -66,6 +67,19 @@ export declare class TaskRunner {
66
67
  * @returns レポートファイルのパス
67
68
  */
68
69
  completeTask(result: TaskResult): string;
70
+ /**
71
+ * タスクを失敗としてマーク
72
+ *
73
+ * タスクファイルを .takt/failed に移動し、
74
+ * レポートファイルを作成する。
75
+ *
76
+ * @returns レポートファイルのパス
77
+ */
78
+ failTask(result: TaskResult): string;
79
+ /**
80
+ * タスクファイルを指定ディレクトリに移動し、レポート・ログを生成する
81
+ */
82
+ private moveTask;
69
83
  /**
70
84
  * レポートを生成
71
85
  */
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/task/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,YAAY;AACZ,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAED,cAAc;AACd,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;gBAEjB,UAAU,EAAE,MAAM;IAM9B,kBAAkB;IAClB,UAAU,IAAI,IAAI;IAKlB,sBAAsB;IACtB,WAAW,IAAI,MAAM;IAIrB;;;OAGG;IACH,SAAS,IAAI,QAAQ,EAAE;IAgBvB;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAsBtC;;OAEG;IACH,WAAW,IAAI,QAAQ,GAAG,IAAI;IAK9B;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAsCxC;;OAEG;IACH,OAAO,CAAC,cAAc;CA2BvB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/task/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,YAAY;AACZ,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAED,cAAc;AACd,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;gBAEd,UAAU,EAAE,MAAM;IAO9B,kBAAkB;IAClB,UAAU,IAAI,IAAI;IAMlB,sBAAsB;IACtB,WAAW,IAAI,MAAM;IAIrB;;;OAGG;IACH,SAAS,IAAI,QAAQ,EAAE;IAgBvB;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAsBtC;;OAEG;IACH,WAAW,IAAI,QAAQ,GAAG,IAAI;IAK9B;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAOxC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAIpC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAsChB;;OAEG;IACH,OAAO,CAAC,cAAc;CA2BvB"}
@@ -22,15 +22,18 @@ export class TaskRunner {
22
22
  projectDir;
23
23
  tasksDir;
24
24
  completedDir;
25
+ failedDir;
25
26
  constructor(projectDir) {
26
27
  this.projectDir = projectDir;
27
28
  this.tasksDir = path.join(projectDir, '.takt', 'tasks');
28
29
  this.completedDir = path.join(projectDir, '.takt', 'completed');
30
+ this.failedDir = path.join(projectDir, '.takt', 'failed');
29
31
  }
30
32
  /** ディレクトリ構造を作成 */
31
33
  ensureDirs() {
32
34
  fs.mkdirSync(this.tasksDir, { recursive: true });
33
35
  fs.mkdirSync(this.completedDir, { recursive: true });
36
+ fs.mkdirSync(this.failedDir, { recursive: true });
34
37
  }
35
38
  /** タスクディレクトリのパスを取得 */
36
39
  getTasksDir() {
@@ -93,22 +96,42 @@ export class TaskRunner {
93
96
  * @returns レポートファイルのパス
94
97
  */
95
98
  completeTask(result) {
99
+ if (!result.success) {
100
+ throw new Error('Cannot complete a failed task. Use failTask() instead.');
101
+ }
102
+ return this.moveTask(result, this.completedDir);
103
+ }
104
+ /**
105
+ * タスクを失敗としてマーク
106
+ *
107
+ * タスクファイルを .takt/failed に移動し、
108
+ * レポートファイルを作成する。
109
+ *
110
+ * @returns レポートファイルのパス
111
+ */
112
+ failTask(result) {
113
+ return this.moveTask(result, this.failedDir);
114
+ }
115
+ /**
116
+ * タスクファイルを指定ディレクトリに移動し、レポート・ログを生成する
117
+ */
118
+ moveTask(result, targetDir) {
96
119
  this.ensureDirs();
97
120
  // タイムスタンプを生成
98
121
  const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
99
- // 完了ディレクトリにサブディレクトリを作成
100
- const taskCompletedDir = path.join(this.completedDir, `${timestamp}_${result.task.name}`);
101
- fs.mkdirSync(taskCompletedDir, { recursive: true });
122
+ // ターゲットディレクトリにサブディレクトリを作成
123
+ const taskTargetDir = path.join(targetDir, `${timestamp}_${result.task.name}`);
124
+ fs.mkdirSync(taskTargetDir, { recursive: true });
102
125
  // 元のタスクファイルを移動(元の拡張子を保持)
103
126
  const originalExt = path.extname(result.task.filePath);
104
- const completedTaskFile = path.join(taskCompletedDir, `${result.task.name}${originalExt}`);
105
- fs.renameSync(result.task.filePath, completedTaskFile);
127
+ const movedTaskFile = path.join(taskTargetDir, `${result.task.name}${originalExt}`);
128
+ fs.renameSync(result.task.filePath, movedTaskFile);
106
129
  // レポートを生成
107
- const reportFile = path.join(taskCompletedDir, 'report.md');
130
+ const reportFile = path.join(taskTargetDir, 'report.md');
108
131
  const reportContent = this.generateReport(result);
109
132
  fs.writeFileSync(reportFile, reportContent, 'utf-8');
110
133
  // ログを保存
111
- const logFile = path.join(taskCompletedDir, 'log.json');
134
+ const logFile = path.join(taskTargetDir, 'log.json');
112
135
  const logData = {
113
136
  taskName: result.task.name,
114
137
  success: result.success,
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/task/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/task/runner.ts"],"names":[],"mappings":"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"}
@@ -9,14 +9,14 @@ import { z } from 'zod/v4';
9
9
  *
10
10
  * Examples:
11
11
  * task: "認証機能を追加する"
12
- * worktree: true # .takt/worktrees/{timestamp}-{task-slug}/ に作成
12
+ * worktree: true # 共有クローンで隔離実行
13
13
  * branch: "feat/add-auth" # オプション(省略時は自動生成)
14
14
  * workflow: "default" # オプション(省略時はcurrent workflow)
15
15
  *
16
- * worktree patterns:
17
- * - true: create at .takt/worktrees/{timestamp}-{task-slug}/
16
+ * worktree patterns (uses git clone --shared internally):
17
+ * - true: create shared clone in sibling dir or worktree_dir
18
18
  * - "/path/to/dir": create at specified path
19
- * - omitted: no worktree (run in cwd)
19
+ * - omitted: no isolation (run in cwd)
20
20
  *
21
21
  * branch patterns:
22
22
  * - "feat/xxx": use specified branch name
@@ -9,14 +9,14 @@ import { z } from 'zod/v4';
9
9
  *
10
10
  * Examples:
11
11
  * task: "認証機能を追加する"
12
- * worktree: true # .takt/worktrees/{timestamp}-{task-slug}/ に作成
12
+ * worktree: true # 共有クローンで隔離実行
13
13
  * branch: "feat/add-auth" # オプション(省略時は自動生成)
14
14
  * workflow: "default" # オプション(省略時はcurrent workflow)
15
15
  *
16
- * worktree patterns:
17
- * - true: create at .takt/worktrees/{timestamp}-{task-slug}/
16
+ * worktree patterns (uses git clone --shared internally):
17
+ * - true: create shared clone in sibling dir or worktree_dir
18
18
  * - "/path/to/dir": create at specified path
19
- * - omitted: no worktree (run in cwd)
19
+ * - omitted: no isolation (run in cwd)
20
20
  *
21
21
  * branch patterns:
22
22
  * - "feat/xxx": use specified branch name
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Task name summarization using AI or romanization
3
+ *
4
+ * Generates concise English/romaji summaries for use in branch names and clone paths.
5
+ */
6
+ export interface SummarizeOptions {
7
+ /** Working directory for Claude execution */
8
+ cwd: string;
9
+ /** Model to use (optional, defaults to config or haiku) */
10
+ model?: string;
11
+ /** Use LLM for summarization (default: true). If false, uses romanization. */
12
+ useLLM?: boolean;
13
+ }
14
+ /**
15
+ * Summarize a task name into a concise slug using AI or romanization.
16
+ *
17
+ * @param taskName - Original task name (can be in any language)
18
+ * @param options - Summarization options
19
+ * @returns Slug suitable for branch names (English if LLM, romaji if not)
20
+ */
21
+ export declare function summarizeTaskName(taskName: string, options: SummarizeOptions): Promise<string>;
22
+ //# sourceMappingURL=summarize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../src/task/summarize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0CH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAaD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,CA4BjB"}