constellai 0.3.5 → 0.3.7
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/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/(app)/activity/page.js +2 -2
- package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
- package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/agents/[handle]/page.js +2 -2
- package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/code/page.js +2 -2
- package/.next/server/app/(app)/code/page.js.nft.json +1 -1
- package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/config/page.js +2 -2
- package/.next/server/app/(app)/config/page.js.nft.json +1 -1
- package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/costs/page.js +2 -2
- package/.next/server/app/(app)/costs/page.js.nft.json +1 -1
- package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/cron/page.js +2 -2
- package/.next/server/app/(app)/cron/page.js.nft.json +1 -1
- package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/dashboard/page.js +2 -2
- package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -1
- package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/design/page.js +44 -44
- package/.next/server/app/(app)/design/page.js.nft.json +1 -1
- package/.next/server/app/(app)/design/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/docs/[id]/page.js +2 -2
- package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/docs/page.js +2 -2
- package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
- package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/github/page.js +2 -2
- package/.next/server/app/(app)/github/page.js.nft.json +1 -1
- package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/goals/page.js +2 -2
- package/.next/server/app/(app)/goals/page.js.nft.json +1 -1
- package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/inbox/page.js +2 -2
- package/.next/server/app/(app)/inbox/page.js.nft.json +1 -1
- package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/knowledge/page.js +3 -3
- package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/models/page.js +2 -2
- package/.next/server/app/(app)/models/page.js.nft.json +1 -1
- package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/notifications/page.js +2 -2
- package/.next/server/app/(app)/notifications/page.js.nft.json +1 -1
- package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/org/page.js +4 -4
- package/.next/server/app/(app)/org/page.js.nft.json +1 -1
- package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/organizations/page.js +2 -2
- package/.next/server/app/(app)/organizations/page.js.nft.json +1 -1
- package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/page.js +3 -3
- package/.next/server/app/(app)/page.js.nft.json +1 -1
- package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/planner/page.js +2 -2
- package/.next/server/app/(app)/planner/page.js.nft.json +1 -1
- package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/plugins/page.js +2 -2
- package/.next/server/app/(app)/plugins/page.js.nft.json +1 -1
- package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/pm/page.js +2 -2
- package/.next/server/app/(app)/pm/page.js.nft.json +1 -1
- package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/prepare-deploy/page.js +6 -6
- package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -1
- package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/profile/page.js +2 -2
- package/.next/server/app/(app)/profile/page.js.nft.json +1 -1
- package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/pulse/page.js +2 -2
- package/.next/server/app/(app)/pulse/page.js.nft.json +1 -1
- package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/reports/[id]/page.js +3 -3
- package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/reports/page.js +2 -2
- package/.next/server/app/(app)/reports/page.js.nft.json +1 -1
- package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/routines/page.js +2 -2
- package/.next/server/app/(app)/routines/page.js.nft.json +1 -1
- package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/search/page.js +2 -2
- package/.next/server/app/(app)/search/page.js.nft.json +1 -1
- package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/security/page.js +2 -2
- package/.next/server/app/(app)/security/page.js.nft.json +1 -1
- package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/skills/page.js +2 -2
- package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
- package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/tasks/page.js +2 -2
- package/.next/server/app/(app)/tasks/page.js.nft.json +1 -1
- package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/test-dev/page.js +2 -2
- package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -1
- package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/update/page.js +3 -3
- package/.next/server/app/(app)/update/page.js.nft.json +1 -1
- package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(auth)/login/page.js +2 -2
- package/.next/server/app/(auth)/login/page.js.nft.json +1 -1
- package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(auth)/onboarding/page.js +1 -1
- package/.next/server/app/(auth)/onboarding/page.js.nft.json +1 -1
- package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error/page.js +1 -1
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +3 -3
- package/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cron/tick/route.js +16 -16
- package/.next/server/app/api/locks/acquire/route.js +1 -1
- package/.next/server/app/api/sync/file/route.js +2 -2
- package/.next/server/app/api/telegram/poll/route.js +11 -11
- package/.next/server/app/api/upload/route.js +1 -1
- package/.next/server/app/api/v1/[[...path]]/route.js +1 -1
- package/.next/server/chunks/1249.js +14 -14
- package/.next/server/chunks/1845.js +1 -1
- package/.next/server/chunks/2517.js +1 -1
- package/.next/server/chunks/259.js +9 -9
- package/.next/server/chunks/260.js +1 -1
- package/.next/server/chunks/2867.js +2 -2
- package/.next/server/chunks/2960.js +1 -1
- package/.next/server/chunks/3131.js +1 -1
- package/.next/server/chunks/3234.js +4 -4
- package/.next/server/chunks/4574.js +1 -0
- package/.next/server/chunks/4619.js +1 -1
- package/.next/server/chunks/4979.js +12 -12
- package/.next/server/chunks/6431.js +1 -1
- package/.next/server/chunks/6753.js +1 -0
- package/.next/server/chunks/7236.js +4 -0
- package/.next/server/chunks/7336.js +1 -1
- package/.next/server/chunks/7589.js +3 -3
- package/.next/server/chunks/7621.js +12 -0
- package/.next/server/chunks/7989.js +1 -1
- package/.next/server/chunks/7993.js +21 -0
- package/.next/server/chunks/850.js +1 -1
- package/.next/server/chunks/8561.js +3 -3
- package/.next/server/chunks/8623.js +1 -1
- package/.next/server/chunks/8762.js +15 -417
- package/.next/server/chunks/8823.js +1 -1
- package/.next/server/chunks/8846.js +1 -0
- package/.next/server/chunks/9160.js +417 -0
- package/.next/server/chunks/9783.js +3 -3
- package/.next/server/chunks/9969.js +1 -1
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/215-18ea748d2ff2caff.js +1 -0
- package/.next/static/chunks/27-b49ec46cfcce75b7.js +1 -0
- package/.next/static/chunks/2989-2dd9a66d007a96e8.js +4 -0
- package/.next/static/chunks/3219-92e75397858f3f1f.js +1 -0
- package/.next/static/chunks/4643-d0ab4088e129651f.js +1 -0
- package/.next/static/chunks/8370-e88907d9c72435e7.js +12 -0
- package/.next/static/chunks/app/(app)/activity/{page-29e80a32c02f376b.js → page-93d4012627ea70d5.js} +1 -1
- package/.next/static/chunks/app/(app)/agents/[handle]/page-bfe740784bdf239c.js +1 -0
- package/.next/static/chunks/app/(app)/code/{page-1f954f7688bc24e4.js → page-5e24874f11857823.js} +1 -1
- package/.next/static/chunks/app/(app)/config/page-12c5487a8d55c2c2.js +1 -0
- package/.next/static/chunks/app/(app)/costs/page-6edcec363617f5ef.js +1 -0
- package/.next/static/chunks/app/(app)/cron/{page-a4dd65c78173b872.js → page-f9167770757921f7.js} +1 -1
- package/.next/static/chunks/app/(app)/dashboard/page-103f172e762911d1.js +1 -0
- package/.next/static/chunks/app/(app)/design/{page-238be90d78d22780.js → page-11b9cc40f32fe34f.js} +3 -3
- package/.next/static/chunks/app/(app)/docs/[id]/{page-e29afa1ba1a086e1.js → page-eaae80c3d47e1ba7.js} +1 -1
- package/.next/static/chunks/app/(app)/docs/page-87457e514ea7de32.js +1 -0
- package/.next/static/chunks/app/(app)/github/page-ff62b7618c594632.js +1 -0
- package/.next/static/chunks/app/(app)/goals/page-d4d854c091020a92.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/page-1bcfc50e9df5ed6f.js +12 -0
- package/.next/static/chunks/app/(app)/knowledge/page-0a55ce74e274817c.js +1 -0
- package/.next/static/chunks/app/(app)/layout-825ba765e8034dfb.js +1 -0
- package/.next/static/chunks/app/(app)/models/page-cd077c548916b8cb.js +1 -0
- package/.next/static/chunks/app/(app)/notifications/page-c5c7945f6f6f18d6.js +12 -0
- package/.next/static/chunks/app/(app)/org/page-a83804854bd0d44a.js +12 -0
- package/.next/static/chunks/app/(app)/organizations/page-b38db8e364e3a108.js +1 -0
- package/.next/static/chunks/app/(app)/page-733340fec4cd0173.js +1 -0
- package/.next/static/chunks/app/(app)/planner/{page-920e439e6f88c238.js → page-06b2841d0438d92d.js} +1 -1
- package/.next/static/chunks/app/(app)/plugins/{page-d10239fcbabdf4fa.js → page-535ed062643077fc.js} +1 -1
- package/.next/static/chunks/app/(app)/pm/page-dc0296761e1af17c.js +1 -0
- package/.next/static/chunks/app/(app)/prepare-deploy/page-6f0c5081caf1d013.js +1 -0
- package/.next/static/chunks/app/(app)/profile/page-cef1aa72ffc02e9c.js +1 -0
- package/.next/static/chunks/app/(app)/pulse/page-d4bdec1709913581.js +1 -0
- package/.next/static/chunks/app/(app)/reports/[id]/{page-a4dd65c78173b872.js → page-f9167770757921f7.js} +1 -1
- package/.next/static/chunks/app/(app)/reports/{page-5c07fa3a8b5ba553.js → page-5c37a53bbd4fd1c3.js} +1 -1
- package/.next/static/chunks/app/(app)/routines/page-e274160cfbb3c594.js +1 -0
- package/.next/static/chunks/app/(app)/search/{page-07e037c487f14c35.js → page-f0e082b9b0402981.js} +1 -1
- package/.next/static/chunks/app/(app)/security/page-a12f04656bde8aad.js +1 -0
- package/.next/static/chunks/app/(app)/skills/page-583f9780fa981aa8.js +1 -0
- package/.next/static/chunks/app/(app)/tasks/page-7bb09650b84e0755.js +1 -0
- package/.next/static/chunks/app/(app)/test-dev/page-ce66efbb83b2ed21.js +1 -0
- package/.next/static/chunks/app/(app)/update/page-6a8082f1c1b3b762.js +1 -0
- package/.next/static/chunks/app/(auth)/login/page-b512c906a1566d8c.js +1 -0
- package/.next/static/chunks/app/(auth)/onboarding/page-8f6bf1259bb5aab5.js +1 -0
- package/.next/trace-build +1 -1
- package/CHANGELOG.md +63 -1
- package/README.md +7 -1
- package/README.pt-BR.md +7 -1
- package/THIRD_PARTY_LICENSES.md +64 -0
- package/bin/constella-update.mjs +19 -7
- package/bin/constella.mjs +1 -1
- package/bin/worker.mjs +1 -0
- package/docs/UPDATE.md +18 -2
- package/docs/en/AI_ARCHITECTURE.md +2 -2
- package/docs/en/CHAT_COMMANDS.md +1 -1
- package/docs/en/CONFIGURATION.md +1 -1
- package/docs/en/DESIGN.md +1 -1
- package/docs/en/FAQ.md +3 -3
- package/docs/en/GOALS_SPECS_ISSUES.md +1 -1
- package/docs/en/MCP.md +2 -2
- package/docs/en/PLUGINS.md +2 -2
- package/docs/en/PORTABLE_MODE.md +1 -1
- package/docs/en/PUBLISHING.md +14 -15
- package/docs/en/README.md +1 -1
- package/docs/en/SECURITY.md +3 -3
- package/docs/en/START_MODE.md +1 -1
- package/docs/en/TELEGRAM.md +1 -1
- package/docs/en/TROUBLESHOOTING.md +1 -1
- package/docs/en/VPS_MODE.md +2 -2
- package/docs/pt/AI_ARCHITECTURE.md +2 -2
- package/docs/pt/CHAT_COMMANDS.md +1 -1
- package/docs/pt/CONFIGURATION.md +1 -1
- package/docs/pt/DESIGN.md +1 -1
- package/docs/pt/FAQ.md +3 -3
- package/docs/pt/GOALS_SPECS_ISSUES.md +1 -1
- package/docs/pt/MCP.md +1 -1
- package/docs/pt/PLUGINS.md +2 -2
- package/docs/pt/PORTABLE_MODE.md +1 -1
- package/docs/pt/PUBLISHING.md +6 -7
- package/docs/pt/README.md +1 -1
- package/docs/pt/SECURITY.md +3 -3
- package/docs/pt/START_MODE.md +1 -1
- package/docs/pt/TELEGRAM.md +1 -1
- package/docs/pt/TROUBLESHOOTING.md +2 -2
- package/docs/pt/VPS_MODE.md +1 -1
- package/docs/roadmap.md +36 -0
- package/package.json +2 -1
- package/scripts/i18n-parity.mjs +1 -1
- package/scripts/install.sh +4 -2
- package/scripts/publish-public.mjs +33 -19
- package/scripts/vps-clean.sh +1 -1
- package/scripts/vps-install.sh +19 -5
- package/scripts/vps-update.sh +26 -17
- package/.next/server/chunks/212.js +0 -1
- package/.next/server/chunks/6381.js +0 -15
- package/.next/server/chunks/6853.js +0 -12
- package/.next/server/chunks/6954.js +0 -1
- package/.next/server/chunks/9215.js +0 -4
- package/.next/server/chunks/9229.js +0 -1
- package/.next/server/chunks/9310.js +0 -21
- package/.next/static/chunks/2692-7fee6e06b3c93940.js +0 -1
- package/.next/static/chunks/2997-ec8b18227849683e.js +0 -1
- package/.next/static/chunks/3219-b4941c7ff967e904.js +0 -1
- package/.next/static/chunks/6602-f26d109fd94cee1d.js +0 -4
- package/.next/static/chunks/8370-2733742abf5f3ddf.js +0 -12
- package/.next/static/chunks/9112-c37628abc8a164cd.js +0 -1
- package/.next/static/chunks/app/(app)/agents/[handle]/page-83277413debb3b25.js +0 -1
- package/.next/static/chunks/app/(app)/config/page-eee4f8736608afa5.js +0 -1
- package/.next/static/chunks/app/(app)/costs/page-0beac688917eaa30.js +0 -1
- package/.next/static/chunks/app/(app)/dashboard/page-519a934ccfcce6fa.js +0 -1
- package/.next/static/chunks/app/(app)/docs/page-b4462f9ca2118f8b.js +0 -1
- package/.next/static/chunks/app/(app)/github/page-cf8501e45fe38663.js +0 -1
- package/.next/static/chunks/app/(app)/goals/page-75c36155c162df5b.js +0 -1
- package/.next/static/chunks/app/(app)/inbox/page-f40bdb457609ddad.js +0 -12
- package/.next/static/chunks/app/(app)/knowledge/page-dc5dd15e4f0ad22e.js +0 -1
- package/.next/static/chunks/app/(app)/layout-408976a4d35f06a8.js +0 -1
- package/.next/static/chunks/app/(app)/models/page-a54e0b8ffed0085c.js +0 -1
- package/.next/static/chunks/app/(app)/notifications/page-1f84d74bc53c2c6c.js +0 -12
- package/.next/static/chunks/app/(app)/org/page-d17c62b7a668b399.js +0 -12
- package/.next/static/chunks/app/(app)/organizations/page-b55445f226cf8c61.js +0 -1
- package/.next/static/chunks/app/(app)/page-c7dd52ecc2da529d.js +0 -1
- package/.next/static/chunks/app/(app)/pm/page-61ad11558f241cf1.js +0 -1
- package/.next/static/chunks/app/(app)/prepare-deploy/page-8d25f86b26ab0d2e.js +0 -1
- package/.next/static/chunks/app/(app)/profile/page-236673e1a8c1e6c6.js +0 -1
- package/.next/static/chunks/app/(app)/pulse/page-f2c6049a967b93a3.js +0 -1
- package/.next/static/chunks/app/(app)/routines/page-0193e84e6a60a06a.js +0 -1
- package/.next/static/chunks/app/(app)/security/page-71e5d992b5ddf79a.js +0 -1
- package/.next/static/chunks/app/(app)/skills/page-72691864856c9906.js +0 -1
- package/.next/static/chunks/app/(app)/tasks/page-5c9ca8f83d4c904f.js +0 -1
- package/.next/static/chunks/app/(app)/test-dev/page-5aee630d9bc73a0b.js +0 -1
- package/.next/static/chunks/app/(app)/update/page-2c9bcdb65bd2f597.js +0 -1
- package/.next/static/chunks/app/(auth)/login/page-50033813b56469ee.js +0 -1
- package/.next/static/chunks/app/(auth)/onboarding/page-075fd9673f7ab241.js +0 -1
- package/docs/assets/blackhole.svg +0 -37
- /package/.next/static/{vaEtsAmUuKf_DngRqwRUn → Mx3bcAGWI83SQ6PqC4kYX}/_buildManifest.js +0 -0
- /package/.next/static/{vaEtsAmUuKf_DngRqwRUn → Mx3bcAGWI83SQ6PqC4kYX}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";exports.id=7621,exports.ids=[7621],exports.modules={20716:(a,b,c)=>{c.r(b),c.d(b,{"0008abfdeefe18f706104ed40846a30c52580116ee":()=>d.cT,"004229861342763cdeeaecdf33af20836775cdc461":()=>d.Kd,"40563850bdfe40e806746d690f3e37de1586a42f27":()=>d.OD,"40e48edbe25a09f72718d05442f5dd82214415b864":()=>d.j0});var d=c(14565)},47221:(a,b,c)=>{c.r(b),c.d(b,{"0018da34c8465e3b6989c7d2bc7929770fc0d23cf6":()=>E,"001b9ae4c2ecf53ff029edf2f641e5c766015dc45a":()=>e.y_,"002b0e1a6cbadd698c849dff2fb3a3f7c779f3f410":()=>F.PG,"002b81a5ac2b55ecc8d0337fcf394b1b5997bf57bf":()=>h.x7,"002d170169b404dfa07563c61f709ed86ed7649c07":()=>j.f,"003b06d797273823125ca9af0efeb730b9e96ebdf9":()=>d.xU,"00559e73fec16acf73cac021e62ec0e900348d99f4":()=>F.pM,"005a571e9f925fc3e12976cc4f07b437bcea1f0f12":()=>F.eU,"005aed0ec5d7865de82822cea6e37e04ed711483b0":()=>e.GK,"005d90d568d42db379104c20b60d90b9287e50b1ea":()=>e.PE,"0084309fb44ce269483fc8999928b4a0ba04581c5a":()=>j.O,"008abaabb379d9fbbd4d309ffb88d9371bd171a3d1":()=>k.io,"00c4dd9d99c4d6a26d18945e406f7cde2515944c2e":()=>k.eg,"00ca307e338ad5c4eab62b9e08bc77d4373a600b0e":()=>i.V,"00db26a073944d2d371310b169dcba82ab4bdf3b35":()=>k.dj,"00e8c93fad2e12a8a2d973aa8eac769b42bd0f47a0":()=>e.KO,"00ea05b9ea50055e383eedb9db7a20a0a377095e71":()=>h.Mp,"00ea21e753d9d278e1b3555dd56af4f2daed118c74":()=>d.bt,"4005305c407de3aff6a85e5e2184242e8b489d4cb7":()=>z,"400d5f8b83cd2cbcd61cc0e98214c40a80328b81bd":()=>d.gg,"4010184a0f837afb8aba11484906213bcd4fa7cd55":()=>D,"4013575da004bdd1b0a98c979bec6d3ea8c847b87a":()=>k.De,"4014fad5d4a6c0cdadbe2426bd996cce51ad2b8539":()=>i.F,"4030178e8daf36e04142f59d0b5d0c42fa5ddb26a8":()=>i.VJ,"4032ce36226d2272a3df9a36cf1933b6c28baccdd3":()=>F.Kg,"403efa02985947bb2e55947842896a8b3bb0fbdebb":()=>h.lR,"404118134d93aa31bf95ed5fb006a338a57841c620":()=>d.VL,"404abb8b6333ddb838d1d08be265ef5ac941458557":()=>e.ey,"405ad4cd34827706eef52f506339446771d01deade":()=>g.p,"4061b0fc50632faed18dc136cef71539c43b0a646b":()=>d.rd,"4061fb866bf5f1b4e8256e6c73dd5e8fb18169710e":()=>A,"4067bdd8eed7e5307f4e420d295c94f85df5b88fff":()=>i.E_,"406daa9a26c598e859f8399f373c73dbefc1167f05":()=>d.GW,"4071b32bf6585d7bc4fcb2e4b5ca0158cbf0cbfa31":()=>d.Wu,"4072b2947cae9c50aafd25582c4e391bd17034d89e":()=>e.RG,"4073bb79aed26b87729b2d94a99c8dfb850aa26e97":()=>C,"4076cc6b6cff1859f96df3b69ea5748fc1694546a4":()=>e.r7,"407ed950674c9518df668a6c77e9261ad5fd411859":()=>l.q4,"4081819487c7b4a3ca7c0ea79ee3b1adcc076b3dfc":()=>h.sE,"4083c241ed22d1569697ed1b7954f452bccb0dfbe9":()=>e.lJ,"40868c53dcde67d6e8a29cfa083b154cf5be2c774f":()=>l.TX,"408cbc1b9a1e5b6f456bdb17a31c2aa3ead960be5a":()=>e.S,"40b976e0ca8c2141852ea542ea13b8eceaffc367c6":()=>e.jc,"40bb6b44a7c7968528b50ab5312676084e3834259a":()=>l.IL,"40dffad47bc5304514a3e51316ca72022ad3b21ffb":()=>g.L,"40e5a89c27197733d772c2a88cd60b5054b3c26077":()=>m.y,"40e5b955789eec4a1e5972dc536d0f77c54abb0372":()=>d.H7,"40e976bc870ce1c7b3f38b0d9673cb9eb9fe7e3699":()=>F.lP,"40f111930771729d33726ba9d580ec819563b9cb6f":()=>i.zS,"60002bb8da7f2c3a630af3e2165a1a12199f7770f8":()=>e.AA,"6003b268e82f53efcb72087982c8bd31646cbe734f":()=>d.Fu,"600e4c29037ec9fae5202a4a4d0890a44c2d2743c9":()=>f.k,"602d64cbbf4e40e223808485255b7956d79297971c":()=>d.n4,"607069e2bfec182c53a5c62cb6f81a08ef780eb58f":()=>l.Jp,"6075eef0f0b461e465382461b6bc2e3d8c9f970e02":()=>d.ME,"607d87ba6080e0a18f7515163eaa0c8deb323a9e9d":()=>e.q$,"608de397584dca06a97969dedaa0281e5b0ceb8ba3":()=>y,"60a1530818f1466351c9506fe097350848042a9afa":()=>d.jw,"60b7be3ed20547cfe6e958bf0bc7cd7597b4cd7cd9":()=>d.rm,"60c12c2aaa0e75780e7baf5eb890930109eda6b5c4":()=>B,"60cb5532c7e73a92965d6c8c43deae1bc445658948":()=>l.bk,"60df683925211e3fe2c339ccf9e922d11e098ccd23":()=>l.bV,"60dfe5517f88ae8541c0250966511da5c29416ccb5":()=>f.I,"60e3c6341b7c8308309300fac949db6ba63d9ad540":()=>e.LZ,"70883b63909498b35c556806231bb1479efe0b3add":()=>e.M8,"709c95f1955b8a7cfcf2b4aed1aa1d7f02e091c6bf":()=>d._z});var d=c(97140),e=c(15487),f=c(79505),g=c(51605),h=c(46363),i=c(46282),j=c(387),k=c(13604),l=c(7482),m=c(58169),n=c(6866),o=c(77598),p=c(97603),q=c(31371),r=c(65705),s=c(1890),t=c(53993),u=c(70149),v=c(56338),w=c(24701),x=c(83963);async function y(a,b){let{workspace:c}=await (0,t.nP)();await r.db.update(s.routine).set({enabled:b}).where((0,p.Uo)((0,p.eq)(s.routine.id,a),(0,p.eq)(s.routine.workspaceId,c.id))),(0,q.revalidatePath)("/routines")}async function z(a){let{workspace:b}=await (0,t.nP)(),c=a.name.trim();return c?(await r.db.insert(s.routine).values({id:(0,o.randomUUID)(),workspaceId:b.id,name:c.slice(0,120),cmd:(a.cmd??"").trim().slice(0,500),freq:(a.freq??"Daily").trim()||"Daily",agentId:a.agentId||null,enabled:!0}),(0,q.revalidatePath)("/routines"),{ok:!0}):{ok:!1,error:"Name the routine."}}async function A(a){let{workspace:b}=await (0,t.nP)();await r.db.delete(s.routine).where((0,p.Uo)((0,p.eq)(s.routine.id,a),(0,p.eq)(s.routine.workspaceId,b.id))),(0,q.revalidatePath)("/routines")}async function B(a,b){let{workspace:c}=await (0,t.nP)();await r.db.update(s.plugin).set({enabled:b}).where((0,p.Uo)((0,p.eq)(s.plugin.id,a),(0,p.eq)(s.plugin.workspaceId,c.id))),(0,q.revalidatePath)("/plugins")}async function C(a){let{workspace:b}=await (0,t.nP)();await r.db.delete(s.inboxItem).where((0,p.Uo)((0,p.eq)(s.inboxItem.id,a),(0,p.eq)(s.inboxItem.workspaceId,b.id))),(0,q.revalidatePath)("/inbox")}async function D(a){let{workspace:b}=await (0,t.nP)();await r.db.update(s.finding).set({status:"fixed"}).where((0,p.Uo)((0,p.eq)(s.finding.id,a),(0,p.eq)(s.finding.workspaceId,b.id))),await r.db.insert(s.notification).values({id:(0,o.randomUUID)(),workspaceId:b.id,kind:"security",text:"Finding patched by the Code Review Agent",detail:"A security finding was fixed and a report was filed."}),(0,q.revalidatePath)("/security")}async function E(){let{org:a,workspace:b}=await (0,t.nP)(),c=await r.db.select().from(s.agent).where((0,p.eq)(s.agent.workspaceId,b.id)),d=c.find(a=>"whitfield"===a.handle)??c.find(a=>/cyber|sec/i.test(a.role))??c[0],e=(0,o.randomUUID)();if(!d)return{ok:!1,count:0,runId:e,error:"no agent"};await r.db.update(s.agent).set({status:"working"}).where((0,p.eq)(s.agent.id,d.id)),await (0,f.I)(b.id,{runId:e,channel:"security",agentId:d.id,kind:"thinking",target:`${d.name} is reviewing the workspace…`});let g=await r.db.select({name:s.skill.name,instructions:s.skill.instructions,summary:s.skill.summary}).from(s.agentSkill).innerJoin(s.skill,(0,p.eq)(s.agentSkill.skillId,s.skill.id)).where((0,p.Uo)((0,p.eq)(s.agentSkill.agentId,d.id),(0,p.RV)(s.skill.name,["owasp-top-10","owasp-asvs","appsec-fundamentals","secrets-management","secure-auth-sessions","dependency-supply-chain","review-code-perf-security","code-review-practices"]))),h=g.length?`
|
|
2
|
+
Apply these review skills (consult before judging):
|
|
3
|
+
${g.map(a=>`- ${a.name}: ${(a.instructions||a.summary).replace(/\s+/g," ").slice(0,300)}`).join("\n")}`:"",i=await (0,v.yY)(a.id,"security review: vulnerabilities, auth, secrets, prior findings and decisions",{agentHandle:d.handle,k:6}),j=i.context?`
|
|
4
|
+
Project knowledge (prior findings, decisions, patterns — do not contradict):
|
|
5
|
+
${i.context}`:"",k=[`You are ${d.name}, the security reviewer. Review the code in the current workspace directory for vulnerabilities, secret/token exposure, permission & workspace-isolation issues, and risky patterns.`,h,j,"Output ONLY a JSON array (no prose, no markdown fences) of findings:",'[{"sev":"high"|"med"|"low","title":"short title","file":"relative/path","suggestion":"how to fix"}]',"If the workspace is clean or empty, output []. Do not modify any files."].filter(Boolean).join("\n"),l=(0,u.hW)(d.adapter,d.model),m=(0,u.qX)(d.adapter),n=await (0,u.p1)(k,{orgId:a.id,binary:l,model:m,timeoutMs:24e4},a=>{(0,f.I)(b.id,{runId:e,channel:"security",agentId:d.id,kind:a.kind,target:a.target,detail:a.detail})}),y=[],z=n.text.match(/\[[\s\S]*\]/);if(z)try{y=JSON.parse(z[0])}catch{y=[]}for(let a of y.slice(0,40)){let c="high"===a.sev||"low"===a.sev?a.sev:"med";await r.db.insert(s.finding).values({id:(0,o.randomUUID)(),workspaceId:b.id,sev:c,title:String(a.title??"Finding").slice(0,200),file:String(a.file??""),suggestion:String(a.suggestion??""),status:"open"})}y.length&&(0,v.ru)(a.id,y.slice(0,40).map(a=>({type:"vuln",title:String(a.title??"Finding").slice(0,120),summary:`${a.sev??"med"}: ${String(a.suggestion??"")}`.slice(0,1e3),paths:a.file?[String(a.file)]:void 0,agentHandle:d.handle,sourceKind:"review",sourceRef:`${String(a.file??"")}::${String(a.title??"")}`.slice(0,200)}))).catch(()=>{}),(n.usd>0||n.inputTokens+n.outputTokens>0)&&await r.db.insert(s.costEntry).values({id:(0,o.randomUUID)(),workspaceId:b.id,agentId:d.id,provider:n.binary,model:n.model??d.model,usd:n.usd,tokens:n.inputTokens+n.outputTokens,at:new Date}),await r.db.update(s.workspace).set({settings:{...b.settings??{},lastSecurityRun:Date.now()}}).where((0,p.eq)(s.workspace.id,b.id)),await r.db.update(s.agent).set({status:"idle"}).where((0,p.eq)(s.agent.id,d.id));let A=new Date().toISOString().replace("T"," ").slice(0,19),B=`# Security review
|
|
6
|
+
|
|
7
|
+
_By @${d.handle} (${d.role}) \xb7 ${A}_
|
|
8
|
+
|
|
9
|
+
`+(y.length?`Filed ${y.length} finding(s):
|
|
10
|
+
|
|
11
|
+
`+y.slice(0,40).map(a=>`- **${a.sev??"med"}** ${a.title??"Finding"} — \`${a.file??"?"}\`
|
|
12
|
+
- ${a.suggestion??""}`).join("\n")+"\n":"No findings — the workspace looks clean.\n");try{await (0,x.g)(a.id,"Reports/security-review.md",B)}catch(a){console.error("[review] security report write failed:",a)}return await (0,f.I)(b.id,{runId:e,channel:"security",agentId:d.id,kind:n.ok?"done":"error",target:n.ok?`${y.length} finding(s) filed`:(n.error??"review failed").slice(0,200)}),await (0,w.I)(b.id,{kind:"security",text:"Security sweep finished",detail:`${d.name} filed ${y.length} finding(s).`,agentId:d.id}),(0,q.revalidatePath)("/security"),(0,q.revalidatePath)("/","layout"),{ok:n.ok,count:y.length,runId:e,error:n.error}}(0,c(74252).D)([y,z,A,B,C,D,E]),(0,n.A)(y,"608de397584dca06a97969dedaa0281e5b0ceb8ba3",null),(0,n.A)(z,"4005305c407de3aff6a85e5e2184242e8b489d4cb7",null),(0,n.A)(A,"4061fb866bf5f1b4e8256e6c73dd5e8fb18169710e",null),(0,n.A)(B,"60c12c2aaa0e75780e7baf5eb890930109eda6b5c4",null),(0,n.A)(C,"4073bb79aed26b87729b2d94a99c8dfb850aa26e97",null),(0,n.A)(D,"4010184a0f837afb8aba11484906213bcd4fa7cd55",null),(0,n.A)(E,"0018da34c8465e3b6989c7d2bc7929770fc0d23cf6",null);var F=c(52932)},71977:(a,b,c)=>{c.d(b,{FixButton:()=>n,RunReviewButton:()=>o,Toggle:()=>m});var d=c(4374),e=c(74679),f=c(2910);let g=(0,f.createServerReference)("608de397584dca06a97969dedaa0281e5b0ceb8ba3",f.callServer,void 0,f.findSourceMapURL,"toggleRoutine"),h=(0,f.createServerReference)("60c12c2aaa0e75780e7baf5eb890930109eda6b5c4",f.callServer,void 0,f.findSourceMapURL,"togglePlugin"),i=(0,f.createServerReference)("4010184a0f837afb8aba11484906213bcd4fa7cd55",f.callServer,void 0,f.findSourceMapURL,"fixFinding"),j=(0,f.createServerReference)("0018da34c8465e3b6989c7d2bc7929770fc0d23cf6",f.callServer,void 0,f.findSourceMapURL,"runReview");var k=c(43526),l=c(31819);function m({kind:a,id:b,on:c}){let[f,i]=(0,e.useTransition)(),j="routine"===a?g:h;return(0,d.jsx)("div",{className:"toggle"+(c?" on":""),"aria-disabled":f,role:"switch","aria-checked":c,onClick:()=>!f&&i(()=>j(b,!c))})}function n({id:a}){let b=(0,l.k)(),[c,f]=(0,e.useTransition)();return(0,d.jsxs)("button",{className:"sc2-btn",disabled:c,onClick:()=>f(()=>i(a)),children:[(0,d.jsx)(k.I,{name:"bot",size:12})," ",b("security.letAgentFix")]})}function o(){let a=(0,l.k)(),[b,c]=(0,e.useTransition)();return(0,d.jsxs)("button",{className:"btn-accent",disabled:b,onClick:()=>{window.dispatchEvent(new CustomEvent("constella:agent-run",{detail:{channel:"security"}})),c(async()=>{await j()})},children:[(0,d.jsx)(k.I,{name:"refresh",size:14,className:b?"sync-spin":""})," ",a(b?"security.reviewing":"security.runReview")]})}},86450:(a,b,c)=>{c.d(b,{FixButton:()=>f,RunReviewButton:()=>g,Toggle:()=>e});var d=c(62060);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call Toggle() from the server but Toggle is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","Toggle");(0,d.registerClientReference)(function(){throw Error("Attempted to call ResolveButton() from the server but ResolveButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","ResolveButton");let f=(0,d.registerClientReference)(function(){throw Error("Attempted to call FixButton() from the server but FixButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","FixButton"),g=(0,d.registerClientReference)(function(){throw Error("Attempted to call RunReviewButton() from the server but RunReviewButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\modules\\module-toggles.tsx","RunReviewButton")}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=7989,exports.ids=[7989],exports.modules={18185:(a,b,c)=>{c.d(b,{$:()=>d});let d=new Map},27989:(a,b,c)=>{c.d(b,{V$:()=>ah,Uw:()=>F,wp:()=>O,Jw:()=>X,Cp:()=>P,S8:()=>ab,kb:()=>ae,Hi:()=>ac,Vr:()=>ad,nl:()=>Y,LU:()=>Z,cm:()=>J,VH:()=>K,zO:()=>G,Gh:()=>I,I2:()=>H,ju:()=>M,Ac:()=>ag,m:()=>Q,az:()=>N,ts:()=>af,L0:()=>ai,lC:()=>aj});var d=c(52813),e=c(48161),f=c.n(e),g=c(77598),h=c(73024),i=c(31421),j=c(54679),k=c.n(j),l=c(76760),m=c(57075),n=c(46466),o=c(1782),p=c(83550),q=c(80280),r=c(25533),s=c(95896),t=c(18612),u=c(64619);function v(a,b,c=.02){let d=0;try{d=(0,h.statSync)(a).size}catch{return{ok:!1,actual:0,expected:b,message:"file missing after download"}}if(!b||b<=0)return{ok:!0,actual:d,expected:b,message:"size ok (no expected size)"};let e=d/b,f=e>=1-c&&e<=1+c;return{ok:f,actual:d,expected:b,message:f?"size verified":`size mismatch — got ${d} bytes, expected ~${b} (truncated/corrupt)`}}var w=c(18185);let x=[{repo:"Qwen2.5-0.5B-Instruct",paramsB:.5,kind:"chat"},{repo:"Qwen2.5-1.5B-Instruct",paramsB:1.5,kind:"chat"},{repo:"Qwen2.5-3B-Instruct",paramsB:3,kind:"chat"},{repo:"Qwen2.5-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Qwen2.5-14B-Instruct",paramsB:14,kind:"chat"},{repo:"Qwen2.5-32B-Instruct",paramsB:32,kind:"chat"},{repo:"Qwen2.5-72B-Instruct",paramsB:72,kind:"chat"},{repo:"Qwen2.5-Coder-1.5B-Instruct",paramsB:1.5,kind:"code"},{repo:"Qwen2.5-Coder-3B-Instruct",paramsB:3,kind:"code"},{repo:"Qwen2.5-Coder-7B-Instruct",paramsB:7,kind:"code"},{repo:"Qwen2.5-Coder-14B-Instruct",paramsB:14,kind:"code"},{repo:"Qwen2.5-Coder-32B-Instruct",paramsB:32,kind:"code"},{repo:"Qwen3-0.6B",paramsB:.6,kind:"chat"},{repo:"Qwen3-1.7B",paramsB:1.7,kind:"chat"},{repo:"Qwen3-4B",paramsB:4,kind:"chat"},{repo:"Qwen3-8B",paramsB:8,kind:"chat"},{repo:"Qwen3-14B",paramsB:14,kind:"chat"},{repo:"Qwen3-32B",paramsB:32,kind:"chat"},{repo:"Llama-3.2-1B-Instruct",paramsB:1,kind:"chat"},{repo:"Llama-3.2-3B-Instruct",paramsB:3,kind:"chat"},{repo:"Meta-Llama-3.1-8B-Instruct",paramsB:8,kind:"chat"},{repo:"Meta-Llama-3.1-70B-Instruct",paramsB:70,kind:"chat"},{repo:"Llama-3.3-70B-Instruct",paramsB:70,kind:"chat"},{repo:"gemma-2-2b-it",paramsB:2,kind:"chat"},{repo:"gemma-2-9b-it",paramsB:9,kind:"chat"},{repo:"gemma-2-27b-it",paramsB:27,kind:"chat"},{repo:"gemma-3-1b-it",paramsB:1,kind:"chat"},{repo:"gemma-3-4b-it",paramsB:4,kind:"chat"},{repo:"gemma-3-12b-it",paramsB:12,kind:"chat"},{repo:"gemma-3-27b-it",paramsB:27,kind:"chat"},{repo:"Mistral-7B-Instruct-v0.3",paramsB:7,kind:"chat"},{repo:"Mistral-Nemo-Instruct-2407",paramsB:12,kind:"chat"},{repo:"Mistral-Small-Instruct-2409",paramsB:22,kind:"chat"},{repo:"Mistral-Small-24B-Instruct-2501",paramsB:24,kind:"chat"},{repo:"Codestral-22B-v0.1",paramsB:22,kind:"code"},{repo:"Phi-3.1-mini-4k-instruct",paramsB:3.8,kind:"chat"},{repo:"DeepSeek-R1-Distill-Qwen-1.5B",paramsB:1.5,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-7B",paramsB:7,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-14B",paramsB:14,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-32B",paramsB:32,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Llama-8B",paramsB:8,kind:"reasoning"},{repo:"DeepSeek-Coder-V2-Lite-Instruct",paramsB:16,kind:"code"},{repo:"Yi-1.5-9B-Chat",paramsB:9,kind:"chat"},{repo:"Yi-1.5-34B-Chat",paramsB:34,kind:"chat"},{repo:"granite-3.0-8b-instruct",paramsB:8,kind:"chat"},{repo:"granite-3.1-8b-instruct",paramsB:8,kind:"chat"},{repo:"SmolLM2-360M-Instruct",paramsB:.36,kind:"chat"},{repo:"SmolLM2-1.7B-Instruct",paramsB:1.7,kind:"chat"},{repo:"aya-expanse-8b",paramsB:8,kind:"chat"},{repo:"aya-expanse-32b",paramsB:32,kind:"chat"},{repo:"Falcon3-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Falcon3-10B-Instruct",paramsB:10,kind:"chat"},{repo:"EXAONE-3.5-2.4B-Instruct",paramsB:2.4,kind:"chat"},{repo:"EXAONE-3.5-7.8B-Instruct",paramsB:7.8,kind:"chat"},{repo:"Qwen3.5-0.8B",paramsB:.8,kind:"chat"},{repo:"Qwen3.5-2B",paramsB:2,kind:"chat"},{repo:"Qwen3.5-9B",paramsB:9,kind:"chat"},{repo:"Qwen3.5-27B",paramsB:27,kind:"chat"},{repo:"Qwen3.5-35B-A3B",paramsB:35,kind:"chat"},{repo:"Qwen3.6-27B",paramsB:27,kind:"chat"},{repo:"Qwen3.6-35B-A3B",paramsB:35,kind:"chat"},{repo:"Qwen3-30B-A3B",paramsB:30,kind:"chat"},{repo:"Qwen3-30B-A3B-Instruct-2507",paramsB:30,kind:"chat"},{repo:"Qwen3-Next-80B-A3B-Instruct",paramsB:80,kind:"chat"},{repo:"Qwen3-4B-Thinking-2507",paramsB:4,kind:"reasoning"},{repo:"QwQ-32B",paramsB:32,kind:"reasoning"},{repo:"Qwen2.5-7B-Instruct-1M",paramsB:7,kind:"chat"},{repo:"Qwen2.5-Coder-0.5B-Instruct",paramsB:.5,kind:"code"},{repo:"Qwen2.5-Coder-3B",paramsB:3,kind:"code"},{repo:"Qwen2.5-Coder-32B",paramsB:32,kind:"code"},{repo:"Qwen2.5-Math-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Qwen2-500M-Instruct",paramsB:.5,kind:"chat"},{repo:"Qwen1.5-32B-Chat",paramsB:32,kind:"chat"},{repo:"gemma-4-E2B-it",paramsB:2,kind:"chat"},{repo:"gemma-4-E4B-it",paramsB:4,kind:"chat"},{repo:"gemma-4-12B-it",paramsB:12,kind:"chat"},{repo:"gemma-4-26B-A4B-it",paramsB:26,kind:"chat"},{repo:"gemma-4-31B-it",paramsB:31,kind:"chat"},{repo:"gemma-3-270m-it",paramsB:.27,kind:"chat"},{repo:"gemma-1.1-2b-it",paramsB:2,kind:"chat"},{repo:"codegemma-2b",paramsB:2,kind:"code"},{repo:"codegemma-7b",paramsB:7,kind:"code"},{repo:"codegemma-7b-it",paramsB:7,kind:"code"},{repo:"codegemma-1.1-7b-it",paramsB:7,kind:"code"},{repo:"Ministral-3-3B-Instruct-2512",paramsB:3,kind:"chat"},{repo:"Ministral-3-8B-Instruct-2512",paramsB:8,kind:"chat"},{repo:"Ministral-3-14B-Instruct-2512",paramsB:14,kind:"chat"},{repo:"Ministral-3-3B-Reasoning-2512",paramsB:3,kind:"reasoning"},{repo:"Ministral-3-8B-Reasoning-2512",paramsB:8,kind:"reasoning"},{repo:"Ministral-3-14B-Reasoning-2512",paramsB:14,kind:"reasoning"},{repo:"Mistral-Small-3.1-24B-Instruct-2503",paramsB:24,kind:"chat"},{repo:"Mistral-Small-3.2-24B-Instruct-2506",paramsB:24,kind:"chat"},{repo:"Devstral-Small-2-24B-Instruct-2512",paramsB:24,kind:"code"},{repo:"mathstral-7B-v0.1",paramsB:7,kind:"chat"},{repo:"dolphin-2.8-mistral-7b-v02",paramsB:7,kind:"chat"},{repo:"WizardLM-2-7B",paramsB:7,kind:"chat"},{repo:"DeepSeek-R1-0528-Qwen3-8B",paramsB:8,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Llama-70B",paramsB:70,kind:"reasoning"},{repo:"deepseek-coder-1.3B-kexer",paramsB:1.3,kind:"code"},{repo:"deepseek-coder-6.7B-kexer",paramsB:6.7,kind:"code"},{repo:"granite-3.2-8b-instruct",paramsB:8,kind:"chat"},{repo:"granite-4.1-3b",paramsB:3,kind:"chat"},{repo:"granite-4.1-8b",paramsB:8,kind:"chat"},{repo:"granite-4.1-30b",paramsB:30,kind:"chat"},{repo:"Olmo-3-32B-Think",paramsB:32,kind:"reasoning"},{repo:"Seed-OSS-36B-Instruct",paramsB:36,kind:"chat"},{repo:"ERNIE-4.5-21B-A3B-PT",paramsB:21,kind:"chat"},{repo:"LFM2-24B-A2B",paramsB:24,kind:"chat"},{repo:"LFM2.5-1.2B-Instruct",paramsB:1.2,kind:"chat"},{repo:"LFM2.5-1.2B-Thinking",paramsB:1.2,kind:"reasoning"},{repo:"NVIDIA-Nemotron-3-Nano-4B",paramsB:4,kind:"chat"},{repo:"Hermes-4-70B",paramsB:70,kind:"chat"},{repo:"Llama-3.1-Tulu-3-8B",paramsB:8,kind:"chat"},{repo:"Meta-Llama-3-70B-Instruct",paramsB:70,kind:"chat"},{repo:"Llama3-ChatQA-1.5-70B",paramsB:70,kind:"chat"},{repo:"Llama-3-Groq-8B-Tool-Use",paramsB:8,kind:"chat"},{repo:"aya-23-8B",paramsB:8,kind:"chat"},{repo:"aya-23-35B",paramsB:35,kind:"chat"},{repo:"SmolLM2-135M-Instruct",paramsB:.135,kind:"chat"},{repo:"Yi-Coder-1.5B",paramsB:1.5,kind:"code"},{repo:"Yi-Coder-9B-Chat",paramsB:9,kind:"code"},{repo:"OpenCoder-1.5B-Instruct",paramsB:1.5,kind:"code"},{repo:"stable-code-instruct-3b",paramsB:3,kind:"code"},{repo:"internlm2-math-plus-7b",paramsB:7,kind:"chat"},{repo:"internlm2-math-plus-20b",paramsB:20,kind:"chat"}],y={Q3_K_L:.55,Q4_K_M:.67,Q6_K:.9,Q8_0:1.13},z=[{id:"nomic-embed-q8",name:"nomic-embed-text-v1.5 (Q8_0)",url:"https://huggingface.co/nomic-ai/nomic-embed-text-v1.5-GGUF/resolve/main/nomic-embed-text-v1.5.Q8_0.gguf",params:"137M",quant:"Q8_0",sizeBytes:146e6,kind:"embed",paramsB:.137},...function(){let a=[];for(let d of x){var b,c;let e=d.vendor??"lmstudio-community";for(let f of(b=d.paramsB)<=9?["Q3_K_L","Q4_K_M","Q6_K","Q8_0"]:b<=34?["Q3_K_L","Q4_K_M","Q6_K"]:["Q3_K_L","Q4_K_M"]){let b=`${d.repo}-${f}.gguf`;a.push({id:`${d.repo}-${f}`.toLowerCase().replace(/[^a-z0-9]+/g,"-"),name:`${d.repo} (${f})`,url:`https://huggingface.co/${e}/${d.repo}-GGUF/resolve/main/${b}`,params:(c=d.paramsB)<1?`${Math.round(1e3*c)}M`:`${c}B`,quant:f,sizeBytes:Math.round(1e9*d.paramsB*y[f]),kind:d.kind,paramsB:d.paramsB})}}return a}()];var A=c(29635);let B=process.env.OLLAMA_URL??"http://127.0.0.1:11434",C=process.env.LLAMACPP_URL??"http://127.0.0.1:8082",D=process.env.CONSTELLA_EMBED_URL??"http://127.0.0.1:8083",E=null;async function F(){if(E){let a=f().totalmem()/0x40000000,b=f().freemem()/0x40000000;return{...E,ram:`${a.toFixed(0)} GB \xb7 ${b.toFixed(1)} free`}}let a=f().cpus(),b=(a[0]?.model??"Unknown CPU").replace(/\s+/g," ").trim(),c=a.length,d=f().totalmem()/0x40000000,e=f().freemem()/0x40000000,g=`${d.toFixed(0)} GB \xb7 ${e.toFixed(1)} free`,h=f().platform(),j="—",k="—",l="CPU",m=[];try{let a=(0,i.execSync)("nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits",{timeout:4e3,stdio:["ignore","pipe","ignore"]}).toString().trim();if(a){let[b,c]=a.split("\n")[0].split(",");j=b.trim(),k=`${Math.round(Number(c)/1024)} GB`,l="CUDA",m.push("CUDA")}}catch{}if("CPU"===l&&"darwin"===h){l="Metal",m.push("Metal");let a="Apple Silicon";try{let b=(0,i.execFileSync)("sysctl",["-n","machdep.cpu.brand_string"],{timeout:3e3,stdio:["ignore","pipe","ignore"]}).toString().trim();b&&(a=b)}catch{/apple/i.test(b)&&(a=b)}j=/apple/i.test(a)?`${a} GPU`:"Apple GPU","arm64"===f().arch()&&(k=`${Math.max(1,Math.round(.7*d))} GB unified`)}m.push("arm64"===f().arch()?"NEON":"AVX2");let n="—";try{if("win32"===h){let a=((0,t.r$)()[0]||"C").toUpperCase(),b=/^[A-Z]$/.test(a)?a:"C",c=(0,i.execFileSync)("powershell",["-NoProfile","-Command",`(Get-PSDrive ${b}).Free`],{timeout:5e3,stdio:["ignore","pipe","ignore"]}).toString().trim(),d=Number(c.replace(/[^\d]/g,""));d>0&&(n=`${(d/0x40000000).toFixed(0)} GB`)}else{let a=(0,i.execFileSync)("df",["-h",(0,t.r$)()],{timeout:4e3,stdio:["ignore","pipe","ignore"]}).toString().trim().split("\n"),b=(a[a.length-1]??"").split(/\s+/);b[3]&&(n=b[3])}}catch{}return E={cpu:b,cores:c,ram:g,gpu:j,vram:k,diskFree:n,backend:l,accel:m,recommendedQuant:d>=32?"Q5_K_M":d>=16?"Q4_K_M":"Q4_0",maxParams:d>=64?"70B":d>=32?"34B":d>=16?"13B":"7B"}}async function G(){try{return(0,i.execSync)("ollama --version",{timeout:3e3,stdio:"ignore"}),!0}catch{return!1}}async function H(a){let b=await G(),c=[];if("start"===a){if(!b)return{up:!1,installed:!1,log:["Ollama is not installed — get it at https://ollama.com, then retry."]};if((await K()).up)return{up:!0,installed:b,log:[`server already running on ${B}`]};try{let a=(0,i.spawn)("ollama",["serve"],{detached:!0,stdio:"ignore"}),d="";a.on("error",a=>{d=String(a instanceof Error?a.message:a)}),a.unref(),c.push("$ ollama serve"),await new Promise(a=>setTimeout(a,2e3));let e=(await K()).up;return d&&c.push("spawn failed: "+d),c.push(e?`✓ ready \xb7 ${B}`:"still stopped — the port may be busy; run `ollama serve` in a terminal to see the error."),(0,p.revalidatePath)("/models"),{up:e,installed:b,log:c}}catch(a){return{up:!1,installed:b,log:["failed to start: "+String(a instanceof Error?a.message:a)]}}}try{"win32"===f().platform()?(0,i.execSync)("taskkill /IM ollama.exe /F",{stdio:"ignore",timeout:4e3}):(0,i.execSync)("pkill -f 'ollama serve'",{stdio:"ignore",timeout:4e3}),c.push("server stopped")}catch{c.push("no running ollama process found")}return(0,p.revalidatePath)("/models"),{up:!1,installed:b,log:c}}async function I(){try{let a=await fetch(`${B}/api/ps`,{signal:AbortSignal.timeout(3e3)});if(!a.ok)return{running:[]};return{running:((await a.json()).models??[]).map(a=>({name:a.name,vram:a.size_vram??0}))}}catch{return{running:[]}}}async function J(a){try{let b=await fetch(`${B}/api/generate`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({model:a,prompt:"",keep_alive:"30m"}),signal:AbortSignal.timeout(12e4)});if(!b.ok)return{ok:!1,error:`Ollama ${b.status}`};return await b.json().catch(()=>({})),(0,p.revalidatePath)("/models"),{ok:!0}}catch(b){let a=String(b instanceof Error?b.message:b);return{ok:!1,error:/abort|fetch failed|ECONN/i.test(a)?"Ollama not running":a}}}async function K(){try{let a=await fetch(`${B}/api/tags`,{signal:AbortSignal.timeout(3e3)});if(!a.ok)return{up:!1,models:[]};let b=await a.json();return{up:!0,models:(b.models??[]).map(a=>({name:a.name,size:a.size??0}))}}catch{return{up:!1,models:[]}}}async function L(a){let b=await K(),[c]=await q.db.select().from(r.provider).where((0,o.Uo)((0,o.eq)(r.provider.workspaceId,a),(0,o.eq)(r.provider.catalogId,"ollama"))),d={status:b.up?"connected":"needs_sync",modelCount:b.models.length,lastSync:b.up?new Date:null};c?await q.db.update(r.provider).set(d).where((0,o.eq)(r.provider.id,c.id)):await q.db.insert(r.provider).values({id:(0,g.randomUUID)(),workspaceId:a,catalogId:"ollama",adapter:"local_ollama",kind:"local",auth:"local",syncStatus:"implemented",...d})}async function M(a){let{workspace:b}=await (0,s.nP)();if(!a.trim())return{ok:!1,error:"no model name"};try{let c=await fetch(`${B}/api/pull`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:a.trim(),stream:!1}),signal:AbortSignal.timeout(18e5)});if(!c.ok){let a=await c.text().catch(()=>"");return{ok:!1,error:`Ollama ${c.status}${a?": "+a.slice(0,120):""}`}}let d=await c.json().catch(()=>({}));return await L(b.id),(0,p.revalidatePath)("/models"),{ok:"success"===d.status||null==d.error,error:d.error}}catch(b){let a=String(b instanceof Error?b.message:b);return{ok:!1,error:/abort|fetch failed|ECONN/i.test(a)?"Ollama not running — start it, then retry.":a}}}async function N(a){let{workspace:b}=await (0,s.nP)();try{await fetch(`${B}/api/delete`,{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({name:a})})}catch{}return await L(b.id),(0,p.revalidatePath)("/models"),{ok:!0}}async function O(a){let{workspace:b}=await (0,s.nP)(),c=z.find(b=>b.id===a);if(!c)return{ok:!1,error:"unknown model"};let d=(0,l.join)((0,t.r$)(),"models");(0,h.mkdirSync)(d,{recursive:!0});let e=function(a){try{if("win32"===f().platform()){let b=(a[0]||"C").toUpperCase(),c=/^[A-Z]$/.test(b)?b:"C",d=(0,i.execFileSync)("powershell",["-NoProfile","-Command",`(Get-PSDrive ${c}).Free`],{timeout:6e3,stdio:["ignore","pipe","ignore"]}).toString().trim();return Number(d.replace(/[^\d]/g,""))||0}let b=(0,i.execFileSync)("df",["-k",a],{timeout:5e3,stdio:["ignore","pipe","ignore"]}).toString().trim().split("\n"),c=(b[b.length-1]??"").split(/\s+/),d=Number(c[3]);return d?1024*d:0}catch{return 0}}(d);if(e&&c.sizeBytes&&e<1.1*c.sizeBytes)return{ok:!1,error:`not enough free space — need ~${(c.sizeBytes/1e9).toFixed(1)} GB, ${(e/1e9).toFixed(1)} GB free`};let j=c.url.split("/").pop()??`${c.id}.gguf`,k=(0,l.join)(d,j);w.$.set(a,{received:0,total:0,done:!1});try{if(!(0,h.existsSync)(k)){let b=await fetch(c.url,{signal:AbortSignal.timeout(36e5)});if(!b.ok||!b.body)return w.$.set(a,{received:0,total:0,done:!0,error:`download failed (${b.status})`}),{ok:!1,error:`download failed (${b.status})`};let d=Number(b.headers.get("content-length"))||c.sizeBytes||0,e=0;w.$.set(a,{received:0,total:d,done:!1});let f=new m.PassThrough;f.on("data",b=>{e+=b.length;let c=w.$.get(a);c&&(c.received=e)}),await (0,n.pipeline)(m.Readable.fromWeb(b.body),f,(0,h.createWriteStream)(k));let g=v(k,d);if(!g.ok){try{(0,h.rmSync)(k)}catch{}return w.$.set(a,{received:e,total:d,done:!0,error:g.message}),{ok:!1,error:g.message}}}if((w.$.set(a,{received:1,total:1,done:!0}),c.sha256)&&await new Promise((a,b)=>{let c=(0,g.createHash)("sha256");(0,h.createReadStream)(k).on("data",a=>c.update(a)).on("end",()=>a(c.digest("hex"))).on("error",b)})!==c.sha256)return{ok:!1,error:"SHA-256 mismatch — file corrupt"};let d=(0,h.statSync)(k).size,[e]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.file,k));return e||await q.db.insert(r.localModel).values({id:(0,g.randomUUID)(),workspaceId:b.id,name:c.name,file:k,quant:c.quant,params:c.params,sizeBytes:d,sha256:c.sha256??"",bind:"127.0.0.1:8082"}),/embed|nomic|bge|mxbai|gte/i.test(c.name)&&ac().catch(()=>{}),(0,p.revalidatePath)("/models"),{ok:!0,path:k}}catch(d){let b=String(d instanceof Error?d.message:d),c=w.$.get(a);return w.$.set(a,{received:c?.received??0,total:c?.total??0,done:!0,error:b}),{ok:!1,error:b}}}async function P(a){return w.$.get(a)??null}async function Q(a){await (0,s.nP)();let[b]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.id,a));if(!b)return{ok:!1,error:"model not found"};try{b.file&&(0,h.existsSync)(b.file)&&(0,h.rmSync)(b.file,{force:!0})}catch{}return await q.db.delete(r.localModel).where((0,o.eq)(r.localModel.file,b.file)),(0,p.revalidatePath)("/models"),{ok:!0}}function R(){return(0,l.join)((0,t.r$)(),"bin","llama")}function S(){try{let a=(0,l.join)(R(),"INSTALLED");if(!(0,h.existsSync)(a))return null;let b=(0,h.readFileSync)(a,"utf8").trim();return b&&(0,h.existsSync)(b)?b:null}catch{return null}}async function T(a,b,c,d){let e=/\.(tar\.gz|tgz)$/i.test(b),f=(0,l.join)(c,b.replace(/[^\w.\-]+/g,"_"));(0,h.mkdirSync)(c,{recursive:!0});let g=await fetch(a,{signal:AbortSignal.timeout(18e5)});if(!g.ok||!g.body)return d&&w.$.set(d,{received:0,total:0,done:!0,error:`download failed (${g.status})`}),`download failed (${g.status})`;let j=Number(g.headers.get("content-length"))||0,o=m.Readable.fromWeb(g.body);if(d){let a=0;w.$.set(d,{received:0,total:j,done:!1});let b=new m.PassThrough;b.on("data",b=>{a+=b.length;let c=w.$.get(d);c&&(c.received=a)}),await (0,n.pipeline)(o,b,(0,h.createWriteStream)(f))}else await (0,n.pipeline)(o,(0,h.createWriteStream)(f));let p=v(f,j);if(!p.ok){try{(0,h.rmSync)(f)}catch{}return p.message}e?(0,i.execFileSync)("tar",["-xzf",f,"-C",c],{stdio:"ignore",timeout:12e4}):new(k())(f).extractAllTo(c,!0);try{(0,h.rmSync)(f)}catch{}return null}async function U(){try{let a=await fetch("https://api.github.com/repos/ggml-org/llama.cpp/releases/latest",{headers:{"User-Agent":"constella",Accept:"application/vnd.github+json"},signal:AbortSignal.timeout(15e3)});if(!a.ok)return null;return(await a.json()).assets??[]}catch{return null}}let V=!1;async function W(a=!1){let b;if("win32"!==f().platform())return{ok:!0,fetched:!1};let c=R();try{b=(0,h.readdirSync)(c)}catch{return{ok:!1,fetched:!1,reason:"no llama dir"}}let d=b.some(a=>/^ggml-cuda\.dll$/i.test(a)),e=b.some(a=>/^cudart64_\d+\.dll$/i.test(a));if(!d||e)return{ok:e||!d,fetched:!1};if(V&&!a)return{ok:!1,fetched:!1,reason:"already attempted this run"};V=!0;let g="12";try{let a=(0,h.readFileSync)((0,l.join)(c,"ggml-cuda.dll")).toString("latin1").match(/cudart64_(\d+)\.dll/i);a&&(g=a[1])}catch{}let i=await U();if(!i)return{ok:!1,fetched:!1,reason:"GitHub unreachable"};let j=i.filter(a=>/cudart/i.test(a.name)&&/x64|amd64/i.test(a.name)),k=j.find(a=>RegExp(`cuda-${g}\\.`,"i").test(a.name))??j[0];if(!k)return{ok:!1,fetched:!1,reason:"no cudart asset in the latest release"};let m=await T(k.browser_download_url,k.name,c).catch(a=>String(a instanceof Error?a.message:a));if(m)return{ok:!1,fetched:!1,reason:m};let n=!1;try{n=(0,h.readdirSync)(c).some(a=>/^cudart64_\d+\.dll$/i.test(a))}catch{}return{ok:n,fetched:n}}async function X(){let a;await (0,s.nP)();let b=[];if(S()||await Y()){let a=await W(!0).catch(()=>null);return{ok:!0,installed:!0,log:["llama-server already installed.",...a?.fetched?["✓ fetched the CUDA runtime DLLs — GPU enabled."]:a&&!a.ok?[`⚠ CUDA runtime still missing (${a.reason??"unknown"}).`]:[]]}}let c=await F(),d=/cuda|nvidia/i.test(c.backend)||(c.accel??[]).some(a=>/cuda|nvidia/i.test(a));b.push(`platform ${f().platform()}/${f().arch()} \xb7 backend ${c.backend} → ${d?"CUDA":"CPU"} build`);try{let c=await fetch("https://api.github.com/repos/ggml-org/llama.cpp/releases/latest",{headers:{"User-Agent":"constella",Accept:"application/vnd.github+json"},signal:AbortSignal.timeout(15e3)});if(!c.ok)return{ok:!1,installed:!1,log:b,error:403===c.status?"GitHub API rate-limited — try again later or install manually from the releases page.":`GitHub releases API ${c.status}`};a=(await c.json()).assets??[]}catch(a){return{ok:!1,installed:!1,log:b,error:"couldn't reach GitHub: "+String(a instanceof Error?a.message:a)}}let e=function(a,b){let c=f().platform(),d="win32"===c?/win/i:"darwin"===c?/macos/i:/(ubuntu|linux)/i,e="arm64"===f().arch(),g=a.filter(a=>/\.(zip|tar\.gz|tgz)$/i.test(a.name)&&d.test(a.name));e||(g=g.filter(a=>!/arm64|aarch64/i.test(a.name)));let h=/cuda|hip|vulkan|sycl|kompute|musa|cann|adreno/i,i=a=>{if(!a.length)return null;let b=e?a.filter(a=>/arm64|aarch64/i.test(a.name)):a.filter(a=>/x64|amd64/i.test(a.name)),c=(b.length?b:a).sort((a,b)=>a.name.length-b.name.length)[0];return c?{name:c.name,url:c.browser_download_url}:null};if(b){let a=g.filter(a=>/cuda/i.test(a.name));if(a.length)return i(a)}let j=g.filter(a=>!h.test(a.name));return i(j.length?j:g)}(a,!!d);if(!e)return{ok:!1,installed:!1,log:b,error:"no matching prebuilt for this platform — install manually from the releases page."};b.push(`downloading ${e.name}…`);let g=R();(0,h.mkdirSync)(g,{recursive:!0}),w.$.set("llama-server",{received:0,total:0,done:!1});try{let a=await T(e.url,e.name,g,"llama-server");if(a)return w.$.set("llama-server",{received:0,total:0,done:!0,error:a}),{ok:!1,installed:!1,log:b,error:a};if(d){let a=await W(!0);b.push(a.ok?a.fetched?"✓ CUDA runtime DLLs installed — GPU enabled.":"CUDA runtime already present.":`⚠ CUDA runtime not installed (${a.reason??"unknown"}) — runs on CPU; retries on next Start/Install.`)}}catch(a){return{ok:!1,installed:!1,log:b,error:"download/extract failed: "+String(a instanceof Error?a.message:a)}}let i=function a(b,c,d){let e;if(d<0)return null;try{e=(0,h.readdirSync)(b,{withFileTypes:!0})}catch{return null}for(let a of e)if(a.isFile()&&a.name===c)return(0,l.join)(b,a.name);for(let f of e)if(f.isDirectory()){let e=a((0,l.join)(b,f.name),c,d-1);if(e)return e}return null}(g,"win32"===f().platform()?"llama-server.exe":"llama-server",5);if(!i)return{ok:!1,installed:!1,log:b,error:"downloaded, but llama-server wasn't found in the archive."};if("win32"!==f().platform())try{(0,h.chmodSync)(i,493)}catch{}return(0,h.writeFileSync)((0,l.join)(g,"INSTALLED"),i,"utf8"),w.$.set("llama-server",{received:1,total:1,done:!0}),b.push(`✓ installed → ${i}`),await ah().catch(()=>{}),(0,p.revalidatePath)("/models"),{ok:!0,installed:!0,path:i,log:b}}async function Y(){if(S())return!0;try{return(0,i.execSync)("llama-server --version",{timeout:3e3,stdio:"ignore"}),!0}catch{return!1}}async function Z(){try{let a=await fetch(`${C}/v1/models`,{signal:AbortSignal.timeout(2500)});if(!a.ok)return{up:!1,model:null};let b=await a.json(),c=b.data?.[0]?.id;return{up:!0,model:c?c.split(/[\\/]/).pop()??c:null}}catch{return{up:!1,model:null}}}async function $(a){try{var b;let c,d=await F();if(!/cuda|metal/i.test(d.backend))return[];let e=(b=d.vram,(c=/([\d.]+)\s*GB/i.exec(b||""))?1e9*parseFloat(c[1]):0);if(a&&e&&1.15*a>e)return[];return["-ngl","99"]}catch{return[]}}function _(){try{let a=q.db.select({file:r.localModel.file,name:r.localModel.name}).from(r.localModel).all().find(a=>/embed|nomic|bge|mxbai|gte/i.test(a.name)&&a.file&&(0,h.existsSync)(a.file));return a?{file:a.file,name:a.name}:null}catch{return null}}function aa(){try{let a=q.db.select({file:r.localModel.file,name:r.localModel.name,sizeBytes:r.localModel.sizeBytes}).from(r.localModel).all().find(a=>!/embed|nomic|bge|mxbai|gte/i.test(a.name)&&a.file&&(0,h.existsSync)(a.file));return a?{file:a.file,name:a.name,sizeBytes:a.sizeBytes}:null}catch{return null}}async function ab(){try{return(await fetch(`${D}/health`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function ac(){if(await ab())return{up:!0};let a=S();if(!a)return{up:!1,reason:"llama-server not installed"};let b=_();if(!b)return{up:!1,reason:"no embedding model installed (download nomic-embed-text)"};try{await W().catch(()=>{});let c=await $(),d=(0,i.spawn)(a,["-m",b.file,"--embeddings","--host","127.0.0.1","--port","8083","-c","2048","--pooling","mean",...c],{detached:!0,stdio:"ignore"});d.on("error",()=>{}),d.unref()}catch(a){return{up:!1,reason:"spawn failed: "+String(a instanceof Error?a.message:a)}}for(let a=0;a<24;a++)if(await new Promise(a=>setTimeout(a,500)),await ab())return{up:!0,model:b.name};return{up:!1,reason:"embedding server didn't come up in time"}}async function ad(){if((await Z()).up)return{up:!0};let a=S();if(!a)return{up:!1,reason:"llama-server not installed"};let b=aa();if(!b)return{up:!1,reason:"no chat GGUF installed"};try{await W().catch(()=>{});let c=await $(b.sizeBytes),d=(0,i.spawn)(a,["-m",b.file,"--host","127.0.0.1","--port","8082","-c","4096",...c],{detached:!0,stdio:"ignore"});d.on("error",()=>{}),d.unref()}catch(a){return{up:!1,reason:"spawn failed: "+String(a instanceof Error?a.message:a)}}for(let a=0;a<24;a++)if(await new Promise(a=>setTimeout(a,500)),(await Z()).up)return{up:!0,model:b.name};return{up:!1,reason:"llama server didn't come up in time"}}async function ae(){let a=_();return{up:await ab(),model:a?.name??null,installed:!!a}}async function af(){let a=await ac();return(0,p.revalidatePath)("/models"),a}async function ag(){let{org:a}=await (0,s.nP)();await ac().catch(()=>{});let b=await (0,u.xV)(a.id);return(0,p.revalidatePath)("/models"),b}async function ah(){let{workspace:a}=await (0,s.nP)(),b=await Z(),c=new Set((await q.db.select({file:r.localModel.file}).from(r.localModel)).map(a=>a.file)).size,d={status:b.up?"connected":"needs_sync",modelCount:c,lastSync:b.up?new Date:null},[e]=await q.db.select().from(r.provider).where((0,o.Uo)((0,o.eq)(r.provider.workspaceId,a.id),(0,o.eq)(r.provider.catalogId,"llamacpp")));return e?await q.db.update(r.provider).set(d).where((0,o.eq)(r.provider.id,e.id)):await q.db.insert(r.provider).values({id:(0,g.randomUUID)(),workspaceId:a.id,catalogId:"llamacpp",adapter:"local_llamacpp",kind:"local",auth:"local",syncStatus:"implemented",...d}),(0,p.revalidatePath)("/models"),{ok:!0}}async function ai(a){let b;await (0,s.nP)();let c=await Y(),d=[];if(!c)return{up:!1,installed:!1,log:["llama-server not found — install llama.cpp from https://github.com/ggml-org/llama.cpp/releases (or `brew install llama.cpp`), then retry."]};if((await Z()).up)return{up:!0,installed:c,log:[`server already running on ${C}`]};let e=0;if(a){let d,[f]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.id,a));if(f&&(d=f.name,/embed|nomic|bge|mxbai|gte/i.test(d))){let a=await ac();return{up:a.up,installed:c,log:[`${f.name} is an EMBEDDING model — started the RAG embedding server on :8083 (it can't power chat on :8082).`,a.up?`✓ embeddings ready \xb7 ${D}`:`embeddings: ${a.reason??"failed to start"}`]}}b=f?.file,e=f?.sizeBytes??0}if(!b){let a=aa();b=a?.file,e=a?.sizeBytes??0}if(!b||!(0,h.existsSync)(b)){let a=_();if(a){let b=await ac();return{up:!1,installed:c,log:[`Your only local model (${a.name}) is an EMBEDDING model — it powers RAG on the embeddings server (${D}), not the chat server.`,b.up?"✓ embeddings server is running.":`embeddings: ${b.reason??"not started"}`,"Download a chat/instruct GGUF (e.g. Qwen, Llama) below to run the chat server on :8082."]}}return{up:!1,installed:c,log:["no GGUF model on disk — download one below first."]}}try{let a=S()??"llama-server";await W().catch(()=>{});let f=await $(e),g=(0,i.spawn)(a,["-m",b,"--host","127.0.0.1","--port","8082","-c","4096",...f],{detached:!0,stdio:"ignore"}),h="";g.on("error",a=>{h=String(a instanceof Error?a.message:a)}),g.unref(),d.push(`$ llama-server -m ${b.split(/[\\/]/).pop()} --port 8082${f.length?" -ngl 99 (GPU)":" (CPU)"}`);let j=!1;for(let a=0;a<12&&!j;a++)await new Promise(a=>setTimeout(a,1e3)),j=(await Z()).up;return h&&d.push("spawn failed: "+h),d.push(j?`✓ ready \xb7 ${C}`:"still starting — large models take longer; run llama-server in a terminal to see progress."),await ah(),(0,p.revalidatePath)("/models"),{up:j,installed:c,log:d}}catch(a){return{up:!1,installed:c,log:["failed to start: "+String(a instanceof Error?a.message:a)]}}}async function aj(){let a=await Y(),b=[];try{"win32"===f().platform()?(0,i.execSync)("taskkill /IM llama-server.exe /F",{stdio:"ignore",timeout:4e3}):(0,i.execSync)("pkill -f llama-server",{stdio:"ignore",timeout:4e3}),b.push("server stopped")}catch{b.push("no running llama-server process found")}return await ah(),(0,p.revalidatePath)("/models"),{up:!1,installed:a,log:b}}(0,A.D)([F,G,H,I,J,K,M,N,O,P,Q,X,Y,Z,ab,ac,ad,ae,af,ag,ah,ai,aj]),(0,d.A)(F,"00ecc40b1a1f7711705174bdf2c7b6328f702a4267",null),(0,d.A)(G,"005f347999dc4767ce93bb5bbebb2851b83bdb9327",null),(0,d.A)(H,"4026c880b44f2f21469a370f44f00cea0f670f3177",null),(0,d.A)(I,"001f4dcdd1414de6334ce51e096abef12cce715d5f",null),(0,d.A)(J,"400cb1f7d10be86025c029db9f8bae23f7c7496000",null),(0,d.A)(K,"00a70c56acf4c711aa29d2631a0222418222d1d062",null),(0,d.A)(M,"401d32cbbd01c648cd56431798e978dfb425ec9e0b",null),(0,d.A)(N,"407bc313c8bc4b1e7c1c1364fcd5b440b84872e9f8",null),(0,d.A)(O,"4066e2a6e63fba23fc4c7e9e862f4f153d28402e09",null),(0,d.A)(P,"40cbef8c22d0da6e4a36a8672c3bcb5fe20b5490a8",null),(0,d.A)(Q,"400a3dd0ee8892f66a2e5604d6581fd23aa7a3cea5",null),(0,d.A)(X,"00c30495871ff89d3218dddc9898738136dce97eb7",null),(0,d.A)(Y,"005af5ec007b7a6b841445fecaae31d2f1f7cad0aa",null),(0,d.A)(Z,"0082098556d4302c4ed6e0da7abc7b94fe4af2e882",null),(0,d.A)(ab,"000538e55e8863eaca825d1e70174f3b72909185dd",null),(0,d.A)(ac,"00eb5c7c203b16c670c3f42ff424497240d7aaa63e",null),(0,d.A)(ad,"0018a0b5673bbc76c6d3f1cd6227d9049cd889b4dd",null),(0,d.A)(ae,"0008fef7b5b0a23492aed2eae98ac089bc86a3749a",null),(0,d.A)(af,"001ed4036bfa17b014cd406df39e211a50abdd9a98",null),(0,d.A)(ag,"0031ec1fcd2b5c12cb587c24d3bbcfdc45eb9dc8de",null),(0,d.A)(ah,"00dd33de1b3f55c4c1cbb341355d491ec6ea77ef4e",null),(0,d.A)(ai,"40f3f2d02634be4fdb0104759d54900ef00b744064",null),(0,d.A)(aj,"000fcfa407fbc51cd18133f3da1a459d4af6a9cc5d",null)}};
|
|
1
|
+
"use strict";exports.id=7989,exports.ids=[7989],exports.modules={18185:(a,b,c)=>{c.d(b,{$:()=>d});let d=new Map},27989:(a,b,c)=>{c.d(b,{V$:()=>ah,Uw:()=>F,wp:()=>O,Jw:()=>X,Cp:()=>P,S8:()=>ab,kb:()=>ae,Hi:()=>ac,Vr:()=>ad,nl:()=>Y,LU:()=>Z,cm:()=>J,VH:()=>K,zO:()=>G,Gh:()=>I,I2:()=>H,ju:()=>M,Ac:()=>ag,m:()=>Q,az:()=>N,ts:()=>af,L0:()=>ai,lC:()=>aj});var d=c(52813),e=c(48161),f=c.n(e),g=c(77598),h=c(73024),i=c(31421),j=c(54679),k=c.n(j),l=c(76760),m=c(57075),n=c(46466),o=c(1782),p=c(83550),q=c(80280),r=c(25533),s=c(95896),t=c(18612),u=c(64619);function v(a,b,c=.02){let d=0;try{d=(0,h.statSync)(a).size}catch{return{ok:!1,actual:0,expected:b,message:"file missing after download"}}if(!b||b<=0)return{ok:!0,actual:d,expected:b,message:"size ok (no expected size)"};let e=d/b,f=e>=1-c&&e<=1+c;return{ok:f,actual:d,expected:b,message:f?"size verified":`size mismatch — got ${d} bytes, expected ~${b} (truncated/corrupt)`}}var w=c(18185);let x=[{repo:"Qwen2.5-0.5B-Instruct",paramsB:.5,kind:"chat"},{repo:"Qwen2.5-1.5B-Instruct",paramsB:1.5,kind:"chat"},{repo:"Qwen2.5-3B-Instruct",paramsB:3,kind:"chat"},{repo:"Qwen2.5-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Qwen2.5-14B-Instruct",paramsB:14,kind:"chat"},{repo:"Qwen2.5-32B-Instruct",paramsB:32,kind:"chat"},{repo:"Qwen2.5-72B-Instruct",paramsB:72,kind:"chat"},{repo:"Qwen2.5-Coder-1.5B-Instruct",paramsB:1.5,kind:"code"},{repo:"Qwen2.5-Coder-3B-Instruct",paramsB:3,kind:"code"},{repo:"Qwen2.5-Coder-7B-Instruct",paramsB:7,kind:"code"},{repo:"Qwen2.5-Coder-14B-Instruct",paramsB:14,kind:"code"},{repo:"Qwen2.5-Coder-32B-Instruct",paramsB:32,kind:"code"},{repo:"Qwen3-0.6B",paramsB:.6,kind:"chat"},{repo:"Qwen3-1.7B",paramsB:1.7,kind:"chat"},{repo:"Qwen3-4B",paramsB:4,kind:"chat"},{repo:"Qwen3-8B",paramsB:8,kind:"chat"},{repo:"Qwen3-14B",paramsB:14,kind:"chat"},{repo:"Qwen3-32B",paramsB:32,kind:"chat"},{repo:"Llama-3.2-1B-Instruct",paramsB:1,kind:"chat"},{repo:"Llama-3.2-3B-Instruct",paramsB:3,kind:"chat"},{repo:"Meta-Llama-3.1-8B-Instruct",paramsB:8,kind:"chat"},{repo:"Meta-Llama-3.1-70B-Instruct",paramsB:70,kind:"chat"},{repo:"Llama-3.3-70B-Instruct",paramsB:70,kind:"chat"},{repo:"gemma-2-2b-it",paramsB:2,kind:"chat"},{repo:"gemma-2-9b-it",paramsB:9,kind:"chat"},{repo:"gemma-2-27b-it",paramsB:27,kind:"chat"},{repo:"gemma-3-1b-it",paramsB:1,kind:"chat"},{repo:"gemma-3-4b-it",paramsB:4,kind:"chat"},{repo:"gemma-3-12b-it",paramsB:12,kind:"chat"},{repo:"gemma-3-27b-it",paramsB:27,kind:"chat"},{repo:"Mistral-7B-Instruct-v0.3",paramsB:7,kind:"chat"},{repo:"Mistral-Nemo-Instruct-2407",paramsB:12,kind:"chat"},{repo:"Mistral-Small-Instruct-2409",paramsB:22,kind:"chat"},{repo:"Mistral-Small-24B-Instruct-2501",paramsB:24,kind:"chat"},{repo:"Codestral-22B-v0.1",paramsB:22,kind:"code"},{repo:"Phi-3.1-mini-4k-instruct",paramsB:3.8,kind:"chat"},{repo:"DeepSeek-R1-Distill-Qwen-1.5B",paramsB:1.5,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-7B",paramsB:7,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-14B",paramsB:14,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Qwen-32B",paramsB:32,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Llama-8B",paramsB:8,kind:"reasoning"},{repo:"DeepSeek-Coder-V2-Lite-Instruct",paramsB:16,kind:"code"},{repo:"Yi-1.5-9B-Chat",paramsB:9,kind:"chat"},{repo:"Yi-1.5-34B-Chat",paramsB:34,kind:"chat"},{repo:"granite-3.0-8b-instruct",paramsB:8,kind:"chat"},{repo:"granite-3.1-8b-instruct",paramsB:8,kind:"chat"},{repo:"SmolLM2-360M-Instruct",paramsB:.36,kind:"chat"},{repo:"SmolLM2-1.7B-Instruct",paramsB:1.7,kind:"chat"},{repo:"aya-expanse-8b",paramsB:8,kind:"chat"},{repo:"aya-expanse-32b",paramsB:32,kind:"chat"},{repo:"Falcon3-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Falcon3-10B-Instruct",paramsB:10,kind:"chat"},{repo:"EXAONE-3.5-2.4B-Instruct",paramsB:2.4,kind:"chat"},{repo:"EXAONE-3.5-7.8B-Instruct",paramsB:7.8,kind:"chat"},{repo:"Qwen3.5-0.8B",paramsB:.8,kind:"chat"},{repo:"Qwen3.5-2B",paramsB:2,kind:"chat"},{repo:"Qwen3.5-9B",paramsB:9,kind:"chat"},{repo:"Qwen3.5-27B",paramsB:27,kind:"chat"},{repo:"Qwen3.5-35B-A3B",paramsB:35,kind:"chat"},{repo:"Qwen3.6-27B",paramsB:27,kind:"chat"},{repo:"Qwen3.6-35B-A3B",paramsB:35,kind:"chat"},{repo:"Qwen3-30B-A3B",paramsB:30,kind:"chat"},{repo:"Qwen3-30B-A3B-Instruct-2507",paramsB:30,kind:"chat"},{repo:"Qwen3-Next-80B-A3B-Instruct",paramsB:80,kind:"chat"},{repo:"Qwen3-4B-Thinking-2507",paramsB:4,kind:"reasoning"},{repo:"QwQ-32B",paramsB:32,kind:"reasoning"},{repo:"Qwen2.5-7B-Instruct-1M",paramsB:7,kind:"chat"},{repo:"Qwen2.5-Coder-0.5B-Instruct",paramsB:.5,kind:"code"},{repo:"Qwen2.5-Coder-3B",paramsB:3,kind:"code"},{repo:"Qwen2.5-Coder-32B",paramsB:32,kind:"code"},{repo:"Qwen2.5-Math-7B-Instruct",paramsB:7,kind:"chat"},{repo:"Qwen2-500M-Instruct",paramsB:.5,kind:"chat"},{repo:"Qwen1.5-32B-Chat",paramsB:32,kind:"chat"},{repo:"gemma-4-E2B-it",paramsB:2,kind:"chat"},{repo:"gemma-4-E4B-it",paramsB:4,kind:"chat"},{repo:"gemma-4-12B-it",paramsB:12,kind:"chat"},{repo:"gemma-4-26B-A4B-it",paramsB:26,kind:"chat"},{repo:"gemma-4-31B-it",paramsB:31,kind:"chat"},{repo:"gemma-3-270m-it",paramsB:.27,kind:"chat"},{repo:"gemma-1.1-2b-it",paramsB:2,kind:"chat"},{repo:"codegemma-2b",paramsB:2,kind:"code"},{repo:"codegemma-7b",paramsB:7,kind:"code"},{repo:"codegemma-7b-it",paramsB:7,kind:"code"},{repo:"codegemma-1.1-7b-it",paramsB:7,kind:"code"},{repo:"Ministral-3-3B-Instruct-2512",paramsB:3,kind:"chat"},{repo:"Ministral-3-8B-Instruct-2512",paramsB:8,kind:"chat"},{repo:"Ministral-3-14B-Instruct-2512",paramsB:14,kind:"chat"},{repo:"Ministral-3-3B-Reasoning-2512",paramsB:3,kind:"reasoning"},{repo:"Ministral-3-8B-Reasoning-2512",paramsB:8,kind:"reasoning"},{repo:"Ministral-3-14B-Reasoning-2512",paramsB:14,kind:"reasoning"},{repo:"Mistral-Small-3.1-24B-Instruct-2503",paramsB:24,kind:"chat"},{repo:"Mistral-Small-3.2-24B-Instruct-2506",paramsB:24,kind:"chat"},{repo:"Devstral-Small-2-24B-Instruct-2512",paramsB:24,kind:"code"},{repo:"mathstral-7B-v0.1",paramsB:7,kind:"chat"},{repo:"dolphin-2.8-mistral-7b-v02",paramsB:7,kind:"chat"},{repo:"WizardLM-2-7B",paramsB:7,kind:"chat"},{repo:"DeepSeek-R1-0528-Qwen3-8B",paramsB:8,kind:"reasoning"},{repo:"DeepSeek-R1-Distill-Llama-70B",paramsB:70,kind:"reasoning"},{repo:"deepseek-coder-1.3B-kexer",paramsB:1.3,kind:"code"},{repo:"deepseek-coder-6.7B-kexer",paramsB:6.7,kind:"code"},{repo:"granite-3.2-8b-instruct",paramsB:8,kind:"chat"},{repo:"granite-4.1-3b",paramsB:3,kind:"chat"},{repo:"granite-4.1-8b",paramsB:8,kind:"chat"},{repo:"granite-4.1-30b",paramsB:30,kind:"chat"},{repo:"Olmo-3-32B-Think",paramsB:32,kind:"reasoning"},{repo:"Seed-OSS-36B-Instruct",paramsB:36,kind:"chat"},{repo:"ERNIE-4.5-21B-A3B-PT",paramsB:21,kind:"chat"},{repo:"LFM2-24B-A2B",paramsB:24,kind:"chat"},{repo:"LFM2.5-1.2B-Instruct",paramsB:1.2,kind:"chat"},{repo:"LFM2.5-1.2B-Thinking",paramsB:1.2,kind:"reasoning"},{repo:"NVIDIA-Nemotron-3-Nano-4B",paramsB:4,kind:"chat"},{repo:"Hermes-4-70B",paramsB:70,kind:"chat"},{repo:"Llama-3.1-Tulu-3-8B",paramsB:8,kind:"chat"},{repo:"Meta-Llama-3-70B-Instruct",paramsB:70,kind:"chat"},{repo:"Llama3-ChatQA-1.5-70B",paramsB:70,kind:"chat"},{repo:"Llama-3-Groq-8B-Tool-Use",paramsB:8,kind:"chat"},{repo:"aya-23-8B",paramsB:8,kind:"chat"},{repo:"aya-23-35B",paramsB:35,kind:"chat"},{repo:"SmolLM2-135M-Instruct",paramsB:.135,kind:"chat"},{repo:"Yi-Coder-1.5B",paramsB:1.5,kind:"code"},{repo:"Yi-Coder-9B-Chat",paramsB:9,kind:"code"},{repo:"OpenCoder-1.5B-Instruct",paramsB:1.5,kind:"code"},{repo:"stable-code-instruct-3b",paramsB:3,kind:"code"},{repo:"internlm2-math-plus-7b",paramsB:7,kind:"chat"},{repo:"internlm2-math-plus-20b",paramsB:20,kind:"chat"}],y={Q3_K_L:.55,Q4_K_M:.67,Q6_K:.9,Q8_0:1.13},z=[{id:"nomic-embed-q8",name:"nomic-embed-text-v1.5 (Q8_0)",url:"https://huggingface.co/nomic-ai/nomic-embed-text-v1.5-GGUF/resolve/main/nomic-embed-text-v1.5.Q8_0.gguf",params:"137M",quant:"Q8_0",sizeBytes:146e6,kind:"embed",paramsB:.137},...function(){let a=[];for(let d of x){var b,c;let e=d.vendor??"lmstudio-community";for(let f of(b=d.paramsB)<=9?["Q3_K_L","Q4_K_M","Q6_K","Q8_0"]:b<=34?["Q3_K_L","Q4_K_M","Q6_K"]:["Q3_K_L","Q4_K_M"]){let b=`${d.repo}-${f}.gguf`;a.push({id:`${d.repo}-${f}`.toLowerCase().replace(/[^a-z0-9]+/g,"-"),name:`${d.repo} (${f})`,url:`https://huggingface.co/${e}/${d.repo}-GGUF/resolve/main/${b}`,params:(c=d.paramsB)<1?`${Math.round(1e3*c)}M`:`${c}B`,quant:f,sizeBytes:Math.round(1e9*d.paramsB*y[f]),kind:d.kind,paramsB:d.paramsB})}}return a}()];var A=c(29635);let B=process.env.OLLAMA_URL??"http://127.0.0.1:11434",C=process.env.LLAMACPP_URL??"http://127.0.0.1:8082",D=process.env.CONSTELLA_EMBED_URL??"http://127.0.0.1:8083",E=null;async function F(){if(E){let a=f().totalmem()/0x40000000,b=f().freemem()/0x40000000;return{...E,ram:`${a.toFixed(0)} GB \xb7 ${b.toFixed(1)} free`}}let a=f().cpus(),b=(a[0]?.model??"Unknown CPU").replace(/\s+/g," ").trim(),c=a.length,d=f().totalmem()/0x40000000,e=f().freemem()/0x40000000,g=`${d.toFixed(0)} GB \xb7 ${e.toFixed(1)} free`,h=f().platform(),j="—",k="—",l="CPU",m=[];try{let a=(0,i.execSync)("nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits",{timeout:4e3,stdio:["ignore","pipe","ignore"]}).toString().trim();if(a){let[b,c]=a.split("\n")[0].split(",");j=b.trim(),k=`${Math.round(Number(c)/1024)} GB`,l="CUDA",m.push("CUDA")}}catch{}if("CPU"===l&&"darwin"===h){l="Metal",m.push("Metal");let a="Apple Silicon";try{let b=(0,i.execFileSync)("sysctl",["-n","machdep.cpu.brand_string"],{timeout:3e3,stdio:["ignore","pipe","ignore"]}).toString().trim();b&&(a=b)}catch{/apple/i.test(b)&&(a=b)}j=/apple/i.test(a)?`${a} GPU`:"Apple GPU","arm64"===f().arch()&&(k=`${Math.max(1,Math.round(.7*d))} GB unified`)}m.push("arm64"===f().arch()?"NEON":"AVX2");let n="—";try{if("win32"===h){let a=((0,t.r$)()[0]||"C").toUpperCase(),b=/^[A-Z]$/.test(a)?a:"C",c=(0,i.execFileSync)("powershell",["-NoProfile","-Command",`(Get-PSDrive ${b}).Free`],{timeout:5e3,stdio:["ignore","pipe","ignore"]}).toString().trim(),d=Number(c.replace(/[^\d]/g,""));d>0&&(n=`${(d/0x40000000).toFixed(0)} GB`)}else{let a=(0,i.execFileSync)("df",["-h",(0,t.r$)()],{timeout:4e3,stdio:["ignore","pipe","ignore"]}).toString().trim().split("\n"),b=(a[a.length-1]??"").split(/\s+/);b[3]&&(n=b[3])}}catch{}return E={cpu:b,cores:c,ram:g,gpu:j,vram:k,diskFree:n,backend:l,accel:m,recommendedQuant:d>=32?"Q5_K_M":d>=16?"Q4_K_M":"Q4_0",maxParams:d>=64?"70B":d>=32?"34B":d>=16?"13B":"7B"}}async function G(){try{return(0,i.execSync)("ollama --version",{timeout:3e3,stdio:"ignore"}),!0}catch{return!1}}async function H(a){let b=await G(),c=[];if("start"===a){if(!b)return{up:!1,installed:!1,log:["Ollama is not installed — get it at https://ollama.com, then retry."]};if((await K()).up)return{up:!0,installed:b,log:[`server already running on ${B}`]};try{let a=(0,i.spawn)("ollama",["serve"],{detached:!0,stdio:"ignore"}),d="";a.on("error",a=>{d=String(a instanceof Error?a.message:a)}),a.unref(),c.push("$ ollama serve"),await new Promise(a=>setTimeout(a,2e3));let e=(await K()).up;return d&&c.push("spawn failed: "+d),c.push(e?`✓ ready \xb7 ${B}`:"still stopped — the port may be busy; run `ollama serve` in a terminal to see the error."),(0,p.revalidatePath)("/models"),{up:e,installed:b,log:c}}catch(a){return{up:!1,installed:b,log:["failed to start: "+String(a instanceof Error?a.message:a)]}}}try{"win32"===f().platform()?(0,i.execSync)("taskkill /IM ollama.exe /F",{stdio:"ignore",timeout:4e3}):(0,i.execSync)("pkill -f 'ollama serve'",{stdio:"ignore",timeout:4e3}),c.push("server stopped")}catch{c.push("no running ollama process found")}return(0,p.revalidatePath)("/models"),{up:!1,installed:b,log:c}}async function I(){try{let a=await fetch(`${B}/api/ps`,{signal:AbortSignal.timeout(3e3)});if(!a.ok)return{running:[]};return{running:((await a.json()).models??[]).map(a=>({name:a.name,vram:a.size_vram??0}))}}catch{return{running:[]}}}async function J(a){try{let b=await fetch(`${B}/api/generate`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({model:a,prompt:"",keep_alive:"30m"}),signal:AbortSignal.timeout(12e4)});if(!b.ok)return{ok:!1,error:`Ollama ${b.status}`};return await b.json().catch(()=>({})),(0,p.revalidatePath)("/models"),{ok:!0}}catch(b){let a=String(b instanceof Error?b.message:b);return{ok:!1,error:/abort|fetch failed|ECONN/i.test(a)?"Ollama not running":a}}}async function K(){try{let a=await fetch(`${B}/api/tags`,{signal:AbortSignal.timeout(3e3)});if(!a.ok)return{up:!1,models:[]};let b=await a.json();return{up:!0,models:(b.models??[]).map(a=>({name:a.name,size:a.size??0}))}}catch{return{up:!1,models:[]}}}async function L(a){let b=await K(),[c]=await q.db.select().from(r.provider).where((0,o.Uo)((0,o.eq)(r.provider.workspaceId,a),(0,o.eq)(r.provider.catalogId,"ollama"))),d={status:b.up?"connected":"needs_sync",modelCount:b.models.length,lastSync:b.up?new Date:null};c?await q.db.update(r.provider).set(d).where((0,o.eq)(r.provider.id,c.id)):await q.db.insert(r.provider).values({id:(0,g.randomUUID)(),workspaceId:a,catalogId:"ollama",adapter:"local_ollama",kind:"local",auth:"local",syncStatus:"implemented",...d})}async function M(a){let{workspace:b}=await (0,s.nP)();if(!a.trim())return{ok:!1,error:"no model name"};try{let c=await fetch(`${B}/api/pull`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:a.trim(),stream:!1}),signal:AbortSignal.timeout(18e5)});if(!c.ok){let a=await c.text().catch(()=>"");return{ok:!1,error:`Ollama ${c.status}${a?": "+a.slice(0,120):""}`}}let d=await c.json().catch(()=>({}));return await L(b.id),(0,p.revalidatePath)("/models"),{ok:"success"===d.status||null==d.error,error:d.error}}catch(b){let a=String(b instanceof Error?b.message:b);return{ok:!1,error:/abort|fetch failed|ECONN/i.test(a)?"Ollama not running — start it, then retry.":a}}}async function N(a){let{workspace:b}=await (0,s.nP)();try{await fetch(`${B}/api/delete`,{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({name:a})})}catch{}return await L(b.id),(0,p.revalidatePath)("/models"),{ok:!0}}async function O(a){let{workspace:b}=await (0,s.nP)(),c=z.find(b=>b.id===a);if(!c)return{ok:!1,error:"unknown model"};let d=(0,l.join)((0,t.r$)(),"models");(0,h.mkdirSync)(d,{recursive:!0});let e=function(a){try{if("win32"===f().platform()){let b=(a[0]||"C").toUpperCase(),c=/^[A-Z]$/.test(b)?b:"C",d=(0,i.execFileSync)("powershell",["-NoProfile","-Command",`(Get-PSDrive ${c}).Free`],{timeout:6e3,stdio:["ignore","pipe","ignore"]}).toString().trim();return Number(d.replace(/[^\d]/g,""))||0}let b=(0,i.execFileSync)("df",["-k",a],{timeout:5e3,stdio:["ignore","pipe","ignore"]}).toString().trim().split("\n"),c=(b[b.length-1]??"").split(/\s+/),d=Number(c[3]);return d?1024*d:0}catch{return 0}}(d);if(e&&c.sizeBytes&&e<1.1*c.sizeBytes)return{ok:!1,error:`not enough free space — need ~${(c.sizeBytes/1e9).toFixed(1)} GB, ${(e/1e9).toFixed(1)} GB free`};let j=c.url.split("/").pop()??`${c.id}.gguf`,k=(0,l.join)(d,j);w.$.set(a,{received:0,total:0,done:!1});try{if(!(0,h.existsSync)(k)){let b=await fetch(c.url,{signal:AbortSignal.timeout(36e5)});if(!b.ok||!b.body)return w.$.set(a,{received:0,total:0,done:!0,error:`download failed (${b.status})`}),{ok:!1,error:`download failed (${b.status})`};let d=Number(b.headers.get("content-length"))||c.sizeBytes||0,e=0;w.$.set(a,{received:0,total:d,done:!1});let f=new m.PassThrough;f.on("data",b=>{e+=b.length;let c=w.$.get(a);c&&(c.received=e)}),await (0,n.pipeline)(m.Readable.fromWeb(b.body),f,(0,h.createWriteStream)(k));let g=v(k,d);if(!g.ok){try{(0,h.rmSync)(k)}catch{}return w.$.set(a,{received:e,total:d,done:!0,error:g.message}),{ok:!1,error:g.message}}}if((w.$.set(a,{received:1,total:1,done:!0}),c.sha256)&&await new Promise((a,b)=>{let c=(0,g.createHash)("sha256");(0,h.createReadStream)(k).on("data",a=>c.update(a)).on("end",()=>a(c.digest("hex"))).on("error",b)})!==c.sha256)return{ok:!1,error:"SHA-256 mismatch — file corrupt"};let d=(0,h.statSync)(k).size,[e]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.file,k));return e||await q.db.insert(r.localModel).values({id:(0,g.randomUUID)(),workspaceId:b.id,name:c.name,file:k,quant:c.quant,params:c.params,sizeBytes:d,sha256:c.sha256??"",bind:"127.0.0.1:8082"}),/embed|nomic|bge|mxbai|gte/i.test(c.name)&&ac().catch(()=>{}),(0,p.revalidatePath)("/models"),{ok:!0,path:k}}catch(d){let b=String(d instanceof Error?d.message:d),c=w.$.get(a);return w.$.set(a,{received:c?.received??0,total:c?.total??0,done:!0,error:b}),{ok:!1,error:b}}}async function P(a){return w.$.get(a)??null}async function Q(a){await (0,s.nP)();let[b]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.id,a));if(!b)return{ok:!1,error:"model not found"};try{b.file&&(0,h.existsSync)(b.file)&&(0,h.rmSync)(b.file,{force:!0})}catch{}return await q.db.delete(r.localModel).where((0,o.eq)(r.localModel.file,b.file)),(0,p.revalidatePath)("/models"),{ok:!0}}function R(){return(0,l.join)((0,t.r$)(),"bin","llama")}function S(){try{let a=(0,l.join)(R(),"INSTALLED");if(!(0,h.existsSync)(a))return null;let b=(0,h.readFileSync)(a,"utf8").trim();return b&&(0,h.existsSync)(b)?b:null}catch{return null}}async function T(a,b,c,d){let e=/\.(tar\.gz|tgz)$/i.test(b),f=(0,l.join)(c,b.replace(/[^\w.\-]+/g,"_"));(0,h.mkdirSync)(c,{recursive:!0});let g=await fetch(a,{signal:AbortSignal.timeout(18e5)});if(!g.ok||!g.body)return d&&w.$.set(d,{received:0,total:0,done:!0,error:`download failed (${g.status})`}),`download failed (${g.status})`;let j=Number(g.headers.get("content-length"))||0,o=m.Readable.fromWeb(g.body);if(d){let a=0;w.$.set(d,{received:0,total:j,done:!1});let b=new m.PassThrough;b.on("data",b=>{a+=b.length;let c=w.$.get(d);c&&(c.received=a)}),await (0,n.pipeline)(o,b,(0,h.createWriteStream)(f))}else await (0,n.pipeline)(o,(0,h.createWriteStream)(f));let p=v(f,j);if(!p.ok){try{(0,h.rmSync)(f)}catch{}return p.message}e?(0,i.execFileSync)("tar",["-xzf",f,"-C",c],{stdio:"ignore",timeout:12e4}):new(k())(f).extractAllTo(c,!0);try{(0,h.rmSync)(f)}catch{}return null}async function U(){try{let a=await fetch("https://api.github.com/repos/ggml-org/llama.cpp/releases/latest",{headers:{"User-Agent":"constella",Accept:"application/vnd.github+json"},signal:AbortSignal.timeout(15e3)});if(!a.ok)return null;return(await a.json()).assets??[]}catch{return null}}let V=!1;async function W(a=!1){let b;if("win32"!==f().platform())return{ok:!0,fetched:!1};let c=R();try{b=(0,h.readdirSync)(c)}catch{return{ok:!1,fetched:!1,reason:"no llama dir"}}let d=b.some(a=>/^ggml-cuda\.dll$/i.test(a)),e=b.some(a=>/^cudart64_\d+\.dll$/i.test(a));if(!d||e)return{ok:e||!d,fetched:!1};if(V&&!a)return{ok:!1,fetched:!1,reason:"already attempted this run"};V=!0;let g="12";try{let a=(0,h.readFileSync)((0,l.join)(c,"ggml-cuda.dll")).toString("latin1").match(/cudart64_(\d+)\.dll/i);a&&(g=a[1])}catch{}let i=await U();if(!i)return{ok:!1,fetched:!1,reason:"GitHub unreachable"};let j=i.filter(a=>/cudart/i.test(a.name)&&/x64|amd64/i.test(a.name)),k=j.find(a=>RegExp(`cuda-${g}\\.`,"i").test(a.name))??j[0];if(!k)return{ok:!1,fetched:!1,reason:"no cudart asset in the latest release"};let m=await T(k.browser_download_url,k.name,c).catch(a=>String(a instanceof Error?a.message:a));if(m)return{ok:!1,fetched:!1,reason:m};let n=!1;try{n=(0,h.readdirSync)(c).some(a=>/^cudart64_\d+\.dll$/i.test(a))}catch{}return{ok:n,fetched:n}}async function X(){let a;await (0,s.nP)();let b=[];if(S()||await Y()){let a=await W(!0).catch(()=>null);return{ok:!0,installed:!0,log:["llama-server already installed.",...a?.fetched?["✓ fetched the CUDA runtime DLLs — GPU enabled."]:a&&!a.ok?[`⚠ CUDA runtime still missing (${a.reason??"unknown"}).`]:[]]}}let c=await F(),d=/cuda|nvidia/i.test(c.backend)||(c.accel??[]).some(a=>/cuda|nvidia/i.test(a));b.push(`platform ${f().platform()}/${f().arch()} \xb7 backend ${c.backend} → ${d?"CUDA":"CPU"} build`);try{let c=await fetch("https://api.github.com/repos/ggml-org/llama.cpp/releases/latest",{headers:{"User-Agent":"constella",Accept:"application/vnd.github+json"},signal:AbortSignal.timeout(15e3)});if(!c.ok)return{ok:!1,installed:!1,log:b,error:403===c.status?"GitHub API rate-limited — try again later or install manually from the releases page.":`GitHub releases API ${c.status}`};a=(await c.json()).assets??[]}catch(a){return{ok:!1,installed:!1,log:b,error:"couldn't reach GitHub: "+String(a instanceof Error?a.message:a)}}let e=function(a,b){let c=f().platform(),d="win32"===c?/win/i:"darwin"===c?/macos/i:/(ubuntu|linux)/i,e="arm64"===f().arch(),g=a.filter(a=>/\.(zip|tar\.gz|tgz)$/i.test(a.name)&&d.test(a.name));e||(g=g.filter(a=>!/arm64|aarch64/i.test(a.name)));let h=/cuda|hip|vulkan|sycl|kompute|musa|cann|adreno/i,i=a=>{if(!a.length)return null;let b=e?a.filter(a=>/arm64|aarch64/i.test(a.name)):a.filter(a=>/x64|amd64/i.test(a.name)),c=(b.length?b:a).sort((a,b)=>a.name.length-b.name.length)[0];return c?{name:c.name,url:c.browser_download_url}:null};if(b){let a=g.filter(a=>/cuda/i.test(a.name));if(a.length)return i(a)}let j=g.filter(a=>!h.test(a.name));return i(j.length?j:g)}(a,!!d);if(!e)return{ok:!1,installed:!1,log:b,error:"no matching prebuilt for this platform — install manually from the releases page."};b.push(`downloading ${e.name}…`);let g=R();(0,h.mkdirSync)(g,{recursive:!0}),w.$.set("llama-server",{received:0,total:0,done:!1});try{let a=await T(e.url,e.name,g,"llama-server");if(a)return w.$.set("llama-server",{received:0,total:0,done:!0,error:a}),{ok:!1,installed:!1,log:b,error:a};if(d){let a=await W(!0);b.push(a.ok?a.fetched?"✓ CUDA runtime DLLs installed — GPU enabled.":"CUDA runtime already present.":`⚠ CUDA runtime not installed (${a.reason??"unknown"}) — runs on CPU; retries on next Start/Install.`)}}catch(a){return{ok:!1,installed:!1,log:b,error:"download/extract failed: "+String(a instanceof Error?a.message:a)}}let i=function a(b,c,d){let e;if(d<0)return null;try{e=(0,h.readdirSync)(b,{withFileTypes:!0})}catch{return null}for(let a of e)if(a.isFile()&&a.name===c)return(0,l.join)(b,a.name);for(let f of e)if(f.isDirectory()){let e=a((0,l.join)(b,f.name),c,d-1);if(e)return e}return null}(g,"win32"===f().platform()?"llama-server.exe":"llama-server",5);if(!i)return{ok:!1,installed:!1,log:b,error:"downloaded, but llama-server wasn't found in the archive."};if("win32"!==f().platform())try{(0,h.chmodSync)(i,493)}catch{}return(0,h.writeFileSync)((0,l.join)(g,"INSTALLED"),i,"utf8"),w.$.set("llama-server",{received:1,total:1,done:!0}),b.push(`✓ installed → ${i}`),await ah().catch(()=>{}),(0,p.revalidatePath)("/models"),{ok:!0,installed:!0,path:i,log:b}}async function Y(){if(S())return!0;try{return(0,i.execSync)("llama-server --version",{timeout:3e3,stdio:"ignore"}),!0}catch{return!1}}async function Z(){try{let a=await fetch(`${C}/v1/models`,{signal:AbortSignal.timeout(2500)});if(!a.ok)return{up:!1,model:null};let b=await a.json(),c=b.data?.[0]?.id;return{up:!0,model:c?c.split(/[\\/]/).pop()??c:null}}catch{return{up:!1,model:null}}}async function $(a){try{var b;let c,d=await F();if(!/cuda|metal/i.test(d.backend))return[];let e=(b=d.vram,(c=/([\d.]+)\s*GB/i.exec(b||""))?1e9*parseFloat(c[1]):0);if(a&&e&&1.15*a>e)return[];return["-ngl","99"]}catch{return[]}}function _(){try{let a=q.db.select({file:r.localModel.file,name:r.localModel.name}).from(r.localModel).all().find(a=>/embed|nomic|bge|mxbai|gte/i.test(a.name)&&a.file&&(0,h.existsSync)(a.file));return a?{file:a.file,name:a.name}:null}catch{return null}}function aa(){try{let a=q.db.select({file:r.localModel.file,name:r.localModel.name,sizeBytes:r.localModel.sizeBytes}).from(r.localModel).all().find(a=>!/embed|nomic|bge|mxbai|gte/i.test(a.name)&&a.file&&(0,h.existsSync)(a.file));return a?{file:a.file,name:a.name,sizeBytes:a.sizeBytes}:null}catch{return null}}async function ab(){try{return(await fetch(`${D}/health`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function ac(){if(await ab())return{up:!0};let a=S();if(!a)return{up:!1,reason:"llama-server not installed"};let b=_();if(!b)return{up:!1,reason:"no embedding model installed (download nomic-embed-text)"};try{await W().catch(()=>{});let c=await $(),d=(0,i.spawn)(a,["-m",b.file,"--embeddings","--host","127.0.0.1","--port","8083","-c","2048","--pooling","mean",...c],{detached:!0,stdio:"ignore"});d.on("error",()=>{}),d.unref()}catch(a){return{up:!1,reason:"spawn failed: "+String(a instanceof Error?a.message:a)}}for(let a=0;a<24;a++)if(await new Promise(a=>setTimeout(a,500)),await ab())return{up:!0,model:b.name};return{up:!1,reason:"embedding server didn't come up in time"}}async function ad(){if((await Z()).up)return{up:!0};let a=S();if(!a)return{up:!1,reason:"llama-server not installed"};let b=aa();if(!b)return{up:!1,reason:"no chat GGUF installed"};try{await W().catch(()=>{});let c=await $(b.sizeBytes),d=(0,i.spawn)(a,["-m",b.file,"--host","127.0.0.1","--port","8082","-c","4096",...c],{detached:!0,stdio:"ignore"});d.on("error",()=>{}),d.unref()}catch(a){return{up:!1,reason:"spawn failed: "+String(a instanceof Error?a.message:a)}}for(let a=0;a<24;a++)if(await new Promise(a=>setTimeout(a,500)),(await Z()).up)return{up:!0,model:b.name};return{up:!1,reason:"llama server didn't come up in time"}}async function ae(){let a=_();return{up:await ab(),model:a?.name??null,installed:!!a}}async function af(){let a=await ac();return(0,p.revalidatePath)("/models"),a}async function ag(){let{org:a}=await (0,s.nP)();await ac().catch(()=>{});let b=await (0,u.xV)(a.id);return(0,p.revalidatePath)("/models"),b}async function ah(){let{workspace:a}=await (0,s.nP)(),b=await Z(),c=new Set((await q.db.select({file:r.localModel.file}).from(r.localModel)).map(a=>a.file)).size,d={status:b.up?"connected":"needs_sync",modelCount:c,lastSync:b.up?new Date:null},[e]=await q.db.select().from(r.provider).where((0,o.Uo)((0,o.eq)(r.provider.workspaceId,a.id),(0,o.eq)(r.provider.catalogId,"llamacpp")));return e?await q.db.update(r.provider).set(d).where((0,o.eq)(r.provider.id,e.id)):await q.db.insert(r.provider).values({id:(0,g.randomUUID)(),workspaceId:a.id,catalogId:"llamacpp",adapter:"local_llamacpp",kind:"local",auth:"local",syncStatus:"implemented",...d}),(0,p.revalidatePath)("/models"),{ok:!0}}async function ai(a){let b;await (0,s.nP)();let c=await Y(),d=[];if(!c)return{up:!1,installed:!1,log:["llama-server not found — install llama.cpp from https://github.com/ggml-org/llama.cpp/releases (or `brew install llama.cpp`), then retry."]};if((await Z()).up)return{up:!0,installed:c,log:[`server already running on ${C}`]};let e=0;if(a){let d,[f]=await q.db.select().from(r.localModel).where((0,o.eq)(r.localModel.id,a));if(f&&(d=f.name,/embed|nomic|bge|mxbai|gte/i.test(d))){let a=await ac();return{up:a.up,installed:c,log:[`${f.name} is an EMBEDDING model — started the RAG embedding server on :8083 (it can't power chat on :8082).`,a.up?`✓ embeddings ready \xb7 ${D}`:`embeddings: ${a.reason??"failed to start"}`]}}b=f?.file,e=f?.sizeBytes??0}if(!b){let a=aa();b=a?.file,e=a?.sizeBytes??0}if(!b||!(0,h.existsSync)(b)){let a=_();if(a){let b=await ac();return{up:!1,installed:c,log:[`Your only local model (${a.name}) is an EMBEDDING model — it powers RAG on the embeddings server (${D}), not the chat server.`,b.up?"✓ embeddings server is running.":`embeddings: ${b.reason??"not started"}`,"Download a chat/instruct GGUF (e.g. Qwen, Llama) below to run the chat server on :8082."]}}return{up:!1,installed:c,log:["no GGUF model on disk — download one below first."]}}try{let a=S()??"llama-server";await W().catch(()=>{});let f=await $(e),g=(0,i.spawn)(a,["-m",b,"--host","127.0.0.1","--port","8082","-c","4096",...f],{detached:!0,stdio:"ignore"}),h="";g.on("error",a=>{h=String(a instanceof Error?a.message:a)}),g.unref(),d.push(`$ llama-server -m ${b.split(/[\\/]/).pop()} --port 8082${f.length?" -ngl 99 (GPU)":" (CPU)"}`);let j=!1;for(let a=0;a<12&&!j;a++)await new Promise(a=>setTimeout(a,1e3)),j=(await Z()).up;return h&&d.push("spawn failed: "+h),d.push(j?`✓ ready \xb7 ${C}`:"still starting — large models take longer; run llama-server in a terminal to see progress."),await ah(),(0,p.revalidatePath)("/models"),{up:j,installed:c,log:d}}catch(a){return{up:!1,installed:c,log:["failed to start: "+String(a instanceof Error?a.message:a)]}}}async function aj(){let a=await Y(),b=[];try{if("win32"===f().platform()){let a=(0,i.execSync)('powershell -NoProfile -Command "Get-NetTCPConnection -LocalPort 8082 -State Listen -ErrorAction SilentlyContinue | Select-Object -ExpandProperty OwningProcess"',{timeout:5e3}).toString().split(/\r?\n/).map(a=>a.trim()).filter(Boolean);if(!a.length)throw Error("not running");for(let b of a)(0,i.execSync)(`taskkill /PID ${b} /F`,{stdio:"ignore",timeout:4e3})}else(0,i.execSync)("pkill -f -- 'llama-server.*--port 8082'",{stdio:"ignore",timeout:4e3});b.push("server stopped")}catch{b.push("no running chat llama-server process found")}return await ah(),(0,p.revalidatePath)("/models"),{up:!1,installed:a,log:b}}(0,A.D)([F,G,H,I,J,K,M,N,O,P,Q,X,Y,Z,ab,ac,ad,ae,af,ag,ah,ai,aj]),(0,d.A)(F,"009eccdbd8ee7a12c8c5e6037c44c345427e77b857",null),(0,d.A)(G,"00a6f8a866f9d7671e3850d3f25187395d1cdeef6c",null),(0,d.A)(H,"408f1d4455ce3aba293795b4205968081c64a31dce",null),(0,d.A)(I,"00c4c4eb1e48dec672a116fcc1a525cc89f93ce44a",null),(0,d.A)(J,"408ca376cae089a7b61c971452b2619f47a766ebf3",null),(0,d.A)(K,"001209f45784c2ad06e7af535a2eac7c54a348e8f4",null),(0,d.A)(M,"40b4709d31000ddc40083f5c93c24fba0dc2fade4a",null),(0,d.A)(N,"406e2a7a9982a456863c1e9d1a651469a3b7df11b1",null),(0,d.A)(O,"40af259b251b9d975acd90fdb75b938a85dd092e12",null),(0,d.A)(P,"407a1b7df649692a474e0c68f65bc272c42a31e5f1",null),(0,d.A)(Q,"40cabe95a8cb363461cae6a250b92ca613290d53de",null),(0,d.A)(X,"0021e4c685125ffac4b144dc6d4c81dd3710661180",null),(0,d.A)(Y,"00a35d54388a0f4a02e750cc6144dd2ff12b2f55f9",null),(0,d.A)(Z,"00152b4edc4d7287b8af6b7a64c52896a52497a467",null),(0,d.A)(ab,"00d9f17839436d5ce775bdcf057d58742c95ef1d99",null),(0,d.A)(ac,"00ee3a6f6ac49f05a24cc2c024cf81881ac059825e",null),(0,d.A)(ad,"00c089367da43f93c202a5deebfce0323413bced96",null),(0,d.A)(ae,"0052f12c8c8995e5610d5bc601e7e7e61eccfe5207",null),(0,d.A)(af,"00567203161585d4795d3ba48ec22910e28af6c836",null),(0,d.A)(ag,"00df413d04089d5ba64dd89b76832c0a5ea513d3da",null),(0,d.A)(ah,"003178c62a94d30782b97e6a7d13969b487c64c957",null),(0,d.A)(ai,"402dd1332ea659aac5210dbf48806895a62c99cbbf",null),(0,d.A)(aj,"009cb0b2d8ee90b44d1c3bb6e87e8750425adc0760",null)}};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";exports.id=7993,exports.ids=[7993],exports.modules={5078:(a,b,c)=>{c.d(b,{k:()=>e});var d=c(2910);let e=(0,d.createServerReference)("60c3370a0609360b8f8f83f153cf524f0622a1ecb2",d.callServer,void 0,d.findSourceMapURL,"saveAgentModel")},19881:(a,b,c)=>{c.d(b,{W:()=>h});var d=c(4374),e=c(74679);let f={anthropic:"anthropic",claude_code:"claude",openai:"openai",codex_cli:"openai",google:"google",google_gemini:"gemini",gemini_cli:"gemini",vertex_ai:"vertexai",mistral:"mistral",deepseek:"deepseek",cohere:"cohere",perplexity:"perplexity",xai_grok:"grok",groq:"groq",ai21:"ai21",nvidia_nim:"nvidia",huggingface:"huggingface",replicate:"replicate",azure_openai:"azure",aws_bedrock:"bedrock",cloudflare:"cloudflare",dashscope:"qwen",zhipu:"zhipu",moonshot:"moonshot",minimax:"minimax",together:"together",openrouter:"openrouter",fireworks:"fireworks",cerebras:"cerebras",ollama:"ollama",ollama_cli:"ollama",lmstudio:"lmstudio",vllm:"vllm",localai:"localai",elevenlabs:"elevenlabs",stability:"stability",jina:"jina",voyage:"voyage"},g={anthropic:["#d97757","An"],openai:["#10a37f","AI"],google_gemini:["#4285f4","G"],google:["#4285f4","G"],mistral:["#fa520f","Mi"],xai_grok:["#1a1a1a","X"],deepseek:["#4d6bfe","DS"],cohere:["#39594d","Co"],ai21:["#e8488a","A2"],perplexity:["#20808d","Px"],groq:["#f55036","Gq"],nvidia_nim:["#76b900","NV"],together:["#0f6fff","To"],fireworks:["#5019c5","Fw"],cerebras:["#f25733","Cb"],huggingface:["#ff9d00","HF"],replicate:["#1a1a1a","Rp"],openrouter:["#6566f1","OR"],litellm:["#00b8a3","LL"],portkey:["#3b5bdb","Pk"],azure_openai:["#0078d4","Az"],aws_bedrock:["#ff9900","Br"],vertex_ai:["#4285f4","Vx"],cloudflare:["#f38020","Cf"],dashscope:["#ff6a00","Qw"],zhipu:["#3859ff","GL"],moonshot:["#16162a","Ki"],minimax:["#e1342c","MM"],ollama:["#0c0c0c","Ol"],llamacpp:["#7a4ddb","Lc"],lmstudio:["#4a5cff","LM"],vllm:["#1668dc","vL"],localai:["#2e7d32","La"],gpt4all:["#5b6cff","G4"],jan:["#1a1a1a","Jn"],claude_code:["#d97757","CC"],codex_cli:["#10a37f","Cx"],gemini_cli:["#4285f4","Gc"],aider:["#14b8a6","Ad"],ollama_cli:["#0c0c0c","Oc"],openclaw:["#e8590c","OC"],hermes_cli:["#6d28d9","Hm"],opencode:["#1a1a1a","Oc"],copilot_cli:["#1f2328","Co"],cursor_cli:["#1a1a1a","Cu"],cline_cli:["#2563eb","Cl"],kilo_code:["#7c3aed","Ki"],voyage:["#5b21b6","Vo"],jina:["#ec4899","Ji"],stability:["#a855f7","St"],elevenlabs:["#1a1a1a","El"]};function h({id:a,size:b=34,radius:c}){let i,j=g[a],k=j?j[0]:"#5b6378",l=j?j[1]:(a||"?").slice(0,2).replace(/[^a-z0-9]/gi,"").toUpperCase(),m=(i=f[a])?`https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg/icons/${i}.svg`:null,[n,o]=(0,e.useState)(!1),p=null!=c?c:Math.round(.28*b),q=m&&!n,r=Math.round(.66*b);return(0,d.jsx)("span",{className:"prov-glyph",style:{width:b,height:b,flex:"0 0 "+b+"px",borderRadius:p,background:q?"#fff":"linear-gradient(150deg, "+k+", color-mix(in srgb, "+k+" 70%, #000))",color:"#fff",display:"grid",placeItems:"center",overflow:"hidden",fontSize:Math.round(.4*b),fontWeight:800,letterSpacing:"-.5px",boxShadow:q?"inset 0 0 0 1px rgba(0,0,0,.08)":"inset 0 1px 0 rgba(255,255,255,.18)"},children:q?(0,d.jsx)("img",{src:m,alt:"",width:r,height:r,loading:"lazy",onError:()=>o(!0),style:{width:r,height:r,objectFit:"contain",display:"block"}}):l})}},27829:(a,b,c)=>{c.d(b,{Y:()=>j});var d=c(4374),e=c(74679),f=c(71898),g=c(31819);let h={cli_claude_code:[{value:"opus",label:"Claude Opus \xb7 most capable"},{value:"sonnet",label:"Claude Sonnet \xb7 balanced"},{value:"haiku",label:"Claude Haiku \xb7 fast"}],cli_codex:[{value:"gpt-5-codex",label:"GPT-5 Codex"},{value:"o4-mini",label:"o4-mini"}],cli_gemini:[{value:"gemini-2.5-pro",label:"Gemini 2.5 Pro"},{value:"gemini-2.5-flash",label:"Gemini 2.5 Flash"}],cli_openclaw:[{value:"(default)",label:"Configured default"},{value:"openai/gpt-5.4",label:"OpenAI \xb7 GPT-5.4"},{value:"anthropic/claude-sonnet-4",label:"Anthropic \xb7 Claude Sonnet 4"}],cli_hermes:[{value:"(default)",label:"Configured default"},{value:"anthropic/claude-sonnet-4.6",label:"Anthropic \xb7 Claude Sonnet 4.6"},{value:"openai/gpt-5.5",label:"OpenAI \xb7 GPT-5.5"}],cli_aider:[{value:"(default)",label:"Configured default"},{value:"anthropic/claude-sonnet-4-6",label:"Anthropic \xb7 Claude Sonnet 4.6"},{value:"openai/gpt-5.2",label:"OpenAI \xb7 GPT-5.2"},{value:"deepseek/deepseek-chat",label:"DeepSeek \xb7 Chat"}],cli_opencode:[{value:"(default)",label:"Configured default"},{value:"anthropic/claude-sonnet-4-6",label:"Anthropic \xb7 Claude Sonnet 4.6"},{value:"openai/gpt-5.2",label:"OpenAI \xb7 GPT-5.2"}],cli_copilot:[{value:"(default)",label:"Configured default"},{value:"claude-sonnet-4.5",label:"Claude Sonnet 4.5"},{value:"gpt-5",label:"GPT-5"}],cli_cursor:[{value:"(default)",label:"Configured default"},{value:"claude-4.5-sonnet",label:"Claude Sonnet 4.5"},{value:"gpt-5",label:"GPT-5"}],cli_cline:[{value:"(default)",label:"Configured default"}],cli_kilo:[{value:"(default)",label:"Configured default"}]};var i=c(69503);function j({adapter:a,value:b,onChange:c,providers:k}){let l=(0,g.k)(),m=function(a){let b=h[a]??null;if(!b)return null;let c=(0,i.L2)(a);return c?b.map(a=>{let b=c.find(b=>b.id===a.value);return b?{value:a.value,label:`${b.label} ${b.version}${b.note?" \xb7 "+b.note:""}`}:a}):b}(a),n=a.startsWith("local_"),[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)("");k.find(b=>b.adapter===a);let s=n?[{value:b||"local",label:l("modelpicker.localGguf")}]:null,t=m??s??o??(b?[{value:b,label:b}]:[]),u=b&&!t.some(a=>a.value===b)?[{value:b,label:b},...t]:t;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.m,{mono:!0,value:b,options:u,placeholder:l("modelpicker.placeholder"),onChange:c}),q&&(0,d.jsx)("div",{className:"form-hint",style:{marginTop:4},children:q})]})}c(42351),c(53290)},42351:(a,b,c)=>{c.d(b,{A:()=>e});var d=c(2910);let e=(0,d.createServerReference)("407f803d3ef7cf99e3cbd266af06ad4aa3846dd82d",d.callServer,void 0,d.findSourceMapURL,"listCatalogModels")},53290:(a,b,c)=>{c.d(b,{E:()=>e});var d=c(2910);let e=(0,d.createServerReference)("408ddd9d10761ca340942c417e3bf16d601e91691e",d.callServer,void 0,d.findSourceMapURL,"listProviderModels")},64478:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(2910);let e=(0,d.createServerReference)("40b4709d31000ddc40083f5c93c24fba0dc2fade4a",d.callServer,void 0,d.findSourceMapURL,"pullModel")},65300:(a,b,c)=>{function d(a,b,c){let d=a.match(/^---\n([\s\S]*?)\n---/);if(!d)return a;let e=d[1].split("\n"),f=!1,g=e.map(a=>a.startsWith(b+":")?(f=!0,`${b}: ${c}`):a);return f||g.push(`${b}: ${c}`),a.replace(/^---\n[\s\S]*?\n---/,()=>`---
|
|
2
|
+
${g.join("\n")}
|
|
3
|
+
---`)}function e(a,b,c){let d=RegExp(`(\\*\\*${b}:\\*\\*\\s*).*`);return d.test(a)?a.replace(d,(a,b)=>`${b}${c}`):a}function f(a,b,c){let d=RegExp(`(^|\\n)##\\s+${b}\\s*\\n[\\s\\S]*?(?=\\n##\\s|$)`);return d.test(a)?a.replace(d,(a,d)=>`${d}## ${b}
|
|
4
|
+
${c}`):a.replace(/\s*$/,"")+`
|
|
5
|
+
|
|
6
|
+
## ${b}
|
|
7
|
+
${c}
|
|
8
|
+
`}c.d(b,{a$:()=>e,c4:()=>f,tT:()=>d})},69503:(a,b,c)=>{c.d(b,{L2:()=>e,Ov:()=>f});let d={cli_claude_code:[{id:"opus",label:"Claude Opus",version:"4.8",note:"most capable"},{id:"sonnet",label:"Claude Sonnet",version:"4.6",note:"balanced"},{id:"haiku",label:"Claude Haiku",version:"4.5",note:"fast"}],cli_codex:[{id:"gpt-5-codex",label:"GPT-5 Codex",version:"5"},{id:"o4-mini",label:"o4-mini",version:"o4"}],cli_gemini:[{id:"gemini-2.5-pro",label:"Gemini Pro",version:"2.5"},{id:"gemini-2.5-flash",label:"Gemini Flash",version:"2.5"}],cli_openclaw:[{id:"(default)",label:"OpenClaw",version:"default",note:"configured provider"},{id:"openai/gpt-5.4",label:"GPT",version:"5.4"},{id:"anthropic/claude-sonnet-4",label:"Claude Sonnet",version:"4"}],cli_hermes:[{id:"(default)",label:"Hermes",version:"default",note:"configured provider"},{id:"anthropic/claude-sonnet-4.6",label:"Claude Sonnet",version:"4.6"},{id:"openai/gpt-5.5",label:"GPT",version:"5.5"}],cli_aider:[{id:"(default)",label:"Aider",version:"default",note:"configured provider"},{id:"anthropic/claude-sonnet-4-6",label:"Claude Sonnet",version:"4.6"},{id:"openai/gpt-5.2",label:"GPT",version:"5.2"},{id:"deepseek/deepseek-chat",label:"DeepSeek Chat",version:""}],cli_opencode:[{id:"(default)",label:"OpenCode",version:"default",note:"configured provider"},{id:"anthropic/claude-sonnet-4-6",label:"Claude Sonnet",version:"4.6"},{id:"openai/gpt-5.2",label:"GPT",version:"5.2"}],cli_copilot:[{id:"(default)",label:"Copilot",version:"default",note:"configured provider"},{id:"claude-sonnet-4.5",label:"Claude Sonnet",version:"4.5"},{id:"gpt-5",label:"GPT",version:"5"}],cli_cursor:[{id:"(default)",label:"Cursor",version:"default",note:"configured provider"},{id:"claude-4.5-sonnet",label:"Claude Sonnet",version:"4.5"},{id:"gpt-5",label:"GPT",version:"5"}],cli_cline:[{id:"(default)",label:"Cline",version:"default",note:"configured provider"}],cli_kilo:[{id:"(default)",label:"Kilo Code",version:"default",note:"configured provider"}]};function e(a){return d[a]??null}function f(a){if(!a)return{label:"",version:""};let b=a.replace(/[-_.\s]\d+(?:x\d+)?[bm]\b/i,""),c=b.match(/(\d+(?:[.\-]\d+){0,2})(?!.*\d)/),d=c?c[1].replace(/-/g,"."):"";return{label:(c?b.slice(0,c.index).replace(/[-_.\s]+$/,""):b).split(/[-_.\s]+/).filter(Boolean).map(a=>/^(gpt|llm|api|ai)$/i.test(a)?a.toUpperCase():a.charAt(0).toUpperCase()+a.slice(1)).join(" ")||a,version:d}}},71898:(a,b,c)=>{c.d(b,{m:()=>i});var d=c(4374),e=c(74679),f=c(43526),g=c(19881),h=c(31819);function i({value:a,options:b,onChange:c,placeholder:j,mono:k,glyph:l,disabled:m,searchable:n}){let o=(0,h.k)(),[p,q]=(0,e.useState)(!1),[r,s]=(0,e.useState)(""),t=(0,e.useRef)(null),u=(0,e.useRef)(null),v=(0,e.useMemo)(()=>(b||[]).map(a=>"string"==typeof a?{value:a,label:a}:a),[b]),w=v.find(b=>b.value===a),x=(n??v.length>8)&&!m,y=r.trim().toLowerCase(),z=x&&y?v.filter(a=>(a.label+" "+a.value+" "+(a.sub||"")).toLowerCase().includes(y)):v;return(0,d.jsxs)("div",{className:"dd"+(p?" open":"")+(m?" disabled":""),ref:t,children:[(0,d.jsxs)("button",{type:"button",className:"dd-btn"+(k?" mono":""),onClick:()=>!m&&q(a=>!a),children:[l&&w&&(0,d.jsx)(g.W,{id:w.glyphId||w.value,size:20}),(0,d.jsx)("span",{className:"dd-val",children:w?w.label:(0,d.jsx)("span",{className:"dd-ph",children:j||o("common.selectEllipsis")})}),(0,d.jsx)(f.I,{name:"chevronDown",size:14})]}),p&&(0,d.jsxs)("div",{className:"dd-menu scroll",children:[x&&(0,d.jsxs)("div",{style:{position:"sticky",top:0,zIndex:1,display:"flex",alignItems:"center",gap:6,padding:"6px 8px",margin:"-4px -4px 4px",background:"var(--bg-elev, var(--bg-active))",borderBottom:"1px solid var(--border)"},children:[(0,d.jsx)(f.I,{name:"search",size:13}),(0,d.jsx)("input",{ref:u,value:r,placeholder:o("common.searchEllipsis"),onChange:a=>s(a.target.value),onKeyDown:a=>{"Enter"===a.key&&z[0]?(c(z[0].value),q(!1)):"Escape"===a.key&&r&&(a.stopPropagation(),s(""))},className:k?"mono":void 0,style:{flex:1,minWidth:0,background:"transparent",border:"none",outline:"none",color:"var(--text)",fontSize:12.5,fontFamily:k?"var(--mono-font)":"inherit"}}),r&&(0,d.jsx)("button",{type:"button",title:o("common.clear"),onClick:()=>{s(""),u.current?.focus()},style:{background:"none",border:"none",color:"var(--text-dim)",cursor:"pointer",display:"flex",padding:0},children:(0,d.jsx)(f.I,{name:"close",size:12})})]}),0===v.length&&(0,d.jsx)("div",{className:"dd-empty",children:o("common.noOptions")}),v.length>0&&0===z.length&&(0,d.jsx)("div",{className:"dd-empty",children:o("dropdown.noMatch",{q:r})}),z.map(b=>(0,d.jsxs)("button",{type:"button",className:"dd-opt"+(b.value===a?" on":""),onClick:()=>{c(b.value),q(!1)},children:[l&&(0,d.jsx)(g.W,{id:b.glyphId||b.value,size:22}),(0,d.jsxs)("span",{className:"dd-opt-main",children:[(0,d.jsx)("span",{className:"dd-opt-label"+(k?" mono":""),children:b.label}),b.sub&&(0,d.jsx)("span",{className:"dd-opt-sub",children:b.sub})]}),b.tag&&(0,d.jsx)("span",{className:"dd-opt-tag",children:b.tag}),b.value===a&&(0,d.jsx)(f.I,{name:"check",size:13})]},b.value))]})]})}},86036:(a,b,c)=>{c.d(b,{bv:()=>t,eH:()=>q,iw:()=>o,jM:()=>n,kq:()=>p,yS:()=>s,z6:()=>r});var d=c(6866),e=c(97603),f=c(31371),g=c(65705),h=c(1890),i=c(53993),j=c(57086),k=c(83963),l=c(65300),m=c(35745);async function n(a,b){let{workspace:c}=await (0,i.nP)();if(a===b)return;let d=Object.fromEntries((await g.db.select().from(h.agent).where((0,e.eq)(h.agent.workspaceId,c.id))).map(a=>[a.id,a])),j=b,k=new Set;for(;j;){if(j===a)return;if(k.has(j))break;k.add(j),j=d[j]?.reportsTo??null}await g.db.update(h.agent).set({reportsTo:b}).where((0,e.Uo)((0,e.eq)(h.agent.id,a),(0,e.eq)(h.agent.workspaceId,c.id))),(0,f.revalidatePath)("/org")}async function o(a,b){let{workspace:c}=await (0,i.nP)();if(a===b)return;let d=Object.fromEntries((await g.db.select().from(h.agent).where((0,e.eq)(h.agent.workspaceId,c.id))).map(a=>[a.handle,a])),j=d[a];if(!j||null!==b&&!d[b])return;let k=b,l=new Set;for(;k;){if(k===a)return;if(l.has(k))break;l.add(k),k=d[k]?.reportsTo??null}await g.db.update(h.agent).set({reportsTo:b}).where((0,e.Uo)((0,e.eq)(h.agent.id,j.id),(0,e.eq)(h.agent.workspaceId,c.id))),(0,f.revalidatePath)("/org")}async function p(a,b){let{org:c,workspace:d}=await (0,i.nP)(),[n]=await g.db.select().from(h.agent).where((0,e.Uo)((0,e.eq)(h.agent.id,a),(0,e.eq)(h.agent.workspaceId,d.id)));if(!n)return;await g.db.update(h.agent).set({...void 0!==b.adapter?{adapter:b.adapter}:{},...void 0!==b.model?{model:b.model}:{},...void 0!==b.temperature?{temperature:b.temperature}:{},...void 0!==b.dailyCapUsd?{dailyCapUsd:b.dailyCapUsd}:{},...void 0!==b.tierFloor?{tierFloor:b.tierFloor}:{}}).where((0,e.eq)(h.agent.id,a));let o=`.claude/agents/${n.handle}/Agent.md`,p=(0,j.sL)(c.id,o);p&&(void 0!==b.adapter&&(p=(0,l.tT)(p,"provider",b.adapter)),void 0!==b.model&&(p=(0,l.tT)(p,"model",b.model)),void 0!==b.temperature&&(p=(0,l.tT)(p,"temperature",b.temperature),p=(0,l.c4)(p,"Behavior",(0,m.T)(b.temperature))),void 0!==b.dailyCapUsd&&(p=(0,l.tT)(p,"dailyCapUsd",b.dailyCapUsd)),void 0!==b.tierFloor&&(p=(0,l.tT)(p,"tierFloor",b.tierFloor)),await (0,k.g)(c.id,o,p)),(0,f.revalidatePath)("/agents/[handle]","page")}async function q(a,b){let{org:c,workspace:d}=await (0,i.nP)(),[k]=await g.db.select().from(h.agent).where((0,e.Uo)((0,e.eq)(h.agent.id,a),(0,e.eq)(h.agent.workspaceId,d.id)));if(k){if(k.image&&k.image.startsWith("uploads/")&&k.image!==b)try{(0,j.EX)(c.id,k.image.split("/").slice(0,2).join("/"))}catch{}await g.db.update(h.agent).set({image:b??null}).where((0,e.eq)(h.agent.id,a)),(0,f.revalidatePath)("/agents/[handle]","page"),(0,f.revalidatePath)("/","layout")}}async function r(a,b){let{org:c,workspace:d}=await (0,i.nP)(),[m]=await g.db.select().from(h.agent).where((0,e.Uo)((0,e.eq)(h.agent.id,a),(0,e.eq)(h.agent.workspaceId,d.id)));if(!m)return;await g.db.update(h.agent).set({persona:b}).where((0,e.eq)(h.agent.id,a));let n=`.claude/agents/${m.handle}/Agent.md`,o=(0,j.sL)(c.id,n);o?(o=(0,l.a$)(o,"Identity",b.identity),o=(0,l.a$)(o,"Ritual",b.ritual),o=(0,l.c4)(o,"System prompt",b.systemPrompt)):o=`---
|
|
9
|
+
handle: ${m.handle}
|
|
10
|
+
name: ${m.name}
|
|
11
|
+
role: ${m.role}
|
|
12
|
+
---
|
|
13
|
+
# ${m.name} — ${m.role}
|
|
14
|
+
|
|
15
|
+
**Identity:** ${b.identity}
|
|
16
|
+
|
|
17
|
+
**Ritual:** ${b.ritual}
|
|
18
|
+
|
|
19
|
+
## System prompt
|
|
20
|
+
${b.systemPrompt}
|
|
21
|
+
`,await (0,k.g)(c.id,n,o),(0,f.revalidatePath)("/agents/[handle]","page")}async function s(a,b,c){let{workspace:d}=await (0,i.nP)();await g.db.update(h.agent).set({orgX:Math.round(b),orgY:Math.round(c)}).where((0,e.Uo)((0,e.eq)(h.agent.handle,a),(0,e.eq)(h.agent.workspaceId,d.id)))}async function t(a,b){let{workspace:c}=await (0,i.nP)(),[d]=await g.db.select().from(h.agent).where((0,e.Uo)((0,e.eq)(h.agent.id,a),(0,e.eq)(h.agent.workspaceId,c.id)));d&&(await g.db.update(h.agent).set({rag:b}).where((0,e.eq)(h.agent.id,a)),(0,f.revalidatePath)("/agents/[handle]","page"))}(0,c(74252).D)([n,o,p,q,r,s,t]),(0,d.A)(n,"6043cdc20ab43d5c93fa9c29cf113bc9e58ac85bc4",null),(0,d.A)(o,"6037b9d6040ab1ed0adf0dd4f116ea3fe4db2fe7f3",null),(0,d.A)(p,"60c3370a0609360b8f8f83f153cf524f0622a1ecb2",null),(0,d.A)(q,"60281705dd6eeb50b1e9a5fe9f5c190743c7e25d8f",null),(0,d.A)(r,"60a280e6fbace449161caafb3a74ec796eaf55387f",null),(0,d.A)(s,"702f0e05dc1b39847b36bf665da5c5aa55f40d35fa",null),(0,d.A)(t,"601e68a1cf66bfc20d5c3d59c2309ab430d730362b",null)},96214:(a,b,c)=>{c.d(b,{aO:()=>H,AO:()=>M,EC:()=>O,uR:()=>L,Po:()=>J,iw:()=>P,xf:()=>Q,x1:()=>I,WU:()=>N});var d=c(6866),e=c(77598),f=c(97603),g=c(31371),h=c(65705),i=c(1890),j=c(53993),k=c(38926),l=c(29803),m=c(70149);async function n(a,b,c=12e3){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{let c,e=await fetch(a,{headers:b,signal:d.signal}),f=await e.text();try{c=JSON.parse(f)}catch{c=void 0}return{ok:e.ok,status:e.status,json:c,error:e.ok?void 0:f.slice(0,200)||e.statusText}}catch(a){return{ok:!1,status:0,error:a instanceof Error?a.message:String(a)}}finally{clearTimeout(e)}}function o(a){return a&&"object"==typeof a?Array.isArray(a.data)?a.data.length:Array.isArray(a.models)?a.models.length:0:0}async function p(a,b){let c=a.defaultAdapter;if(c.startsWith("cli_")){let a=(0,m.hW)(c);return await (0,m.$g)(a)?{ok:!0,count:(m.w5[c]??m.w5.cli_claude_code).length}:{ok:!1,count:0,error:`${a} CLI not found on PATH`}}if("local_ollama"===c||"ollama"===a.id||"ollama_openai"===a.id){let b=a.baseUrl||"http://127.0.0.1:11434",c=await n(b.replace(/\/$/,"")+"/api/tags",{});return c.ok?{ok:!0,count:o(c.json)}:{ok:!1,count:0,error:c.error||"Ollama not reachable at "+b}}if("local_runtime"===a.category){let c=a.baseUrl||"http://127.0.0.1:8080",d=await n(c.replace(/\/$/,"")+"/v1/models",b?{Authorization:"Bearer "+b}:{});return d.ok?{ok:!0,count:o(d.json)}:{ok:!1,count:0,error:d.error||"local runtime not reachable"}}if(!b)return{ok:!1,count:0,error:"no API key in vault — connect with a key first"};if("http_anthropic"===c||"anthropic"===a.id){let a=await n("https://api.anthropic.com/v1/models",{"x-api-key":b,"anthropic-version":"2023-06-01"});return a.ok?{ok:!0,count:o(a.json)}:{ok:!1,count:0,error:a.error||"auth failed ("+a.status+")"}}let d=(a.baseUrl||"https://api.openai.com/v1").replace(/\/$/,""),e=d.endsWith("/models")?d:d+(d.includes("/v1")?"/models":"/v1/models"),f=await n(e,{Authorization:"Bearer "+b});return f.ok?{ok:!0,count:o(f.json)}:{ok:!1,count:0,error:f.error||"auth failed ("+f.status+")"}}var q=c(73024),r=c(76760),s=c(57086);let t={anthropic:"anthropic",openai:"openai",google_gemini:"google",xai_grok:"xai",deepseek:"deepseek",cohere:"cohere",groq:"groq",nvidia_nim:"nvidia",together:"togetherai",fireworks:"fireworks-ai",cerebras:"cerebras",perplexity:"perplexity",openrouter:"openrouter",mistral:"mistral",moonshot:"moonshotai",dashscope:"alibaba",zhipu:"zhipuai",azure_openai:"azure",aws_bedrock:"amazon-bedrock",vertex_ai:"google-vertex",claude_code:"anthropic",gemini_cli:"google",codex_cli:"openai"};function u(a){return t[a]?t[a]:a.replace(/_(grok|gemini|nim|cli|openai|api|server|rt)$/g,"").replace(/_/g,"-")}let v={anthropic:["sonnet-4","sonnet","opus-4","opus"],openai:["gpt-5.2","gpt-5.1","gpt-5","gpt-4.1","o4"],google:["gemini-3-pro","gemini-3","gemini-2.5-pro","pro"],xai:["grok-4","grok-3","grok"],groq:["llama-4","llama-3.3","llama-3.1"],deepseek:["deepseek-chat","deepseek-v3","deepseek-reasoner"],mistral:["mistral-large","mistral-medium"],openrouter:["claude-sonnet","gpt-5","gemini"]},w=(a,b,c,d,e,f,g,h)=>({id:a,name:b,context:c,outputLimit:d,inputCost:e,outputCost:f,caps:{reasoning:!!g.reasoning,tools:!!g.tools,vision:!!g.vision},released:h}),x={anthropic:[w("claude-opus-4-8","Claude Opus 4.8",1e6,64e3,5,25,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("claude-opus-4-7","Claude Opus 4.7",1e6,64e3,5,25,{reasoning:!0,tools:!0,vision:!0},"2025-12-01"),w("claude-sonnet-4-6","Claude Sonnet 4.6",1e6,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2026-01-15"),w("claude-haiku-4-5","Claude Haiku 4.5",2e5,32e3,1,5,{tools:!0,vision:!0},"2025-10-01")],openai:[w("gpt-5.2","GPT-5.2",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2026-03-01"),w("gpt-5.1","GPT-5.1",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-12-01"),w("gpt-5","GPT-5",4e5,128e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-08-01"),w("o4-mini","o4-mini",2e5,1e5,1.1,4.4,{reasoning:!0,tools:!0},"2025-04-01")],google:[w("gemini-3-pro","Gemini 3 Pro",2e6,64e3,2,12,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("gemini-3-flash","Gemini 3 Flash",1e6,64e3,.3,2.5,{tools:!0,vision:!0},"2026-02-01"),w("gemini-2.5-pro","Gemini 2.5 Pro",2e6,64e3,1.25,10,{reasoning:!0,tools:!0,vision:!0},"2025-06-01")],xai:[w("grok-4.3","Grok 4.3",256e3,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2026-02-01"),w("grok-4","Grok 4",256e3,64e3,3,15,{reasoning:!0,tools:!0,vision:!0},"2025-09-01"),w("grok-3","Grok 3",131072,32e3,3,15,{tools:!0,vision:!0},"2025-02-01")],deepseek:[w("deepseek-chat","DeepSeek Chat",128e3,8e3,.27,1.1,{tools:!0},"2025-12-01"),w("deepseek-reasoner","DeepSeek Reasoner",128e3,64e3,.55,2.19,{reasoning:!0,tools:!0},"2025-12-01")],groq:[w("llama-4-scout","Llama 4 Scout",131072,8e3,.11,.34,{tools:!0,vision:!0},"2025-04-01"),w("llama-3.3-70b","Llama 3.3 70B",131072,32e3,.59,.79,{tools:!0},"2024-12-01")]},y=null;function z(){return(0,r.join)((0,s.r$)(),"cache","models-dev.json")}async function A(){try{let a=await fetch("https://models.dev/api.json",{signal:AbortSignal.timeout(1e4),headers:{accept:"application/json"}});if(!a.ok)return null;let b=await a.json();if(!b||"object"!=typeof b)return null;let c={};for(let[a,d]of Object.entries(b)){let b=d?.models,e=function(a){if(!a||"object"!=typeof a)return[];let b=[];for(let[c,d]of Object.entries(a)){let a=d??{},e=String(a.id??c),f=e.includes("/")?e.split("/").pop():e;if(!f)continue;let g=a.modalities??{},h=Array.isArray(g.input)?g.input:[],i=a.limit??{},j=a.cost??{},k={reasoning:!0===a.reasoning,tools:!0===a.tool_call,vision:!0===a.attachment||h.includes("image")};b.push({id:f,name:String(a.name??f),context:Number(i.context??0)||0,outputLimit:Number(i.output??0)||0,inputCost:Number(j.input??0)||0,outputCost:Number(j.output??0)||0,caps:k,released:"string"==typeof a.release_date?a.release_date:""})}return b}(b);e.length&&(c[a]=e)}return Object.keys(c).length?c:null}catch{return null}}async function B(){if(y&&Date.now()-y.at<864e5)return y.data;let a=function(){try{let a=z();if(!(0,q.existsSync)(a))return null;let b=JSON.parse((0,q.readFileSync)(a,"utf8"));if(!b?.data||"object"!=typeof b.data)return null;return{at:Number(b.at??(0,q.statSync)(a).mtimeMs),data:b.data}}catch{return null}}();if(a&&Date.now()-a.at<864e5)return y=a,a.data;let b=await A();if(b){y={at:Date.now(),data:b};try{(0,q.mkdirSync)((0,r.join)((0,s.r$)(),"cache"),{recursive:!0}),(0,q.writeFileSync)(z(),JSON.stringify({at:Date.now(),data:b}),"utf8")}catch{}return b}return a?(y=a,a.data):{}}async function C(a){let b=u(a),c=await B();return c[b]?.length?c[b]:x[b]??[]}async function D(a,b,c=9e3){try{let d=await fetch(a,{headers:b,signal:AbortSignal.timeout(c)});if(!d.ok)return null;return await d.json()}catch{return null}}async function E(a){let{catalogId:b,adapter:c,baseUrl:d,apiKey:e}=a;if(c.startsWith("cli_"))return"cli_opencode"===c?(await (0,m.ZB)("opencode")).map(a=>({id:a})):"cli_aider"===c?(await (0,m.ZB)("aider")).map(a=>({id:a})):null;if(/ollama/i.test(b)||c.includes("ollama")){let a=(d||"http://127.0.0.1:11434").replace(/\/$/,"").replace(/\/v1$/,""),b=await D(`${a}/api/tags`,{});return b?(b.models??[]).map(a=>({id:String(a.name??"")})).filter(a=>a.id):[]}if(!d)return null;let f=d.replace(/\/$/,""),g="http_anthropic"===c||"anthropic"===b,h=g?"https://api.anthropic.com/v1/models":f.endsWith("/models")?f:f+(f.includes("/v1")?"/models":"/v1/models"),i=g?e?{"x-api-key":e,"anthropic-version":"2023-06-01"}:{}:e?{authorization:`Bearer ${e}`}:{},j=await D(h,i);return j?(Array.isArray(j.data)?j.data:Array.isArray(j.models)?j.models:[]).map(a=>{let b=String(a.id??a.name??"");if(!b)return null;let c={id:b};"string"==typeof a.display_name?c.name=a.display_name:"string"==typeof a.name&&(c.name=a.name),"number"==typeof a.context_length&&(c.context=a.context_length);let d=a.pricing;if(d){let a=Number(d.prompt),b=Number(d.completion);Number.isFinite(a)&&a>0&&(c.inputCost=1e6*a),Number.isFinite(b)&&b>0&&(c.outputCost=1e6*b)}return c}).filter(a=>!!a).slice(0,200):[]}async function F(){let a=await B(),b=new Map;for(let c of Object.values(a))for(let a of c){let c=a.id.toLowerCase();b.has(c)||b.set(c,a)}return b}async function G(a,b){let c=await C(a);if(!b||0===b.length)return c;let d=new Map;for(let a of c)d.set(a.id.toLowerCase(),a);let e=await F(),f=a=>{let b=a.toLowerCase(),c=a.includes("/")?a.split("/").pop().toLowerCase():b;return d.get(b)??d.get(c)??e.get(b)??e.get(c)},g=[];for(let a of b){let b=f(a.id);g.push({id:a.id,name:a.name||b?.name||a.id,context:a.context??b?.context??0,outputLimit:b?.outputLimit??0,inputCost:a.inputCost??b?.inputCost??0,outputCost:a.outputCost??b?.outputCost??0,caps:b?.caps??{reasoning:!1,tools:!1,vision:!1},released:b?.released??""})}return g}async function H(a,b){let{workspace:c}=await (0,j.nP)(),d=(0,l.kH)(a);if(!d)return;let f=(0,e.randomUUID)();await h.db.insert(i.provider).values({id:f,workspaceId:c.id,catalogId:a,adapter:d.defaultAdapter,kind:"cli"===d.category?"cli":"local_runtime"===d.category?"local":"cloud",auth:d.connectionTypes.includes("api_key")?"api_key":d.connectionTypes[0],status:"needs_sync",syncStatus:d.supportsModelSync?"implemented":"manual"}),b&&await (0,k.IW)(c.id,`${a}_api_key`,b,f),(0,g.revalidatePath)("/models"),await I(f)}async function I(a){let b,{workspace:c}=await (0,j.nP)(),[d]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,c.id)));if(!d)return{ok:!1,error:"not found"};let e=(0,l.kH)(d.catalogId);if(!e)return{ok:!1,error:"unknown provider"};let n=await (0,k.r6)(c.id,`${d.catalogId}_api_key`),o=await p(e,n),q=null;if("cli"===e.category){let a=(0,m.hW)(e.defaultAdapter);b=(q=await (0,m.$g)(a).catch(()=>null))?await (0,m.Kp)(a).catch(()=>"unknown"):"needs_login"}else b="local_runtime"===e.category?o.ok?"ready":"unknown":n&&o.ok?"ready":"needs_key";return await h.db.update(i.provider).set({status:o.ok?"connected":"error",modelCount:o.count,lastSync:new Date,cliVersion:q,authState:b}).where((0,f.eq)(i.provider.id,a)),o.ok&&await J(a).catch(()=>{}),(0,g.revalidatePath)("/models"),o}async function J(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{ok:!1,count:0,error:"not found"};let d=await K(c);return(0,g.revalidatePath)("/models"),d}async function K(a){let b,c,d,g=(0,l.kH)(a.catalogId);if(!g)return{ok:!1,count:0,error:"unknown provider"};let j=await (0,k.r6)(a.workspaceId,`${a.catalogId}_api_key`),n="cli"===g.category;try{b=await E({catalogId:a.catalogId,adapter:a.adapter,baseUrl:g.baseUrl,apiKey:j})}catch{b=null}if(n){let e=(0,m.hW)(a.adapter);d=(c=await (0,m.$g)(e).catch(()=>null))?await (0,m.Kp)(e).catch(()=>"unknown"):"needs_login",null===b&&(b=(m.w5[a.adapter]??[]).filter(a=>"(default)"!==a).map(a=>({id:a})))}if(null===b)return{ok:!0,count:0};let o=await G(a.catalogId,b),p=new Date,q=o.length?function(a,b){if(!b.length)return"";let c=v[u(a)];if(c)for(let a of c){let c=b.filter(b=>b.id.toLowerCase().includes(a));if(c.length)return c.sort((a,b)=>(b.released||"").localeCompare(a.released||"")),c[0].id}let d=b.filter(a=>a.released);return d.length?(d.sort((a,b)=>b.released.localeCompare(a.released)),d[0].id):b[0].id}(a.catalogId,o):null;if(o.length)await h.db.delete(i.providerModel).where((0,f.eq)(i.providerModel.providerId,a.id)),await h.db.insert(i.providerModel).values(o.map(b=>({id:(0,e.randomUUID)(),workspaceId:a.workspaceId,providerId:a.id,catalogId:a.catalogId,modelId:b.id,name:b.name,context:b.context,outputLimit:b.outputLimit,inputCost:b.inputCost,outputCost:b.outputCost,caps:b.caps,released:b.released,isDefault:b.id===q,lastSeen:p})));else if(!n)return{ok:!1,count:0,error:"no models returned"};let r=n&&!c?"needs_sync":"connected";return await h.db.update(i.provider).set({status:r,modelCount:o.length||(n?a.modelCount:0),lastSync:p,defaultModel:q||a.defaultModel,...n?{cliVersion:c??null,authState:d??null}:{}}).where((0,f.eq)(i.provider.id,a.id)),{ok:!0,count:o.length}}async function L(a=12){let b,c=new Date(Date.now()-60*a*6e4);try{b=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.status,"connected"),(0,f.or)((0,f.kZ)(i.provider.lastSync),(0,f.lt)(i.provider.lastSync,c))))}catch{return{refreshed:0}}let d=0;for(let a of b.slice(0,50))try{let b=await K(a);b.ok&&b.count>0&&d++}catch{}return{refreshed:d}}async function M(a){let{workspace:b}=await (0,j.nP)(),c=(await h.db.select().from(i.providerModel).where((0,f.Uo)((0,f.eq)(i.providerModel.providerId,a),(0,f.eq)(i.providerModel.workspaceId,b.id)))).map(a=>({id:a.modelId,name:a.name,context:a.context,outputLimit:a.outputLimit,inputCost:a.inputCost,outputCost:a.outputCost,caps:a.caps??{reasoning:!1,tools:!1,vision:!1},released:a.released,isDefault:a.isDefault}));return c.sort((a,b)=>Number(b.isDefault)-Number(a.isDefault)||(b.released||"").localeCompare(a.released||"")||a.name.localeCompare(b.name)),{models:c}}async function N(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{ok:!1,error:"not found"};let d=(0,l.kH)(c.catalogId);if(!d)return{ok:!1,error:"unknown provider"};let e=await (0,k.r6)(b.id,`${c.catalogId}_api_key`),m=await p(d,e);return await h.db.update(i.provider).set({status:m.ok?"connected":"error"}).where((0,f.eq)(i.provider.id,a)),(0,g.revalidatePath)("/models"),{ok:m.ok,error:m.error}}async function O(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));if(!c)return{models:[],error:"not found"};let d=(0,l.kH)(c.catalogId);if(!d?.baseUrl)return{models:[],error:"no public endpoint for this provider"};let e=await (0,k.r6)(b.id,`${c.catalogId}_api_key`),g=d.baseUrl.replace(/\/$/,"");try{let a=/ollama/i.test(c.catalogId)||c.adapter.includes("ollama")?`${g.replace(/\/v1$/,"")}/api/tags`:`${g}/models`,b=await fetch(a,{headers:e?{authorization:`Bearer ${e}`}:{},signal:AbortSignal.timeout(8e3)});if(!b.ok)return{models:[],error:`endpoint ${b.status}`};let d=await b.json();return{models:(d.data??d.models??[]).map(a=>a.id??a.name??"").filter(Boolean).slice(0,80)}}catch(b){let a=String(b instanceof Error?b.message:b);return{models:[],error:/abort|fetch failed|ECONN/i.test(a)?"endpoint unreachable":a}}}async function P(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));c&&await (0,k.Kh)(b.id,`${c.catalogId}_api_key`),await h.db.delete(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id))),(0,g.revalidatePath)("/models")}async function Q(a){let{workspace:b}=await (0,j.nP)(),[c]=await h.db.select().from(i.provider).where((0,f.Uo)((0,f.eq)(i.provider.id,a),(0,f.eq)(i.provider.workspaceId,b.id)));c&&(await (0,k.Kh)(b.id,`${c.catalogId}_api_key`),await h.db.update(i.provider).set({auth:"none",status:"needs_sync",modelCount:0}).where((0,f.eq)(i.provider.id,a)),(0,g.revalidatePath)("/models"))}(0,c(74252).D)([H,I,J,L,M,N,O,P,Q]),(0,d.A)(H,"6049c59fe05aeca70997ac50ed65f59dfbe72434f8",null),(0,d.A)(I,"40dfd5e28d89607894b4d7c5da59463899b9a6568f",null),(0,d.A)(J,"4073f99a66405a8f2309e35be0746d7b7b3c5a34a7",null),(0,d.A)(L,"408ec6c0614fc572addf1b2179daedf12032d27d32",null),(0,d.A)(M,"407f803d3ef7cf99e3cbd266af06ad4aa3846dd82d",null),(0,d.A)(N,"4058c65420fcd3e7982fc48b78ca683b3a2938e6e6",null),(0,d.A)(O,"408ddd9d10761ca340942c417e3bf16d601e91691e",null),(0,d.A)(P,"4032f4be7f847c05ba39154e7d151b6ca63a1c5406",null),(0,d.A)(Q,"40ed0cff572629c648290a03259f8066a304253581",null)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=850,exports.ids=[850],exports.modules={20850:(a,b,c)=>{c.d(b,{pp:()=>l,VX:()=>
|
|
1
|
+
"use strict";exports.id=850,exports.ids=[850],exports.modules={20850:(a,b,c)=>{c.d(b,{pp:()=>l,VX:()=>s,CS:()=>v,Vd:()=>w,ZF:()=>q});var d=c(31421),e=c(73024),f=c(76760),g=c(77030),h=c(18612);c(37067),c(38522);let i=new Map,j="win32"===process.platform,k=new Map;function l(a){let b=(0,h.HZ)(a),c=[b];for(let a of["packages","apps","app","web","client","frontend","backend","server","api"]){let d=(0,f.join)(b,a);if((0,e.existsSync)(d))try{for(let a of(0,e.readdirSync)(d,{withFileTypes:!0}))a.isDirectory()&&c.push((0,f.join)(d,a.name))}catch{}}let d="$PORT";for(let a of c){let b=function(a){let b=(0,f.join)(a,"package.json");if(!(0,e.existsSync)(b))return null;try{let c=JSON.parse((0,e.readFileSync)(b,"utf8")),d=c.scripts??{},g=d.dev?"dev":d.start?"start":d.serve?"serve":null;if(!g)return null;let h=(0,e.existsSync)((0,f.join)(a,"pnpm-lock.yaml"))?"pnpm":(0,e.existsSync)((0,f.join)(a,"yarn.lock"))?"yarn":"npm",i=!(0,e.existsSync)((0,f.join)(a,"node_modules"));return{dir:a,kind:"node",name:c.name??"project",label:`${h} ${g}`,install:i?{cmd:h,args:["install"]}:void 0,runCmd:h,runArgs:"npm"===h?["run",g]:[g]}}catch{return null}}(a);if(b)return b}for(let a of c){let b=b=>(0,e.existsSync)((0,f.join)(a,b)),c=a.split(/[\\/]/).pop()||"project",g=b("requirements.txt")?{cmd:"python",args:["-m","pip","install","-r","requirements.txt"]}:void 0;if(b("manage.py"))return{dir:a,kind:"python",name:c,label:"django runserver",install:g,runCmd:"python",runArgs:["manage.py","runserver",`127.0.0.1:${d}`]};if(b("main.py")){let b="";try{b=(0,e.readFileSync)((0,f.join)(a,"main.py"),"utf8")}catch{}if(/FastAPI\s*\(/.test(b))return{dir:a,kind:"python",name:c,label:"uvicorn",install:g,runCmd:"python",runArgs:["-m","uvicorn","main:app","--host","127.0.0.1","--port",d]};return{dir:a,kind:"python",name:c,label:"python main.py",install:g,runCmd:"python",runArgs:["main.py"]}}if(b("go.mod"))return{dir:a,kind:"go",name:c,label:"go run",runCmd:"go",runArgs:["run","."]};if(b("Cargo.toml"))return{dir:a,kind:"rust",name:c,label:"cargo run",runCmd:"cargo",runArgs:["run"]};if(b("server.js"))return{dir:a,kind:"static",name:c,label:"node server.js",runCmd:"node",runArgs:["server.js"]}}return null}let m=new Map;async function n(a){let b=m.get(a);if(b&&Date.now()-b.at<6e4)return b.ok;let c=await new Promise(b=>{try{let c=(0,d.spawn)(a,["--version"],{shell:j,windowsHide:!0}),e=!1,f=a=>{e||(e=!0,b(a))};c.on("error",()=>f(!1)),c.on("close",()=>f(!0)),setTimeout(()=>{try{c.kill()}catch{}f(!0)},8e3)}catch{b(!1)}});return m.set(a,{ok:c,at:Date.now()}),c}function o(a,b,c){for(let d of c.split(/\r?\n/)){let c=d.trimEnd();c&&(a.logs.push({c:b,t:c}),"starting"===a.status&&/(ready|listening|localhost:|started server|compiled)/i.test(c)&&(a.status="running"))}a.logs.length>400&&a.logs.splice(0,a.logs.length-400)}let p=new Map;async function q(a,b){let c=k.get(a);if(c&&"stopped"!==c.status&&"error"!==c.status&&!c.proc.killed)return u(c);let d=p.get(a);if(d)return d;let e=r(a,b);p.set(a,e);try{return await e}finally{p.delete(a)}}async function r(a,b){let c,h,i=l(b);if(!i)return{running:!1,status:"error",logs:[{c:"err",t:"No runnable project found (no package.json with a dev/start script, or a Python/Go/Rust project, under the workspace)."}]};if("node"!==i.kind&&"static"!==i.kind&&!await n(i.runCmd))return{running:!1,status:"error",port:void 0,url:void 0,project:i.label,logs:[{c:"err",t:`Toolchain not found: '${i.runCmd}' is not installed or not on PATH. This ${i.kind} starter needs it to boot — install ${i.kind} (or pick a Node stack).`}]};try{c=await function(a=4173,b=4999){return new Promise((c,d)=>{let e=a=>{if(a>b)return d(Error("no free port"));let f=(0,g.createServer)();f.once("error",()=>e(a+1)),f.once("listening",()=>f.close(()=>c(a))),f.listen(a,"127.0.0.1")};e(a)})}()}catch{return{running:!1,status:"error",logs:[{c:"err",t:"No free port available."}]}}let m={...process.env,PORT:String(c),BROWSER:"none",NODE_ENV:"development"},p=i.runArgs.map(a=>a.includes("$PORT")?a.replace("$PORT",String(c)):a),q={proc:null,port:c,url:`http://127.0.0.1:${c}`,status:"starting",dir:i.dir,kind:i.kind,label:i.label,logs:[],startedAt:Date.now()};o(q,"info",`project: ${i.name} \xb7 ${i.label} \xb7 :${c}`);let r=(0,f.join)(i.dir,".constella-pyinstalled"),s=i.install&&("node"===i.kind||"python"===i.kind&&!(0,e.existsSync)(r));if(i.install&&s){o(q,"info",`$ ${i.install.cmd} ${i.install.args.join(" ")}`),k.set(a,q);let b=(0,d.spawn)(i.install.cmd,i.install.args,{cwd:i.dir,env:m,shell:j,windowsHide:!0});b.stdout?.on("data",a=>o(q,"out",a.toString())),b.stderr?.on("data",a=>o(q,"err",a.toString()));let c=await new Promise(a=>{b.on("close",a),b.on("error",()=>a(-1))});if("python"===i.kind&&0===c)try{(0,e.writeFileSync)(r,"ok")}catch{}}q.proc=h=(0,d.spawn)(i.runCmd,p,{cwd:i.dir,env:m,shell:j,windowsHide:!0,detached:!j}),h.stdout?.on("data",a=>o(q,"out",a.toString())),h.stderr?.on("data",a=>o(q,"err",a.toString())),h.on("error",a=>{q.status="error",o(q,"err",/ENOENT/.test(String(a))?`'${i.runCmd}' not found — install the ${i.kind} toolchain or pick a Node stack.`:"spawn failed: "+String(a instanceof Error?a.message:a))}),h.on("close",a=>{"stopped"!==q.status&&(q.status=0===a?"stopped":"error",o(q,"info",`process exited (${a})`))}),k.set(a,q);let t="go"===i.kind||"rust"===i.kind?12e4:"python"===i.kind?6e4:3e4;return await x(q.url,t).then(a=>{a&&"starting"===q.status&&(q.status="running")}),u(q)}async function s(a,b){if(!l(b))return{ok:!0,detail:"no runnable project to gate"};let c=v(a);if("running"===c.status&&c.url&&await x(c.url,3e3))return{ok:!0,detail:"dev server still reachable"};("error"===c.status||"stopped"===c.status)&&await t(a);let d=await q(a,b);if(("running"===d.status||"starting"===d.status)&&d.url&&await x(d.url,6e3))return{ok:!0,detail:"booted"};let e=d.logs.map(a=>a.t).join(" | ");return/Toolchain not found|not found —|not installed/.test(e)?{ok:!0,detail:"toolchain unavailable — boot gate skipped (cannot validate)"}:{ok:!1,detail:d.logs.slice(-5).map(a=>a.t).join(" | ")||"dev server failed to boot"}}async function t(a){let b=k.get(a);if(!b)return{running:!1,status:"stopped",logs:[]};b.status="stopped";try{b.proc?.pid&&(j?(0,d.spawn)("taskkill",["/PID",String(b.proc.pid),"/T","/F"],{windowsHide:!0}):process.kill(-b.proc.pid,"SIGKILL"))}catch{try{b.proc?.kill("SIGKILL")}catch{}}let c=i.get(a);if(c){try{c.server.close()}catch{}i.delete(a)}return o(b,"info","server stopped"),u(b)}function u(a){return{running:"running"===a.status||"starting"===a.status,status:a.status,port:a.port,url:a.url,project:a.label,logs:a.logs.slice(-120)}}function v(a){let b=k.get(a);return b?u(b):{running:!1,status:"none",logs:[]}}function w(a){let b=k.get(a);return b&&("running"===b.status||"starting"===b.status)?b.url:null}async function x(a,b){let c=Date.now()+b;for(;Date.now()<c;){try{return await fetch(a,{signal:AbortSignal.timeout(2e3)}),!0}catch{}await new Promise(a=>setTimeout(a,1e3))}return!1}}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=8561,exports.ids=[7336,8561],exports.modules={4719:(a,b,c)=>{c.d(b,{ViewChrome:()=>d});let d=(0,c(62060).registerClientReference)(function(){throw Error("Attempted to call ViewChrome() from the server but ViewChrome is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\shell\\view-chrome.tsx","ViewChrome")},5323:(a,b,c)=>{c.d(b,{_:()=>g});var d=c(61576),e=c(1308),f=c(4719);function g({title:a,sub:b,right:c,icon:h,flush:i,children:j}){return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(e.b,{title:a}),(0,d.jsx)(f.ViewChrome,{title:a,sub:b,right:c,icon:h,flush:i,children:j})]})}},9875:(a,b,c)=>{c.d(b,{I:()=>l});var d=c(73024),e=c(76760),f=c(3188);let g=/(^|\/)(\.env(\.[\w.-]+)?|id_[rd]sa\w*|.*\.(pem|key|p12|pfx|keystore|jks|ppk|asc)|credentials?\.json|service[-_]?account[\w.-]*\.json|.*\.(sql|dump|bak|sqlite3?|db)|npm-debug\.log|.*\.local)$/i,h=/(\.env\.(example|sample|template|dist)|\.env-example)$/i,i=[{kind:"AWS access key",re:/\bAKIA[0-9A-Z]{16}\b/},{kind:"GitHub token",re:/\bgh[posru]_[A-Za-z0-9]{30,}\b/},{kind:"OpenAI/Anthropic key",re:/\bsk-[A-Za-z0-9_-]{20,}\b/},{kind:"Google API key",re:/\bAIza[0-9A-Za-z_-]{30,}\b/},{kind:"Slack token",re:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/},{kind:"Private key",re:/-----BEGIN (?:RSA |EC |OPENSSH |DSA |PGP )?PRIVATE KEY-----/},{kind:"JWT",re:/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{6,}\b/},{kind:"DB URL with credentials",re:/\b(?:postgres(?:ql)?|mysql|mongodb(?:\+srv)?|redis|amqp):\/\/[^\s:@/]+:[^\s:@/]+@/i},{kind:"Telegram bot token",re:/\b\d{6,}:[A-Za-z0-9_-]{35,}\b/},{kind:"Hardcoded secret",re:/\b(password|passwd|secret|api[_-]?key|access[_-]?token|auth[_-]?token|client[_-]?secret|private[_-]?key)\b\s*[:=]\s*['"][^'"\n]{6,}['"]/i}],j=/(your[_-]?|xxx+|<[^>]+>|change[_-]?me|example|placeholder|\*{3,}|•|dummy|todo|redacted|\.\.\.)/i,k=/(^|\/)(node_modules|\.git|\.next|dist|build|out|\.turbo|coverage|uploads|archives|\.testdev|vendor)\//;async function l(a){let b=await (0,f.d1)("git",["status","--porcelain","-z","--untracked-files=all"],{cwd:a});if(0!==b.code)return{findings:[],scanned:0,files:0};let c=[],l=b.stdout.split("\0");for(let a=0;a<l.length;a++){let b=l[a];if(!b||b.length<3)continue;let d=b[0],e=b[1],f=b.slice(3);("R"===d||"C"===d||"R"===e||"C"===e)&&a++,"D"!==d&&"D"!==e&&(!f||k.test(f+"/")||c.push(f))}let m=[],n=0;for(let b of c.slice(0,3e3)){g.test(b)&&!h.test(b)&&m.push({file:b,line:0,kind:"must-not-commit file",preview:b.split("/").pop()??b});let c=(0,e.join)(a,b),f=0;try{f=(0,d.statSync)(c).size}catch{continue}if(f>2097152)continue;let k="";try{k=(0,d.readFileSync)(c,"utf8")}catch{continue}if(k.includes("\0"))continue;n++;let l=k.split("\n");for(let a=0;a<l.length&&m.length<300;a++){let c=l[a];if(!(c.length>4e3))for(let{kind:d,re:e}of i){let f=e.exec(c);if(f
|
|
1
|
+
"use strict";exports.id=8561,exports.ids=[7336,8561],exports.modules={4719:(a,b,c)=>{c.d(b,{ViewChrome:()=>d});let d=(0,c(62060).registerClientReference)(function(){throw Error("Attempted to call ViewChrome() from the server but ViewChrome is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Usuario\\Documents\\constella\\src\\components\\shell\\view-chrome.tsx","ViewChrome")},5323:(a,b,c)=>{c.d(b,{_:()=>g});var d=c(61576),e=c(1308),f=c(4719);function g({title:a,sub:b,right:c,icon:h,flush:i,children:j}){return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(e.b,{title:a}),(0,d.jsx)(f.ViewChrome,{title:a,sub:b,right:c,icon:h,flush:i,children:j})]})}},9875:(a,b,c)=>{c.d(b,{I:()=>l});var d=c(73024),e=c(76760),f=c(3188);let g=/(^|\/)(\.env(\.[\w.-]+)?|id_[rd]sa\w*|.*\.(pem|key|p12|pfx|keystore|jks|ppk|asc)|credentials?\.json|service[-_]?account[\w.-]*\.json|.*\.(sql|dump|bak|sqlite3?|db)|npm-debug\.log|.*\.local)$/i,h=/(\.env\.(example|sample|template|dist)|\.env-example)$/i,i=[{kind:"AWS access key",re:/\bAKIA[0-9A-Z]{16}\b/},{kind:"GitHub token",re:/\bgh[posru]_[A-Za-z0-9]{30,}\b/},{kind:"GitHub fine-grained PAT",re:/\bgithub_pat_[A-Za-z0-9_]{40,}\b/},{kind:"OpenAI/Anthropic key",re:/\bsk-[A-Za-z0-9_-]{20,}\b/},{kind:"Google API key",re:/\bAIza[0-9A-Za-z_-]{30,}\b/},{kind:"Slack token",re:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/},{kind:"Private key",re:/-----BEGIN (?:RSA |EC |OPENSSH |DSA |PGP )?PRIVATE KEY-----/},{kind:"JWT",re:/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{6,}\b/},{kind:"DB URL with credentials",re:/\b(?:postgres(?:ql)?|mysql|mongodb(?:\+srv)?|redis|amqp):\/\/[^\s:@/]+:[^\s:@/]+@/i},{kind:"Telegram bot token",re:/\b\d{6,}:[A-Za-z0-9_-]{35,}\b/},{kind:"Hardcoded secret",re:/\b(password|passwd|secret|api[_-]?key|access[_-]?token|auth[_-]?token|client[_-]?secret|private[_-]?key)\b\s*[:=]\s*['"][^'"\n]{6,}['"]/i}],j=/(your[_-]?|xxx+|<[^>]+>|change[_-]?me|example|placeholder|\*{3,}|•|dummy|todo|redacted|\.\.\.)/i,k=/(^|\/)(node_modules|\.git|\.next|dist|build|out|\.turbo|coverage|uploads|archives|\.testdev|vendor)\//;async function l(a){let b=await (0,f.d1)("git",["status","--porcelain","-z","--untracked-files=all"],{cwd:a});if(0!==b.code)return{findings:[],scanned:0,files:0};let c=[],l=b.stdout.split("\0");for(let a=0;a<l.length;a++){let b=l[a];if(!b||b.length<3)continue;let d=b[0],e=b[1],f=b.slice(3);("R"===d||"C"===d||"R"===e||"C"===e)&&a++,"D"!==d&&"D"!==e&&(!f||k.test(f+"/")||c.push(f))}let m=[],n=0;for(let b of c.slice(0,3e3)){g.test(b)&&!h.test(b)&&m.push({file:b,line:0,kind:"must-not-commit file",preview:b.split("/").pop()??b});let c=(0,e.join)(a,b),f=0;try{f=(0,d.statSync)(c).size}catch{continue}if(f>2097152)continue;let k="";try{k=(0,d.readFileSync)(c,"utf8")}catch{continue}if(k.includes("\0"))continue;n++;let l=k.split("\n");for(let a=0;a<l.length&&m.length<300;a++){let c=l[a];if(!(c.length>4e3))for(let{kind:d,re:e}of i){let f=e.exec(c);if(f&&!("Hardcoded secret"===d&&j.test(f[0]))){var o;m.push({file:b,line:a+1,kind:d,preview:(o=f[0]).length<=10?"•••":o.slice(0,4)+"•••"+o.slice(-2)});break}}}}return{findings:m,scanned:n,files:c.length}}},20842:(a,b,c)=>{c.d(b,{A5:()=>H,Bz:()=>A,H9:()=>I,Iq:()=>D,Td:()=>z,UY:()=>F,UZ:()=>G,Uc:()=>B,ec:()=>E,jU:()=>y,ox:()=>J,uP:()=>x});var d=c(52813),e=c(73024),f=c(77598),g=c(76760),h=c(1782),i=c(83550),j=c(80280),k=c(25533),l=c(95896),m=c(28969),n=c(18612),o=c(3188),p=c(9875),q=c(54033),r=c(90860),s=c(29635);let t=`# Constella default — don't commit deps/build output
|
|
2
2
|
node_modules/
|
|
3
3
|
.next/
|
|
4
4
|
dist/
|
|
@@ -18,5 +18,5 @@ uploads/
|
|
|
18
18
|
${i}`}}async function I(){let{org:a}=await (0,l.nP)(),b=(0,n.HZ)(a.id);return await u(b)?{ok:!0,...await (0,p.I)(b)}:{ok:!1,findings:[],scanned:0,files:0}}async function J(a){let{org:b,workspace:c}=await (0,l.nP)(),d=(0,n.HZ)(b.id);(0,e.mkdirSync)(d,{recursive:!0});let f=a.branch||"main",g=await (0,m.r6)(c.id,"github_pat"),h=a=>(g?a.split(g).join("***"):a).slice(-300),j={ok:!1,committed:!1,sha:"",pushed:!1,prUrl:"",nothing:!1};if(!await u(d))return j.error="git init failed",K(c.id,j,a);if(!g)return j.blocked=!0,j.error="GitHub isn't configured for this company — connect a token + pick a repo first.",K(c.id,j,a);let k=c.settings?.github?.repo,s=await B();if(!k||!s)return j.blocked=!0,j.error="No repository set for this company — pick or create one first.",K(c.id,j,a);if(k.toLowerCase()!==s.toLowerCase())return j.blocked=!0,j.error=`Origin (${s}) doesn't match this company's configured repo (${k}). Re-select the repo before committing.`,K(c.id,j,a);if(!a.force){let a=await (0,p.I)(d);if(a.findings.length)return j.blocked=!0,j.secrets=a.findings,j.error=`Blocked: ${a.findings.length} potential secret(s)/sensitive file(s) in the change set. Resolve them or review before committing.`,await (0,q.vE)(c.id,{kind:"block",refType:"task",refId:`commit-${s}`,title:`Commit blocked — ${a.findings.length} secret risk(s)`,detail:`Pushing to ${s} was blocked. Sensitive items:
|
|
19
19
|
`+a.findings.slice(0,20).map(a=>`• ${a.file}${a.line?":"+a.line:""} — ${a.kind} (${a.preview})`).join("\n")}),await (0,r.I)(c.id,{kind:"security",text:`Commit blocked — ${a.findings.length} secret risk(s)`,detail:a.findings.slice(0,5).map(a=>`${a.file}: ${a.kind}`).join("; ")}),(0,i.revalidatePath)("/github"),(0,i.revalidatePath)("/inbox"),j}await (0,o.d1)("git",["add","-A"],{cwd:d});let t=await (0,o.d1)("git",["-c","user.email=agents@constella.dev","-c","user.name=Constella Agents","commit","-m",a.message],{cwd:d});if(0===t.code)j.committed=!0,j.sha=(await (0,o.d1)("git",["rev-parse","--short","HEAD"],{cwd:d})).stdout.trim();else if(/nothing to commit|no changes added/i.test(t.stdout+t.stderr))return j.nothing=!0,K(c.id,j,a);else return j.error=h(t.stderr||t.stdout)||"git commit failed",K(c.id,j,a);let v=await (0,o.d1)("git",["remote","get-url","origin"],{cwd:d}),w=0===v.code?v.stdout.trim():"";if(w&&g&&/^https:\/\/github\.com\//i.test(w)){let b=w.replace(/^https:\/\//i,`https://x-access-token:${g}@`),e=await (0,o.d1)("git",["push",b,`HEAD:${f}`],{cwd:d,timeoutMs:12e4});if(j.pushed=0===e.code,!j.pushed&&(j.error=h(e.stderr)||"git push failed",/rejected|non-fast-forward|fetch first|merge conflict|failed to push/i.test(e.stderr)&&await (0,q.vE)(c.id,{kind:"block",refType:"task",refId:`push:${a.repo}:${f}`,title:`Push rejected — ${a.repo}`,detail:`git push to \`${f}\` was rejected (remote conflict / non-fast-forward). Pull + resolve, then push again.
|
|
20
20
|
|
|
21
|
-
${h(e.stderr).slice(0,300)}`})),j.pushed&&a.delegated){let a=
|
|
22
|
-
`:"")+c.message})}return b.ok=b.committed,(0,i.revalidatePath)("/github"),b}(0,s.D)([x,y,z,A,B,D,E,F,G,H,I,J]),(0,d.A)(x,"
|
|
21
|
+
${h(e.stderr).slice(0,300)}`})),j.pushed&&a.delegated){let a=await (0,o.d1)("gh",["pr","create","--fill","--head",f],{cwd:d,timeoutMs:6e4,env:{GH_TOKEN:g}}),b=(a.stdout.match(/https:\/\/github\.com\/\S+/)??[])[0];b?j.prUrl=b:0!==a.code&&(j.error=h(a.stderr).slice(0,200)||"gh pr create did not open a PR (is the branch the repo default, or no diff vs base?)")}}else w?g||(j.error="committed locally — connect a GitHub PAT to push"):j.error="committed locally — no 'origin' remote configured to push";return K(c.id,j,a)}async function K(a,b,c){if(b.committed){await j.db.update(k.file).set({gitStatus:""}).where((0,h.Uo)((0,h.eq)(k.file.workspaceId,a),(0,h.ne)(k.file.gitStatus,"")));let d=b.pushed?`pushed to ${c.repo} \xb7 ${c.branch}`:"committed locally";await (0,r.I)(a,{kind:"deploy",text:`Workspace ${d}${b.sha?` (${b.sha})`:""}`,detail:(c.delegated&&b.prUrl?`PR: ${b.prUrl}
|
|
22
|
+
`:"")+c.message})}return b.ok=b.committed,(0,i.revalidatePath)("/github"),b}(0,s.D)([x,y,z,A,B,D,E,F,G,H,I,J]),(0,d.A)(x,"0065a3a2bc7e9a5a4beeeb7819a758dd73bd8c8be7",null),(0,d.A)(y,"40eb76a7845e51b23884f134e805c884b2baacbe99",null),(0,d.A)(z,"4001d992c595498f4deb397bfae0857fe9d34820fd",null),(0,d.A)(A,"406659c5dc4022ddc5bef0be456b812545da64d3b0",null),(0,d.A)(B,"000e90cfed4ef959323227eb9a47610d2ecfe4f58e",null),(0,d.A)(D,"008001d8667d8fe104a4ef656b4770d5838dae84bb",null),(0,d.A)(E,"404ede5566e753560824d8ce245be7cc3aeea8e282",null),(0,d.A)(F,"402162bcbd1f723b69056f66942be2aece35228516",null),(0,d.A)(G,"00b5efc9230247e6239b37fa65251e2e55a0a084c7",null),(0,d.A)(H,"0057f193979b08190631eb9a7f391a648888bd396d",null),(0,d.A)(I,"004ba4422d50fcff20cb40eec06d32b1be755e62fd",null),(0,d.A)(J,"40c427cd36adcfe462ad37aba6247e3927d7182b12",null)},47336:(a,b,c)=>{c.d(b,{checkForUpdate:()=>m});var d=c(73024),e=c(76760),f=c(30043);let g="constellai",h=null,i=a=>a.replace(/^v/,"").split("-")[0].split(".").map(a=>parseInt(a,10)||0),j=a=>a.replace(/^v/,"").split("-")[1]??"";async function k(a){try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch(a,{signal:b.signal,headers:{"user-agent":"constella"}});return clearTimeout(c),d.ok?await d.json():null}catch{return null}}async function l(a){try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch(a,{signal:b.signal,headers:{"user-agent":"constella"}});return clearTimeout(c),d.ok?await d.text():null}catch{return null}}async function m(a=!1){let b,c,n=function(){if(process.env.CONSTELLA_VERSION)return process.env.CONSTELLA_VERSION;try{let a=JSON.parse((0,d.readFileSync)((0,e.join)((0,f.v)(),"package.json"),"utf8"));if(a?.version)return a.version}catch{}return"0.0.0"}(),o=`npm install -g ${g}@latest`;if(!a&&h&&Date.now()-h.at<216e5)return h.info;let p=await k(`https://registry.npmjs.org/${g}/latest`),q=p?.version??null,r=!!q&&function(a,b){let c=i(a),d=i(b);for(let a=0;a<3;a++){if((c[a]||0)>(d[a]||0))return!0;if((c[a]||0)<(d[a]||0))return!1}return!j(a)&&!!j(b)}(q,n),s=null;if(r&&q){let a=await l("https://raw.githubusercontent.com/gabriel7silva/constella/main/CHANGELOG.md");s=a?function(a,b){let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=a.match(RegExp(`(^|\\n)##\\s*\\[?${c}\\]?[\\s\\S]*?(?=\\n##\\s|$)`));if(d)return d[0].trim();let e=a.split(/\n##\s/)[1];return e?"## "+e.trim():null}(a,q):null}let t={current:n,latest:q,updateAvailable:r,type:q?(b=i(q),c=i(n),b[0]>c[0]?"major":b[1]>c[1]?"minor":b[2]>c[2]||!j(q)&&j(n)?"patch":null):null,command:o,changelog:s};return h={at:Date.now(),info:t},t}},51221:(a,b,c)=>{c.d(b,{ViewChrome:()=>h});var d=c(4374),e=c(43526),f=c(48442),g=c(31819);function h({title:a,sub:b,right:c,icon:i,flush:j,children:k}){let l=(0,g.k)(),m=f.e.find(b=>b.title===a),n=i??m?.icon,o=m?l(`mod.${m.id}`):a;return(0,d.jsxs)("div",{className:"app-view",children:[(0,d.jsxs)("div",{className:"view-head",children:[n&&(0,d.jsx)("div",{className:"vh-icon",children:(0,d.jsx)(e.I,{name:n,size:18})}),(0,d.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,d.jsx)("div",{className:"view-title",children:o}),b&&(0,d.jsx)("div",{className:"view-sub",children:b})]}),c]}),(0,d.jsx)("div",{className:"view-body",style:j?{padding:0,overflow:"hidden"}:void 0,children:k})]})}},52932:(a,b,c)=>{c.d(b,{pM:()=>z,lP:()=>y,Kg:()=>x,eU:()=>B,PG:()=>A});var d=c(6866),e=c(53993),f=c(30043),g=c(64567),h=c(30170);function i(){return(0,h.n)()?"dev":"vps"===(0,g.T)()?"vps":"portable"===(0,g.T)()?"portable":/[\\/]_npx[\\/]/.test((0,f.v)())?"npx":"global"}var j=c(47336),k=c(73024),l=c(76760),m=c(48161),n=c(31421),o=c(57086);let p=()=>new Date().toISOString().replace(/[:.]/g,"-"),q=()=>(0,l.join)((0,o.r$)(),"backups","last-update.json");async function r(){let a=await (0,j.checkForUpdate)(!0),b=i(),c=a.command;if(!a.updateAvailable)return{ok:!0,context:b,command:c,message:"Already up to date."};let d=function(){try{let a=(0,o.r$)(),b=(0,l.join)(a,"backups",p());for(let c of((0,k.mkdirSync)(b,{recursive:!0}),[".env","constella.db","constella.db-wal","constella.db-shm"])){let d=(0,l.join)(a,c);if((0,k.existsSync)(d))try{(0,k.copyFileSync)(d,(0,l.join)(b,c))}catch{}}return b}catch{return null}}()??void 0;if("dev"===b)return{ok:!1,context:b,command:c,backupDir:d,message:"Running from source — update with: git pull && pnpm install && pnpm build"};if("npx"===b)return{ok:!1,context:b,command:c,backupDir:d,message:"npx runs an ephemeral copy — re-run: npx constellai@latest"};if("vps"===b){var e="bash scripts/vps-update.sh";try{(0,k.writeFileSync)(q(),JSON.stringify({status:"running",to:a.latest,at:p()}));let b=(0,o.r$)(),c=process.env.CONSTELLA_PKG_ROOT||process.cwd(),f=(0,l.join)(c,"bin","constella-update.mjs"),g=a.latest?["--version",a.latest]:[];return(0,n.spawn)(process.execPath,[f,"--quiet","--mode","vps","--home",b,...g],{detached:!0,stdio:"ignore",cwd:(0,m.tmpdir)()}).unref(),{ok:!0,started:!0,needsRestart:!0,context:"vps",command:e,backupDir:d,message:`Updating to ${a.latest} and restarting the service — this page reconnects in a few seconds.`}}catch(a){return{ok:!1,context:"vps",command:e,backupDir:d,message:"Couldn't launch the updater: "+String(a instanceof Error?a.message:a)}}}return function(a,b,c,d){try{(0,k.writeFileSync)(q(),JSON.stringify({status:"running",to:a.latest,at:p()}));let e=process.env.CONSTELLA_RUN_MODE||"start",f=process.env.CONSTELLA_LAUNCHER_PID||"0",g=(0,o.r$)(),h=process.env.PORT||"3000",i=process.env.CONSTELLA_PKG_ROOT||process.cwd(),j=(0,l.join)(i,"bin","constella-update.mjs"),r=a.latest?["--version",a.latest]:[];return(0,n.spawn)(process.execPath,[j,"--quiet","--pid",f,"--mode",e,"--home",g,"--port",h,...r],{detached:!0,stdio:"ignore",windowsHide:!0,cwd:(0,m.tmpdir)()}).unref(),{ok:!0,started:!0,needsRestart:!0,context:b,command:c,backupDir:d,message:`Updating to ${a.latest} and restarting — this page reconnects in a few seconds.`}}catch(a){return{ok:!1,context:b,command:c,backupDir:d,message:"Couldn't launch the updater: "+String(a instanceof Error?a.message:a)}}}(a,b,c,d)}var s=c(97603),t=c(65705),u=c(1890),v=c(10245);async function w(){let a=await t.db.select({lastPulse:u.agent.lastPulse}).from(u.agent).where((0,s.eq)(u.agent.status,"working")),b=Date.now()-v.fQ;return a.some(a=>null!=a.lastPulse&&new Date(a.lastPulse).getTime()>=b)}async function x(a=!1){return(0,j.checkForUpdate)(a)}async function y(a=!1){let[b,c]=await Promise.all([(0,j.checkForUpdate)(a),w()]);return{info:b,busy:c}}async function z(){return i()}async function A(){return(await (0,e.nP)(),await w())?{ok:!1,started:!1,blocked:!0,context:"",command:"",message:"An agent is working — pause it before updating."}:r()}async function B(){try{return JSON.parse((0,k.readFileSync)(q(),"utf8"))}catch{return{status:"idle"}}}(0,c(74252).D)([x,y,z,A,B]),(0,d.A)(x,"4032ce36226d2272a3df9a36cf1933b6c28baccdd3",null),(0,d.A)(y,"40e976bc870ce1c7b3f38b0d9673cb9eb9fe7e3699",null),(0,d.A)(z,"00559e73fec16acf73cac021e62ec0e900348d99f4",null),(0,d.A)(A,"002b0e1a6cbadd698c849dff2fb3a3f7c779f3f410",null),(0,d.A)(B,"005a571e9f925fc3e12976cc4f07b437bcea1f0f12",null)},64567:(a,b,c)=>{c.d(b,{T:()=>e});let d=["start","auth","vps","portable"];function e(){let a=process.env.CONSTELLA_RUN_MODE;return a&&d.includes(a)?a:"start"}},67949:(a,b,c)=>{c.d(b,{l:()=>g});var d=c(79676),e=c(75785);async function f(){return(0,e.e)((await (0,d.cookies)()).get("cn-lang")?.value)}async function g(){let a=await f();return(b,c)=>(0,e.t)(a,b,c)}}};
|