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,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Watcher
|
|
3
|
+
*
|
|
4
|
+
* Automatic memory sync based on OpenClaw's architecture.
|
|
5
|
+
* Features:
|
|
6
|
+
* - File watching with chokidar for automatic sync
|
|
7
|
+
* - Dirty flag to trigger sync before search
|
|
8
|
+
* - Debounced sync on file changes
|
|
9
|
+
* - Warm session sync on session start
|
|
10
|
+
*/
|
|
11
|
+
import { type MemoryConfig, type SearchResult } from './memory-service.js';
|
|
12
|
+
export interface MemoryWatcherOptions {
|
|
13
|
+
/** Base path to watch for memory files */
|
|
14
|
+
basePath: string;
|
|
15
|
+
/** Memory configuration */
|
|
16
|
+
config?: MemoryConfig;
|
|
17
|
+
/** Callback when sync completes */
|
|
18
|
+
onSyncComplete?: (result: {
|
|
19
|
+
added: number;
|
|
20
|
+
updated: number;
|
|
21
|
+
removed: number;
|
|
22
|
+
}) => void;
|
|
23
|
+
/** Callback when sync starts */
|
|
24
|
+
onSyncStart?: () => void;
|
|
25
|
+
/** Callback on errors */
|
|
26
|
+
onError?: (error: Error) => void;
|
|
27
|
+
}
|
|
28
|
+
export interface MemoryWatcherState {
|
|
29
|
+
/** Whether files have changed since last sync */
|
|
30
|
+
dirty: boolean;
|
|
31
|
+
/** Whether a sync is currently in progress */
|
|
32
|
+
syncing: boolean;
|
|
33
|
+
/** Timestamp of last successful sync */
|
|
34
|
+
lastSyncAt: number | null;
|
|
35
|
+
/** Number of files being watched */
|
|
36
|
+
watchedFiles: number;
|
|
37
|
+
/** Whether the watcher is active */
|
|
38
|
+
watching: boolean;
|
|
39
|
+
}
|
|
40
|
+
export declare class MemoryWatcher {
|
|
41
|
+
private watcher;
|
|
42
|
+
private basePath;
|
|
43
|
+
private config;
|
|
44
|
+
private state;
|
|
45
|
+
private debounceTimer;
|
|
46
|
+
private onSyncComplete?;
|
|
47
|
+
private onSyncStart?;
|
|
48
|
+
private onError?;
|
|
49
|
+
constructor(options: MemoryWatcherOptions);
|
|
50
|
+
/**
|
|
51
|
+
* Get current watcher state
|
|
52
|
+
*/
|
|
53
|
+
getState(): MemoryWatcherState;
|
|
54
|
+
/**
|
|
55
|
+
* Check if files need to be synced
|
|
56
|
+
*/
|
|
57
|
+
isDirty(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Mark as dirty (files changed)
|
|
60
|
+
*/
|
|
61
|
+
markDirty(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Start watching memory files
|
|
64
|
+
*/
|
|
65
|
+
start(): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Stop watching
|
|
68
|
+
*/
|
|
69
|
+
stop(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Handle file change events
|
|
72
|
+
*/
|
|
73
|
+
private handleFileChange;
|
|
74
|
+
/**
|
|
75
|
+
* Schedule a debounced sync
|
|
76
|
+
*/
|
|
77
|
+
private scheduleSync;
|
|
78
|
+
/**
|
|
79
|
+
* Perform a sync operation
|
|
80
|
+
*/
|
|
81
|
+
sync(): Promise<{
|
|
82
|
+
added: number;
|
|
83
|
+
updated: number;
|
|
84
|
+
removed: number;
|
|
85
|
+
}>;
|
|
86
|
+
/**
|
|
87
|
+
* Search with automatic sync if dirty
|
|
88
|
+
* Implements the onSearch auto-sync pattern from OpenClaw
|
|
89
|
+
*/
|
|
90
|
+
search(query: string, maxResults?: number): Promise<SearchResult>;
|
|
91
|
+
/**
|
|
92
|
+
* Warm session - sync on session start
|
|
93
|
+
* Call this when a new chat session starts
|
|
94
|
+
*/
|
|
95
|
+
warmSession(): Promise<void>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get or create the global memory watcher
|
|
99
|
+
*/
|
|
100
|
+
export declare function getMemoryWatcher(): MemoryWatcher | null;
|
|
101
|
+
/**
|
|
102
|
+
* Initialize the global memory watcher
|
|
103
|
+
*/
|
|
104
|
+
export declare function initMemoryWatcher(options: MemoryWatcherOptions): Promise<MemoryWatcher>;
|
|
105
|
+
/**
|
|
106
|
+
* Stop the global memory watcher
|
|
107
|
+
*/
|
|
108
|
+
export declare function stopMemoryWatcher(): Promise<void>;
|
|
109
|
+
declare const _default: {
|
|
110
|
+
MemoryWatcher: typeof MemoryWatcher;
|
|
111
|
+
getMemoryWatcher: typeof getMemoryWatcher;
|
|
112
|
+
initMemoryWatcher: typeof initMemoryWatcher;
|
|
113
|
+
stopMemoryWatcher: typeof stopMemoryWatcher;
|
|
114
|
+
};
|
|
115
|
+
export default _default;
|
|
116
|
+
//# sourceMappingURL=memory-watcher.d.ts.map
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Watcher
|
|
3
|
+
*
|
|
4
|
+
* Automatic memory sync based on OpenClaw's architecture.
|
|
5
|
+
* Features:
|
|
6
|
+
* - File watching with chokidar for automatic sync
|
|
7
|
+
* - Dirty flag to trigger sync before search
|
|
8
|
+
* - Debounced sync on file changes
|
|
9
|
+
* - Warm session sync on session start
|
|
10
|
+
*/
|
|
11
|
+
import { watch } from 'chokidar';
|
|
12
|
+
import { join, basename, extname } from 'node:path';
|
|
13
|
+
import { syncMemoryFiles, searchMemory, DEFAULT_MEMORY_CONFIG } from './memory-service.js';
|
|
14
|
+
import { logger } from '../utils/logger.js';
|
|
15
|
+
// Memory Watcher Class
|
|
16
|
+
export class MemoryWatcher {
|
|
17
|
+
watcher = null;
|
|
18
|
+
basePath;
|
|
19
|
+
config;
|
|
20
|
+
state = {
|
|
21
|
+
dirty: true, // Start dirty to ensure initial sync
|
|
22
|
+
syncing: false,
|
|
23
|
+
lastSyncAt: null,
|
|
24
|
+
watchedFiles: 0,
|
|
25
|
+
watching: false,
|
|
26
|
+
};
|
|
27
|
+
debounceTimer = null;
|
|
28
|
+
onSyncComplete;
|
|
29
|
+
onSyncStart;
|
|
30
|
+
onError;
|
|
31
|
+
constructor(options) {
|
|
32
|
+
this.basePath = options.basePath;
|
|
33
|
+
this.config = options.config || DEFAULT_MEMORY_CONFIG;
|
|
34
|
+
this.onSyncComplete = options.onSyncComplete;
|
|
35
|
+
this.onSyncStart = options.onSyncStart;
|
|
36
|
+
this.onError = options.onError;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get current watcher state
|
|
40
|
+
*/
|
|
41
|
+
getState() {
|
|
42
|
+
return { ...this.state };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if files need to be synced
|
|
46
|
+
*/
|
|
47
|
+
isDirty() {
|
|
48
|
+
return this.state.dirty;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Mark as dirty (files changed)
|
|
52
|
+
*/
|
|
53
|
+
markDirty() {
|
|
54
|
+
this.state.dirty = true;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Start watching memory files
|
|
58
|
+
*/
|
|
59
|
+
async start() {
|
|
60
|
+
if (this.watcher) {
|
|
61
|
+
logger.warn('[MemoryWatcher] Already watching');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Paths to watch
|
|
65
|
+
const memoryFile = join(this.basePath, this.config.paths.memoryFile);
|
|
66
|
+
const memoryDir = join(this.basePath, this.config.paths.memoryDir);
|
|
67
|
+
const altMemoryFile = join(this.basePath, 'memory.md'); // Also watch lowercase
|
|
68
|
+
// Build glob patterns
|
|
69
|
+
const patterns = [
|
|
70
|
+
memoryFile,
|
|
71
|
+
altMemoryFile,
|
|
72
|
+
join(memoryDir, '*.md'),
|
|
73
|
+
join(memoryDir, '*.txt'),
|
|
74
|
+
join(memoryDir, '*.markdown'),
|
|
75
|
+
];
|
|
76
|
+
logger.info(`[MemoryWatcher] Starting watch on ${this.basePath}`);
|
|
77
|
+
logger.debug(`[MemoryWatcher] Watching patterns: ${patterns.join(', ')}`);
|
|
78
|
+
this.watcher = watch(patterns, {
|
|
79
|
+
ignoreInitial: true, // Don't trigger on initial scan
|
|
80
|
+
persistent: true,
|
|
81
|
+
awaitWriteFinish: {
|
|
82
|
+
stabilityThreshold: 500,
|
|
83
|
+
pollInterval: 100,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
this.watcher.on('add', (path) => this.handleFileChange('add', path));
|
|
87
|
+
this.watcher.on('change', (path) => this.handleFileChange('change', path));
|
|
88
|
+
this.watcher.on('unlink', (path) => this.handleFileChange('unlink', path));
|
|
89
|
+
this.watcher.on('ready', () => {
|
|
90
|
+
const watched = this.watcher?.getWatched() || {};
|
|
91
|
+
this.state.watchedFiles = Object.values(watched).reduce((acc, files) => acc + files.length, 0);
|
|
92
|
+
this.state.watching = true;
|
|
93
|
+
logger.info(`[MemoryWatcher] Ready, watching ${this.state.watchedFiles} files`);
|
|
94
|
+
});
|
|
95
|
+
this.watcher.on('error', (err) => {
|
|
96
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
97
|
+
logger.error('[MemoryWatcher] Error:', error);
|
|
98
|
+
this.onError?.(error);
|
|
99
|
+
});
|
|
100
|
+
// Perform initial sync if configured
|
|
101
|
+
if (this.config.sync.onSessionStart) {
|
|
102
|
+
await this.sync();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Stop watching
|
|
107
|
+
*/
|
|
108
|
+
async stop() {
|
|
109
|
+
if (this.debounceTimer) {
|
|
110
|
+
clearTimeout(this.debounceTimer);
|
|
111
|
+
this.debounceTimer = null;
|
|
112
|
+
}
|
|
113
|
+
if (this.watcher) {
|
|
114
|
+
await this.watcher.close();
|
|
115
|
+
this.watcher = null;
|
|
116
|
+
this.state.watching = false;
|
|
117
|
+
logger.info('[MemoryWatcher] Stopped');
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Handle file change events
|
|
122
|
+
*/
|
|
123
|
+
handleFileChange(event, path) {
|
|
124
|
+
const filename = basename(path);
|
|
125
|
+
const ext = extname(path).toLowerCase();
|
|
126
|
+
// Only process memory files
|
|
127
|
+
if (!['.md', '.txt', '.markdown'].includes(ext)) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
logger.debug(`[MemoryWatcher] File ${event}: ${filename}`);
|
|
131
|
+
this.state.dirty = true;
|
|
132
|
+
// Schedule debounced sync if watch sync is enabled
|
|
133
|
+
if (this.config.sync.watch) {
|
|
134
|
+
this.scheduleSync();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Schedule a debounced sync
|
|
139
|
+
*/
|
|
140
|
+
scheduleSync() {
|
|
141
|
+
if (this.debounceTimer) {
|
|
142
|
+
clearTimeout(this.debounceTimer);
|
|
143
|
+
}
|
|
144
|
+
this.debounceTimer = setTimeout(() => {
|
|
145
|
+
this.sync().catch((error) => {
|
|
146
|
+
logger.error('[MemoryWatcher] Scheduled sync failed:', error);
|
|
147
|
+
this.onError?.(error);
|
|
148
|
+
});
|
|
149
|
+
}, this.config.sync.watchDebounceMs);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Perform a sync operation
|
|
153
|
+
*/
|
|
154
|
+
async sync() {
|
|
155
|
+
if (this.state.syncing) {
|
|
156
|
+
logger.debug('[MemoryWatcher] Sync already in progress');
|
|
157
|
+
return { added: 0, updated: 0, removed: 0 };
|
|
158
|
+
}
|
|
159
|
+
this.state.syncing = true;
|
|
160
|
+
this.onSyncStart?.();
|
|
161
|
+
try {
|
|
162
|
+
logger.info('[MemoryWatcher] Syncing memory files...');
|
|
163
|
+
const result = await syncMemoryFiles(this.basePath, this.config);
|
|
164
|
+
this.state.dirty = false;
|
|
165
|
+
this.state.lastSyncAt = Date.now();
|
|
166
|
+
logger.info(`[MemoryWatcher] Sync complete: ${result.added} added, ${result.updated} updated, ${result.removed} removed`);
|
|
167
|
+
this.onSyncComplete?.(result);
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
logger.error('[MemoryWatcher] Sync failed:', error);
|
|
172
|
+
this.onError?.(error);
|
|
173
|
+
throw error;
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
this.state.syncing = false;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Search with automatic sync if dirty
|
|
181
|
+
* Implements the onSearch auto-sync pattern from OpenClaw
|
|
182
|
+
*/
|
|
183
|
+
async search(query, maxResults) {
|
|
184
|
+
// Auto-sync before search if dirty and configured
|
|
185
|
+
if (this.config.sync.onSearch && this.state.dirty && !this.state.syncing) {
|
|
186
|
+
logger.debug('[MemoryWatcher] Auto-syncing before search');
|
|
187
|
+
await this.sync();
|
|
188
|
+
}
|
|
189
|
+
const searchConfig = maxResults
|
|
190
|
+
? { ...this.config, query: { ...this.config.query, maxResults } }
|
|
191
|
+
: this.config;
|
|
192
|
+
return searchMemory(query, searchConfig);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Warm session - sync on session start
|
|
196
|
+
* Call this when a new chat session starts
|
|
197
|
+
*/
|
|
198
|
+
async warmSession() {
|
|
199
|
+
if (this.config.sync.onSessionStart) {
|
|
200
|
+
logger.info('[MemoryWatcher] Warming session with memory sync');
|
|
201
|
+
await this.sync();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Singleton Instance
|
|
206
|
+
let globalWatcher = null;
|
|
207
|
+
/**
|
|
208
|
+
* Get or create the global memory watcher
|
|
209
|
+
*/
|
|
210
|
+
export function getMemoryWatcher() {
|
|
211
|
+
return globalWatcher;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Initialize the global memory watcher
|
|
215
|
+
*/
|
|
216
|
+
export async function initMemoryWatcher(options) {
|
|
217
|
+
if (globalWatcher) {
|
|
218
|
+
await globalWatcher.stop();
|
|
219
|
+
}
|
|
220
|
+
globalWatcher = new MemoryWatcher(options);
|
|
221
|
+
await globalWatcher.start();
|
|
222
|
+
return globalWatcher;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Stop the global memory watcher
|
|
226
|
+
*/
|
|
227
|
+
export async function stopMemoryWatcher() {
|
|
228
|
+
if (globalWatcher) {
|
|
229
|
+
await globalWatcher.stop();
|
|
230
|
+
globalWatcher = null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
export default {
|
|
234
|
+
MemoryWatcher,
|
|
235
|
+
getMemoryWatcher,
|
|
236
|
+
initMemoryWatcher,
|
|
237
|
+
stopMemoryWatcher,
|
|
238
|
+
};
|
|
239
|
+
//# sourceMappingURL=memory-watcher.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request/Response Logging Middleware for Hono
|
|
3
|
+
*
|
|
4
|
+
* Logs all HTTP requests and responses with:
|
|
5
|
+
* - Correlation IDs for request tracing
|
|
6
|
+
* - Request details (method, path, headers)
|
|
7
|
+
* - Response details (status, duration)
|
|
8
|
+
* - Error tracking
|
|
9
|
+
*/
|
|
10
|
+
import type { Context, Next } from 'hono';
|
|
11
|
+
/**
|
|
12
|
+
* Request logging middleware
|
|
13
|
+
*/
|
|
14
|
+
export declare function requestLogger(c: Context, next: Next): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Request body logging middleware (use with caution)
|
|
17
|
+
* Only logs for non-GET requests and respects content type
|
|
18
|
+
*/
|
|
19
|
+
export declare function requestBodyLogger(c: Context, next: Next): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Response time header middleware
|
|
22
|
+
*/
|
|
23
|
+
export declare function responseTimeHeader(c: Context, next: Next): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Error logging middleware
|
|
26
|
+
* Should be added early in middleware chain
|
|
27
|
+
*/
|
|
28
|
+
export declare function errorLogger(c: Context, next: Next): Promise<Response | void>;
|
|
29
|
+
/**
|
|
30
|
+
* Slow request logger
|
|
31
|
+
* Logs warning for requests exceeding threshold
|
|
32
|
+
*/
|
|
33
|
+
export declare function slowRequestLogger(thresholdMs?: number): (c: Context, next: Next) => Promise<void>;
|
|
34
|
+
//# sourceMappingURL=logging.d.ts.map
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request/Response Logging Middleware for Hono
|
|
3
|
+
*
|
|
4
|
+
* Logs all HTTP requests and responses with:
|
|
5
|
+
* - Correlation IDs for request tracing
|
|
6
|
+
* - Request details (method, path, headers)
|
|
7
|
+
* - Response details (status, duration)
|
|
8
|
+
* - Error tracking
|
|
9
|
+
*/
|
|
10
|
+
import { logger, generateCorrelationId, withCorrelation } from '../utils/logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Request logging middleware
|
|
13
|
+
*/
|
|
14
|
+
export async function requestLogger(c, next) {
|
|
15
|
+
// Generate or extract correlation ID
|
|
16
|
+
const correlationId = c.req.header('X-Correlation-ID') ||
|
|
17
|
+
c.req.header('X-Request-ID') ||
|
|
18
|
+
generateCorrelationId();
|
|
19
|
+
// Add correlation ID to response headers
|
|
20
|
+
c.header('X-Correlation-ID', correlationId);
|
|
21
|
+
const startTime = Date.now();
|
|
22
|
+
const method = c.req.method;
|
|
23
|
+
const path = c.req.path;
|
|
24
|
+
const userAgent = c.req.header('User-Agent');
|
|
25
|
+
const ip = c.req.header('X-Forwarded-For') || c.req.header('X-Real-IP') || 'unknown';
|
|
26
|
+
// Create request context
|
|
27
|
+
const requestContext = {
|
|
28
|
+
correlationId,
|
|
29
|
+
method,
|
|
30
|
+
path,
|
|
31
|
+
ip,
|
|
32
|
+
userAgent,
|
|
33
|
+
};
|
|
34
|
+
// Log incoming request
|
|
35
|
+
logger.info('→ Incoming request', requestContext);
|
|
36
|
+
// Run the request handler within correlation context
|
|
37
|
+
try {
|
|
38
|
+
await withCorrelation(correlationId, async () => {
|
|
39
|
+
await next();
|
|
40
|
+
});
|
|
41
|
+
// Log successful response
|
|
42
|
+
const duration = Date.now() - startTime;
|
|
43
|
+
const status = c.res.status;
|
|
44
|
+
logger.info('← Response sent', {
|
|
45
|
+
...requestContext,
|
|
46
|
+
status,
|
|
47
|
+
duration,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
// Log error response
|
|
52
|
+
const duration = Date.now() - startTime;
|
|
53
|
+
logger.error('← Error response', error, {
|
|
54
|
+
...requestContext,
|
|
55
|
+
duration,
|
|
56
|
+
});
|
|
57
|
+
// Re-throw to let error handler deal with it
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Request body logging middleware (use with caution)
|
|
63
|
+
* Only logs for non-GET requests and respects content type
|
|
64
|
+
*/
|
|
65
|
+
export async function requestBodyLogger(c, next) {
|
|
66
|
+
const correlationId = c.req.header('X-Correlation-ID') || generateCorrelationId();
|
|
67
|
+
// Only log non-GET requests
|
|
68
|
+
if (c.req.method !== 'GET' && c.req.method !== 'HEAD') {
|
|
69
|
+
const contentType = c.req.header('Content-Type') || '';
|
|
70
|
+
// Only log JSON payloads
|
|
71
|
+
if (contentType.includes('application/json')) {
|
|
72
|
+
try {
|
|
73
|
+
const body = await c.req.json();
|
|
74
|
+
logger.debug('Request body', {
|
|
75
|
+
correlationId,
|
|
76
|
+
body: sanitizeBody(body),
|
|
77
|
+
});
|
|
78
|
+
// Re-create request with body (since we consumed it)
|
|
79
|
+
c.req.raw = new Request(c.req.url, {
|
|
80
|
+
method: c.req.method,
|
|
81
|
+
headers: c.req.raw.headers,
|
|
82
|
+
body: JSON.stringify(body),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
logger.warn('Failed to parse request body as JSON', {
|
|
87
|
+
correlationId,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
await next();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Sanitize request/response bodies
|
|
96
|
+
* Removes sensitive data like passwords, tokens, etc.
|
|
97
|
+
*/
|
|
98
|
+
function sanitizeBody(body) {
|
|
99
|
+
if (!body || typeof body !== 'object') {
|
|
100
|
+
return body;
|
|
101
|
+
}
|
|
102
|
+
const sensitiveFields = [
|
|
103
|
+
'password',
|
|
104
|
+
'token',
|
|
105
|
+
'secret',
|
|
106
|
+
'apiKey',
|
|
107
|
+
'api_key',
|
|
108
|
+
'accessToken',
|
|
109
|
+
'access_token',
|
|
110
|
+
'refreshToken',
|
|
111
|
+
'refresh_token',
|
|
112
|
+
'privateKey',
|
|
113
|
+
'private_key',
|
|
114
|
+
];
|
|
115
|
+
if (Array.isArray(body)) {
|
|
116
|
+
return body.map((item) => sanitizeBody(item));
|
|
117
|
+
}
|
|
118
|
+
const record = body;
|
|
119
|
+
const sanitized = { ...record };
|
|
120
|
+
for (const key of Object.keys(sanitized)) {
|
|
121
|
+
const lowerKey = key.toLowerCase();
|
|
122
|
+
if (sensitiveFields.some((field) => lowerKey.includes(field.toLowerCase()))) {
|
|
123
|
+
sanitized[key] = '[REDACTED]';
|
|
124
|
+
}
|
|
125
|
+
else if (typeof sanitized[key] === 'object' && sanitized[key] !== null) {
|
|
126
|
+
sanitized[key] = sanitizeBody(sanitized[key]);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return sanitized;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Response time header middleware
|
|
133
|
+
*/
|
|
134
|
+
export async function responseTimeHeader(c, next) {
|
|
135
|
+
const startTime = Date.now();
|
|
136
|
+
await next();
|
|
137
|
+
const duration = Date.now() - startTime;
|
|
138
|
+
c.header('X-Response-Time', `${duration}ms`);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Error logging middleware
|
|
142
|
+
* Should be added early in middleware chain
|
|
143
|
+
*/
|
|
144
|
+
export async function errorLogger(c, next) {
|
|
145
|
+
try {
|
|
146
|
+
await next();
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
const correlationId = c.req.header('X-Correlation-ID') || 'unknown';
|
|
150
|
+
logger.error('Unhandled error in request', error, {
|
|
151
|
+
correlationId,
|
|
152
|
+
method: c.req.method,
|
|
153
|
+
path: c.req.path,
|
|
154
|
+
});
|
|
155
|
+
// Return error response
|
|
156
|
+
return c.json({
|
|
157
|
+
error: 'Internal Server Error',
|
|
158
|
+
correlationId,
|
|
159
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
160
|
+
}, 500);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Slow request logger
|
|
165
|
+
* Logs warning for requests exceeding threshold
|
|
166
|
+
*/
|
|
167
|
+
export function slowRequestLogger(thresholdMs = 1000) {
|
|
168
|
+
return async function (c, next) {
|
|
169
|
+
const startTime = Date.now();
|
|
170
|
+
const correlationId = c.req.header('X-Correlation-ID') || 'unknown';
|
|
171
|
+
await next();
|
|
172
|
+
const duration = Date.now() - startTime;
|
|
173
|
+
if (duration > thresholdMs) {
|
|
174
|
+
logger.warn('Slow request detected', {
|
|
175
|
+
correlationId,
|
|
176
|
+
method: c.req.method,
|
|
177
|
+
path: c.req.path,
|
|
178
|
+
duration,
|
|
179
|
+
threshold: thresholdMs,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Context, type Next } from 'hono';
|
|
2
|
+
interface RateLimitConfig {
|
|
3
|
+
/** Window duration in milliseconds */
|
|
4
|
+
windowMs: number;
|
|
5
|
+
/** Max requests per window per IP */
|
|
6
|
+
maxRequests: number;
|
|
7
|
+
/** Alias for maxRequests (backward compat) */
|
|
8
|
+
max?: number;
|
|
9
|
+
/** Custom error message */
|
|
10
|
+
message?: string;
|
|
11
|
+
/** Max tracked IPs before eviction (prevents memory leak) */
|
|
12
|
+
maxClients?: number;
|
|
13
|
+
/** Cleanup interval in milliseconds */
|
|
14
|
+
cleanupIntervalMs?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Sliding-window rate limiter middleware for Hono.
|
|
18
|
+
*
|
|
19
|
+
* Uses a sliding window (not fixed window) for accurate rate limiting.
|
|
20
|
+
* Returns proper 429 with Retry-After and X-RateLimit-* headers.
|
|
21
|
+
* Includes periodic cleanup and max client eviction to prevent memory leaks.
|
|
22
|
+
*/
|
|
23
|
+
export declare function rateLimit(config?: Partial<RateLimitConfig>): RateLimitMiddleware;
|
|
24
|
+
export interface RateLimitMiddleware {
|
|
25
|
+
(c: Context, next: Next): Promise<Response | void>;
|
|
26
|
+
destroy: () => void;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=rate-limit.d.ts.map
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const DEFAULT_CONFIG = {
|
|
2
|
+
windowMs: 60 * 1000,
|
|
3
|
+
maxRequests: 100,
|
|
4
|
+
message: 'Too many requests, please try again later.',
|
|
5
|
+
maxClients: 10000,
|
|
6
|
+
cleanupIntervalMs: 60000,
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Sliding-window rate limiter middleware for Hono.
|
|
10
|
+
*
|
|
11
|
+
* Uses a sliding window (not fixed window) for accurate rate limiting.
|
|
12
|
+
* Returns proper 429 with Retry-After and X-RateLimit-* headers.
|
|
13
|
+
* Includes periodic cleanup and max client eviction to prevent memory leaks.
|
|
14
|
+
*/
|
|
15
|
+
export function rateLimit(config = {}) {
|
|
16
|
+
// Support `max` as alias for `maxRequests` (backward compat)
|
|
17
|
+
if (config.max !== undefined && config.maxRequests === undefined) {
|
|
18
|
+
config.maxRequests = config.max;
|
|
19
|
+
}
|
|
20
|
+
const opts = { ...DEFAULT_CONFIG, ...config };
|
|
21
|
+
const clients = new Map();
|
|
22
|
+
let destroyed = false;
|
|
23
|
+
// Periodic cleanup of expired entries
|
|
24
|
+
const cleanupTimer = setInterval(() => {
|
|
25
|
+
const cutoff = Date.now() - opts.windowMs;
|
|
26
|
+
for (const [ip, entry] of clients) {
|
|
27
|
+
entry.timestamps = entry.timestamps.filter(t => t > cutoff);
|
|
28
|
+
if (entry.timestamps.length === 0) {
|
|
29
|
+
clients.delete(ip);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Evict oldest clients if exceeding max to bound memory
|
|
33
|
+
if (clients.size > opts.maxClients) {
|
|
34
|
+
const sorted = [...clients.entries()]
|
|
35
|
+
.sort((a, b) => {
|
|
36
|
+
const latestA = a[1].timestamps.length > 0 ? Math.max(...a[1].timestamps) : 0;
|
|
37
|
+
const latestB = b[1].timestamps.length > 0 ? Math.max(...b[1].timestamps) : 0;
|
|
38
|
+
return latestA - latestB;
|
|
39
|
+
});
|
|
40
|
+
const toRemove = sorted.slice(0, sorted.length - opts.maxClients);
|
|
41
|
+
for (const [key] of toRemove) {
|
|
42
|
+
clients.delete(key);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}, opts.cleanupIntervalMs);
|
|
46
|
+
const middleware = async (c, next) => {
|
|
47
|
+
const ip = c.req.header('x-forwarded-for')?.split(',')[0]?.trim()
|
|
48
|
+
|| c.req.header('x-real-ip')
|
|
49
|
+
|| 'anonymous';
|
|
50
|
+
const now = Date.now();
|
|
51
|
+
const cutoff = now - opts.windowMs;
|
|
52
|
+
let entry = clients.get(ip);
|
|
53
|
+
if (!entry) {
|
|
54
|
+
entry = { timestamps: [] };
|
|
55
|
+
clients.set(ip, entry);
|
|
56
|
+
}
|
|
57
|
+
// Remove expired timestamps (sliding window)
|
|
58
|
+
entry.timestamps = entry.timestamps.filter(t => t > cutoff);
|
|
59
|
+
// Calculate rate limit headers
|
|
60
|
+
const currentCount = entry.timestamps.length;
|
|
61
|
+
const remaining = Math.max(0, opts.maxRequests - currentCount);
|
|
62
|
+
const resetAt = entry.timestamps.length > 0
|
|
63
|
+
? entry.timestamps[0] + opts.windowMs
|
|
64
|
+
: now + opts.windowMs;
|
|
65
|
+
c.header('X-RateLimit-Limit', opts.maxRequests.toString());
|
|
66
|
+
c.header('X-RateLimit-Remaining', remaining.toString());
|
|
67
|
+
c.header('X-RateLimit-Reset', Math.ceil(resetAt / 1000).toString());
|
|
68
|
+
if (currentCount >= opts.maxRequests) {
|
|
69
|
+
const retryAfter = Math.ceil((resetAt - now) / 1000);
|
|
70
|
+
c.header('Retry-After', Math.max(1, retryAfter).toString());
|
|
71
|
+
return c.json({
|
|
72
|
+
error: 'Rate limit exceeded',
|
|
73
|
+
message: opts.message,
|
|
74
|
+
retryAfter: Math.max(1, retryAfter),
|
|
75
|
+
}, 429);
|
|
76
|
+
}
|
|
77
|
+
// Record this request
|
|
78
|
+
entry.timestamps.push(now);
|
|
79
|
+
await next();
|
|
80
|
+
};
|
|
81
|
+
// Attach destroy method for graceful shutdown
|
|
82
|
+
middleware.destroy = () => {
|
|
83
|
+
if (!destroyed) {
|
|
84
|
+
clearInterval(cleanupTimer);
|
|
85
|
+
clients.clear();
|
|
86
|
+
destroyed = true;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
return middleware;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=rate-limit.js.map
|