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.
Files changed (626) hide show
  1. package/README.md +31 -0
  2. package/apps/web/.next/standalone/apps/web/.next/BUILD_ID +1 -1
  3. package/apps/web/.next/standalone/apps/web/.next/app-build-manifest.json +327 -198
  4. package/apps/web/.next/standalone/apps/web/.next/app-path-routes-manifest.json +44 -26
  5. package/apps/web/.next/standalone/apps/web/.next/build-manifest.json +5 -5
  6. package/apps/web/.next/standalone/apps/web/.next/cache/config.json +3 -3
  7. package/apps/web/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
  8. package/apps/web/.next/standalone/apps/web/.next/react-loadable-manifest.json +6 -6
  9. package/apps/web/.next/standalone/apps/web/.next/required-server-files.json +1 -1
  10. package/apps/web/.next/standalone/apps/web/.next/routes-manifest.json +25 -1
  11. package/apps/web/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/cron/route_client-reference-manifest.js +1 -1
  13. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/proxy/route_client-reference-manifest.js +1 -1
  14. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/route_client-reference-manifest.js +1 -1
  15. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/serve/[...path]/route_client-reference-manifest.js +1 -1
  16. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/store/route_client-reference-manifest.js +1 -1
  17. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/webhooks/[...path]/route_client-reference-manifest.js +1 -1
  18. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/active/route_client-reference-manifest.js +1 -1
  19. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/route.js +2 -2
  20. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
  21. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/runs/route.js +1 -1
  22. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/runs/route_client-reference-manifest.js +1 -1
  23. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route.js +1 -1
  24. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route_client-reference-manifest.js +1 -1
  25. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stream/route_client-reference-manifest.js +1 -1
  26. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/subagents/route.js +1 -1
  27. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/subagents/route_client-reference-manifest.js +1 -1
  28. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route.js +42 -0
  29. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route.js.nft.json +1 -0
  30. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route_client-reference-manifest.js +1 -0
  31. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connect/route.js +1 -0
  32. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connect/route.js.nft.json +1 -0
  33. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connect/route_client-reference-manifest.js +1 -0
  34. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connections/route.js +1 -0
  35. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connections/route.js.nft.json +1 -0
  36. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connections/route_client-reference-manifest.js +1 -0
  37. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route.js +1 -0
  38. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route.js.nft.json +1 -0
  39. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route_client-reference-manifest.js +1 -0
  40. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route.js +1 -0
  41. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route.js.nft.json +1 -0
  42. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route_client-reference-manifest.js +1 -0
  43. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/tool-index/route.js +1 -0
  44. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/tool-index/route.js.nft.json +1 -0
  45. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/tool-index/route_client-reference-manifest.js +1 -0
  46. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/toolkits/route.js +1 -0
  47. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/toolkits/route.js.nft.json +1 -0
  48. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/toolkits/route_client-reference-manifest.js +1 -0
  49. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/[jobId]/runs/route_client-reference-manifest.js +1 -1
  50. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/route_client-reference-manifest.js +1 -1
  51. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/[sessionId]/route_client-reference-manifest.js +1 -1
  52. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/search-transcript/route_client-reference-manifest.js +1 -1
  53. package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route.js +1 -1
  54. package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route_client-reference-manifest.js +1 -1
  55. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/channels/route_client-reference-manifest.js +1 -1
  56. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/chat/route_client-reference-manifest.js +1 -1
  57. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/chat/stream/route_client-reference-manifest.js +1 -1
  58. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/sessions/[id]/route_client-reference-manifest.js +1 -1
  59. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/sessions/route_client-reference-manifest.js +1 -1
  60. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route.js +1 -0
  61. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route.js.nft.json +1 -0
  62. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route_client-reference-manifest.js +1 -0
  63. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route.js +1 -0
  64. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route.js.nft.json +1 -0
  65. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route_client-reference-manifest.js +1 -0
  66. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route.js +1 -0
  67. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route.js.nft.json +1 -0
  68. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route_client-reference-manifest.js +1 -0
  69. package/apps/web/.next/standalone/apps/web/.next/server/app/api/memories/route_client-reference-manifest.js +1 -1
  70. package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/route_client-reference-manifest.js +1 -1
  71. package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/switch/route_client-reference-manifest.js +1 -1
  72. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/[sessionId]/route_client-reference-manifest.js +1 -1
  73. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/route.js +1 -1
  74. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  75. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route.js +1 -0
  76. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route.js.nft.json +1 -0
  77. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route_client-reference-manifest.js +1 -0
  78. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/content/route.js +1 -0
  79. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/content/route.js.nft.json +1 -0
  80. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/content/route_client-reference-manifest.js +1 -0
  81. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/route.js +1 -0
  82. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/route.js.nft.json +1 -0
  83. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/route_client-reference-manifest.js +1 -0
  84. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/browse/route.js +1 -0
  85. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/browse/route.js.nft.json +1 -0
  86. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/browse/route_client-reference-manifest.js +1 -0
  87. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/install/route.js +1 -0
  88. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/install/route.js.nft.json +1 -0
  89. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -0
  90. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/route.js +2 -1
  91. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  92. package/apps/web/.next/standalone/apps/web/.next/server/app/api/terminal/port/route_client-reference-manifest.js +1 -1
  93. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route.js +1 -0
  94. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route.js.nft.json +1 -0
  95. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route_client-reference-manifest.js +1 -0
  96. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route.js +1 -0
  97. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route.js.nft.json +1 -0
  98. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route_client-reference-manifest.js +1 -0
  99. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route.js +1 -0
  100. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route.js.nft.json +1 -0
  101. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route_client-reference-manifest.js +1 -0
  102. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/messages/route_client-reference-manifest.js +1 -1
  103. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/route.js +1 -1
  104. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/route_client-reference-manifest.js +1 -1
  105. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route.js +1 -1
  106. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route_client-reference-manifest.js +1 -1
  107. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/assets/[...path]/route_client-reference-manifest.js +1 -1
  108. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse/route_client-reference-manifest.js +1 -1
  109. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse-file/route_client-reference-manifest.js +1 -1
  110. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/context/route_client-reference-manifest.js +1 -1
  111. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/copy/route_client-reference-manifest.js +1 -1
  112. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/introspect/route_client-reference-manifest.js +1 -1
  113. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/query/route_client-reference-manifest.js +1 -1
  114. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route.js +1 -1
  115. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route_client-reference-manifest.js +1 -1
  116. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/execute/route_client-reference-manifest.js +1 -1
  117. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/file/route_client-reference-manifest.js +1 -1
  118. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route.js +2 -2
  119. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route_client-reference-manifest.js +1 -1
  120. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/link-preview/route_client-reference-manifest.js +1 -1
  121. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/list/route_client-reference-manifest.js +1 -1
  122. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/mkdir/route_client-reference-manifest.js +1 -1
  123. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/move/route_client-reference-manifest.js +1 -1
  124. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/actions/route_client-reference-manifest.js +1 -1
  125. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/actions/runs/route_client-reference-manifest.js +1 -1
  126. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/display-field/route_client-reference-manifest.js +1 -1
  127. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/content/route_client-reference-manifest.js +1 -1
  128. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/route_client-reference-manifest.js +1 -1
  129. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/bulk-delete/route_client-reference-manifest.js +1 -1
  130. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/options/route_client-reference-manifest.js +1 -1
  131. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route.js +1 -1
  132. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route_client-reference-manifest.js +1 -1
  133. 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
  134. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/[fieldId]/route_client-reference-manifest.js +1 -1
  135. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/reorder/route_client-reference-manifest.js +1 -1
  136. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/route_client-reference-manifest.js +1 -1
  137. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/route_client-reference-manifest.js +1 -1
  138. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/views/route_client-reference-manifest.js +1 -1
  139. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/open-file/route_client-reference-manifest.js +1 -1
  140. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/path-info/route_client-reference-manifest.js +1 -1
  141. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/query/route_client-reference-manifest.js +1 -1
  142. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/raw-file/route_client-reference-manifest.js +1 -1
  143. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/rename/route_client-reference-manifest.js +1 -1
  144. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route.js +1 -1
  145. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route_client-reference-manifest.js +1 -1
  146. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/search-index/route_client-reference-manifest.js +1 -1
  147. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/suggest-files/route_client-reference-manifest.js +1 -1
  148. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route.js +1 -1
  149. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route_client-reference-manifest.js +1 -1
  150. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/thumbnail/route_client-reference-manifest.js +1 -1
  151. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/tree/route.js +1 -1
  152. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/tree/route_client-reference-manifest.js +1 -1
  153. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route.js +1 -1
  154. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route_client-reference-manifest.js +1 -1
  155. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/virtual-file/route_client-reference-manifest.js +1 -1
  156. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/watch/route_client-reference-manifest.js +1 -1
  157. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/write-binary/route_client-reference-manifest.js +1 -1
  158. package/apps/web/.next/standalone/apps/web/.next/server/app/page.js +21 -21
  159. package/apps/web/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -1
  160. package/apps/web/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  161. package/apps/web/.next/standalone/apps/web/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
  162. package/apps/web/.next/standalone/apps/web/.next/server/app-paths-manifest.json +44 -26
  163. package/apps/web/.next/standalone/apps/web/.next/server/chunks/6426.js +2 -2
  164. package/apps/web/.next/standalone/apps/web/.next/server/chunks/6787.js +1 -1
  165. package/apps/web/.next/standalone/apps/web/.next/server/chunks/687.js +7 -7
  166. package/apps/web/.next/standalone/apps/web/.next/server/chunks/737.js +3 -3
  167. package/apps/web/.next/standalone/apps/web/.next/server/chunks/7488.js +1 -0
  168. package/apps/web/.next/standalone/apps/web/.next/server/chunks/8306.js +1 -0
  169. package/apps/web/.next/standalone/apps/web/.next/server/chunks/8650.js +1 -0
  170. package/apps/web/.next/standalone/apps/web/.next/server/chunks/8693.js +481 -0
  171. package/apps/web/.next/standalone/apps/web/.next/server/functions-config-manifest.json +25 -11
  172. package/apps/web/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +1 -1
  173. package/apps/web/.next/standalone/apps/web/.next/server/middleware-react-loadable-manifest.js +1 -1
  174. package/apps/web/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
  175. package/apps/web/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
  176. package/apps/web/.next/standalone/apps/web/.next/static/U0A79z_eUsEUNVdXxxyc3/_buildManifest.js +1 -0
  177. package/apps/web/.next/{static/chunks/eca025f9.538b3f5d85eeef79.js → standalone/apps/web/.next/static/chunks/0c958985.3ccb9c3aea7cd083.js} +2 -2
  178. package/apps/web/.next/standalone/apps/web/.next/static/chunks/3999.548dd8ec57152081.js +1 -0
  179. package/apps/web/.next/standalone/apps/web/.next/static/chunks/{2489.b5e1ce196331926c.js → 4870.507a55774d37d072.js} +1 -1
  180. package/apps/web/.next/standalone/apps/web/.next/static/chunks/{7812.c1435a724050dfec.js → 5431.a2353a2aa8c55a67.js} +1 -1
  181. package/apps/web/.next/standalone/apps/web/.next/static/chunks/7f67b0df-54679694c67e2b76.js +1 -0
  182. package/apps/web/.next/standalone/apps/web/.next/static/chunks/80f1cbb7-c9635d81d9fe6819.js +1 -0
  183. package/apps/web/.next/standalone/apps/web/.next/static/chunks/8532165e-abce74bbb270ef26.js +1 -0
  184. package/apps/web/.next/standalone/apps/web/.next/static/chunks/9372.e71f5b96da3f9dfd.js +1 -0
  185. package/apps/web/.next/standalone/apps/web/.next/static/chunks/9702-d646bcd7cb8fe6bf.js +135 -0
  186. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/cron/route-982235d988e17f31.js +1 -0
  187. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/proxy/route-982235d988e17f31.js +1 -0
  188. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/route-982235d988e17f31.js +1 -0
  189. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-982235d988e17f31.js +1 -0
  190. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/store/route-982235d988e17f31.js +1 -0
  191. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-982235d988e17f31.js +1 -0
  192. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/active/route-982235d988e17f31.js +1 -0
  193. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/route-982235d988e17f31.js +1 -0
  194. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/runs/route-982235d988e17f31.js +1 -0
  195. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stop/route-982235d988e17f31.js +1 -0
  196. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stream/route-982235d988e17f31.js +1 -0
  197. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/subagents/route-982235d988e17f31.js +1 -0
  198. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/callback/route-982235d988e17f31.js +1 -0
  199. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/connect/route-982235d988e17f31.js +1 -0
  200. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/connections/route-982235d988e17f31.js +1 -0
  201. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/disconnect/route-982235d988e17f31.js +1 -0
  202. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/status/route-982235d988e17f31.js +1 -0
  203. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/tool-index/route-982235d988e17f31.js +1 -0
  204. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/toolkits/route-982235d988e17f31.js +1 -0
  205. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-982235d988e17f31.js +1 -0
  206. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/route-982235d988e17f31.js +1 -0
  207. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-982235d988e17f31.js +1 -0
  208. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-982235d988e17f31.js +1 -0
  209. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/feedback/route-982235d988e17f31.js +1 -0
  210. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/channels/route-982235d988e17f31.js +1 -0
  211. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/route-982235d988e17f31.js +1 -0
  212. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-982235d988e17f31.js +1 -0
  213. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-982235d988e17f31.js +1 -0
  214. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/route-982235d988e17f31.js +1 -0
  215. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/[id]/toggle/route-982235d988e17f31.js +1 -0
  216. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/repair/route-982235d988e17f31.js +1 -0
  217. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/route-982235d988e17f31.js +1 -0
  218. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/memories/route-982235d988e17f31.js +1 -0
  219. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/route-982235d988e17f31.js +1 -0
  220. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/switch/route-982235d988e17f31.js +1 -0
  221. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-982235d988e17f31.js +1 -0
  222. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/route-982235d988e17f31.js +1 -0
  223. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/settings/cloud/route-982235d988e17f31.js +1 -0
  224. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/[slug]/content/route-982235d988e17f31.js +1 -0
  225. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/[slug]/route-982235d988e17f31.js +1 -0
  226. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/browse/route-982235d988e17f31.js +1 -0
  227. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/install/route-982235d988e17f31.js +1 -0
  228. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/route-982235d988e17f31.js +1 -0
  229. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/terminal/port/route-982235d988e17f31.js +1 -0
  230. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/voice/speech/route-982235d988e17f31.js +1 -0
  231. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/voice/transcribe/route-982235d988e17f31.js +1 -0
  232. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/voice/voices/route-982235d988e17f31.js +1 -0
  233. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-982235d988e17f31.js +1 -0
  234. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-982235d988e17f31.js +1 -0
  235. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/route-982235d988e17f31.js +1 -0
  236. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-982235d988e17f31.js +1 -0
  237. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse/route-982235d988e17f31.js +1 -0
  238. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-982235d988e17f31.js +1 -0
  239. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/context/route-982235d988e17f31.js +1 -0
  240. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/copy/route-982235d988e17f31.js +1 -0
  241. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-982235d988e17f31.js +1 -0
  242. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/query/route-982235d988e17f31.js +1 -0
  243. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/delete/route-982235d988e17f31.js +1 -0
  244. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/execute/route-982235d988e17f31.js +1 -0
  245. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/file/route-982235d988e17f31.js +1 -0
  246. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/init/route-982235d988e17f31.js +1 -0
  247. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-982235d988e17f31.js +1 -0
  248. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/list/route-982235d988e17f31.js +1 -0
  249. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-982235d988e17f31.js +1 -0
  250. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/move/route-982235d988e17f31.js +1 -0
  251. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-982235d988e17f31.js +1 -0
  252. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-982235d988e17f31.js +1 -0
  253. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-982235d988e17f31.js +1 -0
  254. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-982235d988e17f31.js +1 -0
  255. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-982235d988e17f31.js +1 -0
  256. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-982235d988e17f31.js +1 -0
  257. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-982235d988e17f31.js +1 -0
  258. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-982235d988e17f31.js +1 -0
  259. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-982235d988e17f31.js +1 -0
  260. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-982235d988e17f31.js +1 -0
  261. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-982235d988e17f31.js +1 -0
  262. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-982235d988e17f31.js +1 -0
  263. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-982235d988e17f31.js +1 -0
  264. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-982235d988e17f31.js +1 -0
  265. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/open-file/route-982235d988e17f31.js +1 -0
  266. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/path-info/route-982235d988e17f31.js +1 -0
  267. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/query/route-982235d988e17f31.js +1 -0
  268. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-982235d988e17f31.js +1 -0
  269. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/rename/route-982235d988e17f31.js +1 -0
  270. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-982235d988e17f31.js +1 -0
  271. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/search-index/route-982235d988e17f31.js +1 -0
  272. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-982235d988e17f31.js +1 -0
  273. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/switch/route-982235d988e17f31.js +1 -0
  274. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-982235d988e17f31.js +1 -0
  275. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/tree/route-982235d988e17f31.js +1 -0
  276. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/upload/route-982235d988e17f31.js +1 -0
  277. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-982235d988e17f31.js +1 -0
  278. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/watch/route-982235d988e17f31.js +1 -0
  279. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-982235d988e17f31.js +1 -0
  280. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/{layout-a597017db7df698d.js → layout-8757ef9cb1826e76.js} +1 -1
  281. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/page-05ff98c264c1c0cf.js +1 -0
  282. package/apps/web/.next/standalone/apps/web/.next/static/chunks/webpack-d4501ef5cbbcf069.js +1 -0
  283. package/apps/web/.next/standalone/apps/web/.next/static/css/4f71a2dee93c9f97.css +1 -0
  284. package/apps/web/.next/standalone/apps/web/app/api/skills/route.test.ts +672 -0
  285. package/apps/web/.next/standalone/apps/web/package.json +2 -0
  286. package/apps/web/.next/standalone/apps/web/public/integrations/exa-logomark.svg +4 -0
  287. package/apps/web/.next/standalone/apps/web/public/models/deepseek.ico +0 -0
  288. package/apps/web/.next/standalone/apps/web/public/models/kimi.png +0 -0
  289. package/apps/web/.next/standalone/apps/web/public/models/kimi.svg +89 -0
  290. package/apps/web/.next/standalone/apps/web/public/models/minimax.png +0 -0
  291. package/apps/web/.next/standalone/apps/web/server.js +1 -1
  292. package/apps/web/.next/standalone/extensions/apollo-enrichment/index.ts +268 -0
  293. package/apps/web/.next/standalone/extensions/apollo-enrichment/openclaw.plugin.json +16 -0
  294. package/apps/web/.next/standalone/extensions/apollo-enrichment/package.json +8 -0
  295. package/apps/web/.next/standalone/extensions/dench-ai-gateway/composio-bridge.ts +474 -0
  296. package/apps/web/.next/standalone/extensions/dench-ai-gateway/config-patch.ts +83 -0
  297. package/apps/web/.next/standalone/extensions/dench-ai-gateway/index.test.ts +281 -0
  298. package/apps/web/.next/standalone/extensions/dench-ai-gateway/index.ts +325 -0
  299. package/apps/web/.next/standalone/extensions/dench-ai-gateway/models.ts +325 -0
  300. package/apps/web/.next/standalone/extensions/dench-ai-gateway/openclaw.plugin.json +27 -0
  301. package/apps/web/.next/standalone/extensions/dench-ai-gateway/package.json +8 -0
  302. package/apps/web/.next/standalone/extensions/dench-identity/composio-cheat-sheet.test.ts +146 -0
  303. package/apps/web/.next/standalone/extensions/dench-identity/composio-cheat-sheet.ts +197 -0
  304. package/apps/web/.next/standalone/extensions/dench-identity/index.test.ts +361 -0
  305. package/apps/web/.next/standalone/extensions/dench-identity/index.ts +920 -0
  306. package/apps/web/.next/standalone/extensions/dench-identity/openclaw.plugin.json +17 -0
  307. package/apps/web/.next/standalone/extensions/dench-identity/package.json +8 -0
  308. package/apps/web/.next/standalone/extensions/exa-search/index.ts +363 -0
  309. package/apps/web/.next/standalone/extensions/exa-search/openclaw.plugin.json +16 -0
  310. package/apps/web/.next/standalone/extensions/exa-search/package.json +8 -0
  311. package/apps/web/.next/standalone/extensions/posthog-analytics/index.ts +190 -0
  312. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/build-env.js +3 -0
  313. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/build-env.ts +3 -0
  314. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/event-mappers.ts +403 -0
  315. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/posthog-client.ts +105 -0
  316. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/privacy.ts +294 -0
  317. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/trace-context.ts +103 -0
  318. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/types.ts +28 -0
  319. package/apps/web/.next/standalone/extensions/posthog-analytics/openclaw.plugin.json +22 -0
  320. package/apps/web/.next/standalone/extensions/posthog-analytics/package.json +8 -0
  321. package/apps/web/.next/standalone/extensions/vitest.config.ts +13 -0
  322. package/apps/web/.next/standalone/package.json +2 -2
  323. package/apps/web/.next/static/U0A79z_eUsEUNVdXxxyc3/_buildManifest.js +1 -0
  324. package/apps/web/.next/{standalone/apps/web/.next/static/chunks/eca025f9.538b3f5d85eeef79.js → static/chunks/0c958985.3ccb9c3aea7cd083.js} +2 -2
  325. package/apps/web/.next/static/chunks/3999.548dd8ec57152081.js +1 -0
  326. package/apps/web/.next/static/chunks/{2489.b5e1ce196331926c.js → 4870.507a55774d37d072.js} +1 -1
  327. package/apps/web/.next/static/chunks/{7812.c1435a724050dfec.js → 5431.a2353a2aa8c55a67.js} +1 -1
  328. package/apps/web/.next/static/chunks/7f67b0df-54679694c67e2b76.js +1 -0
  329. package/apps/web/.next/static/chunks/80f1cbb7-c9635d81d9fe6819.js +1 -0
  330. package/apps/web/.next/static/chunks/8532165e-abce74bbb270ef26.js +1 -0
  331. package/apps/web/.next/static/chunks/9372.e71f5b96da3f9dfd.js +1 -0
  332. package/apps/web/.next/static/chunks/9702-d646bcd7cb8fe6bf.js +135 -0
  333. package/apps/web/.next/static/chunks/app/api/apps/cron/route-982235d988e17f31.js +1 -0
  334. package/apps/web/.next/static/chunks/app/api/apps/proxy/route-982235d988e17f31.js +1 -0
  335. package/apps/web/.next/static/chunks/app/api/apps/route-982235d988e17f31.js +1 -0
  336. package/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-982235d988e17f31.js +1 -0
  337. package/apps/web/.next/static/chunks/app/api/apps/store/route-982235d988e17f31.js +1 -0
  338. package/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-982235d988e17f31.js +1 -0
  339. package/apps/web/.next/static/chunks/app/api/chat/active/route-982235d988e17f31.js +1 -0
  340. package/apps/web/.next/static/chunks/app/api/chat/route-982235d988e17f31.js +1 -0
  341. package/apps/web/.next/static/chunks/app/api/chat/runs/route-982235d988e17f31.js +1 -0
  342. package/apps/web/.next/static/chunks/app/api/chat/stop/route-982235d988e17f31.js +1 -0
  343. package/apps/web/.next/static/chunks/app/api/chat/stream/route-982235d988e17f31.js +1 -0
  344. package/apps/web/.next/static/chunks/app/api/chat/subagents/route-982235d988e17f31.js +1 -0
  345. package/apps/web/.next/static/chunks/app/api/composio/callback/route-982235d988e17f31.js +1 -0
  346. package/apps/web/.next/static/chunks/app/api/composio/connect/route-982235d988e17f31.js +1 -0
  347. package/apps/web/.next/static/chunks/app/api/composio/connections/route-982235d988e17f31.js +1 -0
  348. package/apps/web/.next/static/chunks/app/api/composio/disconnect/route-982235d988e17f31.js +1 -0
  349. package/apps/web/.next/static/chunks/app/api/composio/status/route-982235d988e17f31.js +1 -0
  350. package/apps/web/.next/static/chunks/app/api/composio/tool-index/route-982235d988e17f31.js +1 -0
  351. package/apps/web/.next/static/chunks/app/api/composio/toolkits/route-982235d988e17f31.js +1 -0
  352. package/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-982235d988e17f31.js +1 -0
  353. package/apps/web/.next/static/chunks/app/api/cron/jobs/route-982235d988e17f31.js +1 -0
  354. package/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-982235d988e17f31.js +1 -0
  355. package/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-982235d988e17f31.js +1 -0
  356. package/apps/web/.next/static/chunks/app/api/feedback/route-982235d988e17f31.js +1 -0
  357. package/apps/web/.next/static/chunks/app/api/gateway/channels/route-982235d988e17f31.js +1 -0
  358. package/apps/web/.next/static/chunks/app/api/gateway/chat/route-982235d988e17f31.js +1 -0
  359. package/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-982235d988e17f31.js +1 -0
  360. package/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-982235d988e17f31.js +1 -0
  361. package/apps/web/.next/static/chunks/app/api/gateway/sessions/route-982235d988e17f31.js +1 -0
  362. package/apps/web/.next/static/chunks/app/api/integrations/[id]/toggle/route-982235d988e17f31.js +1 -0
  363. package/apps/web/.next/static/chunks/app/api/integrations/repair/route-982235d988e17f31.js +1 -0
  364. package/apps/web/.next/static/chunks/app/api/integrations/route-982235d988e17f31.js +1 -0
  365. package/apps/web/.next/static/chunks/app/api/memories/route-982235d988e17f31.js +1 -0
  366. package/apps/web/.next/static/chunks/app/api/profiles/route-982235d988e17f31.js +1 -0
  367. package/apps/web/.next/static/chunks/app/api/profiles/switch/route-982235d988e17f31.js +1 -0
  368. package/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-982235d988e17f31.js +1 -0
  369. package/apps/web/.next/static/chunks/app/api/sessions/route-982235d988e17f31.js +1 -0
  370. package/apps/web/.next/static/chunks/app/api/settings/cloud/route-982235d988e17f31.js +1 -0
  371. package/apps/web/.next/static/chunks/app/api/skills/[slug]/content/route-982235d988e17f31.js +1 -0
  372. package/apps/web/.next/static/chunks/app/api/skills/[slug]/route-982235d988e17f31.js +1 -0
  373. package/apps/web/.next/static/chunks/app/api/skills/browse/route-982235d988e17f31.js +1 -0
  374. package/apps/web/.next/static/chunks/app/api/skills/install/route-982235d988e17f31.js +1 -0
  375. package/apps/web/.next/static/chunks/app/api/skills/route-982235d988e17f31.js +1 -0
  376. package/apps/web/.next/static/chunks/app/api/terminal/port/route-982235d988e17f31.js +1 -0
  377. package/apps/web/.next/static/chunks/app/api/voice/speech/route-982235d988e17f31.js +1 -0
  378. package/apps/web/.next/static/chunks/app/api/voice/transcribe/route-982235d988e17f31.js +1 -0
  379. package/apps/web/.next/static/chunks/app/api/voice/voices/route-982235d988e17f31.js +1 -0
  380. package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-982235d988e17f31.js +1 -0
  381. package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-982235d988e17f31.js +1 -0
  382. package/apps/web/.next/static/chunks/app/api/web-sessions/route-982235d988e17f31.js +1 -0
  383. package/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-982235d988e17f31.js +1 -0
  384. package/apps/web/.next/static/chunks/app/api/workspace/browse/route-982235d988e17f31.js +1 -0
  385. package/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-982235d988e17f31.js +1 -0
  386. package/apps/web/.next/static/chunks/app/api/workspace/context/route-982235d988e17f31.js +1 -0
  387. package/apps/web/.next/static/chunks/app/api/workspace/copy/route-982235d988e17f31.js +1 -0
  388. package/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-982235d988e17f31.js +1 -0
  389. package/apps/web/.next/static/chunks/app/api/workspace/db/query/route-982235d988e17f31.js +1 -0
  390. package/apps/web/.next/static/chunks/app/api/workspace/delete/route-982235d988e17f31.js +1 -0
  391. package/apps/web/.next/static/chunks/app/api/workspace/execute/route-982235d988e17f31.js +1 -0
  392. package/apps/web/.next/static/chunks/app/api/workspace/file/route-982235d988e17f31.js +1 -0
  393. package/apps/web/.next/static/chunks/app/api/workspace/init/route-982235d988e17f31.js +1 -0
  394. package/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-982235d988e17f31.js +1 -0
  395. package/apps/web/.next/static/chunks/app/api/workspace/list/route-982235d988e17f31.js +1 -0
  396. package/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-982235d988e17f31.js +1 -0
  397. package/apps/web/.next/static/chunks/app/api/workspace/move/route-982235d988e17f31.js +1 -0
  398. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-982235d988e17f31.js +1 -0
  399. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-982235d988e17f31.js +1 -0
  400. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-982235d988e17f31.js +1 -0
  401. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-982235d988e17f31.js +1 -0
  402. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-982235d988e17f31.js +1 -0
  403. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-982235d988e17f31.js +1 -0
  404. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-982235d988e17f31.js +1 -0
  405. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-982235d988e17f31.js +1 -0
  406. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-982235d988e17f31.js +1 -0
  407. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-982235d988e17f31.js +1 -0
  408. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-982235d988e17f31.js +1 -0
  409. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-982235d988e17f31.js +1 -0
  410. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-982235d988e17f31.js +1 -0
  411. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-982235d988e17f31.js +1 -0
  412. package/apps/web/.next/static/chunks/app/api/workspace/open-file/route-982235d988e17f31.js +1 -0
  413. package/apps/web/.next/static/chunks/app/api/workspace/path-info/route-982235d988e17f31.js +1 -0
  414. package/apps/web/.next/static/chunks/app/api/workspace/query/route-982235d988e17f31.js +1 -0
  415. package/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-982235d988e17f31.js +1 -0
  416. package/apps/web/.next/static/chunks/app/api/workspace/rename/route-982235d988e17f31.js +1 -0
  417. package/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-982235d988e17f31.js +1 -0
  418. package/apps/web/.next/static/chunks/app/api/workspace/search-index/route-982235d988e17f31.js +1 -0
  419. package/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-982235d988e17f31.js +1 -0
  420. package/apps/web/.next/static/chunks/app/api/workspace/switch/route-982235d988e17f31.js +1 -0
  421. package/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-982235d988e17f31.js +1 -0
  422. package/apps/web/.next/static/chunks/app/api/workspace/tree/route-982235d988e17f31.js +1 -0
  423. package/apps/web/.next/static/chunks/app/api/workspace/upload/route-982235d988e17f31.js +1 -0
  424. package/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-982235d988e17f31.js +1 -0
  425. package/apps/web/.next/static/chunks/app/api/workspace/watch/route-982235d988e17f31.js +1 -0
  426. package/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-982235d988e17f31.js +1 -0
  427. package/apps/web/.next/static/chunks/app/{layout-a597017db7df698d.js → layout-8757ef9cb1826e76.js} +1 -1
  428. package/apps/web/.next/static/chunks/app/page-05ff98c264c1c0cf.js +1 -0
  429. package/apps/web/.next/static/chunks/webpack-d4501ef5cbbcf069.js +1 -0
  430. package/apps/web/.next/static/css/4f71a2dee93c9f97.css +1 -0
  431. package/apps/web/public/integrations/exa-logomark.svg +4 -0
  432. package/apps/web/public/models/deepseek.ico +0 -0
  433. package/apps/web/public/models/kimi.png +0 -0
  434. package/apps/web/public/models/kimi.svg +89 -0
  435. package/apps/web/public/models/minimax.png +0 -0
  436. package/dist/entry.js +1 -1
  437. package/dist/{program-D2RfLoKh.js → program-BYB4nfWK.js} +423 -13
  438. package/dist/{run-main-giTi_or5.js → run-main-Z-P_Zlf6.js} +1 -1
  439. package/extensions/apollo-enrichment/index.ts +268 -0
  440. package/extensions/apollo-enrichment/openclaw.plugin.json +16 -0
  441. package/extensions/apollo-enrichment/package.json +8 -0
  442. package/extensions/dench-ai-gateway/composio-bridge.ts +474 -0
  443. package/extensions/dench-ai-gateway/config-patch.ts +83 -0
  444. package/extensions/dench-ai-gateway/index.test.ts +281 -0
  445. package/extensions/dench-ai-gateway/index.ts +9 -36
  446. package/extensions/dench-ai-gateway/models.ts +5 -5
  447. package/extensions/dench-identity/composio-cheat-sheet.test.ts +146 -0
  448. package/extensions/dench-identity/composio-cheat-sheet.ts +197 -0
  449. package/extensions/dench-identity/index.test.ts +226 -1
  450. package/extensions/dench-identity/index.ts +795 -5
  451. package/extensions/exa-search/index.ts +363 -0
  452. package/extensions/exa-search/openclaw.plugin.json +16 -0
  453. package/extensions/exa-search/package.json +8 -0
  454. package/extensions/posthog-analytics/lib/build-env.js +1 -1
  455. package/package.json +2 -2
  456. package/skills/composio-apps/SKILL.md +88 -0
  457. package/apps/web/.next/standalone/apps/web/.next/server/chunks/4334.js +0 -481
  458. package/apps/web/.next/standalone/apps/web/.next/static/6km2S2lfAi2PQ3TlStEAM/_buildManifest.js +0 -1
  459. package/apps/web/.next/standalone/apps/web/.next/static/chunks/2457.b2932424bcf38aee.js +0 -1
  460. package/apps/web/.next/standalone/apps/web/.next/static/chunks/2716-475d96c202834586.js +0 -135
  461. package/apps/web/.next/standalone/apps/web/.next/static/chunks/4062.6ff486abe87e56aa.js +0 -1
  462. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/cron/route-d14ffafd970f186e.js +0 -1
  463. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/proxy/route-d14ffafd970f186e.js +0 -1
  464. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/route-d14ffafd970f186e.js +0 -1
  465. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-d14ffafd970f186e.js +0 -1
  466. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/store/route-d14ffafd970f186e.js +0 -1
  467. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-d14ffafd970f186e.js +0 -1
  468. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/active/route-d14ffafd970f186e.js +0 -1
  469. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/route-d14ffafd970f186e.js +0 -1
  470. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/runs/route-d14ffafd970f186e.js +0 -1
  471. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stop/route-d14ffafd970f186e.js +0 -1
  472. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stream/route-d14ffafd970f186e.js +0 -1
  473. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/subagents/route-d14ffafd970f186e.js +0 -1
  474. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-d14ffafd970f186e.js +0 -1
  475. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/route-d14ffafd970f186e.js +0 -1
  476. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-d14ffafd970f186e.js +0 -1
  477. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-d14ffafd970f186e.js +0 -1
  478. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/feedback/route-d14ffafd970f186e.js +0 -1
  479. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/channels/route-d14ffafd970f186e.js +0 -1
  480. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/route-d14ffafd970f186e.js +0 -1
  481. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-d14ffafd970f186e.js +0 -1
  482. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-d14ffafd970f186e.js +0 -1
  483. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/route-d14ffafd970f186e.js +0 -1
  484. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/memories/route-d14ffafd970f186e.js +0 -1
  485. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/route-d14ffafd970f186e.js +0 -1
  486. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/switch/route-d14ffafd970f186e.js +0 -1
  487. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-d14ffafd970f186e.js +0 -1
  488. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/route-d14ffafd970f186e.js +0 -1
  489. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/route-d14ffafd970f186e.js +0 -1
  490. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/terminal/port/route-d14ffafd970f186e.js +0 -1
  491. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-d14ffafd970f186e.js +0 -1
  492. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-d14ffafd970f186e.js +0 -1
  493. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/route-d14ffafd970f186e.js +0 -1
  494. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-d14ffafd970f186e.js +0 -1
  495. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse/route-d14ffafd970f186e.js +0 -1
  496. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-d14ffafd970f186e.js +0 -1
  497. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/context/route-d14ffafd970f186e.js +0 -1
  498. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/copy/route-d14ffafd970f186e.js +0 -1
  499. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-d14ffafd970f186e.js +0 -1
  500. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/query/route-d14ffafd970f186e.js +0 -1
  501. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/delete/route-d14ffafd970f186e.js +0 -1
  502. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/execute/route-d14ffafd970f186e.js +0 -1
  503. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/file/route-d14ffafd970f186e.js +0 -1
  504. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/init/route-d14ffafd970f186e.js +0 -1
  505. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-d14ffafd970f186e.js +0 -1
  506. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/list/route-d14ffafd970f186e.js +0 -1
  507. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-d14ffafd970f186e.js +0 -1
  508. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/move/route-d14ffafd970f186e.js +0 -1
  509. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-d14ffafd970f186e.js +0 -1
  510. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-d14ffafd970f186e.js +0 -1
  511. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-d14ffafd970f186e.js +0 -1
  512. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-d14ffafd970f186e.js +0 -1
  513. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-d14ffafd970f186e.js +0 -1
  514. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-d14ffafd970f186e.js +0 -1
  515. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-d14ffafd970f186e.js +0 -1
  516. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-d14ffafd970f186e.js +0 -1
  517. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-d14ffafd970f186e.js +0 -1
  518. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-d14ffafd970f186e.js +0 -1
  519. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-d14ffafd970f186e.js +0 -1
  520. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-d14ffafd970f186e.js +0 -1
  521. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-d14ffafd970f186e.js +0 -1
  522. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-d14ffafd970f186e.js +0 -1
  523. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/open-file/route-d14ffafd970f186e.js +0 -1
  524. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/path-info/route-d14ffafd970f186e.js +0 -1
  525. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/query/route-d14ffafd970f186e.js +0 -1
  526. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-d14ffafd970f186e.js +0 -1
  527. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/rename/route-d14ffafd970f186e.js +0 -1
  528. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-d14ffafd970f186e.js +0 -1
  529. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/search-index/route-d14ffafd970f186e.js +0 -1
  530. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-d14ffafd970f186e.js +0 -1
  531. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/switch/route-d14ffafd970f186e.js +0 -1
  532. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-d14ffafd970f186e.js +0 -1
  533. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/tree/route-d14ffafd970f186e.js +0 -1
  534. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/upload/route-d14ffafd970f186e.js +0 -1
  535. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-d14ffafd970f186e.js +0 -1
  536. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/watch/route-d14ffafd970f186e.js +0 -1
  537. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-d14ffafd970f186e.js +0 -1
  538. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/page-6702f960a7cc2d6f.js +0 -1
  539. package/apps/web/.next/standalone/apps/web/.next/static/chunks/webpack-a769c08a3fea86bb.js +0 -1
  540. package/apps/web/.next/standalone/apps/web/.next/static/css/99b07ab2db5fe339.css +0 -1
  541. package/apps/web/.next/static/6km2S2lfAi2PQ3TlStEAM/_buildManifest.js +0 -1
  542. package/apps/web/.next/static/chunks/2457.b2932424bcf38aee.js +0 -1
  543. package/apps/web/.next/static/chunks/2716-475d96c202834586.js +0 -135
  544. package/apps/web/.next/static/chunks/4062.6ff486abe87e56aa.js +0 -1
  545. package/apps/web/.next/static/chunks/app/api/apps/cron/route-d14ffafd970f186e.js +0 -1
  546. package/apps/web/.next/static/chunks/app/api/apps/proxy/route-d14ffafd970f186e.js +0 -1
  547. package/apps/web/.next/static/chunks/app/api/apps/route-d14ffafd970f186e.js +0 -1
  548. package/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-d14ffafd970f186e.js +0 -1
  549. package/apps/web/.next/static/chunks/app/api/apps/store/route-d14ffafd970f186e.js +0 -1
  550. package/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-d14ffafd970f186e.js +0 -1
  551. package/apps/web/.next/static/chunks/app/api/chat/active/route-d14ffafd970f186e.js +0 -1
  552. package/apps/web/.next/static/chunks/app/api/chat/route-d14ffafd970f186e.js +0 -1
  553. package/apps/web/.next/static/chunks/app/api/chat/runs/route-d14ffafd970f186e.js +0 -1
  554. package/apps/web/.next/static/chunks/app/api/chat/stop/route-d14ffafd970f186e.js +0 -1
  555. package/apps/web/.next/static/chunks/app/api/chat/stream/route-d14ffafd970f186e.js +0 -1
  556. package/apps/web/.next/static/chunks/app/api/chat/subagents/route-d14ffafd970f186e.js +0 -1
  557. package/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-d14ffafd970f186e.js +0 -1
  558. package/apps/web/.next/static/chunks/app/api/cron/jobs/route-d14ffafd970f186e.js +0 -1
  559. package/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-d14ffafd970f186e.js +0 -1
  560. package/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-d14ffafd970f186e.js +0 -1
  561. package/apps/web/.next/static/chunks/app/api/feedback/route-d14ffafd970f186e.js +0 -1
  562. package/apps/web/.next/static/chunks/app/api/gateway/channels/route-d14ffafd970f186e.js +0 -1
  563. package/apps/web/.next/static/chunks/app/api/gateway/chat/route-d14ffafd970f186e.js +0 -1
  564. package/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-d14ffafd970f186e.js +0 -1
  565. package/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-d14ffafd970f186e.js +0 -1
  566. package/apps/web/.next/static/chunks/app/api/gateway/sessions/route-d14ffafd970f186e.js +0 -1
  567. package/apps/web/.next/static/chunks/app/api/memories/route-d14ffafd970f186e.js +0 -1
  568. package/apps/web/.next/static/chunks/app/api/profiles/route-d14ffafd970f186e.js +0 -1
  569. package/apps/web/.next/static/chunks/app/api/profiles/switch/route-d14ffafd970f186e.js +0 -1
  570. package/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-d14ffafd970f186e.js +0 -1
  571. package/apps/web/.next/static/chunks/app/api/sessions/route-d14ffafd970f186e.js +0 -1
  572. package/apps/web/.next/static/chunks/app/api/skills/route-d14ffafd970f186e.js +0 -1
  573. package/apps/web/.next/static/chunks/app/api/terminal/port/route-d14ffafd970f186e.js +0 -1
  574. package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-d14ffafd970f186e.js +0 -1
  575. package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-d14ffafd970f186e.js +0 -1
  576. package/apps/web/.next/static/chunks/app/api/web-sessions/route-d14ffafd970f186e.js +0 -1
  577. package/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-d14ffafd970f186e.js +0 -1
  578. package/apps/web/.next/static/chunks/app/api/workspace/browse/route-d14ffafd970f186e.js +0 -1
  579. package/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-d14ffafd970f186e.js +0 -1
  580. package/apps/web/.next/static/chunks/app/api/workspace/context/route-d14ffafd970f186e.js +0 -1
  581. package/apps/web/.next/static/chunks/app/api/workspace/copy/route-d14ffafd970f186e.js +0 -1
  582. package/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-d14ffafd970f186e.js +0 -1
  583. package/apps/web/.next/static/chunks/app/api/workspace/db/query/route-d14ffafd970f186e.js +0 -1
  584. package/apps/web/.next/static/chunks/app/api/workspace/delete/route-d14ffafd970f186e.js +0 -1
  585. package/apps/web/.next/static/chunks/app/api/workspace/execute/route-d14ffafd970f186e.js +0 -1
  586. package/apps/web/.next/static/chunks/app/api/workspace/file/route-d14ffafd970f186e.js +0 -1
  587. package/apps/web/.next/static/chunks/app/api/workspace/init/route-d14ffafd970f186e.js +0 -1
  588. package/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-d14ffafd970f186e.js +0 -1
  589. package/apps/web/.next/static/chunks/app/api/workspace/list/route-d14ffafd970f186e.js +0 -1
  590. package/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-d14ffafd970f186e.js +0 -1
  591. package/apps/web/.next/static/chunks/app/api/workspace/move/route-d14ffafd970f186e.js +0 -1
  592. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-d14ffafd970f186e.js +0 -1
  593. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-d14ffafd970f186e.js +0 -1
  594. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-d14ffafd970f186e.js +0 -1
  595. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-d14ffafd970f186e.js +0 -1
  596. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-d14ffafd970f186e.js +0 -1
  597. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-d14ffafd970f186e.js +0 -1
  598. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-d14ffafd970f186e.js +0 -1
  599. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-d14ffafd970f186e.js +0 -1
  600. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-d14ffafd970f186e.js +0 -1
  601. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-d14ffafd970f186e.js +0 -1
  602. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-d14ffafd970f186e.js +0 -1
  603. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-d14ffafd970f186e.js +0 -1
  604. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-d14ffafd970f186e.js +0 -1
  605. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-d14ffafd970f186e.js +0 -1
  606. package/apps/web/.next/static/chunks/app/api/workspace/open-file/route-d14ffafd970f186e.js +0 -1
  607. package/apps/web/.next/static/chunks/app/api/workspace/path-info/route-d14ffafd970f186e.js +0 -1
  608. package/apps/web/.next/static/chunks/app/api/workspace/query/route-d14ffafd970f186e.js +0 -1
  609. package/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-d14ffafd970f186e.js +0 -1
  610. package/apps/web/.next/static/chunks/app/api/workspace/rename/route-d14ffafd970f186e.js +0 -1
  611. package/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-d14ffafd970f186e.js +0 -1
  612. package/apps/web/.next/static/chunks/app/api/workspace/search-index/route-d14ffafd970f186e.js +0 -1
  613. package/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-d14ffafd970f186e.js +0 -1
  614. package/apps/web/.next/static/chunks/app/api/workspace/switch/route-d14ffafd970f186e.js +0 -1
  615. package/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-d14ffafd970f186e.js +0 -1
  616. package/apps/web/.next/static/chunks/app/api/workspace/tree/route-d14ffafd970f186e.js +0 -1
  617. package/apps/web/.next/static/chunks/app/api/workspace/upload/route-d14ffafd970f186e.js +0 -1
  618. package/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-d14ffafd970f186e.js +0 -1
  619. package/apps/web/.next/static/chunks/app/api/workspace/watch/route-d14ffafd970f186e.js +0 -1
  620. package/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-d14ffafd970f186e.js +0 -1
  621. package/apps/web/.next/static/chunks/app/page-6702f960a7cc2d6f.js +0 -1
  622. package/apps/web/.next/static/chunks/webpack-a769c08a3fea86bb.js +0 -1
  623. package/apps/web/.next/static/css/99b07ab2db5fe339.css +0 -1
  624. package/skills/browser/SKILL.md +0 -16
  625. /package/apps/web/.next/standalone/apps/web/.next/static/{6km2S2lfAi2PQ3TlStEAM → U0A79z_eUsEUNVdXxxyc3}/_ssgManifest.js +0 -0
  626. /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 (browser scraping, bulk data enrichment, large app builds)
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", "Browser: scrape pricing").
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) => {