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,321 @@
|
|
|
1
|
+
[← Docs index](./README.md) · [🇧🇷 Português](../pt/WORKFLOW.md) · [✦ Constella](../../README.md)
|
|
2
|
+
|
|
3
|
+
# Workflow — Goal to Done 🌠
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
The full orbit a unit of work travels in Constella: from a brief that the CEO turns into a plan, through the operator's approval gate, into a real `claude`/`codex` execution loop, past review and test gates, all the way to a delivered Goal. Nothing is faked — every run spends real tokens, books real cost, and edits real files.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. When to use 🪐
|
|
12
|
+
|
|
13
|
+
Read this doc when you want to understand:
|
|
14
|
+
|
|
15
|
+
- How a typed brief becomes specs, issues and tasks.
|
|
16
|
+
- What the **approval gate** is and why agents never touch code before it.
|
|
17
|
+
- How **Run 24/7** (`plan.auto247`) drives the autonomous loop.
|
|
18
|
+
- What the **review / test / boot gates** do to a finished task.
|
|
19
|
+
- How progress rolls up from checklist items → issue → Goal, and how a Goal auto-completes.
|
|
20
|
+
- How to cancel, archive, reopen or restore a Goal mid-flight.
|
|
21
|
+
|
|
22
|
+
For the surrounding pieces see [GOALS_SPECS_ISSUES](./GOALS_SPECS_ISSUES.md), [AGENTS](./AGENTS.md), [PO_AGENT](./PO_AGENT.md) and [TEST_DEV](./TEST_DEV.md).
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 2. How it works 🛰️
|
|
27
|
+
|
|
28
|
+
The lifecycle has **eight stages**:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
Goal → Spec → Issue → Plan → Execution → Review → Test → Done
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Two hard gates split it in half:
|
|
35
|
+
|
|
36
|
+
1. **The approval gate.** Planning produces drafts only. No code runs until the operator approves the plan (`plan.approved = true`). The runner refuses to dispatch any task otherwise — see `runOneTaskBody` in `src/server/runner.ts`:
|
|
37
|
+
|
|
38
|
+
> ```ts
|
|
39
|
+
> const pl = await db.query.plan.findFirst({ where: eq(plan.workspaceId, ws.id) });
|
|
40
|
+
> if (!pl || !pl.approved) return false; // no plan or unapproved → never auto-run code
|
|
41
|
+
> ```
|
|
42
|
+
|
|
43
|
+
2. **The 24/7 gate.** Even after approval, the *autonomous* loop (cron `auto: true`) runs only while **Run 24/7** is on (`plan.auto247 = true`). A manual one-shot run (`auto: false`) only needs approval.
|
|
44
|
+
|
|
45
|
+
The whole pipeline is driven by four source modules:
|
|
46
|
+
|
|
47
|
+
| Module | Role |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| `src/server/planner-core.ts` | Session-less CEO planning core (`generatePlanFor`, `runPlanJob`, `planFromConversationFor`, `startNewWorkFor`). |
|
|
50
|
+
| `src/server/plan-ops.ts` | Approve / un-approve / 24/7 toggle (`approvePlanFor`, `requestPlanChangesFor`, `setAuto247For`). |
|
|
51
|
+
| `src/server/runner.ts` | The real autonomous loop (`tickWorkspace`, `runOneTask`, gates, progress). |
|
|
52
|
+
| `src/server/work-ops.ts` | Goal lifecycle (`cancelGoalFor`, `archiveGoalFor`, park/unpark tasks). |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 3. Main flow 🚀
|
|
57
|
+
|
|
58
|
+
### Stage 1–4 · Plan (Goal → Spec → Issue → Plan)
|
|
59
|
+
|
|
60
|
+
A planning run is kicked off through `generatePlanFor(orgId, workspace, opts)`:
|
|
61
|
+
|
|
62
|
+
1. It picks the CEO agent (`@ada`, by handle, falling back to a CEO/chief-exec role).
|
|
63
|
+
2. It guards against a second concurrent run by inspecting the live **`planner`** event stream (not Ada's flag, which can stick on `working`).
|
|
64
|
+
3. It sets Ada to `status = "working"`, emits a `thinking` event, and detaches the heavy work into `runPlanJob` so it survives the HTTP response.
|
|
65
|
+
|
|
66
|
+
Inside `runPlanJob`:
|
|
67
|
+
|
|
68
|
+
- **First-plan analysis.** If an existing project is present (imported repo, copied local dir, or attached `mock/`) and it has not been analyzed yet (`settings.source.analyzed` is unset), `analyzeExistingProject` reads it file-by-file into `specs/SUPER-SPEC.md` first. Runs once per project.
|
|
69
|
+
- **Stack playbook.** The seeded native skills relevant to the chosen stack across Frontend/Backend/CyberSec/CTO are passed to Ada so she plans grounded in the real technologies (see [SKILLS](./SKILLS.md)).
|
|
70
|
+
- Ada runs a real `claude`/`codex` session (timeout `300_000` ms), writes `ARCHITECTURE.md` and `RITUALS.md` (first plan only), and returns **one JSON object**: `{"specs":[…],"issues":[…]}`.
|
|
71
|
+
- Constella persists the result: a **Goal** (born from the first/main spec), each **Spec** (`SPEC-NN`, numbered continuing from existing specs), each **Issue** (sequential keys, `col = "todo"`), and writes the artifacts to disk under `specs/` and `issues/` (the directory is the source of truth).
|
|
72
|
+
- Deterministic PO seeding maps priority → story points + MoSCoW (`high → Must / 8`, `med → Should / 5`, `low → Could / 3`).
|
|
73
|
+
- The first plan sets `plan.stage = 4, approved = false` (the approval gate). **New work** does NOT un-approve the running plan.
|
|
74
|
+
- The plan is surfaced: a room message, an Inbox **approval** item, an operator notification, and (if Telegram is configured) inline **Approve / Start execution / Review / Reject** buttons.
|
|
75
|
+
|
|
76
|
+
> New work is born from a DM to `@ada` ("build X"), the Planner's **New work** button (`startNewWorkFor`), or a chat conversation (`planFromConversationFor`). See [DM](./DM.md) and [CHAT_COMMANDS](./CHAT_COMMANDS.md).
|
|
77
|
+
|
|
78
|
+
### Stage 4 → 5 · Approve (the gate)
|
|
79
|
+
|
|
80
|
+
`approvePlanFor(orgId, ws)` flips the gate and materializes work:
|
|
81
|
+
|
|
82
|
+
1. `plan.approved = true, stage = 6`; every `issue.approved = true`; every active `spec.approved = true`.
|
|
83
|
+
2. `materializeTasks` converts each issue into an executable **task** row (`col = "todo"`). Idempotent — issues that already have a task are skipped, so a re-approve after a re-plan only materializes the new ones. A **`DOCS-1`** task (`@barbara`) is always ensured last so the build is always documented.
|
|
84
|
+
3. The PO backlog doc `PO/backlog.md` is groomed from the approved issues, and a real PO grooming pass (`groomBacklogFor`, Donald) is fired best-effort to size story points + MoSCoW and flag duplicates/gaps.
|
|
85
|
+
4. Ada narrates in the room; the decision is logged; the Inbox approval item is resolved.
|
|
86
|
+
|
|
87
|
+
### Stage 5 · Execution (the real loop)
|
|
88
|
+
|
|
89
|
+
The worker (`bin/worker.mjs`) POSTs `POST /api/cron/tick` (guarded by `x-worker-secret`) roughly every 60s. That calls `tickAll({ execute: true, auto: true })` → `tickWorkspace` → `runOneTask` → `runOneTaskBody` for each active workspace.
|
|
90
|
+
|
|
91
|
+
`runOneTaskBody` runs **exactly one** pending task per tick:
|
|
92
|
+
|
|
93
|
+
1. **Gates:** plan approved? (else return) · `auto && !auto247`? (else return) · goal still active?
|
|
94
|
+
2. **Reclaim orphans:** any `doing` task not genuinely in-flight (from a crash/restart) is re-queued to `todo`.
|
|
95
|
+
3. **Pick a task:** an in-progress `doing` task (unless its assignee is already executing elsewhere), else **atomically claim** the next `todo` (compare-and-set on `col`) so two ticks can never grab the same one.
|
|
96
|
+
4. **Budget gate:** if the assignee hit its `dailyCapUsd`, push a budget Inbox item and skip.
|
|
97
|
+
5. **Spawn:** flip the linked issue to `doing`, assemble the context bundle (`assembleAgentPrompt`), and run the real CLI (`runAgentStream`, timeout `240_000` ms). The task's checklist is ticked **live** as the agent streams its reply.
|
|
98
|
+
6. **Book real cost** into `costEntry` (only if the run produced usage).
|
|
99
|
+
|
|
100
|
+
A concurrency cap (`runningWorkspaces`, default **1** per workspace, override `CONSTELLA_MAX_CONCURRENT_AGENTS` or `settings.agents.maxConcurrent`) prevents the browser tick and the worker tick from launching two CLIs at once.
|
|
101
|
+
|
|
102
|
+
### Stage 6 · Review · Stage 7 · Test (the completion gates)
|
|
103
|
+
|
|
104
|
+
On a successful run, before a task is allowed to reach `done`, it passes through gates (in order). Any hard failure holds the task at **`review`** with an Inbox item — it does not silently pass:
|
|
105
|
+
|
|
106
|
+
| Gate | Source | Condition | On failure |
|
|
107
|
+
| --- | --- | --- | --- |
|
|
108
|
+
| **Boot gate** | `ensureBootable` | task touched a code path | held at `review` + `block` Inbox item ("broke the dev server") |
|
|
109
|
+
| **Test Dev gate** | `runTestDev` | the project dev server is up (`serverUrl`) | held at `review` + `validation` Inbox item |
|
|
110
|
+
| **Review gate** | `reviewTaskChange` | `settings.agents.autoReview` on (default) & code touched | held at `review` + `review` Inbox item (high-sev findings) |
|
|
111
|
+
|
|
112
|
+
The review gate uses an **independent reviewer** — never the task's own author. It prefers `@whitfield` (CyberSec), then any QA/security role. KB-block proposals (`[[KB-BLOCK …]]`), learnings (`[[REMEMBER …]]`) and research requests (`[[RESEARCH: …]]`) the agent emitted are extracted and processed here too.
|
|
113
|
+
|
|
114
|
+
### Stage 8 · Done
|
|
115
|
+
|
|
116
|
+
If all gates pass, `COLUMN_NEXT` advances the task `todo → doing → done`, mirrors it onto the issue, ticks every `taskStep` done, and recomputes goal progress. When a Goal reaches 100%, `recomputeGoalProgress`/`goalRollups` flips it to `status = "done"`, and `fileCeoSummaryIfComplete` files a single **`ceo-summary`** report, notifies the operator, logs the decision, and captures the delivery as `history` in the KB.
|
|
117
|
+
|
|
118
|
+
On **failure**, the task goes to `blocked` (out of the runnable set, so the loop never retries forever), the agent goes `blocked`, an error report is written, and a `block` Inbox item is pushed.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 4. Key concepts ✦
|
|
123
|
+
|
|
124
|
+
- **The directory is the source of truth.** Specs (`specs/SPEC-NN.md`), issues (`issues/<key>.md`), the backlog (`PO/backlog.md`) and reports (`Reports/*.md`) all live on disk; the DB indexes them. See [ARCHITECTURE](./ARCHITECTURE.md).
|
|
125
|
+
- **Issue vs Task.** An *issue* is the planned unit on the board; a *task* is its executable mirror that the runner actually runs. `materializeTasks` bridges them (`task.issueId`); the runner mirrors task column moves back onto the issue.
|
|
126
|
+
- **Checklist-driven progress.** Each task carries `taskStep` rows (its TODOs). Issue % = done/total steps (or column fallback); Goal % = the **average** of its issues' %. Computed on read in `goalRollups` — no drift.
|
|
127
|
+
- **Auto-handoff.** When an agent ends its reply by `@mention`ing exactly one teammate, `relayRoomMentions` makes that teammate reply and work (a bounded chain). `@operator` pings you instead. See [TEAM_ROOM](./TEAM_ROOM.md).
|
|
128
|
+
- **Crash recovery.** `reclaimOrphans` re-queues `doing` tasks left stuck by a dead process; `reclaimStaleLocks` drops abandoned per-file locks.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 5. Tables 🗄️
|
|
133
|
+
|
|
134
|
+
### `plan` (one row per workspace — the gate)
|
|
135
|
+
|
|
136
|
+
| Column | Type | Meaning |
|
|
137
|
+
| --- | --- | --- |
|
|
138
|
+
| `workspaceId` | text (PK) | the workspace this plan belongs to |
|
|
139
|
+
| `approved` | bool | the approval gate — code runs only when `true` |
|
|
140
|
+
| `auto247` | bool | Run 24/7 — the autonomous cron loop runs only when `true` |
|
|
141
|
+
| `stage` | int (default 4) | pipeline marker: `1` = sent back for revision, `4` = drafted/awaiting approval, `6` = approved |
|
|
142
|
+
|
|
143
|
+
### `goal`
|
|
144
|
+
|
|
145
|
+
| Column | Meaning |
|
|
146
|
+
| --- | --- |
|
|
147
|
+
| `status` | `active` \| `cancelled` \| `archived` \| `done` |
|
|
148
|
+
| `progress` | cached rollup % (recomputed by the runner while active; sticky once settled) |
|
|
149
|
+
| `specId` | the main spec the goal was born from |
|
|
150
|
+
| `ownerId` | the CEO agent |
|
|
151
|
+
| `archivePath` | ZIP path when archived |
|
|
152
|
+
| `doneAt` / `cancelledAt` / `archivedAt` / `reopenedAt` | lifecycle timestamps |
|
|
153
|
+
|
|
154
|
+
### `spec` / `issue` / `task`
|
|
155
|
+
|
|
156
|
+
| Table | Workflow column | Lifecycle `status` |
|
|
157
|
+
| --- | --- | --- |
|
|
158
|
+
| `spec` | — (`approved` bool) | `active` \| `cancelled` \| `archived` |
|
|
159
|
+
| `issue` | `col`: `todo` \| `doing` \| `blocked` \| `review` \| `done` | `active` \| `cancelled` \| `archived` |
|
|
160
|
+
| `task` | `col`: `triage` \| `todo` \| `doing` \| `blocked` \| `review` \| `done` | — |
|
|
161
|
+
|
|
162
|
+
`issue` also has `prio` (`low`/`med`/`high`), `moscow` (`Must`/`Should`/`Could`/`Won't`) and `points`. `task` adds `assigneeId`, `goalId`, `issueId`, `createdBy`.
|
|
163
|
+
|
|
164
|
+
### Column → progress map (`src/server/progress.ts`)
|
|
165
|
+
|
|
166
|
+
| Column | % |
|
|
167
|
+
| --- | --- |
|
|
168
|
+
| `triage` / `todo` | 0 |
|
|
169
|
+
| `blocked` | 25 |
|
|
170
|
+
| `doing` | 50 |
|
|
171
|
+
| `review` | 80 |
|
|
172
|
+
| `done` | 100 |
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 6. Lifecycle diagram 🌌
|
|
177
|
+
|
|
178
|
+
```mermaid
|
|
179
|
+
flowchart TD
|
|
180
|
+
B["Brief / DM @ada / New work"] --> P["generatePlanFor → runPlanJob<br/>(CEO @ada, real CLI)"]
|
|
181
|
+
P --> G["Goal + Specs + Issues<br/>written to disk · stage 4"]
|
|
182
|
+
G --> GATE{"Operator approves?<br/>(approval gate)"}
|
|
183
|
+
GATE -- "Reject → requestPlanChangesFor<br/>(stage 1, un-approve)" --> P
|
|
184
|
+
GATE -- "Approve → approvePlanFor<br/>(stage 6)" --> M["materializeTasks<br/>issues → tasks (todo)<br/>+ DOCS-1, groom backlog"]
|
|
185
|
+
M --> R24{"Run 24/7 on?<br/>(plan.auto247)"}
|
|
186
|
+
R24 -- "off" --> IDLE["Tasks wait in todo"]
|
|
187
|
+
R24 -- "on (cron tick)" --> EXEC["runOneTask:<br/>claim todo → doing<br/>spawn claude/codex"]
|
|
188
|
+
EXEC --> OK{"Run ok?"}
|
|
189
|
+
OK -- "no" --> BLK["task → blocked<br/>agent → blocked<br/>block Inbox item"]
|
|
190
|
+
OK -- "yes" --> BOOT{"Boot gate<br/>(code touched?)"}
|
|
191
|
+
BOOT -- "broken" --> REV["Held at review<br/>+ Inbox"]
|
|
192
|
+
BOOT -- "ok" --> TEST{"Test Dev gate<br/>(server up?)"}
|
|
193
|
+
TEST -- "fail" --> REV
|
|
194
|
+
TEST -- "pass" --> RG{"Review gate<br/>(autoReview)"}
|
|
195
|
+
RG -- "high-sev" --> REV
|
|
196
|
+
RG -- "clean" --> DONE["task → done<br/>mirror issue · tick steps"]
|
|
197
|
+
DONE --> ROLL["recomputeGoalProgress"]
|
|
198
|
+
ROLL --> CHECK{"Goal 100%?"}
|
|
199
|
+
CHECK -- "no" --> EXEC
|
|
200
|
+
CHECK -- "yes" --> COMPLETE["Goal → done<br/>CEO summary report<br/>history → KB 🚀"]
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 7. Step-by-step 🛰️
|
|
206
|
+
|
|
207
|
+
1. **Describe the work.** DM `@ada` "build X", click **New work** in the Planner, or run `/new-work <brief>`.
|
|
208
|
+
2. **Watch the plan stream.** The Planner's **planner** channel shows Ada analyzing, drafting and writing files.
|
|
209
|
+
3. **Review the drafts.** Open the CEO Planner; read the specs/issues. Reject a single spec/issue to DM its author for a revision, or reject the whole plan (`requestPlanChanges`, rewinds to stage 1).
|
|
210
|
+
4. **Approve.** Click **Approve** (or send `/approve`). Tasks materialize; the board fills with `todo`.
|
|
211
|
+
5. **Turn on Run 24/7.** Flip **Run 24/7** (`/run-247`). The worker now dispatches one task per tick.
|
|
212
|
+
6. **Monitor.** The team room shows each agent's run; the Inbox surfaces blocks/reviews/budgets; progress climbs live.
|
|
213
|
+
7. **Resolve holds.** Anything held at `review` or `blocked` appears in the [INBOX](./INBOX.md) — fix and re-queue.
|
|
214
|
+
8. **Delivery.** When the Goal hits 100% it auto-completes and a CEO summary report is filed.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## 8. Examples 🌠
|
|
219
|
+
|
|
220
|
+
**Start new work from chat (DM):**
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
You → @ada: build a CSV export button on the reports page, with a unit test
|
|
224
|
+
@ada: Plan ready for review: 2 specs and 4 issues drafted from the brief.
|
|
225
|
+
Open the CEO Planner and approve to start execution.
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Approve + run via slash commands** (see [CHAT_COMMANDS](./CHAT_COMMANDS.md)):
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
/approve # approvePlan — gate opens, tasks materialize
|
|
232
|
+
/run-247 # setAuto247(true) — autonomous loop starts
|
|
233
|
+
/status # one-line: active goals · open issues · in-flight · 24/7 · plan state
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Pause / send back / stop a goal:**
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
/pause # setAuto247(false) — autonomous loop stops (tasks stay)
|
|
240
|
+
/reject # requestPlanChanges — un-approve, rewind to stage 1
|
|
241
|
+
/cancel # cancelGoal — kill in-flight runs + park tasks, preserve everything
|
|
242
|
+
/archive # archiveGoal — ZIP the goal's files + manifest, park execution
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## 9. Possible states 🪐
|
|
248
|
+
|
|
249
|
+
### Plan state
|
|
250
|
+
|
|
251
|
+
| State | Condition |
|
|
252
|
+
| --- | --- |
|
|
253
|
+
| `none` | no plan row |
|
|
254
|
+
| `draft (stage N)` | `approved = false` |
|
|
255
|
+
| `approved` | `approved = true` |
|
|
256
|
+
|
|
257
|
+
### Run state (Planner, derived)
|
|
258
|
+
|
|
259
|
+
| State | Meaning |
|
|
260
|
+
| --- | --- |
|
|
261
|
+
| `waiting-approval` | plan not approved yet |
|
|
262
|
+
| `off` | approved, Run 24/7 off |
|
|
263
|
+
| `running` | approved + 24/7 on + runnable issues |
|
|
264
|
+
| `blocked` | approved but no runnable assigned issue |
|
|
265
|
+
| `all-done` | every issue `done` |
|
|
266
|
+
|
|
267
|
+
### Task / issue column
|
|
268
|
+
|
|
269
|
+
`triage → todo → doing → review → done`, plus `blocked` (out of the runnable set). A successful autonomous run lands on `done`; `review` is reached only by a failed gate or operator hand-routing.
|
|
270
|
+
|
|
271
|
+
### Goal status
|
|
272
|
+
|
|
273
|
+
`active → done` (auto, at 100%); `active → cancelled` / `archived` (operator); `cancelled`/`archived → active` (reopen/restore).
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## 10. Related integrations 🛰️
|
|
278
|
+
|
|
279
|
+
- **Telegram** — the plan-ready push carries **Approve / Start execution / Review / Reject** buttons; remote `approvePlanFor` / `setAuto247For` / `cancelGoalFor` via the allowlisted chat. See [TELEGRAM](./TELEGRAM.md).
|
|
280
|
+
- **Public API / MCP** — `POST /v1/plan/approve`, `/plan/reject`, `/execution`, `/work`, `/goals/:id/cancel`, `/goals/:id/archive` reach the same session-less cores. See [PUBLIC_API](./PUBLIC_API.md) and [MCP](./MCP.md).
|
|
281
|
+
- **Inbox** — every gate failure / block / budget cap / approval surfaces here. See [INBOX](./INBOX.md).
|
|
282
|
+
- **KB** — completed tasks, learnings and deliveries are ingested as reusable knowledge. See [KB_RAG](./KB_RAG.md) and [MEMORY_RAG](./MEMORY_RAG.md).
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## 11. Security 🕳️
|
|
287
|
+
|
|
288
|
+
- **The approval gate is fail-closed:** no plan or `approved = false` → the runner never spawns a code run.
|
|
289
|
+
- **The cron endpoint is fail-closed:** `POST /api/cron/tick` rejects (401) without a matching `x-worker-secret`.
|
|
290
|
+
- **Budget caps** (`agent.dailyCapUsd`) stop an agent at its daily spend and surface a budget Inbox item instead of overspending.
|
|
291
|
+
- **Command guard** (`guard-hook.mjs`, default on) blocks destructive shell commands; blocked attempts are surfaced once per task in the Inbox.
|
|
292
|
+
- **Secret scrubbing** (`scrubSecrets`) cleans agent output before it lands in the room, the KB or Telegram. See [SECURITY](./SECURITY.md).
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 12. Troubleshooting 🔭
|
|
297
|
+
|
|
298
|
+
| Symptom | Likely cause | Fix |
|
|
299
|
+
| --- | --- | --- |
|
|
300
|
+
| Tasks never run | plan not approved | `/approve` (open the gate) |
|
|
301
|
+
| Approved but idle | Run 24/7 is off, or no worker | `/run-247`; ensure the worker process is up (see [START_MODE](./START_MODE.md)) |
|
|
302
|
+
| Task stuck at `review` | a gate held it (boot/test/review) | check the [INBOX](./INBOX.md) item, fix, re-queue |
|
|
303
|
+
| Task `blocked` | the run errored | read `Reports/error-report.md` + the Inbox detail |
|
|
304
|
+
| Agent paused | hit `dailyCapUsd` | raise the cap in Agent Studio or wait for the daily reset |
|
|
305
|
+
| Planning returns nothing | model produced no parseable JSON | retry; a notification + planner `error` event explain it |
|
|
306
|
+
| Goal stuck below 100% | an issue is `blocked`/`review` | resolve the held task; the average rolls up on the next tick |
|
|
307
|
+
| Ada stuck `working` | a prior plan job died before its `finally` | self-recovers — a fresh `generatePlanFor` detects no live run and restarts |
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## 13. Related links 🌌
|
|
312
|
+
|
|
313
|
+
- [GOALS_SPECS_ISSUES](./GOALS_SPECS_ISSUES.md) — the data model behind each stage
|
|
314
|
+
- [PO_AGENT](./PO_AGENT.md) — backlog grooming, story points, MoSCoW
|
|
315
|
+
- [AGENTS](./AGENTS.md) — the roster that executes the work
|
|
316
|
+
- [AI_ARCHITECTURE](./AI_ARCHITECTURE.md) — how a run is assembled and spawned
|
|
317
|
+
- [TEST_DEV](./TEST_DEV.md) — the Test Dev / boot gate
|
|
318
|
+
- [INBOX](./INBOX.md) — where holds, blocks and approvals land
|
|
319
|
+
- [TEAM_ROOM](./TEAM_ROOM.md) · [DM](./DM.md) · [CHAT_COMMANDS](./CHAT_COMMANDS.md) — the human-in-the-loop surfaces
|
|
320
|
+
- [TELEGRAM](./TELEGRAM.md) · [PUBLIC_API](./PUBLIC_API.md) · [MCP](./MCP.md) — remote control
|
|
321
|
+
- [ARCHITECTURE](./ARCHITECTURE.md) — the control plane and directory-as-truth model
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
[← Índice](./README.md) · [🇬🇧 English](../en/AGENTS.md) · [✦ Constella](../../README.pt-BR.md)
|
|
2
|
+
|
|
3
|
+
# Agentes — O Elenco ✦🛰️
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
As dez estrelas operantes de toda organização Constella. Cada agente é um processo CLI real (`claude`/`codex`) com um papel, um gestor, um modelo, uma temperatura, um teto de orçamento diário e uma persona em disco. Juntos formam a constelação que planeja, constrói, revisa e lança o seu produto.
|
|
8
|
+
|
|
9
|
+
## Quando usar
|
|
10
|
+
|
|
11
|
+
- Você quer saber **quem faz o quê** e **quem se reporta a quem** numa organização recém-criada.
|
|
12
|
+
- Você precisa do **handle**, **papel**, **modelo**, **teto diário** e **tier** exatos de um agente.
|
|
13
|
+
- Você está montando o **Org Chart**, reatribuindo um gestor, ou mudando o modelo/orçamento de um agente.
|
|
14
|
+
- Você quer entender os **arquivos de persona** (`.claude/agents/<handle>/…`), **status** e **saúde (health)**.
|
|
15
|
+
|
|
16
|
+
## Como funciona 🌌
|
|
17
|
+
|
|
18
|
+
O elenco **nasce do código**, não é digitado por uma pessoa. Três fontes o definem e o materializam:
|
|
19
|
+
|
|
20
|
+
| Arquivo de origem | Papel |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `src/data/scaffold.ts` (`AGENT_DEFS`) | Definição canônica do elenco + templates de persona/arquivos (`agentMd`, `pulseMd`, `toolsMd`, `skillsMd`). Renderiza os arquivos em disco `.claude/agents/<handle>/…`. |
|
|
23
|
+
| `src/server/onboarding.ts` (`AGENTS`) | Insere as 10 linhas `agent` no banco durante o onboarding (com `tierFloor`, `dailyCapUsd`, `reportsTo`). |
|
|
24
|
+
| `src/server/seed-roster.ts` (`seedRosterForExistingWorkspaces`) | **Backfill** — adiciona qualquer membro de `AGENT_DEFS` ausente num workspace já onboarded (ex.: Vannevar, incluído após os 9 originais). Idempotente; roda uma vez por boot via `reconcileOnBoot`. |
|
|
25
|
+
|
|
26
|
+
O **diretório é a fonte da verdade**: a identidade de cada agente vive em Markdown sob `.claude/agents/<handle>/`. A linha do agente no banco (`src/db/schema.ts`) o indexa para a UI e o runner. Editar a persona na UI escreve de volta no disco (`saveAgentPersona`, `saveAgentModel` em `src/server/agents.ts`).
|
|
27
|
+
|
|
28
|
+
> Nota: o seed de demonstração legado `src/db/seed.ts` lista apenas os **9** agentes originais (sem Vannevar). O backfill de boot (`seedRosterForExistingWorkspaces`) fecha essa lacuna, então todo workspace ativo termina com os **10**.
|
|
29
|
+
|
|
30
|
+
## Fluxo principal — da definição a um agente vivo
|
|
31
|
+
|
|
32
|
+
```mermaid
|
|
33
|
+
flowchart LR
|
|
34
|
+
A["AGENT_DEFS<br/>(scaffold.ts)"] --> B["onboarding.ts<br/>insere linhas agent"]
|
|
35
|
+
A --> C["agentFiles()<br/>renderiza .claude/agents/<handle>/"]
|
|
36
|
+
B --> D[("tabela agent")]
|
|
37
|
+
C --> E["Agent.md · pulse.md<br/>tools.md · skills.md"]
|
|
38
|
+
D --> F["Runner / Org Chart / Studio"]
|
|
39
|
+
E --> G["assembleAgentPrompt<br/>(persona → execução CLI)"]
|
|
40
|
+
H["backfill seed-roster.ts<br/>(no boot)"] -. preenche lacunas .-> D
|
|
41
|
+
H -. escreve .-> E
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Os 10 agentes 🪐
|
|
45
|
+
|
|
46
|
+
Fonte da verdade: `AGENT_DEFS` em `src/data/scaffold.ts` (espelhado por `AGENTS` em `src/server/onboarding.ts`).
|
|
47
|
+
|
|
48
|
+
| Nome | Handle | Papel | Reporta a | Modelo | Temp | Teto diário (USD) | Tier | Cor |
|
|
49
|
+
|---|---|---|---|---|---|---|---|---|
|
|
50
|
+
| Ada | `ada` | CEO | — (raiz) | `sonnet` | 0.4 | $15 | critical | `#e0a44e` |
|
|
51
|
+
| Linus | `linus` | CTO | `ada` | `sonnet` | 0.3 | $40 | critical | `#9a5cff` |
|
|
52
|
+
| Donald | `donald` | Product Owner | `ada` | `haiku` | 0.4 | $20 | heavy | `#4fc9b0` |
|
|
53
|
+
| Margaret | `margaret` | Backend | `linus` | `sonnet` | 0.3 | $50 | heavy | `#3fb98f` |
|
|
54
|
+
| Grace | `grace` | Frontend | `linus` | `sonnet` | 0.5 | $45 | heavy | `#5b8def` |
|
|
55
|
+
| Edsger | `edsger` | QA | `linus` | `haiku` | 0.2 | $25 | heavy | `#e8688f` |
|
|
56
|
+
| Werner | `werner` | DevOps | `linus` | `haiku` | 0.3 | $20 | heavy | `#f0a35e` |
|
|
57
|
+
| Barbara | `barbara` | Docs | `ada` | `haiku` | 0.4 | $15 | light | `#b3d97a` |
|
|
58
|
+
| Whitfield | `whitfield` | CyberSec | `linus` | `opus` | 0.2 | $30 | critical | `#c4a0ff` |
|
|
59
|
+
| Vannevar | `vannevar` | Knowledge | `ada` | `haiku` | 0.2 | $10 | light | `#7ac5e0` |
|
|
60
|
+
|
|
61
|
+
Todos os dez vêm com `provider: cli_claude_code` por padrão. `model` é um alias real da CLI do Claude Code — só `opus`, `sonnet`, `haiku` existem para esse adapter (`CLI_MODELS.cli_claude_code` em `src/server/adapters/cli.ts`).
|
|
62
|
+
|
|
63
|
+
### Identidades e rituais
|
|
64
|
+
|
|
65
|
+
Cada agente carrega uma `identity` (quem é) e um `ritual` (o que faz a cada ciclo de trabalho), direto de `AGENT_DEFS`:
|
|
66
|
+
|
|
67
|
+
| Agente | Identidade | Ritual |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| Ada | Líder decidida e orientada a resultado. Fala em objetivos, não em tarefas. Protege escopo e orçamento. | Ler os objetivos da empresa, decompor em épicos, delegar aos líderes, revisar o que foi entregue. |
|
|
70
|
+
| Linus | Pensador de sistemas. Equilibra velocidade de entrega contra dívida técnica. | Transformar épicos em tickets, rotear trabalho aos especialistas, desbloquear, revisar PRs. |
|
|
71
|
+
| Donald | Voz do cliente. Implacável quanto a prioridade e clareza. | Refinar o backlog com MoSCoW, planejar a sprint, acompanhar entrega, fechar com retro. |
|
|
72
|
+
| Margaret | Engenheira de servidor pragmática. Valoriza correção, diffs pequenos e testes verdes. | Pegar um ticket, ler o contexto, implementar numa branch, nunca dar push sem suíte passando. |
|
|
73
|
+
| Grace | Engenheira de UI focada em ofício. Cuida de acessibilidade e APIs de componente limpas. | Ler os design tokens, construir o menor componente que funciona, typecheck antes do PR. |
|
|
74
|
+
| Edsger | Portão de qualidade cético. Assume que nada funciona até um teste provar. | Reproduzir, cobrir com teste, rodar a suíte, então liberar o sign-off. |
|
|
75
|
+
| Werner | Operador focado em confiabilidade. Automatiza o tedioso, guarda os leases. | Buildar, fazer deploy de preview, reportar a URL, nunca deixar um ambiente alocado tempo demais. |
|
|
76
|
+
| Barbara | Explicadora paciente. Transforma mudanças em documentação compreensível. | Observar merges, escrever docs com o contexto fresco, verificar cada link. |
|
|
77
|
+
| Whitfield | Revisor adversarial. Pensa como atacante, escreve como auditor. | Auditar cada mudança quanto a manuseio de segredos e injeção, registrar achados com correção concreta. |
|
|
78
|
+
| Vannevar | Guardião da memória semântica da empresa. Indexa todo documento E conversa em embeddings. | Manter o servidor de embeddings saudável; re-indexar docs do workspace e o chat no índice RAG para a recuperação ficar atual. |
|
|
79
|
+
|
|
80
|
+
## Árvore de reporte — o org chart 🌠
|
|
81
|
+
|
|
82
|
+
Duas raízes de órbita: **Ada (CEO)** no centro; **Linus (CTO)** carrega a constelação de engenharia. `reportsTo` armazena o **handle do gestor** (handle-space de ponta a ponta — ver `setReportsToByHandle`).
|
|
83
|
+
|
|
84
|
+
```mermaid
|
|
85
|
+
graph TD
|
|
86
|
+
ada["Ada · CEO · sonnet · $15 · critical"]
|
|
87
|
+
linus["Linus · CTO · sonnet · $40 · critical"]
|
|
88
|
+
donald["Donald · Product Owner · haiku · $20 · heavy"]
|
|
89
|
+
barbara["Barbara · Docs · haiku · $15 · light"]
|
|
90
|
+
vannevar["Vannevar · Knowledge · haiku · $10 · light"]
|
|
91
|
+
margaret["Margaret · Backend · sonnet · $50 · heavy"]
|
|
92
|
+
grace["Grace · Frontend · sonnet · $45 · heavy"]
|
|
93
|
+
edsger["Edsger · QA · haiku · $25 · heavy"]
|
|
94
|
+
werner["Werner · DevOps · haiku · $20 · heavy"]
|
|
95
|
+
whitfield["Whitfield · CyberSec · opus · $30 · critical"]
|
|
96
|
+
|
|
97
|
+
ada --> linus
|
|
98
|
+
ada --> donald
|
|
99
|
+
ada --> barbara
|
|
100
|
+
ada --> vannevar
|
|
101
|
+
linus --> margaret
|
|
102
|
+
linus --> grace
|
|
103
|
+
linus --> edsger
|
|
104
|
+
linus --> werner
|
|
105
|
+
linus --> whitfield
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
- **Subordinados diretos de Ada:** `linus`, `donald`, `barbara`, `vannevar`.
|
|
109
|
+
- **Subordinados diretos de Linus:** `margaret`, `grace`, `edsger`, `werner`, `whitfield`.
|
|
110
|
+
- Tarefas bloqueadas escalam para o `reportsTo` do agente (conforme `.claude/routing.md`).
|
|
111
|
+
|
|
112
|
+
## Conceitos-chave ✦
|
|
113
|
+
|
|
114
|
+
### Arquivos de persona (o diretório é o cérebro)
|
|
115
|
+
|
|
116
|
+
Para cada agente, `agentFiles(def, ctx)` escreve **quatro** arquivos Markdown sob `.claude/agents/<handle>/`:
|
|
117
|
+
|
|
118
|
+
| Arquivo | Gerador | Conteúdo |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| `Agent.md` | `agentMd` | Front-matter YAML (`handle`, `name`, `role`, `reportsTo`, `provider`, `model`, `temperature`, `dailyCapUsd`, `tierFloor`) + Identity, Ritual, Responsibilities, Behavior (da temperatura), regras de Decision/Execution, limites de workspace e o **System prompt**. |
|
|
121
|
+
| `pulse.md` | `pulseMd` | Config de liveness — `intervalSec: 30`, `maxMissed: 2`, `wakeOn` (`queued_task`, `mention`), e a legenda de status/health. |
|
|
122
|
+
| `tools.md` | `toolsMd` | Tabela de ferramentas por papel (ex.: CyberSec → `secret-scan`, `review.signoff`, `fs.read`; Knowledge → `rag.reindex`, `rag.index-chat`, `embed.health`). |
|
|
123
|
+
| `skills.md` | `skillsMd` | Os procedimentos vinculados ao agente (de `SKILL_DEFS`) + seu ritual. |
|
|
124
|
+
|
|
125
|
+
`Agent.md` é **write-through**: edições na UI (Agent Studio) corrigem o front-matter e as seções no lugar (`setFrontMatter`, `setInlineField`, `setSection`) e a linha do banco é atualizada para casar. O diretório vence em caso de conflito.
|
|
126
|
+
|
|
127
|
+
### Modelo e tier
|
|
128
|
+
|
|
129
|
+
- **Não é só Claude.** Os valores semente `opus`/`sonnet`/`haiku` são apenas os padrões do adaptador semente `cli_claude_code`. Troque o `adapter` por agente em **Agent Studio → Model** e o **menu de modelos muda junto** — o `ModelPicker` é indexado pelo `adapter` (`cliModelOptions(adapter)`, `src/components/ui/model-picker.tsx`): `cli_codex` → `gpt-5-codex` / `o4-mini`; `cli_openclaw` / `cli_hermes` / `cli_aider` / `cli_opencode` / `cli_copilot` / `cli_cursor` / `cli_cline` / `cli_kilo` → seus ids roteados por provedor; `local_*` → o GGUF carregado; provedores HTTP/router → o catálogo de modelos em cache. A tabela completa de adaptadores está em [MODELS.md](./MODELS.md).
|
|
130
|
+
- `model` é o alias configurado. Para `cli_claude_code` é um de `opus` / `sonnet` / `haiku`.
|
|
131
|
+
- `tierFloor` (`light` | `heavy` | `critical`) é o piso de qualidade do agente — padronizado em `AGENT_DEFS`, persistido na linha `agent` (`tier_floor`, padrão `heavy`). **Os tiers são agnósticos ao provedor:** um modelo de raciocínio de ponta em qualquer provedor (ex.: um Codex/GPT no modo de raciocínio alto, ou um Gemini de topo) mapeia para o tier `critical` / classe-Opus em potência e custo, enquanto modelos menores/mais rápidos (`o4-mini`, um "flash", `haiku`) mapeiam para a ponta `light`.
|
|
132
|
+
- Para etapas críticas de qualidade (revisão de código, segurança, validação final) o runner pode buscar o modelo **mais forte** do provider do agente via `strongestModelFor()` — para `claude` isso resolve em `opus`, e o flagship equivalente para qualquer outro provedor.
|
|
133
|
+
- O menu de modelos troca **automaticamente** ao escolher um provedor; o **teto diário não** — é um orçamento em USD independente que você ajusta (próxima seção) para casar com o tier de custo do modelo.
|
|
134
|
+
- `temperature` **não** seta uma flag de sampling da CLI (a CLI do Claude Code não expõe nenhuma). Em vez disso, `temperatureBehavior(t)` transforma o slider numa **instrução de prompt** concreta injetada em toda execução (`src/data/temperature.ts`).
|
|
135
|
+
|
|
136
|
+
### Teto diário (limite de orçamento) 🕳️
|
|
137
|
+
|
|
138
|
+
`dailyCapUsd` é um teto rígido de gasto por agente por dia. O runner chama `agentAtCap(agentId, dailyCapUsd)` (`src/server/runner.ts`); ao atingir, **pausa** o agente e empurra um item de inbox `budget` ("@`<handle>` atingiu o teto diário de orçamento"). Aumente o teto no Agent Studio ou espere o reset diário. Um teto de `0` significa "sem teto".
|
|
139
|
+
|
|
140
|
+
### Status e saúde (health)
|
|
141
|
+
|
|
142
|
+
Dois eixos ortogonais na linha `agent`:
|
|
143
|
+
|
|
144
|
+
| Eixo | Coluna | Valores | Significado |
|
|
145
|
+
|---|---|---|---|
|
|
146
|
+
| **Status** | `status` | `idle` · `working` · `review` · `blocked` | O que o agente está fazendo agora. |
|
|
147
|
+
| **Health** | `health` | `alive` · `stale` · `down` | Se o executor está alcançável. |
|
|
148
|
+
|
|
149
|
+
A varredura do cron tick (`runner.ts`) define a saúde a partir da disponibilidade do runtime: se o binário CLI do agente está alcançável (`runtimeOk`), a saúde é `alive`; caso contrário `stale`. Agentes ociosos recebem um toque de heartbeat leve (`lastPulse` atualizado, sem spam de linha de pulse); agentes em working/review registram uma linha real de `pulse` via `recordPulse`. O `pulse.md` documenta o contrato de liveness: alive dentro de `intervalSec * maxMissed`, senão stale; falha repetida → `down` (registrado em `Reports/error-report.md`).
|
|
150
|
+
|
|
151
|
+
## Tabelas 🛰️
|
|
152
|
+
|
|
153
|
+
### `agent` (`src/db/schema.ts`)
|
|
154
|
+
|
|
155
|
+
| Coluna | Tipo | Padrão | Notas |
|
|
156
|
+
|---|---|---|---|
|
|
157
|
+
| `id` | text PK | — | Id estável. |
|
|
158
|
+
| `workspaceId` | text | — | FK → `workspace` (cascade). |
|
|
159
|
+
| `handle` | text | — | Nome curto único (`ada`, `linus`, …). |
|
|
160
|
+
| `name` | text | — | Nome de exibição. |
|
|
161
|
+
| `role` | text | — | CEO / CTO / Backend / … |
|
|
162
|
+
| `color` | text | `#e0a44e` | Tom do avatar (usado no fallback de iniciais). |
|
|
163
|
+
| `image` | text | null | Caminho/data-URL opcional do avatar. |
|
|
164
|
+
| `adapter` | text | `cli_claude_code` | Runtime de execução (CLI/HTTP/local). |
|
|
165
|
+
| `model` | text | `sonnet` | Alias de modelo. |
|
|
166
|
+
| `temperature` | real | `0.4` | Conduz a banda de prompt de Behavior. |
|
|
167
|
+
| `dailyCapUsd` | real | `25` | Teto diário de gasto. |
|
|
168
|
+
| `tierFloor` | text enum | `heavy` | `light` / `heavy` / `critical`. |
|
|
169
|
+
| `reportsTo` | text | null | **Handle** do gestor. |
|
|
170
|
+
| `status` | text enum | `idle` | `idle` / `working` / `review` / `blocked`. |
|
|
171
|
+
| `health` | text enum | `alive` | `alive` / `stale` / `down`. |
|
|
172
|
+
| `lastPulse` | timestamp | null | Último heartbeat. |
|
|
173
|
+
| `persona` | json | null | `{ identity, ritual, tone, systemPrompt }`. |
|
|
174
|
+
| `rag` | json | null | Toggles de fonte RAG por agente. |
|
|
175
|
+
| `orgX` / `orgY` | real | null | Coordenadas do card no org-chart. |
|
|
176
|
+
|
|
177
|
+
### `pulse` (log de heartbeat)
|
|
178
|
+
|
|
179
|
+
| Coluna | Tipo | Notas |
|
|
180
|
+
|---|---|---|
|
|
181
|
+
| `id` | text PK | — |
|
|
182
|
+
| `agentId` | text | FK → `agent`. |
|
|
183
|
+
| `at` | timestamp | Padrão `unixepoch()`. |
|
|
184
|
+
| `ok` | boolean | Resultado do health-ping. |
|
|
185
|
+
| `latencyMs` | integer | Latência do ping. |
|
|
186
|
+
| `note` | text | ex.: `tick:working`. |
|
|
187
|
+
|
|
188
|
+
### `agentSkill` (join de habilitação)
|
|
189
|
+
|
|
190
|
+
| Coluna | Notas |
|
|
191
|
+
|---|---|
|
|
192
|
+
| `agentId` + `skillId` | PK composta. |
|
|
193
|
+
| `auto` | `true` = vínculo gerenciado pelo sistema (reconciliado no boot/mudança de stack); `false` = ativado à mão pelo operador (nunca tocado pelo reconcile). |
|
|
194
|
+
|
|
195
|
+
## Passo a passo — operar o elenco
|
|
196
|
+
|
|
197
|
+
1. **Ver o elenco.** Abra o módulo Agents (cada card mostra status, health, modelo). O Org Chart visualiza `reportsTo`.
|
|
198
|
+
2. **Reatribuir um gestor.** Arraste um card no canvas do Org Chart → `setReportsToByHandle(agentHandle, managerHandle)`. Auto-loops e ciclos são rejeitados; passe `null` para destacar (vira raiz/CEO).
|
|
199
|
+
3. **Mudar modelo / orçamento / tier.** No Agent Studio → `saveAgentModel({ adapter, model, temperature, dailyCapUsd, tierFloor })`. A linha do banco e o front-matter do `Agent.md` são atualizados juntos.
|
|
200
|
+
4. **Editar persona.** `saveAgentPersona({ identity, ritual, tone, systemPrompt })` corrige o `Agent.md` (Identity, Ritual, System prompt) em disco.
|
|
201
|
+
5. **Definir um avatar.** `saveAgentImage(agentId, imagePath | null)` (avatares em data-URL; avatares legados `uploads/<id>/` são limpos ao substituir).
|
|
202
|
+
6. **Adicionar um agente ausente.** No boot, `seedRosterForExistingWorkspaces()` faz backfill de qualquer membro de `AGENT_DEFS` ausente no workspace — linha do banco, quatro arquivos de persona e as skills nativas não-provisórias.
|
|
203
|
+
|
|
204
|
+
## Exemplos
|
|
205
|
+
|
|
206
|
+
Inspecionar a persona de um agente em disco:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
cat ~/.constella/organizations/<orgId>/workspace/.claude/agents/linus/Agent.md
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Front-matter que você verá (renderizado por `agentMd`):
|
|
213
|
+
|
|
214
|
+
```yaml
|
|
215
|
+
---
|
|
216
|
+
handle: linus
|
|
217
|
+
name: Linus
|
|
218
|
+
role: CTO
|
|
219
|
+
reportsTo: ada
|
|
220
|
+
provider: cli_claude_code
|
|
221
|
+
model: sonnet
|
|
222
|
+
temperature: 0.3
|
|
223
|
+
dailyCapUsd: 40
|
|
224
|
+
tierFloor: critical
|
|
225
|
+
---
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Listar agentes e sua linha de reporte pelo chat:
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
/agents
|
|
232
|
+
/agent linus
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
(`/agents` lista o elenco; `/agent <handle>` mostra o detalhe de um agente — ver [CHAT_COMMANDS.md](./CHAT_COMMANDS.md).)
|
|
236
|
+
|
|
237
|
+
## Estados possíveis
|
|
238
|
+
|
|
239
|
+
| Aspecto | Valores | Definido por |
|
|
240
|
+
|---|---|---|
|
|
241
|
+
| Status | `idle` · `working` · `review` · `blocked` | Runner / planner conforme o trabalho flui. |
|
|
242
|
+
| Health | `alive` · `stale` · `down` | Varredura do cron tick (alcance do binário) + pulse sweep. |
|
|
243
|
+
| Orçamento | abaixo do teto → roda · no/acima do teto → pausado (item de inbox `budget`) | `agentAtCap()`. |
|
|
244
|
+
| Tier floor | `light` · `heavy` · `critical` | Padrão de `AGENT_DEFS`; editável no Studio. |
|
|
245
|
+
|
|
246
|
+
## Integrações relacionadas 🚀
|
|
247
|
+
|
|
248
|
+
- **Skills** — os procedimentos habilitados de cada agente (`agentSkill`, `skills.md`). Ver [SKILLS.md](./SKILLS.md).
|
|
249
|
+
- **Models** — adapters e catálogo de modelos por trás de `adapter`/`model`. Ver [MODELS.md](./MODELS.md).
|
|
250
|
+
- **Workflow** — como os agentes pegam Goals → Specs → Issues → Tasks. Ver [WORKFLOW.md](./WORKFLOW.md).
|
|
251
|
+
- **Team Room / DM** — onde os agentes colaboram e fazem handoff. Ver [TEAM_ROOM.md](./TEAM_ROOM.md), [DM.md](./DM.md).
|
|
252
|
+
- **PO Agent / KB Agent** — o refinamento de Donald e a memória de Vannevar. Ver [PO_AGENT.md](./PO_AGENT.md), [KB_AGENT.md](./KB_AGENT.md).
|
|
253
|
+
|
|
254
|
+
## Segurança 🕳️
|
|
255
|
+
|
|
256
|
+
- **Jaula de workspace.** Cada agente roda com `cwd` no workspace da sua organização e é verificado lexicamente + por symlink contra fuga; nada fora do workspace é alcançável. Os limites são declarados em `Agent.md`, `permissions.md` e impostos pelo runner.
|
|
257
|
+
- **Sem segredos inline.** Personas e ferramentas proíbem chaves em texto puro; segredos vêm do vault. A saída é higienizada antes de logs/KB/Telegram.
|
|
258
|
+
- **Tetos de orçamento.** Um agente descontrolado para no seu `dailyCapUsd`; o runner não excede o teto.
|
|
259
|
+
- **Guardas de ciclo/self.** A reatribuição de gestor (`setReportsTo`, `setReportsToByHandle`) rejeita auto-referências e ciclos, então o org chart nunca forma um loop.
|
|
260
|
+
|
|
261
|
+
## Troubleshooting
|
|
262
|
+
|
|
263
|
+
| Sintoma | Causa provável | Correção |
|
|
264
|
+
|---|---|---|
|
|
265
|
+
| Um agente aparece **stale/down** | Seu binário CLI não está instalado/alcançável (`runtimeOk` falso). | Instale/repare a CLI `claude`/`codex`; a saúde se recupera no próximo tick. |
|
|
266
|
+
| Agente **pausado no meio do trabalho** | Atingiu seu `dailyCapUsd`. | Aumente o teto no Agent Studio ou espere o reset diário (ver o item de inbox `budget`). |
|
|
267
|
+
| Vannevar ausente numa org antiga | Org onboarded antes do agente Knowledge existir. | O backfill de boot (`seedRosterForExistingWorkspaces`) o adiciona automaticamente na próxima inicialização. |
|
|
268
|
+
| Mudança de gestor não faz nada | Self/ciclo (rejeitado) ou gestor fora deste workspace. | Escolha outro gestor; a mudança é silenciosamente ignorada para alvos inválidos. |
|
|
269
|
+
| `Agent.md` editado mas UI ainda antiga | Atraso de write-through/watcher. | O sync engine re-indexa ao salvar; recarregue após um instante. |
|
|
270
|
+
|
|
271
|
+
## Links relacionados
|
|
272
|
+
|
|
273
|
+
- [AI_ARCHITECTURE.md](./AI_ARCHITECTURE.md) — como as execuções de agente são montadas e executadas.
|
|
274
|
+
- [WORKFLOW.md](./WORKFLOW.md) — o ciclo Goal → Spec → Issue → Done.
|
|
275
|
+
- [SKILLS.md](./SKILLS.md) — a biblioteca de skills de que cada agente se vale.
|
|
276
|
+
- [MODELS.md](./MODELS.md) — adapters, aliases de modelo e tiers.
|
|
277
|
+
- [PO_AGENT.md](./PO_AGENT.md) · [KB_AGENT.md](./KB_AGENT.md) — Donald e Vannevar em profundidade.
|
|
278
|
+
- [TEAM_ROOM.md](./TEAM_ROOM.md) · [DM.md](./DM.md) — colaboração entre agentes.
|
|
279
|
+
- [CHAT_COMMANDS.md](./CHAT_COMMANDS.md) — `/agents`, `/agent`, `/status`.
|