@coodra/cli 0.2.0-beta.6 → 0.2.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +69 -2
- package/dist/commands/start.js.map +1 -1
- package/dist/index.js +41 -3
- package/dist/index.js.map +3 -3
- package/dist/runtime/web/apps/web-v2/.next/BUILD_ID +1 -1
- package/dist/runtime/web/apps/web-v2/.next/app-build-manifest.json +132 -132
- package/dist/runtime/web/apps/web-v2/.next/app-path-routes-manifest.json +20 -20
- package/dist/runtime/web/apps/web-v2/.next/build-manifest.json +5 -5
- package/dist/runtime/web/apps/web-v2/.next/prerender-manifest.json +3 -3
- package/dist/runtime/web/apps/web-v2/.next/react-loadable-manifest.json +3 -3
- package/dist/runtime/web/apps/web-v2/.next/server/app/_not-found/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/api/healthz/route_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/api/install/[token]/route.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/api/install/[token]/route_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/api/runs/[id]/state/route_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/auth/cli-login/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/auth/cli-login/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/auth/cli-login/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/auth/sign-in/[[...sign-in]]/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/auth/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/auth/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/auth/sign-up/[[...sign-up]]/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/auth/sign-up/[[...sign-up]]/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/auth/sign-up/[[...sign-up]]/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/context-packs/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/context-packs/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/context-packs/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/decisions/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/decisions/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/decisions/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/features/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/features/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/features/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/forbidden/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/forbidden/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/graph/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/graph/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/graph/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/init/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/init/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/init/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/install/[token]/cli.sh/route.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/install/[token]/cli.sh/route_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/install/[token]/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/install/[token]/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/install/[token]/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/kill-switches/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/kill-switches/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/kill-switches/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/onboarding/solo/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/onboarding/solo/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/onboarding/solo/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/onboarding/team/join/page.js +4 -4
- package/dist/runtime/web/apps/web-v2/.next/server/app/onboarding/team/join/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/onboarding/team/join/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/onboarding/team/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/onboarding/team/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/onboarding/team/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/packs/[slug]/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/packs/[slug]/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/packs/[slug]/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/packs/new/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/packs/new/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/packs/new/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/packs/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/packs/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/packs/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/policies/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/policies/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/policy/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/policy/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/policy/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/[fslug]/edit/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/[fslug]/edit/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/[fslug]/edit/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/[fslug]/files/[...path]/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/[fslug]/files/[...path]/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/[fslug]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/[fslug]/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/[fslug]/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/[fslug]/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/import/page.js +15 -15
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/import/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/import/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/new/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/new/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/new/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/features/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/packs/new/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/packs/new/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/packs/new/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/[id]/diff/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/[id]/diff/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/[id]/diff/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/[id]/live/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/[id]/live/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/[id]/live/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/[id]/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/[id]/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/[id]/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/runs/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/account/[[...rest]]/page.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/account/[[...rest]]/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/account/[[...rest]]/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/team/invite/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/team/invite/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/team/invite/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/team/page.js +3 -3
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/team/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/settings/team/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/sync/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/sync/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/sync/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/templates/page.js +3 -3
- package/dist/runtime/web/apps/web-v2/.next/server/app/templates/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/templates/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/welcome/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/welcome/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/welcome/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/workspace/page.js +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/app/workspace/page.js.nft.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/app-paths-manifest.json +20 -20
- package/dist/runtime/web/apps/web-v2/.next/server/chunks/{3367.js → 3088.js} +18 -13
- package/dist/runtime/web/apps/web-v2/.next/server/chunks/3616.js +4 -4
- package/dist/runtime/web/apps/web-v2/.next/server/chunks/4527.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/chunks/4914.js +1 -0
- package/dist/runtime/web/apps/web-v2/.next/server/chunks/{4305.js → 7012.js} +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/chunks/7385.js +1 -0
- package/dist/runtime/web/apps/web-v2/.next/server/chunks/{411.js → 9621.js} +2 -2
- package/dist/runtime/web/apps/web-v2/.next/server/chunks/9822.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/middleware-build-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/middleware-manifest.json +5 -5
- package/dist/runtime/web/apps/web-v2/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/next-font-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/next-font-manifest.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/pages/500.html +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/server-reference-manifest.js +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/server-reference-manifest.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/2794.01065593ccddcb8e.js +1 -0
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/4057.50023974d3e12253.js +1 -0
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/{8285-7ee171134d83e929.js → 8285-db15ca2f7eefbbbd.js} +2 -2
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/auth/sign-in/[[...sign-in]]/page-2ff580e3b1799ae2.js +1 -0
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/auth/sign-up/[[...sign-up]]/page-2ff580e3b1799ae2.js +1 -0
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/forbidden/page-ac794448932caae3.js +1 -0
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/layout-bce8e3b0207fc8ca.js +1 -0
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/projects/[slug]/features/import/{page-f6d5a0afc99c2146.js → page-82b1a8257d4c6843.js} +1 -1
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/runs/[id]/live/page-adb64eb042a70714.js +1 -0
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/settings/account/[[...rest]]/page-ac794448932caae3.js +1 -0
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/{webpack-a41be9ea9785afc4.js → webpack-d0d56a0b91f01cd3.js} +1 -1
- package/dist/runtime/web/packages/cli/package.json +3 -3
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/dist/runtime/web/apps/web-v2/.next/server/chunks/370.js +0 -1
- package/dist/runtime/web/apps/web-v2/.next/server/chunks/573.js +0 -1
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/1877.87d50208a6a54cde.js +0 -1
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/2794.e3621ea090f6362b.js +0 -1
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/auth/sign-in/[[...sign-in]]/page-67e91ce4dd5652fc.js +0 -1
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/auth/sign-up/[[...sign-up]]/page-67e91ce4dd5652fc.js +0 -1
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/forbidden/page-e272b356a5051322.js +0 -1
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/layout-b6e54745c1181b00.js +0 -1
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/runs/[id]/live/page-8596dcb65057572e.js +0 -1
- package/dist/runtime/web/apps/web-v2/.next/static/chunks/app/settings/account/[[...rest]]/page-e272b356a5051322.js +0 -1
- /package/dist/runtime/web/apps/web-v2/.next/static/{kHcM6UaOoBnXN8M59NqMB → i1gnsMuVXYcnTChbZTtUC}/_buildManifest.js +0 -0
- /package/dist/runtime/web/apps/web-v2/.next/static/{kHcM6UaOoBnXN8M59NqMB → i1gnsMuVXYcnTChbZTtUC}/_ssgManifest.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
exports.id=3367,exports.ids=[3367],exports.modules={33:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,17504,23)),Promise.resolve().then(c.t.bind(c,7715,23)),Promise.resolve().then(c.t.bind(c,24575,23)),Promise.resolve().then(c.t.bind(c,57074,23)),Promise.resolve().then(c.t.bind(c,94854,23)),Promise.resolve().then(c.t.bind(c,68506,23)),Promise.resolve().then(c.t.bind(c,41634,23)),Promise.resolve().then(c.t.bind(c,74775,23)),Promise.resolve().then(c.bind(c,5010))},7545:(a,b,c)=>{Promise.resolve().then(c.bind(c,93184)),Promise.resolve().then(c.bind(c,12417)),Promise.resolve().then(c.bind(c,20170)),Promise.resolve().then(c.bind(c,44301)),Promise.resolve().then(c.bind(c,14360)),Promise.resolve().then(c.bind(c,13826)),Promise.resolve().then(c.bind(c,87939))},14320:(a,b,c)=>{"use strict";c.r(b),c.d(b,{getActor:()=>i,tryGetActor:()=>j});var d=c(23265),e=c(94404),f=c(34017);async function g(a,b={}){let c=process.env.COODRA_EXPECTED_ORG_ID;if("string"==typeof c&&0!==c.length){if("string"!=typeof a||0===a.length)throw!1!==b.redirectOnMismatch&&(0,f.redirect)("/forbidden?reason=no_org"),Error(`requireOrgMatch: no Clerk org on session (expected ${c})`);if(a!==c)throw!1!==b.redirectOnMismatch&&(0,f.redirect)(`/forbidden?reason=org_mismatch&expected=${encodeURIComponent(c)}&got=${encodeURIComponent(a)}`),Error(`requireOrgMatch: orgId mismatch (expected ${c}, got ${a})`)}}let h={userId:"__solo__",orgId:"__solo__",role:"admin",mode:"solo",source:"solo-bypass"};async function i(){if("solo"===(0,e.uV)())return h;let{auth:a}=await Promise.all([c.e(6865),c.e(8424),c.e(9340)]).then(c.bind(c,19340)),b=await a();if(null===b.userId||void 0===b.userId)throw Error("team mode but no Clerk session at getActor() — middleware misconfig or non-public route reached without auth");return await g(b.orgId??null),{userId:b.userId,orgId:b.orgId??"no-org",role:(0,d.f7)(b.orgRole),mode:"team",source:"clerk"}}async function j(){if("solo"===(0,e.uV)())return h;try{let{auth:a}=await Promise.all([c.e(6865),c.e(8424),c.e(9340)]).then(c.bind(c,19340)),b=await a();if(null===b.userId||void 0===b.userId)return null;return{userId:b.userId,orgId:b.orgId??"no-org",role:(0,d.f7)(b.orgRole),mode:"team",source:"clerk"}}catch{return null}}},19633:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>q,metadata:()=>p});var d=c(18234),e=c(54140),f=c.n(e),g=c(10391),h=c.n(g),i=c(14210),j=c.n(i),k=c(91706),l=c(14320),m=c(30759),n=c(94404),o=c(21074);c(59744);let p={title:"Coodra — App",description:"Editorial audit surface for Coodra — local-first, MCP-native, MIT."};async function q({children:a}){let b,e,g=(0,n.resolveDeploymentMode)(),i="team"===(0,n.uV)(),o=(await r()).map(a=>({slug:a.slug,name:a.name})),p=null,q=null;if(i){b="team";let a=await (0,l.tryGetActor)();null!==a&&(p=a.orgId,q=a.userId)}else b="solo";if(i){let{OrganizationSwitcher:a,UserButton:b}=await Promise.all([c.e(6865),c.e(8424),c.e(9189)]).then(c.bind(c,19189));e=(0,d.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,width:"100%",justifyContent:"space-between"},children:[(0,d.jsx)(a,{appearance:m.y,hidePersonal:!0,afterCreateOrganizationUrl:"/",afterSelectOrganizationUrl:"/",afterLeaveOrganizationUrl:"/welcome"}),(0,d.jsx)(b,{appearance:m.y,userProfileUrl:"/settings/account"})]})}let s=(0,d.jsx)("html",{lang:"en",className:`${f().variable} ${h().variable} ${j().variable}`,suppressHydrationWarning:!0,children:(0,d.jsxs)("body",{suppressHydrationWarning:!0,children:[(0,d.jsx)("a",{href:"#main",className:"skip-to-main",children:"Skip to main content"}),(0,d.jsxs)("div",{className:"app",children:[(0,d.jsx)(k.Sidebar,{mode:b,deploymentMode:g,projects:o,orgSlug:p,viewerUserId:q,footerSlot:e}),(0,d.jsx)("main",{className:"main",id:"main",children:a})]})]})});if(i){let{ClerkProvider:a}=await Promise.all([c.e(6865),c.e(8424),c.e(9189)]).then(c.bind(c,19189));return(0,d.jsx)(a,{appearance:m.y,signInUrl:"/auth/sign-in",signUpUrl:"/auth/sign-up",signInFallbackRedirectUrl:"/",signUpFallbackRedirectUrl:"/",children:s})}return s}async function r(){try{return await (0,o.hF)()}catch{return[]}}},21074:(a,b,c)=>{"use strict";c.d(b,{Nm:()=>j,getProject:()=>i,hF:()=>h,oB:()=>k,xx:()=>l});var d=c(4781),e=c(14320),f=c(58671);let g=new Set(["__global__"]);async function h(){let a=(0,f.f)(),b=await (0,d.hF)(a),c=await (0,e.tryGetActor)(),h=c?.orgId??null;return null===h?[]:b.filter(a=>!g.has(a.slug)&&a.orgId===h)}async function i(a){let b=(0,f.f)();return(0,d.Ob)(b,a)}async function j(a,b={}){let c=(0,f.f)(),e=await (0,d.Ob)(c,a);return null===e?null:(0,d.Nm)(c,e.id,b)}async function k(a,b){let c=(0,f.f)(),e=await (0,d.Ob)(c,a);return null===e?{status:"not_found"}:(0,d.oB)(c,{projectId:e.id,newSlug:b})}async function l(a){let b=(0,f.f)(),c=await (0,d.Ob)(b,a);return null===c?{status:"not_found",projectId:a}:(0,d.xx)(b,c.id)}},23265:(a,b,c)=>{"use strict";c.d(b,{assertCanEditKnowledge:()=>o,f7:()=>l,aP:()=>w,cl:()=>n}),c(77598);var d=c(81547),e=c(76815),f=c(86735);(0,f.h)("auth"),Object.freeze({userId:"user_dev_local",orgId:"org_dev_local",source:"solo-bypass"});var g=c(73024),h=c(48161),i=c(76760),j=c(23185);let k=Object.freeze({viewer:0,member:1,admin:2});function l(a){if(null==a)return"member";let b=a.trim().toLowerCase().replace(/^org:/,"");return"admin"===b?"admin":"viewer"===b?"viewer":"member"}function m(a,b){return k[a.role]>=k[b]}function n(a,b){if(!m(a,b))throw new e.qQ(`Requires role '${b}' or higher; actor has '${a.role}'.`)}function o(a,b,c={}){let d=c.allowOwner??!0;if(!m(a,"admin")){if(d&&m(a,"member")){let c=b.createdByUserId??null;if(null!==c&&c===a.userId)return}throw new e.qQ(`Requires admin role${d?" or member-ownership":""} to edit this knowledge artifact; actor has '${a.role}'.`)}}Object.freeze({userId:"__solo__",orgId:"__solo__",role:"admin",source:"solo-bypass"});let p=(0,f.h)("verify-clerk-jwt"),q=new Map;async function r(a,b){let c;if("string"!=typeof a||0===a.length)throw new e.D_("verifyClerkJwtAndExtractClaims: token is empty");let f=void 0!==b.CLERK_SECRET_KEY&&b.CLERK_SECRET_KEY.length>0;if(f&&"sk_test_replace_me"===b.CLERK_SECRET_KEY)throw new e.D_("verifyClerkJwtAndExtractClaims: CLERK_SECRET_KEY is the solo-bypass sentinel; this code path requires a real sk_test_/sk_live_ key");if(void 0===b.CLERK_PUBLISHABLE_KEY||0===b.CLERK_PUBLISHABLE_KEY.length)throw new e.D_("verifyClerkJwtAndExtractClaims: CLERK_PUBLISHABLE_KEY is required (used to derive the JWKS issuer).");let g=Date.now(),h=q.get(a);if(void 0!==h&&g-h.verifiedAt<3e4&&h.claims.expiresAt.getTime()>g)return h.claims;try{c=f?await (0,d.n)(a,{secretKey:b.CLERK_SECRET_KEY}):await (0,d.n)(a,{})}catch(b){let a=b instanceof Error?b.message:String(b);throw p.warn({event:"clerk_verify_failed",err:a,mode:f?"secret":"jwks"},"verifyClerkJwtAndExtractClaims: @clerk/backend rejected token"),new e.D_(`Clerk JWT verification failed: ${a}`)}let i=function(a,b){let c=a.sub;if("string"!=typeof c||0===c.length)throw new e.D_("Clerk JWT: payload.sub is missing or empty");let d=a.exp;if("number"!=typeof d||!Number.isFinite(d))throw new e.D_("Clerk JWT: payload.exp is missing or not a finite number");let f=new Date(1e3*d);if(f.getTime()<=b)throw new e.D_(`Clerk JWT: token expired at ${f.toISOString()} (now=${new Date(b).toISOString()})`);let g=a.iat,h=new Date("number"==typeof g&&Number.isFinite(g)?1e3*g:0),i=a.org_id,j="string"==typeof i&&i.length>0?i:"";if(0===j.length)throw new e.D_("Clerk JWT: org_id missing. Team-mode operations require the user to be in a Clerk org. Sign in via /auth/sign-in and select an organization before retrying.");let k=a.org_role,m=l("string"==typeof k?k:null),n=a.email,o="string"==typeof n&&n.length>0?n:null,p=a.iss;return{userId:c,orgId:j,role:m,email:o,issuer:"string"==typeof p?p:"",expiresAt:f,issuedAt:h}}(c,g);return q.set(a,{claims:i,verifiedAt:g}),i}let s=(0,f.h)("clerk-token-store"),t=j.Ik({version:j.eu(1),token:j.Yj().min(1),webUrl:j.Yj().min(1),fetchedAt:j.ai().int(),claimsMirror:j.Ik({userId:j.Yj(),orgId:j.Yj(),role:j.k5(["admin","member","viewer"]),email:j.Yj().nullable(),expiresAt:j.Yj()}).optional()}).strict(),u=new Set(["sk_test_replace_me","pk_test_replace_me"]);function v(a){return"string"==typeof a&&0!==a.length&&!u.has(a)}async function w(a={}){let b,c=function(a){let b=a??process.env.COODRA_HOME??(0,i.resolve)((0,h.homedir)(),".coodra");return(0,i.resolve)(b,"clerk-token.json")}(a.homeOverride);if(!(0,g.existsSync)(c))return null;try{let a=(0,g.statSync)(c),b=511&a.mode;384!==b&&s.warn({path:c,mode:b.toString(8)},`clerk-token.json has mode ${b.toString(8)} (expected 0600). Run \`chmod 600 ${c}\` to lock it down.`)}catch{}try{let a=(0,g.readFileSync)(c,"utf8"),d=JSON.parse(a);b=t.parse(d)}catch(b){let a=b instanceof Error?b.message:String(b);return s.warn({path:c,err:a,event:"token_file_unreadable"},"clerk-token.json: unreadable or malformed"),null}let d=a.envOverride??function(a){let b=a??process.env.COODRA_HOME??(0,i.resolve)((0,h.homedir)(),".coodra"),c=(0,i.resolve)(b,".env");if(!(0,g.existsSync)(c))return{CLERK_SECRET_KEY:v(process.env.CLERK_SECRET_KEY)?process.env.CLERK_SECRET_KEY:void 0,CLERK_PUBLISHABLE_KEY:v(process.env.CLERK_PUBLISHABLE_KEY)?process.env.CLERK_PUBLISHABLE_KEY:void 0,CLERK_JWT_ISSUER:process.env.CLERK_JWT_ISSUER??null,COODRA_MODE:"team"===process.env.COODRA_MODE||"solo"===process.env.COODRA_MODE?process.env.COODRA_MODE:void 0};let d=function(a){let b={};for(let c of a.split(/\r?\n/)){let a=c.trim();if(0===a.length||a.startsWith("#"))continue;let d=a.indexOf("=");if(d<=0)continue;let e=a.slice(0,d).trim(),f=a.slice(d+1).trim();(f.startsWith('"')&&f.endsWith('"')||f.startsWith("'")&&f.endsWith("'"))&&(f=f.slice(1,-1)),b[e]=f}return b}((0,g.readFileSync)(c,"utf8")),e=a=>{let b=process.env[a];return v(b)?b:d[a]},f=a=>process.env[a]??d[a],j=f("COODRA_MODE");return{CLERK_SECRET_KEY:e("CLERK_SECRET_KEY"),CLERK_PUBLISHABLE_KEY:e("CLERK_PUBLISHABLE_KEY"),CLERK_JWT_ISSUER:f("CLERK_JWT_ISSUER")??null,COODRA_MODE:"team"===j||"solo"===j?j:void 0}}(a.homeOverride);try{return await r(b.token,d)}catch(b){let a=b instanceof Error?b.message:String(b);return s.warn({path:c,err:a,event:"token_verify_failed"},"clerk-token.json: JWT verification failed"),null}}},29748:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,57345,23))},30759:(a,b,c)=>{"use strict";c.d(b,{y:()=>d});let d={variables:{colorPrimary:"#7dd87d",colorBackground:"#0d130d",colorInputBackground:"#0a0e0a",colorText:"#e8e6e1",colorTextSecondary:"#8a8d86",colorTextOnPrimaryBackground:"#0a0e0a",colorInputText:"#e8e6e1",colorDanger:"#d97a7a",colorSuccess:"#7dd87d",colorWarning:"#c08a3e",colorNeutral:"#8a8d86",fontFamily:"Inter Tight, system-ui, sans-serif",fontFamilyButtons:"JetBrains Mono, monospace",fontSize:"14px",borderRadius:"0px",spacingUnit:"8px"},elements:{rootBox:"font-sans",card:"bg-bg-2 border border-rule-strong rounded-none",headerTitle:"font-serif tracking-tight",headerSubtitle:"text-ink-dim",socialButtonsBlockButton:"rounded-none border-rule-strong text-ink",socialButtonsBlockButtonText:"font-mono uppercase tracking-widest text-xs",formButtonPrimary:"rounded-none border border-accent bg-accent text-bg uppercase tracking-widest text-xs font-mono font-medium",formButtonReset:"rounded-none border border-rule-strong text-ink-dim uppercase tracking-widest text-xs font-mono",formFieldLabel:"font-mono uppercase tracking-widest text-[10px] text-ink-mute",formFieldInput:"rounded-none bg-bg border-rule-strong text-ink font-mono text-sm",identityPreviewText:"font-mono text-ink-dim",identityPreviewEditButtonIcon:"text-accent",formFieldAction:"text-accent text-xs font-mono uppercase tracking-wider",footerActionText:"text-ink-dim",footerActionLink:"text-accent underline-offset-2",dividerLine:"bg-rule",dividerText:"text-ink-mute font-mono text-xs uppercase tracking-widest",alertText:"text-warn"},layout:{socialButtonsPlacement:"bottom",socialButtonsVariant:"blockButton"}}},34299:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g,dynamic:()=>f});var d=c(18234),e=c(77716);let f="force-dynamic";function g(){return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(e.b,{crumb:"Not found"}),(0,d.jsx)("section",{className:"screen",children:(0,d.jsx)("div",{className:"head",children:(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"head__num",children:"/404"}),(0,d.jsxs)("h1",{className:"head__title",children:["No ",(0,d.jsx)("em",{children:"such"})," page."]}),(0,d.jsx)("p",{className:"head__lede",children:"The route you followed does not exist on this server."})]})})})]})}},35787:(a,b,c)=>{"use strict";c.d(b,{u:()=>e});var d=c(4781);async function e(a,b={}){let c=await (0,d.dL)({kind:"local",sqlite:{path:a,loadVecExtension:b.loadVecExtension??!1}});if("sqlite"!==c.kind)throw c.close(),Error(`expected sqlite handle, got ${c.kind}`);return c}},40370:(a,b,c)=>{"use strict";c.d(b,{tZ:()=>s,kZ:()=>p,ab:()=>v,fJ:()=>r,I9:()=>q,bP:()=>u,pc:()=>n,S1:()=>o,JL:()=>m,ry:()=>t});var d=c(89038);let e=d.isColorSupported,f={inkFar:"#7d7d7d",...{dark:{phosphor:"#7dd87d",phosphorSoft:"#4a9d4a",crimson:"#d97a7a",amber:"#c08a3e",blue:"#6ba5c8",purple:"#9b87d4",pink:"#d47fa8"},light:{phosphor:"#2e7d32",phosphorSoft:"#43853f",crimson:"#c62828",amber:"#8a5a00",blue:"#1565a0",purple:"#5e35b1",pink:"#ad1457"},unknown:{phosphor:"#3d9140",phosphorSoft:"#4a9d4a",crimson:"#cc4436",amber:"#a8741f",blue:"#3f7fa0",purple:"#7a5fc0",pink:"#c05080"}}[function(){let a=process.env.COODRA_THEME?.trim().toLowerCase();if("dark"===a||"light"===a)return a;let b=process.env.COLORFGBG;if("string"==typeof b&&b.length>0){let a=b.split(";"),c=a[a.length-1],d=void 0!==c?Number.parseInt(c,10):NaN;if(Number.isInteger(d)){if(7===d||d>=9&&d<=15)return"light";if(d>=0&&d<=6||8===d)return"dark"}}return"unknown"}()]};function g(a,b){if(!e)return b;let[c,d,f]=function(a){let b=a.replace("#","");return[Number.parseInt(b.slice(0,2),16),Number.parseInt(b.slice(2,4),16),Number.parseInt(b.slice(4,6),16)]}(a);return`\x1b[38;2;${c};${d};${f}m${b}\x1b[39m`}let h={bold:d.bold,italic:d.italic,dim:d.dim,underline:d.underline},i={ink:a=>a,inkDim:a=>h.dim(a),inkFar:a=>g(f.inkFar,a),phosphor:a=>g(f.phosphor,a),phosphorSoft:a=>g(f.phosphorSoft,a),crimson:a=>g(f.crimson,a),amber:a=>g(f.amber,a),blue:a=>g(f.blue,a),purple:a=>g(f.purple,a),pink:a=>g(f.pink,a)},j={check:{ok:"✓",warn:"⚠",fail:"✗",timeout:"⏱",skip:"\xb7"},node:{ok:"●",fail:"✕",idle:"○",warn:"!"},rule:"─"},k={ok:j.check.ok,warn:j.check.warn,fail:j.check.fail,timeout:j.check.timeout,skip:j.check.skip},l={ok:i.phosphor,warn:i.amber,fail:i.crimson,timeout:i.crimson,skip:i.inkFar};function m(){let a=process.stdout.columns;return"number"==typeof a&&Number.isFinite(a)?Math.max(48,Math.min(100,a)):80}j.node.ok,j.node.fail,j.node.idle,j.node.warn,i.phosphor,i.crimson,i.inkDim,i.amber,f.phosphor,f.amber,f.crimson,f.crimson,f.inkFar,f.phosphor,f.crimson,f.inkFar,f.amber;let n={green:i.phosphor,red:i.crimson,yellow:i.amber,cyan:i.blue,blue:i.blue,magenta:i.purple,gray:i.inkDim,grey:i.inkDim,white:i.ink,dim:h.dim,bold:h.bold,italic:h.italic,underline:h.underline};function o(a,b,c={}){let d=c.width??m(),e=c.indent??0,f=" ".repeat(e),g=`/${a}`,k=b.toUpperCase(),l=Math.max(3,d-(e+g.length+2+k.length+2));return`${f}${i.phosphor(g)} ${h.bold(i.ink(k))} ${i.inkFar(j.rule.repeat(l))}`}function p(a,b,c={}){let d=c.width??m(),e=c.indent??2,f=" ".repeat(e),g=void 0!==b?`${h.bold(i.ink(a))} ${i.inkFar(`— ${b}`)}`:h.bold(i.ink(a)),k=i.inkFar(j.rule.repeat(Math.max(8,d-e)));return`${f}${g}
|
|
2
|
-
${f}${k}`}function q(a,b={}){let c=b.keyWidth??22,d=b.indent??0,e=" ".repeat(d),f=void 0!==a.glyph?`${a.glyph} `:" ",g=i.inkDim(a.key.padEnd(c)),h=void 0!==a.valueTone?i[a.valueTone]:i.ink,j=void 0!==a.value?h(a.value):"",k=void 0!==a.meta?` ${i.inkFar(a.meta)}`:"";return`${e}${f}${g}${j}${k}`}function r(a,b={}){let c=a.reduce((a,b)=>Math.max(a,b.key.length),0),d=b.keyWidth??Math.min(34,Math.max(12,c+2)),e=void 0!==b.indent?{keyWidth:d,indent:b.indent}:{keyWidth:d};return a.map(a=>q(a,e)).join("\n")}function s(a){return l[a](k[a])}function t(a){return`${i.amber(j.check.warn)} ${i.inkDim(a)}`}function u(a){return`${i.phosphor(j.check.ok)} ${i.ink(a)}`}function v(a){return i.inkFar(a)}},44574:(a,b,c)=>{"use strict";c.d(b,{Fu:()=>
|
|
1
|
+
exports.id=3088,exports.ids=[3088],exports.modules={33:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,17504,23)),Promise.resolve().then(c.t.bind(c,7715,23)),Promise.resolve().then(c.t.bind(c,24575,23)),Promise.resolve().then(c.t.bind(c,57074,23)),Promise.resolve().then(c.t.bind(c,94854,23)),Promise.resolve().then(c.t.bind(c,68506,23)),Promise.resolve().then(c.t.bind(c,41634,23)),Promise.resolve().then(c.t.bind(c,74775,23)),Promise.resolve().then(c.bind(c,5010))},7545:(a,b,c)=>{Promise.resolve().then(c.bind(c,93184)),Promise.resolve().then(c.bind(c,12417)),Promise.resolve().then(c.bind(c,20170)),Promise.resolve().then(c.bind(c,44301)),Promise.resolve().then(c.bind(c,14360)),Promise.resolve().then(c.bind(c,13826)),Promise.resolve().then(c.bind(c,87939))},14320:(a,b,c)=>{"use strict";c.r(b),c.d(b,{getActor:()=>i,tryGetActor:()=>j});var d=c(23265),e=c(94404),f=c(34017);async function g(a,b={}){let c=process.env.COODRA_EXPECTED_ORG_ID;if("string"==typeof c&&0!==c.length){if("string"!=typeof a||0===a.length)throw!1!==b.redirectOnMismatch&&(0,f.redirect)("/forbidden?reason=no_org"),Error(`requireOrgMatch: no Clerk org on session (expected ${c})`);if(a!==c)throw!1!==b.redirectOnMismatch&&(0,f.redirect)(`/forbidden?reason=org_mismatch&expected=${encodeURIComponent(c)}&got=${encodeURIComponent(a)}`),Error(`requireOrgMatch: orgId mismatch (expected ${c}, got ${a})`)}}let h={userId:"__solo__",orgId:"__solo__",role:"admin",mode:"solo",source:"solo-bypass"};async function i(){if("solo"===(0,e.uV)())return h;let{auth:a}=await Promise.all([c.e(6865),c.e(8424),c.e(9340)]).then(c.bind(c,19340)),b=await a();if(null===b.userId||void 0===b.userId)throw Error("team mode but no Clerk session at getActor() — middleware misconfig or non-public route reached without auth");return await g(b.orgId??null),{userId:b.userId,orgId:b.orgId??"no-org",role:(0,d.f7)(b.orgRole),mode:"team",source:"clerk"}}async function j(){if("solo"===(0,e.uV)())return h;try{let{auth:a}=await Promise.all([c.e(6865),c.e(8424),c.e(9340)]).then(c.bind(c,19340)),b=await a();if(null===b.userId||void 0===b.userId)return null;return{userId:b.userId,orgId:b.orgId??"no-org",role:(0,d.f7)(b.orgRole),mode:"team",source:"clerk"}}catch{return null}}},19633:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>q,metadata:()=>p});var d=c(18234),e=c(54140),f=c.n(e),g=c(10391),h=c.n(g),i=c(14210),j=c.n(i),k=c(91706),l=c(14320),m=c(30759),n=c(94404),o=c(21074);c(59744);let p={title:"Coodra — App",description:"Editorial audit surface for Coodra — local-first, MCP-native, MIT."};async function q({children:a}){let b,e,g=(0,n.resolveDeploymentMode)(),i="team"===(0,n.uV)(),o=(await r()).map(a=>({slug:a.slug,name:a.name})),p=null,q=null;if(i){b="team";let a=await (0,l.tryGetActor)();null!==a&&(p=a.orgId,q=a.userId)}else b="solo";if(i){let{OrganizationSwitcher:a,UserButton:b}=await Promise.all([c.e(6865),c.e(8424),c.e(9189)]).then(c.bind(c,19189));e=(0,d.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,width:"100%",justifyContent:"space-between"},children:[(0,d.jsx)(a,{appearance:m.y,hidePersonal:!0,afterCreateOrganizationUrl:"/",afterSelectOrganizationUrl:"/",afterLeaveOrganizationUrl:"/welcome"}),(0,d.jsx)(b,{appearance:m.y,userProfileUrl:"/settings/account"})]})}let s=(0,d.jsx)("html",{lang:"en",className:`${f().variable} ${h().variable} ${j().variable}`,suppressHydrationWarning:!0,children:(0,d.jsxs)("body",{suppressHydrationWarning:!0,children:[(0,d.jsx)("a",{href:"#main",className:"skip-to-main",children:"Skip to main content"}),(0,d.jsxs)("div",{className:"app",children:[(0,d.jsx)(k.Sidebar,{mode:b,deploymentMode:g,projects:o,orgSlug:p,viewerUserId:q,footerSlot:e}),(0,d.jsx)("main",{className:"main",id:"main",children:a})]})]})});if(i){let{ClerkProvider:a}=await Promise.all([c.e(6865),c.e(8424),c.e(9189)]).then(c.bind(c,19189));return(0,d.jsx)(a,{appearance:m.y,signInUrl:"/auth/sign-in",signUpUrl:"/auth/sign-up",signInFallbackRedirectUrl:"/",signUpFallbackRedirectUrl:"/",children:s})}return s}async function r(){try{return await (0,o.hF)()}catch{return[]}}},21074:(a,b,c)=>{"use strict";c.d(b,{Nm:()=>j,getProject:()=>i,hF:()=>h,oB:()=>k,xx:()=>l});var d=c(4781),e=c(14320),f=c(58671);let g=new Set(["__global__"]);async function h(){let a=(0,f.f)(),b=await (0,d.hF)(a),c=await (0,e.tryGetActor)(),h=c?.orgId??null;return null===h?[]:b.filter(a=>!g.has(a.slug)&&a.orgId===h)}async function i(a){let b=(0,f.f)();return(0,d.Ob)(b,a)}async function j(a,b={}){let c=(0,f.f)(),e=await (0,d.Ob)(c,a);return null===e?null:(0,d.Nm)(c,e.id,b)}async function k(a,b){let c=(0,f.f)(),e=await (0,d.Ob)(c,a);return null===e?{status:"not_found"}:(0,d.oB)(c,{projectId:e.id,newSlug:b})}async function l(a){let b=(0,f.f)(),c=await (0,d.Ob)(b,a);return null===c?{status:"not_found",projectId:a}:(0,d.xx)(b,c.id)}},23265:(a,b,c)=>{"use strict";c.d(b,{assertCanEditKnowledge:()=>o,f7:()=>l,aP:()=>w,cl:()=>n}),c(77598);var d=c(81547),e=c(76815),f=c(86735);(0,f.h)("auth"),Object.freeze({userId:"user_dev_local",orgId:"org_dev_local",source:"solo-bypass"});var g=c(73024),h=c(48161),i=c(76760),j=c(23185);let k=Object.freeze({viewer:0,member:1,admin:2});function l(a){if(null==a)return"member";let b=a.trim().toLowerCase().replace(/^org:/,"");return"admin"===b?"admin":"viewer"===b?"viewer":"member"}function m(a,b){return k[a.role]>=k[b]}function n(a,b){if(!m(a,b))throw new e.qQ(`Requires role '${b}' or higher; actor has '${a.role}'.`)}function o(a,b,c={}){let d=c.allowOwner??!0;if(!m(a,"admin")){if(d&&m(a,"member")){let c=b.createdByUserId??null;if(null!==c&&c===a.userId)return}throw new e.qQ(`Requires admin role${d?" or member-ownership":""} to edit this knowledge artifact; actor has '${a.role}'.`)}}Object.freeze({userId:"__solo__",orgId:"__solo__",role:"admin",source:"solo-bypass"});let p=(0,f.h)("verify-clerk-jwt"),q=new Map;async function r(a,b){let c;if("string"!=typeof a||0===a.length)throw new e.D_("verifyClerkJwtAndExtractClaims: token is empty");let f=void 0!==b.CLERK_SECRET_KEY&&b.CLERK_SECRET_KEY.length>0;if(f&&"sk_test_replace_me"===b.CLERK_SECRET_KEY)throw new e.D_("verifyClerkJwtAndExtractClaims: CLERK_SECRET_KEY is the solo-bypass sentinel; this code path requires a real sk_test_/sk_live_ key");if(void 0===b.CLERK_PUBLISHABLE_KEY||0===b.CLERK_PUBLISHABLE_KEY.length)throw new e.D_("verifyClerkJwtAndExtractClaims: CLERK_PUBLISHABLE_KEY is required (used to derive the JWKS issuer).");let g=Date.now(),h=q.get(a);if(void 0!==h&&g-h.verifiedAt<3e4&&h.claims.expiresAt.getTime()>g)return h.claims;try{c=f?await (0,d.n)(a,{secretKey:b.CLERK_SECRET_KEY}):await (0,d.n)(a,{})}catch(b){let a=b instanceof Error?b.message:String(b);throw p.warn({event:"clerk_verify_failed",err:a,mode:f?"secret":"jwks"},"verifyClerkJwtAndExtractClaims: @clerk/backend rejected token"),new e.D_(`Clerk JWT verification failed: ${a}`)}let i=function(a,b){let c=a.sub;if("string"!=typeof c||0===c.length)throw new e.D_("Clerk JWT: payload.sub is missing or empty");let d=a.exp;if("number"!=typeof d||!Number.isFinite(d))throw new e.D_("Clerk JWT: payload.exp is missing or not a finite number");let f=new Date(1e3*d);if(f.getTime()<=b)throw new e.D_(`Clerk JWT: token expired at ${f.toISOString()} (now=${new Date(b).toISOString()})`);let g=a.iat,h=new Date("number"==typeof g&&Number.isFinite(g)?1e3*g:0),i=a.org_id,j="string"==typeof i&&i.length>0?i:"";if(0===j.length)throw new e.D_("Clerk JWT: org_id missing. Team-mode operations require the user to be in a Clerk org. Sign in via /auth/sign-in and select an organization before retrying.");let k=a.org_role,m=l("string"==typeof k?k:null),n=a.email,o="string"==typeof n&&n.length>0?n:null,p=a.iss;return{userId:c,orgId:j,role:m,email:o,issuer:"string"==typeof p?p:"",expiresAt:f,issuedAt:h}}(c,g);return q.set(a,{claims:i,verifiedAt:g}),i}let s=(0,f.h)("clerk-token-store"),t=j.Ik({version:j.eu(1),token:j.Yj().min(1),webUrl:j.Yj().min(1),fetchedAt:j.ai().int(),claimsMirror:j.Ik({userId:j.Yj(),orgId:j.Yj(),role:j.k5(["admin","member","viewer"]),email:j.Yj().nullable(),expiresAt:j.Yj()}).optional()}).strict(),u=new Set(["sk_test_replace_me","pk_test_replace_me"]);function v(a){return"string"==typeof a&&0!==a.length&&!u.has(a)}async function w(a={}){let b,c=function(a){let b=a??process.env.COODRA_HOME??(0,i.resolve)((0,h.homedir)(),".coodra");return(0,i.resolve)(b,"clerk-token.json")}(a.homeOverride);if(!(0,g.existsSync)(c))return null;try{let a=(0,g.statSync)(c),b=511&a.mode;384!==b&&s.warn({path:c,mode:b.toString(8)},`clerk-token.json has mode ${b.toString(8)} (expected 0600). Run \`chmod 600 ${c}\` to lock it down.`)}catch{}try{let a=(0,g.readFileSync)(c,"utf8"),d=JSON.parse(a);b=t.parse(d)}catch(b){let a=b instanceof Error?b.message:String(b);return s.warn({path:c,err:a,event:"token_file_unreadable"},"clerk-token.json: unreadable or malformed"),null}let d=a.envOverride??function(a){let b=a??process.env.COODRA_HOME??(0,i.resolve)((0,h.homedir)(),".coodra"),c=(0,i.resolve)(b,".env");if(!(0,g.existsSync)(c))return{CLERK_SECRET_KEY:v(process.env.CLERK_SECRET_KEY)?process.env.CLERK_SECRET_KEY:void 0,CLERK_PUBLISHABLE_KEY:v(process.env.CLERK_PUBLISHABLE_KEY)?process.env.CLERK_PUBLISHABLE_KEY:void 0,CLERK_JWT_ISSUER:process.env.CLERK_JWT_ISSUER??null,COODRA_MODE:"team"===process.env.COODRA_MODE||"solo"===process.env.COODRA_MODE?process.env.COODRA_MODE:void 0};let d=function(a){let b={};for(let c of a.split(/\r?\n/)){let a=c.trim();if(0===a.length||a.startsWith("#"))continue;let d=a.indexOf("=");if(d<=0)continue;let e=a.slice(0,d).trim(),f=a.slice(d+1).trim();(f.startsWith('"')&&f.endsWith('"')||f.startsWith("'")&&f.endsWith("'"))&&(f=f.slice(1,-1)),b[e]=f}return b}((0,g.readFileSync)(c,"utf8")),e=a=>{let b=process.env[a];return v(b)?b:d[a]},f=a=>process.env[a]??d[a],j=f("COODRA_MODE");return{CLERK_SECRET_KEY:e("CLERK_SECRET_KEY"),CLERK_PUBLISHABLE_KEY:e("CLERK_PUBLISHABLE_KEY"),CLERK_JWT_ISSUER:f("CLERK_JWT_ISSUER")??null,COODRA_MODE:"team"===j||"solo"===j?j:void 0}}(a.homeOverride);try{return await r(b.token,d)}catch(b){let a=b instanceof Error?b.message:String(b);return s.warn({path:c,err:a,event:"token_verify_failed"},"clerk-token.json: JWT verification failed"),null}}},29748:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,57345,23))},30759:(a,b,c)=>{"use strict";c.d(b,{y:()=>d});let d={variables:{colorPrimary:"#7dd87d",colorBackground:"#0d130d",colorInputBackground:"#0a0e0a",colorText:"#e8e6e1",colorTextSecondary:"#8a8d86",colorTextOnPrimaryBackground:"#0a0e0a",colorInputText:"#e8e6e1",colorDanger:"#d97a7a",colorSuccess:"#7dd87d",colorWarning:"#c08a3e",colorNeutral:"#8a8d86",fontFamily:"Inter Tight, system-ui, sans-serif",fontFamilyButtons:"JetBrains Mono, monospace",fontSize:"14px",borderRadius:"0px",spacingUnit:"8px"},elements:{rootBox:"font-sans",card:"bg-bg-2 border border-rule-strong rounded-none",headerTitle:"font-serif tracking-tight",headerSubtitle:"text-ink-dim",socialButtonsBlockButton:"rounded-none border-rule-strong text-ink",socialButtonsBlockButtonText:"font-mono uppercase tracking-widest text-xs",formButtonPrimary:"rounded-none border border-accent bg-accent text-bg uppercase tracking-widest text-xs font-mono font-medium",formButtonReset:"rounded-none border border-rule-strong text-ink-dim uppercase tracking-widest text-xs font-mono",formFieldLabel:"font-mono uppercase tracking-widest text-[10px] text-ink-mute",formFieldInput:"rounded-none bg-bg border-rule-strong text-ink font-mono text-sm",identityPreviewText:"font-mono text-ink-dim",identityPreviewEditButtonIcon:"text-accent",formFieldAction:"text-accent text-xs font-mono uppercase tracking-wider",footerActionText:"text-ink-dim",footerActionLink:"text-accent underline-offset-2",dividerLine:"bg-rule",dividerText:"text-ink-mute font-mono text-xs uppercase tracking-widest",alertText:"text-warn"},layout:{socialButtonsPlacement:"bottom",socialButtonsVariant:"blockButton"}}},34299:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g,dynamic:()=>f});var d=c(18234),e=c(77716);let f="force-dynamic";function g(){return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(e.b,{crumb:"Not found"}),(0,d.jsx)("section",{className:"screen",children:(0,d.jsx)("div",{className:"head",children:(0,d.jsxs)("div",{children:[(0,d.jsx)("div",{className:"head__num",children:"/404"}),(0,d.jsxs)("h1",{className:"head__title",children:["No ",(0,d.jsx)("em",{children:"such"})," page."]}),(0,d.jsx)("p",{className:"head__lede",children:"The route you followed does not exist on this server."})]})})})]})}},35787:(a,b,c)=>{"use strict";c.d(b,{u:()=>e});var d=c(4781);async function e(a,b={}){let c=await (0,d.dL)({kind:"local",sqlite:{path:a,loadVecExtension:b.loadVecExtension??!1}});if("sqlite"!==c.kind)throw c.close(),Error(`expected sqlite handle, got ${c.kind}`);return c}},39574:(a,b,c)=>{"use strict";c.d(b,{y:()=>e});var d=c(4892);let e=(0,d.createServerReference)("7f3ad27032b60fdc621e9c3aeb59027dcbe2ffbc6a",d.callServer,void 0,d.findSourceMapURL,"invalidateCacheAction")},40370:(a,b,c)=>{"use strict";c.d(b,{tZ:()=>s,kZ:()=>p,ab:()=>v,fJ:()=>r,I9:()=>q,bP:()=>u,pc:()=>n,S1:()=>o,JL:()=>m,ry:()=>t});var d=c(89038);let e=d.isColorSupported,f={inkFar:"#7d7d7d",...{dark:{phosphor:"#7dd87d",phosphorSoft:"#4a9d4a",crimson:"#d97a7a",amber:"#c08a3e",blue:"#6ba5c8",purple:"#9b87d4",pink:"#d47fa8"},light:{phosphor:"#2e7d32",phosphorSoft:"#43853f",crimson:"#c62828",amber:"#8a5a00",blue:"#1565a0",purple:"#5e35b1",pink:"#ad1457"},unknown:{phosphor:"#3d9140",phosphorSoft:"#4a9d4a",crimson:"#cc4436",amber:"#a8741f",blue:"#3f7fa0",purple:"#7a5fc0",pink:"#c05080"}}[function(){let a=process.env.COODRA_THEME?.trim().toLowerCase();if("dark"===a||"light"===a)return a;let b=process.env.COLORFGBG;if("string"==typeof b&&b.length>0){let a=b.split(";"),c=a[a.length-1],d=void 0!==c?Number.parseInt(c,10):NaN;if(Number.isInteger(d)){if(7===d||d>=9&&d<=15)return"light";if(d>=0&&d<=6||8===d)return"dark"}}return"unknown"}()]};function g(a,b){if(!e)return b;let[c,d,f]=function(a){let b=a.replace("#","");return[Number.parseInt(b.slice(0,2),16),Number.parseInt(b.slice(2,4),16),Number.parseInt(b.slice(4,6),16)]}(a);return`\x1b[38;2;${c};${d};${f}m${b}\x1b[39m`}let h={bold:d.bold,italic:d.italic,dim:d.dim,underline:d.underline},i={ink:a=>a,inkDim:a=>h.dim(a),inkFar:a=>g(f.inkFar,a),phosphor:a=>g(f.phosphor,a),phosphorSoft:a=>g(f.phosphorSoft,a),crimson:a=>g(f.crimson,a),amber:a=>g(f.amber,a),blue:a=>g(f.blue,a),purple:a=>g(f.purple,a),pink:a=>g(f.pink,a)},j={check:{ok:"✓",warn:"⚠",fail:"✗",timeout:"⏱",skip:"\xb7"},node:{ok:"●",fail:"✕",idle:"○",warn:"!"},rule:"─"},k={ok:j.check.ok,warn:j.check.warn,fail:j.check.fail,timeout:j.check.timeout,skip:j.check.skip},l={ok:i.phosphor,warn:i.amber,fail:i.crimson,timeout:i.crimson,skip:i.inkFar};function m(){let a=process.stdout.columns;return"number"==typeof a&&Number.isFinite(a)?Math.max(48,Math.min(100,a)):80}j.node.ok,j.node.fail,j.node.idle,j.node.warn,i.phosphor,i.crimson,i.inkDim,i.amber,f.phosphor,f.amber,f.crimson,f.crimson,f.inkFar,f.phosphor,f.crimson,f.inkFar,f.amber;let n={green:i.phosphor,red:i.crimson,yellow:i.amber,cyan:i.blue,blue:i.blue,magenta:i.purple,gray:i.inkDim,grey:i.inkDim,white:i.ink,dim:h.dim,bold:h.bold,italic:h.italic,underline:h.underline};function o(a,b,c={}){let d=c.width??m(),e=c.indent??0,f=" ".repeat(e),g=`/${a}`,k=b.toUpperCase(),l=Math.max(3,d-(e+g.length+2+k.length+2));return`${f}${i.phosphor(g)} ${h.bold(i.ink(k))} ${i.inkFar(j.rule.repeat(l))}`}function p(a,b,c={}){let d=c.width??m(),e=c.indent??2,f=" ".repeat(e),g=void 0!==b?`${h.bold(i.ink(a))} ${i.inkFar(`— ${b}`)}`:h.bold(i.ink(a)),k=i.inkFar(j.rule.repeat(Math.max(8,d-e)));return`${f}${g}
|
|
2
|
+
${f}${k}`}function q(a,b={}){let c=b.keyWidth??22,d=b.indent??0,e=" ".repeat(d),f=void 0!==a.glyph?`${a.glyph} `:" ",g=i.inkDim(a.key.padEnd(c)),h=void 0!==a.valueTone?i[a.valueTone]:i.ink,j=void 0!==a.value?h(a.value):"",k=void 0!==a.meta?` ${i.inkFar(a.meta)}`:"";return`${e}${f}${g}${j}${k}`}function r(a,b={}){let c=a.reduce((a,b)=>Math.max(a,b.key.length),0),d=b.keyWidth??Math.min(34,Math.max(12,c+2)),e=void 0!==b.indent?{keyWidth:d,indent:b.indent}:{keyWidth:d};return a.map(a=>q(a,e)).join("\n")}function s(a){return l[a](k[a])}function t(a){return`${i.amber(j.check.warn)} ${i.inkDim(a)}`}function u(a){return`${i.phosphor(j.check.ok)} ${i.ink(a)}`}function v(a){return i.inkFar(a)}},44574:(a,b,c)=>{"use strict";c.d(b,{Fu:()=>ak,CO:()=>aj,tq:()=>ah,tN:()=>ai});var d=c(38679);c(60681);var e=c(76760),f=c(56589),g=c(14820),h=c(31421),i=c(73024),j=c(51455);async function k(a,b){let c,d=(0,g.gB)(a),f=(0,e.join)(d,`${b}.pid`);try{c=await (0,j.readFile)(f,"utf8")}catch{return{state:"no-pid-file"}}let h=Number.parseInt(c.trim(),10);return!Number.isFinite(h)||h<=0?{state:"no-pid-file"}:l(h)?{state:"alive",pid:h}:{state:"dead",pid:h}}function l(a){try{return process.kill(a,0),!0}catch(a){if("EPERM"===a.code)return!0;return!1}}class m{constructor(a){this.kind="fallback",this.pidsDir=(0,g.gB)(a.coodraHome),this.spawnFn=a.spawn??h.spawn}async isAvailable(){return!0}async install(a){await (0,j.mkdir)(this.pidsDir,{recursive:!0});let b={name:a.name,command:a.command,args:[...a.args],env:{...a.env},...void 0!==a.workingDir?{workingDir:a.workingDir}:{},...void 0!==a.stdoutPath?{stdoutPath:a.stdoutPath}:{},...void 0!==a.stderrPath?{stderrPath:a.stderrPath}:{}};await (0,j.writeFile)(this.unitPath(a.name),JSON.stringify(b,null,2),"utf8")}async uninstall(a){await this.stop(a),await this.tryUnlink(this.unitPath(a)),await this.tryUnlink(this.pidPath(a))}async start(a){"running"===(await this.status(a)).state&&await this.stop(a);let b=await this.readUnit(a);if(null===b)throw Error(`fallback daemon: no unit installed at ${this.unitPath(a)}`);let c="ignore",d="ignore";void 0!==b.stdoutPath&&(await (0,j.mkdir)((0,e.dirname)(b.stdoutPath),{recursive:!0}),c=(0,i.openSync)(b.stdoutPath,"a")),void 0!==b.stderrPath&&(await (0,j.mkdir)((0,e.dirname)(b.stderrPath),{recursive:!0}),d=(0,i.openSync)(b.stderrPath,"a"));let f=this.spawnFn(b.command,[...b.args],{env:{...process.env,...b.env},cwd:b.workingDir,detached:!0,stdio:["ignore",c,d]});if(void 0===f.pid)throw Error(`fallback daemon: spawn failed for unit ${a}`);f.unref(),await (0,j.writeFile)(this.pidPath(a),`${f.pid}
|
|
3
3
|
`,"utf8")}async stop(a){let b=await this.readPid(a);if(null!==b){try{process.kill(b,"SIGTERM")}catch(a){if("ESRCH"!==a.code)throw a}await this.tryUnlink(this.pidPath(a))}}async status(a){let b=await this.readPid(a);return null===b?{name:a,state:"stopped"}:l(b)?{name:a,state:"running",pid:b}:(await this.tryUnlink(this.pidPath(a)),{name:a,state:"stopped",detail:"stale PID file removed"})}async list(){let a;try{a=await (0,j.readdir)(this.pidsDir)}catch{return[]}return Promise.all(a.filter(a=>a.endsWith(".unit.json")).map(a=>a.replace(/\.unit\.json$/,"")).map(a=>this.status(a)))}async readPid(a){try{let b=await (0,j.readFile)(this.pidPath(a),"utf8"),c=Number.parseInt(b.trim(),10);if(Number.isFinite(c)&&c>0)return c;return null}catch{return null}}async readUnit(a){try{let b=await (0,j.readFile)(this.unitPath(a),"utf8");return JSON.parse(b)}catch{return null}}async tryUnlink(a){try{await (0,j.unlink)(a)}catch{}}unitPath(a){return(0,e.join)(this.pidsDir,`${a}.unit.json`)}pidPath(a){return(0,e.join)(this.pidsDir,`${a}.pid`)}}var n=c(48161),o=c(45895);let p="com.coodra.";class q{constructor(a={}){this.kind="launchd";let b=a.homeDir??(0,n.homedir)();this.agentsDir=(0,e.join)(b,"Library","LaunchAgents"),this.run=a.execa??o.Ho}async isAvailable(){try{let a=await this.run("launchctl",["version"],{reject:!1,timeout:1500});return 0===a.exitCode}catch{return!1}}async install(a){await (0,j.mkdir)(this.agentsDir,{recursive:!0});let b=function(a){let b=[a.command,...a.args].map(r),c=Object.entries(a.env).map(([a,b])=>` <key>${r(a)}</key>
|
|
4
|
-
<string>${r(b)}</string>`).join("\n");return['<?xml version="1.0" encoding="UTF-8"?>','<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">','<plist version="1.0">',"<dict>",` <key>Label</key><string>${p}${r(a.name)}</string>`," <key>ProgramArguments</key>"," <array>",...b.map(a=>` <string>${a}</string>`)," </array>"," <key>RunAtLoad</key><true/>"," <key>KeepAlive</key><true/>",...c.length>0?[" <key>EnvironmentVariables</key>"," <dict>",c," </dict>"]:[],...void 0!==a.workingDir?[` <key>WorkingDirectory</key><string>${r(a.workingDir)}</string>`]:[],...void 0!==a.stdoutPath?[` <key>StandardOutPath</key><string>${r(a.stdoutPath)}</string>`]:[],...void 0!==a.stderrPath?[` <key>StandardErrorPath</key><string>${r(a.stderrPath)}</string>`]:[],"</dict>","</plist>",""].join("\n")}(a);await (0,j.writeFile)(this.plistPath(a.name),b,"utf8")}async uninstall(a){await this.stop(a);try{await (0,j.unlink)(this.plistPath(a))}catch{}}async start(a){let b=`gui/${process.getuid?.()??0}`,c=`${b}/${this.label(a)}`;await this.run("launchctl",["bootout",c],{reject:!1,timeout:5e3}),await this.run("launchctl",["bootstrap",b,this.plistPath(a)],{reject:!1,timeout:5e3})}async stop(a){let b=`gui/${process.getuid?.()??0}/${this.label(a)}`;await this.run("launchctl",["bootout",b],{reject:!1,timeout:5e3})}async status(a){let b=await this.run("launchctl",["print",`gui/${process.getuid?.()??0}/${this.label(a)}`],{reject:!1,timeout:3e3}),c=String(b.stdout??"");if(0!==(b.exitCode??1))return{name:a,state:"stopped"};let d=/pid\s*=\s*(\d+)/.exec(c);return null!==d&&void 0!==d[1]?{name:a,state:"running",pid:Number.parseInt(d[1],10)}:{name:a,state:"unknown",detail:c.slice(0,200)}}async list(){let a;try{a=await (0,j.readdir)(this.agentsDir)}catch{return[]}return Promise.all(a.filter(a=>a.startsWith(p)&&a.endsWith(".plist")).map(a=>a.replace(p,"").replace(/\.plist$/,"")).map(a=>this.status(a)))}plistPath(a){return(0,e.join)(this.agentsDir,`${this.label(a)}.plist`)}label(a){return`${p}${a}`}}function r(a){return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}let s="coodra-";class t{constructor(a={}){this.kind="systemd";let b=a.homeDir??(0,n.homedir)();this.unitsDir=(0,e.join)(b,".config","systemd","user"),this.run=a.execa??o.Ho}async isAvailable(){try{let a=await this.run("systemctl",["--user","--version"],{reject:!1,timeout:1500});return 0===a.exitCode}catch{return!1}}async install(a){await (0,j.mkdir)(this.unitsDir,{recursive:!0});let b=function(a){let b=Object.entries(a.env).map(([a,b])=>(function(a,b){let c=b.replace(/\r?\n/g," ").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/%/g,"%%");return`Environment="${a}=${c}"`})(a,b));return["[Unit]",`Description=Coodra managed unit (${a.name})`,"After=default.target","","[Service]","Type=simple",`ExecStart=${a.command} ${a.args.map(u).join(" ")}`,"Restart=on-failure","RestartSec=2",...void 0!==a.workingDir?[`WorkingDirectory=${a.workingDir}`]:[],...void 0!==a.stdoutPath?[`StandardOutput=append:${a.stdoutPath}`]:[],...void 0!==a.stderrPath?[`StandardError=append:${a.stderrPath}`]:[],...b,"","[Install]","WantedBy=default.target",""].join("\n")}(a);await (0,j.writeFile)(this.unitPath(a.name),b,"utf8"),await this.run("systemctl",["--user","daemon-reload"],{reject:!1,timeout:3e3}),await this.run("systemctl",["--user","reset-failed",this.unitName(a.name)],{reject:!1,timeout:3e3})}async uninstall(a){await this.stop(a);try{await (0,j.unlink)(this.unitPath(a)),await this.run("systemctl",["--user","daemon-reload"],{reject:!1,timeout:3e3})}catch{}}async start(a){await this.run("systemctl",["--user","restart",this.unitName(a)],{reject:!1,timeout:5e3})}async stop(a){await this.run("systemctl",["--user","stop",this.unitName(a)],{reject:!1,timeout:5e3})}async status(a){let b=String((await this.run("systemctl",["--user","show",this.unitName(a),"--property=ActiveState,MainPID"],{reject:!1,timeout:3e3})).stdout??""),c=/ActiveState=(\S+)/.exec(b)?.[1]??"unknown",d=/MainPID=(\d+)/.exec(b)?.[1];if("active"===c){let b=void 0!==d?Number.parseInt(d,10):void 0;return{name:a,state:"running",...void 0!==b&&b>0?{pid:b}:{}}}return"inactive"===c||"failed"===c?{name:a,state:"stopped",detail:c}:{name:a,state:"unknown",detail:c}}async list(){let a;try{a=await (0,j.readdir)(this.unitsDir)}catch{return[]}return Promise.all(a.filter(a=>a.startsWith(s)&&a.endsWith(".service")).map(a=>a.replace(s,"").replace(/\.service$/,"")).map(a=>this.status(a)))}unitPath(a){return(0,e.join)(this.unitsDir,this.unitName(a))}unitName(a){return`${s}${a}.service`}}function u(a){return/^[A-Za-z0-9_\-./=:]+$/.test(a)?a:`"${a.replace(/"/g,'\\"')}"`}async function v(a){let b=a.platform??process.platform;if("darwin"===b){let a=new q;if(await a.isAvailable())return a}else if("linux"===b){let a=new t;if(await a.isAvailable())return a}return new m({coodraHome:a.coodraHome})}var w=c(81126),x=c(60521);let y=[{kind:"http",name:"mcp-server",displayName:"Coodra MCP Server",port:3100,defaultPort:3100,relativeEntry:"apps/mcp-server/dist/index.js",healthUrl:a=>`http://127.0.0.1:${a}/healthz`},{kind:"http",name:"hooks-bridge",displayName:"Coodra Hooks Bridge",port:3101,defaultPort:3101,relativeEntry:"apps/hooks-bridge/dist/index.js",healthUrl:a=>`http://127.0.0.1:${a}/healthz`},{kind:"worker",name:"sync-daemon",displayName:"Coodra Sync Daemon",relativeEntry:"apps/sync-daemon/dist/index.js",requiresTeamMode:!0},{kind:"http",name:"web",displayName:"Coodra Web",port:3001,defaultPort:3001,relativeEntry:"apps/web-v2/.next/standalone/apps/web-v2/server.js",healthUrl:a=>`http://127.0.0.1:${a}/api/healthz`}];async function z(a){let b={...(0,w.h)(a.coodraHome,process.cwd()),...a.env},c=A(b.MCP_SERVER_PORT,3100),d=A(b.HOOKS_BRIDGE_PORT,3101),f=A(b.COODRA_WEB_PORT,3001),h=(0,g.xR)(a.coodraHome),i="team"===b.COODRA_MODE,j=[];for(let g of y){if("worker"===g.kind&&g.requiresTeamMode&&!i)continue;let k=null;"http"===g.kind&&("mcp-server"===g.name?k=c:"hooks-bridge"===g.name?k=d:"web"===g.name&&(k=f));let l=await (0,x.aw)(g.name),m=l.path,n=l.source,o=function(a){let b={COODRA_LOG_DESTINATION:"stderr",COODRA_HOME:a.coodraHome};if("bundled"===a.entrySource){let a=(0,x.Pd)("sqlite");null!==a&&(b.COODRA_MIGRATIONS_DIR=a.replace(/\/sqlite$/,"").replace(/\\sqlite$/,""))}let c=new Set(["LOCAL_HOOK_SECRET","DATABASE_URL"]),d=new Set(["COODRA_LOG_DESTINATION","COODRA_HOME","COODRA_MIGRATIONS_DIR","MCP_SERVER_PORT","MCP_SERVER_TRANSPORT","MCP_SERVER_HOST","HOOKS_BRIDGE_PORT","HOOKS_BRIDGE_HOST","PORT","HOSTNAME","NODE_ENV"]);for(let[e,f]of Object.entries(a.env))"string"==typeof f&&0!==f.length&&!d.has(e)&&(e.startsWith("COODRA_")||e.startsWith("CLERK_")||c.has(e))&&(b[e]=f);return"mcp-server"===a.name&&null!==a.port?(b.MCP_SERVER_PORT=String(a.port),b.MCP_SERVER_TRANSPORT="http",b.MCP_SERVER_HOST="127.0.0.1"):"hooks-bridge"===a.name&&null!==a.port?(b.HOOKS_BRIDGE_PORT=String(a.port),b.HOOKS_BRIDGE_HOST="127.0.0.1"):"web"===a.name&&null!==a.port&&(b.PORT=String(a.port),b.HOSTNAME="
|
|
4
|
+
<string>${r(b)}</string>`).join("\n");return['<?xml version="1.0" encoding="UTF-8"?>','<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">','<plist version="1.0">',"<dict>",` <key>Label</key><string>${p}${r(a.name)}</string>`," <key>ProgramArguments</key>"," <array>",...b.map(a=>` <string>${a}</string>`)," </array>"," <key>RunAtLoad</key><true/>"," <key>KeepAlive</key><true/>",...c.length>0?[" <key>EnvironmentVariables</key>"," <dict>",c," </dict>"]:[],...void 0!==a.workingDir?[` <key>WorkingDirectory</key><string>${r(a.workingDir)}</string>`]:[],...void 0!==a.stdoutPath?[` <key>StandardOutPath</key><string>${r(a.stdoutPath)}</string>`]:[],...void 0!==a.stderrPath?[` <key>StandardErrorPath</key><string>${r(a.stderrPath)}</string>`]:[],"</dict>","</plist>",""].join("\n")}(a);await (0,j.writeFile)(this.plistPath(a.name),b,"utf8")}async uninstall(a){await this.stop(a);try{await (0,j.unlink)(this.plistPath(a))}catch{}}async start(a){let b=`gui/${process.getuid?.()??0}`,c=`${b}/${this.label(a)}`;await this.run("launchctl",["bootout",c],{reject:!1,timeout:5e3}),await this.run("launchctl",["bootstrap",b,this.plistPath(a)],{reject:!1,timeout:5e3})}async stop(a){let b=`gui/${process.getuid?.()??0}/${this.label(a)}`;await this.run("launchctl",["bootout",b],{reject:!1,timeout:5e3})}async status(a){let b=await this.run("launchctl",["print",`gui/${process.getuid?.()??0}/${this.label(a)}`],{reject:!1,timeout:3e3}),c=String(b.stdout??"");if(0!==(b.exitCode??1))return{name:a,state:"stopped"};let d=/pid\s*=\s*(\d+)/.exec(c);return null!==d&&void 0!==d[1]?{name:a,state:"running",pid:Number.parseInt(d[1],10)}:{name:a,state:"unknown",detail:c.slice(0,200)}}async list(){let a;try{a=await (0,j.readdir)(this.agentsDir)}catch{return[]}return Promise.all(a.filter(a=>a.startsWith(p)&&a.endsWith(".plist")).map(a=>a.replace(p,"").replace(/\.plist$/,"")).map(a=>this.status(a)))}plistPath(a){return(0,e.join)(this.agentsDir,`${this.label(a)}.plist`)}label(a){return`${p}${a}`}}function r(a){return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}let s="coodra-";class t{constructor(a={}){this.kind="systemd";let b=a.homeDir??(0,n.homedir)();this.unitsDir=(0,e.join)(b,".config","systemd","user"),this.run=a.execa??o.Ho}async isAvailable(){try{let a=await this.run("systemctl",["--user","--version"],{reject:!1,timeout:1500});return 0===a.exitCode}catch{return!1}}async install(a){await (0,j.mkdir)(this.unitsDir,{recursive:!0});let b=function(a){let b=Object.entries(a.env).map(([a,b])=>(function(a,b){let c=b.replace(/\r?\n/g," ").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/%/g,"%%");return`Environment="${a}=${c}"`})(a,b));return["[Unit]",`Description=Coodra managed unit (${a.name})`,"After=default.target","","[Service]","Type=simple",`ExecStart=${a.command} ${a.args.map(u).join(" ")}`,"Restart=on-failure","RestartSec=2",...void 0!==a.workingDir?[`WorkingDirectory=${a.workingDir}`]:[],...void 0!==a.stdoutPath?[`StandardOutput=append:${a.stdoutPath}`]:[],...void 0!==a.stderrPath?[`StandardError=append:${a.stderrPath}`]:[],...b,"","[Install]","WantedBy=default.target",""].join("\n")}(a);await (0,j.writeFile)(this.unitPath(a.name),b,"utf8"),await this.run("systemctl",["--user","daemon-reload"],{reject:!1,timeout:3e3}),await this.run("systemctl",["--user","reset-failed",this.unitName(a.name)],{reject:!1,timeout:3e3})}async uninstall(a){await this.stop(a);try{await (0,j.unlink)(this.unitPath(a)),await this.run("systemctl",["--user","daemon-reload"],{reject:!1,timeout:3e3})}catch{}}async start(a){await this.run("systemctl",["--user","restart",this.unitName(a)],{reject:!1,timeout:5e3})}async stop(a){await this.run("systemctl",["--user","stop",this.unitName(a)],{reject:!1,timeout:5e3})}async status(a){let b=String((await this.run("systemctl",["--user","show",this.unitName(a),"--property=ActiveState,MainPID"],{reject:!1,timeout:3e3})).stdout??""),c=/ActiveState=(\S+)/.exec(b)?.[1]??"unknown",d=/MainPID=(\d+)/.exec(b)?.[1];if("active"===c){let b=void 0!==d?Number.parseInt(d,10):void 0;return{name:a,state:"running",...void 0!==b&&b>0?{pid:b}:{}}}return"inactive"===c||"failed"===c?{name:a,state:"stopped",detail:c}:{name:a,state:"unknown",detail:c}}async list(){let a;try{a=await (0,j.readdir)(this.unitsDir)}catch{return[]}return Promise.all(a.filter(a=>a.startsWith(s)&&a.endsWith(".service")).map(a=>a.replace(s,"").replace(/\.service$/,"")).map(a=>this.status(a)))}unitPath(a){return(0,e.join)(this.unitsDir,this.unitName(a))}unitName(a){return`${s}${a}.service`}}function u(a){return/^[A-Za-z0-9_\-./=:]+$/.test(a)?a:`"${a.replace(/"/g,'\\"')}"`}async function v(a){let b=a.platform??process.platform;if("darwin"===b){let a=new q;if(await a.isAvailable())return a}else if("linux"===b){let a=new t;if(await a.isAvailable())return a}return new m({coodraHome:a.coodraHome})}var w=c(81126),x=c(60521);let y=[{kind:"http",name:"mcp-server",displayName:"Coodra MCP Server",port:3100,defaultPort:3100,relativeEntry:"apps/mcp-server/dist/index.js",healthUrl:a=>`http://127.0.0.1:${a}/healthz`},{kind:"http",name:"hooks-bridge",displayName:"Coodra Hooks Bridge",port:3101,defaultPort:3101,relativeEntry:"apps/hooks-bridge/dist/index.js",healthUrl:a=>`http://127.0.0.1:${a}/healthz`},{kind:"worker",name:"sync-daemon",displayName:"Coodra Sync Daemon",relativeEntry:"apps/sync-daemon/dist/index.js",requiresTeamMode:!0},{kind:"http",name:"web",displayName:"Coodra Web",port:3001,defaultPort:3001,relativeEntry:"apps/web-v2/.next/standalone/apps/web-v2/server.js",healthUrl:a=>`http://127.0.0.1:${a}/api/healthz`}];async function z(a){let b={...(0,w.h)(a.coodraHome,process.cwd()),...a.env},c=A(b.MCP_SERVER_PORT,3100),d=A(b.HOOKS_BRIDGE_PORT,3101),f=A(b.COODRA_WEB_PORT,3001),h=(0,g.xR)(a.coodraHome),i="team"===b.COODRA_MODE,j=[];for(let g of y){if("worker"===g.kind&&g.requiresTeamMode&&!i)continue;let k=null;"http"===g.kind&&("mcp-server"===g.name?k=c:"hooks-bridge"===g.name?k=d:"web"===g.name&&(k=f));let l=await (0,x.aw)(g.name),m=l.path,n=l.source,o=function(a){let b={COODRA_LOG_DESTINATION:"stderr",COODRA_HOME:a.coodraHome};if("bundled"===a.entrySource){let a=(0,x.Pd)("sqlite");null!==a&&(b.COODRA_MIGRATIONS_DIR=a.replace(/\/sqlite$/,"").replace(/\\sqlite$/,""))}let c=new Set(["LOCAL_HOOK_SECRET","DATABASE_URL"]),d=new Set(["COODRA_LOG_DESTINATION","COODRA_HOME","COODRA_MIGRATIONS_DIR","MCP_SERVER_PORT","MCP_SERVER_TRANSPORT","MCP_SERVER_HOST","HOOKS_BRIDGE_PORT","HOOKS_BRIDGE_HOST","PORT","HOSTNAME","NODE_ENV"]);for(let[e,f]of Object.entries(a.env))"string"==typeof f&&0!==f.length&&!d.has(e)&&(e.startsWith("COODRA_")||e.startsWith("CLERK_")||c.has(e))&&(b[e]=f);return"mcp-server"===a.name&&null!==a.port?(b.MCP_SERVER_PORT=String(a.port),b.MCP_SERVER_TRANSPORT="http",b.MCP_SERVER_HOST="127.0.0.1"):"hooks-bridge"===a.name&&null!==a.port?(b.HOOKS_BRIDGE_PORT=String(a.port),b.HOOKS_BRIDGE_HOST="127.0.0.1"):"web"===a.name&&null!==a.port&&(b.PORT=String(a.port),b.HOSTNAME="::",b.NODE_ENV="production"),b}({env:b,coodraHome:a.coodraHome,port:k,name:g.name,entrySource:n}),p=(0,e.join)(h,`${g.name}.log`),q=(0,e.join)(h,`${g.name}.log`),r=process.cwd(),s={name:g.name,command:process.execPath,args:[m],env:o,workingDir:r,stdoutPath:p,stderrPath:q};j.push({descriptor:g,entryPath:m,port:k,unit:s})}return j}function A(a,b){if("string"!=typeof a||0===a.length)return b;let c=Number.parseInt(a,10);return!Number.isFinite(c)||c<=0||c>65535?b:c}var B=c(58500),C=c(57975),D=c(81938);let E=(0,C.promisify)(h.execFile);async function F(){try{let{stdout:a}=await E("which",["cloudflared"]),b=a.trim();if(0===b.length||!(0,i.existsSync)(b))return null;return{path:b}}catch{return null}}async function G(a){let b,c=a.timeoutMs??6e4;(0,i.mkdirSync)((0,e.dirname)(a.logPath),{recursive:!0}),(0,i.writeFileSync)(a.logPath,"","utf8");let d=(0,i.openSync)(a.logPath,"a");try{b=(0,h.spawn)("cloudflared",["tunnel","--url",`http://127.0.0.1:${a.localPort}`,"--no-autoupdate"],{stdio:["ignore",d,d],detached:!0})}catch(a){throw Error(`cloudflared spawn failed: ${a.message}`)}let f=b.pid;if("number"!=typeof f)throw b.kill(),Error("cloudflared spawn returned no PID");b.unref();let g=/https?:\/\/[a-z0-9.-]+\.trycloudflare\.com\b/i,j=Date.now()+c;for(;Date.now()<j;){if(null!==b.exitCode){let c=(()=>{try{return(0,i.readFileSync)(a.logPath,"utf8").slice(-500)}catch{return"(no log)"}})();throw Error(`cloudflared exited before printing a tunnel URL (code=${b.exitCode}); log tail: ${c}`)}try{let b=(0,i.readFileSync)(a.logPath,"utf8").match(g);if(null!==b)return{url:b[0],pid:f,logPath:a.logPath}}catch{}await (0,B.setTimeout)(200)}try{process.kill(f,"SIGTERM")}catch{}let k=(()=>{try{return(0,i.readFileSync)(a.logPath,"utf8").slice(-500)}catch{return"(no log)"}})();throw Error(`cloudflared did not print a https://*.trycloudflare.com URL within ${c}ms; log tail: ${k}`)}function H(a){return(0,e.join)(a,"tunnel.json")}async function I(a){let b=a.timeoutMs??1e4,c=a.initialBackoffMs??100,d=a.maxBackoffMs??1e3,e=a.fetchImpl??fetch,f=Date.now()+b;for(;Date.now()<f;){try{let b=new AbortController,d=setTimeout(()=>b.abort(),Math.min(4*c,2e3)),f=await e(a.url,{signal:b.signal});if(clearTimeout(d),f.ok)return!0}catch{}await function(a){return new Promise(b=>setTimeout(b,a))}(c),c=Math.min(2*c,d)}return!1}var J=c(40370);let K={writeStdout:a=>{process.stdout.write(a)},writeStderr:a=>{process.stderr.write(a)},exit:a=>{process.exit(a)}};async function L(a={},b=K){let c,d=a.env??process.env;if(!0===a.foreground)return b.writeStderr(`${J.pc.yellow("coodra start --foreground")}: not implemented in 08a — for foreground debug use \`pnpm --filter @coodra/{mcp-server,hooks-bridge} dev\` directly per docs/DEVELOPMENT.md.
|
|
5
5
|
`),b.exit(f.ut);b.writeStdout(`${(0,J.kZ)("Start","launch Coodra daemons",{width:(0,J.JL)()})}
|
|
6
6
|
`);let e=(0,g.Ok)({...void 0!==a.home?{override:a.home}:{},env:d}),h={...(0,w.h)(e),...d};try{c=await z({coodraHome:e,env:h})}catch(a){return b.writeStderr(`${J.pc.red("coodra start")}: ${a.message}
|
|
7
7
|
`),b.exit(f.ut)}let i="team"===h.COODRA_MODE,j=h.DATABASE_URL,k=i&&("string"!=typeof j||0===j.trim().length);k&&b.writeStderr(`${J.pc.yellow("⚠")} ${J.pc.bold("COODRA_MODE=team")} but ${J.pc.bold("DATABASE_URL")} is not set in ${J.pc.cyan("~/.coodra/.env")}.
|
|
@@ -16,31 +16,36 @@ ${f}${k}`}function q(a,b={}){let c=b.keyWidth??22,d=b.indent??0,e=" ".repeat(d),
|
|
|
16
16
|
`),n=!0):b.writeStdout(`${J.pc.green("✓")} ${d.descriptor.displayName} started
|
|
17
17
|
`)}return n?(b.writeStderr(`${J.pc.red("Start failed.")} Run \`coodra doctor\` for diagnostics.
|
|
18
18
|
`),b.exit(f.TT)):(b.writeStdout(`${J.pc.green("All Coodra services running.")}
|
|
19
|
-
`),!0===a.tunnel&&await M({coodraHome:e,io:b}),b.exit(f.Ij))}async function M(a){let{io:b}=a;if(null===await F())return
|
|
19
|
+
`),!0===a.tunnel&&null!==await M({coodraHome:e,io:b})&&await N({coodraHome:e,manager:m,io:b}),b.exit(f.Ij))}async function M(a){let{io:b}=a;if(null===await F())return b.writeStdout(`
|
|
20
20
|
${J.pc.yellow("⚠")} ${J.pc.bold("--tunnel")} requested but ${J.pc.cyan("cloudflared")} is not on PATH.
|
|
21
21
|
Install it and re-run \`coodra start --tunnel\`:
|
|
22
22
|
macOS: ${J.pc.cyan("brew install cloudflared")}
|
|
23
23
|
Linux: ${J.pc.cyan("curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared")}
|
|
24
24
|
Local web is up on http://localhost:3001/; only public URL is missing.
|
|
25
|
-
`);b.writeStdout(`${J.pc.gray("Starting Cloudflare quick-tunnel …")}
|
|
26
|
-
`);let c=(0,e.join)((0,g.xR)(a.coodraHome),"cloudflared.log");try{let d=await G({localPort:3001,logPath:c})
|
|
25
|
+
`),null;b.writeStdout(`${J.pc.gray("Starting Cloudflare quick-tunnel …")}
|
|
26
|
+
`);let c=(0,e.join)((0,g.xR)(a.coodraHome),"cloudflared.log");try{let d=await G({localPort:3001,logPath:c});return!function(a,b){let c=(0,e.join)(a,".env");(0,D.gf)(c,"COODRA_PUBLIC_URL",b)}(a.coodraHome,d.url),!function(a,b){let c=H(a);(0,i.mkdirSync)((0,e.dirname)(c),{recursive:!0});let d=`${c}.tmp`;(0,i.writeFileSync)(d,`${JSON.stringify(b,null,2)}
|
|
27
27
|
`,"utf8"),(0,i.renameSync)(d,c)}(a.coodraHome,{pid:d.pid,url:d.url,startedAt:Date.now()}),b.writeStdout(`${J.pc.green("✓")} Public tunnel: ${J.pc.cyan(d.url)} → http://127.0.0.1:3001
|
|
28
28
|
Invite URLs now use this host. Quick-tunnels expire when \`${J.pc.cyan("coodra stop")}\` runs.
|
|
29
29
|
Log: ${J.pc.gray(d.logPath)}
|
|
30
|
-
`)}catch(a){b.writeStderr(`${J.pc.yellow("⚠")} Tunnel start failed: ${a.message}
|
|
30
|
+
`),d.url}catch(a){return b.writeStderr(`${J.pc.yellow("⚠")} Tunnel start failed: ${a.message}
|
|
31
31
|
Local web is still up on http://127.0.0.1:3001/.
|
|
32
|
-
`)
|
|
32
|
+
`),null}}async function N(a){let b,{coodraHome:c,manager:d,io:e}=a;e.writeStdout(`${J.pc.gray("Reloading web with tunnel URL in env …")}
|
|
33
|
+
`);let f=(0,w.h)(c,process.cwd()),g={...process.env,...f};try{b=await z({coodraHome:c,env:g})}catch(a){e.writeStderr(`${J.pc.yellow("⚠")} Web reload after tunnel skipped: ${a.message}
|
|
34
|
+
`);return}let h=b.find(a=>"web"===a.descriptor.name);if(void 0!==h)try{await d.stop("web"),await d.install(h.unit),await d.start("web"),"http"===h.descriptor.kind&&null!==h.port&&await I({url:h.descriptor.healthUrl(h.port),timeoutMs:3e4}),e.writeStdout(`${J.pc.green("✓")} Web reloaded; invite URLs + JWT iss + /install/<token>/cli.sh now use the tunnel host.
|
|
35
|
+
`)}catch(a){e.writeStderr(`${J.pc.yellow("⚠")} Web reload after tunnel failed: ${a.message}
|
|
36
|
+
Workaround: manually add COODRA_PUBLIC_URL to ~/Library/LaunchAgents/com.coodra.web.plist and launchctl bootout/bootstrap.
|
|
37
|
+
`)}}var O=c(35787),P=c(46146);let Q={writeStdout:a=>{process.stdout.write(a)},writeStderr:a=>{process.stderr.write(a)},exit:a=>{process.exit(a)}};async function R(a={},b=Q){let c=a.env??process.env,d=a.cwd??process.cwd(),e=(0,g.Ok)({...void 0!==a.home?{override:a.home}:{},env:c}),h={...(0,w.h)(e,d),...c},i=a.fetchImpl??fetch,j=function(a,b){let c=(0,P.UO)({homeOverride:a}),d=c.mode,e=c.team?.clerkOrgSlug??null,f=c.team?.clerkOrgId??null,g="string"==typeof b.COODRA_MODE&&b.COODRA_MODE.length>0?b.COODRA_MODE:null;return{mode:d,orgSlug:e,orgId:f,shellModeValue:g,envDriftsFromConfig:null!==g&&g!==d}}(e,c),k=await S(d,e,h,j.mode),l=await T(h,i,e),m=await U(e,k.projectId),n={machine:j,project:k,services:l,recent:m,coodraHome:e};!0===a.json?b.writeStdout(`${JSON.stringify(n,null,2)}
|
|
33
38
|
`):b.writeStdout(function(a){let b,c=(0,J.JL)(),d=a.machine,e=a.project,f=[];f.push((0,J.kZ)("Status","project + service state",{width:c,indent:0})),f.push(""),f.push((0,J.S1)("01","machine",{width:c}));let g=[{key:"mode",value:d.mode,valueTone:"team"===d.mode?"blue":"inkDim"}];"team"===d.mode&&(null!==d.orgSlug||null!==d.orgId)&&g.push({key:"org",value:d.orgSlug??(null!==d.orgId?`${d.orgId.slice(0,12)}…`:"—")}),f.push((0,J.fJ)(g,{keyWidth:14,indent:2})),d.envDriftsFromConfig&&f.push(` ${(0,J.ry)(`shell $COODRA_MODE=${d.shellModeValue??""} disagrees with config.json (mode=${d.mode}) — \`unset COODRA_MODE\` to clear`)}`),f.push(""),f.push((0,J.S1)("02","project",{width:c})),b=e.registered?"team"===e.mode?`syncs to ${null!==e.orgId?`${e.orgId.slice(0,16)}…`:"team org"}`:"local-only — `coodra project promote` to share":"cwd not yet registered — run `coodra init`";let h=[{glyph:(0,J.tZ)(null!==e.slug?"ok":"warn"),key:"slug",value:e.slug??"(unregistered)",valueTone:null===e.slug?"amber":"ink"},{key:"cwd",value:e.cwd},{key:"mode",value:e.mode,meta:b},{glyph:(0,J.tZ)(e.registered?"ok":"warn"),key:"registered",value:e.registered?"yes":"no"}];for(let a of(f.push((0,J.fJ)(h,{keyWidth:14,indent:2})),e.notes))f.push(` ${(0,J.ry)(a)}`);for(let b of(f.push(""),f.push((0,J.S1)("03","services",{width:c})),a.services)){let a="running"===b.state?"ok":"stopped"===b.state?"fail":"warn";f.push((0,J.I9)({glyph:(0,J.tZ)(a),key:b.displayName,value:b.state,valueTone:"running"===b.state?"phosphor":"stopped"===b.state?"crimson":"amber",meta:null!==b.port?`:${b.port} ${b.url}`:"(worker)"},{keyWidth:26,indent:2}))}f.push(""),f.push((0,J.S1)("04","recent",{width:c}));let i=[];if(null!==a.recent.lastRun){let b=a.recent.lastRun;i.push({key:"last run",value:b.startedAt,meta:`status=${b.status} \xb7 agent=${b.agentType}`})}else i.push({key:"last run",value:"(none)",valueTone:"inkFar"});if(null!==a.recent.lastDecision){let b=a.recent.lastDecision;i.push({key:"last decision",value:`"${b.description.slice(0,60)}"`,meta:b.createdAt})}else i.push({key:"last decision",value:"(none)",valueTone:"inkFar"});return f.push((0,J.fJ)(i,{keyWidth:16,indent:2})),null!==a.recent.blockerNote?f.push((0,J.I9)({glyph:(0,J.tZ)("warn"),key:"pending blocker",value:a.recent.blockerNote,valueTone:"amber"},{keyWidth:16,indent:2})):f.push((0,J.I9)({glyph:(0,J.tZ)("ok"),key:"pending blocker",value:"context_memory/blockers.md is empty"},{keyWidth:16,indent:2})),f.push(""),f.push((0,J.ab)(" Run `coodra doctor` for the full diagnostic.")),`${f.join("\n")}
|
|
34
|
-
`}(n));let o=function(a){if(a.services.every(a=>"stopped"===a.state))return f.Gi;let b=a.services.some(a=>"running"!==a.state),c=!a.project.registered&&null===a.project.slug;return b||c?f.ut:f.Ij}(n);return b.exit(o)}async function
|
|
39
|
+
`}(n));let o=function(a){if(a.services.every(a=>"stopped"===a.state))return f.Gi;let b=a.services.some(a=>"running"!==a.state),c=!a.project.registered&&null===a.project.slug;return b||c?f.ut:f.Ij}(n);return b.exit(o)}async function S(a,b,c,d){let f=(0,e.join)(a,".coodra.json"),g=[],h=null;try{let a=await (0,j.readFile)(f,"utf8"),b=JSON.parse(a);"string"==typeof b.projectSlug&&(h=b.projectSlug)}catch{g.push(".coodra.json missing — bridge will fall back to __global__ for this cwd")}let i=null,k=!1,l=null;if(null!==h)try{let a=(0,e.join)(b,"data.db"),c=await (0,O.u)(a);try{let a=c.raw.prepare("SELECT id, org_id FROM projects WHERE slug = ? LIMIT 1").get(h);void 0!==a&&(i=a.id,l=a.org_id,k=!0)}finally{c.close()}}catch{}let m=null===l||"__solo__"===l||"__global__"===l,n=k?m?"solo":"team":d;return{slug:h,registered:k,projectId:i,cwd:a,mode:n,orgId:l,notes:g}}async function T(a,b,c){let d=V(a.MCP_SERVER_PORT,3100),e=V(a.HOOKS_BRIDGE_PORT,3101),f=V(a.COODRA_WEB_PORT,3001),g="team"===a.COODRA_MODE,h=[];for(let a of y)if("worker"!==a.kind||!a.requiresTeamMode||g)if("http"===a.kind){let c="mcp-server"===a.name?d:"web"===a.name?f:e,g=a.healthUrl(c),i="stopped";try{let a=new AbortController,c=setTimeout(()=>a.abort(),1500),d=await b(g,{signal:a.signal});clearTimeout(c),i=d.ok?"running":"unknown"}catch{i="stopped"}h.push({name:a.name,displayName:a.displayName,kind:"http",state:i,port:c,url:g})}else{let b="stopped";try{let d=await v({coodraHome:c}),e=await d.status(a.name);b="running"===e.state?"running":"unknown"===e.state?"unknown":"stopped"}catch{let d=await k(c,a.name);b="alive"===d.state?"running":"dead"===d.state?"unknown":"stopped"}h.push({name:a.name,displayName:a.displayName,kind:"worker",state:b,port:null,url:""})}return h}async function U(a,b){let c,d=(0,e.join)(a,"data.db"),f=!0;try{await (0,j.access)(d)}catch{f=!1}if(!f)return{lastRun:null,lastDecision:null,blockerNote:null};try{c=await (0,O.u)(d)}catch{return{lastRun:null,lastDecision:null,blockerNote:null}}try{let a=(()=>{try{let a=c.raw.prepare(`SELECT id, status, started_at, agent_type FROM runs ${null!==b?"WHERE project_id = ?":""} ORDER BY started_at DESC LIMIT 1`).get(...null!==b?[b]:[]);if(void 0===a)return null;return{id:a.id,status:a.status,startedAt:new Date(1e3*a.started_at).toISOString(),agentType:a.agent_type}}catch{return null}})(),d=(()=>{try{let a=c.raw.prepare(null!==b?`SELECT d.description, d.created_at FROM decisions d
|
|
35
40
|
JOIN runs r ON r.id = d.run_id
|
|
36
41
|
WHERE r.project_id = ?
|
|
37
|
-
ORDER BY d.created_at DESC LIMIT 1`:"SELECT description, created_at FROM decisions ORDER BY created_at DESC LIMIT 1").get(...null!==b?[b]:[]);if(void 0===a)return null;return{description:a.description,createdAt:new Date(1e3*a.created_at).toISOString()}}catch{return null}})(),f=null;try{let a=(0,e.join)(process.cwd(),"context_memory","blockers.md");if((await (0,j.stat)(a)).size>0){let b=await (0,j.readFile)(a,"utf8");b.trim().length>0&&(f=`${b.trim().slice(0,80)}…`)}}catch{}return{lastRun:a,lastDecision:d,blockerNote:f}}finally{c.close()}}function
|
|
42
|
+
ORDER BY d.created_at DESC LIMIT 1`:"SELECT description, created_at FROM decisions ORDER BY created_at DESC LIMIT 1").get(...null!==b?[b]:[]);if(void 0===a)return null;return{description:a.description,createdAt:new Date(1e3*a.created_at).toISOString()}}catch{return null}})(),f=null;try{let a=(0,e.join)(process.cwd(),"context_memory","blockers.md");if((await (0,j.stat)(a)).size>0){let b=await (0,j.readFile)(a,"utf8");b.trim().length>0&&(f=`${b.trim().slice(0,80)}…`)}}catch{}return{lastRun:a,lastDecision:d,blockerNote:f}}finally{c.close()}}function V(a,b){if("string"!=typeof a||0===a.length)return b;let c=Number.parseInt(a,10);return!Number.isFinite(c)||c<=0||c>65535?b:c}let W={writeStdout:a=>{process.stdout.write(a)},writeStderr:a=>{process.stderr.write(a)},exit:a=>{process.exit(a)}};async function X(a={},b=W){b.writeStdout(`${(0,J.kZ)("Stop","halt Coodra daemons",{width:(0,J.JL)()})}
|
|
38
43
|
`);let c=a.env??process.env,d=(0,g.Ok)({...void 0!==a.home?{override:a.home}:{},env:c}),h=await v({coodraHome:d}),j=a.service,k=void 0===j?y.map(a=>a.name):y.map(a=>a.name).filter(a=>a===j);if(0===k.length)return b.writeStderr(`${J.pc.red("coodra stop")}: unknown service '${j}'.
|
|
39
44
|
`),b.exit(f.Ij);for(let c of k)try{await h.stop(c),!0===a.uninstall&&await h.uninstall(c),b.writeStdout(`${J.pc.green("✓")} Stopped ${c}
|
|
40
45
|
`)}catch(a){b.writeStderr(`${J.pc.yellow("⚠")} ${c} stop reported: ${a.message}
|
|
41
46
|
`)}if(void 0===j){let a=function(a){let b,c=function(a){let b=H(a);if(!(0,i.existsSync)(b))return null;try{let a=JSON.parse((0,i.readFileSync)(b,"utf8"));if("number"!=typeof a.pid||"string"!=typeof a.url)return null;return a}catch{return null}}(a);if(null===c)return{stopped:!1,pid:null};let d=!1;try{process.kill(c.pid,"SIGTERM"),d=!0}catch(a){b=a.message}let e=H(a);if((0,i.existsSync)(e))try{(0,i.unlinkSync)(e)}catch{}return void 0===b?{stopped:d,pid:c.pid}:{stopped:d,pid:c.pid,err:b}}(d);a.stopped?b.writeStdout(`${J.pc.green("✓")} Stopped cloudflared tunnel (pid ${a.pid})
|
|
42
47
|
`):null!==a.pid&&b.writeStdout(`${J.pc.gray("\xb7")} cloudflared tunnel pid ${a.pid} already gone; cleaned up state
|
|
43
|
-
`);let c=(0,e.join)(d,".env");(0,D.VZ)(c,"COODRA_PUBLIC_URL")}return b.exit(f.Ij)}class
|
|
44
|
-
Looked in bundled paths (relative to the @coodra/cli install) and in the monorepo at apps/${a}/dist/index.js. If you are developing in the monorepo, run \`pnpm --filter @coodra/cli build\` to produce the bundle, or \`pnpm --filter @coodra/`+a+" build` to produce the dev dist.");throw g.code="COODRA_RUNTIME_BINARY_NOT_FOUND",g}},
|
|
48
|
+
`);let c=(0,e.join)(d,".env");(0,D.VZ)(c,"COODRA_PUBLIC_URL")}return b.exit(f.Ij)}class Y extends Error{constructor(a){super(`services exit ${a}`),this.code=a,this.name="ExitSentinel"}}function Z(){let a=[],b=[];return{io:{writeStdout:b=>{a.push(b)},writeStderr:a=>{b.push(a)},exit:a=>{throw new Y(a)}},stdout:a,stderr:b}}let $=/\x1b\[[0-9;]*[a-zA-Z]/g;function _(a){return a.replace($,"")}async function aa(a={}){let b=Z(),c={foreground:!1,...void 0!==a.mcp?{mcp:a.mcp}:{},...void 0!==a.hooks?{hooks:a.hooks}:{},...void 0!==a.sync?{sync:a.sync}:{},...void 0!==a.waitTimeoutMs?{waitTimeoutMs:a.waitTimeoutMs}:{}},d=0;try{await L(c,b.io)}catch(a){a instanceof Y?d=a.code:(b.stderr.push(a.message),d=1)}let e=_(b.stdout.join("")),f=_(b.stderr.join(""));return 0===d?{ok:!0,stdout:e,stderr:f}:{ok:!1,error:70===d?"startup_failed":"unknown_failure",howToFix:f.split("\n").slice(0,3).join(" ").slice(0,240)||"Service start failed; check ~/.coodra/logs/.",exitCode:d,stdout:e,stderr:f}}async function ab(a={}){let b=Z(),c={...void 0!==a.service?{service:a.service}:{}},d=0;try{await X(c,b.io)}catch(a){a instanceof Y?d=a.code:(b.stderr.push(a.message),d=1)}let e=_(b.stdout.join("")),f=_(b.stderr.join(""));return 0===d?{ok:!0,stdout:e,stderr:f}:{ok:!1,error:"unknown_failure",howToFix:f.split("\n").slice(0,3).join(" ").slice(0,240)||"Service stop failed; check ~/.coodra/logs/.",exitCode:d,stdout:e,stderr:f}}async function ac(){let a=Z(),b=0;try{await R({json:!0},a.io)}catch(c){c instanceof Y?b=c.code:(a.stderr.push(c.message),b=1)}let c=_(a.stdout.join("")),d=_(a.stderr.join(""));if(b<=1){let a=[];try{let b=JSON.parse(c);Array.isArray(b.services)&&(a=b.services.map(a=>(function(a){if("object"!=typeof a||null===a)return{name:"?",status:"unknown",raw:JSON.stringify(a)};let b="string"==typeof a.name?a.name:"?",c="string"==typeof a.status?a.status:"unknown",d="number"==typeof a.pid?a.pid:void 0,e="number"==typeof a.port?a.port:void 0,f="string"==typeof a.health?a.health:void 0;return{name:b,status:c,...void 0!==d?{pid:d}:{},...void 0!==e?{port:e}:{},...void 0!==f?{health:f}:{},raw:JSON.stringify(a)}})(a)))}catch{}return{ok:!0,services:a,stdout:c,stderr:d,exitCode:b}}return{ok:!1,error:"status_failed",howToFix:d.split("\n").slice(0,3).join(" ").slice(0,240)||"Status check failed; check ~/.coodra/logs/.",stdout:c,stderr:d,exitCode:b}}var ad=c(34017),ae=c(80554),af=c(77829);let ag="/workspace";async function ah(a){(0,ae._o)("startServicesAction");let b="mcp"===a.get("only"),c="hooks"===a.get("only"),d=await aa({...b?{mcp:!0,hooks:!1}:{},...c?{hooks:!0,mcp:!1}:{}});d.ok||(0,ad.redirect)(`${ag}?error=${encodeURIComponent(d.error)}&errorMessage=${encodeURIComponent(d.howToFix)}`),(0,ad.redirect)(`${ag}?started=1`)}async function ai(a){(0,ae._o)("stopServicesAction");let b=a.get("service"),c=await ab("string"==typeof b&&("mcp-server"===b||"hooks-bridge"===b||"sync-daemon"===b)?{service:b}:{});c.ok||(0,ad.redirect)(`${ag}?error=${encodeURIComponent(c.error)}&errorMessage=${encodeURIComponent(c.howToFix)}`),(0,ad.redirect)(`${ag}?stopped=1`)}async function aj(){(0,ae._o)("refreshStatusAction"),(0,ad.redirect)(`${ag}?refreshed=${Date.now()}`)}async function ak(){return ac()}(0,af.D)([ah,ai,aj,ak]),(0,d.A)(ah,"40fddfa25fb7ce0478bd780d21836ec83f8e311689",null),(0,d.A)(ai,"40428d9616f282774be2df0136e9d4016d978a703b",null),(0,d.A)(aj,"00916480eb919672fdd17de845bb84240342ad2dd7",null),(0,d.A)(ak,"003d61628a725ad59e477db320f0ad341115f2c639",null)},56589:(a,b,c)=>{"use strict";c.d(b,{Gi:()=>f,Ij:()=>d,TT:()=>h,ut:()=>e,xV:()=>g});let d=0,e=1,f=2,g=3,h=4},59744:()=>{},60521:(a,b,c)=>{"use strict";c.d(b,{Pd:()=>k,aw:()=>l});var d=c(73024),e=c(76760),f=c(73136),g=c(51455);async function h(a){let b=(0,e.resolve)(a);for(let a=0;a<12;a++){try{return await (0,g.access)((0,e.join)(b,"pnpm-workspace.yaml")),b}catch{}let a=(0,e.dirname)(b);if(a===b)break;b=a}return null}let i=(0,e.dirname)((0,f.fileURLToPath)("file:///Users/abishaikc/Coodra/packages/cli/dist/lib/runtime-paths.js")),j="apps/web-v2/server.js";function k(a){for(let b of[(0,e.resolve)(i,"runtime","drizzle",a),(0,e.resolve)(i,"..","runtime","drizzle",a),(0,e.resolve)(i,"..","..","runtime","drizzle",a),(0,e.resolve)(i,"..","..","dist","runtime","drizzle",a),(0,e.resolve)(i,"..","..","..","dist","runtime","drizzle",a)])if((0,d.existsSync)(b))return b;return null}async function l(a,b={}){for(let b of function(a){let b="web"===a?j:`${a}/index.js`;return"web"===a?[(0,e.resolve)(i,"runtime","web",j),(0,e.resolve)(i,"..","runtime","web",j),(0,e.resolve)(i,"..","..","runtime","web",j),(0,e.resolve)(i,"..","..","dist","runtime","web",j),(0,e.resolve)(i,"..","..","..","dist","runtime","web",j)]:[(0,e.resolve)(i,"runtime",b),(0,e.resolve)(i,"..","runtime",b),(0,e.resolve)(i,"..","..","runtime",b),(0,e.resolve)(i,"..","..","dist","runtime",b),(0,e.resolve)(i,"..","..","..","dist","runtime",b)]}(a))if((0,d.existsSync)(b))return{path:b,source:"bundled"};let c=b.cwd??process.cwd(),f=await h(i)??await h(c);if(null!==f){let b="web"===a?(0,e.resolve)(f,"apps","web-v2",".next","standalone",j):(0,e.resolve)(f,"apps",a,"dist","index.js");if((0,d.existsSync)(b))return{path:b,source:"monorepo"}}let g=Error(`Cannot resolve @coodra/${a} runtime binary.
|
|
49
|
+
Looked in bundled paths (relative to the @coodra/cli install) and in the monorepo at apps/${a}/dist/index.js. If you are developing in the monorepo, run \`pnpm --filter @coodra/cli build\` to produce the bundle, or \`pnpm --filter @coodra/`+a+" build` to produce the dev dist.");throw g.code="COODRA_RUNTIME_BINARY_NOT_FOUND",g}},63585:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,28450,23)),Promise.resolve().then(c.t.bind(c,51645,23)),Promise.resolve().then(c.t.bind(c,20909,23)),Promise.resolve().then(c.t.bind(c,92612,23)),Promise.resolve().then(c.t.bind(c,64060,23)),Promise.resolve().then(c.t.bind(c,83840,23)),Promise.resolve().then(c.t.bind(c,12216,23)),Promise.resolve().then(c.t.bind(c,90657,23)),Promise.resolve().then(c.t.bind(c,53192,23))},66132:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,90919,23))},76629:(a,b,c)=>{"use strict";c.d(b,{A:()=>e});var d=c(4892);let e=(0,d.createServerReference)("7f2749d032f0afec62b21938650725da230c9ddb55",d.callServer,void 0,d.findSourceMapURL,"detectKeylessEnvDriftAction")},77716:(a,b,c)=>{"use strict";c.d(b,{b:()=>h});var d=c(18234),e=c(57345),f=c.n(e),g=c(44574);function h({crumbPrefix:a="coodra",crumb:b,primaryAction:c,showLocalStartButton:e}){let h=e??"team-hosted"!==process.env.COODRA_DEPLOYMENT;return(0,d.jsxs)("div",{className:"topbar",children:[(0,d.jsxs)("div",{className:"crumbs",children:[(0,d.jsx)("span",{children:a}),(0,d.jsx)("span",{children:"/"}),(0,d.jsx)("strong",{children:b})]}),(0,d.jsxs)("div",{className:"topbar__search","aria-hidden":"true",children:[(0,d.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"11",cy:"11",r:"7"}),(0,d.jsx)("line",{x1:"16.5",y1:"16.5",x2:"21",y2:"21"})]}),(0,d.jsx)("span",{children:"Search runs, packs, decisions…"}),(0,d.jsx)("span",{className:"topbar__search-key",children:"⌘K"})]}),(0,d.jsx)(f(),{href:"https://github.com/anthropics/claude-code",target:"_blank",rel:"noopener noreferrer",className:"topbar__btn",children:"Docs"}),void 0!==c?(0,d.jsx)(f(),{href:c.href,className:"topbar__btn topbar__btn--accent",children:c.label}):h?(0,d.jsx)("form",{action:g.tq,style:{display:"inline"},children:(0,d.jsx)("button",{className:"topbar__btn topbar__btn--accent",type:"submit",children:"coodra start"})}):null]})}},80554:(a,b,c)=>{"use strict";c.d(b,{Yn:()=>j,_$:()=>i,_o:()=>h});var d=c(23265),e=c(34017),f=c(14320),g=c(94404);function h(a){"team-hosted"===(0,g.resolveDeploymentMode)()&&(console.warn(`[action-guard] refused ${a} in team-hosted mode (local-only operation)`),(0,e.redirect)(`/forbidden?reason=local_only&action=${encodeURIComponent(a)}`))}function i(a){"local-solo"===(0,g.resolveDeploymentMode)()&&(console.warn(`[action-guard] refused ${a} in local-solo mode (team-only operation)`),(0,e.redirect)(`/forbidden?reason=team_only&action=${encodeURIComponent(a)}`))}async function j(a){let b=await (0,f.getActor)();try{return(0,d.cl)({userId:b.userId,orgId:b.orgId,role:b.role,source:b.source},a),b}catch{(0,e.redirect)(`/forbidden?reason=insufficient_role&needed=${encodeURIComponent(a)}&actor_role=${encodeURIComponent(b.role)}`)}}},81126:(a,b,c)=>{"use strict";c.d(b,{h:()=>h});var d=c(73024),e=c(76760),f=c(25893);let g=new Set(["COODRA_MODE","DATABASE_URL","LOCAL_HOOK_SECRET","COODRA_TEAM_ORG_ID","COODRA_TEAM_USER_ID","COODRA_TEAM_ORG_SLUG","CLERK_SECRET_KEY","CLERK_PUBLISHABLE_KEY"]);function h(a,b){let c=i((0,e.join)(a,".env")),d=void 0!==b?i((0,e.join)(b,".env")):{},f={...c,...d};for(let a of g)void 0!==c[a]&&(f[a]=c[a]);return f}function i(a){let b;try{b=(0,d.readFileSync)(a,"utf8")}catch{return{}}return(0,f.parse)(b)}},81938:(a,b,c)=>{"use strict";c.d(b,{$R:()=>k,VZ:()=>i,gf:()=>j});var d=c(77598),e=c(73024),f=c(76760),g=c(14820),h=c(46146);function i(a,b){let c;if(!(0,e.existsSync)(a))return;try{c=(0,e.readFileSync)(a,"utf8")}catch{return}let d=c.split("\n"),f=[],g=!1;for(let a of d){let c=a.trim();if(0===c.length||c.startsWith("#")){f.push(a);continue}let d=c.indexOf("=");if((d>0?c.slice(0,d).trim():"")===b){g=!0;continue}f.push(a)}if(!g)return;for(;f.length>0&&""===f[f.length-1];)f.pop();let h=`${a}.tmp`;(0,e.writeFileSync)(h,`${f.join("\n")}
|
|
45
50
|
`,"utf8"),(0,e.renameSync)(h,a)}function j(a,b,c){let d="";if((0,e.existsSync)(a))try{d=(0,e.readFileSync)(a,"utf8")}catch{d=""}let f=d.split("\n"),g=!1,h=[];for(let a of f){let d=a.trim();if(0===d.length||d.startsWith("#")){h.push(a);continue}let e=d.indexOf("=");(e>0?d.slice(0,e).trim():"")===b?(h.push(`${b}=${c}`),g=!0):h.push(a)}for(g||(h.length>0&&""!==h[h.length-1]&&h.push(""),h.push(`${b}=${c}`));h.length>0&&""===h[h.length-1];)h.pop();(0,e.mkdirSync)(a.substring(0,a.lastIndexOf("/")),{recursive:!0});let i=`${a}.tmp`;(0,e.writeFileSync)(i,`${h.join("\n")}
|
|
46
|
-
`,"utf8"),(0,e.renameSync)(i,a)}function k(a){let b=void 0!==a.localHookSecret&&a.localHookSecret.length>0?a.localHookSecret:(0,d.randomBytes)(32).toString("hex"),c=Date.now();(0,h.Ji)({clerkUserId:a.clerkUserId,clerkOrgId:a.clerkOrgId,...null!==a.clerkOrgSlug?{clerkOrgSlug:a.clerkOrgSlug}:{},localHookSecret:b,joinedAt:c},void 0!==a.homeOverride?{homeOverride:a.homeOverride}:{}),(0,h.X3)({databaseUrl:a.databaseUrl,localHookSecret:b,clerkOrgId:a.clerkOrgId},void 0!==a.homeOverride?{homeOverride:a.homeOverride}:{});let i=void 0!==a.homeOverride?a.homeOverride:(0,g.Ok)(),k=(0,g.NR)(i),l=(0,f.join)(i,".env"),m=function(a){let b;if(!(0,e.existsSync)(a))return{inviteHmacSecret:null,clerkSecretKey:null,clerkPublishableKey:null};try{b=(0,e.readFileSync)(a,"utf8")}catch{return{inviteHmacSecret:null,clerkSecretKey:null,clerkPublishableKey:null}}let c=a=>{let c=b.match(RegExp(`^${a}=(\\S+)`,"m"));if(null===c||void 0===c[1])return null;let d=c[1];return(d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),d.length>0?d:null};return{inviteHmacSecret:c("COODRA_INVITE_HMAC_SECRET"),clerkSecretKey:c("CLERK_SECRET_KEY"),clerkPublishableKey:c("CLERK_PUBLISHABLE_KEY")}}(l),n=void 0!==a.inviteHmacSecret&&a.inviteHmacSecret.length>0?a.inviteHmacSecret:m.inviteHmacSecret??(0,d.randomBytes)(32).toString("hex");j(l,"COODRA_INVITE_HMAC_SECRET",n);let o=a.clerkSecretKey??m.clerkSecretKey;null!=o&&o.length>0&&j(l,"CLERK_SECRET_KEY",o);let p=a.clerkPublishableKey??m.clerkPublishableKey;return null!=p&&p.length>0&&j(l,"CLERK_PUBLISHABLE_KEY",p),{localHookSecret:b,inviteHmacSecret:n,configPath:k,envPath:l,joinedAt:c}}},90167:(a,b,c)=>{"use strict";c.d(b,{A:()=>e});var d=c(4892);let e=(0,d.createServerReference)("7faed4506b2df8e91f8679ba05c5a407da87bd8c2a",d.callServer,void 0,d.findSourceMapURL,"detectKeylessEnvDriftAction")},91706:(a,b,c)=>{"use strict";c.d(b,{Sidebar:()=>d});let d=(0,c(13522).registerClientReference)(function(){throw Error("Attempted to call Sidebar() from the server but Sidebar 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.")},"/Users/abishaikc/Coodra/apps/web-v2/components/Sidebar.tsx","Sidebar")},93184:(a,b,c)=>{"use strict";c.d(b,{Sidebar:()=>i});var d=c(25108),e=c(90919),f=c.n(e),g=c(90554);function h({size:a=28}){return(0,d.jsxs)("svg",{viewBox:"0 0 32 32",fill:"none",width:a,height:a,"aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"16",cy:"16",r:"14",stroke:"#7dd87d",strokeWidth:"1"}),(0,d.jsx)("circle",{cx:"16",cy:"16",r:"2.2",fill:"#7dd87d"}),(0,d.jsx)("line",{x1:"2",y1:"16",x2:"30",y2:"16",stroke:"#e8e6e1",strokeWidth:"0.6",strokeDasharray:"2 3"})]})}function i({mode:a,deploymentMode:b,userInitial:c="A",userName:e="abishaikc",userRole:i="Local \xb7 MIT",projects:y,orgSlug:z=null,viewerUserId:A=null,footerSlot:B}){let C=(0,g.usePathname)()??"/",D=(0,g.useSearchParams)();if(C.startsWith("/auth")||C.startsWith("/forbidden")||C.startsWith("/install"))return null;let E=/^\/projects\/([^/]+)/.exec(C),F=E?decodeURIComponent(E[1]??""):null,G=D?.get("project")??null,H=F??G,I=null!==H?y.find(a=>a.slug===H)??{slug:H,name:H}:{slug:"—",name:"All projects"},J=null!==H?`?project=${encodeURIComponent(H)}`:"",K="team-hosted"===b,L=[{href:"/settings/team",label:"Members + org",icon:(0,d.jsx)(u,{})}];K||L.push({href:"/sync",label:"Sync queue",icon:(0,d.jsx)(s,{})});let M=[];K||M.push({href:"/workspace",label:"Workspace",icon:(0,d.jsx)(r,{})}),M.push({href:"/settings",label:"Settings",icon:(0,d.jsx)(t,{})}),M.push({href:"/welcome",label:"Welcome",icon:(0,d.jsx)(w,{})});let N="team"===a?[{label:"Workspace",items:[{href:"/",label:"Dashboard",icon:(0,d.jsx)(j,{})},{href:"/projects",label:"Projects",icon:(0,d.jsx)(k,{})}]},{label:"Team",items:L},{label:"Audit",items:[{href:`/runs${J}`,label:"Runs",icon:(0,d.jsx)(l,{})},{href:`/decisions${J}`,label:"Decisions",icon:(0,d.jsx)(l,{})},{href:`/context-packs${J}`,label:"Context packs",icon:(0,d.jsx)(p,{})},{href:`/graph${J}`,label:"Context graph",icon:(0,d.jsx)(m,{})}]},{label:"Govern",items:[{href:`/policies${J}`,label:"Policies",icon:(0,d.jsx)(n,{})},{href:`/kill-switches${J}`,label:"Kill switches",icon:(0,d.jsx)(o,{})}]},{label:"Knowledge",items:[{href:"/packs",label:"Feature packs",icon:(0,d.jsx)(p,{})},{href:"/features",label:"Features",icon:(0,d.jsx)(l,{})},{href:"/templates",label:"Templates",icon:(0,d.jsx)(q,{})}]},{label:"System",items:M}]:[{label:"Workspace",items:[{href:"/",label:"Dashboard",icon:(0,d.jsx)(j,{})},{href:"/projects",label:"Projects",icon:(0,d.jsx)(k,{})}]},{label:"Audit",items:[{href:`/runs${J}`,label:"Runs",icon:(0,d.jsx)(l,{})},{href:`/decisions${J}`,label:"Decisions",icon:(0,d.jsx)(l,{})},{href:`/context-packs${J}`,label:"Context packs",icon:(0,d.jsx)(p,{})},{href:`/graph${J}`,label:"Context graph",icon:(0,d.jsx)(m,{})}]},{label:"Govern",items:[{href:`/policies${J}`,label:"Policies",icon:(0,d.jsx)(n,{})},{href:`/kill-switches${J}`,label:"Kill switches",icon:(0,d.jsx)(o,{})}]},{label:"Knowledge",items:[{href:"/packs",label:"Feature packs",icon:(0,d.jsx)(p,{})},{href:"/features",label:"Features",icon:(0,d.jsx)(l,{})},{href:"/templates",label:"Templates",icon:(0,d.jsx)(q,{})}]},{label:"System",items:[{href:"/workspace",label:"Workspace",icon:(0,d.jsx)(r,{})},{href:"/settings",label:"Settings",icon:(0,d.jsx)(t,{})}]},{label:"Upgrade",items:[{href:"/welcome",label:"About modes",icon:(0,d.jsx)(v,{})},{href:"/onboarding/team",label:"Create a team",icon:(0,d.jsx)(u,{})},{href:"/onboarding/team/join",label:"Connect to existing",icon:(0,d.jsx)(x,{})}]}];return(0,d.jsxs)("aside",{className:"side",children:[(0,d.jsxs)("div",{className:"side__brand",children:[(0,d.jsx)(h,{}),(0,d.jsx)("span",{className:"side__brand-word",children:"Coodra"}),(0,d.jsx)("span",{className:"side__brand-mode",style:"team"===a?void 0:{color:"var(--ink-mute)",borderColor:"var(--rule-strong)"},children:a})]}),(0,d.jsxs)(f(),{href:"team"===a?"/settings/team":"/welcome",style:{display:"block",padding:"14px 24px 16px",borderBottom:"1px solid var(--rule)",textDecoration:"none",background:"team"===a?"rgba(125, 216, 125, 0.04)":"transparent"},children:[(0,d.jsx)("div",{style:{fontFamily:"var(--mono)",fontSize:9,letterSpacing:"0.22em",textTransform:"uppercase",color:"team"===a?"var(--accent)":"var(--ink-mute)",marginBottom:6},children:"team"===a?"● Team workspace":"Solo workspace"}),(0,d.jsx)("div",{style:{fontFamily:"var(--serif)",fontSize:18,fontWeight:400,letterSpacing:"-0.005em",color:"var(--ink)",lineHeight:1.2},children:"team"===a&&null!==z?function(a,b){if(a.length<=24)return a;let c=Math.floor((b-1)/2);return`${a.slice(0,c)}…${a.slice(-c)}`}(z,24):"team"===a?"Cloud — org pending":"This machine"}),(0,d.jsx)("div",{style:{fontFamily:"var(--mono)",fontSize:9,letterSpacing:"0.06em",color:"var(--ink-mute)",marginTop:4},children:"team"===a?"syncing every 10 s \xb7 click for members":"~/.coodra/data.db \xb7 click to upgrade"})]}),(0,d.jsxs)("div",{className:"side__project",children:[(0,d.jsx)("div",{className:"side__eyebrow",children:"Project"}),(0,d.jsxs)("details",{className:"side__project-picker",style:{position:"relative"},children:[(0,d.jsxs)("summary",{className:"side__project-pill",style:{listStyle:"none",cursor:"pointer",textDecoration:"none"},title:"Click to switch project",children:[(0,d.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("path",{d:"M3 7l9-4 9 4-9 4-9-4z"}),(0,d.jsx)("path",{d:"M3 12l9 4 9-4"}),(0,d.jsx)("path",{d:"M3 17l9 4 9-4"})]}),(0,d.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,d.jsx)("div",{className:"side__project-name",children:I.name}),(0,d.jsx)("div",{className:"side__project-slug",children:I.slug})]}),(0,d.jsx)("svg",{className:"side__caret",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5","aria-hidden":"true",children:(0,d.jsx)("path",{d:"M8 9l4-4 4 4M8 15l4 4 4-4"})})]}),(0,d.jsxs)("div",{style:{position:"absolute",top:"100%",left:0,right:0,marginTop:6,background:"var(--bg)",border:"1px solid var(--rule-strong)",padding:"8px 0",maxHeight:320,overflowY:"auto",zIndex:50},children:[(0,d.jsx)(f(),{href:"/projects",style:{display:"block",padding:"8px 14px",textDecoration:"none",color:"var(--ink-mute)",fontFamily:"var(--mono)",fontSize:11,letterSpacing:"0.06em",borderBottom:"1px solid var(--rule)"},children:"← all projects"}),0===y.length?(0,d.jsxs)("div",{style:{padding:"12px 14px",fontFamily:"var(--mono)",fontSize:11,color:"var(--ink-mute)",letterSpacing:"0.04em"},children:["No projects yet. Run ",(0,d.jsx)("code",{children:"coodra init"}),"."]}):y.map(a=>{let b=a.slug===I.slug;return(0,d.jsxs)(f(),{href:`/projects/${encodeURIComponent(a.slug)}`,style:{display:"block",padding:"8px 14px",textDecoration:"none",background:b?"var(--bg-2)":"transparent",color:b?"var(--accent)":"var(--ink)",fontFamily:"var(--mono)",fontSize:12,letterSpacing:"0.04em"},children:[b?"● ":"○ ",a.slug]},a.slug)})]})]}),null!==H?(0,d.jsx)(f(),{href:"/projects",className:"side__project-slug",style:{display:"block",marginTop:8,textDecoration:"none",color:"var(--ink-mute)"},children:"← all projects"}):null]}),(0,d.jsx)("nav",{className:"side__nav",children:N.map(a=>(0,d.jsxs)("div",{className:"side__group",children:[(0,d.jsx)("div",{className:"side__group-label",children:a.label}),a.items.map(a=>{var b,c;let e=(b=C,"/"===(c=a.href)?"/"===b:b===c||b.startsWith(`${c}/`));return(0,d.jsxs)(f(),{href:a.href,className:`side__link${e?" is-active":""}`,children:[a.icon,a.label,void 0!==a.count?(0,d.jsx)("span",{className:"side__link-count",children:a.count}):null]},a.href)})]},a.label))}),(0,d.jsx)("div",{className:"side__foot",children:void 0!==B?B:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"side__avatar",children:c}),(0,d.jsxs)("div",{className:"side__user",children:[(0,d.jsx)("div",{className:"side__user-name",children:e}),(0,d.jsx)("div",{className:"side__user-role",children:i})]})]})})]})}function j(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("rect",{x:"3",y:"3",width:"7",height:"9"}),(0,d.jsx)("rect",{x:"14",y:"3",width:"7",height:"5"}),(0,d.jsx)("rect",{x:"14",y:"12",width:"7",height:"9"}),(0,d.jsx)("rect",{x:"3",y:"16",width:"7",height:"5"})]})}function k(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("path",{d:"M3 7l9-4 9 4-9 4-9-4z"}),(0,d.jsx)("path",{d:"M3 12l9 4 9-4"}),(0,d.jsx)("path",{d:"M3 17l9 4 9-4"})]})}function l(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("rect",{x:"3",y:"4",width:"18",height:"16"}),(0,d.jsx)("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),(0,d.jsx)("circle",{cx:"6.5",cy:"6.5",r:"0.6",fill:"currentColor"})]})}function m(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"6",cy:"6",r:"2.5"}),(0,d.jsx)("circle",{cx:"18",cy:"6",r:"2.5"}),(0,d.jsx)("circle",{cx:"12",cy:"18",r:"2.5"}),(0,d.jsx)("line",{x1:"8",y1:"7",x2:"16",y2:"7"}),(0,d.jsx)("line",{x1:"7",y1:"8",x2:"11",y2:"16"}),(0,d.jsx)("line",{x1:"17",y1:"8",x2:"13",y2:"16"})]})}function n(){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:(0,d.jsx)("path",{d:"M12 3l8 4v5c0 5-3.5 8.5-8 9-4.5-.5-8-4-8-9V7l8-4z"})})}function o(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"12",cy:"12",r:"9"}),(0,d.jsx)("line",{x1:"12",y1:"3",x2:"12",y2:"13"})]})}function p(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("path",{d:"M4 5h16v14H4z"}),(0,d.jsx)("line",{x1:"4",y1:"9",x2:"20",y2:"9"}),(0,d.jsx)("line",{x1:"9",y1:"5",x2:"9",y2:"19"})]})}function q(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("rect",{x:"3",y:"3",width:"8",height:"8"}),(0,d.jsx)("rect",{x:"13",y:"3",width:"8",height:"8"}),(0,d.jsx)("rect",{x:"3",y:"13",width:"8",height:"8"}),(0,d.jsx)("rect",{x:"13",y:"13",width:"8",height:"8"})]})}function r(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("rect",{x:"4",y:"6",width:"16",height:"12"}),(0,d.jsx)("line",{x1:"4",y1:"10",x2:"20",y2:"10"}),(0,d.jsx)("circle",{cx:"7",cy:"8",r:"0.6",fill:"currentColor"})]})}function s(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("path",{d:"M4 12a8 8 0 0114-5.3M20 12a8 8 0 01-14 5.3"}),(0,d.jsx)("path",{d:"M16 6h4V2M8 18H4v4"})]})}function t(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"12",cy:"12",r:"3"}),(0,d.jsx)("path",{d:"M19.4 15a1.7 1.7 0 00.3 1.8l.1.1a2 2 0 01-2.8 2.8l-.1-.1a1.7 1.7 0 00-1.8-.3 1.7 1.7 0 00-1 1.5V21a2 2 0 11-4 0v-.1a1.7 1.7 0 00-1.1-1.5 1.7 1.7 0 00-1.8.3l-.1.1a2 2 0 11-2.8-2.8l.1-.1a1.7 1.7 0 00.3-1.8 1.7 1.7 0 00-1.5-1H3a2 2 0 110-4h.1A1.7 1.7 0 004.5 9a1.7 1.7 0 00-.3-1.8l-.1-.1a2 2 0 012.8-2.8l.1.1a1.7 1.7 0 001.8.3H9a1.7 1.7 0 001-1.5V3a2 2 0 014 0v.1a1.7 1.7 0 001 1.5 1.7 1.7 0 001.8-.3l.1-.1a2 2 0 012.8 2.8l-.1.1a1.7 1.7 0 00-.3 1.8V9a1.7 1.7 0 001.5 1H21a2 2 0 110 4h-.1a1.7 1.7 0 00-1.5 1z"})]})}function u(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"9",cy:"8",r:"3.2"}),(0,d.jsx)("path",{d:"M3 19c0-3.5 2.7-6 6-6s6 2.5 6 6"}),(0,d.jsx)("circle",{cx:"17",cy:"9",r:"2.5"}),(0,d.jsx)("path",{d:"M21 19c0-2.6-1.7-4.5-4-5"})]})}function v(){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:(0,d.jsx)("path",{d:"M12 3l2.6 6 6.4.6-4.9 4.4 1.5 6.4L12 17l-5.6 3.4 1.5-6.4L3 9.6 9.4 9 12 3z"})})}function w(){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:(0,d.jsx)("path",{d:"M4 7h12l-3-3M20 17H8l3 3"})})}function x(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"8",cy:"14",r:"3.5"}),(0,d.jsx)("path",{d:"M11 14h10v4M17 14v4"})]})}},94393:(a,b,c)=>{Promise.resolve().then(c.bind(c,91706)),Promise.resolve().then(c.bind(c,15949)),Promise.resolve().then(c.bind(c,73820)),Promise.resolve().then(c.bind(c,77011)),Promise.resolve().then(c.bind(c,57946)),Promise.resolve().then(c.bind(c,26988)),Promise.resolve().then(c.bind(c,81874))}};
|
|
51
|
+
`,"utf8"),(0,e.renameSync)(i,a)}function k(a){let b=void 0!==a.localHookSecret&&a.localHookSecret.length>0?a.localHookSecret:(0,d.randomBytes)(32).toString("hex"),c=Date.now();(0,h.Ji)({clerkUserId:a.clerkUserId,clerkOrgId:a.clerkOrgId,...null!==a.clerkOrgSlug?{clerkOrgSlug:a.clerkOrgSlug}:{},localHookSecret:b,joinedAt:c},void 0!==a.homeOverride?{homeOverride:a.homeOverride}:{}),(0,h.X3)({databaseUrl:a.databaseUrl,localHookSecret:b,clerkOrgId:a.clerkOrgId},void 0!==a.homeOverride?{homeOverride:a.homeOverride}:{});let i=void 0!==a.homeOverride?a.homeOverride:(0,g.Ok)(),k=(0,g.NR)(i),l=(0,f.join)(i,".env"),m=function(a){let b;if(!(0,e.existsSync)(a))return{inviteHmacSecret:null,clerkSecretKey:null,clerkPublishableKey:null};try{b=(0,e.readFileSync)(a,"utf8")}catch{return{inviteHmacSecret:null,clerkSecretKey:null,clerkPublishableKey:null}}let c=a=>{let c=b.match(RegExp(`^${a}=(\\S+)`,"m"));if(null===c||void 0===c[1])return null;let d=c[1];return(d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),d.length>0?d:null};return{inviteHmacSecret:c("COODRA_INVITE_HMAC_SECRET"),clerkSecretKey:c("CLERK_SECRET_KEY"),clerkPublishableKey:c("CLERK_PUBLISHABLE_KEY")}}(l),n=void 0!==a.inviteHmacSecret&&a.inviteHmacSecret.length>0?a.inviteHmacSecret:m.inviteHmacSecret??(0,d.randomBytes)(32).toString("hex");j(l,"COODRA_INVITE_HMAC_SECRET",n);let o=a.clerkSecretKey??m.clerkSecretKey;null!=o&&o.length>0&&j(l,"CLERK_SECRET_KEY",o);let p=a.clerkPublishableKey??m.clerkPublishableKey;return null!=p&&p.length>0&&j(l,"CLERK_PUBLISHABLE_KEY",p),{localHookSecret:b,inviteHmacSecret:n,configPath:k,envPath:l,joinedAt:c}}},91706:(a,b,c)=>{"use strict";c.d(b,{Sidebar:()=>d});let d=(0,c(13522).registerClientReference)(function(){throw Error("Attempted to call Sidebar() from the server but Sidebar 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.")},"/Users/abishaikc/Coodra/apps/web-v2/components/Sidebar.tsx","Sidebar")},93184:(a,b,c)=>{"use strict";c.d(b,{Sidebar:()=>i});var d=c(25108),e=c(90919),f=c.n(e),g=c(90554);function h({size:a=28}){return(0,d.jsxs)("svg",{viewBox:"0 0 32 32",fill:"none",width:a,height:a,"aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"16",cy:"16",r:"14",stroke:"#7dd87d",strokeWidth:"1"}),(0,d.jsx)("circle",{cx:"16",cy:"16",r:"2.2",fill:"#7dd87d"}),(0,d.jsx)("line",{x1:"2",y1:"16",x2:"30",y2:"16",stroke:"#e8e6e1",strokeWidth:"0.6",strokeDasharray:"2 3"})]})}function i({mode:a,deploymentMode:b,userInitial:c="A",userName:e="abishaikc",userRole:i="Local \xb7 MIT",projects:y,orgSlug:z=null,viewerUserId:A=null,footerSlot:B}){let C=(0,g.usePathname)()??"/",D=(0,g.useSearchParams)();if(C.startsWith("/auth")||C.startsWith("/forbidden")||C.startsWith("/install"))return null;let E=/^\/projects\/([^/]+)/.exec(C),F=E?decodeURIComponent(E[1]??""):null,G=D?.get("project")??null,H=F??G,I=null!==H?y.find(a=>a.slug===H)??{slug:H,name:H}:{slug:"—",name:"All projects"},J=null!==H?`?project=${encodeURIComponent(H)}`:"",K="team-hosted"===b,L=[{href:"/settings/team",label:"Members + org",icon:(0,d.jsx)(u,{})}];K||L.push({href:"/sync",label:"Sync queue",icon:(0,d.jsx)(s,{})});let M=[];K||M.push({href:"/workspace",label:"Workspace",icon:(0,d.jsx)(r,{})}),M.push({href:"/settings",label:"Settings",icon:(0,d.jsx)(t,{})}),M.push({href:"/welcome",label:"Welcome",icon:(0,d.jsx)(w,{})});let N="team"===a?[{label:"Workspace",items:[{href:"/",label:"Dashboard",icon:(0,d.jsx)(j,{})},{href:"/projects",label:"Projects",icon:(0,d.jsx)(k,{})}]},{label:"Team",items:L},{label:"Audit",items:[{href:`/runs${J}`,label:"Runs",icon:(0,d.jsx)(l,{})},{href:`/decisions${J}`,label:"Decisions",icon:(0,d.jsx)(l,{})},{href:`/context-packs${J}`,label:"Context packs",icon:(0,d.jsx)(p,{})},{href:`/graph${J}`,label:"Context graph",icon:(0,d.jsx)(m,{})}]},{label:"Govern",items:[{href:`/policies${J}`,label:"Policies",icon:(0,d.jsx)(n,{})},{href:`/kill-switches${J}`,label:"Kill switches",icon:(0,d.jsx)(o,{})}]},{label:"Knowledge",items:[{href:"/packs",label:"Feature packs",icon:(0,d.jsx)(p,{})},{href:"/features",label:"Features",icon:(0,d.jsx)(l,{})},{href:"/templates",label:"Templates",icon:(0,d.jsx)(q,{})}]},{label:"System",items:M}]:[{label:"Workspace",items:[{href:"/",label:"Dashboard",icon:(0,d.jsx)(j,{})},{href:"/projects",label:"Projects",icon:(0,d.jsx)(k,{})}]},{label:"Audit",items:[{href:`/runs${J}`,label:"Runs",icon:(0,d.jsx)(l,{})},{href:`/decisions${J}`,label:"Decisions",icon:(0,d.jsx)(l,{})},{href:`/context-packs${J}`,label:"Context packs",icon:(0,d.jsx)(p,{})},{href:`/graph${J}`,label:"Context graph",icon:(0,d.jsx)(m,{})}]},{label:"Govern",items:[{href:`/policies${J}`,label:"Policies",icon:(0,d.jsx)(n,{})},{href:`/kill-switches${J}`,label:"Kill switches",icon:(0,d.jsx)(o,{})}]},{label:"Knowledge",items:[{href:"/packs",label:"Feature packs",icon:(0,d.jsx)(p,{})},{href:"/features",label:"Features",icon:(0,d.jsx)(l,{})},{href:"/templates",label:"Templates",icon:(0,d.jsx)(q,{})}]},{label:"System",items:[{href:"/workspace",label:"Workspace",icon:(0,d.jsx)(r,{})},{href:"/settings",label:"Settings",icon:(0,d.jsx)(t,{})}]},{label:"Upgrade",items:[{href:"/welcome",label:"About modes",icon:(0,d.jsx)(v,{})},{href:"/onboarding/team",label:"Create a team",icon:(0,d.jsx)(u,{})},{href:"/onboarding/team/join",label:"Connect to existing",icon:(0,d.jsx)(x,{})}]}];return(0,d.jsxs)("aside",{className:"side",children:[(0,d.jsxs)("div",{className:"side__brand",children:[(0,d.jsx)(h,{}),(0,d.jsx)("span",{className:"side__brand-word",children:"Coodra"}),(0,d.jsx)("span",{className:"side__brand-mode",style:"team"===a?void 0:{color:"var(--ink-mute)",borderColor:"var(--rule-strong)"},children:a})]}),(0,d.jsxs)(f(),{href:"team"===a?"/settings/team":"/welcome",style:{display:"block",padding:"14px 24px 16px",borderBottom:"1px solid var(--rule)",textDecoration:"none",background:"team"===a?"rgba(125, 216, 125, 0.04)":"transparent"},children:[(0,d.jsx)("div",{style:{fontFamily:"var(--mono)",fontSize:9,letterSpacing:"0.22em",textTransform:"uppercase",color:"team"===a?"var(--accent)":"var(--ink-mute)",marginBottom:6},children:"team"===a?"● Team workspace":"Solo workspace"}),(0,d.jsx)("div",{style:{fontFamily:"var(--serif)",fontSize:18,fontWeight:400,letterSpacing:"-0.005em",color:"var(--ink)",lineHeight:1.2},children:"team"===a&&null!==z?function(a,b){if(a.length<=24)return a;let c=Math.floor((b-1)/2);return`${a.slice(0,c)}…${a.slice(-c)}`}(z,24):"team"===a?"Cloud — org pending":"This machine"}),(0,d.jsx)("div",{style:{fontFamily:"var(--mono)",fontSize:9,letterSpacing:"0.06em",color:"var(--ink-mute)",marginTop:4},children:"team"===a?"syncing every 10 s \xb7 click for members":"~/.coodra/data.db \xb7 click to upgrade"})]}),(0,d.jsxs)("div",{className:"side__project",children:[(0,d.jsx)("div",{className:"side__eyebrow",children:"Project"}),(0,d.jsxs)("details",{className:"side__project-picker",style:{position:"relative"},children:[(0,d.jsxs)("summary",{className:"side__project-pill",style:{listStyle:"none",cursor:"pointer",textDecoration:"none"},title:"Click to switch project",children:[(0,d.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("path",{d:"M3 7l9-4 9 4-9 4-9-4z"}),(0,d.jsx)("path",{d:"M3 12l9 4 9-4"}),(0,d.jsx)("path",{d:"M3 17l9 4 9-4"})]}),(0,d.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,d.jsx)("div",{className:"side__project-name",children:I.name}),(0,d.jsx)("div",{className:"side__project-slug",children:I.slug})]}),(0,d.jsx)("svg",{className:"side__caret",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5","aria-hidden":"true",children:(0,d.jsx)("path",{d:"M8 9l4-4 4 4M8 15l4 4 4-4"})})]}),(0,d.jsxs)("div",{style:{position:"absolute",top:"100%",left:0,right:0,marginTop:6,background:"var(--bg)",border:"1px solid var(--rule-strong)",padding:"8px 0",maxHeight:320,overflowY:"auto",zIndex:50},children:[(0,d.jsx)(f(),{href:"/projects",style:{display:"block",padding:"8px 14px",textDecoration:"none",color:"var(--ink-mute)",fontFamily:"var(--mono)",fontSize:11,letterSpacing:"0.06em",borderBottom:"1px solid var(--rule)"},children:"← all projects"}),0===y.length?(0,d.jsxs)("div",{style:{padding:"12px 14px",fontFamily:"var(--mono)",fontSize:11,color:"var(--ink-mute)",letterSpacing:"0.04em"},children:["No projects yet. Run ",(0,d.jsx)("code",{children:"coodra init"}),"."]}):y.map(a=>{let b=a.slug===I.slug;return(0,d.jsxs)(f(),{href:`/projects/${encodeURIComponent(a.slug)}`,style:{display:"block",padding:"8px 14px",textDecoration:"none",background:b?"var(--bg-2)":"transparent",color:b?"var(--accent)":"var(--ink)",fontFamily:"var(--mono)",fontSize:12,letterSpacing:"0.04em"},children:[b?"● ":"○ ",a.slug]},a.slug)})]})]}),null!==H?(0,d.jsx)(f(),{href:"/projects",className:"side__project-slug",style:{display:"block",marginTop:8,textDecoration:"none",color:"var(--ink-mute)"},children:"← all projects"}):null]}),(0,d.jsx)("nav",{className:"side__nav",children:N.map(a=>(0,d.jsxs)("div",{className:"side__group",children:[(0,d.jsx)("div",{className:"side__group-label",children:a.label}),a.items.map(a=>{var b,c;let e=(b=C,"/"===(c=a.href)?"/"===b:b===c||b.startsWith(`${c}/`));return(0,d.jsxs)(f(),{href:a.href,className:`side__link${e?" is-active":""}`,children:[a.icon,a.label,void 0!==a.count?(0,d.jsx)("span",{className:"side__link-count",children:a.count}):null]},a.href)})]},a.label))}),(0,d.jsx)("div",{className:"side__foot",children:void 0!==B?B:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"side__avatar",children:c}),(0,d.jsxs)("div",{className:"side__user",children:[(0,d.jsx)("div",{className:"side__user-name",children:e}),(0,d.jsx)("div",{className:"side__user-role",children:i})]})]})})]})}function j(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("rect",{x:"3",y:"3",width:"7",height:"9"}),(0,d.jsx)("rect",{x:"14",y:"3",width:"7",height:"5"}),(0,d.jsx)("rect",{x:"14",y:"12",width:"7",height:"9"}),(0,d.jsx)("rect",{x:"3",y:"16",width:"7",height:"5"})]})}function k(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("path",{d:"M3 7l9-4 9 4-9 4-9-4z"}),(0,d.jsx)("path",{d:"M3 12l9 4 9-4"}),(0,d.jsx)("path",{d:"M3 17l9 4 9-4"})]})}function l(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("rect",{x:"3",y:"4",width:"18",height:"16"}),(0,d.jsx)("line",{x1:"3",y1:"9",x2:"21",y2:"9"}),(0,d.jsx)("circle",{cx:"6.5",cy:"6.5",r:"0.6",fill:"currentColor"})]})}function m(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"6",cy:"6",r:"2.5"}),(0,d.jsx)("circle",{cx:"18",cy:"6",r:"2.5"}),(0,d.jsx)("circle",{cx:"12",cy:"18",r:"2.5"}),(0,d.jsx)("line",{x1:"8",y1:"7",x2:"16",y2:"7"}),(0,d.jsx)("line",{x1:"7",y1:"8",x2:"11",y2:"16"}),(0,d.jsx)("line",{x1:"17",y1:"8",x2:"13",y2:"16"})]})}function n(){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:(0,d.jsx)("path",{d:"M12 3l8 4v5c0 5-3.5 8.5-8 9-4.5-.5-8-4-8-9V7l8-4z"})})}function o(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"12",cy:"12",r:"9"}),(0,d.jsx)("line",{x1:"12",y1:"3",x2:"12",y2:"13"})]})}function p(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("path",{d:"M4 5h16v14H4z"}),(0,d.jsx)("line",{x1:"4",y1:"9",x2:"20",y2:"9"}),(0,d.jsx)("line",{x1:"9",y1:"5",x2:"9",y2:"19"})]})}function q(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("rect",{x:"3",y:"3",width:"8",height:"8"}),(0,d.jsx)("rect",{x:"13",y:"3",width:"8",height:"8"}),(0,d.jsx)("rect",{x:"3",y:"13",width:"8",height:"8"}),(0,d.jsx)("rect",{x:"13",y:"13",width:"8",height:"8"})]})}function r(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("rect",{x:"4",y:"6",width:"16",height:"12"}),(0,d.jsx)("line",{x1:"4",y1:"10",x2:"20",y2:"10"}),(0,d.jsx)("circle",{cx:"7",cy:"8",r:"0.6",fill:"currentColor"})]})}function s(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("path",{d:"M4 12a8 8 0 0114-5.3M20 12a8 8 0 01-14 5.3"}),(0,d.jsx)("path",{d:"M16 6h4V2M8 18H4v4"})]})}function t(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"12",cy:"12",r:"3"}),(0,d.jsx)("path",{d:"M19.4 15a1.7 1.7 0 00.3 1.8l.1.1a2 2 0 01-2.8 2.8l-.1-.1a1.7 1.7 0 00-1.8-.3 1.7 1.7 0 00-1 1.5V21a2 2 0 11-4 0v-.1a1.7 1.7 0 00-1.1-1.5 1.7 1.7 0 00-1.8.3l-.1.1a2 2 0 11-2.8-2.8l.1-.1a1.7 1.7 0 00.3-1.8 1.7 1.7 0 00-1.5-1H3a2 2 0 110-4h.1A1.7 1.7 0 004.5 9a1.7 1.7 0 00-.3-1.8l-.1-.1a2 2 0 012.8-2.8l.1.1a1.7 1.7 0 001.8.3H9a1.7 1.7 0 001-1.5V3a2 2 0 014 0v.1a1.7 1.7 0 001 1.5 1.7 1.7 0 001.8-.3l.1-.1a2 2 0 012.8 2.8l-.1.1a1.7 1.7 0 00-.3 1.8V9a1.7 1.7 0 001.5 1H21a2 2 0 110 4h-.1a1.7 1.7 0 00-1.5 1z"})]})}function u(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"9",cy:"8",r:"3.2"}),(0,d.jsx)("path",{d:"M3 19c0-3.5 2.7-6 6-6s6 2.5 6 6"}),(0,d.jsx)("circle",{cx:"17",cy:"9",r:"2.5"}),(0,d.jsx)("path",{d:"M21 19c0-2.6-1.7-4.5-4-5"})]})}function v(){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:(0,d.jsx)("path",{d:"M12 3l2.6 6 6.4.6-4.9 4.4 1.5 6.4L12 17l-5.6 3.4 1.5-6.4L3 9.6 9.4 9 12 3z"})})}function w(){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:(0,d.jsx)("path",{d:"M4 7h12l-3-3M20 17H8l3 3"})})}function x(){return(0,d.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,d.jsx)("circle",{cx:"8",cy:"14",r:"3.5"}),(0,d.jsx)("path",{d:"M11 14h10v4M17 14v4"})]})}},94393:(a,b,c)=>{Promise.resolve().then(c.bind(c,91706)),Promise.resolve().then(c.bind(c,15949)),Promise.resolve().then(c.bind(c,73820)),Promise.resolve().then(c.bind(c,77011)),Promise.resolve().then(c.bind(c,57946)),Promise.resolve().then(c.bind(c,26988)),Promise.resolve().then(c.bind(c,81874))}};
|