claude-code-workflow 6.3.34 → 6.3.37

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 (162) hide show
  1. package/.claude/agents/cli-execution-agent.md +61 -0
  2. package/.claude/agents/cli-lite-planning-agent.md +322 -36
  3. package/.claude/agents/issue-plan-agent.md +95 -11
  4. package/.claude/commands/cli/codex-review.md +8 -2
  5. package/.claude/commands/issue/plan.md +20 -6
  6. package/.claude/commands/workflow/lite-execute.md +56 -16
  7. package/.claude/commands/workflow/lite-fix.md +108 -9
  8. package/.claude/commands/workflow/lite-plan.md +1 -1
  9. package/.claude/skills/ccw-loop/README.md +303 -0
  10. package/.claude/skills/ccw-loop/SKILL.md +259 -0
  11. package/.claude/skills/ccw-loop/phases/actions/action-complete.md +320 -0
  12. package/.claude/skills/ccw-loop/phases/actions/action-debug-with-file.md +485 -0
  13. package/.claude/skills/ccw-loop/phases/actions/action-develop-with-file.md +365 -0
  14. package/.claude/skills/ccw-loop/phases/actions/action-init.md +200 -0
  15. package/.claude/skills/ccw-loop/phases/actions/action-menu.md +192 -0
  16. package/.claude/skills/ccw-loop/phases/actions/action-validate-with-file.md +307 -0
  17. package/.claude/skills/ccw-loop/phases/orchestrator.md +486 -0
  18. package/.claude/skills/ccw-loop/phases/state-schema.md +474 -0
  19. package/.claude/skills/ccw-loop/specs/action-catalog.md +300 -0
  20. package/.claude/skills/ccw-loop/specs/loop-requirements.md +192 -0
  21. package/.claude/skills/ccw-loop/templates/progress-template.md +175 -0
  22. package/.claude/skills/ccw-loop/templates/understanding-template.md +303 -0
  23. package/.claude/skills/ccw-loop/templates/validation-template.md +258 -0
  24. package/.claude/workflows/cli-templates/schemas/issues-jsonl-schema.json +29 -0
  25. package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +200 -0
  26. package/.codex/prompts/debug-with-file.md +609 -0
  27. package/ccw/dist/cli.d.ts.map +1 -1
  28. package/ccw/dist/cli.js +8 -1
  29. package/ccw/dist/cli.js.map +1 -1
  30. package/ccw/dist/commands/cli.d.ts.map +1 -1
  31. package/ccw/dist/commands/cli.js +16 -4
  32. package/ccw/dist/commands/cli.js.map +1 -1
  33. package/ccw/dist/commands/issue.d.ts.map +1 -1
  34. package/ccw/dist/commands/issue.js +37 -4
  35. package/ccw/dist/commands/issue.js.map +1 -1
  36. package/ccw/dist/commands/loop.d.ts +10 -0
  37. package/ccw/dist/commands/loop.d.ts.map +1 -0
  38. package/ccw/dist/commands/loop.js +289 -0
  39. package/ccw/dist/commands/loop.js.map +1 -0
  40. package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
  41. package/ccw/dist/core/dashboard-generator.js +4 -1
  42. package/ccw/dist/core/dashboard-generator.js.map +1 -1
  43. package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
  44. package/ccw/dist/core/routes/claude-routes.js +5 -3
  45. package/ccw/dist/core/routes/claude-routes.js.map +1 -1
  46. package/ccw/dist/core/routes/cli-routes.d.ts +6 -0
  47. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  48. package/ccw/dist/core/routes/cli-routes.js +42 -13
  49. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  50. package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -1
  51. package/ccw/dist/core/routes/cli-settings-routes.js +44 -0
  52. package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -1
  53. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts.map +1 -1
  54. package/ccw/dist/core/routes/codexlens/semantic-handlers.js +3 -2
  55. package/ccw/dist/core/routes/codexlens/semantic-handlers.js.map +1 -1
  56. package/ccw/dist/core/routes/core-memory-routes.d.ts.map +1 -1
  57. package/ccw/dist/core/routes/core-memory-routes.js +4 -2
  58. package/ccw/dist/core/routes/core-memory-routes.js.map +1 -1
  59. package/ccw/dist/core/routes/files-routes.d.ts.map +1 -1
  60. package/ccw/dist/core/routes/files-routes.js +4 -2
  61. package/ccw/dist/core/routes/files-routes.js.map +1 -1
  62. package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
  63. package/ccw/dist/core/routes/hooks-routes.js +3 -0
  64. package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
  65. package/ccw/dist/core/routes/loop-routes.d.ts +24 -0
  66. package/ccw/dist/core/routes/loop-routes.d.ts.map +1 -0
  67. package/ccw/dist/core/routes/loop-routes.js +334 -0
  68. package/ccw/dist/core/routes/loop-routes.js.map +1 -0
  69. package/ccw/dist/core/routes/loop-v2-routes.d.ts +35 -0
  70. package/ccw/dist/core/routes/loop-v2-routes.d.ts.map +1 -0
  71. package/ccw/dist/core/routes/loop-v2-routes.js +1208 -0
  72. package/ccw/dist/core/routes/loop-v2-routes.js.map +1 -0
  73. package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
  74. package/ccw/dist/core/routes/memory-routes.js +2 -1
  75. package/ccw/dist/core/routes/memory-routes.js.map +1 -1
  76. package/ccw/dist/core/routes/task-routes.d.ts +12 -0
  77. package/ccw/dist/core/routes/task-routes.d.ts.map +1 -0
  78. package/ccw/dist/core/routes/task-routes.js +321 -0
  79. package/ccw/dist/core/routes/task-routes.js.map +1 -0
  80. package/ccw/dist/core/routes/test-loop-routes.d.ts +11 -0
  81. package/ccw/dist/core/routes/test-loop-routes.d.ts.map +1 -0
  82. package/ccw/dist/core/routes/test-loop-routes.js +298 -0
  83. package/ccw/dist/core/routes/test-loop-routes.js.map +1 -0
  84. package/ccw/dist/core/server.d.ts.map +1 -1
  85. package/ccw/dist/core/server.js +43 -3
  86. package/ccw/dist/core/server.js.map +1 -1
  87. package/ccw/dist/core/websocket.d.ts +59 -0
  88. package/ccw/dist/core/websocket.d.ts.map +1 -1
  89. package/ccw/dist/core/websocket.js +34 -0
  90. package/ccw/dist/core/websocket.js.map +1 -1
  91. package/ccw/dist/tools/claude-cli-tools.d.ts +40 -0
  92. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  93. package/ccw/dist/tools/claude-cli-tools.js +119 -0
  94. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  95. package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
  96. package/ccw/dist/tools/codex-lens.js +66 -47
  97. package/ccw/dist/tools/codex-lens.js.map +1 -1
  98. package/ccw/dist/tools/loop-manager.d.ts +84 -0
  99. package/ccw/dist/tools/loop-manager.d.ts.map +1 -0
  100. package/ccw/dist/tools/loop-manager.js +425 -0
  101. package/ccw/dist/tools/loop-manager.js.map +1 -0
  102. package/ccw/dist/tools/loop-state-manager.d.ts +47 -0
  103. package/ccw/dist/tools/loop-state-manager.d.ts.map +1 -0
  104. package/ccw/dist/tools/loop-state-manager.js +149 -0
  105. package/ccw/dist/tools/loop-state-manager.js.map +1 -0
  106. package/ccw/dist/tools/loop-task-manager.d.ts +138 -0
  107. package/ccw/dist/tools/loop-task-manager.d.ts.map +1 -0
  108. package/ccw/dist/tools/loop-task-manager.js +270 -0
  109. package/ccw/dist/tools/loop-task-manager.js.map +1 -0
  110. package/ccw/dist/types/index.d.ts +1 -0
  111. package/ccw/dist/types/index.d.ts.map +1 -1
  112. package/ccw/dist/types/index.js +1 -0
  113. package/ccw/dist/types/index.js.map +1 -1
  114. package/ccw/dist/types/loop.d.ts +257 -0
  115. package/ccw/dist/types/loop.d.ts.map +1 -0
  116. package/ccw/dist/types/loop.js +17 -0
  117. package/ccw/dist/types/loop.js.map +1 -0
  118. package/ccw/scripts/IMPLEMENTATION-SUMMARY.md +2 -2
  119. package/ccw/scripts/QUICK-REFERENCE.md +1 -1
  120. package/ccw/scripts/README-memory-embedder.md +1 -1
  121. package/ccw/scripts/memory_embedder.py +1 -1
  122. package/ccw/src/cli.ts +9 -1
  123. package/ccw/src/commands/cli.ts +16 -4
  124. package/ccw/src/commands/issue.ts +41 -5
  125. package/ccw/src/commands/loop.ts +344 -0
  126. package/ccw/src/core/dashboard-generator.ts +4 -1
  127. package/ccw/src/core/routes/claude-routes.ts +5 -3
  128. package/ccw/src/core/routes/cli-routes.ts +47 -15
  129. package/ccw/src/core/routes/cli-settings-routes.ts +47 -0
  130. package/ccw/src/core/routes/codexlens/semantic-handlers.ts +3 -2
  131. package/ccw/src/core/routes/core-memory-routes.ts +4 -2
  132. package/ccw/src/core/routes/files-routes.ts +4 -2
  133. package/ccw/src/core/routes/hooks-routes.ts +3 -0
  134. package/ccw/src/core/routes/loop-routes.ts +386 -0
  135. package/ccw/src/core/routes/loop-v2-routes.ts +1412 -0
  136. package/ccw/src/core/routes/memory-routes.ts +2 -1
  137. package/ccw/src/core/routes/task-routes.ts +361 -0
  138. package/ccw/src/core/routes/test-loop-routes.ts +312 -0
  139. package/ccw/src/core/server.ts +44 -3
  140. package/ccw/src/core/websocket.ts +104 -0
  141. package/ccw/src/templates/dashboard-css/12-cli-legacy.css +56 -0
  142. package/ccw/src/templates/dashboard-css/32-issue-manager.css +160 -0
  143. package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +57 -2
  144. package/ccw/src/templates/dashboard-css/36-loop-monitor.css +1896 -0
  145. package/ccw/src/templates/dashboard-css/36-loop-monitor.css.backup +1877 -0
  146. package/ccw/src/templates/dashboard-js/components/cli-status.js +64 -3
  147. package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +251 -110
  148. package/ccw/src/templates/dashboard-js/components/navigation.js +10 -0
  149. package/ccw/src/templates/dashboard-js/components/notifications.js +16 -0
  150. package/ccw/src/templates/dashboard-js/i18n.js +475 -1
  151. package/ccw/src/templates/dashboard-js/views/cli-manager.js +3 -2
  152. package/ccw/src/templates/dashboard-js/views/issue-manager.js +159 -0
  153. package/ccw/src/templates/dashboard-js/views/loop-monitor.js +3244 -0
  154. package/ccw/src/templates/dashboard.html +20 -2
  155. package/ccw/src/tools/claude-cli-tools.ts +143 -0
  156. package/ccw/src/tools/codex-lens.ts +71 -44
  157. package/ccw/src/tools/loop-manager.ts +519 -0
  158. package/ccw/src/tools/loop-state-manager.ts +173 -0
  159. package/ccw/src/tools/loop-task-manager.ts +380 -0
  160. package/ccw/src/types/index.ts +1 -0
  161. package/ccw/src/types/loop.ts +316 -0
  162. package/package.json +1 -1
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Loop Task Manager
3
+ * CCW Loop System - JSONL task persistence layer for v2 loops
4
+ * Reference: .workflow/.scratchpad/loop-system-complete-design-20260121.md section 4.2
5
+ *
6
+ * Storage format: .workflow/.loop/{loopId}/tasks.jsonl
7
+ * JSONL format: one JSON object per line for efficient append-only operations
8
+ */
9
+ /**
10
+ * Loop Task - simplified task definition for v2 loops
11
+ */
12
+ export interface LoopTask {
13
+ /** Unique task identifier */
14
+ task_id: string;
15
+ /** Task description (what to do) */
16
+ description: string;
17
+ /** CLI tool to use */
18
+ tool: 'bash' | 'gemini' | 'codex' | 'qwen' | 'claude';
19
+ /** Execution mode */
20
+ mode: 'analysis' | 'write' | 'review';
21
+ /** Prompt template with variable replacement */
22
+ prompt_template: string;
23
+ /** Display order (for drag-drop reordering) */
24
+ order: number;
25
+ /** Creation timestamp */
26
+ created_at: string;
27
+ /** Last update timestamp */
28
+ updated_at: string;
29
+ /** Optional: custom bash command */
30
+ command?: string;
31
+ /** Optional: step failure behavior */
32
+ on_error?: 'continue' | 'pause' | 'fail_fast';
33
+ }
34
+ /**
35
+ * Task create request
36
+ */
37
+ export interface TaskCreateRequest {
38
+ description: string;
39
+ tool: LoopTask['tool'];
40
+ mode: LoopTask['mode'];
41
+ prompt_template: string;
42
+ command?: string;
43
+ on_error?: LoopTask['on_error'];
44
+ }
45
+ /**
46
+ * Task update request
47
+ */
48
+ export interface TaskUpdateRequest {
49
+ description?: string;
50
+ tool?: LoopTask['tool'];
51
+ mode?: LoopTask['mode'];
52
+ prompt_template?: string;
53
+ command?: string;
54
+ on_error?: LoopTask['on_error'];
55
+ }
56
+ /**
57
+ * Task reorder request
58
+ */
59
+ export interface TaskReorderRequest {
60
+ ordered_task_ids: string[];
61
+ }
62
+ /**
63
+ * Task Storage Manager
64
+ * Handles JSONL persistence for loop tasks
65
+ */
66
+ export declare class TaskStorageManager {
67
+ private baseDir;
68
+ constructor(workflowDir: string);
69
+ /**
70
+ * Add a new task to the loop
71
+ */
72
+ addTask(loopId: string, request: TaskCreateRequest): Promise<LoopTask>;
73
+ /**
74
+ * Get all tasks for a loop
75
+ */
76
+ getTasks(loopId: string): Promise<LoopTask[]>;
77
+ /**
78
+ * Get single task by ID
79
+ */
80
+ getTask(loopId: string, taskId: string): Promise<LoopTask | null>;
81
+ /**
82
+ * Update existing task
83
+ */
84
+ updateTask(loopId: string, taskId: string, updates: TaskUpdateRequest): Promise<LoopTask | null>;
85
+ /**
86
+ * Delete task and reorder remaining tasks
87
+ */
88
+ deleteTask(loopId: string, taskId: string): Promise<boolean>;
89
+ /**
90
+ * Reorder tasks based on provided task ID sequence
91
+ */
92
+ reorderTasks(loopId: string, request: TaskReorderRequest): Promise<LoopTask[]>;
93
+ /**
94
+ * Delete all tasks for a loop
95
+ */
96
+ deleteAllTasks(loopId: string): Promise<void>;
97
+ /**
98
+ * Read tasks with recovery from backup
99
+ */
100
+ readTasksWithRecovery(loopId: string): Promise<LoopTask[]>;
101
+ /**
102
+ * Get tasks file path
103
+ */
104
+ getTasksPath(loopId: string): string;
105
+ /**
106
+ * Read tasks from JSONL file
107
+ */
108
+ private readTasks;
109
+ /**
110
+ * Parse JSONL content into tasks array
111
+ */
112
+ private parseTasksJsonl;
113
+ /**
114
+ * Write tasks array to JSONL file
115
+ */
116
+ private writeTasks;
117
+ /**
118
+ * Append single task to JSONL file
119
+ */
120
+ private appendTask;
121
+ /**
122
+ * Ensure loop directory exists
123
+ */
124
+ private ensureLoopDir;
125
+ /**
126
+ * Generate unique task ID
127
+ */
128
+ private generateTaskId;
129
+ /**
130
+ * Sanitize loop ID for filesystem usage
131
+ */
132
+ private sanitizeLoopId;
133
+ /**
134
+ * Reorder tasks array by updating order indices sequentially
135
+ */
136
+ private reorderTasksByOrder;
137
+ }
138
+ //# sourceMappingURL=loop-task-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-task-manager.d.ts","sourceRoot":"","sources":["../../src/tools/loop-task-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Loop Task Manager
3
+ * CCW Loop System - JSONL task persistence layer for v2 loops
4
+ * Reference: .workflow/.scratchpad/loop-system-complete-design-20260121.md section 4.2
5
+ *
6
+ * Storage format: .workflow/.loop/{loopId}/tasks.jsonl
7
+ * JSONL format: one JSON object per line for efficient append-only operations
8
+ */
9
+ import { readFile, writeFile, mkdir, copyFile } from 'fs/promises';
10
+ import { join } from 'path';
11
+ import { existsSync } from 'fs';
12
+ import { randomBytes } from 'crypto';
13
+ /**
14
+ * Task Storage Manager
15
+ * Handles JSONL persistence for loop tasks
16
+ */
17
+ export class TaskStorageManager {
18
+ baseDir;
19
+ constructor(workflowDir) {
20
+ // Task files stored in .workflow/.loop/{loopId}/
21
+ this.baseDir = join(workflowDir, '.workflow', '.loop');
22
+ }
23
+ /**
24
+ * Add a new task to the loop
25
+ */
26
+ async addTask(loopId, request) {
27
+ await this.ensureLoopDir(loopId);
28
+ // Read existing tasks to determine next order
29
+ const existingTasks = await this.readTasks(loopId);
30
+ const nextOrder = existingTasks.length > 0
31
+ ? Math.max(...existingTasks.map(t => t.order)) + 1
32
+ : 0;
33
+ const task = {
34
+ task_id: this.generateTaskId(),
35
+ description: request.description,
36
+ tool: request.tool,
37
+ mode: request.mode,
38
+ prompt_template: request.prompt_template,
39
+ order: nextOrder,
40
+ created_at: new Date().toISOString(),
41
+ updated_at: new Date().toISOString(),
42
+ command: request.command,
43
+ on_error: request.on_error
44
+ };
45
+ await this.appendTask(loopId, task);
46
+ return task;
47
+ }
48
+ /**
49
+ * Get all tasks for a loop
50
+ */
51
+ async getTasks(loopId) {
52
+ return this.readTasks(loopId);
53
+ }
54
+ /**
55
+ * Get single task by ID
56
+ */
57
+ async getTask(loopId, taskId) {
58
+ const tasks = await this.readTasks(loopId);
59
+ return tasks.find(t => t.task_id === taskId) || null;
60
+ }
61
+ /**
62
+ * Update existing task
63
+ */
64
+ async updateTask(loopId, taskId, updates) {
65
+ const tasks = await this.readTasks(loopId);
66
+ const taskIndex = tasks.findIndex(t => t.task_id === taskId);
67
+ if (taskIndex === -1) {
68
+ return null;
69
+ }
70
+ const task = tasks[taskIndex];
71
+ const updatedTask = {
72
+ ...task,
73
+ description: updates.description ?? task.description,
74
+ tool: updates.tool ?? task.tool,
75
+ mode: updates.mode ?? task.mode,
76
+ prompt_template: updates.prompt_template ?? task.prompt_template,
77
+ command: updates.command ?? task.command,
78
+ on_error: updates.on_error ?? task.on_error,
79
+ updated_at: new Date().toISOString()
80
+ };
81
+ tasks[taskIndex] = updatedTask;
82
+ await this.writeTasks(loopId, tasks);
83
+ return updatedTask;
84
+ }
85
+ /**
86
+ * Delete task and reorder remaining tasks
87
+ */
88
+ async deleteTask(loopId, taskId) {
89
+ const tasks = await this.readTasks(loopId);
90
+ const filteredTasks = tasks.filter(t => t.task_id !== taskId);
91
+ if (filteredTasks.length === tasks.length) {
92
+ return false; // Task not found
93
+ }
94
+ // Reorder remaining tasks
95
+ const reorderedTasks = this.reorderTasksByOrder(filteredTasks);
96
+ await this.writeTasks(loopId, reorderedTasks);
97
+ return true;
98
+ }
99
+ /**
100
+ * Reorder tasks based on provided task ID sequence
101
+ */
102
+ async reorderTasks(loopId, request) {
103
+ const tasks = await this.readTasks(loopId);
104
+ const taskMap = new Map(tasks.map(t => [t.task_id, t]));
105
+ // Verify all provided task IDs exist
106
+ for (const taskId of request.ordered_task_ids) {
107
+ if (!taskMap.has(taskId)) {
108
+ throw new Error(`Task not found: ${taskId}`);
109
+ }
110
+ }
111
+ // Reorder tasks and update order indices
112
+ const reorderedTasks = [];
113
+ for (let i = 0; i < request.ordered_task_ids.length; i++) {
114
+ const task = taskMap.get(request.ordered_task_ids[i]);
115
+ reorderedTasks.push({
116
+ ...task,
117
+ order: i,
118
+ updated_at: new Date().toISOString()
119
+ });
120
+ }
121
+ // Add any tasks not in the reorder list (shouldn't happen normally)
122
+ for (const task of tasks) {
123
+ if (!request.ordered_task_ids.includes(task.task_id)) {
124
+ reorderedTasks.push({
125
+ ...task,
126
+ order: reorderedTasks.length,
127
+ updated_at: new Date().toISOString()
128
+ });
129
+ }
130
+ }
131
+ await this.writeTasks(loopId, reorderedTasks);
132
+ return reorderedTasks;
133
+ }
134
+ /**
135
+ * Delete all tasks for a loop
136
+ */
137
+ async deleteAllTasks(loopId) {
138
+ const tasksPath = this.getTasksPath(loopId);
139
+ if (existsSync(tasksPath)) {
140
+ const { unlink } = await import('fs/promises');
141
+ await unlink(tasksPath).catch(() => { });
142
+ }
143
+ // Also delete backup
144
+ const backupPath = `${tasksPath}.backup`;
145
+ if (existsSync(backupPath)) {
146
+ const { unlink } = await import('fs/promises');
147
+ await unlink(backupPath).catch(() => { });
148
+ }
149
+ }
150
+ /**
151
+ * Read tasks with recovery from backup
152
+ */
153
+ async readTasksWithRecovery(loopId) {
154
+ try {
155
+ return await this.readTasks(loopId);
156
+ }
157
+ catch (error) {
158
+ console.warn(`Tasks file corrupted, attempting recovery for ${loopId}...`);
159
+ const backupPath = `${this.getTasksPath(loopId)}.backup`;
160
+ if (existsSync(backupPath)) {
161
+ const content = await readFile(backupPath, 'utf-8');
162
+ const tasks = this.parseTasksJsonl(content);
163
+ // Restore from backup
164
+ await this.writeTasks(loopId, tasks);
165
+ return tasks;
166
+ }
167
+ throw error;
168
+ }
169
+ }
170
+ /**
171
+ * Get tasks file path
172
+ */
173
+ getTasksPath(loopId) {
174
+ return join(this.baseDir, this.sanitizeLoopId(loopId), 'tasks.jsonl');
175
+ }
176
+ /**
177
+ * Read tasks from JSONL file
178
+ */
179
+ async readTasks(loopId) {
180
+ const filePath = this.getTasksPath(loopId);
181
+ if (!existsSync(filePath)) {
182
+ return [];
183
+ }
184
+ const content = await readFile(filePath, 'utf-8');
185
+ return this.parseTasksJsonl(content);
186
+ }
187
+ /**
188
+ * Parse JSONL content into tasks array
189
+ */
190
+ parseTasksJsonl(content) {
191
+ const tasks = [];
192
+ const lines = content.split('\n').filter(line => line.trim().length > 0);
193
+ for (const line of lines) {
194
+ try {
195
+ const task = JSON.parse(line);
196
+ tasks.push(task);
197
+ }
198
+ catch (error) {
199
+ console.error('Failed to parse task line:', error);
200
+ }
201
+ }
202
+ return tasks;
203
+ }
204
+ /**
205
+ * Write tasks array to JSONL file
206
+ */
207
+ async writeTasks(loopId, tasks) {
208
+ await this.ensureLoopDir(loopId);
209
+ const filePath = this.getTasksPath(loopId);
210
+ // Create backup if file exists
211
+ if (existsSync(filePath)) {
212
+ const backupPath = `${filePath}.backup`;
213
+ await copyFile(filePath, backupPath).catch(() => { });
214
+ }
215
+ // Write each task as a JSON line
216
+ const jsonlContent = tasks.map(t => JSON.stringify(t)).join('\n');
217
+ await writeFile(filePath, jsonlContent, 'utf-8');
218
+ }
219
+ /**
220
+ * Append single task to JSONL file
221
+ */
222
+ async appendTask(loopId, task) {
223
+ await this.ensureLoopDir(loopId);
224
+ const filePath = this.getTasksPath(loopId);
225
+ // Create backup if file exists
226
+ if (existsSync(filePath)) {
227
+ const backupPath = `${filePath}.backup`;
228
+ await copyFile(filePath, backupPath).catch(() => { });
229
+ }
230
+ // Append task as new line
231
+ const line = JSON.stringify(task) + '\n';
232
+ await writeFile(filePath, line, { flag: 'a' });
233
+ }
234
+ /**
235
+ * Ensure loop directory exists
236
+ */
237
+ async ensureLoopDir(loopId) {
238
+ const dirPath = join(this.baseDir, this.sanitizeLoopId(loopId));
239
+ if (!existsSync(dirPath)) {
240
+ await mkdir(dirPath, { recursive: true });
241
+ }
242
+ }
243
+ /**
244
+ * Generate unique task ID
245
+ */
246
+ generateTaskId() {
247
+ const timestamp = Date.now();
248
+ const random = randomBytes(4).toString('hex');
249
+ return `task-${timestamp}-${random}`;
250
+ }
251
+ /**
252
+ * Sanitize loop ID for filesystem usage
253
+ */
254
+ sanitizeLoopId(loopId) {
255
+ // Remove any path traversal characters
256
+ return loopId.replace(/[\/\\]/g, '-').replace(/\.\./g, '').replace(/^\./, '');
257
+ }
258
+ /**
259
+ * Reorder tasks array by updating order indices sequentially
260
+ */
261
+ reorderTasksByOrder(tasks) {
262
+ return tasks
263
+ .sort((a, b) => a.order - b.order)
264
+ .map((task, index) => ({
265
+ ...task,
266
+ order: index
267
+ }));
268
+ }
269
+ }
270
+ //# sourceMappingURL=loop-task-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-task-manager.js","sourceRoot":"","sources":["../../src/tools/loop-task-manager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from './tool.js';
2
2
  export * from './session.js';
3
3
  export * from './config.js';
4
+ export * from './loop.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './tool.js';
2
2
  export * from './session.js';
3
3
  export * from './config.js';
4
+ export * from './loop.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}