denchclaw 2.4.6 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/README.md +31 -0
  2. package/apps/web/.next/standalone/apps/web/.next/BUILD_ID +1 -1
  3. package/apps/web/.next/standalone/apps/web/.next/app-build-manifest.json +331 -202
  4. package/apps/web/.next/standalone/apps/web/.next/app-path-routes-manifest.json +42 -24
  5. package/apps/web/.next/standalone/apps/web/.next/build-manifest.json +5 -5
  6. package/apps/web/.next/standalone/apps/web/.next/cache/config.json +3 -3
  7. package/apps/web/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
  8. package/apps/web/.next/standalone/apps/web/.next/react-loadable-manifest.json +6 -6
  9. package/apps/web/.next/standalone/apps/web/.next/required-server-files.json +1 -1
  10. package/apps/web/.next/standalone/apps/web/.next/routes-manifest.json +25 -1
  11. package/apps/web/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/cron/route_client-reference-manifest.js +1 -1
  13. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/proxy/route_client-reference-manifest.js +1 -1
  14. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/route_client-reference-manifest.js +1 -1
  15. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/serve/[...path]/route_client-reference-manifest.js +1 -1
  16. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/store/route_client-reference-manifest.js +1 -1
  17. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/webhooks/[...path]/route_client-reference-manifest.js +1 -1
  18. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/active/route_client-reference-manifest.js +1 -1
  19. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/route.js +2 -2
  20. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
  21. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/runs/route.js +1 -1
  22. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/runs/route_client-reference-manifest.js +1 -1
  23. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route.js +1 -1
  24. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route_client-reference-manifest.js +1 -1
  25. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stream/route_client-reference-manifest.js +1 -1
  26. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/subagents/route.js +1 -1
  27. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/subagents/route_client-reference-manifest.js +1 -1
  28. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route.js +42 -0
  29. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route.js.nft.json +1 -0
  30. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/callback/route_client-reference-manifest.js +1 -0
  31. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connect/route.js +1 -0
  32. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connect/route.js.nft.json +1 -0
  33. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connect/route_client-reference-manifest.js +1 -0
  34. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connections/route.js +1 -0
  35. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connections/route.js.nft.json +1 -0
  36. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/connections/route_client-reference-manifest.js +1 -0
  37. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route.js +1 -0
  38. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route.js.nft.json +1 -0
  39. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/disconnect/route_client-reference-manifest.js +1 -0
  40. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route.js +1 -0
  41. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route.js.nft.json +1 -0
  42. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/status/route_client-reference-manifest.js +1 -0
  43. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/tool-index/route.js +1 -0
  44. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/tool-index/route.js.nft.json +1 -0
  45. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/tool-index/route_client-reference-manifest.js +1 -0
  46. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/toolkits/route.js +1 -0
  47. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/toolkits/route.js.nft.json +1 -0
  48. package/apps/web/.next/standalone/apps/web/.next/server/app/api/composio/toolkits/route_client-reference-manifest.js +1 -0
  49. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/[jobId]/runs/route_client-reference-manifest.js +1 -1
  50. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/route_client-reference-manifest.js +1 -1
  51. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/[sessionId]/route_client-reference-manifest.js +1 -1
  52. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/search-transcript/route_client-reference-manifest.js +1 -1
  53. package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route.js +1 -1
  54. package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route_client-reference-manifest.js +1 -1
  55. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/channels/route_client-reference-manifest.js +1 -1
  56. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/chat/route_client-reference-manifest.js +1 -1
  57. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/chat/stream/route_client-reference-manifest.js +1 -1
  58. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/sessions/[id]/route_client-reference-manifest.js +1 -1
  59. package/apps/web/.next/standalone/apps/web/.next/server/app/api/gateway/sessions/route_client-reference-manifest.js +1 -1
  60. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route.js +1 -0
  61. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route.js.nft.json +1 -0
  62. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/[id]/toggle/route_client-reference-manifest.js +1 -0
  63. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route.js +1 -0
  64. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route.js.nft.json +1 -0
  65. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/repair/route_client-reference-manifest.js +1 -0
  66. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route.js +1 -0
  67. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route.js.nft.json +1 -0
  68. package/apps/web/.next/standalone/apps/web/.next/server/app/api/integrations/route_client-reference-manifest.js +1 -0
  69. package/apps/web/.next/standalone/apps/web/.next/server/app/api/memories/route_client-reference-manifest.js +1 -1
  70. package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/route_client-reference-manifest.js +1 -1
  71. package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/switch/route_client-reference-manifest.js +1 -1
  72. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/[sessionId]/route_client-reference-manifest.js +1 -1
  73. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/route.js +1 -1
  74. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  75. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route.js +1 -0
  76. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route.js.nft.json +1 -0
  77. package/apps/web/.next/standalone/apps/web/.next/server/app/api/settings/cloud/route_client-reference-manifest.js +1 -0
  78. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/content/route.js +1 -0
  79. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/content/route.js.nft.json +1 -0
  80. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/content/route_client-reference-manifest.js +1 -0
  81. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/route.js +1 -0
  82. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/route.js.nft.json +1 -0
  83. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/[slug]/route_client-reference-manifest.js +1 -0
  84. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/browse/route.js +1 -0
  85. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/browse/route.js.nft.json +1 -0
  86. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/browse/route_client-reference-manifest.js +1 -0
  87. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/install/route.js +1 -0
  88. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/install/route.js.nft.json +1 -0
  89. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -0
  90. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/route.js +2 -1
  91. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  92. package/apps/web/.next/standalone/apps/web/.next/server/app/api/terminal/port/route_client-reference-manifest.js +1 -1
  93. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route.js +1 -0
  94. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route.js.nft.json +1 -0
  95. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/speech/route_client-reference-manifest.js +1 -0
  96. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route.js +1 -0
  97. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route.js.nft.json +1 -0
  98. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/transcribe/route_client-reference-manifest.js +1 -0
  99. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route.js +1 -0
  100. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route.js.nft.json +1 -0
  101. package/apps/web/.next/standalone/apps/web/.next/server/app/api/voice/voices/route_client-reference-manifest.js +1 -0
  102. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/messages/route_client-reference-manifest.js +1 -1
  103. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/route.js +1 -1
  104. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/route_client-reference-manifest.js +1 -1
  105. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route.js +1 -1
  106. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route_client-reference-manifest.js +1 -1
  107. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/assets/[...path]/route_client-reference-manifest.js +1 -1
  108. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse/route_client-reference-manifest.js +1 -1
  109. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse-file/route_client-reference-manifest.js +1 -1
  110. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/context/route_client-reference-manifest.js +1 -1
  111. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/copy/route_client-reference-manifest.js +1 -1
  112. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/introspect/route_client-reference-manifest.js +1 -1
  113. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/query/route_client-reference-manifest.js +1 -1
  114. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route.js +1 -1
  115. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route_client-reference-manifest.js +1 -1
  116. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/execute/route_client-reference-manifest.js +1 -1
  117. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/file/route_client-reference-manifest.js +1 -1
  118. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route.js +2 -2
  119. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route_client-reference-manifest.js +1 -1
  120. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/link-preview/route_client-reference-manifest.js +1 -1
  121. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/list/route_client-reference-manifest.js +1 -1
  122. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/mkdir/route_client-reference-manifest.js +1 -1
  123. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/move/route_client-reference-manifest.js +1 -1
  124. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/actions/route_client-reference-manifest.js +1 -1
  125. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/actions/runs/route_client-reference-manifest.js +1 -1
  126. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/display-field/route_client-reference-manifest.js +1 -1
  127. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/content/route_client-reference-manifest.js +1 -1
  128. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/route_client-reference-manifest.js +1 -1
  129. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/bulk-delete/route_client-reference-manifest.js +1 -1
  130. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/options/route_client-reference-manifest.js +1 -1
  131. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route.js +1 -1
  132. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route_client-reference-manifest.js +1 -1
  133. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route_client-reference-manifest.js +1 -1
  134. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/[fieldId]/route_client-reference-manifest.js +1 -1
  135. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/reorder/route_client-reference-manifest.js +1 -1
  136. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/route_client-reference-manifest.js +1 -1
  137. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/route_client-reference-manifest.js +1 -1
  138. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/views/route_client-reference-manifest.js +1 -1
  139. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/open-file/route_client-reference-manifest.js +1 -1
  140. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/path-info/route_client-reference-manifest.js +1 -1
  141. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/query/route_client-reference-manifest.js +1 -1
  142. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/raw-file/route_client-reference-manifest.js +1 -1
  143. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/rename/route_client-reference-manifest.js +1 -1
  144. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route.js +1 -1
  145. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route_client-reference-manifest.js +1 -1
  146. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/search-index/route_client-reference-manifest.js +1 -1
  147. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/suggest-files/route_client-reference-manifest.js +1 -1
  148. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route.js +1 -1
  149. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route_client-reference-manifest.js +1 -1
  150. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/thumbnail/route_client-reference-manifest.js +1 -1
  151. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/tree/route.js +1 -1
  152. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/tree/route_client-reference-manifest.js +1 -1
  153. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route.js +1 -1
  154. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route_client-reference-manifest.js +1 -1
  155. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/virtual-file/route_client-reference-manifest.js +1 -1
  156. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/watch/route_client-reference-manifest.js +1 -1
  157. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/write-binary/route_client-reference-manifest.js +1 -1
  158. package/apps/web/.next/standalone/apps/web/.next/server/app/page.js +21 -21
  159. package/apps/web/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -1
  160. package/apps/web/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  161. package/apps/web/.next/standalone/apps/web/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
  162. package/apps/web/.next/standalone/apps/web/.next/server/app-paths-manifest.json +42 -24
  163. package/apps/web/.next/standalone/apps/web/.next/server/chunks/6426.js +2 -2
  164. package/apps/web/.next/standalone/apps/web/.next/server/chunks/6787.js +1 -1
  165. package/apps/web/.next/standalone/apps/web/.next/server/chunks/687.js +7 -7
  166. package/apps/web/.next/standalone/apps/web/.next/server/chunks/737.js +3 -3
  167. package/apps/web/.next/standalone/apps/web/.next/server/chunks/7488.js +1 -0
  168. package/apps/web/.next/standalone/apps/web/.next/server/chunks/8306.js +1 -0
  169. package/apps/web/.next/standalone/apps/web/.next/server/chunks/8650.js +1 -0
  170. package/apps/web/.next/standalone/apps/web/.next/server/chunks/8693.js +481 -0
  171. package/apps/web/.next/standalone/apps/web/.next/server/functions-config-manifest.json +19 -5
  172. package/apps/web/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +1 -1
  173. package/apps/web/.next/standalone/apps/web/.next/server/middleware-react-loadable-manifest.js +1 -1
  174. package/apps/web/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
  175. package/apps/web/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
  176. package/apps/web/.next/{static/chunks/eca025f9.538b3f5d85eeef79.js → standalone/apps/web/.next/static/chunks/0c958985.3ccb9c3aea7cd083.js} +2 -2
  177. package/apps/web/.next/standalone/apps/web/.next/static/chunks/3999.548dd8ec57152081.js +1 -0
  178. package/apps/web/.next/standalone/apps/web/.next/static/chunks/{2489.b5e1ce196331926c.js → 4870.507a55774d37d072.js} +1 -1
  179. package/apps/web/.next/standalone/apps/web/.next/static/chunks/{7812.c1435a724050dfec.js → 5431.a2353a2aa8c55a67.js} +1 -1
  180. package/apps/web/.next/standalone/apps/web/.next/static/chunks/7f67b0df-54679694c67e2b76.js +1 -0
  181. package/apps/web/.next/standalone/apps/web/.next/static/chunks/80f1cbb7-c9635d81d9fe6819.js +1 -0
  182. package/apps/web/.next/standalone/apps/web/.next/static/chunks/8532165e-abce74bbb270ef26.js +1 -0
  183. package/apps/web/.next/standalone/apps/web/.next/static/chunks/9372.e71f5b96da3f9dfd.js +1 -0
  184. package/apps/web/.next/standalone/apps/web/.next/static/chunks/9702-d646bcd7cb8fe6bf.js +135 -0
  185. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/cron/route-982235d988e17f31.js +1 -0
  186. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/proxy/route-982235d988e17f31.js +1 -0
  187. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/route-982235d988e17f31.js +1 -0
  188. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-982235d988e17f31.js +1 -0
  189. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/store/route-982235d988e17f31.js +1 -0
  190. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-982235d988e17f31.js +1 -0
  191. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/active/route-982235d988e17f31.js +1 -0
  192. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/route-982235d988e17f31.js +1 -0
  193. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/runs/route-982235d988e17f31.js +1 -0
  194. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stop/route-982235d988e17f31.js +1 -0
  195. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stream/route-982235d988e17f31.js +1 -0
  196. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/subagents/route-982235d988e17f31.js +1 -0
  197. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/callback/route-982235d988e17f31.js +1 -0
  198. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/connect/route-982235d988e17f31.js +1 -0
  199. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/connections/route-982235d988e17f31.js +1 -0
  200. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/disconnect/route-982235d988e17f31.js +1 -0
  201. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/status/route-982235d988e17f31.js +1 -0
  202. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/tool-index/route-982235d988e17f31.js +1 -0
  203. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/composio/toolkits/route-982235d988e17f31.js +1 -0
  204. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-982235d988e17f31.js +1 -0
  205. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/route-982235d988e17f31.js +1 -0
  206. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-982235d988e17f31.js +1 -0
  207. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-982235d988e17f31.js +1 -0
  208. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/feedback/route-982235d988e17f31.js +1 -0
  209. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/channels/route-982235d988e17f31.js +1 -0
  210. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/route-982235d988e17f31.js +1 -0
  211. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-982235d988e17f31.js +1 -0
  212. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-982235d988e17f31.js +1 -0
  213. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/route-982235d988e17f31.js +1 -0
  214. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/[id]/toggle/route-982235d988e17f31.js +1 -0
  215. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/repair/route-982235d988e17f31.js +1 -0
  216. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/route-982235d988e17f31.js +1 -0
  217. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/memories/route-982235d988e17f31.js +1 -0
  218. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/route-982235d988e17f31.js +1 -0
  219. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/switch/route-982235d988e17f31.js +1 -0
  220. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-982235d988e17f31.js +1 -0
  221. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/route-982235d988e17f31.js +1 -0
  222. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/settings/cloud/route-982235d988e17f31.js +1 -0
  223. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/[slug]/content/route-982235d988e17f31.js +1 -0
  224. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/[slug]/route-982235d988e17f31.js +1 -0
  225. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/browse/route-982235d988e17f31.js +1 -0
  226. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/install/route-982235d988e17f31.js +1 -0
  227. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/route-982235d988e17f31.js +1 -0
  228. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/terminal/port/route-982235d988e17f31.js +1 -0
  229. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/voice/speech/route-982235d988e17f31.js +1 -0
  230. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/voice/transcribe/route-982235d988e17f31.js +1 -0
  231. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/voice/voices/route-982235d988e17f31.js +1 -0
  232. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-982235d988e17f31.js +1 -0
  233. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-982235d988e17f31.js +1 -0
  234. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/route-982235d988e17f31.js +1 -0
  235. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-982235d988e17f31.js +1 -0
  236. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse/route-982235d988e17f31.js +1 -0
  237. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-982235d988e17f31.js +1 -0
  238. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/context/route-982235d988e17f31.js +1 -0
  239. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/copy/route-982235d988e17f31.js +1 -0
  240. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-982235d988e17f31.js +1 -0
  241. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/query/route-982235d988e17f31.js +1 -0
  242. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/delete/route-982235d988e17f31.js +1 -0
  243. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/execute/route-982235d988e17f31.js +1 -0
  244. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/file/route-982235d988e17f31.js +1 -0
  245. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/init/route-982235d988e17f31.js +1 -0
  246. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-982235d988e17f31.js +1 -0
  247. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/list/route-982235d988e17f31.js +1 -0
  248. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-982235d988e17f31.js +1 -0
  249. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/move/route-982235d988e17f31.js +1 -0
  250. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-982235d988e17f31.js +1 -0
  251. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-982235d988e17f31.js +1 -0
  252. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-982235d988e17f31.js +1 -0
  253. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-982235d988e17f31.js +1 -0
  254. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-982235d988e17f31.js +1 -0
  255. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-982235d988e17f31.js +1 -0
  256. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-982235d988e17f31.js +1 -0
  257. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-982235d988e17f31.js +1 -0
  258. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-982235d988e17f31.js +1 -0
  259. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-982235d988e17f31.js +1 -0
  260. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-982235d988e17f31.js +1 -0
  261. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-982235d988e17f31.js +1 -0
  262. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-982235d988e17f31.js +1 -0
  263. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-982235d988e17f31.js +1 -0
  264. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/open-file/route-982235d988e17f31.js +1 -0
  265. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/path-info/route-982235d988e17f31.js +1 -0
  266. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/query/route-982235d988e17f31.js +1 -0
  267. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-982235d988e17f31.js +1 -0
  268. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/rename/route-982235d988e17f31.js +1 -0
  269. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-982235d988e17f31.js +1 -0
  270. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/search-index/route-982235d988e17f31.js +1 -0
  271. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-982235d988e17f31.js +1 -0
  272. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/switch/route-982235d988e17f31.js +1 -0
  273. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-982235d988e17f31.js +1 -0
  274. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/tree/route-982235d988e17f31.js +1 -0
  275. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/upload/route-982235d988e17f31.js +1 -0
  276. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-982235d988e17f31.js +1 -0
  277. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/watch/route-982235d988e17f31.js +1 -0
  278. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-982235d988e17f31.js +1 -0
  279. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/{layout-3b33b798ff1504e9.js → layout-33207ce031676561.js} +1 -1
  280. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/page-27c6d6093051ac5c.js +1 -0
  281. package/apps/web/.next/standalone/apps/web/.next/static/chunks/webpack-d4501ef5cbbcf069.js +1 -0
  282. package/apps/web/.next/standalone/apps/web/.next/static/css/4f71a2dee93c9f97.css +1 -0
  283. package/apps/web/.next/standalone/apps/web/.next/static/jcrHaOr6nJr3WKHp3ijBE/_buildManifest.js +1 -0
  284. package/apps/web/.next/standalone/apps/web/app/api/skills/route.test.ts +672 -0
  285. package/apps/web/.next/standalone/apps/web/package.json +2 -0
  286. package/apps/web/.next/standalone/apps/web/public/integrations/exa-logomark.svg +4 -0
  287. package/apps/web/.next/standalone/apps/web/public/logo/composio.webp +0 -0
  288. package/apps/web/.next/standalone/apps/web/public/models/deepseek.ico +0 -0
  289. package/apps/web/.next/standalone/apps/web/public/models/kimi.png +0 -0
  290. package/apps/web/.next/standalone/apps/web/public/models/kimi.svg +89 -0
  291. package/apps/web/.next/standalone/apps/web/public/models/minimax.png +0 -0
  292. package/apps/web/.next/standalone/apps/web/server.js +1 -1
  293. package/apps/web/.next/standalone/extensions/apollo-enrichment/index.ts +268 -0
  294. package/apps/web/.next/standalone/extensions/apollo-enrichment/openclaw.plugin.json +16 -0
  295. package/apps/web/.next/standalone/extensions/apollo-enrichment/package.json +8 -0
  296. package/apps/web/.next/standalone/extensions/dench-ai-gateway/composio-bridge.ts +474 -0
  297. package/apps/web/.next/standalone/extensions/dench-ai-gateway/config-patch.ts +83 -0
  298. package/apps/web/.next/standalone/extensions/dench-ai-gateway/index.test.ts +281 -0
  299. package/apps/web/.next/standalone/extensions/dench-ai-gateway/index.ts +325 -0
  300. package/apps/web/.next/standalone/extensions/dench-ai-gateway/models.ts +325 -0
  301. package/apps/web/.next/standalone/extensions/dench-ai-gateway/openclaw.plugin.json +27 -0
  302. package/apps/web/.next/standalone/extensions/dench-ai-gateway/package.json +8 -0
  303. package/apps/web/.next/standalone/extensions/dench-identity/composio-cheat-sheet.test.ts +146 -0
  304. package/apps/web/.next/standalone/extensions/dench-identity/composio-cheat-sheet.ts +197 -0
  305. package/apps/web/.next/standalone/extensions/dench-identity/index.test.ts +361 -0
  306. package/apps/web/.next/standalone/extensions/dench-identity/index.ts +920 -0
  307. package/apps/web/.next/standalone/extensions/dench-identity/openclaw.plugin.json +17 -0
  308. package/apps/web/.next/standalone/extensions/dench-identity/package.json +8 -0
  309. package/apps/web/.next/standalone/extensions/exa-search/index.ts +363 -0
  310. package/apps/web/.next/standalone/extensions/exa-search/openclaw.plugin.json +16 -0
  311. package/apps/web/.next/standalone/extensions/exa-search/package.json +8 -0
  312. package/apps/web/.next/standalone/extensions/posthog-analytics/index.ts +190 -0
  313. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/build-env.js +3 -0
  314. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/build-env.ts +3 -0
  315. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/event-mappers.ts +403 -0
  316. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/posthog-client.ts +105 -0
  317. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/privacy.ts +294 -0
  318. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/trace-context.ts +103 -0
  319. package/apps/web/.next/standalone/extensions/posthog-analytics/lib/types.ts +28 -0
  320. package/apps/web/.next/standalone/extensions/posthog-analytics/openclaw.plugin.json +22 -0
  321. package/apps/web/.next/standalone/extensions/posthog-analytics/package.json +8 -0
  322. package/apps/web/.next/standalone/extensions/vitest.config.ts +13 -0
  323. package/apps/web/.next/standalone/package.json +2 -2
  324. package/apps/web/.next/{standalone/apps/web/.next/static/chunks/eca025f9.538b3f5d85eeef79.js → static/chunks/0c958985.3ccb9c3aea7cd083.js} +2 -2
  325. package/apps/web/.next/static/chunks/3999.548dd8ec57152081.js +1 -0
  326. package/apps/web/.next/static/chunks/{2489.b5e1ce196331926c.js → 4870.507a55774d37d072.js} +1 -1
  327. package/apps/web/.next/static/chunks/{7812.c1435a724050dfec.js → 5431.a2353a2aa8c55a67.js} +1 -1
  328. package/apps/web/.next/static/chunks/7f67b0df-54679694c67e2b76.js +1 -0
  329. package/apps/web/.next/static/chunks/80f1cbb7-c9635d81d9fe6819.js +1 -0
  330. package/apps/web/.next/static/chunks/8532165e-abce74bbb270ef26.js +1 -0
  331. package/apps/web/.next/static/chunks/9372.e71f5b96da3f9dfd.js +1 -0
  332. package/apps/web/.next/static/chunks/9702-d646bcd7cb8fe6bf.js +135 -0
  333. package/apps/web/.next/static/chunks/app/api/apps/cron/route-982235d988e17f31.js +1 -0
  334. package/apps/web/.next/static/chunks/app/api/apps/proxy/route-982235d988e17f31.js +1 -0
  335. package/apps/web/.next/static/chunks/app/api/apps/route-982235d988e17f31.js +1 -0
  336. package/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-982235d988e17f31.js +1 -0
  337. package/apps/web/.next/static/chunks/app/api/apps/store/route-982235d988e17f31.js +1 -0
  338. package/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-982235d988e17f31.js +1 -0
  339. package/apps/web/.next/static/chunks/app/api/chat/active/route-982235d988e17f31.js +1 -0
  340. package/apps/web/.next/static/chunks/app/api/chat/route-982235d988e17f31.js +1 -0
  341. package/apps/web/.next/static/chunks/app/api/chat/runs/route-982235d988e17f31.js +1 -0
  342. package/apps/web/.next/static/chunks/app/api/chat/stop/route-982235d988e17f31.js +1 -0
  343. package/apps/web/.next/static/chunks/app/api/chat/stream/route-982235d988e17f31.js +1 -0
  344. package/apps/web/.next/static/chunks/app/api/chat/subagents/route-982235d988e17f31.js +1 -0
  345. package/apps/web/.next/static/chunks/app/api/composio/callback/route-982235d988e17f31.js +1 -0
  346. package/apps/web/.next/static/chunks/app/api/composio/connect/route-982235d988e17f31.js +1 -0
  347. package/apps/web/.next/static/chunks/app/api/composio/connections/route-982235d988e17f31.js +1 -0
  348. package/apps/web/.next/static/chunks/app/api/composio/disconnect/route-982235d988e17f31.js +1 -0
  349. package/apps/web/.next/static/chunks/app/api/composio/status/route-982235d988e17f31.js +1 -0
  350. package/apps/web/.next/static/chunks/app/api/composio/tool-index/route-982235d988e17f31.js +1 -0
  351. package/apps/web/.next/static/chunks/app/api/composio/toolkits/route-982235d988e17f31.js +1 -0
  352. package/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-982235d988e17f31.js +1 -0
  353. package/apps/web/.next/static/chunks/app/api/cron/jobs/route-982235d988e17f31.js +1 -0
  354. package/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-982235d988e17f31.js +1 -0
  355. package/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-982235d988e17f31.js +1 -0
  356. package/apps/web/.next/static/chunks/app/api/feedback/route-982235d988e17f31.js +1 -0
  357. package/apps/web/.next/static/chunks/app/api/gateway/channels/route-982235d988e17f31.js +1 -0
  358. package/apps/web/.next/static/chunks/app/api/gateway/chat/route-982235d988e17f31.js +1 -0
  359. package/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-982235d988e17f31.js +1 -0
  360. package/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-982235d988e17f31.js +1 -0
  361. package/apps/web/.next/static/chunks/app/api/gateway/sessions/route-982235d988e17f31.js +1 -0
  362. package/apps/web/.next/static/chunks/app/api/integrations/[id]/toggle/route-982235d988e17f31.js +1 -0
  363. package/apps/web/.next/static/chunks/app/api/integrations/repair/route-982235d988e17f31.js +1 -0
  364. package/apps/web/.next/static/chunks/app/api/integrations/route-982235d988e17f31.js +1 -0
  365. package/apps/web/.next/static/chunks/app/api/memories/route-982235d988e17f31.js +1 -0
  366. package/apps/web/.next/static/chunks/app/api/profiles/route-982235d988e17f31.js +1 -0
  367. package/apps/web/.next/static/chunks/app/api/profiles/switch/route-982235d988e17f31.js +1 -0
  368. package/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-982235d988e17f31.js +1 -0
  369. package/apps/web/.next/static/chunks/app/api/sessions/route-982235d988e17f31.js +1 -0
  370. package/apps/web/.next/static/chunks/app/api/settings/cloud/route-982235d988e17f31.js +1 -0
  371. package/apps/web/.next/static/chunks/app/api/skills/[slug]/content/route-982235d988e17f31.js +1 -0
  372. package/apps/web/.next/static/chunks/app/api/skills/[slug]/route-982235d988e17f31.js +1 -0
  373. package/apps/web/.next/static/chunks/app/api/skills/browse/route-982235d988e17f31.js +1 -0
  374. package/apps/web/.next/static/chunks/app/api/skills/install/route-982235d988e17f31.js +1 -0
  375. package/apps/web/.next/static/chunks/app/api/skills/route-982235d988e17f31.js +1 -0
  376. package/apps/web/.next/static/chunks/app/api/terminal/port/route-982235d988e17f31.js +1 -0
  377. package/apps/web/.next/static/chunks/app/api/voice/speech/route-982235d988e17f31.js +1 -0
  378. package/apps/web/.next/static/chunks/app/api/voice/transcribe/route-982235d988e17f31.js +1 -0
  379. package/apps/web/.next/static/chunks/app/api/voice/voices/route-982235d988e17f31.js +1 -0
  380. package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-982235d988e17f31.js +1 -0
  381. package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-982235d988e17f31.js +1 -0
  382. package/apps/web/.next/static/chunks/app/api/web-sessions/route-982235d988e17f31.js +1 -0
  383. package/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-982235d988e17f31.js +1 -0
  384. package/apps/web/.next/static/chunks/app/api/workspace/browse/route-982235d988e17f31.js +1 -0
  385. package/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-982235d988e17f31.js +1 -0
  386. package/apps/web/.next/static/chunks/app/api/workspace/context/route-982235d988e17f31.js +1 -0
  387. package/apps/web/.next/static/chunks/app/api/workspace/copy/route-982235d988e17f31.js +1 -0
  388. package/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-982235d988e17f31.js +1 -0
  389. package/apps/web/.next/static/chunks/app/api/workspace/db/query/route-982235d988e17f31.js +1 -0
  390. package/apps/web/.next/static/chunks/app/api/workspace/delete/route-982235d988e17f31.js +1 -0
  391. package/apps/web/.next/static/chunks/app/api/workspace/execute/route-982235d988e17f31.js +1 -0
  392. package/apps/web/.next/static/chunks/app/api/workspace/file/route-982235d988e17f31.js +1 -0
  393. package/apps/web/.next/static/chunks/app/api/workspace/init/route-982235d988e17f31.js +1 -0
  394. package/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-982235d988e17f31.js +1 -0
  395. package/apps/web/.next/static/chunks/app/api/workspace/list/route-982235d988e17f31.js +1 -0
  396. package/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-982235d988e17f31.js +1 -0
  397. package/apps/web/.next/static/chunks/app/api/workspace/move/route-982235d988e17f31.js +1 -0
  398. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-982235d988e17f31.js +1 -0
  399. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-982235d988e17f31.js +1 -0
  400. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-982235d988e17f31.js +1 -0
  401. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-982235d988e17f31.js +1 -0
  402. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-982235d988e17f31.js +1 -0
  403. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-982235d988e17f31.js +1 -0
  404. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-982235d988e17f31.js +1 -0
  405. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-982235d988e17f31.js +1 -0
  406. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-982235d988e17f31.js +1 -0
  407. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-982235d988e17f31.js +1 -0
  408. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-982235d988e17f31.js +1 -0
  409. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-982235d988e17f31.js +1 -0
  410. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-982235d988e17f31.js +1 -0
  411. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-982235d988e17f31.js +1 -0
  412. package/apps/web/.next/static/chunks/app/api/workspace/open-file/route-982235d988e17f31.js +1 -0
  413. package/apps/web/.next/static/chunks/app/api/workspace/path-info/route-982235d988e17f31.js +1 -0
  414. package/apps/web/.next/static/chunks/app/api/workspace/query/route-982235d988e17f31.js +1 -0
  415. package/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-982235d988e17f31.js +1 -0
  416. package/apps/web/.next/static/chunks/app/api/workspace/rename/route-982235d988e17f31.js +1 -0
  417. package/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-982235d988e17f31.js +1 -0
  418. package/apps/web/.next/static/chunks/app/api/workspace/search-index/route-982235d988e17f31.js +1 -0
  419. package/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-982235d988e17f31.js +1 -0
  420. package/apps/web/.next/static/chunks/app/api/workspace/switch/route-982235d988e17f31.js +1 -0
  421. package/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-982235d988e17f31.js +1 -0
  422. package/apps/web/.next/static/chunks/app/api/workspace/tree/route-982235d988e17f31.js +1 -0
  423. package/apps/web/.next/static/chunks/app/api/workspace/upload/route-982235d988e17f31.js +1 -0
  424. package/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-982235d988e17f31.js +1 -0
  425. package/apps/web/.next/static/chunks/app/api/workspace/watch/route-982235d988e17f31.js +1 -0
  426. package/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-982235d988e17f31.js +1 -0
  427. package/apps/web/.next/static/chunks/app/{layout-3b33b798ff1504e9.js → layout-33207ce031676561.js} +1 -1
  428. package/apps/web/.next/static/chunks/app/page-27c6d6093051ac5c.js +1 -0
  429. package/apps/web/.next/static/chunks/webpack-d4501ef5cbbcf069.js +1 -0
  430. package/apps/web/.next/static/css/4f71a2dee93c9f97.css +1 -0
  431. package/apps/web/.next/static/jcrHaOr6nJr3WKHp3ijBE/_buildManifest.js +1 -0
  432. package/apps/web/public/integrations/exa-logomark.svg +4 -0
  433. package/apps/web/public/logo/composio.webp +0 -0
  434. package/apps/web/public/models/deepseek.ico +0 -0
  435. package/apps/web/public/models/kimi.png +0 -0
  436. package/apps/web/public/models/kimi.svg +89 -0
  437. package/apps/web/public/models/minimax.png +0 -0
  438. package/dist/entry.js +1 -1
  439. package/dist/{program-BDz7WHcZ.js → program-BYB4nfWK.js} +235 -12
  440. package/dist/{run-main-Ddx9Tsa1.js → run-main-Z-P_Zlf6.js} +1 -1
  441. package/extensions/apollo-enrichment/index.ts +268 -0
  442. package/extensions/apollo-enrichment/openclaw.plugin.json +16 -0
  443. package/extensions/apollo-enrichment/package.json +8 -0
  444. package/extensions/dench-ai-gateway/composio-bridge.ts +474 -0
  445. package/extensions/dench-ai-gateway/config-patch.ts +83 -0
  446. package/extensions/dench-ai-gateway/index.test.ts +281 -0
  447. package/extensions/dench-ai-gateway/index.ts +9 -36
  448. package/extensions/dench-ai-gateway/models.ts +5 -5
  449. package/extensions/dench-identity/composio-cheat-sheet.test.ts +146 -0
  450. package/extensions/dench-identity/composio-cheat-sheet.ts +197 -0
  451. package/extensions/dench-identity/index.test.ts +226 -1
  452. package/extensions/dench-identity/index.ts +795 -5
  453. package/extensions/exa-search/index.ts +363 -0
  454. package/extensions/exa-search/openclaw.plugin.json +16 -0
  455. package/extensions/exa-search/package.json +8 -0
  456. package/extensions/posthog-analytics/lib/build-env.js +1 -1
  457. package/package.json +2 -2
  458. package/skills/composio-apps/SKILL.md +88 -0
  459. package/apps/web/.next/standalone/apps/web/.next/server/chunks/4334.js +0 -481
  460. package/apps/web/.next/standalone/apps/web/.next/static/bHQQHboaVXn6uVyBK8na1/_buildManifest.js +0 -1
  461. package/apps/web/.next/standalone/apps/web/.next/static/chunks/2457.b2932424bcf38aee.js +0 -1
  462. package/apps/web/.next/standalone/apps/web/.next/static/chunks/2716-475d96c202834586.js +0 -135
  463. package/apps/web/.next/standalone/apps/web/.next/static/chunks/4062.6ff486abe87e56aa.js +0 -1
  464. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/cron/route-d14ffafd970f186e.js +0 -1
  465. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/proxy/route-d14ffafd970f186e.js +0 -1
  466. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/route-d14ffafd970f186e.js +0 -1
  467. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-d14ffafd970f186e.js +0 -1
  468. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/store/route-d14ffafd970f186e.js +0 -1
  469. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-d14ffafd970f186e.js +0 -1
  470. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/active/route-d14ffafd970f186e.js +0 -1
  471. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/route-d14ffafd970f186e.js +0 -1
  472. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/runs/route-d14ffafd970f186e.js +0 -1
  473. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stop/route-d14ffafd970f186e.js +0 -1
  474. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/stream/route-d14ffafd970f186e.js +0 -1
  475. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/chat/subagents/route-d14ffafd970f186e.js +0 -1
  476. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-d14ffafd970f186e.js +0 -1
  477. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/jobs/route-d14ffafd970f186e.js +0 -1
  478. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-d14ffafd970f186e.js +0 -1
  479. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-d14ffafd970f186e.js +0 -1
  480. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/feedback/route-d14ffafd970f186e.js +0 -1
  481. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/channels/route-d14ffafd970f186e.js +0 -1
  482. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/route-d14ffafd970f186e.js +0 -1
  483. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-d14ffafd970f186e.js +0 -1
  484. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-d14ffafd970f186e.js +0 -1
  485. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/gateway/sessions/route-d14ffafd970f186e.js +0 -1
  486. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/memories/route-d14ffafd970f186e.js +0 -1
  487. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/route-d14ffafd970f186e.js +0 -1
  488. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/profiles/switch/route-d14ffafd970f186e.js +0 -1
  489. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-d14ffafd970f186e.js +0 -1
  490. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/sessions/route-d14ffafd970f186e.js +0 -1
  491. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/skills/route-d14ffafd970f186e.js +0 -1
  492. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/terminal/port/route-d14ffafd970f186e.js +0 -1
  493. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-d14ffafd970f186e.js +0 -1
  494. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-d14ffafd970f186e.js +0 -1
  495. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/web-sessions/route-d14ffafd970f186e.js +0 -1
  496. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-d14ffafd970f186e.js +0 -1
  497. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse/route-d14ffafd970f186e.js +0 -1
  498. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-d14ffafd970f186e.js +0 -1
  499. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/context/route-d14ffafd970f186e.js +0 -1
  500. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/copy/route-d14ffafd970f186e.js +0 -1
  501. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-d14ffafd970f186e.js +0 -1
  502. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/db/query/route-d14ffafd970f186e.js +0 -1
  503. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/delete/route-d14ffafd970f186e.js +0 -1
  504. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/execute/route-d14ffafd970f186e.js +0 -1
  505. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/file/route-d14ffafd970f186e.js +0 -1
  506. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/init/route-d14ffafd970f186e.js +0 -1
  507. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-d14ffafd970f186e.js +0 -1
  508. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/list/route-d14ffafd970f186e.js +0 -1
  509. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-d14ffafd970f186e.js +0 -1
  510. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/move/route-d14ffafd970f186e.js +0 -1
  511. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-d14ffafd970f186e.js +0 -1
  512. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-d14ffafd970f186e.js +0 -1
  513. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-d14ffafd970f186e.js +0 -1
  514. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-d14ffafd970f186e.js +0 -1
  515. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-d14ffafd970f186e.js +0 -1
  516. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-d14ffafd970f186e.js +0 -1
  517. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-d14ffafd970f186e.js +0 -1
  518. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-d14ffafd970f186e.js +0 -1
  519. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-d14ffafd970f186e.js +0 -1
  520. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-d14ffafd970f186e.js +0 -1
  521. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-d14ffafd970f186e.js +0 -1
  522. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-d14ffafd970f186e.js +0 -1
  523. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-d14ffafd970f186e.js +0 -1
  524. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-d14ffafd970f186e.js +0 -1
  525. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/open-file/route-d14ffafd970f186e.js +0 -1
  526. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/path-info/route-d14ffafd970f186e.js +0 -1
  527. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/query/route-d14ffafd970f186e.js +0 -1
  528. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-d14ffafd970f186e.js +0 -1
  529. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/rename/route-d14ffafd970f186e.js +0 -1
  530. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-d14ffafd970f186e.js +0 -1
  531. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/search-index/route-d14ffafd970f186e.js +0 -1
  532. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-d14ffafd970f186e.js +0 -1
  533. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/switch/route-d14ffafd970f186e.js +0 -1
  534. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-d14ffafd970f186e.js +0 -1
  535. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/tree/route-d14ffafd970f186e.js +0 -1
  536. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/upload/route-d14ffafd970f186e.js +0 -1
  537. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-d14ffafd970f186e.js +0 -1
  538. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/watch/route-d14ffafd970f186e.js +0 -1
  539. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-d14ffafd970f186e.js +0 -1
  540. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/page-c8e88d7669047677.js +0 -1
  541. package/apps/web/.next/standalone/apps/web/.next/static/chunks/webpack-a769c08a3fea86bb.js +0 -1
  542. package/apps/web/.next/standalone/apps/web/.next/static/css/99b07ab2db5fe339.css +0 -1
  543. package/apps/web/.next/static/bHQQHboaVXn6uVyBK8na1/_buildManifest.js +0 -1
  544. package/apps/web/.next/static/chunks/2457.b2932424bcf38aee.js +0 -1
  545. package/apps/web/.next/static/chunks/2716-475d96c202834586.js +0 -135
  546. package/apps/web/.next/static/chunks/4062.6ff486abe87e56aa.js +0 -1
  547. package/apps/web/.next/static/chunks/app/api/apps/cron/route-d14ffafd970f186e.js +0 -1
  548. package/apps/web/.next/static/chunks/app/api/apps/proxy/route-d14ffafd970f186e.js +0 -1
  549. package/apps/web/.next/static/chunks/app/api/apps/route-d14ffafd970f186e.js +0 -1
  550. package/apps/web/.next/static/chunks/app/api/apps/serve/[...path]/route-d14ffafd970f186e.js +0 -1
  551. package/apps/web/.next/static/chunks/app/api/apps/store/route-d14ffafd970f186e.js +0 -1
  552. package/apps/web/.next/static/chunks/app/api/apps/webhooks/[...path]/route-d14ffafd970f186e.js +0 -1
  553. package/apps/web/.next/static/chunks/app/api/chat/active/route-d14ffafd970f186e.js +0 -1
  554. package/apps/web/.next/static/chunks/app/api/chat/route-d14ffafd970f186e.js +0 -1
  555. package/apps/web/.next/static/chunks/app/api/chat/runs/route-d14ffafd970f186e.js +0 -1
  556. package/apps/web/.next/static/chunks/app/api/chat/stop/route-d14ffafd970f186e.js +0 -1
  557. package/apps/web/.next/static/chunks/app/api/chat/stream/route-d14ffafd970f186e.js +0 -1
  558. package/apps/web/.next/static/chunks/app/api/chat/subagents/route-d14ffafd970f186e.js +0 -1
  559. package/apps/web/.next/static/chunks/app/api/cron/jobs/[jobId]/runs/route-d14ffafd970f186e.js +0 -1
  560. package/apps/web/.next/static/chunks/app/api/cron/jobs/route-d14ffafd970f186e.js +0 -1
  561. package/apps/web/.next/static/chunks/app/api/cron/runs/[sessionId]/route-d14ffafd970f186e.js +0 -1
  562. package/apps/web/.next/static/chunks/app/api/cron/runs/search-transcript/route-d14ffafd970f186e.js +0 -1
  563. package/apps/web/.next/static/chunks/app/api/feedback/route-d14ffafd970f186e.js +0 -1
  564. package/apps/web/.next/static/chunks/app/api/gateway/channels/route-d14ffafd970f186e.js +0 -1
  565. package/apps/web/.next/static/chunks/app/api/gateway/chat/route-d14ffafd970f186e.js +0 -1
  566. package/apps/web/.next/static/chunks/app/api/gateway/chat/stream/route-d14ffafd970f186e.js +0 -1
  567. package/apps/web/.next/static/chunks/app/api/gateway/sessions/[id]/route-d14ffafd970f186e.js +0 -1
  568. package/apps/web/.next/static/chunks/app/api/gateway/sessions/route-d14ffafd970f186e.js +0 -1
  569. package/apps/web/.next/static/chunks/app/api/memories/route-d14ffafd970f186e.js +0 -1
  570. package/apps/web/.next/static/chunks/app/api/profiles/route-d14ffafd970f186e.js +0 -1
  571. package/apps/web/.next/static/chunks/app/api/profiles/switch/route-d14ffafd970f186e.js +0 -1
  572. package/apps/web/.next/static/chunks/app/api/sessions/[sessionId]/route-d14ffafd970f186e.js +0 -1
  573. package/apps/web/.next/static/chunks/app/api/sessions/route-d14ffafd970f186e.js +0 -1
  574. package/apps/web/.next/static/chunks/app/api/skills/route-d14ffafd970f186e.js +0 -1
  575. package/apps/web/.next/static/chunks/app/api/terminal/port/route-d14ffafd970f186e.js +0 -1
  576. package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/messages/route-d14ffafd970f186e.js +0 -1
  577. package/apps/web/.next/static/chunks/app/api/web-sessions/[id]/route-d14ffafd970f186e.js +0 -1
  578. package/apps/web/.next/static/chunks/app/api/web-sessions/route-d14ffafd970f186e.js +0 -1
  579. package/apps/web/.next/static/chunks/app/api/workspace/assets/[...path]/route-d14ffafd970f186e.js +0 -1
  580. package/apps/web/.next/static/chunks/app/api/workspace/browse/route-d14ffafd970f186e.js +0 -1
  581. package/apps/web/.next/static/chunks/app/api/workspace/browse-file/route-d14ffafd970f186e.js +0 -1
  582. package/apps/web/.next/static/chunks/app/api/workspace/context/route-d14ffafd970f186e.js +0 -1
  583. package/apps/web/.next/static/chunks/app/api/workspace/copy/route-d14ffafd970f186e.js +0 -1
  584. package/apps/web/.next/static/chunks/app/api/workspace/db/introspect/route-d14ffafd970f186e.js +0 -1
  585. package/apps/web/.next/static/chunks/app/api/workspace/db/query/route-d14ffafd970f186e.js +0 -1
  586. package/apps/web/.next/static/chunks/app/api/workspace/delete/route-d14ffafd970f186e.js +0 -1
  587. package/apps/web/.next/static/chunks/app/api/workspace/execute/route-d14ffafd970f186e.js +0 -1
  588. package/apps/web/.next/static/chunks/app/api/workspace/file/route-d14ffafd970f186e.js +0 -1
  589. package/apps/web/.next/static/chunks/app/api/workspace/init/route-d14ffafd970f186e.js +0 -1
  590. package/apps/web/.next/static/chunks/app/api/workspace/link-preview/route-d14ffafd970f186e.js +0 -1
  591. package/apps/web/.next/static/chunks/app/api/workspace/list/route-d14ffafd970f186e.js +0 -1
  592. package/apps/web/.next/static/chunks/app/api/workspace/mkdir/route-d14ffafd970f186e.js +0 -1
  593. package/apps/web/.next/static/chunks/app/api/workspace/move/route-d14ffafd970f186e.js +0 -1
  594. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/route-d14ffafd970f186e.js +0 -1
  595. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/actions/runs/route-d14ffafd970f186e.js +0 -1
  596. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/display-field/route-d14ffafd970f186e.js +0 -1
  597. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/content/route-d14ffafd970f186e.js +0 -1
  598. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/[id]/route-d14ffafd970f186e.js +0 -1
  599. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/bulk-delete/route-d14ffafd970f186e.js +0 -1
  600. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/options/route-d14ffafd970f186e.js +0 -1
  601. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/entries/route-d14ffafd970f186e.js +0 -1
  602. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route-d14ffafd970f186e.js +0 -1
  603. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/[fieldId]/route-d14ffafd970f186e.js +0 -1
  604. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/reorder/route-d14ffafd970f186e.js +0 -1
  605. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/fields/route-d14ffafd970f186e.js +0 -1
  606. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/route-d14ffafd970f186e.js +0 -1
  607. package/apps/web/.next/static/chunks/app/api/workspace/objects/[name]/views/route-d14ffafd970f186e.js +0 -1
  608. package/apps/web/.next/static/chunks/app/api/workspace/open-file/route-d14ffafd970f186e.js +0 -1
  609. package/apps/web/.next/static/chunks/app/api/workspace/path-info/route-d14ffafd970f186e.js +0 -1
  610. package/apps/web/.next/static/chunks/app/api/workspace/query/route-d14ffafd970f186e.js +0 -1
  611. package/apps/web/.next/static/chunks/app/api/workspace/raw-file/route-d14ffafd970f186e.js +0 -1
  612. package/apps/web/.next/static/chunks/app/api/workspace/rename/route-d14ffafd970f186e.js +0 -1
  613. package/apps/web/.next/static/chunks/app/api/workspace/reports/execute/route-d14ffafd970f186e.js +0 -1
  614. package/apps/web/.next/static/chunks/app/api/workspace/search-index/route-d14ffafd970f186e.js +0 -1
  615. package/apps/web/.next/static/chunks/app/api/workspace/suggest-files/route-d14ffafd970f186e.js +0 -1
  616. package/apps/web/.next/static/chunks/app/api/workspace/switch/route-d14ffafd970f186e.js +0 -1
  617. package/apps/web/.next/static/chunks/app/api/workspace/thumbnail/route-d14ffafd970f186e.js +0 -1
  618. package/apps/web/.next/static/chunks/app/api/workspace/tree/route-d14ffafd970f186e.js +0 -1
  619. package/apps/web/.next/static/chunks/app/api/workspace/upload/route-d14ffafd970f186e.js +0 -1
  620. package/apps/web/.next/static/chunks/app/api/workspace/virtual-file/route-d14ffafd970f186e.js +0 -1
  621. package/apps/web/.next/static/chunks/app/api/workspace/watch/route-d14ffafd970f186e.js +0 -1
  622. package/apps/web/.next/static/chunks/app/api/workspace/write-binary/route-d14ffafd970f186e.js +0 -1
  623. package/apps/web/.next/static/chunks/app/page-c8e88d7669047677.js +0 -1
  624. package/apps/web/.next/static/chunks/webpack-a769c08a3fea86bb.js +0 -1
  625. package/apps/web/.next/static/css/99b07ab2db5fe339.css +0 -1
  626. package/skills/browser/SKILL.md +0 -16
  627. /package/apps/web/.next/standalone/apps/web/.next/static/{bHQQHboaVXn6uVyBK8na1 → jcrHaOr6nJr3WKHp3ijBE}/_ssgManifest.js +0 -0
  628. /package/apps/web/.next/static/{bHQQHboaVXn6uVyBK8na1 → jcrHaOr6nJr3WKHp3ijBE}/_ssgManifest.js +0 -0
@@ -0,0 +1,672 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+
3
+ vi.mock("@/lib/workspace", () => ({
4
+ resolveWorkspaceRoot: vi.fn(() => "/tmp/workspace"),
5
+ resolveOpenClawStateDir: vi.fn(() => "/tmp/state"),
6
+ }));
7
+
8
+ vi.mock("@/lib/ensure-composio-apps-skill", () => ({
9
+ ensureComposioAppsSkillInWorkspaces: vi.fn(),
10
+ }));
11
+
12
+ vi.mock("node:fs", () => ({
13
+ cpSync: vi.fn(),
14
+ existsSync: vi.fn(() => false),
15
+ mkdirSync: vi.fn(),
16
+ mkdtempSync: vi.fn(() => "/tmp/skills-sh-extract-123"),
17
+ readFileSync: vi.fn(() => ""),
18
+ readdirSync: vi.fn(() => []),
19
+ rmSync: vi.fn(),
20
+ unlinkSync: vi.fn(),
21
+ writeFileSync: vi.fn(),
22
+ }));
23
+
24
+ vi.mock("node:child_process", () => ({
25
+ execFileSync: vi.fn(),
26
+ }));
27
+
28
+ describe("skills browse and install APIs", () => {
29
+ beforeEach(() => {
30
+ vi.resetModules();
31
+ vi.clearAllMocks();
32
+ global.fetch = vi.fn();
33
+ });
34
+
35
+ describe("GET /api/skills/browse", () => {
36
+ it("passes through an explicit search query", async () => {
37
+ vi.mocked(global.fetch).mockResolvedValue(
38
+ new Response(JSON.stringify({ skills: [] }), {
39
+ status: 200,
40
+ headers: { "Content-Type": "application/json" },
41
+ }),
42
+ );
43
+
44
+ const { GET } = await import("./browse/route.js");
45
+ await GET({
46
+ nextUrl: new URL("http://localhost/api/skills/browse?q=nextjs&limit=2"),
47
+ } as never);
48
+
49
+ expect(global.fetch).toHaveBeenCalledWith(
50
+ "https://skills.sh/api/search?q=nextjs&limit=2",
51
+ expect.objectContaining({
52
+ headers: { Accept: "application/json" },
53
+ }),
54
+ );
55
+ });
56
+
57
+ it("dedupes duplicate slugs from skills.sh search results", async () => {
58
+ vi.mocked(global.fetch).mockResolvedValue(
59
+ new Response(JSON.stringify({
60
+ skills: [
61
+ {
62
+ id: "vercel/next.js/nextjs",
63
+ skillId: "nextjs",
64
+ name: "Next.js",
65
+ installs: 120,
66
+ source: "vercel/next.js",
67
+ },
68
+ {
69
+ id: "acme/nextjs/nextjs",
70
+ skillId: "nextjs",
71
+ name: "Next.js",
72
+ installs: 12,
73
+ source: "acme/nextjs",
74
+ },
75
+ {
76
+ id: "vercel/react/react",
77
+ skillId: "react",
78
+ name: "React",
79
+ installs: 200,
80
+ source: "vercel/react",
81
+ },
82
+ ],
83
+ }), {
84
+ status: 200,
85
+ headers: { "Content-Type": "application/json" },
86
+ }),
87
+ );
88
+
89
+ const { GET } = await import("./browse/route.js");
90
+ const response = await GET({
91
+ nextUrl: new URL("http://localhost/api/skills/browse?q=nextjs"),
92
+ } as never);
93
+ const json = await response.json();
94
+
95
+ expect(json.skills).toEqual([
96
+ {
97
+ slug: "nextjs",
98
+ displayName: "Next.js",
99
+ summary: "Nextjs skill by vercel",
100
+ installs: 120,
101
+ source: "vercel/next.js",
102
+ },
103
+ {
104
+ slug: "react",
105
+ displayName: "React",
106
+ summary: "React skill by vercel",
107
+ installs: 200,
108
+ source: "vercel/react",
109
+ },
110
+ ]);
111
+ });
112
+
113
+ it("normalizes skills.sh payload and falls back to a featured query", async () => {
114
+ vi.mocked(global.fetch).mockImplementation(async (input) => {
115
+ const url = String(input);
116
+ if (url === "https://skills.sh/api/search?q=nextjs&limit=50") {
117
+ return new Response(JSON.stringify({
118
+ skills: [
119
+ {
120
+ id: "kumbajirajkumar123/nextjs-seo-optimizer/nextjs-seo-optimizer",
121
+ skillId: "nextjs-seo-optimizer",
122
+ name: "nextjs-seo-optimizer",
123
+ installs: 8,
124
+ source: "kumbajirajkumar123/nextjs-seo-optimizer",
125
+ },
126
+ ],
127
+ }), {
128
+ status: 200,
129
+ headers: { "Content-Type": "application/json" },
130
+ });
131
+ }
132
+ throw new Error(`Unexpected fetch: ${url}`);
133
+ });
134
+
135
+ const { GET } = await import("./browse/route.js");
136
+ const response = await GET({
137
+ nextUrl: new URL("http://localhost/api/skills/browse"),
138
+ } as never);
139
+ const json = await response.json();
140
+
141
+ expect(global.fetch).toHaveBeenCalledWith(
142
+ "https://skills.sh/api/search?q=nextjs&limit=50",
143
+ expect.objectContaining({
144
+ headers: { Accept: "application/json" },
145
+ }),
146
+ );
147
+ expect(json.skills).toEqual([
148
+ {
149
+ slug: "nextjs-seo-optimizer",
150
+ displayName: "nextjs-seo-optimizer",
151
+ summary: "Nextjs Seo Optimizer skill by kumbajirajkumar123",
152
+ installs: 8,
153
+ source: "kumbajirajkumar123/nextjs-seo-optimizer",
154
+ },
155
+ ]);
156
+ });
157
+ });
158
+
159
+ describe("GET /api/skills", () => {
160
+ it("lists workspace skills from the installed skills directory", async () => {
161
+ const { existsSync, readFileSync, readdirSync } = await import("node:fs");
162
+
163
+ vi.mocked(existsSync).mockImplementation((filePath) => {
164
+ const file = String(filePath);
165
+ return (
166
+ file === "/tmp/workspace/skills"
167
+ || file === "/tmp/workspace/skills/nextjs-seo-optimizer/SKILL.md"
168
+ );
169
+ });
170
+
171
+ vi.mocked(readdirSync).mockImplementation((dir) => {
172
+ if (String(dir) === "/tmp/workspace/skills") {
173
+ return [{
174
+ isDirectory: () => true,
175
+ name: "nextjs-seo-optimizer",
176
+ }] as never;
177
+ }
178
+ return [] as never;
179
+ });
180
+
181
+ vi.mocked(readFileSync).mockReturnValue(
182
+ [
183
+ "---",
184
+ "name: Next.js SEO Optimizer",
185
+ "description: Optimize Next.js applications for search engines.",
186
+ "emoji: \"🎯\"",
187
+ "---",
188
+ "# Next.js SEO Optimizer",
189
+ ].join("\n") as never,
190
+ );
191
+
192
+ const { GET } = await import("./route.js");
193
+ const response = await GET();
194
+ const json = await response.json();
195
+
196
+ expect(json.skills).toEqual([
197
+ {
198
+ name: "Next.js SEO Optimizer",
199
+ slug: "nextjs-seo-optimizer",
200
+ description: "Optimize Next.js applications for search engines.",
201
+ emoji: "🎯",
202
+ source: "workspace",
203
+ filePath: "/tmp/workspace/skills/nextjs-seo-optimizer/SKILL.md",
204
+ protected: false,
205
+ },
206
+ ]);
207
+ });
208
+
209
+ it("keeps store-installed skills visible when metadata parsing fails but the lock entry exists", async () => {
210
+ const { existsSync, readFileSync, readdirSync } = await import("node:fs");
211
+
212
+ vi.mocked(existsSync).mockImplementation((filePath) => {
213
+ const file = String(filePath);
214
+ return (
215
+ file === "/tmp/workspace/skills"
216
+ || file === "/tmp/workspace/skills/nextjs"
217
+ || file === "/tmp/workspace/.skills/lock.json"
218
+ );
219
+ });
220
+
221
+ vi.mocked(readdirSync).mockImplementation((dir) => {
222
+ if (String(dir) === "/tmp/workspace/skills") {
223
+ return [{
224
+ isDirectory: () => true,
225
+ name: "nextjs",
226
+ }] as never;
227
+ }
228
+ return [] as never;
229
+ });
230
+
231
+ vi.mocked(readFileSync).mockImplementation((filePath) => {
232
+ if (String(filePath) === "/tmp/workspace/.skills/lock.json") {
233
+ return JSON.stringify({
234
+ nextjs: {
235
+ slug: "nextjs",
236
+ source: "vercel/next.js",
237
+ installedAt: "2026-04-02T00:00:00.000Z",
238
+ installedFrom: "skills.sh",
239
+ },
240
+ }) as never;
241
+ }
242
+ throw new Error("Unreadable SKILL.md");
243
+ });
244
+
245
+ const { GET } = await import("./route.js");
246
+ const response = await GET();
247
+ const json = await response.json();
248
+
249
+ expect(json.skills).toEqual([
250
+ {
251
+ name: "nextjs",
252
+ slug: "nextjs",
253
+ description: "Installed from vercel/next.js",
254
+ source: "skills.sh",
255
+ filePath: "/tmp/workspace/skills/nextjs/SKILL.md",
256
+ protected: false,
257
+ },
258
+ ]);
259
+ });
260
+ });
261
+
262
+ describe("POST /api/skills/install", () => {
263
+ it("installs a nested skill into workspace/skills and writes a skills lock entry", async () => {
264
+ const {
265
+ cpSync,
266
+ existsSync,
267
+ mkdirSync,
268
+ readFileSync,
269
+ readdirSync,
270
+ writeFileSync,
271
+ } = await import("node:fs");
272
+ const { execFileSync } = await import("node:child_process");
273
+
274
+ vi.mocked(global.fetch).mockImplementation(async (input) => {
275
+ const url = String(input);
276
+ if (url === "https://api.github.com/repos/kumbajirajkumar123/nextjs-seo-optimizer") {
277
+ return new Response(JSON.stringify({ default_branch: "main" }), {
278
+ status: 200,
279
+ headers: { "Content-Type": "application/json" },
280
+ });
281
+ }
282
+ if (url === "https://codeload.github.com/kumbajirajkumar123/nextjs-seo-optimizer/tar.gz/refs/heads/main") {
283
+ return new Response(new Uint8Array([1, 2, 3]), { status: 200 });
284
+ }
285
+ throw new Error(`Unexpected fetch: ${url}`);
286
+ });
287
+
288
+ vi.mocked(readdirSync).mockImplementation((dir) => {
289
+ const d = String(dir);
290
+ if (d === "/tmp/skills-sh-extract-123") {
291
+ return [{
292
+ isDirectory: () => true,
293
+ name: "nextjs-seo-optimizer-main",
294
+ }] as never;
295
+ }
296
+ if (d === "/tmp/skills-sh-extract-123/nextjs-seo-optimizer-main/skills") {
297
+ return [{
298
+ isDirectory: () => true,
299
+ name: "nextjs-seo-optimizer",
300
+ }] as never;
301
+ }
302
+ return [] as never;
303
+ });
304
+
305
+ vi.mocked(existsSync).mockImplementation((filePath) => {
306
+ const file = String(filePath);
307
+ return (
308
+ file === "/tmp/skills-sh-extract-123/nextjs-seo-optimizer-main/skills"
309
+ || file === "/tmp/skills-sh-extract-123/nextjs-seo-optimizer-main/skills/nextjs-seo-optimizer/SKILL.md"
310
+ || file === "/tmp/workspace/skills/nextjs-seo-optimizer/SKILL.md"
311
+ || file === "/tmp/workspace/.skills/lock.json"
312
+ );
313
+ });
314
+
315
+ vi.mocked(readFileSync).mockReturnValue("{}" as never);
316
+
317
+ const { POST } = await import("./install/route.js");
318
+ const response = await POST(new Request("http://localhost/api/skills/install", {
319
+ method: "POST",
320
+ headers: { "Content-Type": "application/json" },
321
+ body: JSON.stringify({
322
+ slug: "nextjs-seo-optimizer",
323
+ source: "kumbajirajkumar123/nextjs-seo-optimizer",
324
+ }),
325
+ }));
326
+ const json = await response.json();
327
+
328
+ expect(response.status).toBe(200);
329
+ expect(json.ok).toBe(true);
330
+ expect(json.slug).toBe("nextjs-seo-optimizer");
331
+ expect(json.skill).toEqual({
332
+ name: "nextjs-seo-optimizer",
333
+ slug: "nextjs-seo-optimizer",
334
+ description: "",
335
+ emoji: undefined,
336
+ source: "skills.sh",
337
+ filePath: "/tmp/workspace/skills/nextjs-seo-optimizer/SKILL.md",
338
+ protected: false,
339
+ });
340
+ expect(execFileSync).toHaveBeenCalledWith(
341
+ "tar",
342
+ [
343
+ "-xzf",
344
+ expect.stringContaining("skills-sh-"),
345
+ "-C",
346
+ "/tmp/skills-sh-extract-123",
347
+ ],
348
+ {
349
+ stdio: "pipe",
350
+ timeout: 15_000,
351
+ },
352
+ );
353
+ expect(mkdirSync).toHaveBeenCalledWith("/tmp/workspace/skills", { recursive: true });
354
+ expect(cpSync).toHaveBeenCalledWith(
355
+ "/tmp/skills-sh-extract-123/nextjs-seo-optimizer-main/skills/nextjs-seo-optimizer",
356
+ "/tmp/workspace/skills/nextjs-seo-optimizer",
357
+ { recursive: true, force: true },
358
+ );
359
+ expect(writeFileSync).toHaveBeenCalledWith(
360
+ "/tmp/workspace/.skills/lock.json",
361
+ expect.stringContaining("\"installedFrom\": \"skills.sh\""),
362
+ );
363
+ });
364
+
365
+ it("installs a root-level SKILL.md repo (single skill at repo root)", async () => {
366
+ const { cpSync, existsSync, readFileSync, readdirSync } = await import("node:fs");
367
+
368
+ vi.mocked(global.fetch).mockImplementation(async (input) => {
369
+ const url = String(input);
370
+ if (url === "https://api.github.com/repos/someone/my-skill") {
371
+ return new Response(JSON.stringify({ default_branch: "main" }), { status: 200, headers: { "Content-Type": "application/json" } });
372
+ }
373
+ if (url === "https://codeload.github.com/someone/my-skill/tar.gz/refs/heads/main") {
374
+ return new Response(new Uint8Array([1, 2, 3]), { status: 200 });
375
+ }
376
+ throw new Error(`Unexpected fetch: ${url}`);
377
+ });
378
+
379
+ vi.mocked(readdirSync).mockImplementation((dir) => {
380
+ if (String(dir) === "/tmp/skills-sh-extract-123") {
381
+ return [{ isDirectory: () => true, name: "my-skill-main" }] as never;
382
+ }
383
+ return [] as never;
384
+ });
385
+
386
+ vi.mocked(existsSync).mockImplementation((filePath) => {
387
+ const file = String(filePath);
388
+ return (
389
+ file === "/tmp/skills-sh-extract-123/my-skill-main/SKILL.md"
390
+ || file === "/tmp/workspace/skills/my-skill/SKILL.md"
391
+ || file === "/tmp/workspace/.skills/lock.json"
392
+ );
393
+ });
394
+
395
+ vi.mocked(readFileSync).mockReturnValue("{}" as never);
396
+
397
+ const { POST } = await import("./install/route.js");
398
+ const response = await POST(new Request("http://localhost/api/skills/install", {
399
+ method: "POST",
400
+ headers: { "Content-Type": "application/json" },
401
+ body: JSON.stringify({ slug: "my-skill", source: "someone/my-skill" }),
402
+ }));
403
+ const json = await response.json();
404
+
405
+ expect(response.status).toBe(200);
406
+ expect(json.ok).toBe(true);
407
+ expect(cpSync).toHaveBeenCalledWith(
408
+ "/tmp/skills-sh-extract-123/my-skill-main",
409
+ "/tmp/workspace/skills/my-skill",
410
+ { recursive: true, force: true },
411
+ );
412
+ });
413
+
414
+ it("installs a skill from skills/ subdirectory when slug matches", async () => {
415
+ const { cpSync, existsSync, readFileSync, readdirSync } = await import("node:fs");
416
+
417
+ vi.mocked(global.fetch).mockImplementation(async (input) => {
418
+ const url = String(input);
419
+ if (url === "https://api.github.com/repos/acme/skill-pack") {
420
+ return new Response(JSON.stringify({ default_branch: "main" }), { status: 200, headers: { "Content-Type": "application/json" } });
421
+ }
422
+ if (url === "https://codeload.github.com/acme/skill-pack/tar.gz/refs/heads/main") {
423
+ return new Response(new Uint8Array([1, 2, 3]), { status: 200 });
424
+ }
425
+ throw new Error(`Unexpected fetch: ${url}`);
426
+ });
427
+
428
+ vi.mocked(readdirSync).mockImplementation((dir) => {
429
+ const d = String(dir);
430
+ if (d === "/tmp/skills-sh-extract-123") {
431
+ return [{ isDirectory: () => true, name: "skill-pack-main" }] as never;
432
+ }
433
+ if (d === "/tmp/skills-sh-extract-123/skill-pack-main/skills") {
434
+ return [
435
+ { isDirectory: () => true, name: "nextjs" },
436
+ { isDirectory: () => true, name: "react" },
437
+ ] as never;
438
+ }
439
+ return [] as never;
440
+ });
441
+
442
+ vi.mocked(existsSync).mockImplementation((filePath) => {
443
+ const file = String(filePath);
444
+ return (
445
+ file === "/tmp/skills-sh-extract-123/skill-pack-main/skills"
446
+ || file === "/tmp/skills-sh-extract-123/skill-pack-main/skills/nextjs/SKILL.md"
447
+ || file === "/tmp/skills-sh-extract-123/skill-pack-main/skills/react/SKILL.md"
448
+ || file === "/tmp/workspace/skills/nextjs/SKILL.md"
449
+ || file === "/tmp/workspace/.skills/lock.json"
450
+ );
451
+ });
452
+
453
+ vi.mocked(readFileSync).mockReturnValue("{}" as never);
454
+
455
+ const { POST } = await import("./install/route.js");
456
+ const response = await POST(new Request("http://localhost/api/skills/install", {
457
+ method: "POST",
458
+ headers: { "Content-Type": "application/json" },
459
+ body: JSON.stringify({ slug: "nextjs", source: "acme/skill-pack" }),
460
+ }));
461
+ const json = await response.json();
462
+
463
+ expect(response.status).toBe(200);
464
+ expect(json.ok).toBe(true);
465
+ expect(json.slug).toBe("nextjs");
466
+ expect(cpSync).toHaveBeenCalledWith(
467
+ "/tmp/skills-sh-extract-123/skill-pack-main/skills/nextjs",
468
+ "/tmp/workspace/skills/nextjs",
469
+ { recursive: true, force: true },
470
+ );
471
+ });
472
+
473
+ it("installs from agent-style directory (e.g. .claude/skills/)", async () => {
474
+ const { cpSync, existsSync, readFileSync, readdirSync } = await import("node:fs");
475
+
476
+ vi.mocked(global.fetch).mockImplementation(async (input) => {
477
+ const url = String(input);
478
+ if (url === "https://api.github.com/repos/dev/agent-skills") {
479
+ return new Response(JSON.stringify({ default_branch: "main" }), { status: 200, headers: { "Content-Type": "application/json" } });
480
+ }
481
+ if (url === "https://codeload.github.com/dev/agent-skills/tar.gz/refs/heads/main") {
482
+ return new Response(new Uint8Array([1, 2, 3]), { status: 200 });
483
+ }
484
+ throw new Error(`Unexpected fetch: ${url}`);
485
+ });
486
+
487
+ vi.mocked(readdirSync).mockImplementation((dir) => {
488
+ const d = String(dir);
489
+ if (d === "/tmp/skills-sh-extract-123") {
490
+ return [{ isDirectory: () => true, name: "agent-skills-main" }] as never;
491
+ }
492
+ if (d === "/tmp/skills-sh-extract-123/agent-skills-main/.claude/skills") {
493
+ return [{ isDirectory: () => true, name: "debugging" }] as never;
494
+ }
495
+ return [] as never;
496
+ });
497
+
498
+ vi.mocked(existsSync).mockImplementation((filePath) => {
499
+ const file = String(filePath);
500
+ return (
501
+ file === "/tmp/skills-sh-extract-123/agent-skills-main/.claude/skills"
502
+ || file === "/tmp/skills-sh-extract-123/agent-skills-main/.claude/skills/debugging/SKILL.md"
503
+ || file === "/tmp/workspace/skills/debugging/SKILL.md"
504
+ || file === "/tmp/workspace/.skills/lock.json"
505
+ );
506
+ });
507
+
508
+ vi.mocked(readFileSync).mockReturnValue("{}" as never);
509
+
510
+ const { POST } = await import("./install/route.js");
511
+ const response = await POST(new Request("http://localhost/api/skills/install", {
512
+ method: "POST",
513
+ headers: { "Content-Type": "application/json" },
514
+ body: JSON.stringify({ slug: "debugging", source: "dev/agent-skills" }),
515
+ }));
516
+ const json = await response.json();
517
+
518
+ expect(response.status).toBe(200);
519
+ expect(json.ok).toBe(true);
520
+ expect(cpSync).toHaveBeenCalledWith(
521
+ "/tmp/skills-sh-extract-123/agent-skills-main/.claude/skills/debugging",
522
+ "/tmp/workspace/skills/debugging",
523
+ { recursive: true, force: true },
524
+ );
525
+ });
526
+
527
+ it("installs a single discovered skill even if folder name differs from slug", async () => {
528
+ const { cpSync, existsSync, readFileSync, readdirSync } = await import("node:fs");
529
+
530
+ vi.mocked(global.fetch).mockImplementation(async (input) => {
531
+ const url = String(input);
532
+ if (url === "https://api.github.com/repos/author/cool-skill") {
533
+ return new Response(JSON.stringify({ default_branch: "main" }), { status: 200, headers: { "Content-Type": "application/json" } });
534
+ }
535
+ if (url === "https://codeload.github.com/author/cool-skill/tar.gz/refs/heads/main") {
536
+ return new Response(new Uint8Array([1, 2, 3]), { status: 200 });
537
+ }
538
+ throw new Error(`Unexpected fetch: ${url}`);
539
+ });
540
+
541
+ vi.mocked(readdirSync).mockImplementation((dir) => {
542
+ const d = String(dir);
543
+ if (d === "/tmp/skills-sh-extract-123") {
544
+ return [{ isDirectory: () => true, name: "cool-skill-main" }] as never;
545
+ }
546
+ if (d === "/tmp/skills-sh-extract-123/cool-skill-main/skills") {
547
+ return [{ isDirectory: () => true, name: "actual-skill-name" }] as never;
548
+ }
549
+ return [] as never;
550
+ });
551
+
552
+ vi.mocked(existsSync).mockImplementation((filePath) => {
553
+ const file = String(filePath);
554
+ return (
555
+ file === "/tmp/skills-sh-extract-123/cool-skill-main/skills"
556
+ || file === "/tmp/skills-sh-extract-123/cool-skill-main/skills/actual-skill-name/SKILL.md"
557
+ || file === "/tmp/workspace/skills/different-slug/SKILL.md"
558
+ || file === "/tmp/workspace/.skills/lock.json"
559
+ );
560
+ });
561
+
562
+ vi.mocked(readFileSync).mockReturnValue("{}" as never);
563
+
564
+ const { POST } = await import("./install/route.js");
565
+ const response = await POST(new Request("http://localhost/api/skills/install", {
566
+ method: "POST",
567
+ headers: { "Content-Type": "application/json" },
568
+ body: JSON.stringify({ slug: "different-slug", source: "author/cool-skill" }),
569
+ }));
570
+ const json = await response.json();
571
+
572
+ expect(response.status).toBe(200);
573
+ expect(json.ok).toBe(true);
574
+ expect(cpSync).toHaveBeenCalledWith(
575
+ "/tmp/skills-sh-extract-123/cool-skill-main/skills/actual-skill-name",
576
+ "/tmp/workspace/skills/different-slug",
577
+ { recursive: true, force: true },
578
+ );
579
+ });
580
+
581
+ it("returns a clear error for multi-skill package with no slug match", async () => {
582
+ const { existsSync, readFileSync, readdirSync } = await import("node:fs");
583
+
584
+ vi.mocked(global.fetch).mockImplementation(async (input) => {
585
+ const url = String(input);
586
+ if (url === "https://api.github.com/repos/acme/multi-skills") {
587
+ return new Response(JSON.stringify({ default_branch: "main" }), { status: 200, headers: { "Content-Type": "application/json" } });
588
+ }
589
+ if (url === "https://codeload.github.com/acme/multi-skills/tar.gz/refs/heads/main") {
590
+ return new Response(new Uint8Array([1, 2, 3]), { status: 200 });
591
+ }
592
+ throw new Error(`Unexpected fetch: ${url}`);
593
+ });
594
+
595
+ vi.mocked(readdirSync).mockImplementation((dir) => {
596
+ const d = String(dir);
597
+ if (d === "/tmp/skills-sh-extract-123") {
598
+ return [{ isDirectory: () => true, name: "multi-skills-main" }] as never;
599
+ }
600
+ if (d === "/tmp/skills-sh-extract-123/multi-skills-main/skills") {
601
+ return [
602
+ { isDirectory: () => true, name: "skill-a" },
603
+ { isDirectory: () => true, name: "skill-b" },
604
+ ] as never;
605
+ }
606
+ return [] as never;
607
+ });
608
+
609
+ vi.mocked(existsSync).mockImplementation((filePath) => {
610
+ const file = String(filePath);
611
+ return (
612
+ file === "/tmp/skills-sh-extract-123/multi-skills-main/skills"
613
+ || file === "/tmp/skills-sh-extract-123/multi-skills-main/skills/skill-a/SKILL.md"
614
+ || file === "/tmp/skills-sh-extract-123/multi-skills-main/skills/skill-b/SKILL.md"
615
+ );
616
+ });
617
+
618
+ vi.mocked(readFileSync).mockReturnValue("{}" as never);
619
+
620
+ const { POST } = await import("./install/route.js");
621
+ const response = await POST(new Request("http://localhost/api/skills/install", {
622
+ method: "POST",
623
+ headers: { "Content-Type": "application/json" },
624
+ body: JSON.stringify({ slug: "nonexistent", source: "acme/multi-skills" }),
625
+ }));
626
+ const json = await response.json();
627
+
628
+ expect(response.status).toBe(500);
629
+ expect(json.ok).toBe(false);
630
+ expect(json.error).toContain("multiple skills");
631
+ expect(json.error).toContain("skill-a");
632
+ expect(json.error).toContain("skill-b");
633
+ });
634
+
635
+ it("returns an error when no SKILL.md files exist in the repo", async () => {
636
+ const { existsSync, readFileSync, readdirSync } = await import("node:fs");
637
+
638
+ vi.mocked(global.fetch).mockImplementation(async (input) => {
639
+ const url = String(input);
640
+ if (url === "https://api.github.com/repos/empty/repo") {
641
+ return new Response(JSON.stringify({ default_branch: "main" }), { status: 200, headers: { "Content-Type": "application/json" } });
642
+ }
643
+ if (url === "https://codeload.github.com/empty/repo/tar.gz/refs/heads/main") {
644
+ return new Response(new Uint8Array([1, 2, 3]), { status: 200 });
645
+ }
646
+ throw new Error(`Unexpected fetch: ${url}`);
647
+ });
648
+
649
+ vi.mocked(readdirSync).mockImplementation((dir) => {
650
+ if (String(dir) === "/tmp/skills-sh-extract-123") {
651
+ return [{ isDirectory: () => true, name: "repo-main" }] as never;
652
+ }
653
+ return [] as never;
654
+ });
655
+
656
+ vi.mocked(existsSync).mockReturnValue(false);
657
+ vi.mocked(readFileSync).mockReturnValue("{}" as never);
658
+
659
+ const { POST } = await import("./install/route.js");
660
+ const response = await POST(new Request("http://localhost/api/skills/install", {
661
+ method: "POST",
662
+ headers: { "Content-Type": "application/json" },
663
+ body: JSON.stringify({ slug: "anything", source: "empty/repo" }),
664
+ }));
665
+ const json = await response.json();
666
+
667
+ expect(response.status).toBe(500);
668
+ expect(json.ok).toBe(false);
669
+ expect(json.error).toContain("does not contain any SKILL.md");
670
+ });
671
+ });
672
+ });
@@ -54,6 +54,7 @@
54
54
  "clsx": "^2.1.1",
55
55
  "date-fns": "^4.1.0",
56
56
  "draggabilly": "^3.0.0",
57
+ "encoding": "^0.1.13",
57
58
  "framer-motion": "^12.34.0",
58
59
  "fuse.js": "^7.1.0",
59
60
  "html-to-docx": "^1.8.0",
@@ -67,6 +68,7 @@
67
68
  "posthog-node": "^5.27.1",
68
69
  "react": "^19.1.0",
69
70
  "react-dom": "^19.1.0",
71
+ "react-icons": "^5.6.0",
70
72
  "react-markdown": "^10.1.0",
71
73
  "react-spreadsheet": "^0.10.1",
72
74
  "recharts": "^3.7.0",