cowork-os 0.3.21
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/LICENSE +21 -0
- package/README.md +1638 -0
- package/bin/cowork.js +42 -0
- package/build/entitlements.mac.plist +16 -0
- package/build/icon.icns +0 -0
- package/build/icon.png +0 -0
- package/dist/electron/electron/activity/ActivityRepository.js +190 -0
- package/dist/electron/electron/agent/browser/browser-service.js +639 -0
- package/dist/electron/electron/agent/context-manager.js +225 -0
- package/dist/electron/electron/agent/custom-skill-loader.js +566 -0
- package/dist/electron/electron/agent/daemon.js +975 -0
- package/dist/electron/electron/agent/executor.js +3561 -0
- package/dist/electron/electron/agent/llm/anthropic-provider.js +155 -0
- package/dist/electron/electron/agent/llm/bedrock-provider.js +202 -0
- package/dist/electron/electron/agent/llm/gemini-provider.js +375 -0
- package/dist/electron/electron/agent/llm/index.js +34 -0
- package/dist/electron/electron/agent/llm/ollama-provider.js +263 -0
- package/dist/electron/electron/agent/llm/openai-oauth.js +101 -0
- package/dist/electron/electron/agent/llm/openai-provider.js +657 -0
- package/dist/electron/electron/agent/llm/openrouter-provider.js +232 -0
- package/dist/electron/electron/agent/llm/pricing.js +160 -0
- package/dist/electron/electron/agent/llm/provider-factory.js +880 -0
- package/dist/electron/electron/agent/llm/types.js +178 -0
- package/dist/electron/electron/agent/queue-manager.js +378 -0
- package/dist/electron/electron/agent/sandbox/docker-sandbox.js +402 -0
- package/dist/electron/electron/agent/sandbox/macos-sandbox.js +407 -0
- package/dist/electron/electron/agent/sandbox/runner.js +410 -0
- package/dist/electron/electron/agent/sandbox/sandbox-factory.js +228 -0
- package/dist/electron/electron/agent/sandbox/security-utils.js +258 -0
- package/dist/electron/electron/agent/search/brave-provider.js +119 -0
- package/dist/electron/electron/agent/search/google-provider.js +100 -0
- package/dist/electron/electron/agent/search/index.js +28 -0
- package/dist/electron/electron/agent/search/provider-factory.js +395 -0
- package/dist/electron/electron/agent/search/serpapi-provider.js +112 -0
- package/dist/electron/electron/agent/search/tavily-provider.js +90 -0
- package/dist/electron/electron/agent/search/types.js +40 -0
- package/dist/electron/electron/agent/security/index.js +12 -0
- package/dist/electron/electron/agent/security/input-sanitizer.js +303 -0
- package/dist/electron/electron/agent/security/output-filter.js +217 -0
- package/dist/electron/electron/agent/skill-eligibility.js +281 -0
- package/dist/electron/electron/agent/skill-registry.js +396 -0
- package/dist/electron/electron/agent/skills/document.js +878 -0
- package/dist/electron/electron/agent/skills/image-generator.js +225 -0
- package/dist/electron/electron/agent/skills/organizer.js +141 -0
- package/dist/electron/electron/agent/skills/presentation.js +367 -0
- package/dist/electron/electron/agent/skills/spreadsheet.js +165 -0
- package/dist/electron/electron/agent/tools/browser-tools.js +523 -0
- package/dist/electron/electron/agent/tools/builtin-settings.js +384 -0
- package/dist/electron/electron/agent/tools/canvas-tools.js +530 -0
- package/dist/electron/electron/agent/tools/cron-tools.js +577 -0
- package/dist/electron/electron/agent/tools/edit-tools.js +194 -0
- package/dist/electron/electron/agent/tools/file-tools.js +719 -0
- package/dist/electron/electron/agent/tools/glob-tools.js +283 -0
- package/dist/electron/electron/agent/tools/grep-tools.js +387 -0
- package/dist/electron/electron/agent/tools/image-tools.js +111 -0
- package/dist/electron/electron/agent/tools/mention-tools.js +282 -0
- package/dist/electron/electron/agent/tools/node-tools.js +476 -0
- package/dist/electron/electron/agent/tools/registry.js +2719 -0
- package/dist/electron/electron/agent/tools/search-tools.js +91 -0
- package/dist/electron/electron/agent/tools/shell-tools.js +574 -0
- package/dist/electron/electron/agent/tools/skill-tools.js +274 -0
- package/dist/electron/electron/agent/tools/system-tools.js +578 -0
- package/dist/electron/electron/agent/tools/web-fetch-tools.js +444 -0
- package/dist/electron/electron/agent/tools/x-tools.js +264 -0
- package/dist/electron/electron/agents/AgentRoleRepository.js +420 -0
- package/dist/electron/electron/agents/HeartbeatService.js +356 -0
- package/dist/electron/electron/agents/MentionRepository.js +197 -0
- package/dist/electron/electron/agents/TaskSubscriptionRepository.js +168 -0
- package/dist/electron/electron/agents/WorkingStateRepository.js +229 -0
- package/dist/electron/electron/canvas/canvas-manager.js +714 -0
- package/dist/electron/electron/canvas/canvas-preload.js +53 -0
- package/dist/electron/electron/canvas/canvas-protocol.js +195 -0
- package/dist/electron/electron/canvas/canvas-store.js +174 -0
- package/dist/electron/electron/canvas/index.js +13 -0
- package/dist/electron/electron/control-plane/client.js +364 -0
- package/dist/electron/electron/control-plane/handlers.js +572 -0
- package/dist/electron/electron/control-plane/index.js +41 -0
- package/dist/electron/electron/control-plane/node-manager.js +264 -0
- package/dist/electron/electron/control-plane/protocol.js +194 -0
- package/dist/electron/electron/control-plane/remote-client.js +437 -0
- package/dist/electron/electron/control-plane/server.js +640 -0
- package/dist/electron/electron/control-plane/settings.js +369 -0
- package/dist/electron/electron/control-plane/ssh-tunnel.js +549 -0
- package/dist/electron/electron/cron/index.js +30 -0
- package/dist/electron/electron/cron/schedule.js +190 -0
- package/dist/electron/electron/cron/service.js +614 -0
- package/dist/electron/electron/cron/store.js +155 -0
- package/dist/electron/electron/cron/types.js +82 -0
- package/dist/electron/electron/cron/webhook.js +258 -0
- package/dist/electron/electron/database/SecureSettingsRepository.js +444 -0
- package/dist/electron/electron/database/TaskLabelRepository.js +120 -0
- package/dist/electron/electron/database/repositories.js +1781 -0
- package/dist/electron/electron/database/schema.js +978 -0
- package/dist/electron/electron/extensions/index.js +33 -0
- package/dist/electron/electron/extensions/loader.js +313 -0
- package/dist/electron/electron/extensions/registry.js +485 -0
- package/dist/electron/electron/extensions/types.js +11 -0
- package/dist/electron/electron/gateway/channel-registry.js +1102 -0
- package/dist/electron/electron/gateway/channels/bluebubbles-client.js +479 -0
- package/dist/electron/electron/gateway/channels/bluebubbles.js +432 -0
- package/dist/electron/electron/gateway/channels/discord.js +975 -0
- package/dist/electron/electron/gateway/channels/email-client.js +593 -0
- package/dist/electron/electron/gateway/channels/email.js +443 -0
- package/dist/electron/electron/gateway/channels/google-chat.js +631 -0
- package/dist/electron/electron/gateway/channels/imessage-client.js +363 -0
- package/dist/electron/electron/gateway/channels/imessage.js +465 -0
- package/dist/electron/electron/gateway/channels/index.js +36 -0
- package/dist/electron/electron/gateway/channels/line-client.js +470 -0
- package/dist/electron/electron/gateway/channels/line.js +479 -0
- package/dist/electron/electron/gateway/channels/matrix-client.js +432 -0
- package/dist/electron/electron/gateway/channels/matrix.js +592 -0
- package/dist/electron/electron/gateway/channels/mattermost-client.js +394 -0
- package/dist/electron/electron/gateway/channels/mattermost.js +496 -0
- package/dist/electron/electron/gateway/channels/signal-client.js +500 -0
- package/dist/electron/electron/gateway/channels/signal.js +582 -0
- package/dist/electron/electron/gateway/channels/slack.js +415 -0
- package/dist/electron/electron/gateway/channels/teams.js +596 -0
- package/dist/electron/electron/gateway/channels/telegram.js +1390 -0
- package/dist/electron/electron/gateway/channels/twitch-client.js +502 -0
- package/dist/electron/electron/gateway/channels/twitch.js +396 -0
- package/dist/electron/electron/gateway/channels/types.js +8 -0
- package/dist/electron/electron/gateway/channels/whatsapp.js +953 -0
- package/dist/electron/electron/gateway/context-policy.js +268 -0
- package/dist/electron/electron/gateway/index.js +1063 -0
- package/dist/electron/electron/gateway/infrastructure.js +496 -0
- package/dist/electron/electron/gateway/router.js +2700 -0
- package/dist/electron/electron/gateway/security.js +375 -0
- package/dist/electron/electron/gateway/session.js +115 -0
- package/dist/electron/electron/gateway/tunnel.js +503 -0
- package/dist/electron/electron/guardrails/guardrail-manager.js +348 -0
- package/dist/electron/electron/hooks/gmail-watcher.js +300 -0
- package/dist/electron/electron/hooks/index.js +46 -0
- package/dist/electron/electron/hooks/mappings.js +381 -0
- package/dist/electron/electron/hooks/server.js +480 -0
- package/dist/electron/electron/hooks/settings.js +447 -0
- package/dist/electron/electron/hooks/types.js +41 -0
- package/dist/electron/electron/ipc/canvas-handlers.js +158 -0
- package/dist/electron/electron/ipc/handlers.js +3138 -0
- package/dist/electron/electron/ipc/mission-control-handlers.js +141 -0
- package/dist/electron/electron/main.js +448 -0
- package/dist/electron/electron/mcp/client/MCPClientManager.js +330 -0
- package/dist/electron/electron/mcp/client/MCPServerConnection.js +437 -0
- package/dist/electron/electron/mcp/client/transports/SSETransport.js +304 -0
- package/dist/electron/electron/mcp/client/transports/StdioTransport.js +307 -0
- package/dist/electron/electron/mcp/client/transports/WebSocketTransport.js +329 -0
- package/dist/electron/electron/mcp/host/MCPHostServer.js +354 -0
- package/dist/electron/electron/mcp/host/ToolAdapter.js +100 -0
- package/dist/electron/electron/mcp/registry/MCPRegistryManager.js +497 -0
- package/dist/electron/electron/mcp/settings.js +446 -0
- package/dist/electron/electron/mcp/types.js +59 -0
- package/dist/electron/electron/memory/MemoryService.js +435 -0
- package/dist/electron/electron/notifications/index.js +17 -0
- package/dist/electron/electron/notifications/service.js +118 -0
- package/dist/electron/electron/notifications/store.js +144 -0
- package/dist/electron/electron/preload.js +842 -0
- package/dist/electron/electron/reports/StandupReportService.js +272 -0
- package/dist/electron/electron/security/concurrency.js +293 -0
- package/dist/electron/electron/security/index.js +15 -0
- package/dist/electron/electron/security/policy-manager.js +435 -0
- package/dist/electron/electron/settings/appearance-manager.js +193 -0
- package/dist/electron/electron/settings/personality-manager.js +724 -0
- package/dist/electron/electron/settings/x-manager.js +58 -0
- package/dist/electron/electron/tailscale/exposure.js +188 -0
- package/dist/electron/electron/tailscale/index.js +28 -0
- package/dist/electron/electron/tailscale/settings.js +205 -0
- package/dist/electron/electron/tailscale/tailscale.js +355 -0
- package/dist/electron/electron/tray/QuickInputWindow.js +568 -0
- package/dist/electron/electron/tray/TrayManager.js +895 -0
- package/dist/electron/electron/tray/index.js +9 -0
- package/dist/electron/electron/updater/index.js +6 -0
- package/dist/electron/electron/updater/update-manager.js +418 -0
- package/dist/electron/electron/utils/env-migration.js +209 -0
- package/dist/electron/electron/utils/process.js +102 -0
- package/dist/electron/electron/utils/rate-limiter.js +104 -0
- package/dist/electron/electron/utils/validation.js +419 -0
- package/dist/electron/electron/utils/x-cli.js +177 -0
- package/dist/electron/electron/voice/VoiceService.js +507 -0
- package/dist/electron/electron/voice/index.js +14 -0
- package/dist/electron/electron/voice/voice-settings-manager.js +359 -0
- package/dist/electron/shared/channelMessages.js +170 -0
- package/dist/electron/shared/types.js +1185 -0
- package/package.json +159 -0
- package/resources/skills/1password.json +10 -0
- package/resources/skills/add-documentation.json +31 -0
- package/resources/skills/analyze-csv.json +17 -0
- package/resources/skills/apple-notes.json +10 -0
- package/resources/skills/apple-reminders.json +10 -0
- package/resources/skills/auto-commenter.json +10 -0
- package/resources/skills/bear-notes.json +10 -0
- package/resources/skills/bird.json +35 -0
- package/resources/skills/blogwatcher.json +10 -0
- package/resources/skills/blucli.json +10 -0
- package/resources/skills/bluebubbles.json +10 -0
- package/resources/skills/camsnap.json +10 -0
- package/resources/skills/clean-imports.json +18 -0
- package/resources/skills/code-review.json +18 -0
- package/resources/skills/coding-agent.json +10 -0
- package/resources/skills/compare-files.json +23 -0
- package/resources/skills/convert-code.json +34 -0
- package/resources/skills/create-changelog.json +24 -0
- package/resources/skills/debug-error.json +17 -0
- package/resources/skills/dependency-check.json +10 -0
- package/resources/skills/discord.json +10 -0
- package/resources/skills/eightctl.json +10 -0
- package/resources/skills/explain-code.json +29 -0
- package/resources/skills/extract-todos.json +18 -0
- package/resources/skills/food-order.json +10 -0
- package/resources/skills/gemini.json +10 -0
- package/resources/skills/generate-readme.json +10 -0
- package/resources/skills/gifgrep.json +10 -0
- package/resources/skills/git-commit.json +10 -0
- package/resources/skills/github.json +10 -0
- package/resources/skills/gog.json +10 -0
- package/resources/skills/goplaces.json +10 -0
- package/resources/skills/himalaya.json +10 -0
- package/resources/skills/imsg.json +10 -0
- package/resources/skills/karpathy-guidelines.json +12 -0
- package/resources/skills/last30days.json +26 -0
- package/resources/skills/local-places.json +10 -0
- package/resources/skills/mcporter.json +10 -0
- package/resources/skills/model-usage.json +10 -0
- package/resources/skills/nano-banana-pro.json +10 -0
- package/resources/skills/nano-pdf.json +10 -0
- package/resources/skills/notion.json +10 -0
- package/resources/skills/obsidian.json +10 -0
- package/resources/skills/openai-image-gen.json +10 -0
- package/resources/skills/openai-whisper-api.json +10 -0
- package/resources/skills/openai-whisper.json +10 -0
- package/resources/skills/openhue.json +10 -0
- package/resources/skills/oracle.json +10 -0
- package/resources/skills/ordercli.json +10 -0
- package/resources/skills/peekaboo.json +10 -0
- package/resources/skills/project-structure.json +10 -0
- package/resources/skills/proofread.json +17 -0
- package/resources/skills/refactor-code.json +31 -0
- package/resources/skills/rename-symbol.json +23 -0
- package/resources/skills/sag.json +10 -0
- package/resources/skills/security-audit.json +18 -0
- package/resources/skills/session-logs.json +10 -0
- package/resources/skills/sherpa-onnx-tts.json +10 -0
- package/resources/skills/skill-creator.json +15 -0
- package/resources/skills/skill-hub.json +29 -0
- package/resources/skills/slack.json +10 -0
- package/resources/skills/songsee.json +10 -0
- package/resources/skills/sonoscli.json +10 -0
- package/resources/skills/spotify-player.json +10 -0
- package/resources/skills/startup-cfo.json +55 -0
- package/resources/skills/summarize-folder.json +18 -0
- package/resources/skills/summarize.json +10 -0
- package/resources/skills/things-mac.json +10 -0
- package/resources/skills/tmux.json +10 -0
- package/resources/skills/translate.json +36 -0
- package/resources/skills/trello.json +10 -0
- package/resources/skills/video-frames.json +10 -0
- package/resources/skills/voice-call.json +10 -0
- package/resources/skills/wacli.json +10 -0
- package/resources/skills/weather.json +10 -0
- package/resources/skills/write-tests.json +31 -0
- package/src/electron/activity/ActivityRepository.ts +238 -0
- package/src/electron/agent/browser/browser-service.ts +721 -0
- package/src/electron/agent/context-manager.ts +257 -0
- package/src/electron/agent/custom-skill-loader.ts +634 -0
- package/src/electron/agent/daemon.ts +1097 -0
- package/src/electron/agent/executor.ts +4017 -0
- package/src/electron/agent/llm/anthropic-provider.ts +175 -0
- package/src/electron/agent/llm/bedrock-provider.ts +236 -0
- package/src/electron/agent/llm/gemini-provider.ts +422 -0
- package/src/electron/agent/llm/index.ts +9 -0
- package/src/electron/agent/llm/ollama-provider.ts +347 -0
- package/src/electron/agent/llm/openai-oauth.ts +127 -0
- package/src/electron/agent/llm/openai-provider.ts +686 -0
- package/src/electron/agent/llm/openrouter-provider.ts +273 -0
- package/src/electron/agent/llm/pricing.ts +180 -0
- package/src/electron/agent/llm/provider-factory.ts +971 -0
- package/src/electron/agent/llm/types.ts +291 -0
- package/src/electron/agent/queue-manager.ts +408 -0
- package/src/electron/agent/sandbox/docker-sandbox.ts +453 -0
- package/src/electron/agent/sandbox/macos-sandbox.ts +426 -0
- package/src/electron/agent/sandbox/runner.ts +453 -0
- package/src/electron/agent/sandbox/sandbox-factory.ts +337 -0
- package/src/electron/agent/sandbox/security-utils.ts +251 -0
- package/src/electron/agent/search/brave-provider.ts +141 -0
- package/src/electron/agent/search/google-provider.ts +131 -0
- package/src/electron/agent/search/index.ts +6 -0
- package/src/electron/agent/search/provider-factory.ts +450 -0
- package/src/electron/agent/search/serpapi-provider.ts +138 -0
- package/src/electron/agent/search/tavily-provider.ts +108 -0
- package/src/electron/agent/search/types.ts +118 -0
- package/src/electron/agent/security/index.ts +20 -0
- package/src/electron/agent/security/input-sanitizer.ts +380 -0
- package/src/electron/agent/security/output-filter.ts +259 -0
- package/src/electron/agent/skill-eligibility.ts +334 -0
- package/src/electron/agent/skill-registry.ts +457 -0
- package/src/electron/agent/skills/document.ts +1070 -0
- package/src/electron/agent/skills/image-generator.ts +272 -0
- package/src/electron/agent/skills/organizer.ts +131 -0
- package/src/electron/agent/skills/presentation.ts +418 -0
- package/src/electron/agent/skills/spreadsheet.ts +166 -0
- package/src/electron/agent/tools/browser-tools.ts +546 -0
- package/src/electron/agent/tools/builtin-settings.ts +422 -0
- package/src/electron/agent/tools/canvas-tools.ts +572 -0
- package/src/electron/agent/tools/cron-tools.ts +723 -0
- package/src/electron/agent/tools/edit-tools.ts +196 -0
- package/src/electron/agent/tools/file-tools.ts +811 -0
- package/src/electron/agent/tools/glob-tools.ts +303 -0
- package/src/electron/agent/tools/grep-tools.ts +432 -0
- package/src/electron/agent/tools/image-tools.ts +126 -0
- package/src/electron/agent/tools/mention-tools.ts +371 -0
- package/src/electron/agent/tools/node-tools.ts +550 -0
- package/src/electron/agent/tools/registry.ts +3052 -0
- package/src/electron/agent/tools/search-tools.ts +111 -0
- package/src/electron/agent/tools/shell-tools.ts +651 -0
- package/src/electron/agent/tools/skill-tools.ts +340 -0
- package/src/electron/agent/tools/system-tools.ts +665 -0
- package/src/electron/agent/tools/web-fetch-tools.ts +528 -0
- package/src/electron/agent/tools/x-tools.ts +267 -0
- package/src/electron/agents/AgentRoleRepository.ts +557 -0
- package/src/electron/agents/HeartbeatService.ts +469 -0
- package/src/electron/agents/MentionRepository.ts +242 -0
- package/src/electron/agents/TaskSubscriptionRepository.ts +231 -0
- package/src/electron/agents/WorkingStateRepository.ts +278 -0
- package/src/electron/canvas/canvas-manager.ts +818 -0
- package/src/electron/canvas/canvas-preload.ts +102 -0
- package/src/electron/canvas/canvas-protocol.ts +174 -0
- package/src/electron/canvas/canvas-store.ts +200 -0
- package/src/electron/canvas/index.ts +8 -0
- package/src/electron/control-plane/client.ts +527 -0
- package/src/electron/control-plane/handlers.ts +723 -0
- package/src/electron/control-plane/index.ts +51 -0
- package/src/electron/control-plane/node-manager.ts +322 -0
- package/src/electron/control-plane/protocol.ts +269 -0
- package/src/electron/control-plane/remote-client.ts +517 -0
- package/src/electron/control-plane/server.ts +853 -0
- package/src/electron/control-plane/settings.ts +401 -0
- package/src/electron/control-plane/ssh-tunnel.ts +624 -0
- package/src/electron/cron/index.ts +9 -0
- package/src/electron/cron/schedule.ts +217 -0
- package/src/electron/cron/service.ts +743 -0
- package/src/electron/cron/store.ts +165 -0
- package/src/electron/cron/types.ts +291 -0
- package/src/electron/cron/webhook.ts +303 -0
- package/src/electron/database/SecureSettingsRepository.ts +514 -0
- package/src/electron/database/TaskLabelRepository.ts +148 -0
- package/src/electron/database/repositories.ts +2397 -0
- package/src/electron/database/schema.ts +1017 -0
- package/src/electron/extensions/index.ts +18 -0
- package/src/electron/extensions/loader.ts +336 -0
- package/src/electron/extensions/registry.ts +546 -0
- package/src/electron/extensions/types.ts +372 -0
- package/src/electron/gateway/channel-registry.ts +1267 -0
- package/src/electron/gateway/channels/bluebubbles-client.ts +641 -0
- package/src/electron/gateway/channels/bluebubbles.ts +509 -0
- package/src/electron/gateway/channels/discord.ts +1150 -0
- package/src/electron/gateway/channels/email-client.ts +708 -0
- package/src/electron/gateway/channels/email.ts +516 -0
- package/src/electron/gateway/channels/google-chat.ts +760 -0
- package/src/electron/gateway/channels/imessage-client.ts +473 -0
- package/src/electron/gateway/channels/imessage.ts +520 -0
- package/src/electron/gateway/channels/index.ts +21 -0
- package/src/electron/gateway/channels/line-client.ts +598 -0
- package/src/electron/gateway/channels/line.ts +559 -0
- package/src/electron/gateway/channels/matrix-client.ts +632 -0
- package/src/electron/gateway/channels/matrix.ts +655 -0
- package/src/electron/gateway/channels/mattermost-client.ts +526 -0
- package/src/electron/gateway/channels/mattermost.ts +550 -0
- package/src/electron/gateway/channels/signal-client.ts +722 -0
- package/src/electron/gateway/channels/signal.ts +666 -0
- package/src/electron/gateway/channels/slack.ts +458 -0
- package/src/electron/gateway/channels/teams.ts +681 -0
- package/src/electron/gateway/channels/telegram.ts +1727 -0
- package/src/electron/gateway/channels/twitch-client.ts +665 -0
- package/src/electron/gateway/channels/twitch.ts +468 -0
- package/src/electron/gateway/channels/types.ts +1002 -0
- package/src/electron/gateway/channels/whatsapp.ts +1101 -0
- package/src/electron/gateway/context-policy.ts +382 -0
- package/src/electron/gateway/index.ts +1274 -0
- package/src/electron/gateway/infrastructure.ts +645 -0
- package/src/electron/gateway/router.ts +3206 -0
- package/src/electron/gateway/security.ts +422 -0
- package/src/electron/gateway/session.ts +144 -0
- package/src/electron/gateway/tunnel.ts +626 -0
- package/src/electron/guardrails/guardrail-manager.ts +380 -0
- package/src/electron/hooks/gmail-watcher.ts +355 -0
- package/src/electron/hooks/index.ts +30 -0
- package/src/electron/hooks/mappings.ts +404 -0
- package/src/electron/hooks/server.ts +574 -0
- package/src/electron/hooks/settings.ts +466 -0
- package/src/electron/hooks/types.ts +245 -0
- package/src/electron/ipc/canvas-handlers.ts +223 -0
- package/src/electron/ipc/handlers.ts +3661 -0
- package/src/electron/ipc/mission-control-handlers.ts +182 -0
- package/src/electron/main.ts +496 -0
- package/src/electron/mcp/client/MCPClientManager.ts +406 -0
- package/src/electron/mcp/client/MCPServerConnection.ts +514 -0
- package/src/electron/mcp/client/transports/SSETransport.ts +360 -0
- package/src/electron/mcp/client/transports/StdioTransport.ts +355 -0
- package/src/electron/mcp/client/transports/WebSocketTransport.ts +384 -0
- package/src/electron/mcp/host/MCPHostServer.ts +388 -0
- package/src/electron/mcp/host/ToolAdapter.ts +140 -0
- package/src/electron/mcp/registry/MCPRegistryManager.ts +565 -0
- package/src/electron/mcp/settings.ts +468 -0
- package/src/electron/mcp/types.ts +371 -0
- package/src/electron/memory/MemoryService.ts +523 -0
- package/src/electron/notifications/index.ts +16 -0
- package/src/electron/notifications/service.ts +161 -0
- package/src/electron/notifications/store.ts +163 -0
- package/src/electron/preload.ts +2845 -0
- package/src/electron/reports/StandupReportService.ts +356 -0
- package/src/electron/security/concurrency.ts +333 -0
- package/src/electron/security/index.ts +17 -0
- package/src/electron/security/policy-manager.ts +539 -0
- package/src/electron/settings/appearance-manager.ts +182 -0
- package/src/electron/settings/personality-manager.ts +800 -0
- package/src/electron/settings/x-manager.ts +62 -0
- package/src/electron/tailscale/exposure.ts +262 -0
- package/src/electron/tailscale/index.ts +34 -0
- package/src/electron/tailscale/settings.ts +218 -0
- package/src/electron/tailscale/tailscale.ts +379 -0
- package/src/electron/tray/QuickInputWindow.ts +609 -0
- package/src/electron/tray/TrayManager.ts +1005 -0
- package/src/electron/tray/index.ts +6 -0
- package/src/electron/updater/index.ts +1 -0
- package/src/electron/updater/update-manager.ts +447 -0
- package/src/electron/utils/env-migration.ts +203 -0
- package/src/electron/utils/process.ts +124 -0
- package/src/electron/utils/rate-limiter.ts +130 -0
- package/src/electron/utils/validation.ts +493 -0
- package/src/electron/utils/x-cli.ts +198 -0
- package/src/electron/voice/VoiceService.ts +583 -0
- package/src/electron/voice/index.ts +9 -0
- package/src/electron/voice/voice-settings-manager.ts +403 -0
- package/src/renderer/App.tsx +775 -0
- package/src/renderer/components/ActivityFeed.tsx +407 -0
- package/src/renderer/components/ActivityFeedItem.tsx +285 -0
- package/src/renderer/components/AgentRoleCard.tsx +343 -0
- package/src/renderer/components/AgentRoleEditor.tsx +805 -0
- package/src/renderer/components/AgentSquadSettings.tsx +295 -0
- package/src/renderer/components/AgentWorkingStatePanel.tsx +411 -0
- package/src/renderer/components/AppearanceSettings.tsx +122 -0
- package/src/renderer/components/ApprovalDialog.tsx +100 -0
- package/src/renderer/components/BlueBubblesSettings.tsx +505 -0
- package/src/renderer/components/BuiltinToolsSettings.tsx +307 -0
- package/src/renderer/components/CanvasPreview.tsx +1189 -0
- package/src/renderer/components/CommandOutput.tsx +202 -0
- package/src/renderer/components/ContextPolicySettings.tsx +523 -0
- package/src/renderer/components/ControlPlaneSettings.tsx +1134 -0
- package/src/renderer/components/DisclaimerModal.tsx +124 -0
- package/src/renderer/components/DiscordSettings.tsx +436 -0
- package/src/renderer/components/EmailSettings.tsx +606 -0
- package/src/renderer/components/ExtensionsSettings.tsx +542 -0
- package/src/renderer/components/FileViewer.tsx +224 -0
- package/src/renderer/components/GoogleChatSettings.tsx +535 -0
- package/src/renderer/components/GuardrailSettings.tsx +487 -0
- package/src/renderer/components/HooksSettings.tsx +581 -0
- package/src/renderer/components/ImessageSettings.tsx +484 -0
- package/src/renderer/components/LineSettings.tsx +483 -0
- package/src/renderer/components/MCPRegistryBrowser.tsx +386 -0
- package/src/renderer/components/MCPSettings.tsx +943 -0
- package/src/renderer/components/MainContent.tsx +2433 -0
- package/src/renderer/components/MatrixSettings.tsx +510 -0
- package/src/renderer/components/MattermostSettings.tsx +473 -0
- package/src/renderer/components/MemorySettings.tsx +247 -0
- package/src/renderer/components/MentionBadge.tsx +87 -0
- package/src/renderer/components/MentionInput.tsx +409 -0
- package/src/renderer/components/MentionList.tsx +476 -0
- package/src/renderer/components/MissionControlPanel.tsx +1995 -0
- package/src/renderer/components/NodesSettings.tsx +316 -0
- package/src/renderer/components/NotificationPanel.tsx +481 -0
- package/src/renderer/components/Onboarding/AwakeningOrb.tsx +44 -0
- package/src/renderer/components/Onboarding/Onboarding.tsx +443 -0
- package/src/renderer/components/Onboarding/TypewriterText.tsx +102 -0
- package/src/renderer/components/Onboarding/index.ts +3 -0
- package/src/renderer/components/OnboardingModal.tsx +698 -0
- package/src/renderer/components/PairingCodeDisplay.tsx +324 -0
- package/src/renderer/components/PersonalitySettings.tsx +597 -0
- package/src/renderer/components/QueueSettings.tsx +119 -0
- package/src/renderer/components/QuickTaskFAB.tsx +71 -0
- package/src/renderer/components/RightPanel.tsx +413 -0
- package/src/renderer/components/ScheduledTasksSettings.tsx +1328 -0
- package/src/renderer/components/SearchSettings.tsx +328 -0
- package/src/renderer/components/Settings.tsx +1504 -0
- package/src/renderer/components/Sidebar.tsx +344 -0
- package/src/renderer/components/SignalSettings.tsx +673 -0
- package/src/renderer/components/SkillHubBrowser.tsx +458 -0
- package/src/renderer/components/SkillParameterModal.tsx +185 -0
- package/src/renderer/components/SkillsSettings.tsx +451 -0
- package/src/renderer/components/SlackSettings.tsx +442 -0
- package/src/renderer/components/StandupReportViewer.tsx +614 -0
- package/src/renderer/components/TaskBoard.tsx +498 -0
- package/src/renderer/components/TaskBoardCard.tsx +357 -0
- package/src/renderer/components/TaskBoardColumn.tsx +211 -0
- package/src/renderer/components/TaskLabelManager.tsx +472 -0
- package/src/renderer/components/TaskQueuePanel.tsx +144 -0
- package/src/renderer/components/TaskQuickActions.tsx +492 -0
- package/src/renderer/components/TaskTimeline.tsx +216 -0
- package/src/renderer/components/TaskView.tsx +162 -0
- package/src/renderer/components/TeamsSettings.tsx +518 -0
- package/src/renderer/components/TelegramSettings.tsx +421 -0
- package/src/renderer/components/Toast.tsx +76 -0
- package/src/renderer/components/TraySettings.tsx +189 -0
- package/src/renderer/components/TwitchSettings.tsx +511 -0
- package/src/renderer/components/UpdateSettings.tsx +295 -0
- package/src/renderer/components/VoiceIndicator.tsx +270 -0
- package/src/renderer/components/VoiceSettings.tsx +867 -0
- package/src/renderer/components/WhatsAppSettings.tsx +721 -0
- package/src/renderer/components/WorkingStateEditor.tsx +309 -0
- package/src/renderer/components/WorkingStateHistory.tsx +481 -0
- package/src/renderer/components/WorkspaceSelector.tsx +150 -0
- package/src/renderer/components/XSettings.tsx +311 -0
- package/src/renderer/global.d.ts +9 -0
- package/src/renderer/hooks/useAgentContext.ts +153 -0
- package/src/renderer/hooks/useOnboardingFlow.ts +548 -0
- package/src/renderer/hooks/useVoiceInput.ts +268 -0
- package/src/renderer/index.html +12 -0
- package/src/renderer/main.tsx +10 -0
- package/src/renderer/public/cowork-os-logo.png +0 -0
- package/src/renderer/quick-input.html +164 -0
- package/src/renderer/styles/index.css +14504 -0
- package/src/renderer/utils/agentMessages.ts +749 -0
- package/src/renderer/utils/voice-directives.ts +169 -0
- package/src/shared/channelMessages.ts +213 -0
- package/src/shared/types.ts +3608 -0
- package/tsconfig.electron.json +26 -0
- package/tsconfig.json +26 -0
- package/tsconfig.node.json +10 -0
- package/vite.config.ts +23 -0
|
@@ -0,0 +1,1002 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel Gateway Types
|
|
3
|
+
*
|
|
4
|
+
* Defines interfaces for multi-channel messaging support.
|
|
5
|
+
* Each channel (Telegram, Discord, etc.) implements the ChannelAdapter interface.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Supported channel types
|
|
10
|
+
*/
|
|
11
|
+
export type ChannelType = 'telegram' | 'discord' | 'slack' | 'whatsapp' | 'imessage' | 'signal' | 'mattermost' | 'matrix' | 'twitch' | 'line' | 'bluebubbles' | 'email' | 'teams' | 'googlechat';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Channel connection status
|
|
15
|
+
*/
|
|
16
|
+
export type ChannelStatus = 'disconnected' | 'connecting' | 'connected' | 'error';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Incoming message from any channel
|
|
20
|
+
*/
|
|
21
|
+
export interface IncomingMessage {
|
|
22
|
+
/** Unique message ID from the channel */
|
|
23
|
+
messageId: string;
|
|
24
|
+
/** Channel type */
|
|
25
|
+
channel: ChannelType;
|
|
26
|
+
/** User identifier on the channel */
|
|
27
|
+
userId: string;
|
|
28
|
+
/** User display name */
|
|
29
|
+
userName: string;
|
|
30
|
+
/** Chat/conversation ID (for group chats) */
|
|
31
|
+
chatId: string;
|
|
32
|
+
/** Message content */
|
|
33
|
+
text: string;
|
|
34
|
+
/** Timestamp */
|
|
35
|
+
timestamp: Date;
|
|
36
|
+
/** Optional reply-to message ID */
|
|
37
|
+
replyTo?: string;
|
|
38
|
+
/** Optional attachments */
|
|
39
|
+
attachments?: MessageAttachment[];
|
|
40
|
+
/** Forum topic thread ID (Telegram) */
|
|
41
|
+
threadId?: string;
|
|
42
|
+
/** Whether this is a forum topic message */
|
|
43
|
+
isForumTopic?: boolean;
|
|
44
|
+
/** Raw message object from the channel SDK */
|
|
45
|
+
raw?: unknown;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Inline keyboard button
|
|
50
|
+
*/
|
|
51
|
+
export interface InlineKeyboardButton {
|
|
52
|
+
/** Button label text */
|
|
53
|
+
text: string;
|
|
54
|
+
/** Callback data sent when button is pressed */
|
|
55
|
+
callbackData?: string;
|
|
56
|
+
/** URL to open when button is pressed */
|
|
57
|
+
url?: string;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Outgoing message to any channel
|
|
62
|
+
*/
|
|
63
|
+
export interface OutgoingMessage {
|
|
64
|
+
/** Target chat/conversation ID */
|
|
65
|
+
chatId: string;
|
|
66
|
+
/** Message content */
|
|
67
|
+
text: string;
|
|
68
|
+
/** Optional reply-to message ID */
|
|
69
|
+
replyTo?: string;
|
|
70
|
+
/** Parse mode for formatting */
|
|
71
|
+
parseMode?: 'text' | 'markdown' | 'html';
|
|
72
|
+
/** Optional attachments */
|
|
73
|
+
attachments?: MessageAttachment[];
|
|
74
|
+
/** Forum topic thread ID (Telegram) */
|
|
75
|
+
threadId?: string;
|
|
76
|
+
/** Inline keyboard buttons (rows of buttons) */
|
|
77
|
+
inlineKeyboard?: InlineKeyboardButton[][];
|
|
78
|
+
/** Disable link preview (default: false) */
|
|
79
|
+
disableLinkPreview?: boolean;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Callback query from inline keyboard button press
|
|
84
|
+
*/
|
|
85
|
+
export interface CallbackQuery {
|
|
86
|
+
/** Unique callback query ID */
|
|
87
|
+
id: string;
|
|
88
|
+
/** User who pressed the button */
|
|
89
|
+
userId: string;
|
|
90
|
+
/** User display name */
|
|
91
|
+
userName: string;
|
|
92
|
+
/** Chat ID where button was pressed */
|
|
93
|
+
chatId: string;
|
|
94
|
+
/** Message ID containing the button */
|
|
95
|
+
messageId: string;
|
|
96
|
+
/** Callback data from the button */
|
|
97
|
+
data: string;
|
|
98
|
+
/** Forum topic thread ID (if in forum) */
|
|
99
|
+
threadId?: string;
|
|
100
|
+
/** Raw callback query object */
|
|
101
|
+
raw?: unknown;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Callback query handler
|
|
106
|
+
*/
|
|
107
|
+
export type CallbackQueryHandler = (query: CallbackQuery) => void | Promise<void>;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Message attachment (file, image, etc.)
|
|
111
|
+
*/
|
|
112
|
+
export interface MessageAttachment {
|
|
113
|
+
type: 'file' | 'image' | 'audio' | 'video' | 'document';
|
|
114
|
+
/** URL or file path */
|
|
115
|
+
url?: string;
|
|
116
|
+
/** File data buffer */
|
|
117
|
+
data?: Buffer;
|
|
118
|
+
/** MIME type */
|
|
119
|
+
mimeType?: string;
|
|
120
|
+
/** File name */
|
|
121
|
+
fileName?: string;
|
|
122
|
+
/** File size in bytes */
|
|
123
|
+
size?: number;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Channel configuration base
|
|
128
|
+
*/
|
|
129
|
+
export interface ChannelConfig {
|
|
130
|
+
/** Whether this channel is enabled */
|
|
131
|
+
enabled: boolean;
|
|
132
|
+
/** Channel-specific settings */
|
|
133
|
+
[key: string]: unknown;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Telegram-specific configuration
|
|
138
|
+
*/
|
|
139
|
+
export interface TelegramConfig extends ChannelConfig {
|
|
140
|
+
/** Bot token from @BotFather */
|
|
141
|
+
botToken: string;
|
|
142
|
+
/** Webhook URL (optional, uses polling if not set) */
|
|
143
|
+
webhookUrl?: string;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Discord-specific configuration (future)
|
|
148
|
+
*/
|
|
149
|
+
export interface DiscordConfig extends ChannelConfig {
|
|
150
|
+
/** Bot token */
|
|
151
|
+
botToken: string;
|
|
152
|
+
/** Application ID */
|
|
153
|
+
applicationId: string;
|
|
154
|
+
/** Guild IDs to operate in (empty = all guilds) */
|
|
155
|
+
guildIds?: string[];
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Slack-specific configuration
|
|
160
|
+
*/
|
|
161
|
+
export interface SlackConfig extends ChannelConfig {
|
|
162
|
+
/** Bot token (xoxb-...) */
|
|
163
|
+
botToken: string;
|
|
164
|
+
/** App token for Socket Mode (xapp-...) */
|
|
165
|
+
appToken: string;
|
|
166
|
+
/** Signing secret for verifying requests */
|
|
167
|
+
signingSecret?: string;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* WhatsApp-specific configuration
|
|
172
|
+
*/
|
|
173
|
+
export interface WhatsAppConfig extends ChannelConfig {
|
|
174
|
+
/** Directory to store auth credentials (optional, defaults to app data) */
|
|
175
|
+
authDir?: string;
|
|
176
|
+
/** Print QR code to terminal for debugging */
|
|
177
|
+
printQrToTerminal?: boolean;
|
|
178
|
+
/** Send read receipts for incoming messages (default: true) */
|
|
179
|
+
sendReadReceipts?: boolean;
|
|
180
|
+
/** Allowed phone numbers in E.164 format without + (e.g., "14155551234") */
|
|
181
|
+
allowedNumbers?: string[];
|
|
182
|
+
/** Enable message deduplication (default: true) */
|
|
183
|
+
deduplicationEnabled?: boolean;
|
|
184
|
+
/**
|
|
185
|
+
* Self-chat mode: When true, the bot is running on the same WhatsApp account
|
|
186
|
+
* as the user (messaging yourself). This mode:
|
|
187
|
+
* - Disables read receipts (to avoid marking your own messages as read)
|
|
188
|
+
* - Adds a response prefix to distinguish bot messages from user messages
|
|
189
|
+
*/
|
|
190
|
+
selfChatMode?: boolean;
|
|
191
|
+
/**
|
|
192
|
+
* Prefix to add to bot responses (e.g., "[CoWork]" or "🤖")
|
|
193
|
+
* Only used when selfChatMode is true. Default: "🤖"
|
|
194
|
+
*/
|
|
195
|
+
responsePrefix?: string;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* iMessage-specific configuration
|
|
200
|
+
* Uses imsg CLI (brew install steipete/tap/imsg) for communication
|
|
201
|
+
*/
|
|
202
|
+
export interface ImessageConfig extends ChannelConfig {
|
|
203
|
+
/** Path to imsg CLI (default: "imsg") */
|
|
204
|
+
cliPath?: string;
|
|
205
|
+
/** Path to Messages database (default: ~/Library/Messages/chat.db) */
|
|
206
|
+
dbPath?: string;
|
|
207
|
+
/** DM access policy (default: "pairing") */
|
|
208
|
+
dmPolicy?: 'open' | 'allowlist' | 'pairing' | 'disabled';
|
|
209
|
+
/** Group access policy (default: "allowlist") */
|
|
210
|
+
groupPolicy?: 'open' | 'allowlist' | 'disabled';
|
|
211
|
+
/** Allowed contacts (phone numbers, emails, or chat_id:*) */
|
|
212
|
+
allowedContacts?: string[];
|
|
213
|
+
/** Include attachments in context (default: false) */
|
|
214
|
+
includeAttachments?: boolean;
|
|
215
|
+
/** Max media size in MB (default: 16) */
|
|
216
|
+
mediaMaxMb?: number;
|
|
217
|
+
/** iMessage service preference */
|
|
218
|
+
service?: 'imessage' | 'sms' | 'auto';
|
|
219
|
+
/** Enable message deduplication (default: true) */
|
|
220
|
+
deduplicationEnabled?: boolean;
|
|
221
|
+
/** Response prefix for bot messages */
|
|
222
|
+
responsePrefix?: string;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Signal-specific configuration
|
|
227
|
+
* Uses signal-cli for communication (https://github.com/AsamK/signal-cli)
|
|
228
|
+
*/
|
|
229
|
+
export interface SignalConfig extends ChannelConfig {
|
|
230
|
+
/** Phone number to use (E.164 format, e.g., +14155551234) */
|
|
231
|
+
phoneNumber: string;
|
|
232
|
+
/** Path to signal-cli (default: "signal-cli") */
|
|
233
|
+
cliPath?: string;
|
|
234
|
+
/** signal-cli data directory (default: ~/.local/share/signal-cli) */
|
|
235
|
+
dataDir?: string;
|
|
236
|
+
/** Configuration mode */
|
|
237
|
+
mode?: 'native' | 'daemon';
|
|
238
|
+
/** JSON-RPC socket path (for daemon mode) */
|
|
239
|
+
socketPath?: string;
|
|
240
|
+
/** Trust mode for new contacts */
|
|
241
|
+
trustMode?: 'tofu' | 'always' | 'manual';
|
|
242
|
+
/** DM access policy (default: "pairing") */
|
|
243
|
+
dmPolicy?: 'open' | 'allowlist' | 'pairing' | 'disabled';
|
|
244
|
+
/** Group access policy (default: "allowlist") */
|
|
245
|
+
groupPolicy?: 'open' | 'allowlist' | 'disabled';
|
|
246
|
+
/** Allowed phone numbers (E.164 format) */
|
|
247
|
+
allowedNumbers?: string[];
|
|
248
|
+
/** Enable read receipts (default: true) */
|
|
249
|
+
sendReadReceipts?: boolean;
|
|
250
|
+
/** Enable typing indicators (default: true) */
|
|
251
|
+
sendTypingIndicators?: boolean;
|
|
252
|
+
/** Max attachment size in MB (default: 100) */
|
|
253
|
+
maxAttachmentMb?: number;
|
|
254
|
+
/** Enable message deduplication (default: true) */
|
|
255
|
+
deduplicationEnabled?: boolean;
|
|
256
|
+
/** Response prefix for bot messages */
|
|
257
|
+
responsePrefix?: string;
|
|
258
|
+
/** Poll interval for receiving messages in ms (default: 1000) */
|
|
259
|
+
pollInterval?: number;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Mattermost-specific configuration
|
|
264
|
+
*/
|
|
265
|
+
export interface MattermostConfig extends ChannelConfig {
|
|
266
|
+
/** Mattermost server URL (e.g., https://mattermost.example.com) */
|
|
267
|
+
serverUrl: string;
|
|
268
|
+
/** Personal access token */
|
|
269
|
+
token: string;
|
|
270
|
+
/** Team ID to operate in (optional) */
|
|
271
|
+
teamId?: string;
|
|
272
|
+
/** Response prefix for bot messages */
|
|
273
|
+
responsePrefix?: string;
|
|
274
|
+
/** Enable message deduplication (default: true) */
|
|
275
|
+
deduplicationEnabled?: boolean;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Matrix-specific configuration
|
|
280
|
+
*/
|
|
281
|
+
export interface MatrixConfig extends ChannelConfig {
|
|
282
|
+
/** Matrix homeserver URL (e.g., https://matrix.org) */
|
|
283
|
+
homeserver: string;
|
|
284
|
+
/** User ID (e.g., @user:matrix.org) */
|
|
285
|
+
userId: string;
|
|
286
|
+
/** Access token */
|
|
287
|
+
accessToken: string;
|
|
288
|
+
/** Device ID (optional) */
|
|
289
|
+
deviceId?: string;
|
|
290
|
+
/** Room IDs to listen to (optional, listens to all joined rooms if not specified) */
|
|
291
|
+
roomIds?: string[];
|
|
292
|
+
/** Response prefix for bot messages */
|
|
293
|
+
responsePrefix?: string;
|
|
294
|
+
/** Send typing indicators (default: true) */
|
|
295
|
+
sendTypingIndicators?: boolean;
|
|
296
|
+
/** Send read receipts (default: true) */
|
|
297
|
+
sendReadReceipts?: boolean;
|
|
298
|
+
/** Enable message deduplication (default: true) */
|
|
299
|
+
deduplicationEnabled?: boolean;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Twitch-specific configuration
|
|
304
|
+
*/
|
|
305
|
+
export interface TwitchConfig extends ChannelConfig {
|
|
306
|
+
/** Twitch username (login name) */
|
|
307
|
+
username: string;
|
|
308
|
+
/** OAuth token (with oauth: prefix or without) */
|
|
309
|
+
oauthToken: string;
|
|
310
|
+
/** Channels to join (without # prefix) */
|
|
311
|
+
channels: string[];
|
|
312
|
+
/** Response prefix for bot messages */
|
|
313
|
+
responsePrefix?: string;
|
|
314
|
+
/** Enable message deduplication (default: true) */
|
|
315
|
+
deduplicationEnabled?: boolean;
|
|
316
|
+
/** Whether to respond to whispers (DMs) - default: false */
|
|
317
|
+
allowWhispers?: boolean;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* LINE-specific configuration
|
|
322
|
+
* Uses LINE Messaging API for communication
|
|
323
|
+
*/
|
|
324
|
+
export interface LineConfig extends ChannelConfig {
|
|
325
|
+
/** LINE Channel Access Token (long-lived) */
|
|
326
|
+
channelAccessToken: string;
|
|
327
|
+
/** LINE Channel Secret (for webhook signature verification) */
|
|
328
|
+
channelSecret: string;
|
|
329
|
+
/** Webhook port to listen on (default: 3100) */
|
|
330
|
+
webhookPort?: number;
|
|
331
|
+
/** Webhook path (default: /line/webhook) */
|
|
332
|
+
webhookPath?: string;
|
|
333
|
+
/** Response prefix for bot messages */
|
|
334
|
+
responsePrefix?: string;
|
|
335
|
+
/** Enable message deduplication (default: true) */
|
|
336
|
+
deduplicationEnabled?: boolean;
|
|
337
|
+
/** Whether to use reply tokens (faster) or push messages */
|
|
338
|
+
useReplyTokens?: boolean;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* BlueBubbles-specific configuration
|
|
343
|
+
* Uses BlueBubbles REST API for iMessage integration
|
|
344
|
+
*/
|
|
345
|
+
export interface BlueBubblesConfig extends ChannelConfig {
|
|
346
|
+
/** BlueBubbles server URL (e.g., http://192.168.1.100:1234) */
|
|
347
|
+
serverUrl: string;
|
|
348
|
+
/** BlueBubbles server password */
|
|
349
|
+
password: string;
|
|
350
|
+
/** Enable webhook notifications (default: true) */
|
|
351
|
+
enableWebhook?: boolean;
|
|
352
|
+
/** Webhook port to listen on (default: 3101) */
|
|
353
|
+
webhookPort?: number;
|
|
354
|
+
/** Webhook path (default: /bluebubbles/webhook) */
|
|
355
|
+
webhookPath?: string;
|
|
356
|
+
/** Poll interval in ms if webhooks not available (default: 5000) */
|
|
357
|
+
pollInterval?: number;
|
|
358
|
+
/** Response prefix for bot messages */
|
|
359
|
+
responsePrefix?: string;
|
|
360
|
+
/** Enable message deduplication (default: true) */
|
|
361
|
+
deduplicationEnabled?: boolean;
|
|
362
|
+
/** Allowed contacts (phone numbers or emails) */
|
|
363
|
+
allowedContacts?: string[];
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Email-specific configuration
|
|
368
|
+
* Uses IMAP for receiving and SMTP for sending
|
|
369
|
+
*/
|
|
370
|
+
export interface EmailConfig extends ChannelConfig {
|
|
371
|
+
/** IMAP server host */
|
|
372
|
+
imapHost: string;
|
|
373
|
+
/** IMAP server port (default: 993) */
|
|
374
|
+
imapPort?: number;
|
|
375
|
+
/** IMAP use SSL/TLS (default: true) */
|
|
376
|
+
imapSecure?: boolean;
|
|
377
|
+
/** SMTP server host */
|
|
378
|
+
smtpHost: string;
|
|
379
|
+
/** SMTP server port (default: 587) */
|
|
380
|
+
smtpPort?: number;
|
|
381
|
+
/** SMTP use SSL/TLS (default: false for STARTTLS) */
|
|
382
|
+
smtpSecure?: boolean;
|
|
383
|
+
/** Email address (used for both IMAP and SMTP) */
|
|
384
|
+
email: string;
|
|
385
|
+
/** Password or app password */
|
|
386
|
+
password: string;
|
|
387
|
+
/** Display name for outgoing emails */
|
|
388
|
+
displayName?: string;
|
|
389
|
+
/** IMAP mailbox to monitor (default: INBOX) */
|
|
390
|
+
mailbox?: string;
|
|
391
|
+
/** Poll interval in ms for IMAP IDLE fallback (default: 30000) */
|
|
392
|
+
pollInterval?: number;
|
|
393
|
+
/** Mark emails as read after processing (default: true) */
|
|
394
|
+
markAsRead?: boolean;
|
|
395
|
+
/** Response prefix for bot replies */
|
|
396
|
+
responsePrefix?: string;
|
|
397
|
+
/** Enable message deduplication (default: true) */
|
|
398
|
+
deduplicationEnabled?: boolean;
|
|
399
|
+
/** Allowed sender addresses (empty = allow all) */
|
|
400
|
+
allowedSenders?: string[];
|
|
401
|
+
/** Subject prefix filter (only process emails with this prefix) */
|
|
402
|
+
subjectFilter?: string;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Microsoft Teams-specific configuration
|
|
407
|
+
*/
|
|
408
|
+
export interface TeamsConfig extends ChannelConfig {
|
|
409
|
+
/** Microsoft App ID from Azure Bot registration */
|
|
410
|
+
appId: string;
|
|
411
|
+
/** Microsoft App Password (Client Secret) from Azure Bot registration */
|
|
412
|
+
appPassword: string;
|
|
413
|
+
/** Tenant ID for single-tenant apps (optional, uses multi-tenant if not set) */
|
|
414
|
+
tenantId?: string;
|
|
415
|
+
/** Bot display name */
|
|
416
|
+
displayName?: string;
|
|
417
|
+
/** Webhook endpoint port (default: 3978) */
|
|
418
|
+
webhookPort?: number;
|
|
419
|
+
/** Response prefix for bot replies */
|
|
420
|
+
responsePrefix?: string;
|
|
421
|
+
/** Enable message deduplication (default: true) */
|
|
422
|
+
deduplicationEnabled?: boolean;
|
|
423
|
+
/** Auto-reconnect on connection failure (default: true) */
|
|
424
|
+
autoReconnect?: boolean;
|
|
425
|
+
/** Maximum reconnection attempts (default: 5) */
|
|
426
|
+
maxReconnectAttempts?: number;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Google Chat-specific configuration
|
|
431
|
+
* Uses Google Chat API with service account authentication
|
|
432
|
+
*/
|
|
433
|
+
export interface GoogleChatConfig extends ChannelConfig {
|
|
434
|
+
/** Path to service account JSON key file */
|
|
435
|
+
serviceAccountKeyPath?: string;
|
|
436
|
+
/** Service account credentials JSON (alternative to keyPath) */
|
|
437
|
+
serviceAccountKey?: {
|
|
438
|
+
client_email: string;
|
|
439
|
+
private_key: string;
|
|
440
|
+
project_id: string;
|
|
441
|
+
};
|
|
442
|
+
/** Google Cloud project ID */
|
|
443
|
+
projectId?: string;
|
|
444
|
+
/** Webhook port to listen on (default: 3979) */
|
|
445
|
+
webhookPort?: number;
|
|
446
|
+
/** Webhook path (default: /googlechat/webhook) */
|
|
447
|
+
webhookPath?: string;
|
|
448
|
+
/** Bot display name */
|
|
449
|
+
displayName?: string;
|
|
450
|
+
/** Response prefix for bot replies */
|
|
451
|
+
responsePrefix?: string;
|
|
452
|
+
/** Enable message deduplication (default: true) */
|
|
453
|
+
deduplicationEnabled?: boolean;
|
|
454
|
+
/** Auto-reconnect on connection failure (default: true) */
|
|
455
|
+
autoReconnect?: boolean;
|
|
456
|
+
/** Maximum reconnection attempts (default: 5) */
|
|
457
|
+
maxReconnectAttempts?: number;
|
|
458
|
+
/** Pub/Sub subscription name (alternative to webhook) */
|
|
459
|
+
pubsubSubscription?: string;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Channel adapter interface
|
|
464
|
+
* All channel implementations must implement this interface
|
|
465
|
+
*/
|
|
466
|
+
export interface ChannelAdapter {
|
|
467
|
+
/** Channel type identifier */
|
|
468
|
+
readonly type: ChannelType;
|
|
469
|
+
|
|
470
|
+
/** Current connection status */
|
|
471
|
+
readonly status: ChannelStatus;
|
|
472
|
+
|
|
473
|
+
/** Bot/app username on the channel */
|
|
474
|
+
readonly botUsername?: string;
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Connect to the channel
|
|
478
|
+
* @throws Error if connection fails
|
|
479
|
+
*/
|
|
480
|
+
connect(): Promise<void>;
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Disconnect from the channel
|
|
484
|
+
*/
|
|
485
|
+
disconnect(): Promise<void>;
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Send a message to a chat
|
|
489
|
+
* @param message The message to send
|
|
490
|
+
* @returns The sent message ID
|
|
491
|
+
*/
|
|
492
|
+
sendMessage(message: OutgoingMessage): Promise<string>;
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Edit an existing message
|
|
496
|
+
* @param chatId Chat ID
|
|
497
|
+
* @param messageId Message ID to edit
|
|
498
|
+
* @param text New text content
|
|
499
|
+
*/
|
|
500
|
+
editMessage?(chatId: string, messageId: string, text: string): Promise<void>;
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Delete a message
|
|
504
|
+
* @param chatId Chat ID
|
|
505
|
+
* @param messageId Message ID to delete
|
|
506
|
+
*/
|
|
507
|
+
deleteMessage?(chatId: string, messageId: string): Promise<void>;
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* Send a document/file to a chat
|
|
511
|
+
* @param chatId Chat ID
|
|
512
|
+
* @param filePath Path to the file to send
|
|
513
|
+
* @param caption Optional caption for the file
|
|
514
|
+
* @returns The sent message ID
|
|
515
|
+
*/
|
|
516
|
+
sendDocument?(chatId: string, filePath: string, caption?: string): Promise<string>;
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Send a photo/image to a chat
|
|
520
|
+
* @param chatId Chat ID
|
|
521
|
+
* @param filePath Path to the image file to send
|
|
522
|
+
* @param caption Optional caption for the image
|
|
523
|
+
* @returns The sent message ID
|
|
524
|
+
*/
|
|
525
|
+
sendPhoto?(chatId: string, filePath: string, caption?: string): Promise<string>;
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* Register a message handler
|
|
529
|
+
* @param handler Function to call when a message is received
|
|
530
|
+
*/
|
|
531
|
+
onMessage(handler: MessageHandler): void;
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* Register a callback query handler (for inline keyboard buttons)
|
|
535
|
+
* @param handler Function to call when a button is pressed
|
|
536
|
+
*/
|
|
537
|
+
onCallbackQuery?(handler: CallbackQueryHandler): void;
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* Answer a callback query (acknowledge button press)
|
|
541
|
+
* @param queryId Callback query ID
|
|
542
|
+
* @param text Optional notification text
|
|
543
|
+
* @param showAlert Show as alert instead of toast
|
|
544
|
+
*/
|
|
545
|
+
answerCallbackQuery?(queryId: string, text?: string, showAlert?: boolean): Promise<void>;
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Edit message with inline keyboard
|
|
549
|
+
* @param chatId Chat ID
|
|
550
|
+
* @param messageId Message ID
|
|
551
|
+
* @param text New text (optional)
|
|
552
|
+
* @param inlineKeyboard New keyboard (optional)
|
|
553
|
+
*/
|
|
554
|
+
editMessageWithKeyboard?(
|
|
555
|
+
chatId: string,
|
|
556
|
+
messageId: string,
|
|
557
|
+
text?: string,
|
|
558
|
+
inlineKeyboard?: InlineKeyboardButton[][]
|
|
559
|
+
): Promise<void>;
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* Register an error handler
|
|
563
|
+
* @param handler Function to call when an error occurs
|
|
564
|
+
*/
|
|
565
|
+
onError(handler: ErrorHandler): void;
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
* Register a status change handler
|
|
569
|
+
* @param handler Function to call when status changes
|
|
570
|
+
*/
|
|
571
|
+
onStatusChange(handler: StatusHandler): void;
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* Get channel-specific info (bot info, etc.)
|
|
575
|
+
*/
|
|
576
|
+
getInfo(): Promise<ChannelInfo>;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* Message handler callback
|
|
581
|
+
*/
|
|
582
|
+
export type MessageHandler = (message: IncomingMessage) => void | Promise<void>;
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Error handler callback
|
|
586
|
+
*/
|
|
587
|
+
export type ErrorHandler = (error: Error, context?: string) => void;
|
|
588
|
+
|
|
589
|
+
/**
|
|
590
|
+
* Status change handler callback
|
|
591
|
+
*/
|
|
592
|
+
export type StatusHandler = (status: ChannelStatus, error?: Error) => void;
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* Channel information
|
|
596
|
+
*/
|
|
597
|
+
export interface ChannelInfo {
|
|
598
|
+
type: ChannelType;
|
|
599
|
+
status: ChannelStatus;
|
|
600
|
+
botId?: string;
|
|
601
|
+
botUsername?: string;
|
|
602
|
+
botDisplayName?: string;
|
|
603
|
+
/** Additional channel-specific info */
|
|
604
|
+
extra?: Record<string, unknown>;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
/**
|
|
608
|
+
* Channel user - represents a user on a specific channel
|
|
609
|
+
*/
|
|
610
|
+
export interface ChannelUser {
|
|
611
|
+
/** Internal user ID */
|
|
612
|
+
id: string;
|
|
613
|
+
/** Channel type */
|
|
614
|
+
channel: ChannelType;
|
|
615
|
+
/** User ID on the channel */
|
|
616
|
+
channelUserId: string;
|
|
617
|
+
/** User display name */
|
|
618
|
+
displayName: string;
|
|
619
|
+
/** Username (if available) */
|
|
620
|
+
username?: string;
|
|
621
|
+
/** Whether this user is allowed to interact */
|
|
622
|
+
allowed: boolean;
|
|
623
|
+
/** Pairing code (if pending) */
|
|
624
|
+
pairingCode?: string;
|
|
625
|
+
/** When the user was first seen */
|
|
626
|
+
createdAt: Date;
|
|
627
|
+
/** Last interaction time */
|
|
628
|
+
lastSeenAt: Date;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* Channel session - links a channel chat to a CoWork task
|
|
633
|
+
*/
|
|
634
|
+
export interface ChannelSession {
|
|
635
|
+
/** Session ID */
|
|
636
|
+
id: string;
|
|
637
|
+
/** Channel type */
|
|
638
|
+
channel: ChannelType;
|
|
639
|
+
/** Chat ID on the channel */
|
|
640
|
+
chatId: string;
|
|
641
|
+
/** Associated CoWork task ID (if any) */
|
|
642
|
+
taskId?: string;
|
|
643
|
+
/** Associated workspace ID */
|
|
644
|
+
workspaceId?: string;
|
|
645
|
+
/** Session state */
|
|
646
|
+
state: 'idle' | 'active' | 'waiting_approval';
|
|
647
|
+
/** Session context/memory */
|
|
648
|
+
context?: Record<string, unknown>;
|
|
649
|
+
/** Created timestamp */
|
|
650
|
+
createdAt: Date;
|
|
651
|
+
/** Last activity timestamp */
|
|
652
|
+
lastActivityAt: Date;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/**
|
|
656
|
+
* Security configuration for channel access
|
|
657
|
+
*/
|
|
658
|
+
export interface SecurityConfig {
|
|
659
|
+
/** Access mode */
|
|
660
|
+
mode: 'open' | 'allowlist' | 'pairing';
|
|
661
|
+
/** Allowed user IDs (for allowlist mode) */
|
|
662
|
+
allowedUsers?: string[];
|
|
663
|
+
/** Pairing code TTL in seconds (for pairing mode) */
|
|
664
|
+
pairingCodeTTL?: number;
|
|
665
|
+
/** Maximum pairing attempts */
|
|
666
|
+
maxPairingAttempts?: number;
|
|
667
|
+
/** Rate limit: messages per minute */
|
|
668
|
+
rateLimitPerMinute?: number;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
/**
|
|
672
|
+
* Gateway event types
|
|
673
|
+
*/
|
|
674
|
+
export type GatewayEventType =
|
|
675
|
+
| 'channel:connected'
|
|
676
|
+
| 'channel:disconnected'
|
|
677
|
+
| 'channel:error'
|
|
678
|
+
| 'message:received'
|
|
679
|
+
| 'message:sent'
|
|
680
|
+
| 'user:paired'
|
|
681
|
+
| 'user:blocked'
|
|
682
|
+
| 'session:created'
|
|
683
|
+
| 'session:ended';
|
|
684
|
+
|
|
685
|
+
/**
|
|
686
|
+
* Gateway event
|
|
687
|
+
*/
|
|
688
|
+
export interface GatewayEvent {
|
|
689
|
+
type: GatewayEventType;
|
|
690
|
+
channel?: ChannelType;
|
|
691
|
+
timestamp: Date;
|
|
692
|
+
data?: Record<string, unknown>;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
/**
|
|
696
|
+
* Gateway event handler
|
|
697
|
+
*/
|
|
698
|
+
export type GatewayEventHandler = (event: GatewayEvent) => void;
|
|
699
|
+
|
|
700
|
+
// ============================================================================
|
|
701
|
+
// Extended Features Types
|
|
702
|
+
// ============================================================================
|
|
703
|
+
|
|
704
|
+
/**
|
|
705
|
+
* Reply keyboard button (persistent keyboard below input)
|
|
706
|
+
*/
|
|
707
|
+
export interface ReplyKeyboardButton {
|
|
708
|
+
/** Button text */
|
|
709
|
+
text: string;
|
|
710
|
+
/** Request contact (Telegram) */
|
|
711
|
+
requestContact?: boolean;
|
|
712
|
+
/** Request location (Telegram) */
|
|
713
|
+
requestLocation?: boolean;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
/**
|
|
717
|
+
* Reply keyboard configuration
|
|
718
|
+
*/
|
|
719
|
+
export interface ReplyKeyboard {
|
|
720
|
+
/** Rows of buttons */
|
|
721
|
+
buttons: ReplyKeyboardButton[][];
|
|
722
|
+
/** Resize keyboard to fit buttons */
|
|
723
|
+
resizeKeyboard?: boolean;
|
|
724
|
+
/** Hide after use */
|
|
725
|
+
oneTimeKeyboard?: boolean;
|
|
726
|
+
/** Placeholder text in input */
|
|
727
|
+
inputPlaceholder?: string;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
/**
|
|
731
|
+
* Select menu option (Discord)
|
|
732
|
+
*/
|
|
733
|
+
export interface SelectMenuOption {
|
|
734
|
+
/** Display label */
|
|
735
|
+
label: string;
|
|
736
|
+
/** Value sent on selection */
|
|
737
|
+
value: string;
|
|
738
|
+
/** Description shown below label */
|
|
739
|
+
description?: string;
|
|
740
|
+
/** Emoji to display */
|
|
741
|
+
emoji?: string;
|
|
742
|
+
/** Whether this is selected by default */
|
|
743
|
+
default?: boolean;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
/**
|
|
747
|
+
* Select menu configuration (Discord)
|
|
748
|
+
*/
|
|
749
|
+
export interface SelectMenu {
|
|
750
|
+
/** Custom ID for handling */
|
|
751
|
+
customId: string;
|
|
752
|
+
/** Placeholder text */
|
|
753
|
+
placeholder?: string;
|
|
754
|
+
/** Menu options */
|
|
755
|
+
options: SelectMenuOption[];
|
|
756
|
+
/** Minimum selections */
|
|
757
|
+
minValues?: number;
|
|
758
|
+
/** Maximum selections */
|
|
759
|
+
maxValues?: number;
|
|
760
|
+
/** Whether menu is disabled */
|
|
761
|
+
disabled?: boolean;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
/**
|
|
765
|
+
* Poll option
|
|
766
|
+
*/
|
|
767
|
+
export interface PollOption {
|
|
768
|
+
/** Option text */
|
|
769
|
+
text: string;
|
|
770
|
+
/** Vote count (when reading results) */
|
|
771
|
+
voterCount?: number;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* Poll configuration
|
|
776
|
+
*/
|
|
777
|
+
export interface Poll {
|
|
778
|
+
/** Poll question */
|
|
779
|
+
question: string;
|
|
780
|
+
/** Poll options */
|
|
781
|
+
options: PollOption[];
|
|
782
|
+
/** Allow multiple answers */
|
|
783
|
+
allowsMultipleAnswers?: boolean;
|
|
784
|
+
/** Anonymous voting */
|
|
785
|
+
isAnonymous?: boolean;
|
|
786
|
+
/** Poll type: quiz has correct answer */
|
|
787
|
+
type?: 'regular' | 'quiz';
|
|
788
|
+
/** Correct option index (for quiz) */
|
|
789
|
+
correctOptionId?: number;
|
|
790
|
+
/** Explanation shown after answering (quiz) */
|
|
791
|
+
explanation?: string;
|
|
792
|
+
/** Auto-close after seconds */
|
|
793
|
+
openPeriod?: number;
|
|
794
|
+
/** Close at specific time */
|
|
795
|
+
closeDate?: Date;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
/**
|
|
799
|
+
* Reaction on a message
|
|
800
|
+
*/
|
|
801
|
+
export interface MessageReaction {
|
|
802
|
+
/** Emoji or custom emoji ID */
|
|
803
|
+
emoji: string;
|
|
804
|
+
/** Whether it's a custom emoji */
|
|
805
|
+
isCustom?: boolean;
|
|
806
|
+
/** Count of this reaction */
|
|
807
|
+
count?: number;
|
|
808
|
+
/** Whether bot reacted with this */
|
|
809
|
+
isOwnReaction?: boolean;
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
/**
|
|
813
|
+
* Scheduled message
|
|
814
|
+
*/
|
|
815
|
+
export interface ScheduledMessage {
|
|
816
|
+
/** Unique ID */
|
|
817
|
+
id: string;
|
|
818
|
+
/** Target channel */
|
|
819
|
+
channel: ChannelType;
|
|
820
|
+
/** Target chat ID */
|
|
821
|
+
chatId: string;
|
|
822
|
+
/** Message to send */
|
|
823
|
+
message: OutgoingMessage;
|
|
824
|
+
/** When to send */
|
|
825
|
+
scheduledAt: Date;
|
|
826
|
+
/** Status */
|
|
827
|
+
status: 'pending' | 'sent' | 'failed' | 'cancelled';
|
|
828
|
+
/** Error if failed */
|
|
829
|
+
error?: string;
|
|
830
|
+
/** Created timestamp */
|
|
831
|
+
createdAt: Date;
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
/**
|
|
835
|
+
* Message delivery status
|
|
836
|
+
*/
|
|
837
|
+
export interface MessageDelivery {
|
|
838
|
+
/** Message ID */
|
|
839
|
+
messageId: string;
|
|
840
|
+
/** Channel type */
|
|
841
|
+
channel: ChannelType;
|
|
842
|
+
/** Chat ID */
|
|
843
|
+
chatId: string;
|
|
844
|
+
/** Delivery status */
|
|
845
|
+
status: 'pending' | 'sent' | 'delivered' | 'read' | 'failed';
|
|
846
|
+
/** Sent timestamp */
|
|
847
|
+
sentAt?: Date;
|
|
848
|
+
/** Delivered timestamp */
|
|
849
|
+
deliveredAt?: Date;
|
|
850
|
+
/** Read timestamp */
|
|
851
|
+
readAt?: Date;
|
|
852
|
+
/** Error if failed */
|
|
853
|
+
error?: string;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
/**
|
|
857
|
+
* Audit log entry
|
|
858
|
+
*/
|
|
859
|
+
export interface AuditLogEntry {
|
|
860
|
+
/** Entry ID */
|
|
861
|
+
id: string;
|
|
862
|
+
/** Timestamp */
|
|
863
|
+
timestamp: Date;
|
|
864
|
+
/** Action type */
|
|
865
|
+
action: string;
|
|
866
|
+
/** Channel */
|
|
867
|
+
channel?: ChannelType;
|
|
868
|
+
/** User ID */
|
|
869
|
+
userId?: string;
|
|
870
|
+
/** Chat ID */
|
|
871
|
+
chatId?: string;
|
|
872
|
+
/** Additional details */
|
|
873
|
+
details?: Record<string, unknown>;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
/**
|
|
877
|
+
* User rate limit info
|
|
878
|
+
*/
|
|
879
|
+
export interface UserRateLimit {
|
|
880
|
+
/** User ID */
|
|
881
|
+
userId: string;
|
|
882
|
+
/** Channel type */
|
|
883
|
+
channel: ChannelType;
|
|
884
|
+
/** Message count in current window */
|
|
885
|
+
messageCount: number;
|
|
886
|
+
/** Window start time */
|
|
887
|
+
windowStart: Date;
|
|
888
|
+
/** Whether currently limited */
|
|
889
|
+
isLimited: boolean;
|
|
890
|
+
/** When limit expires */
|
|
891
|
+
limitExpiresAt?: Date;
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
/**
|
|
895
|
+
* Broadcast configuration
|
|
896
|
+
*/
|
|
897
|
+
export interface BroadcastConfig {
|
|
898
|
+
/** Target chat IDs */
|
|
899
|
+
chatIds: string[];
|
|
900
|
+
/** Channel type */
|
|
901
|
+
channel: ChannelType;
|
|
902
|
+
/** Message to broadcast */
|
|
903
|
+
message: OutgoingMessage;
|
|
904
|
+
/** Delay between sends (ms) */
|
|
905
|
+
delayBetweenSends?: number;
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
/**
|
|
909
|
+
* Broadcast result
|
|
910
|
+
*/
|
|
911
|
+
export interface BroadcastResult {
|
|
912
|
+
/** Total recipients */
|
|
913
|
+
total: number;
|
|
914
|
+
/** Successfully sent */
|
|
915
|
+
sent: number;
|
|
916
|
+
/** Failed sends */
|
|
917
|
+
failed: number;
|
|
918
|
+
/** Details per chat */
|
|
919
|
+
results: Array<{
|
|
920
|
+
chatId: string;
|
|
921
|
+
success: boolean;
|
|
922
|
+
messageId?: string;
|
|
923
|
+
error?: string;
|
|
924
|
+
}>;
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
/**
|
|
928
|
+
* Extended channel adapter interface with all features
|
|
929
|
+
*/
|
|
930
|
+
export interface ExtendedChannelAdapter extends ChannelAdapter {
|
|
931
|
+
/**
|
|
932
|
+
* Send typing indicator
|
|
933
|
+
* @param chatId Chat ID
|
|
934
|
+
* @param threadId Optional thread ID
|
|
935
|
+
*/
|
|
936
|
+
sendTyping?(chatId: string, threadId?: string): Promise<void>;
|
|
937
|
+
|
|
938
|
+
/**
|
|
939
|
+
* Add reaction to a message
|
|
940
|
+
* @param chatId Chat ID
|
|
941
|
+
* @param messageId Message ID
|
|
942
|
+
* @param emoji Emoji to react with
|
|
943
|
+
*/
|
|
944
|
+
addReaction?(chatId: string, messageId: string, emoji: string): Promise<void>;
|
|
945
|
+
|
|
946
|
+
/**
|
|
947
|
+
* Remove reaction from a message
|
|
948
|
+
* @param chatId Chat ID
|
|
949
|
+
* @param messageId Message ID
|
|
950
|
+
* @param emoji Emoji to remove
|
|
951
|
+
*/
|
|
952
|
+
removeReaction?(chatId: string, messageId: string, emoji: string): Promise<void>;
|
|
953
|
+
|
|
954
|
+
/**
|
|
955
|
+
* Send a poll
|
|
956
|
+
* @param chatId Chat ID
|
|
957
|
+
* @param poll Poll configuration
|
|
958
|
+
* @returns Message ID
|
|
959
|
+
*/
|
|
960
|
+
sendPoll?(chatId: string, poll: Poll): Promise<string>;
|
|
961
|
+
|
|
962
|
+
/**
|
|
963
|
+
* Send a message with reply keyboard
|
|
964
|
+
* @param chatId Chat ID
|
|
965
|
+
* @param text Message text
|
|
966
|
+
* @param keyboard Reply keyboard
|
|
967
|
+
* @returns Message ID
|
|
968
|
+
*/
|
|
969
|
+
sendWithReplyKeyboard?(chatId: string, text: string, keyboard: ReplyKeyboard): Promise<string>;
|
|
970
|
+
|
|
971
|
+
/**
|
|
972
|
+
* Remove reply keyboard
|
|
973
|
+
* @param chatId Chat ID
|
|
974
|
+
* @param text Message text
|
|
975
|
+
*/
|
|
976
|
+
removeReplyKeyboard?(chatId: string, text: string): Promise<string>;
|
|
977
|
+
|
|
978
|
+
/**
|
|
979
|
+
* Send a message with select menu (Discord)
|
|
980
|
+
* @param chatId Chat ID
|
|
981
|
+
* @param text Message text
|
|
982
|
+
* @param menu Select menu configuration
|
|
983
|
+
*/
|
|
984
|
+
sendWithSelectMenu?(chatId: string, text: string, menu: SelectMenu): Promise<string>;
|
|
985
|
+
|
|
986
|
+
/**
|
|
987
|
+
* Register select menu handler (Discord)
|
|
988
|
+
*/
|
|
989
|
+
onSelectMenu?(handler: SelectMenuHandler): void;
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
/**
|
|
993
|
+
* Select menu interaction handler
|
|
994
|
+
*/
|
|
995
|
+
export type SelectMenuHandler = (
|
|
996
|
+
customId: string,
|
|
997
|
+
values: string[],
|
|
998
|
+
userId: string,
|
|
999
|
+
chatId: string,
|
|
1000
|
+
messageId: string,
|
|
1001
|
+
raw: unknown
|
|
1002
|
+
) => void | Promise<void>;
|