chorus-codes 0.7.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 +18 -0
- package/.next/build/chunks/[root-of-the-server]__0d-m0h0._.js +206 -0
- package/.next/build/chunks/[root-of-the-server]__0d-m0h0._.js.map +8 -0
- package/.next/build/chunks/[root-of-the-server]__0ubbtyl._.js +500 -0
- package/.next/build/chunks/[root-of-the-server]__0ubbtyl._.js.map +11 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_06e.r3r._.js +13 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_06e.r3r._.js.map +5 -0
- package/.next/build/chunks/[turbopack]_runtime.js +890 -0
- package/.next/build/chunks/[turbopack]_runtime.js.map +11 -0
- package/.next/build/chunks/node_modules__pnpm_0e-dfa2._.js +6681 -0
- package/.next/build/chunks/node_modules__pnpm_0e-dfa2._.js.map +47 -0
- package/.next/build/package.json +1 -0
- package/.next/build/postcss.js +6 -0
- package/.next/build/postcss.js.map +5 -0
- package/.next/build-manifest.json +21 -0
- package/.next/cache/.previewinfo +1 -0
- package/.next/cache/.rscinfo +1 -0
- package/.next/cache/.tsbuildinfo +1 -0
- package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0beh7rg._.js +6077 -0
- package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0beh7rg._.js.map +69 -0
- package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0pjsj.j._.js +6318 -0
- package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0pjsj.j._.js.map +71 -0
- package/.next/dev/types/cache-life.d.ts +145 -0
- package/.next/dev/types/routes.d.ts +84 -0
- package/.next/dev/types/validator.ts +178 -0
- package/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/diagnostics/framework.json +1 -0
- package/.next/diagnostics/route-bundle-stats.json +176 -0
- package/.next/export-marker.json +6 -0
- package/.next/fallback-build-manifest.json +13 -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 +239 -0
- package/.next/required-server-files.js +332 -0
- package/.next/required-server-files.json +332 -0
- package/.next/routes-manifest.json +148 -0
- package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_global-error/page/build-manifest.json +17 -0
- package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_global-error/page.js +10 -0
- package/.next/server/app/_global-error/page.js.map +5 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +15 -0
- package/.next/server/app/_global-error.rsc +15 -0
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_not-found/page/build-manifest.json +17 -0
- package/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_not-found/page.js +13 -0
- package/.next/server/app/_not-found/page.js.map +5 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +16 -0
- package/.next/server/app/_not-found.rsc +16 -0
- package/.next/server/app/_not-found.segments/_full.segment.rsc +16 -0
- package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_not-found.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/api/daemon/[...path]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/daemon/[...path]/route/build-manifest.json +9 -0
- package/.next/server/app/api/daemon/[...path]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/daemon/[...path]/route.js +7 -0
- package/.next/server/app/api/daemon/[...path]/route.js.map +5 -0
- package/.next/server/app/api/daemon/[...path]/route.js.nft.json +1 -0
- package/.next/server/app/api/daemon/[...path]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/run-artifacts/[chatId]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/run-artifacts/[chatId]/route/build-manifest.json +9 -0
- package/.next/server/app/api/run-artifacts/[chatId]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/run-artifacts/[chatId]/route.js +6 -0
- package/.next/server/app/api/run-artifacts/[chatId]/route.js.map +5 -0
- package/.next/server/app/api/run-artifacts/[chatId]/route.js.nft.json +1 -0
- package/.next/server/app/api/run-artifacts/[chatId]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/connect/page/app-paths-manifest.json +3 -0
- package/.next/server/app/connect/page/build-manifest.json +17 -0
- package/.next/server/app/connect/page/next-font-manifest.json +11 -0
- package/.next/server/app/connect/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/connect/page/server-reference-manifest.json +4 -0
- package/.next/server/app/connect/page.js +15 -0
- package/.next/server/app/connect/page.js.map +5 -0
- package/.next/server/app/connect/page.js.nft.json +1 -0
- package/.next/server/app/connect/page_client-reference-manifest.js +3 -0
- package/.next/server/app/favicon.ico/route/app-paths-manifest.json +3 -0
- package/.next/server/app/favicon.ico/route/build-manifest.json +9 -0
- package/.next/server/app/favicon.ico/route.js +8 -0
- package/.next/server/app/favicon.ico/route.js.map +5 -0
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/favicon.ico.meta +1 -0
- package/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
- package/.next/server/app/icon.svg/route/build-manifest.json +9 -0
- package/.next/server/app/icon.svg/route.js +7 -0
- package/.next/server/app/icon.svg/route.js.map +5 -0
- package/.next/server/app/icon.svg/route.js.nft.json +1 -0
- package/.next/server/app/icon.svg.body +6 -0
- package/.next/server/app/icon.svg.meta +1 -0
- package/.next/server/app/new/page/app-paths-manifest.json +3 -0
- package/.next/server/app/new/page/build-manifest.json +17 -0
- package/.next/server/app/new/page/next-font-manifest.json +11 -0
- package/.next/server/app/new/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/new/page/server-reference-manifest.json +4 -0
- package/.next/server/app/new/page.js +14 -0
- package/.next/server/app/new/page.js.map +5 -0
- package/.next/server/app/new/page.js.nft.json +1 -0
- package/.next/server/app/new/page_client-reference-manifest.js +3 -0
- package/.next/server/app/new.html +1 -0
- package/.next/server/app/new.meta +15 -0
- package/.next/server/app/new.rsc +22 -0
- package/.next/server/app/new.segments/_full.segment.rsc +22 -0
- package/.next/server/app/new.segments/_head.segment.rsc +6 -0
- package/.next/server/app/new.segments/_index.segment.rsc +5 -0
- package/.next/server/app/new.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/new.segments/new/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/new.segments/new.segment.rsc +5 -0
- package/.next/server/app/onboarding/page/app-paths-manifest.json +3 -0
- package/.next/server/app/onboarding/page/build-manifest.json +17 -0
- package/.next/server/app/onboarding/page/next-font-manifest.json +11 -0
- package/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/onboarding/page/server-reference-manifest.json +4 -0
- package/.next/server/app/onboarding/page.js +14 -0
- package/.next/server/app/onboarding/page.js.map +5 -0
- package/.next/server/app/onboarding/page.js.nft.json +1 -0
- package/.next/server/app/onboarding/page_client-reference-manifest.js +3 -0
- package/.next/server/app/onboarding.html +1 -0
- package/.next/server/app/onboarding.meta +15 -0
- package/.next/server/app/onboarding.rsc +22 -0
- package/.next/server/app/onboarding.segments/_full.segment.rsc +22 -0
- package/.next/server/app/onboarding.segments/_head.segment.rsc +6 -0
- package/.next/server/app/onboarding.segments/_index.segment.rsc +5 -0
- package/.next/server/app/onboarding.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/onboarding.segments/onboarding.segment.rsc +5 -0
- package/.next/server/app/page/app-paths-manifest.json +3 -0
- package/.next/server/app/page/build-manifest.json +17 -0
- package/.next/server/app/page/next-font-manifest.json +11 -0
- package/.next/server/app/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/page/server-reference-manifest.json +4 -0
- package/.next/server/app/page.js +17 -0
- package/.next/server/app/page.js.map +5 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +3 -0
- package/.next/server/app/personas/page/app-paths-manifest.json +3 -0
- package/.next/server/app/personas/page/build-manifest.json +17 -0
- package/.next/server/app/personas/page/next-font-manifest.json +11 -0
- package/.next/server/app/personas/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/personas/page/server-reference-manifest.json +4 -0
- package/.next/server/app/personas/page.js +14 -0
- package/.next/server/app/personas/page.js.map +5 -0
- package/.next/server/app/personas/page.js.nft.json +1 -0
- package/.next/server/app/personas/page_client-reference-manifest.js +3 -0
- package/.next/server/app/personas.html +1 -0
- package/.next/server/app/personas.meta +15 -0
- package/.next/server/app/personas.rsc +22 -0
- package/.next/server/app/personas.segments/_full.segment.rsc +22 -0
- package/.next/server/app/personas.segments/_head.segment.rsc +6 -0
- package/.next/server/app/personas.segments/_index.segment.rsc +5 -0
- package/.next/server/app/personas.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/personas.segments/personas/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/personas.segments/personas.segment.rsc +5 -0
- package/.next/server/app/runs/[runId]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/runs/[runId]/page/build-manifest.json +17 -0
- package/.next/server/app/runs/[runId]/page/next-font-manifest.json +11 -0
- package/.next/server/app/runs/[runId]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/runs/[runId]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/runs/[runId]/page.js +16 -0
- package/.next/server/app/runs/[runId]/page.js.map +5 -0
- package/.next/server/app/runs/[runId]/page.js.nft.json +1 -0
- package/.next/server/app/runs/[runId]/page_client-reference-manifest.js +3 -0
- package/.next/server/app/runs/page/app-paths-manifest.json +3 -0
- package/.next/server/app/runs/page/build-manifest.json +17 -0
- package/.next/server/app/runs/page/next-font-manifest.json +11 -0
- package/.next/server/app/runs/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/runs/page/server-reference-manifest.json +4 -0
- package/.next/server/app/runs/page.js +15 -0
- package/.next/server/app/runs/page.js.map +5 -0
- package/.next/server/app/runs/page.js.nft.json +1 -0
- package/.next/server/app/runs/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/page/build-manifest.json +17 -0
- package/.next/server/app/settings/page/next-font-manifest.json +11 -0
- package/.next/server/app/settings/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/settings/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/page.js +14 -0
- package/.next/server/app/settings/page.js.map +5 -0
- package/.next/server/app/settings/page.js.nft.json +1 -0
- package/.next/server/app/settings/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/permissions/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/permissions/page/build-manifest.json +17 -0
- package/.next/server/app/settings/permissions/page/next-font-manifest.json +11 -0
- package/.next/server/app/settings/permissions/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/settings/permissions/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/permissions/page.js +14 -0
- package/.next/server/app/settings/permissions/page.js.map +5 -0
- package/.next/server/app/settings/permissions/page.js.nft.json +1 -0
- package/.next/server/app/settings/permissions/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings.html +1 -0
- package/.next/server/app/settings.meta +15 -0
- package/.next/server/app/settings.rsc +22 -0
- package/.next/server/app/settings.segments/_full.segment.rsc +22 -0
- package/.next/server/app/settings.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings.segments/_index.segment.rsc +5 -0
- package/.next/server/app/settings.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings.segments/settings.segment.rsc +5 -0
- package/.next/server/app/templates/page/app-paths-manifest.json +3 -0
- package/.next/server/app/templates/page/build-manifest.json +17 -0
- package/.next/server/app/templates/page/next-font-manifest.json +11 -0
- package/.next/server/app/templates/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/templates/page/server-reference-manifest.json +4 -0
- package/.next/server/app/templates/page.js +14 -0
- package/.next/server/app/templates/page.js.map +5 -0
- package/.next/server/app/templates/page.js.nft.json +1 -0
- package/.next/server/app/templates/page_client-reference-manifest.js +3 -0
- package/.next/server/app/templates.html +1 -0
- package/.next/server/app/templates.meta +15 -0
- package/.next/server/app/templates.rsc +22 -0
- package/.next/server/app/templates.segments/_full.segment.rsc +22 -0
- package/.next/server/app/templates.segments/_head.segment.rsc +6 -0
- package/.next/server/app/templates.segments/_index.segment.rsc +5 -0
- package/.next/server/app/templates.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/templates.segments/templates/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/templates.segments/templates.segment.rsc +5 -0
- package/.next/server/app-paths-manifest.json +18 -0
- package/.next/server/chunks/05w9_next_0xdex7s._.js +13 -0
- package/.next/server/chunks/05w9_next_0xdex7s._.js.map +1 -0
- package/.next/server/chunks/05w9_next_dist_esm_build_templates_app-route_0.73kst.js +3 -0
- package/.next/server/chunks/05w9_next_dist_esm_build_templates_app-route_0.73kst.js.map +1 -0
- package/.next/server/chunks/[externals]_next_dist_0arv.vj._.js +3 -0
- package/.next/server/chunks/[externals]_next_dist_0arv.vj._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__02xvj_h._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__02xvj_h._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0i7ddmr._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0i7ddmr._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0sxhm1i._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0sxhm1i._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__12xxby8._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__12xxby8._.js.map +1 -0
- package/.next/server/chunks/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/[turbopack]_runtime.js.map +11 -0
- package/.next/server/chunks/_next-internal_server_app_api_daemon_[___path]_route_actions_0a5g-ar.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_daemon_[___path]_route_actions_0a5g-ar.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_run-artifacts_[chatId]_route_actions_07e2ul1.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_run-artifacts_[chatId]_route_actions_07e2ul1.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_0-0ehc~.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_0-0ehc~.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_0q4woef._.js +3 -0
- package/.next/server/chunks/ssr/05w9_next_dist_0q4woef._.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_0ybpwn1._.js +6 -0
- package/.next/server/chunks/ssr/05w9_next_dist_0ybpwn1._.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_0~859ji._.js +6 -0
- package/.next/server/chunks/ssr/05w9_next_dist_0~859ji._.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_12u3mib._.js +3 -0
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_12u3mib._.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_forbidden_04fbe_..js +3 -0
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_forbidden_04fbe_..js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_global-error_0brpl_..js +3 -0
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_global-error_0brpl_..js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_unauthorized_0~2g66g.js +3 -0
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_unauthorized_0~2g66g.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0-f~6r1.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0-f~6r1.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_00czn99.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_00czn99.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_01nm1_6.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_01nm1_6.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0jcydv7.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0jcydv7.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0km.hvi.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0km.hvi.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0ln8_qt.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0ln8_qt.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0n3h-j1.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0n3h-j1.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0nc~v.o.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0nc~v.o.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0o6nct3.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0o6nct3.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0veve6-.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0veve6-.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0wh5tpo.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0wh5tpo.js.map +1 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_10~fsfu.js +4 -0
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_10~fsfu.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0-7oo8o._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0-7oo8o._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__01t9qm2._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__01t9qm2._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__076~t6~._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__076~t6~._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0_tow-j._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0_tow-j._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0bsym8v._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0bsym8v._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0bwjwxi._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0bwjwxi._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0c2e5js._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0c2e5js._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0d_59pi._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0d_59pi._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dxp2sg._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dxp2sg._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0e58.k_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0e58.k_._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ek20dj._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ek20dj._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0h2o43u._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0h2o43u._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0hn95cc._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0hn95cc._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ic.~tw._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ic.~tw._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0jltd-t._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0jltd-t._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0k_96yx._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0k_96yx._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0l5ko41._.js +19 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0l5ko41._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0p~21w8._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0p~21w8._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0tc4gl8._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0tc4gl8._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0we1ana._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0we1ana._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xlzjhk._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xlzjhk._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ygksjc._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ygksjc._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0yhjl35._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0yhjl35._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~cqs-9._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~cqs-9._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__109.1j0._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__109.1j0._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__10gepjv._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__10gepjv._.js.map +1 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +11 -0
- package/.next/server/chunks/ssr/_01t~nag._.js +30 -0
- package/.next/server/chunks/ssr/_01t~nag._.js.map +1 -0
- package/.next/server/chunks/ssr/_097xk3e._.js +3 -0
- package/.next/server/chunks/ssr/_097xk3e._.js.map +1 -0
- package/.next/server/chunks/ssr/_0bxoss0._.js +30 -0
- package/.next/server/chunks/ssr/_0bxoss0._.js.map +1 -0
- package/.next/server/chunks/ssr/_0ck1n8_._.js +7 -0
- package/.next/server/chunks/ssr/_0ck1n8_._.js.map +1 -0
- package/.next/server/chunks/ssr/_0d-304b._.js +30 -0
- package/.next/server/chunks/ssr/_0d-304b._.js.map +1 -0
- package/.next/server/chunks/ssr/_0p-_ahq._.js +30 -0
- package/.next/server/chunks/ssr/_0p-_ahq._.js.map +1 -0
- package/.next/server/chunks/ssr/_0qlx_85._.js +7 -0
- package/.next/server/chunks/ssr/_0qlx_85._.js.map +1 -0
- package/.next/server/chunks/ssr/_0y43gyn._.js +27 -0
- package/.next/server/chunks/ssr/_0y43gyn._.js.map +1 -0
- package/.next/server/chunks/ssr/_11i54x9._.js +30 -0
- package/.next/server/chunks/ssr/_11i54x9._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_connect_page_actions_0vb8s6u.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_connect_page_actions_0vb8s6u.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_new_page_actions_08q6mx5.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_new_page_actions_08q6mx5.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_onboarding_page_actions_0qdby58.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_onboarding_page_actions_0qdby58.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_personas_page_actions_08fq21v.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_personas_page_actions_08fq21v.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_runs_[runId]_page_actions_0z6r2tz.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_runs_[runId]_page_actions_0z6r2tz.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_runs_page_actions_04_e1xr.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_runs_page_actions_04_e1xr.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_0mr68ai.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_0mr68ai.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_permissions_page_actions_0cr.qtc.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_permissions_page_actions_0cr.qtc.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_templates_page_actions_0n8gow3.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_templates_page_actions_0n8gow3.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules__pnpm_0~j0k.e._.js +33 -0
- package/.next/server/chunks/ssr/node_modules__pnpm_0~j0k.e._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_new_page_tsx_0av4n2k._.js +3 -0
- package/.next/server/chunks/ssr/src_app_new_page_tsx_0av4n2k._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +3 -0
- package/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_personas_page_tsx_0jx9vyh._.js +3 -0
- package/.next/server/chunks/ssr/src_app_personas_page_tsx_0jx9vyh._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +27 -0
- package/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_templates_page_tsx_0tml2wg._.js +3 -0
- package/.next/server/chunks/ssr/src_app_templates_page_tsx_0tml2wg._.js.map +1 -0
- package/.next/server/chunks/ssr/src_components_0j77o23._.js +3 -0
- package/.next/server/chunks/ssr/src_components_0j77o23._.js.map +1 -0
- package/.next/server/chunks/ssr/src_components_0lc2g58._.js +3 -0
- package/.next/server/chunks/ssr/src_components_0lc2g58._.js.map +1 -0
- package/.next/server/chunks/ssr/src_components_live-run-real_index_tsx_0zzsdt9._.js +3 -0
- package/.next/server/chunks/ssr/src_components_live-run-real_index_tsx_0zzsdt9._.js.map +1 -0
- package/.next/server/functions-config-manifest.json +6 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +21 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +51 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +4 -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 +5 -0
- package/.next/static/chunks/0-xxtuzaqzyzy.css +3 -0
- package/.next/static/chunks/0.dctgbd3j_xg.js +2 -0
- package/.next/static/chunks/0.~gqf.-9g-fh.js +1 -0
- package/.next/static/chunks/01as9r5n5k.xo.js +1 -0
- package/.next/static/chunks/034b~pjm7y20e.js +1 -0
- package/.next/static/chunks/03~yq9q893hmn.js +1 -0
- package/.next/static/chunks/05o4oa_9xfaun.js +1 -0
- package/.next/static/chunks/08dnw-0gzytmy.js +5 -0
- package/.next/static/chunks/08f2b7tuf53ep.js +1 -0
- package/.next/static/chunks/0a_u3vdu6tc~f.js +1 -0
- package/.next/static/chunks/0am72irwq2bx0.js +5 -0
- package/.next/static/chunks/0c-d1bhb8byrx.js +1 -0
- package/.next/static/chunks/0s4~w2~is76y1.js +1 -0
- package/.next/static/chunks/0ue4qcctkv016.js +4 -0
- package/.next/static/chunks/0uok5~eqi6zku.js +1 -0
- package/.next/static/chunks/0v3lyuj75aq50.js +1 -0
- package/.next/static/chunks/0whnu9t5k-ij7.js +1 -0
- package/.next/static/chunks/0x00t3du13-u4.js +25 -0
- package/.next/static/chunks/0xs3ktzdh4rw4.js +1 -0
- package/.next/static/chunks/0~8r6nhrrl~f9.js +1 -0
- package/.next/static/chunks/10jdu00ksgu69.js +1 -0
- package/.next/static/chunks/10ld26~0f71ye.js +25 -0
- package/.next/static/chunks/11k2wbc04r__f.js +25 -0
- package/.next/static/chunks/13-.xgv2t5u6m.js +31 -0
- package/.next/static/chunks/152ec.u3_e~ya.js +25 -0
- package/.next/static/chunks/172tpttbumwi1.js +25 -0
- package/.next/static/chunks/turbopack-0-al833jv3to~.js +1 -0
- package/.next/static/dJlbRLlhISA0JGtHKVqgQ/_buildManifest.js +11 -0
- package/.next/static/dJlbRLlhISA0JGtHKVqgQ/_clientMiddlewareManifest.js +1 -0
- package/.next/static/dJlbRLlhISA0JGtHKVqgQ/_ssgManifest.js +1 -0
- package/.next/static/media/4fa387ec64143e14-s.0q3udbd2bu5yp.woff2 +0 -0
- package/.next/static/media/7178b3e590c64307-s.11.cyxs5p-0z~.woff2 +0 -0
- package/.next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2 +0 -0
- package/.next/static/media/8a480f0b521d4e75-s.06d3mdzz5bre_.woff2 +0 -0
- package/.next/static/media/bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2 +0 -0
- package/.next/static/media/caa3a2e1cccd8315-s.p.16t1db8_9y2o~.woff2 +0 -0
- package/.next/static/media/favicon.0i~66t__91s97.ico +0 -0
- package/.next/static/media/icon.15.86wme~cdlv.svg +6 -0
- package/.next/trace +1 -0
- package/.next/trace-build +1 -0
- package/.next/turbopack +0 -0
- package/.next/types/cache-life.d.ts +145 -0
- package/.next/types/routes.d.ts +83 -0
- package/.next/types/validator.ts +169 -0
- package/LICENSE +201 -0
- package/README.md +423 -0
- package/assets/slash-commands/chorus.md +35 -0
- package/bin/chorus.mjs +30 -0
- package/dist/lib/db/schema.sql +132 -0
- package/package.json +79 -0
- package/prompts/personas/accountant.md +27 -0
- package/prompts/personas/cartographer.md +28 -0
- package/prompts/personas/concierge.md +25 -0
- package/prompts/personas/conservator.md +27 -0
- package/prompts/personas/inspector.md +31 -0
- package/prompts/personas/librarian.md +29 -0
- package/prompts/personas/profiler.md +25 -0
- package/prompts/personas/quartermaster.md +25 -0
- package/prompts/personas/sentinel.md +28 -0
- package/prompts/personas/translator.md +28 -0
- package/scripts/postinstall.mjs +20 -0
- package/templates/README.md +71 -0
- package/templates/architect-review.yaml +52 -0
- package/templates/bug-diagnose.yaml +31 -0
- package/templates/code-review.yaml +46 -0
- package/templates/red-green.yaml +169 -0
- package/templates/review-only.yaml +73 -0
- package/templates/tri-review.yaml +41 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for describing the origin of the Work and
|
|
141
|
+
reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Support. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or support.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright 2026 99x Agency
|
|
190
|
+
|
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
+
you may not use this file except in compliance with the License.
|
|
193
|
+
You may obtain a copy of the License at
|
|
194
|
+
|
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
+
|
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
200
|
+
implied. See the License for the specific language governing permissions
|
|
201
|
+
and limitations under the License.
|
package/README.md
ADDED
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="docs/images/logo.png" alt="Chorus" width="120" />
|
|
4
|
+
|
|
5
|
+
# Chorus
|
|
6
|
+
|
|
7
|
+
**A second opinion (and a third) before you ship AI-written code — using the AI subscriptions you already pay for.**
|
|
8
|
+
|
|
9
|
+
2–3 *different* AI tools review the same change in parallel, only green-lighting when they agree. Runs on your existing Claude Pro / ChatGPT Plus / Gemini Advanced — typical review costs **$0** out of pocket.
|
|
10
|
+
|
|
11
|
+
[](https://github.com/chorus-codes/chorus/actions/workflows/ci.yml)
|
|
12
|
+
[](https://www.npmjs.com/package/chorus-codes)
|
|
13
|
+
[](./LICENSE)
|
|
14
|
+
[]()
|
|
15
|
+
[]()
|
|
16
|
+
|
|
17
|
+
[Website](https://chorus.codes) · [Roadmap](./ROADMAP.md) · [Issues](https://github.com/chorus-codes/chorus/issues)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
<div align="center">
|
|
24
|
+
|
|
25
|
+
<img src="docs/images/hero-demo.gif" alt="Six AI reviewers streaming verdicts in parallel — Chorus running live" width="800" />
|
|
26
|
+
|
|
27
|
+
**One AI writes. Three review. You ship only when they agree — using AI subscriptions you already pay for.**
|
|
28
|
+
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## The problem Chorus solves
|
|
34
|
+
|
|
35
|
+
🤖 **AI coding tools are confident — and wrong about 5% of the time** in subtle ways that are hard to spot until production.
|
|
36
|
+
|
|
37
|
+
🪞 **The model that wrote your code can't see its own blind spots.**
|
|
38
|
+
Asking GPT to review GPT's work is theatre — same training, same biases.
|
|
39
|
+
|
|
40
|
+
💸 **Multi-AI review on raw API keys gets expensive fast.**
|
|
41
|
+
Every diff × 3 reviewers × pay-per-token = real money. So nobody does it routinely.
|
|
42
|
+
|
|
43
|
+
### Chorus fixes all three
|
|
44
|
+
|
|
45
|
+
✅ **Different vendors review each other.**
|
|
46
|
+
Claude writes, GPT and Gemini check it. Different blind spots cover each other. Disagreement = red flag *before* you merge.
|
|
47
|
+
|
|
48
|
+
✅ **Uses your existing AI subscriptions.**
|
|
49
|
+
You're already paying for Claude Pro / ChatGPT Plus / Gemini Advanced (~$20/mo each). Chorus drives them headlessly through their CLIs — every multi-AI review costs **$0 out of pocket**, just counts against the quota you already have. Per-token API users save 10-100× vs running the same prompts directly.
|
|
50
|
+
|
|
51
|
+
✅ **Local-first, zero markup.**
|
|
52
|
+
Your code never reaches a new vendor. Chorus runs on your laptop, talks to the AI tools you already trust, and shuts up. Open source, Apache-2.0.
|
|
53
|
+
|
|
54
|
+
That's the whole pitch.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Real moments where this matters
|
|
59
|
+
|
|
60
|
+
🚨 **You asked Claude to write a `divide(a, b)` helper.**
|
|
61
|
+
It says "looks correct!" You ship. Production crashes at 2am because nobody handled `b = 0`.
|
|
62
|
+
*With Chorus: GPT or Gemini would have flagged it in the review pass before you merged.*
|
|
63
|
+
|
|
64
|
+
🔧 **You're refactoring a critical path.**
|
|
65
|
+
Your AI rewrote 200 lines and says it's behaviour-equivalent. You're tired and skeptical.
|
|
66
|
+
*Run it through Chorus. Three different AIs all saying "yes, equivalent" lets you sleep.*
|
|
67
|
+
|
|
68
|
+
🏗️ **Big architectural call** — queue vs polling, sync vs async, this DB vs that one.
|
|
69
|
+
Write a paragraph, hit Chorus. *Three different models give you three angles you hadn't thought of.*
|
|
70
|
+
|
|
71
|
+
📝 **Reviewing a 600-line PR.**
|
|
72
|
+
You're short on time. Paste the diff into Chorus. *Three reviewers spot the obvious bugs in 90 seconds. Your job becomes the 5% they couldn't catch.*
|
|
73
|
+
|
|
74
|
+
⚔️ **Test-driven development where neither AI cheats.**
|
|
75
|
+
*One AI writes tests blind to the code; another AI writes code to pass them.* Use the `red-green` template.
|
|
76
|
+
|
|
77
|
+
🐛 **Hunting a flaky bug.**
|
|
78
|
+
Reproduces 1-in-20, no obvious pattern. Drop the failing test + suspect code into Chorus.
|
|
79
|
+
*Each reviewer attacks the bug from a different angle — race? clock skew? off-by-one? — and you land on the cause faster than walking it alone.*
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Quick start
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
npm i -g chorus-codes # install
|
|
87
|
+
chorus init # finds AI tools you already have
|
|
88
|
+
chorus start --ui # opens http://localhost:5050
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Paste a task. Hit submit. Watch the AIs argue.
|
|
92
|
+
|
|
93
|
+
**Requires** Node 20+ and at least *one* of these (you probably already have one):
|
|
94
|
+
|
|
95
|
+
- Claude Code, Codex CLI, Gemini CLI, OpenCode, or Kimi CLI — uses your existing subscription, no extra cost
|
|
96
|
+
- *or* an OpenRouter API key (one key, 200+ models, pay-per-use)
|
|
97
|
+
|
|
98
|
+
<details>
|
|
99
|
+
<summary><b>Don't have any of those?</b></summary>
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
npm i -g @anthropic-ai/claude-code # Anthropic — uses Claude Pro sub
|
|
103
|
+
npm i -g @openai/codex # OpenAI — uses ChatGPT Plus sub
|
|
104
|
+
npm i -g @google/gemini-cli # Google — uses Gemini Advanced sub
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Pick whichever vendor you already pay for. Or skip CLIs entirely and add an OpenRouter key in Settings after `chorus init`.
|
|
108
|
+
|
|
109
|
+
</details>
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## What it looks like
|
|
114
|
+
|
|
115
|
+
<table>
|
|
116
|
+
<tr>
|
|
117
|
+
<td width="50%" align="center">
|
|
118
|
+
<b>Live review</b><br/>
|
|
119
|
+
<img src="docs/images/run-page.png" alt="Three reviewers streaming verdicts in real-time" width="100%" /><br/>
|
|
120
|
+
<sub>Each AI streams its thinking live as it reviews.</sub>
|
|
121
|
+
</td>
|
|
122
|
+
<td width="50%" align="center">
|
|
123
|
+
<b>Verdict</b><br/>
|
|
124
|
+
<img src="docs/images/verdict.png" alt="Final converged verdict with merged diff" width="100%" /><br/>
|
|
125
|
+
<sub>Agreement = green. Disagreement = retry with their feedback.</sub>
|
|
126
|
+
</td>
|
|
127
|
+
</tr>
|
|
128
|
+
<tr>
|
|
129
|
+
<td width="50%" align="center">
|
|
130
|
+
<b>Templates</b><br/>
|
|
131
|
+
<img src="docs/images/templates.png" alt="Template editor" width="100%" /><br/>
|
|
132
|
+
<sub>Pre-built review patterns. Make your own in YAML.</sub>
|
|
133
|
+
</td>
|
|
134
|
+
<td width="50%" align="center">
|
|
135
|
+
<b>From inside Claude / Cursor</b><br/>
|
|
136
|
+
<img src="docs/images/mcp.png" alt="Claude Code calling Chorus" width="100%" /><br/>
|
|
137
|
+
<sub>Any AI tool that speaks MCP can trigger a Chorus run.</sub>
|
|
138
|
+
</td>
|
|
139
|
+
</tr>
|
|
140
|
+
</table>
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## A real example
|
|
145
|
+
|
|
146
|
+
You ask Claude to write this:
|
|
147
|
+
|
|
148
|
+
```js
|
|
149
|
+
function divide(a, b) {
|
|
150
|
+
return a / b;
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Submit to Chorus with the **Code Review** template (1 writer + 2 reviewers, both must agree to ship):
|
|
155
|
+
|
|
156
|
+
| Step | What happens |
|
|
157
|
+
|---|---|
|
|
158
|
+
| 1. Claude writes | "Looks correct to me!" |
|
|
159
|
+
| 2. GPT reviews in parallel | 🚨 *No type validation — `divide('a','b')` returns `NaN`* |
|
|
160
|
+
| 3. Gemini reviews in parallel | 🚨 *Missing zero-check — `divide(1, 0)` returns `Infinity`* |
|
|
161
|
+
| 4. Verdict | ❌ **REJECT** — both reviewers flagged real bugs |
|
|
162
|
+
|
|
163
|
+
Now you know what to fix **before** you push.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Templates: pre-built review patterns
|
|
168
|
+
|
|
169
|
+
Don't figure out which AIs to use yourself. Pick a pattern that fits the moment:
|
|
170
|
+
|
|
171
|
+
| Use this when... | Template |
|
|
172
|
+
|---|---|
|
|
173
|
+
| Pre-merge sanity check | `code-review` — 1 writer + 2 reviewers, both must agree |
|
|
174
|
+
| Diagnosing a weird bug | `bug-diagnose` — one hypothesises, one challenges |
|
|
175
|
+
| Big architectural call | `architect-review` — 3 different vendors critique your plan |
|
|
176
|
+
| TDD where neither AI cheats | `red-green` — tests written blind to code |
|
|
177
|
+
| Quick audit of a diff someone else wrote | `review-only` — paste, get 3 opinions, no writer |
|
|
178
|
+
|
|
179
|
+
Make your own by dropping a YAML file in `~/.chorus/templates/`. Or duplicate one of the built-ins and tweak.
|
|
180
|
+
|
|
181
|
+
<details>
|
|
182
|
+
<summary><b>Custom template example</b></summary>
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
id: security-pre-merge
|
|
186
|
+
label: Security Pre-Merge
|
|
187
|
+
description: Sentinel persona on every reviewer; everyone must approve.
|
|
188
|
+
slots:
|
|
189
|
+
doer:
|
|
190
|
+
lineage: anthropic
|
|
191
|
+
model: claude-sonnet-4-6
|
|
192
|
+
reviewers:
|
|
193
|
+
- { lineage: openai, model: codex, persona: sentinel }
|
|
194
|
+
- { lineage: google, model: gemini-2.5-pro, persona: sentinel }
|
|
195
|
+
- { lineage: opencode, model: opencode-go/kimi-k2.6, persona: sentinel }
|
|
196
|
+
quorum:
|
|
197
|
+
type: unanimous
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
</details>
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Reviewer personas
|
|
205
|
+
|
|
206
|
+
Each reviewer can wear a "hat" — a focus area Chorus prepends to their prompt:
|
|
207
|
+
|
|
208
|
+
| Persona | What they look for |
|
|
209
|
+
|---|---|
|
|
210
|
+
| 🛡️ **Sentinel** | Security holes, auth bypass, injection |
|
|
211
|
+
| 🗺️ **Cartographer** | Cross-platform issues (Windows vs Mac, browser support) |
|
|
212
|
+
| 💰 **Accountant** | Cost regressions (extra DB queries, API calls) |
|
|
213
|
+
| ⚡ **Profiler** | Performance regressions |
|
|
214
|
+
| 🔍 **Inspector**, 📦 **Quartermaster**, 🛎️ **Concierge**, 🏛️ **Conservator**, 📚 **Librarian**, 🌐 **Translator** | …and more — see Personas page in cockpit |
|
|
215
|
+
|
|
216
|
+
Different personas reviewing the same change = wider net.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Why "different vendors" matters
|
|
221
|
+
|
|
222
|
+
You can run Chorus with three Claudes. We let you. But the value drops a lot.
|
|
223
|
+
|
|
224
|
+
A second Claude reviewing the first Claude's work is theatre — same training, same blind spots. Mix vendors (Claude + GPT + Gemini) and you get genuinely different angles, because they were trained on different data with different biases.
|
|
225
|
+
|
|
226
|
+
Templates let you encode this: each reviewer slot has a `lineage` (anthropic / openai / google / opencode / moonshot). Built-in templates mix vendors automatically.
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## What does it cost?
|
|
231
|
+
|
|
232
|
+
Two paths, depending on how you already pay for AI:
|
|
233
|
+
|
|
234
|
+
**Using subscriptions** (Claude Pro / ChatGPT Plus / Gemini Advanced — ~$20/mo each)
|
|
235
|
+
A typical review = **$0** out of pocket. Counts against the quota you already have.
|
|
236
|
+
|
|
237
|
+
**Using API keys** (pay-per-use)
|
|
238
|
+
A typical code-review run = **$0.30 to $1.50**, depending on diff size. If reviewers disagree and retry, 2–3× worst case.
|
|
239
|
+
|
|
240
|
+
Chorus adds **zero markup**. We don't see your tokens.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Permissions & safety
|
|
245
|
+
|
|
246
|
+
Reviewers run on your machine. You decide how much trust to give them:
|
|
247
|
+
|
|
248
|
+
| Mode | Read code | Write code | Network | When to use |
|
|
249
|
+
|---|:---:|:---:|:---:|---|
|
|
250
|
+
| 🔒 **Strict** | ✅ | ❌ | ❌ | Reviewing a diff you don't trust |
|
|
251
|
+
| 📁 **Workspace** *(default)* | ✅ | ✅ inside chat dir | ❌ | Day-to-day |
|
|
252
|
+
| 🔓 **Full** | ✅ | ✅ anywhere | ✅ | Personal machine, full trust |
|
|
253
|
+
|
|
254
|
+
Configure on first run, or anytime at *Settings → Permissions*.
|
|
255
|
+
|
|
256
|
+
> **Trust model in plain English.** "Workspace" means the reviewer can write files inside its working directory and run scoped commands, but can't reach the internet or write outside the sandbox. "Full" means anything-goes — only enable on a personal machine you own. Run `chorus doctor` to verify each AI tool got the sandbox you set.
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Use it from inside another AI tool
|
|
261
|
+
|
|
262
|
+
Chorus speaks MCP — the protocol Claude Code, Cursor, Codex, Gemini CLI etc. use to talk to other tools. So you can trigger a Chorus run *from inside* the AI tool you're already using.
|
|
263
|
+
|
|
264
|
+
Example, inside Claude Code:
|
|
265
|
+
|
|
266
|
+
> *"Run code-review on the diff against main using Chorus"*
|
|
267
|
+
|
|
268
|
+
Claude Code calls Chorus → Chorus fans out to other AI tools → results stream back into Claude Code. Useful when you want a second opinion without leaving the editor.
|
|
269
|
+
|
|
270
|
+
`chorus init` wires up MCP for the orchestrators it detects (Claude / Codex / Gemini / Cursor / Windsurf, etc.).
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Compared to other code-review tools
|
|
275
|
+
|
|
276
|
+
| | **Chorus** | CodeRabbit | Greptile | Cursor Review | GitHub Copilot |
|
|
277
|
+
|---|:---:|:---:|:---:|:---:|:---:|
|
|
278
|
+
| Multiple AI vendors review the same change | ✅ | ❌ | ❌ | ❌ | ❌ |
|
|
279
|
+
| Uses your existing AI subscriptions | ✅ | ❌ | ❌ | ❌ | ❌ |
|
|
280
|
+
| Runs locally (your code never leaves your existing AI vendors) | ✅ | ❌ | ❌ | partial | ❌ |
|
|
281
|
+
| Open source (modify + self-host) | ✅ Apache-2.0 | ❌ | ❌ | ❌ | ❌ |
|
|
282
|
+
| Custom review patterns | ✅ | partial | ❌ | ❌ | ❌ |
|
|
283
|
+
|
|
284
|
+
**The unique thing:** your code never goes to a new vendor. Chorus just orchestrates the AI tools you already use.
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## Commands
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
chorus init # one-time: detect + connect AI tools
|
|
292
|
+
chorus start --ui # boot + open browser
|
|
293
|
+
chorus stop # shut it down
|
|
294
|
+
chorus status # is it running?
|
|
295
|
+
chorus doctor # diagnose AI tool detection / sandbox issues
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Telemetry
|
|
301
|
+
|
|
302
|
+
Chorus pings home once on startup and once every 24h. The payload is fixed:
|
|
303
|
+
|
|
304
|
+
```json
|
|
305
|
+
{
|
|
306
|
+
"schema": 1,
|
|
307
|
+
"installId": "<random uuid>",
|
|
308
|
+
"version": "0.7.0",
|
|
309
|
+
"os": "linux", "arch": "x64", "node": "22",
|
|
310
|
+
"daemonUptimeSeconds": 86400,
|
|
311
|
+
"chatsLast24h": 12
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**Never sent:** chat content, prompts, file paths, repo paths, model names, voice/template names, hostnames, IPs, API keys.
|
|
316
|
+
|
|
317
|
+
Turn it off any of three ways:
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
export CHORUS_TELEMETRY=0 # env var
|
|
321
|
+
touch ~/.chorus/no-telemetry # touch-file
|
|
322
|
+
# or click "Off" in cockpit Settings → Telemetry
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
The install ID lives at `~/.chorus/install-id` — `rm` it for a fresh one.
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Roadmap
|
|
330
|
+
|
|
331
|
+
- [x] **v0.5** — Daemon + cockpit + 4 AI vendors
|
|
332
|
+
- [x] **v0.6** — MCP server, persona system
|
|
333
|
+
- [x] **v0.7** — OpenRouter integration, voices table, real-time sidebar
|
|
334
|
+
- [ ] **v0.8** — Multi-stage review (write → review → fix → re-review)
|
|
335
|
+
- [ ] **v0.9** — Per-voice persona overrides
|
|
336
|
+
- [ ] **v1.0** — Hosted GitHub App + cloud fan-out
|
|
337
|
+
|
|
338
|
+
Full picture in [ROADMAP.md](./ROADMAP.md).
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
<details>
|
|
343
|
+
<summary><b>How it works (under the hood)</b></summary>
|
|
344
|
+
|
|
345
|
+
```mermaid
|
|
346
|
+
flowchart TB
|
|
347
|
+
User([👤 You])
|
|
348
|
+
Cockpit[Cockpit<br/>:5050 · web UI]
|
|
349
|
+
Daemon[Chorus daemon<br/>:7707 · local server]
|
|
350
|
+
DB[(SQLite<br/>~/.chorus/chorus.db)]
|
|
351
|
+
MCP[MCP server<br/>for editor integrations]
|
|
352
|
+
|
|
353
|
+
Claude[🤖 Claude<br/>writer]
|
|
354
|
+
Codex[🦾 GPT<br/>reviewer]
|
|
355
|
+
Gemini[💎 Gemini<br/>reviewer]
|
|
356
|
+
|
|
357
|
+
User -->|paste task| Cockpit
|
|
358
|
+
Cockpit <-->|REST + live updates| Daemon
|
|
359
|
+
Daemon <--> DB
|
|
360
|
+
Daemon -->|spawn| Claude
|
|
361
|
+
Daemon -->|spawn| Codex
|
|
362
|
+
Daemon -->|spawn| Gemini
|
|
363
|
+
User -.->|"call Chorus from your AI"| MCP --> Daemon
|
|
364
|
+
|
|
365
|
+
classDef user fill:#fef3c7,stroke:#f59e0b,color:#000
|
|
366
|
+
classDef chorus fill:#dbeafe,stroke:#3b82f6,color:#000
|
|
367
|
+
classDef llm fill:#fce7f3,stroke:#ec4899,color:#000
|
|
368
|
+
class User user
|
|
369
|
+
class Daemon,Cockpit,MCP,DB chorus
|
|
370
|
+
class Claude,Codex,Gemini llm
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**Three pieces:**
|
|
374
|
+
|
|
375
|
+
- **Daemon** — small local server (port 7707) that spawns AI tools as subprocesses, parses their output, and tracks state in a SQLite database at `~/.chorus/chorus.db`.
|
|
376
|
+
- **Cockpit** — the web UI at port 5050 (Next.js). Templates, chats, voices, settings.
|
|
377
|
+
- **MCP server** — lets *other* AI tools (Claude Code, Cursor, etc.) call Chorus programmatically.
|
|
378
|
+
|
|
379
|
+
Each AI runs as an isolated subprocess. Chorus reads their structured output (stream-JSON), compares against the template's quorum rule, and emits a verdict. Nothing leaves your machine except the calls to the AI vendors you already use.
|
|
380
|
+
|
|
381
|
+
Code layout:
|
|
382
|
+
- `src/daemon/` — Fastify server + agent shims (one per AI tool)
|
|
383
|
+
- `src/app/` — Next.js cockpit
|
|
384
|
+
- `src/mcp/` — JSON-RPC MCP server
|
|
385
|
+
- `src/lib/db/` — schema + migrations
|
|
386
|
+
|
|
387
|
+
</details>
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## Contributing
|
|
392
|
+
|
|
393
|
+
PRs welcome.
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
git clone https://github.com/chorus-codes/chorus.git
|
|
397
|
+
cd chorus && pnpm install
|
|
398
|
+
pnpm dev:daemon # daemon on :7707
|
|
399
|
+
pnpm dev # cockpit on :5050
|
|
400
|
+
pnpm test # full suite
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
Read [`AGENTS.md`](./AGENTS.md) first — Next.js 16 has breaking changes from older versions. Coverage target on new code: 80%+.
|
|
404
|
+
|
|
405
|
+
We dogfood: PRs to Chorus go through Chorus before merging.
|
|
406
|
+
|
|
407
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for the full guide.
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## Links
|
|
412
|
+
|
|
413
|
+
- 🌐 Website: <https://chorus.codes>
|
|
414
|
+
- 🗺️ Roadmap: [./ROADMAP.md](./ROADMAP.md)
|
|
415
|
+
- 🐛 Issues: <https://github.com/chorus-codes/chorus/issues>
|
|
416
|
+
- 💬 Discussions: <https://github.com/chorus-codes/chorus/discussions>
|
|
417
|
+
- 🐦 Twitter / X: [@chorus_codes](https://twitter.com/chorus_codes)
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
## License
|
|
422
|
+
|
|
423
|
+
[Apache-2.0](./LICENSE). Use it however you want, including commercially.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run a multi-LLM Chorus peer review on a task
|
|
3
|
+
argument-hint: [template] <work description>
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Route this request to the Chorus MCP server. Use the `mcp__chorus__*` tools — do NOT try to do the review yourself.
|
|
7
|
+
|
|
8
|
+
**Arguments:** $ARGUMENTS
|
|
9
|
+
|
|
10
|
+
## Steps
|
|
11
|
+
|
|
12
|
+
1. **Resolve the template.** If $ARGUMENTS starts with a known template id (e.g. `bug-diagnose`, `code-review`, `red-green`, `architecture`), peel it off as the template and treat the rest as the work payload. Otherwise call `mcp__chorus__list_templates`, show the user `name + description` for each, and ask which to use. Don't guess — picking the wrong template wastes a multi-minute, multi-LLM run.
|
|
13
|
+
|
|
14
|
+
2. **Create the chat.** Call `mcp__chorus__create_chat` with `{ template, work }`. Capture the returned `chatId`.
|
|
15
|
+
|
|
16
|
+
3. **Wait for the result.** Call `mcp__chorus__wait_for_chat({ chatId })`. Stream any progress notifications back to the user as they arrive (template phases, reviewer verdicts).
|
|
17
|
+
|
|
18
|
+
4. **Summarise.** When the chat completes, report:
|
|
19
|
+
- The final verdict (approved / changes-requested / blocked)
|
|
20
|
+
- The 3-5 highest-priority findings, each with a one-line rationale and a file:line pointer if the reviewer gave one
|
|
21
|
+
- The Chorus cockpit URL for the run if available (typically `http://127.0.0.1:5050/runs/<chatId>`)
|
|
22
|
+
|
|
23
|
+
Do not paste the full transcript. The user can open the run page for that.
|
|
24
|
+
|
|
25
|
+
## Failure handling
|
|
26
|
+
|
|
27
|
+
- If `create_chat` returns `MCP server chorus not connected` or any tool throws a connection error, tell the user to run `chorus start` (or `chorus status` to check) and retry. Do not fall back to doing the review yourself.
|
|
28
|
+
- If the chat is `blocked` (waiting for human input), surface the question verbatim and stop — let the user respond via `mcp__chorus__resume_chat`.
|
|
29
|
+
- If the chat fails (`failed` status), report the error from `get_chat_status` and suggest the cockpit URL for the full log.
|
|
30
|
+
|
|
31
|
+
## Hard rules
|
|
32
|
+
|
|
33
|
+
- Never substitute your own review for a Chorus run when the user asked for `/chorus` — the whole point is cross-lineage second opinions.
|
|
34
|
+
- Never invent a template id. If $ARGUMENTS doesn't match a real template, ask.
|
|
35
|
+
- Never call `cancel_chat` unless the user explicitly asks to abort.
|