@wingman-ai/gateway 0.1.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 (418) hide show
  1. package/.wingman/agents/README.md +161 -0
  2. package/.wingman/agents/coding/agent.md +147 -0
  3. package/.wingman/agents/coding/implementor.md +56 -0
  4. package/.wingman/agents/main/agent.md +19 -0
  5. package/.wingman/agents/researcher/agent.md +62 -0
  6. package/.wingman/agents/stock-trader/agent.md +223 -0
  7. package/.wingman/agents/stock-trader/chain-curator.md +24 -0
  8. package/.wingman/agents/stock-trader/goal-translator.md +42 -0
  9. package/.wingman/agents/stock-trader/guardrails-veto.md +11 -0
  10. package/.wingman/agents/stock-trader/path-planner.md +23 -0
  11. package/.wingman/agents/stock-trader/regime-analyst.md +15 -0
  12. package/.wingman/agents/stock-trader/risk.md +20 -0
  13. package/.wingman/agents/stock-trader/selection.md +22 -0
  14. package/.wingman/agents/stock-trader/strategy-composer.md +38 -0
  15. package/.wingman/agents/wingman/agent.json +12 -0
  16. package/bin/wingman +7 -0
  17. package/dist/agent/config/agentConfig.cjs +95 -0
  18. package/dist/agent/config/agentConfig.d.ts +187 -0
  19. package/dist/agent/config/agentConfig.js +52 -0
  20. package/dist/agent/config/agentLoader.cjs +242 -0
  21. package/dist/agent/config/agentLoader.d.ts +42 -0
  22. package/dist/agent/config/agentLoader.js +208 -0
  23. package/dist/agent/config/mcpClientManager.cjs +168 -0
  24. package/dist/agent/config/mcpClientManager.d.ts +41 -0
  25. package/dist/agent/config/mcpClientManager.js +134 -0
  26. package/dist/agent/config/modelFactory.cjs +175 -0
  27. package/dist/agent/config/modelFactory.d.ts +33 -0
  28. package/dist/agent/config/modelFactory.js +141 -0
  29. package/dist/agent/config/toolRegistry.cjs +111 -0
  30. package/dist/agent/config/toolRegistry.d.ts +25 -0
  31. package/dist/agent/config/toolRegistry.js +71 -0
  32. package/dist/agent/middleware/additional-messages.cjs +60 -0
  33. package/dist/agent/middleware/additional-messages.d.ts +7 -0
  34. package/dist/agent/middleware/additional-messages.js +26 -0
  35. package/dist/agent/middleware/hooks/executor.cjs +137 -0
  36. package/dist/agent/middleware/hooks/executor.d.ts +52 -0
  37. package/dist/agent/middleware/hooks/executor.js +103 -0
  38. package/dist/agent/middleware/hooks/input-builder.cjs +55 -0
  39. package/dist/agent/middleware/hooks/input-builder.d.ts +15 -0
  40. package/dist/agent/middleware/hooks/input-builder.js +21 -0
  41. package/dist/agent/middleware/hooks/matcher.cjs +59 -0
  42. package/dist/agent/middleware/hooks/matcher.d.ts +27 -0
  43. package/dist/agent/middleware/hooks/matcher.js +22 -0
  44. package/dist/agent/middleware/hooks/merger.cjs +54 -0
  45. package/dist/agent/middleware/hooks/merger.d.ts +18 -0
  46. package/dist/agent/middleware/hooks/merger.js +20 -0
  47. package/dist/agent/middleware/hooks/types.cjs +62 -0
  48. package/dist/agent/middleware/hooks/types.d.ts +82 -0
  49. package/dist/agent/middleware/hooks/types.js +19 -0
  50. package/dist/agent/middleware/hooks.cjs +79 -0
  51. package/dist/agent/middleware/hooks.d.ts +19 -0
  52. package/dist/agent/middleware/hooks.js +45 -0
  53. package/dist/agent/middleware/media-compat.cjs +80 -0
  54. package/dist/agent/middleware/media-compat.d.ts +7 -0
  55. package/dist/agent/middleware/media-compat.js +46 -0
  56. package/dist/agent/tests/agentConfig.test.cjs +132 -0
  57. package/dist/agent/tests/agentConfig.test.d.ts +1 -0
  58. package/dist/agent/tests/agentConfig.test.js +126 -0
  59. package/dist/agent/tests/agentLoader.test.cjs +235 -0
  60. package/dist/agent/tests/agentLoader.test.d.ts +1 -0
  61. package/dist/agent/tests/agentLoader.test.js +229 -0
  62. package/dist/agent/tests/modelFactory.test.cjs +114 -0
  63. package/dist/agent/tests/modelFactory.test.d.ts +1 -0
  64. package/dist/agent/tests/modelFactory.test.js +108 -0
  65. package/dist/agent/tests/test-agent-loader.cjs +33 -0
  66. package/dist/agent/tests/test-agent-loader.d.ts +1 -0
  67. package/dist/agent/tests/test-agent-loader.js +27 -0
  68. package/dist/agent/tests/test-subagent-loading.cjs +99 -0
  69. package/dist/agent/tests/test-subagent-loading.d.ts +1 -0
  70. package/dist/agent/tests/test-subagent-loading.js +93 -0
  71. package/dist/agent/tests/toolRegistry.test.cjs +109 -0
  72. package/dist/agent/tests/toolRegistry.test.d.ts +1 -0
  73. package/dist/agent/tests/toolRegistry.test.js +103 -0
  74. package/dist/agent/tools/code_search.cjs +108 -0
  75. package/dist/agent/tools/code_search.d.ts +24 -0
  76. package/dist/agent/tools/code_search.js +74 -0
  77. package/dist/agent/tools/command_execute.cjs +136 -0
  78. package/dist/agent/tools/command_execute.d.ts +12 -0
  79. package/dist/agent/tools/command_execute.js +99 -0
  80. package/dist/agent/tools/git_status.cjs +126 -0
  81. package/dist/agent/tools/git_status.d.ts +15 -0
  82. package/dist/agent/tools/git_status.js +92 -0
  83. package/dist/agent/tools/internet_search.cjs +93 -0
  84. package/dist/agent/tools/internet_search.d.ts +25 -0
  85. package/dist/agent/tools/internet_search.js +56 -0
  86. package/dist/agent/tools/think.cjs +53 -0
  87. package/dist/agent/tools/think.d.ts +26 -0
  88. package/dist/agent/tools/think.js +16 -0
  89. package/dist/agent/tools/web_crawler.cjs +180 -0
  90. package/dist/agent/tools/web_crawler.d.ts +31 -0
  91. package/dist/agent/tools/web_crawler.js +143 -0
  92. package/dist/agent/utils.cjs +54 -0
  93. package/dist/agent/utils.d.ts +1 -0
  94. package/dist/agent/utils.js +10 -0
  95. package/dist/cli/commands/agent.cjs +169 -0
  96. package/dist/cli/commands/agent.d.ts +15 -0
  97. package/dist/cli/commands/agent.js +125 -0
  98. package/dist/cli/commands/gateway.cjs +601 -0
  99. package/dist/cli/commands/gateway.d.ts +12 -0
  100. package/dist/cli/commands/gateway.js +567 -0
  101. package/dist/cli/commands/init.cjs +681 -0
  102. package/dist/cli/commands/init.d.ts +10 -0
  103. package/dist/cli/commands/init.js +634 -0
  104. package/dist/cli/commands/provider.cjs +208 -0
  105. package/dist/cli/commands/provider.d.ts +5 -0
  106. package/dist/cli/commands/provider.js +174 -0
  107. package/dist/cli/commands/skill.cjs +145 -0
  108. package/dist/cli/commands/skill.d.ts +10 -0
  109. package/dist/cli/commands/skill.js +111 -0
  110. package/dist/cli/config/loader.cjs +143 -0
  111. package/dist/cli/config/loader.d.ts +14 -0
  112. package/dist/cli/config/loader.js +109 -0
  113. package/dist/cli/config/schema.cjs +262 -0
  114. package/dist/cli/config/schema.d.ts +268 -0
  115. package/dist/cli/config/schema.js +213 -0
  116. package/dist/cli/core/agentInvoker.cjs +284 -0
  117. package/dist/cli/core/agentInvoker.d.ts +77 -0
  118. package/dist/cli/core/agentInvoker.js +247 -0
  119. package/dist/cli/core/commandHandler.cjs +257 -0
  120. package/dist/cli/core/commandHandler.d.ts +62 -0
  121. package/dist/cli/core/commandHandler.js +223 -0
  122. package/dist/cli/core/database/bunSqliteAdapter.cjs +87 -0
  123. package/dist/cli/core/database/bunSqliteAdapter.d.ts +34 -0
  124. package/dist/cli/core/database/bunSqliteAdapter.js +53 -0
  125. package/dist/cli/core/loggerBridge.cjs +42 -0
  126. package/dist/cli/core/loggerBridge.d.ts +8 -0
  127. package/dist/cli/core/loggerBridge.js +8 -0
  128. package/dist/cli/core/outputManager.cjs +106 -0
  129. package/dist/cli/core/outputManager.d.ts +43 -0
  130. package/dist/cli/core/outputManager.js +72 -0
  131. package/dist/cli/core/sessionManager.cjs +535 -0
  132. package/dist/cli/core/sessionManager.d.ts +111 -0
  133. package/dist/cli/core/sessionManager.js +486 -0
  134. package/dist/cli/core/streamParser.cjs +328 -0
  135. package/dist/cli/core/streamParser.d.ts +42 -0
  136. package/dist/cli/core/streamParser.js +288 -0
  137. package/dist/cli/index.cjs +211 -0
  138. package/dist/cli/index.d.ts +2 -0
  139. package/dist/cli/index.js +205 -0
  140. package/dist/cli/services/skillRepository.cjs +178 -0
  141. package/dist/cli/services/skillRepository.d.ts +35 -0
  142. package/dist/cli/services/skillRepository.js +144 -0
  143. package/dist/cli/services/skillService.cjs +336 -0
  144. package/dist/cli/services/skillService.d.ts +48 -0
  145. package/dist/cli/services/skillService.js +302 -0
  146. package/dist/cli/types/gateway.cjs +18 -0
  147. package/dist/cli/types/gateway.d.ts +18 -0
  148. package/dist/cli/types/gateway.js +0 -0
  149. package/dist/cli/types/init.cjs +18 -0
  150. package/dist/cli/types/init.d.ts +13 -0
  151. package/dist/cli/types/init.js +0 -0
  152. package/dist/cli/types/provider.cjs +18 -0
  153. package/dist/cli/types/provider.d.ts +9 -0
  154. package/dist/cli/types/provider.js +0 -0
  155. package/dist/cli/types/skill.cjs +18 -0
  156. package/dist/cli/types/skill.d.ts +71 -0
  157. package/dist/cli/types/skill.js +0 -0
  158. package/dist/cli/types.cjs +18 -0
  159. package/dist/cli/types.d.ts +175 -0
  160. package/dist/cli/types.js +0 -0
  161. package/dist/cli/ui/AgentOutput.cjs +82 -0
  162. package/dist/cli/ui/AgentOutput.d.ts +8 -0
  163. package/dist/cli/ui/AgentOutput.js +38 -0
  164. package/dist/cli/ui/App.cjs +285 -0
  165. package/dist/cli/ui/App.d.ts +6 -0
  166. package/dist/cli/ui/App.js +241 -0
  167. package/dist/cli/ui/ErrorDisplay.cjs +65 -0
  168. package/dist/cli/ui/ErrorDisplay.d.ts +8 -0
  169. package/dist/cli/ui/ErrorDisplay.js +21 -0
  170. package/dist/cli/ui/LogDisplay.cjs +74 -0
  171. package/dist/cli/ui/LogDisplay.d.ts +13 -0
  172. package/dist/cli/ui/LogDisplay.js +30 -0
  173. package/dist/cli/ui/SessionListDisplay.cjs +135 -0
  174. package/dist/cli/ui/SessionListDisplay.d.ts +9 -0
  175. package/dist/cli/ui/SessionListDisplay.js +91 -0
  176. package/dist/cli/ui/blockHelpers.cjs +80 -0
  177. package/dist/cli/ui/blockHelpers.d.ts +21 -0
  178. package/dist/cli/ui/blockHelpers.js +40 -0
  179. package/dist/cli/ui/components/ToolCallDisplay.cjs +207 -0
  180. package/dist/cli/ui/components/ToolCallDisplay.d.ts +7 -0
  181. package/dist/cli/ui/components/ToolCallDisplay.js +162 -0
  182. package/dist/cli/ui/components/ToolResultDisplay.cjs +86 -0
  183. package/dist/cli/ui/components/ToolResultDisplay.d.ts +8 -0
  184. package/dist/cli/ui/components/ToolResultDisplay.js +42 -0
  185. package/dist/cli/ui/toolDisplayHelpers.cjs +112 -0
  186. package/dist/cli/ui/toolDisplayHelpers.d.ts +3 -0
  187. package/dist/cli/ui/toolDisplayHelpers.js +72 -0
  188. package/dist/gateway/adapters/discord.cjs +298 -0
  189. package/dist/gateway/adapters/discord.d.ts +42 -0
  190. package/dist/gateway/adapters/discord.js +246 -0
  191. package/dist/gateway/auth.cjs +94 -0
  192. package/dist/gateway/auth.d.ts +36 -0
  193. package/dist/gateway/auth.js +60 -0
  194. package/dist/gateway/broadcast.cjs +131 -0
  195. package/dist/gateway/broadcast.d.ts +76 -0
  196. package/dist/gateway/broadcast.js +97 -0
  197. package/dist/gateway/client.cjs +282 -0
  198. package/dist/gateway/client.d.ts +141 -0
  199. package/dist/gateway/client.js +248 -0
  200. package/dist/gateway/daemon.cjs +195 -0
  201. package/dist/gateway/daemon.d.ts +67 -0
  202. package/dist/gateway/daemon.js +161 -0
  203. package/dist/gateway/discovery/index.cjs +72 -0
  204. package/dist/gateway/discovery/index.d.ts +3 -0
  205. package/dist/gateway/discovery/index.js +3 -0
  206. package/dist/gateway/discovery/mdns.cjs +221 -0
  207. package/dist/gateway/discovery/mdns.d.ts +37 -0
  208. package/dist/gateway/discovery/mdns.js +177 -0
  209. package/dist/gateway/discovery/tailscale.cjs +140 -0
  210. package/dist/gateway/discovery/tailscale.d.ts +31 -0
  211. package/dist/gateway/discovery/tailscale.js +106 -0
  212. package/dist/gateway/discovery/types.cjs +18 -0
  213. package/dist/gateway/discovery/types.d.ts +41 -0
  214. package/dist/gateway/discovery/types.js +0 -0
  215. package/dist/gateway/env.cjs +45 -0
  216. package/dist/gateway/env.d.ts +2 -0
  217. package/dist/gateway/env.js +8 -0
  218. package/dist/gateway/hooks/loader.cjs +137 -0
  219. package/dist/gateway/hooks/loader.d.ts +10 -0
  220. package/dist/gateway/hooks/loader.js +103 -0
  221. package/dist/gateway/hooks/registry.cjs +128 -0
  222. package/dist/gateway/hooks/registry.d.ts +13 -0
  223. package/dist/gateway/hooks/registry.js +94 -0
  224. package/dist/gateway/hooks/types.cjs +58 -0
  225. package/dist/gateway/hooks/types.d.ts +50 -0
  226. package/dist/gateway/hooks/types.js +18 -0
  227. package/dist/gateway/http/agents.cjs +280 -0
  228. package/dist/gateway/http/agents.d.ts +2 -0
  229. package/dist/gateway/http/agents.js +246 -0
  230. package/dist/gateway/http/fs.cjs +81 -0
  231. package/dist/gateway/http/fs.d.ts +2 -0
  232. package/dist/gateway/http/fs.js +47 -0
  233. package/dist/gateway/http/providers.cjs +120 -0
  234. package/dist/gateway/http/providers.d.ts +2 -0
  235. package/dist/gateway/http/providers.js +86 -0
  236. package/dist/gateway/http/routines.cjs +196 -0
  237. package/dist/gateway/http/routines.d.ts +20 -0
  238. package/dist/gateway/http/routines.js +159 -0
  239. package/dist/gateway/http/sessions.cjs +241 -0
  240. package/dist/gateway/http/sessions.d.ts +2 -0
  241. package/dist/gateway/http/sessions.js +207 -0
  242. package/dist/gateway/http/types.cjs +18 -0
  243. package/dist/gateway/http/types.d.ts +25 -0
  244. package/dist/gateway/http/types.js +0 -0
  245. package/dist/gateway/http/voice.cjs +167 -0
  246. package/dist/gateway/http/voice.d.ts +2 -0
  247. package/dist/gateway/http/voice.js +133 -0
  248. package/dist/gateway/http/webhooks.cjs +353 -0
  249. package/dist/gateway/http/webhooks.d.ts +22 -0
  250. package/dist/gateway/http/webhooks.js +313 -0
  251. package/dist/gateway/index.cjs +119 -0
  252. package/dist/gateway/index.d.ts +8 -0
  253. package/dist/gateway/index.js +9 -0
  254. package/dist/gateway/node.cjs +218 -0
  255. package/dist/gateway/node.d.ts +112 -0
  256. package/dist/gateway/node.js +184 -0
  257. package/dist/gateway/router.cjs +85 -0
  258. package/dist/gateway/router.d.ts +9 -0
  259. package/dist/gateway/router.js +51 -0
  260. package/dist/gateway/rpcClient.cjs +152 -0
  261. package/dist/gateway/rpcClient.d.ts +24 -0
  262. package/dist/gateway/rpcClient.js +118 -0
  263. package/dist/gateway/server.cjs +1175 -0
  264. package/dist/gateway/server.d.ts +185 -0
  265. package/dist/gateway/server.js +1138 -0
  266. package/dist/gateway/transport/http.cjs +153 -0
  267. package/dist/gateway/transport/http.d.ts +25 -0
  268. package/dist/gateway/transport/http.js +119 -0
  269. package/dist/gateway/transport/index.cjs +40 -0
  270. package/dist/gateway/transport/index.d.ts +3 -0
  271. package/dist/gateway/transport/index.js +3 -0
  272. package/dist/gateway/transport/types.cjs +18 -0
  273. package/dist/gateway/transport/types.d.ts +59 -0
  274. package/dist/gateway/transport/types.js +0 -0
  275. package/dist/gateway/transport/websocket.cjs +132 -0
  276. package/dist/gateway/transport/websocket.d.ts +21 -0
  277. package/dist/gateway/transport/websocket.js +98 -0
  278. package/dist/gateway/types.cjs +18 -0
  279. package/dist/gateway/types.d.ts +215 -0
  280. package/dist/gateway/types.js +0 -0
  281. package/dist/gateway/validation.cjs +225 -0
  282. package/dist/gateway/validation.d.ts +157 -0
  283. package/dist/gateway/validation.js +158 -0
  284. package/dist/index.cjs +95 -0
  285. package/dist/index.d.ts +6 -0
  286. package/dist/index.js +6 -0
  287. package/dist/logger.cjs +270 -0
  288. package/dist/logger.d.ts +54 -0
  289. package/dist/logger.js +215 -0
  290. package/dist/providers/copilot.cjs +148 -0
  291. package/dist/providers/copilot.d.ts +3 -0
  292. package/dist/providers/copilot.js +114 -0
  293. package/dist/providers/credentials.cjs +154 -0
  294. package/dist/providers/credentials.d.ts +26 -0
  295. package/dist/providers/credentials.js +99 -0
  296. package/dist/providers/oauth.cjs +279 -0
  297. package/dist/providers/oauth.d.ts +13 -0
  298. package/dist/providers/oauth.js +245 -0
  299. package/dist/providers/registry.cjs +138 -0
  300. package/dist/providers/registry.d.ts +32 -0
  301. package/dist/providers/registry.js +98 -0
  302. package/dist/tests/additionalMessageMiddleware.test.cjs +45 -0
  303. package/dist/tests/additionalMessageMiddleware.test.d.ts +1 -0
  304. package/dist/tests/additionalMessageMiddleware.test.js +39 -0
  305. package/dist/tests/agent-config-voice.test.cjs +25 -0
  306. package/dist/tests/agent-config-voice.test.d.ts +1 -0
  307. package/dist/tests/agent-config-voice.test.js +19 -0
  308. package/dist/tests/agentInvokerAttachments.test.cjs +67 -0
  309. package/dist/tests/agentInvokerAttachments.test.d.ts +1 -0
  310. package/dist/tests/agentInvokerAttachments.test.js +61 -0
  311. package/dist/tests/attachments-utils.test.cjs +46 -0
  312. package/dist/tests/attachments-utils.test.d.ts +1 -0
  313. package/dist/tests/attachments-utils.test.js +40 -0
  314. package/dist/tests/bunSqliteAdapter.test.cjs +265 -0
  315. package/dist/tests/bunSqliteAdapter.test.d.ts +1 -0
  316. package/dist/tests/bunSqliteAdapter.test.js +259 -0
  317. package/dist/tests/candleRange.test.cjs +48 -0
  318. package/dist/tests/candleRange.test.d.ts +1 -0
  319. package/dist/tests/candleRange.test.js +42 -0
  320. package/dist/tests/cli-config-loader.test.cjs +364 -0
  321. package/dist/tests/cli-config-loader.test.d.ts +1 -0
  322. package/dist/tests/cli-config-loader.test.js +358 -0
  323. package/dist/tests/cli-init.test.cjs +82 -0
  324. package/dist/tests/cli-init.test.d.ts +1 -0
  325. package/dist/tests/cli-init.test.js +76 -0
  326. package/dist/tests/discord-adapter.test.cjs +55 -0
  327. package/dist/tests/discord-adapter.test.d.ts +1 -0
  328. package/dist/tests/discord-adapter.test.js +49 -0
  329. package/dist/tests/gateway.test.cjs +319 -0
  330. package/dist/tests/gateway.test.d.ts +1 -0
  331. package/dist/tests/gateway.test.js +313 -0
  332. package/dist/tests/hooks-matcher.test.cjs +309 -0
  333. package/dist/tests/hooks-matcher.test.d.ts +1 -0
  334. package/dist/tests/hooks-matcher.test.js +303 -0
  335. package/dist/tests/hooks-merger.test.cjs +528 -0
  336. package/dist/tests/hooks-merger.test.d.ts +1 -0
  337. package/dist/tests/hooks-merger.test.js +522 -0
  338. package/dist/tests/integration/agent-invocation.integration.test.cjs +264 -0
  339. package/dist/tests/integration/agent-invocation.integration.test.d.ts +1 -0
  340. package/dist/tests/integration/agent-invocation.integration.test.js +258 -0
  341. package/dist/tests/integration/finnhub-candles.integration.test.cjs +98 -0
  342. package/dist/tests/integration/finnhub-candles.integration.test.d.ts +1 -0
  343. package/dist/tests/integration/finnhub-candles.integration.test.js +92 -0
  344. package/dist/tests/logger.test.cjs +353 -0
  345. package/dist/tests/logger.test.d.ts +1 -0
  346. package/dist/tests/logger.test.js +347 -0
  347. package/dist/tests/mediaCompatibilityMiddleware.test.cjs +106 -0
  348. package/dist/tests/mediaCompatibilityMiddleware.test.d.ts +1 -0
  349. package/dist/tests/mediaCompatibilityMiddleware.test.js +100 -0
  350. package/dist/tests/routines-api.test.cjs +107 -0
  351. package/dist/tests/routines-api.test.d.ts +1 -0
  352. package/dist/tests/routines-api.test.js +101 -0
  353. package/dist/tests/sessionMessageAttachments.test.cjs +108 -0
  354. package/dist/tests/sessionMessageAttachments.test.d.ts +1 -0
  355. package/dist/tests/sessionMessageAttachments.test.js +102 -0
  356. package/dist/tests/sessionMessageRole.test.cjs +44 -0
  357. package/dist/tests/sessionMessageRole.test.d.ts +1 -0
  358. package/dist/tests/sessionMessageRole.test.js +38 -0
  359. package/dist/tests/sessionStateMessages.test.cjs +72 -0
  360. package/dist/tests/sessionStateMessages.test.d.ts +1 -0
  361. package/dist/tests/sessionStateMessages.test.js +66 -0
  362. package/dist/tests/sessions-api.test.cjs +68 -0
  363. package/dist/tests/sessions-api.test.d.ts +1 -0
  364. package/dist/tests/sessions-api.test.js +62 -0
  365. package/dist/tests/technicalIndicators.test.cjs +82 -0
  366. package/dist/tests/technicalIndicators.test.d.ts +1 -0
  367. package/dist/tests/technicalIndicators.test.js +76 -0
  368. package/dist/tests/toolDisplayHelpers.test.cjs +43 -0
  369. package/dist/tests/toolDisplayHelpers.test.d.ts +1 -0
  370. package/dist/tests/toolDisplayHelpers.test.js +37 -0
  371. package/dist/tests/voice-config.test.cjs +35 -0
  372. package/dist/tests/voice-config.test.d.ts +1 -0
  373. package/dist/tests/voice-config.test.js +29 -0
  374. package/dist/tests/yahooCandles.test.cjs +111 -0
  375. package/dist/tests/yahooCandles.test.d.ts +1 -0
  376. package/dist/tests/yahooCandles.test.js +105 -0
  377. package/dist/tools/finance/candleRange.cjs +71 -0
  378. package/dist/tools/finance/candleRange.d.ts +21 -0
  379. package/dist/tools/finance/candleRange.js +28 -0
  380. package/dist/tools/finance/optionsAnalytics.cjs +222 -0
  381. package/dist/tools/finance/optionsAnalytics.d.ts +44 -0
  382. package/dist/tools/finance/optionsAnalytics.js +188 -0
  383. package/dist/tools/finance/optionsAnalytics.test.cjs +128 -0
  384. package/dist/tools/finance/optionsAnalytics.test.d.ts +1 -0
  385. package/dist/tools/finance/optionsAnalytics.test.js +122 -0
  386. package/dist/tools/finance/technicalIndicators.cjs +111 -0
  387. package/dist/tools/finance/technicalIndicators.d.ts +15 -0
  388. package/dist/tools/finance/technicalIndicators.js +68 -0
  389. package/dist/tools/finance/yahooCandles.cjs +125 -0
  390. package/dist/tools/finance/yahooCandles.d.ts +41 -0
  391. package/dist/tools/finance/yahooCandles.js +85 -0
  392. package/dist/tools/mcp-finance.cjs +649 -0
  393. package/dist/tools/mcp-finance.d.ts +1 -0
  394. package/dist/tools/mcp-finance.js +631 -0
  395. package/dist/types/agents.cjs +18 -0
  396. package/dist/types/agents.d.ts +11 -0
  397. package/dist/types/agents.js +0 -0
  398. package/dist/types/hooks.cjs +18 -0
  399. package/dist/types/hooks.d.ts +82 -0
  400. package/dist/types/hooks.js +0 -0
  401. package/dist/types/mcp.cjs +86 -0
  402. package/dist/types/mcp.d.ts +107 -0
  403. package/dist/types/mcp.js +40 -0
  404. package/dist/types/voice.cjs +103 -0
  405. package/dist/types/voice.d.ts +117 -0
  406. package/dist/types/voice.js +51 -0
  407. package/dist/utils/attachments.cjs +46 -0
  408. package/dist/utils/attachments.d.ts +7 -0
  409. package/dist/utils/attachments.js +12 -0
  410. package/dist/voice/config.cjs +52 -0
  411. package/dist/voice/config.d.ts +8 -0
  412. package/dist/voice/config.js +18 -0
  413. package/dist/webui/assets/index-BA0HaStz.css +1 -0
  414. package/dist/webui/assets/index-NHgTZsWN.js +112 -0
  415. package/dist/webui/assets/wingman_icon-DOy91UEF.webp +0 -0
  416. package/dist/webui/assets/wingman_logo-Cogyt3qm.webp +0 -0
  417. package/dist/webui/index.html +19 -0
  418. package/package.json +130 -0
@@ -0,0 +1,211 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __webpack_exports__ = {};
4
+ const external_logger_cjs_namespaceObject = require("../logger.cjs");
5
+ const loader_cjs_namespaceObject = require("./config/loader.cjs");
6
+ const env_cjs_namespaceObject = require("../gateway/env.cjs");
7
+ const outputManager_cjs_namespaceObject = require("./core/outputManager.cjs");
8
+ const agent_cjs_namespaceObject = require("./commands/agent.cjs");
9
+ const skill_cjs_namespaceObject = require("./commands/skill.cjs");
10
+ const gateway_cjs_namespaceObject = require("./commands/gateway.cjs");
11
+ const provider_cjs_namespaceObject = require("./commands/provider.cjs");
12
+ const init_cjs_namespaceObject = require("./commands/init.cjs");
13
+ function parseArgs(argv) {
14
+ const args = argv.slice(2);
15
+ if (args.includes("--help") || args.includes("-h")) return {
16
+ command: "",
17
+ subcommand: "",
18
+ subcommandArgs: [],
19
+ help: true,
20
+ prompt: ""
21
+ };
22
+ const parsed = {
23
+ command: args[0] || "",
24
+ subcommand: args[1] || "",
25
+ subcommandArgs: args.slice(2),
26
+ agent: void 0,
27
+ verbosity: void 0,
28
+ outputMode: void 0,
29
+ help: false,
30
+ prompt: "",
31
+ commandOptions: {}
32
+ };
33
+ const promptParts = [];
34
+ for(let i = 1; i < args.length; i++){
35
+ const arg = args[i];
36
+ if ("--agent" === arg && i + 1 < args.length) {
37
+ parsed.agent = args[i + 1];
38
+ i++;
39
+ } else if (arg.startsWith("--agent=")) parsed.agent = arg.split("=")[1];
40
+ else if (arg.startsWith("--verbose=")) parsed.verbosity = arg.split("=")[1];
41
+ else if (arg.startsWith("--output=")) parsed.outputMode = arg.split("=")[1];
42
+ else if (arg.startsWith("-v")) {
43
+ const vCount = arg.split("").filter((c)=>"v" === c).length;
44
+ parsed.verbosity = vCount >= 2 ? "debug" : "info";
45
+ } else if (arg.startsWith("--")) {
46
+ const [key, value] = arg.slice(2).split("=");
47
+ if (void 0 !== value) parsed.commandOptions[key] = value;
48
+ else if (i + 1 < args.length && !args[i + 1].startsWith("--")) {
49
+ parsed.commandOptions[key] = args[i + 1];
50
+ i++;
51
+ } else parsed.commandOptions[key] = true;
52
+ } else promptParts.push(arg);
53
+ }
54
+ parsed.prompt = promptParts.join(" ");
55
+ return parsed;
56
+ }
57
+ function determineVerbosity(cliVerbosity, configLevel) {
58
+ if (cliVerbosity) {
59
+ const validLevels = [
60
+ "debug",
61
+ "info",
62
+ "warn",
63
+ "error",
64
+ "silent"
65
+ ];
66
+ if (validLevels.includes(cliVerbosity)) return cliVerbosity;
67
+ }
68
+ return configLevel;
69
+ }
70
+ function showHelp() {
71
+ console.log(`
72
+ Wingman CLI - AI coding assistant
73
+
74
+ Usage:
75
+ wingman agent --agent <name> [options] <prompt>
76
+ wingman init [options]
77
+ wingman skill <subcommand> [args]
78
+ wingman provider <subcommand> [options]
79
+ wingman gateway <subcommand> [options]
80
+
81
+ Commands:
82
+ agent Invoke a specific agent directly
83
+ init Create a starter config + agent (onboarding)
84
+ skill browse Browse available skills from repository
85
+ skill install <name> Install a skill
86
+ skill list List installed skills
87
+ skill remove <name> Remove an installed skill
88
+ provider login <provider> Store provider credentials
89
+ provider logout <provider> Remove stored provider credentials
90
+ provider status Show provider configuration status
91
+ gateway start Start the gateway server
92
+ gateway stop Stop the gateway server
93
+ gateway status Show gateway status
94
+ gateway join <url> Join a gateway as a node
95
+
96
+ Options:
97
+ --agent <name> Agent name to invoke (required for agent command)
98
+ --local Run agent locally instead of via gateway
99
+ --gateway <url> Gateway URL (default from config)
100
+ --token <token> Gateway auth token
101
+ --password <value> Gateway auth password
102
+ --output=<mode> Output mode (interactive|json), overrides auto-detect
103
+ -v, -vv Verbosity level (v=info, vv=debug)
104
+ --verbose=<level> Set log level (debug|info|warn|error|silent)
105
+ -h, --help Show this help message
106
+
107
+ Examples:
108
+ wingman agent --agent researcher "what is quantum computing"
109
+ wingman agent --agent coder -vv "add a login function"
110
+ wingman agent --agent coder --local "fix the tests"
111
+ wingman agent --agent coder --gateway ws://localhost:18789/ws --token sk-... "ship it"
112
+ wingman init
113
+ wingman skill browse
114
+ wingman skill install pdf
115
+ wingman skill list
116
+ wingman provider status
117
+ wingman provider login copilot --token="<token>"
118
+ wingman gateway start
119
+ wingman gateway join ws://localhost:3000/ws --name="agent-1"
120
+
121
+ Available agents:
122
+ Run "wingman agent" without a prompt to list all available agents.
123
+
124
+ For gateway help:
125
+ wingman gateway --help
126
+ `);
127
+ }
128
+ async function main() {
129
+ try {
130
+ const parsed = parseArgs(process.argv);
131
+ if (parsed.help || !parsed.command) {
132
+ showHelp();
133
+ process.exit(0);
134
+ }
135
+ const configLoader = new loader_cjs_namespaceObject.WingmanConfigLoader();
136
+ const config = configLoader.loadConfig();
137
+ let outputMode;
138
+ outputMode = "interactive" === parsed.outputMode || "json" === parsed.outputMode ? parsed.outputMode : "auto" === config.cli.outputMode ? outputManager_cjs_namespaceObject.OutputManager.detectMode() : config.cli.outputMode;
139
+ const verbosity = determineVerbosity(parsed.verbosity, config.logLevel);
140
+ if ("agent" === parsed.command) {
141
+ const commandArgs = {
142
+ agent: parsed.agent || config.defaultAgent,
143
+ verbosity,
144
+ outputMode,
145
+ prompt: parsed.prompt
146
+ };
147
+ const gatewayConfig = config.gateway;
148
+ const gatewayUrl = parsed.commandOptions?.gateway || parsed.commandOptions?.gatewayUrl || (gatewayConfig ? `ws://${gatewayConfig.host}:${gatewayConfig.port}/ws` : void 0);
149
+ const token = parsed.commandOptions?.token || gatewayConfig?.auth?.token || (0, env_cjs_namespaceObject.getGatewayTokenFromEnv)();
150
+ const password = parsed.commandOptions?.password || gatewayConfig?.auth?.password;
151
+ await (0, agent_cjs_namespaceObject.executeAgentCommand)(commandArgs, {
152
+ local: Boolean(parsed.commandOptions?.local),
153
+ gatewayUrl,
154
+ token,
155
+ password
156
+ });
157
+ } else if ("skill" === parsed.command) {
158
+ const commandArgs = {
159
+ subcommand: parsed.subcommand,
160
+ args: parsed.subcommandArgs,
161
+ verbosity,
162
+ outputMode
163
+ };
164
+ await (0, skill_cjs_namespaceObject.executeSkillCommand)(commandArgs);
165
+ } else if ("gateway" === parsed.command) {
166
+ const commandArgs = {
167
+ subcommand: parsed.subcommand,
168
+ args: parsed.subcommandArgs,
169
+ options: parsed.commandOptions || {}
170
+ };
171
+ await (0, gateway_cjs_namespaceObject.executeGatewayCommand)(commandArgs);
172
+ } else if ("provider" === parsed.command) {
173
+ const commandArgs = {
174
+ subcommand: parsed.subcommand,
175
+ args: parsed.subcommandArgs,
176
+ verbosity,
177
+ outputMode,
178
+ options: parsed.commandOptions || {}
179
+ };
180
+ await (0, provider_cjs_namespaceObject.executeProviderCommand)(commandArgs);
181
+ } else if ("init" === parsed.command || "onboard" === parsed.command) {
182
+ const commandArgs = {
183
+ subcommand: parsed.subcommand,
184
+ args: parsed.subcommandArgs,
185
+ verbosity,
186
+ outputMode,
187
+ options: parsed.commandOptions || {},
188
+ agent: parsed.agent
189
+ };
190
+ await (0, init_cjs_namespaceObject.executeInitCommand)(commandArgs);
191
+ } else {
192
+ const logFile = (0, external_logger_cjs_namespaceObject.getLogFilePath)();
193
+ (0, external_logger_cjs_namespaceObject.createLogger)(verbosity).error(`Unknown command: ${parsed.command}`);
194
+ console.error(`Unknown command: ${parsed.command}`);
195
+ console.error('Run "wingman --help" for usage information');
196
+ console.error(`Logs: ${logFile}`);
197
+ process.exit(1);
198
+ }
199
+ } catch (error) {
200
+ const logFile = (0, external_logger_cjs_namespaceObject.getLogFilePath)();
201
+ (0, external_logger_cjs_namespaceObject.createLogger)().error("Fatal error", error instanceof Error ? error.message : String(error));
202
+ console.error(`Fatal error: ${error instanceof Error ? error.message : String(error)}`);
203
+ console.error(`Logs: ${logFile}`);
204
+ process.exit(1);
205
+ }
206
+ }
207
+ main();
208
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
209
+ Object.defineProperty(exports, '__esModule', {
210
+ value: true
211
+ });
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,205 @@
1
+ #!/usr/bin/env node
2
+ import { createLogger, getLogFilePath } from "../logger.js";
3
+ import { WingmanConfigLoader } from "./config/loader.js";
4
+ import { getGatewayTokenFromEnv } from "../gateway/env.js";
5
+ import { OutputManager } from "./core/outputManager.js";
6
+ import { executeAgentCommand } from "./commands/agent.js";
7
+ import { executeSkillCommand } from "./commands/skill.js";
8
+ import { executeGatewayCommand } from "./commands/gateway.js";
9
+ import { executeProviderCommand } from "./commands/provider.js";
10
+ import { executeInitCommand } from "./commands/init.js";
11
+ function parseArgs(argv) {
12
+ const args = argv.slice(2);
13
+ if (args.includes("--help") || args.includes("-h")) return {
14
+ command: "",
15
+ subcommand: "",
16
+ subcommandArgs: [],
17
+ help: true,
18
+ prompt: ""
19
+ };
20
+ const parsed = {
21
+ command: args[0] || "",
22
+ subcommand: args[1] || "",
23
+ subcommandArgs: args.slice(2),
24
+ agent: void 0,
25
+ verbosity: void 0,
26
+ outputMode: void 0,
27
+ help: false,
28
+ prompt: "",
29
+ commandOptions: {}
30
+ };
31
+ const promptParts = [];
32
+ for(let i = 1; i < args.length; i++){
33
+ const arg = args[i];
34
+ if ("--agent" === arg && i + 1 < args.length) {
35
+ parsed.agent = args[i + 1];
36
+ i++;
37
+ } else if (arg.startsWith("--agent=")) parsed.agent = arg.split("=")[1];
38
+ else if (arg.startsWith("--verbose=")) parsed.verbosity = arg.split("=")[1];
39
+ else if (arg.startsWith("--output=")) parsed.outputMode = arg.split("=")[1];
40
+ else if (arg.startsWith("-v")) {
41
+ const vCount = arg.split("").filter((c)=>"v" === c).length;
42
+ parsed.verbosity = vCount >= 2 ? "debug" : "info";
43
+ } else if (arg.startsWith("--")) {
44
+ const [key, value] = arg.slice(2).split("=");
45
+ if (void 0 !== value) parsed.commandOptions[key] = value;
46
+ else if (i + 1 < args.length && !args[i + 1].startsWith("--")) {
47
+ parsed.commandOptions[key] = args[i + 1];
48
+ i++;
49
+ } else parsed.commandOptions[key] = true;
50
+ } else promptParts.push(arg);
51
+ }
52
+ parsed.prompt = promptParts.join(" ");
53
+ return parsed;
54
+ }
55
+ function determineVerbosity(cliVerbosity, configLevel) {
56
+ if (cliVerbosity) {
57
+ const validLevels = [
58
+ "debug",
59
+ "info",
60
+ "warn",
61
+ "error",
62
+ "silent"
63
+ ];
64
+ if (validLevels.includes(cliVerbosity)) return cliVerbosity;
65
+ }
66
+ return configLevel;
67
+ }
68
+ function showHelp() {
69
+ console.log(`
70
+ Wingman CLI - AI coding assistant
71
+
72
+ Usage:
73
+ wingman agent --agent <name> [options] <prompt>
74
+ wingman init [options]
75
+ wingman skill <subcommand> [args]
76
+ wingman provider <subcommand> [options]
77
+ wingman gateway <subcommand> [options]
78
+
79
+ Commands:
80
+ agent Invoke a specific agent directly
81
+ init Create a starter config + agent (onboarding)
82
+ skill browse Browse available skills from repository
83
+ skill install <name> Install a skill
84
+ skill list List installed skills
85
+ skill remove <name> Remove an installed skill
86
+ provider login <provider> Store provider credentials
87
+ provider logout <provider> Remove stored provider credentials
88
+ provider status Show provider configuration status
89
+ gateway start Start the gateway server
90
+ gateway stop Stop the gateway server
91
+ gateway status Show gateway status
92
+ gateway join <url> Join a gateway as a node
93
+
94
+ Options:
95
+ --agent <name> Agent name to invoke (required for agent command)
96
+ --local Run agent locally instead of via gateway
97
+ --gateway <url> Gateway URL (default from config)
98
+ --token <token> Gateway auth token
99
+ --password <value> Gateway auth password
100
+ --output=<mode> Output mode (interactive|json), overrides auto-detect
101
+ -v, -vv Verbosity level (v=info, vv=debug)
102
+ --verbose=<level> Set log level (debug|info|warn|error|silent)
103
+ -h, --help Show this help message
104
+
105
+ Examples:
106
+ wingman agent --agent researcher "what is quantum computing"
107
+ wingman agent --agent coder -vv "add a login function"
108
+ wingman agent --agent coder --local "fix the tests"
109
+ wingman agent --agent coder --gateway ws://localhost:18789/ws --token sk-... "ship it"
110
+ wingman init
111
+ wingman skill browse
112
+ wingman skill install pdf
113
+ wingman skill list
114
+ wingman provider status
115
+ wingman provider login copilot --token="<token>"
116
+ wingman gateway start
117
+ wingman gateway join ws://localhost:3000/ws --name="agent-1"
118
+
119
+ Available agents:
120
+ Run "wingman agent" without a prompt to list all available agents.
121
+
122
+ For gateway help:
123
+ wingman gateway --help
124
+ `);
125
+ }
126
+ async function main() {
127
+ try {
128
+ const parsed = parseArgs(process.argv);
129
+ if (parsed.help || !parsed.command) {
130
+ showHelp();
131
+ process.exit(0);
132
+ }
133
+ const configLoader = new WingmanConfigLoader();
134
+ const config = configLoader.loadConfig();
135
+ let outputMode;
136
+ outputMode = "interactive" === parsed.outputMode || "json" === parsed.outputMode ? parsed.outputMode : "auto" === config.cli.outputMode ? OutputManager.detectMode() : config.cli.outputMode;
137
+ const verbosity = determineVerbosity(parsed.verbosity, config.logLevel);
138
+ if ("agent" === parsed.command) {
139
+ const commandArgs = {
140
+ agent: parsed.agent || config.defaultAgent,
141
+ verbosity,
142
+ outputMode,
143
+ prompt: parsed.prompt
144
+ };
145
+ const gatewayConfig = config.gateway;
146
+ const gatewayUrl = parsed.commandOptions?.gateway || parsed.commandOptions?.gatewayUrl || (gatewayConfig ? `ws://${gatewayConfig.host}:${gatewayConfig.port}/ws` : void 0);
147
+ const token = parsed.commandOptions?.token || gatewayConfig?.auth?.token || getGatewayTokenFromEnv();
148
+ const password = parsed.commandOptions?.password || gatewayConfig?.auth?.password;
149
+ await executeAgentCommand(commandArgs, {
150
+ local: Boolean(parsed.commandOptions?.local),
151
+ gatewayUrl,
152
+ token,
153
+ password
154
+ });
155
+ } else if ("skill" === parsed.command) {
156
+ const commandArgs = {
157
+ subcommand: parsed.subcommand,
158
+ args: parsed.subcommandArgs,
159
+ verbosity,
160
+ outputMode
161
+ };
162
+ await executeSkillCommand(commandArgs);
163
+ } else if ("gateway" === parsed.command) {
164
+ const commandArgs = {
165
+ subcommand: parsed.subcommand,
166
+ args: parsed.subcommandArgs,
167
+ options: parsed.commandOptions || {}
168
+ };
169
+ await executeGatewayCommand(commandArgs);
170
+ } else if ("provider" === parsed.command) {
171
+ const commandArgs = {
172
+ subcommand: parsed.subcommand,
173
+ args: parsed.subcommandArgs,
174
+ verbosity,
175
+ outputMode,
176
+ options: parsed.commandOptions || {}
177
+ };
178
+ await executeProviderCommand(commandArgs);
179
+ } else if ("init" === parsed.command || "onboard" === parsed.command) {
180
+ const commandArgs = {
181
+ subcommand: parsed.subcommand,
182
+ args: parsed.subcommandArgs,
183
+ verbosity,
184
+ outputMode,
185
+ options: parsed.commandOptions || {},
186
+ agent: parsed.agent
187
+ };
188
+ await executeInitCommand(commandArgs);
189
+ } else {
190
+ const logFile = getLogFilePath();
191
+ createLogger(verbosity).error(`Unknown command: ${parsed.command}`);
192
+ console.error(`Unknown command: ${parsed.command}`);
193
+ console.error('Run "wingman --help" for usage information');
194
+ console.error(`Logs: ${logFile}`);
195
+ process.exit(1);
196
+ }
197
+ } catch (error) {
198
+ const logFile = getLogFilePath();
199
+ createLogger().error("Fatal error", error instanceof Error ? error.message : String(error));
200
+ console.error(`Fatal error: ${error instanceof Error ? error.message : String(error)}`);
201
+ console.error(`Logs: ${logFile}`);
202
+ process.exit(1);
203
+ }
204
+ }
205
+ main();
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ SkillRepository: ()=>SkillRepository
28
+ });
29
+ const external_logger_cjs_namespaceObject = require("../../logger.cjs");
30
+ function _define_property(obj, key, value) {
31
+ if (key in obj) Object.defineProperty(obj, key, {
32
+ value: value,
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true
36
+ });
37
+ else obj[key] = value;
38
+ return obj;
39
+ }
40
+ const logger = (0, external_logger_cjs_namespaceObject.createLogger)();
41
+ class SkillRepository {
42
+ async fetch(path) {
43
+ const url = `${this.baseUrl}${path}`;
44
+ const headers = {
45
+ Accept: "application/vnd.github.v3+json",
46
+ "User-Agent": "wingman-cli"
47
+ };
48
+ if (this.token) headers.Authorization = `Bearer ${this.token}`;
49
+ const response = await fetch(url, {
50
+ headers
51
+ });
52
+ if (!response.ok) {
53
+ if (403 === response.status) {
54
+ const resetTime = response.headers.get("X-RateLimit-Reset");
55
+ const resetDate = resetTime ? new Date(1000 * Number.parseInt(resetTime)) : null;
56
+ throw new Error(`GitHub API rate limit exceeded. ${resetDate ? `Resets at ${resetDate.toLocaleString()}.` : ""} Set GITHUB_TOKEN environment variable for higher limits (5000/hour vs 60/hour).`);
57
+ }
58
+ if (404 === response.status) throw new Error(`Resource not found: ${path}`);
59
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
60
+ }
61
+ return response.json();
62
+ }
63
+ async listAvailableSkills() {
64
+ try {
65
+ const contents = await this.fetch(`/repos/${this.owner}/${this.repo}/contents/skills`);
66
+ const skills = [];
67
+ for (const item of contents)if ("dir" === item.type) try {
68
+ const metadata = await this.getSkillMetadata(item.name);
69
+ skills.push({
70
+ name: item.name,
71
+ description: metadata.description || "No description",
72
+ path: item.path,
73
+ metadata
74
+ });
75
+ } catch (error) {
76
+ logger.warn(`Could not read skill ${item.name}`, error instanceof Error ? error.message : String(error));
77
+ }
78
+ return skills;
79
+ } catch (error) {
80
+ if (error instanceof Error) throw new Error(`Failed to list skills: ${error.message}`);
81
+ throw error;
82
+ }
83
+ }
84
+ async getSkillMetadata(skillName) {
85
+ try {
86
+ const skillMdPath = `/repos/${this.owner}/${this.repo}/contents/skills/${skillName}/SKILL.md`;
87
+ const skillMd = await this.fetch(skillMdPath);
88
+ if ("file" !== skillMd.type || !skillMd.content) throw new Error("SKILL.md not found or invalid");
89
+ const content = Buffer.from(skillMd.content, "base64").toString("utf-8");
90
+ const metadata = this.parseSkillMetadata(content);
91
+ return metadata;
92
+ } catch (error) {
93
+ if (error instanceof Error) throw new Error(`Failed to fetch skill metadata for ${skillName}: ${error.message}`);
94
+ throw error;
95
+ }
96
+ }
97
+ parseSkillMetadata(content) {
98
+ const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---/;
99
+ const match = content.match(frontmatterRegex);
100
+ if (!match) throw new Error("Invalid SKILL.md format: missing YAML frontmatter");
101
+ const frontmatter = match[1];
102
+ const metadata = {
103
+ name: "",
104
+ description: ""
105
+ };
106
+ const lines = frontmatter.split("\n");
107
+ for (const line of lines){
108
+ const colonIndex = line.indexOf(":");
109
+ if (-1 === colonIndex) continue;
110
+ const key = line.substring(0, colonIndex).trim();
111
+ const value = line.substring(colonIndex + 1).trim();
112
+ switch(key){
113
+ case "name":
114
+ metadata.name = value;
115
+ break;
116
+ case "description":
117
+ metadata.description = value;
118
+ break;
119
+ case "license":
120
+ metadata.license = value;
121
+ break;
122
+ case "compatibility":
123
+ metadata.compatibility = value;
124
+ break;
125
+ case "allowed-tools":
126
+ metadata.allowedTools = value;
127
+ break;
128
+ }
129
+ }
130
+ if (!metadata.name) throw new Error("Invalid SKILL.md: missing required field 'name'");
131
+ if (!metadata.description) throw new Error("Invalid SKILL.md: missing required field 'description'");
132
+ const nameRegex = /^[a-z0-9]+(-[a-z0-9]+)*$/;
133
+ if (!nameRegex.test(metadata.name)) throw new Error(`Invalid skill name '${metadata.name}': must be lowercase alphanumeric with hyphens only`);
134
+ return metadata;
135
+ }
136
+ async downloadSkill(skillName) {
137
+ try {
138
+ const files = new Map();
139
+ await this.downloadDirectory(`skills/${skillName}`, files, skillName);
140
+ return files;
141
+ } catch (error) {
142
+ if (error instanceof Error) throw new Error(`Failed to download skill ${skillName}: ${error.message}`);
143
+ throw error;
144
+ }
145
+ }
146
+ async downloadDirectory(path, files, skillName) {
147
+ const contents = await this.fetch(`/repos/${this.owner}/${this.repo}/contents/${path}`);
148
+ for (const item of contents)if ("file" === item.type) if (item.content) {
149
+ const content = Buffer.from(item.content, "base64");
150
+ const relativePath = item.path.replace(`skills/${skillName}/`, "");
151
+ files.set(relativePath, content);
152
+ } else {
153
+ const fileData = await this.fetch(item.url.replace(this.baseUrl, ""));
154
+ if (fileData.content && "base64" === fileData.encoding) {
155
+ const content = Buffer.from(fileData.content, "base64");
156
+ const relativePath = item.path.replace(`skills/${skillName}/`, "");
157
+ files.set(relativePath, content);
158
+ }
159
+ }
160
+ else if ("dir" === item.type) await this.downloadDirectory(item.path, files, skillName);
161
+ }
162
+ constructor(options = {}){
163
+ _define_property(this, "baseUrl", "https://api.github.com");
164
+ _define_property(this, "owner", void 0);
165
+ _define_property(this, "repo", void 0);
166
+ _define_property(this, "token", void 0);
167
+ this.owner = options.repositoryOwner || "anthropics";
168
+ this.repo = options.repositoryName || "skills";
169
+ this.token = options.githubToken || process.env.GITHUB_TOKEN || void 0;
170
+ }
171
+ }
172
+ exports.SkillRepository = __webpack_exports__.SkillRepository;
173
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
174
+ "SkillRepository"
175
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
176
+ Object.defineProperty(exports, '__esModule', {
177
+ value: true
178
+ });
@@ -0,0 +1,35 @@
1
+ import type { SkillInfo, SkillMetadata, SkillRepositoryOptions } from "../types/skill.js";
2
+ /**
3
+ * GitHub API client for interacting with the skills repository
4
+ */
5
+ export declare class SkillRepository {
6
+ private readonly baseUrl;
7
+ private readonly owner;
8
+ private readonly repo;
9
+ private readonly token?;
10
+ constructor(options?: SkillRepositoryOptions);
11
+ /**
12
+ * Fetch data from GitHub API
13
+ */
14
+ private fetch;
15
+ /**
16
+ * List available skills from the repository
17
+ */
18
+ listAvailableSkills(): Promise<SkillInfo[]>;
19
+ /**
20
+ * Get skill metadata by fetching and parsing SKILL.md
21
+ */
22
+ getSkillMetadata(skillName: string): Promise<SkillMetadata>;
23
+ /**
24
+ * Parse SKILL.md content to extract YAML frontmatter
25
+ */
26
+ private parseSkillMetadata;
27
+ /**
28
+ * Download all files for a skill
29
+ */
30
+ downloadSkill(skillName: string): Promise<Map<string, string | Buffer>>;
31
+ /**
32
+ * Recursively download all files in a directory
33
+ */
34
+ private downloadDirectory;
35
+ }