@vybestack/llxprt-code-core 0.1.14 → 0.1.15
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.
- package/README.md +53 -0
- package/dist/src/code_assist/oauth2.test.d.ts +1 -1
- package/dist/src/code_assist/oauth2.test.js +15 -15
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/config/config.d.ts +15 -1
- package/dist/src/config/config.js +27 -5
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +5 -0
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/flashFallback.test.js +12 -46
- package/dist/src/config/flashFallback.test.js.map +1 -1
- package/dist/src/config/models.d.ts +1 -0
- package/dist/src/config/models.js +1 -0
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/core/client.d.ts +4 -0
- package/dist/src/core/client.js +75 -15
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.d.ts +1 -1
- package/dist/src/core/client.test.js +204 -22
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +2 -7
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +6 -2
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +1 -3
- package/dist/src/core/coreToolScheduler.js +9 -4
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +76 -1
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.js +1 -0
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/googleGenAIWrapper.d.ts +21 -0
- package/dist/src/core/googleGenAIWrapper.js +36 -0
- package/dist/src/core/googleGenAIWrapper.js.map +1 -0
- package/dist/src/core/googleGenAIWrapper.test.d.ts +6 -0
- package/dist/src/core/googleGenAIWrapper.test.js +104 -0
- package/dist/src/core/googleGenAIWrapper.test.js.map +1 -0
- package/dist/src/core/logger.d.ts +1 -0
- package/dist/src/core/logger.js +22 -8
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/logger.test.js +60 -9
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +8 -1
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +3 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.js +1 -1
- package/dist/src/core/tokenLimits.js +1 -0
- package/dist/src/core/tokenLimits.js.map +1 -1
- package/dist/src/core/turn.d.ts +2 -1
- package/dist/src/core/turn.js +4 -2
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +2 -2
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +8 -6
- package/dist/src/ide/ide-client.js +73 -36
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +212 -107
- package/dist/src/ide/ideContext.js +45 -44
- package/dist/src/ide/ideContext.js.map +1 -1
- package/dist/src/ide/ideContext.test.js +254 -100
- package/dist/src/ide/ideContext.test.js.map +1 -1
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/integration-tests/todo-system.test.d.ts +6 -0
- package/dist/src/integration-tests/todo-system.test.js +610 -0
- package/dist/src/integration-tests/todo-system.test.js.map +1 -0
- package/dist/src/mcp/oauth-provider.d.ts +5 -1
- package/dist/src/mcp/oauth-provider.js +36 -11
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +2 -2
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.d.ts +3 -1
- package/dist/src/mcp/oauth-token-storage.js +3 -1
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/oauth-utils.js +2 -2
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/oauth-utils.test.js +1 -1
- package/dist/src/mcp/oauth-utils.test.js.map +1 -1
- package/dist/src/prompts/mcp-prompts.d.ts +8 -0
- package/dist/src/prompts/mcp-prompts.js +13 -0
- package/dist/src/prompts/mcp-prompts.js.map +1 -0
- package/dist/src/prompts/prompt-registry.d.ts +26 -0
- package/dist/src/prompts/prompt-registry.js +47 -0
- package/dist/src/prompts/prompt-registry.js.map +1 -0
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.js +24 -9
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.js.map +1 -1
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +1 -1
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.js +8 -16
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.js +54 -6
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/services/complexity-analyzer.d.ts +92 -0
- package/dist/src/services/complexity-analyzer.js +287 -0
- package/dist/src/services/complexity-analyzer.js.map +1 -0
- package/dist/src/services/fileDiscoveryService.test.js +101 -60
- package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
- package/dist/src/services/gitService.test.d.ts +1 -1
- package/dist/src/services/gitService.test.js +65 -102
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/index.d.ts +9 -0
- package/dist/src/services/index.js +8 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/services/loopDetectionService.d.ts +3 -0
- package/dist/src/services/loopDetectionService.js +18 -0
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +90 -11
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +70 -0
- package/dist/src/services/shellExecutionService.js +152 -0
- package/dist/src/services/shellExecutionService.js.map +1 -0
- package/dist/src/services/shellExecutionService.test.d.ts +6 -0
- package/dist/src/services/shellExecutionService.test.js +258 -0
- package/dist/src/services/shellExecutionService.test.js.map +1 -0
- package/dist/src/services/todo-reminder-service.d.ts +42 -0
- package/dist/src/services/todo-reminder-service.js +77 -0
- package/dist/src/services/todo-reminder-service.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +2 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +59 -31
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +3 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +7 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +1 -0
- package/dist/src/telemetry/constants.js +1 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +2 -2
- package/dist/src/telemetry/index.js +2 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +18 -1
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +5 -0
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +8 -1
- package/dist/src/telemetry/types.js +12 -0
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/edit.js +2 -1
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/glob.test.js +7 -4
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.test.js +4 -4
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +26 -2
- package/dist/src/tools/mcp-client.js +64 -21
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +53 -1
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/modifiable-tool.test.js +51 -62
- package/dist/src/tools/modifiable-tool.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +8 -3
- package/dist/src/tools/shell.js +169 -114
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.d.ts +1 -1
- package/dist/src/tools/shell.test.js +298 -145
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/todo-read.d.ts +4 -1
- package/dist/src/tools/todo-read.js +136 -20
- package/dist/src/tools/todo-read.js.map +1 -1
- package/dist/src/tools/todo-read.test.js +10 -6
- package/dist/src/tools/todo-read.test.js.map +1 -1
- package/dist/src/tools/todo-schemas.d.ts +4 -4
- package/dist/src/tools/todo-write.d.ts +3 -0
- package/dist/src/tools/todo-write.js +96 -9
- package/dist/src/tools/todo-write.js.map +1 -1
- package/dist/src/tools/todo-write.test.js +17 -13
- package/dist/src/tools/todo-write.test.js.map +1 -1
- package/dist/src/tools/tool-context.d.ts +14 -0
- package/dist/src/tools/tool-context.js +7 -0
- package/dist/src/tools/tool-context.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +4 -1
- package/dist/src/tools/tool-registry.js +14 -5
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +2 -2
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +8 -1
- package/dist/src/tools/tools.js +2 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +18 -4
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.js +51 -27
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +57 -0
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/formatters.d.ts +6 -0
- package/dist/src/utils/formatters.js +16 -0
- package/dist/src/utils/formatters.js.map +1 -0
- package/dist/src/utils/nextSpeakerChecker.js +2 -2
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +2 -2
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/retry.d.ts +3 -0
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +37 -3
- package/dist/src/utils/shell-utils.js +110 -47
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +146 -396
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/textUtils.d.ts +13 -0
- package/dist/src/utils/textUtils.js +28 -0
- package/dist/src/utils/textUtils.js.map +1 -0
- package/package.json +2 -2
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
import { BaseTool, Icon } from './tools.js';
|
|
7
7
|
import { TodoStore } from './todo-store.js';
|
|
8
8
|
import { Type } from '@google/genai';
|
|
9
|
+
import { TodoReminderService } from '../services/todo-reminder-service.js';
|
|
9
10
|
export class TodoRead extends BaseTool {
|
|
10
11
|
static Name = 'todo_read';
|
|
12
|
+
reminderService = new TodoReminderService();
|
|
11
13
|
constructor() {
|
|
12
14
|
super(TodoRead.Name, 'TodoRead', 'Read the current todo list for the session. Returns all todos with their status, priority, and content.', Icon.LightBulb, {
|
|
13
15
|
type: Type.OBJECT,
|
|
@@ -20,47 +22,161 @@ export class TodoRead extends BaseTool {
|
|
|
20
22
|
}
|
|
21
23
|
async execute(_params, _signal, _updateOutput) {
|
|
22
24
|
// Get session and agent IDs from context
|
|
23
|
-
const sessionId = this.sessionId || 'default';
|
|
24
|
-
const agentId = this.agentId;
|
|
25
|
+
const sessionId = this.context?.sessionId || 'default';
|
|
26
|
+
const agentId = this.context?.agentId;
|
|
25
27
|
const store = new TodoStore(sessionId, agentId);
|
|
26
28
|
const todos = await store.readTodos();
|
|
27
29
|
if (todos.length === 0) {
|
|
30
|
+
// Check if this is part of a complex task (will be enhanced in Phase 5)
|
|
31
|
+
const isComplexTask = false; // Placeholder - will be determined by context
|
|
32
|
+
const reminder = this.reminderService.getReminderForEmptyTodos(isComplexTask);
|
|
33
|
+
const emptyOutput = '## Todo List\n\n' +
|
|
34
|
+
'No todos found.\n\n' +
|
|
35
|
+
'Use TodoWrite to create a task list when working on multi-step projects.';
|
|
28
36
|
return {
|
|
29
|
-
llmContent:
|
|
30
|
-
returnDisplay:
|
|
37
|
+
llmContent: emptyOutput + (reminder || ''),
|
|
38
|
+
returnDisplay: emptyOutput,
|
|
31
39
|
};
|
|
32
40
|
}
|
|
33
|
-
//
|
|
34
|
-
const
|
|
41
|
+
// Group and sort todos
|
|
42
|
+
const groupedTodos = this.groupTodosByStatus(todos);
|
|
35
43
|
// Format output
|
|
36
|
-
const output = this.formatTodos(
|
|
44
|
+
const output = this.formatTodos(groupedTodos, todos);
|
|
45
|
+
// Calculate metadata
|
|
46
|
+
const statistics = this.calculateStatistics(todos);
|
|
47
|
+
const suggestedAction = this.determineSuggestedAction(todos);
|
|
37
48
|
return {
|
|
38
49
|
llmContent: output,
|
|
39
50
|
returnDisplay: output,
|
|
51
|
+
metadata: {
|
|
52
|
+
totalTasks: todos.length,
|
|
53
|
+
statistics,
|
|
54
|
+
suggestedAction,
|
|
55
|
+
},
|
|
40
56
|
};
|
|
41
57
|
}
|
|
42
|
-
|
|
43
|
-
const statusOrder = { in_progress: 0, pending: 1, completed: 2 };
|
|
58
|
+
groupTodosByStatus(todos) {
|
|
44
59
|
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
60
|
+
const sortByPriority = (a, b) => priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
61
|
+
return {
|
|
62
|
+
inProgress: todos
|
|
63
|
+
.filter((t) => t.status === 'in_progress')
|
|
64
|
+
.sort(sortByPriority),
|
|
65
|
+
pending: todos.filter((t) => t.status === 'pending').sort(sortByPriority),
|
|
66
|
+
completed: todos
|
|
67
|
+
.filter((t) => t.status === 'completed')
|
|
68
|
+
.sort(sortByPriority),
|
|
69
|
+
};
|
|
51
70
|
}
|
|
52
|
-
formatTodos(
|
|
71
|
+
formatTodos(groupedTodos, allTodos) {
|
|
72
|
+
const priorityIndicators = {
|
|
73
|
+
high: '🔴',
|
|
74
|
+
medium: '🟡',
|
|
75
|
+
low: '🟢',
|
|
76
|
+
};
|
|
53
77
|
const statusIcons = {
|
|
54
78
|
in_progress: '⏳',
|
|
55
79
|
pending: '○',
|
|
56
80
|
completed: '✓',
|
|
57
81
|
};
|
|
58
|
-
let output = '
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
output +=
|
|
82
|
+
let output = '## Todo List\n\n';
|
|
83
|
+
// In Progress section
|
|
84
|
+
if (groupedTodos.inProgress.length > 0) {
|
|
85
|
+
output += '### In Progress\n\n';
|
|
86
|
+
for (const todo of groupedTodos.inProgress) {
|
|
87
|
+
const icon = statusIcons[todo.status];
|
|
88
|
+
const priorityIcon = priorityIndicators[todo.priority];
|
|
89
|
+
output += `${icon} **${todo.content}** ${priorityIcon} ${todo.priority}\n`;
|
|
90
|
+
}
|
|
91
|
+
output += '\n';
|
|
92
|
+
}
|
|
93
|
+
// Pending section
|
|
94
|
+
if (groupedTodos.pending.length > 0) {
|
|
95
|
+
output += '### Pending\n\n';
|
|
96
|
+
for (const todo of groupedTodos.pending) {
|
|
97
|
+
const icon = statusIcons[todo.status];
|
|
98
|
+
const priorityIcon = priorityIndicators[todo.priority];
|
|
99
|
+
output += `${icon} **${todo.content}** ${priorityIcon} ${todo.priority}\n`;
|
|
100
|
+
}
|
|
101
|
+
output += '\n';
|
|
102
|
+
}
|
|
103
|
+
// Completed section
|
|
104
|
+
if (groupedTodos.completed.length > 0) {
|
|
105
|
+
output += '### Completed\n\n';
|
|
106
|
+
for (const todo of groupedTodos.completed) {
|
|
107
|
+
const icon = statusIcons[todo.status];
|
|
108
|
+
const priorityIcon = priorityIndicators[todo.priority];
|
|
109
|
+
output += `${icon} **${todo.content}** ${priorityIcon} ${todo.priority}\n`;
|
|
110
|
+
}
|
|
111
|
+
output += '\n';
|
|
112
|
+
}
|
|
113
|
+
// Summary
|
|
114
|
+
const stats = this.calculateStatistics(allTodos);
|
|
115
|
+
output += '### Summary\n\n';
|
|
116
|
+
output += `- Total: ${stats.total} tasks\n`;
|
|
117
|
+
output += `- In Progress: ${stats.inProgress}\n`;
|
|
118
|
+
output += `- Pending: ${stats.pending}\n`;
|
|
119
|
+
output += `- Completed: ${stats.completed}\n\n`;
|
|
120
|
+
output += `Priority distribution:\n`;
|
|
121
|
+
output += `- High priority: ${stats.highPriority}\n`;
|
|
122
|
+
output += `- Medium priority: ${stats.mediumPriority}\n`;
|
|
123
|
+
output += `- Low priority: ${stats.lowPriority}\n\n`;
|
|
124
|
+
// Suggested Next Action
|
|
125
|
+
const suggestedAction = this.determineSuggestedAction(allTodos);
|
|
126
|
+
output += '### Suggested Next Action\n\n';
|
|
127
|
+
if (suggestedAction.type === 'all-complete') {
|
|
128
|
+
output += 'All tasks are completed\n';
|
|
129
|
+
}
|
|
130
|
+
else if (suggestedAction.type === 'continue') {
|
|
131
|
+
output += `Continue working on: **${suggestedAction.taskContent}**\n`;
|
|
132
|
+
}
|
|
133
|
+
else if (suggestedAction.type === 'start') {
|
|
134
|
+
output += `Consider starting: **${suggestedAction.taskContent}**\n`;
|
|
62
135
|
}
|
|
63
136
|
return output;
|
|
64
137
|
}
|
|
138
|
+
calculateStatistics(todos) {
|
|
139
|
+
return {
|
|
140
|
+
total: todos.length,
|
|
141
|
+
inProgress: todos.filter((t) => t.status === 'in_progress').length,
|
|
142
|
+
pending: todos.filter((t) => t.status === 'pending').length,
|
|
143
|
+
completed: todos.filter((t) => t.status === 'completed').length,
|
|
144
|
+
highPriority: todos.filter((t) => t.priority === 'high').length,
|
|
145
|
+
mediumPriority: todos.filter((t) => t.priority === 'medium').length,
|
|
146
|
+
lowPriority: todos.filter((t) => t.priority === 'low').length,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
determineSuggestedAction(todos) {
|
|
150
|
+
// Check if any tasks are in progress
|
|
151
|
+
const inProgressTasks = todos.filter((t) => t.status === 'in_progress');
|
|
152
|
+
if (inProgressTasks.length > 0) {
|
|
153
|
+
// Continue with highest priority in-progress task
|
|
154
|
+
const task = inProgressTasks.sort((a, b) => {
|
|
155
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
156
|
+
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
157
|
+
})[0];
|
|
158
|
+
return {
|
|
159
|
+
type: 'continue',
|
|
160
|
+
taskId: task.id,
|
|
161
|
+
taskContent: task.content,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// Check if any tasks are pending
|
|
165
|
+
const pendingTasks = todos.filter((t) => t.status === 'pending');
|
|
166
|
+
if (pendingTasks.length > 0) {
|
|
167
|
+
// Start with highest priority pending task
|
|
168
|
+
const task = pendingTasks.sort((a, b) => {
|
|
169
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
170
|
+
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
171
|
+
})[0];
|
|
172
|
+
return {
|
|
173
|
+
type: 'start',
|
|
174
|
+
taskId: task.id,
|
|
175
|
+
taskContent: task.content,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// All tasks are completed
|
|
179
|
+
return { type: 'all-complete' };
|
|
180
|
+
}
|
|
65
181
|
}
|
|
66
182
|
//# sourceMappingURL=todo-read.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todo-read.js","sourceRoot":"","sources":["../../../src/tools/todo-read.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAc,IAAI,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"todo-read.js","sourceRoot":"","sources":["../../../src/tools/todo-read.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAc,IAAI,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAI3E,MAAM,OAAO,QAAS,SAAQ,QAAoC;IAChE,MAAM,CAAU,IAAI,GAAG,WAAW,CAAC;IAC3B,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAEpD;QACE,KAAK,CACH,QAAQ,CAAC,IAAI,EACb,UAAU,EACV,yGAAyG,EACzG,IAAI,CAAC,SAAS,EACd;YACE,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,UAAU,EAAE,EAAE;SACf,EACD,IAAI,EAAE,mBAAmB;QACzB,KAAK,CACN,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,OAAuB;QACpC,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAuB,EACvB,OAAoB,EACpB,aAAwC;QAExC,yCAAyC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,SAAS,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QAEtC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QAEtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,wEAAwE;YACxE,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,8CAA8C;YAC3E,MAAM,QAAQ,GACZ,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;YAE/D,MAAM,WAAW,GACf,kBAAkB;gBAClB,qBAAqB;gBACrB,0EAA0E,CAAC;YAE7E,OAAO;gBACL,UAAU,EAAE,WAAW,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAC1C,aAAa,EAAE,WAAW;aAC3B,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEpD,gBAAgB;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAErD,qBAAqB;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAE7D,OAAO;YACL,UAAU,EAAE,MAAM;YAClB,aAAa,EAAE,MAAM;YACrB,QAAQ,EAAE;gBACR,UAAU,EAAE,KAAK,CAAC,MAAM;gBACxB,UAAU;gBACV,eAAe;aAChB;SACF,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,KAAa;QAKtC,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACrD,MAAM,cAAc,GAAG,CAAC,CAAO,EAAE,CAAO,EAAE,EAAE,CAC1C,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAExD,OAAO;YACL,UAAU,EAAE,KAAK;iBACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC;iBACzC,IAAI,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;YACzE,SAAS,EAAE,KAAK;iBACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;iBACvC,IAAI,CAAC,cAAc,CAAC;SACxB,CAAC;IACJ,CAAC;IAEO,WAAW,CACjB,YAAwD,EACxD,QAAgB;QAEhB,MAAM,kBAAkB,GAAG;YACzB,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,IAAI;SACV,CAAC;QAEF,MAAM,WAAW,GAAG;YAClB,WAAW,EAAE,GAAG;YAChB,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,IAAI,MAAM,GAAG,kBAAkB,CAAC;QAEhC,sBAAsB;QACtB,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,qBAAqB,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,CAAC,OAAO,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC;YAC7E,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;QAED,kBAAkB;QAClB,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,iBAAiB,CAAC;YAC5B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,CAAC,OAAO,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC;YAC7E,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;QAED,oBAAoB;QACpB,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,mBAAmB,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,CAAC,OAAO,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC;YAC7E,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;QAED,UAAU;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,IAAI,iBAAiB,CAAC;QAC5B,MAAM,IAAI,YAAY,KAAK,CAAC,KAAK,UAAU,CAAC;QAC5C,MAAM,IAAI,kBAAkB,KAAK,CAAC,UAAU,IAAI,CAAC;QACjD,MAAM,IAAI,cAAc,KAAK,CAAC,OAAO,IAAI,CAAC;QAC1C,MAAM,IAAI,gBAAgB,KAAK,CAAC,SAAS,MAAM,CAAC;QAChD,MAAM,IAAI,0BAA0B,CAAC;QACrC,MAAM,IAAI,oBAAoB,KAAK,CAAC,YAAY,IAAI,CAAC;QACrD,MAAM,IAAI,sBAAsB,KAAK,CAAC,cAAc,IAAI,CAAC;QACzD,MAAM,IAAI,mBAAmB,KAAK,CAAC,WAAW,MAAM,CAAC;QAErD,wBAAwB;QACxB,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,IAAI,+BAA+B,CAAC;QAC1C,IAAI,eAAe,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC5C,MAAM,IAAI,2BAA2B,CAAC;QACxC,CAAC;aAAM,IAAI,eAAe,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/C,MAAM,IAAI,0BAA0B,eAAe,CAAC,WAAW,MAAM,CAAC;QACxE,CAAC;aAAM,IAAI,eAAe,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5C,MAAM,IAAI,wBAAwB,eAAe,CAAC,WAAW,MAAM,CAAC;QACtE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,mBAAmB,CAAC,KAAa;QASvC,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,MAAM;YAClE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;YAC3D,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM;YAC/D,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YAC/D,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM;YACnE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM;SAC9D,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAAC,KAAa;QAK5C,qCAAqC;QACrC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;QACxE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,kDAAkD;YAClD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACzC,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gBACrD,OAAO,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACN,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,WAAW,EAAE,IAAI,CAAC,OAAO;aAC1B,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QACjE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,2CAA2C;YAC3C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACtC,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gBACrD,OAAO,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACN,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,WAAW,EAAE,IAAI,CAAC,OAAO;aAC1B,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAClC,CAAC"}
|
|
@@ -130,24 +130,28 @@ describe('TodoRead', () => {
|
|
|
130
130
|
describe('session and agent handling', () => {
|
|
131
131
|
it('should use session ID from context', async () => {
|
|
132
132
|
const toolWithSession = Object.assign(Object.create(Object.getPrototypeOf(tool)), tool);
|
|
133
|
-
toolWithSession.
|
|
134
|
-
'test-session-123'
|
|
133
|
+
toolWithSession.context = {
|
|
134
|
+
sessionId: 'test-session-123',
|
|
135
|
+
};
|
|
135
136
|
vi.mocked(TodoStore.prototype.readTodos).mockResolvedValue([]);
|
|
136
137
|
await toolWithSession.execute({}, abortSignal);
|
|
137
138
|
expect(TodoStore).toHaveBeenCalledWith('test-session-123', undefined);
|
|
138
139
|
});
|
|
139
140
|
it('should use agent ID when available', async () => {
|
|
140
141
|
const toolWithAgent = Object.assign(Object.create(Object.getPrototypeOf(tool)), tool);
|
|
141
|
-
toolWithAgent.
|
|
142
|
-
|
|
142
|
+
toolWithAgent.context = {
|
|
143
|
+
sessionId: 'test-session-123',
|
|
144
|
+
agentId: 'test-agent-456',
|
|
145
|
+
};
|
|
143
146
|
vi.mocked(TodoStore.prototype.readTodos).mockResolvedValue([]);
|
|
144
147
|
await toolWithAgent.execute({}, abortSignal);
|
|
145
148
|
expect(TodoStore).toHaveBeenCalledWith('test-session-123', 'test-agent-456');
|
|
146
149
|
});
|
|
147
150
|
it('should work without agent ID', async () => {
|
|
148
151
|
const toolNoAgent = Object.assign(Object.create(Object.getPrototypeOf(tool)), tool);
|
|
149
|
-
toolNoAgent.
|
|
150
|
-
'test-session-123'
|
|
152
|
+
toolNoAgent.context = {
|
|
153
|
+
sessionId: 'test-session-123',
|
|
154
|
+
};
|
|
151
155
|
vi.mocked(TodoStore.prototype.readTodos).mockResolvedValue(sampleTodos);
|
|
152
156
|
const result = await toolNoAgent.execute({}, abortSignal);
|
|
153
157
|
expect(result.llmContent).toBeDefined();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todo-read.test.js","sourceRoot":"","sources":["../../../src/tools/todo-read.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"todo-read.test.js","sourceRoot":"","sources":["../../../src/tools/todo-read.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,14 +13,14 @@ export declare const TodoSchema: z.ZodObject<{
|
|
|
13
13
|
priority: z.ZodEnum<["high", "medium", "low"]>;
|
|
14
14
|
}, "strip", z.ZodTypeAny, {
|
|
15
15
|
id: string;
|
|
16
|
-
priority: "high" | "medium" | "low";
|
|
17
16
|
status: "in_progress" | "completed" | "pending";
|
|
18
17
|
content: string;
|
|
18
|
+
priority: "high" | "medium" | "low";
|
|
19
19
|
}, {
|
|
20
20
|
id: string;
|
|
21
|
-
priority: "high" | "medium" | "low";
|
|
22
21
|
status: "in_progress" | "completed" | "pending";
|
|
23
22
|
content: string;
|
|
23
|
+
priority: "high" | "medium" | "low";
|
|
24
24
|
}>;
|
|
25
25
|
export declare const TodoArraySchema: z.ZodArray<z.ZodObject<{
|
|
26
26
|
id: z.ZodString;
|
|
@@ -29,14 +29,14 @@ export declare const TodoArraySchema: z.ZodArray<z.ZodObject<{
|
|
|
29
29
|
priority: z.ZodEnum<["high", "medium", "low"]>;
|
|
30
30
|
}, "strip", z.ZodTypeAny, {
|
|
31
31
|
id: string;
|
|
32
|
-
priority: "high" | "medium" | "low";
|
|
33
32
|
status: "in_progress" | "completed" | "pending";
|
|
34
33
|
content: string;
|
|
34
|
+
priority: "high" | "medium" | "low";
|
|
35
35
|
}, {
|
|
36
36
|
id: string;
|
|
37
|
-
priority: "high" | "medium" | "low";
|
|
38
37
|
status: "in_progress" | "completed" | "pending";
|
|
39
38
|
content: string;
|
|
39
|
+
priority: "high" | "medium" | "low";
|
|
40
40
|
}>, "many">;
|
|
41
41
|
export type Todo = z.infer<typeof TodoSchema>;
|
|
42
42
|
export type TodoStatus = z.infer<typeof TodoStatus>;
|
|
@@ -10,8 +10,11 @@ export interface TodoWriteParams {
|
|
|
10
10
|
}
|
|
11
11
|
export declare class TodoWrite extends BaseTool<TodoWriteParams, ToolResult> {
|
|
12
12
|
static readonly Name = "todo_write";
|
|
13
|
+
private reminderService;
|
|
13
14
|
constructor();
|
|
14
15
|
getDescription(params: TodoWriteParams): string;
|
|
15
16
|
execute(params: TodoWriteParams, _signal: AbortSignal, _updateOutput?: (output: string) => void): Promise<ToolResult>;
|
|
16
17
|
private generateOutput;
|
|
18
|
+
private calculateStatistics;
|
|
19
|
+
private determineNextAction;
|
|
17
20
|
}
|
|
@@ -7,8 +7,10 @@ import { Type } from '@google/genai';
|
|
|
7
7
|
import { BaseTool, Icon } from './tools.js';
|
|
8
8
|
import { TodoArraySchema } from './todo-schemas.js';
|
|
9
9
|
import { TodoStore } from './todo-store.js';
|
|
10
|
+
import { TodoReminderService } from '../services/todo-reminder-service.js';
|
|
10
11
|
export class TodoWrite extends BaseTool {
|
|
11
12
|
static Name = 'todo_write';
|
|
13
|
+
reminderService = new TodoReminderService();
|
|
12
14
|
constructor() {
|
|
13
15
|
super(TodoWrite.Name, 'TodoWrite', 'Create and manage a structured task list for the current coding session. Updates the entire todo list.', Icon.LightBulb, {
|
|
14
16
|
type: Type.OBJECT,
|
|
@@ -58,24 +60,41 @@ export class TodoWrite extends BaseTool {
|
|
|
58
60
|
throw new Error(`Validation error: ${error.path.join('.')} - ${error.message}`);
|
|
59
61
|
}
|
|
60
62
|
// Get session and agent IDs from context
|
|
61
|
-
const sessionId = this.sessionId || 'default';
|
|
62
|
-
const agentId = this.agentId;
|
|
63
|
+
const sessionId = this.context?.sessionId || 'default';
|
|
64
|
+
const agentId = this.context?.agentId;
|
|
63
65
|
const store = new TodoStore(sessionId, agentId);
|
|
64
66
|
// Read old todos for diff tracking
|
|
65
67
|
const oldTodos = await store.readTodos();
|
|
66
68
|
// Write new todos
|
|
67
69
|
await store.writeTodos(params.todos);
|
|
70
|
+
// Calculate state change
|
|
71
|
+
const stateChange = this.reminderService.calculateStateChange(oldTodos, params.todos);
|
|
72
|
+
// Generate reminder if needed
|
|
73
|
+
let reminder = null;
|
|
74
|
+
if (this.reminderService.shouldGenerateReminder(stateChange)) {
|
|
75
|
+
reminder = this.reminderService.getReminderForStateChange(stateChange);
|
|
76
|
+
}
|
|
68
77
|
// Generate output
|
|
69
78
|
const output = this.generateOutput(oldTodos, params.todos);
|
|
79
|
+
const statistics = this.calculateStatistics(params.todos);
|
|
80
|
+
const nextAction = this.determineNextAction(params.todos);
|
|
70
81
|
return {
|
|
71
|
-
llmContent: output,
|
|
82
|
+
llmContent: output + (reminder || ''),
|
|
72
83
|
returnDisplay: output,
|
|
84
|
+
metadata: {
|
|
85
|
+
stateChanged: this.reminderService.shouldGenerateReminder(stateChange),
|
|
86
|
+
todosAdded: stateChange.added.length,
|
|
87
|
+
todosRemoved: stateChange.removed.length,
|
|
88
|
+
statusChanged: stateChange.statusChanged.length,
|
|
89
|
+
statistics,
|
|
90
|
+
nextAction,
|
|
91
|
+
},
|
|
73
92
|
};
|
|
74
93
|
}
|
|
75
94
|
generateOutput(oldTodos, newTodos) {
|
|
76
|
-
let output = 'Todo
|
|
77
|
-
|
|
78
|
-
output +=
|
|
95
|
+
let output = '## Todo List Updated\n\n';
|
|
96
|
+
// Changes Summary
|
|
97
|
+
output += '### Changes Summary\n\n';
|
|
79
98
|
// Calculate changes
|
|
80
99
|
const added = newTodos.filter((newTodo) => !oldTodos.some((oldTodo) => oldTodo.id === newTodo.id));
|
|
81
100
|
const removed = oldTodos.filter((oldTodo) => !newTodos.some((newTodo) => newTodo.id === oldTodo.id));
|
|
@@ -84,15 +103,83 @@ export class TodoWrite extends BaseTool {
|
|
|
84
103
|
return oldTodo && oldTodo.status !== newTodo.status;
|
|
85
104
|
});
|
|
86
105
|
if (added.length > 0) {
|
|
87
|
-
output +=
|
|
106
|
+
output += `- Added: ${added.length} task${added.length !== 1 ? 's' : ''}\n`;
|
|
88
107
|
}
|
|
89
108
|
if (removed.length > 0) {
|
|
90
|
-
output +=
|
|
109
|
+
output += `- Removed: ${removed.length} task${removed.length !== 1 ? 's' : ''}\n`;
|
|
91
110
|
}
|
|
92
111
|
if (statusChanges.length > 0) {
|
|
93
|
-
output +=
|
|
112
|
+
output += `- Status changed: ${statusChanges.length} task${statusChanges.length !== 1 ? 's' : ''}\n`;
|
|
113
|
+
}
|
|
114
|
+
output += `- Total tasks: ${newTodos.length}\n\n`;
|
|
115
|
+
// Task Statistics
|
|
116
|
+
output += '### Task Statistics\n\n';
|
|
117
|
+
const stats = this.calculateStatistics(newTodos);
|
|
118
|
+
output += `- In Progress: ${stats.inProgress}\n`;
|
|
119
|
+
output += `- Pending: ${stats.pending}\n`;
|
|
120
|
+
output += `- Completed: ${stats.completed}\n`;
|
|
121
|
+
output += `- Total: ${stats.total}\n\n`;
|
|
122
|
+
// Priority Breakdown
|
|
123
|
+
output += 'Priority Breakdown:\n';
|
|
124
|
+
output += `- High: ${stats.highPriority}\n`;
|
|
125
|
+
output += `- Medium: ${stats.mediumPriority}\n`;
|
|
126
|
+
output += `- Low: ${stats.lowPriority}\n\n`;
|
|
127
|
+
// Next Action
|
|
128
|
+
output += '### Next Action\n\n';
|
|
129
|
+
const nextAction = this.determineNextAction(newTodos);
|
|
130
|
+
if (nextAction.type === 'all-complete') {
|
|
131
|
+
output += 'All tasks completed\n';
|
|
132
|
+
}
|
|
133
|
+
else if (nextAction.type === 'continue') {
|
|
134
|
+
output += `Continue with: ${nextAction.taskContent}\n`;
|
|
135
|
+
}
|
|
136
|
+
else if (nextAction.type === 'start') {
|
|
137
|
+
output += `Start with: ${nextAction.taskContent}\n`;
|
|
94
138
|
}
|
|
95
139
|
return output;
|
|
96
140
|
}
|
|
141
|
+
calculateStatistics(todos) {
|
|
142
|
+
return {
|
|
143
|
+
total: todos.length,
|
|
144
|
+
inProgress: todos.filter((t) => t.status === 'in_progress').length,
|
|
145
|
+
pending: todos.filter((t) => t.status === 'pending').length,
|
|
146
|
+
completed: todos.filter((t) => t.status === 'completed').length,
|
|
147
|
+
highPriority: todos.filter((t) => t.priority === 'high').length,
|
|
148
|
+
mediumPriority: todos.filter((t) => t.priority === 'medium').length,
|
|
149
|
+
lowPriority: todos.filter((t) => t.priority === 'low').length,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
determineNextAction(todos) {
|
|
153
|
+
// Check if any tasks are in progress
|
|
154
|
+
const inProgressTasks = todos.filter((t) => t.status === 'in_progress');
|
|
155
|
+
if (inProgressTasks.length > 0) {
|
|
156
|
+
// Continue with highest priority in-progress task
|
|
157
|
+
const task = inProgressTasks.sort((a, b) => {
|
|
158
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
159
|
+
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
160
|
+
})[0];
|
|
161
|
+
return {
|
|
162
|
+
type: 'continue',
|
|
163
|
+
taskId: task.id,
|
|
164
|
+
taskContent: task.content,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// Check if any tasks are pending
|
|
168
|
+
const pendingTasks = todos.filter((t) => t.status === 'pending');
|
|
169
|
+
if (pendingTasks.length > 0) {
|
|
170
|
+
// Start with highest priority pending task
|
|
171
|
+
const task = pendingTasks.sort((a, b) => {
|
|
172
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
173
|
+
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
174
|
+
})[0];
|
|
175
|
+
return {
|
|
176
|
+
type: 'start',
|
|
177
|
+
taskId: task.id,
|
|
178
|
+
taskContent: task.content,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// All tasks are completed
|
|
182
|
+
return { type: 'all-complete' };
|
|
183
|
+
}
|
|
97
184
|
}
|
|
98
185
|
//# sourceMappingURL=todo-write.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todo-write.js","sourceRoot":"","sources":["../../../src/tools/todo-write.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAc,IAAI,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAQ,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"todo-write.js","sourceRoot":"","sources":["../../../src/tools/todo-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,7 +55,7 @@ describe('TodoWrite', () => {
|
|
|
55
55
|
vi.mocked(TodoStore.prototype.readTodos).mockResolvedValue([]);
|
|
56
56
|
vi.mocked(TodoStore.prototype.writeTodos).mockResolvedValue(undefined);
|
|
57
57
|
const result = await tool.execute({ todos: validTodos }, abortSignal);
|
|
58
|
-
expect(result.llmContent).toContain('2
|
|
58
|
+
expect(result.llmContent).toContain('Total: 2');
|
|
59
59
|
expect(vi.mocked(TodoStore.prototype.writeTodos)).toHaveBeenCalledWith(validTodos);
|
|
60
60
|
});
|
|
61
61
|
it('should validate todo schema and reject invalid data', async () => {
|
|
@@ -105,21 +105,21 @@ describe('TodoWrite', () => {
|
|
|
105
105
|
vi.mocked(TodoStore.prototype.writeTodos).mockResolvedValue(undefined);
|
|
106
106
|
const result = await tool.execute({ todos: singleTodo }, abortSignal);
|
|
107
107
|
expect(vi.mocked(TodoStore.prototype.writeTodos)).toHaveBeenCalledWith(singleTodo);
|
|
108
|
-
expect(result.llmContent).toContain('1
|
|
108
|
+
expect(result.llmContent).toContain('Total tasks: 1');
|
|
109
109
|
});
|
|
110
110
|
it('should handle empty todo list', async () => {
|
|
111
111
|
vi.mocked(TodoStore.prototype.readTodos).mockResolvedValue(existingTodos);
|
|
112
112
|
vi.mocked(TodoStore.prototype.writeTodos).mockResolvedValue(undefined);
|
|
113
113
|
const result = await tool.execute({ todos: [] }, abortSignal);
|
|
114
114
|
expect(vi.mocked(TodoStore.prototype.writeTodos)).toHaveBeenCalledWith([]);
|
|
115
|
-
expect(result.llmContent).toContain('0
|
|
115
|
+
expect(result.llmContent).toContain('Total: 0');
|
|
116
116
|
});
|
|
117
117
|
it('should return both old and new todos for diff tracking', async () => {
|
|
118
118
|
vi.mocked(TodoStore.prototype.readTodos).mockResolvedValue(existingTodos);
|
|
119
119
|
vi.mocked(TodoStore.prototype.writeTodos).mockResolvedValue(undefined);
|
|
120
120
|
const result = await tool.execute({ todos: validTodos }, abortSignal);
|
|
121
|
-
expect(result.llmContent).toContain('
|
|
122
|
-
expect(result.llmContent).toContain('
|
|
121
|
+
expect(result.llmContent).toContain('Removed: 3 tasks');
|
|
122
|
+
expect(result.llmContent).toContain('Total tasks: 2');
|
|
123
123
|
});
|
|
124
124
|
});
|
|
125
125
|
describe('validateToolParams', () => {
|
|
@@ -158,20 +158,21 @@ describe('TodoWrite', () => {
|
|
|
158
158
|
llmContent: expect.any(String),
|
|
159
159
|
returnDisplay: expect.any(String),
|
|
160
160
|
});
|
|
161
|
-
expect(result.llmContent).toContain('Todo
|
|
161
|
+
expect(result.llmContent).toContain('## Todo List Updated');
|
|
162
162
|
});
|
|
163
163
|
it('should include summary of changes in output', async () => {
|
|
164
164
|
vi.mocked(TodoStore.prototype.readTodos).mockResolvedValue(existingTodos);
|
|
165
165
|
vi.mocked(TodoStore.prototype.writeTodos).mockResolvedValue(undefined);
|
|
166
166
|
const result = await tool.execute({ todos: validTodos }, abortSignal);
|
|
167
|
-
expect(result.llmContent).toMatch(/Added.*
|
|
167
|
+
expect(result.llmContent).toMatch(/Added.*tasks/);
|
|
168
168
|
});
|
|
169
169
|
});
|
|
170
170
|
describe('session and agent handling', () => {
|
|
171
171
|
it('should use session ID from context', async () => {
|
|
172
172
|
const toolWithSession = Object.assign(Object.create(Object.getPrototypeOf(tool)), tool);
|
|
173
|
-
toolWithSession.
|
|
174
|
-
'test-session-123'
|
|
173
|
+
toolWithSession.context = {
|
|
174
|
+
sessionId: 'test-session-123',
|
|
175
|
+
};
|
|
175
176
|
vi.mocked(TodoStore.prototype.readTodos).mockResolvedValue([]);
|
|
176
177
|
vi.mocked(TodoStore.prototype.writeTodos).mockResolvedValue(undefined);
|
|
177
178
|
await toolWithSession.execute({ todos: validTodos }, abortSignal);
|
|
@@ -179,8 +180,10 @@ describe('TodoWrite', () => {
|
|
|
179
180
|
});
|
|
180
181
|
it('should use agent ID when available', async () => {
|
|
181
182
|
const toolWithAgent = Object.assign(Object.create(Object.getPrototypeOf(tool)), tool);
|
|
182
|
-
toolWithAgent.
|
|
183
|
-
|
|
183
|
+
toolWithAgent.context = {
|
|
184
|
+
sessionId: 'test-session-123',
|
|
185
|
+
agentId: 'test-agent-456',
|
|
186
|
+
};
|
|
184
187
|
vi.mocked(TodoStore.prototype.readTodos).mockResolvedValue([]);
|
|
185
188
|
vi.mocked(TodoStore.prototype.writeTodos).mockResolvedValue(undefined);
|
|
186
189
|
await toolWithAgent.execute({ todos: validTodos }, abortSignal);
|
|
@@ -188,8 +191,9 @@ describe('TodoWrite', () => {
|
|
|
188
191
|
});
|
|
189
192
|
it('should work without agent ID', async () => {
|
|
190
193
|
const toolNoAgent = Object.assign(Object.create(Object.getPrototypeOf(tool)), tool);
|
|
191
|
-
toolNoAgent.
|
|
192
|
-
'test-session-123'
|
|
194
|
+
toolNoAgent.context = {
|
|
195
|
+
sessionId: 'test-session-123',
|
|
196
|
+
};
|
|
193
197
|
vi.mocked(TodoStore.prototype.readTodos).mockResolvedValue([]);
|
|
194
198
|
vi.mocked(TodoStore.prototype.writeTodos).mockResolvedValue(undefined);
|
|
195
199
|
const result = await toolNoAgent.execute({ todos: validTodos }, abortSignal);
|