denchclaw 2.4.5 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/apps/web/.next/standalone/apps/web/.next/BUILD_ID +1 -1
- package/apps/web/.next/standalone/apps/web/.next/app-build-manifest.json +327 -198
- package/apps/web/.next/standalone/apps/web/.next/app-path-routes-manifest.json +44 -26
- package/apps/web/.next/standalone/apps/web/.next/build-manifest.json +5 -5
- package/apps/web/.next/standalone/apps/web/.next/cache/config.json +3 -3
- package/apps/web/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
- package/apps/web/.next/standalone/apps/web/.next/react-loadable-manifest.json +6 -6
- package/apps/web/.next/standalone/apps/web/.next/required-server-files.json +1 -1
- package/apps/web/.next/standalone/apps/web/.next/routes-manifest.json +25 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/cron/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/proxy/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/serve/[...path]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/store/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/webhooks/[...path]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/active/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/route.js +2 -2
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/runs/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/runs/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stream/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/subagents/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/subagents/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route.js +42 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connect/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connect/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connect/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connections/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connections/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connections/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/tool-index/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/tool-index/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/tool-index/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/toolkits/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/toolkits/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/toolkits/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/[jobId]/runs/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/[sessionId]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/search-transcript/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/channels/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/chat/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/chat/stream/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/sessions/[id]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/sessions/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/memories/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/switch/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/[sessionId]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/content/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/content/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/content/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/browse/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/browse/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/browse/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/install/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/install/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/route.js +2 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/terminal/port/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route.js.nft.json +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route_client-reference-manifest.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/messages/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/assets/[...path]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse-file/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/context/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/copy/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/introspect/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/query/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/execute/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/file/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route.js +2 -2
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/link-preview/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/list/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/mkdir/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/move/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/actions/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/actions/runs/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/display-field/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/content/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/bulk-delete/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/options/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/[fieldId]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/reorder/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/views/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/open-file/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/path-info/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/query/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/raw-file/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/rename/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/search-index/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/suggest-files/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/thumbnail/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/tree/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/tree/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/virtual-file/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/watch/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/write-binary/route_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/page.js +21 -21
- package/apps/web/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/app-paths-manifest.json +44 -26
- package/apps/web/.next/standalone/apps/web/.next/server/chunks/6426.js +2 -2
- package/apps/web/.next/standalone/apps/web/.next/server/chunks/6787.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/chunks/687.js +7 -7
- package/apps/web/.next/standalone/apps/web/.next/server/chunks/737.js +3 -3
- package/apps/web/.next/standalone/apps/web/.next/server/chunks/7488.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/chunks/8306.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/chunks/8650.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/server/chunks/8693.js +481 -0
- package/apps/web/.next/standalone/apps/web/.next/server/functions-config-manifest.json +25 -11
- package/apps/web/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
- package/apps/web/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/apps/web/.next/standalone/apps/web/.next/static/U0A79z_eUsEUNVdXxxyc3/_buildManifest.js +1 -0
- package/apps/web/.next/{static/chunks/eca025f9.538b3f5d85eeef79.js → standalone/apps/web/.next/static/chunks/0c958985.3ccb9c3aea7cd083.js} +2 -2
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/3999.548dd8ec57152081.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/{2489.b5e1ce196331926c.js → 4870.507a55774d37d072.js} +1 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/{7812.c1435a724050dfec.js → 5431.a2353a2aa8c55a67.js} +1 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/7f67b0df-54679694c67e2b76.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/80f1cbb7-c9635d81d9fe6819.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/8532165e-abce74bbb270ef26.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/9372.e71f5b96da3f9dfd.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/9702-d646bcd7cb8fe6bf.js +135 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/cron/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/proxy/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/store/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/active/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/runs/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stop/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stream/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/subagents/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/callback/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/connect/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/connections/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/disconnect/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/status/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/tool-index/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/toolkits/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/feedback/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/channels/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/[id]/toggle/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/repair/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/memories/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/switch/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/settings/cloud/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/[slug]/content/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/[slug]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/browse/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/install/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/terminal/port/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/voice/speech/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/voice/transcribe/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/voice/voices/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/context/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/copy/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/query/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/delete/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/execute/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/file/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/init/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/list/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/move/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/open-file/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/path-info/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/query/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/rename/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/search-index/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/switch/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/tree/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/upload/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/watch/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/{layout-a597017db7df698d.js → layout-8757ef9cb1826e76.js} +1 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/page-05ff98c264c1c0cf.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/webpack-d4501ef5cbbcf069.js +1 -0
- package/apps/web/.next/standalone/apps/web/.next/static/css/4f71a2dee93c9f97.css +1 -0
- package/apps/web/.next/standalone/apps/web/app/api/skills/route.test.ts +672 -0
- package/apps/web/.next/standalone/apps/web/package.json +2 -0
- package/apps/web/.next/standalone/apps/web/public/integrations/exa-logomark.svg +4 -0
- package/apps/web/.next/standalone/apps/web/public/models/deepseek.ico +0 -0
- package/apps/web/.next/standalone/apps/web/public/models/kimi.png +0 -0
- package/apps/web/.next/standalone/apps/web/public/models/kimi.svg +89 -0
- package/apps/web/.next/standalone/apps/web/public/models/minimax.png +0 -0
- package/apps/web/.next/standalone/apps/web/server.js +1 -1
- package/apps/web/.next/standalone/extensions/apollo-enrichment/index.ts +268 -0
- package/apps/web/.next/standalone/extensions/apollo-enrichment/openclaw.plugin.json +16 -0
- package/apps/web/.next/standalone/extensions/apollo-enrichment/package.json +8 -0
- package/apps/web/.next/standalone/extensions/dench-ai-gateway/composio-bridge.ts +474 -0
- package/apps/web/.next/standalone/extensions/dench-ai-gateway/config-patch.ts +83 -0
- package/apps/web/.next/standalone/extensions/dench-ai-gateway/index.test.ts +281 -0
- package/apps/web/.next/standalone/extensions/dench-ai-gateway/index.ts +325 -0
- package/apps/web/.next/standalone/extensions/dench-ai-gateway/models.ts +325 -0
- package/apps/web/.next/standalone/extensions/dench-ai-gateway/openclaw.plugin.json +27 -0
- package/apps/web/.next/standalone/extensions/dench-ai-gateway/package.json +8 -0
- package/apps/web/.next/standalone/extensions/dench-identity/composio-cheat-sheet.test.ts +146 -0
- package/apps/web/.next/standalone/extensions/dench-identity/composio-cheat-sheet.ts +197 -0
- package/apps/web/.next/standalone/extensions/dench-identity/index.test.ts +361 -0
- package/apps/web/.next/standalone/extensions/dench-identity/index.ts +920 -0
- package/apps/web/.next/standalone/extensions/dench-identity/openclaw.plugin.json +17 -0
- package/apps/web/.next/standalone/extensions/dench-identity/package.json +8 -0
- package/apps/web/.next/standalone/extensions/exa-search/index.ts +363 -0
- package/apps/web/.next/standalone/extensions/exa-search/openclaw.plugin.json +16 -0
- package/apps/web/.next/standalone/extensions/exa-search/package.json +8 -0
- package/apps/web/.next/standalone/extensions/posthog-analytics/index.ts +190 -0
- package/apps/web/.next/standalone/extensions/posthog-analytics/lib/build-env.js +3 -0
- package/apps/web/.next/standalone/extensions/posthog-analytics/lib/build-env.ts +3 -0
- package/apps/web/.next/standalone/extensions/posthog-analytics/lib/event-mappers.ts +403 -0
- package/apps/web/.next/standalone/extensions/posthog-analytics/lib/posthog-client.ts +105 -0
- package/apps/web/.next/standalone/extensions/posthog-analytics/lib/privacy.ts +294 -0
- package/apps/web/.next/standalone/extensions/posthog-analytics/lib/trace-context.ts +103 -0
- package/apps/web/.next/standalone/extensions/posthog-analytics/lib/types.ts +28 -0
- package/apps/web/.next/standalone/extensions/posthog-analytics/openclaw.plugin.json +22 -0
- package/apps/web/.next/standalone/extensions/posthog-analytics/package.json +8 -0
- package/apps/web/.next/standalone/extensions/vitest.config.ts +13 -0
- package/apps/web/.next/standalone/package.json +2 -2
- package/apps/web/.next/static/U0A79z_eUsEUNVdXxxyc3/_buildManifest.js +1 -0
- package/apps/web/.next/{standalone/apps/web/.next/static/chunks/eca025f9.538b3f5d85eeef79.js → static/chunks/0c958985.3ccb9c3aea7cd083.js} +2 -2
- package/apps/web/.next/static/chunks/3999.548dd8ec57152081.js +1 -0
- package/apps/web/.next/static/chunks/{2489.b5e1ce196331926c.js → 4870.507a55774d37d072.js} +1 -1
- package/apps/web/.next/static/chunks/{7812.c1435a724050dfec.js → 5431.a2353a2aa8c55a67.js} +1 -1
- package/apps/web/.next/static/chunks/7f67b0df-54679694c67e2b76.js +1 -0
- package/apps/web/.next/static/chunks/80f1cbb7-c9635d81d9fe6819.js +1 -0
- package/apps/web/.next/static/chunks/8532165e-abce74bbb270ef26.js +1 -0
- package/apps/web/.next/static/chunks/9372.e71f5b96da3f9dfd.js +1 -0
- package/apps/web/.next/static/chunks/9702-d646bcd7cb8fe6bf.js +135 -0
- package/apps/web/.next/static/chunks/app/api/apps/cron/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/apps/proxy/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/apps/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/apps/store/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/chat/active/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/chat/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/chat/runs/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/chat/stop/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/chat/stream/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/chat/subagents/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/composio/callback/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/composio/connect/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/composio/connections/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/composio/disconnect/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/composio/status/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/composio/tool-index/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/composio/toolkits/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/cron/jobs/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/feedback/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/gateway/channels/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/gateway/chat/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/gateway/sessions/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/integrations/[id]/toggle/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/integrations/repair/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/integrations/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/memories/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/profiles/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/profiles/switch/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/sessions/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/settings/cloud/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/skills/[slug]/content/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/skills/[slug]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/skills/browse/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/skills/install/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/skills/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/terminal/port/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/voice/speech/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/voice/transcribe/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/voice/voices/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/web-sessions/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/browse/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/context/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/copy/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/db/query/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/delete/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/execute/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/file/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/init/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/list/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/move/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/open-file/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/path-info/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/query/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/rename/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/search-index/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/switch/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/tree/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/upload/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/watch/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-982235d988e17f31.js +1 -0
- package/apps/web/.next/static/chunks/app/{layout-a597017db7df698d.js → layout-8757ef9cb1826e76.js} +1 -1
- package/apps/web/.next/static/chunks/app/page-05ff98c264c1c0cf.js +1 -0
- package/apps/web/.next/static/chunks/webpack-d4501ef5cbbcf069.js +1 -0
- package/apps/web/.next/static/css/4f71a2dee93c9f97.css +1 -0
- package/apps/web/public/integrations/exa-logomark.svg +4 -0
- package/apps/web/public/models/deepseek.ico +0 -0
- package/apps/web/public/models/kimi.png +0 -0
- package/apps/web/public/models/kimi.svg +89 -0
- package/apps/web/public/models/minimax.png +0 -0
- package/dist/entry.js +1 -1
- package/dist/{program-D2RfLoKh.js → program-BYB4nfWK.js} +423 -13
- package/dist/{run-main-giTi_or5.js → run-main-Z-P_Zlf6.js} +1 -1
- package/extensions/apollo-enrichment/index.ts +268 -0
- package/extensions/apollo-enrichment/openclaw.plugin.json +16 -0
- package/extensions/apollo-enrichment/package.json +8 -0
- package/extensions/dench-ai-gateway/composio-bridge.ts +474 -0
- package/extensions/dench-ai-gateway/config-patch.ts +83 -0
- package/extensions/dench-ai-gateway/index.test.ts +281 -0
- package/extensions/dench-ai-gateway/index.ts +9 -36
- package/extensions/dench-ai-gateway/models.ts +5 -5
- package/extensions/dench-identity/composio-cheat-sheet.test.ts +146 -0
- package/extensions/dench-identity/composio-cheat-sheet.ts +197 -0
- package/extensions/dench-identity/index.test.ts +226 -1
- package/extensions/dench-identity/index.ts +795 -5
- package/extensions/exa-search/index.ts +363 -0
- package/extensions/exa-search/openclaw.plugin.json +16 -0
- package/extensions/exa-search/package.json +8 -0
- package/extensions/posthog-analytics/lib/build-env.js +1 -1
- package/package.json +2 -2
- package/skills/composio-apps/SKILL.md +88 -0
- package/apps/web/.next/standalone/apps/web/.next/server/chunks/4334.js +0 -481
- package/apps/web/.next/standalone/apps/web/.next/static/6km2S2lfAi2PQ3TlStEAM/_buildManifest.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/2457.b2932424bcf38aee.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/2716-475d96c202834586.js +0 -135
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/4062.6ff486abe87e56aa.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/cron/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/proxy/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/store/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/active/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/runs/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stop/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stream/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/subagents/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/feedback/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/channels/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/memories/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/switch/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/terminal/port/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/context/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/copy/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/query/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/delete/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/execute/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/file/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/init/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/list/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/move/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/open-file/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/path-info/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/query/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/rename/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/search-index/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/switch/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/tree/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/upload/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/watch/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/page-6702f960a7cc2d6f.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/chunks/webpack-a769c08a3fea86bb.js +0 -1
- package/apps/web/.next/standalone/apps/web/.next/static/css/99b07ab2db5fe339.css +0 -1
- package/apps/web/.next/static/6km2S2lfAi2PQ3TlStEAM/_buildManifest.js +0 -1
- package/apps/web/.next/static/chunks/2457.b2932424bcf38aee.js +0 -1
- package/apps/web/.next/static/chunks/2716-475d96c202834586.js +0 -135
- package/apps/web/.next/static/chunks/4062.6ff486abe87e56aa.js +0 -1
- package/apps/web/.next/static/chunks/app/api/apps/cron/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/apps/proxy/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/apps/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/apps/store/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/chat/active/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/chat/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/chat/runs/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/chat/stop/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/chat/stream/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/chat/subagents/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/cron/jobs/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/feedback/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/gateway/channels/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/gateway/chat/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/gateway/sessions/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/memories/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/profiles/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/profiles/switch/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/sessions/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/skills/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/terminal/port/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/web-sessions/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/browse/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/context/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/copy/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/db/query/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/delete/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/execute/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/file/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/init/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/list/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/move/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/open-file/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/path-info/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/query/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/rename/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/search-index/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/switch/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/tree/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/upload/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/watch/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-d14ffafd970f186e.js +0 -1
- package/apps/web/.next/static/chunks/app/page-6702f960a7cc2d6f.js +0 -1
- package/apps/web/.next/static/chunks/webpack-a769c08a3fea86bb.js +0 -1
- package/apps/web/.next/static/css/99b07ab2db5fe339.css +0 -1
- package/skills/browser/SKILL.md +0 -16
- /package/apps/web/.next/standalone/apps/web/.next/static/{6km2S2lfAi2PQ3TlStEAM → U0A79z_eUsEUNVdXxxyc3}/_ssgManifest.js +0 -0
- /package/apps/web/.next/static/{6km2S2lfAi2PQ3TlStEAM → U0A79z_eUsEUNVdXxxyc3}/_ssgManifest.js +0 -0
|
@@ -1,15 +1,774 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
1
2
|
import path from "node:path";
|
|
3
|
+
import type { AnyAgentTool, OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
4
|
+
import {
|
|
5
|
+
loadComposioToolCheatSheetMarkdown,
|
|
6
|
+
readComposioMcpStatusFile,
|
|
7
|
+
readComposioToolIndexFile,
|
|
8
|
+
type ComposioToolIndexFile,
|
|
9
|
+
} from "./composio-cheat-sheet.js";
|
|
2
10
|
|
|
3
11
|
export const id = "dench-identity";
|
|
4
12
|
|
|
13
|
+
type UnknownRecord = Record<string, unknown>;
|
|
14
|
+
|
|
15
|
+
const COMPOSIO_RESOLVE_TOOL_NAME = "composio_resolve_tool";
|
|
16
|
+
|
|
17
|
+
const COMPOSIO_RESOLVE_TOOL_PARAMETERS = {
|
|
18
|
+
type: "object",
|
|
19
|
+
additionalProperties: false,
|
|
20
|
+
properties: {
|
|
21
|
+
app: {
|
|
22
|
+
type: "string",
|
|
23
|
+
description: "Connected app name or slug, for example gmail, slack, github, notion, google-calendar, or linear.",
|
|
24
|
+
},
|
|
25
|
+
intent: {
|
|
26
|
+
type: "string",
|
|
27
|
+
description: "What the user is trying to do, expressed in plain English.",
|
|
28
|
+
},
|
|
29
|
+
userRequest: {
|
|
30
|
+
type: "string",
|
|
31
|
+
description: "Optional full user request for extra matching context.",
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
required: ["intent"],
|
|
35
|
+
} as const;
|
|
36
|
+
|
|
37
|
+
const APP_ALIASES: Record<string, string> = {
|
|
38
|
+
gmail: "gmail",
|
|
39
|
+
email: "gmail",
|
|
40
|
+
emails: "gmail",
|
|
41
|
+
inbox: "gmail",
|
|
42
|
+
mail: "gmail",
|
|
43
|
+
slack: "slack",
|
|
44
|
+
github: "github",
|
|
45
|
+
git: "github",
|
|
46
|
+
pr: "github",
|
|
47
|
+
prs: "github",
|
|
48
|
+
"pull request": "github",
|
|
49
|
+
"pull requests": "github",
|
|
50
|
+
notion: "notion",
|
|
51
|
+
calendar: "google-calendar",
|
|
52
|
+
"google calendar": "google-calendar",
|
|
53
|
+
"gcal": "google-calendar",
|
|
54
|
+
googlecalendar: "google-calendar",
|
|
55
|
+
twitter: "x",
|
|
56
|
+
x: "x",
|
|
57
|
+
linear: "linear",
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const STATIC_COMPOSIO_FALLBACK: Record<string, Array<{
|
|
61
|
+
intent: string;
|
|
62
|
+
tool: string;
|
|
63
|
+
required_args: string[];
|
|
64
|
+
arg_hints: Record<string, string>;
|
|
65
|
+
default_args?: Record<string, unknown>;
|
|
66
|
+
example_prompts?: string[];
|
|
67
|
+
}>> = {
|
|
68
|
+
gmail: [
|
|
69
|
+
{
|
|
70
|
+
intent: "Read recent emails",
|
|
71
|
+
tool: "GMAIL_FETCH_EMAILS",
|
|
72
|
+
required_args: [],
|
|
73
|
+
arg_hints: {
|
|
74
|
+
label_ids: 'Must be a JSON array like ["INBOX"].',
|
|
75
|
+
max_results: "Integer count, for example 10.",
|
|
76
|
+
},
|
|
77
|
+
default_args: { label_ids: ["INBOX"], max_results: 10 },
|
|
78
|
+
example_prompts: ["check my recent emails", "show my inbox"],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
intent: "Read one email",
|
|
82
|
+
tool: "GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID",
|
|
83
|
+
required_args: ["message_id"],
|
|
84
|
+
arg_hints: {
|
|
85
|
+
message_id: "Use the message id from a list result.",
|
|
86
|
+
},
|
|
87
|
+
example_prompts: ["read one message", "open this email"],
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
slack: [
|
|
91
|
+
{
|
|
92
|
+
intent: "Send message",
|
|
93
|
+
tool: "SLACK_SEND_MESSAGE",
|
|
94
|
+
required_args: ["channel", "text"],
|
|
95
|
+
arg_hints: {
|
|
96
|
+
channel: "Slack channel ID or schema-supported identifier.",
|
|
97
|
+
},
|
|
98
|
+
example_prompts: ["send a Slack message", "post in Slack"],
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
github: [
|
|
102
|
+
{
|
|
103
|
+
intent: "List repos",
|
|
104
|
+
tool: "GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER",
|
|
105
|
+
required_args: [],
|
|
106
|
+
arg_hints: {},
|
|
107
|
+
example_prompts: ["list my GitHub repositories"],
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
intent: "Find pull requests",
|
|
111
|
+
tool: "GITHUB_FIND_PULL_REQUESTS",
|
|
112
|
+
required_args: [],
|
|
113
|
+
arg_hints: {},
|
|
114
|
+
example_prompts: ["check my recent PRs", "show my recent pull requests"],
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
intent: "List repo pull requests",
|
|
118
|
+
tool: "GITHUB_LIST_PULL_REQUESTS",
|
|
119
|
+
required_args: ["owner", "repo"],
|
|
120
|
+
arg_hints: {
|
|
121
|
+
owner: "Repository owner or organization login.",
|
|
122
|
+
repo: "Repository name without the .git suffix.",
|
|
123
|
+
},
|
|
124
|
+
example_prompts: ["list PRs for this repo", "show pull requests in this repository"],
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
intent: "Get pull request",
|
|
128
|
+
tool: "GITHUB_GET_A_PULL_REQUEST",
|
|
129
|
+
required_args: ["owner", "repo", "pull_number"],
|
|
130
|
+
arg_hints: {
|
|
131
|
+
owner: "Repository owner or organization login.",
|
|
132
|
+
repo: "Repository name without the .git suffix.",
|
|
133
|
+
pull_number: "Numeric pull request number.",
|
|
134
|
+
},
|
|
135
|
+
example_prompts: ["show this pull request", "get PR details"],
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
notion: [
|
|
139
|
+
{
|
|
140
|
+
intent: "Search pages",
|
|
141
|
+
tool: "NOTION_SEARCH",
|
|
142
|
+
required_args: [],
|
|
143
|
+
arg_hints: {},
|
|
144
|
+
example_prompts: ["search Notion", "find a Notion page"],
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
"google-calendar": [
|
|
148
|
+
{
|
|
149
|
+
intent: "Upcoming events",
|
|
150
|
+
tool: "GOOGLE_CALENDAR_EVENTS_LIST",
|
|
151
|
+
required_args: [],
|
|
152
|
+
arg_hints: {
|
|
153
|
+
time_min: "RFC3339 datetime string.",
|
|
154
|
+
time_max: "RFC3339 datetime string.",
|
|
155
|
+
},
|
|
156
|
+
example_prompts: ["what's upcoming on my calendar", "show upcoming calendar events"],
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
intent: "List events",
|
|
160
|
+
tool: "GOOGLE_CALENDAR_EVENTS_LIST",
|
|
161
|
+
required_args: [],
|
|
162
|
+
arg_hints: {
|
|
163
|
+
time_min: "RFC3339 datetime string.",
|
|
164
|
+
time_max: "RFC3339 datetime string.",
|
|
165
|
+
},
|
|
166
|
+
example_prompts: ["show my calendar events", "list upcoming meetings"],
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
intent: "Find event",
|
|
170
|
+
tool: "GOOGLE_CALENDAR_EVENTS_LIST",
|
|
171
|
+
required_args: [],
|
|
172
|
+
arg_hints: {
|
|
173
|
+
query: "Search text for matching events if the tool supports it.",
|
|
174
|
+
time_min: "RFC3339 datetime string.",
|
|
175
|
+
time_max: "RFC3339 datetime string.",
|
|
176
|
+
},
|
|
177
|
+
example_prompts: ["find my event tomorrow", "search for a calendar event"],
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
linear: [
|
|
181
|
+
{
|
|
182
|
+
intent: "List issues",
|
|
183
|
+
tool: "LINEAR_LIST_ISSUES",
|
|
184
|
+
required_args: [],
|
|
185
|
+
arg_hints: {},
|
|
186
|
+
example_prompts: ["list Linear issues", "show Linear tickets"],
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
function jsonResult(payload: unknown) {
|
|
192
|
+
return {
|
|
193
|
+
content: [{ type: "text" as const, text: JSON.stringify(payload, null, 2) }],
|
|
194
|
+
details: payload,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function asRecord(value: unknown): UnknownRecord | undefined {
|
|
199
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
200
|
+
? (value as UnknownRecord)
|
|
201
|
+
: undefined;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function readString(value: unknown): string | undefined {
|
|
205
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function normalizeResolverApp(value: string | undefined): string | undefined {
|
|
209
|
+
const normalized = value?.trim().toLowerCase();
|
|
210
|
+
if (!normalized) {
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
213
|
+
return APP_ALIASES[normalized] ?? normalized.replace(/\s+/g, "-");
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function humanizeResolverApp(value: string | undefined): string {
|
|
217
|
+
const normalized = normalizeResolverApp(value);
|
|
218
|
+
if (!normalized) {
|
|
219
|
+
return "App";
|
|
220
|
+
}
|
|
221
|
+
const labels: Record<string, string> = {
|
|
222
|
+
gmail: "Gmail",
|
|
223
|
+
slack: "Slack",
|
|
224
|
+
github: "GitHub",
|
|
225
|
+
notion: "Notion",
|
|
226
|
+
"google-calendar": "Google Calendar",
|
|
227
|
+
linear: "Linear",
|
|
228
|
+
};
|
|
229
|
+
return labels[normalized]
|
|
230
|
+
?? normalized.split("-").map((token) => token.charAt(0).toUpperCase() + token.slice(1)).join(" ");
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function buildComposioActionLink(action: "connect" | "reconnect", app: string | undefined): string | null {
|
|
234
|
+
const normalizedApp = normalizeResolverApp(app);
|
|
235
|
+
if (!normalizedApp) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
const params = new URLSearchParams({
|
|
239
|
+
toolkit: normalizedApp,
|
|
240
|
+
name: humanizeResolverApp(normalizedApp),
|
|
241
|
+
});
|
|
242
|
+
const label = `${action === "connect" ? "Connect" : "Reconnect"} ${humanizeResolverApp(normalizedApp)}`;
|
|
243
|
+
return `[${label}](dench://composio/${action}?${params.toString()})`;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function buildResolverActionDetails(action: "connect" | "reconnect", app: string | undefined) {
|
|
247
|
+
const normalizedApp = normalizeResolverApp(app);
|
|
248
|
+
if (!normalizedApp) {
|
|
249
|
+
return {};
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
action_required: action,
|
|
253
|
+
toolkit_slug: normalizedApp,
|
|
254
|
+
toolkit_name: humanizeResolverApp(normalizedApp),
|
|
255
|
+
action_link_markdown: buildComposioActionLink(action, normalizedApp),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
function tokenize(value: string): string[] {
|
|
260
|
+
return value
|
|
261
|
+
.toLowerCase()
|
|
262
|
+
.split(/[^a-z0-9]+/u)
|
|
263
|
+
.filter((token) => token.length > 1);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
function scoreMatch(text: string, queryTokens: string[]): number {
|
|
267
|
+
const haystack = text.toLowerCase();
|
|
268
|
+
let score = 0;
|
|
269
|
+
for (const token of queryTokens) {
|
|
270
|
+
if (haystack.includes(token)) {
|
|
271
|
+
score += token.length > 4 ? 3 : 1;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return score;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
type ResolverToolCandidate = {
|
|
278
|
+
name: string;
|
|
279
|
+
title: string;
|
|
280
|
+
description_short: string;
|
|
281
|
+
required_args: string[];
|
|
282
|
+
arg_hints: Record<string, string>;
|
|
283
|
+
default_args?: Record<string, unknown>;
|
|
284
|
+
example_args?: Record<string, unknown>;
|
|
285
|
+
example_prompts?: string[];
|
|
286
|
+
source: "indexed" | "recipe" | "ondemand";
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
type ResolverMcpTool = {
|
|
290
|
+
name: string;
|
|
291
|
+
description?: string;
|
|
292
|
+
title?: string;
|
|
293
|
+
inputSchema?: {
|
|
294
|
+
type?: string;
|
|
295
|
+
properties?: Record<string, unknown>;
|
|
296
|
+
required?: string[];
|
|
297
|
+
};
|
|
298
|
+
annotations?: {
|
|
299
|
+
title?: string;
|
|
300
|
+
readOnlyHint?: boolean;
|
|
301
|
+
};
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
function toolkitSlugToToolPrefix(slug: string): string {
|
|
305
|
+
return (normalizeResolverApp(slug) ?? slug).toUpperCase().replace(/-/g, "_") + "_";
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
function extractResolverRequiredArgs(schema: ResolverMcpTool["inputSchema"]): string[] {
|
|
309
|
+
if (!schema || schema.type !== "object" || !Array.isArray(schema.required)) {
|
|
310
|
+
return [];
|
|
311
|
+
}
|
|
312
|
+
return schema.required.filter((value): value is string =>
|
|
313
|
+
typeof value === "string" && value.trim().length > 0);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
function buildResolverArgHints(
|
|
317
|
+
toolName: string,
|
|
318
|
+
schema: ResolverMcpTool["inputSchema"],
|
|
319
|
+
): Record<string, string> {
|
|
320
|
+
const props = schema?.type === "object" ? schema.properties : undefined;
|
|
321
|
+
if (!props) {
|
|
322
|
+
return {};
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
const hints: Record<string, string> = {};
|
|
326
|
+
const upper = toolName.toUpperCase();
|
|
327
|
+
if (upper.includes("GOOGLE_CALENDAR") && props.time_min) {
|
|
328
|
+
hints.time_min = "RFC3339 datetime string.";
|
|
329
|
+
}
|
|
330
|
+
if (upper.includes("GOOGLE_CALENDAR") && props.time_max) {
|
|
331
|
+
hints.time_max = "RFC3339 datetime string.";
|
|
332
|
+
}
|
|
333
|
+
if (upper.includes("GOOGLE_CALENDAR") && props.calendar_id) {
|
|
334
|
+
hints.calendar_id = "Calendar identifier. Use the calendar list tool first if needed.";
|
|
335
|
+
}
|
|
336
|
+
if (upper.includes("GITHUB") && props.owner) {
|
|
337
|
+
hints.owner = "Repository owner or organization login.";
|
|
338
|
+
}
|
|
339
|
+
if (upper.includes("GITHUB") && props.repo) {
|
|
340
|
+
hints.repo = "Repository name without the .git suffix.";
|
|
341
|
+
}
|
|
342
|
+
if (upper.includes("GITHUB") && props.pull_number) {
|
|
343
|
+
hints.pull_number = "Numeric pull request number.";
|
|
344
|
+
}
|
|
345
|
+
for (const [key, value] of Object.entries(props)) {
|
|
346
|
+
const prop = asRecord(value);
|
|
347
|
+
if (prop?.type === "array" && !hints[key]) {
|
|
348
|
+
hints[key] = "Must be a JSON array, not a comma-separated string.";
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
return hints;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
function buildResolverCandidateFromCatalog(tool: ResolverMcpTool): ResolverToolCandidate {
|
|
355
|
+
return {
|
|
356
|
+
name: tool.name,
|
|
357
|
+
title:
|
|
358
|
+
tool.title?.trim() ||
|
|
359
|
+
tool.annotations?.title?.trim() ||
|
|
360
|
+
tool.name,
|
|
361
|
+
description_short: tool.description?.trim() ?? "",
|
|
362
|
+
required_args: extractResolverRequiredArgs(tool.inputSchema),
|
|
363
|
+
arg_hints: buildResolverArgHints(tool.name, tool.inputSchema),
|
|
364
|
+
source: "ondemand",
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
function buildIndexedToolCandidates(
|
|
369
|
+
app: ComposioToolIndexFile["connected_apps"][number],
|
|
370
|
+
): ResolverToolCandidate[] {
|
|
371
|
+
const out = new Map<string, ResolverToolCandidate>();
|
|
372
|
+
const staticFallbackRecipes = STATIC_COMPOSIO_FALLBACK[
|
|
373
|
+
normalizeResolverApp(app.toolkit_slug) ?? app.toolkit_slug
|
|
374
|
+
] ?? [];
|
|
375
|
+
for (const tool of app.tools) {
|
|
376
|
+
out.set(tool.name, {
|
|
377
|
+
...tool,
|
|
378
|
+
source: "indexed",
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
for (const [intent, toolName] of Object.entries(app.recipes)) {
|
|
382
|
+
if (out.has(toolName)) {
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
385
|
+
const fallbackRecipe = staticFallbackRecipes.find((recipe) =>
|
|
386
|
+
recipe.tool === toolName || recipe.intent === intent);
|
|
387
|
+
out.set(toolName, {
|
|
388
|
+
name: toolName,
|
|
389
|
+
title: intent,
|
|
390
|
+
description_short: `Recommended ${app.toolkit_name} recipe for ${intent}.`,
|
|
391
|
+
required_args: fallbackRecipe?.required_args ?? [],
|
|
392
|
+
arg_hints: fallbackRecipe?.arg_hints ?? {},
|
|
393
|
+
...(fallbackRecipe?.default_args ? { default_args: fallbackRecipe.default_args } : {}),
|
|
394
|
+
example_prompts: fallbackRecipe?.example_prompts ?? [intent],
|
|
395
|
+
source: "recipe",
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
return Array.from(out.values());
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
function chooseBestTool(
|
|
402
|
+
candidates: ResolverToolCandidate[],
|
|
403
|
+
recipes: Record<string, string>,
|
|
404
|
+
queryText: string,
|
|
405
|
+
) {
|
|
406
|
+
const queryTokens = tokenize(queryText);
|
|
407
|
+
const recipeByTool = new Map<string, string[]>();
|
|
408
|
+
for (const [intent, toolName] of Object.entries(recipes)) {
|
|
409
|
+
const bucket = recipeByTool.get(toolName);
|
|
410
|
+
if (bucket) {
|
|
411
|
+
bucket.push(intent);
|
|
412
|
+
} else {
|
|
413
|
+
recipeByTool.set(toolName, [intent]);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
let bestTool = candidates[0] ?? null;
|
|
418
|
+
let bestScore = -1;
|
|
419
|
+
for (const tool of candidates) {
|
|
420
|
+
const recipeHints = recipeByTool.get(tool.name) ?? [];
|
|
421
|
+
const score = scoreMatch(
|
|
422
|
+
[
|
|
423
|
+
tool.name,
|
|
424
|
+
tool.title,
|
|
425
|
+
tool.description_short,
|
|
426
|
+
...recipeHints,
|
|
427
|
+
...(tool.example_prompts ?? []),
|
|
428
|
+
].join(" "),
|
|
429
|
+
queryTokens,
|
|
430
|
+
);
|
|
431
|
+
if (score > bestScore) {
|
|
432
|
+
bestTool = tool;
|
|
433
|
+
bestScore = score;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
return {
|
|
438
|
+
tool: bestTool,
|
|
439
|
+
recipe: bestTool ? (recipeByTool.get(bestTool.name)?.[0] ?? null) : null,
|
|
440
|
+
score: bestScore,
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
function resolveGatewayUrlFromApi(api: OpenClawPluginApi): string | null {
|
|
445
|
+
const plugins = asRecord(asRecord(api?.config)?.plugins)?.entries;
|
|
446
|
+
const denchGateway = asRecord(asRecord(plugins)?.["dench-ai-gateway"]);
|
|
447
|
+
const configured = readString(asRecord(denchGateway?.config)?.gatewayUrl);
|
|
448
|
+
return configured ?? process.env.DENCH_GATEWAY_URL?.trim() ?? null;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
function resolveComposioApiKeyFromApi(api: OpenClawPluginApi): string | null {
|
|
452
|
+
const provider = asRecord(asRecord(asRecord(api?.config)?.models)?.providers)?.["dench-cloud"];
|
|
453
|
+
return readString(asRecord(provider)?.apiKey)
|
|
454
|
+
?? process.env.DENCH_CLOUD_API_KEY?.trim()
|
|
455
|
+
?? process.env.DENCH_API_KEY?.trim()
|
|
456
|
+
?? null;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
function extractToolsFromJsonRpcMessage(payload: unknown): ResolverMcpTool[] {
|
|
460
|
+
const result = asRecord(asRecord(payload)?.result);
|
|
461
|
+
const tools = result?.tools;
|
|
462
|
+
if (!Array.isArray(tools)) {
|
|
463
|
+
return [];
|
|
464
|
+
}
|
|
465
|
+
return tools
|
|
466
|
+
.map((item) => asRecord(item))
|
|
467
|
+
.filter((item): item is UnknownRecord => Boolean(item))
|
|
468
|
+
.map((tool) => ({
|
|
469
|
+
name: readString(tool.name) ?? "",
|
|
470
|
+
description: readString(tool.description),
|
|
471
|
+
title: readString(tool.title ?? asRecord(tool.annotations)?.title),
|
|
472
|
+
inputSchema: asRecord(tool.inputSchema) as ResolverMcpTool["inputSchema"],
|
|
473
|
+
annotations: asRecord(tool.annotations) as ResolverMcpTool["annotations"],
|
|
474
|
+
}))
|
|
475
|
+
.filter((tool) => tool.name.length > 0);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
function parseSseJsonRpcTools(body: string): ResolverMcpTool[] {
|
|
479
|
+
let lastPayload: unknown = null;
|
|
480
|
+
for (const line of body.split(/\r?\n/)) {
|
|
481
|
+
const trimmed = line.trim();
|
|
482
|
+
if (!trimmed.startsWith("data:")) {
|
|
483
|
+
continue;
|
|
484
|
+
}
|
|
485
|
+
const raw = trimmed.slice(5).trim();
|
|
486
|
+
if (!raw || raw === "[DONE]") {
|
|
487
|
+
continue;
|
|
488
|
+
}
|
|
489
|
+
try {
|
|
490
|
+
lastPayload = JSON.parse(raw);
|
|
491
|
+
} catch {
|
|
492
|
+
// Ignore non-JSON SSE frames.
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
return lastPayload === null ? [] : extractToolsFromJsonRpcMessage(lastPayload);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
async function fetchBroaderCatalogSlice(
|
|
499
|
+
api: OpenClawPluginApi,
|
|
500
|
+
appSlug: string,
|
|
501
|
+
): Promise<ResolverToolCandidate[]> {
|
|
502
|
+
const gatewayUrl = resolveGatewayUrlFromApi(api);
|
|
503
|
+
const apiKey = resolveComposioApiKeyFromApi(api);
|
|
504
|
+
if (!gatewayUrl || !apiKey) {
|
|
505
|
+
return [];
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
const response = await fetch(`${gatewayUrl.replace(/\/$/, "")}/v1/composio/mcp`, {
|
|
509
|
+
method: "POST",
|
|
510
|
+
headers: {
|
|
511
|
+
"content-type": "application/json",
|
|
512
|
+
authorization: `Bearer ${apiKey}`,
|
|
513
|
+
accept: "application/json, text/event-stream",
|
|
514
|
+
},
|
|
515
|
+
body: JSON.stringify({
|
|
516
|
+
jsonrpc: "2.0",
|
|
517
|
+
id: 1,
|
|
518
|
+
method: "tools/list",
|
|
519
|
+
params: {
|
|
520
|
+
connected_toolkits: [appSlug],
|
|
521
|
+
},
|
|
522
|
+
}),
|
|
523
|
+
});
|
|
524
|
+
if (!response.ok) {
|
|
525
|
+
return [];
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
const text = await response.text();
|
|
529
|
+
const tools = (() => {
|
|
530
|
+
try {
|
|
531
|
+
return extractToolsFromJsonRpcMessage(JSON.parse(text));
|
|
532
|
+
} catch {
|
|
533
|
+
return parseSseJsonRpcTools(text);
|
|
534
|
+
}
|
|
535
|
+
})();
|
|
536
|
+
const prefix = toolkitSlugToToolPrefix(appSlug);
|
|
537
|
+
return tools
|
|
538
|
+
.filter((tool) => tool.name.startsWith(prefix))
|
|
539
|
+
.map(buildResolverCandidateFromCatalog);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
function describeStatusForResolver(workspaceDir: string): {
|
|
543
|
+
verified: boolean;
|
|
544
|
+
message: string | null;
|
|
545
|
+
} {
|
|
546
|
+
const status = readComposioMcpStatusFile(workspaceDir);
|
|
547
|
+
return {
|
|
548
|
+
verified: status?.summary?.verified === true,
|
|
549
|
+
message: typeof status?.summary?.message === "string" ? status.summary.message : null,
|
|
550
|
+
};
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
function chooseApp(
|
|
554
|
+
index: ComposioToolIndexFile,
|
|
555
|
+
requestedApp: string | undefined,
|
|
556
|
+
queryText: string,
|
|
557
|
+
): ComposioToolIndexFile["connected_apps"][number] | null {
|
|
558
|
+
if (requestedApp) {
|
|
559
|
+
const normalized = normalizeResolverApp(requestedApp);
|
|
560
|
+
const direct = index.connected_apps.find((app) =>
|
|
561
|
+
normalizeResolverApp(app.toolkit_slug) === normalized
|
|
562
|
+
|| normalizeResolverApp(app.toolkit_name) === normalized,
|
|
563
|
+
);
|
|
564
|
+
if (direct) {
|
|
565
|
+
return direct;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
const queryTokens = tokenize(queryText);
|
|
570
|
+
let best: ComposioToolIndexFile["connected_apps"][number] | null = null;
|
|
571
|
+
let bestScore = 0;
|
|
572
|
+
for (const app of index.connected_apps) {
|
|
573
|
+
const appScore = scoreMatch(
|
|
574
|
+
`${app.toolkit_slug} ${app.toolkit_name} ${Object.keys(app.recipes).join(" ")}`,
|
|
575
|
+
queryTokens,
|
|
576
|
+
);
|
|
577
|
+
if (appScore > bestScore) {
|
|
578
|
+
best = app;
|
|
579
|
+
bestScore = appScore;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
return best;
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
function chooseTool(
|
|
586
|
+
app: ComposioToolIndexFile["connected_apps"][number],
|
|
587
|
+
queryText: string,
|
|
588
|
+
) {
|
|
589
|
+
return chooseBestTool(buildIndexedToolCandidates(app), app.recipes, queryText);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
function chooseFallbackTool(app: string, queryText: string) {
|
|
593
|
+
const recipes = STATIC_COMPOSIO_FALLBACK[app] ?? [];
|
|
594
|
+
const queryTokens = tokenize(queryText);
|
|
595
|
+
let best = recipes[0] ?? null;
|
|
596
|
+
let bestScore = -1;
|
|
597
|
+
for (const recipe of recipes) {
|
|
598
|
+
const score = scoreMatch(
|
|
599
|
+
[recipe.intent, recipe.tool, ...(recipe.example_prompts ?? [])].join(" "),
|
|
600
|
+
queryTokens,
|
|
601
|
+
);
|
|
602
|
+
if (score > bestScore) {
|
|
603
|
+
best = recipe;
|
|
604
|
+
bestScore = score;
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
return best;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
function createComposioResolveTool(api: OpenClawPluginApi): AnyAgentTool {
|
|
611
|
+
return {
|
|
612
|
+
name: COMPOSIO_RESOLVE_TOOL_NAME,
|
|
613
|
+
label: "Composio Resolve Tool",
|
|
614
|
+
description:
|
|
615
|
+
"Resolve the best Composio tool and argument hints for a connected app request without scanning the full Composio catalog.",
|
|
616
|
+
parameters: COMPOSIO_RESOLVE_TOOL_PARAMETERS,
|
|
617
|
+
async execute(args) {
|
|
618
|
+
const workspaceDir = resolveWorkspaceDir(api);
|
|
619
|
+
if (!workspaceDir) {
|
|
620
|
+
return jsonResult({ error: "No workspace is configured for DenchClaw." });
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
const payload = asRecord(args) ?? {};
|
|
624
|
+
const requestedApp = readString(payload.app);
|
|
625
|
+
const intent = readString(payload.intent) ?? "";
|
|
626
|
+
const userRequest = readString(payload.userRequest);
|
|
627
|
+
const queryText = [requestedApp, intent, userRequest].filter(Boolean).join(" ");
|
|
628
|
+
const normalizedRequestedApp = normalizeResolverApp(requestedApp);
|
|
629
|
+
|
|
630
|
+
const index = readComposioToolIndexFile(workspaceDir);
|
|
631
|
+
if (!index || index.connected_apps.length === 0) {
|
|
632
|
+
if (!normalizedRequestedApp) {
|
|
633
|
+
return jsonResult({
|
|
634
|
+
error: "No verified Composio tool index is available in this workspace.",
|
|
635
|
+
guidance: "Open App Connections, repair Composio MCP if needed, rebuild the tool index, or provide the target app explicitly.",
|
|
636
|
+
});
|
|
637
|
+
}
|
|
638
|
+
const fallback = chooseFallbackTool(normalizedRequestedApp, queryText);
|
|
639
|
+
if (!fallback) {
|
|
640
|
+
return jsonResult({
|
|
641
|
+
error: `No bundled fallback recipe exists for ${normalizedRequestedApp}.`,
|
|
642
|
+
guidance: "Rebuild the Composio tool index from App Connections to get the exact tool list for this workspace.",
|
|
643
|
+
});
|
|
644
|
+
}
|
|
645
|
+
const status = describeStatusForResolver(workspaceDir);
|
|
646
|
+
const actionLink = buildComposioActionLink("connect", normalizedRequestedApp);
|
|
647
|
+
return jsonResult({
|
|
648
|
+
app: normalizedRequestedApp,
|
|
649
|
+
app_name: humanizeResolverApp(normalizedRequestedApp),
|
|
650
|
+
connected_accounts: 0,
|
|
651
|
+
availability: "connect_required",
|
|
652
|
+
server: "composio",
|
|
653
|
+
tool: fallback.tool,
|
|
654
|
+
recommended_intent: fallback.intent,
|
|
655
|
+
required_args: fallback.required_args,
|
|
656
|
+
arg_hints: fallback.arg_hints,
|
|
657
|
+
default_args: fallback.default_args ?? {},
|
|
658
|
+
example_args: fallback.default_args ?? {},
|
|
659
|
+
example_prompts: fallback.example_prompts ?? [],
|
|
660
|
+
mcp_verified: status.verified,
|
|
661
|
+
status_message: status.message,
|
|
662
|
+
instruction: actionLink
|
|
663
|
+
? `Treat ${humanizeResolverApp(normalizedRequestedApp)} as unavailable until proven otherwise. Only call \`${fallback.tool}\` if it is already available in this session; otherwise explain the limitation briefly and end the assistant reply with this exact markdown link: ${actionLink}`
|
|
664
|
+
: `Treat ${humanizeResolverApp(normalizedRequestedApp)} as unavailable until proven otherwise. Only call \`${fallback.tool}\` if it is already available in this session.`,
|
|
665
|
+
...buildResolverActionDetails("connect", normalizedRequestedApp),
|
|
666
|
+
});
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
const app = chooseApp(index, requestedApp, queryText);
|
|
670
|
+
if (!app) {
|
|
671
|
+
const actionLink = buildComposioActionLink("connect", normalizedRequestedApp);
|
|
672
|
+
return jsonResult({
|
|
673
|
+
error: "Could not match the request to a connected Composio app.",
|
|
674
|
+
available_apps: index.connected_apps.map((entry) => entry.toolkit_slug),
|
|
675
|
+
availability: "connect_required",
|
|
676
|
+
instruction: actionLink
|
|
677
|
+
? `Explain briefly that the requested app is not currently connected, then end the assistant reply with this exact markdown link: ${actionLink}`
|
|
678
|
+
: "Explain briefly that the requested app is not currently connected.",
|
|
679
|
+
...buildResolverActionDetails("connect", normalizedRequestedApp),
|
|
680
|
+
});
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
let chosen = chooseTool(app, queryText);
|
|
684
|
+
if (!chosen.tool || chosen.score <= 0) {
|
|
685
|
+
const broaderCatalog = await fetchBroaderCatalogSlice(api, app.toolkit_slug).catch(() => []);
|
|
686
|
+
if (broaderCatalog.length > 0) {
|
|
687
|
+
const broaderChoice = chooseBestTool(broaderCatalog, app.recipes, queryText);
|
|
688
|
+
if (broaderChoice.tool && broaderChoice.score > chosen.score) {
|
|
689
|
+
chosen = broaderChoice;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
const { tool, recipe } = chosen;
|
|
695
|
+
if (!tool) {
|
|
696
|
+
const reconnectLink = buildComposioActionLink("reconnect", app.toolkit_slug);
|
|
697
|
+
return jsonResult({
|
|
698
|
+
error: `No indexed Composio tools are available for ${app.toolkit_name}.`,
|
|
699
|
+
app: app.toolkit_slug,
|
|
700
|
+
availability: "reconnect_recommended",
|
|
701
|
+
instruction: reconnectLink
|
|
702
|
+
? `The connected ${app.toolkit_name} app looks unavailable or stale. Explain that briefly and end the assistant reply with this exact markdown link: ${reconnectLink}`
|
|
703
|
+
: `The connected ${app.toolkit_name} app looks unavailable or stale.`,
|
|
704
|
+
...buildResolverActionDetails("reconnect", app.toolkit_slug),
|
|
705
|
+
});
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
const status = describeStatusForResolver(workspaceDir);
|
|
709
|
+
const directlyCallable = app.tools.some((entry) => entry.name === tool.name)
|
|
710
|
+
|| Object.values(app.recipes).includes(tool.name);
|
|
711
|
+
const instruction = directlyCallable
|
|
712
|
+
? `Call the Composio tool \`${tool.name}\` directly. Do not use gog, shell CLIs, curl, or raw gateway HTTP.`
|
|
713
|
+
: `This recommendation came from the broader Composio catalog fallback. If \`${tool.name}\` is directly available in this session, call it. Otherwise rebuild the Composio tool index before retrying.`;
|
|
714
|
+
return jsonResult({
|
|
715
|
+
app: app.toolkit_slug,
|
|
716
|
+
app_name: app.toolkit_name,
|
|
717
|
+
connected_accounts: app.account_count,
|
|
718
|
+
server: "composio",
|
|
719
|
+
tool: tool.name,
|
|
720
|
+
source: tool.source,
|
|
721
|
+
directly_callable: directlyCallable,
|
|
722
|
+
recommended_intent: recipe,
|
|
723
|
+
required_args: tool.required_args,
|
|
724
|
+
arg_hints: tool.arg_hints,
|
|
725
|
+
default_args: tool.default_args ?? {},
|
|
726
|
+
example_args: tool.example_args ?? tool.default_args ?? {},
|
|
727
|
+
example_prompts: tool.example_prompts ?? [],
|
|
728
|
+
mcp_verified: status.verified,
|
|
729
|
+
status_message: status.message,
|
|
730
|
+
instruction,
|
|
731
|
+
});
|
|
732
|
+
},
|
|
733
|
+
};
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
function buildComposioDefaultGuidance(composioAppsSkillPath: string): string {
|
|
737
|
+
return [
|
|
738
|
+
"## Connected App Tools (via Composio MCP)",
|
|
739
|
+
"",
|
|
740
|
+
"Composio is the default integration layer for connected apps in this workspace.",
|
|
741
|
+
"",
|
|
742
|
+
"- If the user mentions Composio, rube, map, MCP, or says an app is already connected, use the Composio tools first.",
|
|
743
|
+
`- **When the user asks about ANY third-party app or service** (e.g. Slack, HubSpot, Salesforce, Jira, Asana, Discord, Airtable, Notion, Linear, Gmail, GitHub, Google Calendar, Stripe, Zendesk, Trello, etc.), always call \`${COMPOSIO_RESOLVE_TOOL_NAME}\` first to verify whether it is connected before answering. This applies to ALL apps, not just the ones listed here.`,
|
|
744
|
+
`- If the exact Composio tool is not obvious, call \`${COMPOSIO_RESOLVE_TOOL_NAME}\` before guessing or scanning the full Composio catalog.`,
|
|
745
|
+
`- Load and follow \`${composioAppsSkillPath}\` for Gmail, Slack, GitHub, Notion, Google Calendar, and Linear recipes when the generated tool index is missing.`,
|
|
746
|
+
"- Never use `gog`, shell CLIs, curl, or raw `/v1/composio/*` HTTP for Gmail/Calendar/Drive/Slack/GitHub/Notion/Linear when Composio is connected or the user mentions Composio/rube/map/MCP.",
|
|
747
|
+
"- **When the resolver returns `action_link_markdown`, you MUST end the assistant reply with that exact markdown link.** Do not omit it. Do not rephrase it as plain text. The link renders as a clickable button in chat.",
|
|
748
|
+
"- Missing first-time connection example: `[Connect Slack](dench://composio/connect?toolkit=slack&name=Slack)`.",
|
|
749
|
+
"- Stale or unusable connection example: `[Reconnect Slack](dench://composio/reconnect?toolkit=slack&name=Slack)`.",
|
|
750
|
+
"- If the resolver returns an error with `availability: \"connect_required\"`, briefly explain the app is not connected and end with the connect link. Do NOT suggest navigating to Integrations manually.",
|
|
751
|
+
"- Gmail fast path: `GMAIL_FETCH_EMAILS` with `label_ids: [\"INBOX\"]` and `max_results: 10`; for one message use `GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID`.",
|
|
752
|
+
"- GitHub fast path: for 'recent PRs' or general PR discovery, prefer `GITHUB_FIND_PULL_REQUESTS` when available.",
|
|
753
|
+
"- Google Calendar fast path: for 'what's upcoming' or 'find an event', prefer `GOOGLE_CALENDAR_EVENTS_LIST` with an explicit time window when the schema supports it.",
|
|
754
|
+
"- If Composio MCP is unavailable in this session, stop and report repair guidance instead of bypassing it.",
|
|
755
|
+
"- If a Composio tool call fails because of argument shape, fix the arguments and retry once before considering any fallback.",
|
|
756
|
+
"",
|
|
757
|
+
].join("\n");
|
|
758
|
+
}
|
|
759
|
+
|
|
5
760
|
export function buildIdentityPrompt(workspaceDir: string): string {
|
|
6
761
|
const skillsDir = path.join(workspaceDir, "skills");
|
|
7
762
|
const crmSkillPath = path.join(skillsDir, "crm", "SKILL.md");
|
|
8
|
-
const browserSkillPath = path.join(skillsDir, "browser", "SKILL.md");
|
|
9
763
|
const appBuilderSkillPath = path.join(skillsDir, "app-builder", "SKILL.md");
|
|
764
|
+
const composioAppsSkillPath = path.join(skillsDir, "composio-apps", "SKILL.md");
|
|
10
765
|
const appsDir = path.join(workspaceDir, "apps");
|
|
11
766
|
const dbPath = path.join(workspaceDir, "workspace.duckdb");
|
|
12
767
|
|
|
768
|
+
const composioCheatSheet = loadComposioToolCheatSheetMarkdown(workspaceDir);
|
|
769
|
+
const composioGuidance = composioCheatSheet
|
|
770
|
+
?? buildComposioDefaultGuidance(composioAppsSkillPath);
|
|
771
|
+
|
|
13
772
|
return `# DenchClaw System Prompt
|
|
14
773
|
|
|
15
774
|
You are **DenchClaw** — a strategic AI orchestrator built by Dench (dench.com), running on top of [OpenClaw](https://github.com/openclaw/openclaw). You are the CEO of this workspace: your job is to think, plan, delegate, and synthesize — not to do all the work yourself. When referring to yourself, always use **DenchClaw** (not OpenClaw).
|
|
@@ -29,7 +788,7 @@ You are a hybrid orchestrator. For simple tasks you act directly; for complex ta
|
|
|
29
788
|
|
|
30
789
|
### Delegate to subagents
|
|
31
790
|
- Task spans multiple domains (e.g. research + build + deploy)
|
|
32
|
-
- Task is long-running (
|
|
791
|
+
- Task is long-running (multi-page web research, bulk data enrichment, large app builds)
|
|
33
792
|
- Task benefits from parallelism (e.g. analyze 3 competitors simultaneously)
|
|
34
793
|
- Task requires deep specialist knowledge (complex app architecture, advanced SQL)
|
|
35
794
|
- Task involves more than ~3 sequential steps
|
|
@@ -45,14 +804,14 @@ When in doubt, delegate. A well-delegated task finishes faster and produces bett
|
|
|
45
804
|
| Specialist | Skill Path | Capabilities | Model Guidance |
|
|
46
805
|
|---|---|---|---|
|
|
47
806
|
| **CRM Analyst** | \`${crmSkillPath}\` | DuckDB queries, object/field/entry CRUD, pipeline ops, data enrichment, PIVOT views, report generation, workspace docs | Default model; fast model for simple queries |
|
|
48
|
-
| **Browser Agent** | \`${browserSkillPath}\` | Web scraping, form filling, authenticated browsing, screenshots, multi-page workflows | Default model |
|
|
49
807
|
| **App Builder** | \`${appBuilderSkillPath}\` | Build \`.dench.app\` web apps with DuckDB, Chart.js/D3, games, AI chat UIs, platform API | Capable model with thinking enabled |
|
|
808
|
+
| **App Integration** | \`${composioAppsSkillPath}\` | Connected app tools (Gmail, Slack, etc.) via Composio MCP — recipes and argument defaults | Default model |
|
|
50
809
|
|
|
51
810
|
### Ad-hoc specialists (check for custom skills first)
|
|
52
811
|
|
|
53
812
|
| Specialist | When to Use | Model Guidance |
|
|
54
813
|
|---|---|---|
|
|
55
|
-
| **Researcher** | Market research, competitive analysis, fact-finding, technical research | Capable model with thinking enabled |
|
|
814
|
+
| **Researcher** | Market research, competitive analysis, fact-finding, technical research, multi-page web research | Capable model with thinking enabled |
|
|
56
815
|
| **Writer** | Emails, outreach sequences, proposals, blog posts, documentation | Fast model for drafts, default for polished output |
|
|
57
816
|
|
|
58
817
|
Before spawning any specialist, scan \`${skillsDir}\` for a matching custom skill. If one exists, inject it into the subagent's task description. Custom skills always take precedence over ad-hoc defaults.
|
|
@@ -63,7 +822,7 @@ When spawning a subagent via \`sessions_spawn\`:
|
|
|
63
822
|
|
|
64
823
|
1. **Task**: Write a clear, self-contained brief. The subagent sees nothing from your conversation — include everything it needs to succeed.
|
|
65
824
|
2. **Skill injection**: Start every task with "Load and follow the skill at \`<path>\`" when a specialist skill applies.
|
|
66
|
-
3. **Label**: Short human-readable label (e.g. "CRM: enrich leads", "
|
|
825
|
+
3. **Label**: Short human-readable label (e.g. "CRM: enrich leads", "Research: pricing sweep").
|
|
67
826
|
4. **Model**: Override with \`model\` when a different tier is appropriate.
|
|
68
827
|
5. **Parallelism**: Spawn independent subagents concurrently. Chain dependent work sequentially via announce results.
|
|
69
828
|
|
|
@@ -96,6 +855,24 @@ For multi-session projects, write a session handoff summary to \`${workspaceDir}
|
|
|
96
855
|
- **Exec Approvals**: All commands are automatically approved by default. All exec calls must be elevated: true.
|
|
97
856
|
- **Chat History**: All chat history is stored in \`${workspaceDir}/.openclaw/web-chat/\`. This is where you can find all your past conversations and the context for the current session.
|
|
98
857
|
|
|
858
|
+
## Tool preferences
|
|
859
|
+
|
|
860
|
+
- Prefer \`exa_search\` over the built-in \`web_search\` whenever \`exa_search\` is available.
|
|
861
|
+
- Use \`exa_get_contents\` to fetch page contents and \`exa_answer\` for citation-backed answers when they fit the task.
|
|
862
|
+
- Use \`apollo_enrich\` as the default tool for enrichment requests.
|
|
863
|
+
- Treat "enrichment" as structured people/company data work: identifying or verifying a person or company from email, LinkedIn URL, full name, title, company domain, or organization name; filling missing CRM fields; looking up company details from a domain; and finding target people that match title, location, or company/domain filters.
|
|
864
|
+
- For person enrichment, prefer \`apollo_enrich\` with \`action: "people"\` when the user wants to identify or enrich a contact from email, LinkedIn, or name/company hints.
|
|
865
|
+
- For company enrichment, prefer \`apollo_enrich\` with \`action: "company"\` when the user wants firmographic details from a domain.
|
|
866
|
+
- For prospecting or lead-list generation, prefer \`apollo_enrich\` with \`action: "people_search"\` when the user wants people matching titles, locations, or company/domain filters.
|
|
867
|
+
- Use \`exa_search\` and \`exa_get_contents\` to gather open-web context around a person or company when Apollo lacks enough input or when the user wants broader research, news, or website evidence.
|
|
868
|
+
- Use Apollo for structured CRM enrichment and Exa for broader web research; combine them when helpful, but do not substitute Exa for Apollo on explicit enrichment requests unless Apollo is unavailable or insufficient.
|
|
869
|
+
- For connected apps (Gmail, Slack, GitHub, etc.), use the **Composio** tools directly. Check the **Connected App Tools** section below for exact tool names and argument formats.
|
|
870
|
+
- **When the user mentions ANY third-party app or service**, always call \`${COMPOSIO_RESOLVE_TOOL_NAME}\` before answering to verify availability — this applies to all apps (HubSpot, Salesforce, Slack, Gmail, etc.), not just a fixed list. If the resolver says the app is not connected, emit the connect link it provides.
|
|
871
|
+
- If the exact Composio tool name is unclear, call \`${COMPOSIO_RESOLVE_TOOL_NAME}\` before exploring the curated Composio tools for this workspace.
|
|
872
|
+
- **Never** use curl or raw HTTP to call Composio or gateway integration endpoints — always use the Composio tools.
|
|
873
|
+
- **Never** use \`gog\` for Gmail/Calendar/Drive when Composio is connected or the user mentions Composio/rube/map/MCP. \`gog\` is a fallback only when the user explicitly asks for it or Composio is unavailable.
|
|
874
|
+
|
|
875
|
+
${composioGuidance ? `\n${composioGuidance}\n` : ""}
|
|
99
876
|
## Links
|
|
100
877
|
|
|
101
878
|
- Website: https://denchclaw.com
|
|
@@ -108,12 +885,25 @@ export function resolveWorkspaceDir(api: any): string | undefined {
|
|
|
108
885
|
return typeof ws === "string" ? ws.trim() || undefined : undefined;
|
|
109
886
|
}
|
|
110
887
|
|
|
888
|
+
function shouldRegisterComposioResolver(workspaceDir: string): boolean {
|
|
889
|
+
if (readComposioToolIndexFile(workspaceDir)) {
|
|
890
|
+
return true;
|
|
891
|
+
}
|
|
892
|
+
const skillPath = path.join(workspaceDir, "skills", "composio-apps", "SKILL.md");
|
|
893
|
+
return existsSync(skillPath) && readFileSync(skillPath, "utf-8").includes("Composio");
|
|
894
|
+
}
|
|
895
|
+
|
|
111
896
|
export default function register(api: any) {
|
|
112
897
|
const config = api?.config?.plugins?.entries?.["dench-identity"]?.config;
|
|
113
898
|
if (config?.enabled === false) {
|
|
114
899
|
return;
|
|
115
900
|
}
|
|
116
901
|
|
|
902
|
+
const workspaceDir = resolveWorkspaceDir(api);
|
|
903
|
+
if (workspaceDir && typeof api.registerTool === "function" && shouldRegisterComposioResolver(workspaceDir)) {
|
|
904
|
+
api.registerTool(createComposioResolveTool(api));
|
|
905
|
+
}
|
|
906
|
+
|
|
117
907
|
api.on(
|
|
118
908
|
"before_prompt_build",
|
|
119
909
|
(_event: any, _ctx: any) => {
|