erosolar-cli 2.1.192 → 2.1.193
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/dist/core/agent.d.ts +11 -13
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +84 -33
- package/dist/core/agent.js.map +1 -1
- package/dist/core/schemaValidator.d.ts +0 -5
- package/dist/core/schemaValidator.d.ts.map +1 -1
- package/dist/core/schemaValidator.js +0 -65
- package/dist/core/schemaValidator.js.map +1 -1
- package/dist/core/toolRuntime.d.ts +0 -4
- package/dist/core/toolRuntime.d.ts.map +1 -1
- package/dist/core/toolRuntime.js +64 -40
- package/dist/core/toolRuntime.js.map +1 -1
- package/dist/runtime/flowOrchestrator.d.ts +46 -0
- package/dist/runtime/flowOrchestrator.d.ts.map +1 -0
- package/dist/runtime/flowOrchestrator.js +80 -0
- package/dist/runtime/flowOrchestrator.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +4 -19
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +189 -408
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/shellApp.js +1 -8
- package/dist/shell/shellApp.js.map +1 -1
- package/dist/shell/taskCompletionDetector.d.ts +52 -0
- package/dist/shell/taskCompletionDetector.d.ts.map +1 -0
- package/dist/shell/taskCompletionDetector.js +131 -0
- package/dist/shell/taskCompletionDetector.js.map +1 -0
- package/dist/tools/bashTools.d.ts +1 -0
- package/dist/tools/bashTools.d.ts.map +1 -1
- package/dist/tools/bashTools.js +47 -3
- package/dist/tools/bashTools.js.map +1 -1
- package/dist/tools/buildTools.js +1 -1
- package/dist/tools/buildTools.js.map +1 -1
- package/dist/tools/grepTools.js +4 -6
- package/dist/tools/grepTools.js.map +1 -1
- package/dist/tools/repoChecksTools.d.ts.map +1 -1
- package/dist/tools/repoChecksTools.js +7 -5
- package/dist/tools/repoChecksTools.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +2 -3
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +7 -9
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/package.json +1 -1
- package/README.md +0 -54
- package/dist/contracts/models.schema.json +0 -9
- package/dist/core/agentOrchestrator.d.ts +0 -49
- package/dist/core/agentOrchestrator.d.ts.map +0 -1
- package/dist/core/agentOrchestrator.js +0 -313
- package/dist/core/agentOrchestrator.js.map +0 -1
- package/dist/core/alphaZeroOrchestrator.d.ts +0 -140
- package/dist/core/alphaZeroOrchestrator.d.ts.map +0 -1
- package/dist/core/alphaZeroOrchestrator.js +0 -418
- package/dist/core/alphaZeroOrchestrator.js.map +0 -1
- package/dist/core/taskCompletionDetector.d.ts +0 -106
- package/dist/core/taskCompletionDetector.d.ts.map +0 -1
- package/dist/core/taskCompletionDetector.js +0 -402
- package/dist/core/taskCompletionDetector.js.map +0 -1
|
@@ -1,402 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"taskCompletionDetector.js","sourceRoot":"","sources":["../../src/core/taskCompletionDetector.ts"],"names":[],"mappings":"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"}
|