ai-agent-router 0.1.21 → 0.2.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 (368) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +14 -0
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/fallback-build-manifest.json +2 -2
  5. package/.next/routes-manifest.json +84 -0
  6. package/.next/server/app/_global-error/page.js +1 -1
  7. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/server/app/_global-error.html +2 -2
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found/page.js +1 -1
  16. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  17. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/_not-found.html +1 -1
  19. package/.next/server/app/_not-found.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  21. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  23. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  26. package/.next/server/app/api/config/route.js.nft.json +1 -1
  27. package/.next/server/app/api/gateway/[...path]/route.js.nft.json +1 -1
  28. package/.next/server/app/api/gateway/models/route.js.nft.json +1 -1
  29. package/.next/server/app/api/gateway/route.js.nft.json +1 -1
  30. package/.next/server/app/api/ide/claude/apply/route.js.nft.json +1 -1
  31. package/.next/server/app/api/ide/claude/available-models/route.js.nft.json +1 -1
  32. package/.next/server/app/api/ide/claude/save/route.js.nft.json +1 -1
  33. package/.next/server/app/api/ide/claude/status/route.js.nft.json +1 -1
  34. package/.next/server/app/api/ide/claude/test/route.js +1 -1
  35. package/.next/server/app/api/ide/claude/test/route.js.nft.json +1 -1
  36. package/.next/server/app/api/ide/openclaw/apply/route/app-paths-manifest.json +3 -0
  37. package/.next/server/app/api/ide/openclaw/apply/route/build-manifest.json +11 -0
  38. package/.next/server/app/api/ide/openclaw/apply/route/server-reference-manifest.json +4 -0
  39. package/.next/server/app/api/ide/openclaw/apply/route.js +7 -0
  40. package/.next/server/app/api/ide/openclaw/apply/route.js.map +5 -0
  41. package/.next/server/app/api/ide/openclaw/apply/route.js.nft.json +1 -0
  42. package/.next/server/app/api/ide/openclaw/apply/route_client-reference-manifest.js +2 -0
  43. package/.next/server/app/api/ide/openclaw/available-models/route/app-paths-manifest.json +3 -0
  44. package/.next/server/app/api/ide/openclaw/available-models/route/build-manifest.json +11 -0
  45. package/.next/server/app/api/ide/openclaw/available-models/route/server-reference-manifest.json +4 -0
  46. package/.next/server/app/api/ide/openclaw/available-models/route.js +7 -0
  47. package/.next/server/app/api/ide/openclaw/available-models/route.js.map +5 -0
  48. package/.next/server/app/api/ide/openclaw/available-models/route.js.nft.json +1 -0
  49. package/.next/server/app/api/ide/openclaw/available-models/route_client-reference-manifest.js +2 -0
  50. package/.next/server/app/api/ide/openclaw/preview/route/app-paths-manifest.json +3 -0
  51. package/.next/server/app/api/ide/openclaw/preview/route/build-manifest.json +11 -0
  52. package/.next/server/app/api/ide/openclaw/preview/route/server-reference-manifest.json +4 -0
  53. package/.next/server/app/api/ide/openclaw/preview/route.js +7 -0
  54. package/.next/server/app/api/ide/openclaw/preview/route.js.map +5 -0
  55. package/.next/server/app/api/ide/openclaw/preview/route.js.nft.json +1 -0
  56. package/.next/server/app/api/ide/openclaw/preview/route_client-reference-manifest.js +2 -0
  57. package/.next/server/app/api/ide/openclaw/restore/route/app-paths-manifest.json +3 -0
  58. package/.next/server/app/api/ide/openclaw/restore/route/build-manifest.json +11 -0
  59. package/.next/server/app/api/ide/openclaw/restore/route/server-reference-manifest.json +4 -0
  60. package/.next/server/app/api/ide/openclaw/restore/route.js +6 -0
  61. package/.next/server/app/api/ide/openclaw/restore/route.js.map +5 -0
  62. package/.next/server/app/api/ide/openclaw/restore/route.js.nft.json +1 -0
  63. package/.next/server/app/api/ide/openclaw/restore/route_client-reference-manifest.js +2 -0
  64. package/.next/server/app/api/ide/openclaw/save/route/app-paths-manifest.json +3 -0
  65. package/.next/server/app/api/ide/openclaw/save/route/build-manifest.json +11 -0
  66. package/.next/server/app/api/ide/openclaw/save/route/server-reference-manifest.json +4 -0
  67. package/.next/server/app/api/ide/openclaw/save/route.js +7 -0
  68. package/.next/server/app/api/ide/openclaw/save/route.js.map +5 -0
  69. package/.next/server/app/api/ide/openclaw/save/route.js.nft.json +1 -0
  70. package/.next/server/app/api/ide/openclaw/save/route_client-reference-manifest.js +2 -0
  71. package/.next/server/app/api/ide/openclaw/status/route/app-paths-manifest.json +3 -0
  72. package/.next/server/app/api/ide/openclaw/status/route/build-manifest.json +11 -0
  73. package/.next/server/app/api/ide/openclaw/status/route/server-reference-manifest.json +4 -0
  74. package/.next/server/app/api/ide/openclaw/status/route.js +7 -0
  75. package/.next/server/app/api/ide/openclaw/status/route.js.map +5 -0
  76. package/.next/server/app/api/ide/openclaw/status/route.js.nft.json +1 -0
  77. package/.next/server/app/api/ide/openclaw/status/route_client-reference-manifest.js +2 -0
  78. package/.next/server/app/api/ide/openclaw/test/route/app-paths-manifest.json +3 -0
  79. package/.next/server/app/api/ide/openclaw/test/route/build-manifest.json +11 -0
  80. package/.next/server/app/api/ide/openclaw/test/route/server-reference-manifest.json +4 -0
  81. package/.next/server/app/api/ide/openclaw/test/route.js +6 -0
  82. package/.next/server/app/api/ide/openclaw/test/route.js.map +5 -0
  83. package/.next/server/app/api/ide/openclaw/test/route.js.nft.json +1 -0
  84. package/.next/server/app/api/ide/openclaw/test/route_client-reference-manifest.js +2 -0
  85. package/.next/server/app/api/ide/opencode/apply/route/app-paths-manifest.json +3 -0
  86. package/.next/server/app/api/ide/opencode/apply/route/build-manifest.json +11 -0
  87. package/.next/server/app/api/ide/opencode/apply/route/server-reference-manifest.json +4 -0
  88. package/.next/server/app/api/ide/opencode/apply/route.js +7 -0
  89. package/.next/server/app/api/ide/opencode/apply/route.js.map +5 -0
  90. package/.next/server/app/api/ide/opencode/apply/route.js.nft.json +1 -0
  91. package/.next/server/app/api/ide/opencode/apply/route_client-reference-manifest.js +2 -0
  92. package/.next/server/app/api/ide/opencode/available-models/route/app-paths-manifest.json +3 -0
  93. package/.next/server/app/api/ide/opencode/available-models/route/build-manifest.json +11 -0
  94. package/.next/server/app/api/ide/opencode/available-models/route/server-reference-manifest.json +4 -0
  95. package/.next/server/app/api/ide/opencode/available-models/route.js +7 -0
  96. package/.next/server/app/api/ide/opencode/available-models/route.js.map +5 -0
  97. package/.next/server/app/api/ide/opencode/available-models/route.js.nft.json +1 -0
  98. package/.next/server/app/api/ide/opencode/available-models/route_client-reference-manifest.js +2 -0
  99. package/.next/server/app/api/ide/opencode/preview/route/app-paths-manifest.json +3 -0
  100. package/.next/server/app/api/ide/opencode/preview/route/build-manifest.json +11 -0
  101. package/.next/server/app/api/ide/opencode/preview/route/server-reference-manifest.json +4 -0
  102. package/.next/server/app/api/ide/opencode/preview/route.js +7 -0
  103. package/.next/server/app/api/ide/opencode/preview/route.js.map +5 -0
  104. package/.next/server/app/api/ide/opencode/preview/route.js.nft.json +1 -0
  105. package/.next/server/app/api/ide/opencode/preview/route_client-reference-manifest.js +2 -0
  106. package/.next/server/app/api/ide/opencode/restore/route/app-paths-manifest.json +3 -0
  107. package/.next/server/app/api/ide/opencode/restore/route/build-manifest.json +11 -0
  108. package/.next/server/app/api/ide/opencode/restore/route/server-reference-manifest.json +4 -0
  109. package/.next/server/app/api/ide/opencode/restore/route.js +6 -0
  110. package/.next/server/app/api/ide/opencode/restore/route.js.map +5 -0
  111. package/.next/server/app/api/ide/opencode/restore/route.js.nft.json +1 -0
  112. package/.next/server/app/api/ide/opencode/restore/route_client-reference-manifest.js +2 -0
  113. package/.next/server/app/api/ide/opencode/save/route/app-paths-manifest.json +3 -0
  114. package/.next/server/app/api/ide/opencode/save/route/build-manifest.json +11 -0
  115. package/.next/server/app/api/ide/opencode/save/route/server-reference-manifest.json +4 -0
  116. package/.next/server/app/api/ide/opencode/save/route.js +7 -0
  117. package/.next/server/app/api/ide/opencode/save/route.js.map +5 -0
  118. package/.next/server/app/api/ide/opencode/save/route.js.nft.json +1 -0
  119. package/.next/server/app/api/ide/opencode/save/route_client-reference-manifest.js +2 -0
  120. package/.next/server/app/api/ide/opencode/status/route/app-paths-manifest.json +3 -0
  121. package/.next/server/app/api/ide/opencode/status/route/build-manifest.json +11 -0
  122. package/.next/server/app/api/ide/opencode/status/route/server-reference-manifest.json +4 -0
  123. package/.next/server/app/api/ide/opencode/status/route.js +7 -0
  124. package/.next/server/app/api/ide/opencode/status/route.js.map +5 -0
  125. package/.next/server/app/api/ide/opencode/status/route.js.nft.json +1 -0
  126. package/.next/server/app/api/ide/opencode/status/route_client-reference-manifest.js +2 -0
  127. package/.next/server/app/api/ide/opencode/test/route/app-paths-manifest.json +3 -0
  128. package/.next/server/app/api/ide/opencode/test/route/build-manifest.json +11 -0
  129. package/.next/server/app/api/ide/opencode/test/route/server-reference-manifest.json +4 -0
  130. package/.next/server/app/api/ide/opencode/test/route.js +6 -0
  131. package/.next/server/app/api/ide/opencode/test/route.js.map +5 -0
  132. package/.next/server/app/api/ide/opencode/test/route.js.nft.json +1 -0
  133. package/.next/server/app/api/ide/opencode/test/route_client-reference-manifest.js +2 -0
  134. package/.next/server/app/api/logs/route.js.nft.json +1 -1
  135. package/.next/server/app/api/models/route.js.nft.json +1 -1
  136. package/.next/server/app/api/providers/route.js.nft.json +1 -1
  137. package/.next/server/app/api/providers/test/route.js.nft.json +1 -1
  138. package/.next/server/app/api/service/force-stop/route.js.nft.json +1 -1
  139. package/.next/server/app/api/service/start/route.js.nft.json +1 -1
  140. package/.next/server/app/api/service/status/route.js.nft.json +1 -1
  141. package/.next/server/app/api/service/stop/route.js.nft.json +1 -1
  142. package/.next/server/app/ide/page.js +1 -1
  143. package/.next/server/app/ide/page.js.nft.json +1 -1
  144. package/.next/server/app/ide/page_client-reference-manifest.js +1 -1
  145. package/.next/server/app/ide.html +1 -1
  146. package/.next/server/app/ide.rsc +3 -3
  147. package/.next/server/app/ide.segments/_full.segment.rsc +3 -3
  148. package/.next/server/app/ide.segments/_head.segment.rsc +1 -1
  149. package/.next/server/app/ide.segments/_index.segment.rsc +2 -2
  150. package/.next/server/app/ide.segments/_tree.segment.rsc +2 -2
  151. package/.next/server/app/ide.segments/ide/__PAGE__.segment.rsc +2 -2
  152. package/.next/server/app/ide.segments/ide.segment.rsc +1 -1
  153. package/.next/server/app/index.html +1 -1
  154. package/.next/server/app/index.rsc +2 -2
  155. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  156. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  157. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  158. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  159. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  160. package/.next/server/app/logs/page.js +1 -1
  161. package/.next/server/app/logs/page.js.nft.json +1 -1
  162. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  163. package/.next/server/app/logs.html +1 -1
  164. package/.next/server/app/logs.rsc +3 -3
  165. package/.next/server/app/logs.segments/_full.segment.rsc +3 -3
  166. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  167. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  168. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  169. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +2 -2
  170. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  171. package/.next/server/app/models/page.js +1 -1
  172. package/.next/server/app/models/page.js.nft.json +1 -1
  173. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  174. package/.next/server/app/models.html +1 -1
  175. package/.next/server/app/models.rsc +2 -2
  176. package/.next/server/app/models.segments/_full.segment.rsc +2 -2
  177. package/.next/server/app/models.segments/_head.segment.rsc +1 -1
  178. package/.next/server/app/models.segments/_index.segment.rsc +2 -2
  179. package/.next/server/app/models.segments/_tree.segment.rsc +2 -2
  180. package/.next/server/app/models.segments/models/__PAGE__.segment.rsc +1 -1
  181. package/.next/server/app/models.segments/models.segment.rsc +1 -1
  182. package/.next/server/app/page.js +1 -1
  183. package/.next/server/app/page.js.nft.json +1 -1
  184. package/.next/server/app/page_client-reference-manifest.js +1 -1
  185. package/.next/server/app/providers/page.js +1 -1
  186. package/.next/server/app/providers/page.js.nft.json +1 -1
  187. package/.next/server/app/providers/page_client-reference-manifest.js +1 -1
  188. package/.next/server/app/providers.html +1 -1
  189. package/.next/server/app/providers.rsc +2 -2
  190. package/.next/server/app/providers.segments/_full.segment.rsc +2 -2
  191. package/.next/server/app/providers.segments/_head.segment.rsc +1 -1
  192. package/.next/server/app/providers.segments/_index.segment.rsc +2 -2
  193. package/.next/server/app/providers.segments/_tree.segment.rsc +2 -2
  194. package/.next/server/app/providers.segments/providers/__PAGE__.segment.rsc +1 -1
  195. package/.next/server/app/providers.segments/providers.segment.rsc +1 -1
  196. package/.next/server/app-paths-manifest.json +14 -0
  197. package/.next/server/chunks/[root-of-the-server]__001d5756._.js +3 -0
  198. package/.next/server/chunks/[root-of-the-server]__001d5756._.js.map +1 -0
  199. package/.next/server/chunks/[root-of-the-server]__05f8578b._.js +3 -0
  200. package/.next/server/chunks/[root-of-the-server]__05f8578b._.js.map +1 -0
  201. package/.next/server/chunks/[root-of-the-server]__1480f018._.js +1 -1
  202. package/.next/server/chunks/[root-of-the-server]__1480f018._.js.map +1 -1
  203. package/.next/server/chunks/[root-of-the-server]__1909f3aa._.js +1 -1
  204. package/.next/server/chunks/[root-of-the-server]__1909f3aa._.js.map +1 -1
  205. package/.next/server/chunks/[root-of-the-server]__1d4b7fc5._.js +1 -1
  206. package/.next/server/chunks/[root-of-the-server]__1d4b7fc5._.js.map +1 -1
  207. package/.next/server/chunks/[root-of-the-server]__372ef2bf._.js +1 -1
  208. package/.next/server/chunks/[root-of-the-server]__372ef2bf._.js.map +1 -1
  209. package/.next/server/chunks/[root-of-the-server]__3aaf963c._.js +1 -1
  210. package/.next/server/chunks/[root-of-the-server]__3aaf963c._.js.map +1 -1
  211. package/.next/server/chunks/[root-of-the-server]__43810962._.js +3 -0
  212. package/.next/server/chunks/[root-of-the-server]__43810962._.js.map +1 -0
  213. package/.next/server/chunks/[root-of-the-server]__55cd88b8._.js +3 -0
  214. package/.next/server/chunks/[root-of-the-server]__55cd88b8._.js.map +1 -0
  215. package/.next/server/chunks/[root-of-the-server]__5e8276bc._.js +1 -1
  216. package/.next/server/chunks/[root-of-the-server]__5e8276bc._.js.map +1 -1
  217. package/.next/server/chunks/[root-of-the-server]__6ce199d2._.js +1 -1
  218. package/.next/server/chunks/[root-of-the-server]__6ce199d2._.js.map +1 -1
  219. package/.next/server/chunks/[root-of-the-server]__760eaa16._.js +3 -0
  220. package/.next/server/chunks/[root-of-the-server]__760eaa16._.js.map +1 -0
  221. package/.next/server/chunks/[root-of-the-server]__772134c6._.js +1 -1
  222. package/.next/server/chunks/[root-of-the-server]__772134c6._.js.map +1 -1
  223. package/.next/server/chunks/[root-of-the-server]__7b77f523._.js +1 -1
  224. package/.next/server/chunks/[root-of-the-server]__7b77f523._.js.map +1 -1
  225. package/.next/server/chunks/[root-of-the-server]__7c298a19._.js +3 -0
  226. package/.next/server/chunks/[root-of-the-server]__7c298a19._.js.map +1 -0
  227. package/.next/server/chunks/[root-of-the-server]__85540228._.js +3 -0
  228. package/.next/server/chunks/[root-of-the-server]__85540228._.js.map +1 -0
  229. package/.next/server/chunks/[root-of-the-server]__94fe8d3c._.js +3 -0
  230. package/.next/server/chunks/[root-of-the-server]__94fe8d3c._.js.map +1 -0
  231. package/.next/server/chunks/[root-of-the-server]__97622908._.js +3 -0
  232. package/.next/server/chunks/[root-of-the-server]__97622908._.js.map +1 -0
  233. package/.next/server/chunks/[root-of-the-server]__a02e6618._.js +3 -0
  234. package/.next/server/chunks/[root-of-the-server]__a02e6618._.js.map +1 -0
  235. package/.next/server/chunks/[root-of-the-server]__a32a20a7._.js +3 -0
  236. package/.next/server/chunks/[root-of-the-server]__a32a20a7._.js.map +1 -0
  237. package/.next/server/chunks/[root-of-the-server]__af5b556a._.js +3 -0
  238. package/.next/server/chunks/[root-of-the-server]__af5b556a._.js.map +1 -0
  239. package/.next/server/chunks/[root-of-the-server]__c1b4b601._.js +18 -18
  240. package/.next/server/chunks/[root-of-the-server]__c1b4b601._.js.map +1 -1
  241. package/.next/server/chunks/[root-of-the-server]__cafe113e._.js +3 -0
  242. package/.next/server/chunks/[root-of-the-server]__cafe113e._.js.map +1 -0
  243. package/.next/server/chunks/[root-of-the-server]__ccfc7f1d._.js +1 -1
  244. package/.next/server/chunks/[root-of-the-server]__ccfc7f1d._.js.map +1 -1
  245. package/.next/server/chunks/[root-of-the-server]__dc8b0bed._.js +3 -0
  246. package/.next/server/chunks/[root-of-the-server]__dc8b0bed._.js.map +1 -0
  247. package/.next/server/chunks/[root-of-the-server]__f8949f88._.js +1 -1
  248. package/.next/server/chunks/[root-of-the-server]__f8949f88._.js.map +1 -1
  249. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_apply_route_actions_2cb9e4b4.js +3 -0
  250. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_apply_route_actions_2cb9e4b4.js.map +1 -0
  251. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_preview_route_actions_9814a8e4.js +3 -0
  252. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_preview_route_actions_9814a8e4.js.map +1 -0
  253. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_restore_route_actions_10ad8f9d.js +3 -0
  254. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_restore_route_actions_10ad8f9d.js.map +1 -0
  255. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_save_route_actions_044ad081.js +3 -0
  256. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_save_route_actions_044ad081.js.map +1 -0
  257. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_status_route_actions_ed9786d2.js +3 -0
  258. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_status_route_actions_ed9786d2.js.map +1 -0
  259. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_test_route_actions_ce2cb808.js +3 -0
  260. package/.next/server/chunks/_next-internal_server_app_api_ide_openclaw_test_route_actions_ce2cb808.js.map +1 -0
  261. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_apply_route_actions_6c422244.js +3 -0
  262. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_apply_route_actions_6c422244.js.map +1 -0
  263. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_preview_route_actions_256c82e0.js +3 -0
  264. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_preview_route_actions_256c82e0.js.map +1 -0
  265. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_restore_route_actions_371993d3.js +3 -0
  266. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_restore_route_actions_371993d3.js.map +1 -0
  267. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_save_route_actions_6e4c9c41.js +3 -0
  268. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_save_route_actions_6e4c9c41.js.map +1 -0
  269. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_status_route_actions_498ad77b.js +3 -0
  270. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_status_route_actions_498ad77b.js.map +1 -0
  271. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_test_route_actions_c71be510.js +3 -0
  272. package/.next/server/chunks/_next-internal_server_app_api_ide_opencode_test_route_actions_c71be510.js.map +1 -0
  273. package/.next/server/chunks/ce889_server_app_api_ide_openclaw_available-models_route_actions_e568e70b.js +3 -0
  274. package/.next/server/chunks/ce889_server_app_api_ide_openclaw_available-models_route_actions_e568e70b.js.map +1 -0
  275. package/.next/server/chunks/ce889_server_app_api_ide_opencode_available-models_route_actions_95230db3.js +3 -0
  276. package/.next/server/chunks/ce889_server_app_api_ide_opencode_available-models_route_actions_95230db3.js.map +1 -0
  277. package/.next/server/chunks/ssr/{[root-of-the-server]__bec95712._.js → [root-of-the-server]__81937253._.js} +2 -2
  278. package/.next/server/chunks/ssr/{[root-of-the-server]__bec95712._.js.map → [root-of-the-server]__81937253._.js.map} +1 -1
  279. package/.next/server/chunks/ssr/{[root-of-the-server]__71c85955._.js → [root-of-the-server]__976ad963._.js} +2 -2
  280. package/.next/server/chunks/ssr/{[root-of-the-server]__71c85955._.js.map → [root-of-the-server]__976ad963._.js.map} +1 -1
  281. package/.next/server/chunks/ssr/src_app_ide_page_tsx_8962793b._.js +1 -1
  282. package/.next/server/chunks/ssr/src_app_ide_page_tsx_8962793b._.js.map +1 -1
  283. package/.next/server/chunks/ssr/src_app_logs_page_tsx_7b7b7b83._.js +1 -1
  284. package/.next/server/chunks/ssr/src_app_logs_page_tsx_7b7b7b83._.js.map +1 -1
  285. package/.next/server/pages/404.html +1 -1
  286. package/.next/server/pages/500.html +2 -2
  287. package/.next/static/chunks/0f120c117962200b.css +1 -0
  288. package/.next/static/chunks/64f547b3bcd3aef4.js +1 -0
  289. package/.next/static/chunks/{81c904164fe81379.js → 7c8b7cbb3339f139.js} +1 -1
  290. package/.next/static/chunks/8ed839b2e4948968.js +1 -0
  291. package/.next/types/routes.d.ts +15 -1
  292. package/.next/types/validator.ts +126 -0
  293. package/README.md +100 -111
  294. package/dist/.next/dev/types/validator.js +56 -0
  295. package/dist/.next/types/validator.js +56 -0
  296. package/dist/src/app/api/gateway/[...path]/route.js +1 -1
  297. package/dist/src/app/api/gateway/route.js +1 -1
  298. package/dist/src/app/api/ide/claude/apply/route.js +42 -31
  299. package/dist/src/app/api/ide/claude/status/route.js +6 -1
  300. package/dist/src/app/api/ide/openclaw/apply/route.js +92 -0
  301. package/dist/src/app/api/ide/openclaw/available-models/route.js +46 -0
  302. package/dist/src/app/api/ide/openclaw/build-config.js +101 -0
  303. package/dist/src/app/api/ide/openclaw/preview/route.js +49 -0
  304. package/dist/src/app/api/ide/openclaw/restore/route.js +24 -0
  305. package/dist/src/app/api/ide/openclaw/save/route.js +54 -0
  306. package/dist/src/app/api/ide/openclaw/status/route.js +139 -0
  307. package/dist/src/app/api/ide/openclaw/test/route.js +158 -0
  308. package/dist/src/app/api/ide/opencode/apply/route.js +89 -0
  309. package/dist/src/app/api/ide/opencode/available-models/route.js +46 -0
  310. package/dist/src/app/api/ide/opencode/build-config.js +54 -0
  311. package/dist/src/app/api/ide/opencode/preview/route.js +36 -0
  312. package/dist/src/app/api/ide/opencode/restore/route.js +40 -0
  313. package/dist/src/app/api/ide/opencode/save/route.js +123 -0
  314. package/dist/src/app/api/ide/opencode/status/route.js +106 -0
  315. package/dist/src/app/api/ide/opencode/test/route.js +136 -0
  316. package/dist/src/app/api/logs/route.js +2 -2
  317. package/dist/src/app/api/models/route.js +5 -5
  318. package/dist/src/app/api/providers/route.js +4 -4
  319. package/dist/src/app/api/providers/test/route.js +1 -1
  320. package/dist/src/app/api/service/start/route.js +1 -1
  321. package/dist/src/app/api/service/status/route.js +1 -1
  322. package/dist/src/app/api/service/stop/route.js +1 -1
  323. package/dist/src/app/ide/page.js +591 -81
  324. package/dist/src/app/logs/page.js +15 -1
  325. package/dist/src/cli/index.js +218 -20
  326. package/dist/src/db/database.js +56 -5
  327. package/dist/src/db/queries.js +6 -6
  328. package/dist/src/server/logger.js +22 -4
  329. package/package.json +2 -1
  330. package/src/app/api/gateway/[...path]/route.ts +1 -1
  331. package/src/app/api/gateway/route.ts +1 -1
  332. package/src/app/api/ide/claude/apply/route.ts +46 -31
  333. package/src/app/api/ide/claude/status/route.ts +12 -2
  334. package/src/app/api/ide/openclaw/apply/route.ts +103 -0
  335. package/src/app/api/ide/openclaw/available-models/route.ts +59 -0
  336. package/src/app/api/ide/openclaw/build-config.ts +152 -0
  337. package/src/app/api/ide/openclaw/preview/route.ts +57 -0
  338. package/src/app/api/ide/openclaw/restore/route.ts +27 -0
  339. package/src/app/api/ide/openclaw/save/route.ts +67 -0
  340. package/src/app/api/ide/openclaw/status/route.ts +178 -0
  341. package/src/app/api/ide/openclaw/test/route.ts +194 -0
  342. package/src/app/api/ide/opencode/apply/route.ts +92 -0
  343. package/src/app/api/ide/opencode/available-models/route.ts +59 -0
  344. package/src/app/api/ide/opencode/build-config.ts +69 -0
  345. package/src/app/api/ide/opencode/preview/route.ts +40 -0
  346. package/src/app/api/ide/opencode/restore/route.ts +52 -0
  347. package/src/app/api/ide/opencode/save/route.ts +131 -0
  348. package/src/app/api/ide/opencode/status/route.ts +128 -0
  349. package/src/app/api/ide/opencode/test/route.ts +145 -0
  350. package/src/app/api/logs/route.ts +2 -2
  351. package/src/app/api/models/route.ts +5 -5
  352. package/src/app/api/providers/route.ts +4 -4
  353. package/src/app/api/providers/test/route.ts +1 -1
  354. package/src/app/api/service/start/route.ts +1 -1
  355. package/src/app/api/service/status/route.ts +1 -1
  356. package/src/app/api/service/stop/route.ts +1 -1
  357. package/src/app/globals.css +17 -0
  358. package/src/app/ide/page.tsx +1535 -132
  359. package/src/app/logs/page.tsx +17 -5
  360. package/src/cli/index.ts +228 -25
  361. package/src/db/database.ts +60 -8
  362. package/src/db/queries.ts +6 -6
  363. package/src/server/logger.ts +19 -4
  364. package/.next/static/chunks/6418ca50028376b7.css +0 -1
  365. package/.next/static/chunks/9ec3b97741b6575e.js +0 -1
  366. /package/.next/static/{PkfqdzwOZgX-UhSNUuhdp → dYin74gcpdlg8TGoGv-_d}/_buildManifest.js +0 -0
  367. /package/.next/static/{PkfqdzwOZgX-UhSNUuhdp → dYin74gcpdlg8TGoGv-_d}/_clientMiddlewareManifest.json +0 -0
  368. /package/.next/static/{PkfqdzwOZgX-UhSNUuhdp → dYin74gcpdlg8TGoGv-_d}/_ssgManifest.js +0 -0
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const server_1 = require("next/server");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const os_1 = require("os");
8
+ const build_config_1 = require("../build-config");
9
+ const OPENCLAW_DIR = (0, path_1.join)((0, os_1.homedir)(), '.openclaw');
10
+ const OPENCLAW_FILE = (0, path_1.join)(OPENCLAW_DIR, 'openclaw.json');
11
+ const BACKUP_FILE = (0, path_1.join)(OPENCLAW_DIR, 'openclaw.json.aar.bak');
12
+ function backupOriginalConfig() {
13
+ try {
14
+ const existing = (0, fs_1.existsSync)(OPENCLAW_FILE);
15
+ if (existing) {
16
+ const original = (0, fs_1.readFileSync)(OPENCLAW_FILE, 'utf-8');
17
+ let isFromAar = false;
18
+ try {
19
+ const parsed = JSON.parse(original);
20
+ isFromAar = !!(parsed.models?.providers?.['aar-gateway']);
21
+ }
22
+ catch { }
23
+ // 仅在当前配置不是 AAR 时写入备份,这样「还原」才能恢复到应用 AAR 前的状态;若已是 AAR 则保留原有备份不覆盖
24
+ if (!isFromAar) {
25
+ (0, fs_1.writeFileSync)(BACKUP_FILE, original, 'utf-8');
26
+ }
27
+ return { success: true, existed: true, isFromAar };
28
+ }
29
+ return { success: true, existed: false, isFromAar: false };
30
+ }
31
+ catch (error) {
32
+ return { success: false, existed: false, isFromAar: false, error: `Backup failed: ${error.message}` };
33
+ }
34
+ }
35
+ async function POST(request) {
36
+ try {
37
+ const body = await request.json();
38
+ const { default_model: defaultModel, default_fallbacks: defaultFallbacks = [], image_model: imageModel, image_fallbacks: imageFallbacks = [], config: customConfigStr, } = body;
39
+ let existing = null;
40
+ if ((0, fs_1.existsSync)(OPENCLAW_FILE)) {
41
+ try {
42
+ existing = JSON.parse((0, fs_1.readFileSync)(OPENCLAW_FILE, 'utf-8'));
43
+ }
44
+ catch {
45
+ existing = null;
46
+ }
47
+ }
48
+ let config;
49
+ if (typeof customConfigStr === 'string' && customConfigStr.trim()) {
50
+ try {
51
+ config = JSON.parse(customConfigStr);
52
+ if (!config || typeof config !== 'object')
53
+ throw new Error('Invalid config object');
54
+ }
55
+ catch (e) {
56
+ return server_1.NextResponse.json({ error: 'Invalid config JSON: ' + (e.message || 'parse error') }, { status: 400 });
57
+ }
58
+ }
59
+ else {
60
+ if (!defaultModel) {
61
+ return server_1.NextResponse.json({ error: 'Missing required field: default_model' }, { status: 400 });
62
+ }
63
+ config = await (0, build_config_1.buildMergedConfig)({
64
+ defaultModel,
65
+ defaultFallbacks,
66
+ imageModel: imageModel || undefined,
67
+ imageFallbacks,
68
+ }, existing);
69
+ }
70
+ const backupResult = backupOriginalConfig();
71
+ if (!backupResult.success) {
72
+ return server_1.NextResponse.json({ error: backupResult.error }, { status: 500 });
73
+ }
74
+ if (!(0, fs_1.existsSync)(OPENCLAW_DIR)) {
75
+ (0, fs_1.mkdirSync)(OPENCLAW_DIR, { recursive: true });
76
+ }
77
+ const jsonString = JSON.stringify(config, null, 2);
78
+ (0, fs_1.writeFileSync)(OPENCLAW_FILE, jsonString, 'utf-8');
79
+ const alreadyHadAar = !!(existing?.models?.providers?.['aar-gateway']);
80
+ return server_1.NextResponse.json({
81
+ success: true,
82
+ message: alreadyHadAar ? 'OpenClaw 配置已更新为最新网关信息' : 'OpenClaw configuration applied successfully',
83
+ config,
84
+ backup: backupResult.existed ? 'Created backup' : 'No existing config to backup',
85
+ previousWasFromAar: backupResult.existed && backupResult.isFromAar,
86
+ });
87
+ }
88
+ catch (error) {
89
+ console.error('OpenClaw Apply API error:', error);
90
+ return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
91
+ }
92
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const server_1 = require("next/server");
5
+ const queries_1 = require("@/db/queries");
6
+ /**
7
+ * 查询可用模型列表(与 Claude 共用网关,用于 OpenCode 配置)
8
+ */
9
+ async function GET(request) {
10
+ try {
11
+ const allModels = (await (0, queries_1.getAllModels)()).filter((m) => m.enabled);
12
+ if (allModels.length === 0) {
13
+ return server_1.NextResponse.json({
14
+ models: {},
15
+ count: 0,
16
+ message: 'No enabled models found. Please enable some models first.',
17
+ });
18
+ }
19
+ const grouped = await allModels.reduce(async (acc, model) => {
20
+ const resolvedAcc = await acc;
21
+ const provider = await (0, queries_1.getProviderById)(model.provider_id);
22
+ if (provider) {
23
+ if (!resolvedAcc[provider.name])
24
+ resolvedAcc[provider.name] = [];
25
+ resolvedAcc[provider.name].push({
26
+ id: model.id,
27
+ name: model.name,
28
+ model_id: model.model_id,
29
+ provider_id: model.provider_id,
30
+ provider_name: provider.name,
31
+ enabled: model.enabled,
32
+ });
33
+ }
34
+ return resolvedAcc;
35
+ }, Promise.resolve({}));
36
+ return server_1.NextResponse.json({
37
+ models: grouped,
38
+ count: allModels.length,
39
+ providers: Object.keys(grouped),
40
+ });
41
+ }
42
+ catch (error) {
43
+ console.error('OpenCode Available Models API error:', error);
44
+ return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
45
+ }
46
+ }
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGatewayAddress = getGatewayAddress;
4
+ exports.getGatewayApiKey = getGatewayApiKey;
5
+ exports.buildAarGatewayProvider = buildAarGatewayProvider;
6
+ exports.mergeConfigWithAar = mergeConfigWithAar;
7
+ exports.buildMergedConfig = buildMergedConfig;
8
+ const database_1 = require("@/db/database");
9
+ const queries_1 = require("@/db/queries");
10
+ const queries_2 = require("@/db/queries");
11
+ async function getGatewayAddress() {
12
+ await (0, database_1.getDatabase)();
13
+ const portConfig = await (0, queries_1.getConfig)('port');
14
+ const port = portConfig?.value || '1357';
15
+ return `http://localhost:${port}/v1`;
16
+ }
17
+ async function getGatewayApiKey() {
18
+ await (0, database_1.getDatabase)();
19
+ const apiKeyConfig = await (0, queries_1.getConfig)('api_key');
20
+ return apiKeyConfig?.value || 'your-gateway-api-key';
21
+ }
22
+ async function buildAarGatewayProvider() {
23
+ const gatewayAddress = await getGatewayAddress();
24
+ const gatewayApiKey = await getGatewayApiKey();
25
+ const allModels = (await (0, queries_2.getAllModels)()).filter((m) => m.enabled);
26
+ const models = allModels.map((m) => ({
27
+ id: m.model_id,
28
+ name: m.name,
29
+ reasoning: m.reasoning || false,
30
+ input: m.input || ['text'],
31
+ cost: m.cost || { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
32
+ contextWindow: m.context_window || 200000,
33
+ maxTokens: m.max_tokens || 8192,
34
+ }));
35
+ return {
36
+ baseUrl: gatewayAddress,
37
+ apiKey: gatewayApiKey,
38
+ api: 'openai-completions',
39
+ models,
40
+ };
41
+ }
42
+ const AAR_PROVIDER_ID = 'aar-gateway';
43
+ /** Merge existing OpenClaw config with AAR gateway */
44
+ function mergeConfigWithAar(existing, config, aarProvider) {
45
+ const base = existing && typeof existing === 'object' ? { ...existing } : {};
46
+ // Update models.providers
47
+ const modelsConfig = base.models || {};
48
+ const providers = modelsConfig.providers || {};
49
+ providers[AAR_PROVIDER_ID] = aarProvider;
50
+ modelsConfig.providers = providers;
51
+ modelsConfig.mode = 'merge';
52
+ base.models = modelsConfig;
53
+ // Update agents.defaults.model
54
+ const agents = base.agents || {};
55
+ const defaults = agents.defaults || {};
56
+ const model = defaults.model || {};
57
+ // Format: provider/model
58
+ const fullModelId = `${AAR_PROVIDER_ID}/${config.defaultModel}`;
59
+ const fullImageModelId = config.imageModel
60
+ ? `${AAR_PROVIDER_ID}/${config.imageModel}`
61
+ : undefined;
62
+ model.primary = fullModelId;
63
+ if (config.defaultFallbacks && config.defaultFallbacks.length > 0) {
64
+ model.fallbacks = config.defaultFallbacks.map((m) => m.startsWith(`${AAR_PROVIDER_ID}/`) ? m : `${AAR_PROVIDER_ID}/${m}`);
65
+ }
66
+ else {
67
+ delete model.fallbacks;
68
+ }
69
+ defaults.model = model;
70
+ // Update agents.defaults.imageModel
71
+ const imageModel = defaults.imageModel || {};
72
+ if (fullImageModelId) {
73
+ imageModel.primary = fullImageModelId;
74
+ }
75
+ if (config.imageFallbacks && config.imageFallbacks.length > 0) {
76
+ imageModel.fallbacks = config.imageFallbacks.map((m) => m.startsWith(`${AAR_PROVIDER_ID}/`) ? m : `${AAR_PROVIDER_ID}/${m}`);
77
+ }
78
+ else {
79
+ delete imageModel.fallbacks;
80
+ }
81
+ defaults.imageModel = imageModel;
82
+ // Update agents.defaults.models so OpenClaw can resolve aar-gateway model ids (alias, etc.)
83
+ const modelsMap = defaults.models || {};
84
+ for (const m of aarProvider.models) {
85
+ const fullId = `${AAR_PROVIDER_ID}/${m.id}`;
86
+ modelsMap[fullId] = modelsMap[fullId] || { alias: m.name };
87
+ }
88
+ defaults.models = modelsMap;
89
+ agents.defaults = defaults;
90
+ base.agents = agents;
91
+ // Ensure channels exists (even if empty)
92
+ if (!base.channels) {
93
+ base.channels = {};
94
+ }
95
+ return base;
96
+ }
97
+ /** Generate merged config for preview or apply */
98
+ async function buildMergedConfig(config, existing) {
99
+ const aarProvider = await buildAarGatewayProvider();
100
+ return mergeConfigWithAar(existing, config, aarProvider);
101
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const server_1 = require("next/server");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const os_1 = require("os");
8
+ const build_config_1 = require("../build-config");
9
+ const OPENCLAW_FILE = (0, path_1.join)((0, os_1.homedir)(), '.openclaw', 'openclaw.json');
10
+ async function GET(request) {
11
+ try {
12
+ const { searchParams } = new URL(request.url);
13
+ const defaultModel = searchParams.get('default_model') || '';
14
+ const defaultFallbacksStr = searchParams.get('default_fallbacks') || '';
15
+ const imageModel = searchParams.get('image_model') || '';
16
+ const imageFallbacksStr = searchParams.get('image_fallbacks') || '';
17
+ if (!defaultModel) {
18
+ return server_1.NextResponse.json({ error: 'Missing query: default_model' }, { status: 400 });
19
+ }
20
+ // Parse fallback arrays
21
+ const defaultFallbacks = defaultFallbacksStr
22
+ ? defaultFallbacksStr.split(',').filter(Boolean)
23
+ : [];
24
+ const imageFallbacks = imageFallbacksStr
25
+ ? imageFallbacksStr.split(',').filter(Boolean)
26
+ : [];
27
+ let existingConfig = null;
28
+ if ((0, fs_1.existsSync)(OPENCLAW_FILE)) {
29
+ try {
30
+ const content = (0, fs_1.readFileSync)(OPENCLAW_FILE, 'utf-8');
31
+ existingConfig = JSON.parse(content);
32
+ }
33
+ catch (e) {
34
+ // If file exists but is invalid, treat as empty
35
+ }
36
+ }
37
+ const config = await (0, build_config_1.buildMergedConfig)({
38
+ defaultModel,
39
+ defaultFallbacks,
40
+ imageModel: imageModel || undefined,
41
+ imageFallbacks,
42
+ }, existingConfig);
43
+ return server_1.NextResponse.json({ config });
44
+ }
45
+ catch (error) {
46
+ console.error('OpenClaw Preview API error:', error);
47
+ return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
48
+ }
49
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const server_1 = require("next/server");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const os_1 = require("os");
8
+ const OPENCLAW_DIR = (0, path_1.join)((0, os_1.homedir)(), '.openclaw');
9
+ const OPENCLAW_FILE = (0, path_1.join)(OPENCLAW_DIR, 'openclaw.json');
10
+ const BACKUP_FILE = (0, path_1.join)(OPENCLAW_DIR, 'openclaw.json.aar.bak');
11
+ async function POST() {
12
+ try {
13
+ if (!(0, fs_1.existsSync)(BACKUP_FILE)) {
14
+ return server_1.NextResponse.json({ error: 'No backup file found' }, { status: 404 });
15
+ }
16
+ (0, fs_1.copyFileSync)(BACKUP_FILE, OPENCLAW_FILE);
17
+ (0, fs_1.unlinkSync)(BACKUP_FILE);
18
+ return server_1.NextResponse.json({ success: true, message: 'Configuration restored' });
19
+ }
20
+ catch (error) {
21
+ console.error('OpenClaw Restore API error:', error);
22
+ return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
23
+ }
24
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const server_1 = require("next/server");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const os_1 = require("os");
8
+ const build_config_1 = require("../build-config");
9
+ const AAR_DIR = (0, path_1.join)((0, os_1.homedir)(), '.aar');
10
+ const TEMP_OPENCLAW_FILE = (0, path_1.join)(AAR_DIR, 'openclaw.tmp.json');
11
+ const OPENCLAW_FILE = (0, path_1.join)((0, os_1.homedir)(), '.openclaw', 'openclaw.json');
12
+ async function POST(request) {
13
+ try {
14
+ const body = await request.json();
15
+ const { default_model: defaultModel, default_fallbacks: defaultFallbacks = [], image_model: imageModel, image_fallbacks: imageFallbacks = [], } = body;
16
+ if (!(0, fs_1.existsSync)(AAR_DIR)) {
17
+ (0, fs_1.mkdirSync)(AAR_DIR, { recursive: true });
18
+ }
19
+ let existing = null;
20
+ if ((0, fs_1.existsSync)(OPENCLAW_FILE)) {
21
+ try {
22
+ existing = JSON.parse((0, fs_1.readFileSync)(OPENCLAW_FILE, 'utf-8'));
23
+ }
24
+ catch {
25
+ existing = null;
26
+ }
27
+ }
28
+ // Build the merged config
29
+ const mergedConfig = await (0, build_config_1.buildMergedConfig)({
30
+ defaultModel,
31
+ defaultFallbacks,
32
+ imageModel,
33
+ imageFallbacks,
34
+ }, existing);
35
+ // Save to temp file
36
+ const tempData = {
37
+ defaultModel,
38
+ defaultFallbacks,
39
+ imageModel,
40
+ imageFallbacks,
41
+ updatedAt: new Date().toISOString(),
42
+ };
43
+ (0, fs_1.writeFileSync)(TEMP_OPENCLAW_FILE, JSON.stringify(tempData, null, 2), 'utf-8');
44
+ return server_1.NextResponse.json({
45
+ success: true,
46
+ saveType: 'temp',
47
+ message: 'Configuration saved temporarily'
48
+ });
49
+ }
50
+ catch (error) {
51
+ console.error('OpenClaw Save API error:', error);
52
+ return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
53
+ }
54
+ }
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const server_1 = require("next/server");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const os_1 = require("os");
8
+ const database_1 = require("@/db/database");
9
+ const queries_1 = require("@/db/queries");
10
+ const OPENCLAW_DIR = (0, path_1.join)((0, os_1.homedir)(), '.openclaw');
11
+ const OPENCLAW_FILE = (0, path_1.join)(OPENCLAW_DIR, 'openclaw.json');
12
+ const BACKUP_FILE = (0, path_1.join)(OPENCLAW_DIR, 'openclaw.json.aar.bak');
13
+ const AAR_DIR = (0, path_1.join)((0, os_1.homedir)(), '.aar');
14
+ const TEMP_OPENCLAW_FILE = (0, path_1.join)(AAR_DIR, 'openclaw.tmp.json');
15
+ function maskApiKey(apiKey) {
16
+ if (!apiKey || apiKey === 'your-gateway-api-key')
17
+ return apiKey;
18
+ if (apiKey.length <= 8)
19
+ return apiKey.slice(0, 2) + '***' + apiKey.slice(-2);
20
+ return apiKey.slice(0, 4) + '****' + apiKey.slice(-4);
21
+ }
22
+ async function GET(request) {
23
+ try {
24
+ const fileExists = (0, fs_1.existsSync)(OPENCLAW_FILE);
25
+ const backupExists = (0, fs_1.existsSync)(BACKUP_FILE);
26
+ await (0, database_1.getDatabase)();
27
+ const gatewayApiKeyConfig = await (0, queries_1.getConfig)('api_key');
28
+ const portConfig = await (0, queries_1.getConfig)('port');
29
+ const gatewayApiKey = gatewayApiKeyConfig?.value || 'your-gateway-api-key';
30
+ const gatewayAddress = `http://localhost:${portConfig?.value || '1357'}/v1`;
31
+ // Read temp config if exists
32
+ let tempConfig = {};
33
+ if ((0, fs_1.existsSync)(TEMP_OPENCLAW_FILE)) {
34
+ try {
35
+ tempConfig = JSON.parse((0, fs_1.readFileSync)(TEMP_OPENCLAW_FILE, 'utf-8'));
36
+ }
37
+ catch { }
38
+ }
39
+ if (!fileExists) {
40
+ return server_1.NextResponse.json({
41
+ applied: false,
42
+ defaultModel: tempConfig.defaultModel,
43
+ defaultFallbacks: tempConfig.defaultFallbacks || [],
44
+ imageModel: tempConfig.imageModel,
45
+ imageFallbacks: tempConfig.imageFallbacks || [],
46
+ gatewayAddress,
47
+ apiKey: maskApiKey(gatewayApiKey),
48
+ backupExists: false,
49
+ lastUpdated: undefined,
50
+ matchCurrentGateway: false,
51
+ routerProvider: undefined,
52
+ tempDefaultModel: tempConfig.defaultModel,
53
+ tempDefaultFallbacks: tempConfig.defaultFallbacks || [],
54
+ tempImageModel: tempConfig.imageModel,
55
+ tempImageFallbacks: tempConfig.imageFallbacks || [],
56
+ });
57
+ }
58
+ const content = (0, fs_1.readFileSync)(OPENCLAW_FILE, 'utf-8');
59
+ let config;
60
+ try {
61
+ config = JSON.parse(content);
62
+ }
63
+ catch {
64
+ return server_1.NextResponse.json({ error: 'Invalid openclaw.json format' }, { status: 500 });
65
+ }
66
+ const modelsConfig = config.models || {};
67
+ const providers = modelsConfig.providers || {};
68
+ const aarProvider = providers['aar-gateway'];
69
+ const appliedBaseUrl = aarProvider?.baseUrl;
70
+ const appliedApiKey = aarProvider?.apiKey;
71
+ const matchCurrentGateway = appliedBaseUrl === gatewayAddress && appliedApiKey === gatewayApiKey;
72
+ // Extract current config values
73
+ let defaultModel;
74
+ let defaultFallbacks;
75
+ let imageModel;
76
+ let imageFallbacks;
77
+ const primaryModel = config.agents?.defaults?.model?.primary;
78
+ if (typeof primaryModel === 'string' && primaryModel.startsWith('aar-gateway/')) {
79
+ defaultModel = primaryModel.slice('aar-gateway/'.length);
80
+ }
81
+ const fallbackModels = config.agents?.defaults?.model?.fallbacks;
82
+ if (Array.isArray(fallbackModels)) {
83
+ defaultFallbacks = fallbackModels.map((m) => m.startsWith('aar-gateway/') ? m.slice('aar-gateway/'.length) : m);
84
+ }
85
+ const primaryImageModel = config.agents?.defaults?.imageModel?.primary;
86
+ if (typeof primaryImageModel === 'string' && primaryImageModel.startsWith('aar-gateway/')) {
87
+ imageModel = primaryImageModel.slice('aar-gateway/'.length);
88
+ }
89
+ const fallbackImageModels = config.agents?.defaults?.imageModel?.fallbacks;
90
+ if (Array.isArray(fallbackImageModels)) {
91
+ imageFallbacks = fallbackImageModels.map((m) => m.startsWith('aar-gateway/') ? m.slice('aar-gateway/'.length) : m);
92
+ }
93
+ // OpenClaw models is an array
94
+ const modelsCount = Array.isArray(aarProvider?.models) ? aarProvider.models.length : 0;
95
+ // Use temp config if not matching current gateway
96
+ const finalDefaultModel = !matchCurrentGateway && tempConfig.defaultModel
97
+ ? tempConfig.defaultModel
98
+ : defaultModel;
99
+ const finalDefaultFallbacks = !matchCurrentGateway && tempConfig.defaultFallbacks
100
+ ? tempConfig.defaultFallbacks
101
+ : defaultFallbacks;
102
+ const finalImageModel = !matchCurrentGateway && tempConfig.imageModel
103
+ ? tempConfig.imageModel
104
+ : imageModel;
105
+ const finalImageFallbacks = !matchCurrentGateway && tempConfig.imageFallbacks
106
+ ? tempConfig.imageFallbacks
107
+ : imageFallbacks;
108
+ let lastUpdated = null;
109
+ try {
110
+ lastUpdated = new Date((0, fs_1.statSync)(OPENCLAW_FILE).mtime).toISOString();
111
+ }
112
+ catch { }
113
+ const status = {
114
+ applied: !!aarProvider,
115
+ defaultModel: finalDefaultModel,
116
+ defaultFallbacks: finalDefaultFallbacks,
117
+ imageModel: finalImageModel,
118
+ imageFallbacks: finalImageFallbacks,
119
+ gatewayAddress: appliedBaseUrl,
120
+ apiKey: maskApiKey(appliedApiKey || gatewayApiKey),
121
+ backupExists,
122
+ lastUpdated,
123
+ matchCurrentGateway,
124
+ routerProvider: aarProvider ? 'aar' : undefined,
125
+ tempDefaultModel: tempConfig.defaultModel,
126
+ tempDefaultFallbacks: tempConfig.defaultFallbacks || [],
127
+ tempImageModel: tempConfig.imageModel,
128
+ tempImageFallbacks: tempConfig.imageFallbacks || [],
129
+ providerName: 'AAR Model Router',
130
+ modelsCount,
131
+ config,
132
+ };
133
+ return server_1.NextResponse.json(status);
134
+ }
135
+ catch (error) {
136
+ console.error('OpenClaw Status API error:', error);
137
+ return server_1.NextResponse.json({ error: error.message || 'Internal server error', stack: process.env.NODE_ENV === 'development' ? error.stack : undefined }, { status: 500 });
138
+ }
139
+ }
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const server_1 = require("next/server");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const os_1 = require("os");
8
+ const child_process_1 = require("child_process");
9
+ const OPENCLAW_DIR = (0, path_1.join)((0, os_1.homedir)(), '.openclaw');
10
+ const OPENCLAW_FILE = (0, path_1.join)(OPENCLAW_DIR, 'openclaw.json');
11
+ const RUN_TIMEOUT_MS = 30000;
12
+ function runCommand(args) {
13
+ return new Promise((resolve) => {
14
+ const child = (0, child_process_1.spawn)('openclaw', args, {
15
+ shell: process.platform === 'win32',
16
+ stdio: ['ignore', 'pipe', 'pipe'],
17
+ });
18
+ let stdout = '';
19
+ let stderr = '';
20
+ child.stdout?.on('data', (chunk) => {
21
+ stdout += chunk.toString('utf-8');
22
+ });
23
+ child.stderr?.on('data', (chunk) => {
24
+ stderr += chunk.toString('utf-8');
25
+ });
26
+ child.on('error', (err) => {
27
+ resolve({ success: false, stdout, stderr, error: err.message });
28
+ });
29
+ child.on('close', (code) => {
30
+ resolve({ success: code === 0, stdout, stderr, code: code ?? undefined });
31
+ });
32
+ setTimeout(() => {
33
+ if (!child.killed) {
34
+ child.kill();
35
+ resolve({ success: false, stdout, stderr, error: 'Timeout' });
36
+ }
37
+ }, RUN_TIMEOUT_MS);
38
+ });
39
+ }
40
+ function maskApiKey(apiKey) {
41
+ if (!apiKey || apiKey === 'your-gateway-api-key')
42
+ return apiKey;
43
+ if (apiKey.length <= 8)
44
+ return apiKey.slice(0, 2) + '***' + apiKey.slice(-2);
45
+ return apiKey.slice(0, 4) + '****' + apiKey.slice(-4);
46
+ }
47
+ async function GET(request) {
48
+ try {
49
+ // Check config file exists
50
+ if (!(0, fs_1.existsSync)(OPENCLAW_FILE)) {
51
+ return server_1.NextResponse.json({
52
+ success: false,
53
+ error: 'Configuration file not found',
54
+ suggestion: 'Please apply configuration first',
55
+ });
56
+ }
57
+ const content = (0, fs_1.readFileSync)(OPENCLAW_FILE, 'utf-8');
58
+ let config;
59
+ try {
60
+ config = JSON.parse(content);
61
+ }
62
+ catch {
63
+ return server_1.NextResponse.json({
64
+ success: false,
65
+ error: 'Invalid configuration format',
66
+ });
67
+ }
68
+ // Extract config summary
69
+ const modelsConfig = config.models || {};
70
+ const providers = modelsConfig.providers || {};
71
+ const aarProvider = providers['aar-gateway'];
72
+ const configSummary = {
73
+ baseUrl: aarProvider?.baseUrl,
74
+ apiKey: maskApiKey(aarProvider?.apiKey || ''),
75
+ routerProvider: aarProvider ? 'aar' : undefined,
76
+ };
77
+ const primaryModel = config.agents?.defaults?.model?.primary;
78
+ if (primaryModel) {
79
+ configSummary.primaryModel = primaryModel;
80
+ }
81
+ const fallbackModels = config.agents?.defaults?.model?.fallbacks;
82
+ if (Array.isArray(fallbackModels)) {
83
+ configSummary.fallbackModels = fallbackModels;
84
+ }
85
+ const imageModel = config.agents?.defaults?.imageModel?.primary;
86
+ if (imageModel) {
87
+ configSummary.imageModel = imageModel;
88
+ }
89
+ const fallbackImageModels = config.agents?.defaults?.imageModel?.fallbacks;
90
+ if (Array.isArray(fallbackImageModels)) {
91
+ configSummary.fallbackImageModels = fallbackImageModels;
92
+ }
93
+ // Run probe command to test provider accessibility
94
+ const probeResult = await runCommand([
95
+ 'models', 'status',
96
+ '--probe',
97
+ '--probe-provider', 'aar-gateway',
98
+ '--json'
99
+ ]);
100
+ let probeSuccess = false;
101
+ let probeMessage = 'Provider not found or not accessible';
102
+ if (probeResult.success) {
103
+ // Try to parse JSON output
104
+ try {
105
+ const parsed = JSON.parse(probeResult.stdout);
106
+ // Check if probe was successful
107
+ probeSuccess = parsed?.success === true || parsed?.status === 'ok';
108
+ if (probeSuccess) {
109
+ probeMessage = 'Provider is accessible and responding';
110
+ }
111
+ else {
112
+ probeMessage = parsed?.message || 'Probe returned unsuccessful status';
113
+ }
114
+ }
115
+ catch {
116
+ // If not JSON, check for success indicators in text
117
+ probeSuccess = probeResult.stdout.toLowerCase().includes('ok') ||
118
+ probeResult.stdout.toLowerCase().includes('success') ||
119
+ probeResult.stdout.toLowerCase().includes('aar-gateway');
120
+ probeMessage = probeSuccess
121
+ ? 'Provider is accessible'
122
+ : 'Could not verify provider status';
123
+ }
124
+ }
125
+ else {
126
+ probeMessage = probeResult.error || `Command failed (code ${probeResult.code})`;
127
+ }
128
+ const checks = {
129
+ hasBaseUrl: !!aarProvider?.baseUrl,
130
+ hasApiKey: !!aarProvider?.apiKey && aarProvider?.apiKey !== 'your-gateway-api-key',
131
+ hasModels: Array.isArray(aarProvider?.models) && aarProvider.models.length > 0,
132
+ hasPrimaryModel: !!primaryModel,
133
+ hasProvider: !!aarProvider,
134
+ probeSuccess,
135
+ };
136
+ const success = checks.hasBaseUrl && checks.hasApiKey && checks.hasProvider && probeSuccess;
137
+ const result = {
138
+ success,
139
+ message: success ? 'Configuration verified successfully' : 'Configuration verification failed',
140
+ checks,
141
+ configSummary,
142
+ probeResult: {
143
+ success: probeSuccess,
144
+ stdout: probeResult.stdout.slice(-3000),
145
+ stderr: probeResult.stderr.slice(-500),
146
+ error: probeResult.error,
147
+ },
148
+ };
149
+ return server_1.NextResponse.json(result);
150
+ }
151
+ catch (error) {
152
+ console.error('OpenClaw Test API error:', error);
153
+ return server_1.NextResponse.json({
154
+ success: false,
155
+ error: error.message || 'Internal server error',
156
+ });
157
+ }
158
+ }