@vybestack/llxprt-code 0.4.8 → 0.5.0-nightly.251102.6bb3db7a

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