@vybestack/llxprt-code 0.1.18 → 0.1.19-beta

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 (206) hide show
  1. package/README.md +1 -0
  2. package/dist/package.json +6 -4
  3. package/dist/src/acp/acpPeer.js +72 -64
  4. package/dist/src/acp/acpPeer.js.map +1 -1
  5. package/dist/src/commands/mcp/add.d.ts +7 -0
  6. package/dist/src/commands/mcp/add.js +155 -0
  7. package/dist/src/commands/mcp/add.js.map +1 -0
  8. package/dist/src/commands/mcp/list.d.ts +8 -0
  9. package/dist/src/commands/mcp/list.js +110 -0
  10. package/dist/src/commands/mcp/list.js.map +1 -0
  11. package/dist/src/commands/mcp/remove.d.ts +7 -0
  12. package/dist/src/commands/mcp/remove.js +44 -0
  13. package/dist/src/commands/mcp/remove.js.map +1 -0
  14. package/dist/src/commands/mcp.d.ts +7 -0
  15. package/dist/src/commands/mcp.js +23 -0
  16. package/dist/src/commands/mcp.js.map +1 -0
  17. package/dist/src/config/auth.js +5 -0
  18. package/dist/src/config/auth.js.map +1 -1
  19. package/dist/src/config/config.js +80 -37
  20. package/dist/src/config/config.js.map +1 -1
  21. package/dist/src/config/keyBindings.d.ts +64 -0
  22. package/dist/src/config/keyBindings.js +137 -0
  23. package/dist/src/config/keyBindings.js.map +1 -0
  24. package/dist/src/config/settings.d.ts +7 -1
  25. package/dist/src/config/settings.js +20 -4
  26. package/dist/src/config/settings.js.map +1 -1
  27. package/dist/src/gemini.js +12 -109
  28. package/dist/src/gemini.js.map +1 -1
  29. package/dist/src/generated/git-commit.d.ts +1 -1
  30. package/dist/src/generated/git-commit.js +1 -1
  31. package/dist/src/nonInteractiveCli.js +0 -1
  32. package/dist/src/nonInteractiveCli.js.map +1 -1
  33. package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
  34. package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
  35. package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
  36. package/dist/src/providers/logging/git-stats.d.ts +43 -0
  37. package/dist/src/providers/logging/git-stats.js +137 -0
  38. package/dist/src/providers/logging/git-stats.js.map +1 -0
  39. package/dist/src/providers/providerManagerInstance.js +7 -0
  40. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  41. package/dist/src/services/BuiltinCommandLoader.js +2 -0
  42. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  43. package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
  44. package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
  45. package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
  46. package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
  47. package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
  48. package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
  49. package/dist/src/ui/App.js +111 -35
  50. package/dist/src/ui/App.js.map +1 -1
  51. package/dist/src/ui/IdeIntegrationNudge.d.ts +14 -0
  52. package/dist/src/ui/IdeIntegrationNudge.js +32 -0
  53. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -0
  54. package/dist/src/ui/colors.d.ts +5 -0
  55. package/dist/src/ui/colors.js +51 -0
  56. package/dist/src/ui/colors.js.map +1 -1
  57. package/dist/src/ui/commands/chatCommand.js +16 -0
  58. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  59. package/dist/src/ui/commands/diagnosticsCommand.js +9 -1
  60. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  61. package/dist/src/ui/commands/ideCommand.js +67 -31
  62. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  63. package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
  64. package/dist/src/ui/commands/loggingCommand.js +421 -0
  65. package/dist/src/ui/commands/loggingCommand.js.map +1 -0
  66. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  67. package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
  68. package/dist/src/ui/commands/privacyCommand.js +6 -3
  69. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  70. package/dist/src/ui/commands/profileCommand.js +1 -0
  71. package/dist/src/ui/commands/profileCommand.js.map +1 -1
  72. package/dist/src/ui/commands/setCommand.js +2 -0
  73. package/dist/src/ui/commands/setCommand.js.map +1 -1
  74. package/dist/src/ui/commands/setupGithubCommand.js +90 -26
  75. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  76. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  77. package/dist/src/ui/commands/types.d.ts +14 -2
  78. package/dist/src/ui/commands/types.js.map +1 -1
  79. package/dist/src/ui/components/AuthInProgress.js +3 -3
  80. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  81. package/dist/src/ui/components/ContextUsageDisplay.d.ts +10 -0
  82. package/dist/src/ui/components/ContextUsageDisplay.js +27 -0
  83. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
  84. package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
  85. package/dist/src/ui/components/FolderTrustDialog.js +38 -0
  86. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  87. package/dist/src/ui/components/Footer.d.ts +0 -1
  88. package/dist/src/ui/components/Footer.js +132 -15
  89. package/dist/src/ui/components/Footer.js.map +1 -1
  90. package/dist/src/ui/components/InputPrompt.js +32 -28
  91. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  92. package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
  93. package/dist/src/ui/components/LoggingDialog.js +155 -0
  94. package/dist/src/ui/components/LoggingDialog.js.map +1 -0
  95. package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
  96. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  97. package/dist/src/ui/components/ProviderDialog.js +100 -26
  98. package/dist/src/ui/components/ProviderDialog.js.map +1 -1
  99. package/dist/src/ui/components/ProviderModelDialog.js +99 -27
  100. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
  101. package/dist/src/ui/components/TodoPanel.d.ts +11 -0
  102. package/dist/src/ui/components/TodoPanel.js +206 -0
  103. package/dist/src/ui/components/TodoPanel.js.map +1 -0
  104. package/dist/src/ui/components/ToolsDialog.d.ts +2 -2
  105. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +116 -16
  106. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  107. package/dist/src/ui/components/messages/ToolGroupMessage.js +36 -8
  108. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  109. package/dist/src/ui/components/todo-utils.d.ts +16 -0
  110. package/dist/src/ui/components/todo-utils.js +41 -0
  111. package/dist/src/ui/components/todo-utils.js.map +1 -0
  112. package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
  113. package/dist/src/ui/contexts/SettingsContext.js +15 -0
  114. package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
  115. package/dist/src/ui/contexts/TodoContext.d.ts +15 -0
  116. package/dist/src/ui/contexts/TodoContext.js +18 -0
  117. package/dist/src/ui/contexts/TodoContext.js.map +1 -0
  118. package/dist/src/ui/contexts/TodoProvider.d.ts +7 -0
  119. package/dist/src/ui/contexts/TodoProvider.js +62 -0
  120. package/dist/src/ui/contexts/TodoProvider.js.map +1 -0
  121. package/dist/src/ui/contexts/ToolCallContext.d.ts +19 -0
  122. package/dist/src/ui/contexts/ToolCallContext.js +13 -0
  123. package/dist/src/ui/contexts/ToolCallContext.js.map +1 -0
  124. package/dist/src/ui/contexts/ToolCallProvider.d.ts +12 -0
  125. package/dist/src/ui/contexts/ToolCallProvider.js +62 -0
  126. package/dist/src/ui/contexts/ToolCallProvider.js.map +1 -0
  127. package/dist/src/ui/hooks/atCommandProcessor.js +28 -4
  128. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  129. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +5 -1
  130. package/dist/src/ui/hooks/slashCommandProcessor.js +137 -112
  131. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  132. package/dist/src/ui/hooks/useAtCompletion.d.ts +23 -0
  133. package/dist/src/ui/hooks/useAtCompletion.js +180 -0
  134. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -0
  135. package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
  136. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  137. package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
  138. package/dist/src/ui/hooks/useFolderTrust.js +22 -0
  139. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  140. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  141. package/dist/src/ui/hooks/useGeminiStream.js +16 -4
  142. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  143. package/dist/src/ui/hooks/useReactToolScheduler.js +12 -12
  144. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  145. package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
  146. package/dist/src/ui/hooks/useResponsive.js +19 -0
  147. package/dist/src/ui/hooks/useResponsive.js.map +1 -0
  148. package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
  149. package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
  150. package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
  151. package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
  152. package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
  153. package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
  154. package/dist/src/ui/hooks/useToolsDialog.d.ts +2 -2
  155. package/dist/src/ui/hooks/useToolsDialog.js.map +1 -1
  156. package/dist/src/ui/keyMatchers.d.ts +26 -0
  157. package/dist/src/ui/keyMatchers.js +68 -0
  158. package/dist/src/ui/keyMatchers.js.map +1 -0
  159. package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
  160. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  161. package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
  162. package/dist/src/ui/themes/semantic-resolver.js +32 -0
  163. package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
  164. package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
  165. package/dist/src/ui/themes/semantic-tokens.js +7 -0
  166. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  167. package/dist/src/ui/themes/theme-compat.d.ts +34 -0
  168. package/dist/src/ui/themes/theme-compat.js +65 -0
  169. package/dist/src/ui/themes/theme-compat.js.map +1 -0
  170. package/dist/src/ui/themes/theme-manager.d.ts +8 -0
  171. package/dist/src/ui/themes/theme-manager.js +18 -0
  172. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  173. package/dist/src/ui/types.d.ts +1 -1
  174. package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
  175. package/dist/src/ui/utils/CodeColorizer.js +4 -3
  176. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  177. package/dist/src/ui/utils/ConsolePatcher.d.ts +1 -0
  178. package/dist/src/ui/utils/ConsolePatcher.js +3 -0
  179. package/dist/src/ui/utils/ConsolePatcher.js.map +1 -1
  180. package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
  181. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  182. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  183. package/dist/src/ui/utils/commandUtils.js +22 -1
  184. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  185. package/dist/src/ui/utils/responsive.d.ts +16 -0
  186. package/dist/src/ui/utils/responsive.js +111 -0
  187. package/dist/src/ui/utils/responsive.js.map +1 -0
  188. package/dist/src/utils/cleanup.d.ts +2 -2
  189. package/dist/src/utils/cleanup.js +2 -2
  190. package/dist/src/utils/cleanup.js.map +1 -1
  191. package/dist/src/utils/gitUtils.d.ts +21 -1
  192. package/dist/src/utils/gitUtils.js +70 -3
  193. package/dist/src/utils/gitUtils.js.map +1 -1
  194. package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
  195. package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
  196. package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
  197. package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
  198. package/dist/src/utils/privacy/PrivacyManager.js +133 -0
  199. package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
  200. package/dist/src/utils/sandbox.js +430 -401
  201. package/dist/src/utils/sandbox.js.map +1 -1
  202. package/dist/tsconfig.tsbuildinfo +1 -1
  203. package/package.json +6 -4
  204. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
  205. package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -17
  206. 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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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};