wispy-ai 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 (471) hide show
  1. package/.env.example +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +232 -0
  4. package/bin/wispy.js +3 -0
  5. package/dist/a2a/delegation.d.ts +19 -0
  6. package/dist/a2a/delegation.d.ts.map +1 -0
  7. package/dist/a2a/delegation.js +156 -0
  8. package/dist/a2a/delegation.js.map +1 -0
  9. package/dist/a2a/peer.d.ts +19 -0
  10. package/dist/a2a/peer.d.ts.map +1 -0
  11. package/dist/a2a/peer.js +27 -0
  12. package/dist/a2a/peer.js.map +1 -0
  13. package/dist/a2a/protocol.d.ts +36 -0
  14. package/dist/a2a/protocol.d.ts.map +1 -0
  15. package/dist/a2a/protocol.js +23 -0
  16. package/dist/a2a/protocol.js.map +1 -0
  17. package/dist/agents/collaboration.d.ts +59 -0
  18. package/dist/agents/collaboration.d.ts.map +1 -0
  19. package/dist/agents/collaboration.js +110 -0
  20. package/dist/agents/collaboration.js.map +1 -0
  21. package/dist/agents/orchestrator.d.ts +59 -0
  22. package/dist/agents/orchestrator.d.ts.map +1 -0
  23. package/dist/agents/orchestrator.js +171 -0
  24. package/dist/agents/orchestrator.js.map +1 -0
  25. package/dist/agents/tool-executor.d.ts +36 -0
  26. package/dist/agents/tool-executor.d.ts.map +1 -0
  27. package/dist/agents/tool-executor.js +363 -0
  28. package/dist/agents/tool-executor.js.map +1 -0
  29. package/dist/agents/types/coder.d.ts +10 -0
  30. package/dist/agents/types/coder.d.ts.map +1 -0
  31. package/dist/agents/types/coder.js +43 -0
  32. package/dist/agents/types/coder.js.map +1 -0
  33. package/dist/agents/types/data.d.ts +7 -0
  34. package/dist/agents/types/data.d.ts.map +1 -0
  35. package/dist/agents/types/data.js +30 -0
  36. package/dist/agents/types/data.js.map +1 -0
  37. package/dist/agents/types/designer.d.ts +7 -0
  38. package/dist/agents/types/designer.d.ts.map +1 -0
  39. package/dist/agents/types/designer.js +30 -0
  40. package/dist/agents/types/designer.js.map +1 -0
  41. package/dist/agents/types/devops.d.ts +7 -0
  42. package/dist/agents/types/devops.d.ts.map +1 -0
  43. package/dist/agents/types/devops.js +30 -0
  44. package/dist/agents/types/devops.js.map +1 -0
  45. package/dist/agents/types/planner.d.ts +7 -0
  46. package/dist/agents/types/planner.d.ts.map +1 -0
  47. package/dist/agents/types/planner.js +35 -0
  48. package/dist/agents/types/planner.js.map +1 -0
  49. package/dist/agents/types/researcher.d.ts +10 -0
  50. package/dist/agents/types/researcher.d.ts.map +1 -0
  51. package/dist/agents/types/researcher.js +33 -0
  52. package/dist/agents/types/researcher.js.map +1 -0
  53. package/dist/agents/types/security.d.ts +7 -0
  54. package/dist/agents/types/security.d.ts.map +1 -0
  55. package/dist/agents/types/security.js +30 -0
  56. package/dist/agents/types/security.js.map +1 -0
  57. package/dist/agents/types/writer.d.ts +7 -0
  58. package/dist/agents/types/writer.d.ts.map +1 -0
  59. package/dist/agents/types/writer.js +30 -0
  60. package/dist/agents/types/writer.js.map +1 -0
  61. package/dist/agents/workspace.d.ts +61 -0
  62. package/dist/agents/workspace.d.ts.map +1 -0
  63. package/dist/agents/workspace.js +115 -0
  64. package/dist/agents/workspace.js.map +1 -0
  65. package/dist/ai/embeddings.d.ts +4 -0
  66. package/dist/ai/embeddings.d.ts.map +1 -0
  67. package/dist/ai/embeddings.js +20 -0
  68. package/dist/ai/embeddings.js.map +1 -0
  69. package/dist/ai/gemini.d.ts +31 -0
  70. package/dist/ai/gemini.d.ts.map +1 -0
  71. package/dist/ai/gemini.js +121 -0
  72. package/dist/ai/gemini.js.map +1 -0
  73. package/dist/ai/model-registry.d.ts +73 -0
  74. package/dist/ai/model-registry.d.ts.map +1 -0
  75. package/dist/ai/model-registry.js +86 -0
  76. package/dist/ai/model-registry.js.map +1 -0
  77. package/dist/ai/prompts.d.ts +3 -0
  78. package/dist/ai/prompts.d.ts.map +1 -0
  79. package/dist/ai/prompts.js +42 -0
  80. package/dist/ai/prompts.js.map +1 -0
  81. package/dist/ai/providers/ollama.d.ts +22 -0
  82. package/dist/ai/providers/ollama.d.ts.map +1 -0
  83. package/dist/ai/providers/ollama.js +144 -0
  84. package/dist/ai/providers/ollama.js.map +1 -0
  85. package/dist/ai/providers/openai-compat.d.ts +25 -0
  86. package/dist/ai/providers/openai-compat.d.ts.map +1 -0
  87. package/dist/ai/providers/openai-compat.js +141 -0
  88. package/dist/ai/providers/openai-compat.js.map +1 -0
  89. package/dist/ai/router.d.ts +10 -0
  90. package/dist/ai/router.d.ts.map +1 -0
  91. package/dist/ai/router.js +23 -0
  92. package/dist/ai/router.js.map +1 -0
  93. package/dist/ai/tools.d.ts +15 -0
  94. package/dist/ai/tools.d.ts.map +1 -0
  95. package/dist/ai/tools.js +134 -0
  96. package/dist/ai/tools.js.map +1 -0
  97. package/dist/autostart/service.d.ts +24 -0
  98. package/dist/autostart/service.d.ts.map +1 -0
  99. package/dist/autostart/service.js +202 -0
  100. package/dist/autostart/service.js.map +1 -0
  101. package/dist/channels/dock.d.ts +22 -0
  102. package/dist/channels/dock.d.ts.map +1 -0
  103. package/dist/channels/dock.js +21 -0
  104. package/dist/channels/dock.js.map +1 -0
  105. package/dist/channels/rest/adapter.d.ts +4 -0
  106. package/dist/channels/rest/adapter.d.ts.map +1 -0
  107. package/dist/channels/rest/adapter.js +86 -0
  108. package/dist/channels/rest/adapter.js.map +1 -0
  109. package/dist/channels/telegram/adapter.d.ts +3 -0
  110. package/dist/channels/telegram/adapter.d.ts.map +1 -0
  111. package/dist/channels/telegram/adapter.js +56 -0
  112. package/dist/channels/telegram/adapter.js.map +1 -0
  113. package/dist/cli/commands.d.ts +17 -0
  114. package/dist/cli/commands.d.ts.map +1 -0
  115. package/dist/cli/commands.js +258 -0
  116. package/dist/cli/commands.js.map +1 -0
  117. package/dist/cli/doctor.d.ts +8 -0
  118. package/dist/cli/doctor.d.ts.map +1 -0
  119. package/dist/cli/doctor.js +34 -0
  120. package/dist/cli/doctor.js.map +1 -0
  121. package/dist/cli/history.d.ts +9 -0
  122. package/dist/cli/history.d.ts.map +1 -0
  123. package/dist/cli/history.js +32 -0
  124. package/dist/cli/history.js.map +1 -0
  125. package/dist/cli/postinstall.d.ts +5 -0
  126. package/dist/cli/postinstall.d.ts.map +1 -0
  127. package/dist/cli/postinstall.js +20 -0
  128. package/dist/cli/postinstall.js.map +1 -0
  129. package/dist/cli/program.d.ts +3 -0
  130. package/dist/cli/program.d.ts.map +1 -0
  131. package/dist/cli/program.js +537 -0
  132. package/dist/cli/program.js.map +1 -0
  133. package/dist/cli/repl.d.ts +7 -0
  134. package/dist/cli/repl.d.ts.map +1 -0
  135. package/dist/cli/repl.js +132 -0
  136. package/dist/cli/repl.js.map +1 -0
  137. package/dist/cli/setup/wizard.d.ts +17 -0
  138. package/dist/cli/setup/wizard.d.ts.map +1 -0
  139. package/dist/cli/setup/wizard.js +157 -0
  140. package/dist/cli/setup/wizard.js.map +1 -0
  141. package/dist/cli/ui/banner.d.ts +2 -0
  142. package/dist/cli/ui/banner.d.ts.map +1 -0
  143. package/dist/cli/ui/banner.js +9 -0
  144. package/dist/cli/ui/banner.js.map +1 -0
  145. package/dist/cli/ui/renderer.d.ts +6 -0
  146. package/dist/cli/ui/renderer.d.ts.map +1 -0
  147. package/dist/cli/ui/renderer.js +55 -0
  148. package/dist/cli/ui/renderer.js.map +1 -0
  149. package/dist/cli/ui/spinner.d.ts +7 -0
  150. package/dist/cli/ui/spinner.d.ts.map +1 -0
  151. package/dist/cli/ui/spinner.js +31 -0
  152. package/dist/cli/ui/spinner.js.map +1 -0
  153. package/dist/cli/ui/theme.d.ts +21 -0
  154. package/dist/cli/ui/theme.d.ts.map +1 -0
  155. package/dist/cli/ui/theme.js +28 -0
  156. package/dist/cli/ui/theme.js.map +1 -0
  157. package/dist/cli/ui/tool-display.d.ts +9 -0
  158. package/dist/cli/ui/tool-display.d.ts.map +1 -0
  159. package/dist/cli/ui/tool-display.js +19 -0
  160. package/dist/cli/ui/tool-display.js.map +1 -0
  161. package/dist/cli/voice/stt.d.ts +37 -0
  162. package/dist/cli/voice/stt.d.ts.map +1 -0
  163. package/dist/cli/voice/stt.js +115 -0
  164. package/dist/cli/voice/stt.js.map +1 -0
  165. package/dist/cli/voice/tts.d.ts +35 -0
  166. package/dist/cli/voice/tts.d.ts.map +1 -0
  167. package/dist/cli/voice/tts.js +142 -0
  168. package/dist/cli/voice/tts.js.map +1 -0
  169. package/dist/cli/voice/voice-mode.d.ts +35 -0
  170. package/dist/cli/voice/voice-mode.d.ts.map +1 -0
  171. package/dist/cli/voice/voice-mode.js +89 -0
  172. package/dist/cli/voice/voice-mode.js.map +1 -0
  173. package/dist/config/config.d.ts +5 -0
  174. package/dist/config/config.d.ts.map +1 -0
  175. package/dist/config/config.js +68 -0
  176. package/dist/config/config.js.map +1 -0
  177. package/dist/config/hot-reload.d.ts +3 -0
  178. package/dist/config/hot-reload.d.ts.map +1 -0
  179. package/dist/config/hot-reload.js +21 -0
  180. package/dist/config/hot-reload.js.map +1 -0
  181. package/dist/config/schema.d.ts +48 -0
  182. package/dist/config/schema.d.ts.map +1 -0
  183. package/dist/config/schema.js +105 -0
  184. package/dist/config/schema.js.map +1 -0
  185. package/dist/content/pipeline.d.ts +12 -0
  186. package/dist/content/pipeline.d.ts.map +1 -0
  187. package/dist/content/pipeline.js +55 -0
  188. package/dist/content/pipeline.js.map +1 -0
  189. package/dist/content/publisher.d.ts +26 -0
  190. package/dist/content/publisher.d.ts.map +1 -0
  191. package/dist/content/publisher.js +101 -0
  192. package/dist/content/publisher.js.map +1 -0
  193. package/dist/core/agent.d.ts +37 -0
  194. package/dist/core/agent.d.ts.map +1 -0
  195. package/dist/core/agent.js +170 -0
  196. package/dist/core/agent.js.map +1 -0
  197. package/dist/core/heartbeat.d.ts +15 -0
  198. package/dist/core/heartbeat.d.ts.map +1 -0
  199. package/dist/core/heartbeat.js +70 -0
  200. package/dist/core/heartbeat.js.map +1 -0
  201. package/dist/core/identity.d.ts +13 -0
  202. package/dist/core/identity.d.ts.map +1 -0
  203. package/dist/core/identity.js +16 -0
  204. package/dist/core/identity.js.map +1 -0
  205. package/dist/core/memory.d.ts +11 -0
  206. package/dist/core/memory.d.ts.map +1 -0
  207. package/dist/core/memory.js +58 -0
  208. package/dist/core/memory.js.map +1 -0
  209. package/dist/core/session.d.ts +29 -0
  210. package/dist/core/session.d.ts.map +1 -0
  211. package/dist/core/session.js +59 -0
  212. package/dist/core/session.js.map +1 -0
  213. package/dist/core/thinking.d.ts +3 -0
  214. package/dist/core/thinking.d.ts.map +1 -0
  215. package/dist/core/thinking.js +27 -0
  216. package/dist/core/thinking.js.map +1 -0
  217. package/dist/cron/service.d.ts +24 -0
  218. package/dist/cron/service.d.ts.map +1 -0
  219. package/dist/cron/service.js +74 -0
  220. package/dist/cron/service.js.map +1 -0
  221. package/dist/entry.d.ts +2 -0
  222. package/dist/entry.d.ts.map +1 -0
  223. package/dist/entry.js +26 -0
  224. package/dist/entry.js.map +1 -0
  225. package/dist/gateway/boot.d.ts +9 -0
  226. package/dist/gateway/boot.d.ts.map +1 -0
  227. package/dist/gateway/boot.js +64 -0
  228. package/dist/gateway/boot.js.map +1 -0
  229. package/dist/gateway/client.d.ts +19 -0
  230. package/dist/gateway/client.d.ts.map +1 -0
  231. package/dist/gateway/client.js +64 -0
  232. package/dist/gateway/client.js.map +1 -0
  233. package/dist/gateway/protocol/index.d.ts +41 -0
  234. package/dist/gateway/protocol/index.d.ts.map +1 -0
  235. package/dist/gateway/protocol/index.js +30 -0
  236. package/dist/gateway/protocol/index.js.map +1 -0
  237. package/dist/gateway/server.d.ts +9 -0
  238. package/dist/gateway/server.d.ts.map +1 -0
  239. package/dist/gateway/server.js +147 -0
  240. package/dist/gateway/server.js.map +1 -0
  241. package/dist/index.d.ts +10 -0
  242. package/dist/index.d.ts.map +1 -0
  243. package/dist/index.js +10 -0
  244. package/dist/index.js.map +1 -0
  245. package/dist/infra/dotenv.d.ts +2 -0
  246. package/dist/infra/dotenv.d.ts.map +1 -0
  247. package/dist/infra/dotenv.js +7 -0
  248. package/dist/infra/dotenv.js.map +1 -0
  249. package/dist/infra/logger.d.ts +4 -0
  250. package/dist/infra/logger.d.ts.map +1 -0
  251. package/dist/infra/logger.js +12 -0
  252. package/dist/infra/logger.js.map +1 -0
  253. package/dist/infra/ports.d.ts +2 -0
  254. package/dist/infra/ports.d.ts.map +1 -0
  255. package/dist/infra/ports.js +12 -0
  256. package/dist/infra/ports.js.map +1 -0
  257. package/dist/integrations/ai-models/anthropic.d.ts +15 -0
  258. package/dist/integrations/ai-models/anthropic.d.ts.map +1 -0
  259. package/dist/integrations/ai-models/anthropic.js +91 -0
  260. package/dist/integrations/ai-models/anthropic.js.map +1 -0
  261. package/dist/integrations/ai-models/ollama.d.ts +17 -0
  262. package/dist/integrations/ai-models/ollama.d.ts.map +1 -0
  263. package/dist/integrations/ai-models/ollama.js +113 -0
  264. package/dist/integrations/ai-models/ollama.js.map +1 -0
  265. package/dist/integrations/ai-models/openai.d.ts +19 -0
  266. package/dist/integrations/ai-models/openai.d.ts.map +1 -0
  267. package/dist/integrations/ai-models/openai.js +136 -0
  268. package/dist/integrations/ai-models/openai.js.map +1 -0
  269. package/dist/integrations/base.d.ts +102 -0
  270. package/dist/integrations/base.d.ts.map +1 -0
  271. package/dist/integrations/base.js +44 -0
  272. package/dist/integrations/base.js.map +1 -0
  273. package/dist/integrations/categories.d.ts +13 -0
  274. package/dist/integrations/categories.d.ts.map +1 -0
  275. package/dist/integrations/categories.js +69 -0
  276. package/dist/integrations/categories.js.map +1 -0
  277. package/dist/integrations/chat/discord.d.ts +19 -0
  278. package/dist/integrations/chat/discord.d.ts.map +1 -0
  279. package/dist/integrations/chat/discord.js +122 -0
  280. package/dist/integrations/chat/discord.js.map +1 -0
  281. package/dist/integrations/chat/slack.d.ts +19 -0
  282. package/dist/integrations/chat/slack.d.ts.map +1 -0
  283. package/dist/integrations/chat/slack.js +113 -0
  284. package/dist/integrations/chat/slack.js.map +1 -0
  285. package/dist/integrations/chat/whatsapp.d.ts +18 -0
  286. package/dist/integrations/chat/whatsapp.d.ts.map +1 -0
  287. package/dist/integrations/chat/whatsapp.js +115 -0
  288. package/dist/integrations/chat/whatsapp.js.map +1 -0
  289. package/dist/integrations/credential-manager.d.ts +68 -0
  290. package/dist/integrations/credential-manager.d.ts.map +1 -0
  291. package/dist/integrations/credential-manager.js +156 -0
  292. package/dist/integrations/credential-manager.js.map +1 -0
  293. package/dist/integrations/google/calendar.d.ts +17 -0
  294. package/dist/integrations/google/calendar.d.ts.map +1 -0
  295. package/dist/integrations/google/calendar.js +126 -0
  296. package/dist/integrations/google/calendar.js.map +1 -0
  297. package/dist/integrations/google/docs.d.ts +19 -0
  298. package/dist/integrations/google/docs.d.ts.map +1 -0
  299. package/dist/integrations/google/docs.js +153 -0
  300. package/dist/integrations/google/docs.js.map +1 -0
  301. package/dist/integrations/google/drive.d.ts +17 -0
  302. package/dist/integrations/google/drive.d.ts.map +1 -0
  303. package/dist/integrations/google/drive.js +130 -0
  304. package/dist/integrations/google/drive.js.map +1 -0
  305. package/dist/integrations/google/gmail.d.ts +19 -0
  306. package/dist/integrations/google/gmail.d.ts.map +1 -0
  307. package/dist/integrations/google/gmail.js +124 -0
  308. package/dist/integrations/google/gmail.js.map +1 -0
  309. package/dist/integrations/google/maps.d.ts +20 -0
  310. package/dist/integrations/google/maps.d.ts.map +1 -0
  311. package/dist/integrations/google/maps.js +115 -0
  312. package/dist/integrations/google/maps.js.map +1 -0
  313. package/dist/integrations/google/meet.d.ts +16 -0
  314. package/dist/integrations/google/meet.d.ts.map +1 -0
  315. package/dist/integrations/google/meet.js +104 -0
  316. package/dist/integrations/google/meet.js.map +1 -0
  317. package/dist/integrations/google/oauth.d.ts +39 -0
  318. package/dist/integrations/google/oauth.d.ts.map +1 -0
  319. package/dist/integrations/google/oauth.js +134 -0
  320. package/dist/integrations/google/oauth.js.map +1 -0
  321. package/dist/integrations/google/search.d.ts +15 -0
  322. package/dist/integrations/google/search.d.ts.map +1 -0
  323. package/dist/integrations/google/search.js +66 -0
  324. package/dist/integrations/google/search.js.map +1 -0
  325. package/dist/integrations/google/sheets.d.ts +17 -0
  326. package/dist/integrations/google/sheets.d.ts.map +1 -0
  327. package/dist/integrations/google/sheets.js +118 -0
  328. package/dist/integrations/google/sheets.js.map +1 -0
  329. package/dist/integrations/google/youtube.d.ts +19 -0
  330. package/dist/integrations/google/youtube.d.ts.map +1 -0
  331. package/dist/integrations/google/youtube.js +128 -0
  332. package/dist/integrations/google/youtube.js.map +1 -0
  333. package/dist/integrations/loader.d.ts +15 -0
  334. package/dist/integrations/loader.d.ts.map +1 -0
  335. package/dist/integrations/loader.js +97 -0
  336. package/dist/integrations/loader.js.map +1 -0
  337. package/dist/integrations/music/spotify.d.ts +21 -0
  338. package/dist/integrations/music/spotify.d.ts.map +1 -0
  339. package/dist/integrations/music/spotify.js +161 -0
  340. package/dist/integrations/music/spotify.js.map +1 -0
  341. package/dist/integrations/productivity/github.d.ts +20 -0
  342. package/dist/integrations/productivity/github.d.ts.map +1 -0
  343. package/dist/integrations/productivity/github.js +146 -0
  344. package/dist/integrations/productivity/github.js.map +1 -0
  345. package/dist/integrations/productivity/linear.d.ts +19 -0
  346. package/dist/integrations/productivity/linear.d.ts.map +1 -0
  347. package/dist/integrations/productivity/linear.js +152 -0
  348. package/dist/integrations/productivity/linear.js.map +1 -0
  349. package/dist/integrations/productivity/notion.d.ts +20 -0
  350. package/dist/integrations/productivity/notion.d.ts.map +1 -0
  351. package/dist/integrations/productivity/notion.js +186 -0
  352. package/dist/integrations/productivity/notion.js.map +1 -0
  353. package/dist/integrations/productivity/obsidian.d.ts +21 -0
  354. package/dist/integrations/productivity/obsidian.d.ts.map +1 -0
  355. package/dist/integrations/productivity/obsidian.js +141 -0
  356. package/dist/integrations/productivity/obsidian.js.map +1 -0
  357. package/dist/integrations/registry.d.ts +78 -0
  358. package/dist/integrations/registry.d.ts.map +1 -0
  359. package/dist/integrations/registry.js +193 -0
  360. package/dist/integrations/registry.js.map +1 -0
  361. package/dist/integrations/smart-home/homeassistant.d.ts +21 -0
  362. package/dist/integrations/smart-home/homeassistant.d.ts.map +1 -0
  363. package/dist/integrations/smart-home/homeassistant.js +129 -0
  364. package/dist/integrations/smart-home/homeassistant.js.map +1 -0
  365. package/dist/integrations/smart-home/hue.d.ts +23 -0
  366. package/dist/integrations/smart-home/hue.d.ts.map +1 -0
  367. package/dist/integrations/smart-home/hue.js +144 -0
  368. package/dist/integrations/smart-home/hue.js.map +1 -0
  369. package/dist/integrations/social/email-smtp.d.ts +23 -0
  370. package/dist/integrations/social/email-smtp.d.ts.map +1 -0
  371. package/dist/integrations/social/email-smtp.js +168 -0
  372. package/dist/integrations/social/email-smtp.js.map +1 -0
  373. package/dist/integrations/social/twitter.d.ts +28 -0
  374. package/dist/integrations/social/twitter.d.ts.map +1 -0
  375. package/dist/integrations/social/twitter.js +168 -0
  376. package/dist/integrations/social/twitter.js.map +1 -0
  377. package/dist/integrations/tools/browser.d.ts +18 -0
  378. package/dist/integrations/tools/browser.d.ts.map +1 -0
  379. package/dist/integrations/tools/browser.js +131 -0
  380. package/dist/integrations/tools/browser.js.map +1 -0
  381. package/dist/integrations/tools/weather.d.ts +17 -0
  382. package/dist/integrations/tools/weather.d.ts.map +1 -0
  383. package/dist/integrations/tools/weather.js +113 -0
  384. package/dist/integrations/tools/weather.js.map +1 -0
  385. package/dist/integrations/tools/webhooks.d.ts +15 -0
  386. package/dist/integrations/tools/webhooks.d.ts.map +1 -0
  387. package/dist/integrations/tools/webhooks.js +89 -0
  388. package/dist/integrations/tools/webhooks.js.map +1 -0
  389. package/dist/mcp/client.d.ts +42 -0
  390. package/dist/mcp/client.d.ts.map +1 -0
  391. package/dist/mcp/client.js +164 -0
  392. package/dist/mcp/client.js.map +1 -0
  393. package/dist/mcp/server.d.ts +2 -0
  394. package/dist/mcp/server.d.ts.map +1 -0
  395. package/dist/mcp/server.js +114 -0
  396. package/dist/mcp/server.js.map +1 -0
  397. package/dist/mcp/tools-adapter.d.ts +14 -0
  398. package/dist/mcp/tools-adapter.d.ts.map +1 -0
  399. package/dist/mcp/tools-adapter.js +133 -0
  400. package/dist/mcp/tools-adapter.js.map +1 -0
  401. package/dist/memory/manager.d.ts +14 -0
  402. package/dist/memory/manager.d.ts.map +1 -0
  403. package/dist/memory/manager.js +49 -0
  404. package/dist/memory/manager.js.map +1 -0
  405. package/dist/memory/vector-store.d.ts +17 -0
  406. package/dist/memory/vector-store.d.ts.map +1 -0
  407. package/dist/memory/vector-store.js +65 -0
  408. package/dist/memory/vector-store.js.map +1 -0
  409. package/dist/security/action-guard.d.ts +12 -0
  410. package/dist/security/action-guard.d.ts.map +1 -0
  411. package/dist/security/action-guard.js +37 -0
  412. package/dist/security/action-guard.js.map +1 -0
  413. package/dist/security/api-key-guard.d.ts +3 -0
  414. package/dist/security/api-key-guard.d.ts.map +1 -0
  415. package/dist/security/api-key-guard.js +36 -0
  416. package/dist/security/api-key-guard.js.map +1 -0
  417. package/dist/security/auth.d.ts +17 -0
  418. package/dist/security/auth.d.ts.map +1 -0
  419. package/dist/security/auth.js +31 -0
  420. package/dist/security/auth.js.map +1 -0
  421. package/dist/security/device-identity.d.ts +11 -0
  422. package/dist/security/device-identity.d.ts.map +1 -0
  423. package/dist/security/device-identity.js +64 -0
  424. package/dist/security/device-identity.js.map +1 -0
  425. package/dist/security/encryption.d.ts +5 -0
  426. package/dist/security/encryption.d.ts.map +1 -0
  427. package/dist/security/encryption.js +13 -0
  428. package/dist/security/encryption.js.map +1 -0
  429. package/dist/security/isolation.d.ts +11 -0
  430. package/dist/security/isolation.d.ts.map +1 -0
  431. package/dist/security/isolation.js +37 -0
  432. package/dist/security/isolation.js.map +1 -0
  433. package/dist/skills/loader.d.ts +17 -0
  434. package/dist/skills/loader.d.ts.map +1 -0
  435. package/dist/skills/loader.js +68 -0
  436. package/dist/skills/loader.js.map +1 -0
  437. package/dist/token/estimator.d.ts +72 -0
  438. package/dist/token/estimator.d.ts.map +1 -0
  439. package/dist/token/estimator.js +165 -0
  440. package/dist/token/estimator.js.map +1 -0
  441. package/dist/utils/crypto.d.ts +4 -0
  442. package/dist/utils/crypto.d.ts.map +1 -0
  443. package/dist/utils/crypto.js +28 -0
  444. package/dist/utils/crypto.js.map +1 -0
  445. package/dist/utils/file.d.ts +14 -0
  446. package/dist/utils/file.d.ts.map +1 -0
  447. package/dist/utils/file.js +54 -0
  448. package/dist/utils/file.js.map +1 -0
  449. package/dist/utils/media.d.ts +6 -0
  450. package/dist/utils/media.d.ts.map +1 -0
  451. package/dist/utils/media.js +65 -0
  452. package/dist/utils/media.js.map +1 -0
  453. package/dist/wallet/x402.d.ts +22 -0
  454. package/dist/wallet/x402.d.ts.map +1 -0
  455. package/dist/wallet/x402.js +63 -0
  456. package/dist/wallet/x402.js.map +1 -0
  457. package/package.json +79 -0
  458. package/wispy/AGENTS.md +46 -0
  459. package/wispy/BOOT.md +28 -0
  460. package/wispy/CONTEXT.md +13 -0
  461. package/wispy/HEARTBEAT.md +17 -0
  462. package/wispy/IDENTITY.md +26 -0
  463. package/wispy/MEMORY.md +16 -0
  464. package/wispy/SOUL.md +35 -0
  465. package/wispy/TOOLS.md +45 -0
  466. package/wispy/USER.md +16 -0
  467. package/wispy/skills/a2a-delegate/SKILL.md +14 -0
  468. package/wispy/skills/content-creator/SKILL.md +14 -0
  469. package/wispy/skills/image-gen/SKILL.md +14 -0
  470. package/wispy/skills/wallet-ops/SKILL.md +14 -0
  471. package/wispy/skills/x-poster/SKILL.md +11 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/agents/types/planner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;uDAmByB,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,oDAAoD;IACjE,YAAY,EAAE,qBAAqB;IACnC,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC;IAC3E,KAAK,EAAE,CAAC,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,CAAC;IACtE,aAAa,EAAE,QAAQ;CACxB,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Researcher agent — specializes in web search, analysis, and summarization.
3
+ *
4
+ * Capabilities: web-search, summarize, analyze, compare, cite
5
+ * Default model: gemini-2.5-flash (speed over depth)
6
+ */
7
+ import type { AgentTypeConfig } from "../workspace.js";
8
+ export declare const RESEARCHER_CONFIG: AgentTypeConfig;
9
+ export default RESEARCHER_CONFIG;
10
+ //# sourceMappingURL=researcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"researcher.d.ts","sourceRoot":"","sources":["../../../src/agents/types/researcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAkBvD,eAAO,MAAM,iBAAiB,EAAE,eAS/B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Researcher agent — specializes in web search, analysis, and summarization.
3
+ *
4
+ * Capabilities: web-search, summarize, analyze, compare, cite
5
+ * Default model: gemini-2.5-flash (speed over depth)
6
+ */
7
+ const RESEARCHER_SYSTEM_PROMPT = `You are a research analyst. You find, analyze, and synthesize information.
8
+
9
+ Capabilities:
10
+ - Search the web for current information
11
+ - Analyze data, trends, and patterns
12
+ - Summarize long documents concisely
13
+ - Compare options with pros/cons
14
+ - Cite sources properly
15
+
16
+ Rules:
17
+ - Always verify claims with multiple sources when possible
18
+ - Clearly distinguish facts from opinions
19
+ - Provide source URLs for key claims
20
+ - Be concise — summarize, don't copy-paste
21
+ - Flag uncertainty explicitly`;
22
+ export const RESEARCHER_CONFIG = {
23
+ id: "researcher",
24
+ name: "Researcher",
25
+ description: "Web search, analysis, and summarization",
26
+ systemPrompt: RESEARCHER_SYSTEM_PROMPT,
27
+ defaultModel: "gemini-2.5-flash",
28
+ capabilities: ["web-search", "summarize", "analyze", "compare", "cite"],
29
+ tools: ["web_fetch", "web_search", "memory_search", "memory_save", "file_write"],
30
+ thinkingLevel: "low",
31
+ };
32
+ export default RESEARCHER_CONFIG;
33
+ //# sourceMappingURL=researcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"researcher.js","sourceRoot":"","sources":["../../../src/agents/types/researcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;8BAcH,CAAC;AAE/B,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,yCAAyC;IACtD,YAAY,EAAE,wBAAwB;IACtC,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IACvE,KAAK,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,CAAC;IAChF,aAAa,EAAE,KAAK;CACrB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Security agent — specializes in security auditing and vulnerability scanning.
3
+ */
4
+ import type { AgentTypeConfig } from "../workspace.js";
5
+ export declare const SECURITY_CONFIG: AgentTypeConfig;
6
+ export default SECURITY_CONFIG;
7
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/agents/types/security.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAkBvD,eAAO,MAAM,eAAe,EAAE,eAS7B,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Security agent — specializes in security auditing and vulnerability scanning.
3
+ */
4
+ const SECURITY_SYSTEM_PROMPT = `You are a security engineer. You find and fix vulnerabilities.
5
+
6
+ Capabilities:
7
+ - Review code for OWASP Top 10 vulnerabilities
8
+ - Audit authentication and authorization flows
9
+ - Check for secrets/credentials in code
10
+ - Analyze dependencies for known CVEs
11
+ - Suggest security hardening measures
12
+
13
+ Rules:
14
+ - Never skip security checks for convenience
15
+ - Always report severity (critical/high/medium/low)
16
+ - Provide remediation steps for every finding
17
+ - Check for: injection, XSS, CSRF, broken auth, exposed secrets
18
+ - Verify input validation at all boundaries`;
19
+ export const SECURITY_CONFIG = {
20
+ id: "security",
21
+ name: "Security",
22
+ description: "Security auditing, vulnerability scanning, and hardening",
23
+ systemPrompt: SECURITY_SYSTEM_PROMPT,
24
+ defaultModel: "gemini-2.5-pro",
25
+ capabilities: ["audit", "vulnerability-scan", "code-review", "hardening", "owasp"],
26
+ tools: ["bash", "file_read", "file_search", "list_directory", "web_fetch"],
27
+ thinkingLevel: "high",
28
+ };
29
+ export default SECURITY_CONFIG;
30
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/agents/types/security.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;4CAca,CAAC;AAE7C,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,0DAA0D;IACvE,YAAY,EAAE,sBAAsB;IACpC,YAAY,EAAE,gBAAgB;IAC9B,YAAY,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC;IAClF,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,CAAC;IAC1E,aAAa,EAAE,MAAM;CACtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Writer agent — specializes in content creation, copywriting, and documentation.
3
+ */
4
+ import type { AgentTypeConfig } from "../workspace.js";
5
+ export declare const WRITER_CONFIG: AgentTypeConfig;
6
+ export default WRITER_CONFIG;
7
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/agents/types/writer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAkBvD,eAAO,MAAM,aAAa,EAAE,eAS3B,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Writer agent — specializes in content creation, copywriting, and documentation.
3
+ */
4
+ const WRITER_SYSTEM_PROMPT = `You are a professional writer and content strategist.
5
+
6
+ Capabilities:
7
+ - Write blog posts, articles, documentation, and copy
8
+ - Adapt tone for different audiences (technical, casual, formal)
9
+ - Edit and proofread for clarity and grammar
10
+ - Structure content with proper headings and flow
11
+ - Create social media content and threads
12
+
13
+ Rules:
14
+ - Match the requested tone and style
15
+ - Be original — never plagiarize
16
+ - Keep paragraphs short and scannable
17
+ - Use active voice
18
+ - Front-load key information`;
19
+ export const WRITER_CONFIG = {
20
+ id: "writer",
21
+ name: "Writer",
22
+ description: "Content creation, copywriting, and documentation",
23
+ systemPrompt: WRITER_SYSTEM_PROMPT,
24
+ defaultModel: "gemini-2.5-pro",
25
+ capabilities: ["blog", "docs", "copy", "social", "edit"],
26
+ tools: ["web_fetch", "memory_search", "file_write", "file_read"],
27
+ thinkingLevel: "low",
28
+ };
29
+ export default WRITER_CONFIG;
30
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../src/agents/types/writer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;6BAcA,CAAC;AAE9B,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,kDAAkD;IAC/D,YAAY,EAAE,oBAAoB;IAClC,YAAY,EAAE,gBAAgB;IAC9B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;IACxD,KAAK,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,CAAC;IAChE,aAAa,EAAE,KAAK;CACrB,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Workspace configuration — defines which agents are active and their settings.
3
+ *
4
+ * Users configure their workspace during `wispy setup`. The config is stored
5
+ * in .wispy/workspace.yaml and controls which agents are available, their
6
+ * models, and collaboration settings.
7
+ */
8
+ export interface AgentTypeConfig {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ systemPrompt: string;
13
+ defaultModel: string;
14
+ capabilities: string[];
15
+ tools: string[];
16
+ thinkingLevel: "minimal" | "low" | "medium" | "high";
17
+ }
18
+ export interface WorkspaceAgentConfig {
19
+ enabled: boolean;
20
+ model?: string;
21
+ capabilities?: string[];
22
+ }
23
+ export interface WorkspaceConfig {
24
+ agents: Record<string, WorkspaceAgentConfig>;
25
+ collaboration: {
26
+ enabled: boolean;
27
+ maxChainDepth: number;
28
+ };
29
+ models: {
30
+ default: string;
31
+ fallback?: string;
32
+ local?: string;
33
+ };
34
+ voice: {
35
+ enabled: boolean;
36
+ sttEngine: "whisper" | "gemini-live";
37
+ ttsEngine: "piper" | "espeak" | "google-tts" | "gemini-live";
38
+ };
39
+ tokenBudget: {
40
+ maxPerRequest: number;
41
+ maxPerSession: number;
42
+ maxPerDay: number;
43
+ };
44
+ }
45
+ export declare function loadWorkspace(runtimeDir: string): WorkspaceConfig;
46
+ export declare function saveWorkspace(runtimeDir: string, config: WorkspaceConfig): void;
47
+ export declare function getDefaultWorkspace(): WorkspaceConfig;
48
+ export declare function registerAgentType(config: AgentTypeConfig): void;
49
+ export declare function getAgentType(id: string): AgentTypeConfig | undefined;
50
+ export declare function getAllAgentTypes(): AgentTypeConfig[];
51
+ /**
52
+ * Load all agent type definitions.
53
+ */
54
+ export declare function loadAgentTypes(): Promise<void>;
55
+ /**
56
+ * Get enabled agents based on workspace config.
57
+ */
58
+ export declare function getEnabledAgents(workspace: WorkspaceConfig): Array<AgentTypeConfig & {
59
+ modelOverride?: string;
60
+ }>;
61
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/agents/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtD;AAID,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC7C,aAAa,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,SAAS,GAAG,aAAa,CAAC;QACrC,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,CAAC;KAC9D,CAAC;IACF,WAAW,EAAE;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAmCD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAcjE;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAK/E;AAED,wBAAgB,mBAAmB,IAAI,eAAe,CAErD;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAE/D;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEpE;AAED,wBAAgB,gBAAgB,IAAI,eAAe,EAAE,CAEpD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,eAAe,GACzB,KAAK,CAAC,eAAe,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAerD"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Workspace configuration — defines which agents are active and their settings.
3
+ *
4
+ * Users configure their workspace during `wispy setup`. The config is stored
5
+ * in .wispy/workspace.yaml and controls which agents are available, their
6
+ * models, and collaboration settings.
7
+ */
8
+ import { resolve } from "path";
9
+ import { readYaml, writeYaml, ensureDir } from "../utils/file.js";
10
+ import { createLogger } from "../infra/logger.js";
11
+ const log = createLogger("workspace");
12
+ const DEFAULT_WORKSPACE = {
13
+ agents: {
14
+ coder: { enabled: true },
15
+ researcher: { enabled: true },
16
+ writer: { enabled: false },
17
+ devops: { enabled: false },
18
+ designer: { enabled: false },
19
+ data: { enabled: false },
20
+ security: { enabled: true },
21
+ planner: { enabled: true },
22
+ },
23
+ collaboration: {
24
+ enabled: true,
25
+ maxChainDepth: 5,
26
+ },
27
+ models: {
28
+ default: "gemini-2.5-pro",
29
+ fallback: "gemini-2.5-flash",
30
+ },
31
+ voice: {
32
+ enabled: false,
33
+ sttEngine: "whisper",
34
+ ttsEngine: "piper",
35
+ },
36
+ tokenBudget: {
37
+ maxPerRequest: 100_000,
38
+ maxPerSession: 500_000,
39
+ maxPerDay: 2_000_000,
40
+ },
41
+ };
42
+ // ─── Load / Save ────────────────────────────────────────────
43
+ export function loadWorkspace(runtimeDir) {
44
+ const path = resolve(runtimeDir, "workspace.yaml");
45
+ const loaded = readYaml(path);
46
+ if (!loaded)
47
+ return { ...DEFAULT_WORKSPACE };
48
+ return {
49
+ ...DEFAULT_WORKSPACE,
50
+ ...loaded,
51
+ agents: { ...DEFAULT_WORKSPACE.agents, ...loaded.agents },
52
+ collaboration: { ...DEFAULT_WORKSPACE.collaboration, ...loaded.collaboration },
53
+ models: { ...DEFAULT_WORKSPACE.models, ...loaded.models },
54
+ voice: { ...DEFAULT_WORKSPACE.voice, ...loaded.voice },
55
+ tokenBudget: { ...DEFAULT_WORKSPACE.tokenBudget, ...loaded.tokenBudget },
56
+ };
57
+ }
58
+ export function saveWorkspace(runtimeDir, config) {
59
+ ensureDir(runtimeDir);
60
+ const path = resolve(runtimeDir, "workspace.yaml");
61
+ writeYaml(path, config);
62
+ log.info("Workspace config saved");
63
+ }
64
+ export function getDefaultWorkspace() {
65
+ return { ...DEFAULT_WORKSPACE };
66
+ }
67
+ // ─── Agent Registry ─────────────────────────────────────────
68
+ const AGENT_TYPES = new Map();
69
+ export function registerAgentType(config) {
70
+ AGENT_TYPES.set(config.id, config);
71
+ }
72
+ export function getAgentType(id) {
73
+ return AGENT_TYPES.get(id);
74
+ }
75
+ export function getAllAgentTypes() {
76
+ return Array.from(AGENT_TYPES.values());
77
+ }
78
+ /**
79
+ * Load all agent type definitions.
80
+ */
81
+ export async function loadAgentTypes() {
82
+ const types = await Promise.all([
83
+ import("./types/coder.js"),
84
+ import("./types/researcher.js"),
85
+ import("./types/writer.js"),
86
+ import("./types/devops.js"),
87
+ import("./types/designer.js"),
88
+ import("./types/data.js"),
89
+ import("./types/security.js"),
90
+ import("./types/planner.js"),
91
+ ]);
92
+ for (const mod of types) {
93
+ registerAgentType(mod.default);
94
+ }
95
+ log.debug("Loaded %d agent type(s)", AGENT_TYPES.size);
96
+ }
97
+ /**
98
+ * Get enabled agents based on workspace config.
99
+ */
100
+ export function getEnabledAgents(workspace) {
101
+ const enabled = [];
102
+ for (const [id, agentConf] of Object.entries(workspace.agents)) {
103
+ if (!agentConf.enabled)
104
+ continue;
105
+ const typeConfig = AGENT_TYPES.get(id);
106
+ if (!typeConfig)
107
+ continue;
108
+ enabled.push({
109
+ ...typeConfig,
110
+ modelOverride: agentConf.model,
111
+ });
112
+ }
113
+ return enabled;
114
+ }
115
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/agents/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AA8CtC,MAAM,iBAAiB,GAAoB;IACzC,MAAM,EAAE;QACN,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACxB,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC7B,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QAC1B,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QAC1B,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QAC5B,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QACxB,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC3B,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KAC3B;IACD,aAAa,EAAE;QACb,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,CAAC;KACjB;IACD,MAAM,EAAE;QACN,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,kBAAkB;KAC7B;IACD,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,OAAO;KACnB;IACD,WAAW,EAAE;QACX,aAAa,EAAE,OAAO;QACtB,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,SAAS;KACrB;CACF,CAAC;AAEF,+DAA+D;AAE/D,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAA2B,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAE7C,OAAO;QACL,GAAG,iBAAiB;QACpB,GAAG,MAAM;QACT,MAAM,EAAE,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE;QACzD,aAAa,EAAE,EAAE,GAAG,iBAAiB,CAAC,aAAa,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE;QAC9E,MAAM,EAAE,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE;QACzD,KAAK,EAAE,EAAE,GAAG,iBAAiB,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE;QACtD,WAAW,EAAE,EAAE,GAAG,iBAAiB,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE;KACzE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,MAAuB;IACvE,SAAS,CAAC,UAAU,CAAC,CAAC;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACnD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxB,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;AAClC,CAAC;AAED,+DAA+D;AAE/D,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEvD,MAAM,UAAU,iBAAiB,CAAC,MAAuB;IACvD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9B,MAAM,CAAC,kBAAkB,CAAC;QAC1B,MAAM,CAAC,uBAAuB,CAAC;QAC/B,MAAM,CAAC,mBAAmB,CAAC;QAC3B,MAAM,CAAC,mBAAmB,CAAC;QAC3B,MAAM,CAAC,qBAAqB,CAAC;QAC7B,MAAM,CAAC,iBAAiB,CAAC;QACzB,MAAM,CAAC,qBAAqB,CAAC;QAC7B,MAAM,CAAC,oBAAoB,CAAC;KAC7B,CAAC,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAA0B;IAE1B,MAAM,OAAO,GAAwD,EAAE,CAAC;IAExE,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,OAAO;YAAE,SAAS;QACjC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,UAAU;YACb,aAAa,EAAE,SAAS,CAAC,KAAK;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WispyConfig } from "../config/schema.js";
2
+ export declare function embedTexts(texts: string[], config: WispyConfig): Promise<number[][]>;
3
+ export declare function embedSingle(text: string, config: WispyConfig): Promise<number[]>;
4
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/ai/embeddings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAOvD,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAYrB;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB"}
@@ -0,0 +1,20 @@
1
+ import { embed } from "./gemini.js";
2
+ import { createLogger } from "../infra/logger.js";
3
+ const log = createLogger("embeddings");
4
+ const BATCH_SIZE = 100;
5
+ export async function embedTexts(texts, config) {
6
+ const model = config.gemini.models.embedding;
7
+ const results = [];
8
+ for (let i = 0; i < texts.length; i += BATCH_SIZE) {
9
+ const batch = texts.slice(i, i + BATCH_SIZE);
10
+ log.debug("Embedding batch %d-%d of %d", i, i + batch.length, texts.length);
11
+ const embeddings = await embed(model, batch);
12
+ results.push(...embeddings);
13
+ }
14
+ return results;
15
+ }
16
+ export async function embedSingle(text, config) {
17
+ const [embedding] = await embedTexts([text], config);
18
+ return embedding;
19
+ }
20
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/ai/embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAEvC,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAe,EACf,MAAmB;IAEnB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;IAC7C,MAAM,OAAO,GAAe,EAAE,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;QAC7C,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,MAAmB;IAEnB,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { GoogleGenAI } from "@google/genai";
2
+ export declare function initGemini(apiKey: string): GoogleGenAI;
3
+ export declare function getClient(): GoogleGenAI;
4
+ export type ThinkingLevel = "none" | "minimal" | "low" | "medium" | "high";
5
+ export interface GenerateOptions {
6
+ model: string;
7
+ systemPrompt?: string;
8
+ messages: Array<{
9
+ role: "user" | "model";
10
+ content: string;
11
+ }>;
12
+ tools?: unknown[];
13
+ thinkingLevel?: ThinkingLevel;
14
+ temperature?: number;
15
+ maxTokens?: number;
16
+ }
17
+ export declare function generate(opts: GenerateOptions): Promise<{
18
+ text: string;
19
+ thinking?: string;
20
+ toolCalls?: unknown[];
21
+ usage?: {
22
+ inputTokens: number;
23
+ outputTokens: number;
24
+ };
25
+ }>;
26
+ export declare function generateStream(opts: GenerateOptions): AsyncGenerator<{
27
+ type: "text" | "thinking" | "tool_call" | "done";
28
+ content: string;
29
+ }>;
30
+ export declare function embed(model: string, texts: string[]): Promise<number[][]>;
31
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/ai/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAItD;AAED,wBAAgB,SAAS,IAAI,WAAW,CAGvC;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD,CAAC,CAwDD;AAED,wBAAuB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CAAC;IAC3E,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAuCD;AAED,wBAAsB,KAAK,CACzB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAQrB"}
@@ -0,0 +1,121 @@
1
+ import { GoogleGenAI } from "@google/genai";
2
+ import { createLogger } from "../infra/logger.js";
3
+ const log = createLogger("gemini");
4
+ let client = null;
5
+ export function initGemini(apiKey) {
6
+ client = new GoogleGenAI({ apiKey });
7
+ log.info("Gemini SDK initialized");
8
+ return client;
9
+ }
10
+ export function getClient() {
11
+ if (!client)
12
+ throw new Error("Gemini not initialized. Call initGemini() first.");
13
+ return client;
14
+ }
15
+ export async function generate(opts) {
16
+ const ai = getClient();
17
+ const contents = opts.messages.map((m) => ({
18
+ role: m.role,
19
+ parts: [{ text: m.content }],
20
+ }));
21
+ const config = {};
22
+ if (opts.temperature !== undefined)
23
+ config.temperature = opts.temperature;
24
+ if (opts.maxTokens)
25
+ config.maxOutputTokens = opts.maxTokens;
26
+ if (opts.thinkingLevel && opts.thinkingLevel !== "none") {
27
+ config.thinkingConfig = { thinkingBudget: thinkingBudget(opts.thinkingLevel) };
28
+ }
29
+ if (opts.tools && opts.tools.length > 0) {
30
+ config.tools = opts.tools;
31
+ }
32
+ const response = await ai.models.generateContent({
33
+ model: opts.model,
34
+ contents,
35
+ config: {
36
+ ...config,
37
+ systemInstruction: opts.systemPrompt,
38
+ },
39
+ });
40
+ const text = response.text || "";
41
+ let thinking;
42
+ const toolCalls = [];
43
+ // Extract thinking and tool calls from parts
44
+ if (response.candidates?.[0]?.content?.parts) {
45
+ for (const part of response.candidates[0].content.parts) {
46
+ if (part.thought) {
47
+ thinking = part.text;
48
+ }
49
+ if (part.functionCall) {
50
+ toolCalls.push(part.functionCall);
51
+ }
52
+ }
53
+ }
54
+ return {
55
+ text,
56
+ thinking,
57
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
58
+ usage: response.usageMetadata
59
+ ? {
60
+ inputTokens: response.usageMetadata.promptTokenCount || 0,
61
+ outputTokens: response.usageMetadata.candidatesTokenCount || 0,
62
+ }
63
+ : undefined,
64
+ };
65
+ }
66
+ export async function* generateStream(opts) {
67
+ const ai = getClient();
68
+ const contents = opts.messages.map((m) => ({
69
+ role: m.role,
70
+ parts: [{ text: m.content }],
71
+ }));
72
+ const config = {};
73
+ if (opts.temperature !== undefined)
74
+ config.temperature = opts.temperature;
75
+ if (opts.maxTokens)
76
+ config.maxOutputTokens = opts.maxTokens;
77
+ if (opts.thinkingLevel && opts.thinkingLevel !== "none") {
78
+ config.thinkingConfig = { thinkingBudget: thinkingBudget(opts.thinkingLevel) };
79
+ }
80
+ const response = await ai.models.generateContentStream({
81
+ model: opts.model,
82
+ contents,
83
+ config: {
84
+ ...config,
85
+ systemInstruction: opts.systemPrompt,
86
+ },
87
+ });
88
+ for await (const chunk of response) {
89
+ if (chunk.text) {
90
+ yield { type: "text", content: chunk.text };
91
+ }
92
+ // Check for thinking parts
93
+ if (chunk.candidates?.[0]?.content?.parts) {
94
+ for (const part of chunk.candidates[0].content.parts) {
95
+ if (part.thought && part.text) {
96
+ yield { type: "thinking", content: part.text };
97
+ }
98
+ }
99
+ }
100
+ }
101
+ yield { type: "done", content: "" };
102
+ }
103
+ export async function embed(model, texts) {
104
+ const ai = getClient();
105
+ const result = await ai.models.embedContent({
106
+ model,
107
+ contents: texts.map((t) => ({ parts: [{ text: t }] })),
108
+ });
109
+ // Return embeddings
110
+ return result.embeddings?.map((e) => e.values) || [];
111
+ }
112
+ function thinkingBudget(level) {
113
+ switch (level) {
114
+ case "minimal": return 128;
115
+ case "low": return 1024;
116
+ case "medium": return 4096;
117
+ case "high": return 16384;
118
+ default: return 0;
119
+ }
120
+ }
121
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/ai/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Unified model registry.
3
+ *
4
+ * Manages multiple AI providers (Gemini, Ollama, OpenAI-compatible) and routes
5
+ * requests to the appropriate provider based on model name.
6
+ */
7
+ export interface GenerateOptions {
8
+ model?: string;
9
+ systemPrompt?: string;
10
+ messages: Array<{
11
+ role: string;
12
+ content: string;
13
+ }>;
14
+ tools?: unknown[];
15
+ thinkingLevel?: string;
16
+ maxTokens?: number;
17
+ }
18
+ export interface GenerateResult {
19
+ text: string;
20
+ thinking?: string;
21
+ toolCalls?: Array<{
22
+ name: string;
23
+ args: Record<string, unknown>;
24
+ }>;
25
+ inputTokens: number;
26
+ outputTokens: number;
27
+ }
28
+ export interface StreamChunk {
29
+ type: "text" | "thinking" | "tool_call" | "tool_result" | "done";
30
+ content: string;
31
+ }
32
+ export interface ModelProvider {
33
+ id: string;
34
+ supportsTools: boolean;
35
+ supportsThinking: boolean;
36
+ supportsVision: boolean;
37
+ generate(opts: GenerateOptions): Promise<GenerateResult>;
38
+ generateStream(opts: GenerateOptions): AsyncGenerator<StreamChunk>;
39
+ embed?(text: string, model?: string): Promise<number[]>;
40
+ }
41
+ /**
42
+ * Register a model provider.
43
+ */
44
+ export declare function registerProvider(provider: ModelProvider): void;
45
+ /**
46
+ * Map a model name to a provider ID.
47
+ */
48
+ export declare function mapModel(modelName: string, providerId: string): void;
49
+ /**
50
+ * Get the provider for a model name.
51
+ */
52
+ export declare function getProvider(model: string): ModelProvider | undefined;
53
+ /**
54
+ * List all registered providers.
55
+ */
56
+ export declare function listProviders(): Array<{
57
+ id: string;
58
+ supportsTools: boolean;
59
+ supportsThinking: boolean;
60
+ supportsVision: boolean;
61
+ }>;
62
+ /**
63
+ * Initialize the default Gemini provider.
64
+ * Other providers are loaded based on workspace config.
65
+ */
66
+ export declare function initProviders(workspace: {
67
+ models: {
68
+ default: string;
69
+ fallback?: string;
70
+ local?: string;
71
+ };
72
+ }): Promise<void>;
73
+ //# sourceMappingURL=model-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../src/ai/model-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IACnE,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACzD;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAG9D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAEpE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAsBpE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,KAAK,CAAC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC,CAOD;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE;IAC7C,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhB"}