aws-runtime-bridge 1.0.0

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 (462) hide show
  1. package/README.md +56 -0
  2. package/dist/adapter/AdapterRegistry.d.ts +53 -0
  3. package/dist/adapter/AdapterRegistry.d.ts.map +1 -0
  4. package/dist/adapter/AdapterRegistry.js +100 -0
  5. package/dist/adapter/AdapterRegistry.test.d.ts +5 -0
  6. package/dist/adapter/AdapterRegistry.test.d.ts.map +1 -0
  7. package/dist/adapter/AdapterRegistry.test.js +109 -0
  8. package/dist/adapter/ClaudeSdkAdapter.d.ts +120 -0
  9. package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -0
  10. package/dist/adapter/ClaudeSdkAdapter.js +1140 -0
  11. package/dist/adapter/ClaudeSdkAdapter.test.d.ts +2 -0
  12. package/dist/adapter/ClaudeSdkAdapter.test.d.ts.map +1 -0
  13. package/dist/adapter/ClaudeSdkAdapter.test.js +95 -0
  14. package/dist/adapter/CodexSdkAdapter.d.ts +48 -0
  15. package/dist/adapter/CodexSdkAdapter.d.ts.map +1 -0
  16. package/dist/adapter/CodexSdkAdapter.js +750 -0
  17. package/dist/adapter/CodexSdkAdapter.test.d.ts +2 -0
  18. package/dist/adapter/CodexSdkAdapter.test.d.ts.map +1 -0
  19. package/dist/adapter/CodexSdkAdapter.test.js +245 -0
  20. package/dist/adapter/OpencodeSdkAdapter.d.ts +45 -0
  21. package/dist/adapter/OpencodeSdkAdapter.d.ts.map +1 -0
  22. package/dist/adapter/OpencodeSdkAdapter.js +622 -0
  23. package/dist/adapter/OpencodeSdkAdapter.test.d.ts +2 -0
  24. package/dist/adapter/OpencodeSdkAdapter.test.d.ts.map +1 -0
  25. package/dist/adapter/OpencodeSdkAdapter.test.js +14 -0
  26. package/dist/adapter/SdkProviderSpi.d.ts +15 -0
  27. package/dist/adapter/SdkProviderSpi.d.ts.map +1 -0
  28. package/dist/adapter/SdkProviderSpi.js +46 -0
  29. package/dist/adapter/adapter.test.d.ts +5 -0
  30. package/dist/adapter/adapter.test.d.ts.map +1 -0
  31. package/dist/adapter/adapter.test.js +180 -0
  32. package/dist/adapter/index.d.ts +11 -0
  33. package/dist/adapter/index.d.ts.map +1 -0
  34. package/dist/adapter/index.js +10 -0
  35. package/dist/adapter/types.d.ts +278 -0
  36. package/dist/adapter/types.d.ts.map +1 -0
  37. package/dist/adapter/types.js +278 -0
  38. package/dist/adapter/types.test.d.ts +2 -0
  39. package/dist/adapter/types.test.d.ts.map +1 -0
  40. package/dist/adapter/types.test.js +59 -0
  41. package/dist/adapters/cc-switch/common.d.ts +52 -0
  42. package/dist/adapters/cc-switch/common.d.ts.map +1 -0
  43. package/dist/adapters/cc-switch/common.js +61 -0
  44. package/dist/adapters/cc-switch/index.d.ts +25 -0
  45. package/dist/adapters/cc-switch/index.d.ts.map +1 -0
  46. package/dist/adapters/cc-switch/index.js +51 -0
  47. package/dist/adapters/cc-switch/mcp-claude.d.ts +15 -0
  48. package/dist/adapters/cc-switch/mcp-claude.d.ts.map +1 -0
  49. package/dist/adapters/cc-switch/mcp-claude.js +88 -0
  50. package/dist/adapters/cc-switch/mcp-claudecode.d.ts +15 -0
  51. package/dist/adapters/cc-switch/mcp-claudecode.d.ts.map +1 -0
  52. package/dist/adapters/cc-switch/mcp-claudecode.js +77 -0
  53. package/dist/adapters/cc-switch/mcp-codex.d.ts +17 -0
  54. package/dist/adapters/cc-switch/mcp-codex.d.ts.map +1 -0
  55. package/dist/adapters/cc-switch/mcp-codex.js +248 -0
  56. package/dist/adapters/cc-switch/mcp-codex.test.d.ts +2 -0
  57. package/dist/adapters/cc-switch/mcp-codex.test.d.ts.map +1 -0
  58. package/dist/adapters/cc-switch/mcp-codex.test.js +125 -0
  59. package/dist/adapters/cc-switch/mcp-opencode.d.ts +23 -0
  60. package/dist/adapters/cc-switch/mcp-opencode.d.ts.map +1 -0
  61. package/dist/adapters/cc-switch/mcp-opencode.js +100 -0
  62. package/dist/adapters/cc-switch/mcp-placeholder.d.ts +14 -0
  63. package/dist/adapters/cc-switch/mcp-placeholder.d.ts.map +1 -0
  64. package/dist/adapters/cc-switch/mcp-placeholder.js +19 -0
  65. package/dist/adapters/cc-switch/skill-claude.d.ts +15 -0
  66. package/dist/adapters/cc-switch/skill-claude.d.ts.map +1 -0
  67. package/dist/adapters/cc-switch/skill-claude.js +91 -0
  68. package/dist/adapters/cc-switch/skill-claudecode.d.ts +15 -0
  69. package/dist/adapters/cc-switch/skill-claudecode.d.ts.map +1 -0
  70. package/dist/adapters/cc-switch/skill-claudecode.js +91 -0
  71. package/dist/adapters/cc-switch/skill-opencode.d.ts +15 -0
  72. package/dist/adapters/cc-switch/skill-opencode.d.ts.map +1 -0
  73. package/dist/adapters/cc-switch/skill-opencode.js +95 -0
  74. package/dist/adapters/cc-switch/skill-placeholder.d.ts +14 -0
  75. package/dist/adapters/cc-switch/skill-placeholder.d.ts.map +1 -0
  76. package/dist/adapters/cc-switch/skill-placeholder.js +19 -0
  77. package/dist/config.d.ts +76 -0
  78. package/dist/config.d.ts.map +1 -0
  79. package/dist/config.js +109 -0
  80. package/dist/index.d.ts +8 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +503 -0
  83. package/dist/middleware/auth.d.ts +12 -0
  84. package/dist/middleware/auth.d.ts.map +1 -0
  85. package/dist/middleware/auth.js +18 -0
  86. package/dist/routes/ai-sources.d.ts +2 -0
  87. package/dist/routes/ai-sources.d.ts.map +1 -0
  88. package/dist/routes/ai-sources.js +136 -0
  89. package/dist/routes/ai-sources.test.d.ts +2 -0
  90. package/dist/routes/ai-sources.test.d.ts.map +1 -0
  91. package/dist/routes/ai-sources.test.js +148 -0
  92. package/dist/routes/aws-mcp.d.ts +10 -0
  93. package/dist/routes/aws-mcp.d.ts.map +1 -0
  94. package/dist/routes/aws-mcp.js +74 -0
  95. package/dist/routes/aws-mcp.test.d.ts +2 -0
  96. package/dist/routes/aws-mcp.test.d.ts.map +1 -0
  97. package/dist/routes/aws-mcp.test.js +42 -0
  98. package/dist/routes/file-browser.d.ts +7 -0
  99. package/dist/routes/file-browser.d.ts.map +1 -0
  100. package/dist/routes/file-browser.js +227 -0
  101. package/dist/routes/file-browser.test.d.ts +5 -0
  102. package/dist/routes/file-browser.test.d.ts.map +1 -0
  103. package/dist/routes/file-browser.test.js +88 -0
  104. package/dist/routes/git.d.ts +7 -0
  105. package/dist/routes/git.d.ts.map +1 -0
  106. package/dist/routes/git.js +470 -0
  107. package/dist/routes/git.test.d.ts +5 -0
  108. package/dist/routes/git.test.d.ts.map +1 -0
  109. package/dist/routes/git.test.js +87 -0
  110. package/dist/routes/instance.d.ts +3 -0
  111. package/dist/routes/instance.d.ts.map +1 -0
  112. package/dist/routes/instance.js +170 -0
  113. package/dist/routes/instance.test.d.ts +5 -0
  114. package/dist/routes/instance.test.d.ts.map +1 -0
  115. package/dist/routes/instance.test.js +64 -0
  116. package/dist/routes/mcp.d.ts +2 -0
  117. package/dist/routes/mcp.d.ts.map +1 -0
  118. package/dist/routes/mcp.js +171 -0
  119. package/dist/routes/mcp.test.d.ts +5 -0
  120. package/dist/routes/mcp.test.d.ts.map +1 -0
  121. package/dist/routes/mcp.test.js +84 -0
  122. package/dist/routes/memory.d.ts +13 -0
  123. package/dist/routes/memory.d.ts.map +1 -0
  124. package/dist/routes/memory.js +429 -0
  125. package/dist/routes/processes.d.ts +7 -0
  126. package/dist/routes/processes.d.ts.map +1 -0
  127. package/dist/routes/processes.js +245 -0
  128. package/dist/routes/properties.d.ts +7 -0
  129. package/dist/routes/properties.d.ts.map +1 -0
  130. package/dist/routes/properties.js +72 -0
  131. package/dist/routes/properties.test.d.ts +5 -0
  132. package/dist/routes/properties.test.d.ts.map +1 -0
  133. package/dist/routes/properties.test.js +72 -0
  134. package/dist/routes/sessions.d.ts +7 -0
  135. package/dist/routes/sessions.d.ts.map +1 -0
  136. package/dist/routes/sessions.js +808 -0
  137. package/dist/routes/sessions.test.d.ts +5 -0
  138. package/dist/routes/sessions.test.d.ts.map +1 -0
  139. package/dist/routes/sessions.test.js +70 -0
  140. package/dist/routes/skills.d.ts +2 -0
  141. package/dist/routes/skills.d.ts.map +1 -0
  142. package/dist/routes/skills.js +162 -0
  143. package/dist/routes/skills.test.d.ts +5 -0
  144. package/dist/routes/skills.test.d.ts.map +1 -0
  145. package/dist/routes/skills.test.js +42 -0
  146. package/dist/routes/terminal.d.ts +18 -0
  147. package/dist/routes/terminal.d.ts.map +1 -0
  148. package/dist/routes/terminal.js +663 -0
  149. package/dist/routes/terminal.test.d.ts +2 -0
  150. package/dist/routes/terminal.test.d.ts.map +1 -0
  151. package/dist/routes/terminal.test.js +91 -0
  152. package/dist/routes/yml.d.ts +7 -0
  153. package/dist/routes/yml.d.ts.map +1 -0
  154. package/dist/routes/yml.js +223 -0
  155. package/dist/routes/yml.test.d.ts +5 -0
  156. package/dist/routes/yml.test.d.ts.map +1 -0
  157. package/dist/routes/yml.test.js +58 -0
  158. package/dist/services/agent-process-manager.d.ts +241 -0
  159. package/dist/services/agent-process-manager.d.ts.map +1 -0
  160. package/dist/services/agent-process-manager.js +762 -0
  161. package/dist/services/auto-register.d.ts +94 -0
  162. package/dist/services/auto-register.d.ts.map +1 -0
  163. package/dist/services/auto-register.js +510 -0
  164. package/dist/services/aws-client-agent-mcp.d.ts +26 -0
  165. package/dist/services/aws-client-agent-mcp.d.ts.map +1 -0
  166. package/dist/services/aws-client-agent-mcp.js +142 -0
  167. package/dist/services/aws-client-agent-mcp.test.d.ts +2 -0
  168. package/dist/services/aws-client-agent-mcp.test.d.ts.map +1 -0
  169. package/dist/services/aws-client-agent-mcp.test.js +89 -0
  170. package/dist/services/aws-mcp-http.d.ts +11 -0
  171. package/dist/services/aws-mcp-http.d.ts.map +1 -0
  172. package/dist/services/aws-mcp-http.js +225 -0
  173. package/dist/services/aws-mcp-http.test.d.ts +2 -0
  174. package/dist/services/aws-mcp-http.test.d.ts.map +1 -0
  175. package/dist/services/aws-mcp-http.test.js +27 -0
  176. package/dist/services/cc-switch-sdk.d.ts +18 -0
  177. package/dist/services/cc-switch-sdk.d.ts.map +1 -0
  178. package/dist/services/cc-switch-sdk.js +117 -0
  179. package/dist/services/easytier-manager.d.ts +106 -0
  180. package/dist/services/easytier-manager.d.ts.map +1 -0
  181. package/dist/services/easytier-manager.js +331 -0
  182. package/dist/services/easytier-manager.test.d.ts +5 -0
  183. package/dist/services/easytier-manager.test.d.ts.map +1 -0
  184. package/dist/services/easytier-manager.test.js +98 -0
  185. package/dist/services/instance-init-service.d.ts +35 -0
  186. package/dist/services/instance-init-service.d.ts.map +1 -0
  187. package/dist/services/instance-init-service.js +190 -0
  188. package/dist/services/instance-service.d.ts +88 -0
  189. package/dist/services/instance-service.d.ts.map +1 -0
  190. package/dist/services/instance-service.js +236 -0
  191. package/dist/services/instance-state.d.ts +36 -0
  192. package/dist/services/instance-state.d.ts.map +1 -0
  193. package/dist/services/instance-state.js +79 -0
  194. package/dist/services/instance-state.test.d.ts +2 -0
  195. package/dist/services/instance-state.test.d.ts.map +1 -0
  196. package/dist/services/instance-state.test.js +213 -0
  197. package/dist/services/memory-service.d.ts +195 -0
  198. package/dist/services/memory-service.d.ts.map +1 -0
  199. package/dist/services/memory-service.js +650 -0
  200. package/dist/services/orphan-monitor.d.ts +94 -0
  201. package/dist/services/orphan-monitor.d.ts.map +1 -0
  202. package/dist/services/orphan-monitor.js +321 -0
  203. package/dist/services/process-detector.d.ts +175 -0
  204. package/dist/services/process-detector.d.ts.map +1 -0
  205. package/dist/services/process-detector.js +992 -0
  206. package/dist/services/process-registry.d.ts +208 -0
  207. package/dist/services/process-registry.d.ts.map +1 -0
  208. package/dist/services/process-registry.js +354 -0
  209. package/dist/services/session-lookup.d.ts +20 -0
  210. package/dist/services/session-lookup.d.ts.map +1 -0
  211. package/dist/services/session-lookup.js +43 -0
  212. package/dist/services/session-output.d.ts +56 -0
  213. package/dist/services/session-output.d.ts.map +1 -0
  214. package/dist/services/session-output.js +122 -0
  215. package/dist/services/session-output.test.d.ts +5 -0
  216. package/dist/services/session-output.test.d.ts.map +1 -0
  217. package/dist/services/session-output.test.js +68 -0
  218. package/dist/services/terminal-persistence.d.ts +51 -0
  219. package/dist/services/terminal-persistence.d.ts.map +1 -0
  220. package/dist/services/terminal-persistence.js +125 -0
  221. package/dist/services/terminal-persistence.test.d.ts +5 -0
  222. package/dist/services/terminal-persistence.test.d.ts.map +1 -0
  223. package/dist/services/terminal-persistence.test.js +88 -0
  224. package/dist/services/tool-installer.d.ts +15 -0
  225. package/dist/services/tool-installer.d.ts.map +1 -0
  226. package/dist/services/tool-installer.js +297 -0
  227. package/dist/services/tool-installer.test.d.ts +2 -0
  228. package/dist/services/tool-installer.test.d.ts.map +1 -0
  229. package/dist/services/tool-installer.test.js +102 -0
  230. package/dist/services/user-api-key-service.d.ts +28 -0
  231. package/dist/services/user-api-key-service.d.ts.map +1 -0
  232. package/dist/services/user-api-key-service.js +75 -0
  233. package/dist/services/workspace-files.d.ts +85 -0
  234. package/dist/services/workspace-files.d.ts.map +1 -0
  235. package/dist/services/workspace-files.js +224 -0
  236. package/dist/services/workspace-files.test.d.ts +2 -0
  237. package/dist/services/workspace-files.test.d.ts.map +1 -0
  238. package/dist/services/workspace-files.test.js +117 -0
  239. package/dist/types.d.ts +233 -0
  240. package/dist/types.d.ts.map +1 -0
  241. package/dist/types.js +1 -0
  242. package/dist/utils/file-utils.d.ts +13 -0
  243. package/dist/utils/file-utils.d.ts.map +1 -0
  244. package/dist/utils/file-utils.js +140 -0
  245. package/dist/utils/file-utils.test.d.ts +2 -0
  246. package/dist/utils/file-utils.test.d.ts.map +1 -0
  247. package/dist/utils/file-utils.test.js +201 -0
  248. package/dist/utils/logger.d.ts +39 -0
  249. package/dist/utils/logger.d.ts.map +1 -0
  250. package/dist/utils/logger.js +110 -0
  251. package/dist/utils/logger.test.d.ts +2 -0
  252. package/dist/utils/logger.test.d.ts.map +1 -0
  253. package/dist/utils/logger.test.js +93 -0
  254. package/dist/utils/mcp-utils.d.ts +73 -0
  255. package/dist/utils/mcp-utils.d.ts.map +1 -0
  256. package/dist/utils/mcp-utils.js +165 -0
  257. package/dist/utils/path-utils.d.ts +24 -0
  258. package/dist/utils/path-utils.d.ts.map +1 -0
  259. package/dist/utils/path-utils.js +44 -0
  260. package/dist/utils/validation.d.ts +23 -0
  261. package/dist/utils/validation.d.ts.map +1 -0
  262. package/dist/utils/validation.js +53 -0
  263. package/dist/utils/validation.test.d.ts +2 -0
  264. package/dist/utils/validation.test.d.ts.map +1 -0
  265. package/dist/utils/validation.test.js +88 -0
  266. package/dist/utils/yaml-utils.d.ts +73 -0
  267. package/dist/utils/yaml-utils.d.ts.map +1 -0
  268. package/dist/utils/yaml-utils.js +309 -0
  269. package/dist/utils/yaml-utils.test.d.ts +2 -0
  270. package/dist/utils/yaml-utils.test.d.ts.map +1 -0
  271. package/dist/utils/yaml-utils.test.js +363 -0
  272. package/package/aws-client-agent-mcp/README.md +288 -0
  273. package/package/aws-client-agent-mcp/dist/activity-reporter.d.ts +150 -0
  274. package/package/aws-client-agent-mcp/dist/activity-reporter.d.ts.map +1 -0
  275. package/package/aws-client-agent-mcp/dist/activity-reporter.js +353 -0
  276. package/package/aws-client-agent-mcp/dist/activity-reporter.js.map +1 -0
  277. package/package/aws-client-agent-mcp/dist/activity-reporter.test.d.ts +2 -0
  278. package/package/aws-client-agent-mcp/dist/activity-reporter.test.d.ts.map +1 -0
  279. package/package/aws-client-agent-mcp/dist/activity-reporter.test.js +75 -0
  280. package/package/aws-client-agent-mcp/dist/activity-reporter.test.js.map +1 -0
  281. package/package/aws-client-agent-mcp/dist/activity-types.d.ts +96 -0
  282. package/package/aws-client-agent-mcp/dist/activity-types.d.ts.map +1 -0
  283. package/package/aws-client-agent-mcp/dist/activity-types.js +141 -0
  284. package/package/aws-client-agent-mcp/dist/activity-types.js.map +1 -0
  285. package/package/aws-client-agent-mcp/dist/agent-client.d.ts +165 -0
  286. package/package/aws-client-agent-mcp/dist/agent-client.d.ts.map +1 -0
  287. package/package/aws-client-agent-mcp/dist/agent-client.js +588 -0
  288. package/package/aws-client-agent-mcp/dist/agent-client.js.map +1 -0
  289. package/package/aws-client-agent-mcp/dist/agent-client.test.d.ts +2 -0
  290. package/package/aws-client-agent-mcp/dist/agent-client.test.d.ts.map +1 -0
  291. package/package/aws-client-agent-mcp/dist/agent-client.test.js +534 -0
  292. package/package/aws-client-agent-mcp/dist/agent-client.test.js.map +1 -0
  293. package/package/aws-client-agent-mcp/dist/config.d.ts +21 -0
  294. package/package/aws-client-agent-mcp/dist/config.d.ts.map +1 -0
  295. package/package/aws-client-agent-mcp/dist/config.js +67 -0
  296. package/package/aws-client-agent-mcp/dist/config.js.map +1 -0
  297. package/package/aws-client-agent-mcp/dist/config.test.d.ts +2 -0
  298. package/package/aws-client-agent-mcp/dist/config.test.d.ts.map +1 -0
  299. package/package/aws-client-agent-mcp/dist/config.test.js +139 -0
  300. package/package/aws-client-agent-mcp/dist/config.test.js.map +1 -0
  301. package/package/aws-client-agent-mcp/dist/constants.d.ts +15 -0
  302. package/package/aws-client-agent-mcp/dist/constants.d.ts.map +1 -0
  303. package/package/aws-client-agent-mcp/dist/constants.js +19 -0
  304. package/package/aws-client-agent-mcp/dist/constants.js.map +1 -0
  305. package/package/aws-client-agent-mcp/dist/http-client.d.ts +27 -0
  306. package/package/aws-client-agent-mcp/dist/http-client.d.ts.map +1 -0
  307. package/package/aws-client-agent-mcp/dist/http-client.js +65 -0
  308. package/package/aws-client-agent-mcp/dist/http-client.js.map +1 -0
  309. package/package/aws-client-agent-mcp/dist/http-client.test.d.ts +2 -0
  310. package/package/aws-client-agent-mcp/dist/http-client.test.d.ts.map +1 -0
  311. package/package/aws-client-agent-mcp/dist/http-client.test.js +228 -0
  312. package/package/aws-client-agent-mcp/dist/http-client.test.js.map +1 -0
  313. package/package/aws-client-agent-mcp/dist/index.d.ts +14 -0
  314. package/package/aws-client-agent-mcp/dist/index.d.ts.map +1 -0
  315. package/package/aws-client-agent-mcp/dist/index.js +30 -0
  316. package/package/aws-client-agent-mcp/dist/index.js.map +1 -0
  317. package/package/aws-client-agent-mcp/dist/logger.d.ts +7 -0
  318. package/package/aws-client-agent-mcp/dist/logger.d.ts.map +1 -0
  319. package/package/aws-client-agent-mcp/dist/logger.js +19 -0
  320. package/package/aws-client-agent-mcp/dist/logger.js.map +1 -0
  321. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +77 -0
  322. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -0
  323. package/package/aws-client-agent-mcp/dist/mcp-server.js +427 -0
  324. package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -0
  325. package/package/aws-client-agent-mcp/dist/mcp-server.test.d.ts +2 -0
  326. package/package/aws-client-agent-mcp/dist/mcp-server.test.d.ts.map +1 -0
  327. package/package/aws-client-agent-mcp/dist/mcp-server.test.js +624 -0
  328. package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -0
  329. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +78 -0
  330. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -0
  331. package/package/aws-client-agent-mcp/dist/mcp-tools.js +420 -0
  332. package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -0
  333. package/package/aws-client-agent-mcp/dist/memory-store.d.ts +61 -0
  334. package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -0
  335. package/package/aws-client-agent-mcp/dist/memory-store.js +268 -0
  336. package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -0
  337. package/package/aws-client-agent-mcp/dist/memory-store.test.d.ts +2 -0
  338. package/package/aws-client-agent-mcp/dist/memory-store.test.d.ts.map +1 -0
  339. package/package/aws-client-agent-mcp/dist/memory-store.test.js +164 -0
  340. package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +1 -0
  341. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +74 -0
  342. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +1 -0
  343. package/package/aws-client-agent-mcp/dist/message-buffer.js +159 -0
  344. package/package/aws-client-agent-mcp/dist/message-buffer.js.map +1 -0
  345. package/package/aws-client-agent-mcp/dist/message-buffer.test.d.ts +2 -0
  346. package/package/aws-client-agent-mcp/dist/message-buffer.test.d.ts.map +1 -0
  347. package/package/aws-client-agent-mcp/dist/message-buffer.test.js +44 -0
  348. package/package/aws-client-agent-mcp/dist/message-buffer.test.js.map +1 -0
  349. package/package/aws-client-agent-mcp/dist/messageContent.d.ts +53 -0
  350. package/package/aws-client-agent-mcp/dist/messageContent.d.ts.map +1 -0
  351. package/package/aws-client-agent-mcp/dist/messageContent.js +125 -0
  352. package/package/aws-client-agent-mcp/dist/messageContent.js.map +1 -0
  353. package/package/aws-client-agent-mcp/dist/orchestration-tools.d.ts +19 -0
  354. package/package/aws-client-agent-mcp/dist/orchestration-tools.d.ts.map +1 -0
  355. package/package/aws-client-agent-mcp/dist/orchestration-tools.js +317 -0
  356. package/package/aws-client-agent-mcp/dist/orchestration-tools.js.map +1 -0
  357. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts +66 -0
  358. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +1 -0
  359. package/package/aws-client-agent-mcp/dist/status-reporter.js +220 -0
  360. package/package/aws-client-agent-mcp/dist/status-reporter.js.map +1 -0
  361. package/package/aws-client-agent-mcp/dist/status-reporter.test.d.ts +2 -0
  362. package/package/aws-client-agent-mcp/dist/status-reporter.test.d.ts.map +1 -0
  363. package/package/aws-client-agent-mcp/dist/status-reporter.test.js +45 -0
  364. package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +1 -0
  365. package/package/aws-client-agent-mcp/dist/types.d.ts +286 -0
  366. package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -0
  367. package/package/aws-client-agent-mcp/dist/types.js +9 -0
  368. package/package/aws-client-agent-mcp/dist/types.js.map +1 -0
  369. package/package/aws-client-agent-mcp/dist/user-config-reader.d.ts +63 -0
  370. package/package/aws-client-agent-mcp/dist/user-config-reader.d.ts.map +1 -0
  371. package/package/aws-client-agent-mcp/dist/user-config-reader.js +161 -0
  372. package/package/aws-client-agent-mcp/dist/user-config-reader.js.map +1 -0
  373. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +94 -0
  374. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts.map +1 -0
  375. package/package/aws-client-agent-mcp/dist/websocket-client.js +316 -0
  376. package/package/aws-client-agent-mcp/dist/websocket-client.js.map +1 -0
  377. package/package/aws-client-agent-mcp/dist/websocket-client.test.d.ts +2 -0
  378. package/package/aws-client-agent-mcp/dist/websocket-client.test.d.ts.map +1 -0
  379. package/package/aws-client-agent-mcp/dist/websocket-client.test.js +191 -0
  380. package/package/aws-client-agent-mcp/dist/websocket-client.test.js.map +1 -0
  381. package/package/aws-client-agent-mcp/package.json +51 -0
  382. package/package/cc-switch-sdk/README.md +541 -0
  383. package/package/cc-switch-sdk/dist/adapters/common.d.ts +38 -0
  384. package/package/cc-switch-sdk/dist/adapters/common.d.ts.map +1 -0
  385. package/package/cc-switch-sdk/dist/adapters/common.js +47 -0
  386. package/package/cc-switch-sdk/dist/adapters/index.d.ts +5 -0
  387. package/package/cc-switch-sdk/dist/adapters/index.d.ts.map +1 -0
  388. package/package/cc-switch-sdk/dist/adapters/index.js +28 -0
  389. package/package/cc-switch-sdk/dist/adapters/mcp-claude.d.ts +10 -0
  390. package/package/cc-switch-sdk/dist/adapters/mcp-claude.d.ts.map +1 -0
  391. package/package/cc-switch-sdk/dist/adapters/mcp-claude.js +39 -0
  392. package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.d.ts +10 -0
  393. package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.d.ts.map +1 -0
  394. package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.js +40 -0
  395. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.d.ts +18 -0
  396. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.d.ts.map +1 -0
  397. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.js +63 -0
  398. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.d.ts +2 -0
  399. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.d.ts.map +1 -0
  400. package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.js +86 -0
  401. package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.d.ts +9 -0
  402. package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.d.ts.map +1 -0
  403. package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.js +14 -0
  404. package/package/cc-switch-sdk/dist/adapters/skill-claude.d.ts +10 -0
  405. package/package/cc-switch-sdk/dist/adapters/skill-claude.d.ts.map +1 -0
  406. package/package/cc-switch-sdk/dist/adapters/skill-claude.js +51 -0
  407. package/package/cc-switch-sdk/dist/adapters/skill-claudecode.d.ts +10 -0
  408. package/package/cc-switch-sdk/dist/adapters/skill-claudecode.d.ts.map +1 -0
  409. package/package/cc-switch-sdk/dist/adapters/skill-claudecode.js +51 -0
  410. package/package/cc-switch-sdk/dist/adapters/skill-opencode.d.ts +10 -0
  411. package/package/cc-switch-sdk/dist/adapters/skill-opencode.d.ts.map +1 -0
  412. package/package/cc-switch-sdk/dist/adapters/skill-opencode.js +51 -0
  413. package/package/cc-switch-sdk/dist/adapters/skill-placeholder.d.ts +9 -0
  414. package/package/cc-switch-sdk/dist/adapters/skill-placeholder.d.ts.map +1 -0
  415. package/package/cc-switch-sdk/dist/adapters/skill-placeholder.js +14 -0
  416. package/package/cc-switch-sdk/dist/constants.d.ts +9 -0
  417. package/package/cc-switch-sdk/dist/constants.d.ts.map +1 -0
  418. package/package/cc-switch-sdk/dist/constants.js +54 -0
  419. package/package/cc-switch-sdk/dist/errors.d.ts +6 -0
  420. package/package/cc-switch-sdk/dist/errors.d.ts.map +1 -0
  421. package/package/cc-switch-sdk/dist/errors.js +8 -0
  422. package/package/cc-switch-sdk/dist/index.d.ts +11 -0
  423. package/package/cc-switch-sdk/dist/index.d.ts.map +1 -0
  424. package/package/cc-switch-sdk/dist/index.js +9 -0
  425. package/package/cc-switch-sdk/dist/schemas.d.ts +8 -0
  426. package/package/cc-switch-sdk/dist/schemas.d.ts.map +1 -0
  427. package/package/cc-switch-sdk/dist/schemas.js +37 -0
  428. package/package/cc-switch-sdk/dist/sdk.d.ts +91 -0
  429. package/package/cc-switch-sdk/dist/sdk.d.ts.map +1 -0
  430. package/package/cc-switch-sdk/dist/sdk.js +427 -0
  431. package/package/cc-switch-sdk/dist/services/ai-config-service.d.ts +75 -0
  432. package/package/cc-switch-sdk/dist/services/ai-config-service.d.ts.map +1 -0
  433. package/package/cc-switch-sdk/dist/services/ai-config-service.js +280 -0
  434. package/package/cc-switch-sdk/dist/services/instance-service.d.ts +78 -0
  435. package/package/cc-switch-sdk/dist/services/instance-service.d.ts.map +1 -0
  436. package/package/cc-switch-sdk/dist/services/instance-service.js +180 -0
  437. package/package/cc-switch-sdk/dist/services/mcp-model.d.ts +17 -0
  438. package/package/cc-switch-sdk/dist/services/mcp-model.d.ts.map +1 -0
  439. package/package/cc-switch-sdk/dist/services/mcp-model.js +34 -0
  440. package/package/cc-switch-sdk/dist/services/mcp-service.d.ts +18 -0
  441. package/package/cc-switch-sdk/dist/services/mcp-service.d.ts.map +1 -0
  442. package/package/cc-switch-sdk/dist/services/mcp-service.js +9 -0
  443. package/package/cc-switch-sdk/dist/services/skill-model.d.ts +17 -0
  444. package/package/cc-switch-sdk/dist/services/skill-model.d.ts.map +1 -0
  445. package/package/cc-switch-sdk/dist/services/skill-model.js +38 -0
  446. package/package/cc-switch-sdk/dist/services/skill-service.d.ts +17 -0
  447. package/package/cc-switch-sdk/dist/services/skill-service.d.ts.map +1 -0
  448. package/package/cc-switch-sdk/dist/services/skill-service.js +9 -0
  449. package/package/cc-switch-sdk/dist/state.d.ts +4 -0
  450. package/package/cc-switch-sdk/dist/state.d.ts.map +1 -0
  451. package/package/cc-switch-sdk/dist/state.js +19 -0
  452. package/package/cc-switch-sdk/dist/types.d.ts +75 -0
  453. package/package/cc-switch-sdk/dist/types.d.ts.map +1 -0
  454. package/package/cc-switch-sdk/dist/types.js +1 -0
  455. package/package/cc-switch-sdk/dist/utils/fs.d.ts +10 -0
  456. package/package/cc-switch-sdk/dist/utils/fs.d.ts.map +1 -0
  457. package/package/cc-switch-sdk/dist/utils/fs.js +91 -0
  458. package/package/cc-switch-sdk/dist/utils/id.d.ts +4 -0
  459. package/package/cc-switch-sdk/dist/utils/id.d.ts.map +1 -0
  460. package/package/cc-switch-sdk/dist/utils/id.js +12 -0
  461. package/package/cc-switch-sdk/package.json +31 -0
  462. package/package.json +73 -0
@@ -0,0 +1,122 @@
1
+ /**
2
+ * 会话输出缓冲服务
3
+ *
4
+ * 管理终端会话的输出缓冲和刷新机制
5
+ */
6
+ import axios from 'axios';
7
+ import { schedulerBaseUrl, runtimeToken } from '../config.js';
8
+ /** 活跃会话存储 */
9
+ export const sessions = new Map();
10
+ /**
11
+ * 发送状态更新到调度器
12
+ *
13
+ * @param agentId - Agent ID
14
+ * @param sessionId - 会话 ID
15
+ * @param status - 状态
16
+ * @param actionInfo - 可选的动作详情
17
+ */
18
+ export async function sendStatus(agentId, sessionId, status, actionInfo, usage) {
19
+ const payload = { agentId, sessionId, status };
20
+ // 添加细粒度动作信息
21
+ if (actionInfo) {
22
+ if (actionInfo.actionType)
23
+ payload.actionType = actionInfo.actionType;
24
+ if (actionInfo.actionLabel)
25
+ payload.actionLabel = actionInfo.actionLabel;
26
+ if (actionInfo.actionDetail)
27
+ payload.actionDetail = actionInfo.actionDetail;
28
+ }
29
+ // 添加 token 用量信息
30
+ if (usage) {
31
+ payload.inputTokens = usage.inputTokens;
32
+ payload.outputTokens = usage.outputTokens;
33
+ }
34
+ return axios.post(`${schedulerBaseUrl}/api/runtime/callback/status`, payload, { headers: { 'X-Runtime-Token': runtimeToken } }).catch(() => undefined);
35
+ }
36
+ /**
37
+ * 发送输出到调度器
38
+ *
39
+ * @param agentId - Agent ID
40
+ * @param output - 输出内容
41
+ * @param sessionId - 会话 ID
42
+ * @param seq - 序列号
43
+ */
44
+ export async function sendOutput(agentId, output, sessionId, seq) {
45
+ try {
46
+ await axios.post(`${schedulerBaseUrl}/api/runtime/callback/output`, { agentId, output, sessionId, seq }, { headers: { 'X-Runtime-Token': runtimeToken } });
47
+ }
48
+ catch {
49
+ // ignore transient callback failures
50
+ }
51
+ }
52
+ /**
53
+ * 发送 AskUserQuestion 事件到调度器。
54
+ *
55
+ * @param agentId - Agent ID
56
+ * @param sessionId - SDK 会话 ID
57
+ * @param questions - 结构化问题列表
58
+ */
59
+ export async function sendQuestionRequest(agentId, sessionId, questions) {
60
+ try {
61
+ await axios.post(`${schedulerBaseUrl}/api/runtime/callback/question`, { agentId, sessionId, questions }, { headers: { 'X-Runtime-Token': runtimeToken } });
62
+ }
63
+ catch {
64
+ // ignore transient callback failures
65
+ }
66
+ }
67
+ /**
68
+ * 调度输出刷新
69
+ *
70
+ * @param sessionId - 会话 ID
71
+ */
72
+ export function scheduleOutputFlush(sessionId) {
73
+ const session = sessions.get(sessionId);
74
+ if (!session) {
75
+ return;
76
+ }
77
+ if (session.flushTimer) {
78
+ return;
79
+ }
80
+ session.flushTimer = setTimeout(() => {
81
+ session.flushTimer = null;
82
+ flushSessionOutput(sessionId).catch(() => undefined);
83
+ }, 30);
84
+ }
85
+ /**
86
+ * 刷新会话输出
87
+ *
88
+ * @param sessionId - 会话 ID
89
+ */
90
+ export async function flushSessionOutput(sessionId) {
91
+ const session = sessions.get(sessionId);
92
+ if (!session) {
93
+ return;
94
+ }
95
+ if (session.flushInFlight) {
96
+ return;
97
+ }
98
+ if (!session.outputBuffer) {
99
+ return;
100
+ }
101
+ const output = session.outputBuffer;
102
+ session.outputBuffer = '';
103
+ const running = (async () => {
104
+ const seq = session.seq + 1;
105
+ session.seq = seq;
106
+ await sendOutput(session.agentId, output, sessionId, seq);
107
+ const latest = sessions.get(sessionId);
108
+ if (latest?.outputBuffer) {
109
+ scheduleOutputFlush(sessionId);
110
+ }
111
+ })();
112
+ session.flushInFlight = running;
113
+ try {
114
+ await running;
115
+ }
116
+ finally {
117
+ const latest = sessions.get(sessionId);
118
+ if (latest) {
119
+ latest.flushInFlight = null;
120
+ }
121
+ }
122
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Session Output 服务单元测试
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=session-output.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-output.test.d.ts","sourceRoot":"","sources":["../../src/services/session-output.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Session Output 服务单元测试
3
+ */
4
+ import { describe, it, expect } from 'vitest';
5
+ describe('session-output service', () => {
6
+ it('manages sessions map correctly', () => {
7
+ const sessions = new Map();
8
+ sessions.set('session-1', { agentId: 'agent-1', outputBuffer: '' });
9
+ expect(sessions.size).toBe(1);
10
+ expect(sessions.has('session-1')).toBe(true);
11
+ const session = sessions.get('session-1');
12
+ if (session)
13
+ session.outputBuffer = 'test output';
14
+ expect(sessions.get('session-1')?.outputBuffer).toBe('test output');
15
+ sessions.delete('session-1');
16
+ expect(sessions.size).toBe(0);
17
+ });
18
+ it('finds session by agentId', () => {
19
+ const sessions = new Map([
20
+ ['session-1', { agentId: 'agent-1' }],
21
+ ['session-2', { agentId: 'agent-2' }],
22
+ ]);
23
+ const findByAgentId = (agentId) => {
24
+ for (const [id, session] of sessions) {
25
+ if (session.agentId === agentId)
26
+ return id;
27
+ }
28
+ return null;
29
+ };
30
+ expect(findByAgentId('agent-1')).toBe('session-1');
31
+ expect(findByAgentId('agent-3')).toBe(null);
32
+ });
33
+ it('accumulates output correctly', () => {
34
+ let outputBuffer = '';
35
+ const appendOutput = (data) => { outputBuffer += data; };
36
+ appendOutput('line1\n');
37
+ appendOutput('line2\n');
38
+ expect(outputBuffer).toBe('line1\nline2\n');
39
+ });
40
+ it('clears buffer after flush', () => {
41
+ let outputBuffer = 'pending output';
42
+ const flushBuffer = () => {
43
+ const output = outputBuffer;
44
+ outputBuffer = '';
45
+ return output;
46
+ };
47
+ const flushed = flushBuffer();
48
+ expect(flushed).toBe('pending output');
49
+ expect(outputBuffer).toBe('');
50
+ });
51
+ it('increments sequence correctly', () => {
52
+ let seq = 0;
53
+ const nextSeq = () => { seq += 1; return seq; };
54
+ expect(nextSeq()).toBe(1);
55
+ expect(nextSeq()).toBe(2);
56
+ });
57
+ it('builds correct status payload', () => {
58
+ const buildStatusPayload = (agentId, sessionId, status) => ({
59
+ agentId, sessionId, status
60
+ });
61
+ expect(buildStatusPayload('agent-1', 'session-1', 'running')).toEqual({
62
+ agentId: 'agent-1', sessionId: 'session-1', status: 'running'
63
+ });
64
+ expect(buildStatusPayload('agent-1', null, 'stopped')).toEqual({
65
+ agentId: 'agent-1', sessionId: null, status: 'stopped'
66
+ });
67
+ });
68
+ });
@@ -0,0 +1,51 @@
1
+ /**
2
+ * 终端会话持久化服务
3
+ *
4
+ * 管理终端会话元数据的持久化存储
5
+ */
6
+ import type { PersistedSession } from '../types.js';
7
+ /**
8
+ * 获取持久化会话文件路径
9
+ *
10
+ * @returns 会话文件路径
11
+ */
12
+ export declare function getPersistedSessionsFile(): string;
13
+ /**
14
+ * 加载持久化的终端会话列表
15
+ *
16
+ * @returns 持久化会话列表
17
+ */
18
+ export declare function loadPersistedSessions(): Promise<PersistedSession[]>;
19
+ /**
20
+ * 保存持久化的终端会话列表
21
+ *
22
+ * @param sessions - 会话列表
23
+ */
24
+ export declare function savePersistedSessions(sessions: PersistedSession[]): Promise<void>;
25
+ /**
26
+ * 添加或更新持久化会话
27
+ *
28
+ * @param session - 会话数据
29
+ */
30
+ export declare function upsertPersistedSession(session: PersistedSession): Promise<void>;
31
+ /**
32
+ * 移除持久化会话(从完整文件中删除,包括 stopped 状态的)
33
+ *
34
+ * @param sessionId - 会话 ID
35
+ */
36
+ export declare function removePersistedSession(sessionId: string): Promise<void>;
37
+ /**
38
+ * 根据 agentId 查找持久化会话
39
+ *
40
+ * @param agentId - Agent ID
41
+ * @returns 持久化会话,未找到返回 undefined
42
+ */
43
+ export declare function findPersistedSessionByAgentId(agentId: string): Promise<PersistedSession | undefined>;
44
+ /**
45
+ * 根据 agentId 移除持久化会话
46
+ * 用于确保停止时能删除正确的持久化会话
47
+ *
48
+ * @param agentId - Agent ID
49
+ */
50
+ export declare function removePersistedSessionByAgentId(agentId: string): Promise<void>;
51
+ //# sourceMappingURL=terminal-persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-persistence.d.ts","sourceRoot":"","sources":["../../src/services/terminal-persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAUzE;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvF;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CASrF;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB7E;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAGvC;AAED;;;;;GAKG;AACH,wBAAsB,+BAA+B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpF"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * 终端会话持久化服务
3
+ *
4
+ * 管理终端会话元数据的持久化存储
5
+ */
6
+ import path from 'node:path';
7
+ import os from 'node:os';
8
+ import { promises as fs } from 'node:fs';
9
+ import { ensureDir } from '../utils/file-utils.js';
10
+ import { createLogger } from '../utils/logger.js';
11
+ const log = createLogger('terminal-persistence');
12
+ /**
13
+ * 获取持久化会话文件路径
14
+ *
15
+ * @returns 会话文件路径
16
+ */
17
+ export function getPersistedSessionsFile() {
18
+ return path.join(os.tmpdir(), 'agentswork-runtime-bridge', 'sessions.json');
19
+ }
20
+ /**
21
+ * 加载持久化的终端会话列表
22
+ *
23
+ * @returns 持久化会话列表
24
+ */
25
+ export async function loadPersistedSessions() {
26
+ const filePath = getPersistedSessionsFile();
27
+ try {
28
+ const raw = await fs.readFile(filePath, 'utf-8');
29
+ const sessions = JSON.parse(raw);
30
+ // 只返回状态为 running 的会话
31
+ return sessions.filter(s => s.status === 'running');
32
+ }
33
+ catch {
34
+ return [];
35
+ }
36
+ }
37
+ /**
38
+ * 保存持久化的终端会话列表
39
+ *
40
+ * @param sessions - 会话列表
41
+ */
42
+ export async function savePersistedSessions(sessions) {
43
+ const filePath = getPersistedSessionsFile();
44
+ await ensureDir(path.dirname(filePath));
45
+ await fs.writeFile(filePath, JSON.stringify(sessions, null, 2), 'utf-8');
46
+ }
47
+ /**
48
+ * 添加或更新持久化会话
49
+ *
50
+ * @param session - 会话数据
51
+ */
52
+ export async function upsertPersistedSession(session) {
53
+ const sessions = await loadPersistedSessions();
54
+ const index = sessions.findIndex(s => s.sessionId === session.sessionId);
55
+ if (index >= 0) {
56
+ sessions[index] = session;
57
+ }
58
+ else {
59
+ sessions.push(session);
60
+ }
61
+ await savePersistedSessions(sessions);
62
+ }
63
+ /**
64
+ * 移除持久化会话(从完整文件中删除,包括 stopped 状态的)
65
+ *
66
+ * @param sessionId - 会话 ID
67
+ */
68
+ export async function removePersistedSession(sessionId) {
69
+ const filePath = getPersistedSessionsFile();
70
+ try {
71
+ const raw = await fs.readFile(filePath, 'utf-8');
72
+ const allSessions = JSON.parse(raw);
73
+ const beforeCount = allSessions.length;
74
+ const filtered = allSessions.filter(s => s.sessionId !== sessionId);
75
+ const afterCount = filtered.length;
76
+ if (beforeCount !== afterCount) {
77
+ log.info(`[removePersistedSession] 删除持久化会话: sessionId=${sessionId}, 删除前=${beforeCount}, 删除后=${afterCount}`);
78
+ }
79
+ else {
80
+ log.warn(`[removePersistedSession] 未找到要删除的会话: sessionId=${sessionId}, 当前会话数=${beforeCount}`);
81
+ }
82
+ await savePersistedSessions(filtered);
83
+ }
84
+ catch (error) {
85
+ // 文件不存在,无需删除
86
+ log.debug(`[removePersistedSession] 文件不存在或读取失败: ${filePath}`);
87
+ }
88
+ }
89
+ /**
90
+ * 根据 agentId 查找持久化会话
91
+ *
92
+ * @param agentId - Agent ID
93
+ * @returns 持久化会话,未找到返回 undefined
94
+ */
95
+ export async function findPersistedSessionByAgentId(agentId) {
96
+ const sessions = await loadPersistedSessions();
97
+ return sessions.find(s => s.agentId === agentId);
98
+ }
99
+ /**
100
+ * 根据 agentId 移除持久化会话
101
+ * 用于确保停止时能删除正确的持久化会话
102
+ *
103
+ * @param agentId - Agent ID
104
+ */
105
+ export async function removePersistedSessionByAgentId(agentId) {
106
+ const filePath = getPersistedSessionsFile();
107
+ try {
108
+ const raw = await fs.readFile(filePath, 'utf-8');
109
+ const allSessions = JSON.parse(raw);
110
+ const beforeCount = allSessions.length;
111
+ const filtered = allSessions.filter(s => s.agentId !== agentId);
112
+ const afterCount = filtered.length;
113
+ if (beforeCount !== afterCount) {
114
+ log.info(`[removePersistedSessionByAgentId] 删除持久化会话: agentId=${agentId}, 删除前=${beforeCount}, 删除后=${afterCount}`);
115
+ }
116
+ else {
117
+ log.debug(`[removePersistedSessionByAgentId] 未找到要删除的会话: agentId=${agentId}`);
118
+ }
119
+ await savePersistedSessions(filtered);
120
+ }
121
+ catch (error) {
122
+ // 文件不存在,无需删除
123
+ log.debug(`[removePersistedSessionByAgentId] 文件不存在或读取失败: ${filePath}`);
124
+ }
125
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Terminal Persistence 服务单元测试
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=terminal-persistence.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-persistence.test.d.ts","sourceRoot":"","sources":["../../src/services/terminal-persistence.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Terminal Persistence 服务单元测试
3
+ */
4
+ import { describe, it, expect } from 'vitest';
5
+ describe('terminal-persistence service', () => {
6
+ it('generates correct file path', () => {
7
+ const getPersistedSessionsFile = (tmpdir) => {
8
+ return `${tmpdir}/agentswork-runtime-bridge/sessions.json`;
9
+ };
10
+ const path = getPersistedSessionsFile('/tmp');
11
+ expect(path.includes('agentswork-runtime-bridge')).toBe(true);
12
+ expect(path.endsWith('sessions.json')).toBe(true);
13
+ });
14
+ it('serializes sessions to JSON correctly', () => {
15
+ const sessions = [{ sessionId: 'session-1', agentId: 'agent-1', status: 'running' }];
16
+ const json = JSON.stringify(sessions);
17
+ const parsed = JSON.parse(json);
18
+ expect(parsed.length).toBe(1);
19
+ expect(parsed[0].sessionId).toBe('session-1');
20
+ });
21
+ it('filters running sessions on load', () => {
22
+ const sessions = [
23
+ { sessionId: 's1', status: 'running' },
24
+ { sessionId: 's2', status: 'stopped' },
25
+ { sessionId: 's3', status: 'running' },
26
+ ];
27
+ const runningSessions = sessions.filter(s => s.status === 'running');
28
+ expect(runningSessions.length).toBe(2);
29
+ });
30
+ it('adds new session', () => {
31
+ const sessions = [];
32
+ const upsertSession = (newSession) => {
33
+ const index = sessions.findIndex(s => s.sessionId === newSession.sessionId);
34
+ if (index >= 0)
35
+ sessions[index] = newSession;
36
+ else
37
+ sessions.push(newSession);
38
+ };
39
+ upsertSession({ sessionId: 'session-1', agentId: 'agent-1' });
40
+ expect(sessions.length).toBe(1);
41
+ });
42
+ it('updates existing session', () => {
43
+ const sessions = [{ sessionId: 'session-1', status: 'running' }];
44
+ const index = sessions.findIndex(s => s.sessionId === 'session-1');
45
+ if (index >= 0)
46
+ sessions[index] = { sessionId: 'session-1', status: 'stopped' };
47
+ expect(sessions[0].status).toBe('stopped');
48
+ });
49
+ it('removes session by id', () => {
50
+ const sessions = [{ sessionId: 's1' }, { sessionId: 's2' }];
51
+ const index = sessions.findIndex(s => s.sessionId === 's2');
52
+ if (index >= 0)
53
+ sessions.splice(index, 1);
54
+ expect(sessions.length).toBe(1);
55
+ expect(sessions.find(s => s.sessionId === 's2')).toBeUndefined();
56
+ });
57
+ it('prefers removing persisted session after stop to prevent later recovery', () => {
58
+ const sessions = [
59
+ { sessionId: 's1', agentId: 'a1', status: 'running' },
60
+ { sessionId: 's2', agentId: 'a2', status: 'running' },
61
+ ];
62
+ const stoppedSessionId = 's1';
63
+ const afterRemove = sessions.filter(s => s.sessionId !== stoppedSessionId);
64
+ expect(afterRemove).toEqual([
65
+ { sessionId: 's2', agentId: 'a2', status: 'running' },
66
+ ]);
67
+ expect(afterRemove.find(s => s.sessionId === stoppedSessionId)).toBeUndefined();
68
+ });
69
+ it('finds session by agentId', () => {
70
+ const sessions = [
71
+ { sessionId: 's1', agentId: 'a1' },
72
+ { sessionId: 's2', agentId: 'a2' },
73
+ ];
74
+ const found = sessions.find(s => s.agentId === 'a2');
75
+ expect(found?.sessionId).toBe('s2');
76
+ });
77
+ it('handles invalid JSON on load', () => {
78
+ const parseSessions = (raw) => {
79
+ try {
80
+ return JSON.parse(raw);
81
+ }
82
+ catch {
83
+ return [];
84
+ }
85
+ };
86
+ expect(parseSessions('invalid json')).toEqual([]);
87
+ });
88
+ });
@@ -0,0 +1,15 @@
1
+ import type { ToolInstallStatus } from "../types.js";
2
+ export declare const SUPPORTED_INSTALLABLE_TOOLS: readonly string[];
3
+ /**
4
+ * 检查单个工具的 CLI 可执行状态,供实例状态展示与初始化前判断使用。
5
+ */
6
+ export declare function detectToolInstallStatus(tool: string): Promise<ToolInstallStatus>;
7
+ /**
8
+ * 批量检查工具安装状态,统一返回给前端面板和实例状态持久化。
9
+ */
10
+ export declare function detectToolStatuses(tools: string[]): Promise<Record<string, ToolInstallStatus>>;
11
+ /**
12
+ * 根据勾选工具自动安装缺失 CLI,安装后重新检测状态并返回。
13
+ */
14
+ export declare function ensureToolsInstalled(tools: string[]): Promise<Record<string, ToolInstallStatus>>;
15
+ //# sourceMappingURL=tool-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-installer.d.ts","sourceRoot":"","sources":["../../src/services/tool-installer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAoErD,eAAO,MAAM,2BAA2B,mBAEvC,CAAC;AAmLF;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,CAAC,CAyB5B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAkB5C;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CA+C5C"}