erosolar-cli 2.1.193 → 2.1.195

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 (74) hide show
  1. package/dist/capabilities/offsecOpsCapability.d.ts +2 -2
  2. package/dist/capabilities/offsecOpsCapability.d.ts.map +1 -1
  3. package/dist/capabilities/offsecOpsCapability.js +6 -7
  4. package/dist/capabilities/offsecOpsCapability.js.map +1 -1
  5. package/dist/contracts/models.schema.json +9 -0
  6. package/dist/core/agent.d.ts +31 -12
  7. package/dist/core/agent.d.ts.map +1 -1
  8. package/dist/core/agent.js +71 -84
  9. package/dist/core/agent.js.map +1 -1
  10. package/dist/core/agentOrchestrator.d.ts +49 -0
  11. package/dist/core/agentOrchestrator.d.ts.map +1 -0
  12. package/dist/core/agentOrchestrator.js +313 -0
  13. package/dist/core/agentOrchestrator.js.map +1 -0
  14. package/dist/core/alphaZeroOrchestrator.d.ts +140 -0
  15. package/dist/core/alphaZeroOrchestrator.d.ts.map +1 -0
  16. package/dist/core/alphaZeroOrchestrator.js +418 -0
  17. package/dist/core/alphaZeroOrchestrator.js.map +1 -0
  18. package/dist/core/schemaValidator.d.ts +5 -0
  19. package/dist/core/schemaValidator.d.ts.map +1 -1
  20. package/dist/core/schemaValidator.js +65 -0
  21. package/dist/core/schemaValidator.js.map +1 -1
  22. package/dist/core/taskCompletionDetector.d.ts +106 -0
  23. package/dist/core/taskCompletionDetector.d.ts.map +1 -0
  24. package/dist/core/taskCompletionDetector.js +402 -0
  25. package/dist/core/taskCompletionDetector.js.map +1 -0
  26. package/dist/core/toolRuntime.d.ts +4 -0
  27. package/dist/core/toolRuntime.d.ts.map +1 -1
  28. package/dist/core/toolRuntime.js +40 -64
  29. package/dist/core/toolRuntime.js.map +1 -1
  30. package/dist/core/types.d.ts +14 -0
  31. package/dist/core/types.d.ts.map +1 -1
  32. package/dist/core/types.js.map +1 -1
  33. package/dist/providers/anthropicProvider.d.ts +8 -1
  34. package/dist/providers/anthropicProvider.d.ts.map +1 -1
  35. package/dist/providers/anthropicProvider.js +51 -0
  36. package/dist/providers/anthropicProvider.js.map +1 -1
  37. package/dist/providers/googleProvider.d.ts +7 -1
  38. package/dist/providers/googleProvider.d.ts.map +1 -1
  39. package/dist/providers/googleProvider.js +41 -0
  40. package/dist/providers/googleProvider.js.map +1 -1
  41. package/dist/providers/openaiChatCompletionsProvider.d.ts +7 -1
  42. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -1
  43. package/dist/providers/openaiChatCompletionsProvider.js +44 -0
  44. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -1
  45. package/dist/shell/interactiveShell.d.ts +28 -4
  46. package/dist/shell/interactiveShell.d.ts.map +1 -1
  47. package/dist/shell/interactiveShell.js +478 -191
  48. package/dist/shell/interactiveShell.js.map +1 -1
  49. package/dist/shell/shellApp.js +8 -1
  50. package/dist/shell/shellApp.js.map +1 -1
  51. package/dist/tools/bashTools.d.ts +0 -1
  52. package/dist/tools/bashTools.d.ts.map +1 -1
  53. package/dist/tools/bashTools.js +3 -47
  54. package/dist/tools/bashTools.js.map +1 -1
  55. package/dist/tools/buildTools.js +1 -1
  56. package/dist/tools/buildTools.js.map +1 -1
  57. package/dist/tools/grepTools.js +6 -4
  58. package/dist/tools/grepTools.js.map +1 -1
  59. package/dist/tools/repoChecksTools.d.ts.map +1 -1
  60. package/dist/tools/repoChecksTools.js +5 -7
  61. package/dist/tools/repoChecksTools.js.map +1 -1
  62. package/dist/ui/ShellUIAdapter.d.ts +3 -2
  63. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  64. package/dist/ui/ShellUIAdapter.js +9 -7
  65. package/dist/ui/ShellUIAdapter.js.map +1 -1
  66. package/package.json +1 -1
  67. package/dist/runtime/flowOrchestrator.d.ts +0 -46
  68. package/dist/runtime/flowOrchestrator.d.ts.map +0 -1
  69. package/dist/runtime/flowOrchestrator.js +0 -80
  70. package/dist/runtime/flowOrchestrator.js.map +0 -1
  71. package/dist/shell/taskCompletionDetector.d.ts +0 -52
  72. package/dist/shell/taskCompletionDetector.d.ts.map +0 -1
  73. package/dist/shell/taskCompletionDetector.js +0 -131
  74. package/dist/shell/taskCompletionDetector.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskCompletionDetector.d.ts","sourceRoot":"","sources":["../../src/core/taskCompletionDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAEhC,8BAA8B,EAAE,OAAO,CAAC;IACxC,2BAA2B,EAAE,OAAO,CAAC;IACrC,0BAA0B,EAAE,OAAO,CAAC;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAG9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gCAAgC,EAAE,MAAM,CAAC;IACzC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAG1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAG5B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAoED,eAAO,MAAM,WAAW,aAStB,CAAC;AAEH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,SAAS,CAAgC;;IAMjD;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAkB5E;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAgB3D;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIzD;;OAEG;IACH,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,kBAAkB;IAoD5F;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA0BlC;;OAEG;IACH,OAAO,CAAC,oCAAoC;IAW5C;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;OAEG;IACH,uBAAuB,CAAC,oBAAoB,EAAE,MAAM,GAAG,OAAO;IAc9D;;;OAGG;IACH,OAAO,CAAC,oCAAoC;CA+D7C;AAOD,wBAAgB,yBAAyB,IAAI,sBAAsB,CAKlE;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD"}
@@ -0,0 +1,402 @@
1
+ /**
2
+ * Intelligent Task Completion Detector
3
+ *
4
+ * This module provides robust detection of whether a continuous task is truly complete,
5
+ * rather than just pattern-matching keywords like "done" in responses.
6
+ *
7
+ * Key features:
8
+ * - Multi-signal analysis (tool usage, response content, state changes)
9
+ * - AI verification round before final completion
10
+ * - Confidence scoring
11
+ * - Work-in-progress detection
12
+ *
13
+ * @license MIT
14
+ * @author Bo Shang
15
+ */
16
+ // Keywords that strongly indicate task completion
17
+ const STRONG_COMPLETION_PATTERNS = [
18
+ /^(all\s+)?tasks?\s+(are\s+)?(now\s+)?(complete|done|finished)/im,
19
+ /^(i('ve|'m|\s+have|\s+am)\s+)?(successfully\s+)?(completed?|finished|done)\s+(all|the|with|everything)/im,
20
+ /^everything\s+(is\s+)?(now\s+)?(complete|done|finished)/im,
21
+ /^the\s+requested?\s+(task|work|changes?)\s+(is|are|has been)\s+(complete|done|finished)/im,
22
+ /^i\s+have\s+(now\s+)?(successfully\s+)?(completed?|finished|done)\s+(all|the|everything)/im,
23
+ /no\s+(more|further)\s+(tasks?|work|actions?|changes?)\s+(are\s+)?(needed|required|necessary)/im,
24
+ ];
25
+ // Keywords that indicate work is still in progress
26
+ const INCOMPLETE_WORK_PATTERNS = [
27
+ /\b(next|then|now\s+I('ll|\s+will)|let\s+me|I('ll|\s+will)|going\s+to|about\s+to)\b/i,
28
+ /\b(continue|continuing|proceed|proceeding|working\s+on)\b/i,
29
+ /\b(TODO|FIXME|WIP|in\s+progress)\b/i,
30
+ /\b(still\s+need|remaining|left\s+to\s+do|more\s+to\s+do)\b/i,
31
+ /\b(step\s+\d+|phase\s+\d+|iteration\s+\d+)\b/i,
32
+ /\b(haven'?t\s+(yet|finished)|not\s+yet\s+(done|complete|finished))\b/i,
33
+ ];
34
+ // Keywords that indicate pending actions
35
+ const PENDING_ACTION_PATTERNS = [
36
+ /\b(need\s+to|should|must|have\s+to|requires?)\b/i,
37
+ /\b(waiting|pending|queued)\b/i,
38
+ /\b(before\s+I\s+can|after\s+that|once\s+that)\b/i,
39
+ /\b(running|executing|processing)\b/i,
40
+ ];
41
+ // Keywords that indicate errors or issues
42
+ const ERROR_PATTERNS = [
43
+ /\b(error|failed|failure|exception|issue|problem|bug)\b/i,
44
+ /\b(can'?t|cannot|couldn'?t|unable\s+to)\b/i,
45
+ /\b(fix|fixing|resolve|resolving|debug|debugging)\b/i,
46
+ ];
47
+ // Keywords that indicate follow-up questions
48
+ const FOLLOWUP_QUESTION_PATTERNS = [
49
+ /\b(would\s+you\s+like|do\s+you\s+want|shall\s+I|should\s+I)\b/i,
50
+ /\b(let\s+me\s+know|please\s+(confirm|tell|let))\b/i,
51
+ /\?$/m,
52
+ ];
53
+ // Keywords that indicate future work
54
+ const FUTURE_WORK_PATTERNS = [
55
+ /\b(could\s+also|might\s+want\s+to|consider|recommend)\b/i,
56
+ /\b(future|later|eventually|when\s+you\s+have\s+time)\b/i,
57
+ /\b(improvement|enhancement|optimization)\b/i,
58
+ ];
59
+ // Read-only tool names
60
+ const READ_ONLY_TOOLS = new Set([
61
+ 'read_file',
62
+ 'Read',
63
+ 'list_dir',
64
+ 'list_files',
65
+ 'search_text',
66
+ 'grep',
67
+ 'Grep',
68
+ 'glob',
69
+ 'Glob',
70
+ 'git_status',
71
+ 'git_log',
72
+ 'git_diff',
73
+ ]);
74
+ // Write/action tool names - exported for use in completion detection
75
+ export const WRITE_TOOLS = new Set([
76
+ 'edit_file',
77
+ 'Edit',
78
+ 'bash',
79
+ 'Bash',
80
+ 'execute_command',
81
+ 'git_commit',
82
+ 'git_push',
83
+ 'NotebookEdit',
84
+ ]);
85
+ export class TaskCompletionDetector {
86
+ toolHistory = [];
87
+ responseHistory = [];
88
+ lastToolNames = [];
89
+ consecutiveNoTools = 0;
90
+ todoStats = { pending: 0, completed: 0 };
91
+ constructor() {
92
+ this.reset();
93
+ }
94
+ /**
95
+ * Reset the detector state for a new task
96
+ */
97
+ reset() {
98
+ this.toolHistory = [];
99
+ this.responseHistory = [];
100
+ this.lastToolNames = [];
101
+ this.consecutiveNoTools = 0;
102
+ this.todoStats = { pending: 0, completed: 0 };
103
+ }
104
+ /**
105
+ * Record a tool call
106
+ */
107
+ recordToolCall(toolName, success, hasOutput) {
108
+ this.toolHistory.push({
109
+ toolName,
110
+ timestamp: Date.now(),
111
+ success,
112
+ hasOutput,
113
+ });
114
+ this.lastToolNames.push(toolName);
115
+ // Keep only recent history
116
+ if (this.toolHistory.length > 100) {
117
+ this.toolHistory = this.toolHistory.slice(-100);
118
+ }
119
+ if (this.lastToolNames.length > 20) {
120
+ this.lastToolNames = this.lastToolNames.slice(-20);
121
+ }
122
+ }
123
+ /**
124
+ * Record a response (call after each AI response)
125
+ */
126
+ recordResponse(response, toolsUsed) {
127
+ this.responseHistory.push(response);
128
+ if (toolsUsed.length === 0) {
129
+ this.consecutiveNoTools++;
130
+ }
131
+ else {
132
+ this.consecutiveNoTools = 0;
133
+ this.lastToolNames = toolsUsed;
134
+ }
135
+ // Keep only recent history
136
+ if (this.responseHistory.length > 20) {
137
+ this.responseHistory = this.responseHistory.slice(-20);
138
+ }
139
+ }
140
+ /**
141
+ * Update todo statistics
142
+ */
143
+ updateTodoStats(pending, completed) {
144
+ this.todoStats = { pending, completed };
145
+ }
146
+ /**
147
+ * Analyze the current state and determine if the task is complete
148
+ */
149
+ analyzeCompletion(currentResponse, toolsUsedThisRound) {
150
+ this.recordResponse(currentResponse, toolsUsedThisRound);
151
+ const signals = this.gatherSignals(currentResponse, toolsUsedThisRound);
152
+ const confidence = this.calculateConfidence(signals);
153
+ signals.completionConfidence = confidence;
154
+ // Determine completion status
155
+ let isComplete = false;
156
+ let reason = '';
157
+ let shouldVerify = false;
158
+ let verificationPrompt;
159
+ // High confidence completion
160
+ if (confidence >= 0.85 && signals.hasExplicitCompletionStatement && !signals.hasIncompleteWorkIndicators) {
161
+ isComplete = true;
162
+ reason = 'High confidence explicit completion statement with no incomplete work indicators';
163
+ }
164
+ // Medium confidence - needs verification
165
+ else if (confidence >= 0.6 && signals.hasExplicitCompletionStatement) {
166
+ shouldVerify = true;
167
+ reason = 'Medium confidence completion - AI verification recommended';
168
+ verificationPrompt = this.generateVerificationPrompt(signals);
169
+ }
170
+ // Low confidence - likely not complete
171
+ else if (confidence < 0.4) {
172
+ isComplete = false;
173
+ reason = this.getLowConfidenceReason(signals);
174
+ }
175
+ // Ambiguous case - check for stagnation
176
+ else if (this.consecutiveNoTools >= 3 && !signals.hasIncompleteWorkIndicators) {
177
+ shouldVerify = true;
178
+ reason = 'No tool activity for multiple rounds - verification needed';
179
+ verificationPrompt = this.generateStagnationVerificationPrompt();
180
+ }
181
+ // Default: not complete
182
+ else {
183
+ isComplete = false;
184
+ reason = 'Active work indicators detected or low completion confidence';
185
+ }
186
+ return {
187
+ isComplete,
188
+ confidence,
189
+ signals,
190
+ reason,
191
+ shouldVerify,
192
+ verificationPrompt,
193
+ };
194
+ }
195
+ /**
196
+ * Gather all completion signals from the current state
197
+ */
198
+ gatherSignals(response, toolsUsed) {
199
+ const hasExplicitCompletionStatement = STRONG_COMPLETION_PATTERNS.some((p) => p.test(response));
200
+ const hasIncompleteWorkIndicators = INCOMPLETE_WORK_PATTERNS.some((p) => p.test(response));
201
+ const hasPendingActionIndicators = PENDING_ACTION_PATTERNS.some((p) => p.test(response));
202
+ const hasErrorIndicators = ERROR_PATTERNS.some((p) => p.test(response));
203
+ const hasFollowUpQuestions = FOLLOWUP_QUESTION_PATTERNS.some((p) => p.test(response));
204
+ const mentionsFutureWork = FUTURE_WORK_PATTERNS.some((p) => p.test(response));
205
+ const lastToolWasReadOnly = toolsUsed.length > 0 && toolsUsed.every((t) => READ_ONLY_TOOLS.has(t));
206
+ const recentTools = this.toolHistory.filter((t) => t.success && Date.now() - t.timestamp < 60000);
207
+ const hasRecentFileWrites = recentTools.some((t) => t.toolName === 'edit_file' || t.toolName === 'Edit');
208
+ const hasRecentCommits = recentTools.some((t) => t.toolName === 'bash' || t.toolName === 'Bash') && this.responseHistory.some((r) => r.includes('git commit') || r.includes('committed'));
209
+ return {
210
+ hasExplicitCompletionStatement,
211
+ hasIncompleteWorkIndicators,
212
+ hasPendingActionIndicators,
213
+ hasErrorIndicators,
214
+ hasFollowUpQuestions,
215
+ toolsUsedInLastResponse: toolsUsed.length,
216
+ lastToolWasReadOnly,
217
+ consecutiveResponsesWithoutTools: this.consecutiveNoTools,
218
+ hasRecentFileWrites,
219
+ hasRecentCommits,
220
+ todoItemsPending: this.todoStats.pending,
221
+ todoItemsCompleted: this.todoStats.completed,
222
+ mentionsFutureWork,
223
+ completionConfidence: 0, // Will be calculated
224
+ };
225
+ }
226
+ /**
227
+ * Calculate confidence score for task completion
228
+ */
229
+ calculateConfidence(signals) {
230
+ let score = 0.5; // Start at neutral
231
+ // Strong positive signals
232
+ if (signals.hasExplicitCompletionStatement)
233
+ score += 0.25;
234
+ if (signals.hasRecentCommits)
235
+ score += 0.1;
236
+ if (signals.todoItemsPending === 0 && signals.todoItemsCompleted > 0)
237
+ score += 0.15;
238
+ // Strong negative signals
239
+ if (signals.hasIncompleteWorkIndicators)
240
+ score -= 0.3;
241
+ if (signals.hasPendingActionIndicators)
242
+ score -= 0.2;
243
+ if (signals.hasErrorIndicators)
244
+ score -= 0.25;
245
+ if (signals.todoItemsPending > 0)
246
+ score -= 0.15;
247
+ // Moderate signals
248
+ if (signals.toolsUsedInLastResponse > 0 && !signals.lastToolWasReadOnly)
249
+ score -= 0.1;
250
+ if (signals.consecutiveResponsesWithoutTools >= 2)
251
+ score += 0.1;
252
+ if (signals.hasFollowUpQuestions)
253
+ score -= 0.1;
254
+ if (signals.mentionsFutureWork && signals.hasExplicitCompletionStatement)
255
+ score += 0.05;
256
+ // Clamp to 0-1 range
257
+ return Math.max(0, Math.min(1, score));
258
+ }
259
+ /**
260
+ * Generate a verification prompt to ask the AI if the task is truly complete
261
+ */
262
+ generateVerificationPrompt(signals) {
263
+ const concerns = [];
264
+ if (signals.todoItemsPending > 0) {
265
+ concerns.push(`there are ${signals.todoItemsPending} todo items still pending`);
266
+ }
267
+ if (signals.hasFollowUpQuestions) {
268
+ concerns.push('you asked follow-up questions');
269
+ }
270
+ if (signals.mentionsFutureWork) {
271
+ concerns.push('you mentioned potential future improvements');
272
+ }
273
+ const concernsText = concerns.length > 0 ? `However, ${concerns.join(' and ')}. ` : '';
274
+ return `You indicated the task might be complete. ${concernsText}Please confirm:
275
+
276
+ 1. Have ALL the originally requested changes been implemented?
277
+ 2. Are there any remaining errors or issues that need to be fixed?
278
+ 3. Is there anything else you need to do to fully complete this task?
279
+
280
+ If everything is truly done, respond with exactly: "TASK_FULLY_COMPLETE"
281
+ If there's more work to do, describe what remains.`;
282
+ }
283
+ /**
284
+ * Generate a verification prompt for stagnation cases
285
+ */
286
+ generateStagnationVerificationPrompt() {
287
+ return `I notice you haven't used any tools for several responses. Let me check:
288
+
289
+ 1. Is the task complete? If so, summarize what was accomplished.
290
+ 2. Are you blocked on something? If so, what do you need?
291
+ 3. Is there more work to do? If so, please continue.
292
+
293
+ If everything is done, respond with exactly: "TASK_FULLY_COMPLETE"
294
+ Otherwise, please continue with the next action.`;
295
+ }
296
+ /**
297
+ * Get a human-readable reason for low confidence
298
+ */
299
+ getLowConfidenceReason(signals) {
300
+ const reasons = [];
301
+ if (signals.hasIncompleteWorkIndicators) {
302
+ reasons.push('incomplete work indicators detected');
303
+ }
304
+ if (signals.hasPendingActionIndicators) {
305
+ reasons.push('pending action indicators found');
306
+ }
307
+ if (signals.hasErrorIndicators) {
308
+ reasons.push('error indicators present');
309
+ }
310
+ if (signals.toolsUsedInLastResponse > 0 && !signals.lastToolWasReadOnly) {
311
+ reasons.push('write operations performed');
312
+ }
313
+ if (signals.todoItemsPending > 0) {
314
+ reasons.push(`${signals.todoItemsPending} todo items still pending`);
315
+ }
316
+ return reasons.length > 0 ? reasons.join(', ') : 'no clear completion signals';
317
+ }
318
+ /**
319
+ * Check if a verification response confirms completion
320
+ */
321
+ isVerificationConfirmed(verificationResponse) {
322
+ const hasCompletionMarker = (verificationResponse.includes('TASK_FULLY_COMPLETE') ||
323
+ /^(yes|confirmed?|all\s+done|everything\s+(is\s+)?complete)/im.test(verificationResponse.trim()));
324
+ // Even if completion marker is present, check for contradictions
325
+ if (hasCompletionMarker && this.responseContainsIncompleteIndicators(verificationResponse)) {
326
+ return false;
327
+ }
328
+ return hasCompletionMarker;
329
+ }
330
+ /**
331
+ * Check if a response contradicts itself by saying "complete" but also indicating incomplete work.
332
+ * This comprehensive list catches many ways AI might admit work isn't done while claiming completion.
333
+ */
334
+ responseContainsIncompleteIndicators(response) {
335
+ const incompletePatterns = [
336
+ // === INTEGRATION/DEPLOYMENT STATE ===
337
+ /hasn'?t\s+been\s+(integrated|implemented|connected|deployed|added|completed|tested|verified)\s*(yet|still)?/i,
338
+ /not\s+(yet\s+)?(integrated|implemented|connected|deployed|functional|working|complete|tested|verified)/i,
339
+ /ready\s+(for|to\s+be)\s+(integration|integrated|connected|deployed|testing|review)/i,
340
+ /needs?\s+to\s+be\s+(integrated|connected|deployed|added|hooked|wired|tested|reviewed|merged)/i,
341
+ /was\s+not\s+(performed|completed|implemented|deployed|integrated|tested)/i,
342
+ /the\s+\w+\s+(service|module|component|feature)\s+hasn'?t\s+been/i,
343
+ // === PARTIAL/INCOMPLETE STATE ===
344
+ /still\s+(stores?|uses?|has|contains?|needs?|requires?|missing|lacks?|broken)/i,
345
+ /\b(partially|mostly|almost|nearly|not\s+fully)\s+(complete|done|finished|implemented|working)/i,
346
+ /\b(only\s+)?(part|some|half|portion)\s+of\s+(the\s+)?(task|work|feature|implementation)/i,
347
+ // === QUALIFIER WORDS (uncertain completion) ===
348
+ /\b(should|might|may|could|appears?\s+to)\s+be\s+(complete|done|working|functional)/i,
349
+ /\btheoretically\s+(complete|done|working|functional)/i,
350
+ /\b(assuming|provided|if)\s+(everything|it|this|that)\s+(works?|is\s+correct)/i,
351
+ // === SELF-CONTRADICTION PHRASES ===
352
+ /\b(done|complete|finished)\s+(but|except|however|although|though)/i,
353
+ /however[,\s].{0,50}?(hasn'?t|not\s+yet|still\s+needs?|pending|remains?|missing|broken|failing)/i,
354
+ /\bbut\s+.{0,30}?(not|hasn'?t|won'?t|can'?t|doesn'?t|isn'?t|wasn'?t)/i,
355
+ // === FUTURE TENSE / DEFERRED WORK ===
356
+ /will\s+(need\s+to|require|have\s+to)\s+(integrate|connect|deploy|complete|implement|test|fix)/i,
357
+ /\b(left\s+as|deferred|postponed|out\s+of\s+scope|for\s+later|in\s+a\s+future)/i,
358
+ /\b(after\s+(restart|reboot|redeploy)|takes?\s+effect\s+after|once\s+you)/i,
359
+ // === REMAINING WORK INDICATORS ===
360
+ /\b(remaining|outstanding|pending|leftover)\s+(tasks?|items?|work|issues?|steps?)/i,
361
+ /\b(more\s+to\s+do|still\s+have\s+to|yet\s+to\s+be\s+done)/i,
362
+ /\b(blocker|blocked\s+by|waiting\s+(for|on)|depends?\s+on)/i,
363
+ // === ERROR/FAILURE STATE ===
364
+ /\b(failing|broken|erroring)\s+(tests?|builds?|checks?|validations?)/i,
365
+ /\btests?\s+(are\s+)?(still\s+)?failing/i,
366
+ /\b(errors?|warnings?|issues?)\s+to\s+(address|fix|resolve)/i,
367
+ /\b(doesn'?t|isn'?t|not)\s+(work|working|functional|functioning)/i,
368
+ // === MANUAL STEPS REQUIRED ===
369
+ /\b(you('ll|\s+will)\s+need\s+to|manually\s+(run|configure|set|update)|requires?\s+user)/i,
370
+ /\b(run\s+this|execute\s+the\s+following|apply\s+the\s+migration)/i,
371
+ // === TODO/FIXME IN PROSE ===
372
+ /\b(todo|fixme|hack|xxx):\s/i,
373
+ /\b(need\s+to|should|must)\s+(add|implement|create|write|build|fix)\b/i,
374
+ // === SCOPE LIMITATIONS ===
375
+ /\b(didn'?t|did\s+not)\s+have\s+(time|chance|opportunity)/i,
376
+ /\b(beyond|outside)\s+(the\s+)?scope/i,
377
+ /\b(for\s+now|at\s+this\s+point|currently)\s*.{0,20}?(not|without|lacks?|missing)/i,
378
+ ];
379
+ for (const pattern of incompletePatterns) {
380
+ if (pattern.test(response)) {
381
+ return true;
382
+ }
383
+ }
384
+ return false;
385
+ }
386
+ }
387
+ /**
388
+ * Create a singleton instance for the shell to use
389
+ */
390
+ let detectorInstance = null;
391
+ export function getTaskCompletionDetector() {
392
+ if (!detectorInstance) {
393
+ detectorInstance = new TaskCompletionDetector();
394
+ }
395
+ return detectorInstance;
396
+ }
397
+ export function resetTaskCompletionDetector() {
398
+ if (detectorInstance) {
399
+ detectorInstance.reset();
400
+ }
401
+ }
402
+ //# sourceMappingURL=taskCompletionDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskCompletionDetector.js","sourceRoot":"","sources":["../../src/core/taskCompletionDetector.ts"],"names":[],"mappings":"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"}
@@ -79,6 +79,9 @@ export interface ToolHistoryEntry {
79
79
  toolName: string;
80
80
  args: Record<string, unknown>;
81
81
  timestamp: number;
82
+ success: boolean;
83
+ hasOutput: boolean;
84
+ error?: string;
82
85
  }
83
86
  export interface DiffSnapshotRecord {
84
87
  command: string;
@@ -165,6 +168,7 @@ export declare class ToolRuntime implements IToolRuntime {
165
168
  };
166
169
  clearToolHistory(): void;
167
170
  getToolHistory(): readonly ToolHistoryEntry[];
171
+ private recordToolHistory;
168
172
  clearDiffSnapshots(): void;
169
173
  getDiffSnapshots(): readonly DiffSnapshotRecord[];
170
174
  private addTool;
@@ -1 +1 @@
1
- {"version":3,"file":"toolRuntime.d.ts","sourceRoot":"","sources":["../../src/core/toolRuntime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toolRuntime.d.ts","sourceRoot":"","sources":["../../src/core/toolRuntime.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
- import { ToolArgumentValidationError, validateToolArguments, } from './schemaValidator.js';
2
+ import { ToolArgumentValidationError, coerceToolArguments, validateToolArguments, } from './schemaValidator.js';
3
3
  import { globalPerformanceMonitor } from './performanceMonitor.js';
4
4
  import { validateToolPreconditions, validateAIFlowPatterns } from './toolPreconditions.js';
5
5
  import { safeTruncate } from './resultVerification.js';
@@ -148,13 +148,9 @@ export class ToolRuntime {
148
148
  }
149
149
  async execute(call, context) {
150
150
  const record = this.registry.get(call.name);
151
- // Parse args early to create augmented call for observer
152
- const args = normalizeToolArguments(call.arguments);
153
- const { cleanedArgs, sanitized } = sanitizeToolArguments(args);
154
- if (sanitized) {
155
- call = { ...call, arguments: cleanedArgs };
156
- }
157
- const augmentedCall = { ...call, args: cleanedArgs };
151
+ const rawArgs = normalizeToolArguments(call.arguments);
152
+ const args = coerceToolArguments(record?.definition.parameters, rawArgs);
153
+ const augmentedCall = { ...call, args };
158
154
  if (!record) {
159
155
  const message = `Tool "${call.name}" is not available.`;
160
156
  this.observer?.onToolError?.(augmentedCall, message);
@@ -165,13 +161,20 @@ export class ToolRuntime {
165
161
  const isCacheable = record.definition.cacheable ?? CACHEABLE_TOOLS.has(call.name);
166
162
  // Try to get from cache
167
163
  if (this.enableCache && isCacheable) {
168
- const cacheKey = this.getCacheKey(call);
164
+ const cacheKey = this.getCacheKey({ ...call, arguments: args });
169
165
  const cached = this.cache.get(cacheKey);
170
166
  if (cached && Date.now() - cached.timestamp < this.cacheTTLMs) {
171
167
  this.observer?.onCacheHit?.(augmentedCall);
172
168
  this.observer?.onToolResult?.(augmentedCall, cached.result);
173
169
  // Record cache hit as successful execution with 0ms time
174
170
  globalPerformanceMonitor.startToolCall(call, context)();
171
+ this.recordToolHistory({
172
+ toolName: call.name,
173
+ args,
174
+ timestamp: Date.now(),
175
+ success: true,
176
+ hasOutput: hasNonEmptyOutput(cached.result),
177
+ });
175
178
  return cached.result;
176
179
  }
177
180
  }
@@ -179,14 +182,14 @@ export class ToolRuntime {
179
182
  // Start performance monitoring
180
183
  const finishToolCall = globalPerformanceMonitor.startToolCall(call, context);
181
184
  try {
182
- validateToolArguments(record.definition.name, record.definition.parameters, cleanedArgs);
185
+ validateToolArguments(record.definition.name, record.definition.parameters, args);
183
186
  // Pre-flight AI flow validation - catch common tool usage failures
184
- const preflightWarnings = validateToolPreconditions(call.name, cleanedArgs);
187
+ const preflightWarnings = validateToolPreconditions(call.name, args);
185
188
  for (const warning of preflightWarnings) {
186
189
  this.observer?.onToolWarning?.(augmentedCall, warning);
187
190
  }
188
191
  // Advanced AI flow pattern validation using tool history
189
- const aiFlowWarnings = validateAIFlowPatterns(call.name, cleanedArgs, this.toolHistory);
192
+ const aiFlowWarnings = validateAIFlowPatterns(call.name, args, this.toolHistory);
190
193
  for (const warning of aiFlowWarnings) {
191
194
  this.observer?.onToolWarning?.(augmentedCall, warning);
192
195
  }
@@ -205,17 +208,7 @@ export class ToolRuntime {
205
208
  optimizationHints.push(hint);
206
209
  }
207
210
  }
208
- // Track this tool call in history for AI flow pattern detection
209
- this.toolHistory.push({
210
- toolName: call.name,
211
- args: cleanedArgs,
212
- timestamp: Date.now(),
213
- });
214
- // Keep history bounded to prevent memory growth
215
- if (this.toolHistory.length > this.maxHistorySize) {
216
- this.toolHistory.shift();
217
- }
218
- const result = await toolExecutionContext.run({ call: augmentedCall, observer: this.observer ?? undefined }, async () => record.definition.handler(cleanedArgs));
211
+ const result = await toolExecutionContext.run({ call: augmentedCall, observer: this.observer ?? undefined }, async () => record.definition.handler(args));
219
212
  let output = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
220
213
  let snapshotCandidate = output;
221
214
  // Truncate output if context manager is available
@@ -233,7 +226,7 @@ export class ToolRuntime {
233
226
  this.recordDiffSnapshot(args, snapshotCandidate);
234
227
  // Cache the result if cacheable
235
228
  if (this.enableCache && isCacheable) {
236
- const cacheKey = this.getCacheKey(call);
229
+ const cacheKey = this.getCacheKey({ ...call, arguments: args });
237
230
  this.cache.set(cacheKey, {
238
231
  result: output,
239
232
  timestamp: Date.now(),
@@ -244,6 +237,13 @@ export class ToolRuntime {
244
237
  output = output + optimizationHints.join('');
245
238
  }
246
239
  this.observer?.onToolResult?.(augmentedCall, output);
240
+ this.recordToolHistory({
241
+ toolName: call.name,
242
+ args,
243
+ timestamp: Date.now(),
244
+ success: true,
245
+ hasOutput: hasNonEmptyOutput(output),
246
+ });
247
247
  // Record successful execution
248
248
  finishToolCall();
249
249
  return output;
@@ -258,6 +258,14 @@ export class ToolRuntime {
258
258
  formatted = `Failed to run "${call.name}": ${message}`;
259
259
  }
260
260
  this.observer?.onToolError?.(augmentedCall, formatted);
261
+ this.recordToolHistory({
262
+ toolName: call.name,
263
+ args,
264
+ timestamp: Date.now(),
265
+ success: false,
266
+ hasOutput: hasNonEmptyOutput(formatted),
267
+ error: formatted,
268
+ });
261
269
  // Record failed execution
262
270
  globalPerformanceMonitor.recordToolError(call, formatted, context ?? undefined);
263
271
  return formatted;
@@ -285,6 +293,12 @@ export class ToolRuntime {
285
293
  getToolHistory() {
286
294
  return this.toolHistory;
287
295
  }
296
+ recordToolHistory(entry) {
297
+ this.toolHistory.push(entry);
298
+ if (this.toolHistory.length > this.maxHistorySize) {
299
+ this.toolHistory.shift();
300
+ }
301
+ }
288
302
  clearDiffSnapshots() {
289
303
  this.diffSnapshots.length = 0;
290
304
  }
@@ -364,46 +378,8 @@ export function createDefaultToolRuntime(context, toolSuites = [], options = {})
364
378
  }
365
379
  // Removed unused introspection tools (context_snapshot, capabilities_overview, profile_details)
366
380
  // Model already knows capabilities from tool definitions; these just wasted tokens
367
- function stripReasoningMarkup(text) {
368
- const original = text;
369
- let cleaned = text;
370
- cleaned = cleaned.replace(/<thinking>[\s\S]*?<\/thinking>/gi, ' ');
371
- cleaned = cleaned.replace(/<analysis>[\s\S]*?<\/analysis>/gi, ' ');
372
- cleaned = cleaned.replace(/<response>[\s\S]*?<\/response>/gi, ' ');
373
- cleaned = cleaned.replace(/<thinking>[\s\S]*$/gi, ' ');
374
- cleaned = cleaned.replace(/<\/thinking>/gi, ' ');
375
- cleaned = cleaned.replace(/<\/response>/gi, ' ');
376
- cleaned = cleaned.replace(/<\/analysis>/gi, ' ');
377
- cleaned = cleaned.replace(/<thinking>/gi, ' ');
378
- cleaned = cleaned.replace(/<response>/gi, ' ');
379
- cleaned = cleaned.replace(/<analysis>/gi, ' ');
380
- cleaned = cleaned.replace(/\s+/g, ' ').trim();
381
- return { cleaned, changed: cleaned !== original.trim() };
382
- }
383
- function sanitizeToolArguments(args) {
384
- const touched = [];
385
- const cleanValue = (value) => {
386
- if (typeof value === 'string') {
387
- const { cleaned, changed } = stripReasoningMarkup(value);
388
- if (changed) {
389
- touched.push('string');
390
- }
391
- return cleaned;
392
- }
393
- if (Array.isArray(value)) {
394
- return value.map(cleanValue);
395
- }
396
- if (isRecord(value)) {
397
- const obj = {};
398
- for (const [key, val] of Object.entries(value)) {
399
- obj[key] = cleanValue(val);
400
- }
401
- return obj;
402
- }
403
- return value;
404
- };
405
- const cleanedArgs = cleanValue(args);
406
- return { cleanedArgs, sanitized: touched.length > 0 };
381
+ function hasNonEmptyOutput(output) {
382
+ return typeof output === 'string' && output.trim().length > 0;
407
383
  }
408
384
  function normalizeToolArguments(value) {
409
385
  if (value instanceof Map) {