@vybestack/llxprt-code 0.1.18-nightly.250808.f9b79d74 → 0.1.18-nightly.250811.b0db22c6

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 (194) hide show
  1. package/dist/package.json +5 -3
  2. package/dist/src/auth/gemini-oauth-provider.d.ts +15 -0
  3. package/dist/src/auth/gemini-oauth-provider.js +33 -0
  4. package/dist/src/auth/gemini-oauth-provider.js.map +1 -0
  5. package/dist/src/auth/oauth-manager.d.ts +103 -0
  6. package/dist/src/auth/oauth-manager.js +326 -0
  7. package/dist/src/auth/oauth-manager.js.map +1 -0
  8. package/dist/src/auth/oauth-manager.spec.d.ts +6 -0
  9. package/dist/src/auth/oauth-manager.spec.js +523 -0
  10. package/dist/src/auth/oauth-manager.spec.js.map +1 -0
  11. package/dist/src/auth/qwen-oauth-provider.d.ts +14 -0
  12. package/dist/src/auth/qwen-oauth-provider.js +75 -0
  13. package/dist/src/auth/qwen-oauth-provider.js.map +1 -0
  14. package/dist/src/auth/types.d.ts +7 -0
  15. package/dist/src/auth/types.js +7 -0
  16. package/dist/src/auth/types.js.map +1 -0
  17. package/dist/src/config/auth.js +9 -0
  18. package/dist/src/config/auth.js.map +1 -1
  19. package/dist/src/config/config.js +93 -43
  20. package/dist/src/config/config.js.map +1 -1
  21. package/dist/src/config/keyBindings.d.ts +66 -0
  22. package/dist/src/config/keyBindings.js +136 -0
  23. package/dist/src/config/keyBindings.js.map +1 -0
  24. package/dist/src/config/settings.d.ts +3 -59
  25. package/dist/src/config/settings.js +17 -1
  26. package/dist/src/config/settings.js.map +1 -1
  27. package/dist/src/config/settingsSchema.d.ts +587 -0
  28. package/dist/src/config/settingsSchema.js +565 -0
  29. package/dist/src/config/settingsSchema.js.map +1 -0
  30. package/dist/src/gemini.js +12 -109
  31. package/dist/src/gemini.js.map +1 -1
  32. package/dist/src/generated/git-commit.d.ts +1 -1
  33. package/dist/src/generated/git-commit.js +1 -1
  34. package/dist/src/nonInteractiveCli.js +0 -1
  35. package/dist/src/nonInteractiveCli.js.map +1 -1
  36. package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
  37. package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
  38. package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
  39. package/dist/src/providers/logging/git-stats.d.ts +43 -0
  40. package/dist/src/providers/logging/git-stats.js +137 -0
  41. package/dist/src/providers/logging/git-stats.js.map +1 -0
  42. package/dist/src/providers/providerManagerInstance.js +39 -4
  43. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  44. package/dist/src/services/BuiltinCommandLoader.js +4 -0
  45. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  46. package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
  47. package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
  48. package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
  49. package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
  50. package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
  51. package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
  52. package/dist/src/ui/App.js +76 -26
  53. package/dist/src/ui/App.js.map +1 -1
  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/authCommand.d.ts +11 -1
  58. package/dist/src/ui/commands/authCommand.js +143 -48
  59. package/dist/src/ui/commands/authCommand.js.map +1 -1
  60. package/dist/src/ui/commands/chatCommand.js +16 -0
  61. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  62. package/dist/src/ui/commands/ideCommand.js +67 -31
  63. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  64. package/dist/src/ui/commands/keyfileCommand.js +15 -12
  65. package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
  66. package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
  67. package/dist/src/ui/commands/loggingCommand.js +421 -0
  68. package/dist/src/ui/commands/loggingCommand.js.map +1 -0
  69. package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
  70. package/dist/src/ui/commands/privacyCommand.js +6 -3
  71. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  72. package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
  73. package/dist/src/ui/commands/settingsCommand.js +16 -0
  74. package/dist/src/ui/commands/settingsCommand.js.map +1 -0
  75. package/dist/src/ui/commands/setupGithubCommand.js +21 -2
  76. package/dist/src/ui/commands/setupGithubCommand.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/AuthDialog.js +13 -56
  80. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  81. package/dist/src/ui/components/AuthInProgress.js +3 -3
  82. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  83. package/dist/src/ui/components/ContextUsageDisplay.d.ts +10 -0
  84. package/dist/src/ui/components/ContextUsageDisplay.js +27 -0
  85. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
  86. package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
  87. package/dist/src/ui/components/FolderTrustDialog.js +38 -0
  88. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  89. package/dist/src/ui/components/Footer.js +132 -15
  90. package/dist/src/ui/components/Footer.js.map +1 -1
  91. package/dist/src/ui/components/InputPrompt.d.ts +1 -0
  92. package/dist/src/ui/components/InputPrompt.js +87 -31
  93. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  94. package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
  95. package/dist/src/ui/components/LoggingDialog.js +155 -0
  96. package/dist/src/ui/components/LoggingDialog.js.map +1 -0
  97. package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
  98. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  99. package/dist/src/ui/components/ProviderDialog.js +100 -26
  100. package/dist/src/ui/components/ProviderDialog.js.map +1 -1
  101. package/dist/src/ui/components/ProviderModelDialog.js +99 -27
  102. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
  103. package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
  104. package/dist/src/ui/components/SettingsDialog.js +247 -0
  105. package/dist/src/ui/components/SettingsDialog.js.map +1 -0
  106. package/dist/src/ui/components/ThemeDialog.js +4 -15
  107. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  108. package/dist/src/ui/components/TodoPanel.js +93 -18
  109. package/dist/src/ui/components/TodoPanel.js.map +1 -1
  110. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +85 -7
  111. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  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/hooks/atCommandProcessor.js +21 -0
  116. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  117. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -2
  118. package/dist/src/ui/hooks/slashCommandProcessor.js +142 -113
  119. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  120. package/dist/src/ui/hooks/useAtCompletion.js +1 -1
  121. package/dist/src/ui/hooks/useAuthCommand.js +14 -0
  122. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  123. package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
  124. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  125. package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
  126. package/dist/src/ui/hooks/useFolderTrust.js +22 -0
  127. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  128. package/dist/src/ui/hooks/useGeminiStream.js +14 -3
  129. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  130. package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
  131. package/dist/src/ui/hooks/useResponsive.js +19 -0
  132. package/dist/src/ui/hooks/useResponsive.js.map +1 -0
  133. package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
  134. package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
  135. package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
  136. package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
  137. package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
  138. package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
  139. package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
  140. package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
  141. package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
  142. package/dist/src/ui/keyMatchers.d.ts +26 -0
  143. package/dist/src/ui/keyMatchers.js +68 -0
  144. package/dist/src/ui/keyMatchers.js.map +1 -0
  145. package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
  146. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  147. package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
  148. package/dist/src/ui/themes/semantic-resolver.js +32 -0
  149. package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
  150. package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
  151. package/dist/src/ui/themes/semantic-tokens.js +7 -0
  152. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  153. package/dist/src/ui/themes/theme-compat.d.ts +34 -0
  154. package/dist/src/ui/themes/theme-compat.js +65 -0
  155. package/dist/src/ui/themes/theme-compat.js.map +1 -0
  156. package/dist/src/ui/themes/theme-manager.d.ts +8 -0
  157. package/dist/src/ui/themes/theme-manager.js +18 -0
  158. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  159. package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
  160. package/dist/src/ui/utils/CodeColorizer.js +4 -3
  161. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  162. package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
  163. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  164. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  165. package/dist/src/ui/utils/commandUtils.js +22 -1
  166. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  167. package/dist/src/ui/utils/responsive.d.ts +16 -0
  168. package/dist/src/ui/utils/responsive.js +111 -0
  169. package/dist/src/ui/utils/responsive.js.map +1 -0
  170. package/dist/src/utils/cleanup.d.ts +2 -2
  171. package/dist/src/utils/cleanup.js +2 -2
  172. package/dist/src/utils/cleanup.js.map +1 -1
  173. package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
  174. package/dist/src/utils/dialogScopeUtils.js +48 -0
  175. package/dist/src/utils/dialogScopeUtils.js.map +1 -0
  176. package/dist/src/utils/gitUtils.d.ts +9 -0
  177. package/dist/src/utils/gitUtils.js +17 -0
  178. package/dist/src/utils/gitUtils.js.map +1 -1
  179. package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
  180. package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
  181. package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
  182. package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
  183. package/dist/src/utils/privacy/PrivacyManager.js +133 -0
  184. package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
  185. package/dist/src/utils/sandbox.js +10 -0
  186. package/dist/src/utils/sandbox.js.map +1 -1
  187. package/dist/src/utils/settingsUtils.d.ts +126 -0
  188. package/dist/src/utils/settingsUtils.js +327 -0
  189. package/dist/src/utils/settingsUtils.js.map +1 -0
  190. package/dist/tsconfig.tsbuildinfo +1 -1
  191. package/package.json +5 -3
  192. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
  193. package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -17
  194. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
@@ -0,0 +1,385 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, beforeEach } from 'vitest';
7
+ import { TodoContinuationService, } from './todoContinuationService.js';
8
+ describe('TodoContinuationService', () => {
9
+ let service;
10
+ let mockConfig;
11
+ let mockState;
12
+ beforeEach(() => {
13
+ service = new TodoContinuationService();
14
+ mockConfig = {};
15
+ mockState = {
16
+ isActive: false,
17
+ attemptCount: 0,
18
+ };
19
+ });
20
+ // Helper functions to create test data
21
+ const createTodo = (id, content, status = 'pending', priority = 'medium') => ({
22
+ id,
23
+ content,
24
+ status,
25
+ priority,
26
+ });
27
+ const createConfig = (overrides = {}) => ({
28
+ taskDescription: 'Complete user authentication',
29
+ isYoloMode: false,
30
+ ...overrides,
31
+ });
32
+ const createContext = (overrides = {}) => ({
33
+ todos: [],
34
+ hadToolCalls: false,
35
+ isResponding: false,
36
+ config: mockConfig,
37
+ currentState: mockState,
38
+ ...overrides,
39
+ });
40
+ describe('Prompt Generation', () => {
41
+ describe('@requirement REQ-002.1 REQ-002.2', () => {
42
+ it('generates standard mode prompt with task description', () => {
43
+ const config = createConfig({
44
+ taskDescription: 'Implement user registration feature',
45
+ isYoloMode: false,
46
+ });
47
+ const result = service.generateContinuationPrompt(config);
48
+ expect(result).toContain('Implement user registration feature');
49
+ expect(result).toMatch(/continue|proceed|working/i);
50
+ expect(result).not.toMatch(/urgent|critical|immediately/i);
51
+ });
52
+ it('includes specific task description in prompt', () => {
53
+ const specificTask = 'Fix database connection timeout in UserService.authenticate method';
54
+ const config = createConfig({
55
+ taskDescription: specificTask,
56
+ isYoloMode: false,
57
+ });
58
+ const result = service.generateContinuationPrompt(config);
59
+ expect(result).toContain(specificTask);
60
+ });
61
+ it('handles task descriptions with special characters', () => {
62
+ const complexTask = 'Update API endpoints: /users/{id}/profile & /auth/tokens (v2.1)';
63
+ const config = createConfig({
64
+ taskDescription: complexTask,
65
+ isYoloMode: false,
66
+ });
67
+ const result = service.generateContinuationPrompt(config);
68
+ expect(result).toContain(complexTask);
69
+ });
70
+ });
71
+ describe('@requirement REQ-002.3', () => {
72
+ it('generates YOLO mode prompt with stronger wording', () => {
73
+ const config = createConfig({
74
+ taskDescription: 'Deploy production hotfix',
75
+ isYoloMode: true,
76
+ });
77
+ const result = service.generateContinuationPrompt(config);
78
+ expect(result).toContain('Deploy production hotfix');
79
+ expect(result).toMatch(/urgent|critical|immediately|essential/i);
80
+ expect(result.length).toBeGreaterThan(50); // YOLO prompts should be more detailed
81
+ });
82
+ it('uses different wording between standard and YOLO mode', () => {
83
+ const taskDescription = 'Complete user authentication';
84
+ const standardPrompt = service.generateContinuationPrompt(createConfig({ taskDescription, isYoloMode: false }));
85
+ const yoloPrompt = service.generateContinuationPrompt(createConfig({ taskDescription, isYoloMode: true }));
86
+ expect(standardPrompt).not.toEqual(yoloPrompt);
87
+ expect(yoloPrompt).toMatch(/urgent|critical|immediately/i);
88
+ expect(standardPrompt).not.toMatch(/urgent|critical|immediately/i);
89
+ });
90
+ });
91
+ it('handles retry attempts in prompt generation', () => {
92
+ const config = createConfig({
93
+ taskDescription: 'Fix failing tests',
94
+ isYoloMode: false,
95
+ attemptCount: 2,
96
+ });
97
+ const result = service.generateContinuationPrompt(config);
98
+ expect(result).toContain('Fix failing tests');
99
+ expect(result).toMatch(/attempt|retry|try again/i);
100
+ });
101
+ it('handles previous failure information in prompts', () => {
102
+ const config = createConfig({
103
+ taskDescription: 'Deploy application',
104
+ isYoloMode: true,
105
+ attemptCount: 1,
106
+ previousFailure: 'Connection timeout during database migration',
107
+ });
108
+ const result = service.generateContinuationPrompt(config);
109
+ expect(result).toContain('Deploy application');
110
+ expect(result).toContain('Connection timeout during database migration');
111
+ });
112
+ it('truncates very long task descriptions', () => {
113
+ const longTask = 'A'.repeat(500); // Exceeds MAX_TASK_DESCRIPTION_LENGTH
114
+ const config = createConfig({
115
+ taskDescription: longTask,
116
+ isYoloMode: false,
117
+ });
118
+ const result = service.generateContinuationPrompt(config);
119
+ expect(result.length).toBeLessThan(longTask.length + 100); // Should be truncated
120
+ expect(result).toMatch(/\.\.\./); // Should have ellipsis
121
+ });
122
+ });
123
+ describe('Continuation Logic', () => {
124
+ describe('@requirement REQ-002.1', () => {
125
+ it('should continue when todos are active and no tool calls were made', () => {
126
+ const todos = [
127
+ createTodo('1', 'Task 1', 'in_progress'),
128
+ createTodo('2', 'Task 2', 'pending'),
129
+ ];
130
+ const context = createContext({
131
+ todos,
132
+ hadToolCalls: false,
133
+ currentState: { ...mockState, isActive: false },
134
+ });
135
+ const result = service.checkContinuationConditions(context);
136
+ expect(result.shouldContinue).toBe(true);
137
+ expect(result.reason).toMatch(/active.*todo/i);
138
+ expect(result.activeTodo).toBeDefined();
139
+ });
140
+ it('should not continue when continuation is disabled in config', () => {
141
+ const todos = [createTodo('1', 'Task 1', 'in_progress')];
142
+ // Mock config with continuation disabled
143
+ const disabledConfig = {
144
+ continuationEnabled: false,
145
+ };
146
+ const context = createContext({
147
+ todos,
148
+ hadToolCalls: false,
149
+ config: disabledConfig,
150
+ });
151
+ const result = service.checkContinuationConditions(context);
152
+ expect(result.shouldContinue).toBe(false);
153
+ expect(result.reason).toMatch(/disabled/i);
154
+ });
155
+ it('should not continue when tool calls were made in current turn', () => {
156
+ const todos = [createTodo('1', 'Task 1', 'in_progress')];
157
+ const context = createContext({
158
+ todos,
159
+ hadToolCalls: true,
160
+ });
161
+ const result = service.checkContinuationConditions(context);
162
+ expect(result.shouldContinue).toBe(false);
163
+ expect(result.reason).toMatch(/tool.*call/i);
164
+ });
165
+ it('should not continue when no active todos exist', () => {
166
+ const todos = [
167
+ createTodo('1', 'Task 1', 'completed'),
168
+ createTodo('2', 'Task 2', 'completed'),
169
+ ];
170
+ const context = createContext({
171
+ todos,
172
+ hadToolCalls: false,
173
+ });
174
+ const result = service.checkContinuationConditions(context);
175
+ expect(result.shouldContinue).toBe(false);
176
+ expect(result.reason).toMatch(/no.*active.*todo/i);
177
+ });
178
+ it('should not continue when maximum attempts exceeded', () => {
179
+ const todos = [createTodo('1', 'Task 1', 'in_progress')];
180
+ const stateWithMaxAttempts = {
181
+ ...mockState,
182
+ attemptCount: 5, // Exceeds MAX_CONTINUATION_ATTEMPTS
183
+ };
184
+ const context = createContext({
185
+ todos,
186
+ hadToolCalls: false,
187
+ currentState: stateWithMaxAttempts,
188
+ });
189
+ const result = service.checkContinuationConditions(context);
190
+ expect(result.shouldContinue).toBe(false);
191
+ expect(result.reason).toMatch(/attempt.*limit/i);
192
+ });
193
+ it('should not continue when already in continuation state', () => {
194
+ const todos = [createTodo('1', 'Task 1', 'in_progress')];
195
+ const activeState = {
196
+ ...mockState,
197
+ isActive: true,
198
+ };
199
+ const context = createContext({
200
+ todos,
201
+ hadToolCalls: false,
202
+ currentState: activeState,
203
+ });
204
+ const result = service.checkContinuationConditions(context);
205
+ expect(result.shouldContinue).toBe(false);
206
+ expect(result.reason).toMatch(/already.*continuing/i);
207
+ });
208
+ it('should respect time constraints between continuation attempts', () => {
209
+ const todos = [createTodo('1', 'Task 1', 'in_progress')];
210
+ const recentState = {
211
+ ...mockState,
212
+ lastPromptTime: new Date(Date.now() - 500), // Very recent
213
+ };
214
+ const context = createContext({
215
+ todos,
216
+ hadToolCalls: false,
217
+ currentState: recentState,
218
+ });
219
+ const result = service.checkContinuationConditions(context);
220
+ expect(result.shouldContinue).toBe(false);
221
+ expect(result.reason).toMatch(/time.*constraint/i);
222
+ });
223
+ });
224
+ it('provides detailed condition evaluation in result', () => {
225
+ const todos = [createTodo('1', 'Task 1', 'in_progress')];
226
+ const context = createContext({
227
+ todos,
228
+ hadToolCalls: false,
229
+ });
230
+ const result = service.checkContinuationConditions(context);
231
+ expect(result.conditions).toBeDefined();
232
+ expect(result.conditions.hasActiveTodos).toBe(true);
233
+ expect(result.conditions.noToolCallsMade).toBe(true);
234
+ expect(result.conditions.continuationEnabled).toBeDefined();
235
+ expect(result.conditions.notCurrentlyContinuing).toBeDefined();
236
+ expect(result.conditions.withinAttemptLimits).toBeDefined();
237
+ expect(result.conditions.withinTimeConstraints).toBeDefined();
238
+ });
239
+ });
240
+ describe('Task Description Extraction', () => {
241
+ describe('@requirement REQ-002.2', () => {
242
+ it('extracts task description from in_progress todos first', () => {
243
+ const inProgressTodo = createTodo('1', 'Critical bug fix in payment processor', 'in_progress');
244
+ const pendingTodo = createTodo('2', 'Add unit tests for user service', 'pending');
245
+ const todos = [pendingTodo, inProgressTodo]; // Order shouldn't matter
246
+ const context = createContext({ todos, hadToolCalls: false });
247
+ const result = service.checkContinuationConditions(context);
248
+ expect(result.shouldContinue).toBe(true);
249
+ expect(result.activeTodo).toEqual(inProgressTodo);
250
+ });
251
+ it('falls back to pending todos when no in_progress todos exist', () => {
252
+ const pendingTodo1 = createTodo('1', 'Implement user authentication', 'pending', 'high');
253
+ const pendingTodo2 = createTodo('2', 'Update documentation', 'pending', 'low');
254
+ const todos = [pendingTodo2, pendingTodo1]; // Lower priority first
255
+ const context = createContext({ todos, hadToolCalls: false });
256
+ const result = service.checkContinuationConditions(context);
257
+ expect(result.shouldContinue).toBe(true);
258
+ expect(result.activeTodo).toEqual(pendingTodo1); // Should pick higher priority
259
+ });
260
+ it('formats todo content into readable task description', () => {
261
+ const todo = createTodo('1', 'Fix: Database connection pool exhaustion in UserService.authenticate() method');
262
+ const result = service.formatTaskDescription(todo);
263
+ expect(result).toBe('Fix: Database connection pool exhaustion in UserService.authenticate() method');
264
+ expect(result.length).toBeGreaterThan(0);
265
+ });
266
+ it('handles malformed todo content gracefully', () => {
267
+ const malformedTodo = createTodo('1', ''); // Empty content (should not happen due to schema)
268
+ const result = service.formatTaskDescription(malformedTodo);
269
+ expect(result).toBeDefined();
270
+ expect(typeof result).toBe('string');
271
+ expect(result.length).toBeGreaterThan(0); // Should provide fallback
272
+ });
273
+ it('prioritizes high-priority pending todos over low-priority ones', () => {
274
+ const lowPriorityTodo = createTodo('1', 'Update README', 'pending', 'low');
275
+ const highPriorityTodo = createTodo('2', 'Fix security vulnerability', 'pending', 'high');
276
+ const todos = [lowPriorityTodo, highPriorityTodo];
277
+ const context = createContext({ todos, hadToolCalls: false });
278
+ const result = service.checkContinuationConditions(context);
279
+ expect(result.activeTodo).toEqual(highPriorityTodo);
280
+ });
281
+ });
282
+ });
283
+ describe('Edge Cases and Error Handling', () => {
284
+ it('handles empty todo list gracefully', () => {
285
+ const context = createContext({
286
+ todos: [],
287
+ hadToolCalls: false,
288
+ });
289
+ const result = service.checkContinuationConditions(context);
290
+ expect(result.shouldContinue).toBe(false);
291
+ expect(result.reason).toMatch(/no.*active.*todo/i);
292
+ expect(result.activeTodo).toBeUndefined();
293
+ });
294
+ it('handles null/undefined inputs safely', () => {
295
+ expect(() => {
296
+ const nullContext = null;
297
+ service.checkContinuationConditions(nullContext);
298
+ }).toThrow();
299
+ expect(() => {
300
+ const nullConfig = null;
301
+ service.generateContinuationPrompt(nullConfig);
302
+ }).toThrow();
303
+ });
304
+ it('handles empty task description strings', () => {
305
+ const config = createConfig({
306
+ taskDescription: '',
307
+ isYoloMode: false,
308
+ });
309
+ const result = service.generateContinuationPrompt(config);
310
+ expect(result).toBeDefined();
311
+ expect(typeof result).toBe('string');
312
+ expect(result.length).toBeGreaterThan(0); // Should provide fallback prompt
313
+ });
314
+ it('handles very long task descriptions by truncating', () => {
315
+ const veryLongDescription = 'Task: ' + 'A'.repeat(1000);
316
+ const config = createConfig({
317
+ taskDescription: veryLongDescription,
318
+ isYoloMode: false,
319
+ });
320
+ const result = service.generateContinuationPrompt(config);
321
+ expect(result.length).toBeLessThan(veryLongDescription.length + 50);
322
+ expect(result).toContain('Task:');
323
+ });
324
+ it('handles todos with undefined optional fields', () => {
325
+ const minimalTodo = {
326
+ id: '1',
327
+ content: 'Minimal todo item',
328
+ status: 'in_progress',
329
+ priority: 'medium',
330
+ // subtasks and toolCalls are undefined
331
+ };
332
+ const result = service.formatTaskDescription(minimalTodo);
333
+ expect(result).toBe('Minimal todo item');
334
+ });
335
+ it('creates initial continuation state correctly', () => {
336
+ const state = service.createContinuationState();
337
+ expect(state.isActive).toBe(false);
338
+ expect(state.attemptCount).toBe(0);
339
+ expect(state.taskDescription).toBeUndefined();
340
+ expect(state.lastPromptTime).toBeUndefined();
341
+ });
342
+ });
343
+ describe('Helper Methods', () => {
344
+ describe('shouldContinue', () => {
345
+ it('returns true when conditions are met', () => {
346
+ const result = service.shouldContinue(mockConfig, true, false);
347
+ expect(typeof result).toBe('boolean');
348
+ // Implementation will determine exact behavior
349
+ });
350
+ it('returns false when no active todos', () => {
351
+ const result = service.shouldContinue(mockConfig, false, false);
352
+ expect(result).toBe(false);
353
+ });
354
+ it('returns false when tool calls were made', () => {
355
+ const result = service.shouldContinue(mockConfig, true, true);
356
+ expect(result).toBe(false);
357
+ });
358
+ });
359
+ describe('formatPrompt', () => {
360
+ it('formats prompt with task description and mode', () => {
361
+ const taskDescription = 'Implement OAuth2 flow';
362
+ const standardPrompt = service.formatPrompt(taskDescription, false);
363
+ const yoloPrompt = service.formatPrompt(taskDescription, true);
364
+ expect(standardPrompt).toContain(taskDescription);
365
+ expect(yoloPrompt).toContain(taskDescription);
366
+ expect(standardPrompt).not.toEqual(yoloPrompt);
367
+ });
368
+ });
369
+ describe('shouldAllowContinuation', () => {
370
+ it('respects configuration settings', () => {
371
+ const result = service.shouldAllowContinuation(mockConfig, mockState);
372
+ expect(typeof result).toBe('boolean');
373
+ });
374
+ it('considers attempt limits', () => {
375
+ const maxAttemptState = {
376
+ ...mockState,
377
+ attemptCount: 10, // High number
378
+ };
379
+ const result = service.shouldAllowContinuation(mockConfig, maxAttemptState);
380
+ expect(typeof result).toBe('boolean');
381
+ });
382
+ });
383
+ });
384
+ });
385
+ //# sourceMappingURL=todoContinuationService.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todoContinuationService.spec.js","sourceRoot":"","sources":["../../../../src/services/todo-continuation/todoContinuationService.spec.ts"],"names":[],"mappings":"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"}