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,140 @@
1
+ import path from 'node:path';
2
+ import { spawn } from 'node:child_process';
3
+ import { promises as fs } from 'node:fs';
4
+ import { createHash, randomUUID } from 'node:crypto';
5
+ import axios from 'axios';
6
+ import { schedulerBaseUrl, runtimeToken } from '../config.js';
7
+ export async function ensureDir(targetDir) {
8
+ await fs.mkdir(targetDir, { recursive: true });
9
+ return targetDir;
10
+ }
11
+ export async function downloadSkillZip(skillPackage, targetDir) {
12
+ if (!skillPackage || !skillPackage.downloadUrl) {
13
+ return null;
14
+ }
15
+ const url = String(skillPackage.downloadUrl).trim();
16
+ if (!url) {
17
+ return null;
18
+ }
19
+ let absoluteUrl = url;
20
+ if (absoluteUrl.startsWith('/')) {
21
+ absoluteUrl = `${schedulerBaseUrl}${absoluteUrl}`;
22
+ }
23
+ const fileName = skillPackage.fileName && String(skillPackage.fileName).trim()
24
+ ? String(skillPackage.fileName).trim()
25
+ : 'skill-package.zip';
26
+ const outputPath = path.join(targetDir, fileName);
27
+ const response = await axios.get(absoluteUrl, {
28
+ responseType: 'arraybuffer',
29
+ headers: {
30
+ 'X-Runtime-Token': runtimeToken,
31
+ },
32
+ });
33
+ const bytes = Buffer.from(response.data);
34
+ await fs.writeFile(outputPath, bytes);
35
+ if (skillPackage.sha256) {
36
+ const hash = createHash('sha256').update(bytes).digest('hex');
37
+ if (hash !== String(skillPackage.sha256).trim().toLowerCase()) {
38
+ throw new Error('skill zip checksum mismatch');
39
+ }
40
+ }
41
+ return {
42
+ fileName,
43
+ outputPath,
44
+ bytes: bytes.length,
45
+ };
46
+ }
47
+ export async function runCommand(command, args) {
48
+ await new Promise((resolve, reject) => {
49
+ const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'] });
50
+ let stderr = '';
51
+ child.stderr?.on('data', (chunk) => {
52
+ stderr += String(chunk || '');
53
+ });
54
+ child.on('error', (error) => {
55
+ reject(error);
56
+ });
57
+ child.on('close', (code) => {
58
+ if (code !== 0) {
59
+ reject(new Error(stderr || `${command} exited with code ${code}`));
60
+ return;
61
+ }
62
+ resolve();
63
+ });
64
+ });
65
+ }
66
+ export function escapePowerShellLiteral(text) {
67
+ return String(text || '').replace(/'/g, "''");
68
+ }
69
+ export async function extractSkillZip(zipFilePath, extractRootDir) {
70
+ await fs.rm(extractRootDir, { recursive: true, force: true });
71
+ await fs.mkdir(extractRootDir, { recursive: true });
72
+ if (process.platform === 'win32') {
73
+ const zipLiteral = escapePowerShellLiteral(zipFilePath);
74
+ const targetLiteral = escapePowerShellLiteral(extractRootDir);
75
+ await runCommand('powershell.exe', [
76
+ '-NoLogo',
77
+ '-NoProfile',
78
+ '-Command',
79
+ `Expand-Archive -LiteralPath '${zipLiteral}' -DestinationPath '${targetLiteral}' -Force`,
80
+ ]);
81
+ return;
82
+ }
83
+ await runCommand('unzip', ['-o', zipFilePath, '-d', extractRootDir]);
84
+ }
85
+ export async function resolveSkillSourceDirFromExtractRoot(extractRootDir) {
86
+ const entries = await fs.readdir(extractRootDir, { withFileTypes: true });
87
+ const visible = entries.filter((entry) => !entry.name.startsWith('.'));
88
+ if (visible.length === 1 && visible[0].isDirectory()) {
89
+ return path.join(extractRootDir, visible[0].name);
90
+ }
91
+ return extractRootDir;
92
+ }
93
+ export function toSdkAppsFromEnabledTools(enabledTools) {
94
+ const tools = Array.isArray(enabledTools) ? enabledTools : [];
95
+ const includes = (name) => tools.includes(name);
96
+ return {
97
+ claude: includes('claude'),
98
+ claudecode: includes('claudecode'),
99
+ codex: includes('codex'),
100
+ gemini: includes('gemini'),
101
+ opencode: includes('opencode'),
102
+ openclaw: includes('openclaw'),
103
+ };
104
+ }
105
+ export function resolveSkillSourceDir(skill) {
106
+ const sourceDirCandidate = String(skill?.sourceDir || skill?.directory || skill?.filePath || '').trim();
107
+ if (!sourceDirCandidate) {
108
+ throw new Error('skill.sourceDir is required');
109
+ }
110
+ return path.resolve(sourceDirCandidate);
111
+ }
112
+ export async function ensureDirectoryExists(directoryPath) {
113
+ const stat = await fs.stat(directoryPath);
114
+ if (!stat.isDirectory()) {
115
+ throw new Error(`not a directory: ${directoryPath}`);
116
+ }
117
+ }
118
+ export async function installSkillPackageToSdk(sdk, skillPackage, skillDir, sdkApps) {
119
+ const downloaded = await downloadSkillZip(skillPackage, skillDir);
120
+ if (!downloaded) {
121
+ return null;
122
+ }
123
+ const extractRootDir = path.join(skillDir, `${path.parse(downloaded.fileName).name}-${randomUUID()}`);
124
+ await extractSkillZip(downloaded.outputPath, extractRootDir);
125
+ const sourceDir = await resolveSkillSourceDirFromExtractRoot(extractRootDir);
126
+ const desiredName = String(skillPackage?.skillName || downloaded.fileName || '').trim() || downloaded.fileName;
127
+ const allSkills = sdk.getAllSkills();
128
+ const existing = allSkills.find((item) => String(item?.name || '').trim() === desiredName);
129
+ if (existing) {
130
+ return sdk.updateSkill(existing.id, {
131
+ name: desiredName,
132
+ apps: sdkApps,
133
+ });
134
+ }
135
+ return sdk.installSkill({
136
+ sourceDir,
137
+ name: desiredName,
138
+ apps: sdkApps,
139
+ });
140
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=file-utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.test.d.ts","sourceRoot":"","sources":["../../src/utils/file-utils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,201 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import path from 'node:path';
3
+ import { promises as fs } from 'node:fs';
4
+ import os from 'node:os';
5
+ import { ensureDir, escapePowerShellLiteral, resolveSkillSourceDirFromExtractRoot, toSdkAppsFromEnabledTools, resolveSkillSourceDir, } from './file-utils.js';
6
+ // Mock axios for download tests
7
+ vi.mock('axios', () => ({
8
+ default: {
9
+ get: vi.fn(),
10
+ post: vi.fn(),
11
+ },
12
+ }));
13
+ // Mock config
14
+ vi.mock('../config.js', () => ({
15
+ schedulerBaseUrl: 'http://localhost:8080',
16
+ runtimeToken: 'test-token',
17
+ }));
18
+ describe('file-utils', () => {
19
+ describe('ensureDir', () => {
20
+ const tempDir = path.join(os.tmpdir(), `aws-file-utils-test-${Date.now()}`);
21
+ afterEach(async () => {
22
+ try {
23
+ await fs.rm(tempDir, { recursive: true, force: true });
24
+ }
25
+ catch {
26
+ // ignore
27
+ }
28
+ });
29
+ it('should create directory if not exists', async () => {
30
+ const result = await ensureDir(tempDir);
31
+ expect(result).toBe(tempDir);
32
+ const stat = await fs.stat(tempDir);
33
+ expect(stat.isDirectory()).toBe(true);
34
+ });
35
+ it('should create nested directories', async () => {
36
+ const nestedDir = path.join(tempDir, 'level1', 'level2', 'level3');
37
+ const result = await ensureDir(nestedDir);
38
+ expect(result).toBe(nestedDir);
39
+ const stat = await fs.stat(nestedDir);
40
+ expect(stat.isDirectory()).toBe(true);
41
+ });
42
+ it('should return path if directory already exists', async () => {
43
+ await fs.mkdir(tempDir, { recursive: true });
44
+ const result = await ensureDir(tempDir);
45
+ expect(result).toBe(tempDir);
46
+ });
47
+ });
48
+ describe('escapePowerShellLiteral', () => {
49
+ it('should escape single quotes by doubling them', () => {
50
+ expect(escapePowerShellLiteral("test'value")).toBe("test''value");
51
+ });
52
+ it('should handle multiple single quotes', () => {
53
+ expect(escapePowerShellLiteral("a'b'c")).toBe("a''b''c");
54
+ });
55
+ it('should return empty string for empty input', () => {
56
+ expect(escapePowerShellLiteral('')).toBe('');
57
+ });
58
+ it('should handle null/undefined gracefully', () => {
59
+ expect(escapePowerShellLiteral(null)).toBe('');
60
+ expect(escapePowerShellLiteral(undefined)).toBe('');
61
+ });
62
+ it('should not modify strings without quotes', () => {
63
+ expect(escapePowerShellLiteral('normal path')).toBe('normal path');
64
+ });
65
+ it('should handle path with special characters', () => {
66
+ expect(escapePowerShellLiteral("C:\\Users\\Test's Folder")).toBe("C:\\Users\\Test''s Folder");
67
+ });
68
+ });
69
+ describe('resolveSkillSourceDirFromExtractRoot', () => {
70
+ const tempRoot = path.join(os.tmpdir(), `aws-skill-extract-test-${Date.now()}`);
71
+ beforeEach(async () => {
72
+ await fs.mkdir(tempRoot, { recursive: true });
73
+ });
74
+ afterEach(async () => {
75
+ try {
76
+ await fs.rm(tempRoot, { recursive: true, force: true });
77
+ }
78
+ catch {
79
+ // ignore
80
+ }
81
+ });
82
+ it('should return subdirectory when single visible directory exists', async () => {
83
+ const subDir = path.join(tempRoot, 'skill-package');
84
+ await fs.mkdir(subDir, { recursive: true });
85
+ await fs.writeFile(path.join(subDir, 'skill.md'), 'test', 'utf-8');
86
+ const result = await resolveSkillSourceDirFromExtractRoot(tempRoot);
87
+ expect(result).toBe(subDir);
88
+ });
89
+ it('should return root when multiple visible directories exist', async () => {
90
+ const subDir1 = path.join(tempRoot, 'dir1');
91
+ const subDir2 = path.join(tempRoot, 'dir2');
92
+ await fs.mkdir(subDir1, { recursive: true });
93
+ await fs.mkdir(subDir2, { recursive: true });
94
+ const result = await resolveSkillSourceDirFromExtractRoot(tempRoot);
95
+ expect(result).toBe(tempRoot);
96
+ });
97
+ it('should return root when files exist at root level', async () => {
98
+ await fs.writeFile(path.join(tempRoot, 'skill.md'), 'test', 'utf-8');
99
+ await fs.writeFile(path.join(tempRoot, 'README.md'), 'readme', 'utf-8');
100
+ const result = await resolveSkillSourceDirFromExtractRoot(tempRoot);
101
+ expect(result).toBe(tempRoot);
102
+ });
103
+ it('should ignore hidden directories (starting with dot)', async () => {
104
+ const visibleDir = path.join(tempRoot, 'visible');
105
+ const hiddenDir = path.join(tempRoot, '.hidden');
106
+ await fs.mkdir(visibleDir, { recursive: true });
107
+ await fs.mkdir(hiddenDir, { recursive: true });
108
+ const result = await resolveSkillSourceDirFromExtractRoot(tempRoot);
109
+ expect(result).toBe(visibleDir);
110
+ });
111
+ it('should return root when no visible entries exist', async () => {
112
+ const hiddenDir = path.join(tempRoot, '.hidden');
113
+ await fs.mkdir(hiddenDir, { recursive: true });
114
+ const result = await resolveSkillSourceDirFromExtractRoot(tempRoot);
115
+ expect(result).toBe(tempRoot);
116
+ });
117
+ });
118
+ describe('toSdkAppsFromEnabledTools', () => {
119
+ it('should map enabled tools to app flags', () => {
120
+ const result = toSdkAppsFromEnabledTools(['claude', 'opencode']);
121
+ expect(result.claude).toBe(true);
122
+ expect(result.opencode).toBe(true);
123
+ expect(result.codex).toBe(false);
124
+ expect(result.gemini).toBe(false);
125
+ });
126
+ it('should handle all known tools', () => {
127
+ const result = toSdkAppsFromEnabledTools([
128
+ 'claude',
129
+ 'claudecode',
130
+ 'codex',
131
+ 'gemini',
132
+ 'opencode',
133
+ 'openclaw',
134
+ ]);
135
+ expect(result.claude).toBe(true);
136
+ expect(result.codex).toBe(true);
137
+ expect(result.gemini).toBe(true);
138
+ expect(result.opencode).toBe(true);
139
+ expect(result.openclaw).toBe(true);
140
+ });
141
+ it('should return all false for empty array', () => {
142
+ const result = toSdkAppsFromEnabledTools([]);
143
+ expect(result.claude).toBe(false);
144
+ expect(result.codex).toBe(false);
145
+ expect(result.gemini).toBe(false);
146
+ expect(result.opencode).toBe(false);
147
+ expect(result.openclaw).toBe(false);
148
+ });
149
+ it('should handle null/undefined input', () => {
150
+ const resultNull = toSdkAppsFromEnabledTools(null);
151
+ const resultUndefined = toSdkAppsFromEnabledTools(undefined);
152
+ expect(resultNull.claude).toBe(false);
153
+ expect(resultUndefined.claude).toBe(false);
154
+ });
155
+ it('should ignore unknown tools', () => {
156
+ const result = toSdkAppsFromEnabledTools(['unknown-tool', 'claude']);
157
+ expect(result.claude).toBe(true);
158
+ });
159
+ });
160
+ describe('resolveSkillSourceDir', () => {
161
+ it('should return sourceDir when available', () => {
162
+ const skill = { sourceDir: '/path/to/source' };
163
+ expect(resolveSkillSourceDir(skill)).toBe(path.resolve('/path/to/source'));
164
+ });
165
+ it('should fallback to directory when sourceDir not available', () => {
166
+ const skill = { directory: '/path/to/directory' };
167
+ expect(resolveSkillSourceDir(skill)).toBe(path.resolve('/path/to/directory'));
168
+ });
169
+ it('should fallback to filePath when sourceDir and directory not available', () => {
170
+ const skill = { filePath: '/path/to/file.yaml' };
171
+ expect(resolveSkillSourceDir(skill)).toBe(path.resolve('/path/to/file.yaml'));
172
+ });
173
+ it('should prioritize sourceDir over directory and filePath', () => {
174
+ const skill = {
175
+ sourceDir: '/source',
176
+ directory: '/directory',
177
+ filePath: '/file',
178
+ };
179
+ expect(resolveSkillSourceDir(skill)).toBe(path.resolve('/source'));
180
+ });
181
+ it('should throw error when no path is available', () => {
182
+ const skill = {};
183
+ expect(() => resolveSkillSourceDir(skill)).toThrow('skill.sourceDir is required');
184
+ });
185
+ it('should throw error when skill is null', () => {
186
+ expect(() => resolveSkillSourceDir(null)).toThrow('skill.sourceDir is required');
187
+ });
188
+ it('should throw error when path is empty string', () => {
189
+ const skill = { sourceDir: '' };
190
+ expect(() => resolveSkillSourceDir(skill)).toThrow('skill.sourceDir is required');
191
+ });
192
+ it('should throw error when path is whitespace only', () => {
193
+ const skill = { sourceDir: ' ' };
194
+ expect(() => resolveSkillSourceDir(skill)).toThrow('skill.sourceDir is required');
195
+ });
196
+ it('should trim whitespace from path', () => {
197
+ const skill = { sourceDir: ' /path/to/source ' };
198
+ expect(resolveSkillSourceDir(skill)).toBe(path.resolve('/path/to/source'));
199
+ });
200
+ });
201
+ });
@@ -0,0 +1,39 @@
1
+ /**
2
+ * 统一日志模块
3
+ *
4
+ * 提供结构化日志输出,支持不同日志级别和格式化
5
+ */
6
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
7
+ export interface LogConfig {
8
+ level: LogLevel;
9
+ prefix?: string;
10
+ timestamp?: boolean;
11
+ }
12
+ /**
13
+ * 日志器类
14
+ */
15
+ export declare class Logger {
16
+ private readonly level;
17
+ private readonly prefix;
18
+ private readonly timestamp;
19
+ constructor(config?: LogConfig);
20
+ private shouldLog;
21
+ private formatMessage;
22
+ debug(...args: unknown[]): void;
23
+ info(...args: unknown[]): void;
24
+ warn(...args: unknown[]): void;
25
+ error(...args: unknown[]): void;
26
+ /**
27
+ * 创建子日志器
28
+ */
29
+ child(prefix: string): Logger;
30
+ }
31
+ export declare const logger: {
32
+ debug: (...args: unknown[]) => void;
33
+ info: (...args: unknown[]) => void;
34
+ warn: (...args: unknown[]) => void;
35
+ error: (...args: unknown[]) => void;
36
+ child: (prefix: string) => Logger;
37
+ };
38
+ export declare function createLogger(prefix: string, config?: Partial<LogConfig>): Logger;
39
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAkCD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAExB,MAAM,GAAE,SAA6B;IAMjD,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,aAAa;IAkBrB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM/B;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAO9B;AAQD,eAAO,MAAM,MAAM;qBACA,OAAO,EAAE,KAAG,IAAI;oBACjB,OAAO,EAAE,KAAG,IAAI;oBAChB,OAAO,EAAE,KAAG,IAAI;qBACf,OAAO,EAAE,KAAG,IAAI;oBACjB,MAAM,KAAG,MAAM;CAChC,CAAC;AAGF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAMhF"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * 统一日志模块
3
+ *
4
+ * 提供结构化日志输出,支持不同日志级别和格式化
5
+ */
6
+ const LOG_LEVEL_PRIORITY = {
7
+ debug: 0,
8
+ info: 1,
9
+ warn: 2,
10
+ error: 3,
11
+ };
12
+ /**
13
+ * 格式化时间戳
14
+ */
15
+ function formatTimestamp() {
16
+ return new Date().toISOString();
17
+ }
18
+ /**
19
+ * 格式化日志参数
20
+ */
21
+ function formatArgs(args) {
22
+ return args
23
+ .map((arg) => {
24
+ if (typeof arg === 'object' && arg !== null) {
25
+ try {
26
+ return JSON.stringify(arg, null, 2);
27
+ }
28
+ catch {
29
+ return String(arg);
30
+ }
31
+ }
32
+ return String(arg);
33
+ })
34
+ .join(' ');
35
+ }
36
+ /**
37
+ * 日志器类
38
+ */
39
+ export class Logger {
40
+ constructor(config = { level: 'info' }) {
41
+ this.level = config.level;
42
+ this.prefix = config.prefix || '';
43
+ this.timestamp = config.timestamp ?? true;
44
+ }
45
+ shouldLog(level) {
46
+ return LOG_LEVEL_PRIORITY[level] >= LOG_LEVEL_PRIORITY[this.level];
47
+ }
48
+ formatMessage(level, args) {
49
+ const parts = [];
50
+ if (this.timestamp) {
51
+ parts.push(`[${formatTimestamp()}]`);
52
+ }
53
+ parts.push(`[${level.toUpperCase()}]`);
54
+ if (this.prefix) {
55
+ parts.push(`[${this.prefix}]`);
56
+ }
57
+ parts.push(formatArgs(args));
58
+ return parts.join(' ');
59
+ }
60
+ debug(...args) {
61
+ if (this.shouldLog('debug')) {
62
+ console.debug(this.formatMessage('debug', args));
63
+ }
64
+ }
65
+ info(...args) {
66
+ if (this.shouldLog('info')) {
67
+ console.info(this.formatMessage('info', args));
68
+ }
69
+ }
70
+ warn(...args) {
71
+ if (this.shouldLog('warn')) {
72
+ console.warn(this.formatMessage('warn', args));
73
+ }
74
+ }
75
+ error(...args) {
76
+ if (this.shouldLog('error')) {
77
+ console.error(this.formatMessage('error', args));
78
+ }
79
+ }
80
+ /**
81
+ * 创建子日志器
82
+ */
83
+ child(prefix) {
84
+ return new Logger({
85
+ level: this.level,
86
+ prefix: this.prefix ? `${this.prefix}:${prefix}` : prefix,
87
+ timestamp: this.timestamp,
88
+ });
89
+ }
90
+ }
91
+ // 默认日志器实例
92
+ const defaultLogger = new Logger({
93
+ level: process.env.LOG_LEVEL || 'info',
94
+ });
95
+ // 导出便捷方法
96
+ export const logger = {
97
+ debug: (...args) => defaultLogger.debug(...args),
98
+ info: (...args) => defaultLogger.info(...args),
99
+ warn: (...args) => defaultLogger.warn(...args),
100
+ error: (...args) => defaultLogger.error(...args),
101
+ child: (prefix) => defaultLogger.child(prefix),
102
+ };
103
+ // 创建带前缀的日志器
104
+ export function createLogger(prefix, config) {
105
+ return new Logger({
106
+ level: config?.level || process.env.LOG_LEVEL || 'info',
107
+ prefix,
108
+ timestamp: config?.timestamp,
109
+ });
110
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../src/utils/logger.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { Logger, createLogger, logger } from './logger';
3
+ describe('Logger', () => {
4
+ let consoleSpy;
5
+ beforeEach(() => {
6
+ consoleSpy = {
7
+ debug: vi.spyOn(console, 'debug').mockImplementation(() => { }),
8
+ info: vi.spyOn(console, 'info').mockImplementation(() => { }),
9
+ warn: vi.spyOn(console, 'warn').mockImplementation(() => { }),
10
+ error: vi.spyOn(console, 'error').mockImplementation(() => { }),
11
+ };
12
+ });
13
+ afterEach(() => {
14
+ vi.restoreAllMocks();
15
+ });
16
+ describe('log levels', () => {
17
+ it('should not log debug when level is info', () => {
18
+ const log = new Logger({ level: 'info' });
19
+ log.debug('test message');
20
+ expect(consoleSpy.debug).not.toHaveBeenCalled();
21
+ });
22
+ it('should log info when level is info', () => {
23
+ const log = new Logger({ level: 'info' });
24
+ log.info('test message');
25
+ expect(consoleSpy.info).toHaveBeenCalled();
26
+ });
27
+ it('should log warn when level is info', () => {
28
+ const log = new Logger({ level: 'info' });
29
+ log.warn('test message');
30
+ expect(consoleSpy.warn).toHaveBeenCalled();
31
+ });
32
+ it('should log error when level is info', () => {
33
+ const log = new Logger({ level: 'info' });
34
+ log.error('test message');
35
+ expect(consoleSpy.error).toHaveBeenCalled();
36
+ });
37
+ it('should log all levels when level is debug', () => {
38
+ const log = new Logger({ level: 'debug' });
39
+ log.debug('debug message');
40
+ log.info('info message');
41
+ log.warn('warn message');
42
+ log.error('error message');
43
+ expect(consoleSpy.debug).toHaveBeenCalled();
44
+ expect(consoleSpy.info).toHaveBeenCalled();
45
+ expect(consoleSpy.warn).toHaveBeenCalled();
46
+ expect(consoleSpy.error).toHaveBeenCalled();
47
+ });
48
+ });
49
+ describe('prefix', () => {
50
+ it('should include prefix in log message', () => {
51
+ const log = new Logger({ level: 'info', prefix: 'test-module' });
52
+ log.info('test message');
53
+ expect(consoleSpy.info).toHaveBeenCalledWith(expect.stringContaining('[test-module]'));
54
+ });
55
+ });
56
+ describe('timestamp', () => {
57
+ it('should include timestamp by default', () => {
58
+ const log = new Logger({ level: 'info' });
59
+ log.info('test message');
60
+ expect(consoleSpy.info).toHaveBeenCalledWith(expect.stringMatching(/\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/));
61
+ });
62
+ });
63
+ describe('child logger', () => {
64
+ it('should create child logger with combined prefix', () => {
65
+ const parentLog = new Logger({ level: 'info', prefix: 'parent' });
66
+ const childLog = parentLog.child('child');
67
+ childLog.info('test message');
68
+ expect(consoleSpy.info).toHaveBeenCalledWith(expect.stringContaining('[parent:child]'));
69
+ });
70
+ });
71
+ describe('object formatting', () => {
72
+ it('should format objects in log message', () => {
73
+ const log = new Logger({ level: 'info' });
74
+ log.info('test', { key: 'value' });
75
+ expect(consoleSpy.info).toHaveBeenCalledWith(expect.stringContaining('"key"'));
76
+ });
77
+ });
78
+ });
79
+ describe('createLogger', () => {
80
+ it('should create logger with prefix', () => {
81
+ const log = createLogger('test-prefix');
82
+ expect(log).toBeInstanceOf(Logger);
83
+ });
84
+ });
85
+ describe('default logger', () => {
86
+ it('should export logger methods', () => {
87
+ expect(typeof logger.debug).toBe('function');
88
+ expect(typeof logger.info).toBe('function');
89
+ expect(typeof logger.warn).toBe('function');
90
+ expect(typeof logger.error).toBe('function');
91
+ expect(typeof logger.child).toBe('function');
92
+ });
93
+ });
@@ -0,0 +1,73 @@
1
+ /**
2
+ * MCP 工具函数
3
+ *
4
+ * 提供 MCP 服务器配置的构建、转换和规范化功能
5
+ */
6
+ import type { LegacyMcpStateItem, McpPayload, McpServerConfig, SdkApps } from '../types.js';
7
+ import type { McpServerSpec } from '@cc-switch/sdk';
8
+ /**
9
+ * 构建 MCP 配置内容
10
+ *
11
+ * @param mcpServers - MCP 服务器列表
12
+ * @returns JSON 格式的配置内容
13
+ */
14
+ export declare function buildMcpConfigContent(mcpServers: LegacyMcpStateItem[]): string;
15
+ /**
16
+ * 规范化 MCP Payload
17
+ *
18
+ * @param payload - 原始 payload
19
+ * @returns 规范化后的 MCP Payload,无效返回 null
20
+ */
21
+ export declare function normalizeMcpPayload(payload: unknown): McpPayload | null;
22
+ /**
23
+ * 规范化 SDK App 标志
24
+ *
25
+ * @param rawApps - 原始 apps 配置
26
+ * @returns 规范化后的 SdkApps
27
+ */
28
+ export declare function normalizeSdkAppFlags(rawApps: unknown): SdkApps | undefined;
29
+ /**
30
+ * 规范化 SDK MCP 服务器规格
31
+ *
32
+ * @param rawMcp - 原始 MCP 配置
33
+ * @returns 规范化后的服务器配置
34
+ */
35
+ export declare function normalizeSdkMcpServerSpec(rawMcp: unknown): McpServerSpec;
36
+ /**
37
+ * SDK MCP 服务器接口
38
+ */
39
+ export interface McpServerFromSdk {
40
+ id?: string;
41
+ name?: string;
42
+ server?: McpServerConfig;
43
+ apps?: SdkApps;
44
+ }
45
+ /**
46
+ * 转换为 Legacy MCP State Item
47
+ *
48
+ * @param mcpServer - SDK MCP 服务器对象
49
+ * @returns Legacy MCP State Item
50
+ */
51
+ export declare function toLegacyMcpStateItem(mcpServer: McpServerFromSdk): LegacyMcpStateItem;
52
+ /**
53
+ * 转换为 Legacy Skill State Item
54
+ *
55
+ * @param skill - Skill 对象
56
+ * @returns Legacy Skill State Item
57
+ */
58
+ export declare function toLegacySkillStateItem(skill: {
59
+ id?: string;
60
+ name?: string;
61
+ directory?: string;
62
+ sourceDir?: string;
63
+ filePath?: string;
64
+ installedAt?: string | number;
65
+ }): {
66
+ id: string;
67
+ name: string;
68
+ fileName: string;
69
+ filePath: string;
70
+ bytes: number;
71
+ installedAt: string;
72
+ };
73
+ //# sourceMappingURL=mcp-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-utils.d.ts","sourceRoot":"","sources":["../../src/utils/mcp-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,OAAO,EACR,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAgD9E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAoBvE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAY1E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CA6BxE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,gBAAgB,GAAG,kBAAkB,CAcpF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B,GAAG;IACF,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAA;CACpB,CAUA"}