takt 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/README.md +223 -166
  2. package/dist/agents/runner.d.ts +2 -4
  3. package/dist/agents/runner.d.ts.map +1 -1
  4. package/dist/agents/runner.js +6 -35
  5. package/dist/agents/runner.js.map +1 -1
  6. package/dist/claude/client.d.ts +31 -6
  7. package/dist/claude/client.d.ts.map +1 -1
  8. package/dist/claude/client.js +78 -30
  9. package/dist/claude/client.js.map +1 -1
  10. package/dist/claude/index.d.ts +1 -1
  11. package/dist/claude/index.d.ts.map +1 -1
  12. package/dist/claude/index.js +1 -1
  13. package/dist/claude/index.js.map +1 -1
  14. package/dist/cli.d.ts +4 -3
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +41 -20
  17. package/dist/cli.js.map +1 -1
  18. package/dist/codex/client.d.ts +0 -1
  19. package/dist/codex/client.d.ts.map +1 -1
  20. package/dist/codex/client.js +3 -6
  21. package/dist/codex/client.js.map +1 -1
  22. package/dist/commands/addTask.d.ts.map +1 -1
  23. package/dist/commands/addTask.js +23 -7
  24. package/dist/commands/addTask.js.map +1 -1
  25. package/dist/commands/eject.d.ts +13 -0
  26. package/dist/commands/eject.d.ts.map +1 -0
  27. package/dist/commands/eject.js +105 -0
  28. package/dist/commands/eject.js.map +1 -0
  29. package/dist/commands/help.d.ts.map +1 -1
  30. package/dist/commands/help.js +12 -5
  31. package/dist/commands/help.js.map +1 -1
  32. package/dist/commands/index.d.ts +2 -1
  33. package/dist/commands/index.d.ts.map +1 -1
  34. package/dist/commands/index.js +2 -1
  35. package/dist/commands/index.js.map +1 -1
  36. package/dist/commands/listTasks.d.ts +45 -0
  37. package/dist/commands/listTasks.d.ts.map +1 -0
  38. package/dist/commands/{reviewTasks.js → listTasks.js} +93 -73
  39. package/dist/commands/listTasks.js.map +1 -0
  40. package/dist/commands/refreshBuiltin.d.ts +4 -4
  41. package/dist/commands/refreshBuiltin.d.ts.map +1 -1
  42. package/dist/commands/refreshBuiltin.js +13 -29
  43. package/dist/commands/refreshBuiltin.js.map +1 -1
  44. package/dist/commands/taskExecution.d.ts +7 -5
  45. package/dist/commands/taskExecution.d.ts.map +1 -1
  46. package/dist/commands/taskExecution.js +21 -14
  47. package/dist/commands/taskExecution.js.map +1 -1
  48. package/dist/commands/workflowExecution.d.ts.map +1 -1
  49. package/dist/commands/workflowExecution.js +88 -21
  50. package/dist/commands/workflowExecution.js.map +1 -1
  51. package/dist/config/agentLoader.d.ts +3 -1
  52. package/dist/config/agentLoader.d.ts.map +1 -1
  53. package/dist/config/agentLoader.js +17 -24
  54. package/dist/config/agentLoader.js.map +1 -1
  55. package/dist/config/globalConfig.d.ts +2 -0
  56. package/dist/config/globalConfig.d.ts.map +1 -1
  57. package/dist/config/globalConfig.js +18 -0
  58. package/dist/config/globalConfig.js.map +1 -1
  59. package/dist/config/initialization.d.ts +7 -5
  60. package/dist/config/initialization.d.ts.map +1 -1
  61. package/dist/config/initialization.js +23 -21
  62. package/dist/config/initialization.js.map +1 -1
  63. package/dist/config/paths.d.ts +5 -0
  64. package/dist/config/paths.d.ts.map +1 -1
  65. package/dist/config/paths.js +9 -0
  66. package/dist/config/paths.js.map +1 -1
  67. package/dist/config/workflowLoader.d.ts +6 -4
  68. package/dist/config/workflowLoader.d.ts.map +1 -1
  69. package/dist/config/workflowLoader.js +190 -35
  70. package/dist/config/workflowLoader.js.map +1 -1
  71. package/dist/github/issue.d.ts +72 -0
  72. package/dist/github/issue.d.ts.map +1 -0
  73. package/dist/github/issue.js +143 -0
  74. package/dist/github/issue.js.map +1 -0
  75. package/dist/models/index.d.ts +1 -1
  76. package/dist/models/index.d.ts.map +1 -1
  77. package/dist/models/index.js.map +1 -1
  78. package/dist/models/schemas.d.ts +165 -90
  79. package/dist/models/schemas.d.ts.map +1 -1
  80. package/dist/models/schemas.js +79 -51
  81. package/dist/models/schemas.js.map +1 -1
  82. package/dist/models/types.d.ts +53 -20
  83. package/dist/models/types.d.ts.map +1 -1
  84. package/dist/providers/claude.js +2 -2
  85. package/dist/providers/claude.js.map +1 -1
  86. package/dist/providers/codex.d.ts.map +1 -1
  87. package/dist/providers/codex.js +0 -2
  88. package/dist/providers/codex.js.map +1 -1
  89. package/dist/providers/index.d.ts +2 -1
  90. package/dist/providers/index.d.ts.map +1 -1
  91. package/dist/providers/index.js.map +1 -1
  92. package/dist/resources/index.d.ts +3 -22
  93. package/dist/resources/index.d.ts.map +1 -1
  94. package/dist/resources/index.js +9 -76
  95. package/dist/resources/index.js.map +1 -1
  96. package/dist/task/autoCommit.d.ts +9 -6
  97. package/dist/task/autoCommit.d.ts.map +1 -1
  98. package/dist/task/autoCommit.js +21 -12
  99. package/dist/task/autoCommit.js.map +1 -1
  100. package/dist/task/branchList.d.ts +55 -0
  101. package/dist/task/branchList.d.ts.map +1 -0
  102. package/dist/task/branchList.js +131 -0
  103. package/dist/task/branchList.js.map +1 -0
  104. package/dist/task/clone.d.ts +53 -0
  105. package/dist/task/clone.d.ts.map +1 -0
  106. package/dist/task/clone.js +181 -0
  107. package/dist/task/clone.js.map +1 -0
  108. package/dist/task/index.d.ts +3 -2
  109. package/dist/task/index.d.ts.map +1 -1
  110. package/dist/task/index.js +3 -2
  111. package/dist/task/index.js.map +1 -1
  112. package/dist/task/schema.d.ts +4 -4
  113. package/dist/task/schema.js +4 -4
  114. package/dist/task/summarize.d.ts +7 -5
  115. package/dist/task/summarize.d.ts.map +1 -1
  116. package/dist/task/summarize.js +62 -29
  117. package/dist/task/summarize.js.map +1 -1
  118. package/dist/utils/session.d.ts +74 -10
  119. package/dist/utils/session.d.ts.map +1 -1
  120. package/dist/utils/session.js +101 -51
  121. package/dist/utils/session.js.map +1 -1
  122. package/dist/utils/updateNotifier.d.ts +6 -0
  123. package/dist/utils/updateNotifier.d.ts.map +1 -0
  124. package/dist/utils/updateNotifier.js +17 -0
  125. package/dist/utils/updateNotifier.js.map +1 -0
  126. package/dist/workflow/engine.d.ts +35 -2
  127. package/dist/workflow/engine.d.ts.map +1 -1
  128. package/dist/workflow/engine.js +238 -38
  129. package/dist/workflow/engine.js.map +1 -1
  130. package/dist/workflow/index.d.ts +1 -1
  131. package/dist/workflow/index.d.ts.map +1 -1
  132. package/dist/workflow/index.js +1 -1
  133. package/dist/workflow/index.js.map +1 -1
  134. package/dist/workflow/instruction-builder.d.ts +89 -20
  135. package/dist/workflow/instruction-builder.d.ts.map +1 -1
  136. package/dist/workflow/instruction-builder.js +404 -61
  137. package/dist/workflow/instruction-builder.js.map +1 -1
  138. package/dist/workflow/parallel-logger.d.ts +76 -0
  139. package/dist/workflow/parallel-logger.d.ts.map +1 -0
  140. package/dist/workflow/parallel-logger.js +173 -0
  141. package/dist/workflow/parallel-logger.js.map +1 -0
  142. package/dist/workflow/phase-runner.d.ts +40 -0
  143. package/dist/workflow/phase-runner.d.ts.map +1 -0
  144. package/dist/workflow/phase-runner.js +69 -0
  145. package/dist/workflow/phase-runner.js.map +1 -0
  146. package/dist/workflow/rule-evaluator.d.ts +64 -0
  147. package/dist/workflow/rule-evaluator.d.ts.map +1 -0
  148. package/dist/workflow/rule-evaluator.js +178 -0
  149. package/dist/workflow/rule-evaluator.js.map +1 -0
  150. package/dist/workflow/rule-utils.d.ts +13 -0
  151. package/dist/workflow/rule-utils.d.ts.map +1 -0
  152. package/dist/workflow/rule-utils.js +17 -0
  153. package/dist/workflow/rule-utils.js.map +1 -0
  154. package/dist/workflow/transitions.d.ts +5 -13
  155. package/dist/workflow/transitions.d.ts.map +1 -1
  156. package/dist/workflow/transitions.js +8 -78
  157. package/dist/workflow/transitions.js.map +1 -1
  158. package/dist/workflow/types.d.ts +2 -1
  159. package/dist/workflow/types.d.ts.map +1 -1
  160. package/package.json +4 -1
  161. package/resources/global/en/agents/default/ai-antipattern-reviewer.md +193 -0
  162. package/resources/global/en/agents/default/{architect.md → architecture-reviewer.md} +144 -44
  163. package/resources/global/en/agents/default/coder.md +7 -7
  164. package/resources/global/en/agents/default/planner.md +29 -9
  165. package/resources/global/en/agents/default/{security.md → security-reviewer.md} +23 -5
  166. package/resources/global/en/agents/default/supervisor.md +13 -2
  167. package/resources/global/en/agents/expert/frontend-reviewer.md +0 -17
  168. package/resources/global/en/agents/expert/qa-reviewer.md +0 -16
  169. package/resources/global/en/agents/expert/security-reviewer.md +0 -16
  170. package/resources/global/en/agents/expert-cqrs/cqrs-es-reviewer.md +0 -17
  171. package/resources/global/en/agents/templates/coder.md +128 -0
  172. package/resources/global/en/agents/templates/planner.md +44 -0
  173. package/resources/global/en/agents/templates/reviewer.md +57 -0
  174. package/resources/global/en/agents/templates/supervisor.md +64 -0
  175. package/resources/global/en/workflows/default.yaml +235 -770
  176. package/resources/global/en/workflows/expert-cqrs.yaml +325 -697
  177. package/resources/global/en/workflows/expert.yaml +354 -722
  178. package/resources/global/en/workflows/magi.yaml +45 -52
  179. package/resources/global/en/workflows/research.yaml +18 -99
  180. package/resources/global/en/workflows/simple.yaml +156 -421
  181. package/resources/global/ja/agents/default/{ai-reviewer.md → ai-antipattern-reviewer.md} +92 -15
  182. package/resources/global/ja/agents/default/{architect.md → architecture-reviewer.md} +148 -48
  183. package/resources/global/ja/agents/default/coder.md +7 -7
  184. package/resources/global/ja/agents/default/planner.md +29 -9
  185. package/resources/global/ja/agents/default/{security.md → security-reviewer.md} +23 -5
  186. package/resources/global/ja/agents/default/supervisor.md +13 -2
  187. package/resources/global/ja/agents/expert/frontend-reviewer.md +0 -18
  188. package/resources/global/ja/agents/expert/qa-reviewer.md +0 -16
  189. package/resources/global/ja/agents/expert/security-reviewer.md +0 -16
  190. package/resources/global/ja/agents/expert-cqrs/cqrs-es-reviewer.md +0 -18
  191. package/resources/global/ja/agents/templates/coder.md +128 -0
  192. package/resources/global/ja/agents/templates/planner.md +44 -0
  193. package/resources/global/ja/agents/templates/reviewer.md +57 -0
  194. package/resources/global/ja/agents/templates/supervisor.md +64 -0
  195. package/resources/global/ja/workflows/default.yaml +230 -771
  196. package/resources/global/ja/workflows/expert-cqrs.yaml +316 -832
  197. package/resources/global/ja/workflows/expert.yaml +331 -711
  198. package/resources/global/ja/workflows/magi.yaml +45 -52
  199. package/resources/global/ja/workflows/research.yaml +18 -99
  200. package/resources/global/ja/workflows/simple.yaml +149 -415
  201. package/resources/project/dotgitignore +10 -0
  202. package/resources/project/tasks/TASK-FORMAT +37 -0
  203. package/dist/commands/reviewTasks.d.ts +0 -43
  204. package/dist/commands/reviewTasks.d.ts.map +0 -1
  205. package/dist/commands/reviewTasks.js.map +0 -1
  206. package/dist/task/worktree.d.ts +0 -70
  207. package/dist/task/worktree.d.ts.map +0 -1
  208. package/dist/task/worktree.js +0 -221
  209. package/dist/task/worktree.js.map +0 -1
  210. package/resources/global/en/agents/default/ai-reviewer.md +0 -116
@@ -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"}
@@ -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
@@ -1,20 +1,22 @@
1
1
  /**
2
- * Task name summarization using AI
2
+ * Task name summarization using AI or romanization
3
3
  *
4
- * Generates concise English summaries for use in branch names and worktree paths.
4
+ * Generates concise English/romaji summaries for use in branch names and clone paths.
5
5
  */
6
6
  export interface SummarizeOptions {
7
7
  /** Working directory for Claude execution */
8
8
  cwd: string;
9
- /** Model to use (optional, defaults to haiku for speed) */
9
+ /** Model to use (optional, defaults to config or haiku) */
10
10
  model?: string;
11
+ /** Use LLM for summarization (default: true). If false, uses romanization. */
12
+ useLLM?: boolean;
11
13
  }
12
14
  /**
13
- * Summarize a task name into a concise English slug using AI.
15
+ * Summarize a task name into a concise slug using AI or romanization.
14
16
  *
15
17
  * @param taskName - Original task name (can be in any language)
16
18
  * @param options - Summarization options
17
- * @returns English slug suitable for branch names
19
+ * @returns Slug suitable for branch names (English if LLM, romaji if not)
18
20
  */
19
21
  export declare function summarizeTaskName(taskName: string, options: SummarizeOptions): Promise<string>;
20
22
  //# sourceMappingURL=summarize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../src/task/summarize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuBH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
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"}
@@ -1,49 +1,82 @@
1
1
  /**
2
- * Task name summarization using AI
2
+ * Task name summarization using AI or romanization
3
3
  *
4
- * Generates concise English summaries for use in branch names and worktree paths.
4
+ * Generates concise English/romaji summaries for use in branch names and clone paths.
5
5
  */
6
- import { callClaude } from '../claude/client.js';
6
+ import * as wanakana from 'wanakana';
7
+ import { loadGlobalConfig } from '../config/globalConfig.js';
8
+ import { getProvider } from '../providers/index.js';
7
9
  import { createLogger } from '../utils/debug.js';
8
10
  const log = createLogger('summarize');
9
- const SUMMARIZE_SYSTEM_PROMPT = `You are a helpful assistant that generates concise English slugs for git branch names.
11
+ /**
12
+ * Sanitize a string for use as git branch name and directory name.
13
+ *
14
+ * Git branch restrictions: no spaces, ~, ^, :, ?, *, [, \, .., @{, leading -
15
+ * Directory restrictions: no /, \, :, *, ?, ", <, >, |
16
+ *
17
+ * This function allows only: a-z, 0-9, hyphen
18
+ */
19
+ function sanitizeSlug(input, maxLength = 30) {
20
+ return input
21
+ .trim()
22
+ .toLowerCase()
23
+ .replace(/[^a-z0-9-]/g, '-') // Replace invalid chars with hyphen
24
+ .replace(/-+/g, '-') // Collapse multiple hyphens
25
+ .replace(/^-+/, '') // Remove leading hyphens
26
+ .slice(0, maxLength)
27
+ .replace(/-+$/, ''); // Remove trailing hyphens (after slice)
28
+ }
29
+ const SUMMARIZE_SYSTEM_PROMPT = `You are a slug generator. Given a task description, output ONLY a slug.
10
30
 
11
- Rules:
12
- - Output ONLY the slug, nothing else
13
- - Use lowercase letters, numbers, and hyphens only
14
- - Maximum 30 characters
15
- - No leading/trailing hyphens
16
- - Be descriptive but concise
17
- - If the input is already in English and short, simplify it
31
+ NEVER output sentences. NEVER start with "this", "the", "i", "we", or "it".
32
+ ALWAYS start with a verb: add, fix, update, refactor, implement, remove, etc.
18
33
 
19
- Examples:
20
- - "認証機能を追加する" → "add-auth"
21
- - "Fix the login bug" "fix-login-bug"
22
- - "worktreeを作るときブランチ名をAIで生成" "ai-branch-naming"
23
- - "Add user registration with email verification" "add-user-registration"`;
34
+ Format: verb-noun (lowercase, hyphens, max 30 chars)
35
+
36
+ InputOutput:
37
+ 認証機能を追加するadd-auth
38
+ Fix the login bugfix-login-bug
39
+ ユーザー登録にメール認証を追加 → add-email-verification
40
+ worktreeを作るときブランチ名をAIで生成 → ai-branch-naming
41
+ レビュー画面に元の指示を表示する → show-original-instruction`;
42
+ /**
43
+ * Convert Japanese text to romaji slug.
44
+ * Handles hiragana, katakana, and passes through alphanumeric.
45
+ * Kanji and other non-convertible characters become hyphens.
46
+ */
47
+ function toRomajiSlug(text) {
48
+ // Convert to romaji (hiragana/katakana → romaji, kanji stays as-is)
49
+ const romaji = wanakana.toRomaji(text, { customRomajiMapping: {} });
50
+ return sanitizeSlug(romaji);
51
+ }
24
52
  /**
25
- * Summarize a task name into a concise English slug using AI.
53
+ * Summarize a task name into a concise slug using AI or romanization.
26
54
  *
27
55
  * @param taskName - Original task name (can be in any language)
28
56
  * @param options - Summarization options
29
- * @returns English slug suitable for branch names
57
+ * @returns Slug suitable for branch names (English if LLM, romaji if not)
30
58
  */
31
59
  export async function summarizeTaskName(taskName, options) {
32
- log.info('Summarizing task name', { taskName });
33
- const response = await callClaude('summarizer', `Summarize this task: "${taskName}"`, {
60
+ const useLLM = options.useLLM ?? true;
61
+ log.info('Summarizing task name', { taskName, useLLM });
62
+ // Use romanization if LLM is disabled
63
+ if (!useLLM) {
64
+ const slug = toRomajiSlug(taskName);
65
+ log.info('Task name romanized', { original: taskName, slug });
66
+ return slug || 'task';
67
+ }
68
+ // Use LLM for summarization
69
+ const globalConfig = loadGlobalConfig();
70
+ const providerType = globalConfig.provider ?? 'claude';
71
+ const model = options.model ?? globalConfig.model ?? 'haiku';
72
+ const provider = getProvider(providerType);
73
+ const response = await provider.call('summarizer', taskName, {
34
74
  cwd: options.cwd,
35
- model: options.model ?? 'haiku',
36
- maxTurns: 1,
75
+ model,
37
76
  systemPrompt: SUMMARIZE_SYSTEM_PROMPT,
38
77
  allowedTools: [],
39
78
  });
40
- const slug = response.content
41
- .trim()
42
- .toLowerCase()
43
- .replace(/[^a-z0-9-]/g, '-')
44
- .replace(/-+/g, '-')
45
- .replace(/^-|-$/g, '')
46
- .slice(0, 30);
79
+ const slug = sanitizeSlug(response.content);
47
80
  log.info('Task name summarized', { original: taskName, slug });
48
81
  return slug || 'task';
49
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../src/task/summarize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAEtC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;4EAc4C,CAAC;AAS7E;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,OAAyB;IAEzB,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,yBAAyB,QAAQ,GAAG,EAAE;QACpF,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO;QAC/B,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,uBAAuB;QACrC,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO;SAC1B,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,OAAO,IAAI,IAAI,MAAM,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../src/task/summarize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAEtC;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,KAAa,EAAE,SAAS,GAAG,EAAE;IACjD,OAAO,KAAK;SACT,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAE,oCAAoC;SACjE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAU,4BAA4B;SACzD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAW,yBAAyB;SACtD,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAU,wCAAwC;AAC1E,CAAC;AAED,MAAM,uBAAuB,GAAG;;;;;;;;;;;;6CAYa,CAAC;AAW9C;;;;GAIG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,oEAAoE;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,OAAyB;IAEzB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAExD,sCAAsC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,IAAI,MAAM,CAAC;IACxB,CAAC;IAED,4BAA4B;IAC5B,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACxC,MAAM,YAAY,GAAI,YAAY,CAAC,QAAyB,IAAI,QAAQ,CAAC;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,IAAI,OAAO,CAAC;IAE7D,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE;QAC3D,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK;QACL,YAAY,EAAE,uBAAuB;QACrC,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5C,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,OAAO,IAAI,IAAI,MAAM,CAAC;AACxB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Session management utilities
3
3
  */
4
- import type { AgentResponse, WorkflowState } from '../models/types.js';
4
+ import type { StreamEvent } from '../claude/types.js';
5
5
  /** Session log entry */
6
6
  export interface SessionLog {
7
7
  task: string;
@@ -14,12 +14,82 @@ export interface SessionLog {
14
14
  history: Array<{
15
15
  step: string;
16
16
  agent: string;
17
+ instruction: string;
17
18
  status: string;
18
19
  timestamp: string;
19
20
  content: string;
20
21
  error?: string;
22
+ /** Matched rule index (0-based) when rules-based detection was used */
23
+ matchedRuleIndex?: number;
24
+ /** How the rule match was detected */
25
+ matchedRuleMethod?: string;
21
26
  }>;
22
27
  }
28
+ /** NDJSON record: workflow started */
29
+ export interface NdjsonWorkflowStart {
30
+ type: 'workflow_start';
31
+ task: string;
32
+ workflowName: string;
33
+ startTime: string;
34
+ }
35
+ /** NDJSON record: step started */
36
+ export interface NdjsonStepStart {
37
+ type: 'step_start';
38
+ step: string;
39
+ agent: string;
40
+ iteration: number;
41
+ timestamp: string;
42
+ }
43
+ /** NDJSON record: streaming chunk received */
44
+ export interface NdjsonStream {
45
+ type: 'stream';
46
+ step: string;
47
+ event: StreamEvent;
48
+ timestamp: string;
49
+ }
50
+ /** NDJSON record: step completed */
51
+ export interface NdjsonStepComplete {
52
+ type: 'step_complete';
53
+ step: string;
54
+ agent: string;
55
+ status: string;
56
+ content: string;
57
+ instruction: string;
58
+ matchedRuleIndex?: number;
59
+ matchedRuleMethod?: string;
60
+ error?: string;
61
+ timestamp: string;
62
+ }
63
+ /** NDJSON record: workflow completed successfully */
64
+ export interface NdjsonWorkflowComplete {
65
+ type: 'workflow_complete';
66
+ iterations: number;
67
+ endTime: string;
68
+ }
69
+ /** NDJSON record: workflow aborted */
70
+ export interface NdjsonWorkflowAbort {
71
+ type: 'workflow_abort';
72
+ iterations: number;
73
+ reason: string;
74
+ endTime: string;
75
+ }
76
+ /** Union of all NDJSON record types */
77
+ export type NdjsonRecord = NdjsonWorkflowStart | NdjsonStepStart | NdjsonStream | NdjsonStepComplete | NdjsonWorkflowComplete | NdjsonWorkflowAbort;
78
+ /**
79
+ * Append a single NDJSON line to a log file.
80
+ * Uses appendFileSync for atomic open→write→close (no file lock held).
81
+ */
82
+ export declare function appendNdjsonLine(filepath: string, record: NdjsonRecord): void;
83
+ /**
84
+ * Initialize an NDJSON log file with the workflow_start record.
85
+ * Creates the logs directory if needed and returns the file path.
86
+ */
87
+ export declare function initNdjsonLog(sessionId: string, task: string, workflowName: string, projectDir?: string): string;
88
+ /**
89
+ * Load an NDJSON log file and convert it to a SessionLog for backward compatibility.
90
+ * Parses each line as a JSON record and reconstructs the SessionLog structure.
91
+ */
92
+ export declare function loadNdjsonLog(filepath: string): SessionLog | null;
23
93
  /** Generate a session ID */
24
94
  export declare function generateSessionId(): string;
25
95
  /**
@@ -29,13 +99,9 @@ export declare function generateSessionId(): string;
29
99
  export declare function generateReportDir(task: string): string;
30
100
  /** Create a new session log */
31
101
  export declare function createSessionLog(task: string, projectDir: string, workflowName: string): SessionLog;
32
- /** Add agent response to session log */
33
- export declare function addToSessionLog(log: SessionLog, stepName: string, response: AgentResponse): void;
34
- /** Finalize session log */
35
- export declare function finalizeSessionLog(log: SessionLog, status: 'completed' | 'aborted'): void;
36
- /** Save session log to file */
37
- export declare function saveSessionLog(log: SessionLog, sessionId: string, projectDir?: string): string;
38
- /** Load session log from file */
102
+ /** Create a finalized copy of a session log (immutable — does not modify the original) */
103
+ export declare function finalizeSessionLog(log: SessionLog, status: 'completed' | 'aborted'): SessionLog;
104
+ /** Load session log from file (supports both .json and .jsonl formats) */
39
105
  export declare function loadSessionLog(filepath: string): SessionLog | null;
40
106
  /** Load project context (CLAUDE.md files) */
41
107
  export declare function loadProjectContext(projectDir: string): string;
@@ -58,6 +124,4 @@ export interface LatestLogPointer {
58
124
  export declare function updateLatestPointer(log: SessionLog, sessionId: string, projectDir?: string, options?: {
59
125
  copyToPrevious?: boolean;
60
126
  }): void;
61
- /** Convert workflow state to session log */
62
- export declare function workflowStateToSessionLog(state: WorkflowState, task: string, projectDir: string): SessionLog;
63
127
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGvE,wBAAwB;AACxB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5C,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED,4BAA4B;AAC5B,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBtD;AAED,+BAA+B;AAC/B,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,UAAU,CAUZ;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAC7B,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,GACtB,IAAI,CAUN;AAED,2BAA2B;AAC3B,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,WAAW,GAAG,SAAS,GAC9B,IAAI,CAGN;AAED,+BAA+B;AAC/B,wBAAgB,cAAc,CAC5B,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAWR;AAED,iCAAiC;AACjC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAMlE;AAED,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAgB7D;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GACrC,IAAI,CA0BN;AAED,4CAA4C;AAC5C,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,UAAU,CAsBZ"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"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"}