profclaw 0.0.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +215 -0
- package/CHANGELOG.md +49 -0
- package/CONTRIBUTING.md +119 -0
- package/Dockerfile +107 -0
- package/LICENSE +661 -0
- package/README.md +196 -0
- package/config/agents.yml +55 -0
- package/config/budget.yml +15 -0
- package/config/pricing.yml +46 -0
- package/config/settings.yml +168 -0
- package/dist/adapters/claude-code.d.ts +46 -0
- package/dist/adapters/claude-code.js +215 -0
- package/dist/adapters/index.d.ts +4 -0
- package/dist/adapters/index.js +4 -0
- package/dist/adapters/ollama.d.ts +45 -0
- package/dist/adapters/ollama.js +277 -0
- package/dist/adapters/openclaw.d.ts +60 -0
- package/dist/adapters/openclaw.js +289 -0
- package/dist/adapters/registry.d.ts +56 -0
- package/dist/adapters/registry.js +163 -0
- package/dist/agents/executor.d.ts +78 -0
- package/dist/agents/executor.js +657 -0
- package/dist/agents/index.d.ts +10 -0
- package/dist/agents/index.js +27 -0
- package/dist/agents/stop-conditions.d.ts +108 -0
- package/dist/agents/stop-conditions.js +299 -0
- package/dist/agents/types.d.ts +185 -0
- package/dist/agents/types.js +14 -0
- package/dist/ai/embedding-service.d.ts +96 -0
- package/dist/ai/embedding-service.js +333 -0
- package/dist/auth/api-tokens.d.ts +71 -0
- package/dist/auth/api-tokens.js +235 -0
- package/dist/auth/auth-service.d.ts +75 -0
- package/dist/auth/auth-service.js +557 -0
- package/dist/auth/device-identity.d.ts +96 -0
- package/dist/auth/device-identity.js +250 -0
- package/dist/auth/github-oauth.d.ts +20 -0
- package/dist/auth/github-oauth.js +59 -0
- package/dist/auth/jira-oauth.d.ts +25 -0
- package/dist/auth/jira-oauth.js +75 -0
- package/dist/auth/linear-oauth.d.ts +21 -0
- package/dist/auth/linear-oauth.js +59 -0
- package/dist/auth/middleware.d.ts +44 -0
- package/dist/auth/middleware.js +190 -0
- package/dist/auth/pairing-codes.d.ts +109 -0
- package/dist/auth/pairing-codes.js +274 -0
- package/dist/auth/password.d.ts +53 -0
- package/dist/auth/password.js +126 -0
- package/dist/auth/qr-pairing.d.ts +36 -0
- package/dist/auth/qr-pairing.js +138 -0
- package/dist/auth/slack-oauth.d.ts +31 -0
- package/dist/auth/slack-oauth.js +80 -0
- package/dist/backup/index.d.ts +50 -0
- package/dist/backup/index.js +184 -0
- package/dist/browser/adapters.d.ts +25 -0
- package/dist/browser/adapters.js +32 -0
- package/dist/browser/cli.d.ts +19 -0
- package/dist/browser/cli.js +277 -0
- package/dist/browser/compression.d.ts +32 -0
- package/dist/browser/compression.js +269 -0
- package/dist/browser/extensions.d.ts +144 -0
- package/dist/browser/extensions.js +251 -0
- package/dist/browser/index.d.ts +37 -0
- package/dist/browser/index.js +43 -0
- package/dist/browser/refs.d.ts +46 -0
- package/dist/browser/refs.js +120 -0
- package/dist/browser/search.d.ts +36 -0
- package/dist/browser/search.js +193 -0
- package/dist/browser/service.d.ts +94 -0
- package/dist/browser/service.js +358 -0
- package/dist/browser/snapshot.d.ts +19 -0
- package/dist/browser/snapshot.js +250 -0
- package/dist/browser/tools.d.ts +259 -0
- package/dist/browser/tools.js +463 -0
- package/dist/browser/types.d.ts +134 -0
- package/dist/browser/types.js +17 -0
- package/dist/chat/agentic-executor.d.ts +108 -0
- package/dist/chat/agentic-executor.js +739 -0
- package/dist/chat/api-key-detector.d.ts +41 -0
- package/dist/chat/api-key-detector.js +290 -0
- package/dist/chat/auto-reply.d.ts +90 -0
- package/dist/chat/auto-reply.js +272 -0
- package/dist/chat/conversations.d.ts +91 -0
- package/dist/chat/conversations.js +297 -0
- package/dist/chat/execution/audit.d.ts +192 -0
- package/dist/chat/execution/audit.js +323 -0
- package/dist/chat/execution/executor.d.ts +56 -0
- package/dist/chat/execution/executor.js +654 -0
- package/dist/chat/execution/guardrails.d.ts +98 -0
- package/dist/chat/execution/guardrails.js +571 -0
- package/dist/chat/execution/index.d.ts +61 -0
- package/dist/chat/execution/index.js +129 -0
- package/dist/chat/execution/model-capability.d.ts +34 -0
- package/dist/chat/execution/model-capability.js +96 -0
- package/dist/chat/execution/process-pool.d.ts +110 -0
- package/dist/chat/execution/process-pool.js +290 -0
- package/dist/chat/execution/pty.d.ts +92 -0
- package/dist/chat/execution/pty.js +285 -0
- package/dist/chat/execution/rate-limiter.d.ts +87 -0
- package/dist/chat/execution/rate-limiter.js +305 -0
- package/dist/chat/execution/registry.d.ts +54 -0
- package/dist/chat/execution/registry.js +220 -0
- package/dist/chat/execution/sandbox.d.ts +109 -0
- package/dist/chat/execution/sandbox.js +684 -0
- package/dist/chat/execution/secrets.d.ts +45 -0
- package/dist/chat/execution/secrets.js +338 -0
- package/dist/chat/execution/security.d.ts +179 -0
- package/dist/chat/execution/security.js +739 -0
- package/dist/chat/execution/self-correction.d.ts +162 -0
- package/dist/chat/execution/self-correction.js +557 -0
- package/dist/chat/execution/session-manager.d.ts +79 -0
- package/dist/chat/execution/session-manager.js +356 -0
- package/dist/chat/execution/session-spawn/config.d.ts +37 -0
- package/dist/chat/execution/session-spawn/config.js +83 -0
- package/dist/chat/execution/session-spawn/index.d.ts +10 -0
- package/dist/chat/execution/session-spawn/index.js +10 -0
- package/dist/chat/execution/session-spawn/manager.d.ts +35 -0
- package/dist/chat/execution/session-spawn/manager.js +418 -0
- package/dist/chat/execution/session-spawn/types.d.ts +117 -0
- package/dist/chat/execution/session-spawn/types.js +16 -0
- package/dist/chat/execution/smart-prompts.d.ts +34 -0
- package/dist/chat/execution/smart-prompts.js +151 -0
- package/dist/chat/execution/stream-results.d.ts +65 -0
- package/dist/chat/execution/stream-results.js +156 -0
- package/dist/chat/execution/tool-router.d.ts +76 -0
- package/dist/chat/execution/tool-router.js +296 -0
- package/dist/chat/execution/tools/agents-list.d.ts +49 -0
- package/dist/chat/execution/tools/agents-list.js +165 -0
- package/dist/chat/execution/tools/browser.d.ts +12 -0
- package/dist/chat/execution/tools/browser.js +14 -0
- package/dist/chat/execution/tools/canvas.d.ts +61 -0
- package/dist/chat/execution/tools/canvas.js +150 -0
- package/dist/chat/execution/tools/complete-task.d.ts +72 -0
- package/dist/chat/execution/tools/complete-task.js +104 -0
- package/dist/chat/execution/tools/cron-tool.d.ts +204 -0
- package/dist/chat/execution/tools/cron-tool.js +680 -0
- package/dist/chat/execution/tools/discord-actions.d.ts +120 -0
- package/dist/chat/execution/tools/discord-actions.js +361 -0
- package/dist/chat/execution/tools/exec.d.ts +43 -0
- package/dist/chat/execution/tools/exec.js +223 -0
- package/dist/chat/execution/tools/file-ops.d.ts +175 -0
- package/dist/chat/execution/tools/file-ops.js +723 -0
- package/dist/chat/execution/tools/git.d.ts +143 -0
- package/dist/chat/execution/tools/git.js +395 -0
- package/dist/chat/execution/tools/github.d.ts +42 -0
- package/dist/chat/execution/tools/github.js +184 -0
- package/dist/chat/execution/tools/glinr-ops.d.ts +202 -0
- package/dist/chat/execution/tools/glinr-ops.js +694 -0
- package/dist/chat/execution/tools/image-analyze.d.ts +29 -0
- package/dist/chat/execution/tools/image-analyze.js +127 -0
- package/dist/chat/execution/tools/index.d.ts +64 -0
- package/dist/chat/execution/tools/index.js +245 -0
- package/dist/chat/execution/tools/integrations.d.ts +109 -0
- package/dist/chat/execution/tools/integrations.js +237 -0
- package/dist/chat/execution/tools/link-understand.d.ts +34 -0
- package/dist/chat/execution/tools/link-understand.js +307 -0
- package/dist/chat/execution/tools/maintenance.d.ts +29 -0
- package/dist/chat/execution/tools/maintenance.js +105 -0
- package/dist/chat/execution/tools/memory-tools.d.ts +76 -0
- package/dist/chat/execution/tools/memory-tools.js +278 -0
- package/dist/chat/execution/tools/openai-image-gen.d.ts +51 -0
- package/dist/chat/execution/tools/openai-image-gen.js +212 -0
- package/dist/chat/execution/tools/profclaw-ops.d.ts +204 -0
- package/dist/chat/execution/tools/profclaw-ops.js +665 -0
- package/dist/chat/execution/tools/session-spawn.d.ts +146 -0
- package/dist/chat/execution/tools/session-spawn.js +544 -0
- package/dist/chat/execution/tools/session-status.d.ts +38 -0
- package/dist/chat/execution/tools/session-status.js +185 -0
- package/dist/chat/execution/tools/sessions-list.d.ts +49 -0
- package/dist/chat/execution/tools/sessions-list.js +153 -0
- package/dist/chat/execution/tools/sessions-send.d.ts +48 -0
- package/dist/chat/execution/tools/sessions-send.js +207 -0
- package/dist/chat/execution/tools/sessions-spawn.d.ts +51 -0
- package/dist/chat/execution/tools/sessions-spawn.js +137 -0
- package/dist/chat/execution/tools/slack-actions.d.ts +90 -0
- package/dist/chat/execution/tools/slack-actions.js +272 -0
- package/dist/chat/execution/tools/subagent-orchestrate.d.ts +66 -0
- package/dist/chat/execution/tools/subagent-orchestrate.js +313 -0
- package/dist/chat/execution/tools/system.d.ts +121 -0
- package/dist/chat/execution/tools/system.js +415 -0
- package/dist/chat/execution/tools/telegram-actions.d.ts +126 -0
- package/dist/chat/execution/tools/telegram-actions.js +339 -0
- package/dist/chat/execution/tools/test-run.d.ts +43 -0
- package/dist/chat/execution/tools/test-run.js +391 -0
- package/dist/chat/execution/tools/tts-speak.d.ts +39 -0
- package/dist/chat/execution/tools/tts-speak.js +199 -0
- package/dist/chat/execution/tools/web-fetch.d.ts +42 -0
- package/dist/chat/execution/tools/web-fetch.js +247 -0
- package/dist/chat/execution/tools/web-search.d.ts +53 -0
- package/dist/chat/execution/tools/web-search.js +130 -0
- package/dist/chat/execution/types.d.ts +337 -0
- package/dist/chat/execution/types.js +8 -0
- package/dist/chat/execution/workflows/built-in.d.ts +10 -0
- package/dist/chat/execution/workflows/built-in.js +249 -0
- package/dist/chat/execution/workflows/executor.d.ts +13 -0
- package/dist/chat/execution/workflows/executor.js +259 -0
- package/dist/chat/execution/workflows/index.d.ts +5 -0
- package/dist/chat/execution/workflows/index.js +5 -0
- package/dist/chat/execution/workflows/trigger.d.ts +15 -0
- package/dist/chat/execution/workflows/trigger.js +111 -0
- package/dist/chat/execution/workflows/types.d.ts +80 -0
- package/dist/chat/execution/workflows/types.js +2 -0
- package/dist/chat/failover/error.d.ts +73 -0
- package/dist/chat/failover/error.js +412 -0
- package/dist/chat/failover/index.d.ts +10 -0
- package/dist/chat/failover/index.js +11 -0
- package/dist/chat/failover/model-fallback.d.ts +97 -0
- package/dist/chat/failover/model-fallback.js +328 -0
- package/dist/chat/failover/types.d.ts +47 -0
- package/dist/chat/failover/types.js +8 -0
- package/dist/chat/format/chunk.d.ts +59 -0
- package/dist/chat/format/chunk.js +253 -0
- package/dist/chat/format/index.d.ts +7 -0
- package/dist/chat/format/index.js +7 -0
- package/dist/chat/format/tool-result-formatter.d.ts +30 -0
- package/dist/chat/format/tool-result-formatter.js +177 -0
- package/dist/chat/group.d.ts +232 -0
- package/dist/chat/group.js +311 -0
- package/dist/chat/index.d.ts +21 -0
- package/dist/chat/index.js +30 -0
- package/dist/chat/memory.d.ts +108 -0
- package/dist/chat/memory.js +343 -0
- package/dist/chat/message-handler.d.ts +38 -0
- package/dist/chat/message-handler.js +274 -0
- package/dist/chat/proactive/index.d.ts +167 -0
- package/dist/chat/proactive/index.js +721 -0
- package/dist/chat/prompt-adapter.d.ts +52 -0
- package/dist/chat/prompt-adapter.js +245 -0
- package/dist/chat/providers/dingtalk/index.d.ts +69 -0
- package/dist/chat/providers/dingtalk/index.js +225 -0
- package/dist/chat/providers/discord/index.d.ts +264 -0
- package/dist/chat/providers/discord/index.js +657 -0
- package/dist/chat/providers/feishu/index.d.ts +97 -0
- package/dist/chat/providers/feishu/index.js +362 -0
- package/dist/chat/providers/googlechat/index.d.ts +269 -0
- package/dist/chat/providers/googlechat/index.js +634 -0
- package/dist/chat/providers/imessage/index.d.ts +61 -0
- package/dist/chat/providers/imessage/index.js +166 -0
- package/dist/chat/providers/index.d.ts +76 -0
- package/dist/chat/providers/index.js +430 -0
- package/dist/chat/providers/irc/index.d.ts +101 -0
- package/dist/chat/providers/irc/index.js +557 -0
- package/dist/chat/providers/line/index.d.ts +113 -0
- package/dist/chat/providers/line/index.js +434 -0
- package/dist/chat/providers/matrix/index.d.ts +161 -0
- package/dist/chat/providers/matrix/index.js +559 -0
- package/dist/chat/providers/mattermost/index.d.ts +106 -0
- package/dist/chat/providers/mattermost/index.js +425 -0
- package/dist/chat/providers/msteams/index.d.ts +198 -0
- package/dist/chat/providers/msteams/index.js +694 -0
- package/dist/chat/providers/nextcloud/index.d.ts +52 -0
- package/dist/chat/providers/nextcloud/index.js +156 -0
- package/dist/chat/providers/nostr/index.d.ts +60 -0
- package/dist/chat/providers/nostr/index.js +200 -0
- package/dist/chat/providers/qq/index.d.ts +57 -0
- package/dist/chat/providers/qq/index.js +260 -0
- package/dist/chat/providers/registry.d.ts +89 -0
- package/dist/chat/providers/registry.js +213 -0
- package/dist/chat/providers/signal/index.d.ts +88 -0
- package/dist/chat/providers/signal/index.js +357 -0
- package/dist/chat/providers/slack/index.d.ts +52 -0
- package/dist/chat/providers/slack/index.js +477 -0
- package/dist/chat/providers/synology/index.d.ts +50 -0
- package/dist/chat/providers/synology/index.js +138 -0
- package/dist/chat/providers/telegram/index.d.ts +148 -0
- package/dist/chat/providers/telegram/index.js +492 -0
- package/dist/chat/providers/tlon/index.d.ts +44 -0
- package/dist/chat/providers/tlon/index.js +243 -0
- package/dist/chat/providers/twitch/index.d.ts +79 -0
- package/dist/chat/providers/twitch/index.js +349 -0
- package/dist/chat/providers/types.d.ts +437 -0
- package/dist/chat/providers/types.js +14 -0
- package/dist/chat/providers/webchat/index.d.ts +38 -0
- package/dist/chat/providers/webchat/index.js +214 -0
- package/dist/chat/providers/wecom/index.d.ts +62 -0
- package/dist/chat/providers/wecom/index.js +228 -0
- package/dist/chat/providers/whatsapp/index.d.ts +147 -0
- package/dist/chat/providers/whatsapp/index.js +396 -0
- package/dist/chat/providers/zalo/index.d.ts +54 -0
- package/dist/chat/providers/zalo/index.js +158 -0
- package/dist/chat/providers/zalo-personal/index.d.ts +53 -0
- package/dist/chat/providers/zalo-personal/index.js +212 -0
- package/dist/chat/skills.d.ts +82 -0
- package/dist/chat/skills.js +410 -0
- package/dist/chat/system-prompts.d.ts +76 -0
- package/dist/chat/system-prompts.js +407 -0
- package/dist/chat/tool-handler.d.ts +57 -0
- package/dist/chat/tool-handler.js +336 -0
- package/dist/chat/tools.d.ts +373 -0
- package/dist/chat/tools.js +512 -0
- package/dist/cli/commands/agent.d.ts +3 -0
- package/dist/cli/commands/agent.js +108 -0
- package/dist/cli/commands/auth.d.ts +12 -0
- package/dist/cli/commands/auth.js +301 -0
- package/dist/cli/commands/browser.d.ts +3 -0
- package/dist/cli/commands/browser.js +138 -0
- package/dist/cli/commands/canvas.d.ts +3 -0
- package/dist/cli/commands/canvas.js +155 -0
- package/dist/cli/commands/channels.d.ts +3 -0
- package/dist/cli/commands/channels.js +167 -0
- package/dist/cli/commands/chat.d.ts +9 -0
- package/dist/cli/commands/chat.js +360 -0
- package/dist/cli/commands/completion.d.ts +3 -0
- package/dist/cli/commands/completion.js +170 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.js +193 -0
- package/dist/cli/commands/cost.d.ts +3 -0
- package/dist/cli/commands/cost.js +134 -0
- package/dist/cli/commands/daemon.d.ts +3 -0
- package/dist/cli/commands/daemon.js +381 -0
- package/dist/cli/commands/devices.d.ts +3 -0
- package/dist/cli/commands/devices.js +150 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +295 -0
- package/dist/cli/commands/logs.d.ts +3 -0
- package/dist/cli/commands/logs.js +139 -0
- package/dist/cli/commands/mcp.d.ts +15 -0
- package/dist/cli/commands/mcp.js +157 -0
- package/dist/cli/commands/memory.d.ts +3 -0
- package/dist/cli/commands/memory.js +170 -0
- package/dist/cli/commands/models.d.ts +3 -0
- package/dist/cli/commands/models.js +197 -0
- package/dist/cli/commands/nodes.d.ts +3 -0
- package/dist/cli/commands/nodes.js +193 -0
- package/dist/cli/commands/onboard.d.ts +13 -0
- package/dist/cli/commands/onboard.js +360 -0
- package/dist/cli/commands/plugin.d.ts +15 -0
- package/dist/cli/commands/plugin.js +226 -0
- package/dist/cli/commands/provider.d.ts +16 -0
- package/dist/cli/commands/provider.js +320 -0
- package/dist/cli/commands/security.d.ts +3 -0
- package/dist/cli/commands/security.js +180 -0
- package/dist/cli/commands/serve.d.ts +3 -0
- package/dist/cli/commands/serve.js +179 -0
- package/dist/cli/commands/session.d.ts +3 -0
- package/dist/cli/commands/session.js +172 -0
- package/dist/cli/commands/setup.d.ts +13 -0
- package/dist/cli/commands/setup.js +636 -0
- package/dist/cli/commands/skill.d.ts +15 -0
- package/dist/cli/commands/skill.js +191 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.js +71 -0
- package/dist/cli/commands/summary.d.ts +3 -0
- package/dist/cli/commands/summary.js +160 -0
- package/dist/cli/commands/task.d.ts +3 -0
- package/dist/cli/commands/task.js +170 -0
- package/dist/cli/commands/ticket.d.ts +3 -0
- package/dist/cli/commands/ticket.js +421 -0
- package/dist/cli/commands/tools.d.ts +9 -0
- package/dist/cli/commands/tools.js +508 -0
- package/dist/cli/commands/tui.d.ts +3 -0
- package/dist/cli/commands/tui.js +158 -0
- package/dist/cli/commands/tunnel.d.ts +3 -0
- package/dist/cli/commands/tunnel.js +135 -0
- package/dist/cli/commands/webhooks.d.ts +3 -0
- package/dist/cli/commands/webhooks.js +191 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +127 -0
- package/dist/cli/utils/api.d.ts +17 -0
- package/dist/cli/utils/api.js +63 -0
- package/dist/cli/utils/config.d.ts +31 -0
- package/dist/cli/utils/config.js +81 -0
- package/dist/cli/utils/output.d.ts +58 -0
- package/dist/cli/utils/output.js +148 -0
- package/dist/core/deployment.d.ts +30 -0
- package/dist/core/deployment.js +114 -0
- package/dist/core/sandbox-config.d.ts +63 -0
- package/dist/core/sandbox-config.js +148 -0
- package/dist/costs/budget.d.ts +28 -0
- package/dist/costs/budget.js +57 -0
- package/dist/costs/persistence.d.ts +77 -0
- package/dist/costs/persistence.js +210 -0
- package/dist/costs/pricing.d.ts +16 -0
- package/dist/costs/pricing.js +39 -0
- package/dist/costs/token-tracker.d.ts +34 -0
- package/dist/costs/token-tracker.js +141 -0
- package/dist/cron/heartbeat.d.ts +23 -0
- package/dist/cron/heartbeat.js +109 -0
- package/dist/cron/index.d.ts +22 -0
- package/dist/cron/index.js +37 -0
- package/dist/cron/issue-poller.d.ts +15 -0
- package/dist/cron/issue-poller.js +174 -0
- package/dist/cron/scheduler.d.ts +315 -0
- package/dist/cron/scheduler.js +1008 -0
- package/dist/cron/stale-checker.d.ts +16 -0
- package/dist/cron/stale-checker.js +61 -0
- package/dist/cron/templates.d.ts +107 -0
- package/dist/cron/templates.js +395 -0
- package/dist/diagnostics/exporters.d.ts +21 -0
- package/dist/diagnostics/exporters.js +138 -0
- package/dist/diagnostics/index.d.ts +10 -0
- package/dist/diagnostics/index.js +9 -0
- package/dist/diagnostics/middleware.d.ts +12 -0
- package/dist/diagnostics/middleware.js +58 -0
- package/dist/diagnostics/tracer.d.ts +133 -0
- package/dist/diagnostics/tracer.js +257 -0
- package/dist/discovery/index.d.ts +8 -0
- package/dist/discovery/index.js +7 -0
- package/dist/discovery/mdns.d.ts +40 -0
- package/dist/discovery/mdns.js +249 -0
- package/dist/gateway/index.d.ts +35 -0
- package/dist/gateway/index.js +36 -0
- package/dist/gateway/router.d.ts +110 -0
- package/dist/gateway/router.js +649 -0
- package/dist/gateway/types.d.ts +275 -0
- package/dist/gateway/types.js +2 -0
- package/dist/gateway/workflows.d.ts +37 -0
- package/dist/gateway/workflows.js +748 -0
- package/dist/hooks/agent-webhook.d.ts +277 -0
- package/dist/hooks/agent-webhook.js +197 -0
- package/dist/hooks/index.d.ts +13 -0
- package/dist/hooks/index.js +15 -0
- package/dist/hooks/prompt-submit.d.ts +45 -0
- package/dist/hooks/prompt-submit.js +111 -0
- package/dist/hooks/schemas.d.ts +563 -0
- package/dist/hooks/schemas.js +108 -0
- package/dist/hooks/session-end.d.ts +25 -0
- package/dist/hooks/session-end.js +153 -0
- package/dist/hooks/tool-use.d.ts +41 -0
- package/dist/hooks/tool-use.js +201 -0
- package/dist/hooks/types.d.ts +76 -0
- package/dist/hooks/types.js +7 -0
- package/dist/integrations/cloudflare-tunnel.d.ts +78 -0
- package/dist/integrations/cloudflare-tunnel.js +268 -0
- package/dist/integrations/github-client.d.ts +27 -0
- package/dist/integrations/github-client.js +79 -0
- package/dist/integrations/github-projects.d.ts +97 -0
- package/dist/integrations/github-projects.js +433 -0
- package/dist/integrations/github-ticket-sync.d.ts +82 -0
- package/dist/integrations/github-ticket-sync.js +352 -0
- package/dist/integrations/github.d.ts +11 -0
- package/dist/integrations/github.js +241 -0
- package/dist/integrations/jira-client.d.ts +30 -0
- package/dist/integrations/jira-client.js +67 -0
- package/dist/integrations/jira.d.ts +13 -0
- package/dist/integrations/jira.js +108 -0
- package/dist/integrations/linear-client.d.ts +23 -0
- package/dist/integrations/linear-client.js +52 -0
- package/dist/integrations/linear.d.ts +15 -0
- package/dist/integrations/linear.js +312 -0
- package/dist/integrations/tailscale.d.ts +68 -0
- package/dist/integrations/tailscale.js +173 -0
- package/dist/integrations/web-search.d.ts +112 -0
- package/dist/integrations/web-search.js +287 -0
- package/dist/intelligence/index.d.ts +8 -0
- package/dist/intelligence/index.js +8 -0
- package/dist/intelligence/ollama.d.ts +50 -0
- package/dist/intelligence/ollama.js +213 -0
- package/dist/intelligence/rules.d.ts +39 -0
- package/dist/intelligence/rules.js +308 -0
- package/dist/labels/index.d.ts +93 -0
- package/dist/labels/index.js +248 -0
- package/dist/mcp/browser-tools.d.ts +10 -0
- package/dist/mcp/browser-tools.js +16 -0
- package/dist/mcp/client.d.ts +54 -0
- package/dist/mcp/client.js +153 -0
- package/dist/mcp/index.d.ts +12 -0
- package/dist/mcp/index.js +13 -0
- package/dist/mcp/server.d.ts +40 -0
- package/dist/mcp/server.js +826 -0
- package/dist/mcp/tool-adapter.d.ts +49 -0
- package/dist/mcp/tool-adapter.js +193 -0
- package/dist/memory/experience-store.d.ts +121 -0
- package/dist/memory/experience-store.js +439 -0
- package/dist/memory/index.d.ts +8 -0
- package/dist/memory/index.js +25 -0
- package/dist/memory/memory-service.d.ts +312 -0
- package/dist/memory/memory-service.js +1172 -0
- package/dist/memory/memory-watcher.d.ts +116 -0
- package/dist/memory/memory-watcher.js +239 -0
- package/dist/middleware/logging.d.ts +34 -0
- package/dist/middleware/logging.js +184 -0
- package/dist/middleware/rate-limit.d.ts +29 -0
- package/dist/middleware/rate-limit.js +91 -0
- package/dist/notifications/in-app.d.ts +28 -0
- package/dist/notifications/in-app.js +53 -0
- package/dist/notifications/index.d.ts +3 -0
- package/dist/notifications/index.js +3 -0
- package/dist/notifications/push.d.ts +74 -0
- package/dist/notifications/push.js +175 -0
- package/dist/notifications/slack.d.ts +32 -0
- package/dist/notifications/slack.js +157 -0
- package/dist/plugins/clawhub.d.ts +70 -0
- package/dist/plugins/clawhub.js +260 -0
- package/dist/plugins/loader.d.ts +23 -0
- package/dist/plugins/loader.js +140 -0
- package/dist/plugins/marketplace.d.ts +77 -0
- package/dist/plugins/marketplace.js +275 -0
- package/dist/plugins/registry.d.ts +122 -0
- package/dist/plugins/registry.js +352 -0
- package/dist/plugins/sandbox.d.ts +77 -0
- package/dist/plugins/sandbox.js +287 -0
- package/dist/plugins/scaffolder.d.ts +28 -0
- package/dist/plugins/scaffolder.js +409 -0
- package/dist/plugins/sdk.d.ts +35 -0
- package/dist/plugins/sdk.js +8 -0
- package/dist/plugins/search/brave.d.ts +9 -0
- package/dist/plugins/search/brave.js +157 -0
- package/dist/plugins/search/duckduckgo.d.ts +9 -0
- package/dist/plugins/search/duckduckgo.js +171 -0
- package/dist/plugins/search/index.d.ts +13 -0
- package/dist/plugins/search/index.js +23 -0
- package/dist/plugins/search/searxng.d.ts +9 -0
- package/dist/plugins/search/searxng.js +170 -0
- package/dist/plugins/search/serper.d.ts +9 -0
- package/dist/plugins/search/serper.js +135 -0
- package/dist/plugins/search/tavily.d.ts +9 -0
- package/dist/plugins/search/tavily.js +146 -0
- package/dist/plugins/types.d.ts +174 -0
- package/dist/plugins/types.js +8 -0
- package/dist/projects/index.d.ts +133 -0
- package/dist/projects/index.js +897 -0
- package/dist/projects/types.d.ts +444 -0
- package/dist/projects/types.js +207 -0
- package/dist/providers/adapters/anthropic.d.ts +26 -0
- package/dist/providers/adapters/anthropic.js +306 -0
- package/dist/providers/adapters/base.d.ts +53 -0
- package/dist/providers/adapters/base.js +99 -0
- package/dist/providers/adapters/ollama.d.ts +30 -0
- package/dist/providers/adapters/ollama.js +292 -0
- package/dist/providers/ai-sdk.d.ts +178 -0
- package/dist/providers/ai-sdk.js +1552 -0
- package/dist/providers/core/index.d.ts +8 -0
- package/dist/providers/core/index.js +10 -0
- package/dist/providers/core/models.d.ts +31 -0
- package/dist/providers/core/models.js +949 -0
- package/dist/providers/core/types.d.ts +117 -0
- package/dist/providers/core/types.js +83 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.js +7 -0
- package/dist/providers/registry.d.ts +93 -0
- package/dist/providers/registry.js +228 -0
- package/dist/providers/schema-utils.d.ts +23 -0
- package/dist/providers/schema-utils.js +545 -0
- package/dist/providers/types.d.ts +609 -0
- package/dist/providers/types.js +279 -0
- package/dist/queue/failure-handler.d.ts +93 -0
- package/dist/queue/failure-handler.js +379 -0
- package/dist/queue/index.d.ts +23 -0
- package/dist/queue/index.js +86 -0
- package/dist/queue/memory-queue.d.ts +30 -0
- package/dist/queue/memory-queue.js +429 -0
- package/dist/queue/notifications.d.ts +6 -0
- package/dist/queue/notifications.js +128 -0
- package/dist/queue/task-queue.d.ts +55 -0
- package/dist/queue/task-queue.js +518 -0
- package/dist/queue/webhook-queue.d.ts +47 -0
- package/dist/queue/webhook-queue.js +158 -0
- package/dist/routes/agents.d.ts +4 -0
- package/dist/routes/agents.js +45 -0
- package/dist/routes/auth.d.ts +19 -0
- package/dist/routes/auth.js +492 -0
- package/dist/routes/backup.d.ts +6 -0
- package/dist/routes/backup.js +71 -0
- package/dist/routes/chat.d.ts +10 -0
- package/dist/routes/chat.js +1678 -0
- package/dist/routes/clawhub.d.ts +8 -0
- package/dist/routes/clawhub.js +89 -0
- package/dist/routes/costs.d.ts +4 -0
- package/dist/routes/costs.js +78 -0
- package/dist/routes/cron.d.ts +11 -0
- package/dist/routes/cron.js +708 -0
- package/dist/routes/devices.d.ts +9 -0
- package/dist/routes/devices.js +490 -0
- package/dist/routes/discord.d.ts +15 -0
- package/dist/routes/discord.js +524 -0
- package/dist/routes/dlq.d.ts +4 -0
- package/dist/routes/dlq.js +64 -0
- package/dist/routes/gateway.d.ts +4 -0
- package/dist/routes/gateway.js +253 -0
- package/dist/routes/health.d.ts +29 -0
- package/dist/routes/health.js +296 -0
- package/dist/routes/hooks.d.ts +4 -0
- package/dist/routes/hooks.js +170 -0
- package/dist/routes/import.d.ts +9 -0
- package/dist/routes/import.js +540 -0
- package/dist/routes/index.d.ts +38 -0
- package/dist/routes/index.js +39 -0
- package/dist/routes/integrations.d.ts +10 -0
- package/dist/routes/integrations.js +200 -0
- package/dist/routes/labels.d.ts +8 -0
- package/dist/routes/labels.js +240 -0
- package/dist/routes/mcp.d.ts +14 -0
- package/dist/routes/mcp.js +125 -0
- package/dist/routes/memory.d.ts +10 -0
- package/dist/routes/memory.js +622 -0
- package/dist/routes/notifications.d.ts +9 -0
- package/dist/routes/notifications.js +154 -0
- package/dist/routes/oobe.d.ts +10 -0
- package/dist/routes/oobe.js +405 -0
- package/dist/routes/openapi.d.ts +9 -0
- package/dist/routes/openapi.js +537 -0
- package/dist/routes/plugins.d.ts +8 -0
- package/dist/routes/plugins.js +108 -0
- package/dist/routes/projects.d.ts +8 -0
- package/dist/routes/projects.js +592 -0
- package/dist/routes/push.d.ts +8 -0
- package/dist/routes/push.js +75 -0
- package/dist/routes/search.d.ts +4 -0
- package/dist/routes/search.js +189 -0
- package/dist/routes/security.d.ts +10 -0
- package/dist/routes/security.js +189 -0
- package/dist/routes/settings.d.ts +4 -0
- package/dist/routes/settings.js +119 -0
- package/dist/routes/setup.d.ts +11 -0
- package/dist/routes/setup.js +525 -0
- package/dist/routes/skills.d.ts +13 -0
- package/dist/routes/skills.js +152 -0
- package/dist/routes/slack.d.ts +12 -0
- package/dist/routes/slack.js +999 -0
- package/dist/routes/states.d.ts +8 -0
- package/dist/routes/states.js +123 -0
- package/dist/routes/stats.d.ts +6 -0
- package/dist/routes/stats.js +369 -0
- package/dist/routes/summaries.d.ts +4 -0
- package/dist/routes/summaries.js +344 -0
- package/dist/routes/sync.d.ts +13 -0
- package/dist/routes/sync.js +268 -0
- package/dist/routes/tasks.d.ts +4 -0
- package/dist/routes/tasks.js +473 -0
- package/dist/routes/telegram.d.ts +14 -0
- package/dist/routes/telegram.js +420 -0
- package/dist/routes/tickets.d.ts +4 -0
- package/dist/routes/tickets.js +1090 -0
- package/dist/routes/tokens.d.ts +4 -0
- package/dist/routes/tokens.js +83 -0
- package/dist/routes/tools.d.ts +14 -0
- package/dist/routes/tools.js +790 -0
- package/dist/routes/tunnels.d.ts +8 -0
- package/dist/routes/tunnels.js +145 -0
- package/dist/routes/users.d.ts +15 -0
- package/dist/routes/users.js +998 -0
- package/dist/routes/voice.d.ts +8 -0
- package/dist/routes/voice.js +127 -0
- package/dist/routes/webchat.d.ts +11 -0
- package/dist/routes/webchat.js +173 -0
- package/dist/routes/webhook-dedup.d.ts +11 -0
- package/dist/routes/webhook-dedup.js +49 -0
- package/dist/routes/webhooks.d.ts +4 -0
- package/dist/routes/webhooks.js +71 -0
- package/dist/routes/whatsapp.d.ts +14 -0
- package/dist/routes/whatsapp.js +391 -0
- package/dist/security/audit-scanner.d.ts +32 -0
- package/dist/security/audit-scanner.js +217 -0
- package/dist/security/fs-guard.d.ts +41 -0
- package/dist/security/fs-guard.js +206 -0
- package/dist/security/prompt-guard.d.ts +47 -0
- package/dist/security/prompt-guard.js +198 -0
- package/dist/security/ssrf-guard.d.ts +38 -0
- package/dist/security/ssrf-guard.js +266 -0
- package/dist/security/types.d.ts +92 -0
- package/dist/security/types.js +8 -0
- package/dist/server/route-loader.d.ts +15 -0
- package/dist/server/route-loader.js +135 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.js +835 -0
- package/dist/settings/index.d.ts +841 -0
- package/dist/settings/index.js +451 -0
- package/dist/skills/compiler.d.ts +83 -0
- package/dist/skills/compiler.js +358 -0
- package/dist/skills/frontmatter.d.ts +33 -0
- package/dist/skills/frontmatter.js +175 -0
- package/dist/skills/index.d.ts +19 -0
- package/dist/skills/index.js +24 -0
- package/dist/skills/installer.d.ts +22 -0
- package/dist/skills/installer.js +220 -0
- package/dist/skills/loader.d.ts +72 -0
- package/dist/skills/loader.js +484 -0
- package/dist/skills/prompt-builder.d.ts +48 -0
- package/dist/skills/prompt-builder.js +135 -0
- package/dist/skills/registry.d.ts +115 -0
- package/dist/skills/registry.js +225 -0
- package/dist/skills/types.d.ts +202 -0
- package/dist/skills/types.js +24 -0
- package/dist/states/index.d.ts +64 -0
- package/dist/states/index.js +142 -0
- package/dist/storage/adapter.d.ts +146 -0
- package/dist/storage/adapter.js +2 -0
- package/dist/storage/index.d.ts +48 -0
- package/dist/storage/index.js +135 -0
- package/dist/storage/libsql.d.ts +99 -0
- package/dist/storage/libsql.js +1873 -0
- package/dist/storage/migrations.d.ts +65 -0
- package/dist/storage/migrations.js +289 -0
- package/dist/storage/schema.d.ts +10185 -0
- package/dist/storage/schema.js +1113 -0
- package/dist/summaries/extractor.d.ts +56 -0
- package/dist/summaries/extractor.js +377 -0
- package/dist/summaries/index.d.ts +13 -0
- package/dist/summaries/index.js +14 -0
- package/dist/summaries/storage.d.ts +51 -0
- package/dist/summaries/storage.js +101 -0
- package/dist/summaries/templates.d.ts +68 -0
- package/dist/summaries/templates.js +245 -0
- package/dist/sync/adapters/base.d.ts +42 -0
- package/dist/sync/adapters/base.js +142 -0
- package/dist/sync/adapters/github.d.ts +45 -0
- package/dist/sync/adapters/github.js +445 -0
- package/dist/sync/adapters/linear.d.ts +40 -0
- package/dist/sync/adapters/linear.js +434 -0
- package/dist/sync/config.d.ts +388 -0
- package/dist/sync/config.js +281 -0
- package/dist/sync/engine.d.ts +112 -0
- package/dist/sync/engine.js +623 -0
- package/dist/sync/index.d.ts +31 -0
- package/dist/sync/index.js +34 -0
- package/dist/sync/integration.d.ts +53 -0
- package/dist/sync/integration.js +231 -0
- package/dist/sync/types.d.ts +249 -0
- package/dist/sync/types.js +30 -0
- package/dist/tickets/index.d.ts +139 -0
- package/dist/tickets/index.js +1406 -0
- package/dist/tickets/types.d.ts +817 -0
- package/dist/tickets/types.js +310 -0
- package/dist/tools/adapters.d.ts +56 -0
- package/dist/tools/adapters.js +183 -0
- package/dist/tools/index.d.ts +66 -0
- package/dist/tools/index.js +105 -0
- package/dist/tools/types.d.ts +117 -0
- package/dist/tools/types.js +20 -0
- package/dist/types/agent.d.ts +101 -0
- package/dist/types/agent.js +2 -0
- package/dist/types/errors.d.ts +150 -0
- package/dist/types/errors.js +338 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +3 -0
- package/dist/types/summary.d.ts +638 -0
- package/dist/types/summary.js +137 -0
- package/dist/types/task.d.ts +123 -0
- package/dist/types/task.js +46 -0
- package/dist/utils/ai-cache.d.ts +72 -0
- package/dist/utils/ai-cache.js +204 -0
- package/dist/utils/ai-inference.d.ts +57 -0
- package/dist/utils/ai-inference.js +190 -0
- package/dist/utils/ai-responder.d.ts +44 -0
- package/dist/utils/ai-responder.js +272 -0
- package/dist/utils/circuit-breaker.d.ts +139 -0
- package/dist/utils/circuit-breaker.js +281 -0
- package/dist/utils/config-loader.d.ts +12 -0
- package/dist/utils/config-loader.js +44 -0
- package/dist/utils/crypto.d.ts +10 -0
- package/dist/utils/crypto.js +59 -0
- package/dist/utils/env-validator.d.ts +44 -0
- package/dist/utils/env-validator.js +236 -0
- package/dist/utils/file-lock.d.ts +85 -0
- package/dist/utils/file-lock.js +204 -0
- package/dist/utils/logger.d.ts +153 -0
- package/dist/utils/logger.js +282 -0
- package/dist/utils/metrics.d.ts +183 -0
- package/dist/utils/metrics.js +345 -0
- package/dist/utils/security.d.ts +90 -0
- package/dist/utils/security.js +347 -0
- package/dist/voice/index.d.ts +79 -0
- package/dist/voice/index.js +144 -0
- package/dist/voice/stt/whisper.d.ts +13 -0
- package/dist/voice/stt/whisper.js +116 -0
- package/dist/voice/tts/elevenlabs.d.ts +18 -0
- package/dist/voice/tts/elevenlabs.js +178 -0
- package/dist/voice/tts/openai-tts.d.ts +19 -0
- package/dist/voice/tts/openai-tts.js +127 -0
- package/dist/voice/tts/system.d.ts +26 -0
- package/dist/voice/tts/system.js +146 -0
- package/dist/voice/wake-word.d.ts +44 -0
- package/dist/voice/wake-word.js +145 -0
- package/docker-compose.yml +222 -0
- package/package.json +154 -0
- package/profclaw.mjs +24 -0
- package/skills/1password/SKILL.md +155 -0
- package/skills/api-tester/SKILL.md +177 -0
- package/skills/apple-notes/SKILL.md +167 -0
- package/skills/apple-reminders/SKILL.md +178 -0
- package/skills/bear-notes/SKILL.md +166 -0
- package/skills/blogwatcher/SKILL.md +177 -0
- package/skills/camsnap/SKILL.md +130 -0
- package/skills/code-generation/SKILL.md +139 -0
- package/skills/code-review/SKILL.md +116 -0
- package/skills/coding-agent/SKILL.md +184 -0
- package/skills/cron-manager/SKILL.md +141 -0
- package/skills/debug-helper/SKILL.md +134 -0
- package/skills/docker-ops/SKILL.md +246 -0
- package/skills/file-manager/SKILL.md +160 -0
- package/skills/git-workflow/SKILL.md +171 -0
- package/skills/github-issues/SKILL.md +244 -0
- package/skills/gog/SKILL.md +191 -0
- package/skills/goplaces/SKILL.md +156 -0
- package/skills/healthcheck/SKILL.md +270 -0
- package/skills/himalaya/SKILL.md +165 -0
- package/skills/mcp-discovery/SKILL.md +109 -0
- package/skills/memory-manager/SKILL.md +151 -0
- package/skills/model-usage/SKILL.md +177 -0
- package/skills/nano-banana-pro/SKILL.md +214 -0
- package/skills/nano-pdf/SKILL.md +165 -0
- package/skills/notion/SKILL.md +147 -0
- package/skills/obsidian/SKILL.md +163 -0
- package/skills/openai-image-gen/SKILL.md +194 -0
- package/skills/openai-whisper/SKILL.md +98 -0
- package/skills/openai-whisper-api/SKILL.md +130 -0
- package/skills/openhue/SKILL.md +203 -0
- package/skills/oracle/SKILL.md +236 -0
- package/skills/phone-control/SKILL.md +201 -0
- package/skills/profclaw-assistant/SKILL.md +81 -0
- package/skills/profclaw-projects/SKILL.md +68 -0
- package/skills/profclaw-tickets/SKILL.md +91 -0
- package/skills/session-logs/SKILL.md +216 -0
- package/skills/sherpa-onnx-tts/SKILL.md +134 -0
- package/skills/skill-creator/SKILL.md +183 -0
- package/skills/songsee/SKILL.md +170 -0
- package/skills/spotify-player/SKILL.md +254 -0
- package/skills/summarize/SKILL.md +155 -0
- package/skills/system-admin/SKILL.md +179 -0
- package/skills/things-mac/SKILL.md +179 -0
- package/skills/tmux/SKILL.md +170 -0
- package/skills/trello/SKILL.md +154 -0
- package/skills/video-frames/SKILL.md +127 -0
- package/skills/weather/SKILL.md +186 -0
- package/skills/web-research/SKILL.md +128 -0
- package/skills/xurl/SKILL.md +198 -0
- package/ui/README.md +73 -0
- package/ui/dist/assets/ActivityView-CkPgKhwm.js +1 -0
- package/ui/dist/assets/AgentList-C3SVdeEz.js +1 -0
- package/ui/dist/assets/AnalyticsDashboard-DVU--vlP.js +1 -0
- package/ui/dist/assets/AreaChart-B5qMEGWj.js +1 -0
- package/ui/dist/assets/CartesianChart-B50bcUJi.js +36 -0
- package/ui/dist/assets/ChatView-BZFJs7w_.js +10 -0
- package/ui/dist/assets/CostsDashboard-ChfH8BlG.js +1 -0
- package/ui/dist/assets/EstimateSelect-CLpB4NQO.js +1 -0
- package/ui/dist/assets/FloatingChatbot-CBzBY9a0.js +2 -0
- package/ui/dist/assets/InviteCodeManagement-DsbdPa6W.js +2 -0
- package/ui/dist/assets/ProjectDetail-BEM3tFXg.js +2 -0
- package/ui/dist/assets/ProjectDetail-D1-0B2xV.css +1 -0
- package/ui/dist/assets/ProjectIcon-CN1FmFAk.js +1 -0
- package/ui/dist/assets/ProjectList-DSDaNhxQ.js +4 -0
- package/ui/dist/assets/Settings-dPVcqC_d.js +6 -0
- package/ui/dist/assets/StatusIndicator-DA3NAo_b.js +1 -0
- package/ui/dist/assets/SummaryDetail-Bjnf9lT8.js +27 -0
- package/ui/dist/assets/SummaryList-ENwKDBKW.js +1 -0
- package/ui/dist/assets/TaskDetail-DnwG6MzB.js +1 -0
- package/ui/dist/assets/TaskList-D9Ug_HiV.js +1 -0
- package/ui/dist/assets/TicketBoard-CviH1571.js +1 -0
- package/ui/dist/assets/TicketDetail-8Jk8O-33.js +1 -0
- package/ui/dist/assets/TicketList-B-iV4rRA.js +1 -0
- package/ui/dist/assets/UserManagement-CPZ8s7s2.js +2 -0
- package/ui/dist/assets/ViewSwitcher-BUyOOWDI.js +1 -0
- package/ui/dist/assets/alert-dialog-BOmnTkN-.js +7 -0
- package/ui/dist/assets/archive-D5my9zOG.js +1 -0
- package/ui/dist/assets/badge-B4ov81_m.js +1 -0
- package/ui/dist/assets/brain-C53ElFLD.js +1 -0
- package/ui/dist/assets/bug-D0TJoCYn.js +1 -0
- package/ui/dist/assets/calendar-BkWIhKa1.js +1 -0
- package/ui/dist/assets/chevron-up-BRTtndUZ.js +1 -0
- package/ui/dist/assets/circle-x-BN89YhbS.js +1 -0
- package/ui/dist/assets/constants-fc7TFI7u.js +1 -0
- package/ui/dist/assets/cpu-B41x1-vV.js +1 -0
- package/ui/dist/assets/database-D9Cnfmzj.js +1 -0
- package/ui/dist/assets/defineProperty-CoXUr7_6.js +2 -0
- package/ui/dist/assets/dialog-DrWB4EYD.js +1 -0
- package/ui/dist/assets/element-adapter-DL0DQilL.js +4 -0
- package/ui/dist/assets/ellipsis-NuUWekvu.js +1 -0
- package/ui/dist/assets/ellipsis-vertical-BueMfuCw.js +1 -0
- package/ui/dist/assets/file-code-HR9829Jc.js +1 -0
- package/ui/dist/assets/folder-open-C_7oYEqe.js +1 -0
- package/ui/dist/assets/funnel-B5gmNXGf.js +1 -0
- package/ui/dist/assets/git-branch-BRMiJmV3.js +1 -0
- package/ui/dist/assets/git-commit-horizontal-CXOUQeJI.js +1 -0
- package/ui/dist/assets/globe-CCspjvus.js +1 -0
- package/ui/dist/assets/hash-g3102kPC.js +1 -0
- package/ui/dist/assets/history-CNqcBBrV.js +1 -0
- package/ui/dist/assets/index-27mTPKuh.js +1 -0
- package/ui/dist/assets/index-BMx3fH-e.js +1 -0
- package/ui/dist/assets/index-C9jNQXzL.js +1 -0
- package/ui/dist/assets/index-CEZ6R2Uw.js +7 -0
- package/ui/dist/assets/index-DURTouJI.js +1 -0
- package/ui/dist/assets/index-WclMPci1.css +1 -0
- package/ui/dist/assets/index-kb4AJXUB.js +67 -0
- package/ui/dist/assets/layers-CLXiHN6o.js +1 -0
- package/ui/dist/assets/layout-dashboard-B07MFhBs.js +1 -0
- package/ui/dist/assets/lightbulb-B2dgG5ks.js +1 -0
- package/ui/dist/assets/link-2-BxNmr9hL.js +1 -0
- package/ui/dist/assets/markdown-renderer-CjU6hBcW.js +36 -0
- package/ui/dist/assets/message-square-Bf2-CVbt.js +1 -0
- package/ui/dist/assets/pencil-D096Ey62.js +1 -0
- package/ui/dist/assets/play-DfdcSI3x.js +1 -0
- package/ui/dist/assets/popover-BV0QJDQq.js +1 -0
- package/ui/dist/assets/progress-DjPEDJfI.js +1 -0
- package/ui/dist/assets/rocket-CPsTc-5G.js +1 -0
- package/ui/dist/assets/select-LsO16slr.js +1 -0
- package/ui/dist/assets/send-BDYBZDUZ.js +1 -0
- package/ui/dist/assets/server-B3k6noce.js +1 -0
- package/ui/dist/assets/settings-2-Cu4xTjhG.js +1 -0
- package/ui/dist/assets/sheet-BScLnPKX.js +1 -0
- package/ui/dist/assets/shield-check-CQqkwufI.js +1 -0
- package/ui/dist/assets/shield-off-ZFruH9KO.js +1 -0
- package/ui/dist/assets/skeleton-CtkIA_MU.js +1 -0
- package/ui/dist/assets/smartphone-DnoksVkc.js +1 -0
- package/ui/dist/assets/square-uD9ZHMfW.js +1 -0
- package/ui/dist/assets/switch-MQPnwGJK.js +1 -0
- package/ui/dist/assets/table-B8cqlywA.js +1 -0
- package/ui/dist/assets/tag-wEJQRWlV.js +1 -0
- package/ui/dist/assets/textarea-D5LJCOGl.js +1 -0
- package/ui/dist/assets/timer-mbGHegmr.js +1 -0
- package/ui/dist/assets/tooltip-Df1CunSp.js +1 -0
- package/ui/dist/assets/trash-2-B4oAXsX-.js +1 -0
- package/ui/dist/assets/trending-up-BGWxvlmZ.js +1 -0
- package/ui/dist/assets/wand-sparkles-CZy4xvL3.js +1 -0
- package/ui/dist/assets/wrench-ByZkjO6m.js +1 -0
- package/ui/dist/audio-worklets/vad-processor.js +132 -0
- package/ui/dist/brand/profclaw-appicon-192.png +0 -0
- package/ui/dist/brand/profclaw-appicon-512.png +0 -0
- package/ui/dist/brand/profclaw-appicon-shadow.svg +51 -0
- package/ui/dist/brand/profclaw-appicon.svg +50 -0
- package/ui/dist/brand/profclaw-favicon-coral-bg-128.png +0 -0
- package/ui/dist/brand/profclaw-favicon-coral-bg-64.png +0 -0
- package/ui/dist/brand/profclaw-favicon-coral-bg.svg +52 -0
- package/ui/dist/brand/profclaw-favicon-coral-body-128.png +0 -0
- package/ui/dist/brand/profclaw-favicon-coral-body.svg +41 -0
- package/ui/dist/brand/profclaw-favicon-shadow-128.png +0 -0
- package/ui/dist/brand/profclaw-favicon-shadow-64.png +0 -0
- package/ui/dist/brand/profclaw-favicon-shadow.svg +51 -0
- package/ui/dist/brand/profclaw-mark-coral-256.png +0 -0
- package/ui/dist/brand/profclaw-mark-coral-64.png +0 -0
- package/ui/dist/brand/profclaw-mark-coral.svg +31 -0
- package/ui/dist/brand/profclaw-mono-white.svg +18 -0
- package/ui/dist/brand/profclaw-text-dark.svg +18 -0
- package/ui/dist/brand/profclaw-text-light.svg +18 -0
- package/ui/dist/brand/profclaw-wordmark-dark.svg +48 -0
- package/ui/dist/brand/profclaw-wordmark-light.svg +48 -0
- package/ui/dist/brand/safari-pinned-tab.svg +15 -0
- package/ui/dist/favicon/android-chrome-192x192.png +0 -0
- package/ui/dist/favicon/android-chrome-384x384.png +0 -0
- package/ui/dist/favicon/android-chrome-512x512.png +0 -0
- package/ui/dist/favicon/apple-touch-icon.png +0 -0
- package/ui/dist/favicon/browserconfig.xml +9 -0
- package/ui/dist/favicon/favicon-16x16.png +0 -0
- package/ui/dist/favicon/favicon-32x32.png +0 -0
- package/ui/dist/favicon/favicon.ico +0 -0
- package/ui/dist/favicon/mstile-150x150.png +0 -0
- package/ui/dist/favicon/safari-pinned-tab.svg +46 -0
- package/ui/dist/favicon/site.webmanifest +22 -0
- package/ui/dist/index.html +32 -0
- package/ui/dist/manifest.json +49 -0
- package/ui/dist/sw.js +124 -0
- package/ui/dist/vite.svg +1 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LINE Provider - Full Implementation
|
|
3
|
+
*
|
|
4
|
+
* LINE Messaging API integration using:
|
|
5
|
+
* - Channel access token authentication (Bearer)
|
|
6
|
+
* - HMAC-SHA256 signature verification (channelSecret)
|
|
7
|
+
* - Push messages to user/group/room IDs
|
|
8
|
+
* - Reply messages via replyToken (within 30s of event)
|
|
9
|
+
* - Media support: images, video, audio, files
|
|
10
|
+
* - Health check via GET /v2/bot/info
|
|
11
|
+
* - Webhook events: message, follow, unfollow, join, leave, etc.
|
|
12
|
+
*
|
|
13
|
+
* API base: https://api.line.me/v2/bot
|
|
14
|
+
* Docs: https://developers.line.biz/en/docs/messaging-api/
|
|
15
|
+
*/
|
|
16
|
+
import { z } from 'zod';
|
|
17
|
+
import type { ChatProvider, LINEAccountConfig, SendResult, IncomingMessage } from '../types.js';
|
|
18
|
+
/** LINE message types */
|
|
19
|
+
declare const LINEMsgType: {
|
|
20
|
+
readonly TEXT: "text";
|
|
21
|
+
readonly IMAGE: "image";
|
|
22
|
+
readonly VIDEO: "video";
|
|
23
|
+
readonly AUDIO: "audio";
|
|
24
|
+
readonly FILE: "file";
|
|
25
|
+
readonly LOCATION: "location";
|
|
26
|
+
readonly STICKER: "sticker";
|
|
27
|
+
readonly FLEX: "flex";
|
|
28
|
+
};
|
|
29
|
+
type LINEMsgTypeValue = (typeof LINEMsgType)[keyof typeof LINEMsgType];
|
|
30
|
+
/** LINE event source types */
|
|
31
|
+
declare const LINESourceType: {
|
|
32
|
+
readonly USER: "user";
|
|
33
|
+
readonly GROUP: "group";
|
|
34
|
+
readonly ROOM: "room";
|
|
35
|
+
};
|
|
36
|
+
interface LINESource {
|
|
37
|
+
type: 'user' | 'group' | 'room';
|
|
38
|
+
userId?: string;
|
|
39
|
+
groupId?: string;
|
|
40
|
+
roomId?: string;
|
|
41
|
+
}
|
|
42
|
+
interface LINEMessageContent {
|
|
43
|
+
id: string;
|
|
44
|
+
type: LINEMsgTypeValue;
|
|
45
|
+
text?: string;
|
|
46
|
+
fileName?: string;
|
|
47
|
+
fileSize?: number;
|
|
48
|
+
duration?: number;
|
|
49
|
+
originalContentUrl?: string;
|
|
50
|
+
previewImageUrl?: string;
|
|
51
|
+
}
|
|
52
|
+
interface LINEEvent {
|
|
53
|
+
type: string;
|
|
54
|
+
message?: LINEMessageContent;
|
|
55
|
+
timestamp: number;
|
|
56
|
+
source: LINESource;
|
|
57
|
+
replyToken?: string;
|
|
58
|
+
mode: 'active' | 'standby';
|
|
59
|
+
webhookEventId?: string;
|
|
60
|
+
deliveryContext?: {
|
|
61
|
+
isRedelivery: boolean;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
interface LINEWebhookBody {
|
|
65
|
+
destination: string;
|
|
66
|
+
events: LINEEvent[];
|
|
67
|
+
}
|
|
68
|
+
export declare const LINEAccountConfigSchema: z.ZodObject<{
|
|
69
|
+
id: z.ZodString;
|
|
70
|
+
name: z.ZodOptional<z.ZodString>;
|
|
71
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
72
|
+
isDefault: z.ZodOptional<z.ZodBoolean>;
|
|
73
|
+
provider: z.ZodLiteral<"line">;
|
|
74
|
+
channelAccessToken: z.ZodOptional<z.ZodString>;
|
|
75
|
+
channelSecret: z.ZodOptional<z.ZodString>;
|
|
76
|
+
webhookUrl: z.ZodOptional<z.ZodString>;
|
|
77
|
+
}, "strip", z.ZodTypeAny, {
|
|
78
|
+
id: string;
|
|
79
|
+
provider: "line";
|
|
80
|
+
enabled: boolean;
|
|
81
|
+
name?: string | undefined;
|
|
82
|
+
isDefault?: boolean | undefined;
|
|
83
|
+
webhookUrl?: string | undefined;
|
|
84
|
+
channelAccessToken?: string | undefined;
|
|
85
|
+
channelSecret?: string | undefined;
|
|
86
|
+
}, {
|
|
87
|
+
id: string;
|
|
88
|
+
provider: "line";
|
|
89
|
+
name?: string | undefined;
|
|
90
|
+
isDefault?: boolean | undefined;
|
|
91
|
+
enabled?: boolean | undefined;
|
|
92
|
+
webhookUrl?: string | undefined;
|
|
93
|
+
channelAccessToken?: string | undefined;
|
|
94
|
+
channelSecret?: string | undefined;
|
|
95
|
+
}>;
|
|
96
|
+
type LINEConfig = z.infer<typeof LINEAccountConfigSchema>;
|
|
97
|
+
/**
|
|
98
|
+
* Parse all message events from a LINE webhook body.
|
|
99
|
+
* Returns normalized IncomingMessage objects for supported event types.
|
|
100
|
+
*/
|
|
101
|
+
export declare function parseLINEWebhook(webhookBody: LINEWebhookBody): IncomingMessage[];
|
|
102
|
+
/**
|
|
103
|
+
* Send a reply message using a replyToken from a LINE webhook event.
|
|
104
|
+
* Reply tokens are valid for 30 seconds after the event is received.
|
|
105
|
+
* Using reply tokens is more cost-efficient than push messages.
|
|
106
|
+
*/
|
|
107
|
+
export declare function replyMessage(replyToken: string, text: string, config?: LINEConfig | null): Promise<SendResult>;
|
|
108
|
+
export declare function setLINEConfig(config: LINEConfig): void;
|
|
109
|
+
export declare function clearLINEConfig(): void;
|
|
110
|
+
export declare const lineProvider: ChatProvider<LINEAccountConfig>;
|
|
111
|
+
export type { LINEConfig, LINEEvent, LINESource, LINEMessageContent, LINEWebhookBody };
|
|
112
|
+
export { LINEMsgType, LINESourceType };
|
|
113
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LINE Provider - Full Implementation
|
|
3
|
+
*
|
|
4
|
+
* LINE Messaging API integration using:
|
|
5
|
+
* - Channel access token authentication (Bearer)
|
|
6
|
+
* - HMAC-SHA256 signature verification (channelSecret)
|
|
7
|
+
* - Push messages to user/group/room IDs
|
|
8
|
+
* - Reply messages via replyToken (within 30s of event)
|
|
9
|
+
* - Media support: images, video, audio, files
|
|
10
|
+
* - Health check via GET /v2/bot/info
|
|
11
|
+
* - Webhook events: message, follow, unfollow, join, leave, etc.
|
|
12
|
+
*
|
|
13
|
+
* API base: https://api.line.me/v2/bot
|
|
14
|
+
* Docs: https://developers.line.biz/en/docs/messaging-api/
|
|
15
|
+
*/
|
|
16
|
+
import { createHmac } from 'node:crypto';
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import { logger } from '../../../utils/logger.js';
|
|
19
|
+
// LINE API TYPES
|
|
20
|
+
/** LINE message types */
|
|
21
|
+
const LINEMsgType = {
|
|
22
|
+
TEXT: 'text',
|
|
23
|
+
IMAGE: 'image',
|
|
24
|
+
VIDEO: 'video',
|
|
25
|
+
AUDIO: 'audio',
|
|
26
|
+
FILE: 'file',
|
|
27
|
+
LOCATION: 'location',
|
|
28
|
+
STICKER: 'sticker',
|
|
29
|
+
FLEX: 'flex',
|
|
30
|
+
};
|
|
31
|
+
/** LINE event source types */
|
|
32
|
+
const LINESourceType = {
|
|
33
|
+
USER: 'user',
|
|
34
|
+
GROUP: 'group',
|
|
35
|
+
ROOM: 'room',
|
|
36
|
+
};
|
|
37
|
+
// CONFIGURATION
|
|
38
|
+
export const LINEAccountConfigSchema = z.object({
|
|
39
|
+
id: z.string(),
|
|
40
|
+
name: z.string().optional(),
|
|
41
|
+
enabled: z.boolean().default(true),
|
|
42
|
+
isDefault: z.boolean().optional(),
|
|
43
|
+
provider: z.literal('line'),
|
|
44
|
+
channelAccessToken: z.string().optional(),
|
|
45
|
+
channelSecret: z.string().optional(),
|
|
46
|
+
webhookUrl: z.string().url().optional(),
|
|
47
|
+
});
|
|
48
|
+
// METADATA
|
|
49
|
+
const meta = {
|
|
50
|
+
id: 'line',
|
|
51
|
+
name: 'LINE',
|
|
52
|
+
description: 'LINE Messaging API with push and reply message support',
|
|
53
|
+
icon: 'LINE icon',
|
|
54
|
+
docsUrl: 'https://developers.line.biz/en/docs/messaging-api/',
|
|
55
|
+
order: 11,
|
|
56
|
+
color: '#06C755',
|
|
57
|
+
};
|
|
58
|
+
// CAPABILITIES
|
|
59
|
+
const capabilities = {
|
|
60
|
+
chatTypes: ['direct', 'group'],
|
|
61
|
+
send: true,
|
|
62
|
+
receive: true,
|
|
63
|
+
slashCommands: false,
|
|
64
|
+
interactiveComponents: false,
|
|
65
|
+
reactions: false,
|
|
66
|
+
edit: false,
|
|
67
|
+
delete: false,
|
|
68
|
+
threads: false,
|
|
69
|
+
media: true,
|
|
70
|
+
richBlocks: false, // Flex Messages deferred
|
|
71
|
+
oauth: false,
|
|
72
|
+
webhooks: true,
|
|
73
|
+
realtime: false,
|
|
74
|
+
};
|
|
75
|
+
// STATE
|
|
76
|
+
let currentConfig = null;
|
|
77
|
+
const LINE_API_BASE = 'https://api.line.me/v2/bot';
|
|
78
|
+
// HELPER FUNCTIONS
|
|
79
|
+
function getAuthHeaders(config) {
|
|
80
|
+
const token = (config ?? currentConfig)?.channelAccessToken;
|
|
81
|
+
return {
|
|
82
|
+
'Authorization': token ? `Bearer ${token}` : '',
|
|
83
|
+
'Content-Type': 'application/json',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
async function callLINEApi(endpoint, method = 'GET', body, config) {
|
|
87
|
+
const headers = getAuthHeaders(config);
|
|
88
|
+
if (!headers['Authorization'] || headers['Authorization'] === 'Bearer ') {
|
|
89
|
+
return { ok: false, error: 'Channel access token not configured' };
|
|
90
|
+
}
|
|
91
|
+
const url = `${LINE_API_BASE}${endpoint}`;
|
|
92
|
+
try {
|
|
93
|
+
const response = await fetch(url, {
|
|
94
|
+
method,
|
|
95
|
+
headers,
|
|
96
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
97
|
+
});
|
|
98
|
+
if (response.status === 200 && method === 'POST') {
|
|
99
|
+
// LINE push/reply returns 200 with an empty body or sentMessages
|
|
100
|
+
const text = await response.text();
|
|
101
|
+
if (!text || text === '{}') {
|
|
102
|
+
return { ok: true, status: 200 };
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const data = JSON.parse(text);
|
|
106
|
+
return { ok: true, data, status: 200 };
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return { ok: true, status: 200 };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const data = await response.json();
|
|
113
|
+
if (!response.ok) {
|
|
114
|
+
const errData = data;
|
|
115
|
+
return {
|
|
116
|
+
ok: false,
|
|
117
|
+
status: response.status,
|
|
118
|
+
error: errData.message ?? `HTTP ${response.status}`,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return { ok: true, data, status: response.status };
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
logger.error('[LINE] API call failed:', error instanceof Error ? error : undefined);
|
|
125
|
+
return {
|
|
126
|
+
ok: false,
|
|
127
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Derive the chat type from a LINE event source.
|
|
133
|
+
* Group and room sources map to 'group'; user sources map to 'direct'.
|
|
134
|
+
*/
|
|
135
|
+
function getLineChatType(source) {
|
|
136
|
+
if (source.type === LINESourceType.GROUP || source.type === LINESourceType.ROOM) {
|
|
137
|
+
return 'group';
|
|
138
|
+
}
|
|
139
|
+
return 'direct';
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolve the chat ID from a LINE event source.
|
|
143
|
+
* Groups use groupId, rooms use roomId, direct uses userId.
|
|
144
|
+
*/
|
|
145
|
+
function getChatId(source) {
|
|
146
|
+
if (source.type === LINESourceType.GROUP && source.groupId) {
|
|
147
|
+
return source.groupId;
|
|
148
|
+
}
|
|
149
|
+
if (source.type === LINESourceType.ROOM && source.roomId) {
|
|
150
|
+
return source.roomId;
|
|
151
|
+
}
|
|
152
|
+
return source.userId ?? '';
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Map LINE message type to attachment type for media messages.
|
|
156
|
+
*/
|
|
157
|
+
function lineTypeToAttachmentType(msgType) {
|
|
158
|
+
const map = {
|
|
159
|
+
[LINEMsgType.IMAGE]: 'image',
|
|
160
|
+
[LINEMsgType.VIDEO]: 'video',
|
|
161
|
+
[LINEMsgType.AUDIO]: 'audio',
|
|
162
|
+
[LINEMsgType.FILE]: 'file',
|
|
163
|
+
};
|
|
164
|
+
return map[msgType] ?? null;
|
|
165
|
+
}
|
|
166
|
+
// AUTH ADAPTER
|
|
167
|
+
const authAdapter = {
|
|
168
|
+
getAuthUrl(_state, _scopes) {
|
|
169
|
+
// LINE Messaging API does not use OAuth for bot authentication.
|
|
170
|
+
// Channel access tokens are issued via the LINE Developers Console
|
|
171
|
+
// or via the Channel Access Token API.
|
|
172
|
+
throw new Error('LINE does not use OAuth for bot authentication. ' +
|
|
173
|
+
'Issue a channel access token via the LINE Developers Console ' +
|
|
174
|
+
'and supply it in the configuration.');
|
|
175
|
+
},
|
|
176
|
+
async exchangeCode(_code) {
|
|
177
|
+
throw new Error('LINE does not use OAuth authorization codes for bot authentication. ' +
|
|
178
|
+
'Use the LINE Channel Access Token API or the Developers Console.');
|
|
179
|
+
},
|
|
180
|
+
verifyWebhook(signature, _timestamp, body) {
|
|
181
|
+
// LINE uses HMAC-SHA256 of the raw request body with the channelSecret.
|
|
182
|
+
// The resulting digest is base64-encoded and sent in the X-Line-Signature header.
|
|
183
|
+
const secret = currentConfig?.channelSecret;
|
|
184
|
+
if (!secret) {
|
|
185
|
+
logger.warn('[LINE] verifyWebhook: channelSecret not configured, skipping verification');
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
try {
|
|
189
|
+
const expected = createHmac('sha256', secret)
|
|
190
|
+
.update(body, 'utf8')
|
|
191
|
+
.digest('base64');
|
|
192
|
+
return signature === expected;
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
logger.error('[LINE] verifyWebhook: HMAC computation failed:', error instanceof Error ? error : undefined);
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
// OUTBOUND ADAPTER
|
|
201
|
+
const outboundAdapter = {
|
|
202
|
+
async send(message) {
|
|
203
|
+
if (!currentConfig?.channelAccessToken) {
|
|
204
|
+
return { success: false, error: 'Channel access token not configured' };
|
|
205
|
+
}
|
|
206
|
+
if (!message.to) {
|
|
207
|
+
return { success: false, error: 'Target user ID or group ID (to) is required' };
|
|
208
|
+
}
|
|
209
|
+
const lineMessage = {
|
|
210
|
+
type: LINEMsgType.TEXT,
|
|
211
|
+
text: message.text ?? '',
|
|
212
|
+
};
|
|
213
|
+
// LINE push message: send to any user/group/room at any time
|
|
214
|
+
const pushBody = {
|
|
215
|
+
to: message.to,
|
|
216
|
+
messages: [lineMessage],
|
|
217
|
+
};
|
|
218
|
+
const result = await callLINEApi('/message/push', 'POST', pushBody);
|
|
219
|
+
if (result.ok) {
|
|
220
|
+
const messageId = result.data?.sentMessages?.[0]?.id;
|
|
221
|
+
return {
|
|
222
|
+
success: true,
|
|
223
|
+
messageId,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
success: false,
|
|
228
|
+
error: result.error ?? 'Failed to send message',
|
|
229
|
+
};
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
// INBOUND ADAPTER
|
|
233
|
+
const inboundAdapter = {
|
|
234
|
+
parseMessage(payload) {
|
|
235
|
+
// Accepts a single LINEEvent or a LINEWebhookBody with events[].
|
|
236
|
+
// The webhook body has { destination, events[] }; individual event dispatch
|
|
237
|
+
// is handled by parseLINEWebhook() below. Here we accept either form.
|
|
238
|
+
let event;
|
|
239
|
+
if (payload !== null &&
|
|
240
|
+
typeof payload === 'object' &&
|
|
241
|
+
'events' in payload) {
|
|
242
|
+
// Full webhook body - parse first message event only
|
|
243
|
+
const webhookBody = payload;
|
|
244
|
+
const first = webhookBody.events.find((e) => e.type === 'message');
|
|
245
|
+
if (!first)
|
|
246
|
+
return null;
|
|
247
|
+
event = first;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
event = payload;
|
|
251
|
+
}
|
|
252
|
+
if (!event || event.type !== 'message')
|
|
253
|
+
return null;
|
|
254
|
+
const msg = event.message;
|
|
255
|
+
if (!msg)
|
|
256
|
+
return null;
|
|
257
|
+
// Supported message types for normalization
|
|
258
|
+
const supportedTypes = [
|
|
259
|
+
LINEMsgType.TEXT,
|
|
260
|
+
LINEMsgType.IMAGE,
|
|
261
|
+
LINEMsgType.VIDEO,
|
|
262
|
+
LINEMsgType.AUDIO,
|
|
263
|
+
LINEMsgType.FILE,
|
|
264
|
+
];
|
|
265
|
+
if (!supportedTypes.includes(msg.type)) {
|
|
266
|
+
logger.debug(`[LINE] parseMessage: unsupported message type '${msg.type}', skipping`);
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
const source = event.source;
|
|
270
|
+
const senderId = source.userId ?? '';
|
|
271
|
+
const chatType = getLineChatType(source);
|
|
272
|
+
const chatId = getChatId(source);
|
|
273
|
+
const attachments = [];
|
|
274
|
+
const attachType = lineTypeToAttachmentType(msg.type);
|
|
275
|
+
if (attachType) {
|
|
276
|
+
// LINE media content is fetched via GET /v2/bot/message/{messageId}/content
|
|
277
|
+
// We record the content endpoint URL as the attachment URL for downstream fetching.
|
|
278
|
+
attachments.push({
|
|
279
|
+
type: attachType,
|
|
280
|
+
url: `${LINE_API_BASE}/message/${msg.id}/content`,
|
|
281
|
+
name: msg.fileName,
|
|
282
|
+
size: msg.fileSize,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
return {
|
|
286
|
+
id: msg.id,
|
|
287
|
+
provider: 'line',
|
|
288
|
+
accountId: currentConfig?.id ?? 'default',
|
|
289
|
+
senderId,
|
|
290
|
+
senderName: senderId, // Display name requires separate GET /v2/bot/profile/{userId}
|
|
291
|
+
senderUsername: senderId,
|
|
292
|
+
chatType,
|
|
293
|
+
chatId,
|
|
294
|
+
chatName: undefined, // Resolved separately via LINE group/room profile API
|
|
295
|
+
threadId: undefined, // LINE does not support threads
|
|
296
|
+
replyToId: undefined,
|
|
297
|
+
text: msg.text ?? '',
|
|
298
|
+
rawContent: event,
|
|
299
|
+
timestamp: new Date(event.timestamp),
|
|
300
|
+
attachments: attachments.length > 0 ? attachments : undefined,
|
|
301
|
+
};
|
|
302
|
+
},
|
|
303
|
+
parseCommand(_payload) {
|
|
304
|
+
// LINE does not have native slash commands.
|
|
305
|
+
// Command-like behavior is implemented at the application layer
|
|
306
|
+
// by inspecting message text for prefix patterns (e.g., "/command").
|
|
307
|
+
return null;
|
|
308
|
+
},
|
|
309
|
+
parseAction(_payload) {
|
|
310
|
+
// LINE postback actions (button taps) are handled as separate event types
|
|
311
|
+
// ('postback') and are not normalized here. Full postback support is deferred.
|
|
312
|
+
return null;
|
|
313
|
+
},
|
|
314
|
+
buildCommandResponse(response) {
|
|
315
|
+
// Returns a LINE message object ready for use in a push or reply body.
|
|
316
|
+
return {
|
|
317
|
+
type: LINEMsgType.TEXT,
|
|
318
|
+
text: response.text ?? '',
|
|
319
|
+
};
|
|
320
|
+
},
|
|
321
|
+
buildActionResponse(response) {
|
|
322
|
+
return {
|
|
323
|
+
type: LINEMsgType.TEXT,
|
|
324
|
+
text: response.text ?? '',
|
|
325
|
+
};
|
|
326
|
+
},
|
|
327
|
+
};
|
|
328
|
+
// STATUS ADAPTER
|
|
329
|
+
const statusAdapter = {
|
|
330
|
+
isConfigured(config) {
|
|
331
|
+
return !!(config.channelAccessToken && config.channelSecret);
|
|
332
|
+
},
|
|
333
|
+
async checkHealth(config) {
|
|
334
|
+
if (!config.channelAccessToken) {
|
|
335
|
+
return { connected: false, error: 'channelAccessToken is required' };
|
|
336
|
+
}
|
|
337
|
+
const lineConfig = {
|
|
338
|
+
id: config.id,
|
|
339
|
+
name: config.name,
|
|
340
|
+
enabled: config.enabled ?? true,
|
|
341
|
+
isDefault: config.isDefault,
|
|
342
|
+
provider: 'line',
|
|
343
|
+
channelAccessToken: config.channelAccessToken,
|
|
344
|
+
channelSecret: config.channelSecret,
|
|
345
|
+
webhookUrl: config.webhookUrl,
|
|
346
|
+
};
|
|
347
|
+
const start = Date.now();
|
|
348
|
+
const result = await callLINEApi('/info', 'GET', undefined, lineConfig);
|
|
349
|
+
const latencyMs = Date.now() - start;
|
|
350
|
+
if (result.ok && result.data) {
|
|
351
|
+
return {
|
|
352
|
+
connected: true,
|
|
353
|
+
latencyMs,
|
|
354
|
+
details: {
|
|
355
|
+
userId: result.data.userId,
|
|
356
|
+
basicId: result.data.basicId,
|
|
357
|
+
displayName: result.data.displayName,
|
|
358
|
+
chatMode: result.data.chatMode,
|
|
359
|
+
webhookConfigured: !!config.webhookUrl,
|
|
360
|
+
signatureVerificationEnabled: !!config.channelSecret,
|
|
361
|
+
},
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
return {
|
|
365
|
+
connected: false,
|
|
366
|
+
latencyMs,
|
|
367
|
+
error: result.error ?? 'Failed to connect to LINE Messaging API',
|
|
368
|
+
};
|
|
369
|
+
},
|
|
370
|
+
};
|
|
371
|
+
// EXPORTED HELPERS
|
|
372
|
+
/**
|
|
373
|
+
* Parse all message events from a LINE webhook body.
|
|
374
|
+
* Returns normalized IncomingMessage objects for supported event types.
|
|
375
|
+
*/
|
|
376
|
+
export function parseLINEWebhook(webhookBody) {
|
|
377
|
+
const messages = [];
|
|
378
|
+
for (const event of webhookBody.events) {
|
|
379
|
+
if (event.type !== 'message')
|
|
380
|
+
continue;
|
|
381
|
+
const parsed = inboundAdapter.parseMessage(event);
|
|
382
|
+
if (parsed) {
|
|
383
|
+
messages.push(parsed);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
return messages;
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Send a reply message using a replyToken from a LINE webhook event.
|
|
390
|
+
* Reply tokens are valid for 30 seconds after the event is received.
|
|
391
|
+
* Using reply tokens is more cost-efficient than push messages.
|
|
392
|
+
*/
|
|
393
|
+
export async function replyMessage(replyToken, text, config) {
|
|
394
|
+
const effectiveConfig = config ?? currentConfig;
|
|
395
|
+
if (!effectiveConfig?.channelAccessToken) {
|
|
396
|
+
return { success: false, error: 'Channel access token not configured' };
|
|
397
|
+
}
|
|
398
|
+
const replyBody = {
|
|
399
|
+
replyToken,
|
|
400
|
+
messages: [{ type: LINEMsgType.TEXT, text }],
|
|
401
|
+
};
|
|
402
|
+
const result = await callLINEApi('/message/reply', 'POST', replyBody, effectiveConfig);
|
|
403
|
+
if (result.ok) {
|
|
404
|
+
const messageId = result.data?.sentMessages?.[0]?.id;
|
|
405
|
+
return { success: true, messageId };
|
|
406
|
+
}
|
|
407
|
+
return {
|
|
408
|
+
success: false,
|
|
409
|
+
error: result.error ?? 'Failed to send reply message',
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
// CONFIG MANAGEMENT
|
|
413
|
+
export function setLINEConfig(config) {
|
|
414
|
+
currentConfig = config;
|
|
415
|
+
}
|
|
416
|
+
export function clearLINEConfig() {
|
|
417
|
+
currentConfig = null;
|
|
418
|
+
}
|
|
419
|
+
// PROVIDER EXPORT
|
|
420
|
+
export const lineProvider = {
|
|
421
|
+
meta,
|
|
422
|
+
capabilities,
|
|
423
|
+
defaultConfig: {
|
|
424
|
+
provider: 'line',
|
|
425
|
+
enabled: true,
|
|
426
|
+
},
|
|
427
|
+
configSchema: LINEAccountConfigSchema,
|
|
428
|
+
auth: authAdapter,
|
|
429
|
+
outbound: outboundAdapter,
|
|
430
|
+
inbound: inboundAdapter,
|
|
431
|
+
status: statusAdapter,
|
|
432
|
+
};
|
|
433
|
+
export { LINEMsgType, LINESourceType };
|
|
434
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Matrix Provider - Full Implementation
|
|
3
|
+
*
|
|
4
|
+
* Matrix Client-Server API v1.x integration using:
|
|
5
|
+
* - Bearer token authentication (access token)
|
|
6
|
+
* - Room-based messaging (direct, group, channel)
|
|
7
|
+
* - Thread support via m.thread relation
|
|
8
|
+
* - Message send via PUT (idempotent transaction IDs)
|
|
9
|
+
* - Health via GET /account/whoami
|
|
10
|
+
* - Room allowlist for security scoping
|
|
11
|
+
* - E2EE flag (placeholder; actual Olm/Megolm crypto deferred)
|
|
12
|
+
*
|
|
13
|
+
* API base: {homeserverUrl}/_matrix/client/v3
|
|
14
|
+
* Spec: https://spec.matrix.org/v1.9/client-server-api/
|
|
15
|
+
*/
|
|
16
|
+
import { z } from 'zod';
|
|
17
|
+
import type { ChatProvider, MatrixAccountConfig, IncomingMessage } from '../types.js';
|
|
18
|
+
/** Matrix event types for m.room.message */
|
|
19
|
+
declare const MatrixMsgType: {
|
|
20
|
+
readonly TEXT: "m.text";
|
|
21
|
+
readonly NOTICE: "m.notice";
|
|
22
|
+
readonly EMOTE: "m.emote";
|
|
23
|
+
readonly IMAGE: "m.image";
|
|
24
|
+
readonly VIDEO: "m.video";
|
|
25
|
+
readonly AUDIO: "m.audio";
|
|
26
|
+
readonly FILE: "m.file";
|
|
27
|
+
};
|
|
28
|
+
/** Matrix room join rules */
|
|
29
|
+
declare const MatrixRoomType: {
|
|
30
|
+
readonly DIRECT: "m.direct";
|
|
31
|
+
readonly GROUP: "group";
|
|
32
|
+
};
|
|
33
|
+
type MatrixMsgTypeValue = (typeof MatrixMsgType)[keyof typeof MatrixMsgType];
|
|
34
|
+
interface MatrixEventContent {
|
|
35
|
+
msgtype?: MatrixMsgTypeValue;
|
|
36
|
+
body?: string;
|
|
37
|
+
format?: string;
|
|
38
|
+
formatted_body?: string;
|
|
39
|
+
url?: string;
|
|
40
|
+
info?: {
|
|
41
|
+
mimetype?: string;
|
|
42
|
+
size?: number;
|
|
43
|
+
w?: number;
|
|
44
|
+
h?: number;
|
|
45
|
+
duration?: number;
|
|
46
|
+
};
|
|
47
|
+
/** Relation metadata (m.thread, m.replace, m.annotation, m.in_reply_to) */
|
|
48
|
+
'm.relates_to'?: {
|
|
49
|
+
rel_type?: string;
|
|
50
|
+
event_id?: string;
|
|
51
|
+
is_falling_back?: boolean;
|
|
52
|
+
/** Annotation reaction key (emoji) for m.annotation rel_type */
|
|
53
|
+
key?: string;
|
|
54
|
+
'm.in_reply_to'?: {
|
|
55
|
+
event_id: string;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
'm.new_content'?: {
|
|
59
|
+
msgtype?: MatrixMsgTypeValue;
|
|
60
|
+
body?: string;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
interface MatrixEvent {
|
|
64
|
+
event_id: string;
|
|
65
|
+
type: string;
|
|
66
|
+
room_id: string;
|
|
67
|
+
sender: string;
|
|
68
|
+
origin_server_ts: number;
|
|
69
|
+
content: MatrixEventContent;
|
|
70
|
+
unsigned?: {
|
|
71
|
+
age?: number;
|
|
72
|
+
transaction_id?: string;
|
|
73
|
+
'm.relations'?: Record<string, unknown>;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
interface MatrixRoomInfo {
|
|
77
|
+
room_id: string;
|
|
78
|
+
name?: string;
|
|
79
|
+
canonical_alias?: string;
|
|
80
|
+
is_direct?: boolean;
|
|
81
|
+
}
|
|
82
|
+
interface MatrixSyncRoomsJoined {
|
|
83
|
+
timeline?: {
|
|
84
|
+
events: MatrixEvent[];
|
|
85
|
+
limited?: boolean;
|
|
86
|
+
prev_batch?: string;
|
|
87
|
+
};
|
|
88
|
+
state?: {
|
|
89
|
+
events: MatrixEvent[];
|
|
90
|
+
};
|
|
91
|
+
account_data?: {
|
|
92
|
+
events: MatrixEvent[];
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
interface MatrixSyncResponse {
|
|
96
|
+
next_batch: string;
|
|
97
|
+
rooms?: {
|
|
98
|
+
join?: Record<string, MatrixSyncRoomsJoined>;
|
|
99
|
+
invite?: Record<string, unknown>;
|
|
100
|
+
leave?: Record<string, unknown>;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export declare const MatrixAccountConfigSchema: z.ZodObject<{
|
|
104
|
+
id: z.ZodString;
|
|
105
|
+
name: z.ZodOptional<z.ZodString>;
|
|
106
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
107
|
+
isDefault: z.ZodOptional<z.ZodBoolean>;
|
|
108
|
+
provider: z.ZodLiteral<"matrix">;
|
|
109
|
+
homeserverUrl: z.ZodOptional<z.ZodString>;
|
|
110
|
+
accessToken: z.ZodOptional<z.ZodString>;
|
|
111
|
+
userId: z.ZodOptional<z.ZodString>;
|
|
112
|
+
deviceId: z.ZodOptional<z.ZodString>;
|
|
113
|
+
enableEncryption: z.ZodDefault<z.ZodBoolean>;
|
|
114
|
+
allowedRoomIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
115
|
+
}, "strip", z.ZodTypeAny, {
|
|
116
|
+
id: string;
|
|
117
|
+
provider: "matrix";
|
|
118
|
+
enabled: boolean;
|
|
119
|
+
enableEncryption: boolean;
|
|
120
|
+
name?: string | undefined;
|
|
121
|
+
userId?: string | undefined;
|
|
122
|
+
accessToken?: string | undefined;
|
|
123
|
+
isDefault?: boolean | undefined;
|
|
124
|
+
deviceId?: string | undefined;
|
|
125
|
+
homeserverUrl?: string | undefined;
|
|
126
|
+
allowedRoomIds?: string[] | undefined;
|
|
127
|
+
}, {
|
|
128
|
+
id: string;
|
|
129
|
+
provider: "matrix";
|
|
130
|
+
name?: string | undefined;
|
|
131
|
+
userId?: string | undefined;
|
|
132
|
+
accessToken?: string | undefined;
|
|
133
|
+
isDefault?: boolean | undefined;
|
|
134
|
+
enabled?: boolean | undefined;
|
|
135
|
+
deviceId?: string | undefined;
|
|
136
|
+
homeserverUrl?: string | undefined;
|
|
137
|
+
enableEncryption?: boolean | undefined;
|
|
138
|
+
allowedRoomIds?: string[] | undefined;
|
|
139
|
+
}>;
|
|
140
|
+
type MatrixConfig = z.infer<typeof MatrixAccountConfigSchema>;
|
|
141
|
+
/**
|
|
142
|
+
* Parse incoming events from a Matrix /sync response.
|
|
143
|
+
* Yields normalized IncomingMessage objects for all m.room.message events
|
|
144
|
+
* in joined rooms that pass the allowlist filter.
|
|
145
|
+
*/
|
|
146
|
+
export declare function parseSyncResponse(syncResponse: MatrixSyncResponse, directRoomIds?: Set<string>): IncomingMessage[];
|
|
147
|
+
/**
|
|
148
|
+
* Fetch joined room info for a specific room.
|
|
149
|
+
* Returns room name and whether it's a direct message.
|
|
150
|
+
*/
|
|
151
|
+
export declare function getRoomInfo(roomId: string, config?: MatrixConfig | null): Promise<{
|
|
152
|
+
ok: boolean;
|
|
153
|
+
data?: MatrixRoomInfo;
|
|
154
|
+
error?: string;
|
|
155
|
+
}>;
|
|
156
|
+
export declare function setMatrixConfig(config: MatrixConfig): void;
|
|
157
|
+
export declare function clearMatrixConfig(): void;
|
|
158
|
+
export declare const matrixProvider: ChatProvider<MatrixAccountConfig>;
|
|
159
|
+
export type { MatrixConfig, MatrixEvent, MatrixEventContent, MatrixSyncResponse };
|
|
160
|
+
export { MatrixMsgType, MatrixRoomType };
|
|
161
|
+
//# sourceMappingURL=index.d.ts.map
|