@mndrk/agx 2.0.2 → 2.0.4
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.
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/app-path-routes-manifest.json +2 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/build-manifest.json +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/prerender-manifest.json +27 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/routes-manifest.json +6 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/file-search/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/health/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/learnings/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/memories/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/cancel/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/signal/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/migrate-v1/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/migrate-v2/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/complete/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/route.js +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/system/db-status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/costs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/dependencies/route.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/dependencies/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/events/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/metrics/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/pause/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/replan/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/restart/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/resume/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/rollback/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/stop/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/heartbeat/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/logs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/logs/stream/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/assign-orphans/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/route.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/stream/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/user-settings/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/board.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/status/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/status.segment.rsc +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/app-paths-manifest.json +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/build-manifest.json +18 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/next-font-manifest.json +11 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/react-loadable-manifest.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/server-reference-manifest.json +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page.js +15 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page.js.map +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page.js.nft.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page_client-reference-manifest.js +2 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.html +9 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.meta +15 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.rsc +23 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_full.segment.rsc +23 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_head.segment.rsc +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_index.segment.rsc +9 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_tree.segment.rsc +5 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +9 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/welcome.segment.rsc +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app-paths-manifest.json +2 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/Projects_Agents_agx-cloud_lib_6041e016._.js +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/Projects_Agents_agx-cloud_lib_8c82981b._.js +3 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__45d4a92e._.js +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__5d4e1eab._.js +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/7e210_Agents_agx-cloud__next-internal_server_app_welcome_page_actions_5176f4d4.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_304dc58c._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_aaa774d8._.js +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_components_chat-ui_f59beea5._.js +95 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{Projects_Agents_agx-cloud_e1b68242._.js → Projects_Agents_agx-cloud_d54d1b77._.js} +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_ef78b9d7._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{[root-of-the-server]__9d72d782._.js → [root-of-the-server]__00507cd5._.js} +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__24a978df._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__8b322dc4._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{[root-of-the-server]__657b446b._.js → [root-of-the-server]__99fa92e8._.js} +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__a4a5c57b._.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{[root-of-the-server]__1e273070._.js → [root-of-the-server]__a73fd1ea._.js} +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_@dnd-kit_core_dist_core_esm_e4fe20d7.js +3 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/middleware-manifest.json +5 -5
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/next-font-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/next-font-manifest.json +4 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/pages/404.html +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/pages/500.html +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/04612fc0fdf7b4ef.css +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/0804e1cf36ac4c40.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/{1e899e8bb554fde8.js → 122dafa7cd2594e4.js} +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/38cf24cf2de25782.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/55e870d6246760c7.js +93 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/{4256a16941bc22fb.js → 60a9c7b6ddb4f3f5.js} +2 -2
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/7d2c10033c8a8554.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/870ea0d4e47d21ce.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/{0a0d449e527ef5e2.js → a56604cde5f45ff6.js} +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/ae26536f21ac3989.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/b3af23a09f4d9204.js +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/{4926ceb649af0e91.js → cdd364319efbfb0a.js} +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/welcome/page.tsx +117 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/ChatPreview.tsx +85 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/demo-threads.ts +76 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/startup.ts +21 -10
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/package.json +1 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/scripts/fix-turbopack-externals.mjs +94 -0
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/src/db/init.ts +9 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/worker/index.js +17 -9
- package/package.json +1 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_37dc866e._.js +0 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_a7533794._.js +0 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__13df20fe._.js +0 -95
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_lucide-react_dist_esm_icons_search_04b9412a.js +0 -3
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/09c6c56e4afc8647.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/0d58db99a936501d.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/652b21250c785942.css +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/dc534541f2bd6342.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/e4e1f0e19efe31cb.js +0 -1
- package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/fb502daefdaec131.js +0 -93
- /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{Bhse4ZIyeG-RAxhOSkjdu → l7UCe_8faNvEh-Be9eis7}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{Bhse4ZIyeG-RAxhOSkjdu → l7UCe_8faNvEh-Be9eis7}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{Bhse4ZIyeG-RAxhOSkjdu → l7UCe_8faNvEh-Be9eis7}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,56631,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return a}});let a=e=>{}},72431,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={assign:function(){return l},searchParamsToUrlQuery:function(){return n},urlQueryToSearchParams:function(){return o}};for(var s in a)Object.defineProperty(r,s,{enumerable:!0,get:a[s]});function n(e){let t={};for(let[r,a]of e.entries()){let e=t[r];void 0===e?t[r]=a:Array.isArray(e)?e.push(a):t[r]=[e,a]}return t}function i(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function o(e){let t=new URLSearchParams;for(let[r,a]of Object.entries(e))if(Array.isArray(a))for(let e of a)t.append(r,i(e));else t.set(r,i(a));return t}function l(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,a]of r.entries())e.append(t,a)}return e}},43910,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={formatUrl:function(){return o},formatWithValidation:function(){return d},urlObjectKeys:function(){return l}};for(var s in a)Object.defineProperty(r,s,{enumerable:!0,get:a[s]});let n=e.r(42690)._(e.r(72431)),i=/https?|ftp|gopher|file/;function o(e){let{auth:t,hostname:r}=e,a=e.protocol||"",s=e.pathname||"",o=e.hash||"",l=e.query||"",d=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?d=t+e.host:r&&(d=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(d+=":"+e.port)),l&&"object"==typeof l&&(l=String(n.urlQueryToSearchParams(l)));let c=e.search||l&&`?${l}`||"";return a&&!a.endsWith(":")&&(a+=":"),e.slashes||(!a||i.test(a))&&!1!==d?(d="//"+(d||""),s&&"/"!==s[0]&&(s="/"+s)):d||(d=""),o&&"#"!==o[0]&&(o="#"+o),c&&"?"!==c[0]&&(c="?"+c),s=s.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${a}${d}${s}${c}${o}`}let l=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function d(e){return o(e)}},95267,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return s}});let a=e.r(95459);function s(e,t){let r=(0,a.useRef)(null),s=(0,a.useRef)(null);return(0,a.useCallback)(a=>{if(null===a){let e=r.current;e&&(r.current=null,e());let t=s.current;t&&(s.current=null,t())}else e&&(r.current=n(e,a)),t&&(s.current=n(t,a))},[e,t])}function n(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},44643,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={DecodeError:function(){return g},MiddlewareNotFoundError:function(){return y},MissingStaticPage:function(){return v},NormalizeError:function(){return b},PageNotFoundError:function(){return j},SP:function(){return m},ST:function(){return x},WEB_VITALS:function(){return n},execOnce:function(){return i},getDisplayName:function(){return u},getLocationOrigin:function(){return d},getURL:function(){return c},isAbsoluteUrl:function(){return l},isResSent:function(){return h},loadGetInitialProps:function(){return p},normalizeRepeatedSlashes:function(){return f},stringifyError:function(){return w}};for(var s in a)Object.defineProperty(r,s,{enumerable:!0,get:a[s]});let n=["CLS","FCP","FID","INP","LCP","TTFB"];function i(e){let t,r=!1;return(...a)=>(r||(r=!0,t=e(...a)),t)}let o=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>o.test(e);function d(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function c(){let{href:e}=window.location,t=d();return e.substring(t.length)}function u(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function h(e){return e.finished||e.headersSent}function f(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function p(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await p(t.Component,t.ctx)}:{};let a=await e.getInitialProps(t);if(r&&h(r))return a;if(!a)throw Object.defineProperty(Error(`"${u(e)}.getInitialProps()" should resolve to an object. But found "${a}" instead.`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return a}let m="u">typeof performance,x=m&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class g extends Error{}class b extends Error{}class j extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class v extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class y extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function w(e){return JSON.stringify({message:e.message,stack:e.stack})}},53284,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return n}});let a=e.r(44643),s=e.r(68817);function n(e){if(!(0,a.isAbsoluteUrl)(e))return!0;try{let t=(0,a.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,s.hasBasePath)(r.pathname)}catch(e){return!1}}},26100,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"errorOnce",{enumerable:!0,get:function(){return a}});let a=e=>{}},61606,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={default:function(){return g},useLinkStatus:function(){return j}};for(var s in a)Object.defineProperty(r,s,{enumerable:!0,get:a[s]});let n=e.r(42690),i=e.r(72218),o=n._(e.r(95459)),l=e.r(43910),d=e.r(92821),c=e.r(95267),u=e.r(44643),h=e.r(36202);e.r(56631);let f=e.r(23807),p=e.r(53284),m=e.r(94840);function x(e){return"string"==typeof e?e:(0,l.formatUrl)(e)}function g(t){var r;let a,s,n,[l,g]=(0,o.useOptimistic)(f.IDLE_LINK_STATUS),j=(0,o.useRef)(null),{href:v,as:y,children:w,prefetch:k=null,passHref:C,replace:N,shallow:_,scroll:S,onClick:P,onMouseEnter:T,onTouchStart:A,legacyBehavior:E=!1,onNavigate:M,ref:O,unstable_dynamicOnHover:L,...R}=t;a=w,E&&("string"==typeof a||"number"==typeof a)&&(a=(0,i.jsx)("a",{children:a}));let F=o.default.useContext(d.AppRouterContext),I=!1!==k,$=!1!==k?null===(r=k)||"auto"===r?m.FetchStrategy.PPR:m.FetchStrategy.Full:m.FetchStrategy.PPR,{href:U,as:z}=o.default.useMemo(()=>{let e=x(v);return{href:e,as:y?x(y):e}},[v,y]);if(E){if(a?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});s=o.default.Children.only(a)}let D=E?s&&"object"==typeof s&&s.ref:O,B=o.default.useCallback(e=>(null!==F&&(j.current=(0,f.mountLinkInstance)(e,U,F,$,I,g)),()=>{j.current&&((0,f.unmountLinkForCurrentNavigation)(j.current),j.current=null),(0,f.unmountPrefetchableInstance)(e)}),[I,U,F,$,g]),W={ref:(0,c.useMergedRef)(B,D),onClick(t){E||"function"!=typeof P||P(t),E&&s.props&&"function"==typeof s.props.onClick&&s.props.onClick(t),!F||t.defaultPrevented||function(t,r,a,s,n,i,l){if("u">typeof window){let d,{nodeName:c}=t.currentTarget;if("A"===c.toUpperCase()&&((d=t.currentTarget.getAttribute("target"))&&"_self"!==d||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,p.isLocalURL)(r)){n&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),l){let e=!1;if(l({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:u}=e.r(20263);o.default.startTransition(()=>{u(a||r,n?"replace":"push",i??!0,s.current)})}}(t,U,z,j,N,S,M)},onMouseEnter(e){E||"function"!=typeof T||T(e),E&&s.props&&"function"==typeof s.props.onMouseEnter&&s.props.onMouseEnter(e),F&&I&&(0,f.onNavigationIntent)(e.currentTarget,!0===L)},onTouchStart:function(e){E||"function"!=typeof A||A(e),E&&s.props&&"function"==typeof s.props.onTouchStart&&s.props.onTouchStart(e),F&&I&&(0,f.onNavigationIntent)(e.currentTarget,!0===L)}};return(0,u.isAbsoluteUrl)(z)?W.href=z:E&&!C&&("a"!==s.type||"href"in s.props)||(W.href=(0,h.addBasePath)(z)),n=E?o.default.cloneElement(s,W):(0,i.jsx)("a",{...R,...W,children:a}),(0,i.jsx)(b.Provider,{value:l,children:n})}e.r(26100);let b=(0,o.createContext)(f.IDLE_LINK_STATUS),j=()=>(0,o.useContext)(b);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},63558,(e,t,r)=>{t.exports=e.r(97131)},34285,e=>{"use strict";var t=e.i(95459);function r(){let[e,r]=(0,t.useState)([]),[a,s]=(0,t.useState)(!1),[n,i]=(0,t.useState)(null),o=(0,t.useCallback)(async()=>{s(!0);try{let e=await fetch("/api/projects");if(!e.ok)throw Error("Failed to fetch projects");let t=await e.json();r(t.projects??[]),i(null)}catch(e){i(e instanceof Error?e:Error("Unknown error"))}finally{s(!1)}},[]);(0,t.useEffect)(()=>{o()},[o]);let l=(0,t.useCallback)(async e=>{let t=await fetch("/api/projects",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error||"Failed to create project");let a=(await t.json()).project;return r(e=>[a,...e]),a},[]);return{projects:e,isLoading:a,error:n,refetch:o,createProject:l,updateProject:(0,t.useCallback)(async(e,t)=>{let a=await fetch(`/api/projects/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok)throw Error((await a.json().catch(()=>({}))).error||"Failed to update project");let s=(await a.json()).project;return r(t=>t.map(t=>t.id===e?s:t)),s},[]),deleteProject:(0,t.useCallback)(async e=>{let t=await fetch(`/api/projects/${e}`,{method:"DELETE"});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error||"Failed to delete project");r(t=>t.filter(t=>t.id!==e))},[])}}e.s(["useProjects",()=>r])},92463,e=>{"use strict";var t=e.i(72218),r=e.i(95459);let a={name:"",description:""},s={name:"",path:"",notes:""};function n(){let[e,t]=(0,r.useState)(a),[n,i]=(0,r.useState)([s]),[o,l]=(0,r.useState)(!1),[d,c]=(0,r.useState)(null),u=(0,r.useCallback)((e,t,r)=>{i(a=>a.map((a,s)=>s===e?{...a,[t]:r}:a))},[]),h=(0,r.useCallback)(()=>{i(e=>[...e,{...s}])},[]),f=(0,r.useCallback)(e=>{i(t=>t.filter((t,r)=>r!==e))},[]),p=(0,r.useCallback)(()=>{t(a),i([s]),c(null)},[]),m=(0,r.useCallback)(e=>{t({name:e.name||"",description:e.description||""}),e.repos&&e.repos.length>0?i(e.repos.map(e=>({name:e.name||"",path:e.path||"",notes:e.notes||""}))):i([s]),c(null)},[]);return{form:e,setForm:t,repos:n,handleRepoChange:u,addRepo:h,removeRepo:f,resetForm:p,hydrateFromProject:m,isSubmitting:o,setIsSubmitting:l,formError:d,setFormError:c}}function i(e,t){let r=t.filter(e=>e.name.trim()&&e.path.trim()).map(e=>({name:e.name.trim(),path:e.path.trim(),notes:e.notes.trim()||void 0}));return{name:e.name.trim(),description:e.description.trim()||void 0,repos:r.length?r:void 0}}function o({form:e,repos:r,isSubmitting:a,onFieldChange:s,onRepoChange:n,onAddRepo:i,onRemoveRepo:o}){return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsx)("div",{className:"grid gap-4",children:(0,t.jsxs)("label",{className:"space-y-1.5 block",children:[(0,t.jsx)("span",{className:"text-xs font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Project Name"}),(0,t.jsx)("input",{value:e.name,onChange:e=>s("name",e.target.value),className:"input w-full",placeholder:"e.g. AGX Cloud",disabled:a})]})}),(0,t.jsxs)("label",{className:"space-y-1.5 block",children:[(0,t.jsx)("span",{className:"text-xs font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Description"}),(0,t.jsx)("textarea",{value:e.description,onChange:e=>s("description",e.target.value),className:"input w-full h-24 resize-none",placeholder:"What is this project about?",disabled:a})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--card-border)] pb-2",children:[(0,t.jsx)("h3",{className:"text-sm font-bold uppercase tracking-widest text-[var(--muted-foreground)]",children:"Repositories"}),(0,t.jsx)("button",{type:"button",onClick:i,className:"text-xs font-semibold text-[var(--primary)] hover:underline",disabled:a,children:"+ Add Repository"})]}),(0,t.jsx)("div",{className:"space-y-4",children:r.map((e,s)=>(0,t.jsxs)("div",{className:"p-4 rounded-2xl border border-[var(--card-border)] bg-[var(--muted)]/20 space-y-3 relative group",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("span",{className:"text-xs font-bold text-[var(--foreground)] uppercase",children:["Repo #",s+1]}),r.length>1&&(0,t.jsx)("button",{type:"button",onClick:()=>o(s),className:"text-xs font-semibold text-[var(--destructive)] hover:underline",disabled:a,children:"Remove"})]}),(0,t.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,t.jsx)("input",{value:e.name,onChange:e=>n(s,"name",e.target.value),placeholder:"Name (e.g. Frontend)",className:"input text-sm",disabled:a}),(0,t.jsx)("input",{value:e.path,onChange:e=>n(s,"path",e.target.value),placeholder:"Local path (mandatory)",className:"input text-sm",disabled:a}),(0,t.jsx)("div",{className:"md:col-span-2",children:(0,t.jsx)("input",{value:e.notes,onChange:e=>n(s,"notes",e.target.value),placeholder:"Notes/Instructions",className:"input text-sm w-full",disabled:a})})]})]},s))})]})]})}function l({isOpen:e,onClose:r,onSubmit:a,editingProject:s,form:n,repos:i,isSubmitting:l,formError:d,onFieldChange:c,onRepoChange:u,onAddRepo:h,onRemoveRepo:f}){return e?(0,t.jsx)("div",{className:"modal-backdrop p-2 sm:p-4 z-50 overflow-y-auto flex items-center justify-center",onClick:e=>e.target===e.currentTarget&&r(),children:(0,t.jsxs)("div",{className:"modal-content w-full max-w-4xl mx-2 sm:mx-auto bg-[var(--card-bg)] rounded-3xl border border-[var(--card-border)] shadow-2xl animate-scale-in flex flex-col max-h-[90vh]",children:[(0,t.jsxs)("div",{className:"px-4 py-4 sm:px-8 sm:py-6 border-b border-[var(--card-border)] flex items-center justify-between flex-shrink-0",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-xl font-bold",children:s?"Edit Project":"Create New Project"}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5",children:s?"Update your project settings and repositories.":"Define a new project and connect repositories."})]}),(0,t.jsx)("button",{onClick:r,className:"p-2 rounded-xl hover:bg-[var(--muted)]/50 transition-colors",children:(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto p-4 sm:p-8",children:[(0,t.jsx)(o,{form:n,repos:i,isSubmitting:l,onFieldChange:c,onRepoChange:u,onAddRepo:h,onRemoveRepo:f}),d&&(0,t.jsx)("div",{className:"mt-6 p-4 rounded-xl bg-[var(--destructive-muted)] border border-[var(--destructive)]/20 text-sm text-[var(--destructive)]",children:d})]}),(0,t.jsxs)("div",{className:"px-4 py-4 sm:px-8 sm:py-6 border-t border-[var(--card-border)] flex items-center justify-end gap-3 flex-shrink-0",children:[(0,t.jsx)("button",{onClick:r,className:"px-6 py-2 rounded-xl border border-[var(--card-border)] hover:bg-[var(--muted)]/50 transition-colors text-sm font-medium",children:"Cancel"}),(0,t.jsx)("button",{onClick:a,disabled:l,className:"btn-primary px-8 py-2 shadow-lg shadow-[var(--primary)]/20 min-w-[120px]",children:l?(0,t.jsxs)("span",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"spinner w-3 h-3 border-2 border-white/20 border-t-white"}),"Saving..."]}):s?"Save Changes":"Create Project"})]})]})}):null}e.s(["createProjectPayload",()=>i,"default",()=>l,"useProjectFormState",()=>n])},41157,e=>{"use strict";var t=e.i(95459);let r=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim(),a=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var s={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let n=(0,t.forwardRef)(({color:e="currentColor",size:a=24,strokeWidth:n=2,absoluteStrokeWidth:i,className:o="",children:l,iconNode:d,...c},u)=>(0,t.createElement)("svg",{ref:u,...s,width:a,height:a,stroke:e,strokeWidth:i?24*Number(n)/Number(a):n,className:r("lucide",o),...!l&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(c)&&{"aria-hidden":"true"},...c},[...d.map(([e,r])=>(0,t.createElement)(e,r)),...Array.isArray(l)?l:[l]])),i=(e,s)=>{let i=(0,t.forwardRef)(({className:i,...o},l)=>(0,t.createElement)(n,{ref:l,iconNode:s,className:r(`lucide-${a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,i),...o}));return i.displayName=a(e),i};e.s(["default",()=>i],41157)},66638,e=>{"use strict";let t=(0,e.i(41157).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",()=>t],66638)},10971,e=>{"use strict";let t=(0,e.i(41157).default)("panel-left-close",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m16 15-3-3 3-3",key:"14y99z"}]]);e.s(["PanelLeftClose",()=>t],10971)},59853,23362,e=>{"use strict";var t=e.i(41157);let r=(0,t.default)("hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);e.s(["Hash",()=>r],59853);let a=(0,t.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);e.s(["Minus",()=>a],23362)},89934,e=>{"use strict";var t=e.i(95459);let r="agx-chat:threads";function a(){let e=globalThis.localStorage;if(!e)throw Error("LocalThreadAdapter requires a browser-like environment with `localStorage`.");return e}function s(){let e=a().getItem(r);if(!e)return{threads:{}};try{let t=JSON.parse(e);if(t&&"object"==typeof t&&t.threads&&"object"==typeof t.threads)return{threads:Object.fromEntries(Object.entries(t.threads).map(([e,t])=>{var r,a;return[e,(r=e,a=t,{id:r,title:a?.title,messages:Array.isArray(a?.messages)?[...a.messages]:[],createdAt:"number"==typeof a?.createdAt?a.createdAt:Date.now(),updatedAt:"number"==typeof a?.updatedAt?a.updatedAt:Date.now(),metadata:a?.metadata})]}))}}catch{}return{threads:{}}}function n(e){a().setItem(r,JSON.stringify(e))}function i(e){return{...e,messages:e.messages.map(e=>({...e})),metadata:e.metadata?{...e.metadata}:void 0}}let o=new class{async saveThread(e){let t=Date.now(),r=s(),a=r.threads[e.id],o=a?.createdAt??e.createdAt??t,l=e.updatedAt??t,d={id:e.id,title:e.title,messages:e.messages.map(e=>({...e})),metadata:e.metadata,createdAt:o,updatedAt:l};return r.threads[e.id]=d,n(r),i(d)}async loadThread(e){let t=s().threads[e];return t?i(t):null}async listThreads(e){let t=Object.values(s().threads),r=e?.order??"desc",a=[...t].sort((e,t)=>"asc"===r?e.updatedAt-t.updatedAt:t.updatedAt-e.updatedAt),n=Math.max(0,e?.offset??0),o=e?.limit,l="number"==typeof o&&o>=0?a.slice(n,n+o):a.slice(n);return{total:t.length,threads:l.map(i)}}async deleteThread(e){let t=s();t.threads[e]&&(delete t.threads[e],n(t))}},l={listThreads:async()=>[...(await o.listThreads({order:"desc"})).threads.filter(e=>!0!==e.metadata?.archived)].sort((e,t)=>t.updatedAt-e.updatedAt),async createThread(e){let t="string"==typeof e?.id?e.id.trim():"";if(t){let r=await o.loadThread(t);if(r){let t={...r.metadata??{},...e?.metadata??{},archived:!1,archivedAt:null};return o.saveThread({id:r.id,title:e?.title??r.title,messages:e?.messages?.length?e.messages:r.messages,metadata:t,createdAt:r.createdAt})}}let r={id:t||("u">typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():`thread-${Date.now()}-${Math.random().toString(16).slice(2)}`),messages:e?.messages?.length?e.messages:[],title:e?.title,metadata:e?.metadata};return o.saveThread(r)},async deleteThread(e){let t=e.trim();if(!t)return;let r=await o.loadThread(t);if(!r)return;let a={...r.metadata??{},archived:!0,archivedAt:Date.now()};await o.saveThread({id:r.id,title:r.title,messages:r.messages,metadata:a,createdAt:r.createdAt})},async renameThread(e,t){let r=e.trim(),a=t.trim();if(!r||!a)return null;let s=await o.loadThread(r);return s?(s.title?.trim()??"")===a?s:o.saveThread({id:s.id,title:a,messages:s.messages,metadata:s.metadata,createdAt:s.createdAt}):null},async saveThreadMessages(e,t){let r=await o.loadThread(e);if(!r)return null;let a=r.title?.trim()||function(e){let t=e.find(e=>"user"===e.role)?.content?.trim();if(!t)return;let r=t.replace(/\s+/g," ");return r.length>60?`${r.slice(0,60).trim()}…`:r}(t);return function(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r+=1){let a=e[r],s=t[r];if(a.id!==s.id||a.role!==s.role||a.participantId!==s.participantId||a.content!==s.content||a.timestamp!==s.timestamp)return!1}return!0}(r.messages,t)&&(r.title?.trim()||void 0)===a?r:o.saveThread({id:r.id,title:a,messages:t,metadata:r.metadata,createdAt:r.createdAt})}},d="agx-chat:last-thread";function c(){return void 0!==window.localStorage}function u(){if(c())try{window.localStorage.removeItem(d)}catch{}}let h=e=>[...e].sort((e,t)=>t.updatedAt-e.updatedAt);function f(){let e=(0,t.useRef)(!0),[r,a]=(0,t.useState)([]),[s,n]=(0,t.useState)(null),[i,o]=(0,t.useState)(!0),[f,p]=(0,t.useState)(!0),[m,x]=(0,t.useState)(!1),[g,b]=(0,t.useState)(null),[j,v]=(0,t.useState)(null),y=(0,t.useRef)(!1),w=(0,t.useCallback)(e=>{n(e)},[]);(0,t.useEffect)(()=>(e.current=!0,()=>{e.current=!1}),[]),(0,t.useEffect)(()=>{let t=!1;return(async()=>{try{let r,s=await l.listThreads();if(t||!e.current)return;a(s);let i=function(){if(!c())return null;try{return window.localStorage.getItem(d)}catch{return null}}(),{threadId:o,shouldClearSavedId:h,restoredFromStorage:f}=(r=s[0]?.id??null,i?s.some(e=>e.id===i)?{threadId:i,shouldClearSavedId:!1,restoredFromStorage:!0}:{threadId:r,shouldClearSavedId:!0,restoredFromStorage:!1}:{threadId:r,shouldClearSavedId:!1,restoredFromStorage:!1});h&&u(),y.current||(y.current=!0),f&&o?w(o):o?n(e=>e??o):n(null)}catch(e){console.error("Failed to load threads",e)}finally{e.current&&(o(!1),p(!1))}})(),()=>{t=!0}},[w]),(0,t.useEffect)(()=>{if(y.current)if(s){if(c())try{window.localStorage.setItem(d,s)}catch{}}else u()},[s]);let k=(0,t.useCallback)(async t=>{x(!0);try{let r=await l.createThread(t);if(!e.current)return r;return a(e=>h([...e.filter(e=>e.id!==r.id),r])),n(r.id),r}catch(e){throw console.error("Failed to create thread",e),e}finally{e.current&&x(!1)}},[]),C=(0,t.useCallback)(async t=>{if(t){b(t);try{if(await l.deleteThread(t),!e.current)return;let r=[];a(e=>r=h(e.filter(e=>e.id!==t))),n(e=>e===t?r[0]?.id??null:e)}catch(e){throw console.error("Failed to delete thread",e),e}finally{e.current&&b(null)}}},[]),N=(0,t.useCallback)(async(t,r)=>{let s=t.trim(),n=r.trim();if(s&&n){v(s);try{let t=await l.renameThread(s,n);if(!t||!e.current)return;a(e=>h(e.map(e=>e.id===t.id?t:e)))}catch(e){throw console.error("Failed to rename thread",e),e}finally{e.current&&v(e=>e===s?null:e)}}},[]),_=(0,t.useCallback)(async(t,r)=>{if(t)try{let s=await l.saveThreadMessages(t,r);if(!s||!e.current)return;a(e=>h(e.map(e=>e.id===s.id?s:e)))}catch(e){console.error("Failed to update thread messages",e)}},[]),S=null!==s&&g===s;return{threads:r,activeThreadId:s,selectThread:w,createThread:k,deleteThread:C,isLoading:i,isRestoringActiveThread:f,isCreating:m,deletingThreadId:g,renamingThreadId:j,isDeletingActiveThread:S,updateThreadMessages:_,renameThread:N}}e.s(["useThreadState",()=>f],89934)},64152,e=>{"use strict";var t=e.i(72218),r=e.i(34285),a=e.i(63558),s=e.i(61606),n=e.i(95459),i=e.i(10971),o=e.i(59853),l=e.i(23362),d=e.i(66638),c=e.i(89934),u=e.i(92463);function h({children:e,params:h}){let{projects:f,isLoading:p,createProject:m}=(0,r.useProjects)(),{threads:x}=(0,c.useThreadState)(),g=[...x].sort((e,t)=>(e.title??"").localeCompare(t.title??"")),b=(0,a.useRouter)();(0,a.usePathname)();let[j,v]=(0,n.useState)(!1),[y,w]=(0,n.useState)(!0),[k,C]=(0,n.useState)(!1),N=(0,u.useProjectFormState)(),_=()=>{N.resetForm(),C(!1)},S=async()=>{if(!N.form.name.trim())return void N.setFormError("Project name is required");let e=N.repos.find(e=>e.name.trim()&&!e.path.trim());if(e)return void N.setFormError(`Local path is required for repository "${e.name}"`);N.setFormError(null),N.setIsSubmitting(!0);try{await m((0,u.createProjectPayload)(N.form,N.repos)),_()}catch(e){N.setFormError(e instanceof Error?e.message:"Failed to create project")}finally{N.setIsSubmitting(!1)}},P=(0,n.useMemo)(()=>f.find(e=>e.slug===h.slug),[f,h.slug]);if(p)return(0,t.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"})});if(!P)return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center h-full",children:[(0,t.jsx)("h2",{className:"text-xl font-bold mb-2",children:"Project Not Found"}),(0,t.jsxs)("p",{className:"text-[var(--muted-foreground)] mb-4",children:["The project “",h.slug,"” does not exist or you do not have access to it."]}),(0,t.jsx)("button",{onClick:()=>b.push("/projects"),className:"px-4 py-2 bg-[var(--primary)] text-white rounded-lg hover:bg-[var(--primary-dark)] transition-colors",children:"Back to Projects"})]});let T=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"thread-sidebar__brand",children:[(0,t.jsx)("div",{className:"flex items-center justify-center mr-2","aria-hidden":"true",children:(0,t.jsxs)("svg",{width:"64",height:"38",viewBox:"0 0 64 38",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.jsx)("rect",{width:"64",height:"38",rx:"8",fill:"black"}),(0,t.jsxs)("g",{stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M 14 27 C 17 16 19 10 20 8 C 21 12 23 20 25 27"}),(0,t.jsx)("path",{d:"M 16 20 C 19 19 21 21 23 20"}),(0,t.jsx)("path",{d:"M 40 13 C 35 10 30 13 30 19 C 30 25 34 28 38 27 C 40 26 40 22 40 20 L 36 20"}),(0,t.jsx)("path",{d:"M 46 11 C 48 16 51 22 54 27"}),(0,t.jsx)("path",{d:"M 54 11 C 52 16 49 22 46 27"})]})]})}),(0,t.jsx)("button",{type:"button",onClick:()=>w(!1),"aria-label":"Hide sidebar",title:"Hide sidebar",className:"ml-auto inline-flex h-7 w-7 items-center justify-center rounded-md text-slate-400 transition-all hover:bg-slate-100 hover:text-slate-600 md:inline-flex hidden",children:(0,t.jsx)(i.PanelLeftClose,{className:"h-4 w-4",strokeWidth:1.75})})]}),(0,t.jsxs)("div",{className:"thread-sidebar__content",children:[(0,t.jsxs)("nav",{className:"thread-sidebar__section",children:[(0,t.jsx)("div",{className:"thread-sidebar__section-header",children:(0,t.jsx)(s.default,{href:"/",className:"thread-sidebar__section-label hover:text-slate-700 transition-colors cursor-pointer",onClick:()=>v(!1),children:"Workspace"})}),g.map(e=>{let r=e.title?.trim()||"Untitled workspace";return(0,t.jsx)("div",{className:"thread-sidebar__workspace-item group",children:(0,t.jsxs)(s.default,{href:"/",onClick:()=>v(!1),className:"thread-sidebar__nav-item thread-sidebar__workspace-nav-item",children:[(0,t.jsx)(o.Hash,{size:18}),(0,t.jsx)("span",{className:"thread-sidebar__workspace-title",children:r})]})},e.id)})]}),(0,t.jsxs)("nav",{className:"thread-sidebar__section mt-4",children:[(0,t.jsxs)("div",{className:"thread-sidebar__section-header",children:[(0,t.jsx)(s.default,{href:"/projects",className:"thread-sidebar__section-label hover:text-slate-700 transition-colors cursor-pointer",onClick:()=>v(!1),children:"Projects"}),(0,t.jsx)("div",{className:"thread-sidebar__header-actions",children:(0,t.jsx)("button",{type:"button",onClick:()=>{N.resetForm(),C(!0)},className:"thread-sidebar__action","aria-label":"Add project",title:"Add project",children:(0,t.jsx)(d.Plus,{size:14})})})]}),(0,t.jsx)("div",{className:"thread-sidebar__workspace-list",children:f.map(e=>{let r=e.slug===h.slug;return(0,t.jsx)("div",{className:"thread-sidebar__workspace-item group",children:(0,t.jsxs)(s.default,{href:`/projects/${e.slug}`,onClick:()=>v(!1),className:`thread-sidebar__nav-item thread-sidebar__workspace-nav-item flex items-center gap-3 ${r?"thread-sidebar__nav-item--active thread-sidebar__workspace-nav-item--active":""}`,children:[(0,t.jsx)(l.Minus,{size:16,className:`flex-shrink-0 ${r?"text-indigo-600":"text-slate-400"}`}),(0,t.jsx)("span",{className:"thread-sidebar__workspace-title",children:e.name})]})},e.slug)})})]})]}),(0,t.jsx)("div",{className:"mt-auto p-3",children:(0,t.jsxs)("a",{href:"https://discord.gg/y77e9Euz",target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-center gap-2 w-full px-3 py-2 rounded-lg text-white text-sm font-medium transition-colors",style:{backgroundColor:"#5865F2"},onMouseEnter:e=>e.currentTarget.style.backgroundColor="#4752C4",onMouseLeave:e=>e.currentTarget.style.backgroundColor="#5865F2",children:[(0,t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 71 55",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M60.1 4.9A58.5 58.5 0 0045.4.2a.2.2 0 00-.2.1 40.8 40.8 0 00-1.8 3.7 54 54 0 00-16.2 0A37.4 37.4 0 0025.4.3a.2.2 0 00-.2-.1A58.4 58.4 0 0010.5 4.9a.2.2 0 00-.1.1C1.5 18.7-.9 32.2.3 45.5v.1a58.8 58.8 0 0017.7 9a.2.2 0 00.3-.1 42 42 0 003.6-5.9.2.2 0 00-.1-.3 38.8 38.8 0 01-5.5-2.6.2.2 0 01 0-.4l1.1-.9a.2.2 0 01.2 0 42 42 0 0035.6 0 .2.2 0 01.2 0l1.1.9a.2.2 0 010 .4 36.4 36.4 0 01-5.5 2.6.2.2 0 00-.1.3 47.2 47.2 0 003.6 5.9.2.2 0 00.3.1 58.6 58.6 0 0017.7-9v-.1c1.4-15.2-2.4-28.4-10-40.1a.2.2 0 00-.1-.1zM23.7 37.3c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7zm23.3 0c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7z"})}),"Join Discord"]})})]});return(0,t.jsxs)("div",{className:"flex h-full min-h-0 overflow-hidden bg-[var(--background)]",children:[(0,t.jsxs)("div",{className:"fixed top-0 left-0 right-0 z-40 h-12 bg-white border-b border-slate-200 flex items-center px-3 gap-3 md:hidden",children:[(0,t.jsx)("button",{onClick:()=>v(!0),className:"p-2 rounded-lg hover:bg-slate-100 transition-colors","aria-label":"Open menu",children:(0,t.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("line",{x1:"3",y1:"6",x2:"21",y2:"6"}),(0,t.jsx)("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),(0,t.jsx)("line",{x1:"3",y1:"18",x2:"21",y2:"18"})]})}),(0,t.jsx)("div",{className:"flex items-center justify-center","aria-hidden":"true",children:(0,t.jsxs)("svg",{width:"40",height:"24",viewBox:"0 0 64 38",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.jsx)("rect",{width:"64",height:"38",rx:"8",fill:"black"}),(0,t.jsxs)("g",{stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M 14 27 C 17 16 19 10 20 8 C 21 12 23 20 25 27"}),(0,t.jsx)("path",{d:"M 16 20 C 19 19 21 21 23 20"}),(0,t.jsx)("path",{d:"M 40 13 C 35 10 30 13 30 19 C 30 25 34 28 38 27 C 40 26 40 22 40 20 L 36 20"}),(0,t.jsx)("path",{d:"M 46 11 C 48 16 51 22 54 27"}),(0,t.jsx)("path",{d:"M 54 11 C 52 16 49 22 46 27"})]})]})}),(0,t.jsx)("span",{className:"font-bold text-sm tracking-tight italic text-slate-900",children:P?.name||"AGX"})]}),j&&(0,t.jsxs)("div",{className:"fixed inset-0 z-50 md:hidden",onClick:()=>v(!1),children:[(0,t.jsx)("div",{className:"absolute inset-0 bg-black/40 backdrop-blur-sm"}),(0,t.jsx)("aside",{className:"absolute left-0 top-0 bottom-0 thread-sidebar shadow-xl animate-slide-in-left",onClick:e=>e.stopPropagation(),children:T})]}),y?(0,t.jsx)("aside",{className:"thread-sidebar hidden md:flex",onClick:e=>e.stopPropagation(),children:T}):(0,t.jsxs)("aside",{className:"thread-sidebar thread-sidebar--collapsed hidden md:flex",children:[(0,t.jsx)("div",{className:"thread-sidebar__brand",children:(0,t.jsx)("button",{type:"button",onClick:()=>w(!0),className:"p-0 bg-transparent hover:bg-transparent border-none outline-none transition-transform hover:scale-105","aria-label":"Show sidebar",title:"Show sidebar",children:(0,t.jsxs)("svg",{width:"64",height:"38",viewBox:"0 0 64 38",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.jsx)("rect",{width:"64",height:"38",rx:"8",fill:"black"}),(0,t.jsxs)("g",{stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M 14 27 C 17 16 19 10 20 8 C 21 12 23 20 25 27"}),(0,t.jsx)("path",{d:"M 16 20 C 19 19 21 21 23 20"}),(0,t.jsx)("path",{d:"M 40 13 C 35 10 30 13 30 19 C 30 25 34 28 38 27 C 40 26 40 22 40 20 L 36 20"}),(0,t.jsx)("path",{d:"M 46 11 C 48 16 51 22 54 27"}),(0,t.jsx)("path",{d:"M 54 11 C 52 16 49 22 46 27"})]})]})})}),(0,t.jsx)("div",{className:"mt-auto p-3 flex justify-center",children:(0,t.jsx)("a",{href:"https://discord.gg/y77e9Euz",target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-center w-8 h-8 rounded-lg text-white transition-colors",style:{backgroundColor:"#5865F2"},onMouseEnter:e=>e.currentTarget.style.backgroundColor="#4752C4",onMouseLeave:e=>e.currentTarget.style.backgroundColor="#5865F2",title:"Join Discord",children:(0,t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 71 55",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M60.1 4.9A58.5 58.5 0 0045.4.2a.2.2 0 00-.2.1 40.8 40.8 0 00-1.8 3.7 54 54 0 00-16.2 0A37.4 37.4 0 0025.4.3a.2.2 0 00-.2-.1A58.4 58.4 0 0010.5 4.9a.2.2 0 00-.1.1C1.5 18.7-.9 32.2.3 45.5v.1a58.8 58.8 0 0017.7 9a.2.2 0 00.3-.1 42 42 0 003.6-5.9.2.2 0 00-.1-.3 38.8 38.8 0 01-5.5-2.6.2.2 0 01 0-.4l1.1-.9a.2.2 0 01.2 0 42 42 0 0035.6 0 .2.2 0 01.2 0l1.1.9a.2.2 0 010 .4 36.4 36.4 0 01-5.5 2.6.2.2 0 00-.1.3 47.2 47.2 0 003.6 5.9.2.2 0 00.3.1 58.6 58.6 0 0017.7-9v-.1c1.4-15.2-2.4-28.4-10-40.1a.2.2 0 00-.1-.1zM23.7 37.3c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7zm23.3 0c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7z"})})})})]}),(0,t.jsx)("div",{className:"flex-1 min-h-0 flex flex-col min-w-0 h-full pt-12 md:pt-0 overflow-hidden",children:e}),(0,t.jsx)(u.default,{isOpen:k,onClose:_,onSubmit:S,editingProject:null,form:N.form,repos:N.repos,isSubmitting:N.isSubmitting,formError:N.formError,onFieldChange:(e,t)=>N.setForm(r=>({...r,[e]:t})),onRepoChange:N.handleRepoChange,onAddRepo:N.addRepo,onRemoveRepo:N.removeRepo})]})}function f({children:e,params:r}){let a=(0,n.use)(r);return(0,t.jsx)(n.Suspense,{fallback:(0,t.jsx)("div",{className:"h-full flex items-center justify-center",children:(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"})}),children:(0,t.jsx)(h,{params:a,children:e})})}e.s(["default",()=>f])}]);
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,56631,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return a}});let a=e=>{}},72431,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={assign:function(){return l},searchParamsToUrlQuery:function(){return n},urlQueryToSearchParams:function(){return o}};for(var s in a)Object.defineProperty(r,s,{enumerable:!0,get:a[s]});function n(e){let t={};for(let[r,a]of e.entries()){let e=t[r];void 0===e?t[r]=a:Array.isArray(e)?e.push(a):t[r]=[e,a]}return t}function i(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function o(e){let t=new URLSearchParams;for(let[r,a]of Object.entries(e))if(Array.isArray(a))for(let e of a)t.append(r,i(e));else t.set(r,i(a));return t}function l(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,a]of r.entries())e.append(t,a)}return e}},43910,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={formatUrl:function(){return o},formatWithValidation:function(){return d},urlObjectKeys:function(){return l}};for(var s in a)Object.defineProperty(r,s,{enumerable:!0,get:a[s]});let n=e.r(42690)._(e.r(72431)),i=/https?|ftp|gopher|file/;function o(e){let{auth:t,hostname:r}=e,a=e.protocol||"",s=e.pathname||"",o=e.hash||"",l=e.query||"",d=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?d=t+e.host:r&&(d=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(d+=":"+e.port)),l&&"object"==typeof l&&(l=String(n.urlQueryToSearchParams(l)));let c=e.search||l&&`?${l}`||"";return a&&!a.endsWith(":")&&(a+=":"),e.slashes||(!a||i.test(a))&&!1!==d?(d="//"+(d||""),s&&"/"!==s[0]&&(s="/"+s)):d||(d=""),o&&"#"!==o[0]&&(o="#"+o),c&&"?"!==c[0]&&(c="?"+c),s=s.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${a}${d}${s}${c}${o}`}let l=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function d(e){return o(e)}},95267,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return s}});let a=e.r(95459);function s(e,t){let r=(0,a.useRef)(null),s=(0,a.useRef)(null);return(0,a.useCallback)(a=>{if(null===a){let e=r.current;e&&(r.current=null,e());let t=s.current;t&&(s.current=null,t())}else e&&(r.current=n(e,a)),t&&(s.current=n(t,a))},[e,t])}function n(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},44643,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={DecodeError:function(){return g},MiddlewareNotFoundError:function(){return y},MissingStaticPage:function(){return v},NormalizeError:function(){return b},PageNotFoundError:function(){return j},SP:function(){return m},ST:function(){return x},WEB_VITALS:function(){return n},execOnce:function(){return i},getDisplayName:function(){return u},getLocationOrigin:function(){return d},getURL:function(){return c},isAbsoluteUrl:function(){return l},isResSent:function(){return h},loadGetInitialProps:function(){return p},normalizeRepeatedSlashes:function(){return f},stringifyError:function(){return w}};for(var s in a)Object.defineProperty(r,s,{enumerable:!0,get:a[s]});let n=["CLS","FCP","FID","INP","LCP","TTFB"];function i(e){let t,r=!1;return(...a)=>(r||(r=!0,t=e(...a)),t)}let o=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>o.test(e);function d(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function c(){let{href:e}=window.location,t=d();return e.substring(t.length)}function u(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function h(e){return e.finished||e.headersSent}function f(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function p(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await p(t.Component,t.ctx)}:{};let a=await e.getInitialProps(t);if(r&&h(r))return a;if(!a)throw Object.defineProperty(Error(`"${u(e)}.getInitialProps()" should resolve to an object. But found "${a}" instead.`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return a}let m="u">typeof performance,x=m&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class g extends Error{}class b extends Error{}class j extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class v extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class y extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function w(e){return JSON.stringify({message:e.message,stack:e.stack})}},53284,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return n}});let a=e.r(44643),s=e.r(68817);function n(e){if(!(0,a.isAbsoluteUrl)(e))return!0;try{let t=(0,a.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,s.hasBasePath)(r.pathname)}catch(e){return!1}}},26100,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"errorOnce",{enumerable:!0,get:function(){return a}});let a=e=>{}},61606,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={default:function(){return g},useLinkStatus:function(){return j}};for(var s in a)Object.defineProperty(r,s,{enumerable:!0,get:a[s]});let n=e.r(42690),i=e.r(72218),o=n._(e.r(95459)),l=e.r(43910),d=e.r(92821),c=e.r(95267),u=e.r(44643),h=e.r(36202);e.r(56631);let f=e.r(23807),p=e.r(53284),m=e.r(94840);function x(e){return"string"==typeof e?e:(0,l.formatUrl)(e)}function g(t){var r;let a,s,n,[l,g]=(0,o.useOptimistic)(f.IDLE_LINK_STATUS),j=(0,o.useRef)(null),{href:v,as:y,children:w,prefetch:k=null,passHref:C,replace:N,shallow:_,scroll:S,onClick:P,onMouseEnter:T,onTouchStart:A,legacyBehavior:E=!1,onNavigate:M,ref:O,unstable_dynamicOnHover:L,...R}=t;a=w,E&&("string"==typeof a||"number"==typeof a)&&(a=(0,i.jsx)("a",{children:a}));let F=o.default.useContext(d.AppRouterContext),I=!1!==k,$=!1!==k?null===(r=k)||"auto"===r?m.FetchStrategy.PPR:m.FetchStrategy.Full:m.FetchStrategy.PPR,{href:U,as:z}=o.default.useMemo(()=>{let e=x(v);return{href:e,as:y?x(y):e}},[v,y]);if(E){if(a?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});s=o.default.Children.only(a)}let D=E?s&&"object"==typeof s&&s.ref:O,B=o.default.useCallback(e=>(null!==F&&(j.current=(0,f.mountLinkInstance)(e,U,F,$,I,g)),()=>{j.current&&((0,f.unmountLinkForCurrentNavigation)(j.current),j.current=null),(0,f.unmountPrefetchableInstance)(e)}),[I,U,F,$,g]),W={ref:(0,c.useMergedRef)(B,D),onClick(t){E||"function"!=typeof P||P(t),E&&s.props&&"function"==typeof s.props.onClick&&s.props.onClick(t),!F||t.defaultPrevented||function(t,r,a,s,n,i,l){if("u">typeof window){let d,{nodeName:c}=t.currentTarget;if("A"===c.toUpperCase()&&((d=t.currentTarget.getAttribute("target"))&&"_self"!==d||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,p.isLocalURL)(r)){n&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),l){let e=!1;if(l({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:u}=e.r(20263);o.default.startTransition(()=>{u(a||r,n?"replace":"push",i??!0,s.current)})}}(t,U,z,j,N,S,M)},onMouseEnter(e){E||"function"!=typeof T||T(e),E&&s.props&&"function"==typeof s.props.onMouseEnter&&s.props.onMouseEnter(e),F&&I&&(0,f.onNavigationIntent)(e.currentTarget,!0===L)},onTouchStart:function(e){E||"function"!=typeof A||A(e),E&&s.props&&"function"==typeof s.props.onTouchStart&&s.props.onTouchStart(e),F&&I&&(0,f.onNavigationIntent)(e.currentTarget,!0===L)}};return(0,u.isAbsoluteUrl)(z)?W.href=z:E&&!C&&("a"!==s.type||"href"in s.props)||(W.href=(0,h.addBasePath)(z)),n=E?o.default.cloneElement(s,W):(0,i.jsx)("a",{...R,...W,children:a}),(0,i.jsx)(b.Provider,{value:l,children:n})}e.r(26100);let b=(0,o.createContext)(f.IDLE_LINK_STATUS),j=()=>(0,o.useContext)(b);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},63558,(e,t,r)=>{t.exports=e.r(97131)},34285,e=>{"use strict";var t=e.i(95459);function r(){let[e,r]=(0,t.useState)([]),[a,s]=(0,t.useState)(!1),[n,i]=(0,t.useState)(null),o=(0,t.useCallback)(async()=>{s(!0);try{let e=await fetch("/api/projects");if(!e.ok)throw Error("Failed to fetch projects");let t=await e.json();r(t.projects??[]),i(null)}catch(e){i(e instanceof Error?e:Error("Unknown error"))}finally{s(!1)}},[]);(0,t.useEffect)(()=>{o()},[o]);let l=(0,t.useCallback)(async e=>{let t=await fetch("/api/projects",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error||"Failed to create project");let a=(await t.json()).project;return r(e=>[a,...e]),a},[]);return{projects:e,isLoading:a,error:n,refetch:o,createProject:l,updateProject:(0,t.useCallback)(async(e,t)=>{let a=await fetch(`/api/projects/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok)throw Error((await a.json().catch(()=>({}))).error||"Failed to update project");let s=(await a.json()).project;return r(t=>t.map(t=>t.id===e?s:t)),s},[]),deleteProject:(0,t.useCallback)(async e=>{let t=await fetch(`/api/projects/${e}`,{method:"DELETE"});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error||"Failed to delete project");r(t=>t.filter(t=>t.id!==e))},[])}}e.s(["useProjects",()=>r])},41157,e=>{"use strict";var t=e.i(95459);let r=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim(),a=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var s={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let n=(0,t.forwardRef)(({color:e="currentColor",size:a=24,strokeWidth:n=2,absoluteStrokeWidth:i,className:o="",children:l,iconNode:d,...c},u)=>(0,t.createElement)("svg",{ref:u,...s,width:a,height:a,stroke:e,strokeWidth:i?24*Number(n)/Number(a):n,className:r("lucide",o),...!l&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(c)&&{"aria-hidden":"true"},...c},[...d.map(([e,r])=>(0,t.createElement)(e,r)),...Array.isArray(l)?l:[l]])),i=(e,s)=>{let i=(0,t.forwardRef)(({className:i,...o},l)=>(0,t.createElement)(n,{ref:l,iconNode:s,className:r(`lucide-${a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,i),...o}));return i.displayName=a(e),i};e.s(["default",()=>i],41157)},66638,e=>{"use strict";let t=(0,e.i(41157).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",()=>t],66638)},92463,e=>{"use strict";var t=e.i(72218),r=e.i(95459);let a={name:"",description:""},s={name:"",path:"",notes:""};function n(){let[e,t]=(0,r.useState)(a),[n,i]=(0,r.useState)([s]),[o,l]=(0,r.useState)(!1),[d,c]=(0,r.useState)(null),u=(0,r.useCallback)((e,t,r)=>{i(a=>a.map((a,s)=>s===e?{...a,[t]:r}:a))},[]),h=(0,r.useCallback)(()=>{i(e=>[...e,{...s}])},[]),f=(0,r.useCallback)(e=>{i(t=>t.filter((t,r)=>r!==e))},[]),p=(0,r.useCallback)(()=>{t(a),i([s]),c(null)},[]),m=(0,r.useCallback)(e=>{t({name:e.name||"",description:e.description||""}),e.repos&&e.repos.length>0?i(e.repos.map(e=>({name:e.name||"",path:e.path||"",notes:e.notes||""}))):i([s]),c(null)},[]);return{form:e,setForm:t,repos:n,handleRepoChange:u,addRepo:h,removeRepo:f,resetForm:p,hydrateFromProject:m,isSubmitting:o,setIsSubmitting:l,formError:d,setFormError:c}}function i(e,t){let r=t.filter(e=>e.name.trim()&&e.path.trim()).map(e=>({name:e.name.trim(),path:e.path.trim(),notes:e.notes.trim()||void 0}));return{name:e.name.trim(),description:e.description.trim()||void 0,repos:r.length?r:void 0}}function o({form:e,repos:r,isSubmitting:a,onFieldChange:s,onRepoChange:n,onAddRepo:i,onRemoveRepo:o}){return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsx)("div",{className:"grid gap-4",children:(0,t.jsxs)("label",{className:"space-y-1.5 block",children:[(0,t.jsx)("span",{className:"text-xs font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Project Name"}),(0,t.jsx)("input",{value:e.name,onChange:e=>s("name",e.target.value),className:"input w-full",placeholder:"e.g. AGX Cloud",disabled:a})]})}),(0,t.jsxs)("label",{className:"space-y-1.5 block",children:[(0,t.jsx)("span",{className:"text-xs font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Description"}),(0,t.jsx)("textarea",{value:e.description,onChange:e=>s("description",e.target.value),className:"input w-full h-24 resize-none",placeholder:"What is this project about?",disabled:a})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--card-border)] pb-2",children:[(0,t.jsx)("h3",{className:"text-sm font-bold uppercase tracking-widest text-[var(--muted-foreground)]",children:"Repositories"}),(0,t.jsx)("button",{type:"button",onClick:i,className:"text-xs font-semibold text-[var(--primary)] hover:underline",disabled:a,children:"+ Add Repository"})]}),(0,t.jsx)("div",{className:"space-y-4",children:r.map((e,s)=>(0,t.jsxs)("div",{className:"p-4 rounded-2xl border border-[var(--card-border)] bg-[var(--muted)]/20 space-y-3 relative group",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("span",{className:"text-xs font-bold text-[var(--foreground)] uppercase",children:["Repo #",s+1]}),r.length>1&&(0,t.jsx)("button",{type:"button",onClick:()=>o(s),className:"text-xs font-semibold text-[var(--destructive)] hover:underline",disabled:a,children:"Remove"})]}),(0,t.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,t.jsx)("input",{value:e.name,onChange:e=>n(s,"name",e.target.value),placeholder:"Name (e.g. Frontend)",className:"input text-sm",disabled:a}),(0,t.jsx)("input",{value:e.path,onChange:e=>n(s,"path",e.target.value),placeholder:"Local path (mandatory)",className:"input text-sm",disabled:a}),(0,t.jsx)("div",{className:"md:col-span-2",children:(0,t.jsx)("input",{value:e.notes,onChange:e=>n(s,"notes",e.target.value),placeholder:"Notes/Instructions",className:"input text-sm w-full",disabled:a})})]})]},s))})]})]})}function l({isOpen:e,onClose:r,onSubmit:a,editingProject:s,form:n,repos:i,isSubmitting:l,formError:d,onFieldChange:c,onRepoChange:u,onAddRepo:h,onRemoveRepo:f}){return e?(0,t.jsx)("div",{className:"modal-backdrop p-2 sm:p-4 z-50 overflow-y-auto flex items-center justify-center",onClick:e=>e.target===e.currentTarget&&r(),children:(0,t.jsxs)("div",{className:"modal-content w-full max-w-4xl mx-2 sm:mx-auto bg-[var(--card-bg)] rounded-3xl border border-[var(--card-border)] shadow-2xl animate-scale-in flex flex-col max-h-[90vh]",children:[(0,t.jsxs)("div",{className:"px-4 py-4 sm:px-8 sm:py-6 border-b border-[var(--card-border)] flex items-center justify-between flex-shrink-0",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-xl font-bold",children:s?"Edit Project":"Create New Project"}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5",children:s?"Update your project settings and repositories.":"Define a new project and connect repositories."})]}),(0,t.jsx)("button",{onClick:r,className:"p-2 rounded-xl hover:bg-[var(--muted)]/50 transition-colors",children:(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto p-4 sm:p-8",children:[(0,t.jsx)(o,{form:n,repos:i,isSubmitting:l,onFieldChange:c,onRepoChange:u,onAddRepo:h,onRemoveRepo:f}),d&&(0,t.jsx)("div",{className:"mt-6 p-4 rounded-xl bg-[var(--destructive-muted)] border border-[var(--destructive)]/20 text-sm text-[var(--destructive)]",children:d})]}),(0,t.jsxs)("div",{className:"px-4 py-4 sm:px-8 sm:py-6 border-t border-[var(--card-border)] flex items-center justify-end gap-3 flex-shrink-0",children:[(0,t.jsx)("button",{onClick:r,className:"px-6 py-2 rounded-xl border border-[var(--card-border)] hover:bg-[var(--muted)]/50 transition-colors text-sm font-medium",children:"Cancel"}),(0,t.jsx)("button",{onClick:a,disabled:l,className:"btn-primary px-8 py-2 shadow-lg shadow-[var(--primary)]/20 min-w-[120px]",children:l?(0,t.jsxs)("span",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"spinner w-3 h-3 border-2 border-white/20 border-t-white"}),"Saving..."]}):s?"Save Changes":"Create Project"})]})]})}):null}e.s(["createProjectPayload",()=>i,"default",()=>l,"useProjectFormState",()=>n])},10971,e=>{"use strict";let t=(0,e.i(41157).default)("panel-left-close",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m16 15-3-3 3-3",key:"14y99z"}]]);e.s(["PanelLeftClose",()=>t],10971)},59853,23362,e=>{"use strict";var t=e.i(41157);let r=(0,t.default)("hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);e.s(["Hash",()=>r],59853);let a=(0,t.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);e.s(["Minus",()=>a],23362)},89934,e=>{"use strict";var t=e.i(95459);let r="agx-chat:threads";function a(){let e=globalThis.localStorage;if(!e)throw Error("LocalThreadAdapter requires a browser-like environment with `localStorage`.");return e}function s(){let e=a().getItem(r);if(!e)return{threads:{}};try{let t=JSON.parse(e);if(t&&"object"==typeof t&&t.threads&&"object"==typeof t.threads)return{threads:Object.fromEntries(Object.entries(t.threads).map(([e,t])=>{var r,a;return[e,(r=e,a=t,{id:r,title:a?.title,messages:Array.isArray(a?.messages)?[...a.messages]:[],createdAt:"number"==typeof a?.createdAt?a.createdAt:Date.now(),updatedAt:"number"==typeof a?.updatedAt?a.updatedAt:Date.now(),metadata:a?.metadata})]}))}}catch{}return{threads:{}}}function n(e){a().setItem(r,JSON.stringify(e))}function i(e){return{...e,messages:e.messages.map(e=>({...e})),metadata:e.metadata?{...e.metadata}:void 0}}let o=new class{async saveThread(e){let t=Date.now(),r=s(),a=r.threads[e.id],o=a?.createdAt??e.createdAt??t,l=e.updatedAt??t,d={id:e.id,title:e.title,messages:e.messages.map(e=>({...e})),metadata:e.metadata,createdAt:o,updatedAt:l};return r.threads[e.id]=d,n(r),i(d)}async loadThread(e){let t=s().threads[e];return t?i(t):null}async listThreads(e){let t=Object.values(s().threads),r=e?.order??"desc",a=[...t].sort((e,t)=>"asc"===r?e.updatedAt-t.updatedAt:t.updatedAt-e.updatedAt),n=Math.max(0,e?.offset??0),o=e?.limit,l="number"==typeof o&&o>=0?a.slice(n,n+o):a.slice(n);return{total:t.length,threads:l.map(i)}}async deleteThread(e){let t=s();t.threads[e]&&(delete t.threads[e],n(t))}},l={listThreads:async()=>[...(await o.listThreads({order:"desc"})).threads.filter(e=>!0!==e.metadata?.archived)].sort((e,t)=>t.updatedAt-e.updatedAt),async createThread(e){let t="string"==typeof e?.id?e.id.trim():"";if(t){let r=await o.loadThread(t);if(r){let t={...r.metadata??{},...e?.metadata??{},archived:!1,archivedAt:null};return o.saveThread({id:r.id,title:e?.title??r.title,messages:e?.messages?.length?e.messages:r.messages,metadata:t,createdAt:r.createdAt})}}let r={id:t||("u">typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():`thread-${Date.now()}-${Math.random().toString(16).slice(2)}`),messages:e?.messages?.length?e.messages:[],title:e?.title,metadata:e?.metadata};return o.saveThread(r)},async deleteThread(e){let t=e.trim();if(!t)return;let r=await o.loadThread(t);if(!r)return;let a={...r.metadata??{},archived:!0,archivedAt:Date.now()};await o.saveThread({id:r.id,title:r.title,messages:r.messages,metadata:a,createdAt:r.createdAt})},async renameThread(e,t){let r=e.trim(),a=t.trim();if(!r||!a)return null;let s=await o.loadThread(r);return s?(s.title?.trim()??"")===a?s:o.saveThread({id:s.id,title:a,messages:s.messages,metadata:s.metadata,createdAt:s.createdAt}):null},async saveThreadMessages(e,t){let r=await o.loadThread(e);if(!r)return null;let a=r.title?.trim()||function(e){let t=e.find(e=>"user"===e.role)?.content?.trim();if(!t)return;let r=t.replace(/\s+/g," ");return r.length>60?`${r.slice(0,60).trim()}…`:r}(t);return function(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r+=1){let a=e[r],s=t[r];if(a.id!==s.id||a.role!==s.role||a.participantId!==s.participantId||a.content!==s.content||a.timestamp!==s.timestamp)return!1}return!0}(r.messages,t)&&(r.title?.trim()||void 0)===a?r:o.saveThread({id:r.id,title:a,messages:t,metadata:r.metadata,createdAt:r.createdAt})}},d="agx-chat:last-thread";function c(){return void 0!==window.localStorage}function u(){if(c())try{window.localStorage.removeItem(d)}catch{}}let h=e=>[...e].sort((e,t)=>t.updatedAt-e.updatedAt);function f(){let e=(0,t.useRef)(!0),[r,a]=(0,t.useState)([]),[s,n]=(0,t.useState)(null),[i,o]=(0,t.useState)(!0),[f,p]=(0,t.useState)(!0),[m,x]=(0,t.useState)(!1),[g,b]=(0,t.useState)(null),[j,v]=(0,t.useState)(null),y=(0,t.useRef)(!1),w=(0,t.useCallback)(e=>{n(e)},[]);(0,t.useEffect)(()=>(e.current=!0,()=>{e.current=!1}),[]),(0,t.useEffect)(()=>{let t=!1;return(async()=>{try{let r,s=await l.listThreads();if(t||!e.current)return;a(s);let i=function(){if(!c())return null;try{return window.localStorage.getItem(d)}catch{return null}}(),{threadId:o,shouldClearSavedId:h,restoredFromStorage:f}=(r=s[0]?.id??null,i?s.some(e=>e.id===i)?{threadId:i,shouldClearSavedId:!1,restoredFromStorage:!0}:{threadId:r,shouldClearSavedId:!0,restoredFromStorage:!1}:{threadId:r,shouldClearSavedId:!1,restoredFromStorage:!1});h&&u(),y.current||(y.current=!0),f&&o?w(o):o?n(e=>e??o):n(null)}catch(e){console.error("Failed to load threads",e)}finally{e.current&&(o(!1),p(!1))}})(),()=>{t=!0}},[w]),(0,t.useEffect)(()=>{if(y.current)if(s){if(c())try{window.localStorage.setItem(d,s)}catch{}}else u()},[s]);let k=(0,t.useCallback)(async t=>{x(!0);try{let r=await l.createThread(t);if(!e.current)return r;return a(e=>h([...e.filter(e=>e.id!==r.id),r])),n(r.id),r}catch(e){throw console.error("Failed to create thread",e),e}finally{e.current&&x(!1)}},[]),C=(0,t.useCallback)(async t=>{if(t){b(t);try{if(await l.deleteThread(t),!e.current)return;let r=[];a(e=>r=h(e.filter(e=>e.id!==t))),n(e=>e===t?r[0]?.id??null:e)}catch(e){throw console.error("Failed to delete thread",e),e}finally{e.current&&b(null)}}},[]),N=(0,t.useCallback)(async(t,r)=>{let s=t.trim(),n=r.trim();if(s&&n){v(s);try{let t=await l.renameThread(s,n);if(!t||!e.current)return;a(e=>h(e.map(e=>e.id===t.id?t:e)))}catch(e){throw console.error("Failed to rename thread",e),e}finally{e.current&&v(e=>e===s?null:e)}}},[]),_=(0,t.useCallback)(async(t,r)=>{if(t)try{let s=await l.saveThreadMessages(t,r);if(!s||!e.current)return;a(e=>h(e.map(e=>e.id===s.id?s:e)))}catch(e){console.error("Failed to update thread messages",e)}},[]),S=null!==s&&g===s;return{threads:r,activeThreadId:s,selectThread:w,createThread:k,deleteThread:C,isLoading:i,isRestoringActiveThread:f,isCreating:m,deletingThreadId:g,renamingThreadId:j,isDeletingActiveThread:S,updateThreadMessages:_,renameThread:N}}e.s(["useThreadState",()=>f],89934)},64152,e=>{"use strict";var t=e.i(72218),r=e.i(34285),a=e.i(63558),s=e.i(61606),n=e.i(95459),i=e.i(10971),o=e.i(59853),l=e.i(23362),d=e.i(66638),c=e.i(89934),u=e.i(92463);function h({children:e,params:h}){let{projects:f,isLoading:p,createProject:m}=(0,r.useProjects)(),{threads:x}=(0,c.useThreadState)(),g=[...x].sort((e,t)=>(e.title??"").localeCompare(t.title??"")),b=(0,a.useRouter)();(0,a.usePathname)();let[j,v]=(0,n.useState)(!1),[y,w]=(0,n.useState)(!0),[k,C]=(0,n.useState)(!1),N=(0,u.useProjectFormState)(),_=()=>{N.resetForm(),C(!1)},S=async()=>{if(!N.form.name.trim())return void N.setFormError("Project name is required");let e=N.repos.find(e=>e.name.trim()&&!e.path.trim());if(e)return void N.setFormError(`Local path is required for repository "${e.name}"`);N.setFormError(null),N.setIsSubmitting(!0);try{await m((0,u.createProjectPayload)(N.form,N.repos)),_()}catch(e){N.setFormError(e instanceof Error?e.message:"Failed to create project")}finally{N.setIsSubmitting(!1)}},P=(0,n.useMemo)(()=>f.find(e=>e.slug===h.slug),[f,h.slug]);if(p)return(0,t.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"})});if(!P)return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center h-full",children:[(0,t.jsx)("h2",{className:"text-xl font-bold mb-2",children:"Project Not Found"}),(0,t.jsxs)("p",{className:"text-[var(--muted-foreground)] mb-4",children:["The project “",h.slug,"” does not exist or you do not have access to it."]}),(0,t.jsx)("button",{onClick:()=>b.push("/projects"),className:"px-4 py-2 bg-[var(--primary)] text-white rounded-lg hover:bg-[var(--primary-dark)] transition-colors",children:"Back to Projects"})]});let T=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"thread-sidebar__brand",children:[(0,t.jsx)("div",{className:"flex items-center justify-center mr-2","aria-hidden":"true",children:(0,t.jsxs)("svg",{width:"64",height:"38",viewBox:"0 0 64 38",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.jsx)("rect",{width:"64",height:"38",rx:"8",fill:"black"}),(0,t.jsxs)("g",{stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M 14 27 C 17 16 19 10 20 8 C 21 12 23 20 25 27"}),(0,t.jsx)("path",{d:"M 16 20 C 19 19 21 21 23 20"}),(0,t.jsx)("path",{d:"M 40 13 C 35 10 30 13 30 19 C 30 25 34 28 38 27 C 40 26 40 22 40 20 L 36 20"}),(0,t.jsx)("path",{d:"M 46 11 C 48 16 51 22 54 27"}),(0,t.jsx)("path",{d:"M 54 11 C 52 16 49 22 46 27"})]})]})}),(0,t.jsx)("button",{type:"button",onClick:()=>w(!1),"aria-label":"Hide sidebar",title:"Hide sidebar",className:"ml-auto inline-flex h-7 w-7 items-center justify-center rounded-md text-slate-400 transition-all hover:bg-slate-100 hover:text-slate-600 md:inline-flex hidden",children:(0,t.jsx)(i.PanelLeftClose,{className:"h-4 w-4",strokeWidth:1.75})})]}),(0,t.jsxs)("div",{className:"thread-sidebar__content",children:[(0,t.jsxs)("nav",{className:"thread-sidebar__section",children:[(0,t.jsx)("div",{className:"thread-sidebar__section-header",children:(0,t.jsx)(s.default,{href:"/",className:"thread-sidebar__section-label hover:text-slate-700 transition-colors cursor-pointer",onClick:()=>v(!1),children:"Workspace"})}),g.map(e=>{let r=e.title?.trim()||"Untitled workspace";return(0,t.jsx)("div",{className:"thread-sidebar__workspace-item group",children:(0,t.jsxs)(s.default,{href:"/",onClick:()=>v(!1),className:"thread-sidebar__nav-item thread-sidebar__workspace-nav-item",children:[(0,t.jsx)(o.Hash,{size:18}),(0,t.jsx)("span",{className:"thread-sidebar__workspace-title",children:r})]})},e.id)})]}),(0,t.jsxs)("nav",{className:"thread-sidebar__section mt-4",children:[(0,t.jsxs)("div",{className:"thread-sidebar__section-header",children:[(0,t.jsx)(s.default,{href:"/projects",className:"thread-sidebar__section-label hover:text-slate-700 transition-colors cursor-pointer",onClick:()=>v(!1),children:"Projects"}),(0,t.jsx)("div",{className:"thread-sidebar__header-actions",children:(0,t.jsx)("button",{type:"button",onClick:()=>{N.resetForm(),C(!0)},className:"thread-sidebar__action","aria-label":"Add project",title:"Add project",children:(0,t.jsx)(d.Plus,{size:14})})})]}),(0,t.jsx)("div",{className:"thread-sidebar__workspace-list",children:f.map(e=>{let r=e.slug===h.slug;return(0,t.jsx)("div",{className:"thread-sidebar__workspace-item group",children:(0,t.jsxs)(s.default,{href:`/projects/${e.slug}`,onClick:()=>v(!1),className:`thread-sidebar__nav-item thread-sidebar__workspace-nav-item flex items-center gap-3 ${r?"thread-sidebar__nav-item--active thread-sidebar__workspace-nav-item--active":""}`,children:[(0,t.jsx)(l.Minus,{size:16,className:`flex-shrink-0 ${r?"text-indigo-600":"text-slate-400"}`}),(0,t.jsx)("span",{className:"thread-sidebar__workspace-title",children:e.name})]})},e.slug)})})]})]}),(0,t.jsx)("div",{className:"mt-auto p-3",children:(0,t.jsxs)("a",{href:"https://discord.gg/y77e9Euz",target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-center gap-2 w-full px-3 py-2 rounded-lg text-white text-sm font-medium transition-colors",style:{backgroundColor:"#5865F2"},onMouseEnter:e=>e.currentTarget.style.backgroundColor="#4752C4",onMouseLeave:e=>e.currentTarget.style.backgroundColor="#5865F2",children:[(0,t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 71 55",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M60.1 4.9A58.5 58.5 0 0045.4.2a.2.2 0 00-.2.1 40.8 40.8 0 00-1.8 3.7 54 54 0 00-16.2 0A37.4 37.4 0 0025.4.3a.2.2 0 00-.2-.1A58.4 58.4 0 0010.5 4.9a.2.2 0 00-.1.1C1.5 18.7-.9 32.2.3 45.5v.1a58.8 58.8 0 0017.7 9a.2.2 0 00.3-.1 42 42 0 003.6-5.9.2.2 0 00-.1-.3 38.8 38.8 0 01-5.5-2.6.2.2 0 01 0-.4l1.1-.9a.2.2 0 01.2 0 42 42 0 0035.6 0 .2.2 0 01.2 0l1.1.9a.2.2 0 010 .4 36.4 36.4 0 01-5.5 2.6.2.2 0 00-.1.3 47.2 47.2 0 003.6 5.9.2.2 0 00.3.1 58.6 58.6 0 0017.7-9v-.1c1.4-15.2-2.4-28.4-10-40.1a.2.2 0 00-.1-.1zM23.7 37.3c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7zm23.3 0c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7z"})}),"Join Discord"]})})]});return(0,t.jsxs)("div",{className:"flex h-full min-h-0 overflow-hidden bg-[var(--background)]",children:[(0,t.jsxs)("div",{className:"fixed top-0 left-0 right-0 z-40 h-12 bg-white border-b border-slate-200 flex items-center px-3 gap-3 md:hidden",children:[(0,t.jsx)("button",{onClick:()=>v(!0),className:"p-2 rounded-lg hover:bg-slate-100 transition-colors","aria-label":"Open menu",children:(0,t.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("line",{x1:"3",y1:"6",x2:"21",y2:"6"}),(0,t.jsx)("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),(0,t.jsx)("line",{x1:"3",y1:"18",x2:"21",y2:"18"})]})}),(0,t.jsx)("div",{className:"flex items-center justify-center","aria-hidden":"true",children:(0,t.jsxs)("svg",{width:"40",height:"24",viewBox:"0 0 64 38",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.jsx)("rect",{width:"64",height:"38",rx:"8",fill:"black"}),(0,t.jsxs)("g",{stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M 14 27 C 17 16 19 10 20 8 C 21 12 23 20 25 27"}),(0,t.jsx)("path",{d:"M 16 20 C 19 19 21 21 23 20"}),(0,t.jsx)("path",{d:"M 40 13 C 35 10 30 13 30 19 C 30 25 34 28 38 27 C 40 26 40 22 40 20 L 36 20"}),(0,t.jsx)("path",{d:"M 46 11 C 48 16 51 22 54 27"}),(0,t.jsx)("path",{d:"M 54 11 C 52 16 49 22 46 27"})]})]})}),(0,t.jsx)("span",{className:"font-bold text-sm tracking-tight italic text-slate-900",children:P?.name||"AGX"})]}),j&&(0,t.jsxs)("div",{className:"fixed inset-0 z-50 md:hidden",onClick:()=>v(!1),children:[(0,t.jsx)("div",{className:"absolute inset-0 bg-black/40 backdrop-blur-sm"}),(0,t.jsx)("aside",{className:"absolute left-0 top-0 bottom-0 thread-sidebar shadow-xl animate-slide-in-left",onClick:e=>e.stopPropagation(),children:T})]}),y?(0,t.jsx)("aside",{className:"thread-sidebar hidden md:flex",onClick:e=>e.stopPropagation(),children:T}):(0,t.jsxs)("aside",{className:"thread-sidebar thread-sidebar--collapsed hidden md:flex",children:[(0,t.jsx)("div",{className:"thread-sidebar__brand",children:(0,t.jsx)("button",{type:"button",onClick:()=>w(!0),className:"p-0 bg-transparent hover:bg-transparent border-none outline-none transition-transform hover:scale-105","aria-label":"Show sidebar",title:"Show sidebar",children:(0,t.jsxs)("svg",{width:"64",height:"38",viewBox:"0 0 64 38",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.jsx)("rect",{width:"64",height:"38",rx:"8",fill:"black"}),(0,t.jsxs)("g",{stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M 14 27 C 17 16 19 10 20 8 C 21 12 23 20 25 27"}),(0,t.jsx)("path",{d:"M 16 20 C 19 19 21 21 23 20"}),(0,t.jsx)("path",{d:"M 40 13 C 35 10 30 13 30 19 C 30 25 34 28 38 27 C 40 26 40 22 40 20 L 36 20"}),(0,t.jsx)("path",{d:"M 46 11 C 48 16 51 22 54 27"}),(0,t.jsx)("path",{d:"M 54 11 C 52 16 49 22 46 27"})]})]})})}),(0,t.jsx)("div",{className:"mt-auto p-3 flex justify-center",children:(0,t.jsx)("a",{href:"https://discord.gg/y77e9Euz",target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-center w-8 h-8 rounded-lg text-white transition-colors",style:{backgroundColor:"#5865F2"},onMouseEnter:e=>e.currentTarget.style.backgroundColor="#4752C4",onMouseLeave:e=>e.currentTarget.style.backgroundColor="#5865F2",title:"Join Discord",children:(0,t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 71 55",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M60.1 4.9A58.5 58.5 0 0045.4.2a.2.2 0 00-.2.1 40.8 40.8 0 00-1.8 3.7 54 54 0 00-16.2 0A37.4 37.4 0 0025.4.3a.2.2 0 00-.2-.1A58.4 58.4 0 0010.5 4.9a.2.2 0 00-.1.1C1.5 18.7-.9 32.2.3 45.5v.1a58.8 58.8 0 0017.7 9a.2.2 0 00.3-.1 42 42 0 003.6-5.9.2.2 0 00-.1-.3 38.8 38.8 0 01-5.5-2.6.2.2 0 01 0-.4l1.1-.9a.2.2 0 01.2 0 42 42 0 0035.6 0 .2.2 0 01.2 0l1.1.9a.2.2 0 010 .4 36.4 36.4 0 01-5.5 2.6.2.2 0 00-.1.3 47.2 47.2 0 003.6 5.9.2.2 0 00.3.1 58.6 58.6 0 0017.7-9v-.1c1.4-15.2-2.4-28.4-10-40.1a.2.2 0 00-.1-.1zM23.7 37.3c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7zm23.3 0c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7z"})})})})]}),(0,t.jsx)("div",{className:"flex-1 min-h-0 flex flex-col min-w-0 h-full pt-12 md:pt-0 overflow-hidden",children:e}),(0,t.jsx)(u.default,{isOpen:k,onClose:_,onSubmit:S,editingProject:null,form:N.form,repos:N.repos,isSubmitting:N.isSubmitting,formError:N.formError,onFieldChange:(e,t)=>N.setForm(r=>({...r,[e]:t})),onRepoChange:N.handleRepoChange,onAddRepo:N.addRepo,onRemoveRepo:N.removeRepo})]})}function f({children:e,params:r}){let a=(0,n.use)(r);return(0,t.jsx)(n.Suspense,{fallback:(0,t.jsx)("div",{className:"h-full flex items-center justify-center",children:(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"})}),children:(0,t.jsx)(h,{params:a,children:e})})}e.s(["default",()=>f])}]);
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState, useCallback } from "react";
|
|
4
|
+
import { useRouter } from "next/navigation";
|
|
5
|
+
import { ChatPreview } from "@/components/chat-ui/ChatPreview";
|
|
6
|
+
|
|
7
|
+
type ReadyState = "checking" | "ready" | "needs-setup" | "error";
|
|
8
|
+
|
|
9
|
+
export default function WelcomePage() {
|
|
10
|
+
const router = useRouter();
|
|
11
|
+
const [readyState, setReadyState] = useState<ReadyState>("checking");
|
|
12
|
+
|
|
13
|
+
// Silent daemon auto-start
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
let cancelled = false;
|
|
16
|
+
void (async () => {
|
|
17
|
+
try {
|
|
18
|
+
// Check providers
|
|
19
|
+
const statusRes = await fetch("/api/status");
|
|
20
|
+
if (cancelled) return;
|
|
21
|
+
if (!statusRes.ok) {
|
|
22
|
+
setReadyState("error");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const statusData = await statusRes.json();
|
|
26
|
+
const cliServices = (statusData.services || []).filter(
|
|
27
|
+
(s: { name: string; status: string }) => s.name.startsWith("cli:")
|
|
28
|
+
);
|
|
29
|
+
const hasProvider = cliServices.some(
|
|
30
|
+
(s: { status: string }) => s.status === "ok"
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
if (!hasProvider) {
|
|
34
|
+
setReadyState("needs-setup");
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Auto-start daemon
|
|
39
|
+
const daemonRes = await fetch("/api/daemon");
|
|
40
|
+
if (cancelled) return;
|
|
41
|
+
const daemonData = await daemonRes.json();
|
|
42
|
+
if (daemonData.running) {
|
|
43
|
+
setReadyState("ready");
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
await fetch("/api/daemon", {
|
|
48
|
+
method: "POST",
|
|
49
|
+
headers: { "Content-Type": "application/json" },
|
|
50
|
+
body: JSON.stringify({ workers: 1 }),
|
|
51
|
+
});
|
|
52
|
+
if (!cancelled) setReadyState("ready");
|
|
53
|
+
} catch {
|
|
54
|
+
if (!cancelled) setReadyState("error");
|
|
55
|
+
}
|
|
56
|
+
})();
|
|
57
|
+
return () => {
|
|
58
|
+
cancelled = true;
|
|
59
|
+
};
|
|
60
|
+
}, []);
|
|
61
|
+
|
|
62
|
+
const handleJoin = useCallback(() => {
|
|
63
|
+
router.push("/");
|
|
64
|
+
}, [router]);
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<div className="h-screen w-full flex flex-col bg-[#FAFAFA]">
|
|
68
|
+
{/* Identity line */}
|
|
69
|
+
<div className="text-center pt-10 pb-2 px-4">
|
|
70
|
+
<h1 className="text-[15px] font-medium text-slate-400 tracking-wide">
|
|
71
|
+
Chat with a team of AI agents
|
|
72
|
+
</h1>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
{/* Chat preview */}
|
|
76
|
+
<ChatPreview />
|
|
77
|
+
|
|
78
|
+
{/* CTA + status */}
|
|
79
|
+
<div className="pb-10 pt-4 flex flex-col items-center gap-3 px-4">
|
|
80
|
+
<button
|
|
81
|
+
type="button"
|
|
82
|
+
onClick={handleJoin}
|
|
83
|
+
disabled={readyState === "needs-setup"}
|
|
84
|
+
className="inline-flex items-center gap-2 px-8 py-3.5 bg-slate-900 text-white text-[15px] font-semibold rounded-xl hover:bg-slate-800 transition-all duration-200 shadow-lg shadow-slate-900/10 hover:-translate-y-0.5 disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:translate-y-0"
|
|
85
|
+
>
|
|
86
|
+
Join the conversation
|
|
87
|
+
</button>
|
|
88
|
+
|
|
89
|
+
{/* Status line */}
|
|
90
|
+
<div className="text-[13px] font-medium">
|
|
91
|
+
{readyState === "checking" && (
|
|
92
|
+
<span className="text-slate-400">Checking system...</span>
|
|
93
|
+
)}
|
|
94
|
+
{readyState === "ready" && (
|
|
95
|
+
<span className="text-emerald-600 flex items-center gap-1.5">
|
|
96
|
+
<span className="w-1.5 h-1.5 rounded-full bg-emerald-500" />
|
|
97
|
+
Ready
|
|
98
|
+
</span>
|
|
99
|
+
)}
|
|
100
|
+
{readyState === "needs-setup" && (
|
|
101
|
+
<a
|
|
102
|
+
href="https://github.com/anthropics/claude-code"
|
|
103
|
+
target="_blank"
|
|
104
|
+
rel="noopener noreferrer"
|
|
105
|
+
className="text-amber-600 hover:text-amber-700 transition-colors"
|
|
106
|
+
>
|
|
107
|
+
⚠ Setup needed (2 min) →
|
|
108
|
+
</a>
|
|
109
|
+
)}
|
|
110
|
+
{readyState === "error" && (
|
|
111
|
+
<span className="text-slate-400">Could not check system status</span>
|
|
112
|
+
)}
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
);
|
|
117
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect, useRef } from "react";
|
|
4
|
+
import { DEMO_MESSAGES, DEMO_PARTICIPANTS } from "@/lib/demo-threads";
|
|
5
|
+
import { agentAvatarUrl } from "./ParticipantBar";
|
|
6
|
+
import { Markdown } from "./Markdown";
|
|
7
|
+
import { User } from "lucide-react";
|
|
8
|
+
|
|
9
|
+
const STAGGER_MS = 400;
|
|
10
|
+
|
|
11
|
+
export function ChatPreview() {
|
|
12
|
+
const [visibleCount, setVisibleCount] = useState(0);
|
|
13
|
+
const containerRef = useRef<HTMLDivElement>(null);
|
|
14
|
+
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (visibleCount >= DEMO_MESSAGES.length) return;
|
|
17
|
+
const timer = setTimeout(() => {
|
|
18
|
+
setVisibleCount((c) => c + 1);
|
|
19
|
+
}, visibleCount === 0 ? 300 : STAGGER_MS);
|
|
20
|
+
return () => clearTimeout(timer);
|
|
21
|
+
}, [visibleCount]);
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
containerRef.current?.scrollTo({
|
|
25
|
+
top: containerRef.current.scrollHeight,
|
|
26
|
+
behavior: "smooth",
|
|
27
|
+
});
|
|
28
|
+
}, [visibleCount]);
|
|
29
|
+
|
|
30
|
+
const participantMap = Object.fromEntries(
|
|
31
|
+
DEMO_PARTICIPANTS.map((p) => [p.id, p])
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<div
|
|
36
|
+
ref={containerRef}
|
|
37
|
+
className="flex-1 overflow-y-auto px-4 py-6"
|
|
38
|
+
>
|
|
39
|
+
<div className="max-w-2xl mx-auto space-y-4">
|
|
40
|
+
{DEMO_MESSAGES.slice(0, visibleCount).map((msg, i) => {
|
|
41
|
+
const isUser = msg.role === "user";
|
|
42
|
+
const p = msg.participantId ? participantMap[msg.participantId] : null;
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div
|
|
46
|
+
key={msg.id}
|
|
47
|
+
className="flex gap-3 animate-in fade-in slide-in-from-bottom-2 duration-300"
|
|
48
|
+
style={{ animationDelay: `${i * 50}ms` }}
|
|
49
|
+
>
|
|
50
|
+
<div className="w-8 h-8 rounded-full overflow-hidden border border-slate-100 shadow-sm shrink-0 mt-0.5 flex items-center justify-center bg-slate-100">
|
|
51
|
+
{isUser ? (
|
|
52
|
+
<User className="w-4 h-4 text-slate-400" />
|
|
53
|
+
) : p ? (
|
|
54
|
+
<img
|
|
55
|
+
src={agentAvatarUrl(p.id, 32, p.color)}
|
|
56
|
+
alt={p.name}
|
|
57
|
+
className="w-full h-full object-cover"
|
|
58
|
+
/>
|
|
59
|
+
) : null}
|
|
60
|
+
</div>
|
|
61
|
+
<div className="flex-1 min-w-0">
|
|
62
|
+
<div className="flex items-baseline gap-2">
|
|
63
|
+
<span
|
|
64
|
+
className="text-[12px] font-bold tracking-wide uppercase"
|
|
65
|
+
style={{ color: isUser ? "#334155" : (p?.color || "#64748b") }}
|
|
66
|
+
>
|
|
67
|
+
{isUser ? "You" : (p?.name || "Agent")}
|
|
68
|
+
</span>
|
|
69
|
+
{!isUser && p?.model && (
|
|
70
|
+
<span className="text-[10px] text-slate-400 font-medium">
|
|
71
|
+
{p.model}
|
|
72
|
+
</span>
|
|
73
|
+
)}
|
|
74
|
+
</div>
|
|
75
|
+
<div className="text-[14px] text-slate-700 leading-relaxed mt-0.5">
|
|
76
|
+
<Markdown content={msg.content} isUser={isUser} />
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
);
|
|
81
|
+
})}
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { GroupMessage, Participant } from "@/lib/types";
|
|
2
|
+
|
|
3
|
+
export const DEMO_PARTICIPANTS: Participant[] = [
|
|
4
|
+
{ id: "jane", name: "Jane", provider: "claude", model: "claude-opus-4-6", color: "#6366f1" },
|
|
5
|
+
{ id: "cody", name: "Cody", provider: "claude", model: "gpt-5.3", color: "#f59e0b" },
|
|
6
|
+
{ id: "flint", name: "Flint", provider: "ollama", model: "gemini-3.1-pro", color: "#10b981" },
|
|
7
|
+
{ id: "jewel", name: "Jewel", provider: "claude", model: "glm-5", color: "#ec4899" },
|
|
8
|
+
];
|
|
9
|
+
|
|
10
|
+
const now = Date.now();
|
|
11
|
+
|
|
12
|
+
export const DEMO_MESSAGES: GroupMessage[] = [
|
|
13
|
+
{
|
|
14
|
+
id: "demo-0",
|
|
15
|
+
role: "user",
|
|
16
|
+
participantId: null,
|
|
17
|
+
content: "We're losing 40% of users at the onboarding config screen. How should we fix this?",
|
|
18
|
+
timestamp: now - 9000,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: "demo-1",
|
|
22
|
+
role: "assistant",
|
|
23
|
+
participantId: "jane",
|
|
24
|
+
content: "The core problem is we're asking for setup before showing value. Users don't know *why* they need an API key yet. Flip the order — let them see the product working first, then ask for config when they actually need it.",
|
|
25
|
+
timestamp: now - 8000,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: "demo-2",
|
|
29
|
+
role: "assistant",
|
|
30
|
+
participantId: "cody",
|
|
31
|
+
content: "We can prove that with a zero-config starter task: detect `package.json` or `.git` on load, run a local project analysis. No API key needed, instant result. That alone should cut the drop-off significantly.",
|
|
32
|
+
timestamp: now - 7000,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "demo-3",
|
|
36
|
+
role: "assistant",
|
|
37
|
+
participantId: "flint",
|
|
38
|
+
content: "Risk: if we defer config entirely, the *second* interaction fails when there's no provider configured. We'd just move the drop-off from step 1 to step 2. Need to handle that transition carefully.",
|
|
39
|
+
timestamp: now - 6000,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: "demo-4",
|
|
43
|
+
role: "assistant",
|
|
44
|
+
participantId: "jewel",
|
|
45
|
+
content: "Graduated fidelity solves this. First task is local-only and always succeeds. When they trigger something that needs an LLM, prompt for the key *inline* — right where they need it, not on a separate page. Context-sensitive setup.",
|
|
46
|
+
timestamp: now - 5000,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: "demo-5",
|
|
50
|
+
role: "assistant",
|
|
51
|
+
participantId: "jane",
|
|
52
|
+
content: "Exactly. Setup instructions are only useful at the moment you need them. Front-loading them is just anxiety. I'd also suggest we track `welcome_view → first_action → first_result` to measure the actual impact.",
|
|
53
|
+
timestamp: now - 4000,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: "demo-6",
|
|
57
|
+
role: "assistant",
|
|
58
|
+
participantId: "cody",
|
|
59
|
+
content: "Here's a concrete implementation plan:\n1. Add framework detection on page load\n2. Show \"Map this project\" as default starter task\n3. Run it client-side with zero dependencies\n4. Persist the result so they land in a live session, not a blank page",
|
|
60
|
+
timestamp: now - 3000,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: "demo-7",
|
|
64
|
+
role: "assistant",
|
|
65
|
+
participantId: "flint",
|
|
66
|
+
content: "One more thing — keep state from that first task. When they transition to the real workspace, they should land mid-session. Starting over after the demo kills momentum and trust.",
|
|
67
|
+
timestamp: now - 2000,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: "demo-8",
|
|
71
|
+
role: "assistant",
|
|
72
|
+
participantId: "jewel",
|
|
73
|
+
content: "Summary: land → see agents working → join with one click → first task runs instantly → setup happens only when needed. Every step earns the next. Shall I draft the implementation spec?",
|
|
74
|
+
timestamp: now - 1000,
|
|
75
|
+
},
|
|
76
|
+
];
|
|
@@ -192,16 +192,27 @@ export function validateSQLiteEnvironment(db: Database.Database, dbPath: string)
|
|
|
192
192
|
db.pragma(`synchronous = ${REQUIRED_PRAGMAS.synchronous}`);
|
|
193
193
|
db.pragma(`cache_size = ${REQUIRED_PRAGMAS.cache_size}`);
|
|
194
194
|
|
|
195
|
-
// Verify journal_mode stuck
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
195
|
+
// Verify journal_mode stuck — WAL preferred, DELETE acceptable (network FS),
|
|
196
|
+
// memory/off are not safe for production.
|
|
197
|
+
const jm = (db.pragma("journal_mode", { simple: true }) as string).toLowerCase();
|
|
198
|
+
const ACCEPTABLE_JOURNAL_MODES = new Set(["wal", "delete"]);
|
|
199
|
+
if (!ACCEPTABLE_JOURNAL_MODES.has(jm)) {
|
|
200
|
+
// WAL failed — try DELETE as fallback (works on network filesystems)
|
|
201
|
+
db.pragma("journal_mode = DELETE");
|
|
202
|
+
const jm2 = (db.pragma("journal_mode", { simple: true }) as string).toLowerCase();
|
|
203
|
+
if (!ACCEPTABLE_JOURNAL_MODES.has(jm2)) {
|
|
204
|
+
errors.push({
|
|
205
|
+
kind: "pragma_error",
|
|
206
|
+
message: `Failed to set journal_mode (got '${jm2}', tried WAL then DELETE)`,
|
|
207
|
+
found: jm2,
|
|
208
|
+
required: "wal or delete",
|
|
209
|
+
fix: "Ensure the database file is on a local filesystem and no other process holds an exclusive lock.",
|
|
210
|
+
});
|
|
211
|
+
} else {
|
|
212
|
+
// DELETE mode needs synchronous=FULL for durability (WAL is safe with NORMAL)
|
|
213
|
+
db.pragma("synchronous = FULL");
|
|
214
|
+
console.warn(`[startup] WAL unavailable, using journal_mode=${jm2} with synchronous=FULL`);
|
|
215
|
+
}
|
|
205
216
|
}
|
|
206
217
|
} catch (err: any) {
|
|
207
218
|
errors.push({
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "node server.js",
|
|
7
|
+
"nuke": "lsof -ti :41741 | xargs kill -9 2>/dev/null; pkill -9 -f 'agx-cloud' 2>/dev/null; echo 'All processes killed'",
|
|
7
8
|
"build": "echo 'standalone build - nothing to build'",
|
|
8
9
|
"start": "node server.js",
|
|
9
10
|
"lint": "next lint",
|
package/cloud-runtime/standalone/Projects/Agents/agx-cloud/scripts/fix-turbopack-externals.mjs
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Turbopack renames serverExternalPackages to <name>-<hash> in the bundled
|
|
4
|
+
* output, but the standalone node_modules only contains the real package name.
|
|
5
|
+
* This script scans the standalone build for hashed external references and
|
|
6
|
+
* creates symlinks so Node can resolve them at runtime.
|
|
7
|
+
*/
|
|
8
|
+
import { readdirSync, symlinkSync, existsSync, readFileSync } from "fs";
|
|
9
|
+
import { join, resolve } from "path";
|
|
10
|
+
import { globSync } from "fs";
|
|
11
|
+
|
|
12
|
+
const STANDALONE_DIR = resolve(".next/standalone");
|
|
13
|
+
const EXTERNALS = ["better-sqlite3"];
|
|
14
|
+
|
|
15
|
+
// Pattern: <package>-<hex hash>
|
|
16
|
+
const HASH_RE = /^(.+)-([0-9a-f]{16})$/;
|
|
17
|
+
|
|
18
|
+
function findHashedReferences() {
|
|
19
|
+
const refs = new Map();
|
|
20
|
+
|
|
21
|
+
// Scan .next/server for require() calls with hashed names
|
|
22
|
+
const serverDir = join(STANDALONE_DIR, ".next/server");
|
|
23
|
+
if (!existsSync(serverDir)) return refs;
|
|
24
|
+
|
|
25
|
+
function scanDir(dir) {
|
|
26
|
+
let entries;
|
|
27
|
+
try {
|
|
28
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
29
|
+
} catch {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
for (const entry of entries) {
|
|
33
|
+
const full = join(dir, entry.name);
|
|
34
|
+
if (entry.isDirectory()) {
|
|
35
|
+
scanDir(full);
|
|
36
|
+
} else if (entry.name.endsWith(".js")) {
|
|
37
|
+
try {
|
|
38
|
+
const content = readFileSync(full, "utf-8");
|
|
39
|
+
for (const pkg of EXTERNALS) {
|
|
40
|
+
// Match require("better-sqlite3-<hash>") or from "better-sqlite3-<hash>"
|
|
41
|
+
const re = new RegExp(`["']${pkg.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}-([0-9a-f]{8,})["']`, "g");
|
|
42
|
+
let m;
|
|
43
|
+
while ((m = re.exec(content)) !== null) {
|
|
44
|
+
refs.set(`${pkg}-${m[1]}`, pkg);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
} catch {
|
|
48
|
+
// skip unreadable files
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
scanDir(serverDir);
|
|
55
|
+
return refs;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function findNodeModulesDir() {
|
|
59
|
+
// Standalone copies node_modules into .next/standalone/node_modules
|
|
60
|
+
const candidate = join(STANDALONE_DIR, "node_modules");
|
|
61
|
+
if (existsSync(candidate)) return candidate;
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const refs = findHashedReferences();
|
|
66
|
+
if (refs.size === 0) {
|
|
67
|
+
console.log("[fix-turbopack-externals] No hashed external references found — nothing to do.");
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const nodeModules = findNodeModulesDir();
|
|
72
|
+
if (!nodeModules) {
|
|
73
|
+
console.error("[fix-turbopack-externals] Could not find standalone node_modules directory.");
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
let created = 0;
|
|
78
|
+
for (const [hashed, real] of refs) {
|
|
79
|
+
const target = join(nodeModules, hashed);
|
|
80
|
+
const source = join(nodeModules, real);
|
|
81
|
+
if (existsSync(target)) {
|
|
82
|
+
console.log(`[fix-turbopack-externals] ${hashed} already exists, skipping.`);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (!existsSync(source)) {
|
|
86
|
+
console.warn(`[fix-turbopack-externals] ${real} not found in node_modules, skipping.`);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
symlinkSync(real, target);
|
|
90
|
+
console.log(`[fix-turbopack-externals] Symlinked ${hashed} -> ${real}`);
|
|
91
|
+
created++;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
console.log(`[fix-turbopack-externals] Done. Created ${created} symlink(s).`);
|
|
@@ -26,9 +26,17 @@ export interface InitOptions {
|
|
|
26
26
|
*/
|
|
27
27
|
export function applyPragmas(db: Database.Database, opts?: InitOptions): void {
|
|
28
28
|
db.pragma("journal_mode = WAL");
|
|
29
|
+
const jm = (db.pragma("journal_mode", { simple: true }) as string).toLowerCase();
|
|
30
|
+
if (jm !== "wal") {
|
|
31
|
+
// WAL unavailable (network FS, locked) — fall back to DELETE
|
|
32
|
+
db.pragma("journal_mode = DELETE");
|
|
33
|
+
db.pragma("synchronous = FULL");
|
|
34
|
+
console.warn(`[db/init] WAL unavailable (got '${jm}'), using DELETE with synchronous=FULL`);
|
|
35
|
+
} else {
|
|
36
|
+
db.pragma(`synchronous = ${opts?.synchronous ?? "NORMAL"}`);
|
|
37
|
+
}
|
|
29
38
|
db.pragma("foreign_keys = ON");
|
|
30
39
|
db.pragma(`busy_timeout = ${opts?.busyTimeout ?? 5000}`);
|
|
31
|
-
db.pragma(`synchronous = ${opts?.synchronous ?? "NORMAL"}`);
|
|
32
40
|
db.pragma(`cache_size = ${opts?.cacheSize ?? -64000}`);
|
|
33
41
|
}
|
|
34
42
|
|