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,245 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { promises as fs } from 'node:fs';
3
- import os from 'node:os';
4
- import path from 'node:path';
5
- import { getInstanceStateFile, loadInstanceState, saveInstanceState, getAgentInitRoot, } from './instance-state.js';
6
- describe('instance-state service', () => {
7
- const testAgentId = 'test-agent-123';
8
- const originalRuntimeHomeDir = process.env.AWS_RUNTIME_HOME_DIR;
9
- const testRuntimeHomeDir = path.join(os.tmpdir(), `aws-instance-state-home-${Date.now()}`);
10
- function getCurrentStateFilePath() {
11
- return getInstanceStateFile(testAgentId);
12
- }
13
- beforeEach(async () => {
14
- process.env.AWS_RUNTIME_HOME_DIR = testRuntimeHomeDir;
15
- // 清理测试文件
16
- try {
17
- await fs.rm(testRuntimeHomeDir, { recursive: true, force: true });
18
- await fs.rm(path.join(os.tmpdir(), 'agentswork-runtime-init', testAgentId), { recursive: true, force: true });
19
- }
20
- catch {
21
- // 目录不存在,忽略
22
- }
23
- });
24
- afterEach(async () => {
25
- if (originalRuntimeHomeDir === undefined) {
26
- delete process.env.AWS_RUNTIME_HOME_DIR;
27
- }
28
- else {
29
- process.env.AWS_RUNTIME_HOME_DIR = originalRuntimeHomeDir;
30
- }
31
- // 清理测试文件
32
- try {
33
- await fs.rm(testRuntimeHomeDir, { recursive: true, force: true });
34
- await fs.rm(path.join(os.tmpdir(), 'agentswork-runtime-init', testAgentId), { recursive: true, force: true });
35
- }
36
- catch {
37
- // 目录不存在,忽略
38
- }
39
- });
40
- describe('getInstanceStateFile', () => {
41
- it('should return correct path in runtime home directory', () => {
42
- const result = getInstanceStateFile(testAgentId);
43
- const expected = path.join(testRuntimeHomeDir, '.aws-bridge', 'instances', testAgentId, 'state.json');
44
- expect(result).toBe(expected);
45
- });
46
- it('should handle agentId with special characters', () => {
47
- const specialAgentId = 'agent-with-dashes_and_underscores';
48
- const result = getInstanceStateFile(specialAgentId);
49
- expect(result).toContain(specialAgentId);
50
- expect(result).toContain('state.json');
51
- });
52
- it('should convert numeric agentId to string', () => {
53
- const numericId = 12345;
54
- const result = getInstanceStateFile(numericId);
55
- expect(result).toContain('12345');
56
- });
57
- });
58
- describe('getAgentInitRoot', () => {
59
- it('should return correct init root directory', () => {
60
- const result = getAgentInitRoot(testAgentId);
61
- const expected = path.join(testRuntimeHomeDir, '.aws-bridge', 'instances', testAgentId);
62
- expect(result).toBe(expected);
63
- });
64
- });
65
- describe('loadInstanceState', () => {
66
- it('should return default state when file does not exist', async () => {
67
- const state = await loadInstanceState('non-existent-agent-id');
68
- expect(state.initialized).toBe(false);
69
- expect(state.skills).toEqual([]);
70
- expect(state.mcpServers).toEqual([]);
71
- expect(state.enabledTools).toEqual(['acode', 'claude', 'opencode', 'codex']);
72
- expect(state.toolStatus).toEqual({});
73
- expect(state.skillEnabled).toBe(true);
74
- expect(state.mcpEnabled).toBe(true);
75
- expect(state.updatedAt).toBeNull();
76
- });
77
- it('should load existing state from file', async () => {
78
- // 先保存一个状态
79
- const savedState = {
80
- initialized: true,
81
- skills: [
82
- {
83
- id: 'skill-1',
84
- name: 'test-skill',
85
- fileName: 'test.zip',
86
- filePath: '/path/to/test.zip',
87
- bytes: 1024,
88
- installedAt: '2024-01-01T00:00:00Z',
89
- },
90
- ],
91
- enabledTools: ['claude', 'gemini'],
92
- skillEnabled: false,
93
- mcpEnabled: true,
94
- };
95
- await saveInstanceState(testAgentId, savedState);
96
- // 然后加载
97
- const loadedState = await loadInstanceState(testAgentId);
98
- expect(loadedState.initialized).toBe(true);
99
- expect(loadedState.skills).toHaveLength(1);
100
- expect(loadedState.skills[0].name).toBe('test-skill');
101
- expect(loadedState.enabledTools).toEqual(['claude', 'gemini']);
102
- expect(loadedState.skillEnabled).toBe(false);
103
- expect(loadedState.mcpEnabled).toBe(true);
104
- expect(loadedState.updatedAt).not.toBeNull();
105
- });
106
- it('should handle corrupted JSON file gracefully', async () => {
107
- // 创建损坏的 JSON 文件
108
- const stateFilePath = getCurrentStateFilePath();
109
- await fs.mkdir(path.dirname(stateFilePath), { recursive: true });
110
- await fs.writeFile(stateFilePath, '{ invalid json }', 'utf-8');
111
- const state = await loadInstanceState(testAgentId);
112
- // 应该返回默认状态
113
- expect(state.initialized).toBe(false);
114
- expect(state.skills).toEqual([]);
115
- });
116
- it('should migrate readable legacy temp state into runtime home', async () => {
117
- const legacyFilePath = path.join(os.tmpdir(), 'agentswork-runtime-init', testAgentId, 'state.json');
118
- const legacyState = {
119
- initialized: true,
120
- skills: [],
121
- mcpServers: [],
122
- enabledTools: ['claude'],
123
- toolStatus: {},
124
- skillEnabled: true,
125
- mcpEnabled: false,
126
- updatedAt: '2026-01-01T00:00:00.000Z',
127
- };
128
- await fs.mkdir(path.dirname(legacyFilePath), { recursive: true });
129
- await fs.writeFile(legacyFilePath, JSON.stringify(legacyState), 'utf-8');
130
- const state = await loadInstanceState(testAgentId);
131
- expect(state).toEqual(legacyState);
132
- expect(JSON.parse(await fs.readFile(getInstanceStateFile(testAgentId), 'utf-8'))).toEqual(legacyState);
133
- });
134
- });
135
- describe('saveInstanceState', () => {
136
- it('should save complete state with all fields', async () => {
137
- const partialState = {
138
- initialized: true,
139
- skills: [],
140
- mcpServers: [],
141
- enabledTools: ['opencode'],
142
- toolStatus: {
143
- claude: {
144
- tool: 'claude',
145
- installed: true,
146
- executable: '/usr/local/bin/claude',
147
- version: '1.0.0',
148
- installing: false,
149
- error: null,
150
- },
151
- },
152
- skillEnabled: false,
153
- mcpEnabled: true,
154
- };
155
- const result = await saveInstanceState(testAgentId, partialState);
156
- expect(result.initialized).toBe(true);
157
- expect(result.enabledTools).toEqual(['opencode']);
158
- expect(result.toolStatus.claude.installed).toBe(true);
159
- expect(result.skillEnabled).toBe(false);
160
- expect(result.mcpEnabled).toBe(true);
161
- expect(result.updatedAt).not.toBeNull();
162
- // 验证文件已创建
163
- const fileContent = await fs.readFile(getCurrentStateFilePath(), 'utf-8');
164
- const parsed = JSON.parse(fileContent);
165
- expect(parsed.initialized).toBe(true);
166
- });
167
- it('should use default values for missing arrays', async () => {
168
- const partialState = {
169
- initialized: true,
170
- };
171
- const result = await saveInstanceState(testAgentId, partialState);
172
- expect(result.skills).toEqual([]);
173
- expect(result.mcpServers).toEqual([]);
174
- expect(result.enabledTools).toEqual(['acode', 'claude', 'opencode', 'codex']);
175
- });
176
- it('should handle empty state object', async () => {
177
- const result = await saveInstanceState(testAgentId, {});
178
- expect(result.initialized).toBe(false);
179
- expect(result.skills).toEqual([]);
180
- expect(result.mcpServers).toEqual([]);
181
- expect(result.enabledTools).toEqual(['acode', 'claude', 'opencode', 'codex']);
182
- expect(result.toolStatus).toEqual({});
183
- expect(result.skillEnabled).toBe(true);
184
- expect(result.mcpEnabled).toBe(true);
185
- });
186
- it('should handle null/undefined values', async () => {
187
- const partialState = {
188
- initialized: undefined,
189
- skills: null,
190
- mcpServers: undefined,
191
- enabledTools: null,
192
- toolStatus: null,
193
- skillEnabled: undefined,
194
- mcpEnabled: null,
195
- };
196
- const result = await saveInstanceState(testAgentId, partialState);
197
- expect(result.initialized).toBe(false);
198
- expect(result.skills).toEqual([]);
199
- expect(result.mcpServers).toEqual([]);
200
- expect(result.enabledTools).toEqual(['acode', 'claude', 'opencode', 'codex']);
201
- expect(result.toolStatus).toEqual({});
202
- expect(result.skillEnabled).toBe(true);
203
- expect(result.mcpEnabled).toBe(true);
204
- });
205
- it('should handle invalid toolStatus type', async () => {
206
- const partialState = {
207
- toolStatus: 'invalid',
208
- };
209
- const result = await saveInstanceState(testAgentId, partialState);
210
- expect(result.toolStatus).toEqual({});
211
- });
212
- it('should handle array as toolStatus', async () => {
213
- const partialState = {
214
- toolStatus: [],
215
- };
216
- const result = await saveInstanceState(testAgentId, partialState);
217
- expect(result.toolStatus).toEqual({});
218
- });
219
- it('should deduplicate and normalize enabledTools', async () => {
220
- const partialState = {
221
- enabledTools: ['CLAUDE', 'claude', 'OpenCode', ' gemini ', ''],
222
- };
223
- const result = await saveInstanceState(testAgentId, partialState);
224
- expect(result.enabledTools).toEqual(['claude', 'opencode', 'gemini']);
225
- });
226
- it('should overwrite existing state', async () => {
227
- // 第一次保存
228
- await saveInstanceState(testAgentId, { initialized: true });
229
- // 第二次保存
230
- const result = await saveInstanceState(testAgentId, { initialized: false });
231
- expect(result.initialized).toBe(false);
232
- // 验证文件内容
233
- const fileContent = await fs.readFile(getCurrentStateFilePath(), 'utf-8');
234
- const parsed = JSON.parse(fileContent);
235
- expect(parsed.initialized).toBe(false);
236
- });
237
- it('should update updatedAt timestamp on each save', async () => {
238
- const first = await saveInstanceState(testAgentId, { initialized: true });
239
- // 等待一小段时间确保时间戳不同
240
- await new Promise((resolve) => setTimeout(resolve, 10));
241
- const second = await saveInstanceState(testAgentId, { initialized: false });
242
- expect(second.updatedAt).not.toBe(first.updatedAt);
243
- });
244
- });
245
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mcp-launch-binding-queue.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-launch-binding-queue.test.d.ts","sourceRoot":"","sources":["../../src/services/mcp-launch-binding-queue.test.ts"],"names":[],"mappings":""}
@@ -1,181 +0,0 @@
1
- import { afterEach, describe, expect, it } from 'vitest';
2
- import { claimMcpLaunchBinding, clearMcpLaunchBindingQueues, enqueueMcpLaunchBinding, getMcpLaunchQueueSize, removeMcpLaunchBinding, } from './mcp-launch-binding-queue.js';
3
- describe('mcp launch binding queue', () => {
4
- afterEach(() => {
5
- clearMcpLaunchBindingQueues();
6
- });
7
- it('claims same-workspace same-server bindings by agent id', () => {
8
- const firstBinding = enqueueMcpLaunchBinding({
9
- agentId: 'agent-a',
10
- workspacePath: 'C:/repo/demo',
11
- serverUrl: 'ws://server-a:7380/ws/agent',
12
- runtimeAccessToken: 'token-a',
13
- userId: 'user-a',
14
- schedulerBaseUrl: 'http://server-a:7380',
15
- });
16
- const secondBinding = enqueueMcpLaunchBinding({
17
- agentId: 'agent-b',
18
- workspacePath: 'C:/repo/demo',
19
- serverUrl: 'ws://server-a:7380/ws/agent',
20
- runtimeAccessToken: 'token-b',
21
- userId: 'user-b',
22
- schedulerBaseUrl: 'http://server-a:7380',
23
- });
24
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(2);
25
- const first = claimMcpLaunchBinding({
26
- agentId: 'agent-a',
27
- workspacePath: 'C:/repo/demo',
28
- serverUrl: 'ws://server-a:7380/ws/agent',
29
- });
30
- const second = claimMcpLaunchBinding({
31
- agentId: 'agent-b',
32
- workspacePath: 'C:/repo/demo',
33
- serverUrl: 'ws://server-a:7380/ws/agent',
34
- });
35
- expect(first?.agentId).toBe('agent-a');
36
- expect(first?.runtimeAccessToken).toBe('token-a');
37
- expect(second?.agentId).toBe('agent-b');
38
- expect(second?.runtimeAccessToken).toBe('token-b');
39
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(0);
40
- });
41
- it('does not claim another agent token from the same workspace and server', () => {
42
- const binding = enqueueMcpLaunchBinding({
43
- agentId: 'agent-a',
44
- workspacePath: 'C:/repo/demo',
45
- serverUrl: 'ws://server:7380/ws/agent',
46
- });
47
- expect(claimMcpLaunchBinding({
48
- agentId: 'agent-b',
49
- workspacePath: 'C:/repo/demo',
50
- serverUrl: 'ws://server:7380/ws/agent',
51
- })).toBeNull();
52
- expect(binding?.agentId).toBe('agent-a');
53
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(1);
54
- });
55
- it('skips older same-workspace bindings when claiming a later agent token', () => {
56
- enqueueMcpLaunchBinding({
57
- agentId: 'agent-a',
58
- workspacePath: 'C:/repo/demo',
59
- serverUrl: 'ws://server:7380/ws/agent',
60
- runtimeAccessToken: 'token-a',
61
- });
62
- enqueueMcpLaunchBinding({
63
- agentId: 'agent-b',
64
- workspacePath: 'C:/repo/demo',
65
- serverUrl: 'ws://server:7380/ws/agent',
66
- runtimeAccessToken: 'token-b',
67
- });
68
- const claimed = claimMcpLaunchBinding({
69
- agentId: 'agent-b',
70
- workspacePath: 'C:/repo/demo',
71
- serverUrl: 'ws://server:7380/ws/agent',
72
- });
73
- expect(claimed?.agentId).toBe('agent-b');
74
- expect(claimed?.runtimeAccessToken).toBe('token-b');
75
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(1);
76
- });
77
- it('allows legacy claim without agent id only when one binding matches', () => {
78
- const binding = enqueueMcpLaunchBinding({
79
- agentId: 'agent-a',
80
- workspacePath: 'C:/repo/demo',
81
- serverUrl: 'ws://server:7380/ws/agent',
82
- });
83
- expect(claimMcpLaunchBinding({
84
- workspacePath: 'C:/repo/demo',
85
- serverUrl: 'ws://server:7380/ws/agent',
86
- })?.agentId).toBe('agent-a');
87
- expect(binding?.id).toBeTruthy();
88
- });
89
- it('rejects legacy claim without agent id when same-workspace same-server bindings are ambiguous', () => {
90
- enqueueMcpLaunchBinding({
91
- agentId: 'agent-a',
92
- workspacePath: 'C:/repo/demo',
93
- serverUrl: 'ws://server:7380/ws/agent',
94
- });
95
- enqueueMcpLaunchBinding({
96
- agentId: 'agent-b',
97
- workspacePath: 'C:/repo/demo',
98
- serverUrl: 'ws://server:7380/ws/agent',
99
- });
100
- expect(claimMcpLaunchBinding({
101
- workspacePath: 'C:/repo/demo',
102
- serverUrl: 'ws://server:7380/ws/agent',
103
- })).toBeNull();
104
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(2);
105
- });
106
- it('matches by server URL as well as workspace path', () => {
107
- const firstBinding = enqueueMcpLaunchBinding({ agentId: 'agent-a', workspacePath: 'C:/repo/demo', serverUrl: 'ws://server-a:7380/ws/agent' });
108
- const secondBinding = enqueueMcpLaunchBinding({ agentId: 'agent-b', workspacePath: 'C:/repo/demo', serverUrl: 'ws://server-b:7380/ws/agent' });
109
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/demo', serverUrl: 'ws://server-b:7380/ws/agent' })?.agentId).toBe('agent-b');
110
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/demo', serverUrl: 'ws://server-a:7380/ws/agent' })?.agentId).toBe('agent-a');
111
- });
112
- it('matches http scheduler URLs and websocket agent URLs by scheduler origin', () => {
113
- enqueueMcpLaunchBinding({ agentId: 'agent-a', workspacePath: 'C:/repo/demo', schedulerBaseUrl: 'http://server-a:7380' });
114
- expect(claimMcpLaunchBinding({
115
- workspacePath: 'C:/repo/demo',
116
- serverUrl: 'ws://server-a:7380/ws/agent',
117
- })?.agentId).toBe('agent-a');
118
- });
119
- it('repairs duplicated scheduler ports when enqueuing launch bindings', () => {
120
- const binding = enqueueMcpLaunchBinding({
121
- agentId: 'agent-a',
122
- workspacePath: 'C:/repo/demo',
123
- schedulerBaseUrl: 'http://127.0.0.1:8080:8080',
124
- });
125
- expect(binding?.serverUrl).toBe('http://127.0.0.1:8080');
126
- expect(binding?.schedulerBaseUrl).toBe('http://127.0.0.1:8080');
127
- expect(claimMcpLaunchBinding({
128
- workspacePath: 'C:/repo/demo',
129
- serverUrl: 'ws://127.0.0.1:8080/ws/agent',
130
- })?.schedulerBaseUrl).toBe('http://127.0.0.1:8080');
131
- });
132
- it('matches localhost and 127.0.0.1 launch binding scheduler aliases', () => {
133
- enqueueMcpLaunchBinding({
134
- agentId: 'agent-a',
135
- workspacePath: 'C:/repo/demo',
136
- serverUrl: 'ws://localhost:8080/ws/agent',
137
- });
138
- expect(claimMcpLaunchBinding({
139
- workspacePath: 'C:/repo/demo',
140
- serverUrl: 'ws://127.0.0.1:8080/ws/agent',
141
- })?.agentId).toBe('agent-a');
142
- });
143
- it('falls back to the only same-workspace binding when scheduler URLs differ', () => {
144
- enqueueMcpLaunchBinding({
145
- agentId: 'agent-a',
146
- workspacePath: 'C:/repo/demo',
147
- serverUrl: 'ws://127.0.0.1:7380/ws/agent',
148
- });
149
- expect(claimMcpLaunchBinding({
150
- workspacePath: 'C:/repo/demo',
151
- serverUrl: 'ws://101.42.200.84:7380/ws/agent',
152
- })?.agentId).toBe('agent-a');
153
- });
154
- it('does not mix different workspace paths', () => {
155
- const firstBinding = enqueueMcpLaunchBinding({ agentId: 'agent-a', workspacePath: 'C:/repo/a', serverUrl: 'ws://server:7380/ws/agent' });
156
- const secondBinding = enqueueMcpLaunchBinding({ agentId: 'agent-b', workspacePath: 'C:/repo/b', serverUrl: 'ws://server:7380/ws/agent' });
157
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/b', serverUrl: 'ws://server:7380/ws/agent' })?.agentId).toBe('agent-b');
158
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/a', serverUrl: 'ws://server:7380/ws/agent' })?.agentId).toBe('agent-a');
159
- });
160
- it('removes a stale launch binding by id after a failed start', () => {
161
- const binding = enqueueMcpLaunchBinding({
162
- agentId: 'agent-a',
163
- workspacePath: 'C:/repo/demo',
164
- serverUrl: 'ws://server:7380/ws/agent',
165
- });
166
- expect(binding).not.toBeNull();
167
- expect(removeMcpLaunchBinding(binding?.id || '')).toBe(true);
168
- expect(claimMcpLaunchBinding({
169
- agentId: 'agent-a',
170
- workspacePath: 'C:/repo/demo',
171
- serverUrl: 'ws://server:7380/ws/agent',
172
- })).toBeNull();
173
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(0);
174
- });
175
- it('returns null for missing or invalid workspaces', () => {
176
- expect(enqueueMcpLaunchBinding({ agentId: '', workspacePath: 'C:/repo/demo' })).toBeNull();
177
- expect(enqueueMcpLaunchBinding({ agentId: 'agent-a', workspacePath: '' })).toBeNull();
178
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/missing', serverUrl: 'ws://server:7380/ws/agent' })).toBeNull();
179
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/demo' })).toBeNull();
180
- });
181
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=runtime-binding.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-binding.test.d.ts","sourceRoot":"","sources":["../../src/services/runtime-binding.test.ts"],"names":[],"mappings":""}
@@ -1,78 +0,0 @@
1
- import { mkdirSync, mkdtempSync, rmSync } from "node:fs";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { afterEach, describe, expect, it } from "vitest";
5
- import { buildRuntimeTokenKey, clearScopedRuntimeAccessToken, getRuntimeAccessToken, getScopedRuntimeAccessToken, normalizeSchedulerBaseUrl, saveScopedRuntimeAccessToken, } from "./runtime-binding.js";
6
- const originalEnv = { ...process.env };
7
- const tempRoots = [];
8
- function useRuntimeHome() {
9
- const runtimeHome = mkdtempSync(path.join(os.tmpdir(), "aws-runtime-binding-"));
10
- tempRoots.push(runtimeHome);
11
- mkdirSync(runtimeHome, { recursive: true });
12
- process.env.AWS_RUNTIME_HOME_DIR = runtimeHome;
13
- process.env.HOME = runtimeHome;
14
- process.env.USERPROFILE = runtimeHome;
15
- return runtimeHome;
16
- }
17
- afterEach(() => {
18
- process.env = { ...originalEnv };
19
- for (const root of tempRoots.splice(0)) {
20
- rmSync(root, { recursive: true, force: true });
21
- }
22
- });
23
- describe('runtime binding scheduler URL normalization', () => {
24
- it('repairs duplicated scheduler ports', () => {
25
- expect(normalizeSchedulerBaseUrl('http://127.0.0.1:8080:8080')).toBe('http://127.0.0.1:8080');
26
- });
27
- it('normalizes websocket agent URLs to scheduler HTTP origins', () => {
28
- expect(normalizeSchedulerBaseUrl('ws://127.0.0.1:8080/ws/agent')).toBe('http://127.0.0.1:8080');
29
- expect(normalizeSchedulerBaseUrl('wss://example.com/ws/agent')).toBe('https://example.com');
30
- });
31
- it('canonicalizes loopback scheduler aliases to one origin', () => {
32
- expect(normalizeSchedulerBaseUrl('ws://localhost:8080/ws/agent')).toBe('http://127.0.0.1:8080');
33
- expect(normalizeSchedulerBaseUrl('http://localhost:8080')).toBe('http://127.0.0.1:8080');
34
- });
35
- it("returns paired binding token only when requested scheduler URL matches", async () => {
36
- useRuntimeHome();
37
- const { saveRuntimeBinding } = await import("./runtime-binding.js");
38
- saveRuntimeBinding({
39
- accessToken: "paired-runtime-token-123456",
40
- instanceId: "bridge-1",
41
- userId: "user-a",
42
- schedulerBaseUrl: "http://scheduler.local:7380",
43
- });
44
- expect(getRuntimeAccessToken(undefined, "http://scheduler.local:7380/api")).toBe("paired-runtime-token-123456");
45
- expect(getRuntimeAccessToken(undefined, "http://scheduler.local:8080")).toBeUndefined();
46
- });
47
- it("scopes runtime tokens by user and full scheduler origin", () => {
48
- useRuntimeHome();
49
- const key7380 = saveScopedRuntimeAccessToken({
50
- userId: "user-a",
51
- serverBaseUrl: "http://scheduler.local:7380",
52
- accessToken: "runtime-token-7380-123456",
53
- });
54
- const key8080 = saveScopedRuntimeAccessToken({
55
- userId: "user-a",
56
- serverBaseUrl: "http://scheduler.local:8080",
57
- accessToken: "runtime-token-8080-123456",
58
- });
59
- expect(key7380).not.toBe(key8080);
60
- expect(buildRuntimeTokenKey("user-a", "http://scheduler.local:7380/api")).toBe(key7380);
61
- expect(getScopedRuntimeAccessToken("user-a", "http://scheduler.local:7380")).toBe("runtime-token-7380-123456");
62
- expect(getScopedRuntimeAccessToken("user-a", "http://scheduler.local:8080")).toBe("runtime-token-8080-123456");
63
- expect(clearScopedRuntimeAccessToken("user-a", "http://scheduler.local:7380")).toBe(true);
64
- expect(getScopedRuntimeAccessToken("user-a", "http://scheduler.local:7380")).toBeUndefined();
65
- expect(getScopedRuntimeAccessToken("user-a", "http://scheduler.local:8080")).toBe("runtime-token-8080-123456");
66
- });
67
- it("uses the same scoped runtime token for localhost and 127.0.0.1", () => {
68
- useRuntimeHome();
69
- const key = saveScopedRuntimeAccessToken({
70
- userId: "user-a",
71
- serverBaseUrl: "http://localhost:8080",
72
- accessToken: "runtime-token-loopback-123456",
73
- });
74
- expect(buildRuntimeTokenKey("user-a", "ws://127.0.0.1:8080/ws/agent")).toBe(key);
75
- expect(getScopedRuntimeAccessToken("user-a", "http://127.0.0.1:8080")).toBe("runtime-token-loopback-123456");
76
- expect(getRuntimeAccessToken("user-a", "ws://localhost:8080/ws/agent")).toBe("runtime-token-loopback-123456");
77
- });
78
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=runtime-lifecycle-policy.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-lifecycle-policy.test.d.ts","sourceRoot":"","sources":["../../src/services/runtime-lifecycle-policy.test.ts"],"names":[],"mappings":""}
@@ -1,41 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { buildGracefulShutdownPlan, shouldAutoCleanOrphanProcesses, shouldCleanupPersistedSessionsOnStartup, } from "./runtime-lifecycle-policy.js";
3
- describe("runtime lifecycle policy", () => {
4
- it("keeps agent processes and persisted state during scheduler restart preservation", () => {
5
- expect(buildGracefulShutdownPlan(true)).toEqual({
6
- terminateSdkSessions: false,
7
- closePtySessions: false,
8
- terminateResidualProcesses: false,
9
- unregisterInstance: false,
10
- clearPersistedSessions: false,
11
- });
12
- });
13
- it("cleans runtime state for explicit bridge shutdown", () => {
14
- expect(buildGracefulShutdownPlan(false)).toEqual({
15
- terminateSdkSessions: true,
16
- closePtySessions: true,
17
- terminateResidualProcesses: true,
18
- unregisterInstance: true,
19
- clearPersistedSessions: true,
20
- });
21
- });
22
- it("does not destructively clean persisted sessions on startup unless explicitly enabled", () => {
23
- expect(shouldCleanupPersistedSessionsOnStartup(false, {})).toBe(false);
24
- expect(shouldCleanupPersistedSessionsOnStartup(false, {
25
- AWS_BRIDGE_CLEAN_ORPHANS_ON_STARTUP: "true",
26
- })).toBe(true);
27
- expect(shouldCleanupPersistedSessionsOnStartup(true, {
28
- AWS_BRIDGE_CLEAN_ORPHANS_ON_STARTUP: "true",
29
- })).toBe(false);
30
- });
31
- it("does not let orphan monitor terminate preserved sessions unless cleanup is explicit", () => {
32
- expect(shouldAutoCleanOrphanProcesses({})).toBe(false);
33
- expect(shouldAutoCleanOrphanProcesses({
34
- AWS_ORPHAN_AUTO_CLEAN_MODE: "auto",
35
- })).toBe(false);
36
- expect(shouldAutoCleanOrphanProcesses({
37
- AWS_ORPHAN_AUTO_CLEAN_MODE: "auto",
38
- AWS_BRIDGE_CLEAN_ORPHANS_ON_STARTUP: "true",
39
- })).toBe(true);
40
- });
41
- });
@@ -1,5 +0,0 @@
1
- /**
2
- * Session Output 服务单元测试
3
- */
4
- export {};
5
- //# sourceMappingURL=session-output.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-output.test.d.ts","sourceRoot":"","sources":["../../src/services/session-output.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}