@vybestack/llxprt-code 0.1.18-nightly.250808.f9b79d74 → 0.1.18-nightly.250812.12fa8ad2
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 +49 -2
- package/dist/package.json +5 -3
- package/dist/src/auth/anthropic-oauth-provider.d.ts +33 -0
- package/dist/src/auth/anthropic-oauth-provider.js +129 -0
- package/dist/src/auth/anthropic-oauth-provider.js.map +1 -0
- package/dist/src/auth/gemini-oauth-provider.d.ts +15 -0
- package/dist/src/auth/gemini-oauth-provider.js +33 -0
- package/dist/src/auth/gemini-oauth-provider.js.map +1 -0
- package/dist/src/auth/oauth-manager.d.ts +109 -0
- package/dist/src/auth/oauth-manager.js +334 -0
- package/dist/src/auth/oauth-manager.js.map +1 -0
- package/dist/src/auth/oauth-manager.spec.d.ts +6 -0
- package/dist/src/auth/oauth-manager.spec.js +523 -0
- package/dist/src/auth/oauth-manager.spec.js.map +1 -0
- package/dist/src/auth/qwen-oauth-provider.d.ts +14 -0
- package/dist/src/auth/qwen-oauth-provider.js +75 -0
- package/dist/src/auth/qwen-oauth-provider.js.map +1 -0
- package/dist/src/auth/types.d.ts +7 -0
- package/dist/src/auth/types.js +7 -0
- package/dist/src/auth/types.js.map +1 -0
- package/dist/src/config/auth.js +11 -0
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/config.js +93 -43
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/keyBindings.d.ts +66 -0
- package/dist/src/config/keyBindings.js +136 -0
- package/dist/src/config/keyBindings.js.map +1 -0
- package/dist/src/config/settings.d.ts +3 -59
- package/dist/src/config/settings.js +17 -1
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +587 -0
- package/dist/src/config/settingsSchema.js +565 -0
- package/dist/src/config/settingsSchema.js.map +1 -0
- package/dist/src/gemini.js +12 -109
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/nonInteractiveCli.js +0 -1
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
- package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
- package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
- package/dist/src/providers/logging/git-stats.d.ts +43 -0
- package/dist/src/providers/logging/git-stats.js +137 -0
- package/dist/src/providers/logging/git-stats.js.map +1 -0
- package/dist/src/providers/providerManagerInstance.d.ts +2 -0
- package/dist/src/providers/providerManagerInstance.js +49 -5
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.js +4 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
- package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
- package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
- package/dist/src/ui/App.js +156 -35
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/colors.d.ts +5 -0
- package/dist/src/ui/colors.js +51 -0
- package/dist/src/ui/colors.js.map +1 -1
- package/dist/src/ui/commands/authCommand.d.ts +11 -1
- package/dist/src/ui/commands/authCommand.js +145 -48
- package/dist/src/ui/commands/authCommand.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +16 -0
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/diagnosticsCommand.js +94 -10
- package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.js +67 -31
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/keyCommand.js +32 -2
- package/dist/src/ui/commands/keyCommand.js.map +1 -1
- package/dist/src/ui/commands/keyfileCommand.js +15 -12
- package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
- package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
- package/dist/src/ui/commands/loggingCommand.js +421 -0
- package/dist/src/ui/commands/loggingCommand.js.map +1 -0
- package/dist/src/ui/commands/modelCommand.js +21 -3
- package/dist/src/ui/commands/modelCommand.js.map +1 -1
- package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
- package/dist/src/ui/commands/privacyCommand.js +6 -3
- package/dist/src/ui/commands/privacyCommand.js.map +1 -1
- package/dist/src/ui/commands/providerCommand.js +52 -14
- package/dist/src/ui/commands/providerCommand.js.map +1 -1
- package/dist/src/ui/commands/setCommand.js +17 -1
- package/dist/src/ui/commands/setCommand.js.map +1 -1
- package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
- package/dist/src/ui/commands/settingsCommand.js +16 -0
- package/dist/src/ui/commands/settingsCommand.js.map +1 -0
- package/dist/src/ui/commands/setupGithubCommand.js +21 -2
- package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
- package/dist/src/ui/commands/toolformatCommand.js +79 -23
- package/dist/src/ui/commands/toolformatCommand.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +14 -2
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.js +15 -54
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthInProgress.js +3 -3
- package/dist/src/ui/components/AuthInProgress.js.map +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.d.ts +10 -0
- package/dist/src/ui/components/ContextUsageDisplay.js +27 -0
- package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
- package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
- package/dist/src/ui/components/FolderTrustDialog.js +38 -0
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
- package/dist/src/ui/components/Footer.js +132 -15
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.d.ts +1 -0
- package/dist/src/ui/components/InputPrompt.js +87 -31
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
- package/dist/src/ui/components/LoggingDialog.js +155 -0
- package/dist/src/ui/components/LoggingDialog.js.map +1 -0
- package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
- package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/OAuthCodeDialog.d.ts +13 -0
- package/dist/src/ui/components/OAuthCodeDialog.js +54 -0
- package/dist/src/ui/components/OAuthCodeDialog.js.map +1 -0
- package/dist/src/ui/components/ProviderDialog.js +100 -26
- package/dist/src/ui/components/ProviderDialog.js.map +1 -1
- package/dist/src/ui/components/ProviderModelDialog.js +99 -27
- package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
- package/dist/src/ui/components/SettingsDialog.js +247 -0
- package/dist/src/ui/components/SettingsDialog.js.map +1 -0
- package/dist/src/ui/components/ThemeDialog.js +4 -15
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/TodoPanel.js +93 -18
- package/dist/src/ui/components/TodoPanel.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +85 -7
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
- package/dist/src/ui/contexts/SettingsContext.js +15 -0
- package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
- package/dist/src/ui/hooks/atCommandProcessor.js +21 -0
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -2
- package/dist/src/ui/hooks/slashCommandProcessor.js +142 -113
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAtCompletion.js +1 -1
- package/dist/src/ui/hooks/useAuthCommand.js +48 -2
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
- package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
- package/dist/src/ui/hooks/useFolderTrust.js +22 -0
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +35 -10
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
- package/dist/src/ui/hooks/useResponsive.js +19 -0
- package/dist/src/ui/hooks/useResponsive.js.map +1 -0
- package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
- package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
- package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
- package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
- package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
- package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
- package/dist/src/ui/keyMatchers.d.ts +26 -0
- package/dist/src/ui/keyMatchers.js +68 -0
- package/dist/src/ui/keyMatchers.js.map +1 -0
- package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
- package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
- package/dist/src/ui/reducers/appReducer.d.ts +3 -2
- package/dist/src/ui/reducers/appReducer.js +1 -0
- package/dist/src/ui/reducers/appReducer.js.map +1 -1
- package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
- package/dist/src/ui/themes/semantic-resolver.js +32 -0
- package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
- package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
- package/dist/src/ui/themes/semantic-tokens.js +7 -0
- package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
- package/dist/src/ui/themes/theme-compat.d.ts +34 -0
- package/dist/src/ui/themes/theme-compat.js +65 -0
- package/dist/src/ui/themes/theme-compat.js.map +1 -0
- package/dist/src/ui/themes/theme-manager.d.ts +8 -0
- package/dist/src/ui/themes/theme-manager.js +18 -0
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
- package/dist/src/ui/utils/CodeColorizer.js +4 -3
- package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
- package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.d.ts +1 -0
- package/dist/src/ui/utils/commandUtils.js +22 -1
- package/dist/src/ui/utils/commandUtils.js.map +1 -1
- package/dist/src/ui/utils/responsive.d.ts +16 -0
- package/dist/src/ui/utils/responsive.js +111 -0
- package/dist/src/ui/utils/responsive.js.map +1 -0
- package/dist/src/utils/cleanup.d.ts +2 -2
- package/dist/src/utils/cleanup.js +2 -2
- package/dist/src/utils/cleanup.js.map +1 -1
- package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
- package/dist/src/utils/dialogScopeUtils.js +48 -0
- package/dist/src/utils/dialogScopeUtils.js.map +1 -0
- package/dist/src/utils/gitUtils.d.ts +9 -0
- package/dist/src/utils/gitUtils.js +17 -0
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
- package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
- package/dist/src/utils/privacy/PrivacyManager.js +133 -0
- package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
- package/dist/src/utils/sandbox.js +10 -0
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/utils/settingsUtils.d.ts +126 -0
- package/dist/src/utils/settingsUtils.js +327 -0
- package/dist/src/utils/settingsUtils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -3
- package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
- package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -17
- package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
@@ -0,0 +1,387 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Vybestack LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
/**
|
7
|
+
* Type guard to check if config has continuation enabled property (test mock)
|
8
|
+
*/
|
9
|
+
function isMockConfig(config) {
|
10
|
+
return (typeof config === 'object' &&
|
11
|
+
config !== null &&
|
12
|
+
'continuationEnabled' in config);
|
13
|
+
}
|
14
|
+
/**
|
15
|
+
* Service responsible for generating continuation prompts and managing continuation logic
|
16
|
+
*/
|
17
|
+
export class TodoContinuationService {
|
18
|
+
static MAX_CONTINUATION_ATTEMPTS = 3;
|
19
|
+
static MIN_CONTINUATION_INTERVAL_MS = 1000;
|
20
|
+
static CONTINUATION_TIMEOUT_MS = 30000;
|
21
|
+
static MAX_TASK_DESCRIPTION_LENGTH = 200;
|
22
|
+
/**
|
23
|
+
* Generates a continuation prompt based on the provided configuration
|
24
|
+
* @param config Configuration for prompt generation
|
25
|
+
* @returns Formatted continuation prompt string
|
26
|
+
*/
|
27
|
+
generateContinuationPrompt(config) {
|
28
|
+
if (!config) {
|
29
|
+
throw new Error('Configuration is required');
|
30
|
+
}
|
31
|
+
const taskDescription = this.truncateTaskDescription(config.taskDescription || '');
|
32
|
+
if (config.isYoloMode) {
|
33
|
+
return this.generateYoloModePrompt(taskDescription, config.attemptCount, config.previousFailure);
|
34
|
+
}
|
35
|
+
else {
|
36
|
+
return this.generateStandardPrompt(taskDescription, config.attemptCount, config.previousFailure);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
/**
|
40
|
+
* Evaluates whether continuation should occur based on current conditions
|
41
|
+
* @param context Current continuation context
|
42
|
+
* @returns Evaluation result with decision and reasoning
|
43
|
+
*/
|
44
|
+
checkContinuationConditions(context) {
|
45
|
+
if (!context) {
|
46
|
+
throw new Error('Context is required');
|
47
|
+
}
|
48
|
+
const conditions = this.evaluateAllConditions(context);
|
49
|
+
// Check each condition and provide specific feedback
|
50
|
+
if (!conditions.continuationEnabled) {
|
51
|
+
return {
|
52
|
+
shouldContinue: false,
|
53
|
+
reason: 'Todo continuation is disabled in ephemeral settings',
|
54
|
+
conditions,
|
55
|
+
};
|
56
|
+
}
|
57
|
+
if (!conditions.hasActiveTodos) {
|
58
|
+
return {
|
59
|
+
shouldContinue: false,
|
60
|
+
reason: 'No active todos found (pending or in_progress)',
|
61
|
+
conditions,
|
62
|
+
};
|
63
|
+
}
|
64
|
+
if (!conditions.noToolCallsMade) {
|
65
|
+
return {
|
66
|
+
shouldContinue: false,
|
67
|
+
reason: 'Tool calls were made during stream - no continuation needed',
|
68
|
+
conditions,
|
69
|
+
};
|
70
|
+
}
|
71
|
+
if (!conditions.notCurrentlyContinuing) {
|
72
|
+
return {
|
73
|
+
shouldContinue: false,
|
74
|
+
reason: 'Already continuing task',
|
75
|
+
conditions,
|
76
|
+
};
|
77
|
+
}
|
78
|
+
if (!conditions.withinAttemptLimits) {
|
79
|
+
return {
|
80
|
+
shouldContinue: false,
|
81
|
+
reason: 'Continuation attempt limit reached',
|
82
|
+
conditions,
|
83
|
+
};
|
84
|
+
}
|
85
|
+
if (!conditions.withinTimeConstraints) {
|
86
|
+
return {
|
87
|
+
shouldContinue: false,
|
88
|
+
reason: 'Time constraint violated - too soon since last attempt',
|
89
|
+
conditions,
|
90
|
+
};
|
91
|
+
}
|
92
|
+
// Find the active todo to continue
|
93
|
+
const activeTodo = this.findBestActiveTodo(context.todos);
|
94
|
+
if (!activeTodo) {
|
95
|
+
return {
|
96
|
+
shouldContinue: false,
|
97
|
+
reason: 'No suitable active todo found',
|
98
|
+
conditions,
|
99
|
+
};
|
100
|
+
}
|
101
|
+
// All conditions met
|
102
|
+
return {
|
103
|
+
shouldContinue: true,
|
104
|
+
reason: 'Active todo found and all continuation conditions satisfied',
|
105
|
+
conditions,
|
106
|
+
activeTodo,
|
107
|
+
};
|
108
|
+
}
|
109
|
+
/**
|
110
|
+
* Formats a todo item's content into a task description
|
111
|
+
* @param todo Todo item to format
|
112
|
+
* @returns Formatted task description string
|
113
|
+
*/
|
114
|
+
formatTaskDescription(todo) {
|
115
|
+
if (!todo || !todo.content) {
|
116
|
+
return 'Complete task';
|
117
|
+
}
|
118
|
+
let description = todo.content.trim();
|
119
|
+
if (description.length === 0) {
|
120
|
+
return 'Complete task';
|
121
|
+
}
|
122
|
+
// Clean up formatting
|
123
|
+
description = description.replace(/\s+/g, ' '); // Normalize whitespace
|
124
|
+
description = description.replace(/^[-*+]\s*/, ''); // Remove list markers
|
125
|
+
// Truncate if too long
|
126
|
+
if (description.length > TodoContinuationService.MAX_TASK_DESCRIPTION_LENGTH) {
|
127
|
+
description =
|
128
|
+
description.substring(0, TodoContinuationService.MAX_TASK_DESCRIPTION_LENGTH - 3) + '...';
|
129
|
+
}
|
130
|
+
return description;
|
131
|
+
}
|
132
|
+
/**
|
133
|
+
* Checks if continuation should be allowed based on configuration and state
|
134
|
+
* @param config Application configuration
|
135
|
+
* @param state Current continuation state
|
136
|
+
* @returns Whether continuation is allowed
|
137
|
+
*/
|
138
|
+
shouldAllowContinuation(config, state) {
|
139
|
+
// Check ephemeral setting safely
|
140
|
+
let continuationEnabled = true;
|
141
|
+
if (config && typeof config.getEphemeralSetting === 'function') {
|
142
|
+
continuationEnabled = config.getEphemeralSetting('todo-continuation');
|
143
|
+
}
|
144
|
+
else if (isMockConfig(config)) {
|
145
|
+
continuationEnabled = config.continuationEnabled;
|
146
|
+
}
|
147
|
+
if (continuationEnabled === false) {
|
148
|
+
return false;
|
149
|
+
}
|
150
|
+
// Check attempt limits
|
151
|
+
if (state.attemptCount >= TodoContinuationService.MAX_CONTINUATION_ATTEMPTS) {
|
152
|
+
return false;
|
153
|
+
}
|
154
|
+
// Check time constraints
|
155
|
+
if (state.lastPromptTime) {
|
156
|
+
const timeSinceLastPrompt = Date.now() - state.lastPromptTime.getTime();
|
157
|
+
if (timeSinceLastPrompt <
|
158
|
+
TodoContinuationService.MIN_CONTINUATION_INTERVAL_MS) {
|
159
|
+
return false;
|
160
|
+
}
|
161
|
+
}
|
162
|
+
return true;
|
163
|
+
}
|
164
|
+
/**
|
165
|
+
* Creates a new, empty continuation state
|
166
|
+
* @returns Initial continuation state
|
167
|
+
*/
|
168
|
+
createContinuationState() {
|
169
|
+
return {
|
170
|
+
isActive: false,
|
171
|
+
attemptCount: 0,
|
172
|
+
taskDescription: undefined,
|
173
|
+
lastPromptTime: undefined,
|
174
|
+
};
|
175
|
+
}
|
176
|
+
// Additional method mentioned in requirements but not in original pseudocode
|
177
|
+
/**
|
178
|
+
* Checks whether continuation should occur based on settings, todos, and tool calls
|
179
|
+
* @param settings Application settings/config
|
180
|
+
* @param hasActiveTodos Whether there are active todos
|
181
|
+
* @param hasToolCalls Whether tool calls were made
|
182
|
+
* @returns Whether continuation should proceed
|
183
|
+
*/
|
184
|
+
shouldContinue(settings, hasActiveTodos, hasToolCalls) {
|
185
|
+
// Don't continue if tool calls were made
|
186
|
+
if (hasToolCalls) {
|
187
|
+
return false;
|
188
|
+
}
|
189
|
+
// Don't continue if no active todos
|
190
|
+
if (!hasActiveTodos) {
|
191
|
+
return false;
|
192
|
+
}
|
193
|
+
// Check if continuation is enabled safely
|
194
|
+
let continuationEnabled = true;
|
195
|
+
if (settings && typeof settings.getEphemeralSetting === 'function') {
|
196
|
+
continuationEnabled = settings.getEphemeralSetting('todo-continuation');
|
197
|
+
}
|
198
|
+
else if (isMockConfig(settings)) {
|
199
|
+
continuationEnabled = settings.continuationEnabled;
|
200
|
+
}
|
201
|
+
return continuationEnabled !== false;
|
202
|
+
}
|
203
|
+
// Additional method mentioned in requirements but not in original pseudocode
|
204
|
+
/**
|
205
|
+
* Formats a prompt for task description and YOLO mode
|
206
|
+
* @param taskDescription Description of the task to continue
|
207
|
+
* @param isYoloMode Whether YOLO mode is enabled
|
208
|
+
* @returns Formatted prompt string
|
209
|
+
*/
|
210
|
+
formatPrompt(taskDescription, isYoloMode) {
|
211
|
+
const truncatedDescription = this.truncateTaskDescription(taskDescription);
|
212
|
+
if (isYoloMode) {
|
213
|
+
return this.generateYoloModePrompt(truncatedDescription);
|
214
|
+
}
|
215
|
+
else {
|
216
|
+
return this.generateStandardPrompt(truncatedDescription);
|
217
|
+
}
|
218
|
+
}
|
219
|
+
/**
|
220
|
+
* Private method to truncate task descriptions to acceptable length
|
221
|
+
* @param description Task description to truncate
|
222
|
+
* @returns Truncated description
|
223
|
+
*/
|
224
|
+
truncateTaskDescription(description) {
|
225
|
+
if (!description || description.length === 0) {
|
226
|
+
return 'Complete task';
|
227
|
+
}
|
228
|
+
if (description.length <= TodoContinuationService.MAX_TASK_DESCRIPTION_LENGTH) {
|
229
|
+
return description;
|
230
|
+
}
|
231
|
+
// Try to truncate at word boundary
|
232
|
+
const truncated = description.substring(0, TodoContinuationService.MAX_TASK_DESCRIPTION_LENGTH);
|
233
|
+
const lastSpaceIndex = truncated.lastIndexOf(' ');
|
234
|
+
if (lastSpaceIndex >
|
235
|
+
TodoContinuationService.MAX_TASK_DESCRIPTION_LENGTH * 0.8) {
|
236
|
+
// Good word boundary found
|
237
|
+
return truncated.substring(0, lastSpaceIndex) + '...';
|
238
|
+
}
|
239
|
+
else {
|
240
|
+
// No good word boundary, hard truncate
|
241
|
+
return (truncated.substring(0, TodoContinuationService.MAX_TASK_DESCRIPTION_LENGTH - 3) + '...');
|
242
|
+
}
|
243
|
+
}
|
244
|
+
/**
|
245
|
+
* Private method to generate standard continuation prompt
|
246
|
+
* @param taskDescription Task description
|
247
|
+
* @param attemptCount Optional attempt count
|
248
|
+
* @returns Standard prompt string
|
249
|
+
*/
|
250
|
+
generateStandardPrompt(taskDescription, attemptCount, previousFailure) {
|
251
|
+
const basePrompt = [
|
252
|
+
'You have an active task that needs completion:',
|
253
|
+
`'${taskDescription}'`,
|
254
|
+
'',
|
255
|
+
"Continue working on this task. Call todo_pause('reason') ONLY if there's an error preventing you from continuing.",
|
256
|
+
'',
|
257
|
+
'Remember to:',
|
258
|
+
'- Focus on the specific task described',
|
259
|
+
'- Make concrete progress toward completion',
|
260
|
+
'- Update the task status when appropriate',
|
261
|
+
'- Use todo_pause() if you encounter blockers',
|
262
|
+
].join('\n');
|
263
|
+
let result = basePrompt;
|
264
|
+
if (previousFailure) {
|
265
|
+
result += `\n\nPrevious failure information: ${previousFailure}`;
|
266
|
+
}
|
267
|
+
if (attemptCount && attemptCount > 1) {
|
268
|
+
const retryNote = `\n\nNote: This is continuation attempt #${attemptCount}. Please make sure to take concrete action.`;
|
269
|
+
result += retryNote;
|
270
|
+
}
|
271
|
+
return result;
|
272
|
+
}
|
273
|
+
/**
|
274
|
+
* Private method to generate YOLO mode continuation prompt
|
275
|
+
* @param taskDescription Task description
|
276
|
+
* @param attemptCount Optional attempt count
|
277
|
+
* @returns YOLO mode prompt string
|
278
|
+
*/
|
279
|
+
generateYoloModePrompt(taskDescription, attemptCount, previousFailure) {
|
280
|
+
const basePrompt = [
|
281
|
+
'CONTINUE TASK IMMEDIATELY:',
|
282
|
+
`'${taskDescription}'`,
|
283
|
+
'',
|
284
|
+
"You MUST continue working on this task. Call todo_pause('reason') ONLY if there's an error preventing you from proceeding.",
|
285
|
+
'',
|
286
|
+
'YOLO MODE - Take action now:',
|
287
|
+
'- Execute the task without asking for confirmation',
|
288
|
+
'- Make concrete progress immediately',
|
289
|
+
'- Only pause if there are actual blocking errors',
|
290
|
+
'- Update task status when complete',
|
291
|
+
].join('\n');
|
292
|
+
let result = basePrompt;
|
293
|
+
if (previousFailure) {
|
294
|
+
result += `\n\nPrevious failure information: ${previousFailure}`;
|
295
|
+
}
|
296
|
+
if (attemptCount && attemptCount > 1) {
|
297
|
+
const urgentRetry = `\n\nATTEMPT #${attemptCount} - YOU MUST TAKE ACTION NOW. No more analysis, proceed with execution.`;
|
298
|
+
result += urgentRetry;
|
299
|
+
}
|
300
|
+
return result;
|
301
|
+
}
|
302
|
+
/**
|
303
|
+
* Private method to evaluate all continuation conditions
|
304
|
+
* @param context Continuation context
|
305
|
+
* @returns Evaluated condition set
|
306
|
+
*/
|
307
|
+
evaluateAllConditions(context) {
|
308
|
+
// Safely get ephemeral setting with fallback
|
309
|
+
let continuationSetting = true;
|
310
|
+
if (context.config &&
|
311
|
+
typeof context.config.getEphemeralSetting === 'function') {
|
312
|
+
continuationSetting =
|
313
|
+
context.config.getEphemeralSetting('todo-continuation');
|
314
|
+
}
|
315
|
+
else if (isMockConfig(context.config)) {
|
316
|
+
// Support test mock structure
|
317
|
+
continuationSetting = context.config.continuationEnabled;
|
318
|
+
}
|
319
|
+
return {
|
320
|
+
hasActiveTodos: this.hasAnyActiveTodos(context.todos),
|
321
|
+
noToolCallsMade: !context.hadToolCalls,
|
322
|
+
continuationEnabled: continuationSetting !== false,
|
323
|
+
notCurrentlyContinuing: !context.currentState.isActive,
|
324
|
+
withinAttemptLimits: context.currentState.attemptCount <
|
325
|
+
TodoContinuationService.MAX_CONTINUATION_ATTEMPTS,
|
326
|
+
withinTimeConstraints: this.checkTimeConstraints(context.currentState.lastPromptTime),
|
327
|
+
};
|
328
|
+
}
|
329
|
+
/**
|
330
|
+
* Private method to check if there are any active todos
|
331
|
+
* @param todos Array of todos to check
|
332
|
+
* @returns Whether active todos exist
|
333
|
+
*/
|
334
|
+
hasAnyActiveTodos(todos) {
|
335
|
+
return todos.some((todo) => todo.status === 'pending' || todo.status === 'in_progress');
|
336
|
+
}
|
337
|
+
/**
|
338
|
+
* Private method to find the best active todo to continue
|
339
|
+
* @param todos Array of todos to search
|
340
|
+
* @returns Best active todo or undefined
|
341
|
+
*/
|
342
|
+
findBestActiveTodo(todos) {
|
343
|
+
// Priority 1: Find in_progress todos (should be max 1)
|
344
|
+
const inProgressTodos = todos.filter((todo) => todo.status === 'in_progress');
|
345
|
+
if (inProgressTodos.length > 0) {
|
346
|
+
return inProgressTodos[0];
|
347
|
+
}
|
348
|
+
// Priority 2: Find pending todos, prioritize by priority
|
349
|
+
const pendingTodos = todos.filter((todo) => todo.status === 'pending');
|
350
|
+
if (pendingTodos.length > 0) {
|
351
|
+
// Sort by priority: high > medium > low
|
352
|
+
const priorityOrder = {
|
353
|
+
high: 3,
|
354
|
+
medium: 2,
|
355
|
+
low: 1,
|
356
|
+
};
|
357
|
+
pendingTodos.sort((a, b) => {
|
358
|
+
const aPriority = priorityOrder[a.priority || 'medium'] || 2;
|
359
|
+
const bPriority = priorityOrder[b.priority || 'medium'] || 2;
|
360
|
+
return bPriority - aPriority; // Descending order (high to low)
|
361
|
+
});
|
362
|
+
return pendingTodos[0];
|
363
|
+
}
|
364
|
+
return undefined;
|
365
|
+
}
|
366
|
+
/**
|
367
|
+
* Private method to check time constraints for continuation
|
368
|
+
* @param lastPromptTime Time of last continuation prompt
|
369
|
+
* @returns Whether time constraints are satisfied
|
370
|
+
*/
|
371
|
+
checkTimeConstraints(lastPromptTime) {
|
372
|
+
if (!lastPromptTime) {
|
373
|
+
return true; // No previous attempt, allowed
|
374
|
+
}
|
375
|
+
const timeSinceLastPrompt = Date.now() - lastPromptTime.getTime();
|
376
|
+
return (timeSinceLastPrompt >=
|
377
|
+
TodoContinuationService.MIN_CONTINUATION_INTERVAL_MS);
|
378
|
+
}
|
379
|
+
}
|
380
|
+
/**
|
381
|
+
* Factory function to create a new TodoContinuationService instance
|
382
|
+
* @returns New service instance
|
383
|
+
*/
|
384
|
+
export function createTodoContinuationService() {
|
385
|
+
return new TodoContinuationService();
|
386
|
+
}
|
387
|
+
//# sourceMappingURL=todoContinuationService.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"todoContinuationService.js","sourceRoot":"","sources":["../../../../src/services/todo-continuation/todoContinuationService.ts"],"names":[],"mappings":"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"}
|