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,307 @@
|
|
|
1
|
+
[← Índice](./README.md) · [🇬🇧 English](../en/CHAT_COMMANDS.md) · [✦ Constella](../../README.pt-BR.md)
|
|
2
|
+
|
|
3
|
+
# 🛰️ Comandos de Chat
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
> Os comandos de barra (slash) são o painel de controle da nave central. Digite um `/comando` na Team Room ou em qualquer DM e o servidor executa uma ação real do lado do servidor, depois publica o resultado de volta no mesmo thread — sem precisar de uma ida e volta com um agente.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 2. Descrição curta
|
|
12
|
+
|
|
13
|
+
Os comandos de chat são reconhecidos a partir de uma `/` no início da mensagem no caminho de envio. Eles são interceptados **antes** do caminho conversacional normal (o token `[[CREATE_WORK]]` e o roteamento por `@mention`) e executados por `runSlashCommand` em `src/server/commands.ts`. Cada comando publica seu resultado diretamente no canal ativo; alguns também passam a vez para um agente que responde em seguida.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 3. Quando usar
|
|
18
|
+
|
|
19
|
+
Use comandos de barra quando você quiser uma **ação determinística e imediata** em vez de uma conversa:
|
|
20
|
+
|
|
21
|
+
- Conduzir o ciclo de trabalho sem prosa: `/approve`, `/run-247`, `/pause`, `/reject`, `/cancel`, `/archive`.
|
|
22
|
+
- Consultar o estado da constelação rapidamente: `/status`, `/agents`, `/agent`, `/locks`, `/models`, `/skills`, `/telegram`.
|
|
23
|
+
- Acessar a nebulosa de memória: `/kb`, `/search`, `/graph`, `/reindex`, `/curate`.
|
|
24
|
+
- Disparar gates e pipelines: `/test-dev`, `/review`, `/github`, `/prepare-deploy`, `/export-source`.
|
|
25
|
+
- Semear novo trabalho ou itens do board: `/new-goal`, `/new-issue`, `/new-spec`, `/generate-plan`, `/assign`, `/close-sprint`.
|
|
26
|
+
|
|
27
|
+
Para pedidos livres ("construa uma página de cobrança"), basta falar com **@ada** na Team Room ou usar `/new-goal` — veja [DM.md](./DM.md) e [WORKFLOW.md](./WORKFLOW.md).
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 4. Como funciona 🌌
|
|
32
|
+
|
|
33
|
+
O caminho de envio vive em `src/server/chat.ts`. Depois de resolver a organização, o workspace e o roster de agentes, ele inspeciona o texto da mensagem (já com trim):
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
// src/server/chat.ts — slash commands (room + DM, not Telegram)
|
|
37
|
+
const trimmed = (text ?? "").trim();
|
|
38
|
+
if (trimmed.startsWith("/") && channel !== "telegram") {
|
|
39
|
+
const { runSlashCommand } = await import("@/server/commands");
|
|
40
|
+
const r = await runSlashCommand(org.id, workspace.id, agents, channel, trimmed);
|
|
41
|
+
if (r.handled) { revalidatePath("/", "layout"); return { responders: r.responders }; }
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Fatos-chave fundamentados no código:
|
|
46
|
+
|
|
47
|
+
- **Canais**: os comandos de barra são reconhecidos na **Team Room** (`room`) e em **DMs** (`dm:<handle>`). Eles **não** são reconhecidos no canal `telegram` — o Telegram tem seu próprio handler de comando de controle remoto (`handleCommand` em `src/server/telegram.ts`). Veja [TELEGRAM.md](./TELEGRAM.md).
|
|
48
|
+
- **Parsing**: `runSlashCommand` divide no primeiro espaço. O token antes do espaço vira `cmd` em minúsculas; tudo depois vira `rest` (o argumento), com trim.
|
|
49
|
+
- **Eco + resposta**: a maioria dos comandos primeiro ecoa sua entrada bruta com `postOp(...)` (como operador), depois publica um resultado com `post(...)`. O autor do resultado normalmente é `system`, mas vários comandos publicam **como um agente específico** (ex.: Vannevar, Edsger, Werner, Donald, Ada).
|
|
50
|
+
- **Responders**: `runSlashCommand` retorna `{ handled, responders }`. Um array `responders` não vazio significa que o(s) agente(s) nomeado(s) deve(m) responder em seguida — usado por `/new-goal`, `/review`.
|
|
51
|
+
- **Wake**: todo comando tratado chama `wake(wsId)` (via o helper interno `done()`) para acordar o worker/bus.
|
|
52
|
+
- **Sessões**: `ensureActiveSession(wsId, channel)` anexa o resultado à `chatSession` ativa do canal.
|
|
53
|
+
|
|
54
|
+
### Auto-roteamento da Room
|
|
55
|
+
|
|
56
|
+
Na Team Room, um texto puro que **não** é um `/comando` e **não** é uma `@mention` recebe automaticamente o prefixo `/kb` antes de ser enviado (veja `welcome-chat.tsx` e `home-command-bar.tsx`). Então digitar `como funciona o auth?` na room equivale a `/kb como funciona o auth?`. Em uma DM, o texto é enviado como está para aquele agente.
|
|
57
|
+
|
|
58
|
+
### Barra de comando da Home
|
|
59
|
+
|
|
60
|
+
A barra de comando da Welcome Home (`src/components/modules/home-command-bar.tsx`) reaproveita o mesmo dispatch e mostra um menu de autocomplete para um subconjunto selecionado: `/kb`, `/status`, `/new-goal`, `/agents`, `/reindex`, `/curate`, `/help`. O conjunto completo de comandos abaixo funciona em qualquer input de room/DM, independentemente do menu.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 5. Fluxo principal
|
|
65
|
+
|
|
66
|
+
```mermaid
|
|
67
|
+
flowchart TD
|
|
68
|
+
A["Operador digita uma mensagem"] --> B{"começa com '/'\ne channel != telegram?"}
|
|
69
|
+
B -- "não" --> C["Caminho normal:\nroteamento @mention / auto-rota KB"]
|
|
70
|
+
B -- "sim" --> D["runSlashCommand(orgId, wsId, agents, channel, raw)"]
|
|
71
|
+
D --> E["ensureActiveSession + divide cmd / rest"]
|
|
72
|
+
E --> F{"switch (cmd)"}
|
|
73
|
+
F --> G["postOp: ecoa a entrada do operador"]
|
|
74
|
+
G --> H["Executa a ação\n(plan-ops / work-ops / kb / rag / github / …)"]
|
|
75
|
+
H --> I["publica resultado como system ou um agente nomeado"]
|
|
76
|
+
I --> J["done(): wake(wsId)\nretorna { handled:true, responders }"]
|
|
77
|
+
J --> K{"responders não vazio?"}
|
|
78
|
+
K -- "sim" --> L["Agente responde em seguida\n(ada / revisor)"]
|
|
79
|
+
K -- "não" --> M["Thread atualizado; sem turno de agente"]
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 6. Conceitos-chave 🪐
|
|
85
|
+
|
|
86
|
+
| Conceito | Significado |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| `cmd` | O token em minúsculas antes do primeiro espaço (ex.: `/approve`). |
|
|
89
|
+
| `rest` | Texto com trim após o primeiro espaço — o argumento do comando. |
|
|
90
|
+
| `responders` | Handles de agentes que devem responder após o comando (handoff). |
|
|
91
|
+
| `postOp` | Insere sua entrada bruta como mensagem `fromKind: operator`. |
|
|
92
|
+
| `post` | Insere o resultado como `fromKind: agent` com um `fromHandle` (em geral `system`). |
|
|
93
|
+
| `kind` | Dica opcional de renderização: `kb-card`, `agent-card`, `cleared`. |
|
|
94
|
+
| `sources` | Referências de citação anexadas às respostas da KB. |
|
|
95
|
+
| `done()` | Helper interno: chama `wake(wsId)` e retorna `{ handled:true, responders }`. |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 7. O catálogo de comandos (uma grande tabela) ✦
|
|
100
|
+
|
|
101
|
+
Todo comando reconhecido por `runSlashCommand`, agrupado por categoria. "Responde como" é o `fromHandle` da mensagem de resultado; "Passa a vez" é o agente no array `responders` retornado (responde em seguida).
|
|
102
|
+
|
|
103
|
+
### Ajuda & informação
|
|
104
|
+
|
|
105
|
+
| Comando (aliases) | Args | O que faz | Responde como | Passa a vez |
|
|
106
|
+
| --- | --- | --- | --- | --- |
|
|
107
|
+
| `/help` | — | Publica a lista completa de comandos. | `system` | — |
|
|
108
|
+
| `/status` | — | Conta goals ativos, issues abertas (col ≠ `done`) e tasks em andamento (col = `doing`). | `system` | — |
|
|
109
|
+
| `/agents` | — | Lista o roster: `@handle — nome (role, status)`. | `system` | — |
|
|
110
|
+
| `/agent <handle>` | `<handle>` (com ou sem `@`) | Inspeciona um agente: nome, role, status, health, runtime (adapter / model) + link para o Agent Studio. | o próprio handle do agente (card) | — |
|
|
111
|
+
|
|
112
|
+
### Conhecimento & nebulosa de memória 🌠
|
|
113
|
+
|
|
114
|
+
| Comando (aliases) | Args | O que faz | Responde como | Passa a vez |
|
|
115
|
+
| --- | --- | --- | --- | --- |
|
|
116
|
+
| `/kb` (`/ask-kb`) | `<pergunta>` | Pergunta à Knowledge Base via `kbAnswer`; responde com referências (`sources`). Respostas de visão geral renderizam como `kb-card`. Agenda um reindex do chat. | `vannevar` | — |
|
|
117
|
+
| `/search <q>` | `<consulta>` | Mesmo motor de `/kb` (`kbAnswer`) — um alias com sabor de busca e seu próprio aviso de argumento vazio. | `vannevar` | — |
|
|
118
|
+
| `/graph <key>` | chave de spec, chave de issue, ou substring do título do goal | Resolve a semente (spec → issue → goal) e mostra o conhecimento conectado via `relatedKnowledge`, agrupado por tipo. | `vannevar` | — |
|
|
119
|
+
| `/reindex` | — | Reconstrói o índice RAG/KB agora (`indexRag`); reporta a contagem de chunks e se foi semântico ou fallback de palavra-chave. | `vannevar` | — |
|
|
120
|
+
| `/curate` | — | Executa o passe de curadoria da KB do Vannevar (`runKbCuration`): dedup / aposentar / re-sumarizar / achar lacunas. Limitado por orçamento. Detalhes em `Reports/kb-health.md`. | `vannevar` | — |
|
|
121
|
+
|
|
122
|
+
### Ciclo de trabalho 🚀
|
|
123
|
+
|
|
124
|
+
| Comando (aliases) | Args | O que faz | Responde como | Passa a vez |
|
|
125
|
+
| --- | --- | --- | --- | --- |
|
|
126
|
+
| `/new-goal` (`/new-work`) | `<brief>` | Entrega o brief ao CEO via o pipeline normal de novo trabalho (reenvia como `@ada <brief>`). Agenda um reindex do chat. | (eco do operador) | `ada` |
|
|
127
|
+
| `/generate-plan` | `<brief>` (opcional) | Chama `generatePlanFor` — rascunha specs → issues → TODOs no CEO Planner para aprovação. | `ada` | — |
|
|
128
|
+
| `/approve` | — | Aprova o plano pendente (`approvePlanFor`) e enfileira tasks; reporta a contagem. | `system` | — |
|
|
129
|
+
| `/reject` | `<motivo>` (opcional) | Devolve o plano ao CEO (`requestPlanChangesFor`); registra o motivo se informado. | `system` | — |
|
|
130
|
+
| `/run-247` (`/resume`) | — | Liga a execução autônoma 24/7 (`setAuto247For(..., true)`). | `system` | — |
|
|
131
|
+
| `/pause` | — | Desliga a execução autônoma 24/7 (`setAuto247For(..., false)`). | `system` | — |
|
|
132
|
+
| `/cancel` | — | Cancela o goal **ativo** mais recente (`cancelGoalFor`); a execução para. | `system` | — |
|
|
133
|
+
| `/archive` | — | Arquiva o goal **ativo** mais recente (`archiveGoalFor`); reporta o caminho do arquivo. | `system` | — |
|
|
134
|
+
| `/close-sprint` | — | Fecha a sprint (`closeSprintFor`): conta entregue vs carregado, escreve um arquivo de retro. | `donald` | — |
|
|
135
|
+
|
|
136
|
+
### Itens do board
|
|
137
|
+
|
|
138
|
+
| Comando (aliases) | Args | O que faz | Responde como | Passa a vez |
|
|
139
|
+
| --- | --- | --- | --- | --- |
|
|
140
|
+
| `/new-issue <title>` | `<título>` | Cria uma única issue (`col: todo`, `prio: med`) com uma chave numérica auto-incrementada. | `system` | — |
|
|
141
|
+
| `/new-spec <title>` | `<título>` | Cria uma única spec com a chave `SPEC-NN` (com zero à esquerda). | `system` | — |
|
|
142
|
+
| `/assign <issue> <@agent>` | `<chave-da-issue> <@agente>` | Define `issue.assigneeId` para o agente nomeado. | `system` | — |
|
|
143
|
+
|
|
144
|
+
### Gates, pipelines & integrações 🛰️
|
|
145
|
+
|
|
146
|
+
| Comando (aliases) | Args | O que faz | Responde como | Passa a vez |
|
|
147
|
+
| --- | --- | --- | --- | --- |
|
|
148
|
+
| `/test-dev` | — | Executa o gate de validação Test Dev (`runTestDevAction`); reporta `PASS`/`FAIL`/`INCONCLUSIVE` + resumo. | `edsger` | — |
|
|
149
|
+
| `/review` | `<nota>` (opcional) | Escolhe um revisor (role CyberSec/QA, senão `whitfield`) e pede que ele revise as mudanças recentes do board. | (eco do operador) | o revisor (ex.: `whitfield`) |
|
|
150
|
+
| `/github` | — | Atualiza o status do repositório (`refreshGitStatus`); reporta a contagem de arquivos alterados. | `werner` | — |
|
|
151
|
+
| `/prepare-deploy` | — | Executa o pipeline Prepare-Deploy (`runDeployPipeline`); reporta status + resumo. | `werner` | — |
|
|
152
|
+
| `/export-source <repo>` | `<repo-do-github>` | Exporta a fonte limpa do produto para um repo separado (`exportCleanSource`); bloqueia se houver achados de segredos. | `werner` | — |
|
|
153
|
+
| `/telegram` | — | Reporta o status da integração com o Telegram (`getTelegramConfig`). | `system` | — |
|
|
154
|
+
| `/models` | — | Reporta o status dos modelos locais: llama.cpp (`llamaServerStatus`) + Ollama (`ollamaInfo`). | `system` | — |
|
|
155
|
+
| `/skills` | — | Reporta o tamanho da biblioteca de skills + uma amostra de nomes (`allLibrarySkillNames`). | `system` | — |
|
|
156
|
+
| `/locks` | — | Lista os file locks atualmente em uso (`activeLocks`): `path — @agente`. | `system` | — |
|
|
157
|
+
|
|
158
|
+
### Manutenção
|
|
159
|
+
|
|
160
|
+
| Comando (aliases) | Args | O que faz | Responde como | Passa a vez |
|
|
161
|
+
| --- | --- | --- | --- | --- |
|
|
162
|
+
| `/clear` | `confirm` \| `yes` \| `sim` | Apaga permanentemente TODA mensagem, o resumo compactado e os eventos de execução **deste canal**. Requer um token de confirmação; caso contrário publica um aviso. Board/goals/specs/KB NÃO são afetados. | `system` (kind `cleared`) | — |
|
|
163
|
+
| _desconhecido_ | — | Qualquer outro `/token` ecoa e responde `Unknown command — Try /help`. | `system` | — |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 8. Aliases em um relance
|
|
168
|
+
|
|
169
|
+
| Canônico | Aliases |
|
|
170
|
+
| --- | --- |
|
|
171
|
+
| `/kb` | `/ask-kb` |
|
|
172
|
+
| `/new-goal` | `/new-work` |
|
|
173
|
+
| `/run-247` | `/resume` |
|
|
174
|
+
|
|
175
|
+
> Nota: `/cancel` e `/archive` compartilham um mesmo bloco `case`, mas são comandos **distintos** (efeitos diferentes), não aliases um do outro.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 9. Passo a passo
|
|
180
|
+
|
|
181
|
+
### Aprovar um plano e iniciar o time
|
|
182
|
+
|
|
183
|
+
1. Na Team Room, digite `/approve`.
|
|
184
|
+
2. O servidor executa `approvePlanFor` e publica `✅ Plan approved — N task(s) queued.` como `system`.
|
|
185
|
+
3. Digite `/run-247` para ligar a execução autônoma 24/7.
|
|
186
|
+
4. Acompanhe o progresso com `/status` e `/locks`.
|
|
187
|
+
|
|
188
|
+
### Perguntar à nebulosa de memória
|
|
189
|
+
|
|
190
|
+
1. Digite `/kb como funciona o motor de cálculo?` (ou apenas a pergunta pura na room).
|
|
191
|
+
2. O Vannevar responde com `sources`; uma resposta de visão geral renderiza como `kb-card`.
|
|
192
|
+
3. Se o conhecimento parecer desatualizado, rode `/reindex`, depois `/curate`.
|
|
193
|
+
|
|
194
|
+
### Inspecionar uma constelação em trabalho
|
|
195
|
+
|
|
196
|
+
1. `/agents` para ver o roster.
|
|
197
|
+
2. `/agent margaret` para detalhes de runtime + um link para o Agent Studio.
|
|
198
|
+
3. `/locks` para ver quais arquivos os agentes estão segurando.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 10. Exemplos
|
|
203
|
+
|
|
204
|
+
```text
|
|
205
|
+
/help
|
|
206
|
+
/status
|
|
207
|
+
/agents
|
|
208
|
+
/agent ada
|
|
209
|
+
/kb how does auth work?
|
|
210
|
+
/ask-kb where are sessions stored?
|
|
211
|
+
/search rate limiting
|
|
212
|
+
/graph SPEC-01
|
|
213
|
+
/reindex
|
|
214
|
+
/curate
|
|
215
|
+
/new-goal a billing page with Stripe checkout
|
|
216
|
+
/new-work add 2FA to the login screen
|
|
217
|
+
/generate-plan migrate the database to Postgres
|
|
218
|
+
/approve
|
|
219
|
+
/reject the spec is missing the refund flow
|
|
220
|
+
/run-247
|
|
221
|
+
/resume
|
|
222
|
+
/pause
|
|
223
|
+
/cancel
|
|
224
|
+
/archive
|
|
225
|
+
/new-issue add a logout button
|
|
226
|
+
/new-spec billing architecture
|
|
227
|
+
/assign 3 @margaret
|
|
228
|
+
/test-dev
|
|
229
|
+
/review focus on the new payment endpoint
|
|
230
|
+
/github
|
|
231
|
+
/prepare-deploy
|
|
232
|
+
/export-source myorg/constella-public
|
|
233
|
+
/telegram
|
|
234
|
+
/models
|
|
235
|
+
/skills
|
|
236
|
+
/locks
|
|
237
|
+
/close-sprint
|
|
238
|
+
/clear
|
|
239
|
+
/clear confirm
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
> Os nomes de comandos, flags e argumentos de exemplo são mantidos em inglês porque são identificadores reais do código.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 11. Estados possíveis 🕳️
|
|
247
|
+
|
|
248
|
+
| Situação | O que você vê |
|
|
249
|
+
| --- | --- |
|
|
250
|
+
| Argumento vazio em um comando que exige um | Uma dica de uso (ex.: `Ask a question, e.g. /kb …`). |
|
|
251
|
+
| `/agent <handle>` fora do roster | `No agent @handle on the roster. Use /agents …`. |
|
|
252
|
+
| `/cancel` / `/archive` sem goal ativo | `No active goal to cancel/archive.`. |
|
|
253
|
+
| `/assign` malformado | `Usage: /assign <issue-key> <@agent> …`. |
|
|
254
|
+
| `/assign` issue / agente desconhecido | `No issue #key …` / `No agent @handle …`. |
|
|
255
|
+
| `/graph` sem correspondência | `No goal / spec / issue matches …`. |
|
|
256
|
+
| `/graph` com correspondência mas sem conexões ainda | `No connected knowledge for … yet`. |
|
|
257
|
+
| `/reindex` com embed server fora | `… (keyword fallback — embed server down).`. |
|
|
258
|
+
| `/curate` nada a fazer / sem orçamento | `Nothing to curate right now …`. |
|
|
259
|
+
| `/export-source` bloqueado por segredos | `🛑 Export blocked — N secret finding(s).`. |
|
|
260
|
+
| `/clear` sem confirmar | Um aviso `⚠️`; nada apagado. |
|
|
261
|
+
| Comando desconhecido | `Unknown command — Try /help`. |
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 12. Integrações relacionadas
|
|
266
|
+
|
|
267
|
+
- **Plan / work ops** — `/approve`, `/reject`, `/run-247`, `/pause` chamam os cores compartilhados em `src/server/plan-ops.ts` e `src/server/work-ops.ts`, os mesmos usados pela [API Pública](./PUBLIC_API.md) e pelo [Telegram](./TELEGRAM.md).
|
|
268
|
+
- **Knowledge Base / RAG** — `/kb`, `/search`, `/graph`, `/reindex`, `/curate` direcionam para [KB_AGENT.md](./KB_AGENT.md), [KB_RAG.md](./KB_RAG.md) e [MEMORY_RAG.md](./MEMORY_RAG.md).
|
|
269
|
+
- **Pipelines** — `/test-dev` → [TEST_DEV.md](./TEST_DEV.md); `/prepare-deploy` + `/export-source` → [PREPARE_DEPLOY.md](./PREPARE_DEPLOY.md) e [DEPLOY.md](./DEPLOY.md); `/github` → [GITHUB.md](./GITHUB.md).
|
|
270
|
+
- **Modelos & skills** — `/models` → [MODELS.md](./MODELS.md); `/skills` → [SKILLS.md](./SKILLS.md).
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 13. Segurança 🔒
|
|
275
|
+
|
|
276
|
+
- Os comandos de barra rodam **do lado do servidor** sob a sessão do operador — o caminho de envio resolve org/workspace antes do dispatch.
|
|
277
|
+
- `/clear` é o único comando destrutivo sobre os dados da conversa e é **duplamente protegido** (requer `confirm`/`yes`/`sim`). Nunca toca no trabalho do board, goals, specs ou na KB.
|
|
278
|
+
- `/export-source` é **protegido por secret-scan** — recusa o push se houver achados (veja [SECURITY.md](./SECURITY.md)).
|
|
279
|
+
- O Telegram **não** compartilha este parser; seus comandos remotos passam por um handler separado com allowlist — veja [TELEGRAM.md](./TELEGRAM.md).
|
|
280
|
+
- O texto do resultado é truncado em 4000 caracteres na inserção (`text.slice(0, 4000)`).
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## 14. Solução de problemas
|
|
285
|
+
|
|
286
|
+
| Sintoma | Causa provável / correção |
|
|
287
|
+
| --- | --- |
|
|
288
|
+
| `/comando` foi tratado como texto puro | Você digitou no canal **Telegram** (usa outro handler) ou com um espaço inicial. A barra precisa ser o primeiro caractere. |
|
|
289
|
+
| Texto puro na room "virou" uma consulta `/kb` | Esperado: a room auto-roteia texto que não é comando nem menção para `/kb`. Prefixe com `@handle` para falar com um agente. |
|
|
290
|
+
| `/reindex` diz "keyword fallback" | O embed server está fora — inicie-o (veja [MEMORY_RAG.md](./MEMORY_RAG.md)). A KB ainda funciona por busca de palavra-chave. |
|
|
291
|
+
| `/approve` / `/cancel` diz "No workspace/active goal" | Ainda não há plano pendente ou goal ativo — crie trabalho com `/new-goal` primeiro. |
|
|
292
|
+
| `/curate` não faz nada | Precisa de algumas entradas na KB **e** orçamento disponível. |
|
|
293
|
+
| Comando desconhecido | Confira a grafia e os aliases acima, ou rode `/help`. |
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## 15. Links relacionados
|
|
298
|
+
|
|
299
|
+
- [DM.md](./DM.md) — mensagens diretas com um único agente
|
|
300
|
+
- [TEAM_ROOM.md](./TEAM_ROOM.md) — a room compartilhada e o roteamento por @mention
|
|
301
|
+
- [WORKFLOW.md](./WORKFLOW.md) — o ciclo Goal → Spec → Issue → Plan → Execution
|
|
302
|
+
- [GOALS_SPECS_ISSUES.md](./GOALS_SPECS_ISSUES.md) — itens do board criados por `/new-issue` / `/new-spec`
|
|
303
|
+
- [AGENTS.md](./AGENTS.md) — o roster por trás de `/agents` e `/agent`
|
|
304
|
+
- [KB_AGENT.md](./KB_AGENT.md) · [KB_RAG.md](./KB_RAG.md) · [MEMORY_RAG.md](./MEMORY_RAG.md) — a nebulosa de memória por trás de `/kb`, `/search`, `/graph`, `/reindex`, `/curate`
|
|
305
|
+
- [TEST_DEV.md](./TEST_DEV.md) · [PREPARE_DEPLOY.md](./PREPARE_DEPLOY.md) · [GITHUB.md](./GITHUB.md) — os gates por trás de `/test-dev`, `/prepare-deploy`, `/github`
|
|
306
|
+
- [TELEGRAM.md](./TELEGRAM.md) — o conjunto separado de comandos de controle remoto
|
|
307
|
+
- [PUBLIC_API.md](./PUBLIC_API.md) — as mesmas operações de plan/work via HTTP
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
[← Índice](./README.md) · [🇬🇧 English](../en/CONFIGURATION.md) · [✦ Constella](../../README.pt-BR.md)
|
|
2
|
+
|
|
3
|
+
# Configuração ✦ 🪐
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
> Todos os controles que pilotam a nave central: variáveis de ambiente, o arquivo de segredos `<HOME>/.env`, o cofre criptografado para chaves de provedores, as portas dos modelos locais e o JSON `settings` que viaja na linha do workspace.
|
|
8
|
+
|
|
9
|
+
A Constella é configurada em três altitudes, cada uma com seu próprio poço gravitacional:
|
|
10
|
+
|
|
11
|
+
1. **Flags de inicialização** — escolhidas uma vez por `bin/constella.mjs` (modo de execução, host, porta, raiz de runtime).
|
|
12
|
+
2. **Variáveis de ambiente** — lidas no boot pelo servidor e pelo worker; os segredos são persistidos em `<HOME>/.env`.
|
|
13
|
+
3. **Settings do workspace** — chaves de runtime guardadas como JSON na coluna `workspace.settings`, editáveis pela UI de Config sem reiniciar.
|
|
14
|
+
|
|
15
|
+
Nada aqui é fake: cada variável abaixo é lida por código real nos caminhos citados.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 1. Quando usar 🛰️
|
|
20
|
+
|
|
21
|
+
| Você quer… | Use |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| Trocar o modo de execução (start/auth/vps/portable) | Uma flag de inicialização (`--start`, `--auth`, `--vps`, `--portable`) → `CONSTELLA_RUN_MODE` |
|
|
24
|
+
| Mover a raiz de runtime para fora de `~/.constella` | `CONSTELLA_HOME` ou `--path <dir>` |
|
|
25
|
+
| Vincular a outro host/porta | `--host` / `--port` (ou `PORT`) |
|
|
26
|
+
| Guardar uma chave de API / PAT do GitHub | O **cofre** criptografado (UI), nunca uma variável de ambiente |
|
|
27
|
+
| Apontar para um servidor de modelo local | `LLAMACPP_URL`, `OLLAMA_URL`, `CONSTELLA_EMBED_URL` |
|
|
28
|
+
| Afrouxar/apertar permissões dos agentes | `CONSTELLA_AGENT_FULL_ACCESS`, ou `settings.agents.*` |
|
|
29
|
+
| Limitar execuções simultâneas de agentes | `CONSTELLA_MAX_CONCURRENT_AGENTS` ou `settings.agents.maxConcurrent` |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. Como funciona 🌌
|
|
34
|
+
|
|
35
|
+
O launcher resolve a raiz de runtime e então garante que três segredos de assinatura existam antes do servidor subir:
|
|
36
|
+
|
|
37
|
+
```mermaid
|
|
38
|
+
flowchart TD
|
|
39
|
+
A["npx constella [flags]"] --> B["resolve runMode<br/>(flag → compat --bind → start)"]
|
|
40
|
+
B --> C["resolve HOME<br/>(CONSTELLA_HOME / --path / ~/.constella;<br/>portable → escolher USB)"]
|
|
41
|
+
C --> D["exporta CONSTELLA_RUN_MODE / PUBLIC / VERSION<br/>DATABASE_URL=file:HOME/constella.db"]
|
|
42
|
+
D --> E["ensureSecret() ×3 → HOME/.env (chmod 600)"]
|
|
43
|
+
E --> F["drizzle-kit migrate"]
|
|
44
|
+
F --> G["sobe web (next start) + worker (bin/worker.mjs)"]
|
|
45
|
+
G --> H["servidor lê env + workspace.settings"]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Fato chave (`bin/constella.mjs`):** todo modo persiste um `BETTER_AUTH_SECRET`, `CONSTELLA_VAULT_KEY` e `CONSTELLA_WORKER_SECRET` reais. O `next start` roda sob `NODE_ENV=production`, onde o better-auth lança erro com seu segredo padrão, o cofre se recusa a criptografar sem sua chave e o worker falha fechado sem seu segredo — então até o modo local `start` precisa dos três. Eles são persistidos (não efêmeros) para que sessões de login e o cofre criptografado sobrevivam a um restart.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 3. Fluxo principal: persistência de segredos 🌠
|
|
53
|
+
|
|
54
|
+
De `bin/constella.mjs` (`ensureSecret`):
|
|
55
|
+
|
|
56
|
+
1. **env vence** — se a variável já está em `process.env`, usa e não escreve.
|
|
57
|
+
2. **reusa persistido** — senão, se houver um valor não-placeholder em `<HOME>/.env`, hidrata `process.env` a partir dele.
|
|
58
|
+
3. **gera uma vez** — senão, gera um valor novo, grava em `<HOME>/.env` e exporta.
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
BETTER_AUTH_SECRET = randomBytes(32).toString("base64url")
|
|
62
|
+
CONSTELLA_VAULT_KEY = randomBytes(32).toString("base64") # deve decodificar para 32 bytes
|
|
63
|
+
CONSTELLA_WORKER_SECRET = randomBytes(24).toString("base64url")
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
O arquivo é escrito com modo `0o600` (e um `chmodSync` best-effort no Windows). O launcher imprime `• Secrets ready (stored in <HOME>/.env, never printed).` — os valores em si nunca são logados.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 4. Conceitos centrais 🪐
|
|
71
|
+
|
|
72
|
+
- **Raiz de runtime (`<HOME>`)** — padrão `~/.constella`; sobrescrevível com `CONSTELLA_HOME` ou `--path`. Guarda `constella.db`, `.env`, `cache/`, `backups/` e `organizations/<orgId>/workspace/`. No modo portable sem caminho explícito, o launcher detecta drives USB removíveis e usa `<drive>/.constella`.
|
|
73
|
+
- **Raiz do pacote (`CONSTELLA_PKG_ROOT`)** — o diretório do próprio pacote instalado (o `.next` compilado, as migrações `drizzle/`, a biblioteca `skills/` embarcada). Exportada para o servidor achar os assets quando instalado globalmente em vez de a partir do CWD de inicialização.
|
|
74
|
+
- **Cofre (vault)** — chaves de API de provedores e PATs do GitHub são criptografadas em repouso com AES-256-GCM na tabela `vault`, usando `CONSTELLA_VAULT_KEY`. O texto plano **nunca** toca linhas `provider` e **nunca** chega ao cliente (`src/lib/vault.ts`).
|
|
75
|
+
- **Settings do workspace** — um blob JSON em `workspace.settings`; overrides de runtime para permissões de agentes, editor, integrações e metadados de importação.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 5. A grande tabela de variáveis de ambiente 🌌
|
|
80
|
+
|
|
81
|
+
### 5.1 Núcleo de boot / definido pelo launcher
|
|
82
|
+
|
|
83
|
+
| Variável | Padrão | Definida por / Lida por | Significado |
|
|
84
|
+
| --- | --- | --- | --- |
|
|
85
|
+
| `CONSTELLA_HOME` | `~/.constella` | launcher / `src/lib/fs-workspace.ts`, `runtime-root.ts`, worker | Raiz de runtime com DB, `.env`, orgs. Valores relativos ancoram em `INIT_CWD`. |
|
|
86
|
+
| `CONSTELLA_RUN_MODE` | `start` | launcher / `src/lib/run-mode.ts`, `cli.ts`, `proxy.ts` | `start \| auth \| vps \| portable`. Dirige login + bind + jaula do agente. |
|
|
87
|
+
| `CONSTELLA_PUBLIC` | `1` (launch CLI) | launcher / `src/lib/build-mode.ts` | Um launch CLI é o runtime público → o seletor de modo na UI fica oculto. |
|
|
88
|
+
| `CONSTELLA_VERSION` | versão do `package.json` local | launcher / `src/lib/version.ts` | Versão instalada confiável para a checagem de Update no app. |
|
|
89
|
+
| `CONSTELLA_PKG_ROOT` | diretório do pacote | launcher / `skills-library.ts`, `cli.ts` | Onde vivem os assets embarcados (`skills/`, `.next`, `drizzle/`). |
|
|
90
|
+
| `DATABASE_URL` | `file:<HOME>/constella.db` | launcher / `src/db/index.ts`, `drizzle.config.mjs` | Arquivo SQLite (absoluto sob a raiz de runtime). |
|
|
91
|
+
| `PORT` | `3000` | env / launcher | Porta web se `--port` não for passado. |
|
|
92
|
+
| `CONSTELLA_FORCE_ONBOARDING` | não definido | `--onboarding` / `src/lib/workspace.ts`, `onboarding.ts` | Força o assistente de primeira execução. |
|
|
93
|
+
| `CONSTELLA_DEV` | não definido | árvore de dev / `build-mode.ts`, launcher | `1` permite fallback para dev-server quando não há build de produção (senão o launcher falha fechado). |
|
|
94
|
+
| `CONSTELLA_WEB_HEAP_MB` | `0` (padrão do Node) | env / launcher | `--max-old-space-size` opcional para o filho web (alívio de OOM de heap JS). |
|
|
95
|
+
|
|
96
|
+
### 5.2 Segredos (persistidos em `<HOME>/.env`, chmod 600)
|
|
97
|
+
|
|
98
|
+
| Variável | Gerada como | Lida por | Significado |
|
|
99
|
+
| --- | --- | --- | --- |
|
|
100
|
+
| `BETTER_AUTH_SECRET` | `randomBytes(32).base64url` | `src/lib/auth.ts`, `boot.ts` | Chave de assinatura de sessão. O better-auth lança erro com seu padrão em produção. |
|
|
101
|
+
| `CONSTELLA_VAULT_KEY` | `randomBytes(32).base64` | `src/lib/vault.ts` | Chave AES-256-GCM do cofre de segredos. Deve decodificar para exatamente 32 bytes. |
|
|
102
|
+
| `CONSTELLA_WORKER_SECRET` | `randomBytes(24).base64url` | worker + `/api/cron/tick`, `/api/sync/file`, `/api/telegram/poll`, `/api/locks/acquire` | Segredo compartilhado dos endpoints privilegiados do worker; eles rejeitam toda requisição quando ele não está setado. |
|
|
103
|
+
|
|
104
|
+
> Os segredos do cofre, auth e worker também estão listados em `src/lib/scrub.ts` para serem removidos da ingestão de KB, mensagens do Telegram e logs.
|
|
105
|
+
|
|
106
|
+
### 5.3 Worker
|
|
107
|
+
|
|
108
|
+
| Variável | Padrão | Lida por | Significado |
|
|
109
|
+
| --- | --- | --- | --- |
|
|
110
|
+
| `CONSTELLA_BASE_URL` | `http://localhost:3000` (launcher seta `http://127.0.0.1:<port>`) | `bin/worker.mjs`, `bin/lock-hook.mjs`, `cli.ts` | A URL do servidor local que o worker chama de volta. |
|
|
111
|
+
| `CONSTELLA_WORKER_INTERVAL_MS` | `60000` | `bin/worker.mjs` | Intervalo do tick de cron (POST `/api/cron/tick`). |
|
|
112
|
+
| `CONSTELLA_ALLOW_REMOTE_WORKER_BASE_URL` | não definido | `bin/worker.mjs` | Override do guard de SSRF: o worker recusa enviar seu segredo a um host não-loopback a menos que isto seja `1`. |
|
|
113
|
+
|
|
114
|
+
### 5.4 Execução de agentes (`src/server/adapters/cli.ts`, `runner.ts`)
|
|
115
|
+
|
|
116
|
+
| Variável | Padrão | Significado |
|
|
117
|
+
| --- | --- | --- |
|
|
118
|
+
| `CONSTELLA_AGENT_FULL_ACCESS` | derivado (`start`→full, senão jaulado) | `1`/`0` sobrescreve o modo de permissão. Full → `bypassPermissions` (claude) / `danger-full-access` (codex); jaulado → `acceptEdits` / `workspace-write`. |
|
|
119
|
+
| `CONSTELLA_WEB_RESEARCH` | ligado | `0` desliga o `--allowedTools WebSearch WebFetch` aditivo nas execuções de agente. Também `settings.agents.webResearch`. |
|
|
120
|
+
| `CONSTELLA_AGENT_CMD_GUARD` | ligado | Guard de shell destrutivo (`bin/guard-hook.mjs`). `0` desliga. Também `settings.agents.cmdGuard`. |
|
|
121
|
+
| `CONSTELLA_AGENT_LOCK_HOOK` | desligado | `1` habilita lock por arquivo via `bin/lock-hook.mjs` + um config dir de agente limpo. Também `settings.agents.fileLocks`. |
|
|
122
|
+
| `CONSTELLA_MAX_CONCURRENT_AGENTS` | `1` | Execuções simultâneas de agentes **por workspace** (`runner.ts`). Também `settings.agents.maxConcurrent`. |
|
|
123
|
+
| `CONSTELLA_AUTO_REVIEW` | ligado | `0` desliga o portão de review independente. Também `settings.agents.autoReview`. |
|
|
124
|
+
|
|
125
|
+
O filho do lock-hook recebe a env de identidade: `CONSTELLA_ORG_ID`, `CONSTELLA_TASK_ID`, `CONSTELLA_AGENT_ID`, `CONSTELLA_AGENT_HANDLE`, mais `CLAUDE_CONFIG_DIR` apontando para o config dir de agente limpo. As execuções de CLI de agentes têm timeout de **180000 ms** por padrão.
|
|
126
|
+
|
|
127
|
+
### 5.5 Modelos, RAG & KB
|
|
128
|
+
|
|
129
|
+
| Variável | Padrão | Lida por | Significado |
|
|
130
|
+
| --- | --- | --- | --- |
|
|
131
|
+
| `LLAMACPP_URL` | `http://127.0.0.1:8082` | `local-models.ts`, `runtime.ts`, `kb.ts` | Servidor llama.cpp local de **chat** (compatível com OpenAI `/v1`). |
|
|
132
|
+
| `CONSTELLA_EMBED_URL` | `http://127.0.0.1:8083` | `local-models.ts`, `rag.ts` | Servidor llama.cpp dedicado de **embeddings** para RAG (auto-iniciado no boot). |
|
|
133
|
+
| `OLLAMA_URL` | `http://127.0.0.1:11434` | `local-models.ts`, `runtime.ts`, `rag.ts` | Provedor de fallback de embeddings/chat (Ollama). |
|
|
134
|
+
| `CONSTELLA_EMBED_MODEL` | `nomic-embed-text` | `rag.ts`, `model-catalog.ts` | Nome do modelo de embedding; `nomic*` dispara os prefixos assimétricos `search_document:`/`search_query:`. |
|
|
135
|
+
| `CONSTELLA_KB_CURATION` | ligado | `kb.ts` | `0` opta por sair do passe de curadoria de KB do Vannevar (gatilho por orçamento). |
|
|
136
|
+
|
|
137
|
+
### 5.6 URLs do better-auth (dev `.env.example`)
|
|
138
|
+
|
|
139
|
+
| Variável | Exemplo | Significado |
|
|
140
|
+
| --- | --- | --- |
|
|
141
|
+
| `BETTER_AUTH_URL` | `http://localhost:3000` | URL base de auth no servidor. |
|
|
142
|
+
| `NEXT_PUBLIC_BETTER_AUTH_URL` | `http://localhost:3000` | URL base de auth no cliente. |
|
|
143
|
+
|
|
144
|
+
### 5.7 Clientes fora do processo (baseados em PAT)
|
|
145
|
+
|
|
146
|
+
| Variável | Padrão | Lida por | Significado |
|
|
147
|
+
| --- | --- | --- | --- |
|
|
148
|
+
| `CONSTELLA_PAT` | não definido | `scripts/mcp-server.mjs` | Personal Access Token `cn_…` para a ponte MCP / API Pública. |
|
|
149
|
+
| `CONSTELLA_ORG` | não definido | `scripts/mcp-server.mjs` | Id de org opcional (mapeia para o header `X-Constella-Org`). |
|
|
150
|
+
|
|
151
|
+
> `CONSTELLA_BASE_URL` também é lida pelo servidor MCP (padrão `http://localhost:3000`).
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 6. Portas 🛰️
|
|
156
|
+
|
|
157
|
+
| Porta | Processo | Configurável via |
|
|
158
|
+
| --- | --- | --- |
|
|
159
|
+
| `3000` | Servidor web (`next start`) + alvo de callback do worker | `--port` / `PORT`; `CONSTELLA_BASE_URL` para o worker |
|
|
160
|
+
| `8082` | Servidor llama.cpp local de **chat** (`LLAMACPP`) | `LLAMACPP_URL` |
|
|
161
|
+
| `8083` | Servidor llama.cpp local de **embeddings** (RAG) | `CONSTELLA_EMBED_URL` |
|
|
162
|
+
| `11434` | Ollama (embeddings/chat de fallback) | `OLLAMA_URL` |
|
|
163
|
+
|
|
164
|
+
O harness de Test Dev sobe servidores de dev do projeto em uma porta livre na faixa **4173–4999** (evitando 3000) — veja [TEST_DEV](./TEST_DEV.md).
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 7. O arquivo `<HOME>/.env` 🌠
|
|
169
|
+
|
|
170
|
+
Escrito e relido pelo launcher. Um arquivo gerado mínimo:
|
|
171
|
+
|
|
172
|
+
```dotenv
|
|
173
|
+
BETTER_AUTH_SECRET=…base64url…
|
|
174
|
+
CONSTELLA_VAULT_KEY=…base64 (32 bytes)…
|
|
175
|
+
CONSTELLA_WORKER_SECRET=…base64url…
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
O template da árvore de dev `.env.example` mostra a superfície completa usada ao rodar a partir do código-fonte:
|
|
179
|
+
|
|
180
|
+
```dotenv
|
|
181
|
+
DATABASE_URL=file:./.constella/constella.db
|
|
182
|
+
BETTER_AUTH_SECRET=replace-with-a-long-random-string
|
|
183
|
+
BETTER_AUTH_URL=http://localhost:3000
|
|
184
|
+
NEXT_PUBLIC_BETTER_AUTH_URL=http://localhost:3000
|
|
185
|
+
CONSTELLA_RUN_MODE=start
|
|
186
|
+
CONSTELLA_HOME=./.constella
|
|
187
|
+
CONSTELLA_VAULT_KEY=replace-with-32-byte-base64-key
|
|
188
|
+
CONSTELLA_WORKER_SECRET=replace-with-a-random-string
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**Precedência:** `process.env` (shell / Docker / systemd) sempre vence sobre `<HOME>/.env`. O arquivo só fornece valores que ainda não estão no ambiente, e só gera os três segredos de assinatura se nenhuma das fontes os tiver.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 8. O cofre: chaves de provedores & PATs 🕳️
|
|
196
|
+
|
|
197
|
+
Chaves de API de provedores e PATs do GitHub **nunca** são variáveis de ambiente e **nunca** são colunas em `provider`. Elas vivem criptografadas na tabela `vault`.
|
|
198
|
+
|
|
199
|
+
```mermaid
|
|
200
|
+
flowchart LR
|
|
201
|
+
UI["UI de Config: cola chave de API / PAT"] --> P["putSecret(workspaceId, ref, plaintext)"]
|
|
202
|
+
P --> E["AES-256-GCM<br/>chave = CONSTELLA_VAULT_KEY"]
|
|
203
|
+
E --> V["linha vault<br/>(ciphertext + iv, por workspace+ref)"]
|
|
204
|
+
V --> G["getSecret(workspaceId, ref)"]
|
|
205
|
+
G --> R["resolveRuntime / ghToken / telegram"]
|
|
206
|
+
V -.->|exibição na UI| M["maskSecret() → abc••••••wxyz"]
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Detalhes do cofre (`src/lib/vault.ts`):
|
|
210
|
+
|
|
211
|
+
- `putSecret` é **valor único por `(workspaceId, ref)`**: deleta a linha antiga antes de inserir, então um token re-registrado nunca serve um valor obsoleto.
|
|
212
|
+
- Exemplos de `ref`: `openai_api_key`, `github_pat`, `telegram_bot_token`.
|
|
213
|
+
- `getSecret` retorna texto plano só no servidor; a UI vê apenas `maskSecret(s)` (`abc••••••wxyz`).
|
|
214
|
+
- `delSecret` sustenta o caminho de revogar token.
|
|
215
|
+
- A tabela `vault` guarda `ciphertext`, `iv`, `ref`, `providerId` opcional, com escopo por `workspaceId` (deletada em cascata com o workspace).
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 9. Settings do workspace (JSON em `workspace.settings`) 🪐
|
|
220
|
+
|
|
221
|
+
A coluna `settings` (`src/db/schema.ts`) é um blob JSON tipado. Editável pela UI de Config sem reiniciar; o runner empurra as flags de agente para o adapter de CLI antes de cada spawn.
|
|
222
|
+
|
|
223
|
+
| Caminho | Tipo | Efeito |
|
|
224
|
+
| --- | --- | --- |
|
|
225
|
+
| `editor.tabSize` / `formatOnSave` / `wordWrap` / `minimap` | number / bool | Preferências do editor de código no app. |
|
|
226
|
+
| `integrations` | `Record<string, boolean>` | Mapa de habilitação por integração. |
|
|
227
|
+
| `lastSecurityRun` | number | Timestamp da última varredura de segurança. |
|
|
228
|
+
| `telegram.offset` | number | Cursor do `getUpdates` do Telegram. |
|
|
229
|
+
| `github.repo` / `login` / `defaultBranch` | string | Metadados do repositório GitHub conectado. |
|
|
230
|
+
| `source.type` | `new \| github \| local \| mock` | Como o workspace foi importado. |
|
|
231
|
+
| `source.repo` / `branch` / `localPath` / `importedAt` / `fileCount` / `analyzed` | misto | Proveniência da importação. |
|
|
232
|
+
| `agents.maxConcurrent` | number | Concorrência de agentes por workspace (sobrescreve `CONSTELLA_MAX_CONCURRENT_AGENTS`). |
|
|
233
|
+
| `agents.fileLocks` | bool | Lock por arquivo (sobrescreve `CONSTELLA_AGENT_LOCK_HOOK`). |
|
|
234
|
+
| `agents.webResearch` | bool | Pesquisa web (sobrescreve `CONSTELLA_WEB_RESEARCH`). |
|
|
235
|
+
| `agents.autoReview` | bool | Portão de review independente (sobrescreve `CONSTELLA_AUTO_REVIEW`). |
|
|
236
|
+
| `agents.cmdGuard` | bool | Guard de shell destrutivo (sobrescreve `CONSTELLA_AGENT_CMD_GUARD`). |
|
|
237
|
+
|
|
238
|
+
**Precedência de override para as chaves de agente:** o valor por workspace `settings.agents.*` (quando setado) é empurrado em runtime e vence; se não setado, vale o padrão da env `CONSTELLA_*` correspondente. Outros padrões de modelo/runtime vivem na `workspace.stack` (JSON `Record<string,string>`) e nas linhas `agent`, `provider` e `organization.runMode`.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 10. Passo a passo
|
|
243
|
+
|
|
244
|
+
1. **Primeiro boot** — rode `npx constella` (ou uma flag de modo). O launcher cria `<HOME>/organizations`, gera `<HOME>/.env`, migra o DB e sobe web + worker.
|
|
245
|
+
2. **Escolha um modo** — passe `--start` / `--auth` / `--vps` / `--portable`. A flag seta `CONSTELLA_RUN_MODE`, que dirige login, host de bind e a jaula do agente. Veja [START_MODE](./START_MODE.md), [AUTH_MODE](./AUTH_MODE.md), [VPS_MODE](./VPS_MODE.md), [PORTABLE_MODE](./PORTABLE_MODE.md).
|
|
246
|
+
3. **Mova a raiz de runtime** — `CONSTELLA_HOME=/data/constella npx constella` ou `--path /mnt/usb`.
|
|
247
|
+
4. **Adicione uma chave de provedor** — na UI de Config, cole-a; ela é guardada no cofre, não escrita no `.env`.
|
|
248
|
+
5. **Ajuste os agentes** — alterne `settings.agents.*` na UI, ou defina os padrões da env `CONSTELLA_*`.
|
|
249
|
+
6. **Aponte para modelos locais** — suba seus servidores llama.cpp/Ollama e defina `LLAMACPP_URL` / `CONSTELLA_EMBED_URL` / `OLLAMA_URL` se não estiverem nos padrões.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 11. Exemplos
|
|
254
|
+
|
|
255
|
+
**Porta customizada + folga de heap:**
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
npx constella --auth --port 4000
|
|
259
|
+
CONSTELLA_WEB_HEAP_MB=4096 npx constella --vps
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Realocar a raiz de runtime e o DB:**
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
CONSTELLA_HOME=/srv/constella npx constella --vps
|
|
266
|
+
# DATABASE_URL resolve para file:/srv/constella/constella.db
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Permitir mais agentes simultâneos e desligar o portão de review (env):**
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
CONSTELLA_MAX_CONCURRENT_AGENTS=2 CONSTELLA_AUTO_REVIEW=0 npx constella
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Pilotar a Constella pela API Pública / MCP a partir de outro host:**
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
export CONSTELLA_PAT=cn_xxx
|
|
279
|
+
export CONSTELLA_BASE_URL=http://localhost:3000
|
|
280
|
+
export CONSTELLA_ORG=<orgId>
|
|
281
|
+
node scripts/mcp-server.mjs
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## 12. Estados possíveis
|
|
287
|
+
|
|
288
|
+
| Condição | Comportamento resultante |
|
|
289
|
+
| --- | --- |
|
|
290
|
+
| `CONSTELLA_VAULT_KEY` ausente | `vault.key()` lança `CONSTELLA_VAULT_KEY is not set`; segredos não podem ser lidos/escritos. |
|
|
291
|
+
| `CONSTELLA_VAULT_KEY` não tem 32 bytes | Lança `CONSTELLA_VAULT_KEY must decode to 32 bytes`. |
|
|
292
|
+
| `CONSTELLA_WORKER_SECRET` não setado | Endpoints do worker rejeitam toda requisição (falha fechado). |
|
|
293
|
+
| `BETTER_AUTH_SECRET` padrão em produção | better-auth lança no boot — daí o launcher sempre gerar um. |
|
|
294
|
+
| Sem build de produção, `CONSTELLA_DEV` ≠ `1` | Launcher recusa subir dev server em modo público/de rede e sai. |
|
|
295
|
+
| Portable, `< 32 GB` livres | Fatal: launcher aborta abaixo de 32 GB; ≥ 32 GB dá boot. |
|
|
296
|
+
| Worker com `CONSTELLA_BASE_URL` não-loopback, sem override | Worker sai em vez de vazar seu segredo. |
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 13. Integrações relacionadas
|
|
301
|
+
|
|
302
|
+
- Chaves/modelos de provedores — [MODELS](./MODELS.md), [AI_ARCHITECTURE](./AI_ARCHITECTURE.md)
|
|
303
|
+
- PAT/OAuth do GitHub — [GITHUB](./GITHUB.md)
|
|
304
|
+
- Token do bot do Telegram — [TELEGRAM](./TELEGRAM.md)
|
|
305
|
+
- Clientes PAT/MCP — [PUBLIC_API](./PUBLIC_API.md), [MCP](./MCP.md)
|
|
306
|
+
- Embeddings de RAG — [KB_RAG](./KB_RAG.md), [MEMORY_RAG](./MEMORY_RAG.md)
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## 14. Segurança 🕳️
|
|
311
|
+
|
|
312
|
+
- O arquivo de segredos `<HOME>/.env` é escrito com `chmod 600`; valores nunca são impressos.
|
|
313
|
+
- O cofre usa **AES-256-GCM** com `CONSTELLA_VAULT_KEY`; só ciphertext + IV, nunca texto plano ao cliente.
|
|
314
|
+
- `src/lib/scrub.ts` remove `CONSTELLA_VAULT_KEY`, `BETTER_AUTH_SECRET` e `CONSTELLA_WORKER_SECRET` antes da ingestão de KB, do Telegram e dos logs.
|
|
315
|
+
- O worker aplica um **guard de SSRF apenas-loopback** em `CONSTELLA_BASE_URL`.
|
|
316
|
+
- `process.env` sempre sobrescreve o arquivo `.env` — operadores controlam a configuração via shell/Docker/systemd, não via um arquivo gravável por atacante.
|
|
317
|
+
- As permissões dos agentes degradam com segurança: acesso total só no modo `start` (sua própria máquina); `vps/auth/portable` ficam jaulados (Docker + Tailscale como jaula dura). Veja [SECURITY](./SECURITY.md).
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## 15. Solução de problemas
|
|
322
|
+
|
|
323
|
+
| Sintoma | Causa provável | Correção |
|
|
324
|
+
| --- | --- | --- |
|
|
325
|
+
| `CONSTELLA_VAULT_KEY is not set` | `.env` deletado ou chave apagada | Restaure `<HOME>/.env` ou deixe o launcher regerar (atenção: uma chave nova não decripta linhas antigas do cofre). |
|
|
326
|
+
| Worker loga `401` repetidamente | Telegram não configurado / segredo divergente | Configure o bot, confirme que `CONSTELLA_WORKER_SECRET` é compartilhado. |
|
|
327
|
+
| Worker recusa subir (não-loopback) | `CONSTELLA_BASE_URL` é remoto | Use loopback, ou defina `CONSTELLA_ALLOW_REMOTE_WORKER_BASE_URL=1` (prefira `https://`). |
|
|
328
|
+
| RAG cai para busca por palavra-chave | Servidor de embed fora do ar na `:8083` | Suba-o / defina `CONSTELLA_EMBED_URL`, ou dependa do Ollama em `:11434`. |
|
|
329
|
+
| App lê um DB diferente do que o worker observa | `CONSTELLA_HOME` relativo divergente | Use um `CONSTELLA_HOME` absoluto; caminhos relativos ancoram em `INIT_CWD`. |
|
|
330
|
+
| Agentes falam na voz do plugin do operador | Hooks do `~/.claude` do operador vazando | Já mitigado pela overlay de settings `disableAllHooks`; verifique o config dir de lock/guard. |
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## Links relacionados
|
|
335
|
+
|
|
336
|
+
- [INSTALLATION](./INSTALLATION.md) · [ONBOARDING](./ONBOARDING.md) · [START_MODE](./START_MODE.md) · [AUTH_MODE](./AUTH_MODE.md) · [VPS_MODE](./VPS_MODE.md) · [PORTABLE_MODE](./PORTABLE_MODE.md)
|
|
337
|
+
- [ARCHITECTURE](./ARCHITECTURE.md) · [AI_ARCHITECTURE](./AI_ARCHITECTURE.md) · [AGENTS](./AGENTS.md)
|
|
338
|
+
- [MODELS](./MODELS.md) · [KB_RAG](./KB_RAG.md) · [MEMORY_RAG](./MEMORY_RAG.md)
|
|
339
|
+
- [GITHUB](./GITHUB.md) · [TELEGRAM](./TELEGRAM.md) · [PUBLIC_API](./PUBLIC_API.md) · [MCP](./MCP.md)
|
|
340
|
+
- [TEST_DEV](./TEST_DEV.md) · [SECURITY](./SECURITY.md) · [TROUBLESHOOTING](./TROUBLESHOOTING.md) · [FAQ](./FAQ.md)
|