constellai 0.3.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 +54 -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 +346 -0
- package/.next/required-server-files.json +346 -0
- package/.next/routes-manifest.json +368 -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)/design/page.js +354 -0
- package/.next/server/app/(app)/design/page.js.nft.json +1 -0
- package/.next/server/app/(app)/design/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 +22 -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 +12 -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 +13 -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 +2 -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 +53 -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/health/route.js +1 -0
- package/.next/server/app/api/health/route.js.nft.json +1 -0
- package/.next/server/app/api/health/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 +133 -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 +54 -0
- package/.next/server/chunks/1249.js +910 -0
- package/.next/server/chunks/1388.js +1 -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/1845.js +462 -0
- package/.next/server/chunks/2341.js +1 -0
- package/.next/server/chunks/2517.js +1 -0
- package/.next/server/chunks/259.js +119 -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/288.js +1 -0
- package/.next/server/chunks/2939.js +12 -0
- package/.next/server/chunks/2960.js +14 -0
- package/.next/server/chunks/3050.js +18 -0
- package/.next/server/chunks/3056.js +1 -0
- package/.next/server/chunks/3131.js +1 -0
- package/.next/server/chunks/3234.js +869 -0
- package/.next/server/chunks/3243.js +67 -0
- package/.next/server/chunks/3266.js +15 -0
- package/.next/server/chunks/3440.js +1 -0
- package/.next/server/chunks/3550.js +1 -0
- package/.next/server/chunks/3609.js +2 -0
- package/.next/server/chunks/3882.js +417 -0
- package/.next/server/chunks/4302.js +26 -0
- package/.next/server/chunks/4616.js +479 -0
- package/.next/server/chunks/4619.js +1 -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/4979.js +67 -0
- package/.next/server/chunks/5060.js +1 -0
- package/.next/server/chunks/5181.js +1 -0
- package/.next/server/chunks/5278.js +1 -0
- package/.next/server/chunks/5614.js +1 -0
- package/.next/server/chunks/6431.js +1 -0
- package/.next/server/chunks/6479.js +1 -0
- package/.next/server/chunks/658.js +14 -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/683.js +1 -0
- package/.next/server/chunks/6873.js +1 -0
- package/.next/server/chunks/7037.js +1 -0
- package/.next/server/chunks/73.js +17 -0
- package/.next/server/chunks/7336.js +1 -0
- package/.next/server/chunks/7514.js +1 -0
- package/.next/server/chunks/7589.js +22 -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/7976.js +1 -0
- package/.next/server/chunks/7989.js +1 -0
- package/.next/server/chunks/834.js +4 -0
- package/.next/server/chunks/8497.js +1 -0
- package/.next/server/chunks/850.js +1 -0
- package/.next/server/chunks/8561.js +22 -0
- package/.next/server/chunks/8623.js +1 -0
- package/.next/server/chunks/8762.js +15 -0
- package/.next/server/chunks/8823.js +85 -0
- package/.next/server/chunks/9459.js +21 -0
- package/.next/server/chunks/9676.js +1 -0
- package/.next/server/chunks/9680.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/T0ETI55t9tc9pi5i_CGOe/_buildManifest.js +1 -0
- package/.next/static/T0ETI55t9tc9pi5i_CGOe/_ssgManifest.js +1 -0
- package/.next/static/chunks/2237-2a30470119df8616.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-9684aa1c634212de.js +1 -0
- package/.next/static/chunks/4263-adecb5b466380b6e.js +1 -0
- package/.next/static/chunks/5920.6451a68b63918988.js +1 -0
- package/.next/static/chunks/6834-4759af1ce7d95fb6.js +32 -0
- package/.next/static/chunks/7268-ac23e9901bf535af.js +4 -0
- package/.next/static/chunks/7509.721cd47a931c5518.js +1 -0
- package/.next/static/chunks/7555-d2209e697b0a798e.js +1 -0
- package/.next/static/chunks/8370-db3280cb1ba67bcd.js +12 -0
- package/.next/static/chunks/9219-4a39a98b5502d9d1.js +1 -0
- package/.next/static/chunks/9562-4b50b4e408bc0a42.js +1 -0
- package/.next/static/chunks/9690-53d5222618cbeddb.js +1 -0
- package/.next/static/chunks/9846-c853e71d4d8fbb80.js +1 -0
- package/.next/static/chunks/9950-703805abe4653068.js +1 -0
- package/.next/static/chunks/app/(app)/activity/page-f06add40c3785686.js +1 -0
- package/.next/static/chunks/app/(app)/agents/[handle]/page-2ddf1f9908c73eb1.js +1 -0
- package/.next/static/chunks/app/(app)/code/page-ef9dceeae728b9d1.js +1 -0
- package/.next/static/chunks/app/(app)/config/page-496e569efd86e75c.js +1 -0
- package/.next/static/chunks/app/(app)/costs/page-675f542fdd517bee.js +1 -0
- package/.next/static/chunks/app/(app)/cron/page-80a87a05492c0ffe.js +1 -0
- package/.next/static/chunks/app/(app)/dashboard/page-4bddca6808a3be40.js +1 -0
- package/.next/static/chunks/app/(app)/design/page-e0fd071fb7144c46.js +558 -0
- package/.next/static/chunks/app/(app)/docs/[id]/page-f05e389793127500.js +1 -0
- package/.next/static/chunks/app/(app)/docs/page-f6bbf5c6b9104cbe.js +1 -0
- package/.next/static/chunks/app/(app)/error-988cd28480809861.js +1 -0
- package/.next/static/chunks/app/(app)/github/page-5297c806ce6afa9b.js +1 -0
- package/.next/static/chunks/app/(app)/goals/page-3fa53e8541c8e9fc.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/page-a2a74b5f6a6c326e.js +12 -0
- package/.next/static/chunks/app/(app)/knowledge/page-fb11b2bfa9ecd9a4.js +1 -0
- package/.next/static/chunks/app/(app)/layout-b74cd565406964d5.js +1 -0
- package/.next/static/chunks/app/(app)/models/page-c8acfc3d353fd9d0.js +1 -0
- package/.next/static/chunks/app/(app)/notifications/page-05a094d02d23f455.js +12 -0
- package/.next/static/chunks/app/(app)/org/page-883d6aa98b593c6b.js +12 -0
- package/.next/static/chunks/app/(app)/organizations/page-4595e8fa86ca3c01.js +1 -0
- package/.next/static/chunks/app/(app)/page-21d47e76fe9a6c63.js +1 -0
- package/.next/static/chunks/app/(app)/planner/page-1fc32005d05bbe69.js +1 -0
- package/.next/static/chunks/app/(app)/plugins/page-454613b9f5cb1d3d.js +1 -0
- package/.next/static/chunks/app/(app)/pm/page-8473da305f4c2880.js +1 -0
- package/.next/static/chunks/app/(app)/prepare-deploy/page-3ba948f5557dea38.js +1 -0
- package/.next/static/chunks/app/(app)/profile/page-05f25516fea20762.js +1 -0
- package/.next/static/chunks/app/(app)/pulse/page-540a80dbaf61453d.js +1 -0
- package/.next/static/chunks/app/(app)/reports/[id]/page-80a87a05492c0ffe.js +1 -0
- package/.next/static/chunks/app/(app)/reports/page-de1e69ca09d7cabb.js +1 -0
- package/.next/static/chunks/app/(app)/routines/page-83085c9ba3584ec9.js +1 -0
- package/.next/static/chunks/app/(app)/search/page-8769fd9075e21e36.js +1 -0
- package/.next/static/chunks/app/(app)/security/page-1baa88dc61c3fab8.js +1 -0
- package/.next/static/chunks/app/(app)/skills/page-fa75c290b456c629.js +1 -0
- package/.next/static/chunks/app/(app)/tasks/page-1eb62689244c8a79.js +1 -0
- package/.next/static/chunks/app/(app)/test-dev/page-c496b31087389906.js +1 -0
- package/.next/static/chunks/app/(app)/update/page-5a217e6479bc5289.js +1 -0
- package/.next/static/chunks/app/(auth)/login/page-ad50e3112f35f41c.js +1 -0
- package/.next/static/chunks/app/(auth)/onboarding/page-ab05f02e868c9eec.js +1 -0
- package/.next/static/chunks/app/_global-error/page-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/_not-found/page-dc38b02aebeab535.js +1 -0
- package/.next/static/chunks/app/api/auth/[...all]/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/cron/tick/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/health/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/locks/acquire/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/models/progress/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/passkey/authenticate/options/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/passkey/authenticate/verify/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/passkey/register/options/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/passkey/register/verify/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/stream/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/sync/file/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/telegram/poll/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/upload/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/api/v1/[[...path]]/route-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/app/error-09899a13c38b6e89.js +1 -0
- package/.next/static/chunks/app/global-error-c2ea8fef715f226d.js +1 -0
- package/.next/static/chunks/app/layout-e6008e66aea1a849.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-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-eacef2b697bd0982.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-eacef2b697bd0982.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/e7b568809d5d9c72.css +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)/design/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/health/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 +211 -0
- package/.next/types/package.json +1 -0
- package/.next/types/routes.d.ts +121 -0
- package/.next/types/validator.ts +520 -0
- package/CHANGELOG.md +1084 -0
- package/LICENSE +21 -0
- package/README.md +477 -0
- package/README.pt-BR.md +487 -0
- package/bin/constella-update.mjs +131 -0
- package/bin/constella.mjs +455 -0
- package/bin/guard-hook.mjs +44 -0
- package/bin/lock-hook.mjs +49 -0
- package/bin/worker.mjs +142 -0
- package/docs/UPDATE.md +150 -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/assets/screens/ceo-planner-specs.png +0 -0
- package/docs/assets/screens/ceo-planner.png +0 -0
- package/docs/assets/screens/dashboard.png +0 -0
- package/docs/assets/screens/design.png +0 -0
- package/docs/assets/screens/home.png +0 -0
- package/docs/assets/screens/knowledge-blocks.png +0 -0
- package/docs/assets/screens/knowledge.png +0 -0
- package/docs/assets/screens/models.png +0 -0
- package/docs/assets/screens/skills.png +0 -0
- package/docs/assets/screens/telegram.png +0 -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/CHAT_COMMANDS.md +305 -0
- package/docs/en/CONFIGURATION.md +340 -0
- package/docs/en/DEPLOY.md +341 -0
- package/docs/en/DESIGN.md +214 -0
- package/docs/en/DM.md +297 -0
- package/docs/en/FAQ.md +259 -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 +374 -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/OPERATIONS.md +212 -0
- package/docs/en/PLUGINS.md +290 -0
- package/docs/en/PORTABLE_MODE.md +391 -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 +98 -0
- package/docs/en/RELEASE_SMOKE.md +92 -0
- package/docs/en/SECURITY.md +280 -0
- package/docs/en/SKILLS.md +349 -0
- package/docs/en/START_MODE.md +285 -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 +324 -0
- package/docs/en/TROUBLESHOOTING.md +294 -0
- package/docs/en/UPDATE.md +320 -0
- package/docs/en/VPS_MODE.md +405 -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/CHAT_COMMANDS.md +307 -0
- package/docs/pt/CONFIGURATION.md +340 -0
- package/docs/pt/DEPLOY.md +341 -0
- package/docs/pt/DESIGN.md +215 -0
- package/docs/pt/DM.md +297 -0
- package/docs/pt/FAQ.md +259 -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 +374 -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/OPERATIONS.md +211 -0
- package/docs/pt/PLUGINS.md +290 -0
- package/docs/pt/PORTABLE_MODE.md +391 -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 +98 -0
- package/docs/pt/RELEASE_SMOKE.md +94 -0
- package/docs/pt/SECURITY.md +280 -0
- package/docs/pt/SKILLS.md +349 -0
- package/docs/pt/START_MODE.md +284 -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 +324 -0
- package/docs/pt/TROUBLESHOOTING.md +294 -0
- package/docs/pt/UPDATE.md +320 -0
- package/docs/pt/VPS_MODE.md +405 -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/0002_flimsy_kree.sql +48 -0
- package/drizzle/meta/0000_snapshot.json +4650 -0
- package/drizzle/meta/0001_snapshot.json +5418 -0
- package/drizzle/meta/0002_snapshot.json +5753 -0
- package/drizzle/meta/_journal.json +27 -0
- package/drizzle.config.mjs +16 -0
- package/next.config.mjs +21 -0
- package/package.json +139 -0
- package/scripts/clean-repo.mjs +20 -0
- package/scripts/dev-all.mjs +46 -0
- package/scripts/i18n-parity.mjs +57 -0
- package/scripts/install.sh +97 -0
- package/scripts/mcp-server.mjs +100 -0
- package/scripts/postbuild.mjs +11 -0
- package/scripts/postinstall.mjs +14 -0
- package/scripts/publish-public.mjs +116 -0
- package/scripts/smoke-login.mjs +138 -0
- package/scripts/start-all.mjs +45 -0
- package/scripts/trim-next.mjs +23 -0
- package/scripts/vps-clean.sh +66 -0
- package/scripts/vps-install.sh +84 -0
- package/scripts/vps-update.sh +28 -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/agentic/DESIGN.md +55 -0
- package/skills/design/agentic/SKILL.md +89 -0
- package/skills/design/ai-audio-collection-playbook/SKILL.md +48 -0
- package/skills/design/algorithmic-art/LICENSE.txt +202 -0
- package/skills/design/algorithmic-art/SKILL.md +405 -0
- package/skills/design/algorithmic-art/templates/generator_template.js +223 -0
- package/skills/design/algorithmic-art/templates/viewer.html +599 -0
- package/skills/design/animation-motion/SKILL.md +60 -0
- package/skills/design/answers-surface-playbook/SKILL.md +102 -0
- package/skills/design/answers-surface-playbook/example.html +517 -0
- package/skills/design/ant/DESIGN.md +55 -0
- package/skills/design/ant/SKILL.md +89 -0
- package/skills/design/apple-interface-guidelines-playbook/SKILL.md +48 -0
- package/skills/design/application/DESIGN.md +55 -0
- package/skills/design/application/SKILL.md +84 -0
- package/skills/design/artistic/DESIGN.md +55 -0
- package/skills/design/artistic/SKILL.md +89 -0
- package/skills/design/bento/DESIGN.md +55 -0
- package/skills/design/bento/SKILL.md +83 -0
- package/skills/design/bold/DESIGN.md +55 -0
- package/skills/design/bold/SKILL.md +83 -0
- package/skills/design/brand-guidelines/LICENSE.txt +202 -0
- package/skills/design/brand-guidelines/SKILL.md +73 -0
- package/skills/design/brutalism/DESIGN.md +55 -0
- package/skills/design/brutalism/SKILL.md +97 -0
- package/skills/design/cafe/DESIGN.md +55 -0
- package/skills/design/cafe/SKILL.md +83 -0
- package/skills/design/campaign-concept-playbook/SKILL.md +48 -0
- package/skills/design/capture-playbook/SKILL.md +48 -0
- package/skills/design/captures-growth-playbook/SKILL.md +48 -0
- package/skills/design/claude/DESIGN.md +55 -0
- package/skills/design/claude/SKILL.md +81 -0
- package/skills/design/claymorphism/DESIGN.md +55 -0
- package/skills/design/claymorphism/SKILL.md +84 -0
- package/skills/design/clean/DESIGN.md +55 -0
- package/skills/design/clean/SKILL.md +84 -0
- package/skills/design/codex/DESIGN.md +55 -0
- package/skills/design/codex/SKILL.md +81 -0
- package/skills/design/color-and-typography/SKILL.md +60 -0
- package/skills/design/colorful/DESIGN.md +55 -0
- package/skills/design/colorful/SKILL.md +82 -0
- package/skills/design/commerce-visual-flow-playbook/SKILL.md +281 -0
- package/skills/design/commerce-visual-flow-playbook/example.html +504 -0
- package/skills/design/commerce-visual-flow-quality-gate/SKILL.md +78 -0
- package/skills/design/commerce-visual-flow-quality-gate/example.html +504 -0
- package/skills/design/composition-advisory-playbook/SKILL.md +48 -0
- package/skills/design/composition-audit-playbook/SKILL.md +48 -0
- package/skills/design/composition-markdown-playbook/SKILL.md +48 -0
- package/skills/design/composition-prompt-playbook/SKILL.md +234 -0
- package/skills/design/composition-taste-interface-playbook/LICENSE +21 -0
- package/skills/design/composition-taste-interface-playbook/SKILL.md +1222 -0
- package/skills/design/composition-taste-interface-v1-playbook/LICENSE +21 -0
- package/skills/design/composition-taste-interface-v1-playbook/SKILL.md +242 -0
- package/skills/design/concept-lead-playbook/SKILL.md +73 -0
- package/skills/design/constella-design/SKILL.md +97 -0
- package/skills/design/contemporary/DESIGN.md +55 -0
- package/skills/design/contemporary/SKILL.md +83 -0
- package/skills/design/corporate/DESIGN.md +55 -0
- package/skills/design/corporate/SKILL.md +89 -0
- package/skills/design/cosmic/DESIGN.md +55 -0
- package/skills/design/cosmic/SKILL.md +83 -0
- package/skills/design/creative/DESIGN.md +55 -0
- package/skills/design/creative/SKILL.md +83 -0
- package/skills/design/css-techniques/SKILL.md +58 -0
- package/skills/design/d3-visualization-playbook/SKILL.md +56 -0
- package/skills/design/dashboard/DESIGN.md +55 -0
- package/skills/design/dashboard/SKILL.md +89 -0
- package/skills/design/deliverables-assembler-playbook/SKILL.md +48 -0
- package/skills/design/delivery-save-diagnostics-playbook/SKILL.md +69 -0
- package/skills/design/design-systems/SKILL.md +60 -0
- package/skills/design/dithered/DESIGN.md +55 -0
- package/skills/design/dithered/SKILL.md +87 -0
- package/skills/design/document-paper-scroll-playbook/SKILL.md +54 -0
- package/skills/design/document-paper-scroll-playbook/example.html +84 -0
- package/skills/design/document-paper-scroll-sample-worked-sample/SKILL.md +45 -0
- package/skills/design/document-paper-scroll-sample-worked-sample/example.html +84 -0
- package/skills/design/document-playbook/SKILL.md +48 -0
- package/skills/design/doodle/DESIGN.md +55 -0
- package/skills/design/doodle/SKILL.md +97 -0
- package/skills/design/dramatic/DESIGN.md +55 -0
- package/skills/design/dramatic/SKILL.md +83 -0
- package/skills/design/editorial/DESIGN.md +55 -0
- package/skills/design/editorial/SKILL.md +86 -0
- package/skills/design/eight-bit-orbital-motion-blueprint/SKILL.md +58 -0
- package/skills/design/eight-bit-orbital-motion-blueprint/assets/template.html +506 -0
- package/skills/design/eight-bit-orbital-motion-blueprint/example.html +43 -0
- package/skills/design/eight-bit-orbital-motion-blueprint-quality-gate/SKILL.md +40 -0
- package/skills/design/eight-bit-orbital-motion-blueprint-quality-gate/assets/template.html +506 -0
- package/skills/design/eight-bit-orbital-motion-blueprint-quality-gate/example.html +43 -0
- package/skills/design/elegant/DESIGN.md +55 -0
- package/skills/design/elegant/SKILL.md +83 -0
- package/skills/design/energetic/DESIGN.md +51 -0
- package/skills/design/energetic/SKILL.md +86 -0
- package/skills/design/enterprise/DESIGN.md +55 -0
- package/skills/design/enterprise/SKILL.md +88 -0
- package/skills/design/expressive/DESIGN.md +55 -0
- package/skills/design/expressive/SKILL.md +83 -0
- package/skills/design/fal-3d-playbook/SKILL.md +48 -0
- package/skills/design/fal-compose-playbook/SKILL.md +48 -0
- package/skills/design/fal-enhance-playbook/SKILL.md +48 -0
- package/skills/design/fal-kling-o3-playbook/SKILL.md +48 -0
- package/skills/design/fal-lip-sync-playbook/SKILL.md +48 -0
- package/skills/design/fal-live-playbook/SKILL.md +48 -0
- package/skills/design/fal-motion-edit-playbook/SKILL.md +48 -0
- package/skills/design/fal-repair-playbook/SKILL.md +48 -0
- package/skills/design/fal-train-playbook/SKILL.md +48 -0
- package/skills/design/fal-tryon-playbook/SKILL.md +48 -0
- package/skills/design/fal-vision-playbook/SKILL.md +48 -0
- package/skills/design/fal-visual-edit-playbook/SKILL.md +48 -0
- package/skills/design/fantasy/DESIGN.md +55 -0
- package/skills/design/fantasy/SKILL.md +83 -0
- package/skills/design/fiction/DESIGN.md +55 -0
- package/skills/design/fiction/SKILL.md +81 -0
- package/skills/design/field-journal-magazine-blueprint/SKILL.md +61 -0
- package/skills/design/field-journal-magazine-blueprint/assets/template.html +287 -0
- package/skills/design/field-journal-magazine-blueprint/example.html +138 -0
- package/skills/design/field-journal-magazine-blueprint-quality-gate/SKILL.md +47 -0
- package/skills/design/field-journal-magazine-blueprint-quality-gate/assets/template.html +287 -0
- package/skills/design/field-journal-magazine-blueprint-quality-gate/example.html +138 -0
- package/skills/design/figma-author-composition-system-rules-playbook/SKILL.md +48 -0
- package/skills/design/figma-author-fresh-file-playbook/SKILL.md +48 -0
- package/skills/design/figma-build-composition-playbook/SKILL.md +48 -0
- package/skills/design/figma-code-bridge-parts-playbook/SKILL.md +48 -0
- package/skills/design/figma-compose-composition-playbook/SKILL.md +48 -0
- package/skills/design/figma-compose-library-playbook/SKILL.md +48 -0
- package/skills/design/figma-operator-playbook/SKILL.md +48 -0
- package/skills/design/flat/DESIGN.md +55 -0
- package/skills/design/flat/SKILL.md +101 -0
- package/skills/design/flutter-motion-apps-playbook/SKILL.md +48 -0
- package/skills/design/friendly/DESIGN.md +55 -0
- package/skills/design/friendly/SKILL.md +83 -0
- package/skills/design/full-delivery-enforcement-playbook/LICENSE +21 -0
- package/skills/design/full-delivery-enforcement-playbook/SKILL.md +65 -0
- package/skills/design/full-surface-capture-playbook/SKILL.md +48 -0
- package/skills/design/futuristic/DESIGN.md +55 -0
- package/skills/design/futuristic/SKILL.md +83 -0
- package/skills/design/generative-visuals-playbook/SKILL.md +48 -0
- package/skills/design/gif-sticker-maker-playbook/SKILL.md +48 -0
- package/skills/design/glassmorphism/DESIGN.md +55 -0
- package/skills/design/glassmorphism/SKILL.md +86 -0
- package/skills/design/gpt-taste-playbook/LICENSE +21 -0
- package/skills/design/gpt-taste-playbook/SKILL.md +91 -0
- package/skills/design/gradient/DESIGN.md +55 -0
- package/skills/design/gradient/SKILL.md +83 -0
- package/skills/design/gradients/SKILL.md +59 -0
- package/skills/design/graphic-design-basics/SKILL.md +55 -0
- package/skills/design/grid-concept-mode-blueprint/SKILL.md +62 -0
- package/skills/design/grid-concept-mode-blueprint/assets/template.html +375 -0
- package/skills/design/grid-concept-mode-blueprint/example.html +70 -0
- package/skills/design/grid-concept-mode-blueprint-quality-gate/SKILL.md +52 -0
- package/skills/design/grid-concept-mode-blueprint-quality-gate/assets/template.html +375 -0
- package/skills/design/grid-concept-mode-blueprint-quality-gate/example.html +70 -0
- package/skills/design/grid-user-research-motion-blueprint/SKILL.md +63 -0
- package/skills/design/grid-user-research-motion-blueprint/assets/template.html +265 -0
- package/skills/design/grid-user-research-motion-blueprint/example.html +265 -0
- package/skills/design/grid-user-research-motion-blueprint-quality-gate/SKILL.md +43 -0
- package/skills/design/grid-user-research-motion-blueprint-quality-gate/assets/template.html +265 -0
- package/skills/design/grid-user-research-motion-blueprint-quality-gate/example.html +265 -0
- package/skills/design/growth-psychology-playbook/SKILL.md +48 -0
- package/skills/design/gsap-core-playbook/SKILL.md +271 -0
- package/skills/design/gsap-frameworks-playbook/SKILL.md +254 -0
- package/skills/design/gsap-plugins-playbook/SKILL.md +450 -0
- package/skills/design/gsap-react-playbook/SKILL.md +153 -0
- package/skills/design/gsap-scrolltrigger-playbook/SKILL.md +314 -0
- package/skills/design/gsap-speed-playbook/SKILL.md +96 -0
- package/skills/design/gsap-timeline-playbook/SKILL.md +124 -0
- package/skills/design/gsap-utilities-playbook/SKILL.md +301 -0
- package/skills/design/hand-sketched-diagrams-playbook/SKILL.md +48 -0
- package/skills/design/high-end-visual-composition-playbook/LICENSE +21 -0
- package/skills/design/high-end-visual-composition-playbook/SKILL.md +114 -0
- package/skills/design/html-slides-retro-quarterly-audit-playbook/SKILL.md +65 -0
- package/skills/design/html-slides-retro-quarterly-audit-playbook/assets/template.html +164 -0
- package/skills/design/html-slides-retro-quarterly-audit-playbook/example.html +139 -0
- package/skills/design/html-slides-retro-quarterly-audit-quality-gate/SKILL.md +42 -0
- package/skills/design/html-slides-retro-quarterly-audit-quality-gate/assets/template.html +164 -0
- package/skills/design/html-slides-retro-quarterly-audit-quality-gate/example.html +139 -0
- package/skills/design/ideation-playbook/SKILL.md +48 -0
- package/skills/design/identity-capture-playbook/SKILL.md +222 -0
- package/skills/design/identity-capture-playbook/templates/brand-kit.html +757 -0
- package/skills/design/identity-kit-playbook/LICENSE +21 -0
- package/skills/design/identity-kit-playbook/SKILL.md +814 -0
- package/skills/design/identity-standards-playbook/SKILL.md +48 -0
- package/skills/design/imagecraft-interface-mobile-playbook/LICENSE +21 -0
- package/skills/design/imagecraft-interface-mobile-playbook/SKILL.md +1482 -0
- package/skills/design/imagecraft-interface-web-playbook/LICENSE +21 -0
- package/skills/design/imagecraft-interface-web-playbook/SKILL.md +1003 -0
- package/skills/design/imagecraft-playbook/SKILL.md +48 -0
- package/skills/design/imagen-playbook/SKILL.md +48 -0
- package/skills/design/immersive/DESIGN.md +55 -0
- package/skills/design/immersive/SKILL.md +81 -0
- package/skills/design/impeccable/DESIGN.md +55 -0
- package/skills/design/impeccable/SKILL.md +81 -0
- package/skills/design/improve-prompt-playbook/SKILL.md +48 -0
- package/skills/design/industrial-raw-ui-playbook/LICENSE +21 -0
- package/skills/design/industrial-raw-ui-playbook/SKILL.md +108 -0
- package/skills/design/interface-builder-playbook/SKILL.md +48 -0
- package/skills/design/interface-composition-playbook/LICENSE.txt +177 -0
- package/skills/design/interface-composition-playbook/SKILL.md +80 -0
- package/skills/design/interface-playbook/SKILL.md +48 -0
- package/skills/design/interface-slides-playbook/SKILL.md +48 -0
- package/skills/design/late-hours-magazine-blueprint/SKILL.md +62 -0
- package/skills/design/late-hours-magazine-blueprint/assets/template.html +173 -0
- package/skills/design/late-hours-magazine-blueprint/example.html +12 -0
- package/skills/design/late-hours-magazine-blueprint-quality-gate/SKILL.md +44 -0
- package/skills/design/late-hours-magazine-blueprint-quality-gate/assets/template.html +173 -0
- package/skills/design/late-hours-magazine-blueprint-quality-gate/example.html +12 -0
- package/skills/design/levels/DESIGN.md +55 -0
- package/skills/design/levels/SKILL.md +83 -0
- package/skills/design/lingo/DESIGN.md +55 -0
- package/skills/design/lingo/SKILL.md +87 -0
- package/skills/design/luxury/DESIGN.md +55 -0
- package/skills/design/luxury/SKILL.md +83 -0
- package/skills/design/magazine-wine-rules-blueprint/SKILL.md +59 -0
- package/skills/design/magazine-wine-rules-blueprint/assets/template.html +94 -0
- package/skills/design/magazine-wine-rules-blueprint/example.html +49 -0
- package/skills/design/magazine-wine-rules-blueprint-quality-gate/SKILL.md +41 -0
- package/skills/design/magazine-wine-rules-blueprint-quality-gate/assets/template.html +94 -0
- package/skills/design/magazine-wine-rules-blueprint-quality-gate/example.html +49 -0
- package/skills/design/market-campaigns-extractor-playbook/SKILL.md +48 -0
- package/skills/design/material/DESIGN.md +55 -0
- package/skills/design/material/SKILL.md +97 -0
- package/skills/design/matrix/DESIGN.md +55 -0
- package/skills/design/matrix/SKILL.md +82 -0
- package/skills/design/messagecraft-playbook/SKILL.md +48 -0
- package/skills/design/metrics-brief-playbook/SKILL.md +33 -0
- package/skills/design/metrics-brief-playbook/example.html +175 -0
- package/skills/design/metrics-brief-sample-worked-sample/SKILL.md +37 -0
- package/skills/design/metrics-brief-sample-worked-sample/example.html +175 -0
- package/skills/design/microinteractions/SKILL.md +58 -0
- package/skills/design/minimal/DESIGN.md +55 -0
- package/skills/design/minimal/SKILL.md +83 -0
- package/skills/design/minimal-ui-playbook/LICENSE +21 -0
- package/skills/design/minimal-ui-playbook/SKILL.md +101 -0
- package/skills/design/minimax-pdf-playbook/SKILL.md +48 -0
- package/skills/design/minimax-word-playbook/SKILL.md +48 -0
- package/skills/design/mockup-device-3d-playbook/SKILL.md +49 -0
- package/skills/design/mockup-device-3d-playbook/example.html +193 -0
- package/skills/design/mockup-device-3d-sample-worked-sample/SKILL.md +34 -0
- package/skills/design/mockup-device-3d-sample-worked-sample/example.html +193 -0
- package/skills/design/modern/DESIGN.md +55 -0
- package/skills/design/modern/SKILL.md +83 -0
- package/skills/design/mono/DESIGN.md +55 -0
- package/skills/design/mono/SKILL.md +88 -0
- package/skills/design/motion-craft-motion-playbook/SKILL.md +52 -0
- package/skills/design/motion-hyperframes-playbook/SKILL.md +32 -0
- package/skills/design/motion-hyperframes-playbook/example.html +140 -0
- package/skills/design/motion-hyperframes-sample-worked-sample/SKILL.md +44 -0
- package/skills/design/motion-hyperframes-sample-worked-sample/example.html +140 -0
- package/skills/design/motion-retriever-playbook/SKILL.md +48 -0
- package/skills/design/naming-name-brainstormer-playbook/SKILL.md +48 -0
- package/skills/design/nanobanana-slides-playbook/SKILL.md +48 -0
- package/skills/design/neobrutalism/DESIGN.md +55 -0
- package/skills/design/neobrutalism/SKILL.md +83 -0
- package/skills/design/neon-style/DESIGN.md +55 -0
- package/skills/design/neon-style/SKILL.md +83 -0
- package/skills/design/neumorphism/DESIGN.md +55 -0
- package/skills/design/neumorphism/SKILL.md +88 -0
- package/skills/design/numbers-finance-grid-blueprint/SKILL.md +56 -0
- package/skills/design/numbers-finance-grid-blueprint/assets/template.html +111 -0
- package/skills/design/numbers-finance-grid-blueprint/example.html +44 -0
- package/skills/design/numbers-finance-grid-blueprint-quality-gate/SKILL.md +42 -0
- package/skills/design/numbers-finance-grid-blueprint-quality-gate/assets/template.html +111 -0
- package/skills/design/numbers-finance-grid-blueprint-quality-gate/example.html +44 -0
- package/skills/design/operator-navigator-playbook/SKILL.md +227 -0
- package/skills/design/operators-operator-journal-playbook/SKILL.md +73 -0
- package/skills/design/orientation-guide/SKILL.md +44 -0
- package/skills/design/pacman/DESIGN.md +55 -0
- package/skills/design/pacman/SKILL.md +84 -0
- package/skills/design/palette-advisor-playbook/SKILL.md +48 -0
- package/skills/design/paper/DESIGN.md +55 -0
- package/skills/design/paper/SKILL.md +83 -0
- package/skills/design/paywall-upgrade-conversion-playbook/SKILL.md +48 -0
- package/skills/design/pdf-playbook/SKILL.md +48 -0
- package/skills/design/perspective/DESIGN.md +55 -0
- package/skills/design/perspective/SKILL.md +83 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/LICENSE.txt +201 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/SKILL.md +48 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/agents/openai.yaml +4 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/compose_atlas.py +150 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/derive_running_left_from_running_right.py +143 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/extract_strip_frames.py +323 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/finalize_pet_run.py +382 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/generate_pet_images.py +295 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/inspect_frames.py +246 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/make_contact_sheet.py +96 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/package_custom_pet.py +108 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/pet_job_status.py +117 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/prepare_pet_run.py +674 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/queue_pet_repairs.py +172 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/record_imagegen_result.py +250 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/render_animation_videos.py +134 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/render_animation_videos.sh +5 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/test_generate_pet_images.py +136 -0
- package/skills/design/pet-companion-animation-rows-reference-guide/scripts/validate_atlas.py +139 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/LICENSE.txt +201 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/SKILL.md +54 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/agents/openai.yaml +4 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/compose_atlas.py +150 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/derive_running_left_from_running_right.py +143 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/extract_strip_frames.py +323 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/finalize_pet_run.py +382 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/generate_pet_images.py +295 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/inspect_frames.py +246 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/make_contact_sheet.py +96 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/package_custom_pet.py +108 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/pet_job_status.py +117 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/prepare_pet_run.py +674 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/queue_pet_repairs.py +172 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/record_imagegen_result.py +250 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/render_animation_videos.py +134 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/render_animation_videos.sh +5 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/test_generate_pet_images.py +136 -0
- package/skills/design/pet-companion-codex-companion-contract-reference-guide/scripts/validate_atlas.py +139 -0
- package/skills/design/pet-companion-orientation-guide/LICENSE.txt +201 -0
- package/skills/design/pet-companion-orientation-guide/SKILL.md +75 -0
- package/skills/design/pet-companion-orientation-guide/agents/openai.yaml +4 -0
- package/skills/design/pet-companion-orientation-guide/scripts/compose_atlas.py +150 -0
- package/skills/design/pet-companion-orientation-guide/scripts/derive_running_left_from_running_right.py +143 -0
- package/skills/design/pet-companion-orientation-guide/scripts/extract_strip_frames.py +323 -0
- package/skills/design/pet-companion-orientation-guide/scripts/finalize_pet_run.py +382 -0
- package/skills/design/pet-companion-orientation-guide/scripts/generate_pet_images.py +295 -0
- package/skills/design/pet-companion-orientation-guide/scripts/inspect_frames.py +246 -0
- package/skills/design/pet-companion-orientation-guide/scripts/make_contact_sheet.py +96 -0
- package/skills/design/pet-companion-orientation-guide/scripts/package_custom_pet.py +108 -0
- package/skills/design/pet-companion-orientation-guide/scripts/pet_job_status.py +117 -0
- package/skills/design/pet-companion-orientation-guide/scripts/prepare_pet_run.py +674 -0
- package/skills/design/pet-companion-orientation-guide/scripts/queue_pet_repairs.py +172 -0
- package/skills/design/pet-companion-orientation-guide/scripts/record_imagegen_result.py +250 -0
- package/skills/design/pet-companion-orientation-guide/scripts/render_animation_videos.py +134 -0
- package/skills/design/pet-companion-orientation-guide/scripts/render_animation_videos.sh +5 -0
- package/skills/design/pet-companion-orientation-guide/scripts/test_generate_pet_images.py +136 -0
- package/skills/design/pet-companion-orientation-guide/scripts/validate_atlas.py +139 -0
- package/skills/design/pet-companion-playbook/LICENSE.txt +201 -0
- package/skills/design/pet-companion-playbook/SKILL.md +344 -0
- package/skills/design/pet-companion-playbook/agents/openai.yaml +4 -0
- package/skills/design/pet-companion-playbook/scripts/compose_atlas.py +150 -0
- package/skills/design/pet-companion-playbook/scripts/derive_running_left_from_running_right.py +143 -0
- package/skills/design/pet-companion-playbook/scripts/extract_strip_frames.py +323 -0
- package/skills/design/pet-companion-playbook/scripts/finalize_pet_run.py +382 -0
- package/skills/design/pet-companion-playbook/scripts/generate_pet_images.py +295 -0
- package/skills/design/pet-companion-playbook/scripts/inspect_frames.py +246 -0
- package/skills/design/pet-companion-playbook/scripts/make_contact_sheet.py +96 -0
- package/skills/design/pet-companion-playbook/scripts/package_custom_pet.py +108 -0
- package/skills/design/pet-companion-playbook/scripts/pet_job_status.py +117 -0
- package/skills/design/pet-companion-playbook/scripts/prepare_pet_run.py +674 -0
- package/skills/design/pet-companion-playbook/scripts/queue_pet_repairs.py +172 -0
- package/skills/design/pet-companion-playbook/scripts/record_imagegen_result.py +250 -0
- package/skills/design/pet-companion-playbook/scripts/render_animation_videos.py +134 -0
- package/skills/design/pet-companion-playbook/scripts/render_animation_videos.sh +5 -0
- package/skills/design/pet-companion-playbook/scripts/test_generate_pet_images.py +136 -0
- package/skills/design/pet-companion-playbook/scripts/validate_atlas.py +139 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/LICENSE.txt +201 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/SKILL.md +79 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/agents/openai.yaml +4 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/compose_atlas.py +150 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/derive_running_left_from_running_right.py +143 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/extract_strip_frames.py +323 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/finalize_pet_run.py +382 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/generate_pet_images.py +295 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/inspect_frames.py +246 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/make_contact_sheet.py +96 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/package_custom_pet.py +108 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/pet_job_status.py +117 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/prepare_pet_run.py +674 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/queue_pet_repairs.py +172 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/record_imagegen_result.py +250 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/render_animation_videos.py +134 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/render_animation_videos.sh +5 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/test_generate_pet_images.py +136 -0
- package/skills/design/pet-companion-qa-rubric-reference-guide/scripts/validate_atlas.py +139 -0
- package/skills/design/pixelbin-media-playbook/SKILL.md +48 -0
- package/skills/design/planning-composition-audit-playbook/SKILL.md +48 -0
- package/skills/design/platform-composition-playbook/SKILL.md +48 -0
- package/skills/design/polish-composition-finish-playbook/SKILL.md +54 -0
- package/skills/design/poster-hero-playbook/SKILL.md +31 -0
- package/skills/design/poster-hero-playbook/example.html +88 -0
- package/skills/design/poster-hero-sample-worked-sample/SKILL.md +32 -0
- package/skills/design/poster-hero-sample-worked-sample/example.html +88 -0
- package/skills/design/pr-feedback-quality-gate/SKILL.md +57 -0
- package/skills/design/premium/DESIGN.md +55 -0
- package/skills/design/premium/SKILL.md +83 -0
- package/skills/design/presentation-composer-playbook/SKILL.md +48 -0
- package/skills/design/presentation-html-fidelity-audit-font-discipline-aa2caa/SKILL.md +382 -0
- package/skills/design/presentation-html-fidelity-audit-font-discipline-aa2caa/scripts/extract_pptx.py +134 -0
- package/skills/design/presentation-html-fidelity-audit-font-discipline-aa2caa/scripts/verify_layout.py +144 -0
- package/skills/design/presentation-html-fidelity-audit-layout-discipline-d5a323/SKILL.md +390 -0
- package/skills/design/presentation-html-fidelity-audit-layout-discipline-d5a323/scripts/extract_pptx.py +134 -0
- package/skills/design/presentation-html-fidelity-audit-layout-discipline-d5a323/scripts/verify_layout.py +144 -0
- package/skills/design/presentation-html-fidelity-audit-playbook/SKILL.md +257 -0
- package/skills/design/presentation-html-fidelity-audit-playbook/scripts/extract_pptx.py +134 -0
- package/skills/design/presentation-html-fidelity-audit-playbook/scripts/verify_layout.py +144 -0
- package/skills/design/presentation-html-fidelity-audit-table-blueprint-1ad2ac/SKILL.md +77 -0
- package/skills/design/presentation-html-fidelity-audit-table-blueprint-1ad2ac/scripts/extract_pptx.py +134 -0
- package/skills/design/presentation-html-fidelity-audit-table-blueprint-1ad2ac/scripts/verify_layout.py +144 -0
- package/skills/design/presentation-playbook/SKILL.md +48 -0
- package/skills/design/professional/DESIGN.md +55 -0
- package/skills/design/professional/SKILL.md +83 -0
- package/skills/design/publication/DESIGN.md +55 -0
- package/skills/design/publication/SKILL.md +89 -0
- package/skills/design/reading-year-in-audit-motion-blueprint/SKILL.md +76 -0
- package/skills/design/reading-year-in-audit-motion-blueprint/assets/template.html +714 -0
- package/skills/design/reading-year-in-audit-motion-blueprint/example.html +63 -0
- package/skills/design/reading-year-in-audit-motion-blueprint-quality-gate/SKILL.md +45 -0
- package/skills/design/reading-year-in-audit-motion-blueprint-quality-gate/assets/template.html +714 -0
- package/skills/design/reading-year-in-audit-motion-blueprint-quality-gate/example.html +63 -0
- package/skills/design/reference-composition-contract-playbook/SKILL.md +97 -0
- package/skills/design/reference-composition-contract-playbook/example.html +236 -0
- package/skills/design/reference-composition-contract-quality-gate/SKILL.md +45 -0
- package/skills/design/reference-composition-contract-quality-gate/example.html +236 -0
- package/skills/design/refined/DESIGN.md +55 -0
- package/skills/design/refined/SKILL.md +83 -0
- package/skills/design/refresh-existing-projects-playbook/LICENSE +21 -0
- package/skills/design/refresh-existing-projects-playbook/SKILL.md +194 -0
- package/skills/design/release-journal-single-page-layouts-reference-guide/SKILL.md +318 -0
- package/skills/design/release-journal-single-page-layouts-reference-guide/assets/template.html +342 -0
- package/skills/design/release-journal-single-page-layouts-reference-guide/example.html +156 -0
- package/skills/design/release-journal-single-page-playbook/SKILL.md +100 -0
- package/skills/design/release-journal-single-page-playbook/assets/template.html +342 -0
- package/skills/design/release-journal-single-page-playbook/example.html +156 -0
- package/skills/design/release-journal-single-page-quality-gate/SKILL.md +60 -0
- package/skills/design/release-journal-single-page-quality-gate/assets/template.html +342 -0
- package/skills/design/release-journal-single-page-quality-gate/example.html +156 -0
- package/skills/design/remotion-playbook/SKILL.md +48 -0
- package/skills/design/replicate-playbook/SKILL.md +48 -0
- package/skills/design/research-decision-room-evidence-model-reference-guide/SKILL.md +96 -0
- package/skills/design/research-decision-room-evidence-model-reference-guide/example.html +890 -0
- package/skills/design/research-decision-room-playbook/SKILL.md +164 -0
- package/skills/design/research-decision-room-playbook/example.html +890 -0
- package/skills/design/research-decision-room-quality-gate/SKILL.md +66 -0
- package/skills/design/research-decision-room-quality-gate/example.html +890 -0
- package/skills/design/responsive-layout/SKILL.md +59 -0
- package/skills/design/resume-modern-playbook/SKILL.md +31 -0
- package/skills/design/resume-modern-playbook/example.html +122 -0
- package/skills/design/resume-modern-sample-worked-sample/SKILL.md +59 -0
- package/skills/design/resume-modern-sample-worked-sample/example.html +122 -0
- package/skills/design/retro/DESIGN.md +55 -0
- package/skills/design/retro/SKILL.md +83 -0
- package/skills/design/riso/DESIGN.md +55 -0
- package/skills/design/riso/SKILL.md +81 -0
- package/skills/design/scene-distortion-headline-playbook/SKILL.md +52 -0
- package/skills/design/scene-distortion-headline-playbook/example.html +99 -0
- package/skills/design/scene-distortion-headline-sample-worked-sample/SKILL.md +31 -0
- package/skills/design/scene-distortion-headline-sample-worked-sample/example.html +99 -0
- package/skills/design/scene-flow-notes/SKILL.md +51 -0
- package/skills/design/scene-flow-notes/example.html +137 -0
- package/skills/design/scene-flow-notes-sample-worked-sample/SKILL.md +32 -0
- package/skills/design/scene-flow-notes-sample-worked-sample/example.html +137 -0
- package/skills/design/scene-fluid-background-hero-playbook/SKILL.md +58 -0
- package/skills/design/scene-fluid-background-hero-playbook/example.html +64 -0
- package/skills/design/scene-fluid-background-hero-sample-worked-sample/SKILL.md +28 -0
- package/skills/design/scene-fluid-background-hero-sample-worked-sample/example.html +64 -0
- package/skills/design/scene-light-flare-cinema-playbook/SKILL.md +53 -0
- package/skills/design/scene-light-flare-cinema-playbook/example.html +81 -0
- package/skills/design/scene-light-flare-cinema-sample-worked-sample/SKILL.md +31 -0
- package/skills/design/scene-light-flare-cinema-sample-worked-sample/example.html +81 -0
- package/skills/design/scene-macos-alert-playbook/SKILL.md +57 -0
- package/skills/design/scene-macos-alert-playbook/example.html +60 -0
- package/skills/design/scene-macos-alert-sample-worked-sample/SKILL.md +29 -0
- package/skills/design/scene-macos-alert-sample-worked-sample/example.html +60 -0
- package/skills/design/scene-mark-ending-playbook/SKILL.md +49 -0
- package/skills/design/scene-mark-ending-playbook/example.html +80 -0
- package/skills/design/scene-mark-ending-sample-worked-sample/SKILL.md +31 -0
- package/skills/design/scene-mark-ending-sample-worked-sample/example.html +80 -0
- package/skills/design/scene-metrics-chart-nyt-playbook/SKILL.md +46 -0
- package/skills/design/scene-metrics-chart-nyt-playbook/example.html +101 -0
- package/skills/design/scene-metrics-chart-nyt-sample-worked-sample/SKILL.md +37 -0
- package/skills/design/scene-metrics-chart-nyt-sample-worked-sample/example.html +101 -0
- package/skills/design/sega/DESIGN.md +55 -0
- package/skills/design/sega/SKILL.md +81 -0
- package/skills/design/shadcn/DESIGN.md +55 -0
- package/skills/design/shadcn/SKILL.md +83 -0
- package/skills/design/shadcn-ui-playbook/SKILL.md +48 -0
- package/skills/design/shader-builder-playbook/SKILL.md +48 -0
- package/skills/design/signin-flow-playbook/SKILL.md +51 -0
- package/skills/design/signin-flow-playbook/example.html +362 -0
- package/skills/design/signin-flow-quality-gate/SKILL.md +38 -0
- package/skills/design/signin-flow-quality-gate/example.html +362 -0
- package/skills/design/simple/DESIGN.md +55 -0
- package/skills/design/simple/SKILL.md +83 -0
- package/skills/design/sketch/DESIGN.md +55 -0
- package/skills/design/sketch/SKILL.md +81 -0
- package/skills/design/skeumorphism/DESIGN.md +55 -0
- package/skills/design/skeumorphism/SKILL.md +97 -0
- package/skills/design/slack-gif-creator-playbook/SKILL.md +48 -0
- package/skills/design/sleek/DESIGN.md +55 -0
- package/skills/design/sleek/SKILL.md +83 -0
- package/skills/design/slides-grid-global-playbook/SKILL.md +65 -0
- package/skills/design/slides-grid-global-playbook/example.html +117 -0
- package/skills/design/slides-grid-global-sample-worked-sample/SKILL.md +34 -0
- package/skills/design/slides-grid-global-sample-worked-sample/example.html +117 -0
- package/skills/design/slides-guizang-magazine-playbook/SKILL.md +51 -0
- package/skills/design/slides-guizang-magazine-playbook/example.html +92 -0
- package/skills/design/slides-guizang-magazine-sample-worked-sample/SKILL.md +31 -0
- package/skills/design/slides-guizang-magazine-sample-worked-sample/example.html +92 -0
- package/skills/design/slides-keynote-playbook/SKILL.md +32 -0
- package/skills/design/slides-keynote-playbook/example.html +130 -0
- package/skills/design/slides-keynote-sample-worked-sample/SKILL.md +44 -0
- package/skills/design/slides-keynote-sample-worked-sample/example.html +130 -0
- package/skills/design/slides-live-canvas-workspace-playbook/SKILL.md +55 -0
- package/skills/design/slides-live-canvas-workspace-playbook/example.html +51 -0
- package/skills/design/slides-live-canvas-workspace-sample-worked-sample/SKILL.md +25 -0
- package/skills/design/slides-live-canvas-workspace-sample-worked-sample/example.html +51 -0
- package/skills/design/slides-playbook/SKILL.md +48 -0
- package/skills/design/social-reddit-tile-playbook/SKILL.md +54 -0
- package/skills/design/social-reddit-tile-playbook/example.html +56 -0
- package/skills/design/social-reddit-tile-sample-worked-sample/SKILL.md +27 -0
- package/skills/design/social-reddit-tile-sample-worked-sample/example.html +56 -0
- package/skills/design/social-spotify-tile-playbook/SKILL.md +53 -0
- package/skills/design/social-spotify-tile-playbook/example.html +70 -0
- package/skills/design/social-spotify-tile-sample-worked-sample/SKILL.md +29 -0
- package/skills/design/social-spotify-tile-sample-worked-sample/example.html +70 -0
- package/skills/design/social-x-post-tile-playbook/SKILL.md +51 -0
- package/skills/design/social-x-post-tile-playbook/example.html +53 -0
- package/skills/design/social-x-post-tile-sample-worked-sample/SKILL.md +30 -0
- package/skills/design/social-x-post-tile-sample-worked-sample/example.html +53 -0
- package/skills/design/sora-playbook/SKILL.md +48 -0
- package/skills/design/spacious/DESIGN.md +55 -0
- package/skills/design/spacious/SKILL.md +89 -0
- package/skills/design/speech-playbook/SKILL.md +48 -0
- package/skills/design/stitch-composition-taste-playbook/LICENSE +21 -0
- package/skills/design/stitch-composition-taste-playbook/SKILL.md +200 -0
- package/skills/design/stitch-loop-playbook/SKILL.md +48 -0
- package/skills/design/stitch-playbook-composition-journal/LICENSE +21 -0
- package/skills/design/stitch-playbook-composition-journal/SKILL.md +141 -0
- package/skills/design/story-publication-playbook/SKILL.md +32 -0
- package/skills/design/story-publication-playbook/example.html +81 -0
- package/skills/design/story-publication-sample-worked-sample/SKILL.md +57 -0
- package/skills/design/story-publication-sample-worked-sample/example.html +81 -0
- package/skills/design/storytelling/DESIGN.md +55 -0
- package/skills/design/storytelling/SKILL.md +83 -0
- package/skills/design/swiftui-composition-playbook/SKILL.md +48 -0
- package/skills/design/terracotta/DESIGN.md +55 -0
- package/skills/design/terracotta/SKILL.md +81 -0
- package/skills/design/tetris/DESIGN.md +55 -0
- package/skills/design/tetris/SKILL.md +83 -0
- package/skills/design/theme-factory/LICENSE.txt +202 -0
- package/skills/design/theme-factory/SKILL.md +59 -0
- package/skills/design/theme-factory/theme-showcase.pdf +0 -0
- package/skills/design/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/design/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/design/theme-factory/themes/desert-rose.md +19 -0
- package/skills/design/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/design/theme-factory/themes/golden-hour.md +19 -0
- package/skills/design/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/design/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/design/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/design/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/design/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/design/theme-factory-playbook/SKILL.md +48 -0
- package/skills/design/threejs-playbook/SKILL.md +48 -0
- package/skills/design/tile-rednote-playbook/SKILL.md +31 -0
- package/skills/design/tile-rednote-playbook/example.html +98 -0
- package/skills/design/tile-rednote-sample-worked-sample/SKILL.md +46 -0
- package/skills/design/tile-rednote-sample-worked-sample/example.html +98 -0
- package/skills/design/tile-x-playbook/SKILL.md +31 -0
- package/skills/design/tile-x-playbook/example.html +58 -0
- package/skills/design/tile-x-sample-worked-sample/SKILL.md +24 -0
- package/skills/design/tile-x-sample-worked-sample/example.html +58 -0
- package/skills/design/ui-playbooks-playbook/SKILL.md +48 -0
- package/skills/design/ui-ux-principles/SKILL.md +58 -0
- package/skills/design/ui-ux-pro-max-playbook/SKILL.md +63 -0
- package/skills/design/uupm-banner-design/SKILL.md +196 -0
- package/skills/design/uupm-banner-design/references/banner-sizes-and-styles.md +118 -0
- package/skills/design/uupm-brand/SKILL.md +97 -0
- package/skills/design/uupm-brand/references/approval-checklist.md +169 -0
- package/skills/design/uupm-brand/references/asset-organization.md +157 -0
- package/skills/design/uupm-brand/references/brand-guideline-template.md +140 -0
- package/skills/design/uupm-brand/references/color-palette-management.md +186 -0
- package/skills/design/uupm-brand/references/consistency-checklist.md +94 -0
- package/skills/design/uupm-brand/references/logo-usage-rules.md +185 -0
- package/skills/design/uupm-brand/references/messaging-framework.md +85 -0
- package/skills/design/uupm-brand/references/typography-specifications.md +214 -0
- package/skills/design/uupm-brand/references/update.md +118 -0
- package/skills/design/uupm-brand/references/visual-identity.md +96 -0
- package/skills/design/uupm-brand/references/voice-framework.md +88 -0
- package/skills/design/uupm-brand/scripts/extract-colors.cjs +341 -0
- package/skills/design/uupm-brand/scripts/inject-brand-context.cjs +349 -0
- package/skills/design/uupm-brand/scripts/sync-brand-to-tokens.cjs +266 -0
- package/skills/design/uupm-brand/scripts/validate-asset.cjs +387 -0
- package/skills/design/uupm-brand/templates/brand-guidelines-starter.md +275 -0
- package/skills/design/uupm-design/SKILL.md +313 -0
- package/skills/design/uupm-design/data/cip/deliverables.csv +51 -0
- package/skills/design/uupm-design/data/cip/industries.csv +21 -0
- package/skills/design/uupm-design/data/cip/mockup-contexts.csv +21 -0
- package/skills/design/uupm-design/data/cip/styles.csv +21 -0
- package/skills/design/uupm-design/data/icon/styles.csv +16 -0
- package/skills/design/uupm-design/data/logo/colors.csv +56 -0
- package/skills/design/uupm-design/data/logo/industries.csv +56 -0
- package/skills/design/uupm-design/data/logo/styles.csv +56 -0
- package/skills/design/uupm-design/references/banner-sizes-and-styles.md +118 -0
- package/skills/design/uupm-design/references/cip-deliverable-guide.md +95 -0
- package/skills/design/uupm-design/references/cip-design.md +121 -0
- package/skills/design/uupm-design/references/cip-prompt-engineering.md +84 -0
- package/skills/design/uupm-design/references/cip-style-guide.md +68 -0
- package/skills/design/uupm-design/references/design-routing.md +207 -0
- package/skills/design/uupm-design/references/icon-design.md +122 -0
- package/skills/design/uupm-design/references/logo-color-psychology.md +101 -0
- package/skills/design/uupm-design/references/logo-design.md +92 -0
- package/skills/design/uupm-design/references/logo-prompt-engineering.md +158 -0
- package/skills/design/uupm-design/references/logo-style-guide.md +109 -0
- package/skills/design/uupm-design/references/slides-copywriting-formulas.md +84 -0
- package/skills/design/uupm-design/references/slides-create.md +4 -0
- package/skills/design/uupm-design/references/slides-html-template.md +295 -0
- package/skills/design/uupm-design/references/slides-layout-patterns.md +137 -0
- package/skills/design/uupm-design/references/slides-strategies.md +94 -0
- package/skills/design/uupm-design/references/slides.md +42 -0
- package/skills/design/uupm-design/references/social-photos-design.md +329 -0
- package/skills/design/uupm-design/scripts/cip/core.py +215 -0
- package/skills/design/uupm-design/scripts/cip/generate.py +484 -0
- package/skills/design/uupm-design/scripts/cip/render-html.py +424 -0
- package/skills/design/uupm-design/scripts/cip/search.py +127 -0
- package/skills/design/uupm-design/scripts/icon/generate.py +487 -0
- package/skills/design/uupm-design/scripts/logo/core.py +175 -0
- package/skills/design/uupm-design/scripts/logo/generate.py +362 -0
- package/skills/design/uupm-design/scripts/logo/search.py +114 -0
- package/skills/design/uupm-design-system/SKILL.md +244 -0
- package/skills/design/uupm-design-system/data/slide-backgrounds.csv +11 -0
- package/skills/design/uupm-design-system/data/slide-charts.csv +26 -0
- package/skills/design/uupm-design-system/data/slide-color-logic.csv +14 -0
- package/skills/design/uupm-design-system/data/slide-copy.csv +26 -0
- package/skills/design/uupm-design-system/data/slide-layout-logic.csv +16 -0
- package/skills/design/uupm-design-system/data/slide-layouts.csv +26 -0
- package/skills/design/uupm-design-system/data/slide-strategies.csv +16 -0
- package/skills/design/uupm-design-system/data/slide-typography.csv +15 -0
- package/skills/design/uupm-design-system/references/component-specs.md +236 -0
- package/skills/design/uupm-design-system/references/component-tokens.md +214 -0
- package/skills/design/uupm-design-system/references/primitive-tokens.md +203 -0
- package/skills/design/uupm-design-system/references/semantic-tokens.md +215 -0
- package/skills/design/uupm-design-system/references/states-and-variants.md +241 -0
- package/skills/design/uupm-design-system/references/tailwind-integration.md +251 -0
- package/skills/design/uupm-design-system/references/token-architecture.md +224 -0
- package/skills/design/uupm-design-system/scripts/embed-tokens.cjs +99 -0
- package/skills/design/uupm-design-system/scripts/fetch-background.py +317 -0
- package/skills/design/uupm-design-system/scripts/generate-slide.py +770 -0
- package/skills/design/uupm-design-system/scripts/generate-tokens.cjs +205 -0
- package/skills/design/uupm-design-system/scripts/html-token-validator.py +327 -0
- package/skills/design/uupm-design-system/scripts/search-slides.py +218 -0
- package/skills/design/uupm-design-system/scripts/slide-token-validator.py +35 -0
- package/skills/design/uupm-design-system/scripts/slide_search_core.py +453 -0
- package/skills/design/uupm-design-system/scripts/validate-tokens.cjs +251 -0
- package/skills/design/uupm-design-system/templates/design-tokens-starter.json +143 -0
- package/skills/design/uupm-slides/SKILL.md +40 -0
- package/skills/design/uupm-slides/references/copywriting-formulas.md +84 -0
- package/skills/design/uupm-slides/references/create.md +4 -0
- package/skills/design/uupm-slides/references/html-template.md +295 -0
- package/skills/design/uupm-slides/references/layout-patterns.md +137 -0
- package/skills/design/uupm-slides/references/slide-strategies.md +94 -0
- package/skills/design/uupm-ui-styling/LICENSE.txt +202 -0
- package/skills/design/uupm-ui-styling/SKILL.md +324 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/design/uupm-ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/design/uupm-ui-styling/references/canvas-design-system.md +320 -0
- package/skills/design/uupm-ui-styling/references/shadcn-accessibility.md +471 -0
- package/skills/design/uupm-ui-styling/references/shadcn-components.md +424 -0
- package/skills/design/uupm-ui-styling/references/shadcn-theming.md +373 -0
- package/skills/design/uupm-ui-styling/references/tailwind-customization.md +483 -0
- package/skills/design/uupm-ui-styling/references/tailwind-responsive.md +382 -0
- package/skills/design/uupm-ui-styling/references/tailwind-utilities.md +455 -0
- package/skills/design/uupm-ui-styling/scripts/.coverage +0 -0
- package/skills/design/uupm-ui-styling/scripts/requirements.txt +17 -0
- package/skills/design/uupm-ui-styling/scripts/shadcn_add.py +308 -0
- package/skills/design/uupm-ui-styling/scripts/tailwind_config_gen.py +473 -0
- package/skills/design/uupm-ui-styling/scripts/tests/coverage-ui.json +1 -0
- package/skills/design/uupm-ui-styling/scripts/tests/requirements.txt +3 -0
- package/skills/design/uupm-ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/skills/design/uupm-ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
- package/skills/design/uupm-ui-ux-pro-max/SKILL.md +661 -0
- package/skills/design/uupm-ui-ux-pro-max/data +1 -0
- package/skills/design/uupm-ui-ux-pro-max/scripts +1 -0
- package/skills/design/venice-audio-playbook/SKILL.md +48 -0
- package/skills/design/venice-audio-speech-playbook/SKILL.md +48 -0
- package/skills/design/venice-motion-playbook/SKILL.md +48 -0
- package/skills/design/venice-visual-compose-playbook/SKILL.md +48 -0
- package/skills/design/venice-visual-edit-playbook/SKILL.md +48 -0
- package/skills/design/vfx-text-cursor-playbook/SKILL.md +49 -0
- package/skills/design/vfx-text-cursor-playbook/example.html +65 -0
- package/skills/design/vfx-text-cursor-sample-worked-sample/SKILL.md +31 -0
- package/skills/design/vfx-text-cursor-sample-worked-sample/example.html +65 -0
- package/skills/design/vibrant/DESIGN.md +55 -0
- package/skills/design/vibrant/SKILL.md +83 -0
- package/skills/design/vintage/DESIGN.md +55 -0
- package/skills/design/vintage/SKILL.md +83 -0
- package/skills/design/visual-enhancer-playbook/SKILL.md +48 -0
- package/skills/design/visual-to-code-playbook/LICENSE +21 -0
- package/skills/design/visual-to-code-playbook/SKILL.md +1245 -0
- package/skills/design/web-composition-standards-playbook/SKILL.md +48 -0
- package/skills/design/web-deliverables-assembler-playbook/SKILL.md +48 -0
- package/skills/design/word-playbook/SKILL.md +48 -0
- package/skills/design/workspace-composition-playbook/SKILL.md +48 -0
- package/skills/design/wpds-playbook/SKILL.md +48 -0
- package/skills/design/youtube-clipper-playbook/SKILL.md +48 -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/front-end/canvas-design/LICENSE.txt +202 -0
- package/skills/front-end/canvas-design/SKILL.md +130 -0
- package/skills/front-end/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/front-end/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/front-end/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/front-end/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/front-end/claude-api/LICENSE.txt +202 -0
- package/skills/front-end/claude-api/SKILL.md +356 -0
- package/skills/front-end/claude-api/csharp/claude-api.md +447 -0
- package/skills/front-end/claude-api/curl/examples.md +216 -0
- package/skills/front-end/claude-api/curl/managed-agents.md +338 -0
- package/skills/front-end/claude-api/go/claude-api.md +440 -0
- package/skills/front-end/claude-api/go/managed-agents/README.md +561 -0
- package/skills/front-end/claude-api/java/claude-api.md +461 -0
- package/skills/front-end/claude-api/java/managed-agents/README.md +442 -0
- package/skills/front-end/claude-api/php/claude-api.md +402 -0
- package/skills/front-end/claude-api/php/managed-agents/README.md +435 -0
- package/skills/front-end/claude-api/python/claude-api/README.md +536 -0
- package/skills/front-end/claude-api/python/claude-api/batches.md +198 -0
- package/skills/front-end/claude-api/python/claude-api/files-api.md +170 -0
- package/skills/front-end/claude-api/python/claude-api/streaming.md +179 -0
- package/skills/front-end/claude-api/python/claude-api/tool-use.md +590 -0
- package/skills/front-end/claude-api/python/managed-agents/README.md +334 -0
- package/skills/front-end/claude-api/ruby/claude-api.md +140 -0
- package/skills/front-end/claude-api/ruby/managed-agents/README.md +389 -0
- package/skills/front-end/claude-api/shared/agent-design.md +101 -0
- package/skills/front-end/claude-api/shared/anthropic-cli.md +246 -0
- package/skills/front-end/claude-api/shared/claude-platform-on-aws.md +59 -0
- package/skills/front-end/claude-api/shared/error-codes.md +233 -0
- package/skills/front-end/claude-api/shared/live-sources.md +143 -0
- package/skills/front-end/claude-api/shared/managed-agents-api-reference.md +422 -0
- package/skills/front-end/claude-api/shared/managed-agents-client-patterns.md +211 -0
- package/skills/front-end/claude-api/shared/managed-agents-core.md +252 -0
- package/skills/front-end/claude-api/shared/managed-agents-environments.md +219 -0
- package/skills/front-end/claude-api/shared/managed-agents-events.md +220 -0
- package/skills/front-end/claude-api/shared/managed-agents-memory.md +197 -0
- package/skills/front-end/claude-api/shared/managed-agents-multiagent.md +99 -0
- package/skills/front-end/claude-api/shared/managed-agents-onboarding.md +144 -0
- package/skills/front-end/claude-api/shared/managed-agents-outcomes.md +106 -0
- package/skills/front-end/claude-api/shared/managed-agents-overview.md +71 -0
- package/skills/front-end/claude-api/shared/managed-agents-scheduled-deployments.md +144 -0
- package/skills/front-end/claude-api/shared/managed-agents-self-hosted-sandboxes.md +174 -0
- package/skills/front-end/claude-api/shared/managed-agents-tools.md +358 -0
- package/skills/front-end/claude-api/shared/managed-agents-webhooks.md +110 -0
- package/skills/front-end/claude-api/shared/model-migration.md +1135 -0
- package/skills/front-end/claude-api/shared/models.md +132 -0
- package/skills/front-end/claude-api/shared/prompt-caching.md +223 -0
- package/skills/front-end/claude-api/shared/token-counting.md +56 -0
- package/skills/front-end/claude-api/shared/tool-use-concepts.md +347 -0
- package/skills/front-end/claude-api/typescript/claude-api/README.md +372 -0
- package/skills/front-end/claude-api/typescript/claude-api/batches.md +106 -0
- package/skills/front-end/claude-api/typescript/claude-api/files-api.md +98 -0
- package/skills/front-end/claude-api/typescript/claude-api/streaming.md +178 -0
- package/skills/front-end/claude-api/typescript/claude-api/tool-use.md +527 -0
- package/skills/front-end/claude-api/typescript/managed-agents/README.md +357 -0
- package/skills/front-end/doc-coauthoring/SKILL.md +375 -0
- package/skills/front-end/docx/LICENSE.txt +30 -0
- package/skills/front-end/docx/SKILL.md +590 -0
- package/skills/front-end/docx/scripts/__init__.py +1 -0
- package/skills/front-end/docx/scripts/accept_changes.py +135 -0
- package/skills/front-end/docx/scripts/comment.py +318 -0
- package/skills/front-end/docx/scripts/office/helpers/__init__.py +0 -0
- package/skills/front-end/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/front-end/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/front-end/docx/scripts/office/pack.py +159 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/front-end/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/front-end/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/front-end/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/front-end/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/front-end/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/front-end/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/front-end/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/front-end/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/front-end/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/front-end/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/front-end/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/front-end/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/front-end/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/front-end/docx/scripts/office/soffice.py +183 -0
- package/skills/front-end/docx/scripts/office/unpack.py +132 -0
- package/skills/front-end/docx/scripts/office/validate.py +111 -0
- package/skills/front-end/docx/scripts/office/validators/__init__.py +15 -0
- package/skills/front-end/docx/scripts/office/validators/base.py +847 -0
- package/skills/front-end/docx/scripts/office/validators/docx.py +446 -0
- package/skills/front-end/docx/scripts/office/validators/pptx.py +275 -0
- package/skills/front-end/docx/scripts/office/validators/redlining.py +247 -0
- package/skills/front-end/docx/scripts/templates/comments.xml +3 -0
- package/skills/front-end/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/front-end/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/front-end/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/front-end/docx/scripts/templates/people.xml +3 -0
- package/skills/front-end/frontend-design/LICENSE.txt +177 -0
- package/skills/front-end/frontend-design/SKILL.md +55 -0
- package/skills/front-end/frontend-slides/SKILL.md +380 -0
- package/skills/front-end/frontend-slides/STYLE_PRESETS.md +346 -0
- package/skills/front-end/frontend-slides/animation-patterns.md +110 -0
- package/skills/front-end/frontend-slides/bold-template-pack/README.md +77 -0
- package/skills/front-end/frontend-slides/bold-template-pack/deck-stage.js +619 -0
- package/skills/front-end/frontend-slides/bold-template-pack/selection-index.json +858 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/8-bit-orbit/design.md +573 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/8-bit-orbit/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/biennale-yellow/design.md +579 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/biennale-yellow/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/block-frame/design.md +609 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/block-frame/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/blue-professional/design.md +712 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/blue-professional/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/bold-poster/design.md +713 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/bold-poster/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/broadside/design.md +504 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/broadside/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/capsule/design.md +569 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/capsule/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/cartesian/design.md +524 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/cartesian/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/cobalt-grid/design.md +564 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/cobalt-grid/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/coral/design.md +615 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/coral/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/creative-mode/design.md +566 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/creative-mode/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/daisy-days/design.md +510 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/daisy-days/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/editorial-forest/design.md +508 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/editorial-forest/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/editorial-tri-tone/design.md +601 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/editorial-tri-tone/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/emerald-editorial/design.md +613 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/emerald-editorial/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/grove/design.md +570 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/grove/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/long-table/design.md +594 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/long-table/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/mat/design.md +474 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/mat/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/monochrome/design.md +493 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/monochrome/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/neo-grid-bold/design.md +564 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/neo-grid-bold/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/peoples-platform/design.md +701 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/peoples-platform/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/pin-and-paper/design.md +641 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/pin-and-paper/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/pink-script/design.md +673 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/pink-script/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/playful/design.md +491 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/playful/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/raw-grid/design.md +487 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/raw-grid/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/retro-windows/design.md +578 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/retro-windows/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/retro-zine/design.md +569 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/retro-zine/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/sakura-chroma/design.md +627 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/sakura-chroma/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/scatterbrain/design.md +575 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/scatterbrain/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/signal/design.md +528 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/signal/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/soft-editorial/design.md +626 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/soft-editorial/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/stencil-tablet/design.md +678 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/stencil-tablet/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/studio/design.md +497 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/studio/preview.md +55 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/vellum/design.md +547 -0
- package/skills/front-end/frontend-slides/bold-template-pack/templates/vellum/preview.md +55 -0
- package/skills/front-end/frontend-slides/html-template.md +350 -0
- package/skills/front-end/frontend-slides/scripts/deploy.sh +218 -0
- package/skills/front-end/frontend-slides/scripts/export-pdf.sh +418 -0
- package/skills/front-end/frontend-slides/scripts/extract-pptx.py +96 -0
- package/skills/front-end/frontend-slides/viewport-base.css +133 -0
- package/skills/front-end/internal-comms/LICENSE.txt +202 -0
- package/skills/front-end/internal-comms/SKILL.md +32 -0
- package/skills/front-end/internal-comms/examples/3p-updates.md +47 -0
- package/skills/front-end/internal-comms/examples/company-newsletter.md +65 -0
- package/skills/front-end/internal-comms/examples/faq-answers.md +30 -0
- package/skills/front-end/internal-comms/examples/general-comms.md +16 -0
- package/skills/front-end/mcp-builder/LICENSE.txt +202 -0
- package/skills/front-end/mcp-builder/SKILL.md +236 -0
- package/skills/front-end/mcp-builder/reference/evaluation.md +602 -0
- package/skills/front-end/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/front-end/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/front-end/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/front-end/mcp-builder/scripts/connections.py +151 -0
- package/skills/front-end/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/front-end/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/front-end/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/front-end/pdf/LICENSE.txt +30 -0
- package/skills/front-end/pdf/SKILL.md +314 -0
- package/skills/front-end/pdf/forms.md +294 -0
- package/skills/front-end/pdf/reference.md +612 -0
- package/skills/front-end/pdf/scripts/check_bounding_boxes.py +65 -0
- package/skills/front-end/pdf/scripts/check_fillable_fields.py +11 -0
- package/skills/front-end/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/skills/front-end/pdf/scripts/create_validation_image.py +37 -0
- package/skills/front-end/pdf/scripts/extract_form_field_info.py +122 -0
- package/skills/front-end/pdf/scripts/extract_form_structure.py +115 -0
- package/skills/front-end/pdf/scripts/fill_fillable_fields.py +98 -0
- package/skills/front-end/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/skills/front-end/pptx/LICENSE.txt +30 -0
- package/skills/front-end/pptx/SKILL.md +232 -0
- package/skills/front-end/pptx/editing.md +205 -0
- package/skills/front-end/pptx/pptxgenjs.md +420 -0
- package/skills/front-end/pptx/scripts/__init__.py +0 -0
- package/skills/front-end/pptx/scripts/add_slide.py +195 -0
- package/skills/front-end/pptx/scripts/clean.py +286 -0
- package/skills/front-end/pptx/scripts/office/helpers/__init__.py +0 -0
- package/skills/front-end/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/front-end/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/front-end/pptx/scripts/office/pack.py +159 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/front-end/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/front-end/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/front-end/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/front-end/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/front-end/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/front-end/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/front-end/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/front-end/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/front-end/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/front-end/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/front-end/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/front-end/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/front-end/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/front-end/pptx/scripts/office/soffice.py +183 -0
- package/skills/front-end/pptx/scripts/office/unpack.py +132 -0
- package/skills/front-end/pptx/scripts/office/validate.py +111 -0
- package/skills/front-end/pptx/scripts/office/validators/__init__.py +15 -0
- package/skills/front-end/pptx/scripts/office/validators/base.py +847 -0
- package/skills/front-end/pptx/scripts/office/validators/docx.py +446 -0
- package/skills/front-end/pptx/scripts/office/validators/pptx.py +275 -0
- package/skills/front-end/pptx/scripts/office/validators/redlining.py +247 -0
- package/skills/front-end/pptx/scripts/thumbnail.py +289 -0
- package/skills/front-end/skill-creator/LICENSE.txt +202 -0
- package/skills/front-end/skill-creator/SKILL.md +485 -0
- package/skills/front-end/skill-creator/agents/analyzer.md +274 -0
- package/skills/front-end/skill-creator/agents/comparator.md +202 -0
- package/skills/front-end/skill-creator/agents/grader.md +223 -0
- package/skills/front-end/skill-creator/assets/eval_review.html +146 -0
- package/skills/front-end/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/front-end/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/front-end/skill-creator/references/schemas.md +430 -0
- package/skills/front-end/skill-creator/scripts/__init__.py +0 -0
- package/skills/front-end/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/front-end/skill-creator/scripts/generate_report.py +326 -0
- package/skills/front-end/skill-creator/scripts/improve_description.py +247 -0
- package/skills/front-end/skill-creator/scripts/package_skill.py +136 -0
- package/skills/front-end/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/front-end/skill-creator/scripts/run_eval.py +310 -0
- package/skills/front-end/skill-creator/scripts/run_loop.py +328 -0
- package/skills/front-end/skill-creator/scripts/utils.py +47 -0
- package/skills/front-end/slack-gif-creator/LICENSE.txt +202 -0
- package/skills/front-end/slack-gif-creator/SKILL.md +254 -0
- package/skills/front-end/slack-gif-creator/core/easing.py +234 -0
- package/skills/front-end/slack-gif-creator/core/frame_composer.py +176 -0
- package/skills/front-end/slack-gif-creator/core/gif_builder.py +269 -0
- package/skills/front-end/slack-gif-creator/core/validators.py +136 -0
- package/skills/front-end/slack-gif-creator/requirements.txt +4 -0
- package/skills/front-end/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/front-end/web-artifacts-builder/SKILL.md +74 -0
- package/skills/front-end/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/front-end/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/front-end/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/front-end/webapp-testing/LICENSE.txt +202 -0
- package/skills/front-end/webapp-testing/SKILL.md +96 -0
- package/skills/front-end/webapp-testing/examples/console_logging.py +35 -0
- package/skills/front-end/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/front-end/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/front-end/webapp-testing/scripts/with_server.py +106 -0
- package/skills/front-end/xlsx/LICENSE.txt +30 -0
- package/skills/front-end/xlsx/SKILL.md +292 -0
- package/skills/front-end/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/skills/front-end/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/front-end/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/front-end/xlsx/scripts/office/pack.py +159 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/front-end/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/front-end/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/front-end/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/front-end/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/front-end/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/front-end/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/front-end/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/front-end/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/front-end/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/front-end/xlsx/scripts/office/soffice.py +183 -0
- package/skills/front-end/xlsx/scripts/office/unpack.py +132 -0
- package/skills/front-end/xlsx/scripts/office/validate.py +111 -0
- package/skills/front-end/xlsx/scripts/office/validators/__init__.py +15 -0
- package/skills/front-end/xlsx/scripts/office/validators/base.py +847 -0
- package/skills/front-end/xlsx/scripts/office/validators/docx.py +446 -0
- package/skills/front-end/xlsx/scripts/office/validators/pptx.py +275 -0
- package/skills/front-end/xlsx/scripts/office/validators/redlining.py +247 -0
- package/skills/front-end/xlsx/scripts/recalc.py +184 -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,294 @@
|
|
|
1
|
+
[← Índice](./README.md) · [🇬🇧 English](../en/TELEGRAM.md) · [✦ Constella](../../README.pt-BR.md)
|
|
2
|
+
|
|
3
|
+
# 🛰️ Telegram — a ponte de bolso para a sua constelação
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
Um único chat privado do Telegram vira uma ponte remota para a sua empresa de agentes: você conversa com a CEO (Ada), aprova planos, liga ou pausa a execução 24/7, dispara novos trabalhos e consulta a Base de Conhecimento — tudo pelo celular, enquanto a nave de controle continua rodando sem interface.
|
|
8
|
+
|
|
9
|
+
> Fonte da verdade: `src/server/telegram.ts` (ingest + comandos + callbacks), `src/lib/telegram.ts` (cliente da Bot API + formato do token), `bin/worker.mjs` (loop de long-poll), `src/app/api/telegram/poll/route.ts` (entrada exclusiva do worker), `src/server/actions/profile-actions.ts` (`connectTelegram`), `src/lib/scrub.ts` (limpeza de segredos).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 2. O que é
|
|
14
|
+
|
|
15
|
+
Um bot do Telegram bidirecional, restrito a **um** chat privado por workspace (allowlist). Mensagens recebidas chegam à agente CEO por um canal **isolado** (`telegram`), e um conjunto de comandos de barra + botões inline funcionam como um controle remoto real sobre o ciclo de trabalho. Saída: respostas da agente digitadas na aba Telegram dentro do app são espelhadas de volta para o celular, mantendo a conversa em uma única thread independentemente de onde você digitou.
|
|
16
|
+
|
|
17
|
+
## 3. Quando usar 🌠
|
|
18
|
+
|
|
19
|
+
- Você está longe da nave de controle mas quer **ver o status**, **aprovar um plano pendente** ou **ligar/desligar a execução 24/7**.
|
|
20
|
+
- Você quer **iniciar um novo trabalho** a partir de um briefing de uma linha (`/new …`) e deixar a CEO transformá-lo em specs · issues · TODOs.
|
|
21
|
+
- Você quer **perguntar à Base de Conhecimento** (`/kb …`) sem abrir o app.
|
|
22
|
+
- Você quer **conversar com a CEO** (Ada) como em qualquer DM, mas pelo celular.
|
|
23
|
+
|
|
24
|
+
O Telegram é opcional. É um plugin nativo e o toggle de integração (`settings.integrations.telegram`) vem **LIGADO** por padrão, mas nada acontece até você conectar um token de bot + chat id pela tela de Perfil. Se não estiver configurado, todo caminho do Telegram é um no-op honesto.
|
|
25
|
+
|
|
26
|
+
## 4. Como funciona 🌌
|
|
27
|
+
|
|
28
|
+
### Os dois processos
|
|
29
|
+
|
|
30
|
+
A Constella roda um processo **web** (Next.js) e um **worker** separado (`bin/worker.mjs`). O polling do Telegram vive no worker:
|
|
31
|
+
|
|
32
|
+
- O worker roda `telegramLoop()` — um loop infinito que faz POST em `BASE/api/telegram/poll` com o header privilegiado `x-worker-secret`.
|
|
33
|
+
- Essa rota (`src/app/api/telegram/poll/route.ts`) é **fail-closed**: exige `CONSTELLA_WORKER_SECRET` e retorna `401` se o header faltar/estiver errado. Em `401`, o worker recua por 30s (tratado como "não configurado / segredo divergente").
|
|
34
|
+
- A rota chama `pollTelegram()` (em `src/server/telegram.ts`), que faz o trabalho real, e devolve `{ ok, updates }`.
|
|
35
|
+
|
|
36
|
+
### Long-polling, por workspace
|
|
37
|
+
|
|
38
|
+
`pollTelegram()` itera por **todos** os workspaces. Para cada um, ela:
|
|
39
|
+
|
|
40
|
+
1. Pula o workspace se a integração estiver desligada (`integrationOn(settings.integrations, "telegram")` — veja `src/lib/integrations.ts`).
|
|
41
|
+
2. Carrega a config do cofre via `getTelegramConfig(ws.id)`; pula se ausente ou se o token estiver malformado.
|
|
42
|
+
3. Registra o menu de comandos `/` do bot **uma vez por bot por processo** (`tgSetMyCommands`, protegido por um set em memória `commandsRegistered`).
|
|
43
|
+
4. Chama `tgGetUpdates(token, offset)` — o `getUpdates` do Telegram com `timeout=25` (um **long-poll do lado do servidor** de ~25s) e `allowed_updates=["message","callback_query"]`.
|
|
44
|
+
5. Faz o ingest de cada update, avança o cursor (`maxId = update_id + 1`) e persiste de volta em `settings.telegram.offset`.
|
|
45
|
+
|
|
46
|
+
O worker deixa um intervalo breve de 1s entre os long-polls; em erro, recua por 5s.
|
|
47
|
+
|
|
48
|
+
### A allowlist 🕳️
|
|
49
|
+
|
|
50
|
+
Somente o **único chat privado registrado** pode comandar o bot. Em `ingest()`:
|
|
51
|
+
|
|
52
|
+
- O `chat.id` da mensagem deve ser igual a `cfg.chatId`, **e**
|
|
53
|
+
- se `m.from` existir, o `from.id` do remetente também deve ser igual a `cfg.chatId` (em um chat privado eles são o mesmo número).
|
|
54
|
+
|
|
55
|
+
Qualquer outra coisa é **ignorada silenciosamente**. A mesma checagem é reaplicada aos toques em botões inline em `handleCallback()`. Na conexão (`connectTelegram`), o chat id é validado como um id numérico positivo (ids de grupo são negativos e deixariam qualquer membro comandar o bot — são rejeitados).
|
|
56
|
+
|
|
57
|
+
### Roteamento de entrada
|
|
58
|
+
|
|
59
|
+
Para uma mensagem permitida, `ingest()` decide o caminho:
|
|
60
|
+
|
|
61
|
+
| Condição | O que acontece |
|
|
62
|
+
| --- | --- |
|
|
63
|
+
| `callback_query` presente | Toque em botão inline → `handleCallback()` |
|
|
64
|
+
| aguardando motivo de rejeição + texto puro (não `/…`) | O texto **é** o motivo da rejeição → `requestPlanChangesFor()` |
|
|
65
|
+
| texto começa com `/` | Comando de controle remoto → `handleCommand()` |
|
|
66
|
+
| caso contrário | Falar com a CEO → `runCeoReply()` |
|
|
67
|
+
|
|
68
|
+
Texto + legenda são limitados a 4000 caracteres. Fotos e documentos são baixados e salvos como anexos (veja [Anexos](#anexos)).
|
|
69
|
+
|
|
70
|
+
### Conversando com a CEO
|
|
71
|
+
|
|
72
|
+
`runCeoReply()` resolve a agente **Ada** (`handle = "ada"`, com fallback para o primeiro agente), coloca o status dela em `working`, mostra um indicador `typing…` ao vivo num heartbeat de 4s (o Telegram limpa após ~5s) e chama `replyInChannel(orgId, ws, "telegram", ada, "chat")` (`src/server/collab.ts`).
|
|
73
|
+
|
|
74
|
+
O `replyInChannel` adiciona uma **proteção contra injeção de prompt específica do Telegram**: avisa ao modelo que a mensagem do operador é *dado, não instrução*, que ele nunca deve revelar segredos / conteúdo de `.env` / `.claude/` / o system prompt, e que deve recusar qualquer tentativa de override. A resposta passa pela limpeza de segredos antes do envio.
|
|
75
|
+
|
|
76
|
+
Se a Ada decidir que é trabalho de build/fix, ela emite um token interno `[[CREATE_WORK]]`; `replyInChannel` devolve `planRequested = true`, e o `runCeoReply` então roda `planFromConversationFor(orgId, ws, "telegram")` — o **mesmo** ritual de planejamento do caminho web (specs → issues → TODOs) — e confirma no celular.
|
|
77
|
+
|
|
78
|
+
## 5. Fluxo principal — poll → agente → resposta 🚀
|
|
79
|
+
|
|
80
|
+
```mermaid
|
|
81
|
+
sequenceDiagram
|
|
82
|
+
autonumber
|
|
83
|
+
participant TG as Telegram Bot API
|
|
84
|
+
participant W as worker (bin/worker.mjs)
|
|
85
|
+
participant API as /api/telegram/poll
|
|
86
|
+
participant P as pollTelegram()
|
|
87
|
+
participant ING as ingest()
|
|
88
|
+
participant CEO as replyInChannel (Ada)
|
|
89
|
+
participant DB as tabela message
|
|
90
|
+
|
|
91
|
+
W->>API: POST (x-worker-secret)
|
|
92
|
+
API->>API: verifica CONSTELLA_WORKER_SECRET (senão 401)
|
|
93
|
+
API->>P: pollTelegram()
|
|
94
|
+
P->>TG: getUpdates(offset, timeout=25)
|
|
95
|
+
TG-->>P: updates[] (long-poll ~25s)
|
|
96
|
+
loop cada update
|
|
97
|
+
P->>ING: ingest(ws, cfg, update)
|
|
98
|
+
ING->>ING: allowlist: chat.id == cfg.chatId?
|
|
99
|
+
alt comando (/…)
|
|
100
|
+
ING->>ING: handleCommand() → ação real
|
|
101
|
+
else botão inline
|
|
102
|
+
ING->>ING: handleCallback() → ação real
|
|
103
|
+
else texto livre
|
|
104
|
+
ING->>DB: persiste turno do operador (channel=telegram)
|
|
105
|
+
ING->>CEO: replyInChannel(..., "chat")
|
|
106
|
+
CEO-->>ING: text + planRequested
|
|
107
|
+
ING->>TG: sendMessage(resposta limpa)
|
|
108
|
+
opt planRequested
|
|
109
|
+
ING->>ING: planFromConversationFor() (specs·issues·TODOs)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
P->>DB: salva settings.telegram.offset = maxId
|
|
114
|
+
P-->>W: { updates: N }
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## 6. Conceitos-chave ✦
|
|
118
|
+
|
|
119
|
+
- **Canal isolado.** O Telegram vive em seu próprio canal `telegram` — nunca `room` ou `dm:<handle>` — então a conversa do celular nunca vaza contexto para a team room ou DMs. (`TG_CHANNEL = "telegram"`.)
|
|
120
|
+
- **Credenciais no cofre.** O token do bot + chat id ficam criptografados no cofre sob o ref `telegram_bot` como JSON `{botToken, chatId, allowedName}`. Nunca são persistidos em settings em texto puro.
|
|
121
|
+
- **Cursor de offset.** `settings.telegram.offset` é o cursor de updates do Telegram; avançá-lo confirma os updates processados para que nunca sejam reentregues.
|
|
122
|
+
- **Espera pelo motivo da rejeição.** Um set em memória `awaitingReason` lembra que você tocou no botão **↩️ Reject**; sua próxima mensagem de texto puro vira o motivo. Em memória basta — um restart do servidor simplesmente descarta a espera pendente (toque de novo para repetir).
|
|
123
|
+
- **Registro do menu de comandos.** `commandsRegistered` garante que `setMyCommands` rode uma vez por bot por processo — até bots conectados antes desse recurso existir recebem o menu no próximo poll.
|
|
124
|
+
- **Limpeza de segredos.** Toda string de saída passa por `scrubSecrets(text, [cfg.botToken])` (`src/lib/scrub.ts`) — redigindo o token do bot, os segredos de ambiente padrão e formatos de credenciais de alta confiança (OpenAI/Anthropic `sk-…`, tokens do GitHub, chaves AWS, JWTs, chaves PEM, PATs `cn_…` da Constella e até outros tokens do Telegram).
|
|
125
|
+
|
|
126
|
+
## 7. Tabelas
|
|
127
|
+
|
|
128
|
+
### Comandos de barra do Telegram (`handleCommand`)
|
|
129
|
+
|
|
130
|
+
| Comando | Aliases | Ação |
|
|
131
|
+
| --- | --- | --- |
|
|
132
|
+
| `/help` | — | Mostra o texto de ajuda do controle remoto |
|
|
133
|
+
| `/status` | — | `planStatusFor(ws)` — status rápido |
|
|
134
|
+
| `/review` | — | `reviewSummaryFor(ws)` — resumo de plano / issues / tasks |
|
|
135
|
+
| `/tasks` | — | `tasksListFor(ws)` — o que está em andamento agora |
|
|
136
|
+
| `/approve` | — | `approvePlanFor()` — aprova o plano pendente, enfileira tasks |
|
|
137
|
+
| `/start_execution` | `/start`, `/run` | `approvePlanFor()` + `setAuto247For(true)` — aprova e roda 24/7 |
|
|
138
|
+
| `/pause` | `/stop` | `setAuto247For(false)` — pausa o 24/7 |
|
|
139
|
+
| `/resume` | — | `setAuto247For(true)` — retoma o 24/7 |
|
|
140
|
+
| `/reject <motivo>` | — | `requestPlanChangesFor()` — devolve o plano à CEO |
|
|
141
|
+
| `/new <briefing>` | `/new-work`, `/new-goal` | Injeta um turno do operador + roda a CEO → goal · specs · issues |
|
|
142
|
+
| `/cancel` | — | `cancelGoalFor()` no goal ativo mais recente — para a execução |
|
|
143
|
+
| `/archive` | — | `archiveGoalFor()` no goal ativo mais recente — zipa + arquiva |
|
|
144
|
+
| `/kb <pergunta>` | `/ask-kb` | `kbAnswer(orgId, q)` — pergunta à Base de Conhecimento |
|
|
145
|
+
| *(desconhecido)* | — | Responde "Unknown command" + ajuda |
|
|
146
|
+
|
|
147
|
+
> O menu `/` que o Telegram mostra é registrado a partir de `TG_BOT_COMMANDS` em `src/lib/telegram.ts` e deve espelhar `handleCommand`. O menu exibido omite os aliases.
|
|
148
|
+
|
|
149
|
+
### Callbacks de botão inline (`handleCallback`)
|
|
150
|
+
|
|
151
|
+
| `callback_data` | Ação | Toast | One-shot? |
|
|
152
|
+
| --- | --- | --- | --- |
|
|
153
|
+
| `approve_plan` | `approvePlanFor()` | ✅ Approved | sim (teclado removido) |
|
|
154
|
+
| `start_exec` | `approvePlanFor()` + `setAuto247For(true)` | ▶️ Executing | sim |
|
|
155
|
+
| `reject_plan` | `requestPlanChangesFor()` + arma a espera do motivo | ↩️ Sent back | sim |
|
|
156
|
+
| `review` | `reviewSummaryFor(ws)` | 📝 Review | não |
|
|
157
|
+
| `status` | `planStatusFor(ws)` | 📊 Status | não |
|
|
158
|
+
| `pause` | `setAuto247For(false)` | ⏸ Paused | não |
|
|
159
|
+
| `resume` | `setAuto247For(true)` | ▶️ Resumed | não |
|
|
160
|
+
| *(desconhecido)* | — | Unknown action | — |
|
|
161
|
+
|
|
162
|
+
Ações one-shot (`approve_plan` / `start_exec` / `reject_plan`) têm seu teclado inline removido via `tgClearButtons`, para que um segundo toque não as dispare de novo.
|
|
163
|
+
|
|
164
|
+
### Config do cofre & settings
|
|
165
|
+
|
|
166
|
+
| Onde | Chave / coluna | Significado |
|
|
167
|
+
| --- | --- | --- |
|
|
168
|
+
| cofre | ref `telegram_bot` | JSON criptografado `{botToken, chatId, allowedName}` |
|
|
169
|
+
| `workspace.settings` | `integrations.telegram` | toggle de integração (padrão `true`) |
|
|
170
|
+
| `workspace.settings` | `telegram.offset` | cursor do `getUpdates` do Telegram |
|
|
171
|
+
|
|
172
|
+
### Linhas em `message` escritas pelo Telegram
|
|
173
|
+
|
|
174
|
+
| Coluna | Valor no caminho do Telegram |
|
|
175
|
+
| --- | --- |
|
|
176
|
+
| `channel` | `"telegram"` (constante `TG_CHANNEL`) |
|
|
177
|
+
| `fromKind` | `"operator"` (entrada) / `"agent"` (respostas) |
|
|
178
|
+
| `fromHandle` | `"system"` para respostas de controle; handle da Ada para respostas da CEO |
|
|
179
|
+
| `text` | texto da mensagem ou `"(attachment)"`, limitado a 4000 |
|
|
180
|
+
| `attachments` | descritores de arquivos salvos, ou `null` |
|
|
181
|
+
|
|
182
|
+
## 8. Superfície da Bot API 🪐
|
|
183
|
+
|
|
184
|
+
Todas as chamadas HTTP passam por `src/lib/telegram.ts` contra `https://api.telegram.org`. Cada helper primeiro checa `isTelegramToken()` — formato do token `^\d{6,}:[A-Za-z0-9_-]{30,}$` — para que um valor malformado nunca consiga repontar a URL da requisição.
|
|
185
|
+
|
|
186
|
+
| Helper | Método da Bot API | Propósito |
|
|
187
|
+
| --- | --- | --- |
|
|
188
|
+
| `tgGetMe` | `getMe` | verifica o token → `@username` (na conexão) |
|
|
189
|
+
| `tgSetMyCommands` | `setMyCommands` | registra o menu de comandos `/` |
|
|
190
|
+
| `tgGetUpdates` | `getUpdates` | long-poll (`timeout=25`, `message` + `callback_query`) |
|
|
191
|
+
| `tgGetFile` | `getFile` + `/file/bot…` | baixa uma foto/documento → bytes |
|
|
192
|
+
| `tgSendChatAction` | `sendChatAction` | indicador `typing…` |
|
|
193
|
+
| `sendTelegramTo` | `sendMessage` | resposta em texto puro (sem Markdown) |
|
|
194
|
+
| `sendTelegram` | `sendMessage` | envio de notificação (Markdown) |
|
|
195
|
+
| `sendTelegramButtons` | `sendMessage` + `inline_keyboard` | mensagem com botões de controle remoto |
|
|
196
|
+
| `tgAnswerCallback` | `answerCallbackQuery` | confirma um toque de botão + toast opcional |
|
|
197
|
+
| `tgClearButtons` | `editMessageReplyMarkup` | remove um teclado one-shot |
|
|
198
|
+
|
|
199
|
+
Respostas da agente usam `sendTelegramTo` (texto puro, sem `parse_mode`) de propósito — conteúdo arbitrário (títulos de issues, código, nomes de workspace) nunca deve quebrar o envio nem ser interpretado como Markdown.
|
|
200
|
+
|
|
201
|
+
## 9. Anexos
|
|
202
|
+
|
|
203
|
+
Fotos e documentos em uma mensagem recebida são baixados e armazenados no workspace:
|
|
204
|
+
|
|
205
|
+
- Um id curto de download por mensagem é gerado (`uid().slice(0,8)`).
|
|
206
|
+
- Cada arquivo é buscado via `tgGetFile`, tem o nome sanitizado (`[^\w.\-]` → `_`, últimos 60 caracteres) e é gravado em `uploads/tg-<dlId>/<nome-seguro>` sob a **raiz da org** (`orgRoot(ws.orgId)`).
|
|
207
|
+
- Um descritor de anexo `{name, type, size, path}` é adicionado ao `message.attachments` persistido.
|
|
208
|
+
- Fotos usam o maior tamanho disponível; documentos mantêm seu `file_name` e `mime_type` originais.
|
|
209
|
+
|
|
210
|
+
Uma mensagem sem texto e sem nenhum anexo salvo é descartada.
|
|
211
|
+
|
|
212
|
+
## 10. Passo a passo — conectar & comandar 🛰️
|
|
213
|
+
|
|
214
|
+
### Conectar o bot (`connectTelegram`)
|
|
215
|
+
|
|
216
|
+
1. Crie um bot com o **@BotFather** do Telegram e copie o token.
|
|
217
|
+
2. Descubra seu **chat id numérico pessoal** (um chat privado — não um grupo).
|
|
218
|
+
3. Na tela de **Perfil** da Constella, informe o token + chat id (e um nome de exibição opcional).
|
|
219
|
+
4. `connectTelegram()` valida o formato do token, rejeita ids não-positivos/de grupo, chama `tgGetMe` para verificar que o token realmente funciona, então armazena `{botToken, chatId, allowedName}` no cofre e registra o menu `/` (`tgSetMyCommands`).
|
|
220
|
+
5. O worker pega isso no próximo poll — mande uma mensagem ao bot para confirmar.
|
|
221
|
+
|
|
222
|
+
> `telegramStatus()` alimenta o card no app e mascara o chat id (`12•••89`). `disconnectTelegram()` apaga o ref `telegram_bot` do cofre.
|
|
223
|
+
|
|
224
|
+
### Comandar pelo celular
|
|
225
|
+
|
|
226
|
+
```text
|
|
227
|
+
/status → status rápido
|
|
228
|
+
/review → resumo completo de plano / issues / tasks
|
|
229
|
+
/new uma página de cobrança com checkout
|
|
230
|
+
→ a CEO rascunha goal · specs · issues · TODOs
|
|
231
|
+
/approve → enfileira as tasks
|
|
232
|
+
/start_execution → aprova + 24/7 LIGADO
|
|
233
|
+
/pause /resume → liga/desliga o 24/7
|
|
234
|
+
/reject use Stripe e não PayPal→ devolve o plano com um motivo
|
|
235
|
+
/cancel /archive → para / arquiva o goal ativo
|
|
236
|
+
/kb como funciona a auth? → pergunta à Base de Conhecimento
|
|
237
|
+
só conversar normalmente → fala com a CEO (Ada)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Espelhamento (app → celular)
|
|
241
|
+
|
|
242
|
+
Quando você responde pela **aba Telegram dentro do app**, `src/server/chat.ts` chama `mirrorToTelegram(workspace.id, reply)`. Ele carrega a config do cofre e envia a resposta já limpa para o chat real — mantendo a conversa do bot numa única thread independentemente de onde você digitou.
|
|
243
|
+
|
|
244
|
+
## 11. Estados possíveis
|
|
245
|
+
|
|
246
|
+
| Estado | Sintoma | Causa |
|
|
247
|
+
| --- | --- | --- |
|
|
248
|
+
| **Não configurado** | Bot nunca responde; rota de poll retorna `401` e depois recua 30s | sem segredo `telegram_bot` no cofre |
|
|
249
|
+
| **Integração desligada** | Configurado mas ignorado | `settings.integrations.telegram = false` |
|
|
250
|
+
| **Conectado** | Respostas, comandos e botões funcionam | token válido + chat id correspondente |
|
|
251
|
+
| **Chat estranho** | Silêncio | id de remetente / chat ≠ `cfg.chatId` (ignorado silenciosamente) |
|
|
252
|
+
| **Aguardando motivo** | Próxima mensagem de texto registrada como motivo da rejeição | você tocou em **↩️ Reject** |
|
|
253
|
+
| **Typing…** | Indicador ao vivo enquanto a resposta é gerada | heartbeat de 4s em `runCeoReply` |
|
|
254
|
+
| **Worker fora do ar** | Nenhuma resposta | o processo worker não está rodando (veja [TEST_DEV](./TEST_DEV.md) / [ARCHITECTURE](./ARCHITECTURE.md)) |
|
|
255
|
+
|
|
256
|
+
## 12. Integrações relacionadas
|
|
257
|
+
|
|
258
|
+
- O caminho de resposta da CEO é o mesmo usado por [DM](./DM.md) e pela [TEAM_ROOM](./TEAM_ROOM.md) — o Telegram só o roda em seu canal isolado com uma proteção extra contra injeção.
|
|
259
|
+
- `/new` roda o ritual completo do [WORKFLOW](./WORKFLOW.md) (Goal → Spec → Issue → Plan → TODOs); veja [GOALS_SPECS_ISSUES](./GOALS_SPECS_ISSUES.md).
|
|
260
|
+
- `/kb` responde a partir da nebulosa de memória [KB_RAG](./KB_RAG.md).
|
|
261
|
+
- As mesmas ações de controle remoto são expostas programaticamente pela [PUBLIC_API](./PUBLIC_API.md) e pelo servidor [MCP](./MCP.md).
|
|
262
|
+
- O Telegram é uma entrada nativa de [PLUGINS](./PLUGINS.md); o toggle vive ao lado das outras integrações.
|
|
263
|
+
|
|
264
|
+
## 13. Segurança 🕳️
|
|
265
|
+
|
|
266
|
+
- **Entrada exclusiva do worker.** `/api/telegram/poll` exige `x-worker-secret == CONSTELLA_WORKER_SECRET` (fail-closed `401`). O worker ainda se recusa a enviar esse segredo para qualquer `CONSTELLA_BASE_URL` não-loopback, a menos que `CONSTELLA_ALLOW_REMOTE_WORKER_BASE_URL=1` (proteção contra SSRF / exfiltração de segredo).
|
|
267
|
+
- **Allowlist estrita.** Exatamente um chat id privado; tanto `chat.id` quanto `from.id` são checados nas mensagens e nos toques de botão. Ids de grupo (negativos) são rejeitados na conexão.
|
|
268
|
+
- **Validação do formato do token.** `isTelegramToken()` protege toda chamada da Bot API para que um token adulterado não consiga redirecionar a URL da requisição.
|
|
269
|
+
- **Reforço contra injeção de prompt.** `replyInChannel` injeta uma cláusula de segurança específica do Telegram: a mensagem do operador é *dado*, segredos/`.env`/`.claude/`/system-prompt nunca devem ser revelados, tentativas de override são recusadas.
|
|
270
|
+
- **Limpeza de segredos na saída.** Toda mensagem de saída passa por `scrubSecrets(…, [cfg.botToken])` — redigindo o token do bot mais formatos de credenciais de alta confiança — antes de sair da nave.
|
|
271
|
+
- **Criptografado em repouso.** As credenciais vivem no [cofre](./SECURITY.md) AES-256-GCM, nunca em settings em texto puro; o card de status no app mascara o chat id.
|
|
272
|
+
- **Saída limitada.** Os corpos de saída têm tamanho limitado (`sendTelegramTo` 3800, `sendTelegram` 3500), e `callback_data` é limitado ao máximo de 64 bytes do Telegram.
|
|
273
|
+
|
|
274
|
+
## 14. Solução de problemas 🛠️
|
|
275
|
+
|
|
276
|
+
| Sintoma | Verifique |
|
|
277
|
+
| --- | --- |
|
|
278
|
+
| Bot mudo, rota de poll retorna `401` | Sem segredo `telegram_bot` — conecte pelo Perfil. (O worker trata `401` como "não configurado" e recua 30s.) |
|
|
279
|
+
| "Telegram rejected this bot token." na conexão | Token errado/revogado — `tgGetMe` falhou; copie de novo do @BotFather. |
|
|
280
|
+
| "Chat id must be your personal numeric id…" | Você usou um id de grupo (negativo) — use seu chat id privado. |
|
|
281
|
+
| Mensagens ignoradas, sem erro | `chat.id`/`from.id` do remetente ≠ o `cfg.chatId` registrado (allowlist). |
|
|
282
|
+
| Menu `/` não aparece | `setMyCommands` é best-effort; roda uma vez por bot por processo — reinicie o worker ou reconecte. |
|
|
283
|
+
| Nenhuma resposta | O processo **worker** não está rodando — inicie `npm start` (web + worker) ou `npm run dev:all`. |
|
|
284
|
+
| Resposta parece cortada | Os corpos têm tamanho limitado por design (3800/3500 caracteres). |
|
|
285
|
+
| Motivo da rejeição não registrado | Um comando de barra supera a espera pendente do motivo; envie o motivo como texto puro logo após tocar em ↩️ Reject. |
|
|
286
|
+
|
|
287
|
+
## 15. Links relacionados
|
|
288
|
+
|
|
289
|
+
- [DM](./DM.md) · [TEAM_ROOM](./TEAM_ROOM.md) · [CHAT_COMMANDS](./CHAT_COMMANDS.md)
|
|
290
|
+
- [WORKFLOW](./WORKFLOW.md) · [GOALS_SPECS_ISSUES](./GOALS_SPECS_ISSUES.md)
|
|
291
|
+
- [KB_RAG](./KB_RAG.md) · [KB_AGENT](./KB_AGENT.md)
|
|
292
|
+
- [PUBLIC_API](./PUBLIC_API.md) · [MCP](./MCP.md) · [PLUGINS](./PLUGINS.md)
|
|
293
|
+
- [ARCHITECTURE](./ARCHITECTURE.md) · [AI_ARCHITECTURE](./AI_ARCHITECTURE.md) · [SECURITY](./SECURITY.md)
|
|
294
|
+
- [CONFIGURATION](./CONFIGURATION.md) · [TROUBLESHOOTING](./TROUBLESHOOTING.md) · [FAQ](./FAQ.md)
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
[← Índice](./README.md) · [🇬🇧 English](../en/TEST_DEV.md) · [✦ Constella](../../README.pt-BR.md)
|
|
2
|
+
|
|
3
|
+
# Test Dev 🛰️ — pilotando o produto antes do lançamento
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
O Test Dev sobe o **produto que os agentes estão construindo** (não a nave Constella em si), o dirige com um navegador headless e relata o que viu: erros de console, crashes de página, requisições que falharam, segredos vazados e um punhado de sondagens de segurança. Ele é ao mesmo tempo um **console do operador** (a tela `/test-dev`) e um **portão autônomo** que o loop de trabalho atravessa antes de uma tarefa ser marcada como `done`.
|
|
8
|
+
|
|
9
|
+
> Mapa estelar: o produto é uma pequena sonda em órbita. O Test Dev é a passagem de telemetria — pilotamos, observamos os instrumentos e só liberamos para a próxima etapa se nada crítico acender. Um boot que nunca alcança a órbita é `inconclusive`, nunca um falso `fail`.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Quando usar 🌌
|
|
14
|
+
|
|
15
|
+
- **Operador, sob demanda** — abra o módulo **Test Dev** (rota `/test-dev`) ou digite `/test-dev` na Team Room / em uma DM para rodar a validação contra o app em execução.
|
|
16
|
+
- **Autonomamente, como portão** — quando um agente termina uma tarefa de *código*, o loop de trabalho sobe o projeto (portão de boot) e, se houver servidor no ar, roda o Test Dev como um segundo portão antes da tarefa poder pousar em `done`.
|
|
17
|
+
- **Como parte da preparação de deploy** — `runDeployPipeline` chama `ensureBootable` em sua etapa `validateBuild`, reutilizando a mesma maquinaria do dev server (veja [PREPARE_DEPLOY.md](./PREPARE_DEPLOY.md)).
|
|
18
|
+
|
|
19
|
+
Use sempre que quiser um sinal *real* de que o app ainda inicia e renderiza — não um teste unitário, e sim um navegador de verdade batendo em rotas de verdade.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Como funciona 🪐
|
|
24
|
+
|
|
25
|
+
Dois módulos do servidor cooperam:
|
|
26
|
+
|
|
27
|
+
| Módulo | Arquivo | Responsabilidade |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| **Gerenciador do dev server** | `src/server/devserver.ts` | Detectar um projeto executável, instalar dependências uma vez, escolher uma porta livre, subir + supervisionar o dev server do próprio projeto, observar seu console. |
|
|
30
|
+
| **Harness de teste** | `src/server/test-harness.ts` | Dirigir o servidor em execução com Chromium headless (Playwright), coletar findings, rodar sondagens de segurança, capturar screenshot, calcular o veredito, persistir a execução, capturar para a KB. |
|
|
31
|
+
|
|
32
|
+
O dev server do projeto é um **processo filho de vida longa**, um por workspace, rastreado em memória num mapa `SERVERS` (`Map<workspaceId, DevServer>`). Ele *não* é o processo web/worker da Constella — é o app em construção. No reconcile de boot da Constella, `stopAllProjectServers()` mata todo servidor rastreado para que um restart não deixe nenhum órfão.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Fluxo principal 🌠
|
|
37
|
+
|
|
38
|
+
```mermaid
|
|
39
|
+
flowchart TD
|
|
40
|
+
A["runTestDev(workspaceId, orgId, opts)"] --> B["insere test_run (status: running)"]
|
|
41
|
+
B --> C{"serverUrl() no ar?"}
|
|
42
|
+
C -- "não, opts.noBoot" --> Z1["inconclusive — suba o dev server"]
|
|
43
|
+
C -- "não" --> D["startProjectServer()"]
|
|
44
|
+
D --> E{"running + url?"}
|
|
45
|
+
E -- "não" --> Z2["inconclusive — não subiu"]
|
|
46
|
+
E -- "sim" --> F
|
|
47
|
+
C -- "sim" --> F["deriva rotas (caller ou '/'), máx 8"]
|
|
48
|
+
F --> G{"import @playwright/test"}
|
|
49
|
+
G -- "ausente" --> Z3["inconclusive — Playwright indisponível"]
|
|
50
|
+
G -- "ok" --> H["chromium.launch headless"]
|
|
51
|
+
H -- "binário ausente" --> H2["ensureChromium() instala · tenta de novo"]
|
|
52
|
+
H2 -- "ainda falha" --> Z4["inconclusive — não conseguiu subir o chromium"]
|
|
53
|
+
H --> I["novo context 1280x800 · liga listeners console/pageerror/requestfailed"]
|
|
54
|
+
I --> J["para cada rota: goto · clica 1º botão · varre HTML por segredos · screenshot"]
|
|
55
|
+
J --> K["sondagens de segurança: /.env /.env.local /.git/config /config.json /admin /api"]
|
|
56
|
+
K --> L{"algum finding high-severity?"}
|
|
57
|
+
L -- "sim" --> M["veredito: fail"]
|
|
58
|
+
L -- "não" --> N["veredito: pass"]
|
|
59
|
+
M --> O["atualiza test_run · ingestKnowledge(type: test)"]
|
|
60
|
+
N --> O
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Lista de passos (o que `runTestDev` realmente faz)
|
|
64
|
+
|
|
65
|
+
1. **Abrir a execução** — insere uma linha `test_run` com `status: "running"`, `by` = `operator` (padrão) ou `agent`.
|
|
66
|
+
2. **Garantir um dev server** —
|
|
67
|
+
- Se já houver uma URL no ar, usa.
|
|
68
|
+
- Se não houver e `opts.noBoot` estiver setado (caminho do portão autônomo), retorna `inconclusive` imediatamente — o portão nunca auto-instala/sobe um projeto no meio de uma tarefa.
|
|
69
|
+
- Caso contrário, chama `startProjectServer()`; se não subir, retorna `inconclusive`.
|
|
70
|
+
- Se o servidor iniciou mas `serverStatus().status !== "running"` ainda, retorna `inconclusive` ("ainda subindo — tente de novo em instantes").
|
|
71
|
+
3. **Derivar rotas** — `opts.routes` fornecidas pelo chamador, senão `["/"]`, limitadas a **8** rotas.
|
|
72
|
+
4. **Subir o navegador** — `import("@playwright/test")` dinâmico. Se o import falhar → `inconclusive`. Se `chromium.launch()` lançar porque o binário do navegador não está instalado → `ensureChromium()` roda `npx playwright install chromium` (uma vez por processo, limite de 300s) e tenta de novo; se ainda falhar → `inconclusive`.
|
|
73
|
+
5. **Dirigir cada rota** — abre um context em **1280×800**, liga os listeners e, para cada rota: `page.goto(...)` (`domcontentloaded`, timeout 20s), registra um finding `high` em HTTP ≥ 500, espera 800ms, clica no primeiro `button` visível e habilitado para exercitar um fluxo, varre o HTML servido por segredos, captura screenshot em `.testdev/`.
|
|
74
|
+
6. **Sondagens de segurança** — `fetch` em cada caminho sensível (`redirect: "manual"`, timeout 4s); um `200` com conteúdo (qualquer caminho exceto `/api`) ou um match de segredo é um finding de segurança `high`.
|
|
75
|
+
7. **Veredito** — qualquer finding de severidade `high` ⇒ `fail`; caso contrário `pass`. Warnings / findings low nunca reprovam uma execução.
|
|
76
|
+
8. **Persistir + capturar** — atualiza a linha `test_run` (`status`, `summary`, `findings`, `finishedAt`) e `ingestKnowledge(type: "test")` para que o veredito vire KB durável.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Conceitos-chave ✦
|
|
81
|
+
|
|
82
|
+
### Detecção de stack (`detectProject`)
|
|
83
|
+
|
|
84
|
+
`detectProject(orgId)` varre a raiz do workspace **e** subdiretórios comuns (`packages`, `apps`, `app`, `web`, `client`, `frontend`, `backend`, `server`, `api`). Ele roda duas passagens:
|
|
85
|
+
|
|
86
|
+
- **Passagem 1 — Node sempre vence.** `detectNode(dir)` procura `package.json` com um script `dev`, `start` ou `serve` (nessa prioridade). O gerenciador de pacotes é inferido pelo lockfile: `pnpm-lock.yaml` → `pnpm`, `yarn.lock` → `yarn`, senão `npm`. A instalação só é sinalizada quando `node_modules` está ausente.
|
|
87
|
+
- **Passagem 2 — outros ecossistemas**, em ordem: Django (`manage.py`), FastAPI (`main.py` contendo `FastAPI(`) → `uvicorn`, `main.py` simples → `python main.py`, Go (`go.mod`) → `go run .`, Rust (`Cargo.toml`) → `cargo run`, estático (`server.js`) → `node server.js`.
|
|
88
|
+
|
|
89
|
+
| `ProjectKind` | Gatilho | Label | Etapa de install |
|
|
90
|
+
| --- | --- | --- | --- |
|
|
91
|
+
| `node` | `package.json` + dev/start/serve | `npm/pnpm/yarn <script>` | `<pm> install` se `node_modules` ausente |
|
|
92
|
+
| `python` (django) | `manage.py` | `django runserver` | `pip install -r requirements.txt` (uma vez, marker) |
|
|
93
|
+
| `python` (fastapi) | `main.py` com `FastAPI(` | `uvicorn` | idem |
|
|
94
|
+
| `python` (script) | `main.py` | `python main.py` | idem |
|
|
95
|
+
| `go` | `go.mod` | `go run` | — |
|
|
96
|
+
| `rust` | `Cargo.toml` | `cargo run` | — |
|
|
97
|
+
| `static` | `server.js` | `node server.js` | — |
|
|
98
|
+
|
|
99
|
+
### Faixa de portas 🛰️
|
|
100
|
+
|
|
101
|
+
`freePort(start = 4173, end = 4999)` percorre a faixa e retorna a primeira porta que faz bind em `127.0.0.1`. A faixa deliberadamente **evita a própria `:3000` da Constella**. A porta escolhida é exportada para o filho como `PORT`, e qualquer sentinela literal `$PORT` em `runArgs` é substituída antes do spawn. Env passado ao filho: `PORT`, `BROWSER=none`, `NODE_ENV=development`.
|
|
102
|
+
|
|
103
|
+
### Pré-checagem de toolchain
|
|
104
|
+
|
|
105
|
+
Para kinds não-Node e não-estáticos (`python`/`go`/`rust`), `toolAvailable(cmd)` roda `<cmd> --version` (cache de 60s) antes de subir. Um toolchain ausente falha **rápido e com clareza** em vez de uma espera morta de 30s. No portão de boot isso é tratado como "não dá para validar, não punir" — veja Estados possíveis.
|
|
106
|
+
|
|
107
|
+
### Detecção de "ready" + deadlines de boot
|
|
108
|
+
|
|
109
|
+
`push()` observa o stdout/stderr do filho; a primeira linha que casa com `/(ready|listening|localhost:|started server|compiled)/i` vira `status: "starting" → "running"`. Em paralelo, `waitReachable(url, deadline)` faz polling na porta. Os deadlines escalam por kind:
|
|
110
|
+
|
|
111
|
+
| Kind | Deadline de boot |
|
|
112
|
+
| --- | --- |
|
|
113
|
+
| `go`, `rust` (compilação) | 120 000 ms |
|
|
114
|
+
| `python` | 60 000 ms |
|
|
115
|
+
| `node` / `static` | 30 000 ms |
|
|
116
|
+
|
|
117
|
+
### Findings — tipos & severidades 🕳️
|
|
118
|
+
|
|
119
|
+
Um `Finding` é `{ severity, kind, route, message }`.
|
|
120
|
+
|
|
121
|
+
| `kind` | Origem | `severity` típica |
|
|
122
|
+
| --- | --- | --- |
|
|
123
|
+
| `console` | `page.on("console")` — `error` → high, `warning` → low | high / low |
|
|
124
|
+
| `pageerror` | `page.on("pageerror")` — exceção JS não capturada | high |
|
|
125
|
+
| `request` | `page.on("requestfailed")` (não-`ERR_ABORTED`), HTTP ≥ 500 no `goto`, ou navegação que falhou | med / high |
|
|
126
|
+
| `security` | match do regex de segredo no HTML servido, ou caminho sensível retornando `200` com conteúdo | high |
|
|
127
|
+
| `boot` | dev server / chromium não conseguiu iniciar | low |
|
|
128
|
+
| `fidelity` | **diff visual vs o design aprovado** — a rota rodando é pixel-diffada (no navegador, 1280×800) contra um baseline renderizado da tela promovida. Drift pequeno → `med`; estruturalmente errado (>50% diferente) → `high` | med / high |
|
|
129
|
+
|
|
130
|
+
**Fidelidade visual (quando um design static foi promovido).** Se o projeto tem um [design promovido](DESIGN.md) servido de `public/`, o harness captura um **baseline** único de cada tela aprovada e faz pixel-diff do app rodando contra ele. Enforça "o app rodando bate com o design": drift de dado real é nota, uma tela que não bate (>50%) **falha o gate**. A checagem é best-effort — nunca trava um projeto sem design promovido e nunca quebra um run.
|
|
131
|
+
|
|
132
|
+
O detector de segredos `SECRET_RE` casa chaves `sk-…`, IDs AWS `AKIA…`, cabeçalhos de chave privada PEM e literais `password: "…"` / `password='…'`. Ele é aplicado tanto ao HTML servido quanto aos corpos de resposta das sondagens.
|
|
133
|
+
|
|
134
|
+
### Sondagens de segurança
|
|
135
|
+
|
|
136
|
+
`SECURITY_PATHS = ["/.env", "/.env.local", "/.git/config", "/config.json", "/admin", "/api"]`. Cada um é buscado **apenas contra o dev server local do projeto** — nunca um host externo. Um `200` que retorna conteúdo (todo caminho exceto `/api`, que pode legitimamente ser um `200` roteável) é marcado como finding de segurança high-severity, assim como qualquer corpo de resposta que case com `SECRET_RE`.
|
|
137
|
+
|
|
138
|
+
### Lógica do veredito
|
|
139
|
+
|
|
140
|
+
```text
|
|
141
|
+
high = findings onde severity === "high"
|
|
142
|
+
status = high.length ? "fail" : "pass"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Somente findings **hard (high-severity)** bloqueiam. Warnings e notas de baixa severidade são registrados mas não reprovam a execução. Se o app não conseguir subir, o Playwright estiver ausente, ou o chromium não subir, o veredito é **`inconclusive`** — uma escolha de design deliberada para que o harness nunca produza um falso `fail` e nunca bloqueie uma tarefa por engano.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## A tabela `test_run` 🗄️
|
|
150
|
+
|
|
151
|
+
Definida em `src/db/schema.ts` (`sqliteTable("test_run", …)`):
|
|
152
|
+
|
|
153
|
+
| Coluna | Tipo | Notas |
|
|
154
|
+
| --- | --- | --- |
|
|
155
|
+
| `id` | text PK | UUID da execução |
|
|
156
|
+
| `workspaceId` | text → `workspace.id` | cascade delete; indexada (`test_run_ws_idx`) |
|
|
157
|
+
| `goalId` | text, nullable | link opcional ao goal sob teste |
|
|
158
|
+
| `issueId` | text, nullable | link opcional à issue sob teste |
|
|
159
|
+
| `status` | enum `running` \| `pass` \| `fail` \| `inconclusive` | padrão `running` |
|
|
160
|
+
| `summary` | text | padrão `""`; fatia persistida de ≤ 600 chars |
|
|
161
|
+
| `findings` | text (JSON) | `Finding[]` serializado; fatia persistida de ≤ 20 000 chars |
|
|
162
|
+
| `by` | enum `operator` \| `agent` | quem disparou a execução |
|
|
163
|
+
| `startedAt` | integer timestamp | padrão agora |
|
|
164
|
+
| `finishedAt` | integer timestamp, nullable | setado em `finish()` |
|
|
165
|
+
|
|
166
|
+
A página `/test-dev` (`src/app/(app)/test-dev/page.tsx`) lista as **20 execuções mais recentes** do workspace mais o `serverStatus(workspace.id)` ao vivo.
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Estados possíveis 🌌
|
|
171
|
+
|
|
172
|
+
### Status do dev server (`DevServerStatus.status`)
|
|
173
|
+
|
|
174
|
+
| Estado | Significado |
|
|
175
|
+
| --- | --- |
|
|
176
|
+
| `none` | nenhum servidor rastreado para este workspace |
|
|
177
|
+
| `starting` | spawnado, ainda não alcançável / nenhuma linha de "ready" vista |
|
|
178
|
+
| `running` | alcançável / imprimiu uma linha de "ready" |
|
|
179
|
+
| `stopped` | saiu de forma limpa ou foi parado pelo operador |
|
|
180
|
+
| `error` | spawn falhou, exit ≠ 0, toolchain ausente, ou nenhuma porta livre |
|
|
181
|
+
|
|
182
|
+
### Veredito de teste (`TestVerdict`)
|
|
183
|
+
|
|
184
|
+
| Veredito | Quando |
|
|
185
|
+
| --- | --- |
|
|
186
|
+
| `pass` | nenhum finding high-severity |
|
|
187
|
+
| `fail` | ≥ 1 finding high-severity |
|
|
188
|
+
| `inconclusive` | não subiu / nenhum projeto executável / Playwright ou chromium indisponível / servidor ainda inalcançável / `noBoot` e nada no ar |
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Passo a passo 🚀
|
|
193
|
+
|
|
194
|
+
### Rodar como operador
|
|
195
|
+
|
|
196
|
+
1. Abra o módulo **Test Dev**, ou digite `/test-dev` na Team Room ou em uma DM.
|
|
197
|
+
2. Se nenhum dev server estiver no ar, suba a partir do módulo (isso chama `startDevServerAction` → `startProjectServer`, instalando dependências na primeira vez).
|
|
198
|
+
3. Rode a validação. O Edsger posta o resultado de volta no thread:
|
|
199
|
+
`Test Dev — **pass** … Navigated N route(s).`
|
|
200
|
+
4. Inspecione os findings + screenshots (salvos em `<org-root>/.testdev/<runId>-<route>.png`).
|
|
201
|
+
|
|
202
|
+
### Rodar para uma issue específica
|
|
203
|
+
|
|
204
|
+
`runTestDevAction({ issueId })` resolve rotas com `routesForIssue(workspaceId, issueId)`, que minera o título/key da issue por substrings parecidas com `/path` (até 4) e sempre inclui `/`.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Exemplos 🛰️
|
|
209
|
+
|
|
210
|
+
**Comando slash do operador (`/test-dev`)** — tratado em `src/server/commands.ts`:
|
|
211
|
+
|
|
212
|
+
```text
|
|
213
|
+
operator: /test-dev
|
|
214
|
+
edsger: 🧪 Running the Test Dev validation gate…
|
|
215
|
+
edsger: Test Dev — pass. Passed — 2 note(s), no blocking issues. Navigated 1 route(s).
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**Portão autônomo (runner)** — após uma tarefa de código, em `src/server/runner.ts`:
|
|
219
|
+
|
|
220
|
+
```ts
|
|
221
|
+
// portão de boot — o projeto AINDA precisa subir
|
|
222
|
+
const boot = await ensureBootable(ws.id, ws.orgId);
|
|
223
|
+
if (!boot.ok) {
|
|
224
|
+
next = "review";
|
|
225
|
+
await pushInbox(ws.id, { kind: "block", refType: "task", refId: t.id, /* … */
|
|
226
|
+
title: `${t.key} broke the dev server`, detail: `${t.title}\n\n${boot.detail}` });
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// portão Test Dev — só se um servidor já estiver no ar (noBoot: true)
|
|
230
|
+
if (next === "done" && serverUrl(ws.id)) {
|
|
231
|
+
const gate = await runTestDev(ws.id, ws.orgId, { goalId: t.goalId, issueId: t.issueId ?? undefined,
|
|
232
|
+
by: "agent", noBoot: true, routes: /* routesForIssue */ });
|
|
233
|
+
if (gate.status === "fail") {
|
|
234
|
+
next = "review";
|
|
235
|
+
await pushInbox(ws.id, { kind: "validation", refType: "validation", refId: gate.id, /* … */
|
|
236
|
+
title: `${t.key} failed Test Dev`, detail: gate.summary });
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Gating do Edsger + o modelo de dois portões 🪐
|
|
244
|
+
|
|
245
|
+
O loop de trabalho autônomo aplica **dois** portões antes de uma tarefa de código poder ser marcada como `done`:
|
|
246
|
+
|
|
247
|
+
1. **Portão de boot (`ensureBootable`)** — aplica-se quando `next === "done"` e a tarefa tocou ao menos um caminho de *código* (`isCodePath`: qualquer coisa que não esteja sob `.claude/`, `DOCS/`, `PO/`, `Reports/`, `specs/`, `issues/`, `mock/`, e que não seja um `*.md` de topo). Se o projeto não sobe mais, a tarefa volta para `review`, um `block` é enfileirado no Inbox (`"<key> broke the dev server"`) e o operador é notificado. Um *toolchain ausente* retorna `ok: true` (pula, "não dá para validar"), nunca um bloqueio falso.
|
|
248
|
+
2. **Portão Test Dev (`runTestDev`, `noBoot: true`)** — aplica-se quando `next === "done"` **e um dev server já está no ar** (`serverUrl(ws.id)`). Por causa de `noBoot`, esse portão nunca instala/sobe um projeto no meio da tarefa — ele só valida o que já está no ar. Um veredito `fail` manda a tarefa de volta para `review` com um item `validation` no Inbox (`"<key> failed Test Dev"`).
|
|
249
|
+
|
|
250
|
+
O **Edsger** é o agente de QA/teste (handle `edsger`, reporta a `linus`). Quando o Test Dev roda como portão autônomo (`by: "agent"`), a captura na KB é atribuída ao `edsger`; quando rodado via `/test-dev`, o Edsger é a persona que posta o veredito na conversa. Ambos os portões são projetados para **degradar para `inconclusive`/pular** em vez de segurar uma tarefa por engano.
|
|
251
|
+
|
|
252
|
+
```mermaid
|
|
253
|
+
flowchart LR
|
|
254
|
+
T["tarefa concluída pelo agente"] --> C1{"tocou caminho de código?"}
|
|
255
|
+
C1 -- "não (docs/PO)" --> DONE["done"]
|
|
256
|
+
C1 -- "sim" --> BG["portão de boot: ensureBootable"]
|
|
257
|
+
BG -- "ok:false" --> REV1["review + Inbox block"]
|
|
258
|
+
BG -- "ok:true" --> C2{"dev server no ar?"}
|
|
259
|
+
C2 -- "não" --> RG["portão de review (reviewer)"]
|
|
260
|
+
C2 -- "sim" --> TD["runTestDev noBoot:true"]
|
|
261
|
+
TD -- "fail" --> REV2["review + Inbox validation"]
|
|
262
|
+
TD -- "pass / inconclusive" --> RG
|
|
263
|
+
RG --> DONE
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Screenshots & artefatos 🌠
|
|
269
|
+
|
|
270
|
+
- Screenshots são gravados em `<org-root>/.testdev/<runId>-<route>.png` (rota convertida em slug `[a-z0-9_]`, `root` para `/`). O diretório é criado em best-effort com `mkdirSync(..., { recursive: true })`.
|
|
271
|
+
- A captura na KB (`ingestKnowledge`) escreve uma entrada do tipo `test` intitulada `Test Dev — <status>` com o summary, ligada ao goal/issue, atribuída ao `edsger` (execuções de agente) ou `operator`.
|
|
272
|
+
- O diretório `.testdev/` é um artefato de controle da Constella — ele é removido da árvore de fonte limpa pela preparação de deploy (`buildCleanTree`) e não faz parte do produto que é enviado.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Integrações relacionadas 🛰️
|
|
277
|
+
|
|
278
|
+
- **Loop de trabalho / runner** — `src/server/runner.ts` conecta ambos os portões (veja [WORKFLOW.md](./WORKFLOW.md), [AGENTS.md](./AGENTS.md)).
|
|
279
|
+
- **Inbox** — portões reprovados enfileiram itens `block` / `validation` (veja [INBOX.md](./INBOX.md)).
|
|
280
|
+
- **KB / RAG** — todo veredito é ingerido como conhecimento `test` durável (veja [KB_RAG.md](./KB_RAG.md), [KB_AGENT.md](./KB_AGENT.md)).
|
|
281
|
+
- **Prepare Deploy** — reutiliza `ensureBootable` + `detectProject` na etapa `validateBuild` (veja [PREPARE_DEPLOY.md](./PREPARE_DEPLOY.md)).
|
|
282
|
+
- **Comandos de chat** — `/test-dev` e `/review` (veja [CHAT_COMMANDS.md](./CHAT_COMMANDS.md)).
|
|
283
|
+
- **Stacks de projeto** — a detecção de stack espelha os ecossistemas do starter executável (veja [PROJECT_STACKS.md](./PROJECT_STACKS.md)).
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Segurança 🕳️
|
|
288
|
+
|
|
289
|
+
- **Sondagens são apenas locais.** As sondagens de segurança e a checagem de frameability do iframe (`previewFrameableAction`) só miram `127.0.0.1` / `localhost`. O harness nunca aponta um navegador ou `fetch` para um host externo.
|
|
290
|
+
- **Varredura de segredos** roda no HTML servido e nos corpos de resposta das sondagens via `SECRET_RE`; um match é um finding de segurança high-severity (e, se aparecer na saída do produto, algo que os agentes precisam corrigir antes do deploy).
|
|
291
|
+
- **Sondagem de caminhos sensíveis** confirma que `/.env`, `/.git/config`, `/admin` etc. não são servidos sem autenticação pelo app sob teste.
|
|
292
|
+
- **Sem falso fail.** A incapacidade de subir ou de instalar o Chromium gera `inconclusive`, nunca `fail` — o portão não pode ser transformado numa negação de progresso por um toolchain instável.
|
|
293
|
+
- O dev server do projeto roda com `NODE_ENV=development`, `BROWSER=none`, dentro do workspace da org; no restart da Constella, `stopAllProjectServers()` o recolhe.
|
|
294
|
+
|
|
295
|
+
Veja [SECURITY.md](./SECURITY.md) para o modelo de confiança geral.
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Solução de problemas 🌌
|
|
300
|
+
|
|
301
|
+
| Sintoma | Causa | Correção |
|
|
302
|
+
| --- | --- | --- |
|
|
303
|
+
| `inconclusive — No runnable project` | nenhum script dev/start/serve no `package.json` e nenhum entrypoint Python/Go/Rust/`server.js` | adicione um script `dev`/`start` ou um ponto de entrada reconhecido no workspace |
|
|
304
|
+
| `inconclusive — Playwright not available` | `@playwright/test` não instalado | instale o Playwright no diretório de instalação |
|
|
305
|
+
| `Couldn't install/launch chromium` | binário do navegador ausente, install estourou o timeout (300s) | rode `npx playwright install chromium` no diretório de instalação e tente de novo |
|
|
306
|
+
| `inconclusive — Dev server is still starting` | porta ainda inalcançável dentro do deadline | espere e rode de novo; para a primeira compilação go/rust isso pode levar até 120s |
|
|
307
|
+
| `error — Toolchain not found: '<cmd>'` | python/go/cargo fora do `PATH` | instale o toolchain, ou escolha uma stack Node (o portão de boot o pula como "não dá para validar") |
|
|
308
|
+
| `error — No free port available` | nada livre em `4173–4999` | libere uma porta na faixa ou pare dev servers obsoletos |
|
|
309
|
+
| Portão de boot segurou a tarefa (`"<key> broke the dev server"`) | a mudança deixou o projeto sem conseguir subir | corrija o erro de build/import; a tarefa fica em `review` com o log de boot no Inbox |
|
|
310
|
+
| Iframe de preview mostra erro do navegador | app envia `X-Frame-Options` / CSP `frame-ancestors` restritivo | esperado — `previewFrameableAction` detecta; abra o app numa nova aba |
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Links relacionados ✦
|
|
315
|
+
|
|
316
|
+
- [WORKFLOW.md](./WORKFLOW.md) — o ciclo de vida do trabalho e onde os portões se encaixam
|
|
317
|
+
- [AGENTS.md](./AGENTS.md) — Edsger (QA) e o roster
|
|
318
|
+
- [PREPARE_DEPLOY.md](./PREPARE_DEPLOY.md) — reuso de `ensureBootable` na preparação de deploy
|
|
319
|
+
- [DEPLOY.md](./DEPLOY.md) — lançando o produto
|
|
320
|
+
- [INBOX.md](./INBOX.md) — onde portões reprovados pousam
|
|
321
|
+
- [KB_RAG.md](./KB_RAG.md) · [KB_AGENT.md](./KB_AGENT.md) — conhecimento de teste durável
|
|
322
|
+
- [CHAT_COMMANDS.md](./CHAT_COMMANDS.md) — `/test-dev`, `/review`
|
|
323
|
+
- [PROJECT_STACKS.md](./PROJECT_STACKS.md) — stacks que o dev server consegue subir
|
|
324
|
+
- [SECURITY.md](./SECURITY.md) · [TROUBLESHOOTING.md](./TROUBLESHOOTING.md)
|