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,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskSubscriptionRepository = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
/**
|
|
6
|
+
* Repository for managing task subscriptions
|
|
7
|
+
* Agents subscribed to a task receive notifications when new activities occur
|
|
8
|
+
*/
|
|
9
|
+
class TaskSubscriptionRepository {
|
|
10
|
+
constructor(db) {
|
|
11
|
+
this.db = db;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Subscribe an agent to a task
|
|
15
|
+
* If already subscribed, returns existing subscription
|
|
16
|
+
*/
|
|
17
|
+
subscribe(taskId, agentRoleId, reason) {
|
|
18
|
+
// Check if already subscribed
|
|
19
|
+
const existing = this.findByTaskAndAgent(taskId, agentRoleId);
|
|
20
|
+
if (existing) {
|
|
21
|
+
return existing;
|
|
22
|
+
}
|
|
23
|
+
const now = Date.now();
|
|
24
|
+
const subscription = {
|
|
25
|
+
id: (0, uuid_1.v4)(),
|
|
26
|
+
taskId,
|
|
27
|
+
agentRoleId,
|
|
28
|
+
subscriptionReason: reason,
|
|
29
|
+
subscribedAt: now,
|
|
30
|
+
};
|
|
31
|
+
const stmt = this.db.prepare(`
|
|
32
|
+
INSERT INTO task_subscriptions (
|
|
33
|
+
id, task_id, agent_role_id, subscription_reason, subscribed_at
|
|
34
|
+
) VALUES (?, ?, ?, ?, ?)
|
|
35
|
+
`);
|
|
36
|
+
stmt.run(subscription.id, subscription.taskId, subscription.agentRoleId, subscription.subscriptionReason, subscription.subscribedAt);
|
|
37
|
+
return subscription;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Auto-subscribe an agent to a task (convenience method)
|
|
41
|
+
* Used when agent comments, gets mentioned, or gets assigned
|
|
42
|
+
*/
|
|
43
|
+
autoSubscribe(taskId, agentRoleId, reason) {
|
|
44
|
+
return this.subscribe(taskId, agentRoleId, reason);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Unsubscribe an agent from a task
|
|
48
|
+
*/
|
|
49
|
+
unsubscribe(taskId, agentRoleId) {
|
|
50
|
+
const stmt = this.db.prepare('DELETE FROM task_subscriptions WHERE task_id = ? AND agent_role_id = ?');
|
|
51
|
+
const result = stmt.run(taskId, agentRoleId);
|
|
52
|
+
return result.changes > 0;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Find a subscription by task and agent
|
|
56
|
+
*/
|
|
57
|
+
findByTaskAndAgent(taskId, agentRoleId) {
|
|
58
|
+
const stmt = this.db.prepare('SELECT * FROM task_subscriptions WHERE task_id = ? AND agent_role_id = ?');
|
|
59
|
+
const row = stmt.get(taskId, agentRoleId);
|
|
60
|
+
return row ? this.mapRowToSubscription(row) : undefined;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Find a subscription by ID
|
|
64
|
+
*/
|
|
65
|
+
findById(id) {
|
|
66
|
+
const stmt = this.db.prepare('SELECT * FROM task_subscriptions WHERE id = ?');
|
|
67
|
+
const row = stmt.get(id);
|
|
68
|
+
return row ? this.mapRowToSubscription(row) : undefined;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get all subscribers for a task
|
|
72
|
+
*/
|
|
73
|
+
getSubscribers(taskId) {
|
|
74
|
+
const stmt = this.db.prepare('SELECT * FROM task_subscriptions WHERE task_id = ? ORDER BY subscribed_at ASC');
|
|
75
|
+
const rows = stmt.all(taskId);
|
|
76
|
+
return rows.map((row) => this.mapRowToSubscription(row));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get subscriber count for a task
|
|
80
|
+
*/
|
|
81
|
+
getSubscriberCount(taskId) {
|
|
82
|
+
const stmt = this.db.prepare('SELECT COUNT(*) as count FROM task_subscriptions WHERE task_id = ?');
|
|
83
|
+
const result = stmt.get(taskId);
|
|
84
|
+
return result.count;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get all subscriptions for an agent
|
|
88
|
+
*/
|
|
89
|
+
getSubscriptionsForAgent(agentRoleId) {
|
|
90
|
+
const stmt = this.db.prepare('SELECT * FROM task_subscriptions WHERE agent_role_id = ? ORDER BY subscribed_at DESC');
|
|
91
|
+
const rows = stmt.all(agentRoleId);
|
|
92
|
+
return rows.map((row) => this.mapRowToSubscription(row));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* List subscriptions with optional filtering
|
|
96
|
+
*/
|
|
97
|
+
list(query) {
|
|
98
|
+
const conditions = [];
|
|
99
|
+
const params = [];
|
|
100
|
+
if (query.taskId) {
|
|
101
|
+
conditions.push('task_id = ?');
|
|
102
|
+
params.push(query.taskId);
|
|
103
|
+
}
|
|
104
|
+
if (query.agentRoleId) {
|
|
105
|
+
conditions.push('agent_role_id = ?');
|
|
106
|
+
params.push(query.agentRoleId);
|
|
107
|
+
}
|
|
108
|
+
let sql = 'SELECT * FROM task_subscriptions';
|
|
109
|
+
if (conditions.length > 0) {
|
|
110
|
+
sql += ` WHERE ${conditions.join(' AND ')}`;
|
|
111
|
+
}
|
|
112
|
+
sql += ' ORDER BY subscribed_at DESC';
|
|
113
|
+
if (query.limit) {
|
|
114
|
+
sql += ` LIMIT ${query.limit}`;
|
|
115
|
+
if (query.offset) {
|
|
116
|
+
sql += ` OFFSET ${query.offset}`;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const stmt = this.db.prepare(sql);
|
|
120
|
+
const rows = stmt.all(...params);
|
|
121
|
+
return rows.map((row) => this.mapRowToSubscription(row));
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Delete all subscriptions for a task
|
|
125
|
+
*/
|
|
126
|
+
deleteByTask(taskId) {
|
|
127
|
+
const stmt = this.db.prepare('DELETE FROM task_subscriptions WHERE task_id = ?');
|
|
128
|
+
const result = stmt.run(taskId);
|
|
129
|
+
return result.changes;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Delete all subscriptions for an agent
|
|
133
|
+
*/
|
|
134
|
+
deleteByAgent(agentRoleId) {
|
|
135
|
+
const stmt = this.db.prepare('DELETE FROM task_subscriptions WHERE agent_role_id = ?');
|
|
136
|
+
const result = stmt.run(agentRoleId);
|
|
137
|
+
return result.changes;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Check if an agent is subscribed to a task
|
|
141
|
+
*/
|
|
142
|
+
isSubscribed(taskId, agentRoleId) {
|
|
143
|
+
const stmt = this.db.prepare('SELECT 1 FROM task_subscriptions WHERE task_id = ? AND agent_role_id = ? LIMIT 1');
|
|
144
|
+
const result = stmt.get(taskId, agentRoleId);
|
|
145
|
+
return !!result;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get agent role IDs subscribed to a task (for efficient notification)
|
|
149
|
+
*/
|
|
150
|
+
getSubscriberIds(taskId) {
|
|
151
|
+
const stmt = this.db.prepare('SELECT agent_role_id FROM task_subscriptions WHERE task_id = ?');
|
|
152
|
+
const rows = stmt.all(taskId);
|
|
153
|
+
return rows.map((row) => row.agent_role_id);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Map database row to TaskSubscription object
|
|
157
|
+
*/
|
|
158
|
+
mapRowToSubscription(row) {
|
|
159
|
+
return {
|
|
160
|
+
id: row.id,
|
|
161
|
+
taskId: row.task_id,
|
|
162
|
+
agentRoleId: row.agent_role_id,
|
|
163
|
+
subscriptionReason: row.subscription_reason,
|
|
164
|
+
subscribedAt: row.subscribed_at,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.TaskSubscriptionRepository = TaskSubscriptionRepository;
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorkingStateRepository = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
/**
|
|
6
|
+
* Repository for managing agent working state in the database
|
|
7
|
+
*/
|
|
8
|
+
class WorkingStateRepository {
|
|
9
|
+
constructor(db) {
|
|
10
|
+
this.db = db;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get a working state by ID
|
|
14
|
+
*/
|
|
15
|
+
findById(id) {
|
|
16
|
+
const stmt = this.db.prepare('SELECT * FROM agent_working_state WHERE id = ?');
|
|
17
|
+
const row = stmt.get(id);
|
|
18
|
+
return row ? this.mapRowToState(row) : undefined;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get the current working state for an agent in a workspace
|
|
22
|
+
*/
|
|
23
|
+
getCurrent(query) {
|
|
24
|
+
let sql = `
|
|
25
|
+
SELECT * FROM agent_working_state
|
|
26
|
+
WHERE agent_role_id = ?
|
|
27
|
+
AND workspace_id = ?
|
|
28
|
+
AND is_current = 1
|
|
29
|
+
`;
|
|
30
|
+
const params = [query.agentRoleId, query.workspaceId];
|
|
31
|
+
if (query.taskId) {
|
|
32
|
+
sql += ' AND task_id = ?';
|
|
33
|
+
params.push(query.taskId);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
sql += ' AND task_id IS NULL';
|
|
37
|
+
}
|
|
38
|
+
if (query.stateType) {
|
|
39
|
+
sql += ' AND state_type = ?';
|
|
40
|
+
params.push(query.stateType);
|
|
41
|
+
}
|
|
42
|
+
sql += ' ORDER BY updated_at DESC LIMIT 1';
|
|
43
|
+
const stmt = this.db.prepare(sql);
|
|
44
|
+
const row = stmt.get(...params);
|
|
45
|
+
return row ? this.mapRowToState(row) : undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get all current working states for an agent in a workspace
|
|
49
|
+
*/
|
|
50
|
+
getAllCurrent(agentRoleId, workspaceId) {
|
|
51
|
+
const stmt = this.db.prepare(`
|
|
52
|
+
SELECT * FROM agent_working_state
|
|
53
|
+
WHERE agent_role_id = ? AND workspace_id = ? AND is_current = 1
|
|
54
|
+
ORDER BY state_type, updated_at DESC
|
|
55
|
+
`);
|
|
56
|
+
const rows = stmt.all(agentRoleId, workspaceId);
|
|
57
|
+
return rows.map((row) => this.mapRowToState(row));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Update or create a working state
|
|
61
|
+
*/
|
|
62
|
+
update(request) {
|
|
63
|
+
const now = Date.now();
|
|
64
|
+
// Mark existing current states as not current
|
|
65
|
+
const updateStmt = this.db.prepare(`
|
|
66
|
+
UPDATE agent_working_state
|
|
67
|
+
SET is_current = 0, updated_at = ?
|
|
68
|
+
WHERE agent_role_id = ?
|
|
69
|
+
AND workspace_id = ?
|
|
70
|
+
AND state_type = ?
|
|
71
|
+
AND is_current = 1
|
|
72
|
+
${request.taskId ? 'AND task_id = ?' : 'AND task_id IS NULL'}
|
|
73
|
+
`);
|
|
74
|
+
const updateParams = [now, request.agentRoleId, request.workspaceId, request.stateType];
|
|
75
|
+
if (request.taskId) {
|
|
76
|
+
updateParams.push(request.taskId);
|
|
77
|
+
}
|
|
78
|
+
updateStmt.run(...updateParams);
|
|
79
|
+
// Create new state
|
|
80
|
+
const state = {
|
|
81
|
+
id: (0, uuid_1.v4)(),
|
|
82
|
+
agentRoleId: request.agentRoleId,
|
|
83
|
+
workspaceId: request.workspaceId,
|
|
84
|
+
taskId: request.taskId,
|
|
85
|
+
stateType: request.stateType,
|
|
86
|
+
content: request.content,
|
|
87
|
+
fileReferences: request.fileReferences,
|
|
88
|
+
isCurrent: true,
|
|
89
|
+
createdAt: now,
|
|
90
|
+
updatedAt: now,
|
|
91
|
+
};
|
|
92
|
+
const insertStmt = this.db.prepare(`
|
|
93
|
+
INSERT INTO agent_working_state
|
|
94
|
+
(id, agent_role_id, workspace_id, task_id, state_type, content, file_references, is_current, created_at, updated_at)
|
|
95
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, 1, ?, ?)
|
|
96
|
+
`);
|
|
97
|
+
insertStmt.run(state.id, state.agentRoleId, state.workspaceId, state.taskId || null, state.stateType, state.content, state.fileReferences ? JSON.stringify(state.fileReferences) : null, state.createdAt, state.updatedAt);
|
|
98
|
+
return state;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get working state history for an agent
|
|
102
|
+
*/
|
|
103
|
+
getHistory(query) {
|
|
104
|
+
const limit = query.limit || 50;
|
|
105
|
+
const offset = query.offset || 0;
|
|
106
|
+
const stmt = this.db.prepare(`
|
|
107
|
+
SELECT * FROM agent_working_state
|
|
108
|
+
WHERE agent_role_id = ? AND workspace_id = ?
|
|
109
|
+
ORDER BY updated_at DESC
|
|
110
|
+
LIMIT ? OFFSET ?
|
|
111
|
+
`);
|
|
112
|
+
const rows = stmt.all(query.agentRoleId, query.workspaceId, limit, offset);
|
|
113
|
+
return rows.map((row) => this.mapRowToState(row));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get all working states for a specific task
|
|
117
|
+
*/
|
|
118
|
+
listForTask(taskId) {
|
|
119
|
+
const stmt = this.db.prepare(`
|
|
120
|
+
SELECT * FROM agent_working_state
|
|
121
|
+
WHERE task_id = ?
|
|
122
|
+
ORDER BY updated_at DESC
|
|
123
|
+
`);
|
|
124
|
+
const rows = stmt.all(taskId);
|
|
125
|
+
return rows.map((row) => this.mapRowToState(row));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Restore a previous working state as current
|
|
129
|
+
*/
|
|
130
|
+
restore(id) {
|
|
131
|
+
const state = this.findById(id);
|
|
132
|
+
if (!state)
|
|
133
|
+
return undefined;
|
|
134
|
+
const now = Date.now();
|
|
135
|
+
// Mark all states of this type/agent/workspace as not current
|
|
136
|
+
const updateStmt = this.db.prepare(`
|
|
137
|
+
UPDATE agent_working_state
|
|
138
|
+
SET is_current = 0, updated_at = ?
|
|
139
|
+
WHERE agent_role_id = ?
|
|
140
|
+
AND workspace_id = ?
|
|
141
|
+
AND state_type = ?
|
|
142
|
+
AND is_current = 1
|
|
143
|
+
${state.taskId ? 'AND task_id = ?' : 'AND task_id IS NULL'}
|
|
144
|
+
`);
|
|
145
|
+
const updateParams = [now, state.agentRoleId, state.workspaceId, state.stateType];
|
|
146
|
+
if (state.taskId) {
|
|
147
|
+
updateParams.push(state.taskId);
|
|
148
|
+
}
|
|
149
|
+
updateStmt.run(...updateParams);
|
|
150
|
+
// Mark the target state as current
|
|
151
|
+
const restoreStmt = this.db.prepare(`
|
|
152
|
+
UPDATE agent_working_state SET is_current = 1, updated_at = ? WHERE id = ?
|
|
153
|
+
`);
|
|
154
|
+
restoreStmt.run(now, id);
|
|
155
|
+
return { ...state, isCurrent: true, updatedAt: now };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Delete a working state
|
|
159
|
+
*/
|
|
160
|
+
delete(id) {
|
|
161
|
+
const stmt = this.db.prepare('DELETE FROM agent_working_state WHERE id = ?');
|
|
162
|
+
const result = stmt.run(id);
|
|
163
|
+
return result.changes > 0;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Delete all working states for an agent in a workspace
|
|
167
|
+
*/
|
|
168
|
+
deleteByAgentAndWorkspace(agentRoleId, workspaceId) {
|
|
169
|
+
const stmt = this.db.prepare('DELETE FROM agent_working_state WHERE agent_role_id = ? AND workspace_id = ?');
|
|
170
|
+
const result = stmt.run(agentRoleId, workspaceId);
|
|
171
|
+
return result.changes;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Delete all working states for a task
|
|
175
|
+
*/
|
|
176
|
+
deleteByTask(taskId) {
|
|
177
|
+
const stmt = this.db.prepare('DELETE FROM agent_working_state WHERE task_id = ?');
|
|
178
|
+
const result = stmt.run(taskId);
|
|
179
|
+
return result.changes;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Clean up old non-current states (keep last N per agent/workspace)
|
|
183
|
+
*/
|
|
184
|
+
cleanupOldStates(keepCount = 50) {
|
|
185
|
+
// Get all agent/workspace combinations with more than keepCount states
|
|
186
|
+
const countStmt = this.db.prepare(`
|
|
187
|
+
SELECT agent_role_id, workspace_id, COUNT(*) as total
|
|
188
|
+
FROM agent_working_state
|
|
189
|
+
WHERE is_current = 0
|
|
190
|
+
GROUP BY agent_role_id, workspace_id
|
|
191
|
+
HAVING total > ?
|
|
192
|
+
`);
|
|
193
|
+
const groups = countStmt.all(keepCount);
|
|
194
|
+
let totalDeleted = 0;
|
|
195
|
+
for (const group of groups) {
|
|
196
|
+
// Delete oldest states beyond keepCount
|
|
197
|
+
const deleteStmt = this.db.prepare(`
|
|
198
|
+
DELETE FROM agent_working_state
|
|
199
|
+
WHERE id IN (
|
|
200
|
+
SELECT id FROM agent_working_state
|
|
201
|
+
WHERE agent_role_id = ? AND workspace_id = ? AND is_current = 0
|
|
202
|
+
ORDER BY updated_at ASC
|
|
203
|
+
LIMIT ?
|
|
204
|
+
)
|
|
205
|
+
`);
|
|
206
|
+
const result = deleteStmt.run(group.agent_role_id, group.workspace_id, group.total - keepCount);
|
|
207
|
+
totalDeleted += result.changes;
|
|
208
|
+
}
|
|
209
|
+
return totalDeleted;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Map database row to AgentWorkingState object
|
|
213
|
+
*/
|
|
214
|
+
mapRowToState(row) {
|
|
215
|
+
return {
|
|
216
|
+
id: row.id,
|
|
217
|
+
agentRoleId: row.agent_role_id,
|
|
218
|
+
workspaceId: row.workspace_id,
|
|
219
|
+
taskId: row.task_id || undefined,
|
|
220
|
+
stateType: row.state_type,
|
|
221
|
+
content: row.content,
|
|
222
|
+
fileReferences: row.file_references ? JSON.parse(row.file_references) : undefined,
|
|
223
|
+
isCurrent: row.is_current === 1,
|
|
224
|
+
createdAt: row.created_at,
|
|
225
|
+
updatedAt: row.updated_at,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
exports.WorkingStateRepository = WorkingStateRepository;
|