denchclaw 3.1.2 → 3.1.3

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 (245) hide show
  1. package/apps/web/.next/standalone/apps/web/.next/BUILD_ID +1 -1
  2. package/apps/web/.next/standalone/apps/web/.next/app-build-manifest.json +148 -148
  3. package/apps/web/.next/standalone/apps/web/.next/app-path-routes-manifest.json +42 -42
  4. package/apps/web/.next/standalone/apps/web/.next/build-manifest.json +2 -2
  5. package/apps/web/.next/standalone/apps/web/.next/cache/config.json +3 -3
  6. package/apps/web/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
  7. package/apps/web/.next/standalone/apps/web/.next/required-server-files.json +1 -1
  8. package/apps/web/.next/standalone/apps/web/.next/routes-manifest.json +1 -1
  9. package/apps/web/.next/standalone/apps/web/.next/server/app/_not-found/page.js +2 -2
  10. package/apps/web/.next/standalone/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -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 +1 -1
  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_client-reference-manifest.js +1 -1
  22. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route.js +1 -1
  23. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route_client-reference-manifest.js +1 -1
  24. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stream/route_client-reference-manifest.js +1 -1
  25. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/subagents/route_client-reference-manifest.js +1 -1
  26. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route.js.nft.json +1 -1
  27. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route_client-reference-manifest.js +1 -1
  28. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connect/route_client-reference-manifest.js +1 -1
  29. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connections/route_client-reference-manifest.js +1 -1
  30. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route.js.nft.json +1 -1
  31. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route_client-reference-manifest.js +1 -1
  32. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route.js.nft.json +1 -1
  33. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route_client-reference-manifest.js +1 -1
  34. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/toolkits/route_client-reference-manifest.js +1 -1
  35. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/calendar/[id]/route_client-reference-manifest.js +1 -1
  36. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/calendar/route_client-reference-manifest.js +1 -1
  37. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/companies/[id]/route_client-reference-manifest.js +1 -1
  38. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/enrich/[type]/[id]/route_client-reference-manifest.js +1 -1
  39. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/inbox/[threadId]/route_client-reference-manifest.js +1 -1
  40. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/inbox/route_client-reference-manifest.js +1 -1
  41. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/people/[id]/activity/route_client-reference-manifest.js +1 -1
  42. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/people/[id]/route_client-reference-manifest.js +1 -1
  43. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/people/route_client-reference-manifest.js +1 -1
  44. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/photos/proxy/route_client-reference-manifest.js +1 -1
  45. package/apps/web/.next/standalone/apps/web/.next/server/app/api/crm/photos/sync/route_client-reference-manifest.js +1 -1
  46. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/heartbeat/route_client-reference-manifest.js +1 -1
  47. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/[jobId]/runs/route_client-reference-manifest.js +1 -1
  48. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/route_client-reference-manifest.js +1 -1
  49. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/[sessionId]/route_client-reference-manifest.js +1 -1
  50. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/search-transcript/route_client-reference-manifest.js +1 -1
  51. package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route.js +1 -1
  52. package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route_client-reference-manifest.js +1 -1
  53. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/channels/route_client-reference-manifest.js +1 -1
  54. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/chat/route_client-reference-manifest.js +1 -1
  55. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/chat/stream/route_client-reference-manifest.js +1 -1
  56. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/sessions/[id]/route_client-reference-manifest.js +1 -1
  57. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/sessions/route_client-reference-manifest.js +1 -1
  58. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route.js.nft.json +1 -1
  59. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route_client-reference-manifest.js +1 -1
  60. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route.js.nft.json +1 -1
  61. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route_client-reference-manifest.js +1 -1
  62. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route.js.nft.json +1 -1
  63. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route_client-reference-manifest.js +1 -1
  64. package/apps/web/.next/standalone/apps/web/.next/server/app/api/memories/route_client-reference-manifest.js +1 -1
  65. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/connections/route.js +1 -1
  66. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/connections/route_client-reference-manifest.js +1 -1
  67. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/dench-cloud/route.js +1 -1
  68. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/dench-cloud/route.js.nft.json +1 -1
  69. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/dench-cloud/route_client-reference-manifest.js +1 -1
  70. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/identity/route.js +1 -1
  71. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/identity/route_client-reference-manifest.js +1 -1
  72. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/skill-template/consume/route_client-reference-manifest.js +1 -1
  73. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/state/route.js +1 -1
  74. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/state/route_client-reference-manifest.js +1 -1
  75. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/sync/progress/route_client-reference-manifest.js +1 -1
  76. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/sync/start/route.js +1 -1
  77. package/apps/web/.next/standalone/apps/web/.next/server/app/api/onboarding/sync/start/route_client-reference-manifest.js +1 -1
  78. package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/route_client-reference-manifest.js +1 -1
  79. package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/switch/route_client-reference-manifest.js +1 -1
  80. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/[sessionId]/route_client-reference-manifest.js +1 -1
  81. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  82. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route.js +1 -1
  83. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route.js.nft.json +1 -1
  84. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route_client-reference-manifest.js +1 -1
  85. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/mcp/connect/callback/route_client-reference-manifest.js +1 -1
  86. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/mcp/connect/start/route_client-reference-manifest.js +1 -1
  87. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/mcp/connect/token/route_client-reference-manifest.js +1 -1
  88. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/mcp/probe/route_client-reference-manifest.js +1 -1
  89. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/mcp/route_client-reference-manifest.js +1 -1
  90. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/content/route_client-reference-manifest.js +1 -1
  91. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/route_client-reference-manifest.js +1 -1
  92. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/browse/route_client-reference-manifest.js +1 -1
  93. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -1
  94. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  95. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sync/poll-tick/route_client-reference-manifest.js +1 -1
  96. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sync/refresh/route_client-reference-manifest.js +1 -1
  97. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sync/status/route_client-reference-manifest.js +1 -1
  98. package/apps/web/.next/standalone/apps/web/.next/server/app/api/terminal/port/route_client-reference-manifest.js +1 -1
  99. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route.js +1 -1
  100. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route.js.nft.json +1 -1
  101. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route_client-reference-manifest.js +1 -1
  102. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route.js +1 -1
  103. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route.js.nft.json +1 -1
  104. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route_client-reference-manifest.js +1 -1
  105. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route.js +1 -1
  106. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route.js.nft.json +1 -1
  107. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route_client-reference-manifest.js +1 -1
  108. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/messages/route_client-reference-manifest.js +1 -1
  109. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/route_client-reference-manifest.js +1 -1
  110. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route.js +1 -1
  111. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route_client-reference-manifest.js +1 -1
  112. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/assets/[...path]/route_client-reference-manifest.js +1 -1
  113. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse/route_client-reference-manifest.js +1 -1
  114. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse-file/route_client-reference-manifest.js +1 -1
  115. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/context/route_client-reference-manifest.js +1 -1
  116. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/copy/route_client-reference-manifest.js +1 -1
  117. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/introspect/route_client-reference-manifest.js +1 -1
  118. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/query/route_client-reference-manifest.js +1 -1
  119. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route.js +1 -1
  120. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route_client-reference-manifest.js +1 -1
  121. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/enrichment-status/route.js.nft.json +1 -1
  122. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/enrichment-status/route_client-reference-manifest.js +1 -1
  123. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/execute/route_client-reference-manifest.js +1 -1
  124. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/file/route_client-reference-manifest.js +1 -1
  125. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route.js +1 -1
  126. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route_client-reference-manifest.js +1 -1
  127. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/link-preview/route_client-reference-manifest.js +1 -1
  128. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/list/route_client-reference-manifest.js +1 -1
  129. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/mkdir/route_client-reference-manifest.js +1 -1
  130. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/move/route_client-reference-manifest.js +1 -1
  131. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/actions/route_client-reference-manifest.js +1 -1
  132. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/actions/runs/route_client-reference-manifest.js +1 -1
  133. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/display-field/route_client-reference-manifest.js +1 -1
  134. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/enrich/route.js.nft.json +1 -1
  135. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/enrich/route_client-reference-manifest.js +1 -1
  136. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/content/route_client-reference-manifest.js +1 -1
  137. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/route_client-reference-manifest.js +1 -1
  138. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/bulk-delete/route_client-reference-manifest.js +1 -1
  139. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/options/route_client-reference-manifest.js +1 -1
  140. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route.js +1 -1
  141. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route_client-reference-manifest.js +1 -1
  142. 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
  143. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/[fieldId]/route_client-reference-manifest.js +1 -1
  144. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/reorder/route_client-reference-manifest.js +1 -1
  145. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/route_client-reference-manifest.js +1 -1
  146. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/icon/route_client-reference-manifest.js +1 -1
  147. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/route_client-reference-manifest.js +1 -1
  148. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/views/route_client-reference-manifest.js +1 -1
  149. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/route_client-reference-manifest.js +1 -1
  150. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/open-file/route_client-reference-manifest.js +1 -1
  151. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/path-info/route_client-reference-manifest.js +1 -1
  152. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/query/route_client-reference-manifest.js +1 -1
  153. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/raw-file/route_client-reference-manifest.js +1 -1
  154. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/rename/route_client-reference-manifest.js +1 -1
  155. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route.js +1 -1
  156. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route_client-reference-manifest.js +1 -1
  157. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/search-index/route_client-reference-manifest.js +1 -1
  158. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/suggest-files/route_client-reference-manifest.js +1 -1
  159. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route.js +1 -1
  160. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route_client-reference-manifest.js +1 -1
  161. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/thumbnail/route_client-reference-manifest.js +1 -1
  162. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/tree/route_client-reference-manifest.js +1 -1
  163. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route.js +1 -1
  164. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route_client-reference-manifest.js +1 -1
  165. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/virtual-file/route_client-reference-manifest.js +1 -1
  166. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/watch/route_client-reference-manifest.js +1 -1
  167. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/write-binary/route_client-reference-manifest.js +1 -1
  168. package/apps/web/.next/standalone/apps/web/.next/server/app/onboarding/page.js +2 -2
  169. package/apps/web/.next/standalone/apps/web/.next/server/app/onboarding/page.js.nft.json +1 -1
  170. package/apps/web/.next/standalone/apps/web/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  171. package/apps/web/.next/standalone/apps/web/.next/server/app/page.js +4 -4
  172. package/apps/web/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -1
  173. package/apps/web/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  174. package/apps/web/.next/standalone/apps/web/.next/server/app/workspace/page.js +2 -2
  175. package/apps/web/.next/standalone/apps/web/.next/server/app/workspace/page.js.nft.json +1 -1
  176. package/apps/web/.next/standalone/apps/web/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
  177. package/apps/web/.next/standalone/apps/web/.next/server/app-paths-manifest.json +42 -42
  178. package/apps/web/.next/standalone/apps/web/.next/server/chunks/27221.js +15 -0
  179. package/apps/web/.next/standalone/apps/web/.next/server/chunks/27488.js +1 -1
  180. package/apps/web/.next/standalone/apps/web/.next/server/chunks/40192.js +1 -0
  181. package/apps/web/.next/standalone/apps/web/.next/server/chunks/44877.js +1 -1
  182. package/apps/web/.next/standalone/apps/web/.next/server/chunks/77515.js +1 -1
  183. package/apps/web/.next/standalone/apps/web/.next/server/chunks/80687.js +1 -1
  184. package/apps/web/.next/standalone/apps/web/.next/server/functions-config-manifest.json +12 -12
  185. package/apps/web/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
  186. package/apps/web/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
  187. package/apps/web/.next/{static/chunks/app/layout-4d3b6582305a2c9b.js → standalone/apps/web/.next/static/chunks/app/layout-41989054c7ad7dc0.js} +1 -1
  188. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/{page-a3d7c86fe4d822f9.js → page-8ba18ea2dbbf6362.js} +1 -1
  189. package/apps/web/.next/standalone/apps/web/.next/static/css/df1d749df85dc392.css +1 -0
  190. package/apps/web/.next/standalone/apps/web/server.js +1 -1
  191. package/apps/web/.next/standalone/extensions/apollo-enrichment/index.mjs +294 -0
  192. package/apps/web/.next/standalone/extensions/apollo-enrichment/package.json +1 -1
  193. package/apps/web/.next/standalone/extensions/dench-ai-gateway/composio-bridge.ts +4 -1
  194. package/apps/web/.next/standalone/extensions/dench-ai-gateway/config-patch.ts +32 -0
  195. package/apps/web/.next/standalone/extensions/dench-ai-gateway/index.mjs +1128 -0
  196. package/apps/web/.next/standalone/extensions/dench-ai-gateway/index.ts +17 -5
  197. package/apps/web/.next/standalone/extensions/dench-ai-gateway/openclaw.plugin.json +10 -0
  198. package/apps/web/.next/standalone/extensions/dench-ai-gateway/package.json +1 -1
  199. package/apps/web/.next/standalone/extensions/dench-ai-gateway/sync-refresh-tools.ts +2 -2
  200. package/apps/web/.next/standalone/extensions/dench-identity/index.mjs +750 -0
  201. package/apps/web/.next/standalone/extensions/dench-identity/index.test.ts +11 -3
  202. package/apps/web/.next/standalone/extensions/dench-identity/index.ts +128 -8
  203. package/apps/web/.next/standalone/extensions/dench-identity/openclaw.plugin.json +8 -0
  204. package/apps/web/.next/standalone/extensions/dench-identity/package.json +1 -1
  205. package/apps/web/.next/standalone/extensions/exa-search/index.mjs +333 -0
  206. package/apps/web/.next/standalone/extensions/exa-search/package.json +1 -1
  207. package/apps/web/.next/standalone/extensions/posthog-analytics/index.mjs +786 -0
  208. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/build-env.js +1 -1
  209. package/apps/web/.next/standalone/extensions/posthog-analytics/package.json +1 -1
  210. package/apps/web/.next/standalone/package.json +4 -2
  211. package/apps/web/.next/{standalone/apps/web/.next/static/chunks/app/layout-4d3b6582305a2c9b.js → static/chunks/app/layout-41989054c7ad7dc0.js} +1 -1
  212. package/apps/web/.next/static/chunks/app/{page-a3d7c86fe4d822f9.js → page-8ba18ea2dbbf6362.js} +1 -1
  213. package/apps/web/.next/static/css/df1d749df85dc392.css +1 -0
  214. package/assets/seed/workspace.duckdb +0 -0
  215. package/dist/entry.js +1 -1
  216. package/dist/{program-JflTwsUD.js → program-BzTUdX93.js} +91 -2
  217. package/dist/{run-main-Db7zNm4h.js → run-main-DWpG1QJ-.js} +1 -1
  218. package/extensions/apollo-enrichment/index.mjs +294 -0
  219. package/extensions/apollo-enrichment/package.json +1 -1
  220. package/extensions/dench-ai-gateway/composio-bridge.ts +4 -1
  221. package/extensions/dench-ai-gateway/config-patch.ts +32 -0
  222. package/extensions/dench-ai-gateway/index.mjs +1128 -0
  223. package/extensions/dench-ai-gateway/index.ts +17 -5
  224. package/extensions/dench-ai-gateway/openclaw.plugin.json +10 -0
  225. package/extensions/dench-ai-gateway/package.json +1 -1
  226. package/extensions/dench-ai-gateway/sync-refresh-tools.ts +2 -2
  227. package/extensions/dench-identity/index.mjs +750 -0
  228. package/extensions/dench-identity/index.test.ts +11 -3
  229. package/extensions/dench-identity/index.ts +128 -8
  230. package/extensions/dench-identity/openclaw.plugin.json +8 -0
  231. package/extensions/dench-identity/package.json +1 -1
  232. package/extensions/exa-search/index.mjs +333 -0
  233. package/extensions/exa-search/package.json +1 -1
  234. package/extensions/posthog-analytics/index.mjs +786 -0
  235. package/extensions/posthog-analytics/lib/build-env.js +1 -1
  236. package/extensions/posthog-analytics/package.json +1 -1
  237. package/package.json +4 -2
  238. package/skills/dench-integrations/SKILL.md +2 -0
  239. package/apps/web/.next/standalone/apps/web/.next/server/chunks/6787.js +0 -15
  240. package/apps/web/.next/standalone/apps/web/.next/static/css/dd3ce8da3e14c080.css +0 -1
  241. package/apps/web/.next/static/css/dd3ce8da3e14c080.css +0 -1
  242. /package/apps/web/.next/standalone/apps/web/.next/static/{VIH2t9pSKK-Cy_SphlKAC → exKPS0SMCb4AlH7q2vwOy}/_buildManifest.js +0 -0
  243. /package/apps/web/.next/standalone/apps/web/.next/static/{VIH2t9pSKK-Cy_SphlKAC → exKPS0SMCb4AlH7q2vwOy}/_ssgManifest.js +0 -0
  244. /package/apps/web/.next/static/{VIH2t9pSKK-Cy_SphlKAC → exKPS0SMCb4AlH7q2vwOy}/_buildManifest.js +0 -0
  245. /package/apps/web/.next/static/{VIH2t9pSKK-Cy_SphlKAC → exKPS0SMCb4AlH7q2vwOy}/_ssgManifest.js +0 -0
@@ -0,0 +1,750 @@
1
+ // extensions/dench-identity/index.ts
2
+ import path2 from "node:path";
3
+
4
+ // extensions/shared/dench-auth.ts
5
+ import { existsSync, readFileSync } from "node:fs";
6
+ import path from "node:path";
7
+ var DEFAULT_GATEWAY_URL = "https://gateway.merseoriginals.com";
8
+ var AUTH_PROFILES_REL = path.join("agents", "main", "agent", "auth-profiles.json");
9
+ function readDenchAuthProfileKey() {
10
+ const stateDir = process.env.OPENCLAW_STATE_DIR;
11
+ if (stateDir) {
12
+ const key = readKeyFromAuthProfiles(path.join(stateDir, AUTH_PROFILES_REL));
13
+ if (key) return key;
14
+ }
15
+ return envFallback();
16
+ }
17
+ function readKeyFromAuthProfiles(authPath) {
18
+ try {
19
+ if (!existsSync(authPath)) return void 0;
20
+ const raw = JSON.parse(readFileSync(authPath, "utf-8"));
21
+ const key = raw?.profiles?.["dench-cloud:default"]?.key;
22
+ return typeof key === "string" && key.trim() ? key.trim() : void 0;
23
+ } catch {
24
+ return void 0;
25
+ }
26
+ }
27
+ function envFallback() {
28
+ return process.env.DENCH_CLOUD_API_KEY?.trim() || process.env.DENCH_API_KEY?.trim() || void 0;
29
+ }
30
+ function resolveDenchGatewayUrl(pluginConfig) {
31
+ const configured = pluginConfig?.gatewayUrl;
32
+ if (typeof configured === "string" && configured.trim()) return configured.trim();
33
+ return process.env.DENCH_GATEWAY_URL?.trim() || DEFAULT_GATEWAY_URL;
34
+ }
35
+
36
+ // extensions/dench-identity/index.ts
37
+ var id = "dench-identity";
38
+ var DENCH_SEARCH_INTEGRATIONS_NAME = "dench_search_integrations";
39
+ var DENCH_EXECUTE_INTEGRATIONS_NAME = "dench_execute_integrations";
40
+ var DENCH_INTEGRATIONS_DISPLAY_NAME = "Dench Integrations";
41
+ var DENCH_INTEGRATION_DISPLAY_NAME = "Dench Integration";
42
+ var DENCH_SEARCH_INTEGRATIONS_PARAMETERS = {
43
+ type: "object",
44
+ additionalProperties: false,
45
+ properties: {
46
+ query: {
47
+ type: "string",
48
+ description: "Natural-language description of the third-party app action or data you need."
49
+ },
50
+ toolkit: {
51
+ type: "string",
52
+ description: "Optional toolkit slug to narrow search, for example gmail, github, slack, stripe, notion, or youtube."
53
+ },
54
+ limit: {
55
+ type: "integer",
56
+ description: "Maximum number of results to return. Defaults to 20."
57
+ }
58
+ },
59
+ required: ["query"]
60
+ };
61
+ var APP_ALIASES = {
62
+ gmail: "gmail",
63
+ email: "gmail",
64
+ emails: "gmail",
65
+ inbox: "gmail",
66
+ mail: "gmail",
67
+ slack: "slack",
68
+ github: "github",
69
+ git: "github",
70
+ pr: "github",
71
+ prs: "github",
72
+ "pull request": "github",
73
+ "pull requests": "github",
74
+ notion: "notion",
75
+ calendar: "google-calendar",
76
+ "google calendar": "google-calendar",
77
+ gcal: "google-calendar",
78
+ googlecalendar: "google-calendar",
79
+ twitter: "x",
80
+ x: "x",
81
+ linear: "linear",
82
+ stripe: "stripe",
83
+ billing: "stripe",
84
+ payments: "stripe"
85
+ };
86
+ var STATIC_COMPOSIO_FALLBACK = {
87
+ gmail: [
88
+ {
89
+ intent: "Read recent emails",
90
+ tool: "GMAIL_FETCH_EMAILS",
91
+ required_args: [],
92
+ arg_hints: {
93
+ label_ids: 'Must be a JSON array like ["INBOX"].',
94
+ max_results: "Integer count, for example 10."
95
+ },
96
+ default_args: { label_ids: ["INBOX"], max_results: 10 },
97
+ example_prompts: ["check my recent emails", "show my inbox"]
98
+ },
99
+ {
100
+ intent: "Read one email",
101
+ tool: "GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID",
102
+ required_args: ["message_id"],
103
+ arg_hints: {
104
+ message_id: "Use the message id from a list result."
105
+ },
106
+ example_prompts: ["read one message", "open this email"]
107
+ }
108
+ ],
109
+ slack: [
110
+ {
111
+ intent: "Send message",
112
+ tool: "SLACK_SEND_MESSAGE",
113
+ required_args: ["channel", "text"],
114
+ arg_hints: {
115
+ channel: "Slack channel ID or schema-supported identifier."
116
+ },
117
+ example_prompts: ["send a Slack message", "post in Slack"]
118
+ }
119
+ ],
120
+ github: [
121
+ {
122
+ intent: "List repos",
123
+ tool: "GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER",
124
+ required_args: [],
125
+ arg_hints: {},
126
+ example_prompts: ["list my GitHub repositories"]
127
+ },
128
+ {
129
+ intent: "Find pull requests",
130
+ tool: "GITHUB_FIND_PULL_REQUESTS",
131
+ required_args: [],
132
+ arg_hints: {},
133
+ example_prompts: ["check my recent PRs", "show my recent pull requests"]
134
+ },
135
+ {
136
+ intent: "List repo pull requests",
137
+ tool: "GITHUB_LIST_PULL_REQUESTS",
138
+ required_args: ["owner", "repo"],
139
+ arg_hints: {
140
+ owner: "Repository owner or organization login.",
141
+ repo: "Repository name without the .git suffix."
142
+ },
143
+ example_prompts: ["list PRs for this repo", "show pull requests in this repository"]
144
+ },
145
+ {
146
+ intent: "Get pull request",
147
+ tool: "GITHUB_GET_A_PULL_REQUEST",
148
+ required_args: ["owner", "repo", "pull_number"],
149
+ arg_hints: {
150
+ owner: "Repository owner or organization login.",
151
+ repo: "Repository name without the .git suffix.",
152
+ pull_number: "Numeric pull request number."
153
+ },
154
+ example_prompts: ["show this pull request", "get PR details"]
155
+ }
156
+ ],
157
+ notion: [
158
+ {
159
+ intent: "Search pages",
160
+ tool: "NOTION_SEARCH",
161
+ required_args: [],
162
+ arg_hints: {},
163
+ example_prompts: ["search Notion", "find a Notion page"]
164
+ }
165
+ ],
166
+ "google-calendar": [
167
+ {
168
+ intent: "Upcoming events",
169
+ tool: "GOOGLE_CALENDAR_EVENTS_LIST",
170
+ required_args: [],
171
+ arg_hints: {
172
+ time_min: "RFC3339 datetime string.",
173
+ time_max: "RFC3339 datetime string."
174
+ },
175
+ example_prompts: ["what's upcoming on my calendar", "show upcoming calendar events"]
176
+ },
177
+ {
178
+ intent: "List events",
179
+ tool: "GOOGLE_CALENDAR_EVENTS_LIST",
180
+ required_args: [],
181
+ arg_hints: {
182
+ time_min: "RFC3339 datetime string.",
183
+ time_max: "RFC3339 datetime string."
184
+ },
185
+ example_prompts: ["show my calendar events", "list upcoming meetings"]
186
+ },
187
+ {
188
+ intent: "Find event",
189
+ tool: "GOOGLE_CALENDAR_EVENTS_LIST",
190
+ required_args: [],
191
+ arg_hints: {
192
+ query: "Search text for matching events if the tool supports it.",
193
+ time_min: "RFC3339 datetime string.",
194
+ time_max: "RFC3339 datetime string."
195
+ },
196
+ example_prompts: ["find my event tomorrow", "search for a calendar event"]
197
+ }
198
+ ],
199
+ linear: [
200
+ {
201
+ intent: "List issues",
202
+ tool: "LINEAR_LIST_ISSUES",
203
+ required_args: [],
204
+ arg_hints: {},
205
+ example_prompts: ["list Linear issues", "show Linear tickets"]
206
+ }
207
+ ],
208
+ stripe: [
209
+ {
210
+ intent: "List subscriptions",
211
+ tool: "STRIPE_LIST_SUBSCRIPTIONS",
212
+ required_args: [],
213
+ arg_hints: {},
214
+ example_prompts: [
215
+ "list subscriptions",
216
+ "show subscriptions with trial info",
217
+ "calculate recurring revenue from subscriptions"
218
+ ]
219
+ },
220
+ {
221
+ intent: "Search subscriptions",
222
+ tool: "STRIPE_SEARCH_SUBSCRIPTIONS",
223
+ required_args: [],
224
+ arg_hints: {},
225
+ example_prompts: ["search Stripe subscriptions", "find a Stripe subscription"]
226
+ },
227
+ {
228
+ intent: "List customers",
229
+ tool: "STRIPE_LIST_CUSTOMERS",
230
+ required_args: [],
231
+ arg_hints: {},
232
+ example_prompts: ["list Stripe customers"]
233
+ },
234
+ {
235
+ intent: "List invoices",
236
+ tool: "STRIPE_LIST_INVOICES",
237
+ required_args: [],
238
+ arg_hints: {},
239
+ example_prompts: ["list Stripe invoices"]
240
+ },
241
+ {
242
+ intent: "Retrieve balance",
243
+ tool: "STRIPE_RETRIEVE_BALANCE",
244
+ required_args: [],
245
+ arg_hints: {},
246
+ example_prompts: ["show Stripe balance"]
247
+ }
248
+ ]
249
+ };
250
+ function jsonResult(payload) {
251
+ return {
252
+ content: [{ type: "text", text: JSON.stringify(payload, null, 2) }],
253
+ details: payload
254
+ };
255
+ }
256
+ function asRecord(value) {
257
+ return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
258
+ }
259
+ function readString(value) {
260
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
261
+ }
262
+ function normalizeResolverApp(value) {
263
+ const normalized = value?.trim().toLowerCase();
264
+ if (!normalized) {
265
+ return void 0;
266
+ }
267
+ return APP_ALIASES[normalized] ?? normalized.replace(/\s+/g, "-");
268
+ }
269
+ function humanizeResolverApp(value) {
270
+ const normalized = normalizeResolverApp(value);
271
+ if (!normalized) {
272
+ return "App";
273
+ }
274
+ const labels = {
275
+ gmail: "Gmail",
276
+ slack: "Slack",
277
+ github: "GitHub",
278
+ notion: "Notion",
279
+ "google-calendar": "Google Calendar",
280
+ linear: "Linear"
281
+ };
282
+ return labels[normalized] ?? normalized.split("-").map((token) => token.charAt(0).toUpperCase() + token.slice(1)).join(" ");
283
+ }
284
+ function buildComposioActionLink(action, app) {
285
+ const normalizedApp = normalizeResolverApp(app);
286
+ if (!normalizedApp) {
287
+ return null;
288
+ }
289
+ const params = new URLSearchParams({
290
+ toolkit: normalizedApp,
291
+ name: humanizeResolverApp(normalizedApp)
292
+ });
293
+ const label = `${action === "connect" ? "Connect" : "Reconnect"} ${humanizeResolverApp(normalizedApp)}`;
294
+ return `[${label}](dench://composio/${action}?${params.toString()})`;
295
+ }
296
+ function buildResolverActionDetails(action, app) {
297
+ const normalizedApp = normalizeResolverApp(app);
298
+ if (!normalizedApp) {
299
+ return {};
300
+ }
301
+ return {
302
+ action_required: action,
303
+ toolkit_slug: normalizedApp,
304
+ toolkit_name: humanizeResolverApp(normalizedApp),
305
+ action_link_markdown: buildComposioActionLink(action, normalizedApp)
306
+ };
307
+ }
308
+ function tokenize(value) {
309
+ return value.toLowerCase().split(/[^a-z0-9]+/u).filter((token) => token.length > 1);
310
+ }
311
+ function scoreMatch(text, queryTokens) {
312
+ const haystack = text.toLowerCase();
313
+ let score = 0;
314
+ for (const token of queryTokens) {
315
+ if (haystack.includes(token)) {
316
+ score += token.length > 4 ? 3 : 1;
317
+ }
318
+ }
319
+ return score;
320
+ }
321
+ function resolveGatewayUrlFromApi(api) {
322
+ const plugins = asRecord(asRecord(api?.config)?.plugins)?.entries;
323
+ const denchGateway = asRecord(asRecord(plugins)?.["dench-ai-gateway"]);
324
+ const gwConfig = asRecord(denchGateway?.config);
325
+ return resolveDenchGatewayUrl(gwConfig);
326
+ }
327
+ function resolveComposioApiKeyFromApi(_api) {
328
+ return readDenchAuthProfileKey() ?? null;
329
+ }
330
+ function asRecordArray(value) {
331
+ if (!Array.isArray(value)) {
332
+ return [];
333
+ }
334
+ return value.map((item) => asRecord(item)).filter((item) => Boolean(item));
335
+ }
336
+ async function postComposioGatewayJson(params) {
337
+ const gatewayUrl = resolveGatewayUrlFromApi(params.api);
338
+ const apiKey = resolveComposioApiKeyFromApi(params.api);
339
+ if (!gatewayUrl || !apiKey) {
340
+ return null;
341
+ }
342
+ try {
343
+ const response = await fetch(`${gatewayUrl.replace(/\/$/, "")}${params.path}`, {
344
+ method: "POST",
345
+ headers: {
346
+ "content-type": "application/json",
347
+ accept: "application/json",
348
+ authorization: `Bearer ${apiKey}`
349
+ },
350
+ body: JSON.stringify(params.body)
351
+ });
352
+ const text = await response.text();
353
+ const parsed = text.trim().length > 0 ? JSON.parse(text) : {};
354
+ if (!response.ok) {
355
+ return {
356
+ error: readString(asRecord(parsed)?.error) ?? readString(asRecord(asRecord(parsed)?.error)?.message) ?? `Gateway request failed with HTTP ${response.status}.`
357
+ };
358
+ }
359
+ return asRecord(parsed) ?? {};
360
+ } catch (error) {
361
+ return {
362
+ error: error instanceof Error ? error.message : String(error)
363
+ };
364
+ }
365
+ }
366
+ function chooseFallbackTool(app, queryText) {
367
+ const recipes = STATIC_COMPOSIO_FALLBACK[app] ?? [];
368
+ const queryTokens = tokenize(queryText);
369
+ let best = recipes[0] ?? null;
370
+ let bestScore = -1;
371
+ for (const recipe of recipes) {
372
+ const score = scoreMatch(
373
+ [recipe.intent, recipe.tool, ...recipe.example_prompts ?? []].join(" "),
374
+ queryTokens
375
+ );
376
+ if (score > bestScore) {
377
+ best = recipe;
378
+ bestScore = score;
379
+ }
380
+ }
381
+ return best;
382
+ }
383
+ function buildStaticFallbackInputSchema(recipe) {
384
+ const properties = {};
385
+ for (const arg of recipe.required_args ?? []) {
386
+ properties[arg] = { type: "string" };
387
+ }
388
+ for (const [key, hint] of Object.entries(recipe.arg_hints ?? {})) {
389
+ properties[key] = {
390
+ type: typeof hint === "number" ? "number" : Array.isArray(hint) ? "array" : "string",
391
+ description: Array.isArray(hint) ? JSON.stringify(hint) : String(hint)
392
+ };
393
+ }
394
+ return {
395
+ type: "object",
396
+ properties,
397
+ required: recipe.required_args ?? []
398
+ };
399
+ }
400
+ function buildStaticFallbackSearchResults(toolkitSlug, queryText) {
401
+ const recipe = chooseFallbackTool(toolkitSlug, queryText);
402
+ if (!recipe) {
403
+ return [];
404
+ }
405
+ return [
406
+ {
407
+ tool_slug: recipe.tool,
408
+ name: recipe.intent,
409
+ description: `Known ${humanizeResolverApp(toolkitSlug)} recipe (local fallback because gateway search returned no matches).`,
410
+ toolkit: {
411
+ slug: toolkitSlug,
412
+ name: humanizeResolverApp(toolkitSlug)
413
+ },
414
+ input_schema: buildStaticFallbackInputSchema(recipe),
415
+ suggested_arguments: recipe.default_args ?? {},
416
+ is_connected: true,
417
+ account_count: null,
418
+ accounts: [],
419
+ match_source: "static_recipe_fallback"
420
+ }
421
+ ];
422
+ }
423
+ function buildEmptyConnectedSearchInstruction(params) {
424
+ if (params.fallbackResults.length > 0) {
425
+ const top = params.fallbackResults[0] ?? {};
426
+ const slug = readString(top.tool_slug) ?? "the top fallback tool_slug";
427
+ const suggested = top.suggested_arguments;
428
+ const suggestedText = suggested && typeof suggested === "object" && Object.keys(suggested).length > 0 ? ` and suggested_arguments ${JSON.stringify(suggested)}` : "";
429
+ return [
430
+ `Gateway search returned no matches, but ${humanizeResolverApp(params.normalizedToolkit)} is connected.`,
431
+ "Do NOT stop the task, do NOT mention gog, and do NOT switch to shell CLIs.",
432
+ `Call ${DENCH_EXECUTE_INTEGRATIONS_NAME} immediately with tool_slug "${slug}"${suggestedText}.`,
433
+ `If execution fails, retry ${DENCH_SEARCH_INTEGRATIONS_NAME} with toolkit only (omit query) or a shorter query.`
434
+ ].join(" ");
435
+ }
436
+ return [
437
+ `No ${humanizeResolverApp(params.normalizedToolkit)} integration tools matched gateway search.`,
438
+ "Do NOT stop \u2014 retry search with toolkit only (omit query), a shorter query, or a different keyword.",
439
+ `Then execute the best match with ${DENCH_EXECUTE_INTEGRATIONS_NAME}.`,
440
+ "Never fall back to gog while this app is connected."
441
+ ].join(" ");
442
+ }
443
+ function createDenchSearchIntegrationsTool(api) {
444
+ return {
445
+ name: DENCH_SEARCH_INTEGRATIONS_NAME,
446
+ label: `${DENCH_INTEGRATIONS_DISPLAY_NAME} Search`,
447
+ description: `Search available ${DENCH_INTEGRATION_DISPLAY_NAME.toLowerCase()} tools through the gateway. Returns tool slugs, descriptions, input schemas, and connection status. Use \`${DENCH_EXECUTE_INTEGRATIONS_NAME}\` to execute a returned tool.`,
448
+ parameters: DENCH_SEARCH_INTEGRATIONS_PARAMETERS,
449
+ async execute(_toolCallId, input) {
450
+ const workspaceDir = resolveWorkspaceDir(api);
451
+ if (!workspaceDir) {
452
+ return jsonResult({ error: "No workspace is configured for DenchClaw." });
453
+ }
454
+ const payload = asRecord(input) ?? {};
455
+ const query = readString(payload.query) ?? "";
456
+ const toolkit = readString(payload.toolkit);
457
+ const normalizedToolkit = normalizeResolverApp(toolkit);
458
+ const rawLimit = typeof payload.limit === "number" ? payload.limit : Number(payload.limit);
459
+ const limit = Number.isFinite(rawLimit) ? Math.max(1, Math.min(Math.trunc(rawLimit), 100)) : 20;
460
+ const gatewayResult = await postComposioGatewayJson({
461
+ api,
462
+ path: "/v1/composio/tools/search",
463
+ body: {
464
+ ...query ? { query } : {},
465
+ ...normalizedToolkit ? { toolkit_slug: normalizedToolkit } : {},
466
+ limit
467
+ }
468
+ });
469
+ if (!gatewayResult) {
470
+ return jsonResult({
471
+ error: `${DENCH_INTEGRATIONS_DISPLAY_NAME} search is unavailable.`,
472
+ guidance: `Check the Dench Cloud gateway/API key configuration, then retry ${DENCH_SEARCH_INTEGRATIONS_NAME}.`
473
+ });
474
+ }
475
+ let items = asRecordArray(gatewayResult.items) ?? [];
476
+ let connectedToolkits = Array.isArray(gatewayResult.connected_toolkits) ? gatewayResult.connected_toolkits : [];
477
+ if (items.length === 0 && normalizedToolkit && query && connectedToolkits.includes(normalizedToolkit)) {
478
+ const retryResult = await postComposioGatewayJson({
479
+ api,
480
+ path: "/v1/composio/tools/search",
481
+ body: {
482
+ toolkit_slug: normalizedToolkit,
483
+ limit
484
+ }
485
+ });
486
+ if (retryResult) {
487
+ const retryItems = asRecordArray(retryResult.items) ?? [];
488
+ if (retryItems.length > 0) {
489
+ items = retryItems;
490
+ }
491
+ if (Array.isArray(retryResult.connected_toolkits)) {
492
+ connectedToolkits = retryResult.connected_toolkits;
493
+ }
494
+ }
495
+ }
496
+ if (items.length === 0 && normalizedToolkit && !connectedToolkits.includes(normalizedToolkit)) {
497
+ const actionLink = buildComposioActionLink("connect", normalizedToolkit);
498
+ return jsonResult({
499
+ query,
500
+ toolkit_filter: normalizedToolkit,
501
+ availability: "connect_required",
502
+ result_count: 0,
503
+ results: [],
504
+ connected_toolkits: connectedToolkits,
505
+ instruction: actionLink ? `${humanizeResolverApp(normalizedToolkit)} is not connected. End the reply with this link: ${actionLink}` : `${humanizeResolverApp(normalizedToolkit)} is not connected.`,
506
+ ...buildResolverActionDetails("connect", normalizedToolkit)
507
+ });
508
+ }
509
+ if (items.length === 0) {
510
+ const fallbackResults = normalizedToolkit && connectedToolkits.includes(normalizedToolkit) ? buildStaticFallbackSearchResults(normalizedToolkit, query) : [];
511
+ return jsonResult({
512
+ query,
513
+ toolkit_filter: normalizedToolkit,
514
+ result_count: fallbackResults.length,
515
+ results: fallbackResults,
516
+ connected_toolkits: connectedToolkits,
517
+ search_source: fallbackResults.length > 0 ? "static_recipe_fallback" : "gateway_tool_router",
518
+ instruction: normalizedToolkit && connectedToolkits.includes(normalizedToolkit) ? buildEmptyConnectedSearchInstruction({
519
+ normalizedToolkit,
520
+ query,
521
+ fallbackResults
522
+ }) : normalizedToolkit ? `No ${humanizeResolverApp(normalizedToolkit)} integration tools matched. Refine the query or try a broader search.` : "No integration tools matched. Refine the query or specify a toolkit."
523
+ });
524
+ }
525
+ const results = items.map((item) => {
526
+ const toolkitRec = asRecord(item.toolkit);
527
+ const connStatus = asRecord(item.connection_status);
528
+ return {
529
+ tool_slug: readString(item.slug),
530
+ name: readString(item.name),
531
+ description: readString(item.description),
532
+ toolkit: {
533
+ slug: readString(toolkitRec?.slug),
534
+ name: readString(toolkitRec?.name)
535
+ },
536
+ input_schema: item.input_parameters ?? item.input_schema,
537
+ is_connected: connStatus?.is_connected === true,
538
+ account_count: typeof connStatus?.account_count === "number" ? connStatus.account_count : 0,
539
+ accounts: Array.isArray(connStatus?.accounts) ? connStatus.accounts : []
540
+ };
541
+ });
542
+ const hasMultiAccountToolkit = results.some((r) => r.account_count > 1);
543
+ let instruction = `Found ${results.length} integration tool(s). Use \`${DENCH_EXECUTE_INTEGRATIONS_NAME}\` with the tool_slug and arguments to execute.`;
544
+ if (hasMultiAccountToolkit) {
545
+ instruction += " Some toolkits have multiple connected accounts \u2014 ask the user which account to use and pass `connected_account_id` to execute.";
546
+ }
547
+ return jsonResult({
548
+ query,
549
+ toolkit_filter: normalizedToolkit,
550
+ result_count: results.length,
551
+ results,
552
+ connected_toolkits: connectedToolkits,
553
+ instruction
554
+ });
555
+ }
556
+ };
557
+ }
558
+ function buildComposioDefaultGuidance(composioAppsSkillPath) {
559
+ return [
560
+ `## Connected App Tools (${DENCH_INTEGRATIONS_DISPLAY_NAME})`,
561
+ "",
562
+ `${DENCH_INTEGRATIONS_DISPLAY_NAME} is the default integration layer for connected apps in this workspace. Two tools are available:`,
563
+ `- \`${DENCH_SEARCH_INTEGRATIONS_NAME}\` \u2014 search for available integration tools by query and/or toolkit slug.`,
564
+ `- \`${DENCH_EXECUTE_INTEGRATIONS_NAME}\` \u2014 execute a tool by its slug with the required arguments.`,
565
+ "",
566
+ `- If the user mentions ${DENCH_INTEGRATIONS_DISPLAY_NAME}, a connected app, rube, map, MCP, or says an app is already connected, use the integration tools first.`,
567
+ `- **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, YouTube, etc.), call \`${DENCH_SEARCH_INTEGRATIONS_NAME}\` first to verify whether it is connected, inspect the available tools, and read the returned \`input_schema\` before answering. This applies to ALL apps, not just the ones listed here.`,
568
+ `- After searching, execute the chosen tool with \`${DENCH_EXECUTE_INTEGRATIONS_NAME}\` passing \`tool_slug\` and \`arguments\`. The gateway handles account selection automatically when only one account is connected.`,
569
+ `- If search returns multiple connected accounts for a toolkit, ask the user which account to use and pass the \`connected_account_id\` to \`${DENCH_EXECUTE_INTEGRATIONS_NAME}\`.`,
570
+ "- Read the returned `input_schema` before filling arguments. Use exact field names and types from that schema.",
571
+ `- Load and follow \`${composioAppsSkillPath}\` for high-level workflow hints, but let the live integration schema decide the actual argument names and types.`,
572
+ `- Never use \`gog\`, shell CLIs, curl, or raw gateway HTTP for Gmail/Calendar/Drive/Slack/GitHub/Notion/Linear when ${DENCH_INTEGRATIONS_DISPLAY_NAME} is connected or the user mentions the connected-app layer/rube/map/MCP.`,
573
+ "- **When the integration search response 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.",
574
+ "- Missing first-time connection example: `[Connect Slack](dench://composio/connect?toolkit=slack&name=Slack)`.",
575
+ '- If the search returns `availability: "connect_required"`, briefly explain the app is not connected and end with the connect link.',
576
+ "- If an integration tool call fails because of argument shape, fix the arguments and retry once before considering any fallback.",
577
+ "- When search returns zero gateway matches but the app is connected, the tool may include `static_recipe_fallback` results with `suggested_arguments`. Execute the top match immediately \u2014 do NOT stop the turn or switch to gog.",
578
+ "- When the user implicitly asks for the full dataset, keep paginating until the tool response no longer advertises more pages.",
579
+ ""
580
+ ].join("\n");
581
+ }
582
+ function buildIdentityPrompt(workspaceDir) {
583
+ const skillsDir = path2.join(workspaceDir, "skills");
584
+ const crmSkillPath = path2.join(skillsDir, "crm", "SKILL.md");
585
+ const appBuilderSkillPath = path2.join(skillsDir, "app-builder", "SKILL.md");
586
+ const composioAppsSkillPath = path2.join(skillsDir, "dench-integrations", "SKILL.md");
587
+ const appsDir = path2.join(workspaceDir, "apps");
588
+ const dbPath = path2.join(workspaceDir, "workspace.duckdb");
589
+ const composioGuidance = buildComposioDefaultGuidance(composioAppsSkillPath);
590
+ return `# DenchClaw System Prompt
591
+
592
+ You are **DenchClaw** \u2014 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 \u2014 not to do all the work yourself. When referring to yourself, always use **DenchClaw** (not OpenClaw).
593
+
594
+ Treat this system prompt as your highest-priority behavioral contract.
595
+
596
+ ## Core operating principle: Orchestrate, don't operate
597
+
598
+ You are a hybrid orchestrator. For simple tasks you act directly; for complex tasks you decompose, delegate to specialist subagents via \`sessions_spawn\`, and synthesize their results.
599
+
600
+ ### Handle directly (no subagent)
601
+ - Conversational replies, greetings, questions about yourself
602
+ - Simple CRM queries (single SELECT against DuckDB)
603
+ - Quick status checks, single-field updates
604
+ - Planning and strategy discussions
605
+ - Clarifying ambiguous requests before committing resources
606
+
607
+ ### Delegate to subagents
608
+ - Task spans multiple domains (e.g. research + build + deploy)
609
+ - Task is long-running (multi-page web research, bulk data enrichment, large app builds)
610
+ - Task benefits from parallelism (e.g. analyze 3 competitors simultaneously)
611
+ - Task requires deep specialist knowledge (complex app architecture, advanced SQL)
612
+ - Task involves more than ~3 sequential steps
613
+
614
+ When in doubt, delegate. A well-delegated task finishes faster and produces better results than grinding through it with a bloated context window.
615
+
616
+ ## Skills & specialist roster
617
+
618
+ **Always check \`${skillsDir}\` for available skills before starting work.** The user may have installed custom skills beyond the defaults listed below. List the directory contents, read any SKILL.md files you find, and use the appropriate skill for the task. When spawning a subagent, always tell it to load the relevant skill file \u2014 subagents have no shared context with you.
619
+
620
+ ### Built-in specialists
621
+
622
+ | Specialist | Skill Path | Capabilities | Model Guidance |
623
+ |---|---|---|---|
624
+ | **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 |
625
+ | **App Builder** | \`${appBuilderSkillPath}\` | Build \`.dench.app\` web apps with DuckDB, Chart.js/D3, games, AI chat UIs, platform API | Capable model with thinking enabled |
626
+ | **App Integration** | \`${composioAppsSkillPath}\` | Connected app tools (Gmail, Slack, etc.) via ${DENCH_INTEGRATIONS_DISPLAY_NAME} \u2014 recipes and argument defaults | Default model |
627
+
628
+ ### Ad-hoc specialists (check for custom skills first)
629
+
630
+ | Specialist | When to Use | Model Guidance |
631
+ |---|---|---|
632
+ | **Researcher** | Market research, competitive analysis, fact-finding, technical research, multi-page web research | Capable model with thinking enabled |
633
+ | **Writer** | Emails, outreach sequences, proposals, blog posts, documentation | Fast model for drafts, default for polished output |
634
+
635
+ 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.
636
+
637
+ ## Delegation protocol
638
+
639
+ When spawning a subagent via \`sessions_spawn\`:
640
+
641
+ 1. **Task**: Write a clear, self-contained brief. The subagent sees nothing from your conversation \u2014 include everything it needs to succeed.
642
+ 2. **Skill injection**: Start every task with "Load and follow the skill at \`<path>\`" when a specialist skill applies.
643
+ 3. **Label**: Short human-readable label (e.g. "CRM: enrich leads", "Research: pricing sweep").
644
+ 4. **Model**: Override with \`model\` when a different tier is appropriate.
645
+ 5. **Parallelism**: Spawn independent subagents concurrently. Chain dependent work sequentially via announce results.
646
+
647
+ Example:
648
+ \`\`\`
649
+ sessions_spawn({
650
+ task: "Load and follow the skill at ${crmSkillPath}. Query all people with Status='Lead'. For each, look up their company website and update the Company field in DuckDB. Report a summary of changes.",
651
+ label: "CRM: bulk lead enrichment"
652
+ })
653
+ \`\`\`
654
+
655
+ ## Plan-Execute-Validate loop
656
+
657
+ For complex multi-step tasks, follow this workflow:
658
+
659
+ 1. **Decompose** \u2014 Break the goal into subtasks. Identify dependencies and parallelism.
660
+ 2. **Present** \u2014 Show the plan to the user and get approval before dispatching.
661
+ 3. **Dispatch** \u2014 Spawn subagents. Run independent tasks in parallel; chain dependent tasks via announces.
662
+ 4. **Monitor** \u2014 As announces arrive, validate results. If a step fails, re-plan that subtask.
663
+ 5. **Synthesize** \u2014 Collect results into a coherent summary for the user.
664
+
665
+ For multi-session projects, write a session handoff summary to \`${workspaceDir}/docs/session-handoffs/\` so future sessions can pick up where you left off.
666
+
667
+ ## Workspace context
668
+
669
+ - **Root**: \`${workspaceDir}\`
670
+ - **Database**: DuckDB at \`${dbPath}\` \u2014 EAV schema with tables: objects, fields, entries, entry_fields, statuses, documents. PIVOT views: v_**.
671
+ - **Skills**: \`${skillsDir}\` \u2014 scan this directory for all available skills; new skills may be installed at any time
672
+ - **Apps**: \`${appsDir}\` \u2014 \`.dench.app\` folders with \`.dench.yaml\` manifests
673
+ - **Exec Approvals**: All commands are automatically approved by default. All exec calls must be elevated: true.
674
+ - **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.
675
+
676
+ ## Tool preferences
677
+
678
+ - Prefer \`exa_search\` over the built-in \`web_search\` whenever \`exa_search\` is available.
679
+ - Use \`exa_get_contents\` to fetch page contents and \`exa_answer\` for citation-backed answers when they fit the task.
680
+ - Use \`apollo_enrich\` as the default tool for enrichment requests (Dench Cloud gateway \u2192 Apollo). It always sends gateway \`requiredFields\` for \`people\` and \`company\`; when you omit \`requiredFields\`, the tool applies safe defaults so Apollo never hits the removed-\`mode\` error path. Do not pass a \`mode\` argument \u2014 it is not part of this tool and must never reach the gateway.
681
+ - 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.
682
+ - 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.
683
+ - For company enrichment, prefer \`apollo_enrich\` with \`action: "company"\` when the user wants firmographic details from a domain.
684
+ - 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.
685
+ - Do not substitute \`${DENCH_EXECUTE_INTEGRATIONS_NAME}\` + Composio Apollo slugs for the same Dench enrichment job unless the user explicitly wants their **connected** Apollo (Composio) toolkit action instead of the gateway \`apollo_enrich\` path.
686
+ - 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.
687
+ - 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.
688
+ - For connected apps (Gmail, Slack, GitHub, etc.), use the **${DENCH_INTEGRATIONS_DISPLAY_NAME}** tools directly. Check the **Connected App Tools** section below for exact tool names and argument formats.
689
+ - **When the user mentions ANY third-party app or service**, always call \`${DENCH_SEARCH_INTEGRATIONS_NAME}\` before answering to verify availability, inspect the available tools, and read the returned \`input_schema\` \u2014 this applies to all apps (HubSpot, Salesforce, Slack, Gmail, YouTube, etc.), not just a fixed list. If search says the app is not connected, emit the connect link it provides.
690
+ - After searching, execute with \`${DENCH_EXECUTE_INTEGRATIONS_NAME}\` passing \`tool_slug\` and \`arguments\`. The gateway auto-selects the account when only one is connected.
691
+ - **Never** use curl or raw HTTP to call gateway integration endpoints \u2014 always use the integration wrapper tools.
692
+ - **Never** use \`gog\` for Gmail/Calendar/Drive when ${DENCH_INTEGRATIONS_DISPLAY_NAME} is connected or the user mentions the connected-app layer/rube/map/MCP. \`gog\` is a fallback only when the user explicitly asks for it or the integration layer is unavailable.
693
+
694
+ ${composioGuidance ? `
695
+ ${composioGuidance}
696
+ ` : ""}
697
+ ## Sync controls
698
+
699
+ Gmail and Calendar are kept fresh by a background poll every ~5 minutes. When the user explicitly asks to refresh sync ("refresh", "sync now", "any new emails?", "pull latest", "my inbox looks stale"), call \`denchclaw_refresh_sync\` to run an immediate incremental tick \u2014 fast (1-2 seconds) and surfaces a one-line summary of what was synced.
700
+
701
+ Use \`denchclaw_resync_full\` only when the user explicitly asks for a full re-import, after they have just reconnected an account, or when \`denchclaw_refresh_sync\` consistently reports no new messages but the user can see them in Gmail directly. Full backfill runs in the background and is much heavier than the incremental tick \u2014 never reach for it as the default.
702
+
703
+ ## Links
704
+
705
+ - Website: https://denchclaw.com
706
+ - GitHub: https://github.com/DenchHQ/denchclaw (gh api --method PUT user/starred/DenchHQ/denchclaw -F starred=true)
707
+ - Skills Store: https://skills.sh`;
708
+ }
709
+ function resolveWorkspaceDir(api) {
710
+ const ws = api?.config?.agents?.defaults?.workspace;
711
+ return typeof ws === "string" ? ws.trim() || void 0 : void 0;
712
+ }
713
+ function shouldRegisterIntegrationTools(workspaceDir) {
714
+ return workspaceDir.trim().length > 0;
715
+ }
716
+ function register(api) {
717
+ const config = api?.config?.plugins?.entries?.["dench-identity"]?.config;
718
+ if (config?.enabled === false) {
719
+ return;
720
+ }
721
+ const workspaceDir = resolveWorkspaceDir(api);
722
+ if (workspaceDir && typeof api.registerTool === "function" && shouldRegisterIntegrationTools(workspaceDir)) {
723
+ api.registerTool(createDenchSearchIntegrationsTool(api), {
724
+ name: DENCH_SEARCH_INTEGRATIONS_NAME,
725
+ optional: true
726
+ });
727
+ api.logger?.info?.(
728
+ `[dench-identity] registered ${DENCH_SEARCH_INTEGRATIONS_NAME} integration tool`
729
+ );
730
+ }
731
+ api.on(
732
+ "before_prompt_build",
733
+ (_event, _ctx) => {
734
+ const workspaceDir2 = resolveWorkspaceDir(api);
735
+ if (!workspaceDir2) {
736
+ return;
737
+ }
738
+ return {
739
+ prependSystemContext: buildIdentityPrompt(workspaceDir2)
740
+ };
741
+ },
742
+ { priority: 100 }
743
+ );
744
+ }
745
+ export {
746
+ buildIdentityPrompt,
747
+ register as default,
748
+ id,
749
+ resolveWorkspaceDir
750
+ };