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,168 @@
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 } from "../base.js";
13
+ import * as tls from "node:tls";
14
+ import * as net from "node:net";
15
+ export default class EmailSmtpIntegration extends Integration {
16
+ manifest = {
17
+ id: "email-smtp",
18
+ name: "Email (SMTP)",
19
+ category: "social",
20
+ version: "1.0.0",
21
+ description: "Send emails via SMTP -- supports plain text and HTML bodies.",
22
+ auth: {
23
+ type: "api-key",
24
+ envVars: ["SMTP_HOST", "SMTP_PORT", "SMTP_USER", "SMTP_PASS"],
25
+ },
26
+ tools: [
27
+ {
28
+ name: "email_send",
29
+ description: "Send an email.",
30
+ parameters: {
31
+ type: "object",
32
+ properties: {
33
+ to: { type: "string", description: "Recipient email address." },
34
+ subject: { type: "string", description: "Email subject line." },
35
+ body: { type: "string", description: "Plain text body." },
36
+ cc: { type: "string", description: "CC recipients (comma-separated)." },
37
+ bcc: { type: "string", description: "BCC recipients (comma-separated)." },
38
+ html: { type: "string", description: "HTML body (overrides plain text body if provided)." },
39
+ },
40
+ required: ["to", "subject", "body"],
41
+ },
42
+ },
43
+ ],
44
+ };
45
+ async executeTool(toolName, args) {
46
+ try {
47
+ switch (toolName) {
48
+ case "email_send":
49
+ return await this.sendEmail(args.to, args.subject, args.body, args.cc, args.bcc, args.html);
50
+ default:
51
+ return this.error(`Unknown tool: ${toolName}`);
52
+ }
53
+ }
54
+ catch (err) {
55
+ return this.error(`Email error: ${err.message}`);
56
+ }
57
+ }
58
+ async sendEmail(to, subject, body, cc, bcc, html) {
59
+ const creds = await this.getCredentials();
60
+ if (!creds?.SMTP_HOST || !creds?.SMTP_USER || !creds?.SMTP_PASS) {
61
+ return this.error("Missing SMTP credentials");
62
+ }
63
+ const port = parseInt(creds.SMTP_PORT || "465", 10);
64
+ const useDirectTls = port === 465;
65
+ const allRecipients = [to];
66
+ if (cc)
67
+ allRecipients.push(...cc.split(",").map((e) => e.trim()));
68
+ if (bcc)
69
+ allRecipients.push(...bcc.split(",").map((e) => e.trim()));
70
+ // Build MIME message
71
+ const boundary = `----wispy-${Date.now()}`;
72
+ const headers = [
73
+ `From: ${creds.SMTP_USER}`,
74
+ `To: ${to}`,
75
+ cc ? `Cc: ${cc}` : "",
76
+ `Subject: ${subject}`,
77
+ `MIME-Version: 1.0`,
78
+ html
79
+ ? `Content-Type: multipart/alternative; boundary="${boundary}"`
80
+ : `Content-Type: text/plain; charset=utf-8`,
81
+ `Date: ${new Date().toUTCString()}`,
82
+ ]
83
+ .filter(Boolean)
84
+ .join("\r\n");
85
+ let messageBody;
86
+ if (html) {
87
+ messageBody = [
88
+ `--${boundary}`,
89
+ `Content-Type: text/plain; charset=utf-8`,
90
+ ``,
91
+ body,
92
+ `--${boundary}`,
93
+ `Content-Type: text/html; charset=utf-8`,
94
+ ``,
95
+ html,
96
+ `--${boundary}--`,
97
+ ].join("\r\n");
98
+ }
99
+ else {
100
+ messageBody = body;
101
+ }
102
+ const message = `${headers}\r\n\r\n${messageBody}`;
103
+ await this.smtpSend(creds, allRecipients, message, useDirectTls);
104
+ return this.ok(`Email sent to ${to}`, { to, subject, cc, bcc });
105
+ }
106
+ /**
107
+ * Minimal SMTP client using Node.js net/tls.
108
+ * Handles AUTH LOGIN over a TLS connection.
109
+ */
110
+ smtpSend(creds, recipients, message, useDirectTls) {
111
+ return new Promise((resolve, reject) => {
112
+ const port = parseInt(creds.SMTP_PORT || "465", 10);
113
+ let socket;
114
+ const commands = [];
115
+ let step = 0;
116
+ const buildCommands = () => {
117
+ commands.push(`EHLO wispy`);
118
+ commands.push(`AUTH LOGIN`);
119
+ commands.push(Buffer.from(creds.SMTP_USER).toString("base64"));
120
+ commands.push(Buffer.from(creds.SMTP_PASS).toString("base64"));
121
+ commands.push(`MAIL FROM:<${creds.SMTP_USER}>`);
122
+ for (const r of recipients) {
123
+ commands.push(`RCPT TO:<${r}>`);
124
+ }
125
+ commands.push(`DATA`);
126
+ };
127
+ buildCommands();
128
+ const onData = (data) => {
129
+ const response = data.toString();
130
+ const code = parseInt(response.slice(0, 3), 10);
131
+ if (code >= 400) {
132
+ socket.end();
133
+ reject(new Error(`SMTP error: ${response.trim()}`));
134
+ return;
135
+ }
136
+ if (step < commands.length) {
137
+ socket.write(`${commands[step]}\r\n`);
138
+ step++;
139
+ }
140
+ else if (step === commands.length) {
141
+ // After DATA command, server responds with 354, send message
142
+ socket.write(`${message}\r\n.\r\n`);
143
+ step++;
144
+ }
145
+ else {
146
+ socket.write(`QUIT\r\n`);
147
+ socket.end();
148
+ resolve();
149
+ }
150
+ };
151
+ if (useDirectTls) {
152
+ socket = tls.connect({ host: creds.SMTP_HOST, port, rejectUnauthorized: true }, () => {
153
+ // Wait for greeting
154
+ });
155
+ }
156
+ else {
157
+ socket = net.connect({ host: creds.SMTP_HOST, port });
158
+ }
159
+ socket.on("data", onData);
160
+ socket.on("error", reject);
161
+ socket.setTimeout(15000, () => {
162
+ socket.destroy();
163
+ reject(new Error("SMTP connection timed out"));
164
+ });
165
+ });
166
+ }
167
+ }
168
+ //# sourceMappingURL=email-smtp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-smtp.js","sourceRoot":"","sources":["../../../src/integrations/social/email-smtp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAA6C,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAShC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,WAAW;IAClD,QAAQ,GAAwB;QACvC,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,8DAA8D;QAC3E,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;SAC9D;QACD,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,gBAAgB;gBAC7B,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;wBAC/D,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;wBAC/D,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;wBACzD,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;wBACvE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;wBACzE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oDAAoD,EAAE;qBAC5F;oBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC;iBACpC;aACF;SACF;KACF,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,IAA6B;QAC/D,IAAI,CAAC;YACH,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,YAAY;oBACf,OAAO,MAAM,IAAI,CAAC,SAAS,CACzB,IAAI,CAAC,EAAY,EACjB,IAAI,CAAC,OAAiB,EACtB,IAAI,CAAC,IAAc,EACnB,IAAI,CAAC,EAAwB,EAC7B,IAAI,CAAC,GAAyB,EAC9B,IAAI,CAAC,IAA0B,CAChC,CAAC;gBACJ;oBACE,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAiB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,EAAU,EACV,OAAe,EACf,IAAY,EACZ,EAAW,EACX,GAAY,EACZ,IAAa;QAEb,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAa,CAAC;QACrD,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,KAAK,GAAG,CAAC;QAElC,MAAM,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,EAAE;YAAE,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,GAAG;YAAE,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAEpE,qBAAqB;QACrB,MAAM,QAAQ,GAAG,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG;YACd,SAAS,KAAK,CAAC,SAAS,EAAE;YAC1B,OAAO,EAAE,EAAE;YACX,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;YACrB,YAAY,OAAO,EAAE;YACrB,mBAAmB;YACnB,IAAI;gBACF,CAAC,CAAC,kDAAkD,QAAQ,GAAG;gBAC/D,CAAC,CAAC,yCAAyC;YAC7C,SAAS,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;SACpC;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,IAAI,WAAmB,CAAC;QACxB,IAAI,IAAI,EAAE,CAAC;YACT,WAAW,GAAG;gBACZ,KAAK,QAAQ,EAAE;gBACf,yCAAyC;gBACzC,EAAE;gBACF,IAAI;gBACJ,KAAK,QAAQ,EAAE;gBACf,wCAAwC;gBACxC,EAAE;gBACF,IAAI;gBACJ,KAAK,QAAQ,IAAI;aAClB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,OAAO,WAAW,WAAW,EAAE,CAAC;QAEnD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACK,QAAQ,CACd,KAAgB,EAChB,UAAoB,EACpB,OAAe,EACf,YAAqB;QAErB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,MAAkC,CAAC;YAEvC,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,IAAI,GAAG,CAAC,CAAC;YAEb,MAAM,aAAa,GAAG,GAAG,EAAE;gBACzB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC/D,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC/D,QAAQ,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;gBAChD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAClC,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC,CAAC;YAEF,aAAa,EAAE,CAAC;YAEhB,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEhD,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;oBAChB,MAAM,CAAC,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;oBACpD,OAAO;gBACT,CAAC;gBAED,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACtC,IAAI,EAAE,CAAC;gBACT,CAAC;qBAAM,IAAI,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACpC,6DAA6D;oBAC7D,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC;oBACpC,IAAI,EAAE,CAAC;gBACT,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACzB,MAAM,CAAC,GAAG,EAAE,CAAC;oBACb,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE;oBACnF,oBAAoB;gBACtB,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC5B,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Twitter/X Integration
3
+ *
4
+ * Posts tweets, threads, and searches via the Twitter API v2.
5
+ * Uses OAuth 1.0a User Context for posting and App/User context for search.
6
+ *
7
+ * @requires TWITTER_API_KEY - Consumer API key.
8
+ * @requires TWITTER_API_SECRET - Consumer API secret.
9
+ * @requires TWITTER_ACCESS_TOKEN - User access token.
10
+ * @requires TWITTER_ACCESS_SECRET - User access token secret.
11
+ * @see https://developer.twitter.com/en/docs/twitter-api
12
+ */
13
+ import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
14
+ export default class TwitterIntegration extends Integration {
15
+ readonly manifest: IntegrationManifest;
16
+ private getCreds;
17
+ /**
18
+ * Generate OAuth 1.0a Authorization header.
19
+ * Required for user-context endpoints (posting tweets).
20
+ */
21
+ private buildOAuthHeader;
22
+ private postTweet;
23
+ executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
24
+ private post;
25
+ private thread;
26
+ private search;
27
+ }
28
+ //# sourceMappingURL=twitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twitter.d.ts","sourceRoot":"","sources":["../../../src/integrations/social/twitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAYpF,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACzD,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CA6CpC;YAEY,QAAQ;IAQtB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;YA4BV,SAAS;IAmBjB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAiBzE,IAAI;YAMJ,MAAM;YAcN,MAAM;CAmBrB"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Twitter/X Integration
3
+ *
4
+ * Posts tweets, threads, and searches via the Twitter API v2.
5
+ * Uses OAuth 1.0a User Context for posting and App/User context for search.
6
+ *
7
+ * @requires TWITTER_API_KEY - Consumer API key.
8
+ * @requires TWITTER_API_SECRET - Consumer API secret.
9
+ * @requires TWITTER_ACCESS_TOKEN - User access token.
10
+ * @requires TWITTER_ACCESS_SECRET - User access token secret.
11
+ * @see https://developer.twitter.com/en/docs/twitter-api
12
+ */
13
+ import { Integration } from "../base.js";
14
+ import { createHmac, randomBytes } from "node:crypto";
15
+ const API_BASE = "https://api.twitter.com/2";
16
+ export default class TwitterIntegration extends Integration {
17
+ manifest = {
18
+ id: "twitter",
19
+ name: "Twitter / X",
20
+ category: "social",
21
+ version: "1.0.0",
22
+ description: "Post tweets, threads, and search on Twitter/X.",
23
+ auth: {
24
+ type: "oauth2",
25
+ envVars: ["TWITTER_API_KEY", "TWITTER_API_SECRET", "TWITTER_ACCESS_TOKEN", "TWITTER_ACCESS_SECRET"],
26
+ },
27
+ tools: [
28
+ {
29
+ name: "twitter_post",
30
+ description: "Post a tweet.",
31
+ parameters: {
32
+ type: "object",
33
+ properties: {
34
+ text: { type: "string", description: "Tweet text (max 280 characters)." },
35
+ },
36
+ required: ["text"],
37
+ },
38
+ },
39
+ {
40
+ name: "twitter_thread",
41
+ description: "Post a thread of tweets.",
42
+ parameters: {
43
+ type: "object",
44
+ properties: {
45
+ tweets: { type: "array", description: "Array of tweet texts.", items: { type: "string", description: "Individual tweet text." } },
46
+ },
47
+ required: ["tweets"],
48
+ },
49
+ },
50
+ {
51
+ name: "twitter_search",
52
+ description: "Search for recent tweets.",
53
+ parameters: {
54
+ type: "object",
55
+ properties: {
56
+ query: { type: "string", description: "Search query." },
57
+ },
58
+ required: ["query"],
59
+ },
60
+ },
61
+ ],
62
+ };
63
+ async getCreds() {
64
+ const creds = await this.getCredentials();
65
+ if (!creds?.TWITTER_API_KEY || !creds?.TWITTER_ACCESS_TOKEN) {
66
+ throw new Error("Missing Twitter credentials");
67
+ }
68
+ return creds;
69
+ }
70
+ /**
71
+ * Generate OAuth 1.0a Authorization header.
72
+ * Required for user-context endpoints (posting tweets).
73
+ */
74
+ buildOAuthHeader(method, url, creds) {
75
+ const timestamp = Math.floor(Date.now() / 1000).toString();
76
+ const nonce = randomBytes(16).toString("hex");
77
+ const params = {
78
+ oauth_consumer_key: creds.TWITTER_API_KEY,
79
+ oauth_nonce: nonce,
80
+ oauth_signature_method: "HMAC-SHA1",
81
+ oauth_timestamp: timestamp,
82
+ oauth_token: creds.TWITTER_ACCESS_TOKEN,
83
+ oauth_version: "1.0",
84
+ };
85
+ const sortedKeys = Object.keys(params).sort();
86
+ const paramStr = sortedKeys.map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`).join("&");
87
+ const baseStr = `${method.toUpperCase()}&${encodeURIComponent(url)}&${encodeURIComponent(paramStr)}`;
88
+ const signingKey = `${encodeURIComponent(creds.TWITTER_API_SECRET)}&${encodeURIComponent(creds.TWITTER_ACCESS_SECRET)}`;
89
+ const signature = createHmac("sha1", signingKey).update(baseStr).digest("base64");
90
+ params.oauth_signature = signature;
91
+ const header = Object.keys(params)
92
+ .sort()
93
+ .map((k) => `${encodeURIComponent(k)}="${encodeURIComponent(params[k])}"`)
94
+ .join(", ");
95
+ return `OAuth ${header}`;
96
+ }
97
+ async postTweet(text, replyToId) {
98
+ const creds = await this.getCreds();
99
+ const url = `${API_BASE}/tweets`;
100
+ const body = { text };
101
+ if (replyToId)
102
+ body.reply = { in_reply_to_tweet_id: replyToId };
103
+ const res = await fetch(url, {
104
+ method: "POST",
105
+ headers: {
106
+ Authorization: this.buildOAuthHeader("POST", url, creds),
107
+ "Content-Type": "application/json",
108
+ },
109
+ body: JSON.stringify(body),
110
+ });
111
+ if (!res.ok)
112
+ throw new Error(`Twitter ${res.status}: ${await res.text()}`);
113
+ return res.json();
114
+ }
115
+ async executeTool(toolName, args) {
116
+ try {
117
+ switch (toolName) {
118
+ case "twitter_post":
119
+ return await this.post(args.text);
120
+ case "twitter_thread":
121
+ return await this.thread(args.tweets);
122
+ case "twitter_search":
123
+ return await this.search(args.query);
124
+ default:
125
+ return this.error(`Unknown tool: ${toolName}`);
126
+ }
127
+ }
128
+ catch (err) {
129
+ return this.error(`Twitter error: ${err.message}`);
130
+ }
131
+ }
132
+ async post(text) {
133
+ const data = await this.postTweet(text);
134
+ const id = data.data?.id;
135
+ return this.ok(`Tweet posted (id: ${id})`, { tweetId: id });
136
+ }
137
+ async thread(tweets) {
138
+ if (!tweets.length)
139
+ return this.error("Thread must contain at least one tweet.");
140
+ const ids = [];
141
+ let lastId;
142
+ for (const text of tweets) {
143
+ const data = await this.postTweet(text, lastId);
144
+ lastId = data.data?.id;
145
+ if (lastId)
146
+ ids.push(lastId);
147
+ }
148
+ return this.ok(`Thread posted (${ids.length} tweets)`, { tweetIds: ids });
149
+ }
150
+ async search(query) {
151
+ const creds = await this.getCreds();
152
+ const url = `${API_BASE}/tweets/search/recent?query=${encodeURIComponent(query)}&max_results=10&tweet.fields=author_id,created_at,text`;
153
+ const res = await fetch(url, {
154
+ headers: {
155
+ Authorization: this.buildOAuthHeader("GET", url.split("?")[0], creds),
156
+ },
157
+ });
158
+ if (!res.ok)
159
+ throw new Error(`Search failed: ${res.status} ${await res.text()}`);
160
+ const data = await res.json();
161
+ const tweets = data.data ?? [];
162
+ const summary = tweets
163
+ .map((t) => `[${t.author_id}] ${t.text}`)
164
+ .join("\n---\n");
165
+ return this.ok(summary || "No results found.", { count: tweets.length });
166
+ }
167
+ }
168
+ //# sourceMappingURL=twitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twitter.js","sourceRoot":"","sources":["../../../src/integrations/social/twitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Browser Integration
3
+ *
4
+ * Provides basic web content extraction using fetch, and describes
5
+ * placeholder capabilities for full browser automation (Puppeteer/Playwright).
6
+ * The navigate and screenshot tools note that full automation requires
7
+ * an optional Puppeteer dependency.
8
+ *
9
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
10
+ */
11
+ import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
12
+ export default class BrowserIntegration extends Integration {
13
+ readonly manifest: IntegrationManifest;
14
+ executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
15
+ private navigate;
16
+ private extract;
17
+ }
18
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/integrations/tools/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpF,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACzD,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CA4CpC;IAEI,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAoBzE,QAAQ;YAUR,OAAO;CA6CtB"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Browser Integration
3
+ *
4
+ * Provides basic web content extraction using fetch, and describes
5
+ * placeholder capabilities for full browser automation (Puppeteer/Playwright).
6
+ * The navigate and screenshot tools note that full automation requires
7
+ * an optional Puppeteer dependency.
8
+ *
9
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
10
+ */
11
+ import { Integration } from "../base.js";
12
+ export default class BrowserIntegration extends Integration {
13
+ manifest = {
14
+ id: "browser",
15
+ name: "Browser",
16
+ category: "tools",
17
+ version: "1.0.0",
18
+ description: "Navigate URLs, take screenshots, and extract content from web pages.",
19
+ auth: { type: "none" },
20
+ capabilities: { offline: false },
21
+ tools: [
22
+ {
23
+ name: "browser_navigate",
24
+ description: "Fetch a URL and return the HTML content. For full browser automation, install puppeteer.",
25
+ parameters: {
26
+ type: "object",
27
+ properties: {
28
+ url: { type: "string", description: "URL to navigate to." },
29
+ },
30
+ required: ["url"],
31
+ },
32
+ },
33
+ {
34
+ name: "browser_screenshot",
35
+ description: "Take a screenshot of a URL. Requires puppeteer to be installed.",
36
+ parameters: {
37
+ type: "object",
38
+ properties: {
39
+ url: { type: "string", description: "URL to screenshot." },
40
+ },
41
+ required: ["url"],
42
+ },
43
+ },
44
+ {
45
+ name: "browser_extract",
46
+ description: "Extract text content from a URL, optionally targeting a CSS selector.",
47
+ parameters: {
48
+ type: "object",
49
+ properties: {
50
+ url: { type: "string", description: "URL to extract from." },
51
+ selector: { type: "string", description: "CSS selector to target (extracts all text if omitted)." },
52
+ },
53
+ required: ["url"],
54
+ },
55
+ },
56
+ ],
57
+ };
58
+ async executeTool(toolName, args) {
59
+ try {
60
+ switch (toolName) {
61
+ case "browser_navigate":
62
+ return await this.navigate(args.url);
63
+ case "browser_screenshot":
64
+ return this.error("Screenshot requires puppeteer. Install it with: npm install puppeteer. " +
65
+ "This is a placeholder integration -- full browser automation is not yet wired.");
66
+ case "browser_extract":
67
+ return await this.extract(args.url, args.selector);
68
+ default:
69
+ return this.error(`Unknown tool: ${toolName}`);
70
+ }
71
+ }
72
+ catch (err) {
73
+ return this.error(`Browser error: ${err.message}`);
74
+ }
75
+ }
76
+ async navigate(url) {
77
+ const res = await fetch(url, {
78
+ headers: { "User-Agent": "Wispy/1.0 (Browser Integration)" },
79
+ });
80
+ if (!res.ok)
81
+ return this.error(`Fetch failed: ${res.status} ${res.statusText}`);
82
+ const html = await res.text();
83
+ const truncated = html.length > 10000 ? html.slice(0, 10000) + "\n...[truncated]" : html;
84
+ return this.ok(truncated, { url, status: res.status, contentLength: html.length });
85
+ }
86
+ async extract(url, selector) {
87
+ const res = await fetch(url, {
88
+ headers: { "User-Agent": "Wispy/1.0 (Browser Integration)" },
89
+ });
90
+ if (!res.ok)
91
+ return this.error(`Fetch failed: ${res.status}`);
92
+ const html = await res.text();
93
+ // Basic text extraction by stripping HTML tags
94
+ let text;
95
+ if (selector) {
96
+ // Simple regex-based extraction for common selectors (id, tag, class)
97
+ const escaped = selector.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
98
+ const patterns = [
99
+ // ID selector: #foo
100
+ selector.startsWith("#")
101
+ ? new RegExp(`id=["']${selector.slice(1)}["'][^>]*>([\\s\\S]*?)<`, "i")
102
+ : null,
103
+ // Class selector: .foo
104
+ selector.startsWith(".")
105
+ ? new RegExp(`class=["'][^"']*${selector.slice(1)}[^"']*["'][^>]*>([\\s\\S]*?)<`, "i")
106
+ : null,
107
+ // Tag selector
108
+ new RegExp(`<${escaped}[^>]*>([\\s\\S]*?)</${escaped}>`, "gi"),
109
+ ].filter(Boolean);
110
+ const matches = [];
111
+ for (const pat of patterns) {
112
+ let m;
113
+ while ((m = pat.exec(html)) !== null) {
114
+ matches.push(m[1]);
115
+ }
116
+ }
117
+ text = matches.map((m) => m.replace(/<[^>]*>/g, "").trim()).join("\n") || "No content matched selector.";
118
+ }
119
+ else {
120
+ text = html
121
+ .replace(/<script[\s\S]*?<\/script>/gi, "")
122
+ .replace(/<style[\s\S]*?<\/style>/gi, "")
123
+ .replace(/<[^>]*>/g, " ")
124
+ .replace(/\s+/g, " ")
125
+ .trim();
126
+ }
127
+ const truncated = text.length > 8000 ? text.slice(0, 8000) + "\n...[truncated]" : text;
128
+ return this.ok(truncated, { url, selector });
129
+ }
130
+ }
131
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/integrations/tools/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * OpenWeatherMap Integration
3
+ *
4
+ * Provides current weather and multi-day forecasts via the OpenWeatherMap API.
5
+ *
6
+ * @requires OPENWEATHER_API_KEY - API key from https://openweathermap.org/api
7
+ * @see https://openweathermap.org/api
8
+ */
9
+ import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
10
+ export default class WeatherIntegration extends Integration {
11
+ readonly manifest: IntegrationManifest;
12
+ private getKey;
13
+ executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
14
+ private current;
15
+ private forecast;
16
+ }
17
+ //# sourceMappingURL=weather.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weather.d.ts","sourceRoot":"","sources":["../../../src/integrations/tools/weather.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAIpF,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACzD,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAmCpC;YAEY,MAAM;IAMd,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAezE,OAAO;YAuBP,QAAQ;CA4BvB"}