constellai 0.3.6 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +3 -3
- package/.next/build-manifest.json +6 -6
- package/.next/next-minimal-server.js.nft.json +1 -1
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +6 -6
- package/.next/server/app/(app)/activity/page.js +2 -2
- package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
- package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/agents/[handle]/page.js +3 -3
- package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/code/page.js +2 -2
- package/.next/server/app/(app)/code/page.js.nft.json +1 -1
- package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/config/page.js +2 -2
- package/.next/server/app/(app)/config/page.js.nft.json +1 -1
- package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/costs/page.js +2 -2
- package/.next/server/app/(app)/costs/page.js.nft.json +1 -1
- package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/cron/page.js +2 -2
- package/.next/server/app/(app)/cron/page.js.nft.json +1 -1
- package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/dashboard/page.js +2 -2
- package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -1
- package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/design/page.js +53 -53
- package/.next/server/app/(app)/design/page.js.nft.json +1 -1
- package/.next/server/app/(app)/design/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/docs/[id]/page.js +2 -2
- package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/docs/page.js +2 -2
- package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
- package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/github/page.js +2 -2
- package/.next/server/app/(app)/github/page.js.nft.json +1 -1
- package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/goals/page.js +2 -2
- package/.next/server/app/(app)/goals/page.js.nft.json +1 -1
- package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/inbox/page.js +2 -2
- package/.next/server/app/(app)/inbox/page.js.nft.json +1 -1
- package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/knowledge/page.js +3 -3
- package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -1
- package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/models/page.js +2 -2
- package/.next/server/app/(app)/models/page.js.nft.json +1 -1
- package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/notifications/page.js +2 -2
- package/.next/server/app/(app)/notifications/page.js.nft.json +1 -1
- package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/org/page.js +4 -4
- package/.next/server/app/(app)/org/page.js.nft.json +1 -1
- package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/organizations/page.js +2 -2
- package/.next/server/app/(app)/organizations/page.js.nft.json +1 -1
- package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/page.js +3 -3
- package/.next/server/app/(app)/page.js.nft.json +1 -1
- package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/planner/page.js +3 -3
- package/.next/server/app/(app)/planner/page.js.nft.json +1 -1
- package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/plugins/page.js +2 -2
- package/.next/server/app/(app)/plugins/page.js.nft.json +1 -1
- package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/pm/page.js +2 -2
- package/.next/server/app/(app)/pm/page.js.nft.json +1 -1
- package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/prepare-deploy/page.js +3 -3
- package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -1
- package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/profile/page.js +2 -2
- package/.next/server/app/(app)/profile/page.js.nft.json +1 -1
- package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/pulse/page.js +2 -2
- package/.next/server/app/(app)/pulse/page.js.nft.json +1 -1
- package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/reports/[id]/page.js +3 -3
- package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -1
- package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/reports/page.js +3 -3
- package/.next/server/app/(app)/reports/page.js.nft.json +1 -1
- package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/routines/page.js +2 -2
- package/.next/server/app/(app)/routines/page.js.nft.json +1 -1
- package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/search/page.js +2 -2
- package/.next/server/app/(app)/search/page.js.nft.json +1 -1
- package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/security/page.js +2 -2
- package/.next/server/app/(app)/security/page.js.nft.json +1 -1
- package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/skills/page.js +3 -3
- package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
- package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/tasks/page.js +2 -2
- package/.next/server/app/(app)/tasks/page.js.nft.json +1 -1
- package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/test-dev/page.js +2 -2
- package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -1
- package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/update/page.js +3 -3
- package/.next/server/app/(app)/update/page.js.nft.json +1 -1
- package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(auth)/login/page.js +2 -2
- package/.next/server/app/(auth)/login/page.js.nft.json +1 -1
- package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(auth)/onboarding/page.js +2 -2
- package/.next/server/app/(auth)/onboarding/page.js.nft.json +1 -1
- package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error/page.js +3 -3
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +8 -8
- package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -8
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +3 -3
- package/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/.next/server/app/_global-error.segments/_index.segment.rsc +4 -4
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/[...all]/route.js +1 -1
- package/.next/server/app/api/auth/[...all]/route.js.nft.json +1 -1
- package/.next/server/app/api/cron/tick/route.js +5 -5
- package/.next/server/app/api/cron/tick/route.js.nft.json +1 -1
- package/.next/server/app/api/health/route.js +1 -1
- package/.next/server/app/api/health/route.js.nft.json +1 -1
- package/.next/server/app/api/locks/acquire/route.js +1 -1
- package/.next/server/app/api/locks/acquire/route.js.nft.json +1 -1
- package/.next/server/app/api/models/progress/route.js +1 -1
- package/.next/server/app/api/models/progress/route.js.nft.json +1 -1
- package/.next/server/app/api/passkey/authenticate/options/route.js +1 -1
- package/.next/server/app/api/passkey/authenticate/options/route.js.nft.json +1 -1
- package/.next/server/app/api/passkey/authenticate/verify/route.js +1 -1
- package/.next/server/app/api/passkey/authenticate/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/passkey/register/options/route.js +1 -1
- package/.next/server/app/api/passkey/register/options/route.js.nft.json +1 -1
- package/.next/server/app/api/passkey/register/verify/route.js +1 -1
- package/.next/server/app/api/passkey/register/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/stream/route.js +2 -2
- package/.next/server/app/api/stream/route.js.nft.json +1 -1
- package/.next/server/app/api/sync/file/route.js +2 -2
- package/.next/server/app/api/sync/file/route.js.nft.json +1 -1
- package/.next/server/app/api/telegram/poll/route.js +19 -19
- package/.next/server/app/api/telegram/poll/route.js.nft.json +1 -1
- package/.next/server/app/api/upload/route.js +1 -1
- package/.next/server/app/api/upload/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/[[...path]]/route.js +1 -1
- package/.next/server/app/api/v1/[[...path]]/route.js.nft.json +1 -1
- package/.next/server/app-paths-manifest.json +3 -3
- package/.next/server/chunks/1033.js +14 -0
- package/.next/server/chunks/1243.js +1 -0
- package/.next/server/chunks/{6719.js → 1304.js} +1 -1
- package/.next/server/chunks/1678.js +417 -0
- package/.next/server/chunks/1952.js +1 -0
- package/.next/server/chunks/{8561.js → 1986.js} +2 -2
- package/.next/server/chunks/2118.js +869 -0
- package/.next/server/chunks/2323.js +1 -0
- package/.next/server/chunks/{7336.js → 2392.js} +1 -1
- package/.next/server/chunks/2559.js +479 -0
- package/.next/server/chunks/26.js +1 -0
- package/.next/server/chunks/{5278.js → 3140.js} +1 -1
- package/.next/server/chunks/{6479.js → 3172.js} +1 -1
- package/.next/server/chunks/3205.js +1 -0
- package/.next/server/chunks/3392.js +1 -0
- package/.next/server/chunks/{4979.js → 3987.js} +5 -5
- package/.next/server/chunks/404.js +1 -0
- package/.next/server/chunks/415.js +1 -0
- package/.next/server/chunks/4288.js +1 -0
- package/.next/server/chunks/{2599.js → 4411.js} +1 -1
- package/.next/server/chunks/{7912.js → 4561.js} +1 -1
- package/.next/server/chunks/4587.js +1 -0
- package/.next/server/chunks/4679.js +462 -1
- package/.next/server/chunks/4769.js +1 -0
- package/.next/server/chunks/4882.js +2 -0
- package/.next/server/chunks/4897.js +15 -0
- package/.next/server/chunks/5015.js +15 -0
- package/.next/server/chunks/{658.js → 5361.js} +3 -3
- package/.next/server/chunks/5557.js +1 -0
- package/.next/server/chunks/{2517.js → 5593.js} +1 -1
- package/.next/server/chunks/5661.js +1 -0
- package/.next/server/chunks/5802.js +1 -0
- package/.next/server/chunks/5878.js +1 -0
- package/.next/server/chunks/5911.js +18 -0
- package/.next/server/chunks/6083.js +1 -0
- package/.next/server/chunks/{4302.js → 6121.js} +13 -13
- package/.next/server/chunks/6309.js +1 -0
- package/.next/server/chunks/6538.js +4 -0
- package/.next/server/chunks/6585.js +1 -0
- package/.next/server/chunks/{3243.js → 6778.js} +2 -2
- package/.next/server/chunks/6807.js +1 -0
- package/.next/server/chunks/{1388.js → 6948.js} +1 -1
- package/.next/server/chunks/{1591.js → 699.js} +2 -2
- package/.next/server/chunks/7109.js +1 -0
- package/.next/server/chunks/714.js +1 -0
- package/.next/server/chunks/7474.js +1 -0
- package/.next/server/chunks/{7037.js → 7677.js} +1 -1
- package/.next/server/chunks/77.js +3 -0
- package/.next/server/chunks/7727.js +1 -0
- package/.next/server/chunks/7867.js +22 -0
- package/.next/server/chunks/{259.js → 7905.js} +5 -5
- package/.next/server/chunks/{3609.js → 7911.js} +1 -1
- package/.next/server/chunks/{2867.js → 8134.js} +2 -2
- package/.next/server/chunks/{9783.js → 8211.js} +2 -2
- package/.next/server/chunks/8224.js +1 -0
- package/.next/server/chunks/8237.js +12 -0
- package/.next/server/chunks/8498.js +1 -0
- package/.next/server/chunks/{8823.js → 907.js} +10 -10
- package/.next/server/chunks/{7778.js → 9099.js} +1 -1
- package/.next/server/chunks/912.js +1 -0
- package/.next/server/chunks/9180.js +1 -0
- package/.next/server/chunks/9344.js +910 -0
- package/.next/server/chunks/9374.js +1 -0
- package/.next/server/chunks/939.js +1 -0
- package/.next/server/chunks/9419.js +1 -0
- package/.next/server/chunks/9426.js +188 -0
- package/.next/server/chunks/9677.js +17 -0
- package/.next/server/chunks/978.js +1 -0
- package/.next/server/chunks/9795.js +21 -0
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/middleware.js +6 -6
- package/.next/server/middleware.js.nft.json +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/171-2a8b8f61f7ab0828.js +1 -0
- package/.next/static/chunks/{23550918-ff694f70f4b0648c.js → 1ceccf25-731706dbe95504b9.js} +1 -1
- package/.next/static/chunks/3556-dbb9200143640484.js +1 -0
- package/.next/static/chunks/{2320-fc8b39380e69d465.js → 3703-b09be945970ea475.js} +1 -1
- package/.next/static/chunks/5452-d0ce3b51601a5815.js +1 -0
- package/.next/static/chunks/5523-9c369c915ee6d9c9.js +1 -0
- package/.next/static/chunks/7066-c10959874b2315bf.js +32 -0
- package/.next/static/chunks/717-1d1163010e3b541d.js +1 -0
- package/.next/static/chunks/7218-21f40f9caef5d658.js +12 -0
- package/.next/static/chunks/7363-b9ebe28fed23b997.js +1 -0
- package/.next/static/chunks/7621-87d8d0d0568de3ca.js +4 -0
- package/.next/static/chunks/{5920.6451a68b63918988.js → 7790.b648690cf25f29eb.js} +1 -1
- package/.next/static/chunks/{7509.721cd47a931c5518.js → 8251.6fedb7dc4d720bab.js} +1 -1
- package/.next/static/chunks/9279-467412113ad55642.js +1 -0
- package/.next/static/chunks/928-6dec8198101bc3e6.js +1 -0
- package/.next/static/chunks/9874-dc2fbf114916382b.js +1 -0
- package/.next/static/chunks/app/(app)/activity/page-ce3fc6003368f592.js +1 -0
- package/.next/static/chunks/app/(app)/agents/[handle]/page-236e13b8edadd480.js +1 -0
- package/.next/static/chunks/app/(app)/code/page-18ae765c81a2c709.js +1 -0
- package/.next/static/chunks/app/(app)/config/page-8a6fcf6c04337210.js +1 -0
- package/.next/static/chunks/app/(app)/costs/page-230b0ef03a2024b0.js +1 -0
- package/.next/static/chunks/app/(app)/cron/page-ca89769e2522191d.js +1 -0
- package/.next/static/chunks/app/(app)/dashboard/page-6237c3a35cce55ce.js +1 -0
- package/.next/static/chunks/app/(app)/design/{page-f48c0487d240248e.js → page-5997054187e59e74.js} +3 -3
- package/.next/static/chunks/app/(app)/docs/[id]/page-3362d323e0f4dada.js +1 -0
- package/.next/static/chunks/app/(app)/docs/page-d7d8018a7884a4b4.js +1 -0
- package/.next/static/chunks/app/(app)/error-f9a3caa63e064a7e.js +1 -0
- package/.next/static/chunks/app/(app)/github/page-f5c1cae725d080fb.js +1 -0
- package/.next/static/chunks/app/(app)/goals/page-95e85ce115ed9ff3.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/page-474c3f0a181bbbd3.js +12 -0
- package/.next/static/chunks/app/(app)/knowledge/page-08596428ca34b620.js +1 -0
- package/.next/static/chunks/app/(app)/layout-720a1171f7152d86.js +1 -0
- package/.next/static/chunks/app/(app)/models/page-fa1eb257e6911c9a.js +1 -0
- package/.next/static/chunks/app/(app)/notifications/page-31f2a041bdb497b9.js +12 -0
- package/.next/static/chunks/app/(app)/org/page-666438930ddc4639.js +12 -0
- package/.next/static/chunks/app/(app)/organizations/page-0de7da829c9b2249.js +1 -0
- package/.next/static/chunks/app/(app)/page-bfcf3d25f468240f.js +1 -0
- package/.next/static/chunks/app/(app)/planner/page-0fc0ebe2d338769a.js +1 -0
- package/.next/static/chunks/app/(app)/plugins/page-ad369fbfec6f3d1c.js +1 -0
- package/.next/static/chunks/app/(app)/pm/page-bb39c9d9a4f0d597.js +1 -0
- package/.next/static/chunks/app/(app)/prepare-deploy/page-f182991e68b159c1.js +1 -0
- package/.next/static/chunks/app/(app)/profile/page-cf5fe16bfad2a7ba.js +1 -0
- package/.next/static/chunks/app/(app)/pulse/page-03877c467c491e8a.js +1 -0
- package/.next/static/chunks/app/(app)/reports/[id]/page-ca89769e2522191d.js +1 -0
- package/.next/static/chunks/app/(app)/reports/page-7741b6a25e582791.js +1 -0
- package/.next/static/chunks/app/(app)/routines/page-ea83e6337e7502c2.js +1 -0
- package/.next/static/chunks/app/(app)/search/page-5e7f7cf0cc51b76f.js +1 -0
- package/.next/static/chunks/app/(app)/security/page-410144cdc35e19cc.js +1 -0
- package/.next/static/chunks/app/(app)/skills/page-90e5d8a24920c275.js +1 -0
- package/.next/static/chunks/app/(app)/tasks/page-4d535f34ae9c44ca.js +1 -0
- package/.next/static/chunks/app/(app)/test-dev/page-782c8cadd8a10feb.js +1 -0
- package/.next/static/chunks/app/(app)/update/page-decdb0ece526b50f.js +1 -0
- package/.next/static/chunks/app/(auth)/login/page-147a9be880c44d42.js +1 -0
- package/.next/static/chunks/app/(auth)/onboarding/page-8548be7e3ab3659e.js +1 -0
- package/.next/static/chunks/app/_global-error/{page-eacef2b697bd0982.js → page-ffc45e65538b6024.js} +1 -1
- package/.next/static/chunks/app/_not-found/page-405e53afca481eab.js +1 -0
- package/.next/static/chunks/app/api/auth/[...all]/{route-eacef2b697bd0982.js → route-ffc45e65538b6024.js} +1 -1
- package/.next/static/chunks/app/api/cron/tick/{route-eacef2b697bd0982.js → route-ffc45e65538b6024.js} +1 -1
- package/.next/static/chunks/app/api/health/{route-eacef2b697bd0982.js → route-ffc45e65538b6024.js} +1 -1
- package/.next/static/chunks/app/api/locks/acquire/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/api/models/progress/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/api/passkey/authenticate/options/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/api/passkey/authenticate/verify/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/api/passkey/register/options/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/api/passkey/register/verify/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/api/stream/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/api/sync/file/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/api/telegram/poll/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/api/upload/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/api/v1/[[...path]]/route-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/app/error-e128df085a794b38.js +1 -0
- package/.next/static/chunks/app/global-error-339c61c4184d384a.js +1 -0
- package/.next/static/chunks/app/layout-c717657a60a7f62c.js +1 -0
- package/.next/static/chunks/main-143b6dbf9c5dc129.js +5 -0
- package/.next/static/chunks/main-app-8ce4eaae11d4f233.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-ffc45e65538b6024.js +1 -0
- package/.next/static/chunks/webpack-0e63b9ea83aeb0a2.js +1 -0
- package/.next/trace-build +1 -1
- package/CHANGELOG.md +45 -1
- package/README.md +1 -1
- package/README.pt-BR.md +1 -1
- package/THIRD_PARTY_LICENSES.md +64 -0
- package/docs/UPDATE.md +17 -3
- package/docs/en/AI_ARCHITECTURE.md +2 -2
- package/docs/en/CHAT_COMMANDS.md +1 -1
- package/docs/en/CONFIGURATION.md +1 -1
- package/docs/en/DESIGN.md +1 -1
- package/docs/en/FAQ.md +3 -3
- package/docs/en/GOALS_SPECS_ISSUES.md +1 -1
- package/docs/en/MCP.md +2 -2
- package/docs/en/PLUGINS.md +2 -2
- package/docs/en/PORTABLE_MODE.md +1 -1
- package/docs/en/PUBLISHING.md +14 -15
- package/docs/en/README.md +1 -1
- package/docs/en/SECURITY.md +3 -3
- package/docs/en/START_MODE.md +1 -1
- package/docs/en/TELEGRAM.md +1 -1
- package/docs/en/TROUBLESHOOTING.md +1 -1
- package/docs/en/VPS_MODE.md +2 -2
- package/docs/pt/AI_ARCHITECTURE.md +2 -2
- package/docs/pt/CHAT_COMMANDS.md +1 -1
- package/docs/pt/CONFIGURATION.md +1 -1
- package/docs/pt/DESIGN.md +1 -1
- package/docs/pt/FAQ.md +3 -3
- package/docs/pt/GOALS_SPECS_ISSUES.md +1 -1
- package/docs/pt/MCP.md +1 -1
- package/docs/pt/PLUGINS.md +2 -2
- package/docs/pt/PORTABLE_MODE.md +1 -1
- package/docs/pt/PUBLISHING.md +6 -7
- package/docs/pt/README.md +1 -1
- package/docs/pt/SECURITY.md +3 -3
- package/docs/pt/START_MODE.md +1 -1
- package/docs/pt/TELEGRAM.md +1 -1
- package/docs/pt/TROUBLESHOOTING.md +2 -2
- package/docs/pt/VPS_MODE.md +1 -1
- package/package.json +10 -9
- package/scripts/publish-public.mjs +21 -16
- package/.next/server/chunks/1249.js +0 -910
- package/.next/server/chunks/1572.js +0 -1
- package/.next/server/chunks/158.js +0 -21
- package/.next/server/chunks/1619.js +0 -188
- package/.next/server/chunks/162.js +0 -1
- package/.next/server/chunks/1765.js +0 -1
- package/.next/server/chunks/1845.js +0 -462
- package/.next/server/chunks/2341.js +0 -1
- package/.next/server/chunks/2495.js +0 -1
- package/.next/server/chunks/260.js +0 -1
- package/.next/server/chunks/288.js +0 -1
- package/.next/server/chunks/2960.js +0 -14
- package/.next/server/chunks/3050.js +0 -18
- package/.next/server/chunks/3056.js +0 -1
- package/.next/server/chunks/3131.js +0 -1
- package/.next/server/chunks/3234.js +0 -869
- package/.next/server/chunks/3266.js +0 -15
- package/.next/server/chunks/3550.js +0 -1
- package/.next/server/chunks/4467.js +0 -12
- package/.next/server/chunks/4616.js +0 -479
- package/.next/server/chunks/4619.js +0 -1
- package/.next/server/chunks/4804.js +0 -1
- package/.next/server/chunks/4832.js +0 -2
- package/.next/server/chunks/5060.js +0 -1
- package/.next/server/chunks/535.js +0 -1
- package/.next/server/chunks/5614.js +0 -1
- package/.next/server/chunks/6431.js +0 -1
- package/.next/server/chunks/6658.js +0 -1
- package/.next/server/chunks/6706.js +0 -1
- package/.next/server/chunks/683.js +0 -1
- package/.next/server/chunks/6873.js +0 -1
- package/.next/server/chunks/7225.js +0 -4
- package/.next/server/chunks/73.js +0 -17
- package/.next/server/chunks/7514.js +0 -1
- package/.next/server/chunks/7589.js +0 -22
- package/.next/server/chunks/7622.js +0 -1
- package/.next/server/chunks/7949.js +0 -1
- package/.next/server/chunks/7971.js +0 -1
- package/.next/server/chunks/7989.js +0 -1
- package/.next/server/chunks/8497.js +0 -1
- package/.next/server/chunks/850.js +0 -1
- package/.next/server/chunks/8623.js +0 -1
- package/.next/server/chunks/8719.js +0 -417
- package/.next/server/chunks/8762.js +0 -15
- package/.next/server/chunks/9676.js +0 -1
- package/.next/server/chunks/9680.js +0 -1
- package/.next/server/chunks/9969.js +0 -3
- package/.next/static/chunks/2831-d7f6495bf43f4f9d.js +0 -4
- package/.next/static/chunks/3219-486bddbf87074d04.js +0 -1
- package/.next/static/chunks/3775-82dcdf23109aa5bf.js +0 -1
- package/.next/static/chunks/4263-adecb5b466380b6e.js +0 -1
- package/.next/static/chunks/6834-4759af1ce7d95fb6.js +0 -32
- package/.next/static/chunks/6836-341614c5418e2aa4.js +0 -1
- package/.next/static/chunks/7555-d2209e697b0a798e.js +0 -1
- package/.next/static/chunks/8306-7418693cd7fd5861.js +0 -1
- package/.next/static/chunks/8370-8b3e7106703024ce.js +0 -12
- package/.next/static/chunks/9219-4a39a98b5502d9d1.js +0 -1
- package/.next/static/chunks/9562-4b50b4e408bc0a42.js +0 -1
- package/.next/static/chunks/9690-ea874aec65263b9d.js +0 -1
- package/.next/static/chunks/app/(app)/activity/page-cf8d67941440bdce.js +0 -1
- package/.next/static/chunks/app/(app)/agents/[handle]/page-7baa24f1ae8bc400.js +0 -1
- package/.next/static/chunks/app/(app)/code/page-b342d74807e8b914.js +0 -1
- package/.next/static/chunks/app/(app)/config/page-1e68ba8d20215d67.js +0 -1
- package/.next/static/chunks/app/(app)/costs/page-a58d759eec6048df.js +0 -1
- package/.next/static/chunks/app/(app)/cron/page-cc7f4e3d8ab5618f.js +0 -1
- package/.next/static/chunks/app/(app)/dashboard/page-7757c33acf751c4c.js +0 -1
- package/.next/static/chunks/app/(app)/docs/[id]/page-95c52cf457d869ef.js +0 -1
- package/.next/static/chunks/app/(app)/docs/page-fbc50cd357d5e2ca.js +0 -1
- package/.next/static/chunks/app/(app)/error-988cd28480809861.js +0 -1
- package/.next/static/chunks/app/(app)/github/page-dac138256ed91e65.js +0 -1
- package/.next/static/chunks/app/(app)/goals/page-f87d40f6832d63b3.js +0 -1
- package/.next/static/chunks/app/(app)/inbox/page-49c1293e0d98874f.js +0 -12
- package/.next/static/chunks/app/(app)/knowledge/page-18fca436883ed5cc.js +0 -1
- package/.next/static/chunks/app/(app)/layout-c9778f98c0103f74.js +0 -1
- package/.next/static/chunks/app/(app)/models/page-030c085cd7767495.js +0 -1
- package/.next/static/chunks/app/(app)/notifications/page-12af3fee8b36a00e.js +0 -12
- package/.next/static/chunks/app/(app)/org/page-576001ff4a820744.js +0 -12
- package/.next/static/chunks/app/(app)/organizations/page-b973e1eee6e56baf.js +0 -1
- package/.next/static/chunks/app/(app)/page-cef52fc5f4fd4418.js +0 -1
- package/.next/static/chunks/app/(app)/planner/page-da2db56914346192.js +0 -1
- package/.next/static/chunks/app/(app)/plugins/page-3b78b76ecb21d616.js +0 -1
- package/.next/static/chunks/app/(app)/pm/page-78303379c1ea5dc5.js +0 -1
- package/.next/static/chunks/app/(app)/prepare-deploy/page-98b1bd3bf712bb60.js +0 -1
- package/.next/static/chunks/app/(app)/profile/page-de24af53de0ef2b2.js +0 -1
- package/.next/static/chunks/app/(app)/pulse/page-db7fd63369c01fa2.js +0 -1
- package/.next/static/chunks/app/(app)/reports/[id]/page-cc7f4e3d8ab5618f.js +0 -1
- package/.next/static/chunks/app/(app)/reports/page-97ab95e6f8b77b62.js +0 -1
- package/.next/static/chunks/app/(app)/routines/page-cf6a3331775ca11b.js +0 -1
- package/.next/static/chunks/app/(app)/search/page-3960825f66b05606.js +0 -1
- package/.next/static/chunks/app/(app)/security/page-53b0770355cf7aa4.js +0 -1
- package/.next/static/chunks/app/(app)/skills/page-809a73b94861f8b8.js +0 -1
- package/.next/static/chunks/app/(app)/tasks/page-b2497927d127f7aa.js +0 -1
- package/.next/static/chunks/app/(app)/test-dev/page-93ec5d89e2afb612.js +0 -1
- package/.next/static/chunks/app/(app)/update/page-a23322af4e59a93c.js +0 -1
- package/.next/static/chunks/app/(auth)/login/page-446681bfb762cb05.js +0 -1
- package/.next/static/chunks/app/(auth)/onboarding/page-2b8cb3e0b024c995.js +0 -1
- package/.next/static/chunks/app/_not-found/page-dc38b02aebeab535.js +0 -1
- package/.next/static/chunks/app/api/locks/acquire/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/api/models/progress/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/api/passkey/authenticate/options/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/api/passkey/authenticate/verify/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/api/passkey/register/options/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/api/passkey/register/verify/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/api/stream/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/api/sync/file/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/api/telegram/poll/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/api/upload/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/api/v1/[[...path]]/route-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/app/error-09899a13c38b6e89.js +0 -1
- package/.next/static/chunks/app/global-error-c2ea8fef715f226d.js +0 -1
- package/.next/static/chunks/app/layout-e6008e66aea1a849.js +0 -1
- package/.next/static/chunks/main-722e16032e7764d1.js +0 -5
- package/.next/static/chunks/main-app-761880af2b6f1962.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-eacef2b697bd0982.js +0 -1
- package/.next/static/chunks/webpack-222e3894b78c67db.js +0 -1
- package/docs/assets/blackhole.svg +0 -37
- /package/.next/static/{fb-rRThu8P8AXEQQBbLgT → ehoxBsPzAtE_FyZ2VpMF0}/_buildManifest.js +0 -0
- /package/.next/static/{fb-rRThu8P8AXEQQBbLgT → ehoxBsPzAtE_FyZ2VpMF0}/_ssgManifest.js +0 -0
package/docs/en/CHAT_COMMANDS.md
CHANGED
|
@@ -212,7 +212,7 @@ Every command parsed by `runSlashCommand`, grouped by category. "Responds as" is
|
|
|
212
212
|
/graph SPEC-01
|
|
213
213
|
/reindex
|
|
214
214
|
/curate
|
|
215
|
-
/new-goal a billing page with
|
|
215
|
+
/new-goal a billing page with payment-provider checkout
|
|
216
216
|
/new-work add 2FA to the login screen
|
|
217
217
|
/generate-plan migrate the database to Postgres
|
|
218
218
|
/approve
|
package/docs/en/CONFIGURATION.md
CHANGED
|
@@ -314,7 +314,7 @@ node scripts/mcp-server.mjs
|
|
|
314
314
|
- `src/lib/scrub.ts` scrubs `CONSTELLA_VAULT_KEY`, `BETTER_AUTH_SECRET` and `CONSTELLA_WORKER_SECRET` before KB ingest, Telegram and logs.
|
|
315
315
|
- The worker enforces a **loopback-only SSRF guard** on `CONSTELLA_BASE_URL`.
|
|
316
316
|
- `process.env` always overrides the `.env` file — operators control configuration via the shell/Docker/systemd, not via an attacker-writable file.
|
|
317
|
-
- Agent permissions degrade safely: full access only with `--start` (your own machine); `--vps`/`--portable` stay jailed (
|
|
317
|
+
- Agent permissions degrade safely: full access only with `--start` (your own machine); `--vps`/`--portable` stay jailed (the host + Tailscale tailnet as the hard boundary). Authentication (email + password) is required on every target. See [SECURITY](./SECURITY.md).
|
|
318
318
|
|
|
319
319
|
---
|
|
320
320
|
|
package/docs/en/DESIGN.md
CHANGED
|
@@ -96,7 +96,7 @@ The **Docs** rail renders Grace's written documentation as markdown: `design-sys
|
|
|
96
96
|
## RAG & skill selection 🌌
|
|
97
97
|
|
|
98
98
|
Grace doesn't read a flat skill list. She **extracts keywords** from the brief, mission, objective, attached mock and
|
|
99
|
-
your message, **expands** them through a domain + style lexicon (hotel → booking / hospitality / rooms; "
|
|
99
|
+
your message, **expands** them through a domain + style lexicon (hotel → booking / hospitality / rooms; "native mobile" →
|
|
100
100
|
glassmorphism / microinteractions / premium typography), and **ranks the seeded skills** by name / tags / description —
|
|
101
101
|
then reads the most relevant ones first. Domain- and style-aware, not generic.
|
|
102
102
|
|
package/docs/en/FAQ.md
CHANGED
|
@@ -114,7 +114,7 @@ The workspace directory is the **source of truth** (`src/lib/fs-workspace.ts`);
|
|
|
114
114
|
Yes — two supported patterns, plus a caveat:
|
|
115
115
|
|
|
116
116
|
- **Portable** (`--portable`): the runtime root lives on a **USB drive** mounted as root, carried between machines. Requires `>=32GB` free (fatal below that); `>=32GB` is fine. Binds `0.0.0.0`. Login (email + password) is required — as it is everywhere.
|
|
117
|
-
- **VPS** (`--vps`): Constella runs
|
|
117
|
+
- **VPS** (`--vps`): Constella runs natively on a server (npm + systemd) and you reach it over your **Tailscale tailnet** — no Docker; the host itself is the tailnet node. Binds `0.0.0.0`. Login (email + password) required, same as every target.
|
|
118
118
|
|
|
119
119
|
Caveat: the CLI subscription credentials (`~/.claude/.credentials.json`) live on the host running the agents. Constella copies the operator's Claude credentials into a clean per-agent config dir so agents stay logged in (see Q8), but the **host machine** still needs a valid CLI login. Portable mode carries Constella's data, not necessarily every CLI's auth.
|
|
120
120
|
|
|
@@ -131,14 +131,14 @@ The launch flag is an **install target** (`src/lib/run-mode.ts`), not an auth mo
|
|
|
131
131
|
| Install target | Launch flag | Bind | Best for |
|
|
132
132
|
| --- | --- | --- | --- |
|
|
133
133
|
| Local (default) | `--start` | `127.0.0.1` | Solo local use on your own machine; agents get **full access** (install deps, run tests) |
|
|
134
|
-
| VPS | `--vps` | `0.0.0.0` | A shared server over Tailscale,
|
|
134
|
+
| VPS | `--vps` | `0.0.0.0` | A shared server over Tailscale (native npm + systemd, no Docker); agents **jailed** to edits-only |
|
|
135
135
|
| USB | `--portable` | `0.0.0.0` | A USB you carry between machines; agents **jailed** |
|
|
136
136
|
|
|
137
137
|
```mermaid
|
|
138
138
|
flowchart TD
|
|
139
139
|
Q{"Where will it run?"}
|
|
140
140
|
Q -->|My own machine| START["--start local, full agent access"]
|
|
141
|
-
Q -->|A server I reach remotely| VPS["--vps
|
|
141
|
+
Q -->|A server I reach remotely| VPS["--vps native + Tailscale"]
|
|
142
142
|
Q -->|A USB I carry around| PORT["--portable"]
|
|
143
143
|
START --> AUTH["all targets: signup then login<br/>email + password"]
|
|
144
144
|
VPS --> AUTH
|
|
@@ -230,7 +230,7 @@ stateDiagram-v2
|
|
|
230
230
|
**New work from a DM** (handled by `planFromConversationFor` → `generatePlanFor`):
|
|
231
231
|
|
|
232
232
|
```
|
|
233
|
-
@ada build a billing dashboard with
|
|
233
|
+
@ada build a billing dashboard with a payment provider and a CSV export
|
|
234
234
|
```
|
|
235
235
|
|
|
236
236
|
**Approve from a slash command** ([CHAT_COMMANDS](./CHAT_COMMANDS.md)):
|
package/docs/en/MCP.md
CHANGED
|
@@ -33,7 +33,7 @@ scripts/mcp-server.mjs ──Bearer cn_…──► /api/v1/[[...path]] ─
|
|
|
33
33
|
|
|
34
34
|
Key properties straight from the source:
|
|
35
35
|
|
|
36
|
-
- **Zero dependencies.** `scripts/mcp-server.mjs` imports only `node:readline` and uses the global `fetch` (Node 18+). It ships in the
|
|
36
|
+
- **Zero dependencies.** `scripts/mcp-server.mjs` imports only `node:readline` and uses the global `fetch` (Node 18+). It ships in the package unchanged.
|
|
37
37
|
- **Hand-rolled MCP.** It implements the JSON-RPC methods `initialize`, `notifications/initialized`, `ping`, `tools/list` and `tools/call` directly — no SDK.
|
|
38
38
|
- **Thin mapping.** Every tool's `build(args)` returns `{ method, path, body? }`, which `callApi` sends to `${BASE}/api/v1${path}` with `Authorization: Bearer ${PAT}` (and `x-constella-org` when `CONSTELLA_ORG` is set).
|
|
39
39
|
- **One credential.** The REST layer (`authenticatePAT` in `src/server/api/pat-auth.ts`) is PAT-only; there is no session. Scope (`read` / `write`) is enforced server-side.
|
|
@@ -164,7 +164,7 @@ The MCP server talks to a live server at `CONSTELLA_BASE_URL` (default `http://l
|
|
|
164
164
|
"mcpServers": {
|
|
165
165
|
"constella": {
|
|
166
166
|
"command": "node",
|
|
167
|
-
"args": ["
|
|
167
|
+
"args": ["/path/to/constella/scripts/mcp-server.mjs"],
|
|
168
168
|
"env": {
|
|
169
169
|
"CONSTELLA_PAT": "cn_your_write_token_here",
|
|
170
170
|
"CONSTELLA_BASE_URL": "http://localhost:3000"
|
package/docs/en/PLUGINS.md
CHANGED
|
@@ -179,7 +179,7 @@ Two crucial clarifications:
|
|
|
179
179
|
### "Install" a placeholder plugin (PARTIAL)
|
|
180
180
|
|
|
181
181
|
1. Click **Install from URL** in the topbar.
|
|
182
|
-
2. The browser `window.prompt` asks for a URL or name (placeholder text: `github.com/acme/
|
|
182
|
+
2. The browser `window.prompt` asks for a URL or name (placeholder text: `github.com/acme/chat-bridge`).
|
|
183
183
|
3. `installPlugin(url.trim())` inserts a non-native row, `enabled: true`, `description: "Installed from URL"`.
|
|
184
184
|
4. Nothing is downloaded or wired. The row is a bookmark only — **this is a mock** (see [Possible states](#possible-states-)).
|
|
185
185
|
|
|
@@ -208,7 +208,7 @@ await togglePlugin(githubPluginId, false);
|
|
|
208
208
|
```ts
|
|
209
209
|
import { installPlugin } from "@/server/actions/plugin-actions";
|
|
210
210
|
|
|
211
|
-
const res = await installPlugin("github.com/acme/
|
|
211
|
+
const res = await installPlugin("github.com/acme/chat-bridge");
|
|
212
212
|
// res => { ok: true }
|
|
213
213
|
// A non-native row appears in /plugins, enabled, description "Installed from URL".
|
|
214
214
|
// No bridge code runs — it is a catalog bookmark.
|
package/docs/en/PORTABLE_MODE.md
CHANGED
|
@@ -347,7 +347,7 @@ $ npx constellai --portable
|
|
|
347
347
|
|
|
348
348
|
- **Update** ([UPDATE](./UPDATE.md)) — `detectRunContext()` returns `"portable"`; `startUpdate()` does **not** auto-run on portable. It backs up `.env` + db to `<USB>/.constella/backups/<timestamp>/`, then returns the command and *"Portable: ensure free space, back up the drive, then run: `npm install -g constellai@latest`"* with `needsRestart: true`.
|
|
349
349
|
- **Local models / RAG** ([MODELS](./MODELS.md), [MEMORY_RAG](./MEMORY_RAG.md)) — GGUF models and embed/chat servers run off the drive's runtime root; the 32 GB minimum boots, but local models are why you'd carry a larger drive.
|
|
350
|
-
- **VPS** ([VPS_MODE](./VPS_MODE.md)) — shares the `0.0.0.0` bind; differs in that VPS runs
|
|
350
|
+
- **VPS** ([VPS_MODE](./VPS_MODE.md)) — shares the `0.0.0.0` bind; differs in that VPS runs natively on a host over a tailnet (no Docker), portable runs off a drive.
|
|
351
351
|
- **Configuration** ([CONFIGURATION](./CONFIGURATION.md)) — `CONSTELLA_HOME`, `CONSTELLA_RUN_MODE`, `DATABASE_URL` and the secret env vars are documented there.
|
|
352
352
|
|
|
353
353
|
---
|
package/docs/en/PUBLISHING.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
Publishing is how the central ship leaves the shipyard. Two launches happen, in two directions: the **npm tarball** carries the *compiled runtime* to end users, and the **public Git
|
|
7
|
+
Publishing is how the central ship leaves the shipyard. Two launches happen, in two directions: the **npm tarball** carries the *compiled runtime* to end users (the prebuilt `.next`, no build step), and the **public Git repo** carries the *full open-source tree* (`src/`, docs, launcher, migrations) to `github.com/gabriel7silva/constella`. ✦
|
|
8
8
|
|
|
9
|
-
> **TL;DR** — End users receive a compiled, minified runtime
|
|
9
|
+
> **TL;DR** — End users of the **npm package** receive a compiled, minified runtime (the prebuilt `.next`, no build step) — the tarball never carries `src/`. The **public Git repo** is the open source. `npm publish` ships the prebuilt `.next`; `scripts/publish-public.mjs --push` mirrors a clean, secret-scanned tree to the public Git repo. Both refuse to ship secrets.
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -27,7 +27,7 @@ This page covers the **two distribution channels** and the gates that protect th
|
|
|
27
27
|
|
|
28
28
|
## How it works 🌌
|
|
29
29
|
|
|
30
|
-
Constella distributes through **two channels
|
|
30
|
+
Constella distributes through **two channels**: the npm tarball ships the *compiled runtime* (no `src/` in the package), while the public Git repo ships the *open source*.
|
|
31
31
|
|
|
32
32
|
```
|
|
33
33
|
┌────────────────────── dev tree (private) ──────────────────────┐
|
|
@@ -42,13 +42,13 @@ Constella distributes through **two channels** that share one principle: *ship t
|
|
|
42
42
|
│ npm registry: constellai │ │ public Git: gabriel7silva/ │
|
|
43
43
|
│ COMPILED runtime tarball │ │ constella (force-pushed mirror) │
|
|
44
44
|
│ .next + bin + drizzle + docs │ │ docs + bin + drizzle + skills │
|
|
45
|
-
│ NO src/ │ │
|
|
45
|
+
│ NO src/ │ │ FULL src/ · no .next/secrets │
|
|
46
46
|
└─────────────────────────────┘ └────────────────────────────────┘
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
1. **npm channel** — `npm publish` ships the runtime as a tarball. The `files` allowlist in `package.json` selects exactly what travels; `prepublishOnly` validates the tree; `prepack` (`trim-next.mjs`) strips dev artifacts from `.next` so end users receive only the production runtime.
|
|
50
50
|
2. **Git channel** — `scripts/publish-public.mjs` builds a filtered tree in a *temporary* git index (HEAD minus `src/`/tests, plus the generated `drizzle/` migrations), secret-scans exactly that set, and **force-pushes** it as a fresh root commit to the `public` remote. The compiled `.next` does **not** travel through git — it reaches users via the npm tarball.
|
|
51
|
-
3. **
|
|
51
|
+
3. **Public repo** — the `public` remote (`constella`) is the open-source home, carrying the full `src/` tree.
|
|
52
52
|
|
|
53
53
|
> Neither channel carries `src/`. The schema reaches users as generated SQL under `drizzle/`, applied by `drizzle-kit migrate`. See [INSTALLATION](./INSTALLATION.md).
|
|
54
54
|
|
|
@@ -151,7 +151,7 @@ Because the `files` allowlist re-includes the **whole** `.next` directory (overr
|
|
|
151
151
|
|
|
152
152
|
### `publish-public.mjs` — the clean Git mirror
|
|
153
153
|
|
|
154
|
-
`scripts/publish-public.mjs` produces the
|
|
154
|
+
`scripts/publish-public.mjs` produces the open-source public Git tree. It never runs automatically; you invoke it deliberately.
|
|
155
155
|
|
|
156
156
|
The constant that defines the whole point:
|
|
157
157
|
|
|
@@ -186,10 +186,9 @@ Flow inside the script:
|
|
|
186
186
|
|
|
187
187
|
| Remote | Repository | Contains | History |
|
|
188
188
|
| --- | --- | --- | --- |
|
|
189
|
-
| `
|
|
190
|
-
| `public` | `gabriel7silva/constella` | Product only (docs, `bin/`, `drizzle/`, `skills/`, configs) | Disposable — overwritten by force-push |
|
|
189
|
+
| `public` | `gabriel7silva/constella` | Open-source tree (`src/`, docs, `bin/`, `drizzle/`, `skills/`, configs) | Maintained history |
|
|
191
190
|
|
|
192
|
-
The
|
|
191
|
+
The npm tarball is published separately from the git push.
|
|
193
192
|
|
|
194
193
|
---
|
|
195
194
|
|
|
@@ -220,7 +219,7 @@ tar -tf constellai-0.1.0.tgz | sort # inspect what would ship — confirm no s
|
|
|
220
219
|
```bash
|
|
221
220
|
# Dry run — generate migrations if needed, compute the publish set, secret-scan, print the count:
|
|
222
221
|
node scripts/publish-public.mjs
|
|
223
|
-
# ✓ Clean: <N> files to publish (
|
|
222
|
+
# ✓ Clean: <N> files to publish (full source, no secrets). Migrations: <M> file(s).
|
|
224
223
|
|
|
225
224
|
# Push — build the filtered tree in a temp index and force-push to public main:
|
|
226
225
|
node scripts/publish-public.mjs --push
|
|
@@ -243,9 +242,9 @@ npm run clean # scripts/clean-repo.mjs — removes scratch artifacts at the r
|
|
|
243
242
|
|
|
244
243
|
```text
|
|
245
244
|
$ node scripts/publish-public.mjs
|
|
246
|
-
✓ Clean:
|
|
245
|
+
✓ Clean: 1712 files to publish (full source, no secrets). Migrations: 7 file(s).
|
|
247
246
|
|
|
248
|
-
Dry run. To publish the clean
|
|
247
|
+
Dry run. To publish the clean tree to the public repo, run:
|
|
249
248
|
node scripts/publish-public.mjs --push
|
|
250
249
|
```
|
|
251
250
|
|
|
@@ -305,8 +304,8 @@ Publishing is a high-trust operation; the design assumes a mistake *will* happen
|
|
|
305
304
|
- **Source never ships.** Both channels exclude `src/`. The Git mirror checks twice — `EXCLUDE` filters it out, then a final pass aborts if any `src/` path survived.
|
|
306
305
|
- **Secret-scan refuses on any finding.** `publish-public.mjs` blocks on the **first** match per file across 10 inline patterns + a sensitive-filename rule. It is deliberately conservative (`512 KB` text-file cap, placeholder-credential allowance to avoid false positives in docs).
|
|
307
306
|
- **`.env` and DB files are sensitive by filename.** They are blocked even if you never opened them — except the explicit allowlist (`.env.example`, etc.) and `drizzle/*.sql` DDL.
|
|
308
|
-
- **
|
|
309
|
-
- **The tarball is compiled.** End users run a minified `.next` and applied SQL migrations — no
|
|
307
|
+
- **The public repo carries no secrets.** The publish set is secret-scanned before every push; it carries no `.next` and no `.env`.
|
|
308
|
+
- **The npm tarball is compiled.** End users of the package run a minified `.next` and applied SQL migrations — no build step, no devDependencies. (The source itself is open on GitHub.)
|
|
310
309
|
- **Secrets live outside the tree.** Runtime secrets are persisted to `<HOME>/.env` (`chmod 600`) and never in the repo; the vault key, worker secret and auth secret are generated at first boot. See [SECURITY](./SECURITY.md).
|
|
311
310
|
|
|
312
311
|
> The scanner is a safety net, not a substitute for discipline. Keep secrets in `<HOME>/.env` and the vault, never in tracked files.
|
|
@@ -340,4 +339,4 @@ Publishing is a high-trust operation; the design assumes a mistake *will* happen
|
|
|
340
339
|
|
|
341
340
|
---
|
|
342
341
|
|
|
343
|
-
<sub>✦ The shipyard is quiet, the launch is loud. Ship the product,
|
|
342
|
+
<sub>✦ The shipyard is quiet, the launch is loud. Ship the product, open the blueprints. 🚀</sub>
|
package/docs/en/README.md
CHANGED
|
@@ -28,7 +28,7 @@ Auth is always required (email + password), identical everywhere — the launch
|
|
|
28
28
|
| Doc | What it covers |
|
|
29
29
|
|-----|----------------|
|
|
30
30
|
| [Start (local)](START_MODE.md) | `constella --start`, binds `127.0.0.1` — the default local install |
|
|
31
|
-
| [VPS](VPS_MODE.md) | `constella --vps`, binds `0.0.0.0` over a Tailscale tailnet, Docker |
|
|
31
|
+
| [VPS](VPS_MODE.md) | `constella --vps`, binds `0.0.0.0` over a Tailscale tailnet (native, no Docker) |
|
|
32
32
|
| [Portable (USB)](PORTABLE_MODE.md) | `constella --portable`, runs off a USB drive, binds `0.0.0.0` |
|
|
33
33
|
|
|
34
34
|
## 🛰️ Architecture
|
package/docs/en/SECURITY.md
CHANGED
|
@@ -26,7 +26,7 @@ Constella layers independent controls so no single failure is catastrophic. The
|
|
|
26
26
|
```mermaid
|
|
27
27
|
flowchart TB
|
|
28
28
|
subgraph Edge["🛰️ Network edge"]
|
|
29
|
-
A1["Run-mode bind: start/auth = 127.0.0.1 · vps/portable = 0.0.0.0 + Tailscale
|
|
29
|
+
A1["Run-mode bind: start/auth = 127.0.0.1 · vps/portable = 0.0.0.0 + Tailscale"]
|
|
30
30
|
A2["better-auth session gate (email+password · TOTP 2FA · WebAuthn passkeys)"]
|
|
31
31
|
A3["Worker endpoints: x-worker-secret, fail CLOSED"]
|
|
32
32
|
end
|
|
@@ -169,10 +169,10 @@ Both hooks **fail open** on any unexpected condition (no context, network glitch
|
|
|
169
169
|
| --- | --- | --- | --- | --- | --- |
|
|
170
170
|
| `start` (local) | `127.0.0.1` | **on** (default) | `bypassPermissions` | `danger-full-access` | full: install deps + run tests |
|
|
171
171
|
| `auth` | `127.0.0.1` | off | `acceptEdits` | `workspace-write` | edits-only, no network |
|
|
172
|
-
| `vps` | `0.0.0.0` | off | `acceptEdits` | `workspace-write` | edits-only — *plus* the
|
|
172
|
+
| `vps` | `0.0.0.0` | off | `acceptEdits` | `workspace-write` | edits-only — *plus* the Tailscale-private host is the hard boundary |
|
|
173
173
|
| `portable` | `0.0.0.0` | off | `acceptEdits` | `workspace-write` | edits-only |
|
|
174
174
|
|
|
175
|
-
Defense-in-depth: prod modes already run
|
|
175
|
+
Defense-in-depth: prod modes already run on a private host behind Tailscale (the tailnet-only host is the real boundary); the CLI stays restricted on top. Two more agent-spawn protections:
|
|
176
176
|
|
|
177
177
|
- **Vanilla agents** — agents run independent of the operator's personal `~/.claude` hooks/plugins via a `--settings {disableAllHooks:true}` overlay (or a clean `CLAUDE_CONFIG_DIR` carrying only Constella's lock/guard hooks). Auth stays intact (the operator's credentials are copied in).
|
|
178
178
|
- **No shell injection via model id** — `safeModel()` / `safeModelSlash()` validate the model string (which originates from agent-writable `Agent.md` frontmatter) against a strict charset before it reaches argv on a `shell: true` spawn, so `sonnet"; rm -rf ~` can't be re-parsed by the shell. Git/`gh` calls use `shell: false` so branch/message/path args are passed literally.
|
package/docs/en/START_MODE.md
CHANGED
|
@@ -258,7 +258,7 @@ A local install trades network hardening for local convenience — safe precisel
|
|
|
258
258
|
- **Authentication always on.** A real signup-then-login gate guards every session — there is no auto-login and no predictable credential. The single operator is whoever completes the first-run signup.
|
|
259
259
|
- **Real auth secret persisted.** A real `BETTER_AUTH_SECRET` is generated to `<HOME>/.env` (`chmod 600`) so sessions aren't forgeable; cookies are non-`Secure` only because the local transport is plain `http`.
|
|
260
260
|
- **Full-access agents are local-only.** `bypassPermissions` lets agents run shell, but the workspace is still an FS jail (`safe()` lexical + symlink checks), and the guard/lock hooks still apply. Set `CONSTELLA_AGENT_FULL_ACCESS=0` to re-jail.
|
|
261
|
-
- **Do not port-forward a local install.** If you need remote access, use [VPS](./VPS_MODE.md) (Tailscale
|
|
261
|
+
- **Do not port-forward a local install.** If you need remote access, use [VPS](./VPS_MODE.md) (Tailscale, native) — never expose the loopback install to a network.
|
|
262
262
|
|
|
263
263
|
---
|
|
264
264
|
|
package/docs/en/TELEGRAM.md
CHANGED
|
@@ -231,7 +231,7 @@ A message with neither text nor any saved attachment is dropped.
|
|
|
231
231
|
/approve → queue tasks
|
|
232
232
|
/start_execution → approve + 24/7 ON
|
|
233
233
|
/pause /resume → flip 24/7
|
|
234
|
-
/reject use
|
|
234
|
+
/reject use a different payment provider → send plan back with a reason
|
|
235
235
|
/cancel /archive → stop / park the active goal
|
|
236
236
|
/kb how does auth work? → ask the Knowledge Base
|
|
237
237
|
just talk normally → chat with the CEO (Ada)
|
|
@@ -171,7 +171,7 @@ Each diamond is a place a real symptom appears. The table in [§7](#7-symptom--c
|
|
|
171
171
|
| Fresh install shows the **Sign in** screen and login fails with `User not found` | A **stale `~/.constella`** from a previous install. The runtime root persists across installs by design; its `<HOME>/.env` still has `CONSTELLA_OPERATOR_PW_SET=1` (forces the login screen) while its DB has a different / no operator. `operator@constella.dev` is only the **dev** seed — a real fresh install has no account. | Use the **Sign up** screen to create the first operator. If it's stuck on Sign in, you're reading old data: remove or rename `~/.constella` (back up first — it holds the DB, secrets, workspaces), or set `CONSTELLA_HOME` to a fresh dir, then relaunch → signup. |
|
|
172
172
|
| better-auth throws on a default secret | No real `BETTER_AUTH_SECRET` | The launcher generates + persists one in `<HOME>/.env` (`chmod 600`) for **every** install target (auth is universal). If you cleared `.env`, just relaunch — it regenerates. |
|
|
173
173
|
| Vault can't decrypt provider keys / Telegram token | `CONSTELLA_VAULT_KEY` changed or missing | The vault is AES-256-GCM keyed by `CONSTELLA_VAULT_KEY`. **Changing it orphans existing ciphertext.** Restore the original key from `<HOME>/.env`, or re-enter the secrets. |
|
|
174
|
-
| VPS unreachable over the tailnet | Bound `0.0.0.0` but Tailscale
|
|
174
|
+
| VPS unreachable over the tailnet | Bound `0.0.0.0` but Tailscale not wired | VPS mode binds `0.0.0.0` for the tailnet and runs natively on the host. Verify the systemd service + Tailscale; the worker talks to the server on loopback. |
|
|
175
175
|
|
|
176
176
|
### 7.8 Portable & disk space 🪐
|
|
177
177
|
|
package/docs/en/VPS_MODE.md
CHANGED
|
@@ -75,7 +75,7 @@ flowchart TD
|
|
|
75
75
|
|
|
76
76
|
### Native on the host
|
|
77
77
|
|
|
78
|
-
There is **no container**. The published `constellai` npm package (the compiled, prebuilt `.next`) is installed globally with `npm i -g` — there is **no source build**, because the
|
|
78
|
+
There is **no container**. The published `constellai` npm package (the compiled, prebuilt `.next`) is installed globally with `npm i -g` — there is **no source build**, because the npm package ships the prebuilt `.next`. The `constella --vps` process runs directly under the host user. Tailscale runs on the **host**, so the host itself is the tailnet node; the web server's `0.0.0.0` bind is reachable **only at the host's Tailscale IP** as long as port 3000 has no public route (tailnet + firewall). Pin a version any time with `npm install -g constellai@<version>`.
|
|
79
79
|
|
|
80
80
|
### Runtime root in the home directory
|
|
81
81
|
|
|
@@ -211,7 +211,7 @@ It runs `tailscale up` to join the host (using your tailnet account / auth flow
|
|
|
211
211
|
|
|
212
212
|
### 2. Provision a VPS
|
|
213
213
|
|
|
214
|
-
A fresh **Ubuntu Server** (24.04 / 26.04 LTS) is the assumed target. You don't need to clone the repo for the managed path — the installer pulls `constellai` from npm. If you prefer to run the bootstrap from a checkout, get the
|
|
214
|
+
A fresh **Ubuntu Server** (24.04 / 26.04 LTS) is the assumed target. You don't need to clone the repo for the managed path — the installer pulls `constellai` from npm. If you prefer to run the bootstrap from a checkout, get the repo (it carries `scripts/vps-install.sh`):
|
|
215
215
|
|
|
216
216
|
```bash
|
|
217
217
|
apt-get update && apt-get install -y git # if git is missing
|
|
@@ -143,7 +143,7 @@ Quando esse dir limpo está ativo, `claudeSettingsArgs()` retorna `[]` (o dir j
|
|
|
143
143
|
| `start` (dev local) | `true` | `bypassPermissions` (instala + roda testes) | `danger-full-access` |
|
|
144
144
|
| `auth` / `vps` / `portable` (prod) | `false` | `acceptEdits` (só edições, sem rede/exec) | `workspace-write` (sem rede) |
|
|
145
145
|
|
|
146
|
-
> Em prod já roda
|
|
146
|
+
> Em prod já roda num host privado atrás do Tailscale (o host só-tailnet é a fronteira dura). A CLI fica restrita por cima para defesa em profundidade.
|
|
147
147
|
|
|
148
148
|
### Pesquisa na web 🌠
|
|
149
149
|
|
|
@@ -339,7 +339,7 @@ opencode auth list # detectCliAuth("opencode")
|
|
|
339
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
340
|
- **Hooks vanilla** — `disableAllHooks` mantém os plugins/hooks do operador fora das execuções dos agentes (isolamento de voz + comportamento).
|
|
341
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
|
|
342
|
+
- **Jaula de permissão em prod** — `acceptEdits` (sem rede/exec arbitrário) por cima do host privado no Tailscale.
|
|
343
343
|
- **Scrub de segredos** — respostas de chat passam por `scrubSecrets` antes de serem armazenadas / mostradas / enviadas ao Telegram.
|
|
344
344
|
- **Endurecimento contra prompt-injection** — cláusulas de Telegram + arquivos anexados marcam a entrada do operador como DADO, nunca instruções.
|
|
345
345
|
|
package/docs/pt/CHAT_COMMANDS.md
CHANGED
|
@@ -212,7 +212,7 @@ Todo comando reconhecido por `runSlashCommand`, agrupado por categoria. "Respond
|
|
|
212
212
|
/graph SPEC-01
|
|
213
213
|
/reindex
|
|
214
214
|
/curate
|
|
215
|
-
/new-goal a billing page with
|
|
215
|
+
/new-goal a billing page with payment-provider checkout
|
|
216
216
|
/new-work add 2FA to the login screen
|
|
217
217
|
/generate-plan migrate the database to Postgres
|
|
218
218
|
/approve
|
package/docs/pt/CONFIGURATION.md
CHANGED
|
@@ -314,7 +314,7 @@ node scripts/mcp-server.mjs
|
|
|
314
314
|
- `src/lib/scrub.ts` remove `CONSTELLA_VAULT_KEY`, `BETTER_AUTH_SECRET` e `CONSTELLA_WORKER_SECRET` antes da ingestão de KB, do Telegram e dos logs.
|
|
315
315
|
- O worker aplica um **guard de SSRF apenas-loopback** em `CONSTELLA_BASE_URL`.
|
|
316
316
|
- `process.env` sempre sobrescreve o arquivo `.env` — operadores controlam a configuração via shell/Docker/systemd, não via um arquivo gravável por atacante.
|
|
317
|
-
- As permissões dos agentes degradam com segurança: acesso total só com `--start` (sua própria máquina); `--vps`/`--portable` ficam jaulados (
|
|
317
|
+
- As permissões dos agentes degradam com segurança: acesso total só com `--start` (sua própria máquina); `--vps`/`--portable` ficam jaulados (o host só-tailnet como fronteira dura). A autenticação (e-mail + senha) é exigida em todo destino. Veja [SECURITY](./SECURITY.md).
|
|
318
318
|
|
|
319
319
|
---
|
|
320
320
|
|
package/docs/pt/DESIGN.md
CHANGED
|
@@ -98,7 +98,7 @@ O painel **Docs** renderiza a documentação que a Grace escreve em markdown: `d
|
|
|
98
98
|
## RAG & seleção de skills 🌌
|
|
99
99
|
|
|
100
100
|
A Grace não lê uma lista chapada de skills. Ela **extrai palavras-chave** do brief, missão, objetivo, mock anexado e da
|
|
101
|
-
sua mensagem, **expande** por um léxico de domínio + estilo (hotel → reserva / hospitalidade / quartos; "
|
|
101
|
+
sua mensagem, **expande** por um léxico de domínio + estilo (hotel → reserva / hospitalidade / quartos; "native mobile" →
|
|
102
102
|
glassmorphism / microinterações / tipografia premium) e **rankeia as skills seedadas** por nome / tags / descrição — e
|
|
103
103
|
lê as mais relevantes primeiro. Ciente de domínio e estilo, não genérica.
|
|
104
104
|
|
package/docs/pt/FAQ.md
CHANGED
|
@@ -114,7 +114,7 @@ O diretório do workspace é a **fonte da verdade** (`src/lib/fs-workspace.ts`);
|
|
|
114
114
|
Sim — dois padrões suportados, mais uma ressalva:
|
|
115
115
|
|
|
116
116
|
- **Portable** (`--portable`): a raiz de runtime fica num **pendrive USB** montado como raiz, carregado entre máquinas. Requer `>=32GB` livres (fatal abaixo disso); `>=32GB` está ok. Bind em `0.0.0.0`. Login (e-mail + senha) é obrigatório — como em todos.
|
|
117
|
-
- **VPS** (`--vps`): o Constella roda
|
|
117
|
+
- **VPS** (`--vps`): o Constella roda nativamente num servidor (npm + systemd, sem Docker) e você o acessa pela sua **tailnet Tailscale**. Bind em `0.0.0.0`. Login (e-mail + senha) obrigatório, igual a todo destino.
|
|
118
118
|
|
|
119
119
|
Ressalva: as credenciais de assinatura da CLI (`~/.claude/.credentials.json`) ficam no host que roda os agentes. O Constella copia as credenciais Claude do operador para um diretório de config limpo por agente para que os agentes permaneçam logados (veja Q8), mas a **máquina host** ainda precisa de um login de CLI válido. O modo portable carrega os dados do Constella, não necessariamente a autenticação de cada CLI.
|
|
120
120
|
|
|
@@ -131,14 +131,14 @@ A flag de execução é um **destino de instalação** (`src/lib/run-mode.ts`),
|
|
|
131
131
|
| Destino de instalação | Flag | Bind | Melhor para |
|
|
132
132
|
| --- | --- | --- | --- |
|
|
133
133
|
| Local (padrão) | `--start` | `127.0.0.1` | Uso local solo na sua própria máquina; agentes têm **acesso total** (instalar deps, rodar testes) |
|
|
134
|
-
| VPS | `--vps` | `0.0.0.0` | Um servidor compartilhado via Tailscale,
|
|
134
|
+
| VPS | `--vps` | `0.0.0.0` | Um servidor compartilhado via Tailscale (nativo, sem Docker); agentes **enjaulados** apenas a edições |
|
|
135
135
|
| USB | `--portable` | `0.0.0.0` | Um USB que você carrega entre máquinas; agentes **enjaulados** |
|
|
136
136
|
|
|
137
137
|
```mermaid
|
|
138
138
|
flowchart TD
|
|
139
139
|
Q{"Onde vai rodar?"}
|
|
140
140
|
Q -->|Minha própria máquina| START["--start local, agente com acesso total"]
|
|
141
|
-
Q -->|Um servidor que acesso remotamente| VPS["--vps
|
|
141
|
+
Q -->|Um servidor que acesso remotamente| VPS["--vps nativo + Tailscale"]
|
|
142
142
|
Q -->|Um USB que carrego| PORT["--portable"]
|
|
143
143
|
START --> AUTH["todos os destinos: cadastro depois login<br/>e-mail + senha"]
|
|
144
144
|
VPS --> AUTH
|
|
@@ -230,7 +230,7 @@ stateDiagram-v2
|
|
|
230
230
|
**Novo trabalho a partir de uma DM** (tratado por `planFromConversationFor` → `generatePlanFor`):
|
|
231
231
|
|
|
232
232
|
```
|
|
233
|
-
@ada construa um painel de cobrança com
|
|
233
|
+
@ada construa um painel de cobrança com um provedor de pagamento e exportação CSV
|
|
234
234
|
```
|
|
235
235
|
|
|
236
236
|
**Aprovar via slash command** ([CHAT_COMMANDS](./CHAT_COMMANDS.md)):
|
package/docs/pt/MCP.md
CHANGED
|
@@ -164,7 +164,7 @@ O servidor MCP conversa com um servidor ativo em `CONSTELLA_BASE_URL` (padrão `
|
|
|
164
164
|
"mcpServers": {
|
|
165
165
|
"constella": {
|
|
166
166
|
"command": "node",
|
|
167
|
-
"args": ["
|
|
167
|
+
"args": ["/path/to/constella/scripts/mcp-server.mjs"],
|
|
168
168
|
"env": {
|
|
169
169
|
"CONSTELLA_PAT": "cn_seu_token_write_aqui",
|
|
170
170
|
"CONSTELLA_BASE_URL": "http://localhost:3000"
|
package/docs/pt/PLUGINS.md
CHANGED
|
@@ -179,7 +179,7 @@ Dois esclarecimentos cruciais:
|
|
|
179
179
|
### "Instalar" um plugin placeholder (PARCIAL)
|
|
180
180
|
|
|
181
181
|
1. Clique em **Install from URL** na topbar.
|
|
182
|
-
2. O `window.prompt` do navegador pede uma URL ou nome (texto placeholder: `github.com/acme/
|
|
182
|
+
2. O `window.prompt` do navegador pede uma URL ou nome (texto placeholder: `github.com/acme/chat-bridge`).
|
|
183
183
|
3. `installPlugin(url.trim())` insere uma linha não-nativa, `enabled: true`, `description: "Installed from URL"`.
|
|
184
184
|
4. Nada é baixado nem cabeado. A linha é apenas um marcador — **isto é um mock** (veja [Estados possíveis](#estados-possíveis-)).
|
|
185
185
|
|
|
@@ -208,7 +208,7 @@ await togglePlugin(githubPluginId, false);
|
|
|
208
208
|
```ts
|
|
209
209
|
import { installPlugin } from "@/server/actions/plugin-actions";
|
|
210
210
|
|
|
211
|
-
const res = await installPlugin("github.com/acme/
|
|
211
|
+
const res = await installPlugin("github.com/acme/chat-bridge");
|
|
212
212
|
// res => { ok: true }
|
|
213
213
|
// Uma linha não-nativa aparece em /plugins, enabled, descrição "Installed from URL".
|
|
214
214
|
// Nenhum código de bridge roda — é um marcador de catálogo.
|
package/docs/pt/PORTABLE_MODE.md
CHANGED
|
@@ -347,7 +347,7 @@ $ npx constellai --portable
|
|
|
347
347
|
|
|
348
348
|
- **Update** ([UPDATE](./UPDATE.md)) — `detectRunContext()` retorna `"portable"`; `startUpdate()` **não** roda automaticamente no portátil. Faz backup de `.env` + db em `<USB>/.constella/backups/<timestamp>/`, depois retorna o comando e *"Portable: ensure free space, back up the drive, then run: `npm install -g constellai@latest`"* com `needsRestart: true`.
|
|
349
349
|
- **Modelos locais / RAG** ([MODELS](./MODELS.md), [MEMORY_RAG](./MEMORY_RAG.md)) — modelos GGUF e servidores de embed/chat rodam a partir do runtime root no drive; o mínimo de 32 GB dá boot, mas os modelos locais são o motivo para levar um drive maior.
|
|
350
|
-
- **VPS** ([VPS_MODE](./VPS_MODE.md)) — compartilha o bind em `0.0.0.0`; difere por o VPS rodar
|
|
350
|
+
- **VPS** ([VPS_MODE](./VPS_MODE.md)) — compartilha o bind em `0.0.0.0`; difere por o VPS rodar nativamente no host sobre uma tailnet, enquanto o portátil roda a partir de um drive.
|
|
351
351
|
- **Configuração** ([CONFIGURATION](./CONFIGURATION.md)) — `CONSTELLA_HOME`, `CONSTELLA_RUN_MODE`, `DATABASE_URL` e as variáveis de env de segredo estão documentadas lá.
|
|
352
352
|
|
|
353
353
|
---
|
package/docs/pt/PUBLISHING.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
Publicar é como a nave-mãe deixa o estaleiro. Dois lançamentos acontecem, em duas direções: o **tarball do npm** leva o *runtime compilado* aos usuários finais, e o
|
|
7
|
+
Publicar é como a nave-mãe deixa o estaleiro. Dois lançamentos acontecem, em duas direções: o **tarball do npm** leva o *runtime compilado* aos usuários finais, e o repositório público no Git leva o *código-fonte aberto completo* (`src/`, docs, launcher, migrações) para `github.com/gabriel7silva/constella`. ✦
|
|
8
8
|
|
|
9
|
-
> **Resumo** — Usuários finais recebem um runtime compilado e minificado, **nunca o `src
|
|
9
|
+
> **Resumo** — Usuários finais recebem pelo npm um runtime compilado e minificado, **nunca o `src/`** (sem etapa de build). O `npm publish` envia o `.next` pré-compilado; `scripts/publish-public.mjs --push` espelha o código-fonte aberto para o repositório Git público, escaneado contra segredos. Ambos os canais se recusam a publicar segredos.
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -48,7 +48,7 @@ A Constella distribui por **dois canais** que compartilham um princípio: *publi
|
|
|
48
48
|
|
|
49
49
|
1. **Canal npm** — `npm publish` envia o runtime como um tarball. A allowlist `files` no `package.json` seleciona exatamente o que viaja; `prepublishOnly` valida a árvore; `prepack` (`trim-next.mjs`) remove os artefatos de dev do `.next`, de modo que os usuários finais recebam apenas o runtime de produção.
|
|
50
50
|
2. **Canal Git** — `scripts/publish-public.mjs` constrói uma árvore filtrada em um índice git *temporário* (HEAD menos `src/`/testes, mais as migrações geradas em `drizzle/`), escaneia contra segredos exatamente esse conjunto e faz **force-push** dele como um commit-raiz novo para o remoto `public`. O `.next` compilado **não** viaja pelo git — ele chega aos usuários pelo tarball do npm.
|
|
51
|
-
3. **Repositório
|
|
51
|
+
3. **Repositório público** — o remoto `public` (`constella`) é o lar do código-fonte aberto; o tarball do npm é publicado separadamente, com o `.next` compilado.
|
|
52
52
|
|
|
53
53
|
> Nenhum dos canais carrega o `src/`. O esquema chega aos usuários como SQL gerado em `drizzle/`, aplicado por `drizzle-kit migrate`. Veja [INSTALLATION](./INSTALLATION.md).
|
|
54
54
|
|
|
@@ -186,8 +186,7 @@ O `publish-public.mjs` carrega um espelho inline do scanner do repositório. Ele
|
|
|
186
186
|
|
|
187
187
|
| Remoto | Repositório | Contém | Histórico |
|
|
188
188
|
| --- | --- | --- | --- |
|
|
189
|
-
| `
|
|
190
|
-
| `public` | `gabriel7silva/constella` | Apenas produto (docs, `bin/`, `drizzle/`, `skills/`, configs) | Descartável — sobrescrito por force-push |
|
|
189
|
+
| `public` | `gabriel7silva/constella` | Código-fonte aberto completo (`src/`, docs, `bin/`, `drizzle/`, `skills/`, configs) | Open source |
|
|
191
190
|
|
|
192
191
|
O espelho público **não** é um alvo de colaboração com histórico compartilhado. Cada `--push` escreve um commit-raiz novo e sobrescreve o `main` à força. O desenvolvimento acontece contra `dev`; o tarball do npm é publicado separadamente de qualquer push git.
|
|
193
192
|
|
|
@@ -220,7 +219,7 @@ tar -tf constellai-0.1.0.tgz | sort # inspecione o que seria enviado — confi
|
|
|
220
219
|
```bash
|
|
221
220
|
# Simulação — gera migrações se necessário, calcula o conjunto, escaneia segredos, imprime a contagem:
|
|
222
221
|
node scripts/publish-public.mjs
|
|
223
|
-
# ✓ Clean: <N> files to publish (
|
|
222
|
+
# ✓ Clean: <N> files to publish (full source, no secrets). Migrations: <M> file(s).
|
|
224
223
|
|
|
225
224
|
# Push — constrói a árvore filtrada em um índice temp e faz force-push para o public main:
|
|
226
225
|
node scripts/publish-public.mjs --push
|
|
@@ -243,7 +242,7 @@ O `clean-repo.mjs` é idempotente e conservador: ele só apaga um conjunto conhe
|
|
|
243
242
|
|
|
244
243
|
```text
|
|
245
244
|
$ node scripts/publish-public.mjs
|
|
246
|
-
✓ Clean:
|
|
245
|
+
✓ Clean: 1712 files to publish (full source, no secrets). Migrations: 7 file(s).
|
|
247
246
|
|
|
248
247
|
Dry run. To publish the clean compiled tree to the public repo, run:
|
|
249
248
|
node scripts/publish-public.mjs --push
|
package/docs/pt/README.md
CHANGED
|
@@ -28,7 +28,7 @@ A autenticação é sempre exigida (e-mail + senha), idêntica em todos — a fl
|
|
|
28
28
|
| Doc | O que cobre |
|
|
29
29
|
|-----|-------------|
|
|
30
30
|
| [Start (local)](START_MODE.md) | `constella --start`, escuta em `127.0.0.1` — a instalação local padrão |
|
|
31
|
-
| [VPS](VPS_MODE.md) | `constella --vps`, escuta em `0.0.0.0` sobre uma tailnet Tailscale, Docker |
|
|
31
|
+
| [VPS](VPS_MODE.md) | `constella --vps`, escuta em `0.0.0.0` sobre uma tailnet Tailscale (nativo, sem Docker) |
|
|
32
32
|
| [Portable (USB)](PORTABLE_MODE.md) | `constella --portable`, roda a partir de um pen-drive, escuta em `0.0.0.0` |
|
|
33
33
|
|
|
34
34
|
## 🛰️ Arquitetura
|
package/docs/pt/SECURITY.md
CHANGED
|
@@ -26,7 +26,7 @@ A Constella empilha controles independentes para que nenhuma falha isolada seja
|
|
|
26
26
|
```mermaid
|
|
27
27
|
flowchart TB
|
|
28
28
|
subgraph Edge["🛰️ Borda de rede"]
|
|
29
|
-
A1["Bind por run-mode: start/auth = 127.0.0.1 · vps/portable = 0.0.0.0 + Tailscale
|
|
29
|
+
A1["Bind por run-mode: start/auth = 127.0.0.1 · vps/portable = 0.0.0.0 + Tailscale"]
|
|
30
30
|
A2["Barreira de sessão do better-auth (e-mail+senha · 2FA TOTP · passkeys WebAuthn)"]
|
|
31
31
|
A3["Endpoints do worker: x-worker-secret, fail CLOSED"]
|
|
32
32
|
end
|
|
@@ -169,10 +169,10 @@ Ambos os hooks **falham abertos** em qualquer condição inesperada (sem context
|
|
|
169
169
|
| --- | --- | --- | --- | --- | --- |
|
|
170
170
|
| `start` (local) | `127.0.0.1` | **ligado** (padrão) | `bypassPermissions` | `danger-full-access` | completo: instala deps + roda testes |
|
|
171
171
|
| `auth` | `127.0.0.1` | desligado | `acceptEdits` | `workspace-write` | só edições, sem rede |
|
|
172
|
-
| `vps` | `0.0.0.0` | desligado | `acceptEdits` | `workspace-write` | só edições — *além* do
|
|
172
|
+
| `vps` | `0.0.0.0` | desligado | `acceptEdits` | `workspace-write` | só edições — *além* do host privado no Tailscale ser a fronteira dura |
|
|
173
173
|
| `portable` | `0.0.0.0` | desligado | `acceptEdits` | `workspace-write` | só edições |
|
|
174
174
|
|
|
175
|
-
Defesa em profundidade: modos de prod já rodam
|
|
175
|
+
Defesa em profundidade: modos de prod já rodam num host privado atrás do Tailscale (o host só-tailnet é a fronteira real); o CLI fica restrito por cima. Mais duas proteções no spawn do agente:
|
|
176
176
|
|
|
177
177
|
- **Agentes vanilla** — agentes rodam independentes dos hooks/plugins pessoais do `~/.claude` do operador via um overlay `--settings {disableAllHooks:true}` (ou um `CLAUDE_CONFIG_DIR` limpo carregando apenas os hooks de lock/guard da Constella). A auth permanece intacta (as credenciais do operador são copiadas).
|
|
178
178
|
- **Sem injeção de shell via id de modelo** — `safeModel()` / `safeModelSlash()` validam a string de modelo (que se origina do frontmatter de `Agent.md`, gravável pelo agente) contra um charset estrito antes de chegar ao argv num spawn `shell: true`, então `sonnet"; rm -rf ~` não pode ser re-interpretado pelo shell. Chamadas de git/`gh` usam `shell: false` para que args de branch/mensagem/path sejam passados literalmente.
|
package/docs/pt/START_MODE.md
CHANGED
|
@@ -258,7 +258,7 @@ Uma instalação local troca o endurecimento de rede por conveniência local —
|
|
|
258
258
|
- **Autenticação sempre ligada.** Uma barreira real de cadastro-depois-login guarda cada sessão — não há auto-login e não há credencial previsível. O operador único é quem completa o cadastro na primeira execução.
|
|
259
259
|
- **Segredo de auth real persistido.** Um `BETTER_AUTH_SECRET` real é gerado em `<HOME>/.env` (`chmod 600`) para que as sessões não sejam forjáveis; os cookies são não-`Secure` apenas porque o transporte local é `http` puro.
|
|
260
260
|
- **Agentes com acesso total são apenas locais.** `bypassPermissions` deixa os agentes rodarem shell, mas o workspace ainda é uma jaula de FS (`safe()` com checagens léxicas + de symlink), e os hooks de guarda/lock continuam valendo. Defina `CONSTELLA_AGENT_FULL_ACCESS=0` para reaprisionar.
|
|
261
|
-
- **Não faça port-forward de uma instalação local.** Se precisar de acesso remoto, use [VPS](./VPS_MODE.md) (Tailscale
|
|
261
|
+
- **Não faça port-forward de uma instalação local.** Se precisar de acesso remoto, use [VPS](./VPS_MODE.md) (Tailscale, nativo) — nunca exponha a instalação de loopback a uma rede.
|
|
262
262
|
|
|
263
263
|
---
|
|
264
264
|
|
package/docs/pt/TELEGRAM.md
CHANGED
|
@@ -231,7 +231,7 @@ Uma mensagem sem texto e sem nenhum anexo salvo é descartada.
|
|
|
231
231
|
/approve → enfileira as tasks
|
|
232
232
|
/start_execution → aprova + 24/7 LIGADO
|
|
233
233
|
/pause /resume → liga/desliga o 24/7
|
|
234
|
-
/reject use
|
|
234
|
+
/reject use um provedor de pagamento diferente → devolve o plano com um motivo
|
|
235
235
|
/cancel /archive → para / arquiva o goal ativo
|
|
236
236
|
/kb como funciona a auth? → pergunta à Base de Conhecimento
|
|
237
237
|
só conversar normalmente → fala com a CEO (Ada)
|
|
@@ -171,7 +171,7 @@ Cada losango é um lugar onde um sintoma real aparece. A tabela em [§7](#7-sint
|
|
|
171
171
|
| Install fresco mostra a tela **Sign in** e o login falha com `User not found` | Um **`~/.constella` velho** de um install anterior. O runtime root persiste entre installs de propósito; o `<HOME>/.env` dele ainda tem `CONSTELLA_OPERATOR_PW_SET=1` (força a tela de login) enquanto o DB tem um operator diferente / nenhum. `operator@constella.dev` é só o seed do **dev** — um install fresco de verdade não tem conta. | Use a tela **Sign up** pra criar o primeiro operator. Se travar no Sign in, você tá lendo dado velho: remova ou renomeie `~/.constella` (faça backup — tem DB, segredos, workspaces), ou aponte `CONSTELLA_HOME` pra um dir novo, e reinicie → signup. |
|
|
172
172
|
| better-auth lança erro com segredo padrão | Sem `BETTER_AUTH_SECRET` real | O launcher gera + persiste um em `<HOME>/.env` (`chmod 600`) para **todo** destino de instalação (a autenticação é universal). Se você limpou o `.env`, basta reiniciar — ele regenera. |
|
|
173
173
|
| O vault não decifra as chaves de provedor / token do Telegram | `CONSTELLA_VAULT_KEY` mudou ou sumiu | O vault é AES-256-GCM com chave `CONSTELLA_VAULT_KEY`. **Trocar a chave orfana o texto cifrado existente.** Restaure a chave original de `<HOME>/.env`, ou re-insira os segredos. |
|
|
174
|
-
| VPS inacessível pela tailnet | Bind em `0.0.0.0` mas Tailscale
|
|
174
|
+
| VPS inacessível pela tailnet | Bind em `0.0.0.0` mas Tailscale não conectado | O modo VPS faz bind em `0.0.0.0` para a tailnet e roda nativamente no host sob systemd. Verifique o serviço + Tailscale; o worker ainda fala com o servidor por loopback no host. |
|
|
175
175
|
|
|
176
176
|
### 7.8 Portable & espaço em disco 🪐
|
|
177
177
|
|
|
@@ -231,7 +231,7 @@ Se um sintoma estiver à esquerda, **espere um ciclo** antes de intervir — o s
|
|
|
231
231
|
|
|
232
232
|
**C. Os agentes não fazem nada durante a noite.** Há logs de tick mas nenhum card de trabalho se move. O plano do goal existe mas **Run 24/7 está desligado** — `tickAll(auto:true)` o pula. Aprove o plano e habilite o Run 24/7.
|
|
233
233
|
|
|
234
|
-
**D. O worker sai na hora num VPS.** Log: `✖ Refusing to send the worker secret to a non-loopback host`. Seu `CONSTELLA_BASE_URL` aponta para um hostname público. Ajuste-o para o loopback
|
|
234
|
+
**D. O worker sai na hora num VPS.** Log: `✖ Refusing to send the worker secret to a non-loopback host`. Seu `CONSTELLA_BASE_URL` aponta para um hostname público. Ajuste-o para o loopback no host, ou `CONSTELLA_ALLOW_REMOTE_WORKER_BASE_URL=1` sobre `https://` se o remoto for mesmo a intenção.
|
|
235
235
|
|
|
236
236
|
---
|
|
237
237
|
|
package/docs/pt/VPS_MODE.md
CHANGED
|
@@ -75,7 +75,7 @@ flowchart TD
|
|
|
75
75
|
|
|
76
76
|
### Nativo no host
|
|
77
77
|
|
|
78
|
-
**Não há contêiner.** O pacote npm publicado `constellai` (o `.next` compilado e pré-buildado) é instalado globalmente com `npm i -g` — **não há build de fonte**, porque
|
|
78
|
+
**Não há contêiner.** O pacote npm publicado `constellai` (o `.next` compilado e pré-buildado) é instalado globalmente com `npm i -g` — **não há build de fonte**, porque o pacote npm já traz o `.next` pré-buildado. O processo `constella --vps` roda direto sob o usuário do host. O Tailscale roda no **host**, então o próprio host é o nó da tailnet; o bind `0.0.0.0` do servidor web fica acessível **apenas no IP do Tailscale do host** enquanto a porta 3000 não tiver rota pública (tailnet + firewall). Fixe uma versão a qualquer momento com `npm install -g constellai@<versão>`.
|
|
79
79
|
|
|
80
80
|
### Raiz de runtime no diretório home
|
|
81
81
|
|