constella 0.1.0
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 -0
- package/.next/app-path-routes-manifest.json +53 -0
- package/.next/build-manifest.json +20 -0
- package/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/diagnostics/framework.json +1 -0
- package/.next/export-marker.json +6 -0
- package/.next/images-manifest.json +68 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +36 -0
- package/.next/react-loadable-manifest.json +14 -0
- package/.next/required-server-files.js +343 -0
- package/.next/required-server-files.json +343 -0
- package/.next/routes-manifest.json +362 -0
- package/.next/server/app/(app)/activity/page.js +2 -0
- package/.next/server/app/(app)/activity/page.js.nft.json +1 -0
- package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/agents/[handle]/page.js +18 -0
- package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/code/page.js +2 -0
- package/.next/server/app/(app)/code/page.js.nft.json +1 -0
- package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/config/page.js +2 -0
- package/.next/server/app/(app)/config/page.js.nft.json +1 -0
- package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/costs/page.js +2 -0
- package/.next/server/app/(app)/costs/page.js.nft.json +1 -0
- package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/cron/page.js +2 -0
- package/.next/server/app/(app)/cron/page.js.nft.json +1 -0
- package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/dashboard/page.js +2 -0
- package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -0
- package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/docs/[id]/page.js +2 -0
- package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/docs/page.js +2 -0
- package/.next/server/app/(app)/docs/page.js.nft.json +1 -0
- package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/github/page.js +2 -0
- package/.next/server/app/(app)/github/page.js.nft.json +1 -0
- package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/goals/page.js +2 -0
- package/.next/server/app/(app)/goals/page.js.nft.json +1 -0
- package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/inbox/page.js +2 -0
- package/.next/server/app/(app)/inbox/page.js.nft.json +1 -0
- package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/knowledge/page.js +3 -0
- package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -0
- package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/models/page.js +2 -0
- package/.next/server/app/(app)/models/page.js.nft.json +1 -0
- package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/notifications/page.js +2 -0
- package/.next/server/app/(app)/notifications/page.js.nft.json +1 -0
- package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/org/page.js +2 -0
- package/.next/server/app/(app)/org/page.js.nft.json +1 -0
- package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/organizations/page.js +2 -0
- package/.next/server/app/(app)/organizations/page.js.nft.json +1 -0
- package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/page.js +3 -0
- package/.next/server/app/(app)/page.js.nft.json +1 -0
- package/.next/server/app/(app)/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/planner/page.js +2 -0
- package/.next/server/app/(app)/planner/page.js.nft.json +1 -0
- package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/plugins/page.js +2 -0
- package/.next/server/app/(app)/plugins/page.js.nft.json +1 -0
- package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/pm/page.js +2 -0
- package/.next/server/app/(app)/pm/page.js.nft.json +1 -0
- package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/prepare-deploy/page.js +19 -0
- package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -0
- package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/profile/page.js +2 -0
- package/.next/server/app/(app)/profile/page.js.nft.json +1 -0
- package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/pulse/page.js +2 -0
- package/.next/server/app/(app)/pulse/page.js.nft.json +1 -0
- package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/reports/[id]/page.js +3 -0
- package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/reports/page.js +5 -0
- package/.next/server/app/(app)/reports/page.js.nft.json +1 -0
- package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/routines/page.js +2 -0
- package/.next/server/app/(app)/routines/page.js.nft.json +1 -0
- package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/search/page.js +2 -0
- package/.next/server/app/(app)/search/page.js.nft.json +1 -0
- package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/security/page.js +2 -0
- package/.next/server/app/(app)/security/page.js.nft.json +1 -0
- package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/skills/page.js +18 -0
- package/.next/server/app/(app)/skills/page.js.nft.json +1 -0
- package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/tasks/page.js +2 -0
- package/.next/server/app/(app)/tasks/page.js.nft.json +1 -0
- package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/test-dev/page.js +2 -0
- package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -0
- package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/update/page.js +2 -0
- package/.next/server/app/(app)/update/page.js.nft.json +1 -0
- package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(auth)/login/page.js +2 -0
- package/.next/server/app/(auth)/login/page.js.nft.json +1 -0
- package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(auth)/onboarding/page.js +18 -0
- package/.next/server/app/(auth)/onboarding/page.js.nft.json +1 -0
- package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_global-error/page.js +32 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +16 -0
- package/.next/server/app/_global-error.rsc +15 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +6 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page.js +2 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/[...all]/route.js +1 -0
- package/.next/server/app/api/auth/[...all]/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/[...all]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cron/tick/route.js +52 -0
- package/.next/server/app/api/cron/tick/route.js.nft.json +1 -0
- package/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/dev-login/route.js +1 -0
- package/.next/server/app/api/dev-login/route.js.nft.json +1 -0
- package/.next/server/app/api/dev-login/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/locks/acquire/route.js +1 -0
- package/.next/server/app/api/locks/acquire/route.js.nft.json +1 -0
- package/.next/server/app/api/locks/acquire/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/models/progress/route.js +1 -0
- package/.next/server/app/api/models/progress/route.js.nft.json +1 -0
- package/.next/server/app/api/models/progress/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/authenticate/options/route.js +1 -0
- package/.next/server/app/api/passkey/authenticate/options/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/authenticate/options/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/authenticate/verify/route.js +1 -0
- package/.next/server/app/api/passkey/authenticate/verify/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/authenticate/verify/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/register/options/route.js +1 -0
- package/.next/server/app/api/passkey/register/options/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/register/options/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/register/verify/route.js +1 -0
- package/.next/server/app/api/passkey/register/verify/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/register/verify/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/stream/route.js +4 -0
- package/.next/server/app/api/stream/route.js.nft.json +1 -0
- package/.next/server/app/api/stream/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/sync/file/route.js +2 -0
- package/.next/server/app/api/sync/file/route.js.nft.json +1 -0
- package/.next/server/app/api/sync/file/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/telegram/poll/route.js +15 -0
- package/.next/server/app/api/telegram/poll/route.js.nft.json +1 -0
- package/.next/server/app/api/telegram/poll/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/upload/route.js +1 -0
- package/.next/server/app/api/upload/route.js.nft.json +1 -0
- package/.next/server/app/api/upload/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/[[...path]]/route.js +1 -0
- package/.next/server/app/api/v1/[[...path]]/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/[[...path]]/route_client-reference-manifest.js +1 -0
- package/.next/server/app-paths-manifest.json +53 -0
- package/.next/server/chunks/1003.js +1 -0
- package/.next/server/chunks/127.js +26 -0
- package/.next/server/chunks/1388.js +1 -0
- package/.next/server/chunks/1408.js +21 -0
- package/.next/server/chunks/1572.js +1 -0
- package/.next/server/chunks/1591.js +24 -0
- package/.next/server/chunks/1619.js +188 -0
- package/.next/server/chunks/162.js +1 -0
- package/.next/server/chunks/1881.js +1 -0
- package/.next/server/chunks/1968.js +1 -0
- package/.next/server/chunks/2297.js +348 -0
- package/.next/server/chunks/2341.js +1 -0
- package/.next/server/chunks/2517.js +1 -0
- package/.next/server/chunks/2549.js +1 -0
- package/.next/server/chunks/259.js +14 -0
- package/.next/server/chunks/2599.js +1 -0
- package/.next/server/chunks/260.js +1 -0
- package/.next/server/chunks/2867.js +147 -0
- package/.next/server/chunks/3018.js +1 -0
- package/.next/server/chunks/3050.js +18 -0
- package/.next/server/chunks/3085.js +12 -0
- package/.next/server/chunks/3131.js +1 -0
- package/.next/server/chunks/3242.js +1 -0
- package/.next/server/chunks/3266.js +15 -0
- package/.next/server/chunks/3524.js +1 -0
- package/.next/server/chunks/3527.js +479 -0
- package/.next/server/chunks/3533.js +869 -0
- package/.next/server/chunks/3550.js +1 -0
- package/.next/server/chunks/3609.js +2 -0
- package/.next/server/chunks/3667.js +462 -0
- package/.next/server/chunks/3760.js +4 -0
- package/.next/server/chunks/4679.js +1 -0
- package/.next/server/chunks/4804.js +1 -0
- package/.next/server/chunks/4832.js +2 -0
- package/.next/server/chunks/4853.js +1 -0
- package/.next/server/chunks/4979.js +67 -0
- package/.next/server/chunks/5060.js +1 -0
- package/.next/server/chunks/5278.js +1 -0
- package/.next/server/chunks/5614.js +1 -0
- package/.next/server/chunks/5818.js +1 -0
- package/.next/server/chunks/6479.js +1 -0
- package/.next/server/chunks/6658.js +1 -0
- package/.next/server/chunks/6706.js +1 -0
- package/.next/server/chunks/6719.js +1 -0
- package/.next/server/chunks/678.js +1 -0
- package/.next/server/chunks/683.js +1 -0
- package/.next/server/chunks/6862.js +1 -0
- package/.next/server/chunks/6882.js +1 -0
- package/.next/server/chunks/7037.js +1 -0
- package/.next/server/chunks/7107.js +741 -0
- package/.next/server/chunks/73.js +17 -0
- package/.next/server/chunks/7327.js +1 -0
- package/.next/server/chunks/7514.js +1 -0
- package/.next/server/chunks/7622.js +1 -0
- package/.next/server/chunks/7778.js +1 -0
- package/.next/server/chunks/7912.js +1 -0
- package/.next/server/chunks/7949.js +1 -0
- package/.next/server/chunks/7971.js +1 -0
- package/.next/server/chunks/7989.js +1 -0
- package/.next/server/chunks/842.js +22 -0
- package/.next/server/chunks/8762.js +15 -0
- package/.next/server/chunks/8823.js +77 -0
- package/.next/server/chunks/9146.js +4 -0
- package/.next/server/chunks/9676.js +1 -0
- package/.next/server/chunks/9783.js +22 -0
- package/.next/server/chunks/9969.js +3 -0
- package/.next/server/functions-config-manifest.json +18 -0
- package/.next/server/instrumentation.js +1 -0
- package/.next/server/instrumentation.js.nft.json +1 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/.next/server/middleware.js +18 -0
- package/.next/server/middleware.js.nft.json +1 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +3 -0
- package/.next/server/prefetch-hints.json +1 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +1 -0
- package/.next/server/webpack-runtime.js +1 -0
- package/.next/static/chunks/1858-339516f78a4b00da.js +1 -0
- package/.next/static/chunks/2320-fc8b39380e69d465.js +2 -0
- package/.next/static/chunks/23550918-ff694f70f4b0648c.js +1 -0
- package/.next/static/chunks/3219-ebb3c23be38c838d.js +1 -0
- package/.next/static/chunks/4263-adecb5b466380b6e.js +1 -0
- package/.next/static/chunks/5479-0cceab68cd0ca9c7.js +1 -0
- package/.next/static/chunks/5701-665b927b06158b76.js +1 -0
- package/.next/static/chunks/5920.6451a68b63918988.js +1 -0
- package/.next/static/chunks/6575-5c9139720bb0f5bf.js +4 -0
- package/.next/static/chunks/6834-4759af1ce7d95fb6.js +32 -0
- package/.next/static/chunks/7509.721cd47a931c5518.js +1 -0
- package/.next/static/chunks/8264-1ca011989ee2b231.js +1 -0
- package/.next/static/chunks/9219-4a39a98b5502d9d1.js +1 -0
- package/.next/static/chunks/9690-53d5222618cbeddb.js +1 -0
- package/.next/static/chunks/app/(app)/activity/page-3973534281ecea81.js +1 -0
- package/.next/static/chunks/app/(app)/agents/[handle]/page-83662a175c098282.js +1 -0
- package/.next/static/chunks/app/(app)/code/page-33979545192cd137.js +1 -0
- package/.next/static/chunks/app/(app)/config/page-9933aed1ca8a85c1.js +1 -0
- package/.next/static/chunks/app/(app)/costs/page-131c4dc580efcc19.js +1 -0
- package/.next/static/chunks/app/(app)/cron/page-53ea1aff998a87ca.js +1 -0
- package/.next/static/chunks/app/(app)/dashboard/page-deed83aaa9d0d447.js +1 -0
- package/.next/static/chunks/app/(app)/docs/[id]/page-38c993d73c0eab4f.js +1 -0
- package/.next/static/chunks/app/(app)/docs/page-bf463b55d0554e86.js +1 -0
- package/.next/static/chunks/app/(app)/error-988cd28480809861.js +1 -0
- package/.next/static/chunks/app/(app)/github/page-62678b4e82dfecb6.js +1 -0
- package/.next/static/chunks/app/(app)/goals/page-4adb426fe1c96106.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/page-e347dc55ab467310.js +1 -0
- package/.next/static/chunks/app/(app)/knowledge/page-65393a045b4349be.js +1 -0
- package/.next/static/chunks/app/(app)/layout-7f65675705b011d8.js +1 -0
- package/.next/static/chunks/app/(app)/models/page-e01f1dd7e49a2951.js +1 -0
- package/.next/static/chunks/app/(app)/notifications/page-56548ac87aef00da.js +1 -0
- package/.next/static/chunks/app/(app)/org/page-699e6a6dc0db7d81.js +1 -0
- package/.next/static/chunks/app/(app)/organizations/page-36051a380a7e8eb7.js +1 -0
- package/.next/static/chunks/app/(app)/page-7d1011a566f81520.js +1 -0
- package/.next/static/chunks/app/(app)/planner/page-dab7ced94083373a.js +1 -0
- package/.next/static/chunks/app/(app)/plugins/page-5b5a1f53389be42e.js +1 -0
- package/.next/static/chunks/app/(app)/pm/page-0de5c08c0b227bb0.js +1 -0
- package/.next/static/chunks/app/(app)/prepare-deploy/page-e426038552df8d41.js +1 -0
- package/.next/static/chunks/app/(app)/profile/page-608dfcaf8aae0a69.js +1 -0
- package/.next/static/chunks/app/(app)/pulse/page-309ccaca91de1faa.js +1 -0
- package/.next/static/chunks/app/(app)/reports/[id]/page-53ea1aff998a87ca.js +1 -0
- package/.next/static/chunks/app/(app)/reports/page-68cdc6dcfa472d86.js +1 -0
- package/.next/static/chunks/app/(app)/routines/page-bcc55550b197a9fa.js +1 -0
- package/.next/static/chunks/app/(app)/search/page-5c5f67558d0dbf0d.js +1 -0
- package/.next/static/chunks/app/(app)/security/page-a7d41e36aa366b45.js +1 -0
- package/.next/static/chunks/app/(app)/skills/page-c5b21e89593b8336.js +1 -0
- package/.next/static/chunks/app/(app)/tasks/page-08ae079e3e54d2ce.js +1 -0
- package/.next/static/chunks/app/(app)/test-dev/page-633f82dfd9c3ce23.js +1 -0
- package/.next/static/chunks/app/(app)/update/page-4be019054351bfac.js +1 -0
- package/.next/static/chunks/app/(auth)/login/page-6e85d3377062acae.js +1 -0
- package/.next/static/chunks/app/(auth)/onboarding/page-ebb10c175abf3b85.js +1 -0
- package/.next/static/chunks/app/_global-error/page-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/_not-found/page-dc38b02aebeab535.js +1 -0
- package/.next/static/chunks/app/api/auth/[...all]/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/cron/tick/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/dev-login/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/locks/acquire/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/models/progress/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/authenticate/options/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/authenticate/verify/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/register/options/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/register/verify/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/stream/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/sync/file/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/telegram/poll/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/upload/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/v1/[[...path]]/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/error-09899a13c38b6e89.js +1 -0
- package/.next/static/chunks/app/global-error-b8050d4d886f448c.js +1 -0
- package/.next/static/chunks/app/layout-ab9deed1e7e2e9df.js +1 -0
- package/.next/static/chunks/framework-4b2c6b6043dd203f.js +1 -0
- package/.next/static/chunks/main-722e16032e7764d1.js +5 -0
- package/.next/static/chunks/main-app-761880af2b6f1962.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/.next/static/chunks/webpack-222e3894b78c67db.js +1 -0
- package/.next/static/css/0a9b5805594444e3.css +1 -0
- package/.next/static/yztMvBwyrWWkSqP6jfXoa/_buildManifest.js +1 -0
- package/.next/static/yztMvBwyrWWkSqP6jfXoa/_ssgManifest.js +1 -0
- package/.next/trace-build +1 -0
- package/.next/types/app/(app)/activity/page.ts +87 -0
- package/.next/types/app/(app)/agents/[handle]/page.ts +87 -0
- package/.next/types/app/(app)/code/page.ts +87 -0
- package/.next/types/app/(app)/config/page.ts +87 -0
- package/.next/types/app/(app)/costs/page.ts +87 -0
- package/.next/types/app/(app)/cron/page.ts +87 -0
- package/.next/types/app/(app)/dashboard/page.ts +87 -0
- package/.next/types/app/(app)/docs/[id]/page.ts +87 -0
- package/.next/types/app/(app)/docs/page.ts +87 -0
- package/.next/types/app/(app)/github/page.ts +87 -0
- package/.next/types/app/(app)/goals/page.ts +87 -0
- package/.next/types/app/(app)/inbox/page.ts +87 -0
- package/.next/types/app/(app)/knowledge/page.ts +87 -0
- package/.next/types/app/(app)/models/page.ts +87 -0
- package/.next/types/app/(app)/notifications/page.ts +87 -0
- package/.next/types/app/(app)/org/page.ts +87 -0
- package/.next/types/app/(app)/organizations/page.ts +87 -0
- package/.next/types/app/(app)/page.ts +87 -0
- package/.next/types/app/(app)/planner/page.ts +87 -0
- package/.next/types/app/(app)/plugins/page.ts +87 -0
- package/.next/types/app/(app)/pm/page.ts +87 -0
- package/.next/types/app/(app)/prepare-deploy/page.ts +87 -0
- package/.next/types/app/(app)/profile/page.ts +87 -0
- package/.next/types/app/(app)/pulse/page.ts +87 -0
- package/.next/types/app/(app)/reports/[id]/page.ts +87 -0
- package/.next/types/app/(app)/reports/page.ts +87 -0
- package/.next/types/app/(app)/routines/page.ts +87 -0
- package/.next/types/app/(app)/search/page.ts +87 -0
- package/.next/types/app/(app)/security/page.ts +87 -0
- package/.next/types/app/(app)/skills/page.ts +87 -0
- package/.next/types/app/(app)/tasks/page.ts +87 -0
- package/.next/types/app/(app)/test-dev/page.ts +87 -0
- package/.next/types/app/(app)/update/page.ts +87 -0
- package/.next/types/app/(auth)/login/page.ts +87 -0
- package/.next/types/app/(auth)/onboarding/page.ts +87 -0
- package/.next/types/app/api/auth/[...all]/route.ts +351 -0
- package/.next/types/app/api/cron/tick/route.ts +351 -0
- package/.next/types/app/api/dev-login/route.ts +351 -0
- package/.next/types/app/api/locks/acquire/route.ts +351 -0
- package/.next/types/app/api/models/progress/route.ts +351 -0
- package/.next/types/app/api/passkey/authenticate/options/route.ts +351 -0
- package/.next/types/app/api/passkey/authenticate/verify/route.ts +351 -0
- package/.next/types/app/api/passkey/register/options/route.ts +351 -0
- package/.next/types/app/api/passkey/register/verify/route.ts +351 -0
- package/.next/types/app/api/stream/route.ts +351 -0
- package/.next/types/app/api/sync/file/route.ts +351 -0
- package/.next/types/app/api/telegram/poll/route.ts +351 -0
- package/.next/types/app/api/upload/route.ts +351 -0
- package/.next/types/app/api/v1/[[...path]]/route.ts +351 -0
- package/.next/types/cache-life.d.ts +145 -0
- package/.next/types/link.d.ts +210 -0
- package/.next/types/package.json +1 -0
- package/.next/types/routes.d.ts +120 -0
- package/.next/types/validator.ts +511 -0
- package/CHANGELOG.md +312 -0
- package/LICENSE +21 -0
- package/README.md +382 -0
- package/README.pt-BR.md +391 -0
- package/bin/constella.mjs +329 -0
- package/bin/guard-hook.mjs +44 -0
- package/bin/lock-hook.mjs +49 -0
- package/bin/worker.mjs +142 -0
- package/docs/assets/arch-orbit.svg +56 -0
- package/docs/assets/blackhole.svg +37 -0
- package/docs/assets/divider-orbit.svg +23 -0
- package/docs/assets/hero-constella.svg +72 -0
- package/docs/en/AGENTS.md +279 -0
- package/docs/en/AI_ARCHITECTURE.md +373 -0
- package/docs/en/ARCHITECTURE.md +334 -0
- package/docs/en/AUTH_MODE.md +247 -0
- package/docs/en/CHAT_COMMANDS.md +305 -0
- package/docs/en/CONFIGURATION.md +340 -0
- package/docs/en/DEPLOY.md +331 -0
- package/docs/en/DM.md +297 -0
- package/docs/en/FAQ.md +258 -0
- package/docs/en/GITHUB.md +341 -0
- package/docs/en/GOALS_SPECS_ISSUES.md +303 -0
- package/docs/en/INBOX.md +340 -0
- package/docs/en/INSTALLATION.md +329 -0
- package/docs/en/KB_AGENT.md +305 -0
- package/docs/en/KB_RAG.md +356 -0
- package/docs/en/MCP.md +313 -0
- package/docs/en/MEMORY_RAG.md +289 -0
- package/docs/en/MODELS.md +341 -0
- package/docs/en/ONBOARDING.md +327 -0
- package/docs/en/PLUGINS.md +290 -0
- package/docs/en/PORTABLE_MODE.md +387 -0
- package/docs/en/PO_AGENT.md +379 -0
- package/docs/en/PREPARE_DEPLOY.md +308 -0
- package/docs/en/PROJECT_STACKS.md +258 -0
- package/docs/en/PUBLIC_API.md +315 -0
- package/docs/en/PUBLISHING.md +343 -0
- package/docs/en/README.md +95 -0
- package/docs/en/SECURITY.md +280 -0
- package/docs/en/SKILLS.md +349 -0
- package/docs/en/START_MODE.md +340 -0
- package/docs/en/SYNCED_BLOCKS.md +320 -0
- package/docs/en/TEAM_ROOM.md +285 -0
- package/docs/en/TELEGRAM.md +294 -0
- package/docs/en/TEST_DEV.md +321 -0
- package/docs/en/TROUBLESHOOTING.md +294 -0
- package/docs/en/UPDATE.md +301 -0
- package/docs/en/VPS_MODE.md +334 -0
- package/docs/en/WORKFLOW.md +321 -0
- package/docs/pt/AGENTS.md +279 -0
- package/docs/pt/AI_ARCHITECTURE.md +373 -0
- package/docs/pt/ARCHITECTURE.md +334 -0
- package/docs/pt/AUTH_MODE.md +247 -0
- package/docs/pt/CHAT_COMMANDS.md +307 -0
- package/docs/pt/CONFIGURATION.md +340 -0
- package/docs/pt/DEPLOY.md +331 -0
- package/docs/pt/DM.md +297 -0
- package/docs/pt/FAQ.md +258 -0
- package/docs/pt/GITHUB.md +341 -0
- package/docs/pt/GOALS_SPECS_ISSUES.md +303 -0
- package/docs/pt/INBOX.md +340 -0
- package/docs/pt/INSTALLATION.md +329 -0
- package/docs/pt/KB_AGENT.md +305 -0
- package/docs/pt/KB_RAG.md +356 -0
- package/docs/pt/MCP.md +313 -0
- package/docs/pt/MEMORY_RAG.md +289 -0
- package/docs/pt/MODELS.md +341 -0
- package/docs/pt/ONBOARDING.md +327 -0
- package/docs/pt/PLUGINS.md +290 -0
- package/docs/pt/PORTABLE_MODE.md +387 -0
- package/docs/pt/PO_AGENT.md +379 -0
- package/docs/pt/PREPARE_DEPLOY.md +308 -0
- package/docs/pt/PROJECT_STACKS.md +258 -0
- package/docs/pt/PUBLIC_API.md +315 -0
- package/docs/pt/PUBLISHING.md +343 -0
- package/docs/pt/README.md +95 -0
- package/docs/pt/SECURITY.md +280 -0
- package/docs/pt/SKILLS.md +349 -0
- package/docs/pt/START_MODE.md +340 -0
- package/docs/pt/SYNCED_BLOCKS.md +320 -0
- package/docs/pt/TEAM_ROOM.md +285 -0
- package/docs/pt/TELEGRAM.md +294 -0
- package/docs/pt/TEST_DEV.md +321 -0
- package/docs/pt/TROUBLESHOOTING.md +294 -0
- package/docs/pt/UPDATE.md +301 -0
- package/docs/pt/VPS_MODE.md +334 -0
- package/docs/pt/WORKFLOW.md +321 -0
- package/drizzle/0000_regular_nightshade.sql +644 -0
- package/drizzle/0001_mixed_zombie.sql +106 -0
- package/drizzle/meta/0000_snapshot.json +4650 -0
- package/drizzle/meta/0001_snapshot.json +5418 -0
- package/drizzle/meta/_journal.json +20 -0
- package/drizzle.config.mjs +16 -0
- package/next.config.mjs +18 -0
- package/package.json +130 -0
- package/scripts/clean-repo.mjs +20 -0
- package/scripts/dev-all.mjs +46 -0
- package/scripts/i18n-parity.mjs +57 -0
- package/scripts/mcp-server.mjs +100 -0
- package/scripts/postbuild.mjs +11 -0
- package/scripts/publish-public.mjs +116 -0
- package/scripts/start-all.mjs +45 -0
- package/scripts/trim-next.mjs +23 -0
- package/scripts/vps-install.sh +39 -0
- package/skills/CONTRIBUTING.md +122 -0
- package/skills/COVERAGE.md +129 -0
- package/skills/INDEX.json +3443 -0
- package/skills/README.md +57 -0
- package/skills/design/animation-motion/SKILL.md +60 -0
- package/skills/design/color-and-typography/SKILL.md +60 -0
- package/skills/design/css-techniques/SKILL.md +58 -0
- package/skills/design/design-systems/SKILL.md +60 -0
- package/skills/design/gradients/SKILL.md +59 -0
- package/skills/design/graphic-design-basics/SKILL.md +55 -0
- package/skills/design/microinteractions/SKILL.md +58 -0
- package/skills/design/responsive-layout/SKILL.md +59 -0
- package/skills/design/ui-ux-principles/SKILL.md +58 -0
- package/skills/engineering/architecture/api-design-rest-graphql/SKILL.md +67 -0
- package/skills/engineering/architecture/caching-strategies/SKILL.md +59 -0
- package/skills/engineering/architecture/data-modeling/SKILL.md +64 -0
- package/skills/engineering/architecture/message-queues-async/SKILL.md +58 -0
- package/skills/engineering/architecture/scalability-reliability/SKILL.md +62 -0
- package/skills/engineering/architecture/software-architecture-patterns/SKILL.md +56 -0
- package/skills/engineering/architecture/system-design-fundamentals/SKILL.md +56 -0
- package/skills/engineering/backend/auth-and-authorization/SKILL.md +62 -0
- package/skills/engineering/backend/backend-fundamentals/SKILL.md +65 -0
- package/skills/engineering/backend/observability-logging/SKILL.md +60 -0
- package/skills/engineering/frontend/accessibility-wcag/SKILL.md +57 -0
- package/skills/engineering/frontend/frontend-architecture/SKILL.md +65 -0
- package/skills/engineering/frontend/rendering-strategies-ssr-csr/SKILL.md +60 -0
- package/skills/engineering/frontend/state-management/SKILL.md +69 -0
- package/skills/engineering/performance/backend-performance/SKILL.md +69 -0
- package/skills/engineering/performance/database-query-optimization/SKILL.md +64 -0
- package/skills/engineering/performance/profiling-and-benchmarking/SKILL.md +60 -0
- package/skills/engineering/performance/web-performance-core-vitals/SKILL.md +72 -0
- package/skills/engineering/practices/clean-code/SKILL.md +61 -0
- package/skills/engineering/practices/code-optimization/SKILL.md +60 -0
- package/skills/engineering/practices/code-review-practices/SKILL.md +58 -0
- package/skills/engineering/practices/git-workflow/SKILL.md +62 -0
- package/skills/engineering/practices/refactoring/SKILL.md +58 -0
- package/skills/engineering/security/appsec-fundamentals/SKILL.md +70 -0
- package/skills/engineering/security/dependency-supply-chain/SKILL.md +77 -0
- package/skills/engineering/security/owasp-asvs/SKILL.md +54 -0
- package/skills/engineering/security/owasp-top-10/SKILL.md +63 -0
- package/skills/engineering/security/secrets-management/SKILL.md +58 -0
- package/skills/engineering/security/secure-auth-sessions/SKILL.md +56 -0
- package/skills/engineering/testing/tdd-and-coverage/SKILL.md +62 -0
- package/skills/engineering/testing/testing-strategy-pyramid/SKILL.md +56 -0
- package/skills/engineering/testing/unit-integration-e2e/SKILL.md +75 -0
- package/skills/languages/c/SKILL.md +74 -0
- package/skills/languages/clojure/SKILL.md +73 -0
- package/skills/languages/cpp/SKILL.md +75 -0
- package/skills/languages/csharp/SKILL.md +75 -0
- package/skills/languages/dart/SKILL.md +82 -0
- package/skills/languages/elixir/SKILL.md +74 -0
- package/skills/languages/erlang/SKILL.md +76 -0
- package/skills/languages/go/SKILL.md +83 -0
- package/skills/languages/haskell/SKILL.md +70 -0
- package/skills/languages/java/SKILL.md +71 -0
- package/skills/languages/javascript/SKILL.md +62 -0
- package/skills/languages/kotlin/SKILL.md +68 -0
- package/skills/languages/lua/SKILL.md +79 -0
- package/skills/languages/objectivec/SKILL.md +83 -0
- package/skills/languages/php/SKILL.md +74 -0
- package/skills/languages/python/SKILL.md +68 -0
- package/skills/languages/r/SKILL.md +70 -0
- package/skills/languages/ruby/SKILL.md +67 -0
- package/skills/languages/rust/SKILL.md +72 -0
- package/skills/languages/scala/SKILL.md +73 -0
- package/skills/languages/swift/SKILL.md +73 -0
- package/skills/languages/typescript/SKILL.md +69 -0
- package/skills/meta/authoring-agent-skills/SKILL.md +73 -0
- package/skills/meta/progressive-disclosure/SKILL.md +65 -0
- package/skills/meta/skill-frontmatter-spec/SKILL.md +65 -0
- package/skills/process/adr-technical-decisions/SKILL.md +59 -0
- package/skills/process/app-planning/SKILL.md +63 -0
- package/skills/process/architecture-before-code/SKILL.md +52 -0
- package/skills/process/breaking-work-into-sprints/SKILL.md +53 -0
- package/skills/process/idea-to-product/SKILL.md +50 -0
- package/skills/process/mocks-and-screen-flows/SKILL.md +52 -0
- package/skills/process/prioritization-moscow-rice/SKILL.md +64 -0
- package/skills/process/problem-framing/SKILL.md +51 -0
- package/skills/process/product-discovery/SKILL.md +53 -0
- package/skills/process/readme-generation/SKILL.md +90 -0
- package/skills/process/requirements-to-specs/SKILL.md +53 -0
- package/skills/process/research-official-docs/SKILL.md +58 -0
- package/skills/process/review-code-perf-security/SKILL.md +65 -0
- package/skills/process/security-by-design/SKILL.md +68 -0
- package/skills/process/specs-to-issues/SKILL.md +53 -0
- package/skills/process/testing-before-done/SKILL.md +61 -0
- package/skills/process/validating-ux-navigation/SKILL.md +63 -0
- package/skills/references/ai-attachments-ui/SKILL.md +66 -0
- package/skills/references/ai-in-browser-webllm/SKILL.md +74 -0
- package/skills/references/ai-tool-ui-patterns/SKILL.md +63 -0
- package/skills/references/component-patterns-gallery/SKILL.md +62 -0
- package/skills/references/gradient-resources/SKILL.md +66 -0
- package/skills/references/react-component-libraries/SKILL.md +61 -0
- package/skills/references/saas-landing-patterns/SKILL.md +67 -0
- package/skills/references/shadcn-tailwind-theming/SKILL.md +74 -0
- package/skills/references/vercel-ai-sdk-elements/SKILL.md +66 -0
- package/skills/references/web-animation-codrops/SKILL.md +68 -0
- package/skills/stacks/aiml/jupyter/SKILL.md +68 -0
- package/skills/stacks/aiml/keras/SKILL.md +77 -0
- package/skills/stacks/aiml/numpy/SKILL.md +69 -0
- package/skills/stacks/aiml/pandas/SKILL.md +72 -0
- package/skills/stacks/aiml/pytorch/SKILL.md +77 -0
- package/skills/stacks/aiml/scikit-learn/SKILL.md +74 -0
- package/skills/stacks/aiml/tensorflow/SKILL.md +79 -0
- package/skills/stacks/auth/auth0/SKILL.md +63 -0
- package/skills/stacks/auth/authjs/SKILL.md +69 -0
- package/skills/stacks/auth/clerk/SKILL.md +72 -0
- package/skills/stacks/auth/keycloak/SKILL.md +63 -0
- package/skills/stacks/auth/lucia/SKILL.md +56 -0
- package/skills/stacks/auth/passport/SKILL.md +70 -0
- package/skills/stacks/auth/supabase-auth/SKILL.md +66 -0
- package/skills/stacks/baas/amplify/SKILL.md +71 -0
- package/skills/stacks/baas/appwrite/SKILL.md +79 -0
- package/skills/stacks/baas/firebase/SKILL.md +73 -0
- package/skills/stacks/baas/heroku/SKILL.md +71 -0
- package/skills/stacks/backend/actix/SKILL.md +77 -0
- package/skills/stacks/backend/adonisjs/SKILL.md +65 -0
- package/skills/stacks/backend/aspnet-core/SKILL.md +75 -0
- package/skills/stacks/backend/codeigniter/SKILL.md +76 -0
- package/skills/stacks/backend/django/SKILL.md +62 -0
- package/skills/stacks/backend/express/SKILL.md +65 -0
- package/skills/stacks/backend/fastapi/SKILL.md +64 -0
- package/skills/stacks/backend/fastify/SKILL.md +64 -0
- package/skills/stacks/backend/fiber/SKILL.md +68 -0
- package/skills/stacks/backend/flask/SKILL.md +71 -0
- package/skills/stacks/backend/gin/SKILL.md +68 -0
- package/skills/stacks/backend/graphql/SKILL.md +70 -0
- package/skills/stacks/backend/hono/SKILL.md +64 -0
- package/skills/stacks/backend/koa/SKILL.md +63 -0
- package/skills/stacks/backend/laravel/SKILL.md +73 -0
- package/skills/stacks/backend/nestjs/SKILL.md +70 -0
- package/skills/stacks/backend/nginx/SKILL.md +77 -0
- package/skills/stacks/backend/phoenix/SKILL.md +68 -0
- package/skills/stacks/backend/rails/SKILL.md +67 -0
- package/skills/stacks/backend/spring/SKILL.md +70 -0
- package/skills/stacks/backend/spring-boot/SKILL.md +70 -0
- package/skills/stacks/backend/symfony/SKILL.md +77 -0
- package/skills/stacks/container/containerd/SKILL.md +75 -0
- package/skills/stacks/container/docker/SKILL.md +90 -0
- package/skills/stacks/container/podman/SKILL.md +93 -0
- package/skills/stacks/database/cassandra/SKILL.md +74 -0
- package/skills/stacks/database/cockroachdb/SKILL.md +69 -0
- package/skills/stacks/database/dynamodb/SKILL.md +62 -0
- package/skills/stacks/database/mariadb/SKILL.md +71 -0
- package/skills/stacks/database/mongodb/SKILL.md +71 -0
- package/skills/stacks/database/mysql/SKILL.md +72 -0
- package/skills/stacks/database/neon/SKILL.md +68 -0
- package/skills/stacks/database/planetscale/SKILL.md +70 -0
- package/skills/stacks/database/postgresql/SKILL.md +81 -0
- package/skills/stacks/database/redis/SKILL.md +78 -0
- package/skills/stacks/database/sqlite/SKILL.md +70 -0
- package/skills/stacks/database/supabase/SKILL.md +79 -0
- package/skills/stacks/dataviz/chart-js/SKILL.md +72 -0
- package/skills/stacks/dataviz/d3/SKILL.md +77 -0
- package/skills/stacks/dataviz/grafana/SKILL.md +69 -0
- package/skills/stacks/dataviz/plotly/SKILL.md +71 -0
- package/skills/stacks/frontend/alpine/SKILL.md +75 -0
- package/skills/stacks/frontend/angular/SKILL.md +75 -0
- package/skills/stacks/frontend/backbone/SKILL.md +82 -0
- package/skills/stacks/frontend/ember/SKILL.md +85 -0
- package/skills/stacks/frontend/htmx/SKILL.md +73 -0
- package/skills/stacks/frontend/lit/SKILL.md +76 -0
- package/skills/stacks/frontend/preact/SKILL.md +74 -0
- package/skills/stacks/frontend/qwik/SKILL.md +65 -0
- package/skills/stacks/frontend/react/SKILL.md +77 -0
- package/skills/stacks/frontend/solidjs/SKILL.md +75 -0
- package/skills/stacks/frontend/svelte/SKILL.md +70 -0
- package/skills/stacks/frontend/vue/SKILL.md +69 -0
- package/skills/stacks/infra/ansible/SKILL.md +76 -0
- package/skills/stacks/infra/aws/SKILL.md +66 -0
- package/skills/stacks/infra/azure/SKILL.md +72 -0
- package/skills/stacks/infra/circleci/SKILL.md +78 -0
- package/skills/stacks/infra/cloudflare/SKILL.md +65 -0
- package/skills/stacks/infra/fly-io/SKILL.md +63 -0
- package/skills/stacks/infra/gcp/SKILL.md +66 -0
- package/skills/stacks/infra/jenkins/SKILL.md +73 -0
- package/skills/stacks/infra/kubernetes/SKILL.md +64 -0
- package/skills/stacks/infra/netlify/SKILL.md +60 -0
- package/skills/stacks/infra/railway/SKILL.md +63 -0
- package/skills/stacks/infra/tailscale/SKILL.md +65 -0
- package/skills/stacks/infra/terraform/SKILL.md +75 -0
- package/skills/stacks/infra/vagrant/SKILL.md +70 -0
- package/skills/stacks/infra/vercel/SKILL.md +60 -0
- package/skills/stacks/meta/astro/SKILL.md +64 -0
- package/skills/stacks/meta/docusaurus/SKILL.md +71 -0
- package/skills/stacks/meta/eleventy/SKILL.md +69 -0
- package/skills/stacks/meta/gatsby/SKILL.md +63 -0
- package/skills/stacks/meta/hugo/SKILL.md +73 -0
- package/skills/stacks/meta/jekyll/SKILL.md +70 -0
- package/skills/stacks/meta/nextjs/SKILL.md +62 -0
- package/skills/stacks/meta/nuxt/SKILL.md +66 -0
- package/skills/stacks/meta/remix/SKILL.md +67 -0
- package/skills/stacks/meta/sveltekit/SKILL.md +70 -0
- package/skills/stacks/meta/vite/SKILL.md +63 -0
- package/skills/stacks/mobile/android/SKILL.md +77 -0
- package/skills/stacks/mobile/flutter/SKILL.md +77 -0
- package/skills/stacks/mobile/ionic/SKILL.md +72 -0
- package/skills/stacks/mobile/nativescript/SKILL.md +71 -0
- package/skills/stacks/mobile/react-native/SKILL.md +75 -0
- package/skills/stacks/mobile/xamarin/SKILL.md +73 -0
- package/skills/stacks/orm/diesel/SKILL.md +72 -0
- package/skills/stacks/orm/django-orm/SKILL.md +58 -0
- package/skills/stacks/orm/drizzle/SKILL.md +67 -0
- package/skills/stacks/orm/gorm/SKILL.md +73 -0
- package/skills/stacks/orm/knex/SKILL.md +64 -0
- package/skills/stacks/orm/mongoose/SKILL.md +64 -0
- package/skills/stacks/orm/prisma/SKILL.md +64 -0
- package/skills/stacks/orm/sequelize/SKILL.md +65 -0
- package/skills/stacks/orm/sqlalchemy/SKILL.md +71 -0
- package/skills/stacks/orm/typeorm/SKILL.md +70 -0
- package/skills/stacks/queue/bullmq/SKILL.md +69 -0
- package/skills/stacks/queue/celery/SKILL.md +68 -0
- package/skills/stacks/queue/kafka/SKILL.md +66 -0
- package/skills/stacks/queue/nats/SKILL.md +66 -0
- package/skills/stacks/queue/rabbitmq/SKILL.md +64 -0
- package/skills/stacks/queue/redis/SKILL.md +66 -0
- package/skills/stacks/runtime/beam/SKILL.md +72 -0
- package/skills/stacks/runtime/bun/SKILL.md +80 -0
- package/skills/stacks/runtime/deno/SKILL.md +74 -0
- package/skills/stacks/runtime/dotnet/SKILL.md +64 -0
- package/skills/stacks/runtime/jvm/SKILL.md +66 -0
- package/skills/stacks/runtime/node/SKILL.md +70 -0
- package/skills/stacks/runtime/pypy/SKILL.md +69 -0
- package/skills/stacks/runtime/python3/SKILL.md +70 -0
- package/skills/stacks/styling/bootstrap/SKILL.md +74 -0
- package/skills/stacks/styling/bulma/SKILL.md +80 -0
- package/skills/stacks/styling/chakra-ui/SKILL.md +61 -0
- package/skills/stacks/styling/css-modules/SKILL.md +54 -0
- package/skills/stacks/styling/mui/SKILL.md +60 -0
- package/skills/stacks/styling/sass/SKILL.md +63 -0
- package/skills/stacks/styling/shadcn-ui/SKILL.md +58 -0
- package/skills/stacks/styling/styled-components/SKILL.md +62 -0
- package/skills/stacks/styling/tailwind/SKILL.md +59 -0
- package/skills/stacks/styling/unocss/SKILL.md +64 -0
- package/skills/stacks/styling/vanilla-extract/SKILL.md +64 -0
- package/skills/stacks/styling/vuetify/SKILL.md +89 -0
- package/skills/stacks/testing/cypress/SKILL.md +68 -0
- package/skills/stacks/testing/jasmine/SKILL.md +67 -0
- package/skills/stacks/testing/jest/SKILL.md +67 -0
- package/skills/stacks/testing/mocha/SKILL.md +71 -0
- package/skills/stacks/testing/playwright/SKILL.md +68 -0
- package/skills/stacks/testing/puppeteer/SKILL.md +70 -0
- package/skills/stacks/testing/selenium/SKILL.md +70 -0
- package/skills/stacks/testing/vitest/SKILL.md +68 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
[← Índice](./README.md) · [🇬🇧 English](../en/MODELS.md) · [✦ Constella](../../README.pt-BR.md)
|
|
2
|
+
|
|
3
|
+
# Modelos ✦ A Constelação dos Motores 🌌
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
> Toda estrela em atividade numa empresa Constella é movida por um modelo. Esta página documenta as três famílias de motores — provedores **cloud**, **cérebros CLI** e runtimes **locais** GGUF — como seus catálogos são descobertos ao vivo (nunca chumbados no código), como a Constella ajusta um modelo local ao seu hardware, e os dois servidores llama.cpp dedicados (chat na `:8082`, embeddings na `:8083`) que mantêm a gravidade do workspace (RAG) e a inferência on-prem em funcionamento.
|
|
8
|
+
|
|
9
|
+
A regra de ouro de todo o módulo: **listas de modelos nunca são a fonte da verdade no código.** Elas vêm ao vivo de [models.dev](https://models.dev/api.json) ∩ o próprio endpoint `/v1/models` de cada provedor. As listas chumbadas são rebaixadas a *fallback offline apenas*.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Quando usar 🪐
|
|
14
|
+
|
|
15
|
+
| Você quer… | Ponto de entrada |
|
|
16
|
+
|---|---|
|
|
17
|
+
| Ver/conectar provedores cloud (Anthropic, OpenAI, Google…) | `connectProvider()`, `syncProvider()` — `src/server/providers.ts` |
|
|
18
|
+
| Atualizar a lista ao vivo e enriquecida de um provedor | `refreshProviderModels()` → `liveModels()` + `enrichModels()` |
|
|
19
|
+
| Escolher um modelo padrão recomendado para um provedor | `defaultModelFor()` — `src/server/model-catalog.ts` |
|
|
20
|
+
| Sondar CPU/RAM/GPU/VRAM da máquina | `detectHardware()` — `src/server/local-models.ts` |
|
|
21
|
+
| Baixar um GGUF local para o llama.cpp | `downloadGguf()` a partir do `GGUF_CATALOG` |
|
|
22
|
+
| Puxar / servir um modelo via Ollama | `pullModel()`, `ollamaServe()`, `loadModel()` |
|
|
23
|
+
| Iniciar o servidor de chat local (`:8082`) | `startLlamaServer()` / `ensureLlamaServer()` |
|
|
24
|
+
| Iniciar o servidor de embeddings do RAG (`:8083`) | `startEmbeddings()` / `ensureEmbedServer()` |
|
|
25
|
+
| Saber em qual binário CLI um agente roda | `pickBinary()` — `src/server/adapters/cli.ts` |
|
|
26
|
+
|
|
27
|
+
A superfície visível é a página **Models** (`/models`); a maioria das ações são server actions que revalidam esse caminho.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. Como funciona 🛰️
|
|
32
|
+
|
|
33
|
+
A Constella trata "um modelo" como algo que você seleciona para um **agente** (uma estrela em atividade). A *origem* do modelo é de um de três tipos, registrado na coluna `provider.kind`:
|
|
34
|
+
|
|
35
|
+
| `kind` | Significado | Auth | Exemplos de catalog ids |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| `cloud` | Uma API HTTP hospedada | `api_key` / `oauth` | `anthropic`, `openai`, `google_gemini`, `xai_grok`, `openrouter` |
|
|
38
|
+
| `cli` | Uma CLI de agente instalada localmente que a Constella conduz como subprocesso | `cli` / `oauth` | `claude_code`, `codex_cli`, `openclaw`, `hermes_cli`, `aider`, `opencode`, `copilot_cli`, `cursor_cli`, `cline_cli`, `kilo_code` |
|
|
39
|
+
| `local` | Um modelo servido no loopback (GGUF/Ollama) | `local` | `llamacpp`, `ollama` |
|
|
40
|
+
|
|
41
|
+
O menu completo de provedores conectáveis é o **`PROVIDER_CATALOG`** tipado (`src/data/providers-catalog.ts`) — mais de 60 entradas abrangendo APIs cloud, roteadores, endpoints compatíveis com OpenAI, plataformas cloud, runtimes locais e CLIs. Cada entrada carrega um `defaultAdapter`, `baseUrl`, flags de capacidade e um `status` (`available` / `experimental` / `requires_setup` / `planned`).
|
|
42
|
+
|
|
43
|
+
### As três fontes de metadados de modelos cloud
|
|
44
|
+
|
|
45
|
+
1. **models.dev** — a espinha dorsal. `src/server/model-catalog.ts` busca `https://models.dev/api.json`, normaliza o mapa `models` de cada provedor em `CatalogModel[]` (id, nome, contexto, limite de saída, custo de entrada/saída por 1M de tokens, capacidades, data de lançamento), e faz cache em memória + em disco em `<constellaHome>/cache/models-dev.json` com **TTL de ~24h**.
|
|
46
|
+
2. **O próprio `/v1/models` do provedor** — `liveModels()` consulta o endpoint ao vivo (ou `/api/tags` para o Ollama) para os ids *realmente disponíveis*. Roteadores como o OpenRouter retornam linhas ricas (preço + contexto) mantidas literalmente; provedores de primeira parte geralmente retornam apenas o id.
|
|
47
|
+
3. **`FALLBACK_MODELS`** (`src/data/models-dev.ts`) — um pequeno snapshot atual usado **apenas** quando tanto a rede quanto o cache em disco estão frios.
|
|
48
|
+
|
|
49
|
+
`enrichModels()` faz a interseção de (2) com (1): os ids ao vivo são preenchidos a partir do conjunto models.dev do provedor, depois de um índice global entre provedores (para que ids de roteador como `anthropic/claude-…` também resolvam). O resultado é gravado inteiramente na tabela `provider_model`.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 3. Fluxo principal 🌠
|
|
54
|
+
|
|
55
|
+
```mermaid
|
|
56
|
+
flowchart TD
|
|
57
|
+
A["Operador conecta um provedor"] --> B["connectProvider(catalogId, apiKey?)"]
|
|
58
|
+
B --> C["chave de API → vault (AES-256-GCM)"]
|
|
59
|
+
B --> D["syncProvider(id)"]
|
|
60
|
+
D --> E["syncAdapter → contagem + status ao vivo"]
|
|
61
|
+
D --> F["refreshProviderModels(id)"]
|
|
62
|
+
F --> G["liveModels(): /v1/models ou /api/tags do provedor"]
|
|
63
|
+
F --> H["modelsForCatalog(): cache models.dev (24h)"]
|
|
64
|
+
G --> I["enrichModels(): ao vivo ∩ models.dev + índice global"]
|
|
65
|
+
H --> I
|
|
66
|
+
I --> J["defaultModelFor(): preferência, senão mais recente"]
|
|
67
|
+
I --> K["substitui linhas provider_model"]
|
|
68
|
+
J --> K
|
|
69
|
+
K --> L["UI de Models lê CachedModel[]"]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
No boot (`src/server/boot.ts`), a Constella aquece o catálogo e sobe os motores locais:
|
|
73
|
+
|
|
74
|
+
- `warmModelsDev()` — pré-carrega o cache do models.dev.
|
|
75
|
+
- `ensureEmbedServer()` — inicia o servidor de embeddings do RAG na `:8083` se houver um modelo de embedding local instalado.
|
|
76
|
+
- `ensureLlamaServer()` — inicia o servidor de chat local na `:8082` se houver um GGUF de chat instalado.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 4. Conceitos-chave 🕳️
|
|
81
|
+
|
|
82
|
+
### `CatalogModel` — a unidade normalizada
|
|
83
|
+
|
|
84
|
+
Tanto models.dev quanto `/v1/models` são achatados numa única forma (`src/data/models-dev.ts`):
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
type CatalogModel = {
|
|
88
|
+
id: string; // "claude-opus-4-8", "gpt-5.2", "grok-4"
|
|
89
|
+
name: string; // "Claude Opus 4.8"
|
|
90
|
+
context: number; // tokens máx. de contexto (0 = desconhecido)
|
|
91
|
+
outputLimit: number; // tokens máx. de saída
|
|
92
|
+
inputCost: number; // USD / 1M tokens de entrada (0 = desconhecido / grátis)
|
|
93
|
+
outputCost: number; // USD / 1M tokens de saída
|
|
94
|
+
caps: { reasoning: boolean; tools: boolean; vision: boolean };
|
|
95
|
+
released: string; // data ISO — dirige a escolha do padrão "mais recente"
|
|
96
|
+
};
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Mapeamento catalog → chave models.dev
|
|
100
|
+
|
|
101
|
+
`CATALOG_TO_MODELSDEV` mapeia o `catalogId` da Constella para a chave canônica de provedor do models.dev (ex.: `google_gemini → google`, `xai_grok → xai`, `dashscope → alibaba`). Qualquer coisa não mapeada cai num palpite normalizado via `modelsDevKeyForCatalog()`. Notavelmente, os cérebros CLI `claude_code → anthropic` e `gemini_cli → google` mapeiam para uma família de primeira parte para que versão/contexto ainda possam ser enriquecidos.
|
|
102
|
+
|
|
103
|
+
### Padrão recomendado
|
|
104
|
+
|
|
105
|
+
`defaultModelFor()` consulta `DEFAULT_PREFERENCE` (uma ordem de preferência por substring por chave, ex.: `anthropic: ["sonnet-4", "sonnet", "opus-4", "opus"]`). A primeira correspondência disponível vence, empates resolvidos pelo lançamento mais recente; sem correspondência de preferência, escolhe o modelo datado mais recente.
|
|
106
|
+
|
|
107
|
+
### Custo e uso são reais
|
|
108
|
+
|
|
109
|
+
O custo **nunca é fabricado**. Os metadados de custo cloud vêm do models.dev/`/v1/models` (`inputCost`/`outputCost` em USD por **1M** de tokens). Para as CLIs Claude/Codex, o custo real por execução é lido diretamente da saída JSON da CLI (`total_cost_usd`, `usage`) em `src/server/adapters/cli.ts`. CLIs que não emitem token/custo no modo headless registram `usd: 0` honestamente.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 5. Provedores cloud ✦
|
|
114
|
+
|
|
115
|
+
O `PROVIDER_CATALOG` é a única fonte tipada da verdade. Uma fatia representativa:
|
|
116
|
+
|
|
117
|
+
| Catalog id | Nome de exibição | Categoria | Adapter | URL base |
|
|
118
|
+
|---|---|---|---|---|
|
|
119
|
+
| `anthropic` | Anthropic | `cloud_api` | `http_anthropic` | `https://api.anthropic.com` |
|
|
120
|
+
| `openai` | OpenAI | `cloud_api` | `http_openai` | `https://api.openai.com/v1` |
|
|
121
|
+
| `google_gemini` | Google AI / Gemini | `cloud_api` | `http_google` | `https://generativelanguage.googleapis.com` |
|
|
122
|
+
| `xai_grok` | xAI / Grok | `cloud_api` | `http_xai` | `https://api.x.ai/v1` |
|
|
123
|
+
| `deepseek` | DeepSeek | `cloud_api` | `http_deepseek` | `https://api.deepseek.com` |
|
|
124
|
+
| `groq` | Groq | `cloud_api` | `http_groq` | `https://api.groq.com/openai/v1` |
|
|
125
|
+
| `mistral`¹ | Mistral | `cloud_api` | — | — |
|
|
126
|
+
| `openrouter` | OpenRouter (roteador) | `router` | `http_openrouter` | `https://openrouter.ai/api/v1` |
|
|
127
|
+
| `openai_compatible` | Endpoint compatível com OpenAI | `openai_compatible` | `http_openai_compat` | (sua URL) |
|
|
128
|
+
| `azure_openai` | Azure OpenAI | `cloud_platform` | `http_azure_openai` | (configuração) |
|
|
129
|
+
| `aws_bedrock` | AWS Bedrock | `cloud_platform` | `sdk_bedrock` | (SigV4) |
|
|
130
|
+
| `vertex_ai` | Google Vertex AI | `cloud_platform` | `sdk_vertex` | (GCP) |
|
|
131
|
+
|
|
132
|
+
> ¹ `mistral` aparece nos mapas `CATALOG_TO_MODELSDEV` / `DEFAULT_PREFERENCE` mas não é uma linha autônoma no `PROVIDER_CATALOG` atual; chegue ao Mistral via OpenRouter ou um endpoint compatível com OpenAI.
|
|
133
|
+
|
|
134
|
+
**Autenticação.** As chaves de API vão para o **vault** (AES-256-GCM, tabela `vault`, ref como `openai_api_key`) — *nunca* para a linha `provider`. O `/v1/models` da Anthropic é consultado com `x-api-key` + `anthropic-version`; tudo o mais usa auth `Bearer` compatível com OpenAI.
|
|
135
|
+
|
|
136
|
+
**Roteadores e endpoints compatíveis com OpenAI** (OpenRouter, LiteLLM, servidor LM Studio, vLLM, superfície OpenAI do Ollama) expõem uma lista `/v1/models` ao vivo e são enriquecidos da mesma forma; o OpenRouter ainda retorna preço por token que a Constella converte para por-1M.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 6. Cérebros CLI 🚀
|
|
141
|
+
|
|
142
|
+
Provedores CLI são **CLIs de agente instaladas localmente** que a Constella conduz como subprocessos dentro do workspace da org (`src/server/adapters/cli.ts`). Elas autenticam por meio do *próprio* login/chaves — a Constella nunca guarda suas credenciais.
|
|
143
|
+
|
|
144
|
+
| Adapter | Binário | Modelos (`CLI_MODELS`) | Reporta custo? |
|
|
145
|
+
|---|---|---|---|
|
|
146
|
+
| `cli_claude_code` | `claude` | `opus`, `sonnet`, `haiku` | ✅ `total_cost_usd` + uso |
|
|
147
|
+
| `cli_codex` | `codex` | `gpt-5-codex`, `o4-mini` | best-effort do JSONL |
|
|
148
|
+
| `cli_openclaw` | `openclaw` | `(default)`, `openai/gpt-5.4`, `anthropic/claude-sonnet-4` | ❌ (0) |
|
|
149
|
+
| `cli_hermes` | `hermes` | `(default)`, `anthropic/claude-sonnet-4.6`, `openai/gpt-5.5` | ❌ (0) |
|
|
150
|
+
| `cli_aider` | `aider` | `(default)` + prefixado por provedor (ao vivo via `aider --list-models`) | ❌ (0) |
|
|
151
|
+
| `cli_opencode` | `opencode` | `(default)` + prefixado por provedor (ao vivo via `opencode models`) | ❌ (0) |
|
|
152
|
+
| `cli_copilot` | `copilot` | `(default)`, `claude-sonnet-4.5`, `gpt-5` | ❌ (0) |
|
|
153
|
+
| `cli_cursor` | `cursor-agent` | `(default)`, `claude-4.5-sonnet`, `gpt-5` | ❌ (0) |
|
|
154
|
+
| `cli_cline` | `cline` | `(default)` | ❌ (0) |
|
|
155
|
+
| `cli_kilo` | `kilocode` | `(default)` | ❌ (0) |
|
|
156
|
+
|
|
157
|
+
- `pickBinary(adapter, model)` resolve qual executável roda; `strongestModelFor(adapter)` retorna o melhor tier (ex.: `opus` para o Claude) para etapas de revisão/segurança/validação.
|
|
158
|
+
- Apenas `cli_opencode` e `cli_aider` expõem um comando de listagem ao vivo real via `cliModels()`; os demais caem nas opções estáticas de `CLI_MODELS`.
|
|
159
|
+
- As execuções `claude` são **vanilla** (uma sobreposição `--settings` com `disableAllHooks:true`) para que os hooks/plugins pessoais do `~/.claude` do operador não vazem para a voz dos agentes. Pesquisa web adiciona `--allowedTools WebSearch WebFetch` (padrão LIGADO; `CONSTELLA_WEB_RESEARCH=0` desliga).
|
|
160
|
+
- Permissões por run-mode: `start` → `bypassPermissions` (total); `vps`/`auth`/`portable` → `acceptEdits` (enjaulado). Sobrescreva com `CONSTELLA_AGENT_FULL_ACCESS=1|0`. Timeout padrão por execução: **180s**.
|
|
161
|
+
- `detectCliAuth()` retorna `ready` / `needs_login` / `needs_key` / `unknown` por binário; `LOGIN_HINTS` mostra como autenticar cada um.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 7. Modelos locais — catálogo GGUF + Ollama 🌌
|
|
166
|
+
|
|
167
|
+
A inferência local tem dois backends:
|
|
168
|
+
|
|
169
|
+
### llama.cpp + GGUF (`GGUF_CATALOG`)
|
|
170
|
+
|
|
171
|
+
`src/data/model-catalog.ts` **gera** o catálogo GGUF a partir de uma spec compacta de famílias (`GGUF_FAMILIES`) usando a convenção de nomes confiável da lmstudio-community:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
https://huggingface.co/lmstudio-community/<Repo>-GGUF/resolve/main/<Repo>-<QUANT>.gguf
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
- As famílias abrangem **Qwen 2.5/3/3.5/3.6, Llama 3.x, Gemma 2/3/4, Mistral/Ministral/Devstral, Phi, distilados DeepSeek-R1, Yi, Granite, SmolLM2, Falcon3, EXAONE** e mais, marcados como `chat` / `code` / `reasoning` / `embed`.
|
|
178
|
+
- Os quants são limitados por tamanho para que cada arquivo permaneça em parte única: ≤9B → `Q3_K_L, Q4_K_M, Q6_K, Q8_0`; ≤34B → remove `Q8_0`; ≥35B → apenas `Q3_K_L, Q4_K_M`.
|
|
179
|
+
- `sizeBytes` é estimado por `params × QUANT_MULT[quant]` (bytes-por-peso: `Q3_K_L 0.55`, `Q4_K_M 0.67`, `Q6_K 0.90`, `Q8_0 1.13`) — suficiente para a checagem de encaixe na GPU.
|
|
180
|
+
- O modelo de embedding `nomic-embed-text-v1.5 (Q8_0)` é mantido em primeiro lugar e tratado de forma especial em todo lugar — ele alimenta o RAG semântico.
|
|
181
|
+
|
|
182
|
+
`downloadGguf(id)` checa o disco livre (recusa se o drive não couber ~1,1× o modelo), transmite o arquivo para `<constellaHome>/models/` com progresso ao vivo de bytes, verifica o tamanho (e o SHA-256 quando conhecido), e o registra uma vez **por máquina** na tabela `local_model` (dedup pelo caminho do arquivo, compartilhado entre workspaces). `removeGguf(id)` apaga o arquivo + as linhas.
|
|
183
|
+
|
|
184
|
+
### Ollama (`OLLAMA_CATALOG`)
|
|
185
|
+
|
|
186
|
+
Uma lista curta curada puxada via o daemon do Ollama: `nomic-embed-text`, `mxbai-embed-large` (embed), `llama3.2:3b`, `qwen2.5:7b`, `qwen2.5-coder:7b`, `gemma2:2b`, `phi3.5`. O servidor fica em `OLLAMA_URL` (padrão `http://127.0.0.1:11434`).
|
|
187
|
+
|
|
188
|
+
| Função | Ação |
|
|
189
|
+
|---|---|
|
|
190
|
+
| `ollamaInstalled()` / `ollamaServe("start"\|"stop")` | detectar / iniciar / parar o daemon |
|
|
191
|
+
| `ollamaInfo()` (`/api/tags`) | no ar? + modelos instalados |
|
|
192
|
+
| `pullModel(name)` (`/api/pull`) | baixar um modelo |
|
|
193
|
+
| `loadModel(name)` / `ollamaPs()` (`/api/ps`) | carregar na / listar na memória |
|
|
194
|
+
| `removeModel(name)` (`/api/delete`) | desinstalar |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 8. Checagem de encaixe na GPU + recomendação de quant 🛰️
|
|
199
|
+
|
|
200
|
+
`detectHardware()` roda uma sondagem **real** (cacheada por processo; só a RAM livre é reatualizada na leitura):
|
|
201
|
+
|
|
202
|
+
| Campo | Fonte |
|
|
203
|
+
|---|---|
|
|
204
|
+
| `cpu`, `cores` | `os.cpus()` |
|
|
205
|
+
| `ram` | `os.totalmem()` / `os.freemem()` |
|
|
206
|
+
| `gpu`, `vram`, `backend`, `accel` | `nvidia-smi` → CUDA; macOS arm64 → Metal (memória unificada ≈ 70% como VRAM); senão CPU + AVX2/NEON |
|
|
207
|
+
| `diskFree` | `Get-PSDrive` (Windows) / `df -h` (POSIX) no drive home da Constella |
|
|
208
|
+
| `recommendedQuant` | `≥32 GB → Q5_K_M`, `≥16 GB → Q4_K_M`, senão `Q4_0` |
|
|
209
|
+
| `maxParams` | `≥64 GB → 70B`, `≥32 GB → 34B`, `≥16 GB → 13B`, senão `7B` |
|
|
210
|
+
|
|
211
|
+
A checagem de encaixe decide o offload para GPU na hora de servir. `gpuOffloadArgs(sizeBytes)`:
|
|
212
|
+
|
|
213
|
+
- Retorna `[]` (CPU) quando o backend não é CUDA/Metal — a flag `-ngl` não faria nada.
|
|
214
|
+
- Retorna `[]` quando um modelo dimensionado não couber: `sizeBytes × 1.15 > VRAM` → permanece na CPU para que um modelo grande demais ainda **carregue** em vez de falhar.
|
|
215
|
+
- Caso contrário retorna `["-ngl", "99"]` para fazer offload de todas as camadas para a GPU.
|
|
216
|
+
|
|
217
|
+
```mermaid
|
|
218
|
+
flowchart TD
|
|
219
|
+
A["detectHardware()"] --> B{"backend?"}
|
|
220
|
+
B -->|"CUDA / Metal"| C{"sizeBytes × 1.15 > VRAM?"}
|
|
221
|
+
B -->|"CPU"| D["[] (sem offload)"]
|
|
222
|
+
C -->|"sim — não cabe"| D
|
|
223
|
+
C -->|"não — cabe"| E["-ngl 99 (offload total para GPU)"]
|
|
224
|
+
A --> F["recommendedQuant: ≥32→Q5_K_M, ≥16→Q4_K_M, senão Q4_0"]
|
|
225
|
+
A --> G["maxParams: ≥64→70B, ≥32→34B, ≥16→13B, senão 7B"]
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
No Windows, builds CUDA do llama.cpp precisam das DLLs do runtime CUDA (`cudart64_*`, `cublas64_*`); `ensureCudaRuntime()` se autocura buscando o asset `cudart-…` correspondente para que `-ngl` realmente faça offload em vez de cair silenciosamente para a CPU. `downloadLlamaServer()` instala automaticamente o prebuilt certo (`CUDA` quando uma GPU NVIDIA é detectada, senão `CPU`) dos releases de `ggml-org/llama.cpp` em `<constellaHome>/bin/llama`.
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## 9. Os dois servidores locais — chat `:8082` + embeddings `:8083` 🌠
|
|
233
|
+
|
|
234
|
+
A Constella roda **duas instâncias separadas do llama.cpp** para que os embeddings do RAG nunca disputem com a inferência de chat:
|
|
235
|
+
|
|
236
|
+
| Servidor | Porta | Env | Iniciado por | Propósito |
|
|
237
|
+
|---|---|---|---|---|
|
|
238
|
+
| Chat / reasoning | `8082` | `LLAMACPP_URL` (`http://127.0.0.1:8082`) | `startLlamaServer()` / `ensureLlamaServer()` | serviço compatível com OpenAI do primeiro GGUF de **chat** instalado para agentes `local_llamacpp` |
|
|
239
|
+
| Embeddings do RAG | `8083` | `CONSTELLA_EMBED_URL` (`http://127.0.0.1:8083`) | `startEmbeddings()` / `ensureEmbedServer()` | serve o GGUF de **embedding** (nomic) com `--embeddings --pooling mean` para RAG semântico |
|
|
240
|
+
|
|
241
|
+
Ambos vinculam **apenas ao loopback** (`127.0.0.1`). Os argumentos de inicialização:
|
|
242
|
+
|
|
243
|
+
- Chat: `llama-server -m <chat.gguf> --host 127.0.0.1 --port 8082 -c 4096 [-ngl 99]`
|
|
244
|
+
- Embed: `llama-server -m <embed.gguf> --embeddings --host 127.0.0.1 --port 8083 -c 2048 --pooling mean [-ngl 99]`
|
|
245
|
+
|
|
246
|
+
Modelos de embedding não servem chat — se seu único modelo local for um embedder, `startLlamaServer()` o roteia para a `:8083` e avisa para baixar um GGUF de chat. A saúde é reportada honestamente via `llamaServerStatus()` (`/v1/models`) e `embedServerUp()` (`/health`).
|
|
247
|
+
|
|
248
|
+
### Cadeia de fallback de embeddings do RAG
|
|
249
|
+
|
|
250
|
+
`src/server/rag.ts` faz embedding primeiro pelo servidor dedicado, depois pelo **Ollama** (`OLLAMA_URL`, modelo `CONSTELLA_EMBED_MODEL` padrão `nomic-embed-text`), depois por uma **heurística de palavras-chave** se nenhum estiver no ar — a recuperação degrada, nunca quebra. O `nomic-embed-text` exige prefixos assimétricos: documentos `search_document:`, consultas `search_query:`.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## 10. Tabelas 🪐
|
|
255
|
+
|
|
256
|
+
| Tabela | Colunas-chave | Papel |
|
|
257
|
+
|---|---|---|
|
|
258
|
+
| `provider` | `catalogId`, `adapter`, `kind` (`cloud`/`cli`/`local`), `auth`, `status` (`connected`/`needs_sync`/`error`), `modelCount`, `cliVersion`, `defaultModel`, `authState` | um provedor conectado por workspace |
|
|
259
|
+
| `vault` | `providerId`, `ref` (`<catalogId>_api_key`), `ciphertext`, `iv` | segredos criptografados (AES-256-GCM) |
|
|
260
|
+
| `provider_model` | `providerId`, `modelId`, `name`, `context`, `outputLimit`, `inputCost`, `outputCost`, `caps`, `released`, `isDefault` | catálogo enriquecido em cache que a UI lê; substituído por inteiro a cada refresh |
|
|
261
|
+
| `local_model` | `name`, `file`, `quant`, `params`, `sizeBytes`, `sha256`, `bind` (`127.0.0.1:8082`), `loaded` | registro de GGUFs instalados (por máquina, dedup por `file`) |
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 11. Passo a passo 🛰️
|
|
266
|
+
|
|
267
|
+
### Conectar um provedor cloud
|
|
268
|
+
1. Abra **Models**, escolha um provedor do catálogo (ex.: Anthropic).
|
|
269
|
+
2. Cole a chave de API → `connectProvider("anthropic", key)` a guarda no vault.
|
|
270
|
+
3. `syncProvider()` consulta o endpoint ao vivo, define `status`/`modelCount`, depois `refreshProviderModels()` popula `provider_model`.
|
|
271
|
+
4. Atribua um modelo a um agente (campo de modelo no `Agent.md` do agente).
|
|
272
|
+
|
|
273
|
+
### Rodar um modelo localmente com llama.cpp
|
|
274
|
+
1. **Models → llama.cpp → Install** (`downloadLlamaServer()` pega o prebuilt certo).
|
|
275
|
+
2. Baixe um GGUF de chat do catálogo (`downloadGguf(id)`), e o GGUF de embedding `nomic-embed-q8` para o RAG.
|
|
276
|
+
3. **Start server** (`startLlamaServer()`) — sobe na `:8082`, fazendo offload para a GPU quando o modelo couber.
|
|
277
|
+
4. `connectLlamaCpp()` registra `llamacpp` como provedor local; aponte os agentes para `local_llamacpp`.
|
|
278
|
+
|
|
279
|
+
### Usar o Ollama
|
|
280
|
+
1. Instale o Ollama, **Start** (`ollamaServe("start")`).
|
|
281
|
+
2. `pullModel("qwen2.5:7b")`, depois `loadModel(...)` para aquecê-lo.
|
|
282
|
+
3. Conecte via o provedor `ollama` (lista ao vivo `/api/tags`).
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## 12. Estados possíveis ✦
|
|
287
|
+
|
|
288
|
+
| Superfície | Estados |
|
|
289
|
+
|---|---|
|
|
290
|
+
| `provider.status` | `connected`, `needs_sync`, `error` |
|
|
291
|
+
| `provider.authState` | `ready`, `needs_login`, `needs_key`, `unknown` |
|
|
292
|
+
| `provider.syncStatus` | `implemented`, `manual`, `not_implemented` |
|
|
293
|
+
| `status` do catálogo | `available`, `experimental`, `requires_setup`, `planned`, `unsupported` |
|
|
294
|
+
| Servidor llama.cpp | no ar / fora (`/v1/models`); CPU vs `-ngl 99` (GPU) |
|
|
295
|
+
| Servidor de embed | no ar / fora (`/health`); modelo instalado? |
|
|
296
|
+
| Download de GGUF | progresso ao vivo `{ received, total, done, error }` |
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 13. Integrações relacionadas 🌌
|
|
301
|
+
|
|
302
|
+
- **[AGENTS](./AGENTS.md)** — cada agente seleciona um provedor + modelo; o tier padrão vem de `defaultModelFor()`.
|
|
303
|
+
- **[KB_RAG](./KB_RAG.md)** / **[MEMORY_RAG](./MEMORY_RAG.md)** — consomem o servidor de embeddings na `:8083`.
|
|
304
|
+
- **[AI_ARCHITECTURE](./AI_ARCHITECTURE.md)** — onde os adapters CLI e a resolução de runtime se encaixam.
|
|
305
|
+
- **[CONFIGURATION](./CONFIGURATION.md)** — flags de agente por workspace (pesquisa web, locks de arquivo, guarda de comandos).
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## 14. Segurança 🕳️
|
|
310
|
+
|
|
311
|
+
- **Segredos apenas no vault.** Chaves de API são criptografadas com AES-256-GCM (`CONSTELLA_VAULT_KEY`) na tabela `vault` — nunca nas linhas `provider`, nunca em logs.
|
|
312
|
+
- **Servidores locais vinculados ao loopback** (`127.0.0.1`) — sem exposição de `:8082`/`:8083` na LAN.
|
|
313
|
+
- **Ids de modelo são validados** antes de chegarem ao argv (`safeModel` / `safeModelSlash`) porque o frontmatter do `Agent.md` é gravável pelo agente — um valor sem restrição (`sonnet"; rm -rf ~`) poderia ser reinterpretado pelo shell. Ids inválidos são descartados para que a CLI use seu padrão.
|
|
314
|
+
- **Integridade do GGUF** — checagem de tamanho + SHA-256 (quando conhecido); um download truncado é apagado, nunca instalado.
|
|
315
|
+
- **Execuções vanilla do agente** — `disableAllHooks` mantém hooks/plugins do operador fora dos subprocessos de agente.
|
|
316
|
+
- **Credenciais da CLI ficam com a CLI** — a Constella conduz `aider`/`opencode`/`cursor`/etc. mas nunca guarda suas chaves.
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## 15. Solução de problemas 🚀
|
|
321
|
+
|
|
322
|
+
| Sintoma | Causa provável / correção |
|
|
323
|
+
|---|---|
|
|
324
|
+
| Lista de modelos vazia após conectar | models.dev inacessível **e** cache em disco frio → apenas `FALLBACK_MODELS`; tente online, ou verifique o `/v1/models` do provedor. |
|
|
325
|
+
| GPU não usada (CPU saturada) | DLLs do runtime CUDA faltando → rode **Install** de novo (`ensureCudaRuntime(force)` se autocura), ou o modelo não cabe na VRAM (`sizeBytes × 1.15 > VRAM`). |
|
|
326
|
+
| `llama-server not installed` | rode **Install** ou `brew install llama.cpp`; define o marcador `INSTALLED`. |
|
|
327
|
+
| Servidor de chat não inicia | apenas um modelo de embedding instalado → baixe um GGUF de chat/instruct; verifique que não está carregando o nomic na `:8082`. |
|
|
328
|
+
| RAG não semântico | servidor de embed fora → `ensureEmbedServer()`; precisa de um GGUF de embedding (baixe `nomic-embed-q8`) ou Ollama com `nomic-embed-text`. |
|
|
329
|
+
| `Ollama not running` | inicie-o (`ollamaServe("start")` / `ollama serve`); a porta `11434` pode estar ocupada. |
|
|
330
|
+
| `not enough free space` | o GGUF precisa de ~1,1× seu tamanho livre; libere disco ou escolha um quant menor. |
|
|
331
|
+
| Provedor CLI `needs_login` | rode a auth do binário (veja `LOGIN_HINTS`, ex.: `codex login`, `opencode auth login`). |
|
|
332
|
+
| `SHA-256 mismatch` | download corrompido — apague e tente de novo. |
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## Links relacionados
|
|
337
|
+
|
|
338
|
+
- [AGENTS](./AGENTS.md) · [AI_ARCHITECTURE](./AI_ARCHITECTURE.md) · [ARCHITECTURE](./ARCHITECTURE.md)
|
|
339
|
+
- [KB_RAG](./KB_RAG.md) · [MEMORY_RAG](./MEMORY_RAG.md) · [CONFIGURATION](./CONFIGURATION.md)
|
|
340
|
+
- [INSTALLATION](./INSTALLATION.md) · [ONBOARDING](./ONBOARDING.md) · [WORKFLOW](./WORKFLOW.md)
|
|
341
|
+
- [✦ Voltar ao índice da documentação](./README.md)
|