chorus-codes 0.7.3 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +7 -7
- package/.next/build-manifest.json +13 -14
- package/.next/next-minimal-server.js.nft.json +1 -1
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +6 -0
- package/.next/required-server-files.js +2 -0
- package/.next/required-server-files.json +2 -0
- package/.next/server/app/_global-error/page.js +32 -10
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.meta +2 -1
- package/.next/server/app/_global-error.rsc +8 -9
- package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -9
- package/.next/server/app/_global-error.segments/{__PAGE__.segment.rsc → _global-error/__PAGE__.segment.rsc} +2 -2
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +3 -4
- package/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +2 -13
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -3
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +12 -10
- package/.next/server/app/_not-found.segments/_full.segment.rsc +12 -10
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +4 -2
- package/.next/server/app/api/daemon/[...path]/route.js +1 -7
- package/.next/server/app/api/daemon/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/daemon/[...path]/route_client-reference-manifest.js +1 -3
- package/.next/server/app/api/run-artifacts/[chatId]/route.js +1 -6
- package/.next/server/app/api/run-artifacts/[chatId]/route.js.nft.json +1 -1
- package/.next/server/app/api/run-artifacts/[chatId]/route_client-reference-manifest.js +1 -3
- package/.next/server/app/connect/page.js +2 -15
- package/.next/server/app/connect/page.js.nft.json +1 -1
- package/.next/server/app/connect/page_client-reference-manifest.js +1 -3
- package/.next/server/app/favicon.ico/route.js +1 -8
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next/server/app/icon.svg/route.js +1 -7
- package/.next/server/app/icon.svg/route.js.nft.json +1 -1
- package/.next/server/app/new/page.js +2 -14
- package/.next/server/app/new/page.js.nft.json +1 -1
- package/.next/server/app/new/page_client-reference-manifest.js +1 -3
- package/.next/server/app/new.html +1 -1
- package/.next/server/app/new.rsc +14 -14
- package/.next/server/app/new.segments/_full.segment.rsc +14 -14
- package/.next/server/app/new.segments/_head.segment.rsc +4 -4
- package/.next/server/app/new.segments/_index.segment.rsc +4 -4
- package/.next/server/app/new.segments/_tree.segment.rsc +4 -4
- package/.next/server/app/new.segments/new/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/new.segments/new.segment.rsc +3 -3
- package/.next/server/app/onboarding/page.js +2 -14
- package/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -3
- package/.next/server/app/onboarding.html +1 -1
- package/.next/server/app/onboarding.rsc +14 -14
- package/.next/server/app/onboarding.segments/_full.segment.rsc +14 -14
- package/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
- package/.next/server/app/onboarding.segments/_index.segment.rsc +4 -4
- package/.next/server/app/onboarding.segments/_tree.segment.rsc +4 -4
- package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
- package/.next/server/app/page.js +2 -17
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -3
- package/.next/server/app/personas/page.js +2 -14
- package/.next/server/app/personas/page.js.nft.json +1 -1
- package/.next/server/app/personas/page_client-reference-manifest.js +1 -3
- package/.next/server/app/personas.html +1 -1
- package/.next/server/app/personas.rsc +14 -14
- package/.next/server/app/personas.segments/_full.segment.rsc +14 -14
- package/.next/server/app/personas.segments/_head.segment.rsc +4 -4
- package/.next/server/app/personas.segments/_index.segment.rsc +4 -4
- package/.next/server/app/personas.segments/_tree.segment.rsc +4 -4
- package/.next/server/app/personas.segments/personas/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/personas.segments/personas.segment.rsc +3 -3
- package/.next/server/app/runs/[runId]/page.js +2 -16
- package/.next/server/app/runs/[runId]/page.js.nft.json +1 -1
- package/.next/server/app/runs/[runId]/page_client-reference-manifest.js +1 -3
- package/.next/server/app/runs/page.js +2 -15
- package/.next/server/app/runs/page.js.nft.json +1 -1
- package/.next/server/app/runs/page_client-reference-manifest.js +1 -3
- package/.next/server/app/settings/page.js +26 -14
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -3
- package/.next/server/app/settings/permissions/page.js +2 -14
- package/.next/server/app/settings/permissions/page.js.nft.json +1 -1
- package/.next/server/app/settings/permissions/page_client-reference-manifest.js +1 -3
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +14 -14
- package/.next/server/app/settings.segments/_full.segment.rsc +14 -14
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_tree.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/server/app/templates/page.js +2 -14
- package/.next/server/app/templates/page.js.nft.json +1 -1
- package/.next/server/app/templates/page_client-reference-manifest.js +1 -3
- package/.next/server/app/templates.html +1 -1
- package/.next/server/app/templates.rsc +14 -14
- package/.next/server/app/templates.segments/_full.segment.rsc +14 -14
- package/.next/server/app/templates.segments/_head.segment.rsc +4 -4
- package/.next/server/app/templates.segments/_index.segment.rsc +4 -4
- package/.next/server/app/templates.segments/_tree.segment.rsc +4 -4
- package/.next/server/app/templates.segments/templates/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/templates.segments/templates.segment.rsc +3 -3
- package/.next/server/app-paths-manifest.json +7 -7
- package/.next/server/chunks/144.js +25 -0
- package/.next/server/chunks/332.js +18 -0
- package/.next/server/chunks/418.js +1 -0
- package/.next/server/chunks/429.js +1 -0
- package/.next/server/chunks/451.js +45 -0
- package/.next/server/chunks/498.js +1 -0
- package/.next/server/chunks/504.js +1 -0
- package/.next/server/chunks/557.js +5 -0
- package/.next/server/chunks/668.js +25 -0
- package/.next/server/chunks/681.js +1 -0
- package/.next/server/chunks/946.js +1 -0
- package/.next/server/chunks/95.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -21
- package/.next/server/middleware-manifest.json +2 -2
- package/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +1 -51
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -5
- package/.next/server/webpack-runtime.js +1 -0
- package/.next/static/VWSkj_Yx6OKSjPmYY8ewj/_buildManifest.js +1 -0
- package/.next/static/chunks/116-0372d11bc2a9ac4d.js +25 -0
- package/.next/static/chunks/128-a5d059bf5b2e5090.js +32 -0
- package/.next/static/chunks/15-d438a2b057302bed.js +1 -0
- package/.next/static/chunks/344-1f06059a92faa936.js +1 -0
- package/.next/static/chunks/720-9732eeb760e004e3.js +5 -0
- package/.next/static/chunks/744-2b89d96d64610581.js +1 -0
- package/.next/static/chunks/app/_global-error/page-c01ad9f9473ce080.js +1 -0
- package/.next/static/chunks/app/_not-found/page-715bac6dc7f3427d.js +1 -0
- package/.next/static/chunks/app/api/daemon/[...path]/route-c01ad9f9473ce080.js +1 -0
- package/.next/static/chunks/app/api/run-artifacts/[chatId]/route-c01ad9f9473ce080.js +1 -0
- package/.next/static/chunks/app/connect/page-c09d9fb410c468b7.js +1 -0
- package/.next/static/chunks/app/layout-df8acd5bd06cbe45.js +1 -0
- package/.next/static/chunks/app/new/page-e4923b87c7a7b6ae.js +1 -0
- package/.next/static/chunks/app/onboarding/page-4c87427335371aaa.js +1 -0
- package/.next/static/chunks/app/page-3c0d23c063b036eb.js +1 -0
- package/.next/static/chunks/app/personas/page-a130cd11d8cbd832.js +1 -0
- package/.next/static/chunks/app/runs/[runId]/page-aa118bfeb6508779.js +1 -0
- package/.next/static/chunks/app/runs/page-503439d57f433574.js +1 -0
- package/.next/static/chunks/app/settings/page-64d7d48d2413a18b.js +25 -0
- package/.next/static/chunks/app/settings/permissions/page-18bf0e6d84be8fad.js +1 -0
- package/.next/static/chunks/app/templates/page-db5165c6311bf6e1.js +1 -0
- package/.next/static/chunks/ed64ccb0-b7d2b5246d18ca7e.js +1 -0
- package/.next/static/chunks/framework-dc9b726cfb42e402.js +1 -0
- package/.next/static/chunks/main-2088f7ac0f762d6a.js +5 -0
- package/.next/static/chunks/main-app-e9f7985e32dc8a63.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-c01ad9f9473ce080.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-c01ad9f9473ce080.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-538b25894f1d36d8.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-c01ad9f9473ce080.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c01ad9f9473ce080.js +1 -0
- package/.next/static/chunks/webpack-87142ab87b87c8fb.js +1 -0
- package/.next/static/css/a552ff3997000a18.css +3 -0
- package/.next/trace +19 -1
- package/.next/trace-build +1 -1
- package/.next/types/app/api/daemon/[...path]/route.ts +351 -0
- package/.next/types/app/api/run-artifacts/[chatId]/route.ts +351 -0
- package/.next/types/app/connect/page.ts +87 -0
- package/.next/types/app/layout.ts +87 -0
- package/.next/types/app/new/page.ts +87 -0
- package/.next/types/app/onboarding/page.ts +87 -0
- package/.next/types/app/page.ts +87 -0
- package/.next/types/app/personas/page.ts +87 -0
- package/.next/types/app/runs/[runId]/page.ts +87 -0
- package/.next/types/app/runs/page.ts +87 -0
- package/.next/types/app/settings/page.ts +87 -0
- package/.next/types/app/settings/permissions/page.ts +87 -0
- package/.next/types/app/templates/page.ts +87 -0
- package/.next/types/package.json +1 -0
- package/dist/daemon/index.js +1 -1
- package/dist/mcp/index.js +1 -1
- package/package.json +3 -3
- package/.next/build/chunks/[root-of-the-server]__0d-m0h0._.js +0 -206
- package/.next/build/chunks/[root-of-the-server]__0d-m0h0._.js.map +0 -8
- package/.next/build/chunks/[root-of-the-server]__0ubbtyl._.js +0 -500
- package/.next/build/chunks/[root-of-the-server]__0ubbtyl._.js.map +0 -11
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_06e.r3r._.js +0 -13
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_06e.r3r._.js.map +0 -5
- package/.next/build/chunks/[turbopack]_runtime.js +0 -890
- package/.next/build/chunks/[turbopack]_runtime.js.map +0 -11
- package/.next/build/chunks/node_modules__pnpm_0e-dfa2._.js +0 -6681
- package/.next/build/chunks/node_modules__pnpm_0e-dfa2._.js.map +0 -47
- package/.next/build/package.json +0 -1
- package/.next/build/postcss.js +0 -6
- package/.next/build/postcss.js.map +0 -5
- package/.next/cache/.previewinfo +0 -1
- package/.next/cache/.rscinfo +0 -1
- package/.next/cache/.tsbuildinfo +0 -1
- package/.next/diagnostics/route-bundle-stats.json +0 -176
- package/.next/fallback-build-manifest.json +0 -13
- package/.next/server/app/_global-error/page/app-paths-manifest.json +0 -3
- package/.next/server/app/_global-error/page/build-manifest.json +0 -17
- package/.next/server/app/_global-error/page/next-font-manifest.json +0 -6
- package/.next/server/app/_global-error/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/_global-error/page/server-reference-manifest.json +0 -4
- package/.next/server/app/_global-error/page.js.map +0 -5
- package/.next/server/app/_not-found/page/app-paths-manifest.json +0 -3
- package/.next/server/app/_not-found/page/build-manifest.json +0 -17
- package/.next/server/app/_not-found/page/next-font-manifest.json +0 -11
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/_not-found/page/server-reference-manifest.json +0 -4
- package/.next/server/app/_not-found/page.js.map +0 -5
- package/.next/server/app/api/daemon/[...path]/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/daemon/[...path]/route/build-manifest.json +0 -9
- package/.next/server/app/api/daemon/[...path]/route/server-reference-manifest.json +0 -4
- package/.next/server/app/api/daemon/[...path]/route.js.map +0 -5
- package/.next/server/app/api/run-artifacts/[chatId]/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/run-artifacts/[chatId]/route/build-manifest.json +0 -9
- package/.next/server/app/api/run-artifacts/[chatId]/route/server-reference-manifest.json +0 -4
- package/.next/server/app/api/run-artifacts/[chatId]/route.js.map +0 -5
- package/.next/server/app/connect/page/app-paths-manifest.json +0 -3
- package/.next/server/app/connect/page/build-manifest.json +0 -17
- package/.next/server/app/connect/page/next-font-manifest.json +0 -11
- package/.next/server/app/connect/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/connect/page/server-reference-manifest.json +0 -4
- package/.next/server/app/connect/page.js.map +0 -5
- package/.next/server/app/favicon.ico/route/app-paths-manifest.json +0 -3
- package/.next/server/app/favicon.ico/route/build-manifest.json +0 -9
- package/.next/server/app/favicon.ico/route.js.map +0 -5
- package/.next/server/app/icon.svg/route/app-paths-manifest.json +0 -3
- package/.next/server/app/icon.svg/route/build-manifest.json +0 -9
- package/.next/server/app/icon.svg/route.js.map +0 -5
- package/.next/server/app/new/page/app-paths-manifest.json +0 -3
- package/.next/server/app/new/page/build-manifest.json +0 -17
- package/.next/server/app/new/page/next-font-manifest.json +0 -11
- package/.next/server/app/new/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/new/page/server-reference-manifest.json +0 -4
- package/.next/server/app/new/page.js.map +0 -5
- package/.next/server/app/onboarding/page/app-paths-manifest.json +0 -3
- package/.next/server/app/onboarding/page/build-manifest.json +0 -17
- package/.next/server/app/onboarding/page/next-font-manifest.json +0 -11
- package/.next/server/app/onboarding/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/onboarding/page/server-reference-manifest.json +0 -4
- package/.next/server/app/onboarding/page.js.map +0 -5
- package/.next/server/app/page/app-paths-manifest.json +0 -3
- package/.next/server/app/page/build-manifest.json +0 -17
- package/.next/server/app/page/next-font-manifest.json +0 -11
- package/.next/server/app/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/page/server-reference-manifest.json +0 -4
- package/.next/server/app/page.js.map +0 -5
- package/.next/server/app/personas/page/app-paths-manifest.json +0 -3
- package/.next/server/app/personas/page/build-manifest.json +0 -17
- package/.next/server/app/personas/page/next-font-manifest.json +0 -11
- package/.next/server/app/personas/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/personas/page/server-reference-manifest.json +0 -4
- package/.next/server/app/personas/page.js.map +0 -5
- package/.next/server/app/runs/[runId]/page/app-paths-manifest.json +0 -3
- package/.next/server/app/runs/[runId]/page/build-manifest.json +0 -17
- package/.next/server/app/runs/[runId]/page/next-font-manifest.json +0 -11
- package/.next/server/app/runs/[runId]/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/runs/[runId]/page/server-reference-manifest.json +0 -4
- package/.next/server/app/runs/[runId]/page.js.map +0 -5
- package/.next/server/app/runs/page/app-paths-manifest.json +0 -3
- package/.next/server/app/runs/page/build-manifest.json +0 -17
- package/.next/server/app/runs/page/next-font-manifest.json +0 -11
- package/.next/server/app/runs/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/runs/page/server-reference-manifest.json +0 -4
- package/.next/server/app/runs/page.js.map +0 -5
- package/.next/server/app/settings/page/app-paths-manifest.json +0 -3
- package/.next/server/app/settings/page/build-manifest.json +0 -17
- package/.next/server/app/settings/page/next-font-manifest.json +0 -11
- package/.next/server/app/settings/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/settings/page/server-reference-manifest.json +0 -4
- package/.next/server/app/settings/page.js.map +0 -5
- package/.next/server/app/settings/permissions/page/app-paths-manifest.json +0 -3
- package/.next/server/app/settings/permissions/page/build-manifest.json +0 -17
- package/.next/server/app/settings/permissions/page/next-font-manifest.json +0 -11
- package/.next/server/app/settings/permissions/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/settings/permissions/page/server-reference-manifest.json +0 -4
- package/.next/server/app/settings/permissions/page.js.map +0 -5
- package/.next/server/app/templates/page/app-paths-manifest.json +0 -3
- package/.next/server/app/templates/page/build-manifest.json +0 -17
- package/.next/server/app/templates/page/next-font-manifest.json +0 -11
- package/.next/server/app/templates/page/react-loadable-manifest.json +0 -1
- package/.next/server/app/templates/page/server-reference-manifest.json +0 -4
- package/.next/server/app/templates/page.js.map +0 -5
- package/.next/server/chunks/05w9_next_0xdex7s._.js +0 -13
- package/.next/server/chunks/05w9_next_0xdex7s._.js.map +0 -1
- package/.next/server/chunks/05w9_next_dist_esm_build_templates_app-route_0.73kst.js +0 -3
- package/.next/server/chunks/05w9_next_dist_esm_build_templates_app-route_0.73kst.js.map +0 -1
- package/.next/server/chunks/[externals]_next_dist_0arv.vj._.js +0 -3
- package/.next/server/chunks/[externals]_next_dist_0arv.vj._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__02xvj_h._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__02xvj_h._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0i7ddmr._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0i7ddmr._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0sxhm1i._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0sxhm1i._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__12xxby8._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__12xxby8._.js.map +0 -1
- package/.next/server/chunks/[turbopack]_runtime.js +0 -903
- package/.next/server/chunks/[turbopack]_runtime.js.map +0 -11
- package/.next/server/chunks/_next-internal_server_app_api_daemon_[___path]_route_actions_0a5g-ar.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_daemon_[___path]_route_actions_0a5g-ar.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_run-artifacts_[chatId]_route_actions_07e2ul1.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_api_run-artifacts_[chatId]_route_actions_07e2ul1.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_0-0ehc~.js +0 -3
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_0-0ehc~.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_0q4woef._.js +0 -3
- package/.next/server/chunks/ssr/05w9_next_dist_0q4woef._.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_0ybpwn1._.js +0 -6
- package/.next/server/chunks/ssr/05w9_next_dist_0ybpwn1._.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_0~859ji._.js +0 -6
- package/.next/server/chunks/ssr/05w9_next_dist_0~859ji._.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_12u3mib._.js +0 -3
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_12u3mib._.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_forbidden_04fbe_..js +0 -3
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_forbidden_04fbe_..js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_global-error_0brpl_..js +0 -3
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_global-error_0brpl_..js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_unauthorized_0~2g66g.js +0 -3
- package/.next/server/chunks/ssr/05w9_next_dist_client_components_builtin_unauthorized_0~2g66g.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0-f~6r1.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0-f~6r1.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_00czn99.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_00czn99.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_01nm1_6.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_01nm1_6.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0jcydv7.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0jcydv7.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0km.hvi.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0km.hvi.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0ln8_qt.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0ln8_qt.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0n3h-j1.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0n3h-j1.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0nc~v.o.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0nc~v.o.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0o6nct3.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0o6nct3.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0veve6-.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0veve6-.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0wh5tpo.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_0wh5tpo.js.map +0 -1
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_10~fsfu.js +0 -4
- package/.next/server/chunks/ssr/05w9_next_dist_esm_build_templates_app-page_10~fsfu.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0-7oo8o._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0-7oo8o._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__01t9qm2._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__01t9qm2._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__076~t6~._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__076~t6~._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0_tow-j._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0_tow-j._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0bsym8v._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0bsym8v._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0bwjwxi._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0bwjwxi._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0c2e5js._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0c2e5js._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0d_59pi._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0d_59pi._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0dxp2sg._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0dxp2sg._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0e58.k_._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0e58.k_._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ek20dj._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ek20dj._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0h2o43u._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0h2o43u._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0hn95cc._.js +0 -33
- package/.next/server/chunks/ssr/[root-of-the-server]__0hn95cc._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ic.~tw._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ic.~tw._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0jltd-t._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0jltd-t._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0k_96yx._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0k_96yx._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0l5ko41._.js +0 -19
- package/.next/server/chunks/ssr/[root-of-the-server]__0l5ko41._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0p~21w8._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0p~21w8._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0tc4gl8._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0tc4gl8._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0we1ana._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0we1ana._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0xlzjhk._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0xlzjhk._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0ygksjc._.js +0 -33
- package/.next/server/chunks/ssr/[root-of-the-server]__0ygksjc._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0yhjl35._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0yhjl35._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0~cqs-9._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0~cqs-9._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__109.1j0._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__109.1j0._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__10gepjv._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__10gepjv._.js.map +0 -1
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +0 -903
- package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +0 -11
- package/.next/server/chunks/ssr/_01t~nag._.js +0 -30
- package/.next/server/chunks/ssr/_01t~nag._.js.map +0 -1
- package/.next/server/chunks/ssr/_097xk3e._.js +0 -3
- package/.next/server/chunks/ssr/_097xk3e._.js.map +0 -1
- package/.next/server/chunks/ssr/_0bxoss0._.js +0 -30
- package/.next/server/chunks/ssr/_0bxoss0._.js.map +0 -1
- package/.next/server/chunks/ssr/_0ck1n8_._.js +0 -7
- package/.next/server/chunks/ssr/_0ck1n8_._.js.map +0 -1
- package/.next/server/chunks/ssr/_0d-304b._.js +0 -30
- package/.next/server/chunks/ssr/_0d-304b._.js.map +0 -1
- package/.next/server/chunks/ssr/_0p-_ahq._.js +0 -30
- package/.next/server/chunks/ssr/_0p-_ahq._.js.map +0 -1
- package/.next/server/chunks/ssr/_0qlx_85._.js +0 -7
- package/.next/server/chunks/ssr/_0qlx_85._.js.map +0 -1
- package/.next/server/chunks/ssr/_0y43gyn._.js +0 -27
- package/.next/server/chunks/ssr/_0y43gyn._.js.map +0 -1
- package/.next/server/chunks/ssr/_11i54x9._.js +0 -30
- package/.next/server/chunks/ssr/_11i54x9._.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_connect_page_actions_0vb8s6u.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_connect_page_actions_0vb8s6u.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_new_page_actions_08q6mx5.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_new_page_actions_08q6mx5.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_onboarding_page_actions_0qdby58.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_onboarding_page_actions_0qdby58.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_personas_page_actions_08fq21v.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_personas_page_actions_08fq21v.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_runs_[runId]_page_actions_0z6r2tz.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_runs_[runId]_page_actions_0z6r2tz.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_runs_page_actions_04_e1xr.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_runs_page_actions_04_e1xr.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_0mr68ai.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_0mr68ai.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_permissions_page_actions_0cr.qtc.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_permissions_page_actions_0cr.qtc.js.map +0 -1
- package/.next/server/chunks/ssr/_next-internal_server_app_templates_page_actions_0n8gow3.js +0 -3
- package/.next/server/chunks/ssr/_next-internal_server_app_templates_page_actions_0n8gow3.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_0~j0k.e._.js +0 -33
- package/.next/server/chunks/ssr/node_modules__pnpm_0~j0k.e._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_new_page_tsx_0av4n2k._.js +0 -3
- package/.next/server/chunks/ssr/src_app_new_page_tsx_0av4n2k._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +0 -3
- package/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_personas_page_tsx_0jx9vyh._.js +0 -3
- package/.next/server/chunks/ssr/src_app_personas_page_tsx_0jx9vyh._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +0 -27
- package/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js.map +0 -1
- package/.next/server/chunks/ssr/src_app_templates_page_tsx_0tml2wg._.js +0 -3
- package/.next/server/chunks/ssr/src_app_templates_page_tsx_0tml2wg._.js.map +0 -1
- package/.next/server/chunks/ssr/src_components_0j77o23._.js +0 -3
- package/.next/server/chunks/ssr/src_components_0j77o23._.js.map +0 -1
- package/.next/server/chunks/ssr/src_components_0lc2g58._.js +0 -3
- package/.next/server/chunks/ssr/src_components_0lc2g58._.js.map +0 -1
- package/.next/server/chunks/ssr/src_components_live-run-real_index_tsx_0zzsdt9._.js +0 -3
- package/.next/server/chunks/ssr/src_components_live-run-real_index_tsx_0zzsdt9._.js.map +0 -1
- package/.next/static/UrNBcWJ5KltIL6ABEsC-R/_buildManifest.js +0 -11
- package/.next/static/UrNBcWJ5KltIL6ABEsC-R/_clientMiddlewareManifest.js +0 -1
- package/.next/static/chunks/0.dctgbd3j_xg.js +0 -2
- package/.next/static/chunks/0.~gqf.-9g-fh.js +0 -1
- package/.next/static/chunks/01as9r5n5k.xo.js +0 -1
- package/.next/static/chunks/034b~pjm7y20e.js +0 -1
- package/.next/static/chunks/05o4oa_9xfaun.js +0 -1
- package/.next/static/chunks/08dnw-0gzytmy.js +0 -5
- package/.next/static/chunks/08f2b7tuf53ep.js +0 -1
- package/.next/static/chunks/0a_u3vdu6tc~f.js +0 -1
- package/.next/static/chunks/0am72irwq2bx0.js +0 -5
- package/.next/static/chunks/0c-d1bhb8byrx.js +0 -1
- package/.next/static/chunks/0s4~w2~is76y1.js +0 -1
- package/.next/static/chunks/0ue4qcctkv016.js +0 -4
- package/.next/static/chunks/0uok5~eqi6zku.js +0 -1
- package/.next/static/chunks/0u~3g88j1g2xp.css +0 -3
- package/.next/static/chunks/0v3lyuj75aq50.js +0 -1
- package/.next/static/chunks/0whnu9t5k-ij7.js +0 -1
- package/.next/static/chunks/0x00t3du13-u4.js +0 -25
- package/.next/static/chunks/0xs3ktzdh4rw4.js +0 -1
- package/.next/static/chunks/0~8r6nhrrl~f9.js +0 -1
- package/.next/static/chunks/10jdu00ksgu69.js +0 -1
- package/.next/static/chunks/10ld26~0f71ye.js +0 -25
- package/.next/static/chunks/11k2wbc04r__f.js +0 -25
- package/.next/static/chunks/13-.xgv2t5u6m.js +0 -31
- package/.next/static/chunks/152ec.u3_e~ya.js +0 -25
- package/.next/static/chunks/172tpttbumwi1.js +0 -25
- package/.next/static/chunks/turbopack-0-al833jv3to~.js +0 -1
- package/.next/static/media/favicon.0i~66t__91s97.ico +0 -0
- package/.next/static/media/icon.15.86wme~cdlv.svg +0 -6
- package/.next/turbopack +0 -0
- /package/.next/static/{UrNBcWJ5KltIL6ABEsC-R → VWSkj_Yx6OKSjPmYY8ewj}/_ssgManifest.js +0 -0
- /package/.next/static/chunks/{03~yq9q893hmn.js → polyfills-42372ed130431b0a.js} +0 -0
- /package/.next/static/media/{caa3a2e1cccd8315-s.p.16t1db8_9y2o~.woff2 → 4cf2300e9c8272f7-s.p.woff2} +0 -0
- /package/.next/static/media/{bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2 → 747892c23ea88013-s.woff2} +0 -0
- /package/.next/static/media/{8a480f0b521d4e75-s.06d3mdzz5bre_.woff2 → 8d697b304b401681-s.woff2} +0 -0
- /package/.next/static/media/{797e433ab948586e-s.p.0.q-h669a_dqa.woff2 → 93f479601ee12b01-s.p.woff2} +0 -0
- /package/.next/static/media/{4fa387ec64143e14-s.0q3udbd2bu5yp.woff2 → 9610d9e46709d722-s.woff2} +0 -0
- /package/.next/static/media/{7178b3e590c64307-s.11.cyxs5p-0z~.woff2 → ba015fad6dcf6784-s.woff2} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/api/settings.ts","../../../../src/lib/api/client.ts","../../../../src/lib/lineage-maps.ts","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/arrow-right.ts","../../../../node_modules/.pnpm/class-variance-authority%400.7.1/node_modules/class-variance-authority/dist/index.mjs","../../../../src/components/ui/badge.tsx","../../../../src/components/ui/card.tsx","../../../../src/components/app-shell.tsx","../../../../src/components/page-header.tsx","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/info.ts","../../../../src/lib/types.ts"],"sourcesContent":["// Settings and secrets API endpoints\nimport type { ListEnvelope, Settings, Secret } from \"@/lib/types\";\nimport { fetchFromDaemon } from \"./client\";\n\nexport type SandboxProfile = \"strict\" | \"workspace\" | \"full\";\n\nexport interface PermissionSettings {\n sandboxProfile: SandboxProfile;\n autoApprovePrompts: boolean;\n networkAccess: boolean;\n profileDescriptions?: Record<SandboxProfile, { label: string; description: string }>;\n}\n\nexport async function getPermissions(): Promise<PermissionSettings> {\n return fetchFromDaemon<PermissionSettings>(\"/settings/permissions\");\n}\n\nexport type DetectableCliId =\n | \"claude-code\"\n | \"codex-cli\"\n | \"gemini-cli\"\n | \"opencode-cli\"\n | \"kimi-cli\";\n\nexport interface CliDetection {\n id: DetectableCliId;\n found: boolean;\n path?: string;\n source?: \"path\" | \"fallback\" | \"manual\";\n /** Populated on manual validation failures — surfaces \"no file at\n * that path\", \"binary doesn't look like the claude CLI\", etc. so\n * the UI can show a concrete reason inline. */\n reason?: string;\n}\n\nexport async function detectInstalledClis(): Promise<CliDetection[]> {\n const env = await fetchFromDaemon<ListEnvelope<CliDetection>>(\"/onboard/detect-clis\");\n return env.items;\n}\n\nexport async function validateCliPath(\n id: DetectableCliId,\n path: string,\n): Promise<CliDetection> {\n return fetchFromDaemon<CliDetection>(\"/onboard/validate-cli-path\", {\n method: \"POST\",\n body: JSON.stringify({ id, path }),\n });\n}\n\n/**\n * Persist a manual CLI path for the daemon to use across restarts.\n * Backend re-validates server-side, so a stale React state can't store a\n * path that no longer runs. Returns the saved absolute path.\n */\nexport async function saveCliPath(\n id: DetectableCliId,\n path: string,\n): Promise<{ id: string; path: string }> {\n return fetchFromDaemon<{ id: string; path: string }>(\n \"/onboard/save-cli-path\",\n {\n method: \"POST\",\n body: JSON.stringify({ id, path }),\n },\n );\n}\n\nexport async function getSavedCliPaths(): Promise<Record<string, string>> {\n return fetchFromDaemon<Record<string, string>>(\"/onboard/cli-paths\");\n}\n\nexport async function clearSavedCliPath(\n id: DetectableCliId,\n): Promise<{ id: string; cleared: boolean }> {\n return fetchFromDaemon<{ id: string; cleared: boolean }>(\n `/onboard/cli-paths/${encodeURIComponent(id)}`,\n { method: \"DELETE\" },\n );\n}\n\nexport async function updatePermissions(\n patch: Partial<Omit<PermissionSettings, \"profileDescriptions\">>,\n): Promise<PermissionSettings> {\n return fetchFromDaemon<PermissionSettings>(\"/settings/permissions\", {\n method: \"PUT\",\n body: JSON.stringify(patch),\n });\n}\n\nexport async function getSettings(): Promise<Settings> {\n return fetchFromDaemon<Settings>(\"/settings\");\n}\n\nexport async function updateSettings(patch: Partial<Settings>): Promise<Settings> {\n return fetchFromDaemon<Settings>(\"/settings\", {\n method: \"PUT\",\n body: JSON.stringify(patch),\n });\n}\n\nexport type Transport = \"headless\" | \"tmux\";\n\nexport interface TransportSettings {\n transport: Transport;\n descriptions?: Record<Transport, { label: string; description: string }>;\n /** False on Windows OR when the tmux binary isn't on PATH — cockpit\n * greys out the Tmux card and shows an install hint instead of letting\n * the user opt into a mode whose first chat would hang. */\n tmuxAvailable?: boolean;\n}\n\nexport async function getTransport(): Promise<TransportSettings> {\n return fetchFromDaemon<TransportSettings>(\"/settings/transport\");\n}\n\nexport async function updateTransport(\n patch: { transport: Transport },\n): Promise<TransportSettings> {\n return fetchFromDaemon<TransportSettings>(\"/settings/transport\", {\n method: \"PUT\",\n body: JSON.stringify(patch),\n });\n}\n\nexport type BillingMode = \"api\" | \"subscription\" | \"mixed\";\n\nexport interface BillingSettings {\n mode: BillingMode;\n descriptions?: Record<BillingMode, { label: string; description: string }>;\n}\n\nexport async function getBillingMode(): Promise<BillingSettings> {\n return fetchFromDaemon<BillingSettings>(\"/settings/billing\");\n}\n\nexport async function updateBillingMode(\n patch: { mode: BillingMode },\n): Promise<BillingSettings> {\n return fetchFromDaemon<BillingSettings>(\"/settings/billing\", {\n method: \"PUT\",\n body: JSON.stringify(patch),\n });\n}\n\nexport interface TelemetryStatus {\n enabled: boolean;\n envOverride: boolean;\n fileOverride: boolean;\n settingValue: boolean | undefined;\n endpoint: string;\n}\n\nexport async function getTelemetryStatus(): Promise<TelemetryStatus> {\n return fetchFromDaemon<TelemetryStatus>(\"/settings/telemetry\");\n}\n\nexport async function updateTelemetryEnabled(\n enabled: boolean,\n): Promise<TelemetryStatus> {\n return fetchFromDaemon<TelemetryStatus>(\"/settings/telemetry\", {\n method: \"PUT\",\n body: JSON.stringify({ enabled }),\n });\n}\n\nexport async function listSecrets(): Promise<Secret[]> {\n const env = await fetchFromDaemon<ListEnvelope<Secret>>(\"/secrets\");\n return env.items;\n}\n\nexport async function upsertSecret(\n provider: string,\n secret: Omit<Secret, \"provider\">,\n): Promise<Secret> {\n return fetchFromDaemon<Secret>(`/secrets/${provider}`, {\n method: \"PUT\",\n body: JSON.stringify(secret),\n });\n}\n\n/**\n * Idempotent rotation. Returns `{ deleted }` indicating whether a row\n * was actually removed (`false` if it didn't exist). Cockpit can show\n * an info toast on `false` (\"nothing to delete\") if it cares.\n */\nexport async function deleteSecret(\n provider: string,\n): Promise<{ provider: string; deleted: boolean }> {\n return fetchFromDaemon<{ provider: string; deleted: boolean }>(\n `/secrets/${encodeURIComponent(provider)}`,\n { method: \"DELETE\" },\n );\n}\n","// Fetch wrapper with error handling and base URL management\nimport { ApiResponse } from \"@/lib/types\";\n\n// Server-side: hit the daemon directly on this host.\n// Browser-side: go through the Next.js proxy at /api/daemon (the browser\n// cannot reach 127.0.0.1 on the server).\n//\n// API_PREFIX freezes the wire shape at v0.7 — every path passed to\n// fetchFromDaemon is implicitly under /api/v1. v0.8 may add /api/v2\n// alongside without breaking existing consumers.\nconst SERVER_BASE =\n process.env.CHORUS_DAEMON_URL || \"http://127.0.0.1:7707\";\nconst CLIENT_BASE = \"/api/daemon\";\nconst API_PREFIX = \"/api/v1\";\n\nfunction getBaseUrl(): string {\n if (typeof window === \"undefined\") return SERVER_BASE;\n return new URL(CLIENT_BASE, window.location.origin).toString();\n}\n\nexport class DaemonError extends Error {\n constructor(\n public code: string,\n public statusCode: number,\n message: string,\n /**\n * Optional structured payload mirrored from the server envelope's\n * `error.details`. Used for zod-issue lists from /templates POST so\n * the cockpit can pin each error to the field it references.\n */\n public details?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"DaemonError\";\n }\n}\n\nexport async function fetchFromDaemon<T>(\n path: string,\n options: RequestInit = {},\n): Promise<T> {\n const base = getBaseUrl();\n // Normalise to a leading-slash form first so the prefix check can\n // anchor on `/api/v1` exactly. Without this, `api/v1/foo` (no leading\n // slash) gets double-prefixed → `/api/v1/api/v1/foo`.\n const normalised = path.startsWith(\"/\") ? path : `/${path}`;\n // Exact-segment match — naive `startsWith` would match `/api/v10/...`\n // or `/api/v1foo/...` and skip prepending.\n const isPrefixed =\n normalised === API_PREFIX || normalised.startsWith(`${API_PREFIX}/`);\n const versionedPath = isPrefixed ? normalised : `${API_PREFIX}${normalised}`;\n const url = `${base.replace(/\\/$/, \"\")}${versionedPath}`;\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n const data: ApiResponse<T> = await response.json().catch(() => ({\n ok: false,\n error: {\n code: \"parse_error\",\n message: \"Failed to parse response\",\n },\n }));\n\n if (!data.ok) {\n throw new DaemonError(\n data.error?.code || \"unknown\",\n response.status,\n data.error?.message || \"Unknown error\",\n data.error?.details,\n );\n }\n\n return data.data as T;\n } catch (error) {\n if (error instanceof DaemonError) {\n throw error;\n }\n\n if (error instanceof TypeError && error.message.includes(\"fetch\")) {\n throw new DaemonError(\n \"connection_failed\",\n 0,\n \"Failed to connect to Chorus daemon. Is it running?\",\n );\n }\n\n throw new DaemonError(\n \"unknown\",\n 0,\n error instanceof Error ? error.message : \"Unknown error\",\n );\n }\n}\n","/**\n * Single source of truth for lineage display labels and colour swatches.\n *\n * Two parallel maps because the data flows from two directions:\n * - Templates use the daemon-side YAML schema lineage names (\"anthropic\",\n * \"openai\", \"google\", \"opencode\", \"moonshot\"). UI helpers translate\n * these to the cockpit-side ReviewerLineage names (\"claude\", \"codex\",\n * \"gemini\", \"opencode\", \"kimi\") via UI_LINEAGE_MAP / mapLineage.\n * - Personas use the daemon-side names directly via recommended_lineage.\n *\n * Keep both maps keyed by the daemon-side names; let callers translate\n * inputs once at the boundary and look up via the canonical key.\n */\n\nexport type DaemonLineage =\n | \"anthropic\"\n | \"openai\"\n | \"google\"\n | \"opencode\"\n | \"moonshot\";\n\nexport const LINEAGE_LABEL: Record<DaemonLineage, string> = {\n anthropic: \"Claude\",\n openai: \"Codex\",\n google: \"Gemini\",\n opencode: \"OpenCode\",\n moonshot: \"Kimi\",\n};\n\n/** Tailwind background colour class for the small lineage dot indicator. */\nconst LINEAGE_DOT: Record<DaemonLineage, string> = {\n anthropic: \"bg-violet-400\",\n openai: \"bg-orange-400\",\n google: \"bg-blue-400\",\n opencode: \"bg-emerald-400\",\n moonshot: \"bg-pink-400\",\n};\n\n/** Returns the human label for a lineage, falling back to the raw key. */\nexport function lineageLabel(lineage: string | undefined): string {\n if (!lineage) return \"\";\n return LINEAGE_LABEL[lineage as DaemonLineage] ?? lineage;\n}\n\n/** Returns the dot colour class, falling back to a neutral muted dot. */\nexport function lineageDot(lineage: string | undefined): string {\n if (!lineage) return \"bg-muted\";\n return LINEAGE_DOT[lineage as DaemonLineage] ?? \"bg-muted\";\n}\n\n/**\n * UI-side lineage names — used by cockpit components that operate on the\n * `ReviewerLineage` enum (claude/codex/gemini/opencode/kimi). Kept in sync\n * with the daemon-side maps above; the cockpit calls these directly without\n * a translation step.\n */\nexport type UILineage =\n | \"claude\"\n | \"codex\"\n | \"gemini\"\n | \"opencode\"\n | \"kimi\"\n | \"openrouter\";\n\nexport const UI_LINEAGE_LABEL: Record<UILineage, string> = {\n claude: \"Claude\",\n codex: \"Codex\",\n gemini: \"Gemini\",\n opencode: \"OpenCode\",\n kimi: \"Kimi\",\n // Meta-lineage for HTTP-dispatched voices. The real underlying lineage\n // (anthropic/openai/google/etc.) is preserved on the voices table for\n // diversity scoring; this label is what the cockpit cards show because\n // the runner creates `reviewer-openrouter-N` dirs regardless of the\n // underlying model.\n openrouter: \"OpenRouter\",\n};\n\nconst UI_LINEAGE_DOT: Record<UILineage, string> = {\n claude: \"bg-violet-400\",\n codex: \"bg-orange-400\",\n gemini: \"bg-blue-400\",\n opencode: \"bg-emerald-400\",\n kimi: \"bg-pink-400\",\n // Cyan picked over amber — amber reads as \"warning/in-progress\" in UI\n // convention, which clashed with lineage-as-brand semantics. Cyan is\n // brand-distinct without state ambiguity.\n openrouter: \"bg-cyan-400\",\n};\n\nexport function uiLineageLabel(lineage: string | undefined): string {\n if (!lineage) return \"\";\n return UI_LINEAGE_LABEL[lineage as UILineage] ?? lineage;\n}\n\nexport function uiLineageDot(lineage: string | undefined): string {\n if (!lineage) return \"bg-muted\";\n return UI_LINEAGE_DOT[lineage as UILineage] ?? \"bg-muted\";\n}\n\n/**\n * Default model per UI lineage when a template's `models: []` is empty.\n * Mirrors the per-lineage defaults used by phase-editor and new-template-dialog;\n * lifted here so the run page can show the actual model on cards even when\n * the YAML omits it.\n */\nexport const UI_LINEAGE_DEFAULT_MODEL: Record<UILineage, string> = {\n claude: \"claude-opus-4-7\",\n codex: \"gpt-5.5\",\n gemini: \"gemini-3.1-pro-preview\",\n opencode: \"kimi-k2.6\",\n kimi: \"kimi-k2.6\",\n // No sensible default for openrouter — user explicitly selects a model.\n // Empty string lets `models?.[0] ?? defaultModel` resolve to \"\" which\n // the run page treats as \"no model\" (skips the · model · separator).\n openrouter: \"\",\n};\n\n/**\n * Curated model lists per CLI. Used as a fallback when the CLI doesn't\n * expose a live model-listing command (claude / gemini / kimi today). For\n * codex we run `codex debug models` at seed time and prefer the live\n * catalog; the list below is the safety net if that probe fails.\n *\n * Cross-checked against `opencode models` (which aggregates upstream\n * provider names) and `codex debug models` so entries here are real\n * model ids the corresponding CLI accepts. Don't list speculative names —\n * a wrong entry here is what makes the home page look unprofessional.\n *\n * Order = recommended first; the first entry is the canonical default\n * and matches UI_LINEAGE_DEFAULT_MODEL.\n *\n * OpenCode is omitted because it's always discovered live via\n * `opencode models` (gateway-aware). Cursor/Windsurf are IDE\n * orchestrators with no model selection of their own.\n */\nexport const UI_LINEAGE_AVAILABLE_MODELS: Partial<Record<UILineage, string[]>> = {\n claude: [\n \"claude-opus-4-7\",\n \"claude-sonnet-4-6\",\n \"claude-sonnet-4-5\",\n \"claude-haiku-4-5\",\n \"claude-opus-4-5\",\n ],\n codex: [\n \"gpt-5.5\",\n \"gpt-5.4\",\n \"gpt-5.4-mini\",\n \"gpt-5.3-codex\",\n \"gpt-5.2\",\n ],\n // Gemini list verified 2026-05-04 by `gemini -p \"ok\" --model <X>`.\n // gemini-3-flash returned ModelNotFoundError; only the names below\n // are accepted by the current Gemini CLI version.\n gemini: [\n \"gemini-3.1-pro-preview\",\n \"gemini-2.5-pro\",\n \"gemini-2.5-flash\",\n ],\n // Kimi list cross-checked against the official kimi-cli docs +\n // source (2026-05-04):\n // - CHANGELOG.md: kimi-k2.6, kimi-k2-thinking\n // - klips/klip-6: kimi-k2-thinking-turbo (recommended turbo flagship)\n // - sdks/kimi-sdk/README.md, klips/klip-7: kimi-k2-turbo-preview\n // - Welcome screen dropped hardcoded kimi-k2.5, but it still works\n // Not end-to-end probed because the dedicated kimi CLI needs a\n // separate Moonshot account login; cross-referenced from official docs\n // is the next-best signal.\n // Index 0 must match UI_LINEAGE_DEFAULT_MODEL.kimi to keep the seed's\n // immutable provider row pointed at the same default. kimi-k2.6 has\n // been the chorus default since v0.7; not auto-rotating to the\n // turbo-thinking variant here so existing installs don't silently\n // change behavior. Users can still toggle the turbo entries on.\n kimi: [\n \"kimi-k2.6\",\n \"kimi-k2-thinking-turbo\",\n \"kimi-k2-turbo-preview\",\n \"kimi-k2-thinking\",\n \"kimi-k2.5\",\n ],\n};\n\nexport function uiLineageDefaultModel(lineage: string | undefined): string | undefined {\n if (!lineage) return undefined;\n return UI_LINEAGE_DEFAULT_MODEL[lineage as UILineage];\n}\n\n/**\n * Per-CLI brand identity. ONE place to adjust colors so the violet=Claude,\n * blue=Gemini, etc. mapping never drifts across the run page, template\n * editor, sidebar, and connect surfaces. Add new CLIs here, not in callers.\n */\nexport interface LineageBrand {\n /** 400-shade for solid dots/swatches. */\n dot: string;\n /** 500-shade for ring/border accents. */\n ring: string;\n /** Subtle vertical gradient applied to participant cards. */\n gradient: string;\n}\n\nexport const UI_LINEAGE_BRAND: Record<UILineage, LineageBrand> = {\n claude: {\n dot: \"bg-violet-400\",\n ring: \"ring-violet-400/40\",\n gradient: \"bg-gradient-to-b from-violet-500/15 to-card\",\n },\n codex: {\n dot: \"bg-orange-400\",\n ring: \"ring-orange-400/40\",\n gradient: \"bg-gradient-to-b from-orange-500/15 to-card\",\n },\n gemini: {\n dot: \"bg-blue-400\",\n ring: \"ring-blue-400/40\",\n gradient: \"bg-gradient-to-b from-blue-500/15 to-card\",\n },\n opencode: {\n dot: \"bg-emerald-400\",\n ring: \"ring-emerald-400/40\",\n gradient: \"bg-gradient-to-b from-emerald-500/15 to-card\",\n },\n kimi: {\n dot: \"bg-pink-400\",\n ring: \"ring-pink-400/40\",\n gradient: \"bg-gradient-to-b from-pink-500/15 to-card\",\n },\n openrouter: {\n dot: \"bg-cyan-400\",\n ring: \"ring-cyan-400/40\",\n gradient: \"bg-gradient-to-b from-cyan-500/15 to-card\",\n },\n};\n\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'm12 5 7 7-7 7', key: 'xquz4c' }],\n];\n\n/**\n * @component @name ArrowRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowRight = createLucideIcon('arrow-right', __iconNode);\n\nexport default ArrowRight;\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\n outline:\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import { AppSidebar } from \"./app-sidebar\";\nimport { MobileTopBar } from \"./mobile-top-bar\";\n\ninterface AppShellProps {\n children: React.ReactNode;\n}\n\n/**\n * App shell. The desktop top bar was retired — Search + New Chat now live\n * inside the sidebar so the run page (and every other text-heavy page)\n * gets the full vertical space. Mobile still needs a thin top bar with\n * just the hamburger that opens the mobile nav.\n */\nexport function AppShell({ children }: AppShellProps) {\n return (\n <div className=\"flex h-screen w-screen overflow-hidden bg-background text-foreground\">\n <AppSidebar />\n <div className=\"flex flex-1 flex-col overflow-hidden\">\n <MobileTopBar />\n <main className=\"flex-1 overflow-y-auto\">{children}</main>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\n/**\n * Canonical page-level heading used across the cockpit.\n *\n * Replaces six hand-rolled variants where the eyebrow / title / subtitle\n * shapes drifted (text-xl vs text-2xl vs sm:text-3xl, h1 vs h2, sometimes\n * no eyebrow). One place to tune, one consistent rhythm everywhere.\n *\n * Layout: eyebrow on top in muted uppercase, title underneath at text-2xl\n * semibold, optional subtitle as text-sm muted, optional action slot\n * (typically a primary button) right-aligned on sm+ screens.\n */\nexport function PageHeader({\n eyebrow,\n title,\n subtitle,\n action,\n}: {\n eyebrow: string;\n title: ReactNode;\n subtitle?: ReactNode;\n action?: ReactNode;\n}) {\n return (\n <header className=\"mb-6 flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"min-w-0\">\n <p className=\"text-xs uppercase tracking-wider text-muted-foreground\">\n {eyebrow}\n </p>\n <h1 className=\"mt-1 text-2xl font-semibold tracking-tight\">{title}</h1>\n {subtitle && (\n <p className=\"mt-2 max-w-2xl text-sm leading-relaxed text-muted-foreground\">\n {subtitle}\n </p>\n )}\n </div>\n {action && <div className=\"shrink-0 self-start sm:self-auto\">{action}</div>}\n </header>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M12 16v-4', key: '1dtifu' }],\n ['path', { d: 'M12 8h.01', key: 'e9boi3' }],\n];\n\n/**\n * @component @name Info\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/info\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Info = createLucideIcon('info', __iconNode);\n\nexport default Info;\n","// Shared type contract between UI and daemon\n// API wire-format types (camelCase). The cockpit form uses parallel-array\n// shapes (`lib/cockpit-types.ts`); this file is the daemon-canonical view.\n\nexport type ReviewerLineage =\n | \"codex\"\n | \"gemini\"\n | \"opencode\"\n | \"claude\"\n | \"kimi\"\n | \"openrouter\";\n\nexport type AgentState =\n | \"idle\"\n | \"working\"\n | \"writing\"\n | \"errored\"\n | \"done\"\n | \"disabled\";\n\nexport interface Agent {\n id: string;\n name: string;\n lineage: ReviewerLineage;\n model: string;\n source: \"byo\" | \"credits\";\n status: \"connected\" | \"disconnected\" | \"needs-auth\";\n}\n\nexport interface Reviewer {\n id: string;\n name: string;\n lineage: ReviewerLineage;\n model: string;\n state: AgentState;\n elapsedSeconds: number;\n bytes: number;\n streamedLines: string[];\n verdict?: \"agree\" | \"partial\" | \"disagree\";\n findingsCount?: number;\n}\n\nexport interface SynthesizedFinding {\n severity: \"critical\" | \"high\" | \"medium\" | \"low\";\n text: string;\n agreedBy: string[];\n}\n\nexport interface SynthesizedAnswer {\n verdict: \"agree\" | \"partial\" | \"disagree\";\n headline: string;\n summary: string;\n findings: SynthesizedFinding[];\n recommendation: string;\n}\n\nexport interface Chat {\n id: string;\n /**\n * URL-friendly slug derived from `work` on creation. Present on\n * chats created after the slug migration; absent on legacy rows that\n * the daemon's backfill missed (or DBs older than the migration).\n * Use `chatHref(chat)` to build a URL that prefers slug → falls back\n * to id, so links keep working in both cases.\n */\n slug?: string;\n work: string;\n templateId: string;\n status:\n | \"drafting\"\n | \"reviewing\"\n | \"approved\"\n | \"no_review\"\n | \"merged\"\n | \"blocked\"\n | \"cancelled\"\n | \"failed\";\n currentPhaseIdx: number;\n yolo: boolean;\n attachedFiles?: string[];\n /** Optional absolute path to user's repo. Set at chat creation. */\n repoPath?: string;\n /** GitHub PR URL written by the Ship phase on success (status=merged). */\n prUrl?: string;\n /** Failure context written when Ship blocks (status=blocked). */\n shipError?: string;\n /** Artifact text supplied at chat creation for review-only templates.\n * Undefined for full-pipeline templates. */\n artifact?: string;\n /** Final reviewer verdict from chat_done. Undefined until terminal. */\n verdict?: string;\n createdAt: number;\n updatedAt: number;\n finishedAt?: number;\n}\n\nexport type PhaseKind =\n | \"review\"\n | \"review_only\"\n | \"plan\"\n | \"spec\"\n | \"tests\"\n | \"implement\"\n | \"verify\"\n | \"pr\"\n | \"divergence\"\n | \"recon\";\n\nexport type PhaseState =\n | \"queued\"\n | \"drafting\"\n | \"submitted\"\n | \"reviewing\"\n | \"approved\"\n | \"revising\"\n | \"merged\"\n | \"skipped\"\n | \"blocked\";\n\nexport interface DoerSlot {\n lineage: ReviewerLineage;\n models: string[];\n /** Optional persona id — the runner prepends persona.system_prompt to the doer's ask. */\n persona?: string;\n}\n\n/**\n * One reviewer slot inside a phase. Lineage is the family of CLI to invoke\n * (claude, codex, gemini, …); models lists the specific model IDs the doer\n * should try in priority order. Empty `models` means \"lineage default.\"\n */\nexport interface ReviewerCandidate {\n lineage: ReviewerLineage;\n models: string[];\n /** Optional persona id — the runner prepends persona.system_prompt to the reviewer's ask. */\n persona?: string;\n}\n\nexport interface ReviewerRule {\n require: number;\n crossLineage: boolean;\n /** Lineages only — kept for legacy callers and the connection-status grid. */\n candidates: ReviewerLineage[];\n /**\n * Same candidates with the model assignment from the YAML preserved.\n * Run page reads this so each placeholder reviewer card can show its\n * model badge (\"gpt-5.5\") before the CLI has actually spawned. Index-\n * aligned with `candidates`.\n */\n candidatesWithModels: ReviewerCandidate[];\n}\n\nexport interface PhaseInputs {\n include: string[];\n exclude: string[];\n}\n\nexport interface IteratePolicy {\n max: number;\n onMax: \"ask-user\" | \"loopback\" | \"fail\";\n loopbackTo?: string;\n}\n\nexport interface TemplatePhase {\n id: string;\n name: string;\n description: string;\n kind: PhaseKind;\n gate: \"auto\" | \"ask-user\";\n doer: DoerSlot;\n reviewer: ReviewerRule;\n inputs: PhaseInputs;\n iterate: IteratePolicy;\n blindSpots: BlindSpotPack[];\n execution: ExecutionMode;\n builtin: boolean;\n /** Artifact spec — only meaningful when kind === 'review_only'. Drives\n * the cockpit textarea label/placeholder and the size cap. */\n artifact?: {\n label: string;\n hint: string;\n maxBytes: number;\n };\n}\n\nexport type AgreementThreshold = \"unanimous\" | \"majority\" | \"any\";\nexport type ThresholdAction = \"auto-finalize\" | \"ask-user\";\nexport type ExecutionMode = \"parallel\" | \"sequential\";\nexport type DriverTarget =\n | \"claude-code\"\n | \"cursor\"\n | \"codex-cli\"\n | \"windsurf\"\n | \"external\";\nexport type BlindSpotPack =\n | \"security\"\n | \"data\"\n | \"api\"\n | \"architecture\"\n | \"ops\"\n | \"performance\";\nexport type NotifyChannel = \"mcp-tool\" | \"webhook\" | \"dashboard-only\";\n\nexport interface Template {\n id: string;\n name: string;\n description: string;\n category: \"review\" | \"plan\" | \"debug\" | \"decide\";\n phases: TemplatePhase[];\n agreementThreshold: AgreementThreshold;\n onThresholdMet: ThresholdAction;\n maxRounds: number;\n driver: DriverTarget;\n driverHandoff: boolean;\n verificationGate: \"auto\" | \"run-tests\" | \"ask-user\";\n costCapUsd: number;\n yoloDefault?: boolean;\n /** Optional per-template floor for the cockpit's pre-submit cost\n * estimate (input-tokens of prompt boilerplate per reviewer). When\n * unset, the cockpit defaults to DEFAULT_BASELINE_TOKENS. */\n estimatedBaselineTokens?: number;\n onError: \"fallback\" | \"fail\" | \"ask-user\";\n notify: NotifyChannel;\n yaml: string;\n authorHandle: string;\n forks: number;\n popularity: number;\n /** Template-level fallback voices, split by role. Tried in order when a\n * slot's per-slot chain exhausts. Dedup is strict (lineage, model) —\n * skip rows that match the failed slot or any active slot of the same\n * role in the same phase. */\n fallback?: {\n doer?: ReviewerCandidate[];\n reviewer?: ReviewerCandidate[];\n };\n /** \"builtin\" rows are seeded from `templates/*.yaml` on every daemon\n * boot — deletes refuse because they'd come back. The cockpit hides the\n * delete affordance for these rows. \"user\" rows are user-created or\n * user-edited (a builtin gets demoted to user on first edit). */\n source?: \"builtin\" | \"user\";\n}\n\nexport interface BlockedChat {\n chatId: string;\n project: string;\n template: string;\n blockedReason:\n | \"consensus_not_met\"\n | \"permission_required\"\n | \"cost_cap_reached\";\n startedAt: string;\n round: number;\n agreed: number;\n total: number;\n deepLink: string;\n}\n\nexport interface Settings {\n onboarded?: boolean;\n permissions?: Record<string, unknown>;\n privacy?: Record<string, unknown>;\n webhooks?: Record<string, unknown>;\n /**\n * Models the user picked for the OpenCode CLI during onboarding (or\n * later in Settings). Qualified form: `opencode-go/kimi-k2.6`,\n * `opencode-zen/glm-5.1`, etc. Templates and voice pickers filter\n * available reviewers by this list when OpenCode is the lineage.\n */\n \"opencode.enabled_models\"?: string[];\n /**\n * Per-CLI enabled-models lists for the home-page fleet cards.\n * `<ui-lineage>.enabled_models` (e.g. `claude.enabled_models`,\n * `codex.enabled_models`, `gemini.enabled_models`,\n * `kimi.enabled_models`). Index signature kept generic so adding a new\n * lineage doesn't require a type change.\n */\n [key: `${string}.enabled_models`]: string[] | undefined;\n}\n\nexport interface Secret {\n provider: string;\n kind: \"api_key\" | \"cli_subscription\";\n value?: string;\n meta?: Record<string, unknown>;\n updatedAt: number;\n}\n\n// Phase event from SSE stream\nexport interface PhaseEvent {\n id: number;\n chatId: string;\n phaseIdx: number;\n phaseKind: PhaseKind;\n role: \"doer\" | \"reviewer\";\n agentId?: string;\n state: PhaseState;\n output?: string;\n costUsd?: number;\n tokensIn?: number;\n tokensOut?: number;\n startedAt: number;\n finishedAt?: number;\n}\n\n/**\n * UI-side helper: does the template's first phase require a runtime artifact?\n * Mirrors the daemon-side templateRequiresArtifact() so the new-chat form\n * can swap \"Task\" for \"Artifact\" without re-parsing YAML.\n */\nexport function isReviewOnlyTemplate(template: Pick<Template, \"phases\"> | null | undefined): boolean {\n if (!template) return false;\n return template.phases[0]?.kind === \"review_only\";\n}\n\n// API response envelope\nexport interface ApiResponse<T> {\n ok: boolean;\n data?: T;\n error?: {\n code: string;\n message: string;\n /** Optional structured payload (e.g. zod issue list for validation errors). */\n details?: Record<string, unknown>;\n };\n meta?: {\n total?: number;\n page?: number;\n limit?: number;\n };\n}\n\n/**\n * List-endpoint envelope nested inside `ApiResponse.data`. Wire shape is\n * `{ ok: true, data: { items, total, hasMore } }`. Frozen pre-launch so\n * adding limit/offset query params in v0.8 is a non-breaking change.\n */\nexport interface ListEnvelope<T> {\n items: T[];\n total: number;\n hasMore: boolean;\n}\n"],"names":["getPermissions","detectInstalledClis","env","items","validateCliPath","id","path","method","body","JSON","stringify","saveCliPath","getSavedCliPaths","clearSavedCliPath","encodeURIComponent","updatePermissions","patch","getSettings","updateSettings","getTransport","updateTransport","getBillingMode","updateBillingMode","getTelemetryStatus","updateTelemetryEnabled","enabled","listSecrets","upsertSecret","provider","secret","deleteSecret","SERVER_BASE","process","CHORUS_DAEMON_URL","CLIENT_BASE","API_PREFIX","getBaseUrl","DaemonError","Error","code","statusCode","message","details","name","fetchFromDaemon","options","base","normalised","startsWith","isPrefixed","versionedPath","url","replace","response","fetch","headers","data","json","catch","ok","error","status","TypeError","includes","LINEAGE_LABEL","anthropic","openai","google","opencode","moonshot","LINEAGE_DOT","lineageLabel","lineage","lineageDot","UI_LINEAGE_LABEL","claude","codex","gemini","kimi","openrouter","UI_LINEAGE_DOT","uiLineageLabel","uiLineageDot","UI_LINEAGE_DEFAULT_MODEL","UI_LINEAGE_AVAILABLE_MODELS","uiLineageDefaultModel","undefined","UI_LINEAGE_BRAND","dot","ring","gradient","falsyToString","value","cx","cva","config","props","_config_compoundVariants","variants","class","className","defaultVariants","getVariantClassNames","Object","keys","map","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","entries","reduce","acc","param","key","getCompoundVariantClassNames","compoundVariants","cvClass","cvClassName","compoundVariantOptions","every","Array","isArray","badgeVariants","default","secondary","destructive","outline","ghost","link","Badge","asChild","Comp","Root","Card","CardHeader","CardTitle","CardDescription","CardAction","CardContent","CardFooter","AppShell","children","isReviewOnlyTemplate","template","phases","kind"],"mappings":"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","ignoreList":[3,4,9]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[5365,(a,b,c)=>{b.exports=a.x("process",()=>require("process"))},874,(a,b,c)=>{b.exports=a.x("buffer",()=>require("buffer"))},93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},95832,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},54508,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},11140,a=>{"use strict";a.s(["AppSidebar",()=>c,"SidebarBody",()=>d]);var b=a.i(80070);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call AppSidebar() from the server but AppSidebar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/app-sidebar.tsx <module evaluation>","AppSidebar"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call SidebarBody() from the server but SidebarBody is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/app-sidebar.tsx <module evaluation>","SidebarBody")},4313,a=>{"use strict";a.s(["AppSidebar",()=>c,"SidebarBody",()=>d]);var b=a.i(80070);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call AppSidebar() from the server but AppSidebar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/app-sidebar.tsx","AppSidebar"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call SidebarBody() from the server but SidebarBody is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/app-sidebar.tsx","SidebarBody")},9460,a=>{"use strict";a.i(11140);var b=a.i(4313);a.n(b)},31742,a=>{"use strict";a.s(["MobileTopBar",()=>b]);let b=(0,a.i(80070).registerClientReference)(function(){throw Error("Attempted to call MobileTopBar() from the server but MobileTopBar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/mobile-top-bar.tsx <module evaluation>","MobileTopBar")},54317,a=>{"use strict";a.s(["MobileTopBar",()=>b]);let b=(0,a.i(80070).registerClientReference)(function(){throw Error("Attempted to call MobileTopBar() from the server but MobileTopBar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/mobile-top-bar.tsx","MobileTopBar")},62759,a=>{"use strict";a.i(31742);var b=a.i(54317);a.n(b)},10401,66392,a=>{"use strict";var b=a.i(4613),c=a.i(9460),d=a.i(62759);a.s(["AppShell",0,function({children:a}){return(0,b.jsxs)("div",{className:"flex h-screen w-screen overflow-hidden bg-background text-foreground",children:[(0,b.jsx)(c.AppSidebar,{}),(0,b.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[(0,b.jsx)(d.MobileTopBar,{}),(0,b.jsx)("main",{className:"flex-1 overflow-y-auto",children:a})]})]})}],10401);let e=process.env.CHORUS_DAEMON_URL||"http://127.0.0.1:7707",f="/api/v1";class g extends Error{code;statusCode;details;constructor(a,b,c,d){super(c),this.code=a,this.statusCode=b,this.details=d,this.name="DaemonError"}}async function h(a,b={}){let c=a.startsWith("/")?a:`/${a}`,d=c===f||c.startsWith(`${f}/`)?c:`${f}${c}`,i=`${e.replace(/\/$/,"")}${d}`;try{let a=await fetch(i,{...b,headers:{"Content-Type":"application/json",...b.headers}}),c=await a.json().catch(()=>({ok:!1,error:{code:"parse_error",message:"Failed to parse response"}}));if(!c.ok)throw new g(c.error?.code||"unknown",a.status,c.error?.message||"Unknown error",c.error?.details);return c.data}catch(a){if(a instanceof g)throw a;if(a instanceof TypeError&&a.message.includes("fetch"))throw new g("connection_failed",0,"Failed to connect to Chorus daemon. Is it running?");throw new g("unknown",0,a instanceof Error?a.message:"Unknown error")}}a.s(["DaemonError",0,g,"fetchFromDaemon",0,h],66392)},44665,a=>{"use strict";var b=a.i(4613);a.s(["PageHeader",0,function({eyebrow:a,title:c,subtitle:d,action:e}){return(0,b.jsxs)("header",{className:"mb-6 flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("p",{className:"text-xs uppercase tracking-wider text-muted-foreground",children:a}),(0,b.jsx)("h1",{className:"mt-1 text-2xl font-semibold tracking-tight",children:c}),d&&(0,b.jsx)("p",{className:"mt-2 max-w-2xl text-sm leading-relaxed text-muted-foreground",children:d})]}),e&&(0,b.jsx)("div",{className:"shrink-0 self-start sm:self-auto",children:e})]})}])},86379,a=>{"use strict";var b=a.i(66392);function c(a){let b;if(a.attached_files)try{let c=JSON.parse(a.attached_files);Array.isArray(c)&&(b=c)}catch{}return{id:a.id,slug:a.slug??void 0,work:a.work,templateId:a.template_id,status:a.status,currentPhaseIdx:a.current_phase_idx??0,yolo:!!a.yolo,attachedFiles:b,repoPath:a.repo_path??void 0,prUrl:a.pr_url??void 0,shipError:a.ship_error??void 0,artifact:a.artifact??void 0,verdict:a.verdict??void 0,createdAt:a.created_at,updatedAt:a.updated_at,finishedAt:a.finished_at??void 0}}async function d(a){let d=new URLSearchParams;a?.limit&&d.append("limit",a.limit.toString()),a?.offset&&d.append("offset",a.offset.toString()),a?.status&&d.append("status",a.status);let e=d.toString();return(await (0,b.fetchFromDaemon)(`/chats${e?`?${e}`:""}`)).items.map(c)}async function e(a){return c(await (0,b.fetchFromDaemon)(`/chats/${a}`))}a.s(["getChat",0,e,"listChats",0,d])},10585,a=>{a.v("/_next/static/media/favicon.0i~66t__91s97.ico"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},68611,a=>{"use strict";let b={src:a.i(10585).default,width:48,height:48};a.s(["default",0,b])},7524,a=>{a.v("/_next/static/media/icon.15.86wme~cdlv.svg"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},39375,a=>{"use strict";let b={src:a.i(7524).default,width:32,height:32};a.s(["default",0,b])},8679,a=>{"use strict";a.s(["RunsTable",()=>b]);let b=(0,a.i(80070).registerClientReference)(function(){throw Error("Attempted to call RunsTable() from the server but RunsTable is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/runs-table.tsx <module evaluation>","RunsTable")},10889,a=>{"use strict";a.s(["RunsTable",()=>b]);let b=(0,a.i(80070).registerClientReference)(function(){throw Error("Attempted to call RunsTable() from the server but RunsTable is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/components/runs-table.tsx","RunsTable")},85558,a=>{"use strict";a.i(8679);var b=a.i(10889);a.n(b)},52211,a=>{"use strict";var b=a.i(4613),c=a.i(10401),d=a.i(44665),e=a.i(85558);a.i(54440);var f=a.i(86379),g=a.i(66392);async function h(){try{return{chats:await (0,f.listChats)({limit:200}),error:null}}catch(a){return{chats:[],error:a instanceof g.DaemonError?a.message:"Failed to load chats"}}}async function i(){let{chats:a,error:f}=await h();return(0,b.jsx)(c.AppShell,{children:(0,b.jsxs)("div",{className:"mx-auto w-full max-w-6xl px-4 py-6 sm:px-6 sm:py-8 md:px-8 md:py-10",children:[(0,b.jsx)(d.PageHeader,{eyebrow:"History",title:"All chats",subtitle:"Browse previous runs and their outcomes."}),f&&(0,b.jsx)("div",{className:"mb-4 rounded-lg border border-destructive/50 bg-destructive/10 p-4",children:(0,b.jsx)("p",{className:"text-sm text-destructive",children:f})}),(0,b.jsx)(e.RunsTable,{chats:a})]})})}a.s(["default",0,i,"dynamic",0,"force-dynamic"])},20447,a=>{a.n(a.i(52211))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0~cqs-9._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/.pnpm/next%4016.2.4_%40babel%2Bcore%407.29.0_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/invariant-error.ts","../../../../node_modules/.pnpm/%40swc%2Bhelpers%400.5.15/node_modules/%40swc/helpers/cjs/_interop_require_wildcard.cjs","../../../../src/components/app-sidebar.tsx/__nextjs-internal-proxy.mjs","../../../../src/components/mobile-top-bar.tsx/__nextjs-internal-proxy.mjs","../../../../src/components/app-shell.tsx","../../../../src/lib/api/client.ts","../../../../src/components/page-header.tsx","../../../../src/lib/api/chats.ts","../../../../src/app/favicon.ico.mjs%20%28structured%20image%20object%29","../../../../src/app/icon.svg.mjs%20%28structured%20image%20object%29","../../../../src/components/runs-table.tsx/__nextjs-internal-proxy.mjs","../../../../src/app/runs/page.tsx"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n","\"use strict\";\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\nexports._ = _interop_require_wildcard;\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const AppSidebar = registerClientReference(\n function() { throw new Error(\"Attempted to call AppSidebar() from the server but AppSidebar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/app-sidebar.tsx\",\n \"AppSidebar\",\n);\nexport const SidebarBody = registerClientReference(\n function() { throw new Error(\"Attempted to call SidebarBody() from the server but SidebarBody is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/app-sidebar.tsx\",\n \"SidebarBody\",\n);\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const MobileTopBar = registerClientReference(\n function() { throw new Error(\"Attempted to call MobileTopBar() from the server but MobileTopBar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/mobile-top-bar.tsx\",\n \"MobileTopBar\",\n);\n","import { AppSidebar } from \"./app-sidebar\";\nimport { MobileTopBar } from \"./mobile-top-bar\";\n\ninterface AppShellProps {\n children: React.ReactNode;\n}\n\n/**\n * App shell. The desktop top bar was retired — Search + New Chat now live\n * inside the sidebar so the run page (and every other text-heavy page)\n * gets the full vertical space. Mobile still needs a thin top bar with\n * just the hamburger that opens the mobile nav.\n */\nexport function AppShell({ children }: AppShellProps) {\n return (\n <div className=\"flex h-screen w-screen overflow-hidden bg-background text-foreground\">\n <AppSidebar />\n <div className=\"flex flex-1 flex-col overflow-hidden\">\n <MobileTopBar />\n <main className=\"flex-1 overflow-y-auto\">{children}</main>\n </div>\n </div>\n );\n}\n","// Fetch wrapper with error handling and base URL management\nimport { ApiResponse } from \"@/lib/types\";\n\n// Server-side: hit the daemon directly on this host.\n// Browser-side: go through the Next.js proxy at /api/daemon (the browser\n// cannot reach 127.0.0.1 on the server).\n//\n// API_PREFIX freezes the wire shape at v0.7 — every path passed to\n// fetchFromDaemon is implicitly under /api/v1. v0.8 may add /api/v2\n// alongside without breaking existing consumers.\nconst SERVER_BASE =\n process.env.CHORUS_DAEMON_URL || \"http://127.0.0.1:7707\";\nconst CLIENT_BASE = \"/api/daemon\";\nconst API_PREFIX = \"/api/v1\";\n\nfunction getBaseUrl(): string {\n if (typeof window === \"undefined\") return SERVER_BASE;\n return new URL(CLIENT_BASE, window.location.origin).toString();\n}\n\nexport class DaemonError extends Error {\n constructor(\n public code: string,\n public statusCode: number,\n message: string,\n /**\n * Optional structured payload mirrored from the server envelope's\n * `error.details`. Used for zod-issue lists from /templates POST so\n * the cockpit can pin each error to the field it references.\n */\n public details?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"DaemonError\";\n }\n}\n\nexport async function fetchFromDaemon<T>(\n path: string,\n options: RequestInit = {},\n): Promise<T> {\n const base = getBaseUrl();\n // Normalise to a leading-slash form first so the prefix check can\n // anchor on `/api/v1` exactly. Without this, `api/v1/foo` (no leading\n // slash) gets double-prefixed → `/api/v1/api/v1/foo`.\n const normalised = path.startsWith(\"/\") ? path : `/${path}`;\n // Exact-segment match — naive `startsWith` would match `/api/v10/...`\n // or `/api/v1foo/...` and skip prepending.\n const isPrefixed =\n normalised === API_PREFIX || normalised.startsWith(`${API_PREFIX}/`);\n const versionedPath = isPrefixed ? normalised : `${API_PREFIX}${normalised}`;\n const url = `${base.replace(/\\/$/, \"\")}${versionedPath}`;\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n const data: ApiResponse<T> = await response.json().catch(() => ({\n ok: false,\n error: {\n code: \"parse_error\",\n message: \"Failed to parse response\",\n },\n }));\n\n if (!data.ok) {\n throw new DaemonError(\n data.error?.code || \"unknown\",\n response.status,\n data.error?.message || \"Unknown error\",\n data.error?.details,\n );\n }\n\n return data.data as T;\n } catch (error) {\n if (error instanceof DaemonError) {\n throw error;\n }\n\n if (error instanceof TypeError && error.message.includes(\"fetch\")) {\n throw new DaemonError(\n \"connection_failed\",\n 0,\n \"Failed to connect to Chorus daemon. Is it running?\",\n );\n }\n\n throw new DaemonError(\n \"unknown\",\n 0,\n error instanceof Error ? error.message : \"Unknown error\",\n );\n }\n}\n","import type { ReactNode } from \"react\";\n\n/**\n * Canonical page-level heading used across the cockpit.\n *\n * Replaces six hand-rolled variants where the eyebrow / title / subtitle\n * shapes drifted (text-xl vs text-2xl vs sm:text-3xl, h1 vs h2, sometimes\n * no eyebrow). One place to tune, one consistent rhythm everywhere.\n *\n * Layout: eyebrow on top in muted uppercase, title underneath at text-2xl\n * semibold, optional subtitle as text-sm muted, optional action slot\n * (typically a primary button) right-aligned on sm+ screens.\n */\nexport function PageHeader({\n eyebrow,\n title,\n subtitle,\n action,\n}: {\n eyebrow: string;\n title: ReactNode;\n subtitle?: ReactNode;\n action?: ReactNode;\n}) {\n return (\n <header className=\"mb-6 flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"min-w-0\">\n <p className=\"text-xs uppercase tracking-wider text-muted-foreground\">\n {eyebrow}\n </p>\n <h1 className=\"mt-1 text-2xl font-semibold tracking-tight\">{title}</h1>\n {subtitle && (\n <p className=\"mt-2 max-w-2xl text-sm leading-relaxed text-muted-foreground\">\n {subtitle}\n </p>\n )}\n </div>\n {action && <div className=\"shrink-0 self-start sm:self-auto\">{action}</div>}\n </header>\n );\n}\n","// Chat API endpoints\nimport type { Chat, ListEnvelope } from \"@/lib/types\";\nimport { fetchFromDaemon } from \"./client\";\n\ninterface RawChatRow {\n id: string;\n /** URL-friendly slug — present on chats created after the slug\n * migration, null on legacy rows the daemon couldn't backfill. */\n slug?: string | null;\n work: string;\n template_id: string;\n status: Chat[\"status\"];\n current_phase_idx?: number;\n yolo?: number | boolean;\n attached_files?: string | null;\n repo_path?: string | null;\n pr_url?: string | null;\n ship_error?: string | null;\n artifact?: string | null;\n verdict?: string | null;\n created_at: number;\n updated_at: number;\n finished_at?: number | null;\n}\n\n/**\n * Daemon stores chats with snake_case columns; the UI contract is camelCase.\n * Translate at the boundary so the rest of the app doesn't care.\n */\nfunction fromRow(row: RawChatRow): Chat {\n let attached: string[] | undefined;\n if (row.attached_files) {\n try {\n const parsed = JSON.parse(row.attached_files);\n if (Array.isArray(parsed)) attached = parsed;\n } catch {\n // ignore — leave undefined\n }\n }\n return {\n id: row.id,\n slug: row.slug ?? undefined,\n work: row.work,\n templateId: row.template_id,\n status: row.status,\n currentPhaseIdx: row.current_phase_idx ?? 0,\n yolo: Boolean(row.yolo),\n attachedFiles: attached,\n repoPath: row.repo_path ?? undefined,\n prUrl: row.pr_url ?? undefined,\n shipError: row.ship_error ?? undefined,\n artifact: row.artifact ?? undefined,\n verdict: row.verdict ?? undefined,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n finishedAt: row.finished_at ?? undefined,\n };\n}\n\nexport async function listChats(options?: {\n limit?: number;\n offset?: number;\n status?: string;\n}): Promise<Chat[]> {\n const params = new URLSearchParams();\n if (options?.limit) params.append(\"limit\", options.limit.toString());\n if (options?.offset) params.append(\"offset\", options.offset.toString());\n if (options?.status) params.append(\"status\", options.status);\n\n const query = params.toString();\n const env = await fetchFromDaemon<ListEnvelope<RawChatRow>>(\n `/chats${query ? `?${query}` : \"\"}`,\n );\n return env.items.map(fromRow);\n}\n\nexport async function getChat(id: string): Promise<Chat> {\n const row = await fetchFromDaemon<RawChatRow>(`/chats/${id}`);\n return fromRow(row);\n}\n\nexport async function createChat(options: {\n work: string;\n templateId: string;\n files?: string[];\n /** Optional absolute path to user's repo. Enables Ship phase. */\n repoPath?: string;\n /** Required when the chosen template's first phase is review_only.\n * Capped at the template's phase.artifact.maxBytes (default 1 MiB) by\n * the daemon — caller is expected to pre-check that. */\n artifact?: string;\n /** Skip every ask-user gate for this run. Today the daemon only honours\n * this on the ship phase; safe to pass on review-only runs but with no\n * effect there. */\n yolo?: boolean;\n}): Promise<Chat> {\n const row = await fetchFromDaemon<RawChatRow>(\"/chats\", {\n method: \"POST\",\n body: JSON.stringify(options),\n });\n return fromRow(row);\n}\n\n","import src from \"IMAGE\";\nexport default { src, width: 48, height: 48 }\n","import src from \"IMAGE\";\nexport default { src, width: 32, height: 32 }\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const RunsTable = registerClientReference(\n function() { throw new Error(\"Attempted to call RunsTable() from the server but RunsTable is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/runs-table.tsx\",\n \"RunsTable\",\n);\n","import { AppShell } from \"@/components/app-shell\";\nimport { PageHeader } from \"@/components/page-header\";\nimport { RunsTable } from \"@/components/runs-table\";\nimport { listChats, DaemonError } from \"@/lib/api\";\n\nexport const dynamic = \"force-dynamic\";\n\n\nasync function getChats() {\n try {\n const chats = await listChats({ limit: 200 });\n return { chats, error: null };\n } catch (err) {\n return {\n chats: [],\n error:\n err instanceof DaemonError ? err.message : \"Failed to load chats\",\n };\n }\n}\n\nexport default async function RunsListPage() {\n const { chats, error } = await getChats();\n\n return (\n <AppShell>\n <div className=\"mx-auto w-full max-w-6xl px-4 py-6 sm:px-6 sm:py-8 md:px-8 md:py-10\">\n <PageHeader\n eyebrow=\"History\"\n title=\"All chats\"\n subtitle=\"Browse previous runs and their outcomes.\"\n />\n\n {error && (\n <div className=\"mb-4 rounded-lg border border-destructive/50 bg-destructive/10 p-4\">\n <p className=\"text-sm text-destructive\">{error}</p>\n </div>\n )}\n\n <RunsTable chats={chats} />\n </div>\n </AppShell>\n );\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interop_require_wildcard","obj","__esModule","default","cache","has","get","newObj","__proto__","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","exports","_","AppSidebar","SidebarBody","MobileTopBar","AppShell","children","className","PageHeader","eyebrow","title","subtitle","action","fromRow","row","attached","attached_files","parsed","JSON","parse","Array","isArray","id","slug","undefined","work","templateId","template_id","status","currentPhaseIdx","current_phase_idx","yolo","Boolean","attachedFiles","repoPath","repo_path","prUrl","pr_url","shipError","ship_error","artifact","verdict","createdAt","created_at","updatedAt","updated_at","finishedAt","finished_at","listChats","params","URLSearchParams","limit","append","toString","offset","query","env","items","map","getChat","createChat","method","body","stringify","src","width","height","RunsTable","dynamic","getChats","chats","error","err","RunsListPage"],"mappings":"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","ignoreList":[0,1,2,3,10]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[26442,a=>{"use strict";var b=a.i(92415);async function c(){return(await (0,b.fetchFromDaemon)("/onboard/detect-clis")).items}async function d(a,c){return(0,b.fetchFromDaemon)("/onboard/validate-cli-path",{method:"POST",body:JSON.stringify({id:a,path:c})})}async function e(a,c){return(0,b.fetchFromDaemon)("/onboard/save-cli-path",{method:"POST",body:JSON.stringify({id:a,path:c})})}async function f(a){return(0,b.fetchFromDaemon)("/settings/permissions",{method:"PUT",body:JSON.stringify(a)})}async function g(a){return(0,b.fetchFromDaemon)("/settings",{method:"PUT",body:JSON.stringify(a)})}async function h(){return(0,b.fetchFromDaemon)("/settings/transport")}async function i(a){return(0,b.fetchFromDaemon)("/settings/transport",{method:"PUT",body:JSON.stringify(a)})}async function j(){return(0,b.fetchFromDaemon)("/settings/billing")}async function k(a){return(0,b.fetchFromDaemon)("/settings/billing",{method:"PUT",body:JSON.stringify(a)})}async function l(){return(0,b.fetchFromDaemon)("/settings/telemetry")}async function m(a){return(0,b.fetchFromDaemon)("/settings/telemetry",{method:"PUT",body:JSON.stringify({enabled:a})})}async function n(a,c){return(0,b.fetchFromDaemon)(`/secrets/${a}`,{method:"PUT",body:JSON.stringify(c)})}a.s(["detectInstalledClis",0,c,"getBillingMode",0,j,"getTelemetryStatus",0,l,"getTransport",0,h,"saveCliPath",0,e,"updateBillingMode",0,k,"updatePermissions",0,f,"updateSettings",0,g,"updateTelemetryEnabled",0,m,"updateTransport",0,i,"upsertSecret",0,n,"validateCliPath",0,d])},14342,a=>{"use strict";let b=(0,a.i(91870).default)("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]);a.s(["Clock",0,b],14342)},92632,a=>{"use strict";let b=(0,a.i(91870).default)("folder-lock",[["rect",{width:"8",height:"5",x:"14",y:"17",rx:"1",key:"19aais"}],["path",{d:"M10 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v2.5",key:"1w6v7t"}],["path",{d:"M20 17v-2a2 2 0 1 0-4 0v2",key:"pwaxnr"}]]);a.s(["FolderLock",0,b],92632)},42261,90005,a=>{"use strict";var b=a.i(39337);let c=a=>"boolean"==typeof a?`${a}`:0===a?"0":a,d=b.clsx;a.s(["cva",0,(a,b)=>e=>{var f;if((null==b?void 0:b.variants)==null)return d(a,null==e?void 0:e.class,null==e?void 0:e.className);let{variants:g,defaultVariants:h}=b,i=Object.keys(g).map(a=>{let b=null==e?void 0:e[a],d=null==h?void 0:h[a];if(null===b)return null;let f=c(b)||c(d);return g[a][f]}),j=e&&Object.entries(e).reduce((a,b)=>{let[c,d]=b;return void 0===d||(a[c]=d),a},{});return d(a,i,null==b||null==(f=b.compoundVariants)?void 0:f.reduce((a,b)=>{let{class:c,className:d,...e}=b;return Object.entries(e).every(a=>{let[b,c]=a;return Array.isArray(c)?c.includes({...h,...j}[b]):({...h,...j})[b]===c})?[...a,c,d]:a},[]),null==e?void 0:e.class,null==e?void 0:e.className)}],42261);var e=a.i(92274);a.s(["Slot",0,e],90005)},86304,a=>{"use strict";var b=a.i(81673),c=a.i(42261),d=a.i(90005),e=a.i(68114);let f=(0,c.cva)("inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",{variants:{variant:{default:"bg-primary text-primary-foreground [a&]:hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",destructive:"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",outline:"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",ghost:"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",link:"text-primary underline-offset-4 [a&]:hover:underline"}},defaultVariants:{variant:"default"}});a.s(["Badge",0,function({className:a,variant:c="default",asChild:g=!1,...h}){let i=g?d.Slot.Root:"span";return(0,b.jsx)(i,{"data-slot":"badge","data-variant":c,className:(0,e.cn)(f({variant:c}),a),...h})}])},91119,a=>{"use strict";var b=a.i(81673),c=a.i(68114);a.s(["Card",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card",className:(0,c.cn)("flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm",a),...d})}])},83862,34829,a=>{"use strict";var b=a.i(81673),c=a.i(81059),d=a.i(82476);a.s(["AppShell",0,function({children:a}){return(0,b.jsxs)("div",{className:"flex h-screen w-screen overflow-hidden bg-background text-foreground",children:[(0,b.jsx)(c.AppSidebar,{}),(0,b.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[(0,b.jsx)(d.MobileTopBar,{}),(0,b.jsx)("main",{className:"flex-1 overflow-y-auto",children:a})]})]})}],83862),a.s(["PageHeader",0,function({eyebrow:a,title:c,subtitle:d,action:e}){return(0,b.jsxs)("header",{className:"mb-6 flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("p",{className:"text-xs uppercase tracking-wider text-muted-foreground",children:a}),(0,b.jsx)("h1",{className:"mt-1 text-2xl font-semibold tracking-tight",children:c}),d&&(0,b.jsx)("p",{className:"mt-2 max-w-2xl text-sm leading-relaxed text-muted-foreground",children:d})]}),e&&(0,b.jsx)("div",{className:"shrink-0 self-start sm:self-auto",children:e})]})}],34829)},34823,a=>{"use strict";let b=(0,a.i(91870).default)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);a.s(["Info",0,b],34823)},84623,a=>{"use strict";let b=(0,a.i(91870).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);a.s(["Check",0,b],84623)},5365,(a,b,c)=>{b.exports=a.x("process",()=>require("process"))},874,(a,b,c)=>{b.exports=a.x("buffer",()=>require("buffer"))},92415,a=>{"use strict";let b=process.env.CHORUS_DAEMON_URL||"http://127.0.0.1:7707",c="/api/v1";class d extends Error{code;statusCode;details;constructor(a,b,c,d){super(c),this.code=a,this.statusCode=b,this.details=d,this.name="DaemonError"}}async function e(a,f={}){let g=a.startsWith("/")?a:`/${a}`,h=g===c||g.startsWith(`${c}/`)?g:`${c}${g}`,i=`${b.replace(/\/$/,"")}${h}`;try{let a=await fetch(i,{...f,headers:{"Content-Type":"application/json",...f.headers}}),b=await a.json().catch(()=>({ok:!1,error:{code:"parse_error",message:"Failed to parse response"}}));if(!b.ok)throw new d(b.error?.code||"unknown",a.status,b.error?.message||"Unknown error",b.error?.details);return b.data}catch(a){if(a instanceof d)throw a;if(a instanceof TypeError&&a.message.includes("fetch"))throw new d("connection_failed",0,"Failed to connect to Chorus daemon. Is it running?");throw new d("unknown",0,a instanceof Error?a.message:"Unknown error")}}a.s(["DaemonError",0,d,"fetchFromDaemon",0,e])},64837,a=>{"use strict";let b=(0,a.i(91870).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["AlertTriangle",0,b],64837)},3438,a=>{"use strict";let b=(0,a.i(91870).default)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);a.s(["Loader2",0,b],3438)},63845,a=>{"use strict";var b=a.i(81148);a.s(["X",()=>b.default])},9106,a=>{"use strict";let b=(0,a.i(91870).default)("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);a.s(["Code2",0,b],9106)},97535,a=>{"use strict";let b=(0,a.i(91870).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",0,b],97535)},51996,a=>{"use strict";let b=(0,a.i(91870).default)("sliders-vertical",[["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M12 21v-9",key:"17s77i"}],["path",{d:"M12 8V3",key:"13r4qs"}],["path",{d:"M17 16h4",key:"h1uq16"}],["path",{d:"M19 12V3",key:"o1uvq1"}],["path",{d:"M19 21v-5",key:"qua636"}],["path",{d:"M3 14h4",key:"bcjad9"}],["path",{d:"M5 10V3",key:"cb8scm"}],["path",{d:"M5 21v-7",key:"1w1uti"}]]);a.s(["Sliders",0,b],51996)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__109.1j0._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/api/settings.ts","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/clock.ts","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-lock.ts","../../../../node_modules/.pnpm/class-variance-authority%400.7.1/node_modules/class-variance-authority/dist/index.mjs","../../../../src/components/ui/badge.tsx","../../../../src/components/ui/card.tsx","../../../../src/components/app-shell.tsx","../../../../src/components/page-header.tsx","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/info.ts","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/check.ts","../../../../src/lib/api/client.ts","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/triangle-alert.ts","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/loader-circle.ts","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/code-xml.ts","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/eye.ts","../../../../node_modules/.pnpm/lucide-react%401.12.0_react%4019.2.4/node_modules/lucide-react/src/icons/sliders-vertical.ts"],"sourcesContent":["// Settings and secrets API endpoints\nimport type { ListEnvelope, Settings, Secret } from \"@/lib/types\";\nimport { fetchFromDaemon } from \"./client\";\n\nexport type SandboxProfile = \"strict\" | \"workspace\" | \"full\";\n\nexport interface PermissionSettings {\n sandboxProfile: SandboxProfile;\n autoApprovePrompts: boolean;\n networkAccess: boolean;\n profileDescriptions?: Record<SandboxProfile, { label: string; description: string }>;\n}\n\nexport async function getPermissions(): Promise<PermissionSettings> {\n return fetchFromDaemon<PermissionSettings>(\"/settings/permissions\");\n}\n\nexport type DetectableCliId =\n | \"claude-code\"\n | \"codex-cli\"\n | \"gemini-cli\"\n | \"opencode-cli\"\n | \"kimi-cli\";\n\nexport interface CliDetection {\n id: DetectableCliId;\n found: boolean;\n path?: string;\n source?: \"path\" | \"fallback\" | \"manual\";\n /** Populated on manual validation failures — surfaces \"no file at\n * that path\", \"binary doesn't look like the claude CLI\", etc. so\n * the UI can show a concrete reason inline. */\n reason?: string;\n}\n\nexport async function detectInstalledClis(): Promise<CliDetection[]> {\n const env = await fetchFromDaemon<ListEnvelope<CliDetection>>(\"/onboard/detect-clis\");\n return env.items;\n}\n\nexport async function validateCliPath(\n id: DetectableCliId,\n path: string,\n): Promise<CliDetection> {\n return fetchFromDaemon<CliDetection>(\"/onboard/validate-cli-path\", {\n method: \"POST\",\n body: JSON.stringify({ id, path }),\n });\n}\n\n/**\n * Persist a manual CLI path for the daemon to use across restarts.\n * Backend re-validates server-side, so a stale React state can't store a\n * path that no longer runs. Returns the saved absolute path.\n */\nexport async function saveCliPath(\n id: DetectableCliId,\n path: string,\n): Promise<{ id: string; path: string }> {\n return fetchFromDaemon<{ id: string; path: string }>(\n \"/onboard/save-cli-path\",\n {\n method: \"POST\",\n body: JSON.stringify({ id, path }),\n },\n );\n}\n\nexport async function getSavedCliPaths(): Promise<Record<string, string>> {\n return fetchFromDaemon<Record<string, string>>(\"/onboard/cli-paths\");\n}\n\nexport async function clearSavedCliPath(\n id: DetectableCliId,\n): Promise<{ id: string; cleared: boolean }> {\n return fetchFromDaemon<{ id: string; cleared: boolean }>(\n `/onboard/cli-paths/${encodeURIComponent(id)}`,\n { method: \"DELETE\" },\n );\n}\n\nexport async function updatePermissions(\n patch: Partial<Omit<PermissionSettings, \"profileDescriptions\">>,\n): Promise<PermissionSettings> {\n return fetchFromDaemon<PermissionSettings>(\"/settings/permissions\", {\n method: \"PUT\",\n body: JSON.stringify(patch),\n });\n}\n\nexport async function getSettings(): Promise<Settings> {\n return fetchFromDaemon<Settings>(\"/settings\");\n}\n\nexport async function updateSettings(patch: Partial<Settings>): Promise<Settings> {\n return fetchFromDaemon<Settings>(\"/settings\", {\n method: \"PUT\",\n body: JSON.stringify(patch),\n });\n}\n\nexport type Transport = \"headless\" | \"tmux\";\n\nexport interface TransportSettings {\n transport: Transport;\n descriptions?: Record<Transport, { label: string; description: string }>;\n /** False on Windows OR when the tmux binary isn't on PATH — cockpit\n * greys out the Tmux card and shows an install hint instead of letting\n * the user opt into a mode whose first chat would hang. */\n tmuxAvailable?: boolean;\n}\n\nexport async function getTransport(): Promise<TransportSettings> {\n return fetchFromDaemon<TransportSettings>(\"/settings/transport\");\n}\n\nexport async function updateTransport(\n patch: { transport: Transport },\n): Promise<TransportSettings> {\n return fetchFromDaemon<TransportSettings>(\"/settings/transport\", {\n method: \"PUT\",\n body: JSON.stringify(patch),\n });\n}\n\nexport type BillingMode = \"api\" | \"subscription\" | \"mixed\";\n\nexport interface BillingSettings {\n mode: BillingMode;\n descriptions?: Record<BillingMode, { label: string; description: string }>;\n}\n\nexport async function getBillingMode(): Promise<BillingSettings> {\n return fetchFromDaemon<BillingSettings>(\"/settings/billing\");\n}\n\nexport async function updateBillingMode(\n patch: { mode: BillingMode },\n): Promise<BillingSettings> {\n return fetchFromDaemon<BillingSettings>(\"/settings/billing\", {\n method: \"PUT\",\n body: JSON.stringify(patch),\n });\n}\n\nexport interface TelemetryStatus {\n enabled: boolean;\n envOverride: boolean;\n fileOverride: boolean;\n settingValue: boolean | undefined;\n endpoint: string;\n}\n\nexport async function getTelemetryStatus(): Promise<TelemetryStatus> {\n return fetchFromDaemon<TelemetryStatus>(\"/settings/telemetry\");\n}\n\nexport async function updateTelemetryEnabled(\n enabled: boolean,\n): Promise<TelemetryStatus> {\n return fetchFromDaemon<TelemetryStatus>(\"/settings/telemetry\", {\n method: \"PUT\",\n body: JSON.stringify({ enabled }),\n });\n}\n\nexport async function listSecrets(): Promise<Secret[]> {\n const env = await fetchFromDaemon<ListEnvelope<Secret>>(\"/secrets\");\n return env.items;\n}\n\nexport async function upsertSecret(\n provider: string,\n secret: Omit<Secret, \"provider\">,\n): Promise<Secret> {\n return fetchFromDaemon<Secret>(`/secrets/${provider}`, {\n method: \"PUT\",\n body: JSON.stringify(secret),\n });\n}\n\n/**\n * Idempotent rotation. Returns `{ deleted }` indicating whether a row\n * was actually removed (`false` if it didn't exist). Cockpit can show\n * an info toast on `false` (\"nothing to delete\") if it cares.\n */\nexport async function deleteSecret(\n provider: string,\n): Promise<{ provider: string; deleted: boolean }> {\n return fetchFromDaemon<{ provider: string; deleted: boolean }>(\n `/secrets/${encodeURIComponent(provider)}`,\n { method: \"DELETE\" },\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M12 6v6l4 2', key: 'mmk7yg' }],\n];\n\n/**\n * @component @name Clock\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/clock\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Clock = createLucideIcon('clock', __iconNode);\n\nexport default Clock;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '8', height: '5', x: '14', y: '17', rx: '1', key: '19aais' }],\n [\n 'path',\n {\n d: 'M10 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v2.5',\n key: '1w6v7t',\n },\n ],\n ['path', { d: 'M20 17v-2a2 2 0 1 0-4 0v2', key: 'pwaxnr' }],\n];\n\n/**\n * @component @name FolderLock\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-lock\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderLock = createLucideIcon('folder-lock', __iconNode);\n\nexport default FolderLock;\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\n outline:\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import { AppSidebar } from \"./app-sidebar\";\nimport { MobileTopBar } from \"./mobile-top-bar\";\n\ninterface AppShellProps {\n children: React.ReactNode;\n}\n\n/**\n * App shell. The desktop top bar was retired — Search + New Chat now live\n * inside the sidebar so the run page (and every other text-heavy page)\n * gets the full vertical space. Mobile still needs a thin top bar with\n * just the hamburger that opens the mobile nav.\n */\nexport function AppShell({ children }: AppShellProps) {\n return (\n <div className=\"flex h-screen w-screen overflow-hidden bg-background text-foreground\">\n <AppSidebar />\n <div className=\"flex flex-1 flex-col overflow-hidden\">\n <MobileTopBar />\n <main className=\"flex-1 overflow-y-auto\">{children}</main>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\n/**\n * Canonical page-level heading used across the cockpit.\n *\n * Replaces six hand-rolled variants where the eyebrow / title / subtitle\n * shapes drifted (text-xl vs text-2xl vs sm:text-3xl, h1 vs h2, sometimes\n * no eyebrow). One place to tune, one consistent rhythm everywhere.\n *\n * Layout: eyebrow on top in muted uppercase, title underneath at text-2xl\n * semibold, optional subtitle as text-sm muted, optional action slot\n * (typically a primary button) right-aligned on sm+ screens.\n */\nexport function PageHeader({\n eyebrow,\n title,\n subtitle,\n action,\n}: {\n eyebrow: string;\n title: ReactNode;\n subtitle?: ReactNode;\n action?: ReactNode;\n}) {\n return (\n <header className=\"mb-6 flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"min-w-0\">\n <p className=\"text-xs uppercase tracking-wider text-muted-foreground\">\n {eyebrow}\n </p>\n <h1 className=\"mt-1 text-2xl font-semibold tracking-tight\">{title}</h1>\n {subtitle && (\n <p className=\"mt-2 max-w-2xl text-sm leading-relaxed text-muted-foreground\">\n {subtitle}\n </p>\n )}\n </div>\n {action && <div className=\"shrink-0 self-start sm:self-auto\">{action}</div>}\n </header>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M12 16v-4', key: '1dtifu' }],\n ['path', { d: 'M12 8h.01', key: 'e9boi3' }],\n];\n\n/**\n * @component @name Info\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/info\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Info = createLucideIcon('info', __iconNode);\n\nexport default Info;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","// Fetch wrapper with error handling and base URL management\nimport { ApiResponse } from \"@/lib/types\";\n\n// Server-side: hit the daemon directly on this host.\n// Browser-side: go through the Next.js proxy at /api/daemon (the browser\n// cannot reach 127.0.0.1 on the server).\n//\n// API_PREFIX freezes the wire shape at v0.7 — every path passed to\n// fetchFromDaemon is implicitly under /api/v1. v0.8 may add /api/v2\n// alongside without breaking existing consumers.\nconst SERVER_BASE =\n process.env.CHORUS_DAEMON_URL || \"http://127.0.0.1:7707\";\nconst CLIENT_BASE = \"/api/daemon\";\nconst API_PREFIX = \"/api/v1\";\n\nfunction getBaseUrl(): string {\n if (typeof window === \"undefined\") return SERVER_BASE;\n return new URL(CLIENT_BASE, window.location.origin).toString();\n}\n\nexport class DaemonError extends Error {\n constructor(\n public code: string,\n public statusCode: number,\n message: string,\n /**\n * Optional structured payload mirrored from the server envelope's\n * `error.details`. Used for zod-issue lists from /templates POST so\n * the cockpit can pin each error to the field it references.\n */\n public details?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"DaemonError\";\n }\n}\n\nexport async function fetchFromDaemon<T>(\n path: string,\n options: RequestInit = {},\n): Promise<T> {\n const base = getBaseUrl();\n // Normalise to a leading-slash form first so the prefix check can\n // anchor on `/api/v1` exactly. Without this, `api/v1/foo` (no leading\n // slash) gets double-prefixed → `/api/v1/api/v1/foo`.\n const normalised = path.startsWith(\"/\") ? path : `/${path}`;\n // Exact-segment match — naive `startsWith` would match `/api/v10/...`\n // or `/api/v1foo/...` and skip prepending.\n const isPrefixed =\n normalised === API_PREFIX || normalised.startsWith(`${API_PREFIX}/`);\n const versionedPath = isPrefixed ? normalised : `${API_PREFIX}${normalised}`;\n const url = `${base.replace(/\\/$/, \"\")}${versionedPath}`;\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n const data: ApiResponse<T> = await response.json().catch(() => ({\n ok: false,\n error: {\n code: \"parse_error\",\n message: \"Failed to parse response\",\n },\n }));\n\n if (!data.ok) {\n throw new DaemonError(\n data.error?.code || \"unknown\",\n response.status,\n data.error?.message || \"Unknown error\",\n data.error?.details,\n );\n }\n\n return data.data as T;\n } catch (error) {\n if (error instanceof DaemonError) {\n throw error;\n }\n\n if (error instanceof TypeError && error.message.includes(\"fetch\")) {\n throw new DaemonError(\n \"connection_failed\",\n 0,\n \"Failed to connect to Chorus daemon. Is it running?\",\n );\n }\n\n throw new DaemonError(\n \"unknown\",\n 0,\n error instanceof Error ? error.message : \"Unknown error\",\n );\n }\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'm21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3',\n key: 'wmoenq',\n },\n ],\n ['path', { d: 'M12 9v4', key: 'juzpu7' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n];\n\n/**\n * @component @name TriangleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/triangle-alert\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst TriangleAlert = createLucideIcon('triangle-alert', __iconNode);\n\nexport default TriangleAlert;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }]];\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('loader-circle', __iconNode);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm18 16 4-4-4-4', key: '1inbqp' }],\n ['path', { d: 'm6 8-4 4 4 4', key: '15zrgr' }],\n ['path', { d: 'm14.5 4-5 16', key: 'e7oirm' }],\n];\n\n/**\n * @component @name CodeXml\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/code-xml\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CodeXml = createLucideIcon('code-xml', __iconNode);\n\nexport default CodeXml;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n key: '1nclc0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n];\n\n/**\n * @component @name Eye\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/eye\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Eye = createLucideIcon('eye', __iconNode);\n\nexport default Eye;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M10 8h4', key: '1sr2af' }],\n ['path', { d: 'M12 21v-9', key: '17s77i' }],\n ['path', { d: 'M12 8V3', key: '13r4qs' }],\n ['path', { d: 'M17 16h4', key: 'h1uq16' }],\n ['path', { d: 'M19 12V3', key: 'o1uvq1' }],\n ['path', { d: 'M19 21v-5', key: 'qua636' }],\n ['path', { d: 'M3 14h4', key: 'bcjad9' }],\n ['path', { d: 'M5 10V3', key: 'cb8scm' }],\n ['path', { d: 'M5 21v-7', key: '1w1uti' }],\n];\n\n/**\n * @component @name SlidersVertical\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sliders-vertical\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst SlidersVertical = createLucideIcon('sliders-vertical', __iconNode);\n\nexport default SlidersVertical;\n"],"names":["getPermissions","detectInstalledClis","env","items","validateCliPath","id","path","method","body","JSON","stringify","saveCliPath","getSavedCliPaths","clearSavedCliPath","encodeURIComponent","updatePermissions","patch","getSettings","updateSettings","getTransport","updateTransport","getBillingMode","updateBillingMode","getTelemetryStatus","updateTelemetryEnabled","enabled","listSecrets","upsertSecret","provider","secret","deleteSecret","falsyToString","value","cx","cva","base","config","props","_config_compoundVariants","variants","class","className","defaultVariants","getVariantClassNames","Object","keys","map","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","entries","reduce","acc","param","key","undefined","getCompoundVariantClassNames","compoundVariants","cvClass","cvClassName","compoundVariantOptions","every","Array","isArray","includes","badgeVariants","default","secondary","destructive","outline","ghost","link","Badge","asChild","Comp","Root","Card","CardHeader","CardTitle","CardDescription","CardAction","CardContent","CardFooter","AppShell","children","SERVER_BASE","process","CHORUS_DAEMON_URL","CLIENT_BASE","API_PREFIX","getBaseUrl","DaemonError","Error","code","statusCode","message","details","name","fetchFromDaemon","options","normalised","startsWith","isPrefixed","versionedPath","url","replace","response","fetch","headers","data","json","catch","ok","error","status","TypeError"],"mappings":"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","ignoreList":[1,2,3,8,9,11,12,13,14,15]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[42261,90005,a=>{"use strict";var b=a.i(39337);let c=a=>"boolean"==typeof a?`${a}`:0===a?"0":a,d=b.clsx;a.s(["cva",0,(a,b)=>e=>{var f;if((null==b?void 0:b.variants)==null)return d(a,null==e?void 0:e.class,null==e?void 0:e.className);let{variants:g,defaultVariants:h}=b,i=Object.keys(g).map(a=>{let b=null==e?void 0:e[a],d=null==h?void 0:h[a];if(null===b)return null;let f=c(b)||c(d);return g[a][f]}),j=e&&Object.entries(e).reduce((a,b)=>{let[c,d]=b;return void 0===d||(a[c]=d),a},{});return d(a,i,null==b||null==(f=b.compoundVariants)?void 0:f.reduce((a,b)=>{let{class:c,className:d,...e}=b;return Object.entries(e).every(a=>{let[b,c]=a;return Array.isArray(c)?c.includes({...h,...j}[b]):({...h,...j})[b]===c})?[...a,c,d]:a},[]),null==e?void 0:e.class,null==e?void 0:e.className)}],42261);var e=a.i(92274);a.s(["Slot",0,e],90005)},86304,a=>{"use strict";var b=a.i(81673),c=a.i(42261),d=a.i(90005),e=a.i(68114);let f=(0,c.cva)("inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",{variants:{variant:{default:"bg-primary text-primary-foreground [a&]:hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",destructive:"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",outline:"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",ghost:"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",link:"text-primary underline-offset-4 [a&]:hover:underline"}},defaultVariants:{variant:"default"}});a.s(["Badge",0,function({className:a,variant:c="default",asChild:g=!1,...h}){let i=g?d.Slot.Root:"span";return(0,b.jsx)(i,{"data-slot":"badge","data-variant":c,className:(0,e.cn)(f({variant:c}),a),...h})}])},91119,a=>{"use strict";var b=a.i(81673),c=a.i(68114);a.s(["Card",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card",className:(0,c.cn)("flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm",a),...d})}])},83862,34829,a=>{"use strict";var b=a.i(81673),c=a.i(81059),d=a.i(82476);a.s(["AppShell",0,function({children:a}){return(0,b.jsxs)("div",{className:"flex h-screen w-screen overflow-hidden bg-background text-foreground",children:[(0,b.jsx)(c.AppSidebar,{}),(0,b.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[(0,b.jsx)(d.MobileTopBar,{}),(0,b.jsx)("main",{className:"flex-1 overflow-y-auto",children:a})]})]})}],83862),a.s(["PageHeader",0,function({eyebrow:a,title:c,subtitle:d,action:e}){return(0,b.jsxs)("header",{className:"mb-6 flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("p",{className:"text-xs uppercase tracking-wider text-muted-foreground",children:a}),(0,b.jsx)("h1",{className:"mt-1 text-2xl font-semibold tracking-tight",children:c}),d&&(0,b.jsx)("p",{className:"mt-2 max-w-2xl text-sm leading-relaxed text-muted-foreground",children:d})]}),e&&(0,b.jsx)("div",{className:"shrink-0 self-start sm:self-auto",children:e})]})}],34829)},5365,(a,b,c)=>{b.exports=a.x("process",()=>require("process"))},874,(a,b,c)=>{b.exports=a.x("buffer",()=>require("buffer"))},92415,a=>{"use strict";let b=process.env.CHORUS_DAEMON_URL||"http://127.0.0.1:7707",c="/api/v1";class d extends Error{code;statusCode;details;constructor(a,b,c,d){super(c),this.code=a,this.statusCode=b,this.details=d,this.name="DaemonError"}}async function e(a,f={}){let g=a.startsWith("/")?a:`/${a}`,h=g===c||g.startsWith(`${c}/`)?g:`${c}${g}`,i=`${b.replace(/\/$/,"")}${h}`;try{let a=await fetch(i,{...f,headers:{"Content-Type":"application/json",...f.headers}}),b=await a.json().catch(()=>({ok:!1,error:{code:"parse_error",message:"Failed to parse response"}}));if(!b.ok)throw new d(b.error?.code||"unknown",a.status,b.error?.message||"Unknown error",b.error?.details);return b.data}catch(a){if(a instanceof d)throw a;if(a instanceof TypeError&&a.message.includes("fetch"))throw new d("connection_failed",0,"Failed to connect to Chorus daemon. Is it running?");throw new d("unknown",0,a instanceof Error?a.message:"Unknown error")}}a.s(["DaemonError",0,d,"fetchFromDaemon",0,e])},64837,a=>{"use strict";let b=(0,a.i(91870).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["AlertTriangle",0,b],64837)},3438,a=>{"use strict";let b=(0,a.i(91870).default)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);a.s(["Loader2",0,b],3438)},88923,a=>{"use strict";let b={anthropic:"Claude",openai:"Codex",google:"Gemini",opencode:"OpenCode",moonshot:"Kimi"},c={anthropic:"bg-violet-400",openai:"bg-orange-400",google:"bg-blue-400",opencode:"bg-emerald-400",moonshot:"bg-pink-400"},d={claude:"Claude",codex:"Codex",gemini:"Gemini",opencode:"OpenCode",kimi:"Kimi",openrouter:"OpenRouter"},e={claude:"bg-violet-400",codex:"bg-orange-400",gemini:"bg-blue-400",opencode:"bg-emerald-400",kimi:"bg-pink-400",openrouter:"bg-cyan-400"},f={claude:"claude-opus-4-7",codex:"gpt-5.5",gemini:"gemini-3.1-pro-preview",opencode:"kimi-k2.6",kimi:"kimi-k2.6",openrouter:""};a.s(["LINEAGE_LABEL",0,b,"UI_LINEAGE_BRAND",0,{claude:{dot:"bg-violet-400",ring:"ring-violet-400/40",gradient:"bg-gradient-to-b from-violet-500/15 to-card"},codex:{dot:"bg-orange-400",ring:"ring-orange-400/40",gradient:"bg-gradient-to-b from-orange-500/15 to-card"},gemini:{dot:"bg-blue-400",ring:"ring-blue-400/40",gradient:"bg-gradient-to-b from-blue-500/15 to-card"},opencode:{dot:"bg-emerald-400",ring:"ring-emerald-400/40",gradient:"bg-gradient-to-b from-emerald-500/15 to-card"},kimi:{dot:"bg-pink-400",ring:"ring-pink-400/40",gradient:"bg-gradient-to-b from-pink-500/15 to-card"},openrouter:{dot:"bg-cyan-400",ring:"ring-cyan-400/40",gradient:"bg-gradient-to-b from-cyan-500/15 to-card"}},"UI_LINEAGE_DEFAULT_MODEL",0,f,"UI_LINEAGE_LABEL",0,d,"lineageDot",0,function(a){return a?c[a]??"bg-muted":"bg-muted"},"lineageLabel",0,function(a){return a?b[a]??a:""},"uiLineageDefaultModel",0,function(a){if(a)return f[a]},"uiLineageDot",0,function(a){return a?e[a]??"bg-muted":"bg-muted"},"uiLineageLabel",0,function(a){return a?d[a]??a:""}])},63845,a=>{"use strict";var b=a.i(81148);a.s(["X",()=>b.default])},9106,a=>{"use strict";let b=(0,a.i(91870).default)("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);a.s(["Code2",0,b],9106)},68103,a=>{"use strict";let b=(0,a.i(91870).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["CheckCircle2",0,b],68103)},58858,a=>{"use strict";let b=(0,a.i(91870).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);a.s(["Trash2",0,b],58858)},99570,a=>{"use strict";var b=a.i(81673),c=a.i(42261),d=a.i(90005),e=a.i(68114);let f=(0,c.cva)("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});a.s(["Button",0,function({className:a,variant:c="default",size:g="default",asChild:h=!1,...i}){let j=h?d.Slot.Root:"button";return(0,b.jsx)(j,{"data-slot":"button","data-variant":c,"data-size":g,className:(0,e.cn)(f({variant:c,size:g,className:a})),...i})}])},66985,63690,23202,14574,37035,a=>{"use strict";var b=a.i(91870);let c=(0,b.default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",0,c],66985);var d=a.i(81673),e=a.i(9106);a.s(["CodeBlock",0,function({filename:a,charCount:b,footer:c,maxHeightClassName:f="max-h-[70vh]",children:g}){return(0,d.jsxs)("div",{className:"flex h-full min-w-0 flex-col overflow-hidden rounded-lg border border-border bg-card",children:[(0,d.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border bg-card/60 px-4 py-2.5",children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-2 font-mono text-[11px] text-muted-foreground",children:[(0,d.jsx)(e.Code2,{className:"h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:a})]}),"number"==typeof b&&(0,d.jsxs)("span",{className:"font-mono text-[10px] text-muted-foreground/70",children:[b.toLocaleString()," chars"]})]}),(0,d.jsx)("pre",{className:`${f} min-h-0 flex-1 overflow-auto whitespace-pre-wrap break-words bg-background px-5 py-4 font-mono text-[12px] leading-relaxed text-foreground/90`,children:g}),c&&(0,d.jsx)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-t border-border bg-card/60 px-4 py-2.5 text-[11px] text-muted-foreground",children:c})]})}],63690);let f=(0,b.default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);a.s(["Sparkles",0,f],23202);var g=a.i(20362),h=a.i(29536),i=a.i(68114);function j({...a}){return(0,d.jsx)(h.Dialog.Portal,{"data-slot":"dialog-portal",...a})}function k({className:a,...b}){return(0,d.jsx)(h.Dialog.Overlay,{"data-slot":"dialog-overlay",className:(0,i.cn)("fixed inset-0 z-50 bg-black/75 backdrop-blur-sm data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",a),...b})}a.i(99570),a.s(["Dialog",0,function({...a}){return(0,d.jsx)(h.Dialog.Root,{"data-slot":"dialog",...a})},"DialogContent",0,function({className:a,children:b,showCloseButton:c=!0,...e}){return(0,d.jsxs)(j,{"data-slot":"dialog-portal",children:[(0,d.jsx)(k,{}),(0,d.jsxs)(h.Dialog.Content,{"data-slot":"dialog-content",className:(0,i.cn)("fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg",a),...e,children:[b,c&&(0,d.jsxs)(h.Dialog.Close,{"data-slot":"dialog-close",className:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,d.jsx)(g.XIcon,{}),(0,d.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})},"DialogDescription",0,function({className:a,...b}){return(0,d.jsx)(h.Dialog.Description,{"data-slot":"dialog-description",className:(0,i.cn)("text-sm text-muted-foreground",a),...b})},"DialogTitle",0,function({className:a,...b}){return(0,d.jsx)(h.Dialog.Title,{"data-slot":"dialog-title",className:(0,i.cn)("text-lg leading-none font-semibold",a),...b})},"DialogTrigger",0,function({...a}){return(0,d.jsx)(h.Dialog.Trigger,{"data-slot":"dialog-trigger",...a})}],14574);var l=a.i(92415);function m(a){return{id:a.id,label:a.label,one_liner:a.one_liner,system_prompt:a.system_prompt,recommended_lineage:a.recommended_lineage,builtin:!!a.builtin,forked_from:a.forked_from??null,created_at:a.created_at,updated_at:a.updated_at}}async function n(){return(await (0,l.fetchFromDaemon)("/personas")).items.map(m)}async function o(a){return m(await (0,l.fetchFromDaemon)(`/personas/${encodeURIComponent(a)}`))}async function p(a){return m(await (0,l.fetchFromDaemon)("/personas",{method:"POST",body:JSON.stringify(a)}))}async function q(a){await (0,l.fetchFromDaemon)(`/personas/${encodeURIComponent(a)}`,{method:"DELETE"})}a.s(["deletePersona",0,q,"getPersona",0,o,"listPersonas",0,n,"savePersona",0,p],37035)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__10gepjv._.js.map
|