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,78 @@
1
+ /**
2
+ * Central integration registry.
3
+ *
4
+ * Manages the lifecycle of all integrations: registration, enabling/disabling,
5
+ * tool routing, and status reporting. Follows the Map-based registry pattern
6
+ * from channels/dock.ts.
7
+ */
8
+ import type { Integration, IntegrationCategory, IntegrationManifest, ToolDeclaration, ToolResult } from "./base.js";
9
+ import type { CredentialManager } from "./credential-manager.js";
10
+ export type IntegrationStatus = "active" | "disabled" | "error" | "auth-required";
11
+ export interface RegisteredIntegration {
12
+ manifest: IntegrationManifest;
13
+ instance: Integration;
14
+ enabled: boolean;
15
+ status: IntegrationStatus;
16
+ error?: string;
17
+ enabledAt?: string;
18
+ }
19
+ export declare class IntegrationRegistry {
20
+ private integrations;
21
+ private toolMap;
22
+ private credentialManager;
23
+ constructor(credentialManager: CredentialManager);
24
+ /**
25
+ * Register an integration. Does not enable it.
26
+ * Throws if any tool name conflicts with an existing tool.
27
+ */
28
+ register(integration: Integration): void;
29
+ /**
30
+ * Enable an integration. Checks credentials and calls onEnable().
31
+ */
32
+ enable(id: string): Promise<void>;
33
+ /**
34
+ * Disable an integration. Calls onDisable().
35
+ */
36
+ disable(id: string): Promise<void>;
37
+ /**
38
+ * Execute a tool by name. Routes to the correct integration.
39
+ */
40
+ executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult | null>;
41
+ /**
42
+ * Get tool declarations for all enabled integrations.
43
+ * Used to pass to Gemini function calling.
44
+ */
45
+ getToolDeclarations(): ToolDeclaration[];
46
+ /**
47
+ * Get all tool declarations (including disabled) for discovery.
48
+ */
49
+ getAllToolDeclarations(): ToolDeclaration[];
50
+ /**
51
+ * Get integrations filtered by category.
52
+ */
53
+ getByCategory(category: IntegrationCategory): RegisteredIntegration[];
54
+ /**
55
+ * Get a single integration by ID.
56
+ */
57
+ get(id: string): RegisteredIntegration | undefined;
58
+ /**
59
+ * Get status of all integrations.
60
+ */
61
+ getStatus(): Array<{
62
+ id: string;
63
+ name: string;
64
+ category: IntegrationCategory;
65
+ status: IntegrationStatus;
66
+ tools: number;
67
+ error?: string;
68
+ }>;
69
+ /**
70
+ * Total count of registered integrations.
71
+ */
72
+ get size(): number;
73
+ /**
74
+ * Count of enabled integrations.
75
+ */
76
+ get enabledCount(): number;
77
+ }
78
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/integrations/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACX,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAKjE,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,UAAU,GACV,OAAO,GACP,eAAe,CAAC;AAEpB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,iBAAiB,CAAoB;gBAEjC,iBAAiB,EAAE,iBAAiB;IAIhD;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAkCxC;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCvC;;OAEG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAexC;;OAEG;IACG,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAyB7B;;;OAGG;IACH,mBAAmB,IAAI,eAAe,EAAE;IAUxC;;OAEG;IACH,sBAAsB,IAAI,eAAe,EAAE;IAQ3C;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,mBAAmB,GAAG,qBAAqB,EAAE;IAMrE;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAIlD;;OAEG;IACH,SAAS,IAAI,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,mBAAmB,CAAC;QAC9B,MAAM,EAAE,iBAAiB,CAAC;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAWF;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;CACF"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Central integration registry.
3
+ *
4
+ * Manages the lifecycle of all integrations: registration, enabling/disabling,
5
+ * tool routing, and status reporting. Follows the Map-based registry pattern
6
+ * from channels/dock.ts.
7
+ */
8
+ import { createLogger } from "../infra/logger.js";
9
+ const log = createLogger("registry");
10
+ export class IntegrationRegistry {
11
+ integrations = new Map();
12
+ toolMap = new Map(); // tool name → integration ID
13
+ credentialManager;
14
+ constructor(credentialManager) {
15
+ this.credentialManager = credentialManager;
16
+ }
17
+ /**
18
+ * Register an integration. Does not enable it.
19
+ * Throws if any tool name conflicts with an existing tool.
20
+ */
21
+ register(integration) {
22
+ const { id } = integration.manifest;
23
+ if (this.integrations.has(id)) {
24
+ log.warn("Integration already registered: %s", id);
25
+ return;
26
+ }
27
+ // Check for tool name conflicts
28
+ for (const tool of integration.manifest.tools) {
29
+ const existing = this.toolMap.get(tool.name);
30
+ if (existing) {
31
+ throw new Error(`Tool name conflict: "${tool.name}" already registered by "${existing}"`);
32
+ }
33
+ }
34
+ // Register
35
+ this.integrations.set(id, {
36
+ manifest: integration.manifest,
37
+ instance: integration,
38
+ enabled: false,
39
+ status: "disabled",
40
+ });
41
+ // Map tool names to integration ID
42
+ for (const tool of integration.manifest.tools) {
43
+ this.toolMap.set(tool.name, id);
44
+ }
45
+ log.debug("Registered integration: %s (%d tools)", id, integration.manifest.tools.length);
46
+ }
47
+ /**
48
+ * Enable an integration. Checks credentials and calls onEnable().
49
+ */
50
+ async enable(id) {
51
+ const reg = this.integrations.get(id);
52
+ if (!reg) {
53
+ throw new Error(`Integration not found: ${id}`);
54
+ }
55
+ // Check auth requirements
56
+ if (reg.manifest.auth.type !== "none") {
57
+ if (!this.credentialManager.has(id)) {
58
+ reg.status = "auth-required";
59
+ log.info("Integration %s requires authentication", id);
60
+ return;
61
+ }
62
+ }
63
+ // Check env var requirements
64
+ if (reg.manifest.requires?.env) {
65
+ for (const envVar of reg.manifest.requires.env) {
66
+ if (!process.env[envVar]) {
67
+ reg.status = "error";
68
+ reg.error = `Missing env var: ${envVar}`;
69
+ log.warn("Integration %s missing env: %s", id, envVar);
70
+ return;
71
+ }
72
+ }
73
+ }
74
+ try {
75
+ await reg.instance.onEnable();
76
+ reg.enabled = true;
77
+ reg.status = "active";
78
+ reg.enabledAt = new Date().toISOString();
79
+ reg.error = undefined;
80
+ log.info("Enabled integration: %s", id);
81
+ }
82
+ catch (err) {
83
+ reg.status = "error";
84
+ reg.error = err instanceof Error ? err.message : String(err);
85
+ log.error("Failed to enable %s: %s", id, reg.error);
86
+ }
87
+ }
88
+ /**
89
+ * Disable an integration. Calls onDisable().
90
+ */
91
+ async disable(id) {
92
+ const reg = this.integrations.get(id);
93
+ if (!reg)
94
+ return;
95
+ try {
96
+ await reg.instance.onDisable();
97
+ }
98
+ catch {
99
+ // Best-effort cleanup
100
+ }
101
+ reg.enabled = false;
102
+ reg.status = "disabled";
103
+ log.info("Disabled integration: %s", id);
104
+ }
105
+ /**
106
+ * Execute a tool by name. Routes to the correct integration.
107
+ */
108
+ async executeTool(toolName, args) {
109
+ const integrationId = this.toolMap.get(toolName);
110
+ if (!integrationId)
111
+ return null; // Not an integration tool
112
+ const reg = this.integrations.get(integrationId);
113
+ if (!reg) {
114
+ return { success: false, output: "", error: `Integration not found: ${integrationId}` };
115
+ }
116
+ if (!reg.enabled) {
117
+ return {
118
+ success: false,
119
+ output: "",
120
+ error: `Integration "${reg.manifest.name}" is not enabled. Run: wispy integrations enable ${integrationId}`,
121
+ };
122
+ }
123
+ try {
124
+ return await reg.instance.executeTool(toolName, args);
125
+ }
126
+ catch (err) {
127
+ const message = err instanceof Error ? err.message : String(err);
128
+ log.error("Tool execution failed: %s.%s — %s", integrationId, toolName, message);
129
+ return { success: false, output: "", error: message };
130
+ }
131
+ }
132
+ /**
133
+ * Get tool declarations for all enabled integrations.
134
+ * Used to pass to Gemini function calling.
135
+ */
136
+ getToolDeclarations() {
137
+ const tools = [];
138
+ for (const reg of this.integrations.values()) {
139
+ if (reg.enabled) {
140
+ tools.push(...reg.manifest.tools);
141
+ }
142
+ }
143
+ return tools;
144
+ }
145
+ /**
146
+ * Get all tool declarations (including disabled) for discovery.
147
+ */
148
+ getAllToolDeclarations() {
149
+ const tools = [];
150
+ for (const reg of this.integrations.values()) {
151
+ tools.push(...reg.manifest.tools);
152
+ }
153
+ return tools;
154
+ }
155
+ /**
156
+ * Get integrations filtered by category.
157
+ */
158
+ getByCategory(category) {
159
+ return Array.from(this.integrations.values()).filter((r) => r.manifest.category === category);
160
+ }
161
+ /**
162
+ * Get a single integration by ID.
163
+ */
164
+ get(id) {
165
+ return this.integrations.get(id);
166
+ }
167
+ /**
168
+ * Get status of all integrations.
169
+ */
170
+ getStatus() {
171
+ return Array.from(this.integrations.values()).map((reg) => ({
172
+ id: reg.manifest.id,
173
+ name: reg.manifest.name,
174
+ category: reg.manifest.category,
175
+ status: reg.status,
176
+ tools: reg.manifest.tools.length,
177
+ error: reg.error,
178
+ }));
179
+ }
180
+ /**
181
+ * Total count of registered integrations.
182
+ */
183
+ get size() {
184
+ return this.integrations.size;
185
+ }
186
+ /**
187
+ * Count of enabled integrations.
188
+ */
189
+ get enabledCount() {
190
+ return Array.from(this.integrations.values()).filter((r) => r.enabled).length;
191
+ }
192
+ }
193
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/integrations/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;AAiBrC,MAAM,OAAO,mBAAmB;IACtB,YAAY,GAAG,IAAI,GAAG,EAAiC,CAAC;IACxD,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,6BAA6B;IAClE,iBAAiB,CAAoB;IAE7C,YAAY,iBAAoC;QAC9C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,WAAwB;QAC/B,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC;QAEpC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,wBAAwB,IAAI,CAAC,IAAI,4BAA4B,QAAQ,GAAG,CACzE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,WAAW;QACX,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE;YACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,UAAU;SACnB,CAAC,CAAC;QAEH,mCAAmC;QACnC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5F,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,0BAA0B;QAC1B,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpC,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;YAC/B,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzB,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;oBACrB,GAAG,CAAC,KAAK,GAAG,oBAAoB,MAAM,EAAE,CAAC;oBACzC,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBACvD,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC9B,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;YACnB,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;YACtB,GAAG,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACzC,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;YACrB,GAAG,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QAED,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;QACpB,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,IAA6B;QAE7B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,CAAC,0BAA0B;QAE3D,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,0BAA0B,aAAa,EAAE,EAAE,CAAC;QAC1F,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,gBAAgB,GAAG,CAAC,QAAQ,CAAC,IAAI,oDAAoD,aAAa,EAAE;aAC5G,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACjB,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAA6B;QACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,SAAS;QAQP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1D,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE;YACnB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI;YACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ;YAC/B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;YAChC,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Home Assistant Integration
3
+ *
4
+ * Provides access to a Home Assistant instance -- list entities, get state,
5
+ * and call services via the HA REST API.
6
+ *
7
+ * @requires HA_URL - Base URL of the Home Assistant instance (e.g. http://homeassistant.local:8123).
8
+ * @requires HA_TOKEN - Long-lived access token.
9
+ * @see https://developers.home-assistant.io/docs/api/rest
10
+ */
11
+ import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
12
+ export default class HomeAssistantIntegration extends Integration {
13
+ readonly manifest: IntegrationManifest;
14
+ private getCreds;
15
+ private request;
16
+ executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
17
+ private listEntities;
18
+ private getState;
19
+ private callService;
20
+ }
21
+ //# sourceMappingURL=homeassistant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homeassistant.d.ts","sourceRoot":"","sources":["../../../src/integrations/smart-home/homeassistant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpF,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,WAAW;IAC/D,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAgDpC;YAEY,QAAQ;YAMR,OAAO;IAef,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAsBzE,YAAY;YAWZ,QAAQ;YAWR,WAAW;CAQ1B"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Home Assistant Integration
3
+ *
4
+ * Provides access to a Home Assistant instance -- list entities, get state,
5
+ * and call services via the HA REST API.
6
+ *
7
+ * @requires HA_URL - Base URL of the Home Assistant instance (e.g. http://homeassistant.local:8123).
8
+ * @requires HA_TOKEN - Long-lived access token.
9
+ * @see https://developers.home-assistant.io/docs/api/rest
10
+ */
11
+ import { Integration } from "../base.js";
12
+ export default class HomeAssistantIntegration extends Integration {
13
+ manifest = {
14
+ id: "homeassistant",
15
+ name: "Home Assistant",
16
+ category: "smart-home",
17
+ version: "1.0.0",
18
+ description: "Control smart home devices via Home Assistant -- list entities, get state, call services.",
19
+ auth: {
20
+ type: "token",
21
+ envVars: ["HA_URL", "HA_TOKEN"],
22
+ },
23
+ capabilities: { offline: true },
24
+ tools: [
25
+ {
26
+ name: "ha_list_entities",
27
+ description: "List entities, optionally filtered by domain (e.g. light, switch, sensor).",
28
+ parameters: {
29
+ type: "object",
30
+ properties: {
31
+ domain: { type: "string", description: "Entity domain filter (e.g. light, switch)." },
32
+ },
33
+ },
34
+ },
35
+ {
36
+ name: "ha_get_state",
37
+ description: "Get the current state of an entity.",
38
+ parameters: {
39
+ type: "object",
40
+ properties: {
41
+ entityId: { type: "string", description: "Entity ID (e.g. light.living_room)." },
42
+ },
43
+ required: ["entityId"],
44
+ },
45
+ },
46
+ {
47
+ name: "ha_call_service",
48
+ description: "Call a Home Assistant service on an entity.",
49
+ parameters: {
50
+ type: "object",
51
+ properties: {
52
+ domain: { type: "string", description: "Service domain (e.g. light, switch, media_player)." },
53
+ service: { type: "string", description: "Service name (e.g. turn_on, turn_off, toggle)." },
54
+ entityId: { type: "string", description: "Target entity ID." },
55
+ data: { type: "object", description: "Additional service data (optional)." },
56
+ },
57
+ required: ["domain", "service", "entityId"],
58
+ },
59
+ },
60
+ ],
61
+ };
62
+ async getCreds() {
63
+ const creds = await this.getCredentials();
64
+ if (!creds?.HA_URL || !creds?.HA_TOKEN)
65
+ throw new Error("Missing HA_URL or HA_TOKEN");
66
+ return creds;
67
+ }
68
+ async request(path, options = {}) {
69
+ const creds = await this.getCreds();
70
+ const url = `${creds.HA_URL.replace(/\/$/, "")}/api${path}`;
71
+ const res = await fetch(url, {
72
+ ...options,
73
+ headers: {
74
+ Authorization: `Bearer ${creds.HA_TOKEN}`,
75
+ "Content-Type": "application/json",
76
+ ...options.headers,
77
+ },
78
+ });
79
+ if (!res.ok)
80
+ throw new Error(`Home Assistant ${res.status}: ${await res.text()}`);
81
+ return res.json();
82
+ }
83
+ async executeTool(toolName, args) {
84
+ try {
85
+ switch (toolName) {
86
+ case "ha_list_entities":
87
+ return await this.listEntities(args.domain);
88
+ case "ha_get_state":
89
+ return await this.getState(args.entityId);
90
+ case "ha_call_service":
91
+ return await this.callService(args.domain, args.service, args.entityId, args.data);
92
+ default:
93
+ return this.error(`Unknown tool: ${toolName}`);
94
+ }
95
+ }
96
+ catch (err) {
97
+ return this.error(`Home Assistant error: ${err.message}`);
98
+ }
99
+ }
100
+ async listEntities(domain) {
101
+ const states = await this.request("/states");
102
+ const filtered = domain
103
+ ? states.filter((s) => s.entity_id.startsWith(`${domain}.`))
104
+ : states;
105
+ const summary = filtered
106
+ .map((s) => `${s.entity_id}: ${s.state} (${s.attributes.friendly_name ?? ""})`)
107
+ .join("\n");
108
+ return this.ok(summary || "No entities found.", { count: filtered.length });
109
+ }
110
+ async getState(entityId) {
111
+ const data = await this.request(`/states/${entityId}`);
112
+ const attrs = Object.entries(data.attributes)
113
+ .map(([k, v]) => ` ${k}: ${v}`)
114
+ .join("\n");
115
+ return this.ok(`${entityId}: ${data.state}\n${attrs}`, {
116
+ state: data.state,
117
+ attributes: data.attributes,
118
+ });
119
+ }
120
+ async callService(domain, service, entityId, data) {
121
+ const body = { entity_id: entityId, ...data };
122
+ await this.request(`/services/${domain}/${service}`, {
123
+ method: "POST",
124
+ body: JSON.stringify(body),
125
+ });
126
+ return this.ok(`Called ${domain}.${service} on ${entityId}.`);
127
+ }
128
+ }
129
+ //# sourceMappingURL=homeassistant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homeassistant.js","sourceRoot":"","sources":["../../../src/integrations/smart-home/homeassistant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Philips Hue Integration
3
+ *
4
+ * Controls Philips Hue smart lights via the local bridge HTTP API.
5
+ * Supports listing lights, setting light state, and activating scenes.
6
+ *
7
+ * @requires HUE_BRIDGE_IP - Local IP address of the Hue Bridge.
8
+ * @requires HUE_USERNAME - Authorized username/API key for the bridge.
9
+ * @see https://developers.meethue.com/develop/hue-api-v2/
10
+ */
11
+ import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
12
+ export default class HueIntegration extends Integration {
13
+ readonly manifest: IntegrationManifest;
14
+ private getCreds;
15
+ private request;
16
+ executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
17
+ private listLights;
18
+ private setLight;
19
+ private setScene;
20
+ /** Convert a hex color string to CIE xy coordinates for Hue. */
21
+ private hexToXy;
22
+ }
23
+ //# sourceMappingURL=hue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hue.d.ts","sourceRoot":"","sources":["../../../src/integrations/smart-home/hue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpF,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CA2CpC;YAEY,QAAQ;YAQR,OAAO;IAUf,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAiBzE,UAAU;YASV,QAAQ;YAmBR,QAAQ;IAUtB,gEAAgE;IAChE,OAAO,CAAC,OAAO;CAiBhB"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Philips Hue Integration
3
+ *
4
+ * Controls Philips Hue smart lights via the local bridge HTTP API.
5
+ * Supports listing lights, setting light state, and activating scenes.
6
+ *
7
+ * @requires HUE_BRIDGE_IP - Local IP address of the Hue Bridge.
8
+ * @requires HUE_USERNAME - Authorized username/API key for the bridge.
9
+ * @see https://developers.meethue.com/develop/hue-api-v2/
10
+ */
11
+ import { Integration } from "../base.js";
12
+ export default class HueIntegration extends Integration {
13
+ manifest = {
14
+ id: "hue",
15
+ name: "Philips Hue",
16
+ category: "smart-home",
17
+ version: "1.0.0",
18
+ description: "Control Philips Hue lights -- list, toggle, adjust brightness and color.",
19
+ auth: {
20
+ type: "token",
21
+ envVars: ["HUE_BRIDGE_IP", "HUE_USERNAME"],
22
+ },
23
+ capabilities: { offline: true },
24
+ tools: [
25
+ {
26
+ name: "hue_list_lights",
27
+ description: "List all lights connected to the Hue Bridge.",
28
+ parameters: { type: "object", properties: {} },
29
+ },
30
+ {
31
+ name: "hue_set_light",
32
+ description: "Set the state of a light (on/off, brightness, color).",
33
+ parameters: {
34
+ type: "object",
35
+ properties: {
36
+ lightId: { type: "string", description: "Light ID." },
37
+ on: { type: "boolean", description: "Turn light on (true) or off (false)." },
38
+ brightness: { type: "number", description: "Brightness 0-254." },
39
+ color: { type: "string", description: "Hex color (e.g. #ff0000). Converted to Hue xy." },
40
+ },
41
+ required: ["lightId"],
42
+ },
43
+ },
44
+ {
45
+ name: "hue_set_scene",
46
+ description: "Activate a Hue scene.",
47
+ parameters: {
48
+ type: "object",
49
+ properties: {
50
+ sceneId: { type: "string", description: "Scene ID." },
51
+ },
52
+ required: ["sceneId"],
53
+ },
54
+ },
55
+ ],
56
+ };
57
+ async getCreds() {
58
+ const creds = await this.getCredentials();
59
+ if (!creds?.HUE_BRIDGE_IP || !creds?.HUE_USERNAME) {
60
+ throw new Error("Missing HUE_BRIDGE_IP or HUE_USERNAME");
61
+ }
62
+ return creds;
63
+ }
64
+ async request(path, options = {}) {
65
+ const creds = await this.getCreds();
66
+ const url = `https://${creds.HUE_BRIDGE_IP}/api/${creds.HUE_USERNAME}${path}`;
67
+ const res = await fetch(url, {
68
+ ...options,
69
+ headers: { "Content-Type": "application/json", ...options.headers },
70
+ });
71
+ return res.json();
72
+ }
73
+ async executeTool(toolName, args) {
74
+ try {
75
+ switch (toolName) {
76
+ case "hue_list_lights":
77
+ return await this.listLights();
78
+ case "hue_set_light":
79
+ return await this.setLight(args.lightId, args.on, args.brightness, args.color);
80
+ case "hue_set_scene":
81
+ return await this.setScene(args.sceneId);
82
+ default:
83
+ return this.error(`Unknown tool: ${toolName}`);
84
+ }
85
+ }
86
+ catch (err) {
87
+ return this.error(`Hue error: ${err.message}`);
88
+ }
89
+ }
90
+ async listLights() {
91
+ const data = await this.request("/lights");
92
+ const lights = Object.entries(data).map(([id, light]) => {
93
+ const state = light.state.on ? "ON" : "OFF";
94
+ return `[${id}] ${light.name} - ${state}, bri=${light.state.bri}`;
95
+ });
96
+ return this.ok(lights.join("\n") || "No lights found.", { count: lights.length });
97
+ }
98
+ async setLight(lightId, on, brightness, color) {
99
+ const state = {};
100
+ if (on !== undefined)
101
+ state.on = on;
102
+ if (brightness !== undefined)
103
+ state.bri = Math.max(0, Math.min(254, brightness));
104
+ if (color) {
105
+ const xy = this.hexToXy(color);
106
+ state.xy = xy;
107
+ }
108
+ const data = await this.request(`/lights/${lightId}/state`, {
109
+ method: "PUT",
110
+ body: JSON.stringify(state),
111
+ });
112
+ const errors = data.filter((r) => r.error);
113
+ if (errors.length)
114
+ return this.error(errors.map((e) => e.error.description).join("; "));
115
+ return this.ok(`Light ${lightId} updated.`);
116
+ }
117
+ async setScene(sceneId) {
118
+ const data = await this.request("/groups/0/action", {
119
+ method: "PUT",
120
+ body: JSON.stringify({ scene: sceneId }),
121
+ });
122
+ const errors = data.filter((r) => r.error);
123
+ if (errors.length)
124
+ return this.error(errors.map((e) => e.error.description).join("; "));
125
+ return this.ok(`Scene ${sceneId} activated.`);
126
+ }
127
+ /** Convert a hex color string to CIE xy coordinates for Hue. */
128
+ hexToXy(hex) {
129
+ const r = parseInt(hex.slice(1, 3), 16) / 255;
130
+ const g = parseInt(hex.slice(3, 5), 16) / 255;
131
+ const b = parseInt(hex.slice(5, 7), 16) / 255;
132
+ const rr = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;
133
+ const gg = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;
134
+ const bb = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;
135
+ const X = rr * 0.664511 + gg * 0.154324 + bb * 0.162028;
136
+ const Y = rr * 0.283881 + gg * 0.668433 + bb * 0.047685;
137
+ const Z = rr * 0.000088 + gg * 0.072310 + bb * 0.986039;
138
+ const sum = X + Y + Z;
139
+ if (sum === 0)
140
+ return [0.3127, 0.3290];
141
+ return [X / sum, Y / sum];
142
+ }
143
+ }
144
+ //# sourceMappingURL=hue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hue.js","sourceRoot":"","sources":["../../../src/integrations/smart-home/hue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Email SMTP Integration
3
+ *
4
+ * Sends emails via SMTP using Node.js net/tls modules directly.
5
+ * No external dependencies required -- implements a minimal SMTP client.
6
+ *
7
+ * @requires SMTP_HOST - SMTP server hostname (e.g. smtp.gmail.com).
8
+ * @requires SMTP_PORT - SMTP server port (465 for SSL, 587 for STARTTLS).
9
+ * @requires SMTP_USER - SMTP username / email address.
10
+ * @requires SMTP_PASS - SMTP password or app-specific password.
11
+ */
12
+ import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
13
+ export default class EmailSmtpIntegration extends Integration {
14
+ readonly manifest: IntegrationManifest;
15
+ executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
16
+ private sendEmail;
17
+ /**
18
+ * Minimal SMTP client using Node.js net/tls.
19
+ * Handles AUTH LOGIN over a TLS connection.
20
+ */
21
+ private smtpSend;
22
+ }
23
+ //# sourceMappingURL=email-smtp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-smtp.d.ts","sourceRoot":"","sources":["../../../src/integrations/social/email-smtp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAWpF,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,WAAW;IAC3D,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CA4BpC;IAEI,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAoBzE,SAAS;IA2DvB;;;OAGG;IACH,OAAO,CAAC,QAAQ;CAmEjB"}