neural-loom 0.2.59 → 0.2.60

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 (65) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/cache/.previewinfo +1 -1
  4. package/.next/cache/.rscinfo +1 -1
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/diagnostics/route-bundle-stats.json +1 -1
  7. package/.next/fallback-build-manifest.json +3 -3
  8. package/.next/prerender-manifest.json +3 -3
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.html +1 -1
  17. package/.next/server/app/_not-found.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  24. package/.next/server/app/api/context/aider/route.js.nft.json +1 -1
  25. package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
  26. package/.next/server/app/api/context/route.js.nft.json +1 -1
  27. package/.next/server/app/api/context/ssh/route.js.nft.json +1 -1
  28. package/.next/server/app/api/recents/route.js.nft.json +1 -1
  29. package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
  30. package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
  31. package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
  32. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  33. package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
  34. package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
  35. package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
  36. package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
  37. package/.next/server/app/api/sql/connections/route.js.nft.json +1 -1
  38. package/.next/server/app/api/sql/mcp/route.js.nft.json +1 -1
  39. package/.next/server/app/api/sql/query/route.js.nft.json +1 -1
  40. package/.next/server/app/api/sql/schema/route.js.nft.json +1 -1
  41. package/.next/server/app/index.html +1 -1
  42. package/.next/server/app/index.rsc +2 -2
  43. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  44. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  45. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  46. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  47. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  48. package/.next/server/app/page/react-loadable-manifest.json +2 -2
  49. package/.next/server/app/page_client-reference-manifest.js +1 -1
  50. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js +1 -1
  51. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js.map +1 -1
  52. package/.next/server/middleware-build-manifest.js +3 -3
  53. package/.next/server/pages/404.html +1 -1
  54. package/.next/server/pages/500.html +1 -1
  55. package/.next/server/server-reference-manifest.js +1 -1
  56. package/.next/server/server-reference-manifest.json +1 -1
  57. package/.next/static/chunks/{10pqt4p7e3rk1.js → 07r_au7dcyu8l.js} +1 -1
  58. package/.next/static/chunks/{0-vb7c~yrtpon.js → 0y~7jjqbr14.5.js} +12 -2
  59. package/.next/trace +1 -1
  60. package/.next/trace-build +1 -1
  61. package/package.json +2 -1
  62. package/src/app/components/TerminalConsole.tsx +314 -11
  63. /package/.next/static/{cwv8IVp6ik4mwOjuM24B1 → PdRX_M_W5hqhNmHxYt-oH}/_buildManifest.js +0 -0
  64. /package/.next/static/{cwv8IVp6ik4mwOjuM24B1 → PdRX_M_W5hqhNmHxYt-oH}/_clientMiddlewareManifest.js +0 -0
  65. /package/.next/static/{cwv8IVp6ik4mwOjuM24B1 → PdRX_M_W5hqhNmHxYt-oH}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1 +1 @@
1
- [{"name":"generate-buildid","duration":196,"timestamp":4131744428,"id":4,"parentId":1,"tags":{},"startTime":1782087098945,"traceId":"4d09e263d7b43350"},{"name":"load-custom-routes","duration":324,"timestamp":4131744725,"id":5,"parentId":1,"tags":{},"startTime":1782087098945,"traceId":"4d09e263d7b43350"},{"name":"create-dist-dir","duration":476,"timestamp":4131745076,"id":6,"parentId":1,"tags":{},"startTime":1782087098946,"traceId":"4d09e263d7b43350"},{"name":"clean","duration":471,"timestamp":4131746276,"id":7,"parentId":1,"tags":{},"startTime":1782087098947,"traceId":"4d09e263d7b43350"},{"name":"discover-routes","duration":6503,"timestamp":4131772066,"id":8,"parentId":1,"tags":{},"startTime":1782087098973,"traceId":"4d09e263d7b43350"},{"name":"create-root-mapping","duration":53,"timestamp":4131778613,"id":9,"parentId":1,"tags":{},"startTime":1782087098979,"traceId":"4d09e263d7b43350"},{"name":"generate-route-types","duration":16167,"timestamp":4131779937,"id":10,"parentId":1,"tags":{},"startTime":1782087098981,"traceId":"4d09e263d7b43350"},{"name":"public-dir-conflict-check","duration":95,"timestamp":4131796247,"id":11,"parentId":1,"tags":{},"startTime":1782087098997,"traceId":"4d09e263d7b43350"},{"name":"generate-routes-manifest","duration":4706,"timestamp":4131796453,"id":12,"parentId":1,"tags":{},"startTime":1782087098997,"traceId":"4d09e263d7b43350"},{"name":"run-turbopack","duration":2706289,"timestamp":4131808920,"id":14,"parentId":1,"tags":{},"startTime":1782087099010,"traceId":"4d09e263d7b43350"},{"name":"turbopack-build-events","duration":66,"timestamp":4132232643,"id":15,"parentId":1,"tags":{},"startTime":1782087099433,"traceId":"4d09e263d7b43350"},{"name":"run-typescript","duration":4767538,"timestamp":4134528398,"id":16,"parentId":1,"tags":{},"startTime":1782087101729,"traceId":"4d09e263d7b43350"},{"name":"generate-required-server-files","duration":1506,"timestamp":4139298079,"id":18,"parentId":1,"tags":{},"startTime":1782087106499,"traceId":"4d09e263d7b43350"},{"name":"check-static-error-page","duration":9321,"timestamp":4139440159,"id":20,"parentId":19,"tags":{},"startTime":1782087106641,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":671574,"timestamp":4139463930,"id":44,"parentId":22,"tags":{},"startTime":1782087106665,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":690986,"timestamp":4139444665,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1782087106645,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":836178,"timestamp":4139464140,"id":48,"parentId":26,"tags":{},"startTime":1782087106665,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":854375,"timestamp":4139446011,"id":26,"parentId":19,"tags":{"page":"/api/context/ssh"},"startTime":1782087106647,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":840953,"timestamp":4139464044,"id":46,"parentId":24,"tags":{},"startTime":1782087106665,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":859399,"timestamp":4139445652,"id":24,"parentId":19,"tags":{"page":"/api/context/claude"},"startTime":1782087106646,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":841807,"timestamp":4139464501,"id":50,"parentId":28,"tags":{},"startTime":1782087106665,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":859989,"timestamp":4139446372,"id":28,"parentId":19,"tags":{"page":"/api/git"},"startTime":1782087106647,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":859353,"timestamp":4139463992,"id":45,"parentId":23,"tags":{},"startTime":1782087106665,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":878012,"timestamp":4139445398,"id":23,"parentId":19,"tags":{"page":"/api/context/aider"},"startTime":1782087106646,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":858364,"timestamp":4139465523,"id":62,"parentId":40,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":875068,"timestamp":4139448881,"id":40,"parentId":19,"tags":{"page":"/api/sql/query"},"startTime":1782087106650,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":862503,"timestamp":4139465122,"id":56,"parentId":34,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":880099,"timestamp":4139447575,"id":34,"parentId":19,"tags":{"page":"/api/sessions/scope"},"startTime":1782087106648,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":874217,"timestamp":4139465010,"id":54,"parentId":32,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":892055,"timestamp":4139447221,"id":32,"parentId":19,"tags":{"page":"/api/sessions/launch"},"startTime":1782087106648,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":872232,"timestamp":4139468843,"id":64,"parentId":42,"tags":{},"startTime":1782087106670,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":891948,"timestamp":4139449181,"id":42,"parentId":19,"tags":{"page":"/"},"startTime":1782087106650,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":875886,"timestamp":4139465558,"id":63,"parentId":41,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":892457,"timestamp":4139449031,"id":41,"parentId":19,"tags":{"page":"/api/sql/schema"},"startTime":1782087106650,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":878610,"timestamp":4139463712,"id":43,"parentId":21,"tags":{},"startTime":1782087106664,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":899837,"timestamp":4139442522,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1782087106643,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":878152,"timestamp":4139464609,"id":51,"parentId":29,"tags":{},"startTime":1782087106665,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":896184,"timestamp":4139446617,"id":29,"parentId":19,"tags":{"page":"/api/recents"},"startTime":1782087106647,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":879056,"timestamp":4139465454,"id":60,"parentId":38,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":895976,"timestamp":4139448584,"id":38,"parentId":19,"tags":{"page":"/api/sql/connections"},"startTime":1782087106649,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":879429,"timestamp":4139465273,"id":57,"parentId":35,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":896891,"timestamp":4139447836,"id":35,"parentId":19,"tags":{"page":"/api/sessions/start"},"startTime":1782087106649,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":879300,"timestamp":4139465497,"id":61,"parentId":39,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":896071,"timestamp":4139448741,"id":39,"parentId":19,"tags":{"page":"/api/sql/mcp"},"startTime":1782087106649,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":879456,"timestamp":4139465406,"id":59,"parentId":37,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":896452,"timestamp":4139448421,"id":37,"parentId":19,"tags":{"page":"/api/sessions/stop"},"startTime":1782087106649,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":883401,"timestamp":4139464943,"id":53,"parentId":31,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":901343,"timestamp":4139447045,"id":31,"parentId":19,"tags":{"page":"/api/sessions/input"},"startTime":1782087106648,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":893704,"timestamp":4139464816,"id":52,"parentId":30,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":911753,"timestamp":4139446809,"id":30,"parentId":19,"tags":{"page":"/api/sessions/inject"},"startTime":1782087106648,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":894713,"timestamp":4139465352,"id":58,"parentId":36,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":911897,"timestamp":4139448205,"id":36,"parentId":19,"tags":{"page":"/api/sessions/stats"},"startTime":1782087106649,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":896502,"timestamp":4139465062,"id":55,"parentId":33,"tags":{},"startTime":1782087106666,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":914194,"timestamp":4139447406,"id":33,"parentId":19,"tags":{"page":"/api/sessions"},"startTime":1782087106648,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":897567,"timestamp":4139464090,"id":47,"parentId":25,"tags":{},"startTime":1782087106665,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":915827,"timestamp":4139445841,"id":25,"parentId":19,"tags":{"page":"/api/context"},"startTime":1782087106647,"traceId":"4d09e263d7b43350"},{"name":"is-page-static","duration":903027,"timestamp":4139464361,"id":49,"parentId":27,"tags":{},"startTime":1782087106665,"traceId":"4d09e263d7b43350"},{"name":"check-page","duration":921251,"timestamp":4139446178,"id":27,"parentId":19,"tags":{"page":"/api/files"},"startTime":1782087106647,"traceId":"4d09e263d7b43350"},{"name":"static-check","duration":927800,"timestamp":4139439663,"id":19,"parentId":1,"tags":{},"startTime":1782087106640,"traceId":"4d09e263d7b43350"},{"name":"write-routes-manifest","duration":860,"timestamp":4140368695,"id":66,"parentId":1,"tags":{},"startTime":1782087107569,"traceId":"4d09e263d7b43350"},{"name":"load-dotenv","duration":39,"timestamp":4140391446,"id":69,"parentId":68,"tags":{},"startTime":1782087107592,"traceId":"4d09e263d7b43350"},{"name":"run-export-path-map","duration":381,"timestamp":4140397113,"id":70,"parentId":68,"tags":{},"startTime":1782087107598,"traceId":"4d09e263d7b43350"},{"name":"next-export","duration":760134,"timestamp":4140390572,"id":68,"parentId":1,"tags":{},"startTime":1782087107591,"traceId":"4d09e263d7b43350"},{"name":"move-exported-app-not-found-","duration":2183,"timestamp":4141152462,"id":71,"parentId":67,"tags":{},"startTime":1782087108353,"traceId":"4d09e263d7b43350"},{"name":"move-exported-app-global-error-","duration":1621,"timestamp":4141154780,"id":72,"parentId":67,"tags":{},"startTime":1782087108356,"traceId":"4d09e263d7b43350"},{"name":"static-generation","duration":783814,"timestamp":4140376201,"id":67,"parentId":1,"tags":{},"startTime":1782087107577,"traceId":"4d09e263d7b43350"},{"name":"write-routes-manifest","duration":929,"timestamp":4141160140,"id":73,"parentId":1,"tags":{},"startTime":1782087108361,"traceId":"4d09e263d7b43350"},{"name":"print-tree-view","duration":3223,"timestamp":4141179083,"id":74,"parentId":1,"tags":{},"startTime":1782087108380,"traceId":"4d09e263d7b43350"},{"name":"write-route-bundle-stats","duration":12304,"timestamp":4141182338,"id":75,"parentId":1,"tags":{},"startTime":1782087108383,"traceId":"4d09e263d7b43350"},{"name":"telemetry-flush","duration":169822,"timestamp":4141194675,"id":76,"parentId":1,"tags":{},"startTime":1782087108395,"traceId":"4d09e263d7b43350"},{"name":"next-build","duration":9669753,"timestamp":4131694775,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1782087098896,"traceId":"4d09e263d7b43350"}]
1
+ [{"name":"generate-buildid","duration":289,"timestamp":15887653929,"id":4,"parentId":1,"tags":{},"startTime":1782098854855,"traceId":"f3194e3b8a8014eb"},{"name":"load-custom-routes","duration":354,"timestamp":15887654335,"id":5,"parentId":1,"tags":{},"startTime":1782098854855,"traceId":"f3194e3b8a8014eb"},{"name":"create-dist-dir","duration":839,"timestamp":15887654727,"id":6,"parentId":1,"tags":{},"startTime":1782098854855,"traceId":"f3194e3b8a8014eb"},{"name":"clean","duration":716,"timestamp":15887658946,"id":7,"parentId":1,"tags":{},"startTime":1782098854860,"traceId":"f3194e3b8a8014eb"},{"name":"discover-routes","duration":6632,"timestamp":15887686082,"id":8,"parentId":1,"tags":{},"startTime":1782098854887,"traceId":"f3194e3b8a8014eb"},{"name":"create-root-mapping","duration":66,"timestamp":15887692767,"id":9,"parentId":1,"tags":{},"startTime":1782098854893,"traceId":"f3194e3b8a8014eb"},{"name":"generate-route-types","duration":19104,"timestamp":15887694530,"id":10,"parentId":1,"tags":{},"startTime":1782098854895,"traceId":"f3194e3b8a8014eb"},{"name":"public-dir-conflict-check","duration":128,"timestamp":15887713821,"id":11,"parentId":1,"tags":{},"startTime":1782098854915,"traceId":"f3194e3b8a8014eb"},{"name":"generate-routes-manifest","duration":2718,"timestamp":15887714075,"id":12,"parentId":1,"tags":{},"startTime":1782098854915,"traceId":"f3194e3b8a8014eb"},{"name":"run-turbopack","duration":2687848,"timestamp":15887727011,"id":14,"parentId":1,"tags":{},"startTime":1782098854928,"traceId":"f3194e3b8a8014eb"},{"name":"turbopack-build-events","duration":61,"timestamp":15888089614,"id":15,"parentId":1,"tags":{},"startTime":1782098855290,"traceId":"f3194e3b8a8014eb"},{"name":"run-typescript","duration":4891153,"timestamp":15890430282,"id":16,"parentId":1,"tags":{},"startTime":1782098857631,"traceId":"f3194e3b8a8014eb"},{"name":"generate-required-server-files","duration":1502,"timestamp":15895323235,"id":18,"parentId":1,"tags":{},"startTime":1782098862524,"traceId":"f3194e3b8a8014eb"},{"name":"check-static-error-page","duration":10695,"timestamp":15895474390,"id":20,"parentId":19,"tags":{},"startTime":1782098862675,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":809632,"timestamp":15895491271,"id":44,"parentId":22,"tags":{},"startTime":1782098862692,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":821655,"timestamp":15895479375,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1782098862680,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":962011,"timestamp":15895492098,"id":50,"parentId":28,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":972768,"timestamp":15895481401,"id":28,"parentId":19,"tags":{"page":"/api/git"},"startTime":1782098862682,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":963600,"timestamp":15895490937,"id":43,"parentId":21,"tags":{},"startTime":1782098862692,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":977569,"timestamp":15895477017,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1782098862678,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":977005,"timestamp":15895491661,"id":46,"parentId":24,"tags":{},"startTime":1782098862692,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":988270,"timestamp":15895480469,"id":24,"parentId":19,"tags":{"page":"/api/context/claude"},"startTime":1782098862681,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":977395,"timestamp":15895492686,"id":56,"parentId":34,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":987220,"timestamp":15895482912,"id":34,"parentId":19,"tags":{"page":"/api/sessions/scope"},"startTime":1782098862684,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":988038,"timestamp":15895492494,"id":53,"parentId":31,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":998313,"timestamp":15895482271,"id":31,"parentId":19,"tags":{"page":"/api/sessions/input"},"startTime":1782098862683,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":988318,"timestamp":15895492621,"id":55,"parentId":33,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":998299,"timestamp":15895482684,"id":33,"parentId":19,"tags":{"page":"/api/sessions"},"startTime":1782098862683,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":991274,"timestamp":15895492020,"id":49,"parentId":27,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1002244,"timestamp":15895481100,"id":27,"parentId":19,"tags":{"page":"/api/files"},"startTime":1782098862682,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":992167,"timestamp":15895491801,"id":47,"parentId":25,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1003312,"timestamp":15895480704,"id":25,"parentId":19,"tags":{"page":"/api/context"},"startTime":1782098862681,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1016309,"timestamp":15895493005,"id":60,"parentId":38,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1025284,"timestamp":15895484079,"id":38,"parentId":19,"tags":{"page":"/api/sql/connections"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1017937,"timestamp":15895491527,"id":45,"parentId":23,"tags":{},"startTime":1782098862692,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1029319,"timestamp":15895480171,"id":23,"parentId":19,"tags":{"page":"/api/context/aider"},"startTime":1782098862681,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1017691,"timestamp":15895491871,"id":48,"parentId":26,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1028668,"timestamp":15895480913,"id":26,"parentId":19,"tags":{"page":"/api/context/ssh"},"startTime":1782098862682,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1018994,"timestamp":15895493044,"id":61,"parentId":39,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1027821,"timestamp":15895484269,"id":39,"parentId":19,"tags":{"page":"/api/sql/mcp"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1019584,"timestamp":15895493077,"id":62,"parentId":40,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1028258,"timestamp":15895484435,"id":40,"parentId":19,"tags":{"page":"/api/sql/query"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1020630,"timestamp":15895492181,"id":51,"parentId":29,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1031137,"timestamp":15895481693,"id":29,"parentId":19,"tags":{"page":"/api/recents"},"startTime":1782098862682,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1023500,"timestamp":15895492961,"id":59,"parentId":37,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1032648,"timestamp":15895483859,"id":37,"parentId":19,"tags":{"page":"/api/sessions/stop"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1024405,"timestamp":15895492839,"id":57,"parentId":35,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1034082,"timestamp":15895483216,"id":35,"parentId":19,"tags":{"page":"/api/sessions/start"},"startTime":1782098862684,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1024984,"timestamp":15895492916,"id":58,"parentId":36,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1034306,"timestamp":15895483623,"id":36,"parentId":19,"tags":{"page":"/api/sessions/stats"},"startTime":1782098862684,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1024968,"timestamp":15895493107,"id":63,"parentId":41,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1033513,"timestamp":15895484595,"id":41,"parentId":19,"tags":{"page":"/api/sql/schema"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1025806,"timestamp":15895492361,"id":52,"parentId":30,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1036223,"timestamp":15895481957,"id":30,"parentId":19,"tags":{"page":"/api/sessions/inject"},"startTime":1782098862683,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1030634,"timestamp":15895492563,"id":54,"parentId":32,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1040760,"timestamp":15895482479,"id":32,"parentId":19,"tags":{"page":"/api/sessions/launch"},"startTime":1782098862683,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1026283,"timestamp":15895497021,"id":64,"parentId":42,"tags":{},"startTime":1782098862698,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1038567,"timestamp":15895484748,"id":42,"parentId":19,"tags":{"page":"/"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"static-check","duration":1049525,"timestamp":15895473813,"id":19,"parentId":1,"tags":{},"startTime":1782098862675,"traceId":"f3194e3b8a8014eb"},{"name":"write-routes-manifest","duration":870,"timestamp":15896524523,"id":66,"parentId":1,"tags":{},"startTime":1782098863725,"traceId":"f3194e3b8a8014eb"},{"name":"load-dotenv","duration":50,"timestamp":15896546193,"id":69,"parentId":68,"tags":{},"startTime":1782098863747,"traceId":"f3194e3b8a8014eb"},{"name":"run-export-path-map","duration":441,"timestamp":15896552270,"id":70,"parentId":68,"tags":{},"startTime":1782098863753,"traceId":"f3194e3b8a8014eb"},{"name":"next-export","duration":832486,"timestamp":15896545248,"id":68,"parentId":1,"tags":{},"startTime":1782098863746,"traceId":"f3194e3b8a8014eb"},{"name":"move-exported-app-not-found-","duration":2156,"timestamp":15897379653,"id":71,"parentId":67,"tags":{},"startTime":1782098864580,"traceId":"f3194e3b8a8014eb"},{"name":"move-exported-app-global-error-","duration":1749,"timestamp":15897381943,"id":72,"parentId":67,"tags":{},"startTime":1782098864583,"traceId":"f3194e3b8a8014eb"},{"name":"static-generation","duration":855737,"timestamp":15896531954,"id":67,"parentId":1,"tags":{},"startTime":1782098863733,"traceId":"f3194e3b8a8014eb"},{"name":"write-routes-manifest","duration":951,"timestamp":15897387812,"id":73,"parentId":1,"tags":{},"startTime":1782098864589,"traceId":"f3194e3b8a8014eb"},{"name":"print-tree-view","duration":2895,"timestamp":15897410621,"id":74,"parentId":1,"tags":{},"startTime":1782098864611,"traceId":"f3194e3b8a8014eb"},{"name":"write-route-bundle-stats","duration":11820,"timestamp":15897413546,"id":75,"parentId":1,"tags":{},"startTime":1782098864614,"traceId":"f3194e3b8a8014eb"},{"name":"telemetry-flush","duration":163593,"timestamp":15897425420,"id":76,"parentId":1,"tags":{},"startTime":1782098864626,"traceId":"f3194e3b8a8014eb"},{"name":"next-build","duration":10009052,"timestamp":15887579991,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1782098854781,"traceId":"f3194e3b8a8014eb"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":2706289,"timestamp":4131808920,"id":14,"parentId":1,"tags":{},"startTime":1782087099010,"traceId":"4d09e263d7b43350"},{"name":"turbopack-build-events","duration":66,"timestamp":4132232643,"id":15,"parentId":1,"tags":{},"startTime":1782087099433,"traceId":"4d09e263d7b43350"},{"name":"run-typescript","duration":4767538,"timestamp":4134528398,"id":16,"parentId":1,"tags":{},"startTime":1782087101729,"traceId":"4d09e263d7b43350"},{"name":"static-check","duration":927800,"timestamp":4139439663,"id":19,"parentId":1,"tags":{},"startTime":1782087106640,"traceId":"4d09e263d7b43350"},{"name":"static-generation","duration":783814,"timestamp":4140376201,"id":67,"parentId":1,"tags":{},"startTime":1782087107577,"traceId":"4d09e263d7b43350"},{"name":"telemetry-flush","duration":169822,"timestamp":4141194675,"id":76,"parentId":1,"tags":{},"startTime":1782087108395,"traceId":"4d09e263d7b43350"},{"name":"next-build","duration":9669753,"timestamp":4131694775,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1782087098896,"traceId":"4d09e263d7b43350"}]
1
+ [{"name":"run-turbopack","duration":2687848,"timestamp":15887727011,"id":14,"parentId":1,"tags":{},"startTime":1782098854928,"traceId":"f3194e3b8a8014eb"},{"name":"turbopack-build-events","duration":61,"timestamp":15888089614,"id":15,"parentId":1,"tags":{},"startTime":1782098855290,"traceId":"f3194e3b8a8014eb"},{"name":"run-typescript","duration":4891153,"timestamp":15890430282,"id":16,"parentId":1,"tags":{},"startTime":1782098857631,"traceId":"f3194e3b8a8014eb"},{"name":"static-check","duration":1049525,"timestamp":15895473813,"id":19,"parentId":1,"tags":{},"startTime":1782098862675,"traceId":"f3194e3b8a8014eb"},{"name":"static-generation","duration":855737,"timestamp":15896531954,"id":67,"parentId":1,"tags":{},"startTime":1782098863733,"traceId":"f3194e3b8a8014eb"},{"name":"telemetry-flush","duration":163593,"timestamp":15897425420,"id":76,"parentId":1,"tags":{},"startTime":1782098864626,"traceId":"f3194e3b8a8014eb"},{"name":"next-build","duration":10009052,"timestamp":15887579991,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1782098854781,"traceId":"f3194e3b8a8014eb"}]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neural-loom",
3
- "version": "0.2.59",
3
+ "version": "0.2.60",
4
4
  "bin": {
5
5
  "neural-loom": "./bin/cli.js"
6
6
  },
@@ -21,6 +21,7 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "@monaco-editor/react": "^4.7.0",
24
+ "@xterm/addon-search": "^0.16.0",
24
25
  "mssql": "^12.5.5",
25
26
  "next": "16.2.6",
26
27
  "node-pty": "^1.1.0",
@@ -1,9 +1,10 @@
1
1
  "use client";
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
3
 
4
- import { useEffect, useRef } from "react";
4
+ import { useEffect, useRef, useState } from "react";
5
5
  import { Terminal } from "xterm";
6
6
  import { FitAddon } from "xterm-addon-fit";
7
+ import { SearchAddon } from "@xterm/addon-search";
7
8
  import "xterm/css/xterm.css";
8
9
 
9
10
  interface TerminalConsoleProps {
@@ -12,12 +13,111 @@ interface TerminalConsoleProps {
12
13
  wsPort?: number;
13
14
  }
14
15
 
16
+ interface LogBufferItem {
17
+ type: "output" | "error" | "raw";
18
+ data?: string;
19
+ message?: string;
20
+ }
21
+
15
22
  export default function TerminalConsole({ sessionId, height = "400px", wsPort = 3001 }: TerminalConsoleProps) {
16
23
  const terminalRef = useRef<HTMLDivElement>(null);
17
24
  const xtermRef = useRef<Terminal | null>(null);
18
25
  const wsRef = useRef<WebSocket | null>(null);
26
+ const searchInputRef = useRef<HTMLInputElement | null>(null);
27
+
28
+ // Pause & Resume scroll buffer state
29
+ const [isPaused, setIsPaused] = useState(false);
30
+ const [bufferedLogsCount, setBufferedLogsCount] = useState(0);
31
+ const isPausedRef = useRef(false);
32
+ const bufferedLogsRef = useRef<LogBufferItem[]>([]);
33
+
34
+ // Search state
35
+ const [searchOpen, setSearchOpen] = useState(false);
36
+ const [searchQuery, setSearchQuery] = useState("");
37
+ const [caseSensitive, setCaseSensitive] = useState(false);
38
+ const searchAddonRef = useRef<SearchAddon | null>(null);
39
+
40
+ // Focus search input when opened
41
+ useEffect(() => {
42
+ if (searchOpen && searchInputRef.current) {
43
+ searchInputRef.current.focus();
44
+ searchInputRef.current.select();
45
+ }
46
+ }, [searchOpen]);
47
+
48
+ // Handle keyboard events in search bar
49
+ const handleSearchKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
50
+ if (e.key === "Enter") {
51
+ e.preventDefault();
52
+ if (e.shiftKey) {
53
+ searchPrev();
54
+ } else {
55
+ searchNext();
56
+ }
57
+ } else if (e.key === "Escape") {
58
+ e.preventDefault();
59
+ setSearchOpen(false);
60
+ xtermRef.current?.focus();
61
+ }
62
+ };
63
+
64
+ const searchNext = () => {
65
+ if (searchAddonRef.current && searchQuery) {
66
+ searchAddonRef.current.findNext(searchQuery, { caseSensitive, incremental: false });
67
+ }
68
+ };
69
+
70
+ const searchPrev = () => {
71
+ if (searchAddonRef.current && searchQuery) {
72
+ searchAddonRef.current.findPrevious(searchQuery, { caseSensitive, incremental: false });
73
+ }
74
+ };
75
+
76
+ // Incremental search as user types
77
+ useEffect(() => {
78
+ if (searchAddonRef.current && searchQuery) {
79
+ searchAddonRef.current.findNext(searchQuery, { caseSensitive, incremental: true });
80
+ }
81
+ }, [searchQuery, caseSensitive]);
82
+
83
+ // Pause and Resume control handlers
84
+ const togglePause = () => {
85
+ setIsPaused((prev) => {
86
+ const next = !prev;
87
+ isPausedRef.current = next;
88
+ if (!next) {
89
+ flushBufferedLogs();
90
+ }
91
+ return next;
92
+ });
93
+ };
94
+
95
+ const flushBufferedLogs = () => {
96
+ const logs = bufferedLogsRef.current;
97
+ bufferedLogsRef.current = [];
98
+ setBufferedLogsCount(0);
99
+ const term = xtermRef.current;
100
+ if (!term) return;
101
+ for (const log of logs) {
102
+ if (log.type === "output" && log.data) {
103
+ term.write(log.data);
104
+ } else if (log.type === "error" && log.message) {
105
+ term.write(`\r\n\x1b[1;31m[System Error] ${log.message}\x1b[0m\r\n`);
106
+ } else if (log.type === "raw" && log.data) {
107
+ term.write(log.data);
108
+ }
109
+ }
110
+ };
19
111
 
20
112
  useEffect(() => {
113
+ // Reset states on session switch
114
+ setIsPaused(false);
115
+ isPausedRef.current = false;
116
+ bufferedLogsRef.current = [];
117
+ setBufferedLogsCount(0);
118
+ setSearchOpen(false);
119
+ setSearchQuery("");
120
+
21
121
  if (!terminalRef.current) return;
22
122
 
23
123
  let isDisposed = false;
@@ -47,9 +147,23 @@ export default function TerminalConsole({ sessionId, height = "400px", wsPort =
47
147
  const fitAddon = new FitAddon();
48
148
  term.loadAddon(fitAddon);
49
149
 
150
+ const searchAddon = new SearchAddon();
151
+ term.loadAddon(searchAddon);
152
+ searchAddonRef.current = searchAddon;
153
+
50
154
  term.open(terminalRef.current);
51
155
  term.focus();
52
156
 
157
+ // Attach search key handler
158
+ term.attachCustomKeyEventHandler((e) => {
159
+ if (e.ctrlKey && e.key === "f" && e.type === "keydown") {
160
+ e.preventDefault();
161
+ setSearchOpen(true);
162
+ return false;
163
+ }
164
+ return true;
165
+ });
166
+
53
167
  // Monkeypatch to prevent crash during unmount / disposal
54
168
  try {
55
169
  const core = (term as any)._core;
@@ -159,13 +273,28 @@ export default function TerminalConsole({ sessionId, height = "400px", wsPort =
159
273
  }
160
274
  term.focus();
161
275
  } else if (msg.type === "output") {
162
- term.write(msg.data);
276
+ if (isPausedRef.current) {
277
+ bufferedLogsRef.current.push({ type: "output", data: msg.data });
278
+ setBufferedLogsCount(bufferedLogsRef.current.length);
279
+ } else {
280
+ term.write(msg.data);
281
+ }
163
282
  } else if (msg.type === "error") {
164
- term.write(`\r\n\x1b[1;31m[System Error] ${msg.message}\x1b[0m\r\n`);
283
+ if (isPausedRef.current) {
284
+ bufferedLogsRef.current.push({ type: "error", message: msg.message });
285
+ setBufferedLogsCount(bufferedLogsRef.current.length);
286
+ } else {
287
+ term.write(`\r\n\x1b[1;31m[System Error] ${msg.message}\x1b[0m\r\n`);
288
+ }
165
289
  }
166
290
  } catch {
167
291
  // Fallback for raw stream chunks
168
- term.write(event.data);
292
+ if (isPausedRef.current) {
293
+ bufferedLogsRef.current.push({ type: "raw", data: event.data });
294
+ setBufferedLogsCount(bufferedLogsRef.current.length);
295
+ } else {
296
+ term.write(event.data);
297
+ }
169
298
  }
170
299
  };
171
300
 
@@ -232,16 +361,190 @@ export default function TerminalConsole({ sessionId, height = "400px", wsPort =
232
361
  borderBottomLeftRadius: "12px",
233
362
  borderBottomRightRadius: "12px",
234
363
  overflow: "hidden",
235
- padding: "8px" // Move padding here to avoid fitAddon bounds calculation clipping
364
+ display: "flex",
365
+ flexDirection: "column",
366
+ position: "relative"
236
367
  }}
237
368
  >
369
+ {/* Console Mini Toolbar */}
238
370
  <div
239
- ref={terminalRef}
240
- style={{
241
- width: "100%",
242
- height: "100%"
243
- }}
244
- />
371
+ style={{
372
+ display: "flex",
373
+ alignItems: "center",
374
+ justifyContent: "space-between",
375
+ padding: "6px 12px",
376
+ backgroundColor: "#030406",
377
+ borderBottom: "1px solid var(--border)",
378
+ fontSize: "0.7rem",
379
+ color: "var(--muted)",
380
+ userSelect: "none"
381
+ }}
382
+ >
383
+ <div style={{ display: "flex", alignItems: "center", gap: "0.5rem" }}>
384
+ <span>Session ID: <strong style={{ color: "#cbd5e1", fontFamily: "var(--font-mono)" }}>{sessionId.substring(0, 8)}</strong></span>
385
+ {isPaused && (
386
+ <span style={{
387
+ backgroundColor: "rgba(217, 119, 82, 0.15)",
388
+ color: "#e0825f",
389
+ padding: "1px 6px",
390
+ borderRadius: "3px",
391
+ fontWeight: 600,
392
+ fontSize: "0.6rem",
393
+ border: "1px solid rgba(217, 119, 82, 0.25)"
394
+ }}>
395
+ ⏸️ Scroll Paused ({bufferedLogsCount} queued)
396
+ </span>
397
+ )}
398
+ </div>
399
+ <div style={{ display: "flex", gap: "0.35rem", alignItems: "center" }}>
400
+ <button
401
+ onClick={togglePause}
402
+ style={{
403
+ padding: "2px 6px",
404
+ borderRadius: "3px",
405
+ border: isPaused ? "1px solid #d97706" : "1px solid var(--border)",
406
+ backgroundColor: isPaused ? "rgba(217, 119, 82, 0.15)" : "transparent",
407
+ color: isPaused ? "#e0825f" : "var(--muted)",
408
+ fontSize: "0.65rem",
409
+ fontWeight: 600,
410
+ cursor: "pointer",
411
+ }}
412
+ title={isPaused ? "Resume stdout scrolling" : "Pause stdout scroll buffering"}
413
+ >
414
+ {isPaused ? "▶️ Resume" : "⏸️ Pause Scroll"}
415
+ </button>
416
+ <button
417
+ onClick={() => setSearchOpen(!searchOpen)}
418
+ style={{
419
+ padding: "2px 6px",
420
+ borderRadius: "3px",
421
+ border: searchOpen ? "1px solid var(--primary)" : "1px solid var(--border)",
422
+ backgroundColor: searchOpen ? "rgba(168, 85, 247, 0.15)" : "transparent",
423
+ color: searchOpen ? "#c084fc" : "var(--muted)",
424
+ fontSize: "0.65rem",
425
+ fontWeight: 600,
426
+ cursor: "pointer",
427
+ }}
428
+ title="Search console output (Ctrl+F)"
429
+ >
430
+ 🔍 Search
431
+ </button>
432
+ </div>
433
+ </div>
434
+
435
+ <div style={{ flex: 1, position: "relative", minHeight: 0 }}>
436
+ {/* Search Overlay */}
437
+ {searchOpen && (
438
+ <div
439
+ style={{
440
+ position: "absolute",
441
+ top: "8px",
442
+ right: "24px",
443
+ zIndex: 50,
444
+ backgroundColor: "#0b101b",
445
+ border: "1px solid var(--border-focus)",
446
+ borderRadius: "6px",
447
+ padding: "6px 8px",
448
+ display: "flex",
449
+ alignItems: "center",
450
+ gap: "0.35rem",
451
+ boxShadow: "0 4px 12px rgba(0,0,0,0.5)"
452
+ }}
453
+ >
454
+ <input
455
+ ref={searchInputRef}
456
+ type="text"
457
+ value={searchQuery}
458
+ onChange={(e) => setSearchQuery(e.target.value)}
459
+ onKeyDown={handleSearchKeyDown}
460
+ placeholder="Find..."
461
+ style={{
462
+ backgroundColor: "#05070a",
463
+ border: "1px solid var(--border)",
464
+ borderRadius: "4px",
465
+ padding: "2px 6px",
466
+ color: "#e2e8f0",
467
+ fontSize: "0.7rem",
468
+ outline: "none",
469
+ width: "120px"
470
+ }}
471
+ />
472
+ <button
473
+ onClick={searchPrev}
474
+ style={{
475
+ backgroundColor: "transparent",
476
+ border: "1px solid var(--border)",
477
+ color: "var(--foreground)",
478
+ borderRadius: "3px",
479
+ padding: "2px 4px",
480
+ cursor: "pointer",
481
+ fontSize: "0.65rem"
482
+ }}
483
+ title="Previous match (Shift+Enter)"
484
+ >
485
+
486
+ </button>
487
+ <button
488
+ onClick={searchNext}
489
+ style={{
490
+ backgroundColor: "transparent",
491
+ border: "1px solid var(--border)",
492
+ color: "var(--foreground)",
493
+ borderRadius: "3px",
494
+ padding: "2px 4px",
495
+ cursor: "pointer",
496
+ fontSize: "0.65rem"
497
+ }}
498
+ title="Next match (Enter)"
499
+ >
500
+
501
+ </button>
502
+ <button
503
+ onClick={() => setCaseSensitive(!caseSensitive)}
504
+ style={{
505
+ border: caseSensitive ? "1px solid var(--primary)" : "1px solid var(--border)",
506
+ backgroundColor: caseSensitive ? "rgba(168, 85, 247, 0.15)" : "transparent",
507
+ color: caseSensitive ? "#c084fc" : "var(--muted)",
508
+ borderRadius: "3px",
509
+ padding: "2px 4px",
510
+ cursor: "pointer",
511
+ fontSize: "0.65rem",
512
+ fontWeight: 600
513
+ }}
514
+ title="Match Case"
515
+ >
516
+ Aa
517
+ </button>
518
+ <button
519
+ onClick={() => {
520
+ setSearchOpen(false);
521
+ xtermRef.current?.focus();
522
+ }}
523
+ style={{
524
+ background: "none",
525
+ border: "none",
526
+ color: "var(--muted)",
527
+ cursor: "pointer",
528
+ fontSize: "0.75rem",
529
+ padding: "0 2px"
530
+ }}
531
+ title="Close search panel"
532
+ >
533
+
534
+ </button>
535
+ </div>
536
+ )}
537
+
538
+ <div
539
+ ref={terminalRef}
540
+ style={{
541
+ width: "100%",
542
+ height: "100%",
543
+ padding: "8px"
544
+ }}
545
+ />
546
+ </div>
245
547
  </div>
246
548
  );
247
549
  }
550
+