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,128 @@
|
|
|
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 } from "../base.js";
|
|
10
|
+
const BASE = "https://www.googleapis.com/youtube/v3";
|
|
11
|
+
export default class GoogleYouTubeIntegration extends Integration {
|
|
12
|
+
manifest = {
|
|
13
|
+
id: "google-youtube",
|
|
14
|
+
name: "YouTube",
|
|
15
|
+
category: "google",
|
|
16
|
+
version: "1.0.0",
|
|
17
|
+
description: "Search videos, get video details, and browse channels on YouTube.",
|
|
18
|
+
auth: { type: "api-key" },
|
|
19
|
+
tools: [
|
|
20
|
+
{
|
|
21
|
+
name: "google_youtube_search",
|
|
22
|
+
description: "Search for YouTube videos.",
|
|
23
|
+
parameters: {
|
|
24
|
+
type: "object",
|
|
25
|
+
properties: {
|
|
26
|
+
query: { type: "string", description: "Search query." },
|
|
27
|
+
maxResults: { type: "number", description: "Max results (default: 5, max: 50)." },
|
|
28
|
+
},
|
|
29
|
+
required: ["query"],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "google_youtube_video",
|
|
34
|
+
description: "Get detailed information about a YouTube video.",
|
|
35
|
+
parameters: {
|
|
36
|
+
type: "object",
|
|
37
|
+
properties: {
|
|
38
|
+
videoId: { type: "string", description: "The YouTube video ID." },
|
|
39
|
+
},
|
|
40
|
+
required: ["videoId"],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "google_youtube_channel",
|
|
45
|
+
description: "Get information about a YouTube channel.",
|
|
46
|
+
parameters: {
|
|
47
|
+
type: "object",
|
|
48
|
+
properties: {
|
|
49
|
+
channelId: { type: "string", description: "The YouTube channel ID." },
|
|
50
|
+
},
|
|
51
|
+
required: ["channelId"],
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
/** Retrieve the YouTube / Google API key from environment variables. */
|
|
57
|
+
getApiKey() {
|
|
58
|
+
const key = process.env.GOOGLE_YOUTUBE_API_KEY || process.env.GOOGLE_API_KEY;
|
|
59
|
+
if (!key) {
|
|
60
|
+
throw new Error("GOOGLE_YOUTUBE_API_KEY or GOOGLE_API_KEY environment variable must be set.");
|
|
61
|
+
}
|
|
62
|
+
return key;
|
|
63
|
+
}
|
|
64
|
+
async executeTool(toolName, args) {
|
|
65
|
+
switch (toolName) {
|
|
66
|
+
case "google_youtube_search":
|
|
67
|
+
return this.search(args);
|
|
68
|
+
case "google_youtube_video":
|
|
69
|
+
return this.video(args);
|
|
70
|
+
case "google_youtube_channel":
|
|
71
|
+
return this.channel(args);
|
|
72
|
+
default:
|
|
73
|
+
return this.error(`Unknown tool: ${toolName}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async search(args) {
|
|
77
|
+
const maxResults = Math.min(Math.max(Number(args.maxResults ?? 5), 1), 50);
|
|
78
|
+
const params = new URLSearchParams({
|
|
79
|
+
key: this.getApiKey(),
|
|
80
|
+
part: "snippet",
|
|
81
|
+
type: "video",
|
|
82
|
+
q: args.query,
|
|
83
|
+
maxResults: String(maxResults),
|
|
84
|
+
});
|
|
85
|
+
const res = await fetch(`${BASE}/search?${params}`);
|
|
86
|
+
const data = await res.json();
|
|
87
|
+
const results = (data.items ?? []).map((item) => {
|
|
88
|
+
const snippet = item.snippet;
|
|
89
|
+
const id = item.id;
|
|
90
|
+
return {
|
|
91
|
+
videoId: id?.videoId,
|
|
92
|
+
title: snippet?.title,
|
|
93
|
+
description: snippet?.description,
|
|
94
|
+
channelTitle: snippet?.channelTitle,
|
|
95
|
+
publishedAt: snippet?.publishedAt,
|
|
96
|
+
thumbnail: snippet?.thumbnails?.high,
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
return this.ok(JSON.stringify(results, null, 2));
|
|
100
|
+
}
|
|
101
|
+
async video(args) {
|
|
102
|
+
const params = new URLSearchParams({
|
|
103
|
+
key: this.getApiKey(),
|
|
104
|
+
part: "snippet,contentDetails,statistics",
|
|
105
|
+
id: args.videoId,
|
|
106
|
+
});
|
|
107
|
+
const res = await fetch(`${BASE}/videos?${params}`);
|
|
108
|
+
const data = await res.json();
|
|
109
|
+
if (!data.items?.length) {
|
|
110
|
+
return this.error(`Video not found: ${args.videoId}`);
|
|
111
|
+
}
|
|
112
|
+
return this.ok(JSON.stringify(data.items[0], null, 2));
|
|
113
|
+
}
|
|
114
|
+
async channel(args) {
|
|
115
|
+
const params = new URLSearchParams({
|
|
116
|
+
key: this.getApiKey(),
|
|
117
|
+
part: "snippet,statistics,brandingSettings",
|
|
118
|
+
id: args.channelId,
|
|
119
|
+
});
|
|
120
|
+
const res = await fetch(`${BASE}/channels?${params}`);
|
|
121
|
+
const data = await res.json();
|
|
122
|
+
if (!data.items?.length) {
|
|
123
|
+
return this.error(`Channel not found: ${args.channelId}`);
|
|
124
|
+
}
|
|
125
|
+
return this.ok(JSON.stringify(data.items[0], null, 2));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=youtube.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../../src/integrations/google/youtube.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration loader — discovers and registers all integrations.
|
|
3
|
+
*
|
|
4
|
+
* Scans the integrations directory for modules that export a default class
|
|
5
|
+
* extending Integration. Auto-enables integrations listed in config.
|
|
6
|
+
*/
|
|
7
|
+
import type { IntegrationContext } from "./base.js";
|
|
8
|
+
import { IntegrationRegistry } from "./registry.js";
|
|
9
|
+
/**
|
|
10
|
+
* Load all built-in integrations and register them.
|
|
11
|
+
* This function imports each integration module directly (no filesystem scan)
|
|
12
|
+
* for reliability across platforms and bundlers.
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadIntegrations(ctx: IntegrationContext, enabledIds?: string[]): Promise<IntegrationRegistry>;
|
|
15
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/integrations/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAKpD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,kBAAkB,EACvB,UAAU,GAAE,MAAM,EAAO,GACxB,OAAO,CAAC,mBAAmB,CAAC,CA+B9B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration loader — discovers and registers all integrations.
|
|
3
|
+
*
|
|
4
|
+
* Scans the integrations directory for modules that export a default class
|
|
5
|
+
* extending Integration. Auto-enables integrations listed in config.
|
|
6
|
+
*/
|
|
7
|
+
import { IntegrationRegistry } from "./registry.js";
|
|
8
|
+
import { createLogger } from "../infra/logger.js";
|
|
9
|
+
const log = createLogger("integrations");
|
|
10
|
+
/**
|
|
11
|
+
* Load all built-in integrations and register them.
|
|
12
|
+
* This function imports each integration module directly (no filesystem scan)
|
|
13
|
+
* for reliability across platforms and bundlers.
|
|
14
|
+
*/
|
|
15
|
+
export async function loadIntegrations(ctx, enabledIds = []) {
|
|
16
|
+
const registry = new IntegrationRegistry(ctx.credentialManager);
|
|
17
|
+
// Import all integration modules
|
|
18
|
+
const modules = await importAllIntegrations(ctx);
|
|
19
|
+
for (const mod of modules) {
|
|
20
|
+
try {
|
|
21
|
+
registry.register(mod);
|
|
22
|
+
log.debug("Registered: %s", mod.manifest.id);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
log.warn("Failed to register %s: %s", mod.manifest.id, err);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
log.info("Loaded %d integration(s)", registry.size);
|
|
29
|
+
// Auto-enable configured integrations
|
|
30
|
+
for (const id of enabledIds) {
|
|
31
|
+
try {
|
|
32
|
+
await registry.enable(id);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
log.warn("Failed to enable %s: %s", id, err);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (registry.enabledCount > 0) {
|
|
39
|
+
log.info("Enabled %d integration(s)", registry.enabledCount);
|
|
40
|
+
}
|
|
41
|
+
return registry;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Import all integration modules. Each module exports a default class.
|
|
45
|
+
* We use explicit imports for tree-shaking and bundler compatibility.
|
|
46
|
+
*/
|
|
47
|
+
async function importAllIntegrations(ctx) {
|
|
48
|
+
const instances = [];
|
|
49
|
+
const importSafe = async (path) => {
|
|
50
|
+
try {
|
|
51
|
+
const mod = await import(path);
|
|
52
|
+
if (mod.default) {
|
|
53
|
+
instances.push(new mod.default(ctx));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Integration not available (missing deps, etc.)
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
// Google
|
|
61
|
+
await importSafe("./google/calendar.js");
|
|
62
|
+
await importSafe("./google/gmail.js");
|
|
63
|
+
await importSafe("./google/drive.js");
|
|
64
|
+
await importSafe("./google/docs.js");
|
|
65
|
+
await importSafe("./google/sheets.js");
|
|
66
|
+
await importSafe("./google/meet.js");
|
|
67
|
+
await importSafe("./google/maps.js");
|
|
68
|
+
await importSafe("./google/search.js");
|
|
69
|
+
await importSafe("./google/youtube.js");
|
|
70
|
+
// Chat
|
|
71
|
+
await importSafe("./chat/discord.js");
|
|
72
|
+
await importSafe("./chat/slack.js");
|
|
73
|
+
await importSafe("./chat/whatsapp.js");
|
|
74
|
+
// AI Models
|
|
75
|
+
await importSafe("./ai-models/openai.js");
|
|
76
|
+
await importSafe("./ai-models/anthropic.js");
|
|
77
|
+
await importSafe("./ai-models/ollama.js");
|
|
78
|
+
// Productivity
|
|
79
|
+
await importSafe("./productivity/notion.js");
|
|
80
|
+
await importSafe("./productivity/obsidian.js");
|
|
81
|
+
await importSafe("./productivity/github.js");
|
|
82
|
+
await importSafe("./productivity/linear.js");
|
|
83
|
+
// Music
|
|
84
|
+
await importSafe("./music/spotify.js");
|
|
85
|
+
// Smart Home
|
|
86
|
+
await importSafe("./smart-home/hue.js");
|
|
87
|
+
await importSafe("./smart-home/homeassistant.js");
|
|
88
|
+
// Tools
|
|
89
|
+
await importSafe("./tools/browser.js");
|
|
90
|
+
await importSafe("./tools/webhooks.js");
|
|
91
|
+
await importSafe("./tools/weather.js");
|
|
92
|
+
// Social
|
|
93
|
+
await importSafe("./social/twitter.js");
|
|
94
|
+
await importSafe("./social/email-smtp.js");
|
|
95
|
+
return instances;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/integrations/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spotify Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides playback control, search, and playlist management via the Spotify Web API.
|
|
5
|
+
* Requires OAuth2 with appropriate scopes for playback and playlist access.
|
|
6
|
+
*
|
|
7
|
+
* @requires SPOTIFY_ACCESS_TOKEN - OAuth2 access token (refreshed externally).
|
|
8
|
+
* @see https://developer.spotify.com/documentation/web-api
|
|
9
|
+
*/
|
|
10
|
+
import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
|
|
11
|
+
export default class SpotifyIntegration extends Integration {
|
|
12
|
+
readonly manifest: IntegrationManifest;
|
|
13
|
+
private request;
|
|
14
|
+
executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
15
|
+
private nowPlaying;
|
|
16
|
+
private play;
|
|
17
|
+
private pause;
|
|
18
|
+
private search;
|
|
19
|
+
private addToPlaylist;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=spotify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spotify.d.ts","sourceRoot":"","sources":["../../../src/integrations/music/spotify.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;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,CAyDpC;YAEY,OAAO;IAcf,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAqBzE,UAAU;YAeV,IAAI;YAOJ,KAAK;YAML,MAAM;YAiBN,aAAa;CAS5B"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spotify Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides playback control, search, and playlist management via the Spotify Web API.
|
|
5
|
+
* Requires OAuth2 with appropriate scopes for playback and playlist access.
|
|
6
|
+
*
|
|
7
|
+
* @requires SPOTIFY_ACCESS_TOKEN - OAuth2 access token (refreshed externally).
|
|
8
|
+
* @see https://developer.spotify.com/documentation/web-api
|
|
9
|
+
*/
|
|
10
|
+
import { Integration } from "../base.js";
|
|
11
|
+
const API_BASE = "https://api.spotify.com/v1";
|
|
12
|
+
export default class SpotifyIntegration extends Integration {
|
|
13
|
+
manifest = {
|
|
14
|
+
id: "spotify",
|
|
15
|
+
name: "Spotify",
|
|
16
|
+
category: "music",
|
|
17
|
+
version: "1.0.0",
|
|
18
|
+
description: "Control playback, search tracks, and manage playlists on Spotify.",
|
|
19
|
+
auth: {
|
|
20
|
+
type: "oauth2",
|
|
21
|
+
scopes: ["user-read-playback-state", "user-modify-playback-state", "playlist-read-private", "playlist-modify-public"],
|
|
22
|
+
envVars: ["SPOTIFY_ACCESS_TOKEN"],
|
|
23
|
+
},
|
|
24
|
+
tools: [
|
|
25
|
+
{
|
|
26
|
+
name: "spotify_now_playing",
|
|
27
|
+
description: "Get the currently playing track.",
|
|
28
|
+
parameters: { type: "object", properties: {} },
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "spotify_play",
|
|
32
|
+
description: "Start or resume playback, optionally with a specific URI.",
|
|
33
|
+
parameters: {
|
|
34
|
+
type: "object",
|
|
35
|
+
properties: {
|
|
36
|
+
uri: { type: "string", description: "Spotify URI to play (e.g. spotify:track:xxx). Optional." },
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: "spotify_pause",
|
|
42
|
+
description: "Pause playback.",
|
|
43
|
+
parameters: { type: "object", properties: {} },
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "spotify_search",
|
|
47
|
+
description: "Search for tracks, albums, or artists.",
|
|
48
|
+
parameters: {
|
|
49
|
+
type: "object",
|
|
50
|
+
properties: {
|
|
51
|
+
query: { type: "string", description: "Search query." },
|
|
52
|
+
type: { type: "string", description: "Type to search for.", enum: ["track", "album", "artist"], default: "track" },
|
|
53
|
+
},
|
|
54
|
+
required: ["query"],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "spotify_add_to_playlist",
|
|
59
|
+
description: "Add a track to a playlist.",
|
|
60
|
+
parameters: {
|
|
61
|
+
type: "object",
|
|
62
|
+
properties: {
|
|
63
|
+
playlistId: { type: "string", description: "Playlist ID." },
|
|
64
|
+
uri: { type: "string", description: "Spotify URI of the track to add." },
|
|
65
|
+
},
|
|
66
|
+
required: ["playlistId", "uri"],
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
async request(path, options = {}) {
|
|
72
|
+
const creds = await this.getCredentials();
|
|
73
|
+
if (!creds?.SPOTIFY_ACCESS_TOKEN)
|
|
74
|
+
throw new Error("Missing SPOTIFY_ACCESS_TOKEN");
|
|
75
|
+
return fetch(`${API_BASE}${path}`, {
|
|
76
|
+
...options,
|
|
77
|
+
headers: {
|
|
78
|
+
Authorization: `Bearer ${creds.SPOTIFY_ACCESS_TOKEN}`,
|
|
79
|
+
"Content-Type": "application/json",
|
|
80
|
+
...options.headers,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
async executeTool(toolName, args) {
|
|
85
|
+
try {
|
|
86
|
+
switch (toolName) {
|
|
87
|
+
case "spotify_now_playing":
|
|
88
|
+
return await this.nowPlaying();
|
|
89
|
+
case "spotify_play":
|
|
90
|
+
return await this.play(args.uri);
|
|
91
|
+
case "spotify_pause":
|
|
92
|
+
return await this.pause();
|
|
93
|
+
case "spotify_search":
|
|
94
|
+
return await this.search(args.query, args.type ?? "track");
|
|
95
|
+
case "spotify_add_to_playlist":
|
|
96
|
+
return await this.addToPlaylist(args.playlistId, args.uri);
|
|
97
|
+
default:
|
|
98
|
+
return this.error(`Unknown tool: ${toolName}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
return this.error(`Spotify error: ${err.message}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async nowPlaying() {
|
|
106
|
+
const res = await this.request("/me/player/currently-playing");
|
|
107
|
+
if (res.status === 204)
|
|
108
|
+
return this.ok("Nothing is currently playing.");
|
|
109
|
+
if (!res.ok)
|
|
110
|
+
return this.error(`Failed: ${res.status}`);
|
|
111
|
+
const data = await res.json();
|
|
112
|
+
if (!data.item)
|
|
113
|
+
return this.ok("Nothing is currently playing.");
|
|
114
|
+
const track = data.item;
|
|
115
|
+
const artists = track.artists.map((a) => a.name).join(", ");
|
|
116
|
+
return this.ok(`Now playing: ${track.name} by ${artists} (${track.album.name})`, {
|
|
117
|
+
uri: track.uri,
|
|
118
|
+
isPlaying: data.is_playing,
|
|
119
|
+
progressMs: data.progress_ms,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
async play(uri) {
|
|
123
|
+
const body = uri ? JSON.stringify({ uris: [uri] }) : undefined;
|
|
124
|
+
const res = await this.request("/me/player/play", { method: "PUT", body });
|
|
125
|
+
if (!res.ok && res.status !== 204)
|
|
126
|
+
return this.error(`Play failed: ${res.status}`);
|
|
127
|
+
return this.ok(uri ? `Playing: ${uri}` : "Playback resumed.");
|
|
128
|
+
}
|
|
129
|
+
async pause() {
|
|
130
|
+
const res = await this.request("/me/player/pause", { method: "PUT" });
|
|
131
|
+
if (!res.ok && res.status !== 204)
|
|
132
|
+
return this.error(`Pause failed: ${res.status}`);
|
|
133
|
+
return this.ok("Playback paused.");
|
|
134
|
+
}
|
|
135
|
+
async search(query, type) {
|
|
136
|
+
const res = await this.request(`/search?q=${encodeURIComponent(query)}&type=${type}&limit=10`);
|
|
137
|
+
if (!res.ok)
|
|
138
|
+
return this.error(`Search failed: ${res.status}`);
|
|
139
|
+
const data = await res.json();
|
|
140
|
+
const key = `${type}s`;
|
|
141
|
+
const items = data[key]?.items ?? [];
|
|
142
|
+
const summary = items
|
|
143
|
+
.map((item) => {
|
|
144
|
+
const artists = item.artists?.map((a) => a.name).join(", ") ?? "";
|
|
145
|
+
return `${item.name}${artists ? ` - ${artists}` : ""} (${item.uri})`;
|
|
146
|
+
})
|
|
147
|
+
.join("\n");
|
|
148
|
+
return this.ok(summary || "No results found.", { count: items.length });
|
|
149
|
+
}
|
|
150
|
+
async addToPlaylist(playlistId, uri) {
|
|
151
|
+
const res = await this.request(`/playlists/${playlistId}/tracks`, {
|
|
152
|
+
method: "POST",
|
|
153
|
+
body: JSON.stringify({ uris: [uri] }),
|
|
154
|
+
});
|
|
155
|
+
if (!res.ok)
|
|
156
|
+
return this.error(`Add to playlist failed: ${res.status}`);
|
|
157
|
+
const data = await res.json();
|
|
158
|
+
return this.ok(`Track added to playlist.`, { snapshotId: data.snapshot_id });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=spotify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spotify.js","sourceRoot":"","sources":["../../../src/integrations/music/spotify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides access to GitHub repositories -- create issues, list issues,
|
|
5
|
+
* create pull requests, and read file contents via the GitHub REST API.
|
|
6
|
+
*
|
|
7
|
+
* @requires GITHUB_TOKEN - Personal access token or fine-grained token.
|
|
8
|
+
* @see https://docs.github.com/en/rest
|
|
9
|
+
*/
|
|
10
|
+
import { Integration, type IntegrationManifest, type ToolResult } from "../base.js";
|
|
11
|
+
export default class GitHubIntegration extends Integration {
|
|
12
|
+
readonly manifest: IntegrationManifest;
|
|
13
|
+
private request;
|
|
14
|
+
executeTool(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
15
|
+
private createIssue;
|
|
16
|
+
private listIssues;
|
|
17
|
+
private createPR;
|
|
18
|
+
private getFile;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/integrations/productivity/github.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAIpF,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;IACxD,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAoEpC;YAEY,OAAO;IAmBf,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAmBzE,WAAW;YAQX,UAAU;YAMV,QAAQ;YAQR,OAAO;CAMtB"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides access to GitHub repositories -- create issues, list issues,
|
|
5
|
+
* create pull requests, and read file contents via the GitHub REST API.
|
|
6
|
+
*
|
|
7
|
+
* @requires GITHUB_TOKEN - Personal access token or fine-grained token.
|
|
8
|
+
* @see https://docs.github.com/en/rest
|
|
9
|
+
*/
|
|
10
|
+
import { Integration } from "../base.js";
|
|
11
|
+
const API_BASE = "https://api.github.com";
|
|
12
|
+
export default class GitHubIntegration extends Integration {
|
|
13
|
+
manifest = {
|
|
14
|
+
id: "github",
|
|
15
|
+
name: "GitHub",
|
|
16
|
+
category: "productivity",
|
|
17
|
+
version: "1.0.0",
|
|
18
|
+
description: "Create issues, list issues, create PRs, and read files on GitHub.",
|
|
19
|
+
auth: {
|
|
20
|
+
type: "token",
|
|
21
|
+
envVars: ["GITHUB_TOKEN"],
|
|
22
|
+
},
|
|
23
|
+
tools: [
|
|
24
|
+
{
|
|
25
|
+
name: "github_create_issue",
|
|
26
|
+
description: "Create a new issue in a repository.",
|
|
27
|
+
parameters: {
|
|
28
|
+
type: "object",
|
|
29
|
+
properties: {
|
|
30
|
+
owner: { type: "string", description: "Repository owner." },
|
|
31
|
+
repo: { type: "string", description: "Repository name." },
|
|
32
|
+
title: { type: "string", description: "Issue title." },
|
|
33
|
+
body: { type: "string", description: "Issue body (Markdown)." },
|
|
34
|
+
},
|
|
35
|
+
required: ["owner", "repo", "title"],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "github_list_issues",
|
|
40
|
+
description: "List issues in a repository.",
|
|
41
|
+
parameters: {
|
|
42
|
+
type: "object",
|
|
43
|
+
properties: {
|
|
44
|
+
owner: { type: "string", description: "Repository owner." },
|
|
45
|
+
repo: { type: "string", description: "Repository name." },
|
|
46
|
+
state: { type: "string", description: "Filter by state.", enum: ["open", "closed", "all"], default: "open" },
|
|
47
|
+
},
|
|
48
|
+
required: ["owner", "repo"],
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "github_create_pr",
|
|
53
|
+
description: "Create a pull request.",
|
|
54
|
+
parameters: {
|
|
55
|
+
type: "object",
|
|
56
|
+
properties: {
|
|
57
|
+
owner: { type: "string", description: "Repository owner." },
|
|
58
|
+
repo: { type: "string", description: "Repository name." },
|
|
59
|
+
title: { type: "string", description: "PR title." },
|
|
60
|
+
body: { type: "string", description: "PR description." },
|
|
61
|
+
head: { type: "string", description: "Head branch." },
|
|
62
|
+
base: { type: "string", description: "Base branch.", default: "main" },
|
|
63
|
+
},
|
|
64
|
+
required: ["owner", "repo", "title", "head", "base"],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "github_get_file",
|
|
69
|
+
description: "Get the contents of a file from a repository.",
|
|
70
|
+
parameters: {
|
|
71
|
+
type: "object",
|
|
72
|
+
properties: {
|
|
73
|
+
owner: { type: "string", description: "Repository owner." },
|
|
74
|
+
repo: { type: "string", description: "Repository name." },
|
|
75
|
+
path: { type: "string", description: "File path within the repo." },
|
|
76
|
+
},
|
|
77
|
+
required: ["owner", "repo", "path"],
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
};
|
|
82
|
+
async request(path, options = {}) {
|
|
83
|
+
const creds = await this.getCredentials();
|
|
84
|
+
if (!creds?.GITHUB_TOKEN)
|
|
85
|
+
throw new Error("Missing GITHUB_TOKEN");
|
|
86
|
+
const res = await fetch(`${API_BASE}${path}`, {
|
|
87
|
+
...options,
|
|
88
|
+
headers: {
|
|
89
|
+
Authorization: `Bearer ${creds.GITHUB_TOKEN}`,
|
|
90
|
+
Accept: "application/vnd.github+json",
|
|
91
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
92
|
+
"Content-Type": "application/json",
|
|
93
|
+
...options.headers,
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
if (!res.ok)
|
|
97
|
+
throw new Error(`GitHub ${res.status}: ${await res.text()}`);
|
|
98
|
+
return res.json();
|
|
99
|
+
}
|
|
100
|
+
async executeTool(toolName, args) {
|
|
101
|
+
try {
|
|
102
|
+
switch (toolName) {
|
|
103
|
+
case "github_create_issue":
|
|
104
|
+
return await this.createIssue(args.owner, args.repo, args.title, args.body);
|
|
105
|
+
case "github_list_issues":
|
|
106
|
+
return await this.listIssues(args.owner, args.repo, args.state ?? "open");
|
|
107
|
+
case "github_create_pr":
|
|
108
|
+
return await this.createPR(args.owner, args.repo, args.title, args.body, args.head, args.base);
|
|
109
|
+
case "github_get_file":
|
|
110
|
+
return await this.getFile(args.owner, args.repo, args.path);
|
|
111
|
+
default:
|
|
112
|
+
return this.error(`Unknown tool: ${toolName}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
return this.error(`GitHub error: ${err.message}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async createIssue(owner, repo, title, body) {
|
|
120
|
+
const data = await this.request(`/repos/${owner}/${repo}/issues`, {
|
|
121
|
+
method: "POST",
|
|
122
|
+
body: JSON.stringify({ title, body }),
|
|
123
|
+
});
|
|
124
|
+
return this.ok(`Issue #${data.number} created: ${data.html_url}`, { number: data.number, url: data.html_url });
|
|
125
|
+
}
|
|
126
|
+
async listIssues(owner, repo, state) {
|
|
127
|
+
const data = await this.request(`/repos/${owner}/${repo}/issues?state=${state}&per_page=30`);
|
|
128
|
+
const summary = data.map((i) => `#${i.number} [${i.state}] ${i.title}`).join("\n");
|
|
129
|
+
return this.ok(summary || "No issues found.", { count: data.length });
|
|
130
|
+
}
|
|
131
|
+
async createPR(owner, repo, title, body, head, base) {
|
|
132
|
+
const data = await this.request(`/repos/${owner}/${repo}/pulls`, {
|
|
133
|
+
method: "POST",
|
|
134
|
+
body: JSON.stringify({ title, body, head, base }),
|
|
135
|
+
});
|
|
136
|
+
return this.ok(`PR #${data.number} created: ${data.html_url}`, { number: data.number, url: data.html_url });
|
|
137
|
+
}
|
|
138
|
+
async getFile(owner, repo, path) {
|
|
139
|
+
const data = await this.request(`/repos/${owner}/${repo}/contents/${path}`);
|
|
140
|
+
if (data.type !== "file")
|
|
141
|
+
return this.error(`Path is not a file: ${data.type}`);
|
|
142
|
+
const content = Buffer.from(data.content, "base64").toString("utf-8");
|
|
143
|
+
return this.ok(content, { path: data.path, sha: data.sha, size: data.size });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/integrations/productivity/github.ts"],"names":[],"mappings":"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"}
|