@vybestack/llxprt-code 0.4.8 → 0.5.0-nightly.251102.f115237d

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 (265) hide show
  1. package/dist/package.json +5 -3
  2. package/dist/src/auth/__tests__/oauthManager.safety.test.d.ts +6 -0
  3. package/dist/src/auth/__tests__/oauthManager.safety.test.js +49 -0
  4. package/dist/src/auth/__tests__/oauthManager.safety.test.js.map +1 -0
  5. package/dist/src/auth/oauth-manager.d.ts +11 -0
  6. package/dist/src/auth/oauth-manager.js +62 -29
  7. package/dist/src/auth/oauth-manager.js.map +1 -1
  8. package/dist/src/auth/oauth-manager.spec.js +7 -2
  9. package/dist/src/auth/oauth-manager.spec.js.map +1 -1
  10. package/dist/src/config/__tests__/nonInteractiveTools.test.d.ts +6 -0
  11. package/dist/src/config/__tests__/nonInteractiveTools.test.js +13 -0
  12. package/dist/src/config/__tests__/nonInteractiveTools.test.js.map +1 -0
  13. package/dist/src/config/__tests__/profileBootstrap.test.d.ts +6 -0
  14. package/dist/src/config/__tests__/profileBootstrap.test.js +91 -0
  15. package/dist/src/config/__tests__/profileBootstrap.test.js.map +1 -0
  16. package/dist/src/config/config.d.ts +6 -2
  17. package/dist/src/config/config.js +219 -18
  18. package/dist/src/config/config.js.map +1 -1
  19. package/dist/src/config/profileBootstrap.d.ts +64 -0
  20. package/dist/src/config/profileBootstrap.js +140 -0
  21. package/dist/src/config/profileBootstrap.js.map +1 -0
  22. package/dist/src/gemini.js +68 -23
  23. package/dist/src/gemini.js.map +1 -1
  24. package/dist/src/gemini.test.js +1 -2
  25. package/dist/src/gemini.test.js.map +1 -1
  26. package/dist/src/generated/git-commit.d.ts +1 -1
  27. package/dist/src/generated/git-commit.js +1 -1
  28. package/dist/src/integration-tests/base-url-behavior.integration.test.js +110 -450
  29. package/dist/src/integration-tests/base-url-behavior.integration.test.js.map +1 -1
  30. package/dist/src/integration-tests/model-params-isolation.integration.test.js +101 -539
  31. package/dist/src/integration-tests/model-params-isolation.integration.test.js.map +1 -1
  32. package/dist/src/integration-tests/modelParams.integration.test.js +86 -761
  33. package/dist/src/integration-tests/modelParams.integration.test.js.map +1 -1
  34. package/dist/src/integration-tests/provider-multi-runtime.integration.test.d.ts +6 -0
  35. package/dist/src/integration-tests/provider-multi-runtime.integration.test.js +198 -0
  36. package/dist/src/integration-tests/provider-multi-runtime.integration.test.js.map +1 -0
  37. package/dist/src/integration-tests/provider-switching.integration.test.js +97 -151
  38. package/dist/src/integration-tests/provider-switching.integration.test.js.map +1 -1
  39. package/dist/src/integration-tests/runtime-isolation.test.d.ts +13 -0
  40. package/dist/src/integration-tests/runtime-isolation.test.js +170 -0
  41. package/dist/src/integration-tests/runtime-isolation.test.js.map +1 -0
  42. package/dist/src/integration-tests/test-utils.js +19 -2
  43. package/dist/src/integration-tests/test-utils.js.map +1 -1
  44. package/dist/src/integration-tests/test-utils.test.js +9 -8
  45. package/dist/src/integration-tests/test-utils.test.js.map +1 -1
  46. package/dist/src/integration-tests/todo-continuation.integration.test.js +5 -2
  47. package/dist/src/integration-tests/todo-continuation.integration.test.js.map +1 -1
  48. package/dist/src/integration-tests/tools-governance.integration.test.d.ts +6 -0
  49. package/dist/src/integration-tests/tools-governance.integration.test.js +98 -0
  50. package/dist/src/integration-tests/tools-governance.integration.test.js.map +1 -0
  51. package/dist/src/nonInteractiveCli.js +36 -11
  52. package/dist/src/nonInteractiveCli.js.map +1 -1
  53. package/dist/src/providers/logging/git-stats.test.js +11 -1
  54. package/dist/src/providers/logging/git-stats.test.js.map +1 -1
  55. package/dist/src/providers/logging/multi-provider-logging.integration.test.js +1 -2
  56. package/dist/src/providers/logging/multi-provider-logging.integration.test.js.map +1 -1
  57. package/dist/src/providers/logging/performance.test.js +1 -1
  58. package/dist/src/providers/logging/performance.test.js.map +1 -1
  59. package/dist/src/providers/oauth-provider-registration.d.ts +2 -2
  60. package/dist/src/providers/oauth-provider-registration.js +25 -9
  61. package/dist/src/providers/oauth-provider-registration.js.map +1 -1
  62. package/dist/src/providers/provider-gemini-switching.test.js +67 -89
  63. package/dist/src/providers/provider-gemini-switching.test.js.map +1 -1
  64. package/dist/src/providers/provider-switching.integration.test.js +42 -98
  65. package/dist/src/providers/provider-switching.integration.test.js.map +1 -1
  66. package/dist/src/providers/providerConfigUtils.d.ts +12 -7
  67. package/dist/src/providers/providerConfigUtils.js +31 -99
  68. package/dist/src/providers/providerConfigUtils.js.map +1 -1
  69. package/dist/src/providers/providerManagerInstance.d.ts +17 -1
  70. package/dist/src/providers/providerManagerInstance.js +157 -175
  71. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  72. package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js +19 -15
  73. package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js.map +1 -1
  74. package/dist/src/providers/providerManagerInstance.test.js +2 -5
  75. package/dist/src/providers/providerManagerInstance.test.js.map +1 -1
  76. package/dist/src/runtime/__tests__/profileApplication.test.d.ts +5 -0
  77. package/dist/src/runtime/__tests__/profileApplication.test.js +232 -0
  78. package/dist/src/runtime/__tests__/profileApplication.test.js.map +1 -0
  79. package/dist/src/runtime/__tests__/runtimeIsolation.test.d.ts +5 -0
  80. package/dist/src/runtime/__tests__/runtimeIsolation.test.js +376 -0
  81. package/dist/src/runtime/__tests__/runtimeIsolation.test.js.map +1 -0
  82. package/dist/src/runtime/agentRuntimeAdapter.d.ts +249 -0
  83. package/dist/src/runtime/agentRuntimeAdapter.js +506 -0
  84. package/dist/src/runtime/agentRuntimeAdapter.js.map +1 -0
  85. package/dist/src/runtime/agentRuntimeAdapter.spec.d.ts +6 -0
  86. package/dist/src/runtime/agentRuntimeAdapter.spec.js +866 -0
  87. package/dist/src/runtime/agentRuntimeAdapter.spec.js.map +1 -0
  88. package/dist/src/runtime/messages.d.ts +28 -0
  89. package/dist/src/runtime/messages.js +64 -0
  90. package/dist/src/runtime/messages.js.map +1 -0
  91. package/dist/src/runtime/profileApplication.d.ts +33 -0
  92. package/dist/src/runtime/profileApplication.js +191 -0
  93. package/dist/src/runtime/profileApplication.js.map +1 -0
  94. package/dist/src/runtime/providerConfigUtils.test.d.ts +1 -0
  95. package/dist/src/runtime/providerConfigUtils.test.js +68 -0
  96. package/dist/src/runtime/providerConfigUtils.test.js.map +1 -0
  97. package/dist/src/runtime/runtimeContextFactory.d.ts +102 -0
  98. package/dist/src/runtime/runtimeContextFactory.js +190 -0
  99. package/dist/src/runtime/runtimeContextFactory.js.map +1 -0
  100. package/dist/src/runtime/runtimeSettings.d.ts +217 -0
  101. package/dist/src/runtime/runtimeSettings.js +1094 -0
  102. package/dist/src/runtime/runtimeSettings.js.map +1 -0
  103. package/dist/src/runtime/runtimeSettings.test.d.ts +1 -0
  104. package/dist/src/runtime/runtimeSettings.test.js +320 -0
  105. package/dist/src/runtime/runtimeSettings.test.js.map +1 -0
  106. package/dist/src/services/BuiltinCommandLoader.d.ts +13 -4
  107. package/dist/src/services/BuiltinCommandLoader.js +17 -4
  108. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  109. package/dist/src/services/McpPromptLoader.js +34 -13
  110. package/dist/src/services/McpPromptLoader.js.map +1 -1
  111. package/dist/src/test-utils/mockCommandContext.js +5 -2
  112. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  113. package/dist/src/ui/App.js +29 -49
  114. package/dist/src/ui/App.js.map +1 -1
  115. package/dist/src/ui/commands/authCommand.js +7 -9
  116. package/dist/src/ui/commands/authCommand.js.map +1 -1
  117. package/dist/src/ui/commands/baseurlCommand.js +8 -44
  118. package/dist/src/ui/commands/baseurlCommand.js.map +1 -1
  119. package/dist/src/ui/commands/chatCommand.js +28 -12
  120. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  121. package/dist/src/ui/commands/diagnosticsCommand.d.ts +0 -3
  122. package/dist/src/ui/commands/diagnosticsCommand.js +40 -191
  123. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  124. package/dist/src/ui/commands/keyCommand.js +9 -58
  125. package/dist/src/ui/commands/keyCommand.js.map +1 -1
  126. package/dist/src/ui/commands/keyCommand.test.js +48 -102
  127. package/dist/src/ui/commands/keyCommand.test.js.map +1 -1
  128. package/dist/src/ui/commands/keyfileCommand.js +42 -93
  129. package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
  130. package/dist/src/ui/commands/logoutCommand.js +2 -2
  131. package/dist/src/ui/commands/logoutCommand.js.map +1 -1
  132. package/dist/src/ui/commands/mcpCommand.js +29 -7
  133. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  134. package/dist/src/ui/commands/modelCommand.js +8 -59
  135. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  136. package/dist/src/ui/commands/profileCommand.js +151 -267
  137. package/dist/src/ui/commands/profileCommand.js.map +1 -1
  138. package/dist/src/ui/commands/profileCommand.test.js +88 -344
  139. package/dist/src/ui/commands/profileCommand.test.js.map +1 -1
  140. package/dist/src/ui/commands/providerCommand.js +9 -3
  141. package/dist/src/ui/commands/providerCommand.js.map +1 -1
  142. package/dist/src/ui/commands/restoreCommand.js +38 -18
  143. package/dist/src/ui/commands/restoreCommand.js.map +1 -1
  144. package/dist/src/ui/commands/schema/argumentResolver.test.d.ts +6 -0
  145. package/dist/src/ui/commands/schema/argumentResolver.test.js +619 -0
  146. package/dist/src/ui/commands/schema/argumentResolver.test.js.map +1 -0
  147. package/dist/src/ui/commands/schema/index.d.ts +15 -0
  148. package/dist/src/ui/commands/schema/index.js +320 -0
  149. package/dist/src/ui/commands/schema/index.js.map +1 -0
  150. package/dist/src/ui/commands/schema/types.d.ts +61 -0
  151. package/dist/src/ui/commands/schema/types.js +12 -0
  152. package/dist/src/ui/commands/schema/types.js.map +1 -0
  153. package/dist/src/ui/commands/setCommand.js +641 -325
  154. package/dist/src/ui/commands/setCommand.js.map +1 -1
  155. package/dist/src/ui/commands/setCommand.test.js +92 -388
  156. package/dist/src/ui/commands/setCommand.test.js.map +1 -1
  157. package/dist/src/ui/commands/statusCommand.js +2 -2
  158. package/dist/src/ui/commands/statusCommand.js.map +1 -1
  159. package/dist/src/ui/commands/subagentCommand.d.ts +16 -0
  160. package/dist/src/ui/commands/subagentCommand.js +656 -0
  161. package/dist/src/ui/commands/subagentCommand.js.map +1 -0
  162. package/dist/src/ui/commands/test/setCommand.mutation.test.d.ts +6 -0
  163. package/dist/src/ui/commands/test/setCommand.mutation.test.js +132 -0
  164. package/dist/src/ui/commands/test/setCommand.mutation.test.js.map +1 -0
  165. package/dist/src/ui/commands/test/setCommand.phase09.test.d.ts +6 -0
  166. package/dist/src/ui/commands/test/setCommand.phase09.test.js +222 -0
  167. package/dist/src/ui/commands/test/setCommand.phase09.test.js.map +1 -0
  168. package/dist/src/ui/commands/test/subagentCommand.schema.test.d.ts +6 -0
  169. package/dist/src/ui/commands/test/subagentCommand.schema.test.js +125 -0
  170. package/dist/src/ui/commands/test/subagentCommand.schema.test.js.map +1 -0
  171. package/dist/src/ui/commands/test/subagentCommand.test.d.ts +1 -0
  172. package/dist/src/ui/commands/test/subagentCommand.test.js +589 -0
  173. package/dist/src/ui/commands/test/subagentCommand.test.js.map +1 -0
  174. package/dist/src/ui/commands/toolformatCommand.js +25 -98
  175. package/dist/src/ui/commands/toolformatCommand.js.map +1 -1
  176. package/dist/src/ui/commands/toolformatCommand.test.js +56 -102
  177. package/dist/src/ui/commands/toolformatCommand.test.js.map +1 -1
  178. package/dist/src/ui/commands/toolsCommand.js +187 -31
  179. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  180. package/dist/src/ui/commands/types.d.ts +11 -2
  181. package/dist/src/ui/commands/types.js.map +1 -1
  182. package/dist/src/ui/components/AuthDialog.js +16 -55
  183. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  184. package/dist/src/ui/components/Footer.js +4 -5
  185. package/dist/src/ui/components/Footer.js.map +1 -1
  186. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  187. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  188. package/dist/src/ui/components/InputPrompt.js +1 -1
  189. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  190. package/dist/src/ui/components/StatsDisplay.js +6 -11
  191. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  192. package/dist/src/ui/components/SuggestionsDisplay.d.ts +13 -1
  193. package/dist/src/ui/components/SuggestionsDisplay.js +22 -3
  194. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  195. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +1 -0
  196. package/dist/src/ui/components/messages/ToolGroupMessage.js +14 -14
  197. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  198. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +1 -0
  199. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  200. package/dist/src/ui/containers/SessionController.js +61 -117
  201. package/dist/src/ui/containers/SessionController.js.map +1 -1
  202. package/dist/src/ui/contexts/RuntimeContext.d.ts +61 -0
  203. package/dist/src/ui/contexts/RuntimeContext.js +118 -0
  204. package/dist/src/ui/contexts/RuntimeContext.js.map +1 -0
  205. package/dist/src/ui/contexts/TodoProvider.d.ts +1 -0
  206. package/dist/src/ui/contexts/TodoProvider.js +10 -8
  207. package/dist/src/ui/contexts/TodoProvider.js.map +1 -1
  208. package/dist/src/ui/contexts/ToolCallProvider.d.ts +1 -0
  209. package/dist/src/ui/contexts/ToolCallProvider.js +10 -9
  210. package/dist/src/ui/contexts/ToolCallProvider.js.map +1 -1
  211. package/dist/src/ui/hooks/__tests__/useSlashCompletion.set.phase09.test.d.ts +6 -0
  212. package/dist/src/ui/hooks/__tests__/useSlashCompletion.set.phase09.test.js +39 -0
  213. package/dist/src/ui/hooks/__tests__/useSlashCompletion.set.phase09.test.js.map +1 -0
  214. package/dist/src/ui/hooks/atCommandProcessor.js +11 -3
  215. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  216. package/dist/src/ui/hooks/atCommandProcessor.test.js +3 -1
  217. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
  218. package/dist/src/ui/hooks/shellCommandProcessor.js +4 -1
  219. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  220. package/dist/src/ui/hooks/shellCommandProcessor.test.js +1 -0
  221. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
  222. package/dist/src/ui/hooks/slashCommandProcessor.js +27 -1
  223. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  224. package/dist/src/ui/hooks/useAuthCommand.js +11 -3
  225. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  226. package/dist/src/ui/hooks/useCommandCompletion.d.ts +1 -0
  227. package/dist/src/ui/hooks/useCommandCompletion.js +2 -0
  228. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  229. package/dist/src/ui/hooks/useGeminiStream.js +37 -11
  230. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  231. package/dist/src/ui/hooks/useGeminiStream.subagent.spec.d.ts +6 -0
  232. package/dist/src/ui/hooks/useGeminiStream.subagent.spec.js +232 -0
  233. package/dist/src/ui/hooks/useGeminiStream.subagent.spec.js.map +1 -0
  234. package/dist/src/ui/hooks/useLoadProfileDialog.d.ts +1 -1
  235. package/dist/src/ui/hooks/useLoadProfileDialog.js +18 -57
  236. package/dist/src/ui/hooks/useLoadProfileDialog.js.map +1 -1
  237. package/dist/src/ui/hooks/useOpenAIProviderInfo.d.ts +1 -1
  238. package/dist/src/ui/hooks/useOpenAIProviderInfo.js +12 -7
  239. package/dist/src/ui/hooks/useOpenAIProviderInfo.js.map +1 -1
  240. package/dist/src/ui/hooks/useProviderDialog.d.ts +1 -1
  241. package/dist/src/ui/hooks/useProviderDialog.js +17 -90
  242. package/dist/src/ui/hooks/useProviderDialog.js.map +1 -1
  243. package/dist/src/ui/hooks/useProviderModelDialog.d.ts +2 -2
  244. package/dist/src/ui/hooks/useProviderModelDialog.js +11 -12
  245. package/dist/src/ui/hooks/useProviderModelDialog.js.map +1 -1
  246. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +3 -1
  247. package/dist/src/ui/hooks/useReactToolScheduler.js +144 -34
  248. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  249. package/dist/src/ui/hooks/useSlashCompletion.d.ts +32 -0
  250. package/dist/src/ui/hooks/useSlashCompletion.js +154 -77
  251. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  252. package/dist/src/ui/hooks/useSlashCompletion.test.js +39 -14
  253. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  254. package/dist/src/ui/hooks/useToolScheduler.test.js +108 -79
  255. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  256. package/dist/src/ui/types.d.ts +1 -0
  257. package/dist/src/ui/types.js.map +1 -1
  258. package/dist/src/validateNonInterActiveAuth.js +4 -2
  259. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  260. package/dist/src/zed-integration/schema.d.ts +30 -30
  261. package/dist/src/zed-integration/zedIntegration.js +112 -39
  262. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  263. package/dist/tsconfig.build.tsbuildinfo +1 -0
  264. package/package.json +5 -3
  265. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,589 @@
1
+ import { vi, describe, it, expect, beforeEach, afterEach, beforeAll, } from 'vitest';
2
+ vi.mock('child_process');
3
+ /**
4
+ * COMPLETION SYSTEM REQUIREMENTS
5
+ *
6
+ * These tests require Phase 01 to have resolved autocomplete system capabilities.
7
+ *
8
+ * Findings from Phase 01:
9
+ * - Autocomplete feasibility documented (see findings.md)
10
+ * - Required file changes identified for fullLine support
11
+ * - No production code modified yet
12
+ *
13
+ * If Phase 01 blocked on autocomplete:
14
+ * - These tests should not be written until blocker resolved
15
+ * - Plan should be paused at Phase 01
16
+ *
17
+ * See: project-plans/subagentconfig/analysis/findings.md for Phase 01 results
18
+ */
19
+ import * as fs from 'fs/promises';
20
+ import { writeFileSync } from 'fs';
21
+ import * as path from 'path';
22
+ import * as os from 'os';
23
+ import { SubagentManager, ProfileManager, } from '@vybestack/llxprt-code-core';
24
+ import { FunctionCallingConfigMode } from '@google/genai';
25
+ import { spawnSync } from 'child_process';
26
+ let subagentCommand;
27
+ beforeAll(async () => {
28
+ // Reset modules to ensure fresh import with mocks
29
+ vi.resetModules();
30
+ // Set up default mock behavior for spawnSync
31
+ vi.mocked(spawnSync).mockImplementation(() => ({
32
+ pid: 12345,
33
+ output: [null, null, null],
34
+ stdout: Buffer.from(''),
35
+ stderr: Buffer.from(''),
36
+ status: 0,
37
+ signal: null,
38
+ error: undefined,
39
+ }));
40
+ // Import AFTER mock is set up
41
+ const mod = await import('../subagentCommand.js?t=' + Date.now());
42
+ subagentCommand = mod.subagentCommand;
43
+ });
44
+ const createTestContext = ({ subagentManager, profileManager, overwriteConfirmed, } = {}) => {
45
+ const settings = { merged: {} };
46
+ const logger = {
47
+ log: vi.fn(),
48
+ logMessage: vi.fn(),
49
+ saveCheckpoint: vi.fn(),
50
+ loadCheckpoint: vi.fn().mockResolvedValue([]),
51
+ };
52
+ const metrics = {
53
+ models: {},
54
+ tools: {
55
+ totalCalls: 0,
56
+ totalSuccess: 0,
57
+ totalFail: 0,
58
+ totalDurationMs: 0,
59
+ totalDecisions: {
60
+ accept: 0,
61
+ reject: 0,
62
+ modify: 0,
63
+ auto_accept: 0,
64
+ },
65
+ byName: {},
66
+ },
67
+ files: {
68
+ totalLinesAdded: 0,
69
+ totalLinesRemoved: 0,
70
+ },
71
+ tokenTracking: {
72
+ tokensPerMinute: 0,
73
+ throttleWaitTimeMs: 0,
74
+ sessionTokenUsage: {
75
+ input: 0,
76
+ output: 0,
77
+ cache: 0,
78
+ tool: 0,
79
+ thought: 0,
80
+ total: 0,
81
+ },
82
+ },
83
+ };
84
+ const stats = {
85
+ sessionId: 'test-session',
86
+ sessionStartTime: new Date(),
87
+ metrics,
88
+ lastPromptTokenCount: 0,
89
+ historyTokenCount: 0,
90
+ promptCount: 0,
91
+ };
92
+ return {
93
+ invocation: {
94
+ raw: '',
95
+ name: '',
96
+ args: '',
97
+ },
98
+ services: {
99
+ config: null,
100
+ settings,
101
+ git: undefined,
102
+ logger,
103
+ profileManager,
104
+ subagentManager,
105
+ },
106
+ ui: {
107
+ addItem: vi.fn(),
108
+ clear: vi.fn(),
109
+ setDebugMessage: vi.fn(),
110
+ pendingItem: null,
111
+ setPendingItem: vi.fn(),
112
+ loadHistory: vi.fn(),
113
+ toggleCorgiMode: vi.fn(),
114
+ toggleVimEnabled: vi.fn().mockResolvedValue(true),
115
+ setLlxprtMdFileCount: vi.fn(),
116
+ updateHistoryTokenCount: vi.fn(),
117
+ reloadCommands: vi.fn(),
118
+ },
119
+ session: {
120
+ stats,
121
+ sessionShellAllowlist: new Set(),
122
+ },
123
+ overwriteConfirmed: overwriteConfirmed ?? false,
124
+ };
125
+ };
126
+ const ensureMessage = (value) => {
127
+ expect(value).toBeDefined();
128
+ expect(value?.type).toBe('message');
129
+ if (!value || value.type !== 'message') {
130
+ throw new Error('Expected message action return');
131
+ }
132
+ return value;
133
+ };
134
+ const ensureConfirm = (value) => {
135
+ expect(value).toBeDefined();
136
+ expect(value?.type).toBe('confirm_action');
137
+ if (!value || value.type !== 'confirm_action') {
138
+ throw new Error('Expected confirm action return');
139
+ }
140
+ return value;
141
+ };
142
+ /**
143
+ * SubagentCommand behavioral tests - Basic commands
144
+ *
145
+ * @plan:PLAN-20250117-SUBAGENTCONFIG.P07
146
+ * @requirement:REQ-004, REQ-005, REQ-006, REQ-007, REQ-014
147
+ *
148
+ * Tests verify command interactions with SubagentManager
149
+ * Mock GeminiClient, use real file system
150
+ */
151
+ describe('subagentCommand - basic @plan:PLAN-20250117-SUBAGENTCONFIG.P07', () => {
152
+ let context;
153
+ let subagentManager;
154
+ let profileManager;
155
+ let tempDir;
156
+ beforeEach(async () => {
157
+ // Create temp directories
158
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'subagent-cmd-test-'));
159
+ const subagentsDir = path.join(tempDir, 'subagents');
160
+ const profilesDir = path.join(tempDir, 'profiles');
161
+ // Initialize managers
162
+ profileManager = new ProfileManager(profilesDir);
163
+ subagentManager = new SubagentManager(subagentsDir, profileManager);
164
+ // Create test profile
165
+ await fs.mkdir(profilesDir, { recursive: true });
166
+ await profileManager.saveProfile('testprofile', {
167
+ version: 1,
168
+ provider: 'openai',
169
+ model: 'gpt-4',
170
+ modelParams: {},
171
+ ephemeralSettings: {},
172
+ });
173
+ context = createTestContext({
174
+ profileManager,
175
+ subagentManager,
176
+ });
177
+ });
178
+ afterEach(async () => {
179
+ await fs.rm(tempDir, { recursive: true, force: true });
180
+ });
181
+ describe('saveCommand - manual mode @requirement:REQ-004', () => {
182
+ it('should save new subagent with manual mode', async () => {
183
+ const args = 'testagent testprofile manual "You are a test agent"';
184
+ const result = ensureMessage(await subagentCommand.subCommands[0].action(context, args));
185
+ expect(result.messageType).toBe('info');
186
+ expect(result.content).toMatch(/created successfully/i);
187
+ // Verify subagent was saved
188
+ const exists = await subagentManager.subagentExists('testagent');
189
+ expect(exists).toBe(true);
190
+ const loaded = await subagentManager.loadSubagent('testagent');
191
+ expect(loaded.profile).toBe('testprofile');
192
+ expect(loaded.systemPrompt).toBe('You are a test agent');
193
+ });
194
+ it('should reject invalid syntax', async () => {
195
+ const invalidArgs = [
196
+ 'testagent', // Missing profile and mode
197
+ 'testagent testprofile', // Missing mode and prompt
198
+ 'testagent testprofile manual', // Missing prompt
199
+ 'testagent testprofile invalid "prompt"', // Invalid mode
200
+ ];
201
+ for (const args of invalidArgs) {
202
+ const result = ensureMessage(await subagentCommand.subCommands[0].action(context, args));
203
+ expect(result.messageType).toBe('error');
204
+ expect(result.content).toMatch(/usage|syntax/i);
205
+ }
206
+ });
207
+ it('should error when subagentManager service missing', async () => {
208
+ const contextWithoutManager = createTestContext({
209
+ profileManager,
210
+ subagentManager: undefined,
211
+ });
212
+ const result = ensureMessage(await subagentCommand.subCommands[0].action(contextWithoutManager, 'testagent testprofile manual "Prompt"'));
213
+ expect(result.messageType).toBe('error');
214
+ expect(result.content).toMatch(/service .* unavailable/i);
215
+ });
216
+ it('should reject non-existent profile @requirement:REQ-013', async () => {
217
+ const args = 'testagent nonexistent manual "prompt"';
218
+ const result = ensureMessage(await subagentCommand.subCommands[0].action(context, args));
219
+ expect(result.messageType).toBe('error');
220
+ expect(result.content).toMatch(/profile.*not found/i);
221
+ });
222
+ it('should prompt for confirmation on overwrite @requirement:REQ-014', async () => {
223
+ // Create existing subagent
224
+ await subagentManager.saveSubagent('testagent', 'testprofile', 'Original prompt');
225
+ // Try to overwrite without confirmation
226
+ const args = 'testagent testprofile manual "New prompt"';
227
+ const result = ensureConfirm(await subagentCommand.subCommands[0].action(context, args));
228
+ // Check that prompt is a React element
229
+ expect(result).toHaveProperty('prompt');
230
+ expect(result.prompt).toBeDefined();
231
+ expect(result.originalInvocation).toBeDefined();
232
+ });
233
+ it('should overwrite when confirmed', async () => {
234
+ // Create existing subagent
235
+ await subagentManager.saveSubagent('testagent', 'testprofile', 'Original prompt');
236
+ // Set confirmation flag
237
+ context.overwriteConfirmed = true;
238
+ const args = 'testagent testprofile manual "New prompt"';
239
+ const result = ensureMessage(await subagentCommand.subCommands[0].action(context, args));
240
+ expect(result.messageType).toBe('info');
241
+ expect(result.content).toMatch(/updated successfully/i);
242
+ // Verify updated
243
+ const loaded = await subagentManager.loadSubagent('testagent');
244
+ expect(loaded.systemPrompt).toBe('New prompt');
245
+ });
246
+ });
247
+ describe('listCommand @requirement:REQ-005 @plan:PLAN-20250117-SUBAGENTCONFIG.P07', () => {
248
+ it('should show message when no subagents exist', async () => {
249
+ // Mock listSubagents to return empty array
250
+ // Use real SubagentManager for this test
251
+ context = createTestContext({
252
+ profileManager,
253
+ subagentManager,
254
+ });
255
+ const result = ensureMessage(await subagentCommand.subCommands[1].action(context, ''));
256
+ expect(result.messageType).toBe('info');
257
+ expect(result.content).toMatch(/no subagents found/i);
258
+ });
259
+ it('should list all subagents with details', async () => {
260
+ // Create multiple subagents
261
+ await subagentManager.saveSubagent('agent1', 'testprofile', 'Prompt 1');
262
+ await subagentManager.saveSubagent('agent2', 'testprofile', 'Prompt 2');
263
+ const result = ensureMessage(await subagentCommand.subCommands[1].action(context, ''));
264
+ expect(result.messageType).toBe('info');
265
+ expect(result.content).toMatch(/agent1/);
266
+ expect(result.content).toMatch(/agent2/);
267
+ expect(result.content).toMatch(/testprofile/);
268
+ });
269
+ });
270
+ describe('showCommand @requirement:REQ-006 @plan:PLAN-20250117-SUBAGENTCONFIG.P07', () => {
271
+ it('should display full subagent configuration', async () => {
272
+ await subagentManager.saveSubagent('testagent', 'testprofile', 'Test system prompt');
273
+ const result = ensureMessage(await subagentCommand.subCommands[2].action(context, 'testagent'));
274
+ expect(result.messageType).toBe('info');
275
+ expect(result.content).toMatch(/testagent/);
276
+ expect(result.content).toMatch(/testprofile/);
277
+ expect(result.content).toMatch(/Test system prompt/);
278
+ });
279
+ it('should error for non-existent subagent', async () => {
280
+ const result = ensureMessage(await subagentCommand.subCommands[2].action(context, 'nonexistent'));
281
+ expect(result.messageType).toBe('error');
282
+ expect(result.content).toMatch(/not found/i);
283
+ });
284
+ it('should error when name not provided', async () => {
285
+ const result = ensureMessage(await subagentCommand.subCommands[2].action(context, ''));
286
+ expect(result.messageType).toBe('error');
287
+ expect(result.content).toMatch(/usage|name required/i);
288
+ });
289
+ });
290
+ describe('deleteCommand @requirement:REQ-007 @plan:PLAN-20250117-SUBAGENTCONFIG.P07', () => {
291
+ it('should delete subagent with confirmation', async () => {
292
+ await subagentManager.saveSubagent('testagent', 'testprofile', 'Test prompt');
293
+ // First call: should prompt for confirmation
294
+ ensureConfirm(await subagentCommand.subCommands[3].action(context, 'testagent'));
295
+ // Second call: with confirmation
296
+ context.overwriteConfirmed = true;
297
+ const result2 = ensureMessage(await subagentCommand.subCommands[3].action(context, 'testagent'));
298
+ expect(result2.messageType).toBe('info');
299
+ expect(result2.content).toMatch(/deleted/i);
300
+ // Verify deleted
301
+ const exists = await subagentManager.subagentExists('testagent');
302
+ expect(exists).toBe(false);
303
+ });
304
+ it('should error for non-existent subagent', async () => {
305
+ const result = ensureMessage(await subagentCommand.subCommands[3].action(context, 'nonexistent'));
306
+ expect(result.messageType).toBe('error');
307
+ expect(result.content).toMatch(/not found/i);
308
+ });
309
+ });
310
+ });
311
+ /**
312
+ * Edit command tests
313
+ *
314
+ * @plan:PLAN-20250117-SUBAGENTCONFIG.P10
315
+ * @requirement:REQ-008
316
+ */
317
+ describe('editCommand @requirement:REQ-008', () => {
318
+ let context;
319
+ let subagentManager;
320
+ let profileManager;
321
+ let tempDir;
322
+ beforeEach(async () => {
323
+ // Create temp directories - same pattern as Phase 08
324
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'subagent-edit-test-'));
325
+ const subagentsDir = path.join(tempDir, 'subagents');
326
+ const profilesDir = path.join(tempDir, 'profiles');
327
+ // Initialize real managers
328
+ profileManager = new ProfileManager(profilesDir);
329
+ subagentManager = new SubagentManager(subagentsDir, profileManager);
330
+ // Create test profile
331
+ await fs.mkdir(profilesDir, { recursive: true });
332
+ await profileManager.saveProfile('testprofile', {
333
+ version: 1,
334
+ provider: 'openai',
335
+ model: 'gpt-4',
336
+ modelParams: {},
337
+ ephemeralSettings: {},
338
+ });
339
+ context = createTestContext({
340
+ profileManager,
341
+ subagentManager,
342
+ });
343
+ expect(vi.isMockFunction(spawnSync)).toBe(true);
344
+ });
345
+ afterEach(async () => {
346
+ await fs.rm(tempDir, { recursive: true, force: true });
347
+ vi.clearAllMocks();
348
+ });
349
+ it('should error when name not provided', async () => {
350
+ const result = ensureMessage(await subagentCommand.subCommands[4].action(context, ''));
351
+ expect(result.messageType).toBe('error');
352
+ expect(result.content).toMatch(/usage|name required/i);
353
+ });
354
+ it('should error for non-existent subagent', async () => {
355
+ const result = ensureMessage(await subagentCommand.subCommands[4].action(context, 'nonexistent'));
356
+ expect(result.messageType).toBe('error');
357
+ expect(result.content).toMatch(/not found/i);
358
+ });
359
+ it('should launch editor for existing subagent', async () => {
360
+ await subagentManager.saveSubagent('testagent', 'testprofile', 'Test prompt');
361
+ const original = await subagentManager.loadSubagent('testagent');
362
+ // Mock implementation that simulates file editing
363
+ vi.mocked(spawnSync).mockImplementationOnce((_cmd, args) => {
364
+ const filePath = Array.isArray(args)
365
+ ? args[0]
366
+ : undefined;
367
+ if (filePath) {
368
+ writeFileSync(filePath, JSON.stringify({
369
+ ...original,
370
+ systemPrompt: 'Updated prompt from editor',
371
+ }, null, 2), 'utf8');
372
+ }
373
+ return {
374
+ pid: 12345,
375
+ output: [null, null, null],
376
+ stdout: Buffer.from(''),
377
+ stderr: Buffer.from(''),
378
+ status: 0,
379
+ signal: null,
380
+ error: undefined,
381
+ };
382
+ });
383
+ const result = ensureMessage(await subagentCommand.subCommands[4].action(context, 'testagent'));
384
+ const updated = await subagentManager.loadSubagent('testagent');
385
+ expect(updated.systemPrompt).toBe('Updated prompt from editor');
386
+ expect(new Date(updated.updatedAt).getTime()).toBeGreaterThanOrEqual(new Date(original.updatedAt).getTime());
387
+ expect(result.messageType).toBe('info');
388
+ expect(result.content).toMatch(/updated successfully/i);
389
+ });
390
+ it('should handle editor failure', async () => {
391
+ await subagentManager.saveSubagent('testagent', 'testprofile', 'Test prompt');
392
+ // Mock editor exiting with error
393
+ vi.mocked(spawnSync).mockImplementationOnce(() => ({
394
+ pid: 12345,
395
+ output: [null, null, null],
396
+ stdout: Buffer.from(''),
397
+ stderr: Buffer.from(''),
398
+ status: 1,
399
+ signal: null,
400
+ error: undefined,
401
+ }));
402
+ const result = ensureMessage(await subagentCommand.subCommands[4].action(context, 'testagent'));
403
+ expect(result.messageType).toBe('error');
404
+ expect(result.content).toMatch(/editor.*exited|failed/i);
405
+ });
406
+ it('should validate JSON after edit', async () => {
407
+ await subagentManager.saveSubagent('testagent', 'testprofile', 'Test prompt');
408
+ // Mock editor writing invalid JSON
409
+ vi.mocked(spawnSync).mockImplementationOnce((_cmd, args) => {
410
+ const filePath = Array.isArray(args)
411
+ ? args[0]
412
+ : undefined;
413
+ if (filePath) {
414
+ writeFileSync(filePath, '{ invalid json', 'utf8');
415
+ }
416
+ return {
417
+ pid: 12345,
418
+ output: [null, null, null],
419
+ stdout: Buffer.from(''),
420
+ stderr: Buffer.from(''),
421
+ status: 0,
422
+ signal: null,
423
+ error: undefined,
424
+ };
425
+ });
426
+ const result = ensureMessage(await subagentCommand.subCommands[4].action(context, 'testagent'));
427
+ expect(result.messageType).toBe('error');
428
+ expect(result.content).toMatch(/invalid json/i);
429
+ });
430
+ });
431
+ /**
432
+ * Autocomplete tests
433
+ *
434
+ * @plan:PLAN-20250117-SUBAGENTCONFIG.P10
435
+ * @requirement:REQ-009
436
+ *
437
+ * NOTE: These tests assume Phase 01 has resolved autocomplete system to support
438
+ * fullLine parameter. If Phase 01 did not implement enhancement, these tests
439
+ * will need to be adjusted based on findings.md.
440
+ */
441
+ describe('completion @requirement:REQ-009', () => {
442
+ it('is temporarily skipped pending schema-driven slash completion migration', () => {
443
+ expect(subagentCommand.schema).toBeUndefined();
444
+ });
445
+ });
446
+ /**
447
+ * Auto mode tests
448
+ *
449
+ * @plan:PLAN-20250117-SUBAGENTCONFIG.P13
450
+ * @plan:PLAN-20250117-SUBAGENTCONFIG.P14
451
+ * @requirement:REQ-003
452
+ */
453
+ describe('saveCommand - auto mode @requirement:REQ-003', () => {
454
+ let context;
455
+ let subagentManager;
456
+ let profileManager;
457
+ let tempDir;
458
+ let mockGeminiClient;
459
+ beforeEach(async () => {
460
+ // Create temp directories for a realistic test environment
461
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'subagent-auto-test-'));
462
+ const subagentsDir = path.join(tempDir, 'subagents');
463
+ const profilesDir = path.join(tempDir, 'profiles');
464
+ // Initialize real managers
465
+ profileManager = new ProfileManager(profilesDir);
466
+ subagentManager = new SubagentManager(subagentsDir, profileManager);
467
+ // Create test profile
468
+ await fs.mkdir(profilesDir, { recursive: true });
469
+ await profileManager.saveProfile('testprofile', {
470
+ version: 1,
471
+ provider: 'openai',
472
+ model: 'gpt-4',
473
+ modelParams: {},
474
+ ephemeralSettings: {},
475
+ });
476
+ context = createTestContext({
477
+ profileManager,
478
+ subagentManager,
479
+ });
480
+ // Mock GeminiClient
481
+ mockGeminiClient = {
482
+ generateDirectMessage: vi.fn().mockResolvedValue({
483
+ text: 'Auto generated prompt',
484
+ }),
485
+ };
486
+ // Add to context in a way that avoids TypeScript errors
487
+ context.services.config =
488
+ {
489
+ getGeminiClient: vi.fn(() => mockGeminiClient),
490
+ };
491
+ });
492
+ afterEach(async () => {
493
+ await fs.rm(tempDir, { recursive: true, force: true });
494
+ });
495
+ it('should generate system prompt using LLM', async () => {
496
+ // Mock LLM response
497
+ mockGeminiClient.generateDirectMessage.mockResolvedValue({
498
+ text: 'You are an expert Python debugger specializing in finding and fixing bugs.',
499
+ });
500
+ const args = 'testagent testprofile auto "expert Python debugger"';
501
+ // Access the save subcommand directly from the imported module
502
+ const result = await subagentCommand.subCommands[0].action(context, args);
503
+ // Verify LLM was called
504
+ expect(mockGeminiClient.generateDirectMessage).toHaveBeenCalledTimes(1);
505
+ const callArgs = mockGeminiClient.generateDirectMessage.mock.calls[0][0];
506
+ expect(callArgs.message).toMatch(/expert Python debugger/);
507
+ expect(callArgs.message).toMatch(/system prompt/i);
508
+ expect(callArgs.config).toEqual({
509
+ toolConfig: {
510
+ functionCallingConfig: {
511
+ mode: FunctionCallingConfigMode.NONE,
512
+ },
513
+ },
514
+ tools: [],
515
+ });
516
+ // Verify success message type and content
517
+ expect(result).toBeDefined();
518
+ expect(result?.type).toBe('message');
519
+ if (result && result.type === 'message') {
520
+ expect(result.messageType).toBe('info');
521
+ expect(result.content).toMatch(/created successfully/i);
522
+ }
523
+ // Verify the subagent was saved with the generated prompt
524
+ const loaded = await subagentManager.loadSubagent('testagent');
525
+ expect(loaded.systemPrompt).toBe('You are an expert Python debugger specializing in finding and fixing bugs.');
526
+ });
527
+ it('should handle LLM generation failure', async () => {
528
+ // Mock LLM error
529
+ mockGeminiClient.generateDirectMessage.mockRejectedValue(new Error('Network error'));
530
+ const args = 'testagent testprofile auto "expert debugger"';
531
+ const result = await subagentCommand.subCommands[0].action(context, args);
532
+ expect(result).toBeDefined();
533
+ expect(result?.type).toBe('message');
534
+ if (result && result.type === 'message') {
535
+ expect(result.messageType).toBe('error');
536
+ expect(result.content).toMatch(/failed to generate|connection|manual mode/i);
537
+ }
538
+ expect(mockGeminiClient.generateDirectMessage).toHaveBeenCalledWith(expect.objectContaining({
539
+ config: {
540
+ toolConfig: {
541
+ functionCallingConfig: {
542
+ mode: FunctionCallingConfigMode.NONE,
543
+ },
544
+ },
545
+ tools: [],
546
+ },
547
+ }), expect.any(String));
548
+ });
549
+ it('should handle empty LLM response', async () => {
550
+ // Mock empty response
551
+ mockGeminiClient.generateDirectMessage.mockResolvedValue({
552
+ text: '',
553
+ });
554
+ const args = 'testagent testprofile auto "expert debugger"';
555
+ const result = await subagentCommand.subCommands[0].action(context, args);
556
+ expect(result).toBeDefined();
557
+ expect(result?.type).toBe('message');
558
+ if (result && result.type === 'message') {
559
+ expect(result.messageType).toBe('error');
560
+ expect(result.content).toMatch(/empty.*response|manual mode/i);
561
+ }
562
+ expect(mockGeminiClient.generateDirectMessage).toHaveBeenCalledWith(expect.objectContaining({
563
+ config: {
564
+ toolConfig: {
565
+ functionCallingConfig: {
566
+ mode: FunctionCallingConfigMode.NONE,
567
+ },
568
+ },
569
+ tools: [],
570
+ },
571
+ }), expect.any(String));
572
+ });
573
+ it('should use correct prompt template for LLM', async () => {
574
+ mockGeminiClient.generateDirectMessage.mockResolvedValue({
575
+ text: 'Generated prompt',
576
+ });
577
+ const description = 'expert code reviewer';
578
+ const args = `testagent testprofile auto "${description}"`;
579
+ await subagentCommand.subCommands[0].action(context, args);
580
+ const callArgs = mockGeminiClient.generateDirectMessage.mock.calls[0][0];
581
+ // Verify prompt includes description
582
+ expect(callArgs.message).toContain(description);
583
+ // Verify prompt includes instructions
584
+ expect(callArgs.message).toMatch(/comprehensive/i);
585
+ expect(callArgs.message).toMatch(/role.*capabilities.*behavior/i);
586
+ expect(callArgs.message).toMatch(/output.*only/i);
587
+ });
588
+ });
589
+ //# sourceMappingURL=subagentCommand.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagentCommand.test.js","sourceRoot":"","sources":["../../../../../src/ui/commands/test/subagentCommand.test.ts"],"names":[],"mappings":"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"}