neural-loom 0.2.57 → 0.2.59

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 (75) 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/git/route.js +2 -1
  29. package/.next/server/app/api/git/route.js.nft.json +1 -1
  30. package/.next/server/app/api/recents/route.js.nft.json +1 -1
  31. package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
  32. package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
  33. package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
  34. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  35. package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
  36. package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
  37. package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
  38. package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
  39. package/.next/server/app/api/sql/connections/route.js.nft.json +1 -1
  40. package/.next/server/app/api/sql/mcp/route.js.nft.json +1 -1
  41. package/.next/server/app/api/sql/query/route.js.nft.json +1 -1
  42. package/.next/server/app/api/sql/schema/route.js.nft.json +1 -1
  43. package/.next/server/app/index.html +1 -1
  44. package/.next/server/app/index.rsc +2 -2
  45. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  46. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  47. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  48. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  49. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  50. package/.next/server/app/page/react-loadable-manifest.json +1 -1
  51. package/.next/server/app/page_client-reference-manifest.js +1 -1
  52. package/.next/server/chunks/[externals]__0layedb._.js +3 -0
  53. package/.next/server/chunks/[externals]__0layedb._.js.map +1 -0
  54. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js +1 -1
  55. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js.map +1 -1
  56. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_016qk~0.js +4 -0
  57. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_016qk~0.js.map +1 -0
  58. package/.next/server/middleware-build-manifest.js +3 -3
  59. package/.next/server/pages/404.html +1 -1
  60. package/.next/server/pages/500.html +1 -1
  61. package/.next/server/server-reference-manifest.js +1 -1
  62. package/.next/server/server-reference-manifest.json +1 -1
  63. package/.next/static/chunks/0sqeixl35qoac.js +1 -0
  64. package/.next/static/chunks/{15b-kgkhsdb0s.js → 10pqt4p7e3rk1.js} +1 -1
  65. package/.next/trace +1 -1
  66. package/.next/trace-build +1 -1
  67. package/package.json +2 -1
  68. package/src/app/api/git/route.ts +79 -0
  69. package/src/app/components/IdeLayout.tsx +328 -0
  70. package/.next/server/chunks/[root-of-the-server]__0kn5tap._.js +0 -4
  71. package/.next/server/chunks/[root-of-the-server]__0kn5tap._.js.map +0 -1
  72. package/.next/static/chunks/12m0vh2h637z4.js +0 -1
  73. /package/.next/static/{HoQA8gsbI6xeWQpFAPJZ9 → cwv8IVp6ik4mwOjuM24B1}/_buildManifest.js +0 -0
  74. /package/.next/static/{HoQA8gsbI6xeWQpFAPJZ9 → cwv8IVp6ik4mwOjuM24B1}/_clientMiddlewareManifest.js +0 -0
  75. /package/.next/static/{HoQA8gsbI6xeWQpFAPJZ9 → cwv8IVp6ik4mwOjuM24B1}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1 +1 @@
1
- [{"name":"generate-buildid","duration":276,"timestamp":42366483408,"id":4,"parentId":1,"tags":{},"startTime":1781958639964,"traceId":"ddc0cdba614495e5"},{"name":"load-custom-routes","duration":343,"timestamp":42366483802,"id":5,"parentId":1,"tags":{},"startTime":1781958639965,"traceId":"ddc0cdba614495e5"},{"name":"create-dist-dir","duration":684,"timestamp":42366484173,"id":6,"parentId":1,"tags":{},"startTime":1781958639965,"traceId":"ddc0cdba614495e5"},{"name":"clean","duration":630,"timestamp":42366487608,"id":7,"parentId":1,"tags":{},"startTime":1781958639968,"traceId":"ddc0cdba614495e5"},{"name":"discover-routes","duration":5764,"timestamp":42366511684,"id":8,"parentId":1,"tags":{},"startTime":1781958639993,"traceId":"ddc0cdba614495e5"},{"name":"create-root-mapping","duration":60,"timestamp":42366517496,"id":9,"parentId":1,"tags":{},"startTime":1781958639998,"traceId":"ddc0cdba614495e5"},{"name":"generate-route-types","duration":17113,"timestamp":42366518868,"id":10,"parentId":1,"tags":{},"startTime":1781958640000,"traceId":"ddc0cdba614495e5"},{"name":"public-dir-conflict-check","duration":101,"timestamp":42366536137,"id":11,"parentId":1,"tags":{},"startTime":1781958640017,"traceId":"ddc0cdba614495e5"},{"name":"generate-routes-manifest","duration":2735,"timestamp":42366536353,"id":12,"parentId":1,"tags":{},"startTime":1781958640017,"traceId":"ddc0cdba614495e5"},{"name":"run-turbopack","duration":2399315,"timestamp":42366546702,"id":14,"parentId":1,"tags":{},"startTime":1781958640028,"traceId":"ddc0cdba614495e5"},{"name":"turbopack-build-events","duration":66,"timestamp":42366855852,"id":15,"parentId":1,"tags":{},"startTime":1781958640337,"traceId":"ddc0cdba614495e5"},{"name":"run-typescript","duration":4604657,"timestamp":42368954689,"id":16,"parentId":1,"tags":{},"startTime":1781958642436,"traceId":"ddc0cdba614495e5"},{"name":"generate-required-server-files","duration":1523,"timestamp":42373560364,"id":18,"parentId":1,"tags":{},"startTime":1781958647041,"traceId":"ddc0cdba614495e5"},{"name":"check-static-error-page","duration":9647,"timestamp":42373723199,"id":20,"parentId":19,"tags":{},"startTime":1781958647204,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":657768,"timestamp":42373738656,"id":44,"parentId":22,"tags":{},"startTime":1781958647220,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":669326,"timestamp":42373727235,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1781958647208,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":778531,"timestamp":42373738870,"id":46,"parentId":24,"tags":{},"startTime":1781958647220,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":789493,"timestamp":42373727984,"id":24,"parentId":19,"tags":{"page":"/api/context/claude"},"startTime":1781958647209,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":795030,"timestamp":42373739735,"id":51,"parentId":29,"tags":{},"startTime":1781958647221,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":805620,"timestamp":42373729207,"id":29,"parentId":19,"tags":{"page":"/api/recents"},"startTime":1781958647210,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":804413,"timestamp":42373738777,"id":45,"parentId":23,"tags":{},"startTime":1781958647220,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":815536,"timestamp":42373727713,"id":23,"parentId":19,"tags":{"page":"/api/context/aider"},"startTime":1781958647209,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":820214,"timestamp":42373739104,"id":47,"parentId":25,"tags":{},"startTime":1781958647220,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":831165,"timestamp":42373728210,"id":25,"parentId":19,"tags":{"page":"/api/context"},"startTime":1781958647209,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":820576,"timestamp":42373739492,"id":49,"parentId":27,"tags":{},"startTime":1781958647220,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":831464,"timestamp":42373728656,"id":27,"parentId":19,"tags":{"page":"/api/files"},"startTime":1781958647210,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":821994,"timestamp":42373738295,"id":43,"parentId":21,"tags":{},"startTime":1781958647219,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":835183,"timestamp":42373725331,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1781958647206,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":821934,"timestamp":42373739243,"id":48,"parentId":26,"tags":{},"startTime":1781958647220,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":832782,"timestamp":42373728428,"id":26,"parentId":19,"tags":{"page":"/api/context/ssh"},"startTime":1781958647209,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":823811,"timestamp":42373740564,"id":59,"parentId":37,"tags":{},"startTime":1781958647221,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":832998,"timestamp":42373731432,"id":37,"parentId":19,"tags":{"page":"/api/sessions/stop"},"startTime":1781958647212,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":824280,"timestamp":42373740416,"id":57,"parentId":35,"tags":{},"startTime":1781958647221,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":834078,"timestamp":42373730653,"id":35,"parentId":19,"tags":{"page":"/api/sessions/start"},"startTime":1781958647212,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":838674,"timestamp":42373739940,"id":52,"parentId":30,"tags":{},"startTime":1781958647221,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":849224,"timestamp":42373729458,"id":30,"parentId":19,"tags":{"page":"/api/sessions/inject"},"startTime":1781958647210,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":840418,"timestamp":42373740725,"id":63,"parentId":41,"tags":{},"startTime":1781958647222,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":849092,"timestamp":42373732282,"id":41,"parentId":19,"tags":{"page":"/api/sql/schema"},"startTime":1781958647213,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":842237,"timestamp":42373745220,"id":64,"parentId":42,"tags":{},"startTime":1781958647226,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":855047,"timestamp":42373732465,"id":42,"parentId":19,"tags":{"page":"/"},"startTime":1781958647213,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":847077,"timestamp":42373740691,"id":62,"parentId":40,"tags":{},"startTime":1781958647222,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":855700,"timestamp":42373732102,"id":40,"parentId":19,"tags":{"page":"/api/sql/query"},"startTime":1781958647213,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":850261,"timestamp":42373739625,"id":50,"parentId":28,"tags":{},"startTime":1781958647220,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":861009,"timestamp":42373728922,"id":28,"parentId":19,"tags":{"page":"/api/git"},"startTime":1781958647210,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":853837,"timestamp":42373740609,"id":60,"parentId":38,"tags":{},"startTime":1781958647221,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":862818,"timestamp":42373731670,"id":38,"parentId":19,"tags":{"page":"/api/sql/connections"},"startTime":1781958647213,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":854314,"timestamp":42373740509,"id":58,"parentId":36,"tags":{},"startTime":1781958647221,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":863722,"timestamp":42373731160,"id":36,"parentId":19,"tags":{"page":"/api/sessions/stats"},"startTime":1781958647212,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":858627,"timestamp":42373740655,"id":61,"parentId":39,"tags":{},"startTime":1781958647222,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":867433,"timestamp":42373731895,"id":39,"parentId":19,"tags":{"page":"/api/sql/mcp"},"startTime":1781958647213,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":862206,"timestamp":42373740070,"id":53,"parentId":31,"tags":{},"startTime":1781958647221,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":872620,"timestamp":42373729699,"id":31,"parentId":19,"tags":{"page":"/api/sessions/input"},"startTime":1781958647211,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":866018,"timestamp":42373740249,"id":56,"parentId":34,"tags":{},"startTime":1781958647221,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":875970,"timestamp":42373730349,"id":34,"parentId":19,"tags":{"page":"/api/sessions/scope"},"startTime":1781958647211,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":867618,"timestamp":42373740137,"id":54,"parentId":32,"tags":{},"startTime":1781958647221,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":877866,"timestamp":42373729927,"id":32,"parentId":19,"tags":{"page":"/api/sessions/launch"},"startTime":1781958647211,"traceId":"ddc0cdba614495e5"},{"name":"is-page-static","duration":873789,"timestamp":42373740190,"id":55,"parentId":33,"tags":{},"startTime":1781958647221,"traceId":"ddc0cdba614495e5"},{"name":"check-page","duration":883875,"timestamp":42373730147,"id":33,"parentId":19,"tags":{"page":"/api/sessions"},"startTime":1781958647211,"traceId":"ddc0cdba614495e5"},{"name":"static-check","duration":891498,"timestamp":42373722545,"id":19,"parentId":1,"tags":{},"startTime":1781958647203,"traceId":"ddc0cdba614495e5"},{"name":"write-routes-manifest","duration":821,"timestamp":42374615209,"id":66,"parentId":1,"tags":{},"startTime":1781958648096,"traceId":"ddc0cdba614495e5"},{"name":"load-dotenv","duration":42,"timestamp":42374631706,"id":69,"parentId":68,"tags":{},"startTime":1781958648113,"traceId":"ddc0cdba614495e5"},{"name":"run-export-path-map","duration":414,"timestamp":42374636667,"id":70,"parentId":68,"tags":{},"startTime":1781958648118,"traceId":"ddc0cdba614495e5"},{"name":"next-export","duration":711126,"timestamp":42374630842,"id":68,"parentId":1,"tags":{},"startTime":1781958648112,"traceId":"ddc0cdba614495e5"},{"name":"move-exported-app-not-found-","duration":2313,"timestamp":42375343764,"id":71,"parentId":67,"tags":{},"startTime":1781958648825,"traceId":"ddc0cdba614495e5"},{"name":"move-exported-app-global-error-","duration":1480,"timestamp":42375346204,"id":72,"parentId":67,"tags":{},"startTime":1781958648827,"traceId":"ddc0cdba614495e5"},{"name":"static-generation","duration":730383,"timestamp":42374620865,"id":67,"parentId":1,"tags":{},"startTime":1781958648102,"traceId":"ddc0cdba614495e5"},{"name":"write-routes-manifest","duration":1127,"timestamp":42375351409,"id":73,"parentId":1,"tags":{},"startTime":1781958648832,"traceId":"ddc0cdba614495e5"},{"name":"print-tree-view","duration":3105,"timestamp":42375367503,"id":74,"parentId":1,"tags":{},"startTime":1781958648848,"traceId":"ddc0cdba614495e5"},{"name":"write-route-bundle-stats","duration":8830,"timestamp":42375370637,"id":75,"parentId":1,"tags":{},"startTime":1781958648851,"traceId":"ddc0cdba614495e5"},{"name":"telemetry-flush","duration":172002,"timestamp":42375379503,"id":76,"parentId":1,"tags":{},"startTime":1781958648860,"traceId":"ddc0cdba614495e5"},{"name":"next-build","duration":9117199,"timestamp":42366434330,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781958639915,"traceId":"ddc0cdba614495e5"}]
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"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":2399315,"timestamp":42366546702,"id":14,"parentId":1,"tags":{},"startTime":1781958640028,"traceId":"ddc0cdba614495e5"},{"name":"turbopack-build-events","duration":66,"timestamp":42366855852,"id":15,"parentId":1,"tags":{},"startTime":1781958640337,"traceId":"ddc0cdba614495e5"},{"name":"run-typescript","duration":4604657,"timestamp":42368954689,"id":16,"parentId":1,"tags":{},"startTime":1781958642436,"traceId":"ddc0cdba614495e5"},{"name":"static-check","duration":891498,"timestamp":42373722545,"id":19,"parentId":1,"tags":{},"startTime":1781958647203,"traceId":"ddc0cdba614495e5"},{"name":"static-generation","duration":730383,"timestamp":42374620865,"id":67,"parentId":1,"tags":{},"startTime":1781958648102,"traceId":"ddc0cdba614495e5"},{"name":"telemetry-flush","duration":172002,"timestamp":42375379503,"id":76,"parentId":1,"tags":{},"startTime":1781958648860,"traceId":"ddc0cdba614495e5"},{"name":"next-build","duration":9117199,"timestamp":42366434330,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781958639915,"traceId":"ddc0cdba614495e5"}]
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"}]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neural-loom",
3
- "version": "0.2.57",
3
+ "version": "0.2.59",
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
+ "mssql": "^12.5.5",
24
25
  "next": "16.2.6",
25
26
  "node-pty": "^1.1.0",
26
27
  "react": "19.2.4",
@@ -96,6 +96,57 @@ export async function GET(request: Request) {
96
96
  }
97
97
  }
98
98
 
99
+ if (action === "branches") {
100
+ const { stdout } = await execPromise("git branch --format=\"%(refname:short)|%(HEAD)\"", { cwd: targetRoot });
101
+ const branches = stdout.split(/\r?\n/).filter(Boolean).map(line => {
102
+ const [name, active] = line.split("|");
103
+ return {
104
+ name: name.trim(),
105
+ isActive: active === "*"
106
+ };
107
+ });
108
+ return NextResponse.json({ success: true, branches });
109
+ }
110
+
111
+ if (action === "log") {
112
+ try {
113
+ const { stdout } = await execPromise("git log --graph --abbrev-commit --decorate --format=format:\"%h||%p||%s||%an||%ar\" --all -n 100", { cwd: targetRoot });
114
+ const lines = stdout.split(/\r?\n/);
115
+ const logItems = lines.map(line => {
116
+ const parts = line.split("||");
117
+ if (parts.length >= 5) {
118
+ const firstPart = parts[0];
119
+ const hashMatch = firstPart.match(/([0-9a-f]{7,40})$/);
120
+ const hash = hashMatch ? hashMatch[1] : "";
121
+ const graph = firstPart.substring(0, firstPart.length - hash.length);
122
+
123
+ return {
124
+ isCommit: true,
125
+ graph,
126
+ hash,
127
+ parents: parts[1].trim().split(/\s+/).filter(Boolean),
128
+ subject: parts[2],
129
+ author: parts[3],
130
+ date: parts[4]
131
+ };
132
+ } else {
133
+ return {
134
+ isCommit: false,
135
+ graph: line,
136
+ hash: "",
137
+ parents: [],
138
+ subject: "",
139
+ author: "",
140
+ date: ""
141
+ };
142
+ }
143
+ });
144
+ return NextResponse.json({ success: true, log: logItems });
145
+ } catch (err) {
146
+ return NextResponse.json({ success: true, log: [] });
147
+ }
148
+ }
149
+
99
150
  return NextResponse.json({ error: "Invalid action" }, { status: 400 });
100
151
  } catch (error) {
101
152
  const errorMessage = error instanceof Error ? error.message : "Unknown error";
@@ -189,6 +240,34 @@ export async function POST(request: Request) {
189
240
  return NextResponse.json({ success: true, output: stdout + stderr });
190
241
  }
191
242
 
243
+ if (action === "checkout") {
244
+ const { branchName } = body;
245
+ if (!branchName) {
246
+ return NextResponse.json({ error: "Missing branchName parameter" }, { status: 400 });
247
+ }
248
+ const { stdout, stderr } = await execPromise(`git checkout ${JSON.stringify(branchName)}`, { cwd: targetRoot });
249
+ return NextResponse.json({ success: true, output: stdout + stderr });
250
+ }
251
+
252
+ if (action === "create_branch") {
253
+ const { branchName } = body;
254
+ if (!branchName) {
255
+ return NextResponse.json({ error: "Missing branchName parameter" }, { status: 400 });
256
+ }
257
+ const { stdout, stderr } = await execPromise(`git checkout -b ${JSON.stringify(branchName)}`, { cwd: targetRoot });
258
+ return NextResponse.json({ success: true, output: stdout + stderr });
259
+ }
260
+
261
+ if (action === "delete_branch") {
262
+ const { branchName, force } = body;
263
+ if (!branchName) {
264
+ return NextResponse.json({ error: "Missing branchName parameter" }, { status: 400 });
265
+ }
266
+ const flag = force ? "-D" : "-d";
267
+ const { stdout, stderr } = await execPromise(`git branch ${flag} ${JSON.stringify(branchName)}`, { cwd: targetRoot });
268
+ return NextResponse.json({ success: true, output: stdout + stderr });
269
+ }
270
+
192
271
  return NextResponse.json({ error: "Invalid action" }, { status: 400 });
193
272
  } catch (error) {
194
273
  const errorMessage = error instanceof Error ? error.message : "Unknown error";
@@ -115,6 +115,16 @@ interface GitFile {
115
115
  worktreeStatus?: string;
116
116
  }
117
117
 
118
+ interface GitLogItem {
119
+ isCommit: boolean;
120
+ graph: string;
121
+ hash: string;
122
+ parents: string[];
123
+ subject: string;
124
+ author: string;
125
+ date: string;
126
+ }
127
+
118
128
  interface SessionStatus {
119
129
  type?: string;
120
130
  status?: string;
@@ -310,6 +320,12 @@ export default function IdeLayout({ sessionId, workspaceRoot, scopedDirs, onClos
310
320
  const [gitBranch, setGitBranch] = useState("");
311
321
  const [gitSync, setGitSync] = useState({ ahead: 0, behind: 0 });
312
322
  const [commitMessage, setCommitMessage] = useState("");
323
+ const [gitBranches, setGitBranches] = useState<{ name: string; isActive: boolean }[]>([]);
324
+ const [gitLog, setGitLog] = useState<GitLogItem[]>([]);
325
+ const [isBranchesExpanded, setIsBranchesExpanded] = useState(false);
326
+ const [isHistoryExpanded, setIsHistoryExpanded] = useState(false);
327
+ const [newBranchName, setNewBranchName] = useState("");
328
+ const [branchActionLoading, setBranchActionLoading] = useState(false);
313
329
 
314
330
  // Status & Telemetry
315
331
  const [sessionStatus, setSessionStatus] = useState<SessionStatus | null>(null);
@@ -340,6 +356,34 @@ export default function IdeLayout({ sessionId, workspaceRoot, scopedDirs, onClos
340
356
  setGitFiles(data.files || []);
341
357
  setGitBranch(data.branch || "");
342
358
  setGitSync({ ahead: data.ahead || 0, behind: data.behind || 0 });
359
+
360
+ if (data.isGit) {
361
+ // Fetch branches
362
+ try {
363
+ const branchesRes = await fetch(`/api/git?action=branches&root=${encodeURIComponent(workspaceRoot)}`);
364
+ if (branchesRes.ok) {
365
+ const branchesData = await branchesRes.json();
366
+ if (branchesData.success) {
367
+ setGitBranches(branchesData.branches || []);
368
+ }
369
+ }
370
+ } catch (err) {
371
+ console.error("Failed to load git branches:", err);
372
+ }
373
+
374
+ // Fetch log
375
+ try {
376
+ const logRes = await fetch(`/api/git?action=log&root=${encodeURIComponent(workspaceRoot)}`);
377
+ if (logRes.ok) {
378
+ const logData = await logRes.json();
379
+ if (logData.success) {
380
+ setGitLog(logData.log || []);
381
+ }
382
+ }
383
+ } catch (err) {
384
+ console.error("Failed to load git log:", err);
385
+ }
386
+ }
343
387
  }
344
388
  }
345
389
  } catch (e) {
@@ -510,6 +554,102 @@ export default function IdeLayout({ sessionId, workspaceRoot, scopedDirs, onClos
510
554
  }
511
555
  };
512
556
 
557
+ const handleGitCheckout = async (branchName: string) => {
558
+ setBranchActionLoading(true);
559
+ try {
560
+ const res = await fetch("/api/git", {
561
+ method: "POST",
562
+ headers: { "Content-Type": "application/json" },
563
+ body: JSON.stringify({
564
+ action: "checkout",
565
+ branchName,
566
+ rootPath: workspaceRoot,
567
+ }),
568
+ });
569
+ const data = await res.json();
570
+ if (res.ok && data.success) {
571
+ await loadGitStatus();
572
+ } else {
573
+ alert(data.error || `Failed to checkout branch ${branchName}`);
574
+ }
575
+ } catch (e) {
576
+ console.error(e);
577
+ alert("Failed to checkout branch due to a network error.");
578
+ } finally {
579
+ setBranchActionLoading(false);
580
+ }
581
+ };
582
+
583
+ const handleGitCreateBranch = async (e?: React.FormEvent) => {
584
+ if (e) e.preventDefault();
585
+ if (!newBranchName.trim()) return;
586
+ setBranchActionLoading(true);
587
+ try {
588
+ const res = await fetch("/api/git", {
589
+ method: "POST",
590
+ headers: { "Content-Type": "application/json" },
591
+ body: JSON.stringify({
592
+ action: "create_branch",
593
+ branchName: newBranchName.trim(),
594
+ rootPath: workspaceRoot,
595
+ }),
596
+ });
597
+ const data = await res.json();
598
+ if (res.ok && data.success) {
599
+ setNewBranchName("");
600
+ await loadGitStatus();
601
+ } else {
602
+ alert(data.error || `Failed to create branch ${newBranchName}`);
603
+ }
604
+ } catch (e) {
605
+ console.error(e);
606
+ alert("Failed to create branch due to a network error.");
607
+ } finally {
608
+ setBranchActionLoading(false);
609
+ }
610
+ };
611
+
612
+ const handleGitDeleteBranch = async (branchName: string, force = false) => {
613
+ if (branchName === gitBranch) {
614
+ alert("Cannot delete the currently active branch.");
615
+ return;
616
+ }
617
+ const message = force
618
+ ? `Are you sure you want to FORCE delete the branch "${branchName}"? All unmerged changes will be lost.`
619
+ : `Are you sure you want to delete the branch "${branchName}"?`;
620
+ if (!confirm(message)) return;
621
+
622
+ setBranchActionLoading(true);
623
+ try {
624
+ const res = await fetch("/api/git", {
625
+ method: "POST",
626
+ headers: { "Content-Type": "application/json" },
627
+ body: JSON.stringify({
628
+ action: "delete_branch",
629
+ branchName,
630
+ force,
631
+ rootPath: workspaceRoot,
632
+ }),
633
+ });
634
+ const data = await res.json();
635
+ if (res.ok && data.success) {
636
+ await loadGitStatus();
637
+ } else {
638
+ // If it failed because it's not merged, offer force delete
639
+ if (!force && data.error && (data.error.includes("not fully merged") || data.error.includes("not merged"))) {
640
+ handleGitDeleteBranch(branchName, true);
641
+ } else {
642
+ alert(data.error || `Failed to delete branch ${branchName}`);
643
+ }
644
+ }
645
+ } catch (e) {
646
+ console.error(e);
647
+ alert("Failed to delete branch due to a network error.");
648
+ } finally {
649
+ setBranchActionLoading(false);
650
+ }
651
+ };
652
+
513
653
  const handleSelectGitFile = async (file: GitFile) => {
514
654
  try {
515
655
  const res = await fetch(`/api/git?action=diff&file=${encodeURIComponent(file.relativePath)}&root=${encodeURIComponent(workspaceRoot)}`);
@@ -1390,6 +1530,194 @@ export default function IdeLayout({ sessionId, workspaceRoot, scopedDirs, onClos
1390
1530
  </div>
1391
1531
  )}
1392
1532
  </div>
1533
+
1534
+ {/* Branches Section */}
1535
+ <div style={{ borderTop: "1px solid var(--border)", paddingTop: "0.75rem" }}>
1536
+ <div
1537
+ onClick={() => setIsBranchesExpanded(!isBranchesExpanded)}
1538
+ style={{
1539
+ display: "flex",
1540
+ justifyContent: "space-between",
1541
+ alignItems: "center",
1542
+ cursor: "pointer",
1543
+ marginBottom: "0.5rem",
1544
+ userSelect: "none"
1545
+ }}
1546
+ >
1547
+ <span style={{ fontSize: "0.7rem", fontWeight: 700, textTransform: "uppercase", color: "var(--muted)", display: "flex", alignItems: "center", gap: "0.25rem" }}>
1548
+ {isBranchesExpanded ? "▼" : "▶"} Branches ({gitBranches.length})
1549
+ </span>
1550
+ </div>
1551
+
1552
+ {isBranchesExpanded && (
1553
+ <div style={{ display: "flex", flexDirection: "column", gap: "0.5rem" }}>
1554
+ {/* Create Branch Input */}
1555
+ <form onSubmit={handleGitCreateBranch} style={{ display: "flex", gap: "0.25rem" }}>
1556
+ <input
1557
+ type="text"
1558
+ placeholder="New branch name..."
1559
+ value={newBranchName}
1560
+ onChange={(e) => setNewBranchName(e.target.value)}
1561
+ disabled={branchActionLoading}
1562
+ style={{
1563
+ flex: 1,
1564
+ backgroundColor: "#05070a",
1565
+ border: "1px solid var(--border)",
1566
+ borderRadius: "4px",
1567
+ padding: "0.25rem 0.5rem",
1568
+ color: "#ffffff",
1569
+ fontSize: "0.7rem",
1570
+ outline: "none"
1571
+ }}
1572
+ />
1573
+ <button
1574
+ type="submit"
1575
+ disabled={branchActionLoading || !newBranchName.trim()}
1576
+ style={{
1577
+ backgroundColor: "rgba(59, 130, 246, 0.15)",
1578
+ border: "1px solid #3b82f6",
1579
+ color: "#3b82f6",
1580
+ padding: "0.25rem 0.5rem",
1581
+ borderRadius: "4px",
1582
+ fontSize: "0.7rem",
1583
+ fontWeight: 600,
1584
+ cursor: "pointer",
1585
+ opacity: (!newBranchName.trim() || branchActionLoading) ? 0.5 : 1
1586
+ }}
1587
+ >
1588
+ + Create
1589
+ </button>
1590
+ </form>
1591
+
1592
+ {/* Branch List */}
1593
+ <div style={{ display: "flex", flexDirection: "column", gap: "0.25rem", maxHeight: "150px", overflowY: "auto" }}>
1594
+ {gitBranches.map((br) => (
1595
+ <div
1596
+ key={br.name}
1597
+ style={{
1598
+ display: "flex",
1599
+ alignItems: "center",
1600
+ justifyContent: "space-between",
1601
+ padding: "0.35rem 0.5rem",
1602
+ borderRadius: "4px",
1603
+ backgroundColor: br.isActive ? "rgba(59, 130, 246, 0.08)" : "transparent",
1604
+ border: br.isActive ? "1px solid rgba(59, 130, 246, 0.2)" : "1px solid transparent",
1605
+ fontSize: "0.75rem",
1606
+ transition: "all 0.15s ease",
1607
+ }}
1608
+ >
1609
+ <div style={{ display: "flex", alignItems: "center", gap: "0.35rem", fontWeight: br.isActive ? 700 : 500, color: br.isActive ? "var(--primary)" : "#cbd5e1", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", flex: 1 }}>
1610
+ <span style={{ fontSize: "0.7rem" }}>{br.isActive ? "●" : "○"}</span>
1611
+ <span style={{ overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }} title={br.name}>{br.name}</span>
1612
+ </div>
1613
+ <div style={{ display: "flex", gap: "0.25rem" }}>
1614
+ {!br.isActive && (
1615
+ <>
1616
+ <button
1617
+ type="button"
1618
+ onClick={() => handleGitCheckout(br.name)}
1619
+ disabled={branchActionLoading}
1620
+ title={`Switch to ${br.name}`}
1621
+ style={{
1622
+ background: "none",
1623
+ border: "none",
1624
+ cursor: "pointer",
1625
+ fontSize: "0.7rem",
1626
+ padding: "2px 4px",
1627
+ color: "var(--muted)"
1628
+ }}
1629
+ >
1630
+
1631
+ </button>
1632
+ <button
1633
+ type="button"
1634
+ onClick={() => handleGitDeleteBranch(br.name)}
1635
+ disabled={branchActionLoading}
1636
+ title={`Delete ${br.name}`}
1637
+ style={{
1638
+ background: "none",
1639
+ border: "none",
1640
+ cursor: "pointer",
1641
+ fontSize: "0.7rem",
1642
+ padding: "2px 4px",
1643
+ color: "var(--muted)"
1644
+ }}
1645
+ >
1646
+
1647
+ </button>
1648
+ </>
1649
+ )}
1650
+ </div>
1651
+ </div>
1652
+ ))}
1653
+ </div>
1654
+ </div>
1655
+ )}
1656
+ </div>
1657
+
1658
+ {/* Commit History Section */}
1659
+ <div style={{ borderTop: "1px solid var(--border)", paddingTop: "0.75rem" }}>
1660
+ <div
1661
+ onClick={() => setIsHistoryExpanded(!isHistoryExpanded)}
1662
+ style={{
1663
+ display: "flex",
1664
+ justifyContent: "space-between",
1665
+ alignItems: "center",
1666
+ cursor: "pointer",
1667
+ marginBottom: "0.5rem",
1668
+ userSelect: "none"
1669
+ }}
1670
+ >
1671
+ <span style={{ fontSize: "0.7rem", fontWeight: 700, textTransform: "uppercase", color: "var(--muted)", display: "flex", alignItems: "center", gap: "0.25rem" }}>
1672
+ {isHistoryExpanded ? "▼" : "▶"} Commit History
1673
+ </span>
1674
+ </div>
1675
+
1676
+ {isHistoryExpanded && (
1677
+ <div style={{
1678
+ backgroundColor: "#05070a",
1679
+ border: "1px solid var(--border)",
1680
+ borderRadius: "6px",
1681
+ padding: "0.5rem",
1682
+ maxHeight: "220px",
1683
+ overflowY: "auto",
1684
+ overflowX: "auto"
1685
+ }}>
1686
+ {gitLog.length === 0 ? (
1687
+ <div style={{ color: "var(--muted)", fontStyle: "italic", fontSize: "0.7rem", textAlign: "center", padding: "0.5rem" }}>
1688
+ No commit history found.
1689
+ </div>
1690
+ ) : (
1691
+ <div style={{ fontFamily: "var(--font-mono)", fontSize: "0.65rem", lineHeight: "1.4", whiteSpace: "pre" }}>
1692
+ {gitLog.map((item, idx) => (
1693
+ <div
1694
+ key={idx}
1695
+ style={{
1696
+ display: "flex",
1697
+ padding: "2px 0",
1698
+ borderBottom: "1px solid rgba(255,255,255,0.01)",
1699
+ alignItems: "center"
1700
+ }}
1701
+ >
1702
+ <span style={{ color: "#3b82f6", flexShrink: 0, fontWeight: 700 }}>{item.graph}</span>
1703
+ {item.isCommit && (
1704
+ <>
1705
+ <span style={{ color: "#eab308", marginRight: "6px", flexShrink: 0 }} title="Commit Hash">{item.hash}</span>
1706
+ <span style={{ flex: 1, textOverflow: "ellipsis", overflow: "hidden", whiteSpace: "nowrap", color: "#cbd5e1" }} title={item.subject}>
1707
+ {item.subject}
1708
+ </span>
1709
+ <span style={{ color: "var(--muted)", fontSize: "0.55rem", marginLeft: "6px", flexShrink: 0 }} title={`${item.author} (${item.date})`}>
1710
+ {item.date}
1711
+ </span>
1712
+ </>
1713
+ )}
1714
+ </div>
1715
+ ))}
1716
+ </div>
1717
+ )}
1718
+ </div>
1719
+ )}
1720
+ </div>
1393
1721
  </div>
1394
1722
  ) : (
1395
1723
  <div style={{ padding: "1rem", color: "var(--muted)", fontSize: "0.75rem", fontStyle: "italic" }}>
@@ -1,4 +0,0 @@
1
- module.exports=[24361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},33405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},5687,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),n=e.i(59756),a=e.i(61916),i=e.i(74677),o=e.i(69741),l=e.i(16795),u=e.i(87718),c=e.i(95169),d=e.i(47587),p=e.i(66012),f=e.i(70101),g=e.i(26937),x=e.i(10372),h=e.i(93695);e.i(52474);var R=e.i(220),w=e.i(89171),v=e.i(24361),m=e.i(33405),y=e.i(22734),N=e.i(14747);let E=(0,v.promisify)(m.exec);async function j(e){try{let{searchParams:t}=new URL(e.url),r=t.get("action"),s=t.get("root"),n=t.get("file"),a=(s&&y.default.existsSync(s)?s:process.env.ORIGINAL_CWD||process.cwd()).replace(/\\/g,"/");try{await E("git rev-parse --is-inside-work-tree",{cwd:a})}catch{return w.NextResponse.json({success:!0,isGit:!1,files:[]})}if("status"===r){let{stdout:e}=await E("git status --porcelain",{cwd:a}),t=e.split(/\r?\n/).filter(Boolean).map(e=>{let t=e.substring(0,1),r=e.substring(1,2),s=e.substring(0,2),n=e.substring(3).trim();n.startsWith('"')&&n.endsWith('"')&&(n=n.slice(1,-1));let i=N.default.join(a,n).replace(/\\/g,"/");return{status:s.trim(),indexStatus:t,worktreeStatus:r,relativePath:n,absolutePath:i,name:N.default.basename(n)}}),r="";try{let{stdout:e}=await E("git rev-parse --abbrev-ref HEAD",{cwd:a});r=e.trim()}catch{}let s=0,n=0;try{let{stdout:e}=await E("git rev-list --left-right --count HEAD...@{u}",{cwd:a}),t=e.trim().split(/\s+/);2===t.length&&(s=parseInt(t[0],10)||0,n=parseInt(t[1],10)||0)}catch{}return w.NextResponse.json({success:!0,isGit:!0,files:t,branch:r,ahead:s,behind:n})}if("diff"===r){if(!n)return w.NextResponse.json({error:"Missing file parameter"},{status:400});let e=N.default.resolve(a,n).replace(/\\/g,"/");if(!y.default.existsSync(e))return w.NextResponse.json({error:"File not found"},{status:404});let{stdout:t}=await E("git status --porcelain -- "+JSON.stringify(n),{cwd:a});if(t.startsWith("??")){let t=y.default.readFileSync(e,"utf8").split(/\r?\n/).map(e=>"+"+e).join("\n");return w.NextResponse.json({success:!0,diff:t})}try{let{stdout:e}=await E(`git diff --no-color -- ${JSON.stringify(n)}`,{cwd:a});return w.NextResponse.json({success:!0,diff:e})}catch{return w.NextResponse.json({success:!0,diff:"Binary file or diff unavailable."})}}return w.NextResponse.json({error:"Invalid action"},{status:400})}catch(t){let e=t instanceof Error?t.message:"Unknown error";return w.NextResponse.json({error:e},{status:500})}}async function C(e){try{let{action:t,rootPath:r,file:s,message:n}=await e.json(),a=(r&&y.default.existsSync(r)?r:process.env.ORIGINAL_CWD||process.cwd()).replace(/\\/g,"/");try{await E("git rev-parse --is-inside-work-tree",{cwd:a})}catch{return w.NextResponse.json({error:"Not a git repository"},{status:400})}if("stage"===t)return s?await E(`git add ${JSON.stringify(s)}`,{cwd:a}):await E("git add -A",{cwd:a}),w.NextResponse.json({success:!0});if("unstage"===t)return s?await E(`git reset HEAD -- ${JSON.stringify(s)}`,{cwd:a}):await E("git reset HEAD -- .",{cwd:a}),w.NextResponse.json({success:!0});if("discard"===t){if(!s)return w.NextResponse.json({error:"Missing file parameter"},{status:400});let e=N.default.resolve(a,s).replace(/\\/g,"/"),{stdout:t}=await E("git status --porcelain -- "+JSON.stringify(s),{cwd:a});return t.startsWith("??")?y.default.existsSync(e)&&y.default.unlinkSync(e):await E(`git checkout -- ${JSON.stringify(s)}`,{cwd:a}),w.NextResponse.json({success:!0})}if("commit"===t){if(!n||!n.trim())return w.NextResponse.json({error:"Commit message cannot be empty"},{status:400});let{stdout:e}=await E(`git commit -m ${JSON.stringify(n.trim())}`,{cwd:a});return w.NextResponse.json({success:!0,output:e})}if("ignore"===t){if(!s)return w.NextResponse.json({error:"Missing file parameter"},{status:400});let e=N.default.join(a,".gitignore"),t="";if(y.default.existsSync(e)&&(t=y.default.readFileSync(e,"utf8")),!t.split(/\r?\n/).includes(s)){let r=t.endsWith("\n")||""===t?"":"\n";y.default.appendFileSync(e,`${r}${s}
2
- `)}return w.NextResponse.json({success:!0})}if("pull"===t){let{stdout:e,stderr:t}=await E("git pull",{cwd:a});return w.NextResponse.json({success:!0,output:e+t})}if("push"===t){let{stdout:e,stderr:t}=await E("git push",{cwd:a});return w.NextResponse.json({success:!0,output:e+t})}return w.NextResponse.json({error:"Invalid action"},{status:400})}catch(t){let e=t instanceof Error?t.message:"Unknown error";return w.NextResponse.json({error:e},{status:500})}}e.s(["GET",0,j,"POST",0,C],89717);var S=e.i(89717);let b=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/git/route",pathname:"/api/git",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/git/route.ts",nextConfigOutput:"",userland:S,...{}}),{workAsyncStorage:A,workUnitAsyncStorage:O,serverHooks:k}=b;async function q(e,t,s){s.requestMeta&&(0,n.setRequestMeta)(e,s.requestMeta),b.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/git/route";w=w.replace(/\/index$/,"")||"/";let v=await b.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:m,deploymentId:y,params:N,nextConfig:E,parsedUrl:j,isDraftMode:C,prerenderManifest:S,routerServerContext:A,isOnDemandRevalidate:O,revalidateOnlyGenerated:k,resolvedPathname:q,clientReferenceManifest:T,serverActionsManifest:_}=v,P=(0,o.normalizeAppPath)(w),I=!!(S.dynamicRoutes[P]||S.routes[q]),H=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,j,!1):t.end("This page could not be found"),null);if(I&&!C){let e=!!S.routes[q],t=S.dynamicRoutes[P];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await H();throw new h.NoFallbackError}}let D=null;!I||b.isDev||C||(D="/index"===(D=q)?"/":D);let U=!0===b.isDev||!I,M=I&&!U;_&&T&&(0,i.setManifestsSingleton)({page:w,clientReferenceManifest:T,serverActionsManifest:_});let $=e.method||"GET",F=(0,a.getTracer)(),W=F.getActiveScopeSpan(),B=!!(null==A?void 0:A.isWrappedByNextServer),G=!!(0,n.getRequestMeta)(e,"minimalMode"),K=(0,n.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,E,S,G);null==K||K.resetRequestCache(),globalThis.__incrementalCache=K;let L={params:N,previewProps:S.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:U,incrementalCache:K,cacheLifeProfiles:E.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,n)=>b.onRequestError(e,t,s,n,A)},sharedContext:{buildId:m,deploymentId:y}},J=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),X=u.NextRequestAdapter.fromNodeNextRequest(J,(0,u.signalFromNodeResponse)(t));try{let n,i=async e=>b.handle(X,L).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${$} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",s),n.updateName(t))}else e.updateName(`${$} ${w}`)}),o=async n=>{var a,o;let l=async({previousCacheEntry:r})=>{try{if(!G&&O&&k&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await i(n);e.fetchMetrics=L.renderOpts.fetchMetrics;let o=L.renderOpts.pendingWaitUntil;o&&s.waitUntil&&(s.waitUntil(o),o=void 0);let l=L.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(J,V,a,L.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(a.headers);l&&(t[x.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==L.renderOpts.collectedRevalidate&&!(L.renderOpts.collectedRevalidate>=x.INFINITE_CACHE)&&L.renderOpts.collectedRevalidate,s=void 0===L.renderOpts.collectedExpire||L.renderOpts.collectedExpire>=x.INFINITE_CACHE?void 0:L.renderOpts.collectedExpire;return{value:{kind:R.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:O})},!1,A),t}},u=await b.handleResponse({req:e,nextConfig:E,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:k,responseGenerator:l,waitUntil:s.waitUntil,isMinimalMode:G});if(!I)return null;if((null==u||null==(a=u.value)?void 0:a.kind)!==R.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(o=u.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});G||t.setHeader("x-nextjs-cache",O?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),C&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,f.fromNodeOutgoingHttpHeaders)(u.value.headers);return G&&I||c.delete(x.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,g.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(J,V,new Response(u.value.body,{headers:c,status:u.value.status||200})),null};B&&W?await o(W):(n=F.getActiveScopeSpan(),await F.withPropagatedContext(e.headers,()=>F.trace(c.BaseServerSpan.handleRequest,{spanName:`${$} ${w}`,kind:a.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},o),void 0,!B))}catch(t){if(t instanceof h.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:P,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:M,isOnDemandRevalidate:O})},!1,A),I)throw t;return await (0,p.sendResponse)(J,V,new Response(null,{status:500})),null}}e.s(["handler",0,q,"patchFetch",0,function(){return(0,s.patchFetch)({workAsyncStorage:A,workUnitAsyncStorage:O})},"routeModule",0,b,"serverHooks",0,k,"workAsyncStorage",0,A,"workUnitAsyncStorage",0,O],5687)}];
3
-
4
- //# sourceMappingURL=%5Broot-of-the-server%5D__0kn5tap._.js.map