centaurus-cli 2.8.5 → 2.8.7

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 (115) hide show
  1. package/dist/cli-adapter.d.ts +85 -0
  2. package/dist/cli-adapter.d.ts.map +1 -1
  3. package/dist/cli-adapter.js +769 -28
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/config/slash-commands.d.ts +2 -0
  6. package/dist/config/slash-commands.d.ts.map +1 -1
  7. package/dist/config/slash-commands.js +31 -1
  8. package/dist/config/slash-commands.js.map +1 -1
  9. package/dist/context/handlers/docker-handler.js.map +1 -1
  10. package/dist/context/handlers/ssh-handler.d.ts +16 -1
  11. package/dist/context/handlers/ssh-handler.d.ts.map +1 -1
  12. package/dist/context/handlers/ssh-handler.js +57 -12
  13. package/dist/context/handlers/ssh-handler.js.map +1 -1
  14. package/dist/context/subshell-handler.d.ts +14 -0
  15. package/dist/context/subshell-handler.d.ts.map +1 -1
  16. package/dist/hooks/useTerminalDimensions.d.ts +41 -0
  17. package/dist/hooks/useTerminalDimensions.d.ts.map +1 -0
  18. package/dist/hooks/useTerminalDimensions.js +84 -0
  19. package/dist/hooks/useTerminalDimensions.js.map +1 -0
  20. package/dist/index.js +27 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/services/api-client.d.ts +24 -0
  23. package/dist/services/api-client.d.ts.map +1 -1
  24. package/dist/services/api-client.js +27 -0
  25. package/dist/services/api-client.js.map +1 -1
  26. package/dist/services/auth-handler.js +1 -1
  27. package/dist/services/auth-handler.js.map +1 -1
  28. package/dist/services/clipboard-service.d.ts +42 -0
  29. package/dist/services/clipboard-service.d.ts.map +1 -0
  30. package/dist/services/clipboard-service.js +217 -0
  31. package/dist/services/clipboard-service.js.map +1 -0
  32. package/dist/services/local-chat-storage.d.ts +154 -0
  33. package/dist/services/local-chat-storage.d.ts.map +1 -0
  34. package/dist/services/local-chat-storage.js +258 -0
  35. package/dist/services/local-chat-storage.js.map +1 -0
  36. package/dist/tools/grep-search.d.ts +5 -0
  37. package/dist/tools/grep-search.d.ts.map +1 -1
  38. package/dist/tools/grep-search.js +68 -16
  39. package/dist/tools/grep-search.js.map +1 -1
  40. package/dist/tools/plan-mode.d.ts +57 -6
  41. package/dist/tools/plan-mode.d.ts.map +1 -1
  42. package/dist/tools/plan-mode.js +297 -46
  43. package/dist/tools/plan-mode.js.map +1 -1
  44. package/dist/tools/read-binary-file.d.ts +10 -0
  45. package/dist/tools/read-binary-file.d.ts.map +1 -0
  46. package/dist/tools/read-binary-file.js +210 -0
  47. package/dist/tools/read-binary-file.js.map +1 -0
  48. package/dist/types/index.d.ts +7 -1
  49. package/dist/types/index.d.ts.map +1 -1
  50. package/dist/ui/components/App.d.ts +35 -0
  51. package/dist/ui/components/App.d.ts.map +1 -1
  52. package/dist/ui/components/App.js +608 -16
  53. package/dist/ui/components/App.js.map +1 -1
  54. package/dist/ui/components/ClipboardImageAutocomplete.d.ts +14 -0
  55. package/dist/ui/components/ClipboardImageAutocomplete.d.ts.map +1 -0
  56. package/dist/ui/components/ClipboardImageAutocomplete.js +39 -0
  57. package/dist/ui/components/ClipboardImageAutocomplete.js.map +1 -0
  58. package/dist/ui/components/ConnectionStatusMessage.d.ts +1 -1
  59. package/dist/ui/components/ConnectionStatusMessage.d.ts.map +1 -1
  60. package/dist/ui/components/ConnectionStatusMessage.js +21 -0
  61. package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
  62. package/dist/ui/components/DetailedPlanReviewScreen.d.ts +17 -0
  63. package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +1 -0
  64. package/dist/ui/components/DetailedPlanReviewScreen.js +110 -0
  65. package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -0
  66. package/dist/ui/components/InputBox.d.ts +2 -1
  67. package/dist/ui/components/InputBox.d.ts.map +1 -1
  68. package/dist/ui/components/InputBox.js +399 -28
  69. package/dist/ui/components/InputBox.js.map +1 -1
  70. package/dist/ui/components/InteractiveShell.d.ts.map +1 -1
  71. package/dist/ui/components/InteractiveShell.js +20 -6
  72. package/dist/ui/components/InteractiveShell.js.map +1 -1
  73. package/dist/ui/components/MessageDisplay.d.ts +6 -0
  74. package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
  75. package/dist/ui/components/MessageDisplay.js +66 -3
  76. package/dist/ui/components/MessageDisplay.js.map +1 -1
  77. package/dist/ui/components/PlanAcceptedMessage.d.ts +8 -0
  78. package/dist/ui/components/PlanAcceptedMessage.d.ts.map +1 -1
  79. package/dist/ui/components/PlanAcceptedMessage.js +26 -8
  80. package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
  81. package/dist/ui/components/StreamingMessageDisplay.d.ts +3 -0
  82. package/dist/ui/components/StreamingMessageDisplay.d.ts.map +1 -1
  83. package/dist/ui/components/StreamingMessageDisplay.js +10 -6
  84. package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
  85. package/dist/ui/components/TaskCompletedMessage.d.ts.map +1 -1
  86. package/dist/ui/components/TaskCompletedMessage.js +4 -4
  87. package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
  88. package/dist/ui/components/TaskProgressIndicator.d.ts +18 -0
  89. package/dist/ui/components/TaskProgressIndicator.d.ts.map +1 -0
  90. package/dist/ui/components/TaskProgressIndicator.js +72 -0
  91. package/dist/ui/components/TaskProgressIndicator.js.map +1 -0
  92. package/dist/ui/components/ThinkingDisplay.d.ts +3 -0
  93. package/dist/ui/components/ThinkingDisplay.d.ts.map +1 -1
  94. package/dist/ui/components/ThinkingDisplay.js +6 -4
  95. package/dist/ui/components/ThinkingDisplay.js.map +1 -1
  96. package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
  97. package/dist/ui/components/ToolExecutionMessage.js +85 -15
  98. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  99. package/dist/utils/custom-commands-manager.d.ts +59 -0
  100. package/dist/utils/custom-commands-manager.d.ts.map +1 -0
  101. package/dist/utils/custom-commands-manager.js +142 -0
  102. package/dist/utils/custom-commands-manager.js.map +1 -0
  103. package/dist/utils/input-classifier.d.ts +10 -11
  104. package/dist/utils/input-classifier.d.ts.map +1 -1
  105. package/dist/utils/input-classifier.js +299 -75
  106. package/dist/utils/input-classifier.js.map +1 -1
  107. package/dist/utils/terminal-output.d.ts.map +1 -1
  108. package/dist/utils/terminal-output.js +110 -14
  109. package/dist/utils/terminal-output.js.map +1 -1
  110. package/dist/utils/unicode-sanitizer.d.ts +44 -0
  111. package/dist/utils/unicode-sanitizer.d.ts.map +1 -0
  112. package/dist/utils/unicode-sanitizer.js +211 -0
  113. package/dist/utils/unicode-sanitizer.js.map +1 -0
  114. package/models-config.json +2 -3
  115. package/package.json +7 -3
@@ -1,28 +1,49 @@
1
1
  /**
2
2
  * Plan Mode - Structured Task Planning and Execution
3
- * Enables AI to create structured plans and track task completion
3
+ * Enables AI to create structured plans with hierarchical tasks and track completion
4
+ *
5
+ * Enhanced Features:
6
+ * - Hierarchical tasks with subtasks (e.g., Task 1 -> 1.1, 1.2, 1.3)
7
+ * - Design summary for context understanding
8
+ * - Phased execution (one task at a time)
9
+ * - Subtask-level completion tracking
4
10
  */
11
+ // ============================================================================
12
+ // STATE
13
+ // ============================================================================
5
14
  // In-memory plan state
6
15
  let currentPlan = null;
16
+ // ============================================================================
17
+ // TOOLS
18
+ // ============================================================================
7
19
  /**
8
20
  * Create Plan Tool
9
- * AI uses this to generate a structured plan with tasks
21
+ * AI uses this to generate a structured plan with hierarchical tasks
10
22
  */
11
23
  export const createPlanTool = {
12
24
  schema: {
13
25
  name: 'create_plan',
14
- description: `Use this tool when in planning mode to create a structured implementation plan.
26
+ description: `Use this tool when in planning mode to create a detailed implementation plan.
15
27
  This will present the plan to the user for review and approval before execution begins.
16
28
 
17
29
  The plan should include:
18
30
  1. A clear title describing what will be accomplished
19
- 2. A brief summary of the approach
20
- 3. A numbered list of concrete, actionable tasks
31
+ 2. A detailed design summary explaining your understanding of the codebase and approach
32
+ 3. A brief summary of the overall approach
33
+ 4. A numbered list of main tasks, each optionally containing subtasks
21
34
 
22
35
  IMPORTANT: Only use this tool when in planning mode. Each task should be:
23
36
  - Specific and actionable
24
- - Independent enough to be marked complete individually
25
- - Ordered in a logical sequence`,
37
+ - Can have subtasks for more granular steps
38
+ - Ordered in a logical sequence
39
+
40
+ Example structure:
41
+ - Task 1: Set up core infrastructure
42
+ - 1.1: Create directory structure
43
+ - 1.2: Define TypeScript interfaces
44
+ - Task 2: Implement main feature
45
+ - 2.1: Create component files
46
+ - 2.2: Add unit tests`,
26
47
  parameters: {
27
48
  type: 'object',
28
49
  properties: {
@@ -30,9 +51,13 @@ IMPORTANT: Only use this tool when in planning mode. Each task should be:
30
51
  type: 'string',
31
52
  description: 'A clear, concise title for the plan'
32
53
  },
54
+ designSummary: {
55
+ type: 'string',
56
+ description: 'Detailed understanding of the codebase and how the changes will be implemented. Include architecture decisions, file structure understanding, and implementation approach.'
57
+ },
33
58
  summary: {
34
59
  type: 'string',
35
- description: 'Brief summary of the overall approach (1-2 sentences)'
60
+ description: 'Brief 1-2 sentence summary of the overall approach'
36
61
  },
37
62
  tasks: {
38
63
  type: 'array',
@@ -41,17 +66,39 @@ IMPORTANT: Only use this tool when in planning mode. Each task should be:
41
66
  properties: {
42
67
  description: {
43
68
  type: 'string',
44
- description: 'Clear description of what this task accomplishes'
69
+ description: 'Clear description of what this main task accomplishes'
70
+ },
71
+ subtasks: {
72
+ type: 'array',
73
+ items: {
74
+ type: 'object',
75
+ properties: {
76
+ description: {
77
+ type: 'string',
78
+ description: 'Specific subtask description'
79
+ },
80
+ requirements: {
81
+ type: 'string',
82
+ description: 'Optional traceability requirements'
83
+ }
84
+ },
85
+ required: ['description']
86
+ },
87
+ description: 'Optional list of subtasks within this main task'
45
88
  },
46
89
  complexity: {
47
90
  type: 'string',
48
91
  enum: ['low', 'medium', 'high'],
49
92
  description: 'Estimated complexity of the task'
93
+ },
94
+ requirements: {
95
+ type: 'string',
96
+ description: 'Optional traceability requirements'
50
97
  }
51
98
  },
52
99
  required: ['description']
53
100
  },
54
- description: 'List of tasks to execute, in order'
101
+ description: 'List of main tasks to execute, in order'
55
102
  }
56
103
  },
57
104
  required: ['title', 'summary', 'tasks']
@@ -59,6 +106,7 @@ IMPORTANT: Only use this tool when in planning mode. Each task should be:
59
106
  },
60
107
  async execute(args, context) {
61
108
  const title = args.title;
109
+ const designSummary = args.designSummary || '';
62
110
  const summary = args.summary;
63
111
  const tasks = args.tasks;
64
112
  if (!title || title.trim().length === 0) {
@@ -67,20 +115,29 @@ IMPORTANT: Only use this tool when in planning mode. Each task should be:
67
115
  if (!tasks || tasks.length === 0) {
68
116
  throw new Error('Plan must have at least one task');
69
117
  }
70
- // Create the plan object
118
+ // Create the plan object with hierarchical structure
71
119
  const plan = {
72
120
  title: title.trim(),
121
+ designSummary: designSummary?.trim() || '',
73
122
  summary: summary?.trim() || '',
74
- steps: tasks.map((task, index) => ({
75
- id: `task_${index + 1}`,
123
+ steps: tasks.map((task, taskIndex) => ({
124
+ id: `task_${taskIndex + 1}`,
76
125
  description: task.description.trim(),
126
+ subtasks: (task.subtasks || []).map((subtask, subtaskIndex) => ({
127
+ id: `${taskIndex + 1}.${subtaskIndex + 1}`,
128
+ description: subtask.description.trim(),
129
+ status: 'pending',
130
+ requirements: subtask.requirements?.trim()
131
+ })),
77
132
  status: 'pending',
78
- estimatedComplexity: task.complexity
133
+ estimatedComplexity: task.complexity,
134
+ requirements: task.requirements?.trim()
79
135
  })),
80
136
  createdAt: new Date(),
81
137
  approved: false,
82
138
  isActive: false,
83
- currentTaskIndex: 0
139
+ currentTaskIndex: 0,
140
+ currentSubtaskIndex: -1
84
141
  };
85
142
  currentPlan = plan;
86
143
  // Return confirmation - the UI will handle displaying the plan
@@ -89,29 +146,33 @@ IMPORTANT: Only use this tool when in planning mode. Each task should be:
89
146
  };
90
147
  /**
91
148
  * Mark Task Complete Tool
92
- * AI uses this to mark individual tasks as completed during execution
149
+ * AI uses this to mark individual tasks or subtasks as completed during execution
93
150
  */
94
151
  export const markTaskCompleteTool = {
95
152
  schema: {
96
153
  name: 'mark_task_complete',
97
- description: `Use this tool to mark a task as completed in the current plan.
98
- Call this after successfully completing each task in the plan.
154
+ description: `Use this tool to mark a task or subtask as completed in the current plan.
155
+ Call this after successfully completing each task/subtask in the plan.
99
156
 
100
157
  This will:
101
- 1. Update the task status to 'completed'
158
+ 1. Update the task/subtask status to 'completed'
102
159
  2. Show a completion message in the UI
103
- 3. Automatically advance to the next task
160
+ 3. Automatically advance to the next task/subtask
161
+
162
+ You can mark:
163
+ - A main task: task_number=2
164
+ - A subtask: task_number="2.1" (marks subtask 1 of task 2)
104
165
 
105
166
  IMPORTANT:
106
167
  - Must have an active approved plan
107
- - Call this for each task as you complete it
108
- - After marking the LAST task complete, call task_complete to end the session`,
168
+ - Mark subtasks complete as you finish them
169
+ - After marking the LAST task/subtask complete, call task_complete to end the session`,
109
170
  parameters: {
110
171
  type: 'object',
111
172
  properties: {
112
173
  task_number: {
113
- type: 'number',
114
- description: 'The task number to mark complete (1-indexed)'
174
+ type: 'string',
175
+ description: 'The task number to mark complete. Use integer for main task (e.g., "2") or dot notation for subtask (e.g., "2.1")'
115
176
  },
116
177
  completion_note: {
117
178
  type: 'string',
@@ -128,31 +189,81 @@ IMPORTANT:
128
189
  if (!currentPlan.approved || !currentPlan.isActive) {
129
190
  throw new Error('Plan must be approved and active before marking tasks complete.');
130
191
  }
131
- const taskNumber = args.task_number;
192
+ const taskNumberStr = String(args.task_number);
132
193
  const completionNote = args.completion_note;
133
- if (taskNumber < 1 || taskNumber > currentPlan.steps.length) {
194
+ // Parse task number - can be "2" or "2.1"
195
+ const parts = taskNumberStr.split('.');
196
+ const mainTaskNum = parseInt(parts[0], 10);
197
+ const subtaskNum = parts.length > 1 ? parseInt(parts[1], 10) : null;
198
+ if (isNaN(mainTaskNum) || mainTaskNum < 1 || mainTaskNum > currentPlan.steps.length) {
134
199
  throw new Error(`Invalid task number. Must be between 1 and ${currentPlan.steps.length}.`);
135
200
  }
136
- const taskIndex = taskNumber - 1;
201
+ const taskIndex = mainTaskNum - 1;
137
202
  const task = currentPlan.steps[taskIndex];
203
+ // Handle subtask completion
204
+ if (subtaskNum !== null) {
205
+ if (!task.subtasks || subtaskNum < 1 || subtaskNum > task.subtasks.length) {
206
+ throw new Error(`Invalid subtask number. Task ${mainTaskNum} has ${task.subtasks?.length || 0} subtasks.`);
207
+ }
208
+ const subtaskIndex = subtaskNum - 1;
209
+ const subtask = task.subtasks[subtaskIndex];
210
+ if (subtask.status === 'completed') {
211
+ return `Subtask ${taskNumberStr} is already marked as completed.`;
212
+ }
213
+ // Mark subtask complete
214
+ subtask.status = 'completed';
215
+ subtask.completedAt = new Date();
216
+ // Check if all subtasks are complete, then mark main task as complete
217
+ const allSubtasksComplete = task.subtasks.every(st => st.status === 'completed' || st.status === 'skipped');
218
+ if (allSubtasksComplete) {
219
+ task.status = 'completed';
220
+ task.completedAt = new Date();
221
+ }
222
+ else {
223
+ task.status = 'in_progress';
224
+ }
225
+ // Update current subtask index
226
+ const nextPendingSubtaskIndex = task.subtasks.findIndex((st, idx) => idx > subtaskIndex && st.status === 'pending');
227
+ currentPlan.currentSubtaskIndex = nextPendingSubtaskIndex;
228
+ // Calculate progress
229
+ const { completedCount, totalCount, allComplete } = calculateProgress();
230
+ const result = {
231
+ type: 'subtask',
232
+ taskNumber: taskNumberStr,
233
+ taskDescription: subtask.description,
234
+ completionNote: completionNote || null,
235
+ completedCount,
236
+ totalCount,
237
+ allComplete,
238
+ nextSubtask: nextPendingSubtaskIndex !== -1 ? task.subtasks[nextPendingSubtaskIndex].description : null,
239
+ mainTaskComplete: allSubtasksComplete
240
+ };
241
+ return `TASK_COMPLETED:${JSON.stringify(result)}`;
242
+ }
243
+ // Handle main task completion (mark all subtasks as complete too)
138
244
  if (task.status === 'completed') {
139
- return `Task ${taskNumber} is already marked as completed.`;
245
+ return `Task ${mainTaskNum} is already marked as completed.`;
140
246
  }
141
- // Mark the task as complete
247
+ // Mark the main task and all its subtasks as complete
142
248
  task.status = 'completed';
143
249
  task.completedAt = new Date();
250
+ task.subtasks.forEach(st => {
251
+ if (st.status !== 'completed' && st.status !== 'skipped') {
252
+ st.status = 'completed';
253
+ st.completedAt = new Date();
254
+ }
255
+ });
144
256
  // Update current task index to next pending task
145
257
  const nextPendingIndex = currentPlan.steps.findIndex((step, idx) => idx > taskIndex && step.status === 'pending');
146
258
  if (nextPendingIndex !== -1) {
147
259
  currentPlan.currentTaskIndex = nextPendingIndex;
260
+ currentPlan.currentSubtaskIndex = -1;
148
261
  }
149
- // Count completed and remaining
150
- const completedCount = currentPlan.steps.filter(s => s.status === 'completed').length;
151
- const totalCount = currentPlan.steps.length;
152
- const allComplete = completedCount === totalCount;
153
- // Return structured response for UI parsing
262
+ // Calculate progress
263
+ const { completedCount, totalCount, allComplete } = calculateProgress();
154
264
  const result = {
155
- taskNumber,
265
+ type: 'task',
266
+ taskNumber: mainTaskNum,
156
267
  taskDescription: task.description,
157
268
  completionNote: completionNote || null,
158
269
  completedCount,
@@ -163,6 +274,37 @@ IMPORTANT:
163
274
  return `TASK_COMPLETED:${JSON.stringify(result)}`;
164
275
  }
165
276
  };
277
+ // ============================================================================
278
+ // HELPER FUNCTIONS
279
+ // ============================================================================
280
+ /**
281
+ * Calculate overall progress including subtasks
282
+ */
283
+ function calculateProgress() {
284
+ if (!currentPlan) {
285
+ return { completedCount: 0, totalCount: 0, allComplete: false };
286
+ }
287
+ let completedCount = 0;
288
+ let totalCount = 0;
289
+ currentPlan.steps.forEach(step => {
290
+ if (step.subtasks.length > 0) {
291
+ // Count subtasks
292
+ totalCount += step.subtasks.length;
293
+ completedCount += step.subtasks.filter(st => st.status === 'completed').length;
294
+ }
295
+ else {
296
+ // Count the main task if no subtasks
297
+ totalCount += 1;
298
+ if (step.status === 'completed')
299
+ completedCount += 1;
300
+ }
301
+ });
302
+ return {
303
+ completedCount,
304
+ totalCount,
305
+ allComplete: completedCount === totalCount && totalCount > 0
306
+ };
307
+ }
166
308
  /**
167
309
  * Set the current plan (used by CLI adapter)
168
310
  */
@@ -189,11 +331,12 @@ export function approvePlan() {
189
331
  currentPlan.approved = true;
190
332
  currentPlan.isActive = true;
191
333
  currentPlan.currentTaskIndex = 0;
334
+ currentPlan.currentSubtaskIndex = currentPlan.steps[0]?.subtasks?.length > 0 ? 0 : -1;
192
335
  }
193
336
  return currentPlan;
194
337
  }
195
338
  /**
196
- * Mark a task as complete by task number
339
+ * Mark a task as complete by task number (for compatibility)
197
340
  */
198
341
  export function markTaskComplete(taskNumber) {
199
342
  if (!currentPlan || taskNumber < 1 || taskNumber > currentPlan.steps.length) {
@@ -202,15 +345,61 @@ export function markTaskComplete(taskNumber) {
202
345
  const task = currentPlan.steps[taskNumber - 1];
203
346
  task.status = 'completed';
204
347
  task.completedAt = new Date();
348
+ // Also mark all subtasks as complete
349
+ task.subtasks.forEach(st => {
350
+ st.status = 'completed';
351
+ st.completedAt = new Date();
352
+ });
205
353
  return task;
206
354
  }
355
+ /**
356
+ * Get the current phase (task) with all its subtasks
357
+ */
358
+ export function getCurrentPhase() {
359
+ if (!currentPlan || !currentPlan.isActive)
360
+ return null;
361
+ const taskIndex = currentPlan.currentTaskIndex;
362
+ if (taskIndex < 0 || taskIndex >= currentPlan.steps.length)
363
+ return null;
364
+ const task = currentPlan.steps[taskIndex];
365
+ if (task.status === 'completed') {
366
+ // Find next pending task
367
+ const nextIndex = currentPlan.steps.findIndex((step, idx) => idx > taskIndex && step.status === 'pending');
368
+ if (nextIndex === -1)
369
+ return null;
370
+ return { taskNumber: nextIndex + 1, task: currentPlan.steps[nextIndex] };
371
+ }
372
+ return { taskNumber: taskIndex + 1, task };
373
+ }
374
+ /**
375
+ * Advance to the next phase after current task is complete
376
+ * Returns the new phase or null if all phases are done
377
+ */
378
+ export function advanceToNextPhase() {
379
+ if (!currentPlan || !currentPlan.isActive)
380
+ return null;
381
+ const currentTask = currentPlan.steps[currentPlan.currentTaskIndex];
382
+ // Mark current task as complete if not already
383
+ if (currentTask && currentTask.status !== 'completed') {
384
+ currentTask.status = 'completed';
385
+ currentTask.completedAt = new Date();
386
+ }
387
+ // Find next pending task
388
+ const nextIndex = currentPlan.steps.findIndex((step, idx) => idx > currentPlan.currentTaskIndex && step.status === 'pending');
389
+ if (nextIndex === -1) {
390
+ return null; // All phases complete
391
+ }
392
+ currentPlan.currentTaskIndex = nextIndex;
393
+ currentPlan.currentSubtaskIndex = currentPlan.steps[nextIndex].subtasks.length > 0 ? 0 : -1;
394
+ return { taskNumber: nextIndex + 1, task: currentPlan.steps[nextIndex] };
395
+ }
207
396
  /**
208
397
  * Get the next incomplete task
209
398
  */
210
399
  export function getNextIncompleteTask() {
211
400
  if (!currentPlan)
212
401
  return null;
213
- const index = currentPlan.steps.findIndex(step => step.status === 'pending');
402
+ const index = currentPlan.steps.findIndex(step => step.status === 'pending' || step.status === 'in_progress');
214
403
  if (index === -1)
215
404
  return null;
216
405
  return {
@@ -227,18 +416,24 @@ export function areAllTasksComplete() {
227
416
  return currentPlan.steps.every(step => step.status === 'completed' || step.status === 'skipped');
228
417
  }
229
418
  /**
230
- * Get plan progress summary
419
+ * Get plan progress summary (including subtasks)
231
420
  */
232
421
  export function getPlanProgress() {
233
422
  if (!currentPlan)
234
423
  return null;
235
- const completed = currentPlan.steps.filter(s => s.status === 'completed').length;
236
- const total = currentPlan.steps.length;
237
- const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
238
- return { completed, total, percentage };
424
+ const { completedCount, totalCount } = calculateProgress();
425
+ const percentage = totalCount > 0 ? Math.round((completedCount / totalCount) * 100) : 0;
426
+ const completedTasks = currentPlan.steps.filter(s => s.status === 'completed').length;
427
+ return {
428
+ completed: completedCount,
429
+ total: totalCount,
430
+ percentage,
431
+ currentTask: currentPlan.currentTaskIndex + 1,
432
+ totalTasks: currentPlan.steps.length
433
+ };
239
434
  }
240
435
  /**
241
- * Generate plan context for AI system prompt injection
436
+ * Generate plan context for AI system prompt injection (shows all tasks)
242
437
  */
243
438
  export function getPlanContextForPrompt() {
244
439
  if (!currentPlan || !currentPlan.isActive)
@@ -247,15 +442,25 @@ export function getPlanContextForPrompt() {
247
442
  if (!progress)
248
443
  return '';
249
444
  let context = `\n\n## ACTIVE PLAN: ${currentPlan.title}\n`;
250
- context += `Progress: ${progress.completed}/${progress.total} tasks completed (${progress.percentage}%)\n\n`;
445
+ if (currentPlan.designSummary) {
446
+ context += `\n### Design Summary:\n${currentPlan.designSummary}\n`;
447
+ }
448
+ context += `\nProgress: ${progress.completed}/${progress.total} items completed (${progress.percentage}%)\n`;
449
+ context += `Current Task: ${progress.currentTask}/${progress.totalTasks}\n\n`;
251
450
  context += `### Tasks:\n`;
252
451
  currentPlan.steps.forEach((step, index) => {
253
452
  const statusIcon = step.status === 'completed' ? '✅' :
254
453
  step.status === 'in_progress' ? '🔄' :
255
454
  step.status === 'skipped' ? '⏭️' : '⏳';
256
- const isCurrent = index === currentPlan.currentTaskIndex && step.status === 'pending';
455
+ const isCurrent = index === currentPlan.currentTaskIndex && step.status !== 'completed';
257
456
  const marker = isCurrent ? ' 👈 CURRENT' : '';
258
457
  context += `${index + 1}. ${statusIcon} ${step.description}${marker}\n`;
458
+ // Add subtasks
459
+ step.subtasks.forEach((subtask, subIndex) => {
460
+ const subStatusIcon = subtask.status === 'completed' ? '✅' :
461
+ subtask.status === 'in_progress' ? '🔄' : '⬜';
462
+ context += ` ${index + 1}.${subIndex + 1}. ${subStatusIcon} ${subtask.description}\n`;
463
+ });
259
464
  });
260
465
  const nextTask = getNextIncompleteTask();
261
466
  if (nextTask) {
@@ -267,6 +472,49 @@ export function getPlanContextForPrompt() {
267
472
  }
268
473
  return context;
269
474
  }
475
+ /**
476
+ * Generate context for only the current phase (single task with its subtasks)
477
+ * Used for phased execution where AI only sees one task at a time
478
+ */
479
+ export function getPhaseContextForPrompt() {
480
+ if (!currentPlan || !currentPlan.isActive)
481
+ return '';
482
+ const currentPhase = getCurrentPhase();
483
+ if (!currentPhase) {
484
+ return `\n**ALL TASKS COMPLETE**: Call task_complete with a summary of what was accomplished.\n`;
485
+ }
486
+ const progress = getPlanProgress();
487
+ const { taskNumber, task } = currentPhase;
488
+ let context = `\n\n## CURRENT TASK: ${currentPlan.title}\n`;
489
+ if (currentPlan.designSummary) {
490
+ context += `\n### Design Context:\n${currentPlan.designSummary}\n`;
491
+ }
492
+ context += `\n### Overall Progress: Task ${taskNumber}/${currentPlan.steps.length}\n`;
493
+ context += `${progress ? `(${progress.completed}/${progress.total} items completed - ${progress.percentage}%)` : ''}\n\n`;
494
+ context += `### YOUR CURRENT TASK:\n`;
495
+ context += `**Task ${taskNumber}: ${task.description}**\n\n`;
496
+ if (task.subtasks.length > 0) {
497
+ context += `Subtasks to complete:\n`;
498
+ task.subtasks.forEach((subtask, index) => {
499
+ const subStatusIcon = subtask.status === 'completed' ? '✅' :
500
+ subtask.status === 'in_progress' ? '🔄' : '⬜';
501
+ const isCurrentSubtask = index === currentPlan.currentSubtaskIndex;
502
+ const marker = isCurrentSubtask && subtask.status === 'pending' ? ' 👈 CURRENT' : '';
503
+ context += ` ${taskNumber}.${index + 1}. ${subStatusIcon} ${subtask.description}${marker}\n`;
504
+ });
505
+ context += `\n**Instructions**: Complete each subtask in order.\n`;
506
+ context += `After completing a subtask, call: mark_task_complete(task_number="${taskNumber}.X")\n`;
507
+ context += `When all subtasks are done, the main task will be automatically marked complete.\n`;
508
+ }
509
+ else {
510
+ context += `\n**Instructions**: Complete this task.\n`;
511
+ context += `When done, call: mark_task_complete(task_number="${taskNumber}")\n`;
512
+ }
513
+ return context;
514
+ }
515
+ // ============================================================================
516
+ // EXPORTS
517
+ // ============================================================================
270
518
  export default {
271
519
  createPlanTool,
272
520
  markTaskCompleteTool,
@@ -275,9 +523,12 @@ export default {
275
523
  clearPlan,
276
524
  approvePlan,
277
525
  markTaskComplete,
526
+ getCurrentPhase,
527
+ advanceToNextPhase,
278
528
  getNextIncompleteTask,
279
529
  areAllTasksComplete,
280
530
  getPlanProgress,
281
- getPlanContextForPrompt
531
+ getPlanContextForPrompt,
532
+ getPhaseContextForPrompt
282
533
  };
283
534
  //# sourceMappingURL=plan-mode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan-mode.js","sourceRoot":"","sources":["../../src/tools/plan-mode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-mode.js","sourceRoot":"","sources":["../../src/tools/plan-mode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Read Binary File Tool
3
+ *
4
+ * Enables the AI to read non-text files (PDFs, images, documents) by uploading
5
+ * them to Google Cloud Storage and attaching them to the conversation context
6
+ * for Vertex AI multimodal understanding.
7
+ */
8
+ import { Tool } from './types.js';
9
+ export declare const readBinaryFileTool: Tool;
10
+ //# sourceMappingURL=read-binary-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-binary-file.d.ts","sourceRoot":"","sources":["../../src/tools/read-binary-file.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAyDlC,eAAO,MAAM,kBAAkB,EAAE,IA+JhC,CAAC"}