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,105 @@
|
|
|
1
|
+
import AjvModule from "ajv";
|
|
2
|
+
const Ajv = AjvModule.default ?? AjvModule;
|
|
3
|
+
const configSchema = {
|
|
4
|
+
type: "object",
|
|
5
|
+
required: ["agent", "gemini", "channels", "memory", "security"],
|
|
6
|
+
properties: {
|
|
7
|
+
agent: {
|
|
8
|
+
type: "object",
|
|
9
|
+
required: ["name", "id"],
|
|
10
|
+
properties: {
|
|
11
|
+
name: { type: "string" },
|
|
12
|
+
id: { type: "string" },
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
gemini: {
|
|
16
|
+
type: "object",
|
|
17
|
+
required: ["models"],
|
|
18
|
+
properties: {
|
|
19
|
+
apiKey: { type: "string", nullable: true },
|
|
20
|
+
models: {
|
|
21
|
+
type: "object",
|
|
22
|
+
required: ["pro", "flash", "image", "embedding"],
|
|
23
|
+
properties: {
|
|
24
|
+
pro: { type: "string" },
|
|
25
|
+
flash: { type: "string" },
|
|
26
|
+
image: { type: "string" },
|
|
27
|
+
embedding: { type: "string" },
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
channels: {
|
|
33
|
+
type: "object",
|
|
34
|
+
required: [],
|
|
35
|
+
properties: {
|
|
36
|
+
telegram: {
|
|
37
|
+
type: "object",
|
|
38
|
+
nullable: true,
|
|
39
|
+
required: ["enabled"],
|
|
40
|
+
properties: {
|
|
41
|
+
enabled: { type: "boolean" },
|
|
42
|
+
token: { type: "string", nullable: true },
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
whatsapp: {
|
|
46
|
+
type: "object",
|
|
47
|
+
nullable: true,
|
|
48
|
+
required: ["enabled"],
|
|
49
|
+
properties: {
|
|
50
|
+
enabled: { type: "boolean" },
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
web: {
|
|
54
|
+
type: "object",
|
|
55
|
+
nullable: true,
|
|
56
|
+
required: ["enabled", "port"],
|
|
57
|
+
properties: {
|
|
58
|
+
enabled: { type: "boolean" },
|
|
59
|
+
port: { type: "integer" },
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
rest: {
|
|
63
|
+
type: "object",
|
|
64
|
+
nullable: true,
|
|
65
|
+
required: ["enabled", "port"],
|
|
66
|
+
properties: {
|
|
67
|
+
enabled: { type: "boolean" },
|
|
68
|
+
port: { type: "integer" },
|
|
69
|
+
bearerToken: { type: "string", nullable: true },
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
memory: {
|
|
75
|
+
type: "object",
|
|
76
|
+
required: ["embeddingDimensions", "heartbeatIntervalMinutes"],
|
|
77
|
+
properties: {
|
|
78
|
+
embeddingDimensions: { type: "integer" },
|
|
79
|
+
heartbeatIntervalMinutes: { type: "integer" },
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
wallet: {
|
|
83
|
+
type: "object",
|
|
84
|
+
nullable: true,
|
|
85
|
+
required: ["enabled", "chain", "autoPayThreshold"],
|
|
86
|
+
properties: {
|
|
87
|
+
enabled: { type: "boolean" },
|
|
88
|
+
chain: { type: "string" },
|
|
89
|
+
autoPayThreshold: { type: "number" },
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
security: {
|
|
93
|
+
type: "object",
|
|
94
|
+
required: ["requireApprovalForExternal", "allowedGroups"],
|
|
95
|
+
properties: {
|
|
96
|
+
requireApprovalForExternal: { type: "boolean" },
|
|
97
|
+
allowedGroups: { type: "array", items: { type: "string" } },
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
additionalProperties: false,
|
|
102
|
+
};
|
|
103
|
+
const ajv = new Ajv({ allErrors: true });
|
|
104
|
+
export const validateConfig = ajv.compile(configSchema);
|
|
105
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { WispyConfig } from "../config/schema.js";
|
|
2
|
+
export interface ContentPlan {
|
|
3
|
+
topic: string;
|
|
4
|
+
posts: Array<{
|
|
5
|
+
caption: string;
|
|
6
|
+
imagePrompt: string;
|
|
7
|
+
hashtags: string[];
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
export declare function generateContentPlan(topic: string, postCount: number, config: WispyConfig): Promise<ContentPlan>;
|
|
11
|
+
export declare function generateImage(prompt: string, config: WispyConfig): Promise<string | null>;
|
|
12
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/content/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKvD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CAmCtB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { generate } from "../ai/gemini.js";
|
|
2
|
+
import { createLogger } from "../infra/logger.js";
|
|
3
|
+
const log = createLogger("content-pipeline");
|
|
4
|
+
export async function generateContentPlan(topic, postCount, config) {
|
|
5
|
+
const result = await generate({
|
|
6
|
+
model: config.gemini.models.pro,
|
|
7
|
+
thinkingLevel: "high",
|
|
8
|
+
messages: [
|
|
9
|
+
{
|
|
10
|
+
role: "user",
|
|
11
|
+
content: `Create a content plan for ${postCount} social media posts about: "${topic}".
|
|
12
|
+
For each post, provide:
|
|
13
|
+
1. A compelling caption (under 280 chars)
|
|
14
|
+
2. An image generation prompt (detailed, visual description)
|
|
15
|
+
3. 3-5 relevant hashtags
|
|
16
|
+
|
|
17
|
+
Respond in JSON format:
|
|
18
|
+
{
|
|
19
|
+
"topic": "...",
|
|
20
|
+
"posts": [
|
|
21
|
+
{ "caption": "...", "imagePrompt": "...", "hashtags": ["..."] }
|
|
22
|
+
]
|
|
23
|
+
}`,
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
});
|
|
27
|
+
try {
|
|
28
|
+
// Extract JSON from response
|
|
29
|
+
const jsonMatch = result.text.match(/\{[\s\S]*\}/);
|
|
30
|
+
if (jsonMatch) {
|
|
31
|
+
return JSON.parse(jsonMatch[0]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
log.error({ err }, "Failed to parse content plan");
|
|
36
|
+
}
|
|
37
|
+
return { topic, posts: [] };
|
|
38
|
+
}
|
|
39
|
+
export async function generateImage(prompt, config) {
|
|
40
|
+
try {
|
|
41
|
+
const result = await generate({
|
|
42
|
+
model: config.gemini.models.image,
|
|
43
|
+
messages: [{ role: "user", content: prompt }],
|
|
44
|
+
thinkingLevel: "none",
|
|
45
|
+
});
|
|
46
|
+
// Image generation returns base64 in inlineData
|
|
47
|
+
// This depends on the actual Gemini 3 image gen API response format
|
|
48
|
+
return result.text || null;
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
log.error({ err }, "Image generation failed");
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/content/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAW7C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAa,EACb,SAAiB,EACjB,MAAmB;IAEnB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;QAC/B,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,6BAA6B,SAAS,+BAA+B,KAAK;;;;;;;;;;;;EAYzF;aACK;SACF;KACF,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,MAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;YACjC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC7C,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;QACH,gDAAgD;QAChD,oEAAoE;QACpE,OAAO,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface TwitterCredentials {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
apiSecret: string;
|
|
4
|
+
accessToken: string;
|
|
5
|
+
accessSecret: string;
|
|
6
|
+
}
|
|
7
|
+
export interface TweetOptions {
|
|
8
|
+
text: string;
|
|
9
|
+
mediaIds?: string[];
|
|
10
|
+
replyToId?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class TwitterPublisher {
|
|
13
|
+
private creds;
|
|
14
|
+
constructor(creds: TwitterCredentials);
|
|
15
|
+
postTweet(opts: TweetOptions): Promise<{
|
|
16
|
+
id: string;
|
|
17
|
+
text: string;
|
|
18
|
+
} | null>;
|
|
19
|
+
postThread(tweets: string[]): Promise<Array<{
|
|
20
|
+
id: string;
|
|
21
|
+
text: string;
|
|
22
|
+
}>>;
|
|
23
|
+
private buildOAuth1Header;
|
|
24
|
+
}
|
|
25
|
+
export declare function createPublisherFromEnv(): TwitterPublisher | null;
|
|
26
|
+
//# sourceMappingURL=publisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/content/publisher.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAqB;gBAEtB,KAAK,EAAE,kBAAkB;IAI/B,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAoC3E,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAmBhF,OAAO,CAAC,iBAAiB;CAsC1B;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,GAAG,IAAI,CAWhE"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { createHmac, randomBytes } from "crypto";
|
|
2
|
+
import { createLogger } from "../infra/logger.js";
|
|
3
|
+
const log = createLogger("publisher");
|
|
4
|
+
export class TwitterPublisher {
|
|
5
|
+
creds;
|
|
6
|
+
constructor(creds) {
|
|
7
|
+
this.creds = creds;
|
|
8
|
+
}
|
|
9
|
+
async postTweet(opts) {
|
|
10
|
+
const url = "https://api.twitter.com/2/tweets";
|
|
11
|
+
const body = { text: opts.text };
|
|
12
|
+
if (opts.mediaIds && opts.mediaIds.length > 0) {
|
|
13
|
+
body.media = { media_ids: opts.mediaIds };
|
|
14
|
+
}
|
|
15
|
+
if (opts.replyToId) {
|
|
16
|
+
body.reply = { in_reply_to_tweet_id: opts.replyToId };
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const authHeader = this.buildOAuth1Header("POST", url, {});
|
|
20
|
+
const res = await fetch(url, {
|
|
21
|
+
method: "POST",
|
|
22
|
+
headers: {
|
|
23
|
+
Authorization: authHeader,
|
|
24
|
+
"Content-Type": "application/json",
|
|
25
|
+
},
|
|
26
|
+
body: JSON.stringify(body),
|
|
27
|
+
});
|
|
28
|
+
if (!res.ok) {
|
|
29
|
+
const err = await res.text();
|
|
30
|
+
log.error("Tweet failed: %d %s", res.status, err);
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const data = (await res.json());
|
|
34
|
+
log.info("Tweet posted: %s", data.data.id);
|
|
35
|
+
return data.data;
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
log.error({ err }, "Failed to post tweet");
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async postThread(tweets) {
|
|
43
|
+
const posted = [];
|
|
44
|
+
let replyToId;
|
|
45
|
+
for (const text of tweets) {
|
|
46
|
+
const result = await this.postTweet({ text, replyToId });
|
|
47
|
+
if (result) {
|
|
48
|
+
posted.push(result);
|
|
49
|
+
replyToId = result.id;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
log.error("Thread broken at tweet %d", posted.length + 1);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return posted;
|
|
57
|
+
}
|
|
58
|
+
// OAuth 1.0a signature for Twitter API v2
|
|
59
|
+
buildOAuth1Header(method, url, params) {
|
|
60
|
+
const { apiKey, apiSecret, accessToken, accessSecret } = this.creds;
|
|
61
|
+
const timestamp = Math.floor(Date.now() / 1000).toString();
|
|
62
|
+
const nonce = randomBytes(16).toString("hex");
|
|
63
|
+
const oauthParams = {
|
|
64
|
+
oauth_consumer_key: apiKey,
|
|
65
|
+
oauth_nonce: nonce,
|
|
66
|
+
oauth_signature_method: "HMAC-SHA1",
|
|
67
|
+
oauth_timestamp: timestamp,
|
|
68
|
+
oauth_token: accessToken,
|
|
69
|
+
oauth_version: "1.0",
|
|
70
|
+
};
|
|
71
|
+
const allParams = { ...oauthParams, ...params };
|
|
72
|
+
const paramString = Object.keys(allParams)
|
|
73
|
+
.sort()
|
|
74
|
+
.map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(allParams[k])}`)
|
|
75
|
+
.join("&");
|
|
76
|
+
const baseString = [
|
|
77
|
+
method.toUpperCase(),
|
|
78
|
+
encodeURIComponent(url),
|
|
79
|
+
encodeURIComponent(paramString),
|
|
80
|
+
].join("&");
|
|
81
|
+
const signingKey = `${encodeURIComponent(apiSecret)}&${encodeURIComponent(accessSecret)}`;
|
|
82
|
+
const signature = createHmac("sha1", signingKey).update(baseString).digest("base64");
|
|
83
|
+
oauthParams.oauth_signature = signature;
|
|
84
|
+
const authString = Object.keys(oauthParams)
|
|
85
|
+
.sort()
|
|
86
|
+
.map((k) => `${encodeURIComponent(k)}="${encodeURIComponent(oauthParams[k])}"`)
|
|
87
|
+
.join(", ");
|
|
88
|
+
return `OAuth ${authString}`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export function createPublisherFromEnv() {
|
|
92
|
+
const apiKey = process.env.TWITTER_API_KEY;
|
|
93
|
+
const apiSecret = process.env.TWITTER_API_SECRET;
|
|
94
|
+
const accessToken = process.env.TWITTER_ACCESS_TOKEN;
|
|
95
|
+
const accessSecret = process.env.TWITTER_ACCESS_SECRET;
|
|
96
|
+
if (!apiKey || !apiSecret || !accessToken || !accessSecret) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
return new TwitterPublisher({ apiKey, apiSecret, accessToken, accessSecret });
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=publisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../src/content/publisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ToolExecutor, type ToolResult } from "../agents/tool-executor.js";
|
|
2
|
+
import { MemoryManager } from "../memory/manager.js";
|
|
3
|
+
import type { IntegrationRegistry } from "../integrations/registry.js";
|
|
4
|
+
import type { SessionType } from "../security/isolation.js";
|
|
5
|
+
import type { WispyConfig } from "../config/schema.js";
|
|
6
|
+
export interface AgentContext {
|
|
7
|
+
config: WispyConfig;
|
|
8
|
+
runtimeDir: string;
|
|
9
|
+
soulDir: string;
|
|
10
|
+
}
|
|
11
|
+
export interface AgentResponse {
|
|
12
|
+
text: string;
|
|
13
|
+
thinking?: string;
|
|
14
|
+
toolCalls?: unknown[];
|
|
15
|
+
toolResults?: ToolResult[];
|
|
16
|
+
}
|
|
17
|
+
export declare class Agent {
|
|
18
|
+
private ctx;
|
|
19
|
+
private toolExecutor;
|
|
20
|
+
private memoryManager;
|
|
21
|
+
private integrationRegistry?;
|
|
22
|
+
constructor(ctx: AgentContext);
|
|
23
|
+
/**
|
|
24
|
+
* Attach an integration registry (loaded externally).
|
|
25
|
+
* Updates the tool executor to route integration tools.
|
|
26
|
+
*/
|
|
27
|
+
setIntegrationRegistry(registry: IntegrationRegistry): void;
|
|
28
|
+
getIntegrationRegistry(): IntegrationRegistry | undefined;
|
|
29
|
+
chat(userMessage: string, peerId: string, channel: string, sessionType?: SessionType): Promise<AgentResponse>;
|
|
30
|
+
chatStream(userMessage: string, peerId: string, channel: string, sessionType?: SessionType): AsyncGenerator<{
|
|
31
|
+
type: string;
|
|
32
|
+
content: string;
|
|
33
|
+
}>;
|
|
34
|
+
getMemoryManager(): MemoryManager;
|
|
35
|
+
getToolExecutor(): ToolExecutor;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAiB,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAOvD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,mBAAmB,CAAC,CAAsB;gBAEtC,GAAG,EAAE,YAAY;IAW7B;;;OAGG;IACH,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAW3D,sBAAsB,IAAI,mBAAmB,GAAG,SAAS;IAInD,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,WAAoB,GAChC,OAAO,CAAC,aAAa,CAAC;IAwHlB,UAAU,CACf,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,WAAoB,GAChC,cAAc,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoDpD,gBAAgB,IAAI,aAAa;IAIjC,eAAe,IAAI,YAAY;CAGhC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { generate, generateStream } from "../ai/gemini.js";
|
|
2
|
+
import { routeTask } from "../ai/router.js";
|
|
3
|
+
import { buildSystemPrompt } from "../ai/prompts.js";
|
|
4
|
+
import { getToolDeclarations } from "../ai/tools.js";
|
|
5
|
+
import { inferThinkingLevel } from "./thinking.js";
|
|
6
|
+
import { getOrCreateSession, appendMessage, loadHistory, } from "./session.js";
|
|
7
|
+
import { ToolExecutor } from "../agents/tool-executor.js";
|
|
8
|
+
import { MemoryManager } from "../memory/manager.js";
|
|
9
|
+
import { sanitizeOutput } from "../security/api-key-guard.js";
|
|
10
|
+
import { createLogger } from "../infra/logger.js";
|
|
11
|
+
const log = createLogger("agent");
|
|
12
|
+
const MAX_TOOL_LOOPS = 10;
|
|
13
|
+
export class Agent {
|
|
14
|
+
ctx;
|
|
15
|
+
toolExecutor;
|
|
16
|
+
memoryManager;
|
|
17
|
+
integrationRegistry;
|
|
18
|
+
constructor(ctx) {
|
|
19
|
+
this.ctx = ctx;
|
|
20
|
+
this.memoryManager = new MemoryManager(ctx.runtimeDir, ctx.config);
|
|
21
|
+
this.toolExecutor = new ToolExecutor(ctx.config, ctx.runtimeDir, ctx.soulDir, this.memoryManager);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Attach an integration registry (loaded externally).
|
|
25
|
+
* Updates the tool executor to route integration tools.
|
|
26
|
+
*/
|
|
27
|
+
setIntegrationRegistry(registry) {
|
|
28
|
+
this.integrationRegistry = registry;
|
|
29
|
+
this.toolExecutor = new ToolExecutor(this.ctx.config, this.ctx.runtimeDir, this.ctx.soulDir, this.memoryManager, registry);
|
|
30
|
+
}
|
|
31
|
+
getIntegrationRegistry() {
|
|
32
|
+
return this.integrationRegistry;
|
|
33
|
+
}
|
|
34
|
+
async chat(userMessage, peerId, channel, sessionType = "main") {
|
|
35
|
+
const { config, runtimeDir, soulDir } = this.ctx;
|
|
36
|
+
const agentId = config.agent.id;
|
|
37
|
+
// Get or create session
|
|
38
|
+
const session = getOrCreateSession(runtimeDir, agentId, sessionType, peerId, channel);
|
|
39
|
+
// Save user message
|
|
40
|
+
appendMessage(runtimeDir, agentId, session.sessionKey, {
|
|
41
|
+
role: "user",
|
|
42
|
+
content: userMessage,
|
|
43
|
+
timestamp: new Date().toISOString(),
|
|
44
|
+
channel,
|
|
45
|
+
peerId,
|
|
46
|
+
});
|
|
47
|
+
// Build conversation history
|
|
48
|
+
const history = loadHistory(runtimeDir, agentId, session.sessionKey);
|
|
49
|
+
const messages = history.map((m) => ({
|
|
50
|
+
role: m.role,
|
|
51
|
+
content: m.content,
|
|
52
|
+
}));
|
|
53
|
+
const thinkingLevel = inferThinkingLevel(userMessage);
|
|
54
|
+
const route = routeTask("reasoning", config);
|
|
55
|
+
const systemPrompt = buildSystemPrompt(soulDir, sessionType);
|
|
56
|
+
log.info("Chat [%s] model=%s thinking=%s", session.sessionKey.slice(0, 30), route.model, thinkingLevel);
|
|
57
|
+
// Agentic loop — generate, execute tools, feed results back, repeat
|
|
58
|
+
let allToolResults = [];
|
|
59
|
+
let finalText = "";
|
|
60
|
+
let finalThinking;
|
|
61
|
+
let loopCount = 0;
|
|
62
|
+
while (loopCount < MAX_TOOL_LOOPS) {
|
|
63
|
+
loopCount++;
|
|
64
|
+
const result = await generate({
|
|
65
|
+
model: route.model,
|
|
66
|
+
systemPrompt,
|
|
67
|
+
messages,
|
|
68
|
+
tools: getToolDeclarations(),
|
|
69
|
+
thinkingLevel,
|
|
70
|
+
});
|
|
71
|
+
finalThinking = result.thinking;
|
|
72
|
+
// If no tool calls, we have our final response
|
|
73
|
+
if (!result.toolCalls || result.toolCalls.length === 0) {
|
|
74
|
+
finalText = result.text;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
// Execute tool calls
|
|
78
|
+
log.info("Agent requested %d tool call(s), loop %d", result.toolCalls.length, loopCount);
|
|
79
|
+
const toolResults = [];
|
|
80
|
+
for (const tc of result.toolCalls) {
|
|
81
|
+
const call = tc;
|
|
82
|
+
const toolResult = await this.toolExecutor.execute(call);
|
|
83
|
+
allToolResults.push(toolResult);
|
|
84
|
+
toolResults.push(`Tool: ${call.name}\nResult: ${toolResult.success ? toolResult.output : "ERROR: " + toolResult.error}`);
|
|
85
|
+
log.info("Tool %s: %s", call.name, toolResult.success ? "OK" : "FAIL");
|
|
86
|
+
}
|
|
87
|
+
// Add the model's partial response + tool results back into the conversation
|
|
88
|
+
if (result.text) {
|
|
89
|
+
messages.push({ role: "model", content: result.text });
|
|
90
|
+
}
|
|
91
|
+
messages.push({
|
|
92
|
+
role: "user",
|
|
93
|
+
content: `[Tool Results]\n${toolResults.join("\n\n")}`,
|
|
94
|
+
});
|
|
95
|
+
// If there was text alongside tools, that might be intermediate thinking
|
|
96
|
+
if (result.text) {
|
|
97
|
+
finalText = result.text;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (loopCount >= MAX_TOOL_LOOPS) {
|
|
101
|
+
log.warn("Max tool loops reached (%d)", MAX_TOOL_LOOPS);
|
|
102
|
+
finalText += "\n\n(Reached maximum tool execution steps)";
|
|
103
|
+
}
|
|
104
|
+
const safeText = sanitizeOutput(finalText);
|
|
105
|
+
// Save agent response
|
|
106
|
+
appendMessage(runtimeDir, agentId, session.sessionKey, {
|
|
107
|
+
role: "model",
|
|
108
|
+
content: safeText,
|
|
109
|
+
timestamp: new Date().toISOString(),
|
|
110
|
+
thinking: finalThinking,
|
|
111
|
+
});
|
|
112
|
+
// Index conversation in memory
|
|
113
|
+
try {
|
|
114
|
+
await this.memoryManager.addMemory(`User: ${userMessage}\nAgent: ${safeText.slice(0, 500)}`, "session", session.sessionKey);
|
|
115
|
+
}
|
|
116
|
+
catch { /* non-fatal */ }
|
|
117
|
+
return {
|
|
118
|
+
text: safeText,
|
|
119
|
+
thinking: finalThinking,
|
|
120
|
+
toolCalls: allToolResults.length > 0 ? allToolResults : undefined,
|
|
121
|
+
toolResults: allToolResults.length > 0 ? allToolResults : undefined,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
async *chatStream(userMessage, peerId, channel, sessionType = "main") {
|
|
125
|
+
const { config, runtimeDir, soulDir } = this.ctx;
|
|
126
|
+
const agentId = config.agent.id;
|
|
127
|
+
const session = getOrCreateSession(runtimeDir, agentId, sessionType, peerId, channel);
|
|
128
|
+
appendMessage(runtimeDir, agentId, session.sessionKey, {
|
|
129
|
+
role: "user",
|
|
130
|
+
content: userMessage,
|
|
131
|
+
timestamp: new Date().toISOString(),
|
|
132
|
+
channel,
|
|
133
|
+
peerId,
|
|
134
|
+
});
|
|
135
|
+
const history = loadHistory(runtimeDir, agentId, session.sessionKey);
|
|
136
|
+
const messages = history.map((m) => ({
|
|
137
|
+
role: m.role,
|
|
138
|
+
content: m.content,
|
|
139
|
+
}));
|
|
140
|
+
const thinkingLevel = inferThinkingLevel(userMessage);
|
|
141
|
+
const route = routeTask("reasoning", config);
|
|
142
|
+
const systemPrompt = buildSystemPrompt(soulDir, sessionType);
|
|
143
|
+
let fullText = "";
|
|
144
|
+
for await (const chunk of generateStream({
|
|
145
|
+
model: route.model,
|
|
146
|
+
systemPrompt,
|
|
147
|
+
messages,
|
|
148
|
+
thinkingLevel,
|
|
149
|
+
})) {
|
|
150
|
+
if (chunk.type === "text") {
|
|
151
|
+
fullText += chunk.content;
|
|
152
|
+
}
|
|
153
|
+
yield chunk;
|
|
154
|
+
}
|
|
155
|
+
appendMessage(runtimeDir, agentId, session.sessionKey, {
|
|
156
|
+
role: "model",
|
|
157
|
+
content: sanitizeOutput(fullText),
|
|
158
|
+
timestamp: new Date().toISOString(),
|
|
159
|
+
});
|
|
160
|
+
// Index in memory (non-blocking)
|
|
161
|
+
this.memoryManager.addMemory(`User: ${userMessage}\nAgent: ${fullText.slice(0, 500)}`, "session", session.sessionKey).catch(() => { });
|
|
162
|
+
}
|
|
163
|
+
getMemoryManager() {
|
|
164
|
+
return this.memoryManager;
|
|
165
|
+
}
|
|
166
|
+
getToolExecutor() {
|
|
167
|
+
return this.toolExecutor;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MemoryManager } from "../memory/manager.js";
|
|
2
|
+
import type { WispyConfig } from "../config/schema.js";
|
|
3
|
+
export declare class HeartbeatRunner {
|
|
4
|
+
private config;
|
|
5
|
+
private runtimeDir;
|
|
6
|
+
private soulDir;
|
|
7
|
+
private memoryManager;
|
|
8
|
+
private timer;
|
|
9
|
+
constructor(config: WispyConfig, runtimeDir: string, soulDir: string, memoryManager: MemoryManager);
|
|
10
|
+
start(): void;
|
|
11
|
+
stop(): void;
|
|
12
|
+
private tick;
|
|
13
|
+
private syncSessions;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=heartbeat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/core/heartbeat.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKvD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,KAAK,CAA+C;gBAG1D,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,aAAa;IAQ9B,KAAK;IAUL,IAAI;YAOU,IAAI;YAqBJ,YAAY;CA8B3B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { loadHeartbeatState, saveHeartbeatState, appendDailyNote, } from "./memory.js";
|
|
2
|
+
import { loadHistory, loadRegistry } from "./session.js";
|
|
3
|
+
import { createLogger } from "../infra/logger.js";
|
|
4
|
+
const log = createLogger("heartbeat");
|
|
5
|
+
export class HeartbeatRunner {
|
|
6
|
+
config;
|
|
7
|
+
runtimeDir;
|
|
8
|
+
soulDir;
|
|
9
|
+
memoryManager;
|
|
10
|
+
timer = null;
|
|
11
|
+
constructor(config, runtimeDir, soulDir, memoryManager) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.runtimeDir = runtimeDir;
|
|
14
|
+
this.soulDir = soulDir;
|
|
15
|
+
this.memoryManager = memoryManager;
|
|
16
|
+
}
|
|
17
|
+
start() {
|
|
18
|
+
const intervalMs = this.config.memory.heartbeatIntervalMinutes * 60 * 1000;
|
|
19
|
+
log.info("Heartbeat started (every %d min)", this.config.memory.heartbeatIntervalMinutes);
|
|
20
|
+
this.timer = setInterval(() => this.tick(), intervalMs);
|
|
21
|
+
// Run first tick after 10 seconds
|
|
22
|
+
setTimeout(() => this.tick(), 10000);
|
|
23
|
+
}
|
|
24
|
+
stop() {
|
|
25
|
+
if (this.timer) {
|
|
26
|
+
clearInterval(this.timer);
|
|
27
|
+
this.timer = null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async tick() {
|
|
31
|
+
log.info("Heartbeat tick");
|
|
32
|
+
const state = loadHeartbeatState(this.soulDir);
|
|
33
|
+
try {
|
|
34
|
+
// 1. Sync recent sessions to memory
|
|
35
|
+
await this.syncSessions(state);
|
|
36
|
+
// 2. Write daily note
|
|
37
|
+
appendDailyNote(this.soulDir, "Heartbeat tick completed");
|
|
38
|
+
// 3. Update state
|
|
39
|
+
state.lastRun = new Date().toISOString();
|
|
40
|
+
saveHeartbeatState(this.soulDir, state);
|
|
41
|
+
log.info("Heartbeat complete");
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
log.error({ err }, "Heartbeat failed");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async syncSessions(state) {
|
|
48
|
+
const agentId = this.config.agent.id;
|
|
49
|
+
const reg = loadRegistry(this.runtimeDir, agentId);
|
|
50
|
+
for (const session of Object.values(reg.sessions)) {
|
|
51
|
+
const history = loadHistory(this.runtimeDir, agentId, session.sessionKey);
|
|
52
|
+
// Index new messages since last sync
|
|
53
|
+
const startIdx = state.lastSyncMessageIndex;
|
|
54
|
+
const newMessages = history.slice(startIdx);
|
|
55
|
+
if (newMessages.length === 0)
|
|
56
|
+
continue;
|
|
57
|
+
log.debug("Syncing %d new messages from %s", newMessages.length, session.sessionKey);
|
|
58
|
+
for (const msg of newMessages) {
|
|
59
|
+
if (msg.content && msg.content.length > 20) {
|
|
60
|
+
try {
|
|
61
|
+
await this.memoryManager.addMemory(msg.content.slice(0, 1000), "session", session.sessionKey);
|
|
62
|
+
}
|
|
63
|
+
catch { /* continue on embedding failure */ }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
state.lastSyncMessageIndex = history.length;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=heartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/core/heartbeat.ts"],"names":[],"mappings":"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"}
|