dev3000 0.0.66 → 0.0.67

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 (212) hide show
  1. package/dist/cdp-monitor.d.ts +4 -1
  2. package/dist/cdp-monitor.d.ts.map +1 -1
  3. package/dist/cdp-monitor.js +35 -1
  4. package/dist/cdp-monitor.js.map +1 -1
  5. package/dist/cli.js +10 -5
  6. package/dist/cli.js.map +1 -1
  7. package/dist/dev-environment.d.ts +2 -0
  8. package/dist/dev-environment.d.ts.map +1 -1
  9. package/dist/dev-environment.js +44 -27
  10. package/dist/dev-environment.js.map +1 -1
  11. package/dist/services/parsers/log-parsers/base.d.ts +1 -1
  12. package/dist/services/parsers/log-parsers/base.d.ts.map +1 -1
  13. package/dist/src/tui-interface-impl.tsx +163 -48
  14. package/dist/tui-interface-impl.d.ts.map +1 -1
  15. package/dist/tui-interface-impl.js +72 -14
  16. package/dist/tui-interface-impl.js.map +1 -1
  17. package/dist/utils/project-name.d.ts +18 -0
  18. package/dist/utils/project-name.d.ts.map +1 -0
  19. package/dist/utils/project-name.js +114 -0
  20. package/dist/utils/project-name.js.map +1 -0
  21. package/dist/utils/timestamp.d.ts +8 -0
  22. package/dist/utils/timestamp.d.ts.map +1 -0
  23. package/dist/utils/timestamp.js +18 -0
  24. package/dist/utils/timestamp.js.map +1 -0
  25. package/mcp-server/.next/BUILD_ID +1 -1
  26. package/mcp-server/.next/app-build-manifest.json +8 -6
  27. package/mcp-server/.next/build-manifest.json +2 -2
  28. package/mcp-server/.next/cache/.tsbuildinfo +1 -1
  29. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000005.sst +0 -0
  30. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000006.sst +0 -0
  31. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000007.sst +0 -0
  32. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000008.sst +0 -0
  33. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000009.meta +0 -0
  34. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000010.meta +0 -0
  35. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000011.meta +0 -0
  36. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000013.meta +0 -0
  37. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000014.sst +0 -0
  38. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000016.sst +0 -0
  39. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000017.meta +0 -0
  40. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000018.meta +0 -0
  41. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000021.sst +0 -0
  42. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000022.sst +0 -0
  43. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000023.meta +0 -0
  44. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000025.meta +0 -0
  45. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000027.sst +0 -0
  46. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000028.sst +0 -0
  47. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000029.sst +0 -0
  48. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000030.sst +0 -0
  49. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000031.meta +0 -0
  50. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000032.meta +0 -0
  51. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000034.meta +0 -0
  52. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000035.meta +0 -0
  53. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000037.sst +0 -0
  54. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000038.sst +0 -0
  55. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000039.sst +0 -0
  56. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000040.sst +0 -0
  57. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000041.meta +0 -0
  58. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000042.meta +0 -0
  59. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000044.meta +0 -0
  60. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000045.meta +0 -0
  61. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000047.sst +0 -0
  62. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000048.sst +0 -0
  63. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000049.sst +0 -0
  64. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000050.sst +0 -0
  65. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000051.meta +0 -0
  66. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000052.meta +0 -0
  67. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000054.meta +0 -0
  68. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000055.meta +0 -0
  69. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000057.sst +0 -0
  70. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000058.sst +0 -0
  71. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000059.sst +0 -0
  72. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000060.sst +0 -0
  73. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000061.meta +0 -0
  74. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000062.meta +0 -0
  75. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000064.meta +0 -0
  76. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000065.meta +0 -0
  77. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000066.sst +0 -0
  78. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000067.meta +0 -0
  79. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000069.sst +0 -0
  80. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000070.sst +0 -0
  81. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000071.sst +0 -0
  82. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000072.sst +0 -0
  83. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000073.sst +0 -0
  84. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000074.meta +0 -0
  85. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000075.meta +0 -0
  86. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000076.meta +0 -0
  87. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000077.meta +0 -0
  88. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000078.meta +0 -0
  89. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000079.sst +0 -0
  90. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000080.sst +0 -0
  91. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000081.sst +0 -0
  92. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000082.sst +0 -0
  93. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000083.sst +0 -0
  94. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000084.meta +0 -0
  95. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000085.meta +0 -0
  96. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000086.meta +0 -0
  97. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000087.meta +0 -0
  98. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000088.meta +0 -0
  99. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000089.sst +0 -0
  100. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000090.sst +0 -0
  101. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000091.sst +0 -0
  102. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000092.sst +0 -0
  103. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000093.sst +0 -0
  104. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000094.meta +0 -0
  105. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000095.meta +0 -0
  106. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000096.meta +0 -0
  107. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000097.meta +0 -0
  108. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000098.meta +0 -0
  109. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000099.sst +0 -0
  110. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000100.sst +0 -0
  111. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000101.sst +0 -0
  112. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000102.meta +0 -0
  113. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000103.meta +0 -0
  114. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000104.meta +0 -0
  115. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000105.sst +0 -0
  116. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000106.sst +0 -0
  117. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000107.sst +0 -0
  118. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000108.meta +0 -0
  119. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000109.meta +0 -0
  120. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000110.meta +0 -0
  121. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/CURRENT +0 -0
  122. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/LOG +230 -0
  123. package/mcp-server/.next/fallback-build-manifest.json +2 -2
  124. package/mcp-server/.next/package.json +3 -1
  125. package/mcp-server/.next/required-server-files.json +1 -0
  126. package/mcp-server/.next/server/app/_global-error.html +2 -2
  127. package/mcp-server/.next/server/app/_global-error.rsc +1 -1
  128. package/mcp-server/.next/server/app/_not-found/page/app-build-manifest.json +1 -1
  129. package/mcp-server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  130. package/mcp-server/.next/server/app/_not-found.html +1 -1
  131. package/mcp-server/.next/server/app/_not-found.rsc +2 -2
  132. package/mcp-server/.next/server/app/index.html +1 -1
  133. package/mcp-server/.next/server/app/index.rsc +3 -3
  134. package/mcp-server/.next/server/app/logs/page/app-build-manifest.json +4 -3
  135. package/mcp-server/.next/server/app/logs/page.js.nft.json +1 -1
  136. package/mcp-server/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  137. package/mcp-server/.next/server/app/mcp/route.js.nft.json +1 -1
  138. package/mcp-server/.next/server/app/page/app-build-manifest.json +3 -2
  139. package/mcp-server/.next/server/app/page.js.nft.json +1 -1
  140. package/mcp-server/.next/server/app/page_client-reference-manifest.js +1 -1
  141. package/mcp-server/.next/server/chunks/[root-of-the-server]__1b561deb._.js +1 -1
  142. package/mcp-server/.next/server/chunks/[root-of-the-server]__1b561deb._.js.map +1 -1
  143. package/mcp-server/.next/server/chunks/[root-of-the-server]__38e8baae._.js +7 -8
  144. package/mcp-server/.next/server/chunks/[root-of-the-server]__38e8baae._.js.map +1 -1
  145. package/mcp-server/.next/server/chunks/ssr/{node_modules__pnpm_4f58b96e._.js → _188bfe33._.js} +2 -2
  146. package/mcp-server/.next/server/chunks/ssr/_188bfe33._.js.map +1 -0
  147. package/mcp-server/.next/server/chunks/ssr/_9d670a6b._.js +2 -2
  148. package/mcp-server/.next/server/chunks/ssr/_9d670a6b._.js.map +1 -1
  149. package/mcp-server/.next/server/chunks/ssr/_d858c4cd._.js +1 -1
  150. package/mcp-server/.next/server/chunks/ssr/_d858c4cd._.js.map +1 -1
  151. package/mcp-server/.next/server/chunks/ssr/_dae9c1d5._.js +1 -1
  152. package/mcp-server/.next/server/chunks/ssr/_dae9c1d5._.js.map +1 -1
  153. package/mcp-server/.next/server/chunks/ssr/{node_modules__pnpm_87fb6266._.js → _f03e80a8._.js} +2 -2
  154. package/mcp-server/.next/server/chunks/ssr/_f03e80a8._.js.map +1 -0
  155. package/mcp-server/.next/server/chunks/ssr/mcp-server_app_layout_tsx_afa41767._.js +1 -1
  156. package/mcp-server/.next/server/chunks/ssr/mcp-server_app_layout_tsx_afa41767._.js.map +1 -1
  157. package/mcp-server/.next/server/pages/404.html +1 -1
  158. package/mcp-server/.next/server/pages/500.html +2 -2
  159. package/mcp-server/.next/static/chunks/5a5edc75ee7e7de4.js +1 -0
  160. package/mcp-server/.next/static/chunks/65b18bf1ede9811a.css +1 -0
  161. package/mcp-server/.next/static/chunks/909033014621484e.js +1 -0
  162. package/mcp-server/.next/static/chunks/c5f8464bc8083ee7.js +1 -0
  163. package/mcp-server/.next/trace +1 -1
  164. package/mcp-server/app/api/tools/route.ts +22 -5
  165. package/mcp-server/app/layout.tsx +4 -2
  166. package/mcp-server/app/logs/LogsClient.infinite-loop.test.tsx +127 -0
  167. package/mcp-server/app/logs/LogsClient.tsx +318 -201
  168. package/mcp-server/app/logs/page.tsx +19 -3
  169. package/mcp-server/app/logs/utils.ts +15 -3
  170. package/mcp-server/app/mcp/route.ts +75 -509
  171. package/mcp-server/app/mcp/tools.ts +747 -0
  172. package/mcp-server/app/page.tsx +244 -169
  173. package/mcp-server/next.config.ts +1 -1
  174. package/mcp-server/package.json +9 -1
  175. package/mcp-server/public/favicon-16.svg +4 -0
  176. package/mcp-server/public/favicon-180.png +0 -0
  177. package/mcp-server/public/favicon-64.svg +4 -0
  178. package/mcp-server/public/favicon-preview.html +67 -0
  179. package/mcp-server/public/favicon.ico +0 -0
  180. package/mcp-server/public/favicon.svg +4 -0
  181. package/mcp-server/public/screenshots/test.txt +1 -0
  182. package/package.json +3 -4
  183. package/src/tui-interface-impl.tsx +163 -48
  184. package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js +0 -496
  185. package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js.map +0 -11
  186. package/mcp-server/.next/build/chunks/[root-of-the-server]__4718a9dd._.js +0 -408
  187. package/mcp-server/.next/build/chunks/[root-of-the-server]__4718a9dd._.js.map +0 -7
  188. package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js +0 -205
  189. package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js.map +0 -8
  190. package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js +0 -496
  191. package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js.map +0 -11
  192. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_d723d216._.js +0 -13
  193. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_d723d216._.js.map +0 -5
  194. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_5a40237e._.js +0 -12
  195. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_5a40237e._.js.map +0 -5
  196. package/mcp-server/.next/build/chunks/[turbopack]_runtime.js +0 -770
  197. package/mcp-server/.next/build/chunks/[turbopack]_runtime.js.map +0 -10
  198. package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js +0 -6759
  199. package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js.map +0 -47
  200. package/mcp-server/.next/postcss.js +0 -6
  201. package/mcp-server/.next/postcss.js.map +0 -5
  202. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_4f58b96e._.js.map +0 -1
  203. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_87fb6266._.js.map +0 -1
  204. package/mcp-server/.next/static/chunks/11f1b53bdf7a9af0.js +0 -1
  205. package/mcp-server/.next/static/chunks/3d4ea64f6384f2c6.js +0 -1
  206. package/mcp-server/.next/static/chunks/50335dad5c51aab8.js +0 -1
  207. package/mcp-server/.next/static/chunks/bdd0789390bc312f.css +0 -1
  208. package/mcp-server/.next/webpack-loaders.js +0 -6
  209. package/mcp-server/.next/webpack-loaders.js.map +0 -5
  210. /package/mcp-server/.next/static/{mZfouQw6OHfahPQayuVeY → KrGcHKj--hSqNUOXmnA4A}/_buildManifest.js +0 -0
  211. /package/mcp-server/.next/static/{mZfouQw6OHfahPQayuVeY → KrGcHKj--hSqNUOXmnA4A}/_clientMiddlewareManifest.json +0 -0
  212. /package/mcp-server/.next/static/{mZfouQw6OHfahPQayuVeY → KrGcHKj--hSqNUOXmnA4A}/_ssgManifest.js +0 -0
@@ -25,7 +25,8 @@ async function getLogFiles() {
25
25
 
26
26
  const dirContents = readdirSync(logDir)
27
27
  const logFiles = dirContents
28
- .filter((file) => file.startsWith(`dev3000-${projectName}-`) && file.endsWith(".log"))
28
+ // Get all dev3000 log files
29
+ .filter((file) => file.startsWith("dev3000-") && file.endsWith(".log"))
29
30
  .map((file) => {
30
31
  const filePath = join(logDir, file)
31
32
  const stats = statSync(filePath)
@@ -85,14 +86,29 @@ export default async function LogsPage({ searchParams }: PageProps) {
85
86
 
86
87
  // If project parameter is provided, find latest file for that project
87
88
  if (params.project && !params.file) {
88
- const projectFiles = files.filter((f) => f.name.includes(`dev3000-${params.project}-`))
89
+ // Look for files that contain the project name (could be partial match)
90
+ const projectFiles = files.filter((f) => {
91
+ // Extract the project part from filename: dev3000-<project>-timestamp.log
92
+ const match = f.name.match(/^dev3000-(.+?)-\d{4}-\d{2}-\d{2}T/)
93
+ if (match) {
94
+ const fileProject = match[1]
95
+ // Check if the file project contains the requested project as substring
96
+ return fileProject.includes(params.project ?? "")
97
+ }
98
+ return false
99
+ })
89
100
  if (projectFiles.length > 0) {
90
101
  redirect(`/logs?file=${encodeURIComponent(projectFiles[0].name)}&mode=tail`)
91
102
  }
103
+ // If no matching project files found but we have other files, show the latest
104
+ else if (files.length > 0) {
105
+ redirect(`/logs?file=${encodeURIComponent(files[0].name)}&mode=tail`)
106
+ }
107
+ // Otherwise fall through to render empty state
92
108
  }
93
109
 
94
110
  // If no file specified and we have files, redirect to latest with tail mode
95
- if (!params.file && files.length > 0) {
111
+ else if (!params.file && files.length > 0) {
96
112
  const latestFile = files[0].name
97
113
  redirect(`/logs?file=${encodeURIComponent(latestFile)}&mode=tail`)
98
114
  }
@@ -38,10 +38,11 @@ function cleanConsoleFormatting(message: string): string {
38
38
  }
39
39
 
40
40
  export function parseLogEntries(logContent: string): LogEntry[] {
41
- // Enhanced pattern to handle both formats:
41
+ // Enhanced pattern to handle multiple timestamp formats:
42
42
  // Format 1 (CDP): [timestamp] [SOURCE] message
43
43
  // Format 2 (Extension): [timestamp] [TAB-id] [SOURCE] [event] message
44
- const timestampPattern = /\[(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z)\] \[([^\]]+)\] /
44
+ // Format 3 (Short): [HH:MM:SS.mmm] [SOURCE] message
45
+ const timestampPattern = /\[(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z|\d{2}:\d{2}:\d{2}\.\d{3})\] \[([^\]]+)\] /
45
46
 
46
47
  const entries: LogEntry[] = []
47
48
  const lines = logContent.split("\n")
@@ -112,8 +113,19 @@ export function parseLogEntries(logContent: string): LogEntry[] {
112
113
  continue
113
114
  }
114
115
 
116
+ // Normalize timestamp to full ISO format if it's just time
117
+ let normalizedTimestamp = timestamp
118
+ if (/^\d{2}:\d{2}:\d{2}\.\d{3}$/.test(timestamp)) {
119
+ // It's just HH:MM:SS.mmm, convert to today's date with this time
120
+ const today = new Date()
121
+ const [hours, minutes, secondsMs] = timestamp.split(":")
122
+ const [seconds, ms] = secondsMs.split(".")
123
+ today.setHours(parseInt(hours, 10), parseInt(minutes, 10), parseInt(seconds, 10), parseInt(ms, 10))
124
+ normalizedTimestamp = today.toISOString()
125
+ }
126
+
115
127
  currentEntry = {
116
- timestamp,
128
+ timestamp: normalizedTimestamp,
117
129
  source,
118
130
  message: cleanedMessage,
119
131
  screenshot,