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,91 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { SDK_PROVIDER_DEFINITIONS } from '../adapter/SdkProviderSpi.js';
3
+ import { AWS_MCP_SERVER_NAME } from '../services/aws-client-agent-mcp.js';
4
+ import { resolveSdkProviderId } from './terminal.js';
5
+ describe('terminal route validation', () => {
6
+ it('requires agentId and workspacePath for start', () => {
7
+ const validateStartRequest = (body) => {
8
+ if (!body.agentId || !body.workspacePath)
9
+ return { valid: false, error: 'agentId and workspacePath are required' };
10
+ return { valid: true };
11
+ };
12
+ expect(validateStartRequest({}).valid).toBe(false);
13
+ expect(validateStartRequest({ agentId: 'agent-1', workspacePath: '/path' }).valid).toBe(true);
14
+ });
15
+ it('uses default command when not provided', () => {
16
+ const resolveCommand = (command) => command || 'claude';
17
+ expect(resolveCommand(undefined)).toBe('claude');
18
+ expect(resolveCommand('custom-cli')).toBe('custom-cli');
19
+ });
20
+ it('requires sessionId and input for input', () => {
21
+ const validateInputRequest = (body) => {
22
+ if (!body.sessionId || body.input === undefined || body.input === null) {
23
+ return { valid: false, error: 'sessionId and input are required' };
24
+ }
25
+ return { valid: true };
26
+ };
27
+ expect(validateInputRequest({}).valid).toBe(false);
28
+ expect(validateInputRequest({ sessionId: 'session-1', input: 'ls' }).valid).toBe(true);
29
+ });
30
+ it('requires sessionId, cols, and rows for resize', () => {
31
+ const validateResizeRequest = (body) => {
32
+ if (!body.sessionId || !body.cols || !body.rows)
33
+ return { valid: false, error: 'sessionId, cols, rows are required' };
34
+ return { valid: true };
35
+ };
36
+ expect(validateResizeRequest({}).valid).toBe(false);
37
+ expect(validateResizeRequest({ sessionId: 'session-1', cols: 120, rows: 30 }).valid).toBe(true);
38
+ });
39
+ it('requires sessionId for stop', () => {
40
+ const validateStopRequest = (body) => {
41
+ if (!body.sessionId)
42
+ return { valid: false, error: 'sessionId is required' };
43
+ return { valid: true };
44
+ };
45
+ expect(validateStopRequest({}).valid).toBe(false);
46
+ expect(validateStopRequest({ sessionId: 'session-1' }).valid).toBe(true);
47
+ });
48
+ });
49
+ describe('terminal configuration', () => {
50
+ it('selects correct shell for platform', () => {
51
+ const getShellConfig = (platform) => {
52
+ if (platform === 'win32')
53
+ return { shell: 'powershell.exe', args: ['-NoLogo'] };
54
+ return { shell: 'bash', args: [] };
55
+ };
56
+ expect(getShellConfig('win32').shell).toBe('powershell.exe');
57
+ expect(getShellConfig('linux').shell).toBe('bash');
58
+ });
59
+ it('builds correct terminal environment', () => {
60
+ const buildTerminalEnv = (agentId, baseEnv) => ({
61
+ ...baseEnv,
62
+ AWS_AGENT_ID: agentId,
63
+ });
64
+ const env = buildTerminalEnv('agent-123', { PATH: '/usr/bin' });
65
+ expect(env.AWS_AGENT_ID).toBe('agent-123');
66
+ });
67
+ it('uses aws-mcp as the default injected MCP server name', () => {
68
+ expect(AWS_MCP_SERVER_NAME).toBe('aws-mcp');
69
+ });
70
+ });
71
+ describe('resolveSdkProviderId', () => {
72
+ it('exposes codex through the SDK provider SPI', () => {
73
+ expect(SDK_PROVIDER_DEFINITIONS.map((definition) => definition.runtimeMode)).toContain('codex');
74
+ expect(SDK_PROVIDER_DEFINITIONS.find((definition) => definition.runtimeMode === 'codex')).toMatchObject({
75
+ providerId: 'codex',
76
+ defaultCommand: 'codex',
77
+ });
78
+ });
79
+ it('resolves codex commands to codex provider', () => {
80
+ expect(resolveSdkProviderId('codex')).toBe('codex');
81
+ expect(resolveSdkProviderId('npx codex --model gpt-5-codex')).toBe('codex');
82
+ });
83
+ it('resolves opencode commands to opencode provider', () => {
84
+ expect(resolveSdkProviderId('opencode')).toBe('opencode');
85
+ });
86
+ it('falls back to claude-code for claude or unknown commands', () => {
87
+ expect(resolveSdkProviderId('claude')).toBe('claude-code');
88
+ expect(resolveSdkProviderId('custom-binary')).toBe('claude-code');
89
+ expect(resolveSdkProviderId(undefined)).toBe('claude-code');
90
+ });
91
+ });
@@ -0,0 +1,7 @@
1
+ /**
2
+ * YAML 配置文件 API 路由
3
+ *
4
+ * 提供 YAML 配置文件的读取和写入功能
5
+ */
6
+ export declare const ymlRouter: import("express-serve-static-core").Router;
7
+ //# sourceMappingURL=yml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yml.d.ts","sourceRoot":"","sources":["../../src/routes/yml.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,eAAO,MAAM,SAAS,4CAAW,CAAC"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * YAML 配置文件 API 路由
3
+ *
4
+ * 提供 YAML 配置文件的读取和写入功能
5
+ */
6
+ import { Router } from 'express';
7
+ import { promises as fs } from 'node:fs';
8
+ import path from 'node:path';
9
+ import { validateToken } from '../middleware/auth.js';
10
+ import { createLogger } from '../utils/logger.js';
11
+ import { resolveWorkspaceFilePath } from '../utils/path-utils.js';
12
+ import { loadYmlWithUpwardSearch, extractAgentConfigOrTemplate, generateEmptyTemplate, autoFillPathInYml } from '../utils/yaml-utils.js';
13
+ const log = createLogger('yml-routes');
14
+ export const ymlRouter = Router();
15
+ /**
16
+ * 读取 YAML 配置文件
17
+ * POST /runtime/read-yml
18
+ */
19
+ ymlRouter.post('/read-yml', validateToken, async (req, res) => {
20
+ const { workspacePath, ymlPath } = req.body || {};
21
+ try {
22
+ const { normalizedWorkspace, resolvedTarget } = resolveWorkspaceFilePath(workspacePath, ymlPath, 'vibe-coding/my.yml');
23
+ const providedPathStr = ymlPath ? String(ymlPath).trim() || 'vibe-coding/my.yml' : 'vibe-coding/my.yml';
24
+ if (path.isAbsolute(providedPathStr)) {
25
+ let content = '';
26
+ let exists = true;
27
+ try {
28
+ content = await fs.readFile(resolvedTarget, 'utf-8');
29
+ }
30
+ catch (err) {
31
+ const error = err;
32
+ if (error?.code === 'ENOENT') {
33
+ exists = false;
34
+ }
35
+ else {
36
+ throw err;
37
+ }
38
+ }
39
+ // 计算工作目录相对于配置文件所属目录(项目根目录)的相对路径
40
+ const configFileDir = path.dirname(resolvedTarget);
41
+ const projectRootDir = path.dirname(configFileDir);
42
+ let workspaceRelativeToProject = path.relative(projectRootDir, normalizedWorkspace);
43
+ if (workspaceRelativeToProject === '') {
44
+ workspaceRelativeToProject = '.';
45
+ }
46
+ let displayContent;
47
+ let isTemplate = false;
48
+ let projectFromSibling = null;
49
+ if (exists && content) {
50
+ const result = extractAgentConfigOrTemplate(content, workspaceRelativeToProject);
51
+ displayContent = result.content;
52
+ isTemplate = result.isTemplate;
53
+ projectFromSibling = result.projectFromSibling;
54
+ }
55
+ else {
56
+ displayContent = generateEmptyTemplate(workspaceRelativeToProject);
57
+ isTemplate = true;
58
+ }
59
+ res.json({
60
+ ok: true,
61
+ workspacePath: normalizedWorkspace,
62
+ filePath: resolvedTarget,
63
+ exists,
64
+ content: displayContent,
65
+ fullContent: exists ? content : null,
66
+ foundInParent: false,
67
+ isTemplate,
68
+ projectFromSibling,
69
+ });
70
+ return;
71
+ }
72
+ // 相对路径:向上查找配置文件
73
+ const loadResult = await loadYmlWithUpwardSearch(normalizedWorkspace, providedPathStr);
74
+ log.info(`loadResult.content length: ${loadResult.content?.length || 0}`);
75
+ const configFileDir = path.dirname(loadResult.resolvedPath);
76
+ const projectRootDir = path.dirname(configFileDir);
77
+ let workspaceRelativeToProject = path.relative(projectRootDir, normalizedWorkspace);
78
+ if (workspaceRelativeToProject === '') {
79
+ workspaceRelativeToProject = '.';
80
+ }
81
+ let displayContent;
82
+ let isTemplate = false;
83
+ let projectFromSibling = null;
84
+ if (loadResult.content !== null) {
85
+ const result = extractAgentConfigOrTemplate(loadResult.content, workspaceRelativeToProject);
86
+ displayContent = result.content;
87
+ isTemplate = result.isTemplate;
88
+ projectFromSibling = result.projectFromSibling;
89
+ }
90
+ else {
91
+ displayContent = generateEmptyTemplate(workspaceRelativeToProject);
92
+ isTemplate = true;
93
+ }
94
+ log.info(`returning fullContent length: ${loadResult.content?.length || 0}`);
95
+ res.json({
96
+ ok: true,
97
+ workspacePath: normalizedWorkspace,
98
+ filePath: loadResult.resolvedPath,
99
+ exists: loadResult.content !== null,
100
+ content: displayContent,
101
+ fullContent: loadResult.content,
102
+ foundInParent: loadResult.foundInParent,
103
+ matchedAgentPath: loadResult.matchedAgentPath,
104
+ isTemplate,
105
+ projectFromSibling,
106
+ });
107
+ }
108
+ catch (error) {
109
+ const err = error;
110
+ res.status(400).json({ error: err?.message || 'read yml failed' });
111
+ }
112
+ });
113
+ /**
114
+ * 加载完整的 YAML 文件内容
115
+ * POST /runtime/load-yml
116
+ */
117
+ ymlRouter.post('/load-yml', validateToken, async (req, res) => {
118
+ const { workspacePath, ymlPath } = req.body || {};
119
+ try {
120
+ const { normalizedWorkspace, resolvedTarget } = resolveWorkspaceFilePath(workspacePath, ymlPath, 'vibe-coding/my.yml');
121
+ const providedPathStr = ymlPath ? String(ymlPath).trim() || 'vibe-coding/my.yml' : 'vibe-coding/my.yml';
122
+ if (path.isAbsolute(providedPathStr)) {
123
+ let content = null;
124
+ let exists = true;
125
+ try {
126
+ content = await fs.readFile(resolvedTarget, 'utf-8');
127
+ log.info(`绝对路径读取成功: ${resolvedTarget}, 内容长度: ${content.length}`);
128
+ }
129
+ catch (err) {
130
+ const error = err;
131
+ if (error?.code === 'ENOENT') {
132
+ exists = false;
133
+ log.info(`绝对路径文件不存在: ${resolvedTarget}`);
134
+ }
135
+ else {
136
+ throw err;
137
+ }
138
+ }
139
+ res.json({
140
+ ok: true,
141
+ workspacePath: normalizedWorkspace,
142
+ filePath: resolvedTarget,
143
+ exists,
144
+ content: exists ? content : null,
145
+ });
146
+ return;
147
+ }
148
+ const loadResult = await loadYmlWithUpwardSearch(normalizedWorkspace, providedPathStr);
149
+ log.info(`向上查找结果: filePath=${loadResult.resolvedPath}, exists=${loadResult.content !== null}, contentLength=${loadResult.content?.length || 0}`);
150
+ res.json({
151
+ ok: true,
152
+ workspacePath: normalizedWorkspace,
153
+ filePath: loadResult.resolvedPath,
154
+ exists: loadResult.content !== null,
155
+ content: loadResult.content,
156
+ foundInParent: loadResult.foundInParent,
157
+ });
158
+ }
159
+ catch (error) {
160
+ const err = error;
161
+ res.status(400).json({ error: err?.message || 'load yml failed' });
162
+ }
163
+ });
164
+ /**
165
+ * 写入 YAML 配置文件
166
+ * POST /runtime/write-yml
167
+ */
168
+ ymlRouter.post('/write-yml', validateToken, async (req, res) => {
169
+ const { workspacePath, ymlPath, content } = req.body || {};
170
+ if (!content || !String(content).trim()) {
171
+ res.status(400).json({ error: 'content is required' });
172
+ return;
173
+ }
174
+ try {
175
+ const { normalizedWorkspace, resolvedTarget: absoluteOrDefaultTarget } = resolveWorkspaceFilePath(workspacePath, ymlPath, 'vibe-coding/my.yml');
176
+ const providedPathStr = ymlPath ? String(ymlPath).trim() || 'vibe-coding/my.yml' : 'vibe-coding/my.yml';
177
+ if (path.isAbsolute(providedPathStr)) {
178
+ const resolvedTarget = absoluteOrDefaultTarget;
179
+ const configFileDir = path.dirname(resolvedTarget);
180
+ const projectRootDir = path.dirname(configFileDir);
181
+ let workspaceRelativeToProject = path.relative(projectRootDir, normalizedWorkspace);
182
+ if (workspaceRelativeToProject === '') {
183
+ workspaceRelativeToProject = '.';
184
+ }
185
+ const processedContent = autoFillPathInYml(String(content), workspaceRelativeToProject);
186
+ const targetDir = path.dirname(resolvedTarget);
187
+ await fs.mkdir(targetDir, { recursive: true });
188
+ await fs.writeFile(resolvedTarget, processedContent, 'utf-8');
189
+ res.json({
190
+ ok: true,
191
+ workspacePath: normalizedWorkspace,
192
+ filePath: resolvedTarget,
193
+ foundInParent: false,
194
+ });
195
+ return;
196
+ }
197
+ const loadResult = await loadYmlWithUpwardSearch(normalizedWorkspace, providedPathStr);
198
+ const initialTarget = path.resolve(normalizedWorkspace, providedPathStr);
199
+ const resolvedTarget = loadResult.content !== null ? loadResult.resolvedPath : initialTarget;
200
+ const configFileDir = path.dirname(resolvedTarget);
201
+ const projectRootDir = path.dirname(configFileDir);
202
+ let workspaceRelativeToProject = path.relative(projectRootDir, normalizedWorkspace);
203
+ if (workspaceRelativeToProject === '') {
204
+ workspaceRelativeToProject = '.';
205
+ }
206
+ const processedContent = autoFillPathInYml(String(content), workspaceRelativeToProject);
207
+ const targetDir = path.dirname(resolvedTarget);
208
+ await fs.mkdir(targetDir, { recursive: true });
209
+ await fs.writeFile(resolvedTarget, processedContent, 'utf-8');
210
+ res.json({
211
+ ok: true,
212
+ workspacePath: normalizedWorkspace,
213
+ filePath: resolvedTarget,
214
+ foundInParent: loadResult.foundInParent,
215
+ matchedAgentPath: loadResult.matchedAgentPath,
216
+ originalTarget: initialTarget !== resolvedTarget ? initialTarget : undefined,
217
+ });
218
+ }
219
+ catch (error) {
220
+ const err = error;
221
+ res.status(400).json({ error: err?.message || 'write yml failed' });
222
+ }
223
+ });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * YAML 路由单元测试
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=yml.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yml.test.d.ts","sourceRoot":"","sources":["../../src/routes/yml.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * YAML 路由单元测试
3
+ */
4
+ import { describe, it, expect } from 'vitest';
5
+ describe('yml route validation', () => {
6
+ it('requires workspacePath for read', () => {
7
+ const validateReadRequest = (body) => {
8
+ const normalizedWorkspace = body.workspacePath ? String(body.workspacePath).trim() : '';
9
+ if (!normalizedWorkspace)
10
+ return { valid: false, error: 'workspacePath is required' };
11
+ return { valid: true };
12
+ };
13
+ expect(validateReadRequest({}).valid).toBe(false);
14
+ expect(validateReadRequest({ workspacePath: '/valid/path' }).valid).toBe(true);
15
+ });
16
+ it('requires workspacePath and content for write', () => {
17
+ const validateWriteRequest = (body) => {
18
+ const normalizedWorkspace = body.workspacePath ? String(body.workspacePath).trim() : '';
19
+ if (!normalizedWorkspace)
20
+ return { valid: false, error: 'workspacePath is required' };
21
+ if (!body.content || !String(body.content).trim())
22
+ return { valid: false, error: 'content is required' };
23
+ return { valid: true };
24
+ };
25
+ expect(validateWriteRequest({}).valid).toBe(false);
26
+ expect(validateWriteRequest({ workspacePath: '/path', content: 'test' }).valid).toBe(true);
27
+ });
28
+ it('uses default ymlPath when not provided', () => {
29
+ const resolveYmlPath = (ymlPath) => {
30
+ return ymlPath ? String(ymlPath).trim() || 'vibe-coding/my.yml' : 'vibe-coding/my.yml';
31
+ };
32
+ expect(resolveYmlPath()).toBe('vibe-coding/my.yml');
33
+ expect(resolveYmlPath('custom/path.yml')).toBe('custom/path.yml');
34
+ });
35
+ });
36
+ describe('response building', () => {
37
+ it('builds correct response for existing file', () => {
38
+ const response = {
39
+ ok: true,
40
+ workspacePath: '/project/workspace',
41
+ filePath: '/project/vibe-coding/my.yml',
42
+ exists: true,
43
+ content: 'agent:\n - name: test',
44
+ };
45
+ expect(response.ok).toBe(true);
46
+ expect(response.exists).toBe(true);
47
+ });
48
+ it('builds correct response for non-existing file', () => {
49
+ const response = {
50
+ ok: true,
51
+ exists: false,
52
+ fullContent: null,
53
+ isTemplate: true,
54
+ };
55
+ expect(response.exists).toBe(false);
56
+ expect(response.isTemplate).toBe(true);
57
+ });
58
+ });
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Agent Process Manager
3
+ *
4
+ * Core lifecycle manager for agent processes on the bridge machine.
5
+ * Provides comprehensive process management including creation, discovery,
6
+ * monitoring, termination, and orphan reclamation capabilities.
7
+ */
8
+ import { type ProcessRecord, type ProcessState, type HealthStatus } from './process-registry.js';
9
+ import { type ProcessInfo, type ProcessHealthStatus } from './process-detector.js';
10
+ /**
11
+ * Process configuration for starting a new agent process
12
+ */
13
+ export interface ProcessConfig {
14
+ agentId: string;
15
+ sessionId: string;
16
+ pid: number;
17
+ mode: 'pty' | 'sdk';
18
+ workspacePath: string;
19
+ command: string;
20
+ }
21
+ /**
22
+ * Discovered process with management status
23
+ */
24
+ export interface DiscoveredProcess extends ProcessInfo {
25
+ managementStatus: 'managed' | 'orphan' | 'unknown';
26
+ sessionId?: string;
27
+ }
28
+ /**
29
+ * Termination result with escalation level details
30
+ */
31
+ export interface TerminationResult {
32
+ success: boolean;
33
+ agentId: string;
34
+ pid: number;
35
+ level: number;
36
+ terminated: number;
37
+ failed: number;
38
+ message: string;
39
+ }
40
+ /**
41
+ * Reclamation result
42
+ */
43
+ export interface ReclamationResult {
44
+ success: boolean;
45
+ pid: number;
46
+ action: 'adopted' | 'terminated' | 'failed';
47
+ }
48
+ /**
49
+ * Agent Process Manager
50
+ *
51
+ * Manages the complete lifecycle of agent processes including:
52
+ * - Creation: Register and verify new processes
53
+ * - Discovery: Scan for managed, orphan, and unknown processes
54
+ * - Monitoring: Health checks and heartbeat tracking
55
+ * - Termination: Graceful stop with escalation strategy
56
+ * - Orphan Reclamation: Adopt or terminate orphan processes
57
+ */
58
+ export declare class AgentProcessManager {
59
+ private static instance;
60
+ private readonly registry;
61
+ /**
62
+ * Private constructor - use getAgentProcessManager() for singleton access
63
+ */
64
+ private constructor();
65
+ /**
66
+ * Get the singleton instance
67
+ */
68
+ static getInstance(): AgentProcessManager;
69
+ /**
70
+ * Start a new process and register it in the process registry
71
+ *
72
+ * Flow:
73
+ * 1. Register process with state='creating'
74
+ * 2. Verify it's running
75
+ * 3. Update state to 'running'
76
+ *
77
+ * @param config - Process configuration
78
+ * @throws Error if process registration fails or process is not running
79
+ */
80
+ startProcess(config: ProcessConfig): Promise<void>;
81
+ /**
82
+ * Discover all agent processes on the system
83
+ *
84
+ * Scans OS for all agent processes, compares with registry, and returns
85
+ * a list of discovered processes with their management status.
86
+ *
87
+ * @returns Array of discovered processes with management status
88
+ */
89
+ discoverAllProcesses(): Promise<DiscoveredProcess[]>;
90
+ /**
91
+ * Check health of all registered processes
92
+ *
93
+ * Updates heartbeat and health status in registry for each managed process.
94
+ *
95
+ * @returns Map of agentId to health status
96
+ */
97
+ healthCheckAll(): Promise<Map<string, ProcessHealthStatus>>;
98
+ /**
99
+ * Check health of a single process
100
+ *
101
+ * @param agentId - Agent ID to check
102
+ * @returns Health status of the process
103
+ */
104
+ healthCheck(agentId: string): Promise<ProcessHealthStatus>;
105
+ /**
106
+ * Stop a process with graceful escalation strategy
107
+ *
108
+ * Escalation levels:
109
+ * Level 1: SIGTERM → wait 3s
110
+ * Level 2: taskkill /T /F (Win) or kill -9 (Unix) → wait 3s
111
+ * Level 3: terminateProcessTree → wait 5s
112
+ * Level 4: mark as "unstoppable", return failure
113
+ *
114
+ * @param agentId - Agent ID to stop
115
+ * @returns Termination result with details
116
+ */
117
+ stopProcess(agentId: string): Promise<TerminationResult>;
118
+ /**
119
+ * Send SIGTERM to a process
120
+ */
121
+ private sendSigterm;
122
+ /**
123
+ * Send force kill (SIGKILL on Unix, taskkill /F on Windows)
124
+ */
125
+ private sendForceKill;
126
+ /**
127
+ * Force kill a process immediately using terminateProcessTree
128
+ *
129
+ * This bypasses the graceful escalation and uses the most aggressive
130
+ * termination method immediately.
131
+ *
132
+ * @param agentId - Agent ID to force kill
133
+ * @returns Termination result
134
+ */
135
+ forceKill(agentId: string): Promise<TerminationResult>;
136
+ /**
137
+ * Reclaim an orphan process by agentId
138
+ *
139
+ * Finds an orphan process by agentId, and either:
140
+ * - Adopts it into the registry (if found and not managed)
141
+ * - Terminates it (if adoption fails or process is problematic)
142
+ *
143
+ * @param agentId - Agent ID to find and reclaim
144
+ * @returns Reclamation result
145
+ */
146
+ reclaimOrphan(agentId: string): Promise<ReclamationResult>;
147
+ /**
148
+ * Scan all orphans and attempt to reclaim each
149
+ *
150
+ * @returns Array of reclamation results
151
+ */
152
+ scanAndReclaimAll(): Promise<Array<{
153
+ agentId: string;
154
+ pid: number;
155
+ action: string;
156
+ }>>;
157
+ /**
158
+ * Mark a process as orphaned in the registry
159
+ *
160
+ * @param agentId - Agent ID to mark
161
+ * @returns Whether the operation succeeded
162
+ */
163
+ markOrphaned(agentId: string): Promise<boolean>;
164
+ /**
165
+ * Check if a process is managed
166
+ *
167
+ * @param agentId - Agent ID to check
168
+ * @returns Whether the process is managed
169
+ */
170
+ isManaged(agentId: string): boolean;
171
+ /**
172
+ * Get all managed processes
173
+ *
174
+ * @returns Array of all managed process records
175
+ */
176
+ getAllManagedProcesses(): ProcessRecord[];
177
+ /**
178
+ * Get managed processes by state
179
+ *
180
+ * @param state - Process state to filter by
181
+ * @returns Array of process records matching the state
182
+ */
183
+ getManagedProcessesByState(state: ProcessState): ProcessRecord[];
184
+ /**
185
+ * Find processes running on the machine that are NOT in registry
186
+ *
187
+ * @returns Array of unmanaged process info
188
+ */
189
+ getUnmanagedProcesses(): Promise<ProcessInfo[]>;
190
+ /**
191
+ * Rebuild the process registry from persisted sessions (e.g. on startup)
192
+ *
193
+ * Scans all persisted sessions, checks which processes are still running,
194
+ * and registers them with appropriate state.
195
+ *
196
+ * @param sessions - Array of persisted session data
197
+ */
198
+ rebuildRegistry(sessions: Array<{
199
+ agentId: string;
200
+ sessionId: string;
201
+ pid?: number;
202
+ workspacePath?: string;
203
+ command?: string;
204
+ mode?: 'pty' | 'sdk';
205
+ }>): Promise<void>;
206
+ /**
207
+ * Get process statistics
208
+ *
209
+ * @returns Statistics for all managed processes
210
+ */
211
+ getStats(): Record<ProcessState | 'total', number>;
212
+ /**
213
+ * Remove a process from registry
214
+ *
215
+ * @param agentId - Agent ID to remove
216
+ * @returns Whether the operation succeeded
217
+ */
218
+ removeProcess(agentId: string): Promise<boolean>;
219
+ /**
220
+ * Get a single process record
221
+ *
222
+ * @param agentId - Agent ID to get
223
+ * @returns Process record or undefined
224
+ */
225
+ getProcess(agentId: string): ProcessRecord | undefined;
226
+ /**
227
+ * Get a process record by PID
228
+ *
229
+ * @param pid - Process ID to get
230
+ * @returns Process record or undefined
231
+ */
232
+ getProcessByPid(pid: number): ProcessRecord | undefined;
233
+ }
234
+ /**
235
+ * Get the AgentProcessManager singleton instance
236
+ *
237
+ * @returns AgentProcessManager instance
238
+ */
239
+ export declare function getAgentProcessManager(): AgentProcessManager;
240
+ export type { ProcessRecord, ProcessState, HealthStatus, ProcessInfo, ProcessHealthStatus };
241
+ //# sourceMappingURL=agent-process-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-process-manager.d.ts","sourceRoot":"","sources":["../../src/services/agent-process-manager.ts"],"names":[],"mappings":"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"}