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.
- package/.env.example +20 -0
- package/LICENSE +21 -0
- package/README.md +232 -0
- package/bin/wispy.js +3 -0
- package/dist/a2a/delegation.d.ts +19 -0
- package/dist/a2a/delegation.d.ts.map +1 -0
- package/dist/a2a/delegation.js +156 -0
- package/dist/a2a/delegation.js.map +1 -0
- package/dist/a2a/peer.d.ts +19 -0
- package/dist/a2a/peer.d.ts.map +1 -0
- package/dist/a2a/peer.js +27 -0
- package/dist/a2a/peer.js.map +1 -0
- package/dist/a2a/protocol.d.ts +36 -0
- package/dist/a2a/protocol.d.ts.map +1 -0
- package/dist/a2a/protocol.js +23 -0
- package/dist/a2a/protocol.js.map +1 -0
- package/dist/agents/collaboration.d.ts +59 -0
- package/dist/agents/collaboration.d.ts.map +1 -0
- package/dist/agents/collaboration.js +110 -0
- package/dist/agents/collaboration.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +59 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +171 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/tool-executor.d.ts +36 -0
- package/dist/agents/tool-executor.d.ts.map +1 -0
- package/dist/agents/tool-executor.js +363 -0
- package/dist/agents/tool-executor.js.map +1 -0
- package/dist/agents/types/coder.d.ts +10 -0
- package/dist/agents/types/coder.d.ts.map +1 -0
- package/dist/agents/types/coder.js +43 -0
- package/dist/agents/types/coder.js.map +1 -0
- package/dist/agents/types/data.d.ts +7 -0
- package/dist/agents/types/data.d.ts.map +1 -0
- package/dist/agents/types/data.js +30 -0
- package/dist/agents/types/data.js.map +1 -0
- package/dist/agents/types/designer.d.ts +7 -0
- package/dist/agents/types/designer.d.ts.map +1 -0
- package/dist/agents/types/designer.js +30 -0
- package/dist/agents/types/designer.js.map +1 -0
- package/dist/agents/types/devops.d.ts +7 -0
- package/dist/agents/types/devops.d.ts.map +1 -0
- package/dist/agents/types/devops.js +30 -0
- package/dist/agents/types/devops.js.map +1 -0
- package/dist/agents/types/planner.d.ts +7 -0
- package/dist/agents/types/planner.d.ts.map +1 -0
- package/dist/agents/types/planner.js +35 -0
- package/dist/agents/types/planner.js.map +1 -0
- package/dist/agents/types/researcher.d.ts +10 -0
- package/dist/agents/types/researcher.d.ts.map +1 -0
- package/dist/agents/types/researcher.js +33 -0
- package/dist/agents/types/researcher.js.map +1 -0
- package/dist/agents/types/security.d.ts +7 -0
- package/dist/agents/types/security.d.ts.map +1 -0
- package/dist/agents/types/security.js +30 -0
- package/dist/agents/types/security.js.map +1 -0
- package/dist/agents/types/writer.d.ts +7 -0
- package/dist/agents/types/writer.d.ts.map +1 -0
- package/dist/agents/types/writer.js +30 -0
- package/dist/agents/types/writer.js.map +1 -0
- package/dist/agents/workspace.d.ts +61 -0
- package/dist/agents/workspace.d.ts.map +1 -0
- package/dist/agents/workspace.js +115 -0
- package/dist/agents/workspace.js.map +1 -0
- package/dist/ai/embeddings.d.ts +4 -0
- package/dist/ai/embeddings.d.ts.map +1 -0
- package/dist/ai/embeddings.js +20 -0
- package/dist/ai/embeddings.js.map +1 -0
- package/dist/ai/gemini.d.ts +31 -0
- package/dist/ai/gemini.d.ts.map +1 -0
- package/dist/ai/gemini.js +121 -0
- package/dist/ai/gemini.js.map +1 -0
- package/dist/ai/model-registry.d.ts +73 -0
- package/dist/ai/model-registry.d.ts.map +1 -0
- package/dist/ai/model-registry.js +86 -0
- package/dist/ai/model-registry.js.map +1 -0
- package/dist/ai/prompts.d.ts +3 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +42 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/providers/ollama.d.ts +22 -0
- package/dist/ai/providers/ollama.d.ts.map +1 -0
- package/dist/ai/providers/ollama.js +144 -0
- package/dist/ai/providers/ollama.js.map +1 -0
- package/dist/ai/providers/openai-compat.d.ts +25 -0
- package/dist/ai/providers/openai-compat.d.ts.map +1 -0
- package/dist/ai/providers/openai-compat.js +141 -0
- package/dist/ai/providers/openai-compat.js.map +1 -0
- package/dist/ai/router.d.ts +10 -0
- package/dist/ai/router.d.ts.map +1 -0
- package/dist/ai/router.js +23 -0
- package/dist/ai/router.js.map +1 -0
- package/dist/ai/tools.d.ts +15 -0
- package/dist/ai/tools.d.ts.map +1 -0
- package/dist/ai/tools.js +134 -0
- package/dist/ai/tools.js.map +1 -0
- package/dist/autostart/service.d.ts +24 -0
- package/dist/autostart/service.d.ts.map +1 -0
- package/dist/autostart/service.js +202 -0
- package/dist/autostart/service.js.map +1 -0
- package/dist/channels/dock.d.ts +22 -0
- package/dist/channels/dock.d.ts.map +1 -0
- package/dist/channels/dock.js +21 -0
- package/dist/channels/dock.js.map +1 -0
- package/dist/channels/rest/adapter.d.ts +4 -0
- package/dist/channels/rest/adapter.d.ts.map +1 -0
- package/dist/channels/rest/adapter.js +86 -0
- package/dist/channels/rest/adapter.js.map +1 -0
- package/dist/channels/telegram/adapter.d.ts +3 -0
- package/dist/channels/telegram/adapter.d.ts.map +1 -0
- package/dist/channels/telegram/adapter.js +56 -0
- package/dist/channels/telegram/adapter.js.map +1 -0
- package/dist/cli/commands.d.ts +17 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +258 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/doctor.d.ts +8 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +34 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/history.d.ts +9 -0
- package/dist/cli/history.d.ts.map +1 -0
- package/dist/cli/history.js +32 -0
- package/dist/cli/history.js.map +1 -0
- package/dist/cli/postinstall.d.ts +5 -0
- package/dist/cli/postinstall.d.ts.map +1 -0
- package/dist/cli/postinstall.js +20 -0
- package/dist/cli/postinstall.js.map +1 -0
- package/dist/cli/program.d.ts +3 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +537 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/repl.d.ts +7 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +132 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/setup/wizard.d.ts +17 -0
- package/dist/cli/setup/wizard.d.ts.map +1 -0
- package/dist/cli/setup/wizard.js +157 -0
- package/dist/cli/setup/wizard.js.map +1 -0
- package/dist/cli/ui/banner.d.ts +2 -0
- package/dist/cli/ui/banner.d.ts.map +1 -0
- package/dist/cli/ui/banner.js +9 -0
- package/dist/cli/ui/banner.js.map +1 -0
- package/dist/cli/ui/renderer.d.ts +6 -0
- package/dist/cli/ui/renderer.d.ts.map +1 -0
- package/dist/cli/ui/renderer.js +55 -0
- package/dist/cli/ui/renderer.js.map +1 -0
- package/dist/cli/ui/spinner.d.ts +7 -0
- package/dist/cli/ui/spinner.d.ts.map +1 -0
- package/dist/cli/ui/spinner.js +31 -0
- package/dist/cli/ui/spinner.js.map +1 -0
- package/dist/cli/ui/theme.d.ts +21 -0
- package/dist/cli/ui/theme.d.ts.map +1 -0
- package/dist/cli/ui/theme.js +28 -0
- package/dist/cli/ui/theme.js.map +1 -0
- package/dist/cli/ui/tool-display.d.ts +9 -0
- package/dist/cli/ui/tool-display.d.ts.map +1 -0
- package/dist/cli/ui/tool-display.js +19 -0
- package/dist/cli/ui/tool-display.js.map +1 -0
- package/dist/cli/voice/stt.d.ts +37 -0
- package/dist/cli/voice/stt.d.ts.map +1 -0
- package/dist/cli/voice/stt.js +115 -0
- package/dist/cli/voice/stt.js.map +1 -0
- package/dist/cli/voice/tts.d.ts +35 -0
- package/dist/cli/voice/tts.d.ts.map +1 -0
- package/dist/cli/voice/tts.js +142 -0
- package/dist/cli/voice/tts.js.map +1 -0
- package/dist/cli/voice/voice-mode.d.ts +35 -0
- package/dist/cli/voice/voice-mode.d.ts.map +1 -0
- package/dist/cli/voice/voice-mode.js +89 -0
- package/dist/cli/voice/voice-mode.js.map +1 -0
- package/dist/config/config.d.ts +5 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +68 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/hot-reload.d.ts +3 -0
- package/dist/config/hot-reload.d.ts.map +1 -0
- package/dist/config/hot-reload.js +21 -0
- package/dist/config/hot-reload.js.map +1 -0
- package/dist/config/schema.d.ts +48 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +105 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/content/pipeline.d.ts +12 -0
- package/dist/content/pipeline.d.ts.map +1 -0
- package/dist/content/pipeline.js +55 -0
- package/dist/content/pipeline.js.map +1 -0
- package/dist/content/publisher.d.ts +26 -0
- package/dist/content/publisher.d.ts.map +1 -0
- package/dist/content/publisher.js +101 -0
- package/dist/content/publisher.js.map +1 -0
- package/dist/core/agent.d.ts +37 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +170 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/heartbeat.d.ts +15 -0
- package/dist/core/heartbeat.d.ts.map +1 -0
- package/dist/core/heartbeat.js +70 -0
- package/dist/core/heartbeat.js.map +1 -0
- package/dist/core/identity.d.ts +13 -0
- package/dist/core/identity.d.ts.map +1 -0
- package/dist/core/identity.js +16 -0
- package/dist/core/identity.js.map +1 -0
- package/dist/core/memory.d.ts +11 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +58 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/session.d.ts +29 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +59 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/thinking.d.ts +3 -0
- package/dist/core/thinking.d.ts.map +1 -0
- package/dist/core/thinking.js +27 -0
- package/dist/core/thinking.js.map +1 -0
- package/dist/cron/service.d.ts +24 -0
- package/dist/cron/service.d.ts.map +1 -0
- package/dist/cron/service.js +74 -0
- package/dist/cron/service.js.map +1 -0
- package/dist/entry.d.ts +2 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +26 -0
- package/dist/entry.js.map +1 -0
- package/dist/gateway/boot.d.ts +9 -0
- package/dist/gateway/boot.d.ts.map +1 -0
- package/dist/gateway/boot.js +64 -0
- package/dist/gateway/boot.js.map +1 -0
- package/dist/gateway/client.d.ts +19 -0
- package/dist/gateway/client.d.ts.map +1 -0
- package/dist/gateway/client.js +64 -0
- package/dist/gateway/client.js.map +1 -0
- package/dist/gateway/protocol/index.d.ts +41 -0
- package/dist/gateway/protocol/index.d.ts.map +1 -0
- package/dist/gateway/protocol/index.js +30 -0
- package/dist/gateway/protocol/index.js.map +1 -0
- package/dist/gateway/server.d.ts +9 -0
- package/dist/gateway/server.d.ts.map +1 -0
- package/dist/gateway/server.js +147 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/dotenv.d.ts +2 -0
- package/dist/infra/dotenv.d.ts.map +1 -0
- package/dist/infra/dotenv.js +7 -0
- package/dist/infra/dotenv.js.map +1 -0
- package/dist/infra/logger.d.ts +4 -0
- package/dist/infra/logger.d.ts.map +1 -0
- package/dist/infra/logger.js +12 -0
- package/dist/infra/logger.js.map +1 -0
- package/dist/infra/ports.d.ts +2 -0
- package/dist/infra/ports.d.ts.map +1 -0
- package/dist/infra/ports.js +12 -0
- package/dist/infra/ports.js.map +1 -0
- package/dist/integrations/ai-models/anthropic.d.ts +15 -0
- package/dist/integrations/ai-models/anthropic.d.ts.map +1 -0
- package/dist/integrations/ai-models/anthropic.js +91 -0
- package/dist/integrations/ai-models/anthropic.js.map +1 -0
- package/dist/integrations/ai-models/ollama.d.ts +17 -0
- package/dist/integrations/ai-models/ollama.d.ts.map +1 -0
- package/dist/integrations/ai-models/ollama.js +113 -0
- package/dist/integrations/ai-models/ollama.js.map +1 -0
- package/dist/integrations/ai-models/openai.d.ts +19 -0
- package/dist/integrations/ai-models/openai.d.ts.map +1 -0
- package/dist/integrations/ai-models/openai.js +136 -0
- package/dist/integrations/ai-models/openai.js.map +1 -0
- package/dist/integrations/base.d.ts +102 -0
- package/dist/integrations/base.d.ts.map +1 -0
- package/dist/integrations/base.js +44 -0
- package/dist/integrations/base.js.map +1 -0
- package/dist/integrations/categories.d.ts +13 -0
- package/dist/integrations/categories.d.ts.map +1 -0
- package/dist/integrations/categories.js +69 -0
- package/dist/integrations/categories.js.map +1 -0
- package/dist/integrations/chat/discord.d.ts +19 -0
- package/dist/integrations/chat/discord.d.ts.map +1 -0
- package/dist/integrations/chat/discord.js +122 -0
- package/dist/integrations/chat/discord.js.map +1 -0
- package/dist/integrations/chat/slack.d.ts +19 -0
- package/dist/integrations/chat/slack.d.ts.map +1 -0
- package/dist/integrations/chat/slack.js +113 -0
- package/dist/integrations/chat/slack.js.map +1 -0
- package/dist/integrations/chat/whatsapp.d.ts +18 -0
- package/dist/integrations/chat/whatsapp.d.ts.map +1 -0
- package/dist/integrations/chat/whatsapp.js +115 -0
- package/dist/integrations/chat/whatsapp.js.map +1 -0
- package/dist/integrations/credential-manager.d.ts +68 -0
- package/dist/integrations/credential-manager.d.ts.map +1 -0
- package/dist/integrations/credential-manager.js +156 -0
- package/dist/integrations/credential-manager.js.map +1 -0
- package/dist/integrations/google/calendar.d.ts +17 -0
- package/dist/integrations/google/calendar.d.ts.map +1 -0
- package/dist/integrations/google/calendar.js +126 -0
- package/dist/integrations/google/calendar.js.map +1 -0
- package/dist/integrations/google/docs.d.ts +19 -0
- package/dist/integrations/google/docs.d.ts.map +1 -0
- package/dist/integrations/google/docs.js +153 -0
- package/dist/integrations/google/docs.js.map +1 -0
- package/dist/integrations/google/drive.d.ts +17 -0
- package/dist/integrations/google/drive.d.ts.map +1 -0
- package/dist/integrations/google/drive.js +130 -0
- package/dist/integrations/google/drive.js.map +1 -0
- package/dist/integrations/google/gmail.d.ts +19 -0
- package/dist/integrations/google/gmail.d.ts.map +1 -0
- package/dist/integrations/google/gmail.js +124 -0
- package/dist/integrations/google/gmail.js.map +1 -0
- package/dist/integrations/google/maps.d.ts +20 -0
- package/dist/integrations/google/maps.d.ts.map +1 -0
- package/dist/integrations/google/maps.js +115 -0
- package/dist/integrations/google/maps.js.map +1 -0
- package/dist/integrations/google/meet.d.ts +16 -0
- package/dist/integrations/google/meet.d.ts.map +1 -0
- package/dist/integrations/google/meet.js +104 -0
- package/dist/integrations/google/meet.js.map +1 -0
- package/dist/integrations/google/oauth.d.ts +39 -0
- package/dist/integrations/google/oauth.d.ts.map +1 -0
- package/dist/integrations/google/oauth.js +134 -0
- package/dist/integrations/google/oauth.js.map +1 -0
- package/dist/integrations/google/search.d.ts +15 -0
- package/dist/integrations/google/search.d.ts.map +1 -0
- package/dist/integrations/google/search.js +66 -0
- package/dist/integrations/google/search.js.map +1 -0
- package/dist/integrations/google/sheets.d.ts +17 -0
- package/dist/integrations/google/sheets.d.ts.map +1 -0
- package/dist/integrations/google/sheets.js +118 -0
- package/dist/integrations/google/sheets.js.map +1 -0
- package/dist/integrations/google/youtube.d.ts +19 -0
- package/dist/integrations/google/youtube.d.ts.map +1 -0
- package/dist/integrations/google/youtube.js +128 -0
- package/dist/integrations/google/youtube.js.map +1 -0
- package/dist/integrations/loader.d.ts +15 -0
- package/dist/integrations/loader.d.ts.map +1 -0
- package/dist/integrations/loader.js +97 -0
- package/dist/integrations/loader.js.map +1 -0
- package/dist/integrations/music/spotify.d.ts +21 -0
- package/dist/integrations/music/spotify.d.ts.map +1 -0
- package/dist/integrations/music/spotify.js +161 -0
- package/dist/integrations/music/spotify.js.map +1 -0
- package/dist/integrations/productivity/github.d.ts +20 -0
- package/dist/integrations/productivity/github.d.ts.map +1 -0
- package/dist/integrations/productivity/github.js +146 -0
- package/dist/integrations/productivity/github.js.map +1 -0
- package/dist/integrations/productivity/linear.d.ts +19 -0
- package/dist/integrations/productivity/linear.d.ts.map +1 -0
- package/dist/integrations/productivity/linear.js +152 -0
- package/dist/integrations/productivity/linear.js.map +1 -0
- package/dist/integrations/productivity/notion.d.ts +20 -0
- package/dist/integrations/productivity/notion.d.ts.map +1 -0
- package/dist/integrations/productivity/notion.js +186 -0
- package/dist/integrations/productivity/notion.js.map +1 -0
- package/dist/integrations/productivity/obsidian.d.ts +21 -0
- package/dist/integrations/productivity/obsidian.d.ts.map +1 -0
- package/dist/integrations/productivity/obsidian.js +141 -0
- package/dist/integrations/productivity/obsidian.js.map +1 -0
- package/dist/integrations/registry.d.ts +78 -0
- package/dist/integrations/registry.d.ts.map +1 -0
- package/dist/integrations/registry.js +193 -0
- package/dist/integrations/registry.js.map +1 -0
- package/dist/integrations/smart-home/homeassistant.d.ts +21 -0
- package/dist/integrations/smart-home/homeassistant.d.ts.map +1 -0
- package/dist/integrations/smart-home/homeassistant.js +129 -0
- package/dist/integrations/smart-home/homeassistant.js.map +1 -0
- package/dist/integrations/smart-home/hue.d.ts +23 -0
- package/dist/integrations/smart-home/hue.d.ts.map +1 -0
- package/dist/integrations/smart-home/hue.js +144 -0
- package/dist/integrations/smart-home/hue.js.map +1 -0
- package/dist/integrations/social/email-smtp.d.ts +23 -0
- package/dist/integrations/social/email-smtp.d.ts.map +1 -0
- package/dist/integrations/social/email-smtp.js +168 -0
- package/dist/integrations/social/email-smtp.js.map +1 -0
- package/dist/integrations/social/twitter.d.ts +28 -0
- package/dist/integrations/social/twitter.d.ts.map +1 -0
- package/dist/integrations/social/twitter.js +168 -0
- package/dist/integrations/social/twitter.js.map +1 -0
- package/dist/integrations/tools/browser.d.ts +18 -0
- package/dist/integrations/tools/browser.d.ts.map +1 -0
- package/dist/integrations/tools/browser.js +131 -0
- package/dist/integrations/tools/browser.js.map +1 -0
- package/dist/integrations/tools/weather.d.ts +17 -0
- package/dist/integrations/tools/weather.d.ts.map +1 -0
- package/dist/integrations/tools/weather.js +113 -0
- package/dist/integrations/tools/weather.js.map +1 -0
- package/dist/integrations/tools/webhooks.d.ts +15 -0
- package/dist/integrations/tools/webhooks.d.ts.map +1 -0
- package/dist/integrations/tools/webhooks.js +89 -0
- package/dist/integrations/tools/webhooks.js.map +1 -0
- package/dist/mcp/client.d.ts +42 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +164 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +114 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools-adapter.d.ts +14 -0
- package/dist/mcp/tools-adapter.d.ts.map +1 -0
- package/dist/mcp/tools-adapter.js +133 -0
- package/dist/mcp/tools-adapter.js.map +1 -0
- package/dist/memory/manager.d.ts +14 -0
- package/dist/memory/manager.d.ts.map +1 -0
- package/dist/memory/manager.js +49 -0
- package/dist/memory/manager.js.map +1 -0
- package/dist/memory/vector-store.d.ts +17 -0
- package/dist/memory/vector-store.d.ts.map +1 -0
- package/dist/memory/vector-store.js +65 -0
- package/dist/memory/vector-store.js.map +1 -0
- package/dist/security/action-guard.d.ts +12 -0
- package/dist/security/action-guard.d.ts.map +1 -0
- package/dist/security/action-guard.js +37 -0
- package/dist/security/action-guard.js.map +1 -0
- package/dist/security/api-key-guard.d.ts +3 -0
- package/dist/security/api-key-guard.d.ts.map +1 -0
- package/dist/security/api-key-guard.js +36 -0
- package/dist/security/api-key-guard.js.map +1 -0
- package/dist/security/auth.d.ts +17 -0
- package/dist/security/auth.d.ts.map +1 -0
- package/dist/security/auth.js +31 -0
- package/dist/security/auth.js.map +1 -0
- package/dist/security/device-identity.d.ts +11 -0
- package/dist/security/device-identity.d.ts.map +1 -0
- package/dist/security/device-identity.js +64 -0
- package/dist/security/device-identity.js.map +1 -0
- package/dist/security/encryption.d.ts +5 -0
- package/dist/security/encryption.d.ts.map +1 -0
- package/dist/security/encryption.js +13 -0
- package/dist/security/encryption.js.map +1 -0
- package/dist/security/isolation.d.ts +11 -0
- package/dist/security/isolation.d.ts.map +1 -0
- package/dist/security/isolation.js +37 -0
- package/dist/security/isolation.js.map +1 -0
- package/dist/skills/loader.d.ts +17 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +68 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/token/estimator.d.ts +72 -0
- package/dist/token/estimator.d.ts.map +1 -0
- package/dist/token/estimator.js +165 -0
- package/dist/token/estimator.js.map +1 -0
- package/dist/utils/crypto.d.ts +4 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +28 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/file.d.ts +14 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +54 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/media.d.ts +6 -0
- package/dist/utils/media.d.ts.map +1 -0
- package/dist/utils/media.js +65 -0
- package/dist/utils/media.js.map +1 -0
- package/dist/wallet/x402.d.ts +22 -0
- package/dist/wallet/x402.d.ts.map +1 -0
- package/dist/wallet/x402.js +63 -0
- package/dist/wallet/x402.js.map +1 -0
- package/package.json +79 -0
- package/wispy/AGENTS.md +46 -0
- package/wispy/BOOT.md +28 -0
- package/wispy/CONTEXT.md +13 -0
- package/wispy/HEARTBEAT.md +17 -0
- package/wispy/IDENTITY.md +26 -0
- package/wispy/MEMORY.md +16 -0
- package/wispy/SOUL.md +35 -0
- package/wispy/TOOLS.md +45 -0
- package/wispy/USER.md +16 -0
- package/wispy/skills/a2a-delegate/SKILL.md +14 -0
- package/wispy/skills/content-creator/SKILL.md +14 -0
- package/wispy/skills/image-gen/SKILL.md +14 -0
- package/wispy/skills/wallet-ops/SKILL.md +14 -0
- package/wispy/skills/x-poster/SKILL.md +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maps.js","sourceRoot":"","sources":["../../../src/integrations/google/maps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Meet Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides tools for creating and listing Google Meet meetings.
|
|
5
|
+
* Uses the Calendar API to create events with conference (Meet) data.
|
|
6
|
+
*
|
|
7
|
+
* @see https://developers.google.com/calendar/api/guides/create-events#conferencing
|
|
8
|
+
*/
|
|
9
|
+
import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
|
|
10
|
+
export default class GoogleMeetIntegration extends Integration {
|
|
11
|
+
readonly manifest: IntegrationManifest;
|
|
12
|
+
executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
13
|
+
private create;
|
|
14
|
+
private list;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=meet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meet.d.ts","sourceRoot":"","sources":["../../../src/integrations/google/meet.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAIpF,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,WAAW;IAC5D,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;YAWzE,MAAM;YAmCN,IAAI;CAsBnB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Meet Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides tools for creating and listing Google Meet meetings.
|
|
5
|
+
* Uses the Calendar API to create events with conference (Meet) data.
|
|
6
|
+
*
|
|
7
|
+
* @see https://developers.google.com/calendar/api/guides/create-events#conferencing
|
|
8
|
+
*/
|
|
9
|
+
import { Integration } from "../base.js";
|
|
10
|
+
const BASE = "https://www.googleapis.com/calendar/v3";
|
|
11
|
+
export default class GoogleMeetIntegration extends Integration {
|
|
12
|
+
manifest = {
|
|
13
|
+
id: "google-meet",
|
|
14
|
+
name: "Google Meet",
|
|
15
|
+
category: "google",
|
|
16
|
+
version: "1.0.0",
|
|
17
|
+
description: "Create and list Google Meet video conferences via Calendar events.",
|
|
18
|
+
auth: {
|
|
19
|
+
type: "oauth2",
|
|
20
|
+
scopes: [
|
|
21
|
+
"https://www.googleapis.com/auth/calendar.events",
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
tools: [
|
|
25
|
+
{
|
|
26
|
+
name: "google_meet_create",
|
|
27
|
+
description: "Create a Google Meet meeting (calendar event with video conference).",
|
|
28
|
+
parameters: {
|
|
29
|
+
type: "object",
|
|
30
|
+
properties: {
|
|
31
|
+
summary: { type: "string", description: "Meeting title." },
|
|
32
|
+
startTime: { type: "string", description: "Start datetime (RFC3339)." },
|
|
33
|
+
endTime: { type: "string", description: "End datetime (RFC3339)." },
|
|
34
|
+
attendees: {
|
|
35
|
+
type: "array",
|
|
36
|
+
items: { type: "string", description: "" },
|
|
37
|
+
description: "List of attendee email addresses.",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
required: ["summary", "startTime", "endTime"],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "google_meet_list",
|
|
45
|
+
description: "List upcoming meetings that have Google Meet links.",
|
|
46
|
+
parameters: {
|
|
47
|
+
type: "object",
|
|
48
|
+
properties: {
|
|
49
|
+
timeMin: { type: "string", description: "Lower bound (RFC3339). Defaults to now." },
|
|
50
|
+
maxResults: { type: "number", description: "Max results (default: 10)." },
|
|
51
|
+
},
|
|
52
|
+
required: [],
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
async executeTool(toolName, args) {
|
|
58
|
+
switch (toolName) {
|
|
59
|
+
case "google_meet_create":
|
|
60
|
+
return this.create(args);
|
|
61
|
+
case "google_meet_list":
|
|
62
|
+
return this.list(args);
|
|
63
|
+
default:
|
|
64
|
+
return this.error(`Unknown tool: ${toolName}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async create(args) {
|
|
68
|
+
const { googleApiFetch } = await import("./oauth.js");
|
|
69
|
+
const body = {
|
|
70
|
+
summary: args.summary,
|
|
71
|
+
start: { dateTime: args.startTime },
|
|
72
|
+
end: { dateTime: args.endTime },
|
|
73
|
+
conferenceData: {
|
|
74
|
+
createRequest: {
|
|
75
|
+
requestId: `wispy-meet-${Date.now()}`,
|
|
76
|
+
conferenceSolutionKey: { type: "hangoutsMeet" },
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
if (Array.isArray(args.attendees)) {
|
|
81
|
+
body.attendees = args.attendees.map((email) => ({ email }));
|
|
82
|
+
}
|
|
83
|
+
const params = new URLSearchParams({ conferenceDataVersion: "1" });
|
|
84
|
+
const res = await googleApiFetch(this.ctx, this.manifest.id, `${BASE}/calendars/primary/events?${params}`, { method: "POST", body: JSON.stringify(body) });
|
|
85
|
+
const data = await res.json();
|
|
86
|
+
const meetLink = data.conferenceData?.entryPoints?.find((ep) => ep.entryPointType === "video")?.uri;
|
|
87
|
+
return this.ok(JSON.stringify({ ...data, meetLink: meetLink ?? null }, null, 2));
|
|
88
|
+
}
|
|
89
|
+
async list(args) {
|
|
90
|
+
const { googleApiFetch } = await import("./oauth.js");
|
|
91
|
+
const params = new URLSearchParams({
|
|
92
|
+
maxResults: String(args.maxResults ?? 10),
|
|
93
|
+
singleEvents: "true",
|
|
94
|
+
orderBy: "startTime",
|
|
95
|
+
timeMin: args.timeMin || new Date().toISOString(),
|
|
96
|
+
});
|
|
97
|
+
const res = await googleApiFetch(this.ctx, this.manifest.id, `${BASE}/calendars/primary/events?${params}`);
|
|
98
|
+
const data = await res.json();
|
|
99
|
+
// Filter to only events that have a Meet link
|
|
100
|
+
const items = (data.items ?? []).filter((evt) => evt.conferenceData);
|
|
101
|
+
return this.ok(JSON.stringify({ ...data, items }, null, 2));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=meet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meet.js","sourceRoot":"","sources":["../../../src/integrations/google/meet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Google OAuth2 helper.
|
|
3
|
+
*
|
|
4
|
+
* All Google integrations use this module for authentication.
|
|
5
|
+
* Supports the OAuth2 authorization code flow with automatic token refresh.
|
|
6
|
+
*/
|
|
7
|
+
import type { IntegrationContext } from "../base.js";
|
|
8
|
+
import type { OAuthTokens } from "../credential-manager.js";
|
|
9
|
+
interface GoogleOAuthConfig {
|
|
10
|
+
clientId: string;
|
|
11
|
+
clientSecret: string;
|
|
12
|
+
redirectUri: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get Google OAuth config from environment.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getGoogleOAuthConfig(): GoogleOAuthConfig | null;
|
|
18
|
+
/**
|
|
19
|
+
* Generate an OAuth2 authorization URL for the given scopes.
|
|
20
|
+
*/
|
|
21
|
+
export declare function generateAuthUrl(scopes: string[], state: string): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Exchange an authorization code for tokens.
|
|
24
|
+
*/
|
|
25
|
+
export declare function exchangeCode(code: string): Promise<OAuthTokens | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Refresh an access token using a refresh token.
|
|
28
|
+
*/
|
|
29
|
+
export declare function refreshAccessToken(refreshToken: string): Promise<OAuthTokens | null>;
|
|
30
|
+
/**
|
|
31
|
+
* Get a valid access token, refreshing if needed.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getAccessToken(ctx: IntegrationContext, integrationId: string): Promise<string | null>;
|
|
34
|
+
/**
|
|
35
|
+
* Make an authenticated Google API request.
|
|
36
|
+
*/
|
|
37
|
+
export declare function googleApiFetch(ctx: IntegrationContext, integrationId: string, url: string, options?: RequestInit): Promise<Response>;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/integrations/google/oauth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAQ5D,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,GAAG,IAAI,CAW/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe9E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA4B5E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA4B7B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,kBAAkB,EACvB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBxB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,kBAAkB,EACvB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC,CAUnB"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Google OAuth2 helper.
|
|
3
|
+
*
|
|
4
|
+
* All Google integrations use this module for authentication.
|
|
5
|
+
* Supports the OAuth2 authorization code flow with automatic token refresh.
|
|
6
|
+
*/
|
|
7
|
+
import { createLogger } from "../../infra/logger.js";
|
|
8
|
+
const log = createLogger("google-oauth");
|
|
9
|
+
const GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
10
|
+
const GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
11
|
+
/**
|
|
12
|
+
* Get Google OAuth config from environment.
|
|
13
|
+
*/
|
|
14
|
+
export function getGoogleOAuthConfig() {
|
|
15
|
+
const clientId = process.env.GOOGLE_CLIENT_ID;
|
|
16
|
+
const clientSecret = process.env.GOOGLE_CLIENT_SECRET;
|
|
17
|
+
const redirectUri = process.env.GOOGLE_REDIRECT_URI || "http://localhost:4001/oauth/callback";
|
|
18
|
+
if (!clientId || !clientSecret) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return { clientId, clientSecret, redirectUri };
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate an OAuth2 authorization URL for the given scopes.
|
|
25
|
+
*/
|
|
26
|
+
export function generateAuthUrl(scopes, state) {
|
|
27
|
+
const config = getGoogleOAuthConfig();
|
|
28
|
+
if (!config)
|
|
29
|
+
return null;
|
|
30
|
+
const params = new URLSearchParams({
|
|
31
|
+
client_id: config.clientId,
|
|
32
|
+
redirect_uri: config.redirectUri,
|
|
33
|
+
response_type: "code",
|
|
34
|
+
scope: scopes.join(" "),
|
|
35
|
+
access_type: "offline",
|
|
36
|
+
prompt: "consent",
|
|
37
|
+
state,
|
|
38
|
+
});
|
|
39
|
+
return `${GOOGLE_AUTH_URL}?${params.toString()}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Exchange an authorization code for tokens.
|
|
43
|
+
*/
|
|
44
|
+
export async function exchangeCode(code) {
|
|
45
|
+
const config = getGoogleOAuthConfig();
|
|
46
|
+
if (!config)
|
|
47
|
+
return null;
|
|
48
|
+
try {
|
|
49
|
+
const res = await fetch(GOOGLE_TOKEN_URL, {
|
|
50
|
+
method: "POST",
|
|
51
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
52
|
+
body: new URLSearchParams({
|
|
53
|
+
code,
|
|
54
|
+
client_id: config.clientId,
|
|
55
|
+
client_secret: config.clientSecret,
|
|
56
|
+
redirect_uri: config.redirectUri,
|
|
57
|
+
grant_type: "authorization_code",
|
|
58
|
+
}),
|
|
59
|
+
});
|
|
60
|
+
if (!res.ok) {
|
|
61
|
+
const err = await res.text();
|
|
62
|
+
log.error("Token exchange failed: %s", err);
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
return await res.json();
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
log.error("Token exchange error: %s", err);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Refresh an access token using a refresh token.
|
|
74
|
+
*/
|
|
75
|
+
export async function refreshAccessToken(refreshToken) {
|
|
76
|
+
const config = getGoogleOAuthConfig();
|
|
77
|
+
if (!config)
|
|
78
|
+
return null;
|
|
79
|
+
try {
|
|
80
|
+
const res = await fetch(GOOGLE_TOKEN_URL, {
|
|
81
|
+
method: "POST",
|
|
82
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
83
|
+
body: new URLSearchParams({
|
|
84
|
+
refresh_token: refreshToken,
|
|
85
|
+
client_id: config.clientId,
|
|
86
|
+
client_secret: config.clientSecret,
|
|
87
|
+
grant_type: "refresh_token",
|
|
88
|
+
}),
|
|
89
|
+
});
|
|
90
|
+
if (!res.ok) {
|
|
91
|
+
log.error("Token refresh failed: %d", res.status);
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const tokens = await res.json();
|
|
95
|
+
tokens.refresh_token = tokens.refresh_token || refreshToken;
|
|
96
|
+
return tokens;
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
log.error("Token refresh error: %s", err);
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get a valid access token, refreshing if needed.
|
|
105
|
+
*/
|
|
106
|
+
export async function getAccessToken(ctx, integrationId) {
|
|
107
|
+
const tokens = ctx.credentialManager.get(integrationId);
|
|
108
|
+
if (!tokens)
|
|
109
|
+
return null;
|
|
110
|
+
// Check if expired
|
|
111
|
+
if (ctx.credentialManager.isExpired(integrationId) && tokens.refresh_token) {
|
|
112
|
+
log.debug("Refreshing expired token for: %s", integrationId);
|
|
113
|
+
const refreshed = await refreshAccessToken(tokens.refresh_token);
|
|
114
|
+
if (refreshed) {
|
|
115
|
+
ctx.credentialManager.setOAuth2(integrationId, refreshed);
|
|
116
|
+
return refreshed.access_token;
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
return tokens.access_token;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Make an authenticated Google API request.
|
|
124
|
+
*/
|
|
125
|
+
export async function googleApiFetch(ctx, integrationId, url, options = {}) {
|
|
126
|
+
const accessToken = await getAccessToken(ctx, integrationId);
|
|
127
|
+
if (!accessToken) {
|
|
128
|
+
throw new Error(`No valid access token for ${integrationId}. Re-authenticate.`);
|
|
129
|
+
}
|
|
130
|
+
const headers = new Headers(options.headers);
|
|
131
|
+
headers.set("Authorization", `Bearer ${accessToken}`);
|
|
132
|
+
return fetch(url, { ...options, headers });
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/integrations/google/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Custom Search Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides a web search tool powered by the Google Custom Search JSON API.
|
|
5
|
+
* Requires a Custom Search Engine ID (CX) and API key.
|
|
6
|
+
*
|
|
7
|
+
* @see https://developers.google.com/custom-search/v1/reference/rest
|
|
8
|
+
*/
|
|
9
|
+
import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
|
|
10
|
+
export default class GoogleSearchIntegration extends Integration {
|
|
11
|
+
readonly manifest: IntegrationManifest;
|
|
12
|
+
executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
13
|
+
private search;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/integrations/google/search.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAIpF,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,WAAW;IAC9D,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAqBpC;IAEI,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YASzE,MAAM;CAiCrB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Custom Search Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides a web search tool powered by the Google Custom Search JSON API.
|
|
5
|
+
* Requires a Custom Search Engine ID (CX) and API key.
|
|
6
|
+
*
|
|
7
|
+
* @see https://developers.google.com/custom-search/v1/reference/rest
|
|
8
|
+
*/
|
|
9
|
+
import { Integration } from "../base.js";
|
|
10
|
+
const BASE = "https://www.googleapis.com/customsearch/v1";
|
|
11
|
+
export default class GoogleSearchIntegration extends Integration {
|
|
12
|
+
manifest = {
|
|
13
|
+
id: "google-search",
|
|
14
|
+
name: "Google Custom Search",
|
|
15
|
+
category: "google",
|
|
16
|
+
version: "1.0.0",
|
|
17
|
+
description: "Search the web using Google Custom Search.",
|
|
18
|
+
auth: { type: "api-key" },
|
|
19
|
+
tools: [
|
|
20
|
+
{
|
|
21
|
+
name: "google_search",
|
|
22
|
+
description: "Perform a web search using Google Custom Search.",
|
|
23
|
+
parameters: {
|
|
24
|
+
type: "object",
|
|
25
|
+
properties: {
|
|
26
|
+
query: { type: "string", description: "The search query." },
|
|
27
|
+
num: { type: "number", description: "Number of results to return (1-10, default: 10)." },
|
|
28
|
+
},
|
|
29
|
+
required: ["query"],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
};
|
|
34
|
+
async executeTool(toolName, args) {
|
|
35
|
+
switch (toolName) {
|
|
36
|
+
case "google_search":
|
|
37
|
+
return this.search(args);
|
|
38
|
+
default:
|
|
39
|
+
return this.error(`Unknown tool: ${toolName}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async search(args) {
|
|
43
|
+
const apiKey = process.env.GOOGLE_SEARCH_API_KEY;
|
|
44
|
+
const cx = process.env.GOOGLE_SEARCH_CX;
|
|
45
|
+
if (!apiKey || !cx) {
|
|
46
|
+
return this.error("GOOGLE_SEARCH_API_KEY and GOOGLE_SEARCH_CX environment variables must be set.");
|
|
47
|
+
}
|
|
48
|
+
const num = Math.min(Math.max(Number(args.num ?? 10), 1), 10);
|
|
49
|
+
const params = new URLSearchParams({
|
|
50
|
+
key: apiKey,
|
|
51
|
+
cx,
|
|
52
|
+
q: args.query,
|
|
53
|
+
num: String(num),
|
|
54
|
+
});
|
|
55
|
+
const res = await fetch(`${BASE}?${params}`);
|
|
56
|
+
const data = await res.json();
|
|
57
|
+
// Return a simplified view of results
|
|
58
|
+
const results = (data.items ?? []).map((item) => ({
|
|
59
|
+
title: item.title,
|
|
60
|
+
link: item.link,
|
|
61
|
+
snippet: item.snippet,
|
|
62
|
+
}));
|
|
63
|
+
return this.ok(JSON.stringify({ totalResults: data.searchInformation?.totalResults, results }, null, 2));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/integrations/google/search.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAA6C,MAAM,YAAY,CAAC;AAEpF,MAAM,IAAI,GAAG,4CAA4C,CAAC;AAE1D,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,WAAW;IACrD,QAAQ,GAAwB;QACvC,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,4CAA4C;QACzD,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACzB,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,kDAAkD;gBAC/D,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;wBAC3D,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kDAAkD,EAAE;qBACzF;oBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;iBACpB;aACF;SACF;KACF,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,IAA6B;QAC/D,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B;gBACE,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,IAA6B;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACjD,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,KAAK,CACf,+EAA+E,CAChF,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,GAAG,EAAE,MAAM;YACX,EAAE;YACF,CAAC,EAAE,IAAI,CAAC,KAAe;YACvB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;SACjB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;QAErC,sCAAsC;QACtC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CACpC,CAAC,IAA6B,EAAE,EAAE,CAAC,CAAC;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CACH,CAAC;QAEF,OAAO,IAAI,CAAC,EAAE,CACZ,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACzF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Sheets Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides tools for reading, writing, and creating Google Sheets
|
|
5
|
+
* via the Google Sheets REST API v4.
|
|
6
|
+
*
|
|
7
|
+
* @see https://developers.google.com/sheets/api/reference/rest
|
|
8
|
+
*/
|
|
9
|
+
import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
|
|
10
|
+
export default class GoogleSheetsIntegration extends Integration {
|
|
11
|
+
readonly manifest: IntegrationManifest;
|
|
12
|
+
executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
13
|
+
private read;
|
|
14
|
+
private write;
|
|
15
|
+
private create;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=sheets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheets.d.ts","sourceRoot":"","sources":["../../../src/integrations/google/sheets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAIpF,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,WAAW;IAC9D,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAuDpC;IAEI,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAazE,IAAI;YAcJ,KAAK;YAyBL,MAAM;CAYrB"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Sheets Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides tools for reading, writing, and creating Google Sheets
|
|
5
|
+
* via the Google Sheets REST API v4.
|
|
6
|
+
*
|
|
7
|
+
* @see https://developers.google.com/sheets/api/reference/rest
|
|
8
|
+
*/
|
|
9
|
+
import { Integration } from "../base.js";
|
|
10
|
+
const BASE = "https://sheets.googleapis.com/v4/spreadsheets";
|
|
11
|
+
export default class GoogleSheetsIntegration extends Integration {
|
|
12
|
+
manifest = {
|
|
13
|
+
id: "google-sheets",
|
|
14
|
+
name: "Google Sheets",
|
|
15
|
+
category: "google",
|
|
16
|
+
version: "1.0.0",
|
|
17
|
+
description: "Read, write, and create Google Sheets spreadsheets.",
|
|
18
|
+
auth: {
|
|
19
|
+
type: "oauth2",
|
|
20
|
+
scopes: [
|
|
21
|
+
"https://www.googleapis.com/auth/spreadsheets",
|
|
22
|
+
"https://www.googleapis.com/auth/spreadsheets.readonly",
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
tools: [
|
|
26
|
+
{
|
|
27
|
+
name: "google_sheets_read",
|
|
28
|
+
description: "Read values from a Google Sheets range.",
|
|
29
|
+
parameters: {
|
|
30
|
+
type: "object",
|
|
31
|
+
properties: {
|
|
32
|
+
spreadsheetId: { type: "string", description: "The spreadsheet ID." },
|
|
33
|
+
range: { type: "string", description: "A1 notation range (e.g. 'Sheet1!A1:D10')." },
|
|
34
|
+
},
|
|
35
|
+
required: ["spreadsheetId", "range"],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "google_sheets_write",
|
|
40
|
+
description: "Write values to a Google Sheets range.",
|
|
41
|
+
parameters: {
|
|
42
|
+
type: "object",
|
|
43
|
+
properties: {
|
|
44
|
+
spreadsheetId: { type: "string", description: "The spreadsheet ID." },
|
|
45
|
+
range: { type: "string", description: "A1 notation range to write to." },
|
|
46
|
+
values: {
|
|
47
|
+
type: "array",
|
|
48
|
+
items: { type: "array", description: "", items: { type: "string", description: "" } },
|
|
49
|
+
description: "2D array of cell values (rows x columns).",
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
required: ["spreadsheetId", "range", "values"],
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "google_sheets_create",
|
|
57
|
+
description: "Create a new Google Sheets spreadsheet.",
|
|
58
|
+
parameters: {
|
|
59
|
+
type: "object",
|
|
60
|
+
properties: {
|
|
61
|
+
title: { type: "string", description: "Spreadsheet title." },
|
|
62
|
+
},
|
|
63
|
+
required: ["title"],
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
};
|
|
68
|
+
async executeTool(toolName, args) {
|
|
69
|
+
switch (toolName) {
|
|
70
|
+
case "google_sheets_read":
|
|
71
|
+
return this.read(args);
|
|
72
|
+
case "google_sheets_write":
|
|
73
|
+
return this.write(args);
|
|
74
|
+
case "google_sheets_create":
|
|
75
|
+
return this.create(args);
|
|
76
|
+
default:
|
|
77
|
+
return this.error(`Unknown tool: ${toolName}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async read(args) {
|
|
81
|
+
const { googleApiFetch } = await import("./oauth.js");
|
|
82
|
+
const id = encodeURIComponent(args.spreadsheetId);
|
|
83
|
+
const range = encodeURIComponent(args.range);
|
|
84
|
+
const res = await googleApiFetch(this.ctx, this.manifest.id, `${BASE}/${id}/values/${range}`);
|
|
85
|
+
const data = await res.json();
|
|
86
|
+
return this.ok(JSON.stringify(data, null, 2));
|
|
87
|
+
}
|
|
88
|
+
async write(args) {
|
|
89
|
+
const { googleApiFetch } = await import("./oauth.js");
|
|
90
|
+
const id = encodeURIComponent(args.spreadsheetId);
|
|
91
|
+
const range = encodeURIComponent(args.range);
|
|
92
|
+
const params = new URLSearchParams({
|
|
93
|
+
valueInputOption: "USER_ENTERED",
|
|
94
|
+
});
|
|
95
|
+
const res = await googleApiFetch(this.ctx, this.manifest.id, `${BASE}/${id}/values/${range}?${params}`, {
|
|
96
|
+
method: "PUT",
|
|
97
|
+
body: JSON.stringify({
|
|
98
|
+
range: args.range,
|
|
99
|
+
majorDimension: "ROWS",
|
|
100
|
+
values: args.values,
|
|
101
|
+
}),
|
|
102
|
+
});
|
|
103
|
+
const data = await res.json();
|
|
104
|
+
return this.ok(JSON.stringify(data, null, 2));
|
|
105
|
+
}
|
|
106
|
+
async create(args) {
|
|
107
|
+
const { googleApiFetch } = await import("./oauth.js");
|
|
108
|
+
const res = await googleApiFetch(this.ctx, this.manifest.id, BASE, {
|
|
109
|
+
method: "POST",
|
|
110
|
+
body: JSON.stringify({
|
|
111
|
+
properties: { title: args.title },
|
|
112
|
+
}),
|
|
113
|
+
});
|
|
114
|
+
const data = await res.json();
|
|
115
|
+
return this.ok(JSON.stringify(data, null, 2));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=sheets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheets.js","sourceRoot":"","sources":["../../../src/integrations/google/sheets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YouTube Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides tools for searching videos, fetching video details, and
|
|
5
|
+
* retrieving channel information via the YouTube Data API v3.
|
|
6
|
+
*
|
|
7
|
+
* @see https://developers.google.com/youtube/v3/docs
|
|
8
|
+
*/
|
|
9
|
+
import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
|
|
10
|
+
export default class GoogleYouTubeIntegration extends Integration {
|
|
11
|
+
readonly manifest: IntegrationManifest;
|
|
12
|
+
/** Retrieve the YouTube / Google API key from environment variables. */
|
|
13
|
+
private getApiKey;
|
|
14
|
+
executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
15
|
+
private search;
|
|
16
|
+
private video;
|
|
17
|
+
private channel;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=youtube.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"youtube.d.ts","sourceRoot":"","sources":["../../../src/integrations/google/youtube.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAIpF,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,WAAW;IAC/D,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CA2CpC;IAEF,wEAAwE;IACxE,OAAO,CAAC,SAAS;IAUX,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAazE,MAAM;YA+BN,KAAK;YAiBL,OAAO;CAgBtB"}
|