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,373 @@
|
|
|
1
|
+
[← Índice](./README.md) · [🇬🇧 English](../en/AI_ARCHITECTURE.md) · [✦ Constella](../../README.pt-BR.md)
|
|
2
|
+
|
|
3
|
+
# 🌌 Arquitetura de IA — como uma constelação realmente roda
|
|
4
|
+
|
|
5
|
+
> O control plane nunca fala com uma API de LLM diretamente. Ele **dirige CLIs reais** (`claude`, `codex` e companhia) como subprocessos dentro do workspace da organização, captura o uso de tokens + custo **reais** e nunca inventa um número.
|
|
6
|
+
|
|
7
|
+
Este documento explica a maquinaria que transforma "um agente" em um processo rodando: os adaptadores de CLI, a invocação do spawn, a sobreposição de hooks vanilla, os modos de permissão por run-mode, a montagem de contexto agnóstica ao modelo e o rastreamento de custo.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## ✦ Quando usar este doc
|
|
12
|
+
|
|
13
|
+
- Você quer entender **qual comando** o Constella roda quando um agente "pensa" ou "constrói".
|
|
14
|
+
- Você precisa saber **por que os agentes rodam vanilla** (sem plugins/hooks do operador vazando para dentro).
|
|
15
|
+
- Você está depurando permissões, timeouts, seleção de modelo ou linhas de custo.
|
|
16
|
+
- Você está adicionando um novo adaptador de CLI ou runtime HTTP.
|
|
17
|
+
|
|
18
|
+
Para o lado da organização/papéis (quem são os agentes, seus tetos diários), veja [AGENTS.md](./AGENTS.md). Para o fluxo de trabalho que executam, veja [WORKFLOW.md](./WORKFLOW.md).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 🛰️ Como funciona (visão geral)
|
|
23
|
+
|
|
24
|
+
Toda execução de agente — uma resposta de chat, uma tarefa do board ou uma rodada de planejamento da CEO — flui pelas mesmas três camadas:
|
|
25
|
+
|
|
26
|
+
1. **Context Manager** (`src/server/context-manager.ts`) monta UM prompt padronizado e agnóstico ao modelo (missão, estado do projeto, decisões, conversa, RAG, memória, skills) e o apara para a janela de contexto real do agente.
|
|
27
|
+
2. **Resolvedor de runtime** (`src/server/runtime.ts`) decide *onde* o prompt roda: uma **CLI** local (o padrão — baseado em assinatura, agêntico, edita arquivos) ou um provedor **HTTP** (somente chat/raciocínio, quando ligado a um provedor `http_*` conectado).
|
|
28
|
+
3. **Adaptadores de CLI** (`src/server/adapters/cli.ts`) dão spawn no binário real, transmitem eventos de tool_use + texto e parseiam o uso + custo **reais** a partir da saída JSON da CLI.
|
|
29
|
+
|
|
30
|
+
```mermaid
|
|
31
|
+
flowchart TD
|
|
32
|
+
A["Gatilho: chat / tarefa / plano"] --> CM["Context Manager<br/>assembleAgentPrompt()"]
|
|
33
|
+
CM --> RT["resolveRuntime()"]
|
|
34
|
+
RT -->|"kind: cli"| CLI["adapters/cli.ts<br/>runAgentStream()"]
|
|
35
|
+
RT -->|"kind: http"| HTTP["adapters/http.ts<br/>runHttpStream()"]
|
|
36
|
+
CLI --> SPAWN["spawn('claude' | 'codex' | …)"]
|
|
37
|
+
SPAWN --> JSON["parse JSON → CliResult<br/>{ ok, text, usd, tokens }"]
|
|
38
|
+
HTTP --> JSON
|
|
39
|
+
JSON --> COST["insere costEntry<br/>(só se houver uso real)"]
|
|
40
|
+
JSON --> OUT["stream de eventos → Team Room / dock"]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 🪐 Fluxo principal
|
|
46
|
+
|
|
47
|
+
O caminho agêntico canônico é a CLI. `runAgent` / `runAgentStream` despacham para um runner por binário:
|
|
48
|
+
|
|
49
|
+
| Passo | Onde | O que acontece |
|
|
50
|
+
|-------|------|----------------|
|
|
51
|
+
| 1. Escolher binário | `pickBinary(adapter, model)` | Mapeia o adaptador do agente (`cli_claude_code`, `cli_codex`, …) para um nome de executável (`claude`, `codex`, `cursor-agent`, `kilocode`, …). |
|
|
52
|
+
| 2. Resolver cwd | `orgRoot(orgId)` | A **jaula de FS** do agente — o diretório do workspace da org. `mkdirSync(cwd, { recursive: true })`. |
|
|
53
|
+
| 3. Montar argv | `claudePermArgs()`, `claudeSettingsArgs()`, `claudeWebArgs()` | Modo de permissão, overlay de hooks vanilla, ferramentas web opcionais. |
|
|
54
|
+
| 4. Validar modelo | `safeModel()` / `safeModelSlash()` | Valida o id do modelo por regex (ele chega ao argv num spawn `shell: true` no Windows) — descarta qualquer coisa que possa injetar. |
|
|
55
|
+
| 5. Spawn | `runProc()` | `spawn(cmd, args, { cwd, shell, windowsHide, env })`; registra o filho sob seu token de abort. |
|
|
56
|
+
| 6. Stream / parse | `runClaudeStream` / parser por binário | Emite `StreamEvent`s por tool_use + delta de texto; parseia o JSON final para o uso. |
|
|
57
|
+
| 7. Resultado | `CliResult` | `{ ok, text, usd, inputTokens, outputTokens, durationMs, binary, model, error }`. |
|
|
58
|
+
| 8. Registrar custo | chamador (`collab` / `runner` / `planner-core`) | Insere uma linha `cost_entry` **somente se** `usd > 0` ou tokens > 0. |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 🌠 Conceitos-chave
|
|
63
|
+
|
|
64
|
+
### Adaptadores de CLI (`src/server/adapters/cli.ts`)
|
|
65
|
+
|
|
66
|
+
A união `CliBinary` enumera cada executável que o Constella pode dirigir:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
"claude" | "codex" | "openclaw" | "hermes"
|
|
70
|
+
| "aider" | "opencode" | "copilot" | "cursor-agent" | "cline" | "kilocode"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`pickBinary(adapter, model)` resolve o adaptador armazenado do agente para um binário. Se o adaptador for desconhecido, ele escolhe heuristicamente `codex` para modelos `gpt*`/`o1`/`o3`/`o4`/`codex*`, senão `claude`. As listas fixas de modelos que cada CLI expõe vivem em `CLI_MODELS`:
|
|
74
|
+
|
|
75
|
+
| Adaptador | Binário | Modelos |
|
|
76
|
+
|-----------|---------|---------|
|
|
77
|
+
| `cli_claude_code` | `claude` | `opus`, `sonnet`, `haiku` |
|
|
78
|
+
| `cli_codex` | `codex` | `gpt-5-codex`, `o4-mini` |
|
|
79
|
+
| `cli_openclaw` | `openclaw` | `(default)` + ids prefixados por provedor |
|
|
80
|
+
| `cli_hermes` | `hermes` | `(default)` + ids prefixados por provedor |
|
|
81
|
+
| `cli_aider` | `aider` | `(default)` + ids prefixados por provedor |
|
|
82
|
+
| `cli_opencode` | `opencode` | `(default)` + ids prefixados por provedor |
|
|
83
|
+
| `cli_copilot` | `copilot` | `(default)`, `claude-sonnet-4.5`, `gpt-5` |
|
|
84
|
+
| `cli_cursor` | `cursor-agent` | `(default)`, `claude-4.5-sonnet`, `gpt-5` |
|
|
85
|
+
| `cli_cline` | `cline` | `(default)` |
|
|
86
|
+
| `cli_kilo` | `kilocode` | `(default)` |
|
|
87
|
+
|
|
88
|
+
> CLIs roteadas por provedor (Aider, OpenCode, Copilot, Cursor, Cline, Kilo) autenticam pelo **próprio** login/config — o Constella as dirige, nunca guarda suas chaves. Seus modos headless emitem **nenhum** token/custo, então esses são registrados como `0` (honesto, nunca fabricado). `LOGIN_HINTS` mapeia cada binário ao comando que o autentica, mostrado na UI quando `detectCliAuth()` retorna `needs_login`.
|
|
89
|
+
|
|
90
|
+
### A invocação do spawn do Claude 🚀
|
|
91
|
+
|
|
92
|
+
O caminho principal, totalmente transmitido, é `runClaudeStream`. Ele monta:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
claude -p --output-format stream-json --include-partial-messages --verbose \
|
|
96
|
+
[--settings <arquivo de settings vanilla>] \
|
|
97
|
+
--permission-mode <bypassPermissions|acceptEdits> \
|
|
98
|
+
[--allowedTools WebSearch WebFetch] \
|
|
99
|
+
[--model <opus|sonnet|haiku>]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
O irmão não-transmitido `runClaude` usa `--output-format json` (objeto de resultado único). Ambos enviam o prompt montado para o **stdin** e parseiam o JSON do resultado:
|
|
103
|
+
|
|
104
|
+
```js
|
|
105
|
+
ok: obj.is_error !== true && obj.subtype === "success",
|
|
106
|
+
text: String(obj.result ?? ""),
|
|
107
|
+
usd: Number(obj.total_cost_usd ?? 0),
|
|
108
|
+
inputTokens: usage.input_tokens + usage.cache_read_input_tokens + usage.cache_creation_input_tokens,
|
|
109
|
+
outputTokens: usage.output_tokens,
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
O Codex usa `codex exec --json --skip-git-repo-check -s <sandbox> [-m <model>]` e parseia o uso por melhor esforço a partir do seu stream de eventos JSONL.
|
|
113
|
+
|
|
114
|
+
### Agentes vanilla — `disableAllHooks` 🕳️
|
|
115
|
+
|
|
116
|
+
Os agentes da empresa precisam rodar **independentes do `~/.claude` pessoal do operador**. O operador pode ter hooks de UserPromptSubmit/SessionStart ou plugins (ex.: um reescritor de voz "caveman mode") que disparam para **toda** invocação do `claude` — incluindo os subprocessos headless dos agentes. Sem isolamento, os agentes começam a falar como o plugin do operador em vez de como eles mesmos.
|
|
117
|
+
|
|
118
|
+
O Constella não pode redirecionar `CLAUDE_CONFIG_DIR` (as credenciais da assinatura vivem ali — redirecionar desloga o agente). Em vez disso, `vanillaSettingsArgs()` escreve um arquivo minúsculo uma vez e o passa:
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{ "disableAllHooks": true }
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
→ `--settings <tmpdir>/constella-agent-settings.json`. Hooks desligados, **auth intacta**.
|
|
125
|
+
|
|
126
|
+
### Isolamento opt-in com config-dir limpo (hooks de lock + guard)
|
|
127
|
+
|
|
128
|
+
Quando `CONSTELLA_AGENT_LOCK_HOOK=1` (ou o `settings.agents.fileLocks` por workspace) ou o guard de comandos destrutivos está ligado, `agentClaudeDir()` monta um **config-dir limpo dedicado** sob `<CONSTELLA_HOME>/.agent-claude`, copia o `.credentials.json` do operador (para permanecer logado) e escreve um `settings.json` carregando SOMENTE os hooks `PreToolUse` do Constella:
|
|
129
|
+
|
|
130
|
+
| Hook | Matcher | Binário |
|
|
131
|
+
|------|---------|---------|
|
|
132
|
+
| File lock (`bin/lock-hook.mjs`) | `Write\|Edit\|MultiEdit\|NotebookEdit` | controlado por `lockHookOn()` |
|
|
133
|
+
| Command guard (`bin/guard-hook.mjs`) | `Bash` | controlado por `guardHookOn()` (padrão LIGADO, `CONSTELLA_AGENT_CMD_GUARD`) |
|
|
134
|
+
|
|
135
|
+
Quando esse dir limpo está ativo, `claudeSettingsArgs()` retorna `[]` (o dir já carrega settings — não passar TAMBÉM `disableAllHooks`), e `claudeEnv()` injeta `CLAUDE_CONFIG_DIR` mais a identidade do lock-hook (`CONSTELLA_ORG_ID`, `CONSTELLA_TASK_ID`, `CONSTELLA_AGENT_ID`, `CONSTELLA_AGENT_HANDLE`, `CONSTELLA_BASE_URL`). Se as creds não puderem ser copiadas, ele **cai para o vanilla** — o lock de arquivos degrada, a auth nunca quebra.
|
|
136
|
+
|
|
137
|
+
### Modos de permissão por run-mode 🛰️
|
|
138
|
+
|
|
139
|
+
`AGENT_FULL_ACCESS` é ciente do run-mode (`CONSTELLA_RUN_MODE`), sobreponível com `CONSTELLA_AGENT_FULL_ACCESS=1|0`:
|
|
140
|
+
|
|
141
|
+
| Run mode | `AGENT_FULL_ACCESS` | `--permission-mode` do claude | sandbox `-s` do codex |
|
|
142
|
+
|----------|---------------------|-------------------------------|-----------------------|
|
|
143
|
+
| `start` (dev local) | `true` | `bypassPermissions` (instala + roda testes) | `danger-full-access` |
|
|
144
|
+
| `auth` / `vps` / `portable` (prod) | `false` | `acceptEdits` (só edições, sem rede/exec) | `workspace-write` (sem rede) |
|
|
145
|
+
|
|
146
|
+
> Em prod já roda dentro de Docker + Tailscale (o container é a jaula dura). A CLI fica restrita por cima para defesa em profundidade.
|
|
147
|
+
|
|
148
|
+
### Pesquisa na web 🌠
|
|
149
|
+
|
|
150
|
+
`claudeWebArgs()` pré-aprova as ferramentas web embutidas com `--allowedTools WebSearch WebFetch`. É **aditivo** — NÃO restringe Read/Edit/Bash. Padrão **LIGADO**; desligue com `CONSTELLA_WEB_RESEARCH=0` ou `settings.agents.webResearch = false` por workspace (empurrado pelo runner via `setWebResearch` antes de cada spawn).
|
|
151
|
+
|
|
152
|
+
### Eventos de streaming
|
|
153
|
+
|
|
154
|
+
`runClaudeStream` parseia o protocolo de linhas `stream-json` e emite um `StreamEvent` por uso de ferramenta e por delta de texto:
|
|
155
|
+
|
|
156
|
+
| `StreamEvent.kind` | Ferramenta de origem |
|
|
157
|
+
|--------------------|----------------------|
|
|
158
|
+
| `read` | `Read` |
|
|
159
|
+
| `create` | `Write` (com prévia do conteúdo) |
|
|
160
|
+
| `edit` | `Edit` / `NotebookEdit` (um diff `-`/`+` real, ≤80 linhas) |
|
|
161
|
+
| `run` | `Bash` / `PowerShell` |
|
|
162
|
+
| `search` | `Glob` / `Grep` |
|
|
163
|
+
| `thinking` | blocos de pensamento estendido |
|
|
164
|
+
| `text` | deltas da resposta transmitida (debounce ~120 chars) |
|
|
165
|
+
| `done` | execução finalizada |
|
|
166
|
+
|
|
167
|
+
Esses eventos alimentam o work-card ao vivo da Team Room (visão de diff real, não fabricada). O runner usa eventos `create`/`edit` para registrar a proveniência dos arquivos da goal.
|
|
168
|
+
|
|
169
|
+
### Cancelamento 🕳️
|
|
170
|
+
|
|
171
|
+
As execuções registram seu processo filho sob um **token de abort** (= o `taskId`) num mapa `ACTIVE`. `abortRun(token)` dá SIGKILL na CLI em andamento no meio da execução (usado pelo cancelamento de goal). Um token cancelado na janela claim→spawn é registrado em `ABORTED`, então um filho que se registra atrasado **se mata sozinho**. Timeouts padrão: 180s (`runClaude`/`runCodex`), 240s (`runClaudeStream`), 300s para uma rodada de planejamento.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 🌌 Montagem de contexto (gravidade do prompt)
|
|
176
|
+
|
|
177
|
+
`assembleAgentPrompt()` (`src/server/context-manager.ts`) é a **única fonte de verdade** para prompts — usada tanto pelo chat (`collab.replyInChannel`) QUANTO pela execução de tarefas (`runner`), para que os agentes de tarefa nunca fiquem cegos de contexto. É **agnóstica ao modelo**: o mesmo pacote alimenta Opus, Codex ou um modelo local; só o trim difere.
|
|
178
|
+
|
|
179
|
+
### Orçamento & janela
|
|
180
|
+
|
|
181
|
+
`resolveWindow()` prefere o catálogo dinâmico (`provider_model.context`) para que um modelo de 1M de contexto mantenha o histórico completo; senão cai para `modelWindow(model)`:
|
|
182
|
+
|
|
183
|
+
| Alias do modelo | Janela | keepRecent | aggressive |
|
|
184
|
+
|-----------------|--------|------------|------------|
|
|
185
|
+
| `opus` / `sonnet` | 200.000 | 16 | não |
|
|
186
|
+
| `haiku` | 200.000 | 12 | não |
|
|
187
|
+
| `gpt*` / `codex` / `o3` / `o4` | 128.000 | 12 | sim |
|
|
188
|
+
| (outros / local) | 100.000 | 8 | sim |
|
|
189
|
+
|
|
190
|
+
O orçamento do prompt é **metade** da janela (`win.window * 0.5`) — a outra metade é reservada para a resposta do modelo. `estimateTokens(text)` ≈ `text.length / 4`.
|
|
191
|
+
|
|
192
|
+
### Prioridade de seções (apara o mais baixo primeiro)
|
|
193
|
+
|
|
194
|
+
Um **head** fixo (identidade + persona + `temperatureBehavior` + a instrução + a tarefa) sempre sobrevive. Depois as seções são adicionadas em ordem de prioridade até o orçamento ser atingido; seções de prioridade mais baixa são **puladas** quando passa do orçamento:
|
|
195
|
+
|
|
196
|
+
```mermaid
|
|
197
|
+
flowchart TD
|
|
198
|
+
H["HEAD (sempre mantido)<br/>Você é @handle, o papel.<br/>persona · temperature · instrução · TASK"] --> S1["Fatos canônicos do projeto<br/>(synced knowledge blocks)"]
|
|
199
|
+
S1 --> S2["Core skills para papel + stack<br/>(fixadas, ≤10)"]
|
|
200
|
+
S2 --> S3["Estado do projeto<br/>(issues · minhas tasks · decisões)"]
|
|
201
|
+
S3 --> S4["Mais skills (cauda longa, ≤30)"]
|
|
202
|
+
S4 --> S5["Conversa recente"]
|
|
203
|
+
S5 --> S6["Conversa anterior (compactada)"]
|
|
204
|
+
S6 --> S7["Conhecimento — RAG/KB (kbQuery k=6)"]
|
|
205
|
+
S7 --> S8["Memória relevante (.claude/memory.md)"]
|
|
206
|
+
S8 --> S9["Pano de fundo da empresa<br/>(missão · objetivo · stack)"]
|
|
207
|
+
style H fill:#1b2a4a,color:#fff
|
|
208
|
+
style S9 fill:#3a1b2a,color:#fff
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Cada seção vem de estado real:
|
|
212
|
+
|
|
213
|
+
- **Fatos canônicos** — `canonicalFactsSection()` (synced knowledge blocks, tratados como autoritativos). Veja [SYNCED_BLOCKS.md](./SYNCED_BLOCKS.md).
|
|
214
|
+
- **Skills** — `agentSkills()` faz join `agent_skill → skill`, ranqueia por `coreSkillNamesForRole` / `librarySkillNamesForStack`, fixa ≤10 core, limita ≤30 na cauda. Veja [SKILLS.md](./SKILLS.md).
|
|
215
|
+
- **Estado do projeto** — issues abertas, tasks ativas deste agente, tasks do time, specs, linhas de `decision` recentes. Veja [GOALS_SPECS_ISSUES.md](./GOALS_SPECS_ISSUES.md).
|
|
216
|
+
- **Conversa** — `buildChannelContext()` retorna `{ summary, recent }` (a compactação cuida da cauda longa). Veja [DM.md](./DM.md) / [TEAM_ROOM.md](./TEAM_ROOM.md).
|
|
217
|
+
- **Conhecimento** — `kbQuery(orgId, query, { k: 6 })`, ciente de estado (descarta obsoleto/superseded). Veja [KB_RAG.md](./KB_RAG.md) / [MEMORY_RAG.md](./MEMORY_RAG.md).
|
|
218
|
+
- **Memória** — `.claude/memory.md`, limitado a 1500 chars.
|
|
219
|
+
|
|
220
|
+
Por fim `resolveBlocks()` expande quaisquer marcadores `{{kb:slug}}` para os corpos dos blocos canônicos atuais. A função retorna `{ prompt, sources }` — `sources` vira os chips de fonte da mensagem.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## 🪐 Resolução de runtime
|
|
225
|
+
|
|
226
|
+
`resolveRuntime(workspaceId, agent)` retorna `{ kind: "cli", binary }` ou `{ kind: "http", http }`:
|
|
227
|
+
|
|
228
|
+
| Prefixo do adaptador | Runtime | Notas |
|
|
229
|
+
|----------------------|---------|-------|
|
|
230
|
+
| `local_*` | HTTP (loopback) | llama.cpp `:8082` (primário) ou Ollama `:11434` (`local_ollama`, legado), `/v1` compatível com OpenAI. Só chat/raciocínio — a edição de arquivos fica nas CLIs. |
|
|
231
|
+
| `http_*` (configurado + chave presente) | API HTTP | `provider`/`baseUrl`/`apiKey` da tabela `provider` + Vault; formato `google` vs `openai`. |
|
|
232
|
+
| `http_*` (não configurado) | **cai para** CLI | para o agente ainda funcionar. |
|
|
233
|
+
| todo o resto | CLI | `pickBinary(adapter, model)`. |
|
|
234
|
+
|
|
235
|
+
`runAgentRuntime()` então transmite via `runHttpStream` ou `runAgentStream`. O Context Manager produziu um prompt agnóstico ao modelo, então **qualquer runtime recebe o mesmo contexto**. Veja [MODELS.md](./MODELS.md) e [AI_ARCHITECTURE.md] (este doc).
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 🛰️ Rastreamento de custo (`cost_entry`)
|
|
240
|
+
|
|
241
|
+
O custo é **real** — extraído do JSON da CLI (`total_cost_usd`, `usage`). Uma linha é inserida **somente quando** a execução produziu uso (`res.usd > 0 || inputTokens + outputTokens > 0`):
|
|
242
|
+
|
|
243
|
+
| Coluna | Tipo | Significado |
|
|
244
|
+
|--------|------|-------------|
|
|
245
|
+
| `id` | text (PK) | id da linha |
|
|
246
|
+
| `workspace_id` | text | workspace dono (cascade) |
|
|
247
|
+
| `agent_id` | text | qual agente gastou |
|
|
248
|
+
| `provider` | text | o `binary` que rodou (`claude`, `codex`, …) |
|
|
249
|
+
| `model` | text | modelo resolvido |
|
|
250
|
+
| `usd` | real | custo real (0 para CLIs que não emitem custo) |
|
|
251
|
+
| `tokens` | integer | `inputTokens + outputTokens` |
|
|
252
|
+
| `at` | timestamp | quando |
|
|
253
|
+
|
|
254
|
+
O mesmo formato de linha é escrito a partir de `collab.ts`, `runner.ts` e `planner-core.ts`. Os tetos diários são aplicados somando `cost_entry.usd` para o agente desde a meia-noite (`agentAtCap`): uma tarefa ou chat é **bloqueada** quando `total >= agent.dailyCapUsd`, e um item de Inbox `budget` é exibido. Veja [AGENTS.md](./AGENTS.md) para os tetos por agente.
|
|
255
|
+
|
|
256
|
+
> CLIs roteadas por provedor e runtimes locais/HTTP que não emitem uso registram `usd: 0` e `tokens: 0` — nunca um número chutado.
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## 🌠 Passo a passo: uma execução de tarefa
|
|
261
|
+
|
|
262
|
+
1. O tick do cron / runner reivindica uma task `todo`/`doing`; os gates de orçamento + goal-ativa passam.
|
|
263
|
+
2. `pickBinary` + verificação de disponibilidade (`binaryAvailable`); agente → `working`, issue ligada → `doing`.
|
|
264
|
+
3. `assembleAgentPrompt({ orgId, ws, agent, channel:"room", instruction: TASK_INSTRUCTION, task })`.
|
|
265
|
+
4. Flags por spawn empurradas: `setLockHook`, `setGuardHook`, `setWebResearch` (de `ws.settings.agents.*`).
|
|
266
|
+
5. `runAgentStream(prompt, { binary, model: modelAlias(...), timeoutMs: 240_000, token: t.id, agentId, agentHandle }, onEvent)`.
|
|
267
|
+
6. Os eventos de stream marcam a checklist de TODOs ao vivo, registram arquivos tocados e emitem para a Team Room.
|
|
268
|
+
7. Na conclusão: registra `cost_entry`; parseia tokens `[[KB-BLOCK]]`, `[[REMEMBER]]`, `[[RESEARCH]]`; roda o boot gate + o gate do Test Dev; avança a coluna.
|
|
269
|
+
|
|
270
|
+
## Passo a passo: uma resposta de chat
|
|
271
|
+
|
|
272
|
+
1. `replyInChannel(orgId, ws, channel, agent, mode)` monta a instrução de papel (chat vs work) + as cláusulas de KB/consult/idioma/segurança.
|
|
273
|
+
2. `assembleAgentPrompt(...)` → prompt agnóstico ao modelo + `sources`.
|
|
274
|
+
3. `resolveRuntime` → CLI ou HTTP; `runAgentRuntime` transmite eventos ao operador.
|
|
275
|
+
4. Remove tokens `[[CREATE_WORK]]` (sinal de novo trabalho), `[[REMEMBER]]`, `[[CONSULT]]`, `[[KB:]]`; aplica `scrubSecrets` na resposta.
|
|
276
|
+
5. Persiste a `message` (+ `sources`), posta as respostas de consulta da KB como Vannevar, registra o custo.
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## 🪐 Exemplos
|
|
281
|
+
|
|
282
|
+
**Execução de tarefa com Claude vanilla (start mode, acesso total):**
|
|
283
|
+
```
|
|
284
|
+
claude -p --output-format stream-json --include-partial-messages --verbose \
|
|
285
|
+
--settings /tmp/constella-agent-settings.json \
|
|
286
|
+
--permission-mode bypassPermissions \
|
|
287
|
+
--allowedTools WebSearch WebFetch \
|
|
288
|
+
--model sonnet
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**Execução prod enjaulada (vps mode, só edições):**
|
|
292
|
+
```
|
|
293
|
+
claude -p --output-format stream-json --include-partial-messages --verbose \
|
|
294
|
+
--settings /tmp/constella-agent-settings.json \
|
|
295
|
+
--permission-mode acceptEdits
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**Execução de tarefa com Codex (enjaulada):**
|
|
299
|
+
```
|
|
300
|
+
codex exec --json --skip-git-repo-check -s workspace-write -m gpt-5-codex
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
**Sondar disponibilidade / auth de uma CLI:**
|
|
304
|
+
```
|
|
305
|
+
claude --version # cliVersion("claude")
|
|
306
|
+
opencode auth list # detectCliAuth("opencode")
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## 🕳️ Estados possíveis
|
|
312
|
+
|
|
313
|
+
| Estado | Onde | Significado |
|
|
314
|
+
|--------|------|-------------|
|
|
315
|
+
| `CliResult.ok = true` | adaptador | `is_error !== true` e (claude) `subtype === "success"`, ou exit 0 com texto |
|
|
316
|
+
| `CliResult.ok = false` | adaptador | erro / exit não-zero / sem JSON; `error` carrega os últimos ~300 chars do stderr |
|
|
317
|
+
| `timedOut` | `runProc` | SIGKILL disparou no timeout; `base(...)` retorna `"timed out"` |
|
|
318
|
+
| abortado | `abortRun` | o filho da execução recebeu SIGKILL no meio (goal cancelada) |
|
|
319
|
+
| `AuthState` | `detectCliAuth` | `ready` / `needs_login` / `needs_key` / `unknown` (nunca fabrica `ready`) |
|
|
320
|
+
| runtime `cli` / `http` | `resolveRuntime` | qual engine rodou o prompt |
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 🛰️ Integrações relacionadas
|
|
325
|
+
|
|
326
|
+
- **Vault** — chaves de provedor HTTP/`http_*` são lidas via `getSecret` (AES-256-GCM). Veja [CONFIGURATION.md](./CONFIGURATION.md).
|
|
327
|
+
- **RAG / KB** — `kbQuery` alimenta a seção de Conhecimento; transcrições de chat são re-indexadas. Veja [KB_RAG.md](./KB_RAG.md).
|
|
328
|
+
- **Skills** — skills fixadas/cauda são ligadas por agente. Veja [SKILLS.md](./SKILLS.md).
|
|
329
|
+
- **Synced blocks** — fatos canônicos + resolução de `{{kb:slug}}`. Veja [SYNCED_BLOCKS.md](./SYNCED_BLOCKS.md).
|
|
330
|
+
- **Models** — seleção de modelo local + catálogo. Veja [MODELS.md](./MODELS.md).
|
|
331
|
+
- **Plugins** — Web Search é um plugin nativo que controla `claudeWebArgs`. Veja [PLUGINS.md](./PLUGINS.md).
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## 🚀 Segurança
|
|
336
|
+
|
|
337
|
+
- **Jaula de FS** — toda CLI roda com `cwd = orgRoot(orgId)`; os agentes leem/editam apenas dentro do workspace da org. Veja [SECURITY.md](./SECURITY.md).
|
|
338
|
+
- **Guard de injeção de id de modelo** — `safeModel` / `safeModelSlash` validam por regex os ids de modelo antes de chegarem ao argv num spawn `shell: true` no Windows (um valor como `sonnet"; rm -rf ~` é descartado).
|
|
339
|
+
- **shell:false para git/gh** — executáveis reais rodam com `shell: false` para que args de branch/mensagem/caminho influenciados pelo cliente não possam ser re-parseados por um shell.
|
|
340
|
+
- **Hooks vanilla** — `disableAllHooks` mantém os plugins/hooks do operador fora das execuções dos agentes (isolamento de voz + comportamento).
|
|
341
|
+
- **Command guard** — `bin/guard-hook.mjs` (padrão LIGADO) bloqueia shell catastrófico (`rm -rf /`, force-push, `mkfs`, fork-bomb).
|
|
342
|
+
- **Jaula de permissão em prod** — `acceptEdits` (sem rede/exec arbitrário) por cima de Docker + Tailscale.
|
|
343
|
+
- **Scrub de segredos** — respostas de chat passam por `scrubSecrets` antes de serem armazenadas / mostradas / enviadas ao Telegram.
|
|
344
|
+
- **Endurecimento contra prompt-injection** — cláusulas de Telegram + arquivos anexados marcam a entrada do operador como DADO, nunca instruções.
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## 🌌 Solução de problemas
|
|
349
|
+
|
|
350
|
+
| Sintoma | Causa provável | Correção |
|
|
351
|
+
|---------|----------------|----------|
|
|
352
|
+
| Agente "couldn't respond" / sem saída | CLI não instalada ou não logada | `cliVersion(...)`; siga `LOGIN_HINTS` (ex.: fazer login no Claude Code) |
|
|
353
|
+
| Agentes falam na "voz" do plugin do operador | hooks vazaram | confirme que o overlay `disableAllHooks` está aplicado (caminho vanilla) |
|
|
354
|
+
| Agente não consegue instalar deps / rodar testes | modo de permissão enjaulado | run-mode é prod (`acceptEdits`); defina `CONSTELLA_AGENT_FULL_ACCESS=1` se for intencional |
|
|
355
|
+
| Sem pesquisa web | pesquisa web desligada | tire `CONSTELLA_WEB_RESEARCH=0` ou habilite `settings.agents.webResearch` |
|
|
356
|
+
| Linhas de `cost_entry` sempre `usd:0` | CLI roteada por provedor/local não emite custo | esperado — o Constella nunca fabrica custo |
|
|
357
|
+
| Execução morta em ~3-4 min | timeout (180s/240s/300s) | trabalho grande deve ser dividido em várias tasks |
|
|
358
|
+
| Edições de arquivo bloqueadas | lock hook (lock de agentes em paralelo) | outro agente segura o lock; veja [SECURITY.md](./SECURITY.md) |
|
|
359
|
+
| Agente deslogado após habilitar locks | cópia de creds falhou | verifique se `~/.claude/.credentials.json` existe; senão ele cai para vanilla |
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## 🪐 Links relacionados
|
|
364
|
+
|
|
365
|
+
- [ARCHITECTURE.md](./ARCHITECTURE.md) — o control plane, processos, raiz de runtime
|
|
366
|
+
- [AGENTS.md](./AGENTS.md) — roster, papéis, tetos diários, status/saúde
|
|
367
|
+
- [WORKFLOW.md](./WORKFLOW.md) — o ciclo de vida do trabalho que os agentes executam
|
|
368
|
+
- [MODELS.md](./MODELS.md) — catálogo de modelos, modelos locais, provedores HTTP
|
|
369
|
+
- [SKILLS.md](./SKILLS.md) — biblioteca de skills + ligação por agente
|
|
370
|
+
- [KB_RAG.md](./KB_RAG.md) · [MEMORY_RAG.md](./MEMORY_RAG.md) — a nebulosa de memória
|
|
371
|
+
- [SYNCED_BLOCKS.md](./SYNCED_BLOCKS.md) — fatos canônicos no contexto
|
|
372
|
+
- [SECURITY.md](./SECURITY.md) — jaula de FS, vault, guards, hooks
|
|
373
|
+
- [CONFIGURATION.md](./CONFIGURATION.md) — variáveis de ambiente + settings por workspace
|