aws-runtime-bridge 1.9.32 → 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 -2
  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 -45
  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 -325
  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 +2 -69
  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 -19
  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 -99
  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 +207 -125
  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 -4
  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 -33
  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 -3
  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 -11
  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,107 +0,0 @@
1
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { afterEach, describe, expect, it, vi } from "vitest";
5
- vi.mock("node:os", async () => {
6
- const actual = await vi.importActual("node:os");
7
- const mocked = {
8
- ...actual,
9
- homedir: () => process.env.AWS_TEST_HOME || actual.homedir(),
10
- };
11
- return {
12
- ...mocked,
13
- default: mocked,
14
- };
15
- });
16
- const originalEnv = { ...process.env };
17
- const tempRoots = [];
18
- function createRuntimeHome() {
19
- const root = mkdtempSync(path.join(os.tmpdir(), "aws-config-"));
20
- tempRoots.push(root);
21
- return root;
22
- }
23
- function useRuntimeHome(runtimeHome) {
24
- process.env.AWS_TEST_HOME = runtimeHome;
25
- process.env.HOME = runtimeHome;
26
- process.env.USERPROFILE = runtimeHome;
27
- process.env.AWS_RUNTIME_HOME_DIR = runtimeHome;
28
- delete process.env.AWS_RUNTIME_SCHEDULER_BASE_URL;
29
- }
30
- function writeBridgeConfig(runtimeHome, autoRegisterTargets) {
31
- const configPath = path.join(runtimeHome, ".aws-bridge", "config.json");
32
- mkdirSync(path.dirname(configPath), { recursive: true });
33
- writeFileSync(configPath, `${JSON.stringify({ connectionKey: "bridge-key", autoRegisterTargets }, null, 2)}\n`, "utf-8");
34
- }
35
- afterEach(() => {
36
- process.env = { ...originalEnv };
37
- vi.resetModules();
38
- vi.clearAllMocks();
39
- vi.restoreAllMocks();
40
- for (const root of tempRoots.splice(0)) {
41
- rmSync(root, { recursive: true, force: true });
42
- }
43
- });
44
- describe("scheduler base URL resolution", () => {
45
- it("keeps scheduler URL supplied by the server request as the highest priority", async () => {
46
- const runtimeHome = createRuntimeHome();
47
- useRuntimeHome(runtimeHome);
48
- process.env.AWS_RUNTIME_SCHEDULER_BASE_URL = "http://env.local:7380";
49
- writeBridgeConfig(runtimeHome, [{ serverUrl: "http://target.local:7380" }]);
50
- const { resolveSchedulerBaseUrlFrom } = await import("./config.js");
51
- expect(resolveSchedulerBaseUrlFrom("http://server.local:7380/api")).toEqual({
52
- url: "http://server.local:7380",
53
- source: "request",
54
- ambiguousTargetUrls: [],
55
- });
56
- });
57
- it("keeps explicit AWS_RUNTIME_SCHEDULER_BASE_URL as the highest priority", async () => {
58
- const runtimeHome = createRuntimeHome();
59
- useRuntimeHome(runtimeHome);
60
- process.env.AWS_RUNTIME_SCHEDULER_BASE_URL = "http://explicit.local:7380/path";
61
- writeBridgeConfig(runtimeHome, [{ serverUrl: "http://target.local:7380" }]);
62
- const { resolveSchedulerBaseUrl } = await import("./config.js");
63
- expect(resolveSchedulerBaseUrl()).toEqual({
64
- url: "http://explicit.local:7380",
65
- source: "env",
66
- ambiguousTargetUrls: [],
67
- });
68
- });
69
- it("uses a single auto-register target serverUrl when scheduler env is absent", async () => {
70
- const runtimeHome = createRuntimeHome();
71
- useRuntimeHome(runtimeHome);
72
- writeBridgeConfig(runtimeHome, [{ serverUrl: "http://127.0.0.1:7380" }]);
73
- const { resolveSchedulerBaseUrl } = await import("./config.js");
74
- expect(resolveSchedulerBaseUrl()).toEqual({
75
- url: "http://127.0.0.1:7380",
76
- source: "single-auto-register-target",
77
- ambiguousTargetUrls: [],
78
- });
79
- });
80
- it("does not silently select the first auto-register target when multiple URLs exist", async () => {
81
- const runtimeHome = createRuntimeHome();
82
- useRuntimeHome(runtimeHome);
83
- writeBridgeConfig(runtimeHome, [
84
- { serverUrl: "http://scheduler-a.local:7380" },
85
- { serverUrl: "http://scheduler-b.local:7380" },
86
- ]);
87
- const { DEFAULT_SCHEDULER_BASE_URL, resolveSchedulerBaseUrl } = await import("./config.js");
88
- expect(resolveSchedulerBaseUrl()).toEqual({
89
- url: DEFAULT_SCHEDULER_BASE_URL,
90
- source: "ambiguous-auto-register-targets",
91
- ambiguousTargetUrls: [
92
- "http://scheduler-a.local:7380",
93
- "http://scheduler-b.local:7380",
94
- ],
95
- });
96
- });
97
- it("falls back to the legacy localhost default when no scheduler source exists", async () => {
98
- const runtimeHome = createRuntimeHome();
99
- useRuntimeHome(runtimeHome);
100
- const { DEFAULT_SCHEDULER_BASE_URL, resolveSchedulerBaseUrl } = await import("./config.js");
101
- expect(resolveSchedulerBaseUrl()).toEqual({
102
- url: DEFAULT_SCHEDULER_BASE_URL,
103
- source: "default",
104
- ambiguousTargetUrls: [],
105
- });
106
- });
107
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ai-sources.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-sources.test.d.ts","sourceRoot":"","sources":["../../src/routes/ai-sources.test.ts"],"names":[],"mappings":""}
@@ -1,169 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import assert from 'node:assert/strict';
3
- function buildUnifiedToolConfig(template) {
4
- const normalizedBaseUrl = String(template.baseUrl || '').trim();
5
- const normalizedApiKey = String(template.apiKey || '').trim();
6
- const normalizedModels = [
7
- ...(Array.isArray(template.models) ? template.models : []),
8
- template.model,
9
- ]
10
- .map((item) => String(item || '').trim())
11
- .filter((item, index, list) => item && list.indexOf(item) === index);
12
- const normalizedModel = normalizedModels[0] || String(template.model || '').trim();
13
- const normalizedOpenCodeBaseUrl = normalizedBaseUrl.endsWith('/v1')
14
- ? normalizedBaseUrl
15
- : `${normalizedBaseUrl.replace(/\/+$/, '')}/v1`;
16
- const opencodeModels = Object.fromEntries(normalizedModels.map((model) => [model, {
17
- name: model,
18
- modalities: {
19
- input: ['text', 'image'],
20
- output: ['text'],
21
- },
22
- }]));
23
- return {
24
- claudecode: {
25
- env: {
26
- ANTHROPIC_BASE_URL: normalizedBaseUrl,
27
- ANTHROPIC_AUTH_TOKEN: normalizedApiKey,
28
- ANTHROPIC_MODEL: normalizedModel,
29
- },
30
- },
31
- opencode: {
32
- provider: {
33
- default: {
34
- npm: '@ai-sdk/openai-compatible',
35
- options: {
36
- baseURL: normalizedOpenCodeBaseUrl,
37
- apiKey: normalizedApiKey,
38
- },
39
- models: opencodeModels,
40
- },
41
- },
42
- },
43
- };
44
- }
45
- function normalizeListedModels(payload) {
46
- if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
47
- return [];
48
- }
49
- const records = Array.isArray(payload.data)
50
- ? payload.data
51
- : [];
52
- const ids = new Set();
53
- for (const item of records) {
54
- if (!item || typeof item !== 'object' || Array.isArray(item)) {
55
- continue;
56
- }
57
- const id = String(item.id || '').trim();
58
- if (id) {
59
- ids.add(id);
60
- }
61
- }
62
- return [...ids];
63
- }
64
- function buildModelListCandidates(baseUrl, protocol) {
65
- const normalizedBaseUrl = baseUrl.replace(/\/+$/, '');
66
- if (protocol === 'anthropic') {
67
- return [`${normalizedBaseUrl}/v1/models`];
68
- }
69
- if (protocol === 'openai') {
70
- return normalizedBaseUrl.endsWith('/v1')
71
- ? [`${normalizedBaseUrl}/models`]
72
- : [`${normalizedBaseUrl}/models`, `${normalizedBaseUrl}/v1/models`];
73
- }
74
- const openAiCandidates = normalizedBaseUrl.endsWith('/v1')
75
- ? [`${normalizedBaseUrl}/models`]
76
- : [`${normalizedBaseUrl}/models`, `${normalizedBaseUrl}/v1/models`];
77
- return [...openAiCandidates, `${normalizedBaseUrl}/v1/models`];
78
- }
79
- function buildApplyAiSourcesResponse(body) {
80
- return {
81
- acodeModelEffort: String(body.acodeModelEffort || ''),
82
- claudecodeModelEffort: String(body.claudecodeModelEffort || ''),
83
- codexModelEffort: String(body.codexModelEffort || ''),
84
- opencodeModelEffort: String(body.opencodeModelEffort || ''),
85
- };
86
- }
87
- describe('ai source unified config generation', () => {
88
- it('builds tool-specific configs from unified template fields', () => {
89
- assert.deepEqual(buildUnifiedToolConfig({
90
- baseUrl: 'https://example.com',
91
- apiKey: 'sk-demo',
92
- model: 'claude-sonnet-4-5',
93
- models: ['claude-sonnet-4-5', 'claude-haiku-4-5'],
94
- }), {
95
- claudecode: {
96
- env: {
97
- ANTHROPIC_BASE_URL: 'https://example.com',
98
- ANTHROPIC_AUTH_TOKEN: 'sk-demo',
99
- ANTHROPIC_MODEL: 'claude-sonnet-4-5',
100
- },
101
- },
102
- opencode: {
103
- provider: {
104
- default: {
105
- npm: '@ai-sdk/openai-compatible',
106
- options: {
107
- baseURL: 'https://example.com/v1',
108
- apiKey: 'sk-demo',
109
- },
110
- models: {
111
- 'claude-sonnet-4-5': {
112
- name: 'claude-sonnet-4-5',
113
- modalities: {
114
- input: ['text', 'image'],
115
- output: ['text'],
116
- },
117
- },
118
- 'claude-haiku-4-5': {
119
- name: 'claude-haiku-4-5',
120
- modalities: {
121
- input: ['text', 'image'],
122
- output: ['text'],
123
- },
124
- },
125
- },
126
- },
127
- },
128
- },
129
- });
130
- });
131
- it('extracts model ids from an OpenAI-compatible models payload', () => {
132
- expect(normalizeListedModels({
133
- data: [
134
- { id: 'claude-sonnet-4-5' },
135
- { id: 'claude-haiku-4-5' },
136
- { id: 'claude-sonnet-4-5' },
137
- ],
138
- })).toEqual(['claude-sonnet-4-5', 'claude-haiku-4-5']);
139
- });
140
- it('builds fallback candidates for openai-compatible and anthropic model listing', () => {
141
- expect(buildModelListCandidates('https://octopus.721579.xyz', 'openai')).toEqual([
142
- 'https://octopus.721579.xyz/models',
143
- 'https://octopus.721579.xyz/v1/models',
144
- ]);
145
- expect(buildModelListCandidates('https://api.anthropic.com', 'anthropic')).toEqual([
146
- 'https://api.anthropic.com/v1/models',
147
- ]);
148
- });
149
- it('keeps openai-compatible baseURL unchanged when template already includes /v1', () => {
150
- expect(buildUnifiedToolConfig({
151
- baseUrl: 'https://octopus.721579.xyz/v1',
152
- apiKey: 'sk-demo',
153
- model: 'gpt-test',
154
- }).opencode.provider.default.options.baseURL).toBe('https://octopus.721579.xyz/v1');
155
- });
156
- it('echoes selected model effort metadata in apply-ai-sources responses', () => {
157
- expect(buildApplyAiSourcesResponse({
158
- acodeModelEffort: 'xhigh',
159
- claudecodeModelEffort: 'high',
160
- codexModelEffort: 'max',
161
- opencodeModelEffort: 'high',
162
- })).toEqual({
163
- acodeModelEffort: 'xhigh',
164
- claudecodeModelEffort: 'high',
165
- codexModelEffort: 'max',
166
- opencodeModelEffort: 'high',
167
- });
168
- });
169
- });
@@ -1,5 +0,0 @@
1
- /**
2
- * File Browser 路由单元测试
3
- */
4
- export {};
5
- //# sourceMappingURL=file-browser.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-browser.test.d.ts","sourceRoot":"","sources":["../../src/routes/file-browser.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,155 +0,0 @@
1
- /**
2
- * File Browser 路由单元测试
3
- */
4
- import { describe, it, expect } from 'vitest';
5
- import { mkdtemp, mkdir, rm, writeFile } from 'node:fs/promises';
6
- import { tmpdir } from 'node:os';
7
- import path from 'node:path';
8
- import multer from 'multer';
9
- import { createWorkspaceUploadLimitResponse, isIgnoredByGitIgnore, listHostDirectoryTree, parseGitIgnoreRules, parseWorkspaceUploadRelativePaths, WORKSPACE_UPLOAD_FILE_LIMIT } from './file-browser.js';
10
- describe('file-browser route validation', () => {
11
- it('returns root drives on Windows when path is empty', () => {
12
- const getRootForWindows = () => {
13
- const drives = [];
14
- for (let i = 67; i <= 90; i++)
15
- drives.push(String.fromCharCode(i) + ':\\');
16
- return drives;
17
- };
18
- const drives = getRootForWindows();
19
- expect(drives.length).toBe(24);
20
- expect(drives.includes('C:\\')).toBe(true);
21
- });
22
- it('validates workspacePath for workspace/list', () => {
23
- const validateWorkspaceListRequest = (body) => {
24
- if (!body.workspacePath)
25
- return { valid: false, error: 'workspacePath is required' };
26
- return { valid: true };
27
- };
28
- expect(validateWorkspaceListRequest({}).valid).toBe(false);
29
- expect(validateWorkspaceListRequest({ workspacePath: '/project' }).valid).toBe(true);
30
- });
31
- it('validates filePath for workspace/read', () => {
32
- const validateReadRequest = (body) => {
33
- if (!body.workspacePath || !body.filePath)
34
- return { valid: false, error: 'workspacePath and filePath are required' };
35
- return { valid: true };
36
- };
37
- expect(validateReadRequest({}).valid).toBe(false);
38
- expect(validateReadRequest({ workspacePath: '/project', filePath: 'file.txt' }).valid).toBe(true);
39
- });
40
- it('validates create request', () => {
41
- const validateCreateRequest = (body) => {
42
- if (!body.workspacePath)
43
- return { valid: false, error: 'workspacePath is required' };
44
- if (!body.entryName)
45
- return { valid: false, error: 'entryName is required' };
46
- return { valid: true };
47
- };
48
- expect(validateCreateRequest({}).valid).toBe(false);
49
- expect(validateCreateRequest({ workspacePath: '/p', entryName: 'new-file' }).valid).toBe(true);
50
- });
51
- it('validates rename request', () => {
52
- const validateRenameRequest = (body) => {
53
- if (!body.workspacePath || !body.targetPath || !body.newName)
54
- return { valid: false, error: 'workspacePath, targetPath, and newName are required' };
55
- return { valid: true };
56
- };
57
- expect(validateRenameRequest({}).valid).toBe(false);
58
- expect(validateRenameRequest({ workspacePath: '/p', targetPath: '/p/old', newName: 'new' }).valid).toBe(true);
59
- });
60
- it('validates delete request', () => {
61
- const validateDeleteRequest = (body) => {
62
- if (!body.workspacePath || !body.targetPath)
63
- return { valid: false, error: 'workspacePath and targetPath are required' };
64
- return { valid: true };
65
- };
66
- expect(validateDeleteRequest({}).valid).toBe(false);
67
- expect(validateDeleteRequest({ workspacePath: '/p', targetPath: '/p/file' }).valid).toBe(true);
68
- });
69
- it('validates move request', () => {
70
- const validateMoveRequest = (body) => {
71
- if (!body.workspacePath || !body.targetPath || !body.destinationPath)
72
- return { valid: false, error: 'workspacePath, targetPath, and destinationPath are required' };
73
- return { valid: true };
74
- };
75
- expect(validateMoveRequest({}).valid).toBe(false);
76
- expect(validateMoveRequest({ workspacePath: '/p', targetPath: '/p/file', destinationPath: '/p/dest' }).valid).toBe(true);
77
- });
78
- });
79
- describe('file-browser response building', () => {
80
- it('builds correct list response', () => {
81
- const response = {
82
- isWindows: true,
83
- currentPath: 'C:\\Users',
84
- items: [
85
- { name: 'Documents', path: 'C:\\Users\\Documents', isDirectory: true },
86
- { name: 'Downloads', path: 'C:\\Users\\Downloads', isDirectory: true },
87
- ],
88
- };
89
- expect(response.isWindows).toBe(true);
90
- expect(response.items.length).toBe(2);
91
- });
92
- it('categorizes entries by type', () => {
93
- const entries = [
94
- { name: 'src', isDir: true },
95
- { name: 'package.json', isDir: false },
96
- ];
97
- const directories = entries.filter(e => e.isDir).map(e => e.name);
98
- const files = entries.filter(e => !e.isDir).map(e => e.name);
99
- expect(directories).toEqual(['src']);
100
- expect(files).toEqual(['package.json']);
101
- });
102
- it('returns JSON guidance when folder upload exceeds file count limit', () => {
103
- const response = createWorkspaceUploadLimitResponse(new multer.MulterError('LIMIT_FILE_COUNT'));
104
- expect(response.status).toBe(400);
105
- expect(response.body).toEqual({
106
- error: `一次最多上传 ${WORKSPACE_UPLOAD_FILE_LIMIT} 个文件,请拆分文件夹后重试。`,
107
- code: 'LIMIT_FILE_COUNT'
108
- });
109
- });
110
- it('parses relative paths from a JSON manifest to preserve folder hierarchy', () => {
111
- const relativePaths = parseWorkspaceUploadRelativePaths({
112
- relativePathsJson: JSON.stringify(['a/b/c.txt', 'a/d/e.txt'])
113
- });
114
- expect(relativePaths).toEqual(['a/b/c.txt', 'a/d/e.txt']);
115
- });
116
- it('keeps backward compatibility with repeated relativePaths fields', () => {
117
- const relativePaths = parseWorkspaceUploadRelativePaths({
118
- relativePaths: ['a/b/c.txt', 'a/d/e.txt']
119
- });
120
- expect(relativePaths).toEqual(['a/b/c.txt', 'a/d/e.txt']);
121
- });
122
- });
123
- describe('directory tree gitignore filtering', () => {
124
- it('matches ignored directories from .gitignore rules', () => {
125
- const rules = parseGitIgnoreRules(`
126
- node_modules/
127
- /dist/
128
- logs*
129
- !logs-keep/
130
- `);
131
- expect(isIgnoredByGitIgnore('node_modules', true, rules)).toBe(true);
132
- expect(isIgnoredByGitIgnore('packages/app/node_modules', true, rules)).toBe(true);
133
- expect(isIgnoredByGitIgnore('dist', true, rules)).toBe(true);
134
- expect(isIgnoredByGitIgnore('packages/app/dist', true, rules)).toBe(false);
135
- expect(isIgnoredByGitIgnore('logs-temp', true, rules)).toBe(true);
136
- expect(isIgnoredByGitIgnore('logs-keep', true, rules)).toBe(false);
137
- });
138
- it('filters actual directory tree entries using root .gitignore', async () => {
139
- const root = await mkdtemp(path.join(tmpdir(), 'aws-tree-ignore-'));
140
- try {
141
- await mkdir(path.join(root, 'src'));
142
- await mkdir(path.join(root, 'node_modules'));
143
- await mkdir(path.join(root, 'dist'));
144
- await writeFile(path.join(root, '.gitignore'), 'node_modules/\n/dist/\n');
145
- const result = await listHostDirectoryTree(root);
146
- const names = result.tree.map((item) => item.name);
147
- expect(names).toContain('src');
148
- expect(names).not.toContain('node_modules');
149
- expect(names).not.toContain('dist');
150
- }
151
- finally {
152
- await rm(root, { recursive: true, force: true });
153
- }
154
- });
155
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=git.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git.test.d.ts","sourceRoot":"","sources":["../../src/routes/git.test.ts"],"names":[],"mappings":""}