@ailog/cli 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +12 -0
  3. package/README.md +115 -18
  4. package/bin/cli.js +9 -0
  5. package/dist/client/assets/index-BBTm7Mxn.js +160 -0
  6. package/dist/client/assets/index-x-B7u97h.css +1 -0
  7. package/dist/client/index.html +19 -0
  8. package/dist/index.d.ts +122 -0
  9. package/dist/index.js +681 -0
  10. package/dist/viewer/server.js +413 -0
  11. package/package.json +65 -45
  12. package/dist/bin/cli.js +0 -1980
  13. package/dist/standalone/.next/BUILD_ID +0 -1
  14. package/dist/standalone/.next/app-path-routes-manifest.json +0 -10
  15. package/dist/standalone/.next/build-manifest.json +0 -21
  16. package/dist/standalone/.next/package.json +0 -1
  17. package/dist/standalone/.next/prerender-manifest.json +0 -118
  18. package/dist/standalone/.next/required-server-files.json +0 -333
  19. package/dist/standalone/.next/routes-manifest.json +0 -102
  20. package/dist/standalone/.next/server/app/_global-error/page/app-paths-manifest.json +0 -3
  21. package/dist/standalone/.next/server/app/_global-error/page/build-manifest.json +0 -18
  22. package/dist/standalone/.next/server/app/_global-error/page/next-font-manifest.json +0 -6
  23. package/dist/standalone/.next/server/app/_global-error/page/react-loadable-manifest.json +0 -1
  24. package/dist/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +0 -4
  25. package/dist/standalone/.next/server/app/_global-error/page.js +0 -11
  26. package/dist/standalone/.next/server/app/_global-error/page.js.map +0 -5
  27. package/dist/standalone/.next/server/app/_global-error/page.js.nft.json +0 -1
  28. package/dist/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +0 -2
  29. package/dist/standalone/.next/server/app/_global-error.html +0 -2
  30. package/dist/standalone/.next/server/app/_global-error.meta +0 -15
  31. package/dist/standalone/.next/server/app/_global-error.rsc +0 -13
  32. package/dist/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +0 -5
  33. package/dist/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +0 -13
  34. package/dist/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +0 -8
  35. package/dist/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +0 -4
  36. package/dist/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +0 -1
  37. package/dist/standalone/.next/server/app/_not-found/page/app-paths-manifest.json +0 -3
  38. package/dist/standalone/.next/server/app/_not-found/page/build-manifest.json +0 -18
  39. package/dist/standalone/.next/server/app/_not-found/page/next-font-manifest.json +0 -12
  40. package/dist/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +0 -1
  41. package/dist/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +0 -4
  42. package/dist/standalone/.next/server/app/_not-found/page.js +0 -14
  43. package/dist/standalone/.next/server/app/_not-found/page.js.map +0 -5
  44. package/dist/standalone/.next/server/app/_not-found/page.js.nft.json +0 -1
  45. package/dist/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +0 -2
  46. package/dist/standalone/.next/server/app/_not-found.html +0 -1
  47. package/dist/standalone/.next/server/app/_not-found.meta +0 -16
  48. package/dist/standalone/.next/server/app/_not-found.rsc +0 -19
  49. package/dist/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +0 -19
  50. package/dist/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +0 -8
  51. package/dist/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +0 -10
  52. package/dist/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +0 -5
  53. package/dist/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +0 -4
  54. package/dist/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +0 -2
  55. package/dist/standalone/.next/server/app/api/[[...route]]/route/app-paths-manifest.json +0 -3
  56. package/dist/standalone/.next/server/app/api/[[...route]]/route/build-manifest.json +0 -11
  57. package/dist/standalone/.next/server/app/api/[[...route]]/route/server-reference-manifest.json +0 -4
  58. package/dist/standalone/.next/server/app/api/[[...route]]/route.js +0 -7
  59. package/dist/standalone/.next/server/app/api/[[...route]]/route.js.map +0 -5
  60. package/dist/standalone/.next/server/app/api/[[...route]]/route.js.nft.json +0 -1
  61. package/dist/standalone/.next/server/app/api/[[...route]]/route_client-reference-manifest.js +0 -2
  62. package/dist/standalone/.next/server/app/apps/[appId]/page/app-paths-manifest.json +0 -3
  63. package/dist/standalone/.next/server/app/apps/[appId]/page/build-manifest.json +0 -18
  64. package/dist/standalone/.next/server/app/apps/[appId]/page/next-font-manifest.json +0 -12
  65. package/dist/standalone/.next/server/app/apps/[appId]/page/react-loadable-manifest.json +0 -1
  66. package/dist/standalone/.next/server/app/apps/[appId]/page/server-reference-manifest.json +0 -4
  67. package/dist/standalone/.next/server/app/apps/[appId]/page.js +0 -17
  68. package/dist/standalone/.next/server/app/apps/[appId]/page.js.map +0 -5
  69. package/dist/standalone/.next/server/app/apps/[appId]/page.js.nft.json +0 -1
  70. package/dist/standalone/.next/server/app/apps/[appId]/page_client-reference-manifest.js +0 -2
  71. package/dist/standalone/.next/server/app/apps/[appId]/settings/page/app-paths-manifest.json +0 -3
  72. package/dist/standalone/.next/server/app/apps/[appId]/settings/page/build-manifest.json +0 -18
  73. package/dist/standalone/.next/server/app/apps/[appId]/settings/page/next-font-manifest.json +0 -12
  74. package/dist/standalone/.next/server/app/apps/[appId]/settings/page/react-loadable-manifest.json +0 -1
  75. package/dist/standalone/.next/server/app/apps/[appId]/settings/page/server-reference-manifest.json +0 -4
  76. package/dist/standalone/.next/server/app/apps/[appId]/settings/page.js +0 -17
  77. package/dist/standalone/.next/server/app/apps/[appId]/settings/page.js.map +0 -5
  78. package/dist/standalone/.next/server/app/apps/[appId]/settings/page.js.nft.json +0 -1
  79. package/dist/standalone/.next/server/app/apps/[appId]/settings/page_client-reference-manifest.js +0 -2
  80. package/dist/standalone/.next/server/app/apps/[appId]/threads/[threadId]/page/app-paths-manifest.json +0 -3
  81. package/dist/standalone/.next/server/app/apps/[appId]/threads/[threadId]/page/build-manifest.json +0 -18
  82. package/dist/standalone/.next/server/app/apps/[appId]/threads/[threadId]/page/next-font-manifest.json +0 -12
  83. package/dist/standalone/.next/server/app/apps/[appId]/threads/[threadId]/page/react-loadable-manifest.json +0 -1
  84. package/dist/standalone/.next/server/app/apps/[appId]/threads/[threadId]/page/server-reference-manifest.json +0 -4
  85. package/dist/standalone/.next/server/app/apps/[appId]/threads/[threadId]/page.js +0 -17
  86. package/dist/standalone/.next/server/app/apps/[appId]/threads/[threadId]/page.js.map +0 -5
  87. package/dist/standalone/.next/server/app/apps/[appId]/threads/[threadId]/page.js.nft.json +0 -1
  88. package/dist/standalone/.next/server/app/apps/[appId]/threads/[threadId]/page_client-reference-manifest.js +0 -2
  89. package/dist/standalone/.next/server/app/favicon.ico/route/app-paths-manifest.json +0 -3
  90. package/dist/standalone/.next/server/app/favicon.ico/route/build-manifest.json +0 -11
  91. package/dist/standalone/.next/server/app/favicon.ico/route.js +0 -7
  92. package/dist/standalone/.next/server/app/favicon.ico/route.js.map +0 -5
  93. package/dist/standalone/.next/server/app/favicon.ico/route.js.nft.json +0 -1
  94. package/dist/standalone/.next/server/app/favicon.ico.body +0 -0
  95. package/dist/standalone/.next/server/app/favicon.ico.meta +0 -1
  96. package/dist/standalone/.next/server/app/index.html +0 -1
  97. package/dist/standalone/.next/server/app/index.meta +0 -14
  98. package/dist/standalone/.next/server/app/index.rsc +0 -26
  99. package/dist/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +0 -9
  100. package/dist/standalone/.next/server/app/index.segments/_full.segment.rsc +0 -26
  101. package/dist/standalone/.next/server/app/index.segments/_head.segment.rsc +0 -8
  102. package/dist/standalone/.next/server/app/index.segments/_index.segment.rsc +0 -10
  103. package/dist/standalone/.next/server/app/index.segments/_tree.segment.rsc +0 -5
  104. package/dist/standalone/.next/server/app/page/app-paths-manifest.json +0 -3
  105. package/dist/standalone/.next/server/app/page/build-manifest.json +0 -18
  106. package/dist/standalone/.next/server/app/page/next-font-manifest.json +0 -12
  107. package/dist/standalone/.next/server/app/page/react-loadable-manifest.json +0 -1
  108. package/dist/standalone/.next/server/app/page/server-reference-manifest.json +0 -4
  109. package/dist/standalone/.next/server/app/page.js +0 -16
  110. package/dist/standalone/.next/server/app/page.js.map +0 -5
  111. package/dist/standalone/.next/server/app/page.js.nft.json +0 -1
  112. package/dist/standalone/.next/server/app/page_client-reference-manifest.js +0 -2
  113. package/dist/standalone/.next/server/app-paths-manifest.json +0 -10
  114. package/dist/standalone/.next/server/chunks/32a5c_next_0375a1f1._.js +0 -17
  115. package/dist/standalone/.next/server/chunks/[root-of-the-server]__5f8f2b74._.js +0 -3
  116. package/dist/standalone/.next/server/chunks/[root-of-the-server]__7970807c._.js +0 -7
  117. package/dist/standalone/.next/server/chunks/[root-of-the-server]__a0f47697._.js +0 -28
  118. package/dist/standalone/.next/server/chunks/[root-of-the-server]__b89b5a39._.js +0 -3
  119. package/dist/standalone/.next/server/chunks/[turbopack]_runtime.js +0 -770
  120. package/dist/standalone/.next/server/chunks/apps_web__next-internal_server_app_api_[[___route]]_route_actions_ad756856.js +0 -3
  121. package/dist/standalone/.next/server/chunks/apps_web__next-internal_server_app_favicon_ico_route_actions_63c3b0d9.js +0 -3
  122. package/dist/standalone/.next/server/chunks/ssr/32a5c_next_dist_c1a879d9._.js +0 -4
  123. package/dist/standalone/.next/server/chunks/ssr/32a5c_next_dist_c1fdfc17._.js +0 -3
  124. package/dist/standalone/.next/server/chunks/ssr/32a5c_next_dist_client_components_9085e245._.js +0 -3
  125. package/dist/standalone/.next/server/chunks/ssr/32a5c_next_dist_client_components_builtin_forbidden_3bc2a141.js +0 -3
  126. package/dist/standalone/.next/server/chunks/ssr/32a5c_next_dist_client_components_builtin_global-error_4bb26d7f.js +0 -3
  127. package/dist/standalone/.next/server/chunks/ssr/32a5c_next_dist_client_components_builtin_unauthorized_5c95c9e3.js +0 -3
  128. package/dist/standalone/.next/server/chunks/ssr/32a5c_next_dist_esm_af731943._.js +0 -6
  129. package/dist/standalone/.next/server/chunks/ssr/32a5c_next_dist_esm_build_templates_app-page_5d311e9f.js +0 -4
  130. package/dist/standalone/.next/server/chunks/ssr/37f04__next-internal_server_app_apps_[appId]_threads_[threadId]_page_actions_0a164142.js +0 -3
  131. package/dist/standalone/.next/server/chunks/ssr/8eb43_sonner_dist_index_mjs_a249e53a._.js +0 -3
  132. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__15021a09._.js +0 -3
  133. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__1764fab0._.js +0 -3
  134. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__1d8f92d3._.js +0 -3
  135. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__277f3037._.js +0 -3
  136. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__379bd934._.js +0 -3
  137. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__42df4b63._.js +0 -3
  138. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__5064350d._.js +0 -3
  139. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__659dbfe7._.js +0 -4
  140. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__80ea63f6._.js +0 -4
  141. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__9f3ff72e._.js +0 -3
  142. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__b6cee269._.js +0 -3
  143. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__e55c02ca._.js +0 -3
  144. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__f7807403._.js +0 -3
  145. package/dist/standalone/.next/server/chunks/ssr/[turbopack]_runtime.js +0 -770
  146. package/dist/standalone/.next/server/chunks/ssr/_1db4c18c._.js +0 -4
  147. package/dist/standalone/.next/server/chunks/ssr/_203f0b29._.js +0 -7
  148. package/dist/standalone/.next/server/chunks/ssr/_289820d0._.js +0 -3
  149. package/dist/standalone/.next/server/chunks/ssr/_442031f8._.js +0 -7
  150. package/dist/standalone/.next/server/chunks/ssr/_4b4df737._.js +0 -4
  151. package/dist/standalone/.next/server/chunks/ssr/_5066b883._.js +0 -4
  152. package/dist/standalone/.next/server/chunks/ssr/_70dfbe56._.js +0 -3
  153. package/dist/standalone/.next/server/chunks/ssr/_8c0bfb07._.js +0 -3
  154. package/dist/standalone/.next/server/chunks/ssr/_b00f40b3._.js +0 -3
  155. package/dist/standalone/.next/server/chunks/ssr/_d81226f8._.js +0 -4
  156. package/dist/standalone/.next/server/chunks/ssr/_e5c457a7._.js +0 -3
  157. package/dist/standalone/.next/server/chunks/ssr/_fce9eb14._.js +0 -6
  158. package/dist/standalone/.next/server/chunks/ssr/apps_web__next-internal_server_app__global-error_page_actions_e7650f86.js +0 -3
  159. package/dist/standalone/.next/server/chunks/ssr/apps_web__next-internal_server_app__not-found_page_actions_3df07a96.js +0 -3
  160. package/dist/standalone/.next/server/chunks/ssr/apps_web__next-internal_server_app_apps_[appId]_page_actions_3e495976.js +0 -3
  161. package/dist/standalone/.next/server/chunks/ssr/apps_web__next-internal_server_app_apps_[appId]_settings_page_actions_e98061b7.js +0 -3
  162. package/dist/standalone/.next/server/chunks/ssr/apps_web__next-internal_server_app_page_actions_a0623280.js +0 -3
  163. package/dist/standalone/.next/server/chunks/ssr/apps_web_app_apps_[appId]_layout_tsx_4c06ec7f._.js +0 -3
  164. package/dist/standalone/.next/server/chunks/ssr/apps_web_app_apps_[appId]_page_tsx_15e4fa55._.js +0 -3
  165. package/dist/standalone/.next/server/chunks/ssr/apps_web_app_apps_[appId]_settings_page_tsx_c072e295._.js +0 -3
  166. package/dist/standalone/.next/server/chunks/ssr/apps_web_app_apps_[appId]_threads_[threadId]_page_tsx_7dd7d764._.js +0 -39
  167. package/dist/standalone/.next/server/chunks/ssr/apps_web_app_e92ffe16._.js +0 -3
  168. package/dist/standalone/.next/server/chunks/ssr/apps_web_app_page_tsx_66bf978b._.js +0 -3
  169. package/dist/standalone/.next/server/chunks/ssr/apps_web_components_ui_9822aec4._.js +0 -3
  170. package/dist/standalone/.next/server/chunks/ssr/apps_web_components_ui_alert-dialog_tsx_9188904e._.js +0 -9
  171. package/dist/standalone/.next/server/chunks/ssr/apps_web_components_ui_c8132c43._.js +0 -9
  172. package/dist/standalone/.next/server/chunks/ssr/apps_web_components_ui_card_tsx_2c0359d4._.js +0 -3
  173. package/dist/standalone/.next/server/chunks/ssr/apps_web_components_ui_cbe5b2b9._.js +0 -3
  174. package/dist/standalone/.next/server/chunks/ssr/apps_web_components_ui_cc5b288d._.js +0 -3
  175. package/dist/standalone/.next/server/chunks/ssr/node_modules__bun_2e4b1ed0._.js +0 -3
  176. package/dist/standalone/.next/server/chunks/ssr/node_modules__bun_4bd60410._.js +0 -6
  177. package/dist/standalone/.next/server/chunks/ssr/node_modules__bun_930fb349._.js +0 -3
  178. package/dist/standalone/.next/server/chunks/ssr/node_modules__bun_d2520564._.js +0 -3
  179. package/dist/standalone/.next/server/functions-config-manifest.json +0 -4
  180. package/dist/standalone/.next/server/middleware-build-manifest.js +0 -22
  181. package/dist/standalone/.next/server/middleware-manifest.json +0 -6
  182. package/dist/standalone/.next/server/next-font-manifest.js +0 -1
  183. package/dist/standalone/.next/server/next-font-manifest.json +0 -32
  184. package/dist/standalone/.next/server/pages/404.html +0 -1
  185. package/dist/standalone/.next/server/pages/500.html +0 -2
  186. package/dist/standalone/.next/server/pages-manifest.json +0 -4
  187. package/dist/standalone/.next/server/server-reference-manifest.js +0 -1
  188. package/dist/standalone/.next/server/server-reference-manifest.json +0 -5
  189. package/dist/standalone/.next/static/chunks/001d990e82d317e7.js +0 -1
  190. package/dist/standalone/.next/static/chunks/26aa014f0977bc3a.js +0 -4
  191. package/dist/standalone/.next/static/chunks/3468e573c929d9d3.js +0 -1
  192. package/dist/standalone/.next/static/chunks/3815bbfffdbb534d.js +0 -1
  193. package/dist/standalone/.next/static/chunks/3c1f17874396f056.js +0 -1
  194. package/dist/standalone/.next/static/chunks/5521918d58602ba4.css +0 -4
  195. package/dist/standalone/.next/static/chunks/61ce30fe62669a20.js +0 -1
  196. package/dist/standalone/.next/static/chunks/6a4ccd90d00f8188.js +0 -2
  197. package/dist/standalone/.next/static/chunks/6de1dc14b2653311.js +0 -2
  198. package/dist/standalone/.next/static/chunks/6ee1158d12a0c765.js +0 -1
  199. package/dist/standalone/.next/static/chunks/8bd29684c211a1e1.js +0 -37
  200. package/dist/standalone/.next/static/chunks/8eae4355671b488f.js +0 -1
  201. package/dist/standalone/.next/static/chunks/8ef339e3fd7a82de.js +0 -1
  202. package/dist/standalone/.next/static/chunks/a6dad97d9634a72d.js +0 -1
  203. package/dist/standalone/.next/static/chunks/ab703521ea4f2141.js +0 -1
  204. package/dist/standalone/.next/static/chunks/b337946fdc3c17b3.js +0 -1
  205. package/dist/standalone/.next/static/chunks/b46c6c394477214a.js +0 -1
  206. package/dist/standalone/.next/static/chunks/b8bc41a0b408222e.js +0 -5
  207. package/dist/standalone/.next/static/chunks/bbf59b867827b224.js +0 -7
  208. package/dist/standalone/.next/static/chunks/c416de6f3efbbe15.js +0 -7
  209. package/dist/standalone/.next/static/chunks/d70eda393c3966c3.js +0 -1
  210. package/dist/standalone/.next/static/chunks/f8e57df1af00077e.js +0 -5
  211. package/dist/standalone/.next/static/chunks/turbopack-e09224df42d3769a.js +0 -3
  212. package/dist/standalone/.next/static/media/13bf9871fe164e7f-s.f2220059.woff2 +0 -0
  213. package/dist/standalone/.next/static/media/3fe682a82f50d426-s.23358719.woff2 +0 -0
  214. package/dist/standalone/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  215. package/dist/standalone/.next/static/media/70bc3e132a0a741e-s.p.15008bfb.woff2 +0 -0
  216. package/dist/standalone/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  217. package/dist/standalone/.next/static/media/71b036adf157cdcf-s.bd5f4d11.woff2 +0 -0
  218. package/dist/standalone/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  219. package/dist/standalone/.next/static/media/89b21bb081cb7469-s.51c18f09.woff2 +0 -0
  220. package/dist/standalone/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  221. package/dist/standalone/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  222. package/dist/standalone/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  223. package/dist/standalone/.next/static/media/cc545e633e20c56d-s.f6f1950f.woff2 +0 -0
  224. package/dist/standalone/.next/static/media/favicon.0b3bf435.ico +0 -0
  225. package/dist/standalone/.next/static/p6HYmiCvyNSugdZfDkX0R/_buildManifest.js +0 -11
  226. package/dist/standalone/.next/static/p6HYmiCvyNSugdZfDkX0R/_clientMiddlewareManifest.json +0 -1
  227. package/dist/standalone/.next/static/p6HYmiCvyNSugdZfDkX0R/_ssgManifest.js +0 -1
  228. package/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  229. package/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  230. package/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  231. package/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  232. package/dist/standalone/components/apps-table.tsx +0 -274
  233. package/dist/standalone/components.json +0 -24
  234. package/dist/standalone/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  235. package/dist/standalone/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  236. package/dist/standalone/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  237. package/dist/standalone/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  238. package/dist/standalone/dist/standalone/components/apps-table.tsx +0 -274
  239. package/dist/standalone/dist/standalone/components.json +0 -24
  240. package/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  241. package/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  242. package/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  243. package/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  244. package/dist/standalone/dist/standalone/dist/standalone/components/apps-table.tsx +0 -274
  245. package/dist/standalone/dist/standalone/dist/standalone/components.json +0 -24
  246. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  247. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  248. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  249. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  250. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/apps-table.tsx +0 -274
  251. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components.json +0 -24
  252. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  253. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  254. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  255. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  256. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/apps-table.tsx +0 -274
  257. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components.json +0 -24
  258. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  259. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  260. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  261. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  262. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/apps-table.tsx +0 -274
  263. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components.json +0 -24
  264. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  265. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  266. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  267. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  268. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/apps-table.tsx +0 -274
  269. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components.json +0 -24
  270. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  271. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  272. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  273. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  274. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/apps-table.tsx +0 -274
  275. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components.json +0 -24
  276. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  277. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  278. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  279. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  280. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/apps-table.tsx +0 -274
  281. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components.json +0 -24
  282. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  283. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  284. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  285. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  286. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/apps-table.tsx +0 -274
  287. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components.json +0 -24
  288. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/layout.tsx +0 -3
  289. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/page.tsx +0 -238
  290. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/settings/page.tsx +0 -224
  291. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/apps/[appId]/threads/[threadId]/page.tsx +0 -283
  292. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/apps-table.tsx +0 -274
  293. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components.json +0 -24
  294. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package.json +0 -66
  295. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  296. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package.json +0 -65
  297. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  298. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package.json +0 -65
  299. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  300. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package.json +0 -65
  301. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  302. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package.json +0 -65
  303. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  304. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package.json +0 -66
  305. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  306. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package.json +0 -66
  307. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  308. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package.json +0 -66
  309. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  310. package/dist/standalone/dist/standalone/dist/standalone/package.json +0 -66
  311. package/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  312. package/dist/standalone/dist/standalone/package.json +0 -66
  313. package/dist/standalone/dist/standalone/tsconfig.json +0 -34
  314. package/dist/standalone/package.json +0 -66
  315. package/dist/standalone/public/file.svg +0 -1
  316. package/dist/standalone/public/globe.svg +0 -1
  317. package/dist/standalone/public/next.svg +0 -1
  318. package/dist/standalone/public/vercel.svg +0 -1
  319. package/dist/standalone/public/window.svg +0 -1
  320. package/dist/standalone/server.js +0 -44
  321. package/dist/standalone/tsconfig.json +0 -34
@@ -0,0 +1,413 @@
1
+ // src/viewer/server.ts
2
+ import { serve } from "@hono/node-server";
3
+ import { serveStatic } from "@hono/node-server/serve-static";
4
+ import { Hono } from "hono";
5
+ import { cors } from "hono/cors";
6
+ import { streamSSE } from "hono/streaming";
7
+ import path2 from "path";
8
+ import fs2 from "fs";
9
+ import { fileURLToPath } from "url";
10
+
11
+ // src/db.ts
12
+ import path from "path";
13
+ import fs from "fs";
14
+ var DB_DIR = path.join(process.cwd(), ".ailog");
15
+ var RUNS_DIR = () => path.join(DB_DIR, "runs");
16
+ var BLOBS_DIR = () => path.join(DB_DIR, "blobs");
17
+ var RUN_INDEX_DIR = () => path.join(DB_DIR, "index", "runs");
18
+ var THREAD_INDEX_DIR = () => path.join(DB_DIR, "index", "threads");
19
+ var getDbDir = () => DB_DIR;
20
+ var AILOG_PORT = process.env.AILOG_PORT ? parseInt(process.env.AILOG_PORT) : 4985;
21
+ var dirResolved = false;
22
+ var dirResolvePromise = null;
23
+ var resolveDbDir = async () => {
24
+ if (dirResolved) return;
25
+ if (!dirResolvePromise) {
26
+ dirResolvePromise = (async () => {
27
+ try {
28
+ const res = await fetch(
29
+ `http://localhost:${AILOG_PORT}/api/db-dir`
30
+ );
31
+ if (res.ok) {
32
+ const body = await res.json();
33
+ if (typeof body.dir === "string" && body.dir.length > 0) {
34
+ DB_DIR = body.dir;
35
+ }
36
+ }
37
+ } catch {
38
+ } finally {
39
+ dirResolved = true;
40
+ }
41
+ })();
42
+ }
43
+ await dirResolvePromise;
44
+ };
45
+ var BLOB_THRESHOLD = 16 * 1024;
46
+ var notifyServer = (event, runId) => {
47
+ notifyServerAsync(event, runId);
48
+ };
49
+ var notifyServerAsync = async (event, runId) => {
50
+ try {
51
+ await fetch(`http://localhost:${AILOG_PORT}/api/notify`, {
52
+ method: "POST",
53
+ headers: { "Content-Type": "application/json" },
54
+ body: JSON.stringify({
55
+ event,
56
+ timestamp: Date.now(),
57
+ runId: runId ?? null
58
+ })
59
+ });
60
+ } catch {
61
+ }
62
+ };
63
+ var ensureGitignore = () => {
64
+ const gitignorePath = path.join(process.cwd(), ".gitignore");
65
+ if (!fs.existsSync(gitignorePath)) return;
66
+ const content = fs.readFileSync(gitignorePath, "utf-8");
67
+ const alreadyIgnored = content.split("\n").some((line) => line.trim() === ".ailog" || line.trim() === ".ailog/");
68
+ if (!alreadyIgnored) {
69
+ const next = content.endsWith("\n") ? `${content}.ailog
70
+ ` : `${content}
71
+ .ailog
72
+ `;
73
+ fs.writeFileSync(gitignorePath, next);
74
+ }
75
+ };
76
+ var ensureLayout = () => {
77
+ const isFirstRun = !fs.existsSync(DB_DIR);
78
+ fs.mkdirSync(RUNS_DIR(), { recursive: true });
79
+ fs.mkdirSync(BLOBS_DIR(), { recursive: true });
80
+ fs.mkdirSync(RUN_INDEX_DIR(), { recursive: true });
81
+ fs.mkdirSync(THREAD_INDEX_DIR(), { recursive: true });
82
+ if (isFirstRun) ensureGitignore();
83
+ };
84
+ var safeReadJson = (filePath, fallback) => {
85
+ try {
86
+ if (!fs.existsSync(filePath)) return fallback;
87
+ return JSON.parse(fs.readFileSync(filePath, "utf-8"));
88
+ } catch {
89
+ return fallback;
90
+ }
91
+ };
92
+ var readBlobIfPresent = (relPath) => {
93
+ const absolute = path.join(DB_DIR, relPath);
94
+ try {
95
+ if (!fs.existsSync(absolute)) return null;
96
+ return fs.readFileSync(absolute, "utf-8");
97
+ } catch {
98
+ return null;
99
+ }
100
+ };
101
+ var isBlobRef = (v) => !!v && typeof v === "object" && "$blob" in v;
102
+ var hydrate = (v) => {
103
+ if (v === null) return null;
104
+ if (typeof v === "string") return v;
105
+ if (isBlobRef(v)) return readBlobIfPresent(v.$blob);
106
+ return null;
107
+ };
108
+ var runCache = /* @__PURE__ */ new Map();
109
+ var pageCache = /* @__PURE__ */ new Map();
110
+ var PAGE_FILE_RE = /^\d{17}\.json$/;
111
+ var listPageFiles = (dir) => {
112
+ let entries;
113
+ try {
114
+ entries = fs.readdirSync(dir);
115
+ } catch {
116
+ return [];
117
+ }
118
+ return entries.filter((n) => PAGE_FILE_RE.test(n)).sort().map((n) => path.join(dir, n));
119
+ };
120
+ var loadPage = (file) => {
121
+ const cached = pageCache.get(file);
122
+ if (cached) return cached;
123
+ const data = safeReadJson(file, []);
124
+ pageCache.set(file, data);
125
+ return data;
126
+ };
127
+ var loadPagedNewestFirst = (dir, offset, limit) => {
128
+ const files = listPageFiles(dir).reverse();
129
+ let total = 0;
130
+ for (const f of files) total += loadPage(f).length;
131
+ const items = [];
132
+ let skipped = 0;
133
+ for (const file of files) {
134
+ const page = loadPage(file);
135
+ for (let i = page.length - 1; i >= 0; i--) {
136
+ if (skipped < offset) {
137
+ skipped++;
138
+ continue;
139
+ }
140
+ items.push(page[i]);
141
+ if (items.length === limit) {
142
+ return {
143
+ items,
144
+ total,
145
+ hasMore: offset + items.length < total
146
+ };
147
+ }
148
+ }
149
+ }
150
+ return { items, total, hasMore: false };
151
+ };
152
+ var loadRunFile = (runId) => {
153
+ const cached = runCache.get(runId);
154
+ if (cached) return cached;
155
+ const file = safeReadJson(
156
+ path.join(RUNS_DIR(), `${runId}.json`),
157
+ null
158
+ );
159
+ if (!file) return null;
160
+ runCache.set(runId, file);
161
+ return file;
162
+ };
163
+ var reloadDb = async (runId) => {
164
+ pageCache.clear();
165
+ if (runId) {
166
+ runCache.delete(runId);
167
+ } else {
168
+ runCache.clear();
169
+ }
170
+ };
171
+ var hydrateStep = (s) => ({
172
+ ...s,
173
+ output: hydrate(s.output),
174
+ raw_request: hydrate(s.raw_request),
175
+ raw_response: hydrate(s.raw_response),
176
+ raw_chunks: hydrate(s.raw_chunks)
177
+ });
178
+ var getRunSummariesPage = async (offset, limit) => loadPagedNewestFirst(RUN_INDEX_DIR(), offset, limit);
179
+ var getThreadsPage = async (offset, limit) => loadPagedNewestFirst(THREAD_INDEX_DIR(), offset, limit);
180
+ var getRunWithSteps = async (runId) => {
181
+ const file = loadRunFile(runId);
182
+ if (!file) return null;
183
+ return {
184
+ run: file.run,
185
+ steps: [...file.steps].sort((a, b) => a.step_number - b.step_number).map(hydrateStep)
186
+ };
187
+ };
188
+ var clearDatabase = async () => {
189
+ await resolveDbDir();
190
+ ensureLayout();
191
+ fs.rmSync(path.join(DB_DIR, "index"), { recursive: true, force: true });
192
+ fs.rmSync(RUNS_DIR(), { recursive: true, force: true });
193
+ fs.rmSync(BLOBS_DIR(), { recursive: true, force: true });
194
+ fs.mkdirSync(RUN_INDEX_DIR(), { recursive: true });
195
+ fs.mkdirSync(THREAD_INDEX_DIR(), { recursive: true });
196
+ fs.mkdirSync(RUNS_DIR(), { recursive: true });
197
+ fs.mkdirSync(BLOBS_DIR(), { recursive: true });
198
+ runCache.clear();
199
+ pageCache.clear();
200
+ notifyServer("clear");
201
+ };
202
+
203
+ // src/viewer/server.ts
204
+ var sseClients = /* @__PURE__ */ new Set();
205
+ var broadcastToClients = (event, data) => {
206
+ const message = `event: ${event}
207
+ data: ${JSON.stringify(data)}
208
+
209
+ `;
210
+ for (const client of sseClients) {
211
+ try {
212
+ client.controller.enqueue(message);
213
+ } catch {
214
+ sseClients.delete(client);
215
+ }
216
+ }
217
+ };
218
+ var __dirname = path2.dirname(fileURLToPath(import.meta.url));
219
+ var devEnv = process.env.AILOG_DEV;
220
+ var isDevMode = devEnv !== void 0 && devEnv !== "false" && devEnv !== "0";
221
+ var projectRoot = path2.resolve(__dirname, "../..");
222
+ var clientDir = path2.join(projectRoot, "dist/client");
223
+ var app = new Hono();
224
+ app.use("/*", cors());
225
+ var parsePagination = (c) => {
226
+ const offset = Math.max(0, parseInt(c.req.query("offset") ?? "0", 10) || 0);
227
+ const limit = Math.min(
228
+ 200,
229
+ Math.max(1, parseInt(c.req.query("limit") ?? "50", 10) || 50)
230
+ );
231
+ return { offset, limit };
232
+ };
233
+ app.get("/api/runs", async (c) => {
234
+ await reloadDb();
235
+ const { offset, limit } = parsePagination(c);
236
+ const page = await getRunSummariesPage(offset, limit);
237
+ const items = page.items.map((r) => ({
238
+ id: r.id,
239
+ started_at: r.started_at,
240
+ function_id: r.function_id,
241
+ thread_id: r.thread_id,
242
+ stepCount: r.step_count,
243
+ firstMessage: r.first_message ?? "No user message",
244
+ hasError: r.has_error,
245
+ isInProgress: r.is_in_progress,
246
+ type: r.type ?? void 0
247
+ }));
248
+ return c.json({ items, total: page.total, hasMore: page.hasMore });
249
+ });
250
+ app.get("/api/runs/:id", async (c) => {
251
+ const runId = c.req.param("id");
252
+ await reloadDb(runId);
253
+ const data = await getRunWithSteps(runId);
254
+ if (!data) {
255
+ return c.json({ error: "Run not found" }, 404);
256
+ }
257
+ const isInProgress = data.steps.some((s) => s.duration_ms === null && !s.error);
258
+ return c.json({
259
+ run: { ...data.run, isInProgress },
260
+ steps: data.steps
261
+ });
262
+ });
263
+ app.get("/api/threads", async (c) => {
264
+ await reloadDb();
265
+ const { offset, limit } = parsePagination(c);
266
+ return c.json(await getThreadsPage(offset, limit));
267
+ });
268
+ app.get("/api/db-dir", (c) => {
269
+ return c.json({ dir: getDbDir() });
270
+ });
271
+ app.post("/api/clear", async (c) => {
272
+ await clearDatabase();
273
+ return c.json({ success: true });
274
+ });
275
+ app.get("/api/events", (c) => {
276
+ return streamSSE(c, async (stream) => {
277
+ const clientId = crypto.randomUUID();
278
+ const client = {
279
+ id: clientId,
280
+ controller: null
281
+ };
282
+ await stream.writeSSE({
283
+ event: "connected",
284
+ data: JSON.stringify({ clientId })
285
+ });
286
+ const originalWrite = stream.writeSSE.bind(stream);
287
+ client.controller = {
288
+ enqueue: (message) => {
289
+ const lines = message.split("\n");
290
+ let event = "message";
291
+ let data = "";
292
+ for (const line of lines) {
293
+ if (line.startsWith("event: ")) {
294
+ event = line.slice(7);
295
+ } else if (line.startsWith("data: ")) {
296
+ data = line.slice(6);
297
+ }
298
+ }
299
+ originalWrite({ event, data }).catch(() => {
300
+ });
301
+ }
302
+ };
303
+ sseClients.add(client);
304
+ const heartbeat = setInterval(async () => {
305
+ try {
306
+ await stream.writeSSE({
307
+ event: "heartbeat",
308
+ data: JSON.stringify({ time: Date.now() })
309
+ });
310
+ } catch {
311
+ clearInterval(heartbeat);
312
+ }
313
+ }, 3e4);
314
+ try {
315
+ while (true) {
316
+ await stream.sleep(1e3);
317
+ }
318
+ } finally {
319
+ clearInterval(heartbeat);
320
+ sseClients.delete(client);
321
+ }
322
+ });
323
+ });
324
+ app.post("/api/notify", async (c) => {
325
+ const body = await c.req.json();
326
+ await reloadDb(body.runId ?? void 0);
327
+ broadcastToClients("update", body);
328
+ return c.json({ success: true });
329
+ });
330
+ app.use(
331
+ "/assets/*",
332
+ serveStatic({
333
+ root: clientDir.replace(/\/+$/, "")
334
+ })
335
+ );
336
+ app.get("*", async (c) => {
337
+ if (isDevMode) {
338
+ return c.html(`
339
+ <!DOCTYPE html>
340
+ <html>
341
+ <head>
342
+ <meta charset="UTF-8">
343
+ <title>ailog</title>
344
+ <style>
345
+ body { font-family: system-ui, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #0a0a0a; color: #fafafa; }
346
+ .container { text-align: center; }
347
+ a { color: #3b82f6; text-decoration: none; font-size: 1.25rem; }
348
+ a:hover { text-decoration: underline; }
349
+ p { color: #737373; margin-top: 1rem; }
350
+ </style>
351
+ </head>
352
+ <body>
353
+ <div class="container">
354
+ <h2>Development Mode</h2>
355
+ <a href="http://localhost:5173">Open ailog UI \u2192</a>
356
+ <p>This port (4985) only serves the API in dev mode.</p>
357
+ </div>
358
+ </body>
359
+ </html>
360
+ `);
361
+ }
362
+ const indexPath = path2.join(clientDir, "index.html");
363
+ try {
364
+ const html = fs2.readFileSync(indexPath, "utf-8");
365
+ return c.html(html);
366
+ } catch {
367
+ return c.text("ailog client not built. Run `bun run build` first.", 500);
368
+ }
369
+ });
370
+ var startViewer = (port = 4985) => {
371
+ const server = serve(
372
+ {
373
+ fetch: app.fetch,
374
+ port
375
+ },
376
+ () => {
377
+ if (isDevMode) {
378
+ console.log(`\u{1F50D} ailog API running on port ${port}`);
379
+ console.log(` Open http://localhost:5173 for the dev UI`);
380
+ } else {
381
+ console.log(`\u{1F50D} ailog running at http://localhost:${port}`);
382
+ }
383
+ console.log(` Reading .ailog from ${getDbDir()}`);
384
+ }
385
+ );
386
+ server.on("error", (err) => {
387
+ if (err.code === "EADDRINUSE") {
388
+ console.error(`
389
+ \u274C Port ${port} is already in use.`);
390
+ console.error(
391
+ `
392
+ This likely means ailog is already running.`
393
+ );
394
+ console.error(` Open http://localhost:${port} in your browser.
395
+ `);
396
+ console.error(` To use a different port, set AILOG_PORT:
397
+ `);
398
+ console.error(` AILOG_PORT=4986 npx ailog
399
+ `);
400
+ process.exit(1);
401
+ }
402
+ throw err;
403
+ });
404
+ };
405
+ var currentFile = fileURLToPath(import.meta.url);
406
+ var isDirectRun = process.argv[1] === currentFile || process.argv[1]?.endsWith("/server.ts") || process.argv[1]?.endsWith("/server.js");
407
+ if (isDirectRun) {
408
+ const port = process.env.AILOG_PORT ? parseInt(process.env.AILOG_PORT) : 4985;
409
+ startViewer(port);
410
+ }
411
+ export {
412
+ startViewer
413
+ };
package/package.json CHANGED
@@ -1,66 +1,86 @@
1
1
  {
2
2
  "name": "@ailog/cli",
3
- "version": "0.2.3",
3
+ "version": "0.3.0",
4
4
  "description": "CLI to run the ailog LLM logging dashboard",
5
- "private": false,
6
5
  "type": "module",
6
+ "private": false,
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "module": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js",
17
+ "default": "./dist/index.js"
18
+ }
19
+ },
7
20
  "bin": {
8
- "ailog": "./dist/bin/cli.js"
21
+ "ailog": "./bin/cli.js"
9
22
  },
10
23
  "files": [
11
- "dist"
24
+ "dist",
25
+ "bin",
26
+ "NOTICE"
12
27
  ],
13
28
  "scripts": {
14
- "dev": "next dev --port 9000",
15
- "build": "next build",
16
- "build:cli": "next build && bun scripts/build-cli.ts",
17
- "start": "next start",
18
- "start:cli": "node dist/bin/cli.js start",
19
- "prepublishOnly": "bun run build:cli",
20
- "lint": "eslint --max-warnings=0 .",
21
- "lint:fix": "eslint --fix ."
29
+ "dev": "concurrently -k \"bun run dev:api\" \"bun run dev:client\"",
30
+ "dev:api": "AILOG_DEV=true tsx src/viewer/server.ts",
31
+ "dev:client": "vite",
32
+ "start": "node dist/viewer/server.js",
33
+ "build": "bun run build:client && bun run build:server",
34
+ "build:client": "vite build",
35
+ "build:server": "tsup --tsconfig tsconfig.build.json",
36
+ "test": "vitest --config vitest.node.config.js --run",
37
+ "test:watch": "vitest --config vitest.node.config.js",
38
+ "check-types": "tsc --noEmit",
39
+ "prepublishOnly": "bun run build"
22
40
  },
23
- "dependencies": {
24
- "@swc/helpers": "^0.5.15",
25
- "client-only": "^0.0.1",
26
- "commander": "^12.0.0",
27
- "next": "16.0.10",
28
- "pg": "^8.16.3",
29
- "react": "19.2.1",
30
- "react-dom": "19.2.1",
31
- "styled-jsx": "^5.1.6",
32
- "zod": "^4.3.0"
41
+ "peerDependencies": {
42
+ "ai": ">=7.0.0-beta"
43
+ },
44
+ "peerDependenciesMeta": {
45
+ "ai": {
46
+ "optional": true
47
+ }
33
48
  },
34
- "optionalDependencies": {
35
- "sharp": "^0.34.5"
49
+ "dependencies": {
50
+ "@ai-sdk/provider": "4.0.0-beta.14",
51
+ "@hono/node-server": "^1.13.7",
52
+ "hono": "^4.6.14"
36
53
  },
37
54
  "devDependencies": {
38
- "@ailog/server": "*",
39
- "@base-ui/react": "^1.0.0",
40
- "@hugeicons/core-free-icons": "^2.0.0",
41
- "@hugeicons/react": "^1.1.1",
42
- "@tailwindcss/postcss": "^4",
43
- "@tanstack/react-table": "^8.21.3",
44
- "@types/bun": "^1.3.5",
45
- "@types/node": "^20",
46
- "@types/react": "^19",
47
- "@types/react-dom": "^19",
55
+ "@radix-ui/react-collapsible": "^1.1.12",
56
+ "@radix-ui/react-scroll-area": "^1.2.10",
57
+ "@radix-ui/react-slot": "^1.2.4",
58
+ "@radix-ui/react-tooltip": "^1.2.8",
59
+ "@tailwindcss/vite": "^4.1.17",
60
+ "@types/node": "^20.17.24",
61
+ "@types/react": "^18",
62
+ "@types/react-dom": "^18",
63
+ "@vitejs/plugin-react": "^4.3.4",
48
64
  "class-variance-authority": "^0.7.1",
49
65
  "clsx": "^2.1.1",
50
- "eslint": "^9",
51
- "eslint-config-next": "16.0.10",
52
- "hono": "^4.11.0",
53
- "next-themes": "^0.4.6",
54
- "nuqs": "^2.8.5",
55
- "radix-ui": "^1.4.3",
56
- "shadcn": "^3.6.1",
57
- "sonner": "^2.0.7",
66
+ "concurrently": "^9.1.0",
67
+ "lucide-react": "^0.556.0",
68
+ "react": "^18 || ^19",
69
+ "react-dom": "^18 || ^19",
58
70
  "tailwind-merge": "^3.4.0",
59
- "tailwindcss": "^4",
71
+ "tailwindcss": "^4.1.17",
72
+ "tsup": "^8",
73
+ "tsx": "^4.19.2",
60
74
  "tw-animate-css": "^1.4.0",
61
- "typescript": "^5"
75
+ "typescript": "5.8.3",
76
+ "vaul": "^1.1.2",
77
+ "vite": "^6.0.3",
78
+ "vitest": "^4.1.5",
79
+ "zod": "^3.25.0"
62
80
  },
63
81
  "engines": {
64
82
  "node": ">=18"
65
- }
83
+ },
84
+ "sideEffects": false,
85
+ "license": "Apache-2.0"
66
86
  }