denchclaw 3.1.2 → 3.1.4

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 +154 -154
  3. package/apps/web/.next/standalone/apps/web/.next/app-path-routes-manifest.json +47 -47
  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 +47 -47
  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 +10 -10
  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-0b073d606db56b76.js} +1 -1
  188. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/{page-a3d7c86fe4d822f9.js → page-91e10489bfb4d2cb.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-0b073d606db56b76.js} +1 -1
  212. package/apps/web/.next/static/chunks/app/{page-a3d7c86fe4d822f9.js → page-91e10489bfb4d2cb.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 → BJK3zoIUstVWHptp0v5ii}/_buildManifest.js +0 -0
  243. /package/apps/web/.next/standalone/apps/web/.next/static/{VIH2t9pSKK-Cy_SphlKAC → BJK3zoIUstVWHptp0v5ii}/_ssgManifest.js +0 -0
  244. /package/apps/web/.next/static/{VIH2t9pSKK-Cy_SphlKAC → BJK3zoIUstVWHptp0v5ii}/_buildManifest.js +0 -0
  245. /package/apps/web/.next/static/{VIH2t9pSKK-Cy_SphlKAC → BJK3zoIUstVWHptp0v5ii}/_ssgManifest.js +0 -0
@@ -0,0 +1,786 @@
1
+ // extensions/posthog-analytics/lib/build-env.ts
2
+ var POSTHOG_KEY = "";
3
+ var DENCHCLAW_VERSION = "";
4
+ var OPENCLAW_VERSION = "";
5
+
6
+ // extensions/posthog-analytics/lib/privacy.ts
7
+ import { randomUUID } from "node:crypto";
8
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
9
+ import { homedir } from "node:os";
10
+ import { join, dirname } from "node:path";
11
+ var SECRETS_PATTERN = /(?:sk-[a-zA-Z0-9]{20,}|ghp_[a-zA-Z0-9]{36}|xoxb-[a-zA-Z0-9-]+|AKIA[A-Z0-9]{16}|eyJ[a-zA-Z0-9_-]{10,}\.[a-zA-Z0-9_-]{10,})/g;
12
+ var REDACTED = "[REDACTED]";
13
+ function resolveConfigPath(openclawConfig) {
14
+ const stateDir = openclawConfig?.stateDir ?? join(process.env.HOME || homedir(), ".openclaw-dench");
15
+ return join(stateDir, "telemetry.json");
16
+ }
17
+ function readPrivacyMode(openclawConfig) {
18
+ try {
19
+ const configPath = resolveConfigPath(openclawConfig);
20
+ if (!existsSync(configPath)) return true;
21
+ const raw = JSON.parse(readFileSync(configPath, "utf-8"));
22
+ return raw.privacyMode !== false;
23
+ } catch {
24
+ return true;
25
+ }
26
+ }
27
+ var _cachedPersonInfo = void 0;
28
+ function readPersonInfo(openclawConfig) {
29
+ if (_cachedPersonInfo !== void 0) return _cachedPersonInfo;
30
+ try {
31
+ const configPath = resolveConfigPath(openclawConfig);
32
+ if (!existsSync(configPath)) {
33
+ _cachedPersonInfo = null;
34
+ return null;
35
+ }
36
+ const raw = JSON.parse(readFileSync(configPath, "utf-8"));
37
+ const info = {};
38
+ if (typeof raw.name === "string" && raw.name) info.name = raw.name;
39
+ if (typeof raw.email === "string" && raw.email) info.email = raw.email;
40
+ if (typeof raw.avatar === "string" && raw.avatar) info.avatar = raw.avatar;
41
+ if (typeof raw.denchOrgId === "string" && raw.denchOrgId) info.denchOrgId = raw.denchOrgId;
42
+ _cachedPersonInfo = Object.keys(info).length > 0 ? info : null;
43
+ return _cachedPersonInfo;
44
+ } catch {
45
+ _cachedPersonInfo = null;
46
+ return null;
47
+ }
48
+ }
49
+ var _cachedAnonymousId = null;
50
+ function readOrCreateAnonymousId(openclawConfig) {
51
+ if (_cachedAnonymousId) return _cachedAnonymousId;
52
+ try {
53
+ const configPath = resolveConfigPath(openclawConfig);
54
+ let raw = {};
55
+ if (existsSync(configPath)) {
56
+ raw = JSON.parse(readFileSync(configPath, "utf-8"));
57
+ }
58
+ if (typeof raw.anonymousId === "string" && raw.anonymousId) {
59
+ _cachedAnonymousId = raw.anonymousId;
60
+ return raw.anonymousId;
61
+ }
62
+ const id2 = randomUUID();
63
+ raw.anonymousId = id2;
64
+ mkdirSync(dirname(configPath), { recursive: true });
65
+ writeFileSync(configPath, JSON.stringify(raw, null, 2) + "\n", "utf-8");
66
+ _cachedAnonymousId = id2;
67
+ return id2;
68
+ } catch {
69
+ const id2 = randomUUID();
70
+ _cachedAnonymousId = id2;
71
+ return id2;
72
+ }
73
+ }
74
+ function stripSecrets(value) {
75
+ if (typeof value === "string") {
76
+ return value.replace(SECRETS_PATTERN, REDACTED);
77
+ }
78
+ if (Array.isArray(value)) {
79
+ return value.map(stripSecrets);
80
+ }
81
+ if (value && typeof value === "object") {
82
+ const out = {};
83
+ for (const [k, v] of Object.entries(value)) {
84
+ const keyLower = k.toLowerCase();
85
+ if (keyLower.includes("key") || keyLower.includes("token") || keyLower.includes("secret") || keyLower.includes("password") || keyLower.includes("credential")) {
86
+ out[k] = REDACTED;
87
+ } else {
88
+ out[k] = stripSecrets(v);
89
+ }
90
+ }
91
+ return out;
92
+ }
93
+ return value;
94
+ }
95
+ function redactMessages(messages) {
96
+ if (!Array.isArray(messages)) return messages;
97
+ return messages.map((msg) => {
98
+ if (!msg || typeof msg !== "object") return msg;
99
+ const redacted = { role: msg.role };
100
+ if (msg.name) redacted.name = msg.name;
101
+ if (msg.tool_call_id) redacted.tool_call_id = msg.tool_call_id;
102
+ redacted.content = REDACTED;
103
+ return redacted;
104
+ });
105
+ }
106
+ function redactToolCalls(toolCalls) {
107
+ return toolCalls.map((tc) => {
108
+ if (!tc || typeof tc !== "object") return tc;
109
+ const out = {
110
+ id: tc.id,
111
+ type: tc.type ?? "function"
112
+ };
113
+ if (tc.function && typeof tc.function === "object") {
114
+ out.function = {
115
+ name: tc.function.name,
116
+ arguments: REDACTED
117
+ };
118
+ }
119
+ if (tc.name) out.name = tc.name;
120
+ return out;
121
+ });
122
+ }
123
+ function redactContentBlocks(blocks) {
124
+ return blocks.map((block) => {
125
+ if (!block || typeof block !== "object") return block;
126
+ if (block.type === "text") {
127
+ return { type: "text", text: REDACTED };
128
+ }
129
+ if (block.type === "toolCall") {
130
+ return {
131
+ type: "toolCall",
132
+ id: block.id ?? block.toolCallId,
133
+ name: block.name,
134
+ arguments: REDACTED
135
+ };
136
+ }
137
+ if (block.type === "tool_use") {
138
+ return {
139
+ type: "tool_use",
140
+ id: block.id,
141
+ name: block.name,
142
+ input: REDACTED
143
+ };
144
+ }
145
+ if (block.type === "thinking") {
146
+ return { type: "thinking", text: REDACTED };
147
+ }
148
+ return { type: block.type };
149
+ });
150
+ }
151
+ function redactMessagesStructured(messages) {
152
+ if (!Array.isArray(messages)) return messages;
153
+ return messages.map((msg) => {
154
+ if (!msg || typeof msg !== "object") return msg;
155
+ const out = { role: msg.role };
156
+ if (msg.name) out.name = msg.name;
157
+ if (msg.tool_call_id) out.tool_call_id = msg.tool_call_id;
158
+ if (msg.toolCallId) out.toolCallId = msg.toolCallId;
159
+ if (msg.toolName) out.toolName = msg.toolName;
160
+ if (msg.isError != null) out.isError = msg.isError;
161
+ if (msg.stopReason) out.stopReason = msg.stopReason;
162
+ if (msg.model) out.model = msg.model;
163
+ if (msg.provider) out.provider = msg.provider;
164
+ if (Array.isArray(msg.content)) {
165
+ out.content = redactContentBlocks(msg.content);
166
+ } else {
167
+ out.content = REDACTED;
168
+ }
169
+ if (Array.isArray(msg.tool_calls)) {
170
+ out.tool_calls = redactToolCalls(msg.tool_calls);
171
+ }
172
+ return out;
173
+ });
174
+ }
175
+ function redactOutputChoicesStructured(choices) {
176
+ if (!Array.isArray(choices)) return choices;
177
+ return choices.map((choice) => {
178
+ if (!choice || typeof choice !== "object") return choice;
179
+ const out = {
180
+ role: choice.role,
181
+ content: choice.content != null ? REDACTED : null
182
+ };
183
+ if (Array.isArray(choice.tool_calls)) {
184
+ out.tool_calls = redactToolCalls(choice.tool_calls);
185
+ }
186
+ return out;
187
+ });
188
+ }
189
+ function sanitizeMessages(messages, privacyMode) {
190
+ if (privacyMode) return redactMessagesStructured(messages);
191
+ return stripSecrets(messages);
192
+ }
193
+ function sanitizeOutputChoices(choices, privacyMode) {
194
+ if (privacyMode) return redactOutputChoicesStructured(choices);
195
+ return stripSecrets(choices);
196
+ }
197
+
198
+ // extensions/posthog-analytics/lib/event-mappers.ts
199
+ function extractUsageFromMessages(messages) {
200
+ if (!Array.isArray(messages)) return { inputTokens: 0, outputTokens: 0, totalCostUsd: 0 };
201
+ let lastAssistantUsage;
202
+ for (const msg of messages) {
203
+ if (!msg || typeof msg !== "object") continue;
204
+ const m = msg;
205
+ if (m.role !== "assistant") continue;
206
+ const usage = m.usage;
207
+ if (usage) lastAssistantUsage = usage;
208
+ }
209
+ if (!lastAssistantUsage) return { inputTokens: 0, outputTokens: 0, totalCostUsd: 0 };
210
+ const inputTokens = typeof lastAssistantUsage.input === "number" ? lastAssistantUsage.input : 0;
211
+ const outputTokens = typeof lastAssistantUsage.output === "number" ? lastAssistantUsage.output : 0;
212
+ const cost = lastAssistantUsage.cost;
213
+ const totalCostUsd = cost && typeof cost.total === "number" ? cost.total : 0;
214
+ return { inputTokens, outputTokens, totalCostUsd };
215
+ }
216
+ function extractToolNamesFromMessages(messages) {
217
+ if (!Array.isArray(messages)) return [];
218
+ const names = [];
219
+ for (const msg of messages) {
220
+ if (!msg || typeof msg !== "object") continue;
221
+ const m = msg;
222
+ if (Array.isArray(m.tool_calls)) {
223
+ for (const tc of m.tool_calls) {
224
+ const name = tc?.function?.name ?? tc?.name;
225
+ if (typeof name === "string" && name) names.push(name);
226
+ }
227
+ }
228
+ if (Array.isArray(m.content)) {
229
+ for (const block of m.content) {
230
+ if (block?.type === "tool_use" && typeof block?.name === "string") {
231
+ names.push(block.name);
232
+ }
233
+ if (block?.type === "toolCall" && typeof block?.name === "string") {
234
+ names.push(block.name);
235
+ }
236
+ if (block?.type === "tool-call" && typeof block?.toolName === "string") {
237
+ names.push(block.toolName);
238
+ }
239
+ }
240
+ }
241
+ if (m.role === "tool" && typeof m.name === "string") {
242
+ names.push(m.name);
243
+ }
244
+ }
245
+ return [...new Set(names)];
246
+ }
247
+ function normalizeOutputForPostHog(messages) {
248
+ if (!Array.isArray(messages)) return void 0;
249
+ const choices = [];
250
+ for (const msg of messages) {
251
+ if (!msg || typeof msg !== "object") continue;
252
+ const m = msg;
253
+ if (m.role !== "assistant") continue;
254
+ const toolCalls = [];
255
+ let textContent = "";
256
+ if (Array.isArray(m.content)) {
257
+ for (const block of m.content) {
258
+ if (block.type === "text" && typeof block.text === "string") {
259
+ textContent += block.text;
260
+ }
261
+ if (block.type === "toolCall" && typeof block.name === "string") {
262
+ toolCalls.push({
263
+ id: block.id ?? block.toolCallId,
264
+ type: "function",
265
+ function: {
266
+ name: block.name,
267
+ arguments: typeof block.arguments === "string" ? block.arguments : JSON.stringify(block.arguments ?? {})
268
+ }
269
+ });
270
+ }
271
+ }
272
+ } else if (typeof m.content === "string") {
273
+ textContent = m.content;
274
+ }
275
+ if (Array.isArray(m.tool_calls)) {
276
+ for (const tc of m.tool_calls) {
277
+ toolCalls.push(tc);
278
+ }
279
+ }
280
+ const choice = {
281
+ role: "assistant",
282
+ content: textContent || null
283
+ };
284
+ if (toolCalls.length > 0) {
285
+ choice.tool_calls = toolCalls;
286
+ }
287
+ choices.push(choice);
288
+ }
289
+ return choices.length > 0 ? choices : void 0;
290
+ }
291
+ function buildTraceState(messages, privacyMode) {
292
+ if (!Array.isArray(messages)) return { inputState: void 0, outputState: void 0 };
293
+ const chronological = [];
294
+ let lastAssistantEntry;
295
+ for (const msg of messages) {
296
+ if (!msg || typeof msg !== "object") continue;
297
+ const m = msg;
298
+ const extractText = () => {
299
+ if (Array.isArray(m.content)) {
300
+ return m.content.filter((b) => b.type === "text").map((b) => b.text).join("");
301
+ }
302
+ return typeof m.content === "string" ? m.content : null;
303
+ };
304
+ if (m.role === "assistant") {
305
+ const content = privacyMode ? "[REDACTED]" : extractText();
306
+ const entry = { role: "assistant", content };
307
+ const toolNames = extractToolNamesFromSingleMessage(m);
308
+ if (toolNames.length > 0) {
309
+ entry.tool_calls = toolNames.map((name) => ({
310
+ type: "function",
311
+ function: { name }
312
+ }));
313
+ }
314
+ chronological.push(entry);
315
+ lastAssistantEntry = entry;
316
+ } else if (m.role === "user" || m.role === "tool" || m.role === "toolResult" || m.role === "system") {
317
+ const content = privacyMode ? "[REDACTED]" : extractText();
318
+ const entry = { role: m.role, content };
319
+ if (m.name) entry.name = m.name;
320
+ if (m.toolName) entry.toolName = m.toolName;
321
+ chronological.push(entry);
322
+ }
323
+ }
324
+ return {
325
+ inputState: chronological.length > 0 ? chronological : void 0,
326
+ outputState: lastAssistantEntry ? [lastAssistantEntry] : void 0
327
+ };
328
+ }
329
+ function extractToolNamesFromSingleMessage(m) {
330
+ const names = [];
331
+ if (Array.isArray(m.tool_calls)) {
332
+ for (const tc of m.tool_calls) {
333
+ const name = tc?.function?.name ?? tc?.name;
334
+ if (typeof name === "string" && name) names.push(name);
335
+ }
336
+ }
337
+ if (Array.isArray(m.content)) {
338
+ for (const block of m.content) {
339
+ if (block?.type === "toolCall" && typeof block?.name === "string") {
340
+ names.push(block.name);
341
+ }
342
+ }
343
+ }
344
+ return names;
345
+ }
346
+ function emitGeneration(ph, traceCtx, sessionKey, event, privacyMode) {
347
+ try {
348
+ const trace = traceCtx.getTrace(sessionKey);
349
+ if (!trace) return;
350
+ const latency = event.durationMs != null ? event.durationMs / 1e3 : trace.startedAt ? (Date.now() - trace.startedAt) / 1e3 : void 0;
351
+ const spanToolNames = trace.toolSpans.map((s) => s.toolName);
352
+ const messageToolNames = extractToolNamesFromMessages(event.messages);
353
+ const allToolNames = [.../* @__PURE__ */ new Set([...spanToolNames, ...messageToolNames])];
354
+ const properties = {
355
+ $ai_trace_id: trace.traceId,
356
+ $ai_session_id: trace.sessionId,
357
+ $ai_model: trace.model ?? event.model ?? "unknown",
358
+ $ai_provider: trace.provider ?? event.provider,
359
+ $ai_latency: latency,
360
+ $ai_tools: allToolNames.length > 0 ? allToolNames.map((name) => ({ type: "function", function: { name } })) : void 0,
361
+ $ai_stream: event.stream,
362
+ $ai_temperature: event.temperature,
363
+ $ai_is_error: event.success === false || Boolean(event.error)
364
+ };
365
+ if (event.usage) {
366
+ const inputTokens = event.usage.inputTokens ?? event.usage.input_tokens;
367
+ const outputTokens = event.usage.outputTokens ?? event.usage.output_tokens;
368
+ if (inputTokens != null && inputTokens > 0) properties.$ai_input_tokens = inputTokens;
369
+ if (outputTokens != null && outputTokens > 0) properties.$ai_output_tokens = outputTokens;
370
+ const cost = event.cost?.totalUsd ?? event.cost?.total_usd;
371
+ if (cost != null && cost > 0) properties.$ai_total_cost_usd = cost;
372
+ } else if (event.messages) {
373
+ const extracted = extractUsageFromMessages(event.messages);
374
+ if (extracted.inputTokens > 0) properties.$ai_input_tokens = extracted.inputTokens;
375
+ if (extracted.outputTokens > 0) properties.$ai_output_tokens = extracted.outputTokens;
376
+ if (extracted.totalCostUsd > 0) properties.$ai_total_cost_usd = extracted.totalCostUsd;
377
+ }
378
+ properties.$ai_input = sanitizeMessages(event.messages ?? trace.input, privacyMode);
379
+ const outputChoices = normalizeOutputForPostHog(event.messages);
380
+ properties.$ai_output_choices = sanitizeOutputChoices(
381
+ outputChoices ?? event.output ?? event.messages,
382
+ privacyMode
383
+ );
384
+ if (event.error) {
385
+ properties.$ai_error = typeof event.error === "string" ? event.error : event.error?.message ?? String(event.error);
386
+ }
387
+ ph.capture({
388
+ distinctId: readOrCreateAnonymousId(),
389
+ event: "$ai_generation",
390
+ properties
391
+ });
392
+ } catch {
393
+ }
394
+ }
395
+ function emitToolSpan(ph, traceCtx, sessionKey, event, privacyMode) {
396
+ try {
397
+ const trace = traceCtx.getTrace(sessionKey);
398
+ const span = traceCtx.getLastToolSpan(sessionKey);
399
+ if (!trace || !span) return;
400
+ const latency = span.startedAt && span.endedAt ? (span.endedAt - span.startedAt) / 1e3 : event.durationMs != null ? event.durationMs / 1e3 : void 0;
401
+ const properties = {
402
+ $ai_trace_id: trace.traceId,
403
+ $ai_session_id: trace.sessionId,
404
+ $ai_span_id: span.spanId,
405
+ $ai_span_name: span.toolName,
406
+ $ai_parent_id: trace.traceId,
407
+ $ai_latency: latency,
408
+ $ai_is_error: span.isError ?? Boolean(event.error)
409
+ };
410
+ if (!privacyMode) {
411
+ properties.tool_params = stripSecrets(span.params);
412
+ properties.tool_result = stripSecrets(span.result);
413
+ }
414
+ ph.capture({
415
+ distinctId: readOrCreateAnonymousId(),
416
+ event: "$ai_span",
417
+ properties
418
+ });
419
+ } catch {
420
+ }
421
+ }
422
+ function emitTrace(ph, traceCtx, sessionKey, event, privacyMode) {
423
+ try {
424
+ const trace = traceCtx.getTrace(sessionKey);
425
+ if (!trace) return;
426
+ const latency = trace.startedAt ? (Date.now() - trace.startedAt) / 1e3 : void 0;
427
+ const { inputState, outputState } = buildTraceState(event?.messages, privacyMode ?? true);
428
+ ph.capture({
429
+ distinctId: readOrCreateAnonymousId(),
430
+ event: "$ai_trace",
431
+ properties: {
432
+ $ai_trace_id: trace.traceId,
433
+ $ai_session_id: trace.sessionId,
434
+ $ai_latency: latency,
435
+ $ai_span_name: "agent_run",
436
+ $ai_input_state: inputState,
437
+ $ai_output_state: outputState,
438
+ tool_count: trace.toolSpans.length
439
+ }
440
+ });
441
+ } catch {
442
+ }
443
+ }
444
+ function emitCustomEvent(ph, eventName, properties) {
445
+ try {
446
+ ph.capture({
447
+ distinctId: readOrCreateAnonymousId(),
448
+ event: eventName,
449
+ properties: properties ?? {}
450
+ });
451
+ } catch {
452
+ }
453
+ }
454
+
455
+ // extensions/posthog-analytics/lib/posthog-client.ts
456
+ var DEFAULT_HOST = "https://us.i.posthog.com";
457
+ var FLUSH_INTERVAL_MS = 15e3;
458
+ var FLUSH_AT = 10;
459
+ var PostHogClient = class {
460
+ apiKey;
461
+ host;
462
+ globalProperties;
463
+ queue = [];
464
+ timer = null;
465
+ constructor(apiKey, host, globalProperties) {
466
+ this.apiKey = apiKey;
467
+ this.host = (host || DEFAULT_HOST).replace(/\/$/, "");
468
+ this.globalProperties = globalProperties ?? {};
469
+ this.timer = setInterval(() => this.flush(), FLUSH_INTERVAL_MS);
470
+ if (this.timer.unref) this.timer.unref();
471
+ }
472
+ capture(event) {
473
+ this.queue.push({
474
+ event: event.event,
475
+ distinct_id: event.distinctId,
476
+ properties: {
477
+ ...this.globalProperties,
478
+ ...event.properties,
479
+ $lib: "denchclaw-posthog-plugin"
480
+ },
481
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
482
+ });
483
+ if (this.queue.length >= FLUSH_AT) {
484
+ this.flush();
485
+ }
486
+ }
487
+ flush() {
488
+ if (this.queue.length === 0) return;
489
+ const batch = this.queue.splice(0);
490
+ const body = JSON.stringify({
491
+ api_key: this.apiKey,
492
+ batch
493
+ });
494
+ fetch(`${this.host}/batch/`, {
495
+ method: "POST",
496
+ headers: { "Content-Type": "application/json" },
497
+ body
498
+ }).catch(() => {
499
+ });
500
+ }
501
+ identify(distinctId, properties) {
502
+ this.queue.push({
503
+ event: "$identify",
504
+ distinct_id: distinctId,
505
+ properties: {
506
+ ...this.globalProperties,
507
+ $set: properties,
508
+ $lib: "denchclaw-posthog-plugin"
509
+ },
510
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
511
+ });
512
+ if (this.queue.length >= FLUSH_AT) {
513
+ this.flush();
514
+ }
515
+ }
516
+ async shutdown() {
517
+ if (this.timer) {
518
+ clearInterval(this.timer);
519
+ this.timer = null;
520
+ }
521
+ this.flush();
522
+ }
523
+ };
524
+ function createPostHogClient(apiKey, host, globalProperties) {
525
+ return new PostHogClient(apiKey, host, globalProperties);
526
+ }
527
+ async function shutdownPostHogClient(client) {
528
+ try {
529
+ await client.shutdown();
530
+ } catch {
531
+ }
532
+ }
533
+
534
+ // extensions/posthog-analytics/lib/trace-context.ts
535
+ import { randomUUID as randomUUID2 } from "node:crypto";
536
+ function resolveSessionKey(ctx) {
537
+ return ctx.sessionId ?? ctx.sessionKey ?? ctx.runId ?? "unknown";
538
+ }
539
+ var TraceContextManager = class {
540
+ traces = /* @__PURE__ */ new Map();
541
+ startTrace(sessionKey, runId) {
542
+ this.traces.set(sessionKey, {
543
+ traceId: sessionKey,
544
+ sessionId: sessionKey,
545
+ runId,
546
+ startedAt: Date.now(),
547
+ toolSpans: []
548
+ });
549
+ }
550
+ setModel(sessionKey, model) {
551
+ const t = this.traces.get(sessionKey);
552
+ if (!t) return;
553
+ t.model = model;
554
+ const slashIdx = model.indexOf("/");
555
+ if (slashIdx > 0) {
556
+ t.provider = model.slice(0, slashIdx);
557
+ }
558
+ }
559
+ setInput(sessionKey, messages, privacyMode) {
560
+ const t = this.traces.get(sessionKey);
561
+ if (!t) return;
562
+ t.input = privacyMode ? redactMessages(messages) : messages;
563
+ }
564
+ startToolSpan(sessionKey, toolName, params) {
565
+ const t = this.traces.get(sessionKey);
566
+ if (!t) return;
567
+ t.toolSpans.push({
568
+ toolName,
569
+ spanId: randomUUID2(),
570
+ startedAt: Date.now(),
571
+ params
572
+ });
573
+ }
574
+ endToolSpan(sessionKey, toolName, result) {
575
+ const t = this.traces.get(sessionKey);
576
+ if (!t) return;
577
+ for (let i = t.toolSpans.length - 1; i >= 0; i--) {
578
+ const span = t.toolSpans[i];
579
+ if (span.toolName === toolName && !span.endedAt) {
580
+ span.endedAt = Date.now();
581
+ span.result = result;
582
+ span.isError = result != null && typeof result === "object" && "error" in result;
583
+ break;
584
+ }
585
+ }
586
+ }
587
+ getTrace(sessionKey) {
588
+ return this.traces.get(sessionKey);
589
+ }
590
+ getModel(sessionKey) {
591
+ return this.traces.get(sessionKey)?.model;
592
+ }
593
+ getLastToolSpan(sessionKey) {
594
+ const t = this.traces.get(sessionKey);
595
+ if (!t || t.toolSpans.length === 0) return void 0;
596
+ return t.toolSpans[t.toolSpans.length - 1];
597
+ }
598
+ endTrace(sessionKey) {
599
+ const t = this.traces.get(sessionKey);
600
+ if (t) {
601
+ t.endedAt = Date.now();
602
+ }
603
+ setTimeout(() => this.traces.delete(sessionKey), 5e3);
604
+ }
605
+ };
606
+
607
+ // extensions/posthog-analytics/index.ts
608
+ var id = "posthog-analytics";
609
+ var DEBUG = process.env.DENCHCLAW_POSTHOG_DEBUG === "1";
610
+ function debugLog(label, data) {
611
+ if (!DEBUG) return;
612
+ try {
613
+ process.stderr.write(`[posthog-analytics] ${label}: ${JSON.stringify(data, null, 2)}
614
+ `);
615
+ } catch {
616
+ }
617
+ }
618
+ function register(api) {
619
+ const config = api.config?.plugins?.entries?.["posthog-analytics"]?.config;
620
+ const apiKey = config?.apiKey || POSTHOG_KEY;
621
+ if (!apiKey) {
622
+ return;
623
+ }
624
+ if (config?.enabled === false) {
625
+ return;
626
+ }
627
+ const versionProps = {};
628
+ const dcv = DENCHCLAW_VERSION || process.env.npm_package_version;
629
+ if (dcv) versionProps.denchclaw_version = dcv;
630
+ const ocv = OPENCLAW_VERSION || process.env.OPENCLAW_VERSION || process.env.OPENCLAW_SERVICE_VERSION;
631
+ if (ocv) versionProps.openclaw_version = ocv;
632
+ const ph = createPostHogClient(apiKey, config?.host, versionProps);
633
+ const traceCtx = new TraceContextManager();
634
+ const person = readPersonInfo(api.config);
635
+ if (person) {
636
+ const distinctId = readOrCreateAnonymousId(api.config);
637
+ const props = {};
638
+ if (person.name) props.$name = person.name;
639
+ if (person.email) props.$email = person.email;
640
+ if (person.avatar) props.$avatar = person.avatar;
641
+ if (person.denchOrgId) props.dench_org_id = person.denchOrgId;
642
+ ph.identify(distinctId, props);
643
+ }
644
+ const getPrivacyMode = () => readPrivacyMode(api.config);
645
+ const getConfigModel = () => api.config?.agents?.defaults?.model?.primary;
646
+ const ensureTrace = (ctx) => {
647
+ const sk = resolveSessionKey(ctx);
648
+ if (traceCtx.getTrace(sk)) return;
649
+ traceCtx.startTrace(sk, ctx.runId ?? sk);
650
+ const model = getConfigModel();
651
+ if (model) traceCtx.setModel(sk, model);
652
+ };
653
+ api.on(
654
+ "before_model_resolve",
655
+ (event, ctx) => {
656
+ debugLog("before_model_resolve event", event);
657
+ debugLog("before_model_resolve ctx", {
658
+ runId: ctx.runId,
659
+ sessionId: ctx.sessionId,
660
+ sessionKey: ctx.sessionKey
661
+ });
662
+ const sk = resolveSessionKey(ctx);
663
+ traceCtx.startTrace(sk, ctx.runId ?? sk);
664
+ const model = event.modelOverride || getConfigModel();
665
+ if (model) {
666
+ traceCtx.setModel(sk, model);
667
+ }
668
+ },
669
+ { priority: -10 }
670
+ );
671
+ api.on(
672
+ "before_prompt_build",
673
+ (_event, ctx) => {
674
+ debugLog("before_prompt_build ctx", {
675
+ runId: ctx.runId,
676
+ sessionId: ctx.sessionId,
677
+ hasMessages: Boolean(ctx.messages)
678
+ });
679
+ const sk = resolveSessionKey(ctx);
680
+ ensureTrace(ctx);
681
+ if (ctx.messages) {
682
+ traceCtx.setInput(sk, ctx.messages, getPrivacyMode());
683
+ }
684
+ },
685
+ { priority: -10 }
686
+ );
687
+ api.on(
688
+ "before_tool_call",
689
+ (event, ctx) => {
690
+ debugLog("before_tool_call", {
691
+ toolName: event.toolName,
692
+ runId: ctx.runId,
693
+ sessionId: ctx.sessionId
694
+ });
695
+ const sk = resolveSessionKey(ctx);
696
+ ensureTrace(ctx);
697
+ traceCtx.startToolSpan(sk, event.toolName, event.params);
698
+ },
699
+ { priority: -10 }
700
+ );
701
+ api.on(
702
+ "after_tool_call",
703
+ (event, ctx) => {
704
+ debugLog("after_tool_call", {
705
+ toolName: event.toolName,
706
+ runId: ctx.runId,
707
+ sessionId: ctx.sessionId,
708
+ hasError: Boolean(event.error),
709
+ durationMs: event.durationMs
710
+ });
711
+ const sk = resolveSessionKey(ctx);
712
+ ensureTrace(ctx);
713
+ traceCtx.endToolSpan(sk, event.toolName, event.result);
714
+ emitToolSpan(ph, traceCtx, sk, event, getPrivacyMode());
715
+ },
716
+ { priority: -10 }
717
+ );
718
+ api.on(
719
+ "agent_end",
720
+ (event, ctx) => {
721
+ debugLog("agent_end event", {
722
+ success: event.success,
723
+ error: event.error,
724
+ durationMs: event.durationMs,
725
+ messageCount: event.messages?.length
726
+ });
727
+ debugLog("agent_end ctx", { runId: ctx.runId, sessionId: ctx.sessionId });
728
+ const sk = resolveSessionKey(ctx);
729
+ ensureTrace(ctx);
730
+ const trace = traceCtx.getTrace(sk);
731
+ if (trace && !trace.model) {
732
+ const model = getConfigModel();
733
+ if (model) traceCtx.setModel(sk, model);
734
+ }
735
+ emitGeneration(ph, traceCtx, sk, event, getPrivacyMode());
736
+ emitTrace(ph, traceCtx, sk, event, getPrivacyMode());
737
+ emitCustomEvent(ph, "dench_turn_completed", {
738
+ session_id: sk,
739
+ run_id: ctx.runId,
740
+ model: traceCtx.getModel(sk)
741
+ });
742
+ traceCtx.endTrace(sk);
743
+ },
744
+ { priority: -10 }
745
+ );
746
+ api.on(
747
+ "message_received",
748
+ (event, ctx) => {
749
+ emitCustomEvent(ph, "dench_message_received", {
750
+ channel: ctx.channel ?? ctx.channelId,
751
+ session_id: ctx.sessionId,
752
+ has_attachments: Boolean(event.attachments?.length)
753
+ });
754
+ },
755
+ { priority: -10 }
756
+ );
757
+ api.on(
758
+ "session_start",
759
+ (_event, ctx) => {
760
+ emitCustomEvent(ph, "dench_session_start", {
761
+ session_id: ctx.sessionId,
762
+ channel: ctx.channel ?? ctx.channelId
763
+ });
764
+ },
765
+ { priority: -10 }
766
+ );
767
+ api.on(
768
+ "session_end",
769
+ (_event, ctx) => {
770
+ emitCustomEvent(ph, "dench_session_end", {
771
+ session_id: ctx.sessionId,
772
+ channel: ctx.channel ?? ctx.channelId
773
+ });
774
+ },
775
+ { priority: -10 }
776
+ );
777
+ api.registerService({
778
+ id: "posthog-analytics",
779
+ start: () => api.logger.info("[posthog-analytics] service started"),
780
+ stop: () => shutdownPostHogClient(ph)
781
+ });
782
+ }
783
+ export {
784
+ register as default,
785
+ id
786
+ };