aws-runtime-bridge 1.9.33 → 1.9.40

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 (276) hide show
  1. package/dist/adapter/AcodeSdkAdapter.d.ts +35 -1
  2. package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
  3. package/dist/adapter/AcodeSdkAdapter.js +417 -40
  4. package/dist/adapter/ClaudeSdkAdapter.d.ts +6 -0
  5. package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -1
  6. package/dist/adapter/ClaudeSdkAdapter.js +23 -1
  7. package/dist/adapter/idle-poll-loop.d.ts +2 -1
  8. package/dist/adapter/idle-poll-loop.d.ts.map +1 -1
  9. package/dist/adapter/types.d.ts +65 -3
  10. package/dist/adapter/types.d.ts.map +1 -1
  11. package/dist/adapter/types.js +5 -4
  12. package/dist/index.js +4 -0
  13. package/dist/routes/acode-todos.d.ts +11 -0
  14. package/dist/routes/acode-todos.d.ts.map +1 -0
  15. package/dist/routes/acode-todos.js +75 -0
  16. package/dist/routes/memory.d.ts +1 -1
  17. package/dist/routes/memory.d.ts.map +1 -1
  18. package/dist/routes/memory.js +3 -3
  19. package/dist/routes/pty.d.ts.map +1 -1
  20. package/dist/routes/pty.js +9 -0
  21. package/dist/routes/sub-agents.d.ts +14 -0
  22. package/dist/routes/sub-agents.d.ts.map +1 -0
  23. package/dist/routes/sub-agents.js +253 -0
  24. package/dist/routes/terminal.d.ts +9 -1
  25. package/dist/routes/terminal.d.ts.map +1 -1
  26. package/dist/routes/terminal.js +207 -22
  27. package/dist/services/agent-event-store.d.ts +1 -0
  28. package/dist/services/agent-event-store.d.ts.map +1 -1
  29. package/dist/services/event-delta-pusher.js +4 -4
  30. package/dist/services/session-output.d.ts +3 -0
  31. package/dist/services/session-output.d.ts.map +1 -1
  32. package/dist/services/session-output.js +38 -2
  33. package/dist/services/sub-agent-manager-instance.d.ts +4 -0
  34. package/dist/services/sub-agent-manager-instance.d.ts.map +1 -0
  35. package/dist/services/sub-agent-manager-instance.js +12 -0
  36. package/dist/services/workspace-files.d.ts +1 -0
  37. package/dist/services/workspace-files.d.ts.map +1 -1
  38. package/dist/services/workspace-files.js +57 -1
  39. package/package/acode/dist/ask-user-question-tool.d.ts +47 -0
  40. package/package/acode/dist/ask-user-question-tool.d.ts.map +1 -0
  41. package/package/acode/dist/ask-user-question-tool.js +233 -0
  42. package/package/acode/dist/built-in-file-tools.d.ts +2 -0
  43. package/package/acode/dist/built-in-file-tools.d.ts.map +1 -1
  44. package/package/acode/dist/compaction.d.ts +206 -0
  45. package/package/acode/dist/compaction.d.ts.map +1 -0
  46. package/package/acode/dist/compaction.js +664 -0
  47. package/package/acode/dist/config.d.ts +6 -1
  48. package/package/acode/dist/config.d.ts.map +1 -1
  49. package/package/acode/dist/config.js +27 -2
  50. package/package/acode/dist/index.d.ts +4 -0
  51. package/package/acode/dist/index.d.ts.map +1 -1
  52. package/package/acode/dist/index.js +4 -0
  53. package/package/acode/dist/runtime.d.ts +137 -0
  54. package/package/acode/dist/runtime.d.ts.map +1 -1
  55. package/package/acode/dist/runtime.js +974 -172
  56. package/package/acode/dist/skill-tool.d.ts +30 -0
  57. package/package/acode/dist/skill-tool.d.ts.map +1 -0
  58. package/package/acode/dist/skill-tool.js +174 -0
  59. package/package/acode/dist/sub-agent-manager.d.ts +169 -0
  60. package/package/acode/dist/sub-agent-manager.d.ts.map +1 -0
  61. package/package/acode/dist/sub-agent-manager.js +535 -0
  62. package/package/acode/dist/sub-agent-store.d.ts +33 -0
  63. package/package/acode/dist/sub-agent-store.d.ts.map +1 -0
  64. package/package/acode/dist/sub-agent-store.js +109 -0
  65. package/package/acode/dist/sub-agent-tools.d.ts +72 -0
  66. package/package/acode/dist/sub-agent-tools.d.ts.map +1 -0
  67. package/package/acode/dist/sub-agent-tools.js +429 -0
  68. package/package/acode/dist/sub-agent-types.d.ts +81 -0
  69. package/package/acode/dist/sub-agent-types.d.ts.map +1 -0
  70. package/package/acode/dist/sub-agent-types.js +8 -0
  71. package/package/acode/dist/todo-store.d.ts +42 -0
  72. package/package/acode/dist/todo-store.d.ts.map +1 -0
  73. package/package/acode/dist/todo-store.js +68 -0
  74. package/package/acode/dist/todo-tool.d.ts +6 -0
  75. package/package/acode/dist/todo-tool.d.ts.map +1 -0
  76. package/package/acode/dist/todo-tool.js +138 -0
  77. package/package/acode/dist/types.d.ts +22 -1
  78. package/package/acode/dist/types.d.ts.map +1 -1
  79. package/package/acode/package.json +13 -2
  80. package/package/aws-client-agent-mcp/dist/context-manager.test.js +0 -3
  81. package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +1 -1
  82. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +83 -50
  83. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
  84. package/package/aws-client-agent-mcp/dist/mcp-server.js +451 -346
  85. package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
  86. package/package/aws-client-agent-mcp/dist/mcp-server.test.js +259 -241
  87. package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -1
  88. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +1 -19
  89. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -1
  90. package/package/aws-client-agent-mcp/dist/mcp-tools.js +4 -77
  91. package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -1
  92. package/package/aws-client-agent-mcp/dist/memory-store.d.ts +17 -40
  93. package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -1
  94. package/package/aws-client-agent-mcp/dist/memory-store.js +62 -149
  95. package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -1
  96. package/package/aws-client-agent-mcp/dist/memory-store.test.js +175 -164
  97. package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +1 -1
  98. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +3 -9
  99. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +1 -1
  100. package/package/aws-client-agent-mcp/dist/memory-tools.js +28 -55
  101. package/package/aws-client-agent-mcp/dist/memory-tools.js.map +1 -1
  102. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +27 -9
  103. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +1 -1
  104. package/package/aws-client-agent-mcp/dist/message-buffer.js +100 -23
  105. package/package/aws-client-agent-mcp/dist/message-buffer.js.map +1 -1
  106. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +1 -14
  107. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts.map +1 -1
  108. package/package/aws-client-agent-mcp/dist/server-memory-store.js +7 -18
  109. package/package/aws-client-agent-mcp/dist/server-memory-store.js.map +1 -1
  110. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +1 -1
  111. package/package/aws-client-agent-mcp/dist/status-reporter.js +8 -5
  112. package/package/aws-client-agent-mcp/dist/status-reporter.js.map +1 -1
  113. package/package/aws-client-agent-mcp/dist/status-reporter.test.js +93 -0
  114. package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +1 -1
  115. package/package/aws-client-agent-mcp/dist/types.d.ts +3 -25
  116. package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -1
  117. package/package.json +17 -7
  118. package/dist/adapter/AcodeSdkAdapter.test.d.ts +0 -2
  119. package/dist/adapter/AcodeSdkAdapter.test.d.ts.map +0 -1
  120. package/dist/adapter/AcodeSdkAdapter.test.js +0 -2000
  121. package/dist/adapter/AdapterRegistry.test.d.ts +0 -5
  122. package/dist/adapter/AdapterRegistry.test.d.ts.map +0 -1
  123. package/dist/adapter/AdapterRegistry.test.js +0 -118
  124. package/dist/adapter/ClaudeSdkAdapter.test.d.ts +0 -2
  125. package/dist/adapter/ClaudeSdkAdapter.test.d.ts.map +0 -1
  126. package/dist/adapter/ClaudeSdkAdapter.test.js +0 -311
  127. package/dist/adapter/CodexSdkAdapter.test.d.ts +0 -2
  128. package/dist/adapter/CodexSdkAdapter.test.d.ts.map +0 -1
  129. package/dist/adapter/CodexSdkAdapter.test.js +0 -270
  130. package/dist/adapter/OpencodeSdkAdapter.test.d.ts +0 -2
  131. package/dist/adapter/OpencodeSdkAdapter.test.d.ts.map +0 -1
  132. package/dist/adapter/OpencodeSdkAdapter.test.js +0 -158
  133. package/dist/adapter/acode-tool-names.test.d.ts +0 -2
  134. package/dist/adapter/acode-tool-names.test.d.ts.map +0 -1
  135. package/dist/adapter/acode-tool-names.test.js +0 -28
  136. package/dist/adapter/adapter.test.d.ts +0 -5
  137. package/dist/adapter/adapter.test.d.ts.map +0 -1
  138. package/dist/adapter/adapter.test.js +0 -180
  139. package/dist/adapter/idle-poll-loop.test.d.ts +0 -2
  140. package/dist/adapter/idle-poll-loop.test.d.ts.map +0 -1
  141. package/dist/adapter/idle-poll-loop.test.js +0 -85
  142. package/dist/adapter/types.test.d.ts +0 -2
  143. package/dist/adapter/types.test.d.ts.map +0 -1
  144. package/dist/adapter/types.test.js +0 -50
  145. package/dist/adapters/cc-switch/mcp-acode.test.d.ts +0 -2
  146. package/dist/adapters/cc-switch/mcp-acode.test.d.ts.map +0 -1
  147. package/dist/adapters/cc-switch/mcp-acode.test.js +0 -80
  148. package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts +0 -2
  149. package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts.map +0 -1
  150. package/dist/adapters/cc-switch/mcp-claudecode.test.js +0 -75
  151. package/dist/adapters/cc-switch/mcp-codex.test.d.ts +0 -2
  152. package/dist/adapters/cc-switch/mcp-codex.test.d.ts.map +0 -1
  153. package/dist/adapters/cc-switch/mcp-codex.test.js +0 -126
  154. package/dist/adapters/cc-switch/mcp-opencode.test.d.ts +0 -2
  155. package/dist/adapters/cc-switch/mcp-opencode.test.d.ts.map +0 -1
  156. package/dist/adapters/cc-switch/mcp-opencode.test.js +0 -62
  157. package/dist/adapters/cc-switch/skill-directory.test.d.ts +0 -2
  158. package/dist/adapters/cc-switch/skill-directory.test.d.ts.map +0 -1
  159. package/dist/adapters/cc-switch/skill-directory.test.js +0 -74
  160. package/dist/config.test.d.ts +0 -2
  161. package/dist/config.test.d.ts.map +0 -1
  162. package/dist/config.test.js +0 -107
  163. package/dist/routes/ai-sources.test.d.ts +0 -2
  164. package/dist/routes/ai-sources.test.d.ts.map +0 -1
  165. package/dist/routes/ai-sources.test.js +0 -169
  166. package/dist/routes/file-browser.test.d.ts +0 -5
  167. package/dist/routes/file-browser.test.d.ts.map +0 -1
  168. package/dist/routes/file-browser.test.js +0 -155
  169. package/dist/routes/git.test.d.ts +0 -2
  170. package/dist/routes/git.test.d.ts.map +0 -1
  171. package/dist/routes/git.test.js +0 -330
  172. package/dist/routes/instance.test.d.ts +0 -5
  173. package/dist/routes/instance.test.d.ts.map +0 -1
  174. package/dist/routes/instance.test.js +0 -389
  175. package/dist/routes/mcp.test.d.ts +0 -5
  176. package/dist/routes/mcp.test.d.ts.map +0 -1
  177. package/dist/routes/mcp.test.js +0 -92
  178. package/dist/routes/memory-route-wiring.test.d.ts +0 -2
  179. package/dist/routes/memory-route-wiring.test.d.ts.map +0 -1
  180. package/dist/routes/memory-route-wiring.test.js +0 -15
  181. package/dist/routes/memory.test.d.ts +0 -2
  182. package/dist/routes/memory.test.d.ts.map +0 -1
  183. package/dist/routes/memory.test.js +0 -177
  184. package/dist/routes/properties.test.d.ts +0 -5
  185. package/dist/routes/properties.test.d.ts.map +0 -1
  186. package/dist/routes/properties.test.js +0 -72
  187. package/dist/routes/pty.test.d.ts +0 -2
  188. package/dist/routes/pty.test.d.ts.map +0 -1
  189. package/dist/routes/pty.test.js +0 -82
  190. package/dist/routes/runtime-binding.test.d.ts +0 -2
  191. package/dist/routes/runtime-binding.test.d.ts.map +0 -1
  192. package/dist/routes/runtime-binding.test.js +0 -32
  193. package/dist/routes/sessions.test.d.ts +0 -5
  194. package/dist/routes/sessions.test.d.ts.map +0 -1
  195. package/dist/routes/sessions.test.js +0 -86
  196. package/dist/routes/skills.test.d.ts +0 -5
  197. package/dist/routes/skills.test.d.ts.map +0 -1
  198. package/dist/routes/skills.test.js +0 -50
  199. package/dist/routes/system-metrics.test.d.ts +0 -2
  200. package/dist/routes/system-metrics.test.d.ts.map +0 -1
  201. package/dist/routes/system-metrics.test.js +0 -16
  202. package/dist/routes/terminal.stop-options.test.d.ts +0 -2
  203. package/dist/routes/terminal.stop-options.test.d.ts.map +0 -1
  204. package/dist/routes/terminal.stop-options.test.js +0 -39
  205. package/dist/routes/terminal.test.d.ts +0 -2
  206. package/dist/routes/terminal.test.d.ts.map +0 -1
  207. package/dist/routes/terminal.test.js +0 -746
  208. package/dist/routes/yml.test.d.ts +0 -5
  209. package/dist/routes/yml.test.d.ts.map +0 -1
  210. package/dist/routes/yml.test.js +0 -58
  211. package/dist/services/ai-source-apply.test.d.ts +0 -2
  212. package/dist/services/ai-source-apply.test.d.ts.map +0 -1
  213. package/dist/services/ai-source-apply.test.js +0 -138
  214. package/dist/services/auto-register.test.d.ts +0 -2
  215. package/dist/services/auto-register.test.d.ts.map +0 -1
  216. package/dist/services/auto-register.test.js +0 -184
  217. package/dist/services/aws-client-agent-mcp.test.d.ts +0 -2
  218. package/dist/services/aws-client-agent-mcp.test.d.ts.map +0 -1
  219. package/dist/services/aws-client-agent-mcp.test.js +0 -242
  220. package/dist/services/bridge-package-publish-hooks.test.d.ts +0 -2
  221. package/dist/services/bridge-package-publish-hooks.test.d.ts.map +0 -1
  222. package/dist/services/bridge-package-publish-hooks.test.js +0 -136
  223. package/dist/services/cc-switch-discovery.test.d.ts +0 -2
  224. package/dist/services/cc-switch-discovery.test.d.ts.map +0 -1
  225. package/dist/services/cc-switch-discovery.test.js +0 -56
  226. package/dist/services/cli-commands.test.d.ts +0 -2
  227. package/dist/services/cli-commands.test.d.ts.map +0 -1
  228. package/dist/services/cli-commands.test.js +0 -230
  229. package/dist/services/instance-init-service.test.d.ts +0 -2
  230. package/dist/services/instance-init-service.test.d.ts.map +0 -1
  231. package/dist/services/instance-init-service.test.js +0 -140
  232. package/dist/services/instance-state.test.d.ts +0 -2
  233. package/dist/services/instance-state.test.d.ts.map +0 -1
  234. package/dist/services/instance-state.test.js +0 -245
  235. package/dist/services/mcp-launch-binding-queue.test.d.ts +0 -2
  236. package/dist/services/mcp-launch-binding-queue.test.d.ts.map +0 -1
  237. package/dist/services/mcp-launch-binding-queue.test.js +0 -181
  238. package/dist/services/runtime-binding.test.d.ts +0 -2
  239. package/dist/services/runtime-binding.test.d.ts.map +0 -1
  240. package/dist/services/runtime-binding.test.js +0 -78
  241. package/dist/services/runtime-lifecycle-policy.test.d.ts +0 -2
  242. package/dist/services/runtime-lifecycle-policy.test.d.ts.map +0 -1
  243. package/dist/services/runtime-lifecycle-policy.test.js +0 -41
  244. package/dist/services/session-output.test.d.ts +0 -5
  245. package/dist/services/session-output.test.d.ts.map +0 -1
  246. package/dist/services/session-output.test.js +0 -177
  247. package/dist/services/startup-config-wizard.test.d.ts +0 -2
  248. package/dist/services/startup-config-wizard.test.d.ts.map +0 -1
  249. package/dist/services/startup-config-wizard.test.js +0 -184
  250. package/dist/services/terminal-persistence.test.d.ts +0 -5
  251. package/dist/services/terminal-persistence.test.d.ts.map +0 -1
  252. package/dist/services/terminal-persistence.test.js +0 -159
  253. package/dist/services/tool-installer.test.d.ts +0 -2
  254. package/dist/services/tool-installer.test.d.ts.map +0 -1
  255. package/dist/services/tool-installer.test.js +0 -225
  256. package/dist/services/workspace-files.test.d.ts +0 -2
  257. package/dist/services/workspace-files.test.d.ts.map +0 -1
  258. package/dist/services/workspace-files.test.js +0 -648
  259. package/dist/services/workspace-watch.test.d.ts +0 -2
  260. package/dist/services/workspace-watch.test.d.ts.map +0 -1
  261. package/dist/services/workspace-watch.test.js +0 -38
  262. package/dist/utils/file-utils.test.d.ts +0 -2
  263. package/dist/utils/file-utils.test.d.ts.map +0 -1
  264. package/dist/utils/file-utils.test.js +0 -244
  265. package/dist/utils/logger.test.d.ts +0 -2
  266. package/dist/utils/logger.test.d.ts.map +0 -1
  267. package/dist/utils/logger.test.js +0 -93
  268. package/dist/utils/sdk-package-loader.test.d.ts +0 -2
  269. package/dist/utils/sdk-package-loader.test.d.ts.map +0 -1
  270. package/dist/utils/sdk-package-loader.test.js +0 -84
  271. package/dist/utils/validation.test.d.ts +0 -2
  272. package/dist/utils/validation.test.d.ts.map +0 -1
  273. package/dist/utils/validation.test.js +0 -88
  274. package/dist/utils/yaml-utils.test.d.ts +0 -2
  275. package/dist/utils/yaml-utils.test.d.ts.map +0 -1
  276. package/dist/utils/yaml-utils.test.js +0 -363
@@ -1,225 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { SUPPORTED_INSTALLABLE_TOOLS, SUPPORTED_UNINSTALLABLE_TOOLS, buildSdkCliInstallStatus, detectToolInstallStatus, detectToolStatuses, getToolCommandSpecs, getToolUninstallCommands, isVoltaShimPath } from './tool-installer.js';
3
- describe('tool installer service', () => {
4
- it('returns structured status for supported tools', async () => {
5
- const statuses = await detectToolStatuses(['claude', 'opencode', 'codex']);
6
- expect(typeof statuses.claude.installed).toBe('boolean');
7
- expect(typeof statuses.opencode.installed).toBe('boolean');
8
- expect(typeof statuses.codex.installed).toBe('boolean');
9
- expect(statuses.claude.tool).toBe('claude');
10
- expect(statuses.opencode.tool).toBe('opencode');
11
- expect(statuses.codex.tool).toBe('codex');
12
- });
13
- it('deduplicates repeated tool names', async () => {
14
- const statuses = await detectToolStatuses(['claude', 'claude', 'opencode']);
15
- expect(Object.keys(statuses).sort()).toEqual(['claude', 'opencode']);
16
- });
17
- it('returns unsupported status for unknown tool', async () => {
18
- const status = await detectToolInstallStatus('unknown-tool');
19
- expect(status.installed).toBe(false);
20
- expect(status.error).toBe('unsupported tool');
21
- });
22
- it('uses a precise message when a tool command is missing', async () => {
23
- const status = await detectToolInstallStatus('claude');
24
- // error can be null (when installed) or string (when not installed)
25
- expect(status.error === null || typeof status.error === 'string').toBe(true);
26
- if (!status.installed && status.error) {
27
- expect(status.error).not.toBe('not installed or not executable');
28
- }
29
- });
30
- it('treats discovered command path as installed even when version is unavailable', async () => {
31
- const status = await detectToolInstallStatus('opencode');
32
- if (status.executable) {
33
- expect(status.installed).toBe(true);
34
- }
35
- });
36
- it('normalizes tool names to lowercase', async () => {
37
- const statuses = await detectToolStatuses(['CLAUDE', 'OpenCode']);
38
- expect(statuses.claude).toBeDefined();
39
- expect(statuses.opencode).toBeDefined();
40
- });
41
- it('handles empty tool array', async () => {
42
- const statuses = await detectToolStatuses([]);
43
- expect(statuses).toEqual({});
44
- });
45
- it('handles null input for detectToolStatuses', async () => {
46
- const statuses = await detectToolStatuses(null);
47
- expect(statuses).toEqual({});
48
- });
49
- it('handles undefined input for detectToolStatuses', async () => {
50
- const statuses = await detectToolStatuses(undefined);
51
- expect(statuses).toEqual({});
52
- });
53
- it('filters out empty and whitespace tool names', async () => {
54
- const statuses = await detectToolStatuses(['claude', '', ' ', 'opencode']);
55
- expect(Object.keys(statuses).sort()).toEqual(['claude', 'opencode']);
56
- });
57
- it('returns correct structure for tool status', async () => {
58
- const status = await detectToolInstallStatus('claude');
59
- expect(typeof status.tool).toBe('string');
60
- expect(typeof status.installed).toBe('boolean');
61
- expect(status.executable === null || typeof status.executable === 'string').toBe(true);
62
- expect(status.version === null || typeof status.version === 'string').toBe(true);
63
- expect(typeof status.installing).toBe('boolean');
64
- expect(status.error === null || typeof status.error === 'string').toBe(true);
65
- });
66
- it('supports claudecode as alias for claude', async () => {
67
- const status = await detectToolInstallStatus('claudecode');
68
- expect(status.tool).toBe('claudecode');
69
- // claudecode shares same detection as claude
70
- expect(typeof status.installed).toBe('boolean');
71
- });
72
- it('supports codex as an installable tool', async () => {
73
- expect(SUPPORTED_INSTALLABLE_TOOLS).toContain('codex');
74
- const status = await detectToolInstallStatus('codex');
75
- expect(status.tool).toBe('codex');
76
- expect(typeof status.installed).toBe('boolean');
77
- expect(status.error).not.toBe('unsupported tool');
78
- });
79
- it('detects OpenCode by SDK package instead of CLI availability', async () => {
80
- const status = await detectToolInstallStatus('opencode');
81
- expect(status.tool).toBe('opencode');
82
- expect(status.executable === null || status.executable === '@opencode-ai/sdk').toBe(true);
83
- if (!status.installed) {
84
- expect(status.error).toContain('@opencode-ai/sdk');
85
- }
86
- });
87
- it('detects Codex by SDK package instead of CLI availability', async () => {
88
- const status = await detectToolInstallStatus('codex');
89
- expect(status.tool).toBe('codex');
90
- expect(status.executable === null || status.executable === '@openai/codex-sdk').toBe(true);
91
- if (!status.installed) {
92
- expect(status.error).toContain('@openai/codex-sdk');
93
- }
94
- });
95
- it('supports all panel tools as uninstallable tools', () => {
96
- expect(SUPPORTED_UNINSTALLABLE_TOOLS).toEqual(expect.arrayContaining(['claude', 'opencode', 'codex']));
97
- });
98
- it('covers npm and native installer uninstall paths for OpenCode', () => {
99
- const commands = getToolUninstallCommands('opencode');
100
- expect(commands.some(command => command.includes('npm uninstall --prefix'))).toBe(true);
101
- expect(commands.some(command => command.includes('@opencode-ai/sdk'))).toBe(true);
102
- expect(commands.some(command => command.includes('opencode-ai'))).toBe(true);
103
- if (process.platform !== 'win32') {
104
- expect(commands).toContain('opencode uninstall --force');
105
- expect(commands).toContain('rm -f ~/.opencode/bin/opencode');
106
- }
107
- });
108
- it('covers bridge-local SDK uninstall path for Claude Code', () => {
109
- const commands = getToolUninstallCommands('claude');
110
- expect(commands.some(command => command.includes('npm uninstall --prefix'))).toBe(true);
111
- expect(commands.some(command => command.includes('@anthropic-ai/claude-agent-sdk'))).toBe(true);
112
- });
113
- it('installs Claude Code SDK and terminal CLI together', () => {
114
- const commands = getToolCommandSpecs('claude', 'install');
115
- expect(commands).toHaveLength(5);
116
- expect(commands[0].args).toEqual([
117
- 'uninstall',
118
- '--prefix',
119
- expect.any(String),
120
- '@anthropic-ai/claude-agent-sdk',
121
- '@anthropic-ai/sdk'
122
- ]);
123
- expect(commands[1].args).toEqual([
124
- 'install',
125
- '--prefix',
126
- expect.any(String),
127
- '@anthropic-ai/sdk@latest'
128
- ]);
129
- expect(commands[2].args).toEqual([
130
- 'install',
131
- '--prefix',
132
- expect.any(String),
133
- '@anthropic-ai/claude-agent-sdk@latest'
134
- ]);
135
- expect(commands[3].args).toEqual([
136
- 'install',
137
- '--prefix',
138
- expect.any(String),
139
- '@anthropic-ai/claude-agent-sdk@latest',
140
- '--legacy-peer-deps'
141
- ]);
142
- expect(commands[4].args).toEqual([
143
- 'install',
144
- '-g',
145
- '@anthropic-ai/claude-code@latest'
146
- ]);
147
- expect(commands[3].display).toContain('--legacy-peer-deps');
148
- expect(commands[4].display).toBe('npm install -g @anthropic-ai/claude-code@latest');
149
- });
150
- it('installs Claude Code CLI for the claudecode alias too', () => {
151
- const commands = getToolCommandSpecs('claudecode', 'install');
152
- expect(commands.some(command => command.args.includes('@anthropic-ai/claude-agent-sdk@latest'))).toBe(true);
153
- expect(commands.some(command => command.args.includes('@anthropic-ai/sdk@latest'))).toBe(true);
154
- expect(commands.some(command => command.args.includes('--legacy-peer-deps'))).toBe(true);
155
- expect(commands.some(command => command.args.includes('@anthropic-ai/claude-code@latest'))).toBe(true);
156
- });
157
- it('marks Claude unavailable when SDK exists but terminal CLI is missing', () => {
158
- const status = buildSdkCliInstallStatus('claude', {
159
- executable: '@anthropic-ai/claude-agent-sdk',
160
- version: '0.2.87',
161
- error: null
162
- }, {
163
- executable: null,
164
- error: 'CLI package @anthropic-ai/claude-code is not installed or command is unavailable: command not installed'
165
- }, true);
166
- expect(status.installed).toBe(false);
167
- expect(status.executable).toBe('@anthropic-ai/claude-agent-sdk');
168
- expect(status.error).toContain('@anthropic-ai/claude-code');
169
- });
170
- it('covers bridge-local SDK uninstall path for Codex', () => {
171
- const commands = getToolUninstallCommands('codex');
172
- expect(commands.some(command => command.includes('npm uninstall --prefix'))).toBe(true);
173
- expect(commands.some(command => command.includes('@openai/codex-sdk'))).toBe(true);
174
- });
175
- it('executes npm-backed install and uninstall commands with prefix as an unquoted argument', () => {
176
- const expectedPackagesByTool = {
177
- claude: '@anthropic-ai/claude-agent-sdk',
178
- claudecode: '@anthropic-ai/claude-agent-sdk',
179
- opencode: '@opencode-ai/sdk',
180
- codex: '@openai/codex-sdk'
181
- };
182
- for (const [tool, packageName] of Object.entries(expectedPackagesByTool)) {
183
- for (const phase of ['install', 'uninstall']) {
184
- const commands = getToolCommandSpecs(tool, phase);
185
- const command = commands.find(spec => spec.args.some(arg => arg.startsWith(packageName))) || commands[0];
186
- const expectedCommandAction = command.args[0];
187
- expect(command.kind).toBe('execFile');
188
- expect(command.command).toMatch(/^npm(?:\.cmd)?$/);
189
- expect(command.args.slice(0, 3)).toEqual([expectedCommandAction, '--prefix', expect.any(String)]);
190
- expect(command.args[2]).not.toMatch(/^"|"$/);
191
- expect(command.args.some(arg => arg.startsWith(packageName))).toBe(true);
192
- expect(command.display).toContain(`npm ${expectedCommandAction} --prefix`);
193
- }
194
- }
195
- });
196
- it('recognizes Volta shim paths for package-manager-aware detection', () => {
197
- expect(isVoltaShimPath('C:\\Users\\tester\\AppData\\Local\\Volta\\bin\\codex.cmd')).toBe(true);
198
- expect(isVoltaShimPath('/home/tester/.volta/bin/codex')).toBe(true);
199
- expect(isVoltaShimPath('/Users/tester/.volta/bin/claude')).toBe(true);
200
- expect(isVoltaShimPath('/usr/local/bin/codex')).toBe(false);
201
- });
202
- it('detectToolStatuses returns status for all requested tools', async () => {
203
- const tools = ['claude', 'opencode', 'unknown-tool'];
204
- const statuses = await detectToolStatuses(tools);
205
- expect(statuses.claude).toBeDefined();
206
- expect(statuses.opencode).toBeDefined();
207
- // unknown-tool should also be in results with unsupported status
208
- expect(statuses['unknown-tool']).toBeDefined();
209
- expect(statuses['unknown-tool'].error).toBe('unsupported tool');
210
- });
211
- it('handles mixed case tool names', async () => {
212
- const statuses = await detectToolStatuses(['Claude', 'OPENCODE', 'ClaudeCode']);
213
- expect(statuses.claude).toBeDefined();
214
- expect(statuses.opencode).toBeDefined();
215
- expect(statuses.claudecode).toBeDefined();
216
- });
217
- it('sets installing flag to false by default', async () => {
218
- const status = await detectToolInstallStatus('claude');
219
- expect(status.installing).toBe(false);
220
- });
221
- it('returns consistent tool name in lowercase', async () => {
222
- const status = await detectToolInstallStatus('CLAUDE');
223
- expect(status.tool).toBe('claude');
224
- });
225
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=workspace-files.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace-files.test.d.ts","sourceRoot":"","sources":["../../src/services/workspace-files.test.ts"],"names":[],"mappings":""}