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,113 @@
1
+ /**
2
+ * Slack Integration
3
+ *
4
+ * Provides bot-level access to Slack workspaces via the Slack Web API.
5
+ * Supports sending messages, listing channels, and reading message history.
6
+ *
7
+ * @requires SLACK_BOT_TOKEN - Bot User OAuth Token (xoxb-...).
8
+ * @see https://api.slack.com/methods
9
+ */
10
+ import { Integration } from "../base.js";
11
+ const API_BASE = "https://slack.com/api";
12
+ export default class SlackIntegration extends Integration {
13
+ manifest = {
14
+ id: "slack",
15
+ name: "Slack",
16
+ category: "chat",
17
+ version: "1.0.0",
18
+ description: "Send messages, list channels, and read history in Slack workspaces.",
19
+ auth: {
20
+ type: "token",
21
+ envVars: ["SLACK_BOT_TOKEN"],
22
+ },
23
+ tools: [
24
+ {
25
+ name: "slack_send_message",
26
+ description: "Send a message to a Slack channel.",
27
+ parameters: {
28
+ type: "object",
29
+ properties: {
30
+ channel: { type: "string", description: "Channel ID or name (e.g. #general)." },
31
+ text: { type: "string", description: "Message text to send." },
32
+ },
33
+ required: ["channel", "text"],
34
+ },
35
+ },
36
+ {
37
+ name: "slack_list_channels",
38
+ description: "List all public channels in the workspace.",
39
+ parameters: {
40
+ type: "object",
41
+ properties: {},
42
+ },
43
+ },
44
+ {
45
+ name: "slack_read_messages",
46
+ description: "Read recent messages from a Slack channel.",
47
+ parameters: {
48
+ type: "object",
49
+ properties: {
50
+ channel: { type: "string", description: "Channel ID." },
51
+ limit: { type: "number", description: "Number of messages to fetch (max 100).", default: 25 },
52
+ },
53
+ required: ["channel"],
54
+ },
55
+ },
56
+ ],
57
+ };
58
+ async request(method, body) {
59
+ const creds = await this.getCredentials();
60
+ if (!creds?.SLACK_BOT_TOKEN)
61
+ throw new Error("Missing SLACK_BOT_TOKEN");
62
+ const res = await fetch(`${API_BASE}/${method}`, {
63
+ method: "POST",
64
+ headers: {
65
+ Authorization: `Bearer ${creds.SLACK_BOT_TOKEN}`,
66
+ "Content-Type": "application/json; charset=utf-8",
67
+ },
68
+ body: body ? JSON.stringify(body) : undefined,
69
+ });
70
+ const data = await res.json();
71
+ if (!data.ok)
72
+ throw new Error(data.error ?? "Slack API error");
73
+ return data;
74
+ }
75
+ async executeTool(toolName, args) {
76
+ try {
77
+ switch (toolName) {
78
+ case "slack_send_message":
79
+ return await this.sendMessage(args.channel, args.text);
80
+ case "slack_list_channels":
81
+ return await this.listChannels();
82
+ case "slack_read_messages":
83
+ return await this.readMessages(args.channel, args.limit ?? 25);
84
+ default:
85
+ return this.error(`Unknown tool: ${toolName}`);
86
+ }
87
+ }
88
+ catch (err) {
89
+ return this.error(`Slack error: ${err.message}`);
90
+ }
91
+ }
92
+ async sendMessage(channel, text) {
93
+ const data = await this.request("chat.postMessage", { channel, text });
94
+ return this.ok(`Message sent to ${channel} (ts: ${data.ts})`, { ts: data.ts, channel: data.channel });
95
+ }
96
+ async listChannels() {
97
+ const data = await this.request("conversations.list", { types: "public_channel", limit: 200 });
98
+ const summary = data.channels
99
+ .map((c) => `#${c.name} (${c.id}) - ${c.num_members} members`)
100
+ .join("\n");
101
+ return this.ok(summary, { count: data.channels.length });
102
+ }
103
+ async readMessages(channel, limit) {
104
+ const clamped = Math.min(Math.max(limit, 1), 100);
105
+ const data = await this.request("conversations.history", { channel, limit: clamped });
106
+ const summary = data.messages
107
+ .map((m) => `[${m.user ?? "bot"}] ${m.text}`)
108
+ .reverse()
109
+ .join("\n");
110
+ return this.ok(summary, { count: data.messages.length });
111
+ }
112
+ }
113
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/integrations/chat/slack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * WhatsApp Cloud API Integration
3
+ *
4
+ * Sends messages and templates via the Meta WhatsApp Business Cloud API.
5
+ *
6
+ * @requires WHATSAPP_TOKEN - Permanent or temporary access token from Meta.
7
+ * @requires WHATSAPP_PHONE_ID - The phone number ID registered in your Meta app.
8
+ * @see https://developers.facebook.com/docs/whatsapp/cloud-api
9
+ */
10
+ import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
11
+ export default class WhatsAppIntegration extends Integration {
12
+ readonly manifest: IntegrationManifest;
13
+ private getCreds;
14
+ executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
15
+ private sendMessage;
16
+ private sendTemplate;
17
+ }
18
+ //# sourceMappingURL=whatsapp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp.d.ts","sourceRoot":"","sources":["../../../src/integrations/chat/whatsapp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAIpF,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,WAAW;IAC1D,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAoCpC;YAEY,QAAQ;IAQhB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAezE,WAAW;YAsBX,YAAY;CAqB3B"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * WhatsApp Cloud API Integration
3
+ *
4
+ * Sends messages and templates via the Meta WhatsApp Business Cloud API.
5
+ *
6
+ * @requires WHATSAPP_TOKEN - Permanent or temporary access token from Meta.
7
+ * @requires WHATSAPP_PHONE_ID - The phone number ID registered in your Meta app.
8
+ * @see https://developers.facebook.com/docs/whatsapp/cloud-api
9
+ */
10
+ import { Integration } from "../base.js";
11
+ const API_BASE = "https://graph.facebook.com/v18.0";
12
+ export default class WhatsAppIntegration extends Integration {
13
+ manifest = {
14
+ id: "whatsapp",
15
+ name: "WhatsApp",
16
+ category: "chat",
17
+ version: "1.0.0",
18
+ description: "Send messages and templates via the WhatsApp Cloud API.",
19
+ auth: {
20
+ type: "token",
21
+ envVars: ["WHATSAPP_TOKEN", "WHATSAPP_PHONE_ID"],
22
+ },
23
+ tools: [
24
+ {
25
+ name: "whatsapp_send_message",
26
+ description: "Send a text message to a WhatsApp number.",
27
+ parameters: {
28
+ type: "object",
29
+ properties: {
30
+ to: { type: "string", description: "Recipient phone number in E.164 format (e.g. +1234567890)." },
31
+ text: { type: "string", description: "Message text to send." },
32
+ },
33
+ required: ["to", "text"],
34
+ },
35
+ },
36
+ {
37
+ name: "whatsapp_send_template",
38
+ description: "Send an approved message template.",
39
+ parameters: {
40
+ type: "object",
41
+ properties: {
42
+ to: { type: "string", description: "Recipient phone number in E.164 format." },
43
+ templateName: { type: "string", description: "The template name as registered in Meta Business." },
44
+ },
45
+ required: ["to", "templateName"],
46
+ },
47
+ },
48
+ ],
49
+ };
50
+ async getCreds() {
51
+ const creds = await this.getCredentials();
52
+ if (!creds?.WHATSAPP_TOKEN || !creds?.WHATSAPP_PHONE_ID) {
53
+ throw new Error("Missing WHATSAPP_TOKEN or WHATSAPP_PHONE_ID");
54
+ }
55
+ return creds;
56
+ }
57
+ async executeTool(toolName, args) {
58
+ try {
59
+ switch (toolName) {
60
+ case "whatsapp_send_message":
61
+ return await this.sendMessage(args.to, args.text);
62
+ case "whatsapp_send_template":
63
+ return await this.sendTemplate(args.to, args.templateName);
64
+ default:
65
+ return this.error(`Unknown tool: ${toolName}`);
66
+ }
67
+ }
68
+ catch (err) {
69
+ return this.error(`WhatsApp error: ${err.message}`);
70
+ }
71
+ }
72
+ async sendMessage(to, text) {
73
+ const creds = await this.getCreds();
74
+ const res = await fetch(`${API_BASE}/${creds.WHATSAPP_PHONE_ID}/messages`, {
75
+ method: "POST",
76
+ headers: {
77
+ Authorization: `Bearer ${creds.WHATSAPP_TOKEN}`,
78
+ "Content-Type": "application/json",
79
+ },
80
+ body: JSON.stringify({
81
+ messaging_product: "whatsapp",
82
+ to,
83
+ type: "text",
84
+ text: { body: text },
85
+ }),
86
+ });
87
+ if (!res.ok)
88
+ return this.error(`Send failed: ${res.status} ${await res.text()}`);
89
+ const data = await res.json();
90
+ const messageId = data.messages?.[0]?.id ?? "unknown";
91
+ return this.ok(`Message sent to ${to} (id: ${messageId})`, { messageId });
92
+ }
93
+ async sendTemplate(to, templateName) {
94
+ const creds = await this.getCreds();
95
+ const res = await fetch(`${API_BASE}/${creds.WHATSAPP_PHONE_ID}/messages`, {
96
+ method: "POST",
97
+ headers: {
98
+ Authorization: `Bearer ${creds.WHATSAPP_TOKEN}`,
99
+ "Content-Type": "application/json",
100
+ },
101
+ body: JSON.stringify({
102
+ messaging_product: "whatsapp",
103
+ to,
104
+ type: "template",
105
+ template: { name: templateName, language: { code: "en_US" } },
106
+ }),
107
+ });
108
+ if (!res.ok)
109
+ return this.error(`Template send failed: ${res.status} ${await res.text()}`);
110
+ const data = await res.json();
111
+ const messageId = data.messages?.[0]?.id ?? "unknown";
112
+ return this.ok(`Template "${templateName}" sent to ${to} (id: ${messageId})`, { messageId });
113
+ }
114
+ }
115
+ //# sourceMappingURL=whatsapp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../../src/integrations/chat/whatsapp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Encrypted credential storage for integrations.
3
+ *
4
+ * All credentials (OAuth tokens, API keys) are encrypted at rest using the
5
+ * device's Ed25519-derived AES-256 key. Credentials are decrypted on-demand
6
+ * and cached in memory for the session.
7
+ */
8
+ export interface StoredCredential {
9
+ integrationId: string;
10
+ type: "oauth2" | "api-key" | "token";
11
+ encryptedData: string;
12
+ createdAt: string;
13
+ expiresAt?: string;
14
+ }
15
+ export interface OAuthTokens {
16
+ access_token: string;
17
+ refresh_token?: string;
18
+ expires_in?: number;
19
+ token_type?: string;
20
+ scope?: string;
21
+ }
22
+ export declare class CredentialManager {
23
+ private runtimeDir;
24
+ private encryptionKey;
25
+ private credentials;
26
+ private cache;
27
+ constructor(runtimeDir: string, deviceSecret: Buffer);
28
+ private getStorePath;
29
+ private load;
30
+ private save;
31
+ /**
32
+ * Store OAuth2 tokens (encrypted).
33
+ */
34
+ setOAuth2(integrationId: string, tokens: OAuthTokens): void;
35
+ /**
36
+ * Store an API key (encrypted).
37
+ */
38
+ setApiKey(integrationId: string, apiKey: string): void;
39
+ /**
40
+ * Store a bearer/access token (encrypted).
41
+ */
42
+ setToken(integrationId: string, token: string): void;
43
+ /**
44
+ * Retrieve and decrypt credentials. Returns cached value if available.
45
+ */
46
+ get(integrationId: string): unknown | null;
47
+ /**
48
+ * Check if credentials exist for an integration.
49
+ */
50
+ has(integrationId: string): boolean;
51
+ /**
52
+ * Check if OAuth tokens are expired.
53
+ */
54
+ isExpired(integrationId: string): boolean;
55
+ /**
56
+ * Delete credentials for an integration.
57
+ */
58
+ delete(integrationId: string): void;
59
+ /**
60
+ * List all stored credential IDs.
61
+ */
62
+ listIds(): string[];
63
+ /**
64
+ * Get credential metadata (without decrypting).
65
+ */
66
+ getMetadata(integrationId: string): Omit<StoredCredential, "encryptedData"> | null;
67
+ }
68
+ //# sourceMappingURL=credential-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-manager.d.ts","sourceRoot":"","sources":["../../src/integrations/credential-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,KAAK,CAA8B;gBAE/B,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAMpD,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,IAAI;IASZ;;OAEG;IACH,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAiB3D;;OAEG;IACH,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IActD;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAcpD;;OAEG;IACH,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAmB1C;;OAEG;IACH,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAInC;;OAEG;IACH,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAMzC;;OAEG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAOnC;;OAEG;IACH,OAAO,IAAI,MAAM,EAAE;IAInB;;OAEG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,GAAG,IAAI;CAMnF"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Encrypted credential storage for integrations.
3
+ *
4
+ * All credentials (OAuth tokens, API keys) are encrypted at rest using the
5
+ * device's Ed25519-derived AES-256 key. Credentials are decrypted on-demand
6
+ * and cached in memory for the session.
7
+ */
8
+ import { resolve } from "path";
9
+ import { readJSON, writeJSON, ensureDir } from "../utils/file.js";
10
+ import { encrypt, decrypt, deriveKey } from "../utils/crypto.js";
11
+ import { createLogger } from "../infra/logger.js";
12
+ const log = createLogger("credentials");
13
+ export class CredentialManager {
14
+ runtimeDir;
15
+ encryptionKey;
16
+ credentials = new Map();
17
+ cache = new Map();
18
+ constructor(runtimeDir, deviceSecret) {
19
+ this.runtimeDir = runtimeDir;
20
+ this.encryptionKey = deriveKey(deviceSecret);
21
+ this.load();
22
+ }
23
+ getStorePath() {
24
+ return resolve(this.runtimeDir, "integrations", "credentials.json");
25
+ }
26
+ load() {
27
+ const store = readJSON(this.getStorePath());
28
+ if (store?.credentials) {
29
+ for (const cred of store.credentials) {
30
+ this.credentials.set(cred.integrationId, cred);
31
+ }
32
+ log.debug("Loaded %d stored credential(s)", this.credentials.size);
33
+ }
34
+ }
35
+ save() {
36
+ ensureDir(resolve(this.runtimeDir, "integrations"));
37
+ const store = {
38
+ version: 1,
39
+ credentials: Array.from(this.credentials.values()),
40
+ };
41
+ writeJSON(this.getStorePath(), store);
42
+ }
43
+ /**
44
+ * Store OAuth2 tokens (encrypted).
45
+ */
46
+ setOAuth2(integrationId, tokens) {
47
+ const encrypted = encrypt(JSON.stringify(tokens), this.encryptionKey);
48
+ const cred = {
49
+ integrationId,
50
+ type: "oauth2",
51
+ encryptedData: encrypted,
52
+ createdAt: new Date().toISOString(),
53
+ expiresAt: tokens.expires_in
54
+ ? new Date(Date.now() + tokens.expires_in * 1000).toISOString()
55
+ : undefined,
56
+ };
57
+ this.credentials.set(integrationId, cred);
58
+ this.cache.delete(integrationId);
59
+ this.save();
60
+ log.info("OAuth2 credentials stored for: %s", integrationId);
61
+ }
62
+ /**
63
+ * Store an API key (encrypted).
64
+ */
65
+ setApiKey(integrationId, apiKey) {
66
+ const encrypted = encrypt(apiKey, this.encryptionKey);
67
+ const cred = {
68
+ integrationId,
69
+ type: "api-key",
70
+ encryptedData: encrypted,
71
+ createdAt: new Date().toISOString(),
72
+ };
73
+ this.credentials.set(integrationId, cred);
74
+ this.cache.delete(integrationId);
75
+ this.save();
76
+ log.info("API key stored for: %s", integrationId);
77
+ }
78
+ /**
79
+ * Store a bearer/access token (encrypted).
80
+ */
81
+ setToken(integrationId, token) {
82
+ const encrypted = encrypt(token, this.encryptionKey);
83
+ const cred = {
84
+ integrationId,
85
+ type: "token",
86
+ encryptedData: encrypted,
87
+ createdAt: new Date().toISOString(),
88
+ };
89
+ this.credentials.set(integrationId, cred);
90
+ this.cache.delete(integrationId);
91
+ this.save();
92
+ log.info("Token stored for: %s", integrationId);
93
+ }
94
+ /**
95
+ * Retrieve and decrypt credentials. Returns cached value if available.
96
+ */
97
+ get(integrationId) {
98
+ if (this.cache.has(integrationId)) {
99
+ return this.cache.get(integrationId);
100
+ }
101
+ const cred = this.credentials.get(integrationId);
102
+ if (!cred)
103
+ return null;
104
+ try {
105
+ const decrypted = decrypt(cred.encryptedData, this.encryptionKey);
106
+ const parsed = cred.type === "oauth2" ? JSON.parse(decrypted) : decrypted;
107
+ this.cache.set(integrationId, parsed);
108
+ return parsed;
109
+ }
110
+ catch (err) {
111
+ log.error("Failed to decrypt credentials for: %s", integrationId);
112
+ return null;
113
+ }
114
+ }
115
+ /**
116
+ * Check if credentials exist for an integration.
117
+ */
118
+ has(integrationId) {
119
+ return this.credentials.has(integrationId);
120
+ }
121
+ /**
122
+ * Check if OAuth tokens are expired.
123
+ */
124
+ isExpired(integrationId) {
125
+ const cred = this.credentials.get(integrationId);
126
+ if (!cred?.expiresAt)
127
+ return false;
128
+ return new Date(cred.expiresAt) < new Date();
129
+ }
130
+ /**
131
+ * Delete credentials for an integration.
132
+ */
133
+ delete(integrationId) {
134
+ this.credentials.delete(integrationId);
135
+ this.cache.delete(integrationId);
136
+ this.save();
137
+ log.info("Credentials deleted for: %s", integrationId);
138
+ }
139
+ /**
140
+ * List all stored credential IDs.
141
+ */
142
+ listIds() {
143
+ return Array.from(this.credentials.keys());
144
+ }
145
+ /**
146
+ * Get credential metadata (without decrypting).
147
+ */
148
+ getMetadata(integrationId) {
149
+ const cred = this.credentials.get(integrationId);
150
+ if (!cred)
151
+ return null;
152
+ const { encryptedData: _, ...meta } = cred;
153
+ return meta;
154
+ }
155
+ }
156
+ //# sourceMappingURL=credential-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../../src/integrations/credential-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Google Calendar Integration
3
+ *
4
+ * Provides tools for listing, creating, and deleting calendar events
5
+ * via the Google Calendar REST API v3.
6
+ *
7
+ * @see https://developers.google.com/calendar/api/v3/reference
8
+ */
9
+ import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
10
+ export default class GoogleCalendarIntegration extends Integration {
11
+ readonly manifest: IntegrationManifest;
12
+ executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
13
+ private listEvents;
14
+ private createEvent;
15
+ private deleteEvent;
16
+ }
17
+ //# sourceMappingURL=calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/integrations/google/calendar.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAIpF,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,WAAW;IAChE,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CA6DpC;IAEI,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAazE,UAAU;YAoBV,WAAW;YAuBX,WAAW;CAa1B"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Google Calendar Integration
3
+ *
4
+ * Provides tools for listing, creating, and deleting calendar events
5
+ * via the Google Calendar REST API v3.
6
+ *
7
+ * @see https://developers.google.com/calendar/api/v3/reference
8
+ */
9
+ import { Integration } from "../base.js";
10
+ const BASE = "https://www.googleapis.com/calendar/v3";
11
+ export default class GoogleCalendarIntegration extends Integration {
12
+ manifest = {
13
+ id: "google-calendar",
14
+ name: "Google Calendar",
15
+ category: "google",
16
+ version: "1.0.0",
17
+ description: "List, create, and delete Google Calendar events.",
18
+ auth: {
19
+ type: "oauth2",
20
+ scopes: [
21
+ "https://www.googleapis.com/auth/calendar.readonly",
22
+ "https://www.googleapis.com/auth/calendar.events",
23
+ ],
24
+ },
25
+ tools: [
26
+ {
27
+ name: "google_calendar_list_events",
28
+ description: "List upcoming events from a Google Calendar.",
29
+ parameters: {
30
+ type: "object",
31
+ properties: {
32
+ calendarId: { type: "string", description: "Calendar ID (default: 'primary')." },
33
+ maxResults: { type: "number", description: "Max events to return (default: 10)." },
34
+ timeMin: { type: "string", description: "Lower bound (RFC3339) for event start." },
35
+ timeMax: { type: "string", description: "Upper bound (RFC3339) for event start." },
36
+ },
37
+ required: [],
38
+ },
39
+ },
40
+ {
41
+ name: "google_calendar_create_event",
42
+ description: "Create a new event on a Google Calendar.",
43
+ parameters: {
44
+ type: "object",
45
+ properties: {
46
+ summary: { type: "string", description: "Event title." },
47
+ description: { type: "string", description: "Event description." },
48
+ start: { type: "string", description: "Start datetime (RFC3339)." },
49
+ end: { type: "string", description: "End datetime (RFC3339)." },
50
+ attendees: {
51
+ type: "array",
52
+ items: { type: "string", description: "" },
53
+ description: "List of attendee email addresses.",
54
+ },
55
+ calendarId: { type: "string", description: "Calendar ID (default: 'primary')." },
56
+ },
57
+ required: ["summary", "start", "end"],
58
+ },
59
+ },
60
+ {
61
+ name: "google_calendar_delete_event",
62
+ description: "Delete an event from a Google Calendar.",
63
+ parameters: {
64
+ type: "object",
65
+ properties: {
66
+ eventId: { type: "string", description: "The event ID to delete." },
67
+ calendarId: { type: "string", description: "Calendar ID (default: 'primary')." },
68
+ },
69
+ required: ["eventId"],
70
+ },
71
+ },
72
+ ],
73
+ };
74
+ async executeTool(toolName, args) {
75
+ switch (toolName) {
76
+ case "google_calendar_list_events":
77
+ return this.listEvents(args);
78
+ case "google_calendar_create_event":
79
+ return this.createEvent(args);
80
+ case "google_calendar_delete_event":
81
+ return this.deleteEvent(args);
82
+ default:
83
+ return this.error(`Unknown tool: ${toolName}`);
84
+ }
85
+ }
86
+ async listEvents(args) {
87
+ const { googleApiFetch } = await import("./oauth.js");
88
+ const calendarId = encodeURIComponent(args.calendarId || "primary");
89
+ const params = new URLSearchParams({
90
+ maxResults: String(args.maxResults ?? 10),
91
+ singleEvents: "true",
92
+ orderBy: "startTime",
93
+ });
94
+ if (args.timeMin)
95
+ params.set("timeMin", args.timeMin);
96
+ if (args.timeMax)
97
+ params.set("timeMax", args.timeMax);
98
+ const res = await googleApiFetch(this.ctx, this.manifest.id, `${BASE}/calendars/${calendarId}/events?${params}`);
99
+ const data = await res.json();
100
+ return this.ok(JSON.stringify(data, null, 2));
101
+ }
102
+ async createEvent(args) {
103
+ const { googleApiFetch } = await import("./oauth.js");
104
+ const calendarId = encodeURIComponent(args.calendarId || "primary");
105
+ const body = {
106
+ summary: args.summary,
107
+ description: args.description,
108
+ start: { dateTime: args.start },
109
+ end: { dateTime: args.end },
110
+ };
111
+ if (Array.isArray(args.attendees)) {
112
+ body.attendees = args.attendees.map((email) => ({ email }));
113
+ }
114
+ const res = await googleApiFetch(this.ctx, this.manifest.id, `${BASE}/calendars/${calendarId}/events`, { method: "POST", body: JSON.stringify(body) });
115
+ const data = await res.json();
116
+ return this.ok(JSON.stringify(data, null, 2));
117
+ }
118
+ async deleteEvent(args) {
119
+ const { googleApiFetch } = await import("./oauth.js");
120
+ const calendarId = encodeURIComponent(args.calendarId || "primary");
121
+ const eventId = encodeURIComponent(args.eventId);
122
+ await googleApiFetch(this.ctx, this.manifest.id, `${BASE}/calendars/${calendarId}/events/${eventId}`, { method: "DELETE" });
123
+ return this.ok("Event deleted successfully.");
124
+ }
125
+ }
126
+ //# sourceMappingURL=calendar.js.map