trybeacon 0.1.86 → 0.1.87
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/.claude-plugin/plugin.json +1 -1
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +15 -15
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/@modal/(.)settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +1 -1
- package/.next/server/app/docs.segments/@modal/__DEFAULT__.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/.next/server/app/help.html +1 -1
- package/.next/server/app/help.rsc +1 -1
- package/.next/server/app/help.segments/@modal/__DEFAULT__.segment.rsc +1 -1
- package/.next/server/app/help.segments/_full.segment.rsc +1 -1
- package/.next/server/app/help.segments/_head.segment.rsc +1 -1
- package/.next/server/app/help.segments/_index.segment.rsc +1 -1
- package/.next/server/app/help.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/help.segments/help.segment.rsc +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +1 -1
- package/.next/server/app/index.segments/@modal/__DEFAULT__.segment.rsc +1 -1
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/learn/page.js +3 -3
- package/.next/server/app/learn/page.js.nft.json +1 -1
- package/.next/server/app/learn/page_client-reference-manifest.js +1 -1
- package/.next/server/app/map/page.js +1 -1
- package/.next/server/app/map/page.js.nft.json +1 -1
- package/.next/server/app/map/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/plan/page.js +2 -2
- package/.next/server/app/plan/page.js.nft.json +1 -1
- package/.next/server/app/plan/page_client-reference-manifest.js +1 -1
- package/.next/server/app/s/[token]/page.js +1 -1
- package/.next/server/app/s/[token]/page.js.nft.json +1 -1
- package/.next/server/app/s/[token]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +15 -15
- package/.next/server/chunks/2933.js +1 -1
- package/.next/server/chunks/8770.js +1 -0
- package/.next/server/chunks/9213.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/3594-3f27abfbeba39610.js +1 -0
- package/.next/static/chunks/app/learn/{page-18821c98beca638e.js → page-d67bd23577449b01.js} +1 -1
- package/.next/static/chunks/app/map/{page-278aa8f1b90828be.js → page-492185f028f4dffb.js} +1 -1
- package/.next/static/chunks/app/plan/{page-6085ec2d97f9c678.js → page-363e3766ef1856eb.js} +2 -2
- package/.next/static/chunks/app/s/[token]/{page-a00e023f723224c1.js → page-8f46e0f5eac2882b.js} +1 -1
- package/.next/trace +47 -47
- package/.next/trace-build +1 -1
- package/dist/bin/remove.js +6 -6
- package/package.json +1 -1
- package/.next/server/chunks/7335.js +0 -1
- package/.next/static/chunks/985-430599029183e18e.js +0 -1
- /package/.next/static/{DJSoomboyiqKwEIQ7ktag → -bAkcM1aZ87OxT3hzgkKl}/_buildManifest.js +0 -0
- /package/.next/static/{DJSoomboyiqKwEIQ7ktag → -bAkcM1aZ87OxT3hzgkKl}/_ssgManifest.js +0 -0
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-webpack","duration":
|
|
1
|
+
[{"name":"run-webpack","duration":33333624,"timestamp":115324501,"id":14,"parentId":1,"tags":{},"startTime":1783601638140,"traceId":"23587dd35a2da950"},{"name":"run-typescript","duration":12436690,"timestamp":148660498,"id":5039,"parentId":1,"tags":{},"startTime":1783601671476,"traceId":"23587dd35a2da950"},{"name":"static-check","duration":858318,"timestamp":161113406,"id":5042,"parentId":1,"tags":{},"startTime":1783601683929,"traceId":"23587dd35a2da950"},{"name":"static-generation","duration":4301993,"timestamp":162477933,"id":5236,"parentId":1,"tags":{},"startTime":1783601685293,"traceId":"23587dd35a2da950"},{"name":"collect-build-traces","duration":11771629,"timestamp":161975212,"id":5233,"parentId":1,"tags":{},"startTime":1783601684790,"traceId":"23587dd35a2da950"},{"name":"telemetry-flush","duration":62,"timestamp":173750851,"id":5245,"parentId":1,"tags":{},"startTime":1783601696566,"traceId":"23587dd35a2da950"},{"name":"next-build","duration":58545815,"timestamp":115205111,"id":1,"tags":{"buildMode":"default","version":"16.2.7","bundler":"webpack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1783601638020,"traceId":"23587dd35a2da950"}]
|
package/dist/bin/remove.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
var b5=Object.defineProperty;var p5=(Z)=>Z;function c5(Z,$){this[Z]=p5.bind(null,$)}var gZ=(Z,$)=>{for(var Q in $)b5(Z,Q,{get:$[Q],enumerable:!0,configurable:!0,set:c5.bind($,Q)})};var Y4=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var G4={};gZ(G4,{provisionDb:()=>$6});import{createClient as d5}from"@libsql/client";import{drizzle as l5}from"drizzle-orm/libsql";import{migrate as n5}from"drizzle-orm/libsql/migrator";import{readMigrationFiles as r5}from"drizzle-orm/migrator";import{dirname as hZ,join as o5}from"path";import{fileURLToPath as i5}from"url";async function zZ(Z,$){return(await Z.execute({sql:"SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?",args:[$]})).rows.length>0}async function e5(Z,$){let Q=await Z.execute(`PRAGMA table_info("${$}")`);return new Set(Q.rows.map((J)=>String(J.name)))}async function X4(Z){if(!await zZ(Z,"__drizzle_migrations"))return 0;let $=await Z.execute('SELECT count(*) AS n FROM "__drizzle_migrations"');return Number($.rows[0]?.n??0)}async function Z6(Z){for(let[$,Q]of Object.entries(t5)){if(!await zZ(Z,$))continue;let J=await e5(Z,$);for(let V of Q){if(!J.has(V))continue;await Z.execute(`UPDATE "${$}" SET "${V}" = CAST((julianday("${V}") - 2440587.5) * 86400000 AS INTEGER) WHERE typeof("${V}") = 'text'`)}}}async function $6(Z,$=a5){let Q=d5({url:Z});try{await Q.execute("PRAGMA journal_mode = WAL;"),await Q.execute("PRAGMA foreign_keys = ON;"),await Q.execute("PRAGMA busy_timeout = 5000;");let J=await zZ(Q,"__drizzle_migrations"),V=await zZ(Q,"Node"),Y=!1;if(V&&!J){let K=r5({migrationsFolder:$})[0];if(K)await Q.execute('CREATE TABLE IF NOT EXISTS "__drizzle_migrations" (id SERIAL PRIMARY KEY, hash text NOT NULL, created_at numeric)'),await Q.execute({sql:'INSERT INTO "__drizzle_migrations" ("hash", "created_at") VALUES (?, ?)',args:[K.hash,K.folderMillis]}),Y=!0}let X=await X4(Q);if(await n5(l5(Q),{migrationsFolder:$}),await X4(Q)>X)Y=!0;return await Z6(Q),{migrated:Y}}finally{Q.close()}}var s5,a5,t5;var M4=Y4(async()=>{s5=hZ(hZ(hZ(i5(import.meta.url)))),a5=process.env.BEACON_MIGRATIONS_DIR||o5(s5,"drizzle"),t5={Node:["createdAt","updatedAt"],Note:["createdAt","updatedAt"],DbTable:["createdAt","updatedAt"],Endpoint:["createdAt","updatedAt"],DraftTable:["createdAt"],SyncState:["codeGraphSyncedAt","updatedAt"],AppSetting:["updatedAt"],ProjectMeta:["updatedAt"],CodeFile:["updatedAt"]}});import{mkdirSync as W8,renameSync as C8,rmSync as N8,writeFileSync as L8}from"fs";import{dirname as B8}from"path";function q8(Z,$){W8(B8(Z),{recursive:!0});let Q=`${Z}.tmp`;try{L8(Q,$),C8(Q,Z)}catch(J){throw N8(Q,{force:!0}),J}}function O8(Z,$,Q=!1){q8(Z,JSON.stringify($,null,Q?2:void 0))}var z5=()=>{};import{AsyncLocalStorage as Q6}from"async_hooks";import{spawnSync as J6}from"child_process";import{createHash as V6}from"crypto";import{existsSync as j4,mkdirSync as NZ,readFileSync as bZ,writeFileSync as pZ}from"fs";import{homedir as H4}from"os";import{basename as K6,join as $Z,parse as Y6,resolve as U4}from"path";function t(){return process.env.BEACON_HOME||$Z(H4(),".beacon")}function cZ(){return $Z(t(),"workspaces.json")}function ZZ(Z){return V6("sha256").update(Z).digest("hex").slice(0,12)}function _Z(Z=process.cwd()){let $=J6("git",["rev-parse","--show-toplevel"],{cwd:Z,stdio:["ignore","pipe","ignore"]});if($.status===0){let Q=$.stdout?.toString().trim();if(Q)return Q}return Z}function W4(Z){let $=U4(Z);return $!==U4(H4())&&$!==Y6($).root}function C4(){return $Z(t(),"deleted.json")}function dZ(){try{let Z=JSON.parse(bZ(C4(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function N4(Z){NZ(t(),{recursive:!0}),pZ(C4(),JSON.stringify(Z,null,2))}function L4(Z){return dZ().includes(Z)}function B4(Z){let $=dZ();if(!$.includes(Z))N4([...$,Z])}function X6(Z){let $=dZ();if($.includes(Z))N4($.filter((Q)=>Q!==Z))}function n(Z){return $Z(t(),Z)}function VZ(Z){return`file:${$Z(n(Z),"db.sqlite")}`}function LZ(){try{let Z=JSON.parse(bZ(cZ(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function lZ(Z){NZ(t(),{recursive:!0}),pZ(cZ(),JSON.stringify(Z,null,2))}function FZ(){return LZ().sort((Z,$)=>$.lastOpenedAt.localeCompare(Z.lastOpenedAt))}function g(Z){return LZ().find(($)=>$.id===Z)??null}function q4(Z,$,Q=new Date().toISOString()){if(!W4(Z))throw Error(`beacon: refusing to register a non-repo path as a workspace: ${Z}`);let J=ZZ(Z);if(L4(J))throw Error(`beacon: workspace ${J} (${Z}) was deleted \u2014 run \`beacon\` or /beacon-init to re-add it`);let V=LZ(),Y=V.find((j)=>j.id===J),X={id:J,path:Z,name:$||Y?.name||K6(Z),lastOpenedAt:Q},K=[X,...V.filter((j)=>j.id!==J)];return NZ(n(J),{recursive:!0}),lZ(K),X}function J$(Z,$){return X6(ZZ(Z)),q4(Z,$)}function V$(Z,$=new Date().toISOString()){let Q=LZ(),J=Q.find((V)=>V.id===Z);if(!J)return;J.lastOpenedAt=$,lZ(Q)}function O4(Z){if(lZ(LZ().filter(($)=>$.id!==Z)),r()===Z)G6(FZ()[0]?.id??null)}function D4(){return $Z(t(),"active")}function r(){try{return bZ(D4(),"utf8").trim()||null}catch{return null}}function G6(Z){NZ(t(),{recursive:!0}),pZ(D4(),Z??"")}function M6(){let Z=r();return Z?g(Z):null}function K$(){let Z=AZ()??r();return Z?g(Z):null}function Y$(Z){return g(Z)?.path??null}function X$(){return j4(cZ())}var z4="beacon_ws";function _4(Z,$){let Q=Z.headers.get("cookie");if(!Q)return null;for(let J of Q.split(";")){let V=J.indexOf("=");if(V===-1)continue;if(J.slice(0,V).trim()===$)return decodeURIComponent(J.slice(V+1).trim())}return null}function G$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=_4(Z,z4);if(Q&&g(Q))return Q;return U6()}function U6(){let Z=FZ();return Z.length===1?Z[0].id:null}var F4="x-beacon-workspace-path";function M$(Z=process.cwd()){let $=_Z(Z);return{"x-beacon-workspace":ZZ($),[F4]:$}}async function U$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=Z.headers.get(F4);if(Q&&W4(Q)&&!L4(ZZ(Q))&&(!$||ZZ(Q)===$)){let V=q4(Q);return await nZ(V.id),V.id}let J=_4(Z,z4);if(J&&g(J))return J;return null}var A4=new Q6;function j6(Z,$){return Z?A4.run(Z,$):$()}function AZ(){return A4.getStore()??null}var mZ=new Set;function P4(Z){mZ.delete($Z(n(Z),"db.sqlite"))}async function nZ(Z){let $=n(Z),Q=$Z($,"db.sqlite"),J=j4(Q);if(J&&mZ.has(Q))return{ok:!0,created:!1,migrated:!1};try{NZ($,{recursive:!0});let{provisionDb:V}=await M4().then(() => G4),Y=await V(VZ(Z));return mZ.add(Q),{ok:!0,created:!J,migrated:J&&Y.migrated}}catch(V){return{ok:!1,created:!1,migrated:!1,error:V instanceof Error?V.message:String(V)}}}import{existsSync as m8,readFileSync as b8}from"fs";import{resolve as f5}from"path";import{rmSync as h8}from"fs";import{drizzle as f6}from"drizzle-orm/libsql";import{createClient as x6}from"@libsql/client";var rZ={};gZ(rZ,{workspaceFlag:()=>q6,tag:()=>jZ,syncState:()=>a,projectMeta:()=>B6,planContract:()=>O6,note:()=>C6,nodeTags:()=>YZ,nodeFile:()=>BZ,node:()=>k,endpointTable:()=>i,endpoint:()=>E,edge:()=>KZ,draftTable:()=>c,draftRelation:()=>XZ,draftColumn:()=>OZ,dbTable:()=>P,dbRelation:()=>d,dbColumn:()=>e,codeFileEdge:()=>f,codeFile:()=>y,bugFlag:()=>qZ,boardAnnotation:()=>N6,appSetting:()=>L6});import{sqliteTable as v,index as S,foreignKey as H6,text as W,integer as F,real as m,uniqueIndex as o,primaryKey as W6}from"drizzle-orm/sqlite-core";import{createId as u}from"@paralleldrive/cuid2";var k=v("Node",{id:W().primaryKey().$defaultFn(()=>u()),view:W().notNull(),kind:W().default("FEATURE").notNull(),cluster:W(),layer:W(),title:W().notNull(),role:W(),plain:W(),status:W().default("PENDING").notNull(),priority:F().default(2).notNull(),progress:F().default(0).notNull(),x:m().default(0).notNull(),y:m().default(0).notNull(),sourceRef:W(),externalId:W(),source:W().default("MANUAL").notNull(),planId:W(),parentId:W(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date),externalUpdatedAt:F({mode:"timestamp_ms"}),externalSyncedAt:F({mode:"timestamp_ms"}),externalSnapshot:W(),assigneeName:W(),assigneeAvatarUrl:W(),hiddenAt:F({mode:"timestamp_ms"})},(Z)=>[S("Node_cluster_idx").on(Z.cluster),S("Node_parentId_idx").on(Z.parentId),S("Node_view_idx").on(Z.view),H6(()=>({columns:[Z.parentId],foreignColumns:[Z.id],name:"Node_parentId_Node_id_fk"})).onUpdate("cascade").onDelete("cascade")]),BZ=v("NodeFile",{id:W().primaryKey().$defaultFn(()=>u()),nodeId:W().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),path:W().notNull()},(Z)=>[o("NodeFile_nodeId_path_key").on(Z.nodeId,Z.path),S("NodeFile_nodeId_idx").on(Z.nodeId)]),jZ=v("Tag",{id:W().primaryKey().$defaultFn(()=>u()),label:W().notNull(),color:W()},(Z)=>[o("Tag_label_key").on(Z.label)]),KZ=v("Edge",{id:W().primaryKey().$defaultFn(()=>u()),fromId:W().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),toId:W().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),kind:W().default("DEPENDS").notNull(),label:W(),sourceHandle:W(),targetHandle:W()},(Z)=>[o("Edge_fromId_toId_kind_key").on(Z.fromId,Z.toId,Z.kind),S("Edge_toId_idx").on(Z.toId),S("Edge_fromId_idx").on(Z.fromId)]),YZ=v("_NodeTags",{a:W("A").notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),b:W("B").notNull().references(()=>jZ.id,{onDelete:"cascade",onUpdate:"cascade"})},(Z)=>[o("_NodeTags_AB_unique").on(Z.a,Z.b),S("_NodeTags_B_index").on(Z.b)]),C6=v("Note",{id:W().primaryKey().$defaultFn(()=>u()),title:W().default("Untitled").notNull(),body:W().default("").notNull(),ord:m().default(0).notNull(),pinned:F({mode:"boolean"}).default(!1).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("Note_updatedAt_idx").on(Z.updatedAt)]),N6=v("BoardAnnotation",{id:W().primaryKey().$defaultFn(()=>u()),targetKind:W().notNull(),targetId:W().notNull(),columnName:W(),body:W().default("").notNull(),x:m(),y:m(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("BoardAnnotation_target_idx").on(Z.targetId)]),qZ=v("BugFlag",{id:W().primaryKey().$defaultFn(()=>u()),nodeId:W().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),by:W().notNull(),note:W().notNull(),resolvedAt:F({mode:"timestamp_ms"}),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[S("BugFlag_nodeId_idx").on(Z.nodeId)]),P=v("DbTable",{id:W().primaryKey().$defaultFn(()=>u()),name:W().notNull(),domain:W(),description:W(),source:W().default("MANUAL").notNull(),planId:W(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("DbTable_domain_idx").on(Z.domain),o("DbTable_name_key").on(Z.name)]),e=v("DbColumn",{id:W().primaryKey().$defaultFn(()=>u()),tableId:W().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),name:W().notNull(),type:W().notNull(),isPk:F({mode:"boolean"}).default(!1).notNull(),isFk:F({mode:"boolean"}).default(!1).notNull(),nullable:F({mode:"boolean"}).default(!0).notNull(),note:W(),ord:F().default(0).notNull()},(Z)=>[o("DbColumn_tableId_name_key").on(Z.tableId,Z.name),S("DbColumn_tableId_idx").on(Z.tableId)]),d=v("DbRelation",{id:W().primaryKey().$defaultFn(()=>u()),fromTableId:W().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:W().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:W().notNull(),toColumn:W().notNull(),label:W()},(Z)=>[S("DbRelation_toTableId_idx").on(Z.toTableId),S("DbRelation_fromTableId_idx").on(Z.fromTableId)]),E=v("Endpoint",{id:W().primaryKey().$defaultFn(()=>u()),method:W().notNull(),path:W().notNull(),domain:W(),description:W(),source:W().default("MANUAL").notNull(),planId:W(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("Endpoint_method_path_key").on(Z.method,Z.path),S("Endpoint_domain_idx").on(Z.domain)]),i=v("EndpointTable",{id:W().primaryKey().$defaultFn(()=>u()),endpointId:W().notNull().references(()=>E.id,{onDelete:"cascade",onUpdate:"cascade"}),tableId:W().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),access:W().default("read").notNull()},(Z)=>[o("EndpointTable_endpointId_tableId_key").on(Z.endpointId,Z.tableId),S("EndpointTable_tableId_idx").on(Z.tableId)]),c=v("DraftTable",{id:W().primaryKey().$defaultFn(()=>u()),name:W().notNull(),domain:W(),description:W(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[o("DraftTable_name_key").on(Z.name)]),OZ=v("DraftColumn",{id:W().primaryKey().$defaultFn(()=>u()),tableId:W().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),name:W().notNull(),type:W().notNull(),isPk:F({mode:"boolean"}).default(!1).notNull(),isFk:F({mode:"boolean"}).default(!1).notNull(),nullable:F({mode:"boolean"}).default(!0).notNull(),note:W(),ord:F().default(0).notNull()},(Z)=>[S("DraftColumn_tableId_idx").on(Z.tableId)]),XZ=v("DraftRelation",{id:W().primaryKey().$defaultFn(()=>u()),fromTableId:W().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:W().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:W().notNull(),toColumn:W().notNull(),label:W()},(Z)=>[S("DraftRelation_toTableId_idx").on(Z.toTableId),S("DraftRelation_fromTableId_idx").on(Z.fromTableId)]),y=v("CodeFile",{path:W().primaryKey(),root:W(),lang:W(),x:m().default(0).notNull(),y:m().default(0).notNull(),mtimeMs:m(),size:F(),inDegree:F().default(0).notNull(),outDegree:F().default(0).notNull(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),f=v("CodeFileEdge",{fromPath:W().notNull().references(()=>y.path,{onDelete:"cascade",onUpdate:"cascade"}),toPath:W().notNull().references(()=>y.path,{onDelete:"cascade",onUpdate:"cascade"}),circular:F({mode:"boolean"}).default(!1).notNull()},(Z)=>[S("CodeFileEdge_circular_idx").on(Z.circular),S("CodeFileEdge_toPath_idx").on(Z.toPath),S("CodeFileEdge_fromPath_idx").on(Z.fromPath),W6({columns:[Z.fromPath,Z.toPath],name:"CodeFileEdge_fromPath_toPath_pk"})]),a=v("SyncState",{id:W().primaryKey().default("singleton"),version:F().default(0).notNull(),codeGraphSyncedAt:F({mode:"timestamp_ms"}),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),L6=v("AppSetting",{id:W().primaryKey().default("singleton"),editor:W().default("auto").notNull(),currentFeatureId:W(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),B6=v("ProjectMeta",{id:W().primaryKey().default("singleton"),overview:W(),conventions:W().default("[]").notNull(),hasFrontend:F({mode:"boolean"}),classificationRoots:W().default("[]").notNull(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),q6=v("WorkspaceFlag",{id:W().primaryKey().$defaultFn(()=>u()),key:W().notNull(),enabled:F({mode:"boolean"}).default(!1).notNull(),config:W(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("WorkspaceFlag_key_key").on(Z.key)]),O6=v("PlanContract",{id:W().primaryKey().$defaultFn(()=>u()),planId:W().notNull(),declaredFiles:W().default("[]").notNull(),authorizedExtras:W().default("[]").notNull(),active:F({mode:"boolean"}).default(!1).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("PlanContract_planId_key").on(Z.planId),S("PlanContract_active_idx").on(Z.active)]);var oZ={};gZ(oZ,{tagRelations:()=>F6,nodeTagsRelations:()=>A6,nodeRelations:()=>D6,nodeFileRelations:()=>z6,endpointTableRelations:()=>v6,endpointRelations:()=>S6,edgeRelations:()=>P6,draftTableRelations:()=>k6,draftRelationRelations:()=>T6,draftColumnRelations:()=>w6,dbTableRelations:()=>I6,dbRelationRelations:()=>E6,dbColumnRelations:()=>R6,codeFileRelations:()=>y6,codeFileEdgeRelations:()=>u6,bugFlagRelations:()=>_6});import{relations as h}from"drizzle-orm";var D6=h(k,({one:Z,many:$})=>({files:$(BZ),bugFlags:$(qZ),nodeTags:$(YZ),edgesOut:$(KZ,{relationName:"EdgeFrom"}),edgesIn:$(KZ,{relationName:"EdgeTo"}),parent:Z(k,{fields:[k.parentId],references:[k.id],relationName:"NodeTree"}),children:$(k,{relationName:"NodeTree"})})),z6=h(BZ,({one:Z})=>({node:Z(k,{fields:[BZ.nodeId],references:[k.id]})})),_6=h(qZ,({one:Z})=>({node:Z(k,{fields:[qZ.nodeId],references:[k.id]})})),F6=h(jZ,({many:Z})=>({nodeTags:Z(YZ)})),A6=h(YZ,({one:Z})=>({node:Z(k,{fields:[YZ.a],references:[k.id]}),tag:Z(jZ,{fields:[YZ.b],references:[jZ.id]})})),P6=h(KZ,({one:Z})=>({from:Z(k,{fields:[KZ.fromId],references:[k.id],relationName:"EdgeFrom"}),to:Z(k,{fields:[KZ.toId],references:[k.id],relationName:"EdgeTo"})})),I6=h(P,({many:Z})=>({columns:Z(e),fksOut:Z(d,{relationName:"FkFrom"}),fksIn:Z(d,{relationName:"FkTo"}),usages:Z(i)})),R6=h(e,({one:Z})=>({table:Z(P,{fields:[e.tableId],references:[P.id]})})),E6=h(d,({one:Z})=>({fromTable:Z(P,{fields:[d.fromTableId],references:[P.id],relationName:"FkFrom"}),toTable:Z(P,{fields:[d.toTableId],references:[P.id],relationName:"FkTo"})})),S6=h(E,({many:Z})=>({tables:Z(i)})),v6=h(i,({one:Z})=>({endpoint:Z(E,{fields:[i.endpointId],references:[E.id]}),table:Z(P,{fields:[i.tableId],references:[P.id]})})),k6=h(c,({many:Z})=>({columns:Z(OZ),fksOut:Z(XZ,{relationName:"DraftFkFrom"}),fksIn:Z(XZ,{relationName:"DraftFkTo"})})),w6=h(OZ,({one:Z})=>({table:Z(c,{fields:[OZ.tableId],references:[c.id]})})),T6=h(XZ,({one:Z})=>({fromTable:Z(c,{fields:[XZ.fromTableId],references:[c.id],relationName:"DraftFkFrom"}),toTable:Z(c,{fields:[XZ.toTableId],references:[c.id],relationName:"DraftFkTo"})})),y6=h(y,({many:Z})=>({edgesOut:Z(f,{relationName:"CFEFrom"}),edgesIn:Z(f,{relationName:"CFETo"})})),u6=h(f,({one:Z})=>({fromFile:Z(y,{fields:[f.fromPath],references:[y.path],relationName:"CFEFrom"}),toFile:Z(y,{fields:[f.toPath],references:[y.path],relationName:"CFETo"})}));var g6={...rZ,...oZ};function h6(){let Z=process.env.DATABASE_URL;if(Z&&/^(file:|libsql:|wss?:|https?:|:memory:)/i.test(Z))return Z;return"file:./dev.db"}var m6=h6();function b6(Z){let $=x6({url:Z});return $.execute("PRAGMA foreign_keys = ON;"),$.execute("PRAGMA busy_timeout = 5000;"),f6($,{schema:g6})}var p6=globalThis,PZ=p6.dzByUrl??=new Map;function I4(){return IZ(m6)}function IZ(Z){let $=PZ.get(Z);if(!$)$=b6(Z),PZ.set(Z,$);return $}function R4(Z){let $=PZ.get(Z);PZ.delete(Z);try{$?.$client?.close?.()}catch{}}function c6(){if(process.env.BEACON_REPO)return I4();let Z=AZ()??r();if(!Z)return I4();return IZ(VZ(Z))}var b=new Proxy({},{get(Z,$){let Q=c6(),J=Q[$];return typeof J==="function"?J.bind(Q):J}});import{existsSync as u8}from"fs";import{existsSync as k5,readFileSync as S8,watch as v8}from"fs";import{readFile as v5}from"fs/promises";import{join as DZ,relative as k8,resolve as w8}from"path";import{existsSync as l4,readFileSync as n4}from"fs";import{readdir as D7,readFile as z7,stat as r4}from"fs/promises";import{extname as o4,join as vZ,relative as WZ,resolve as HZ}from"path";import{extname as m4}from"path";import{dirname as d6,resolve as l6}from"path";var iZ=[".ts",".tsx",".js",".jsx",".mjs",".cjs"],n6=[/(?:^|[\n;])\s*(?:import|export)[^'"`\n]{0,4000}?from\s*['"]([^'"`]+)['"]/g,/(?:^|[\n;])\s*import\s*['"]([^'"`]+)['"]/g,/\brequire\(\s*['"]([^'"`]+)['"]\s*\)/g,/\bimport\(\s*['"]([^'"`]+)['"]\s*\)/g];function r6(Z){return Z.split(/[\\/]/).join("/")}function E4(Z,$){if($.has(Z))return Z;for(let Q of iZ){let J=`${Z}${Q}`;if($.has(J))return J}for(let Q of iZ){let J=`${Z}/index${Q}`;if($.has(J))return J}return null}function o6(Z){let $=new Set;for(let Q of n6)for(let J of Z.matchAll(Q))$.add(J[1]);return $}function i6(Z,$,Q,J){if(Z.startsWith(".")){let V=l6("/",d6($),Z),Y=r6(V).replace(/^\//,"");return E4(Y,Q)}for(let V of J)if(Z.startsWith(V.from)){let Y=Z.slice(V.from.length),X=V.to?`${V.to}/${Y}`:Y,K=E4(X,Q);if(K)return K}return null}var S4={id:"ts",extensions:iZ,specifiers:o6,resolve(Z,$,Q){let J=i6(Z,$,Q.fileSet,Q.tsAliases??[]);return J?[J]:[]}};import{dirname as RZ,join as s6,normalize as a6}from"path";var t6=[".py",".pyi"],v4=[/(?:^|[\n;])\s*from\s+(\.*[\w.]*)\s+import\b/g,/(?:^|[\n;])\s*import\s+([\w.]+(?:\s*,\s*[\w.]+)*)/g];function k4(Z,$){for(let Q of[`${Z}.py`,`${Z}/__init__.py`,`${Z}.pyi`])if($.has(Q))return[Q];return[]}function e6(Z){let $=new Set;for(let Q of Z.matchAll(v4[0])){let J=Q[1].trim();if(J)$.add(J)}for(let Q of Z.matchAll(v4[1]))for(let J of Q[1].split(/\s*,\s*/)){let V=J.trim().split(/\s+as\s+/)[0].trim();if(V)$.add(V)}return $}var w4={id:"python",extensions:t6,specifiers:e6,resolve(Z,$,Q){if(Z.startsWith(".")){let X=Z.length-Z.replace(/^\.+/,"").length,K=Z.slice(X),j=RZ($);for(let U=1;U<X;U++)j=RZ(j);let C=K?s6(j,K.replace(/\./g,"/")):j;return k4(a6(C).replace(/\\/g,"/"),Q.fileSet)}let J=Z.replace(/\./g,"/"),V=[],Y=RZ($);while(Y&&Y!=="."&&Y!=="/")V.push(Y),Y=RZ(Y);V.push("");for(let X of V){let K=k4(X?`${X}/${J}`:J,Q.fileSet);if(K.length)return K}return[]}};import{dirname as Z7}from"path";var $7=[".go"],Q7=/(?:^|[\n;])\s*import\s+(?:[\w.]+\s+)?"([^"]+)"/g,J7=/(?:^|[\n;])\s*import\s*\(([\s\S]*?)\)/g,V7=/"([^"]+)"/g;function K7(Z){let $=new Set;for(let Q of Z.matchAll(Q7))$.add(Q[1]);for(let Q of Z.matchAll(J7))for(let J of Q[1].matchAll(V7))$.add(J[1]);return $}var T4={id:"go",extensions:$7,resolve(Z,$,Q){let J=Q.goModulePath;if(!J)return[];let V=null;if(Z===J)V="";else if(Z.startsWith(`${J}/`))V=Z.slice(J.length+1);if(V===null)return[];let Y=[];for(let X of Q.fileSet){if(!X.endsWith(".go"))continue;let K=Z7(X);if(V===""&&K==="."||K===V)Y.push(X)}return Y.sort()},specifiers:K7};import{basename as y4,dirname as sZ,join as u4,normalize as f4}from"path";var Y7=[".rs"],X7=/(?:^|[\n;])\s*(?:pub\s+)?mod\s+(\w+)\s*;/g,G7=/(?:^|[\n;])\s*(?:pub\s+)?use\s+([\w:]+)/g;function M7(Z){let $=Z.split("::").filter((Q)=>Q&&Q!=="*");if(!$.length)return"";if($[0]==="crate")return["crate",...$.slice(1)].join("/");if($[0]==="super")return["..",...$.slice(1)].join("/");if($[0]==="self")return[".",...$.slice(1)].join("/");return $.join("/")}function aZ(Z,$){for(let Q of[`${Z}.rs`,`${Z}/mod.rs`])if($.has(Q))return[Q];return[]}var U7=new Set(["mod.rs","lib.rs","main.rs"]);function j7(Z){let $=new Set;for(let Q of Z.matchAll(X7))$.add(`./${Q[1]}`);for(let Q of Z.matchAll(G7)){let J=M7(Q[1]);if(J)$.add(J)}return $}var x4={id:"rust",extensions:Y7,specifiers:j7,resolve(Z,$,Q){let J=Q.fileSet;if(Z.startsWith("./")||Z.startsWith("../")){let V=Z.replace(/^\.\//,""),Y=f4(u4(sZ($),Z)).replace(/\\/g,"/"),X=aZ(Y,J);if(X.length)return X;if(Z.startsWith("./")&&!U7.has(y4($))){let K=u4(sZ($),y4($,".rs"),V);if(X=aZ(f4(K).replace(/\\/g,"/"),J),X.length)return X}return[]}if(Z.startsWith("crate/")){let V=$.split("/"),Y=V.lastIndexOf("src"),X=Y>=0?V.slice(0,Y+1).join("/"):sZ($),K=Z.slice(6).split("/");for(let j of[K.join("/"),K.slice(0,-1).join("/")]){if(!j)continue;let C=aZ(`${X}/${j}`,J);if(C.length)return C}return[]}return[]}};import{dirname as H7,extname as W7,join as C7,normalize as N7}from"path";var g4=[".swift",".java",".rb",".kt",".kts",".cs",".php",".scala",".c",".h",".cpp",".hpp",".cc",".hh",".m",".mm",".ex",".exs",".lua",".dart",".vue",".svelte"],L7=[/\b(?:require_relative|require|include|import|use|using|from)\s*\(?\s*['"]([^'"`\n]+)['"]/g,/(?:^|[\n;])\s*import\s+([\w.]+)/g,/(?:^|[\n;])\s*from\s+([\w.]+)\s+import\b/g,/(?:^|[\n;])\s*using\s+([\w.]+)\s*;/g,/(?:^|[\n;])\s*use\s+([\w\\]+)/g,/#\s*include\s*[<"]([^>"\n]+)[>"]/g];function B7(Z){let $=new Set;for(let Q of L7)for(let J of Z.matchAll(Q)){let V=J[1].trim();if(V)$.add(V)}return $}var h4={id:"fallback",extensions:g4,specifiers:B7,resolve(Z,$,Q){let V=[W7($).toLowerCase(),...g4].filter((j,C,U)=>j&&U.indexOf(j)===C),Y=Z.includes("/")||Z.includes("\\"),X=Z.startsWith(".")||Y?Z.replace(/\\/g,"/"):Z.replace(/[.:]+/g,"/"),K=[N7(C7(H7($),X)).replace(/\\/g,"/"),X.replace(/^\.\//,"")];for(let j of K){if(Q.fileSet.has(j))return[j];for(let C of V){let U=j.endsWith(C)?j:`${j}${C}`;if(Q.fileSet.has(U))return[U];if(Q.fileSet.has(`${j}/index${C}`))return[`${j}/index${C}`]}}return[]}};var q7=[S4,w4,T4,x4,h4],EZ=new Map;for(let Z of q7)for(let $ of Z.extensions)EZ.set($,Z);var O7={".ts":"ts",".tsx":"ts",".js":"js",".jsx":"js",".mjs":"js",".cjs":"js",".py":"py",".pyi":"py",".go":"go",".rs":"rs",".swift":"swift",".java":"java",".rb":"ruby",".kt":"kotlin",".kts":"kotlin",".cs":"csharp",".php":"php",".scala":"scala",".c":"c",".h":"c",".cpp":"cpp",".hpp":"cpp",".cc":"cpp",".hh":"cpp",".m":"objc",".mm":"objc",".ex":"elixir",".exs":"elixir",".lua":"lua",".dart":"dart",".vue":"vue",".svelte":"svelte"};function tZ(Z){return EZ.get(m4(Z).toLowerCase())??null}function b4(Z){let $=m4(Z).toLowerCase();if(!EZ.has($))return null;return O7[$]??$.slice(1)}function eZ(){return new Set(EZ.keys())}var i4=new Set(["node_modules",".git",".next","dist","build","__pycache__","target",".venv","venv","env",".turbo","coverage",".beacon",".playwright-mcp","generated","migrations","alembic","migrate"]);function _7(Z=5){let $=performance.now();return async()=>{if(performance.now()-$>Z)await new Promise((Q)=>setImmediate(Q)),$=performance.now()}}var F7=()=>Promise.resolve();async function s4(Z,$,Q,J,V){let Y;try{Y=await D7($,{withFileTypes:!0})}catch{return}for(let X of Y){if(X.name.startsWith("."))continue;if(i4.has(X.name))continue;let K=vZ($,X.name);if(X.isDirectory()){await s4(Z,K,Q,J,V);continue}if(!X.isFile())continue;if(X.name.endsWith(".d.ts"))continue;if(!Q.has(o4(X.name).toLowerCase()))continue;J.push(WZ(Z,K))}await V()}async function A7(Z,$=F7){let Q=[];return await s4(Z,Z,eZ(),Q,$),Q.map((J)=>J.split(/[\\/]/).join("/")).sort()}function P7(Z){try{return JSON.parse(Z)}catch{}let $=Z.replace(/\/\*[^"]*?\*\//g,"").replace(/(^|[^:"])\/\/.*$/gm,"$1").replace(/,\s*([}\]])/g,"$1");return JSON.parse($)}function p4(Z){return Z.replace(/^\.\/?/,"").replace(/\/$/,"")}function a4(Z){let $=vZ(Z,"tsconfig.json");if(!l4($))return[];let Q;try{Q=P7(n4($,"utf8"))}catch{return[]}let J=Q.compilerOptions?.paths??{},V=p4(Q.compilerOptions?.baseUrl??"."),Y=[];for(let[X,K]of Object.entries(J)){if(!X.endsWith("/*")||!K.length)continue;let j=K[0];if(!j.endsWith("/*"))continue;let C=X.slice(0,-1),U=p4(j.slice(0,-1)),N=[V,U].filter(Boolean).join("/");Y.push({from:C,to:N})}return Y}function SZ(Z){let $=vZ(Z,"go.mod");if(!l4($))return null;try{let Q=/^\s*module\s+(\S+)/m.exec(n4($,"utf8"));return Q?Q[1]:null}catch{return null}}function p(Z){return Z.split(/[\\/]/).join("/")}function t4(Z){if(Z.length===1)return Z[0];let $=Z.map((V)=>p(V).split("/")),Q=$[0],J=0;for(;J<Q.length;J++)if(!$.every((V)=>V[J]===Q[J]))break;return Q.slice(0,J).join("/")||"/"}async function I7(Z,$,Q){let J=(Array.isArray(Z)?Z:[Z]).map((C)=>p(HZ(C))),V=p($?HZ($):J.length===1?J[0]:t4(J)),Y=new Map,X=[];for(let C of J){let U=p(WZ(V,C));for(let N of a4(C))X.push({from:N.from,to:[U,N.to].filter(Boolean).join("/")});for(let N of await A7(C,Q)){let L=p(vZ(C,N)),q=p(WZ(V,L));if(Y.has(q))continue;try{let H=await r4(L);Y.set(q,{path:q,abs:L,root:U||null,mtimeMs:H.mtimeMs,size:H.size})}catch{}await Q()}}let K=J.map(SZ).find(Boolean)??SZ(V);return{metas:[...Y.values()].sort((C,U)=>C.path.localeCompare(U.path)),ctx:{fileSet:new Set(Y.keys()),tsAliases:X,goModulePath:K}}}var c4=50000;function R7(Z){let $=0;for(let Q=0;Q<Z.length;Q++)if(Z.charCodeAt(Q)===10){if(Q-$>c4)return!0;$=Q+1}return Z.length-$>c4}async function d4(Z){let $=tZ(Z.path);if(!$||Z.size>200000)return new Set;try{let Q=await z7(Z.abs,"utf8");if(R7(Q))return new Set;return $.specifiers(Q)}catch{return new Set}}function e4(Z,$){let Q=(Array.isArray(Z)?Z:[Z]).map((H)=>p(HZ(H))),J=p($?HZ($):Q.length===1?Q[0]:t4(Q)),V=new Map,Y=new Map,X=[],K=null;function j(){X=[];for(let H of Q){let G=p(WZ(J,H));for(let B of a4(H))X.push({from:B.from,to:[G,B.to].filter(Boolean).join("/")})}K=Q.map(SZ).find(Boolean)??SZ(J)}function C(H){let G=H.split("/");for(let D=0;D<G.length;D++){let O=G[D];if(!O||O.startsWith("."))return!0;if(D<G.length-1&&i4.has(O))return!0}let B=G[G.length-1];if(B.endsWith(".d.ts"))return!0;return!eZ().has(o4(B).toLowerCase())}function U(H){let G=p(HZ(H));for(let B of Q)if(G===B||G.startsWith(`${B}/`)){let D=G.slice(B.length).replace(/^\/+/,"");if(C(D))return null;return{path:p(WZ(J,G)),root:p(WZ(J,B))||null}}return null}function N(){let H={fileSet:new Set(V.keys()),tsAliases:X,goModulePath:K},G=[...V.values()].sort((O,M)=>O.path.localeCompare(M.path)),B=[];for(let O of G){let M=tZ(O.path);if(!M)continue;let _=Y.get(O.path)??new Set,z=new Set;for(let R of _)for(let w of M.resolve(R,O.path,H)){if(!w||w===O.path||z.has(w))continue;z.add(w),B.push({from:O.path,to:w})}}return{files:G.map((O)=>({path:O.path,lang:b4(O.path),root:O.root,mtimeMs:O.mtimeMs,size:O.size})),edges:B}}async function L(){let H=_7(),{metas:G,ctx:B}=await I7(Z,$,H);V.clear(),Y.clear();for(let D of G)await H(),V.set(D.path,D),Y.set(D.path,await d4(D));return X=B.tsAliases??[],K=B.goModulePath??null,N()}async function q(H){let G=p(HZ(H));if(!Q.some((z)=>G===z||G.startsWith(`${z}/`)))return!1;let B=G.split("/").pop()??"";if(B==="tsconfig.json"||B==="go.mod"){let z=G.slice(0,G.length-B.length-1);if(Q.includes(z))return j(),!0;return!1}let D=U(H);if(!D)return!1;let O;try{O=await r4(G)}catch{let z=V.delete(D.path);return Y.delete(D.path),z}let M=V.get(D.path);if(M&&M.mtimeMs===O.mtimeMs&&M.size===O.size)return!1;let _={path:D.path,abs:G,root:D.root,mtimeMs:O.mtimeMs,size:O.size};return V.set(D.path,_),Y.set(D.path,await d4(_)),!0}return{seed:L,applyChange:q,snapshot:N}}function Z5(Z){let $=Object.keys(Z.tableVars),Q=new Map;if(!$.length){for(let X of Z.routeFiles)Q.set(X,[]);return Q}let J=new Map;for(let X of Z.edges){let K=J.get(X.from)??[];K.push(X.to),J.set(X.from,K)}let V=new Map($.map((X)=>[X,new RegExp(`(?:query\\.${X}\\b|\\.from\\(\\s*${X}\\b)`)])),Y=new Map($.map((X)=>[X,new RegExp(`(?:insert|update|delete)\\(\\s*${X}\\b`)]));for(let X of Z.routeFiles){let K=new Set([X]),j=[X];for(let L=0;L<2&&K.size<25;L++){let q=[];for(let H of j)for(let G of J.get(H)??[]){if(K.has(G)||K.size>=25)continue;K.add(G),q.push(G)}j=q}let C=new Set,U=new Set;for(let L of K){let q=Z.content(L);if(!q)continue;for(let H of $){if(!C.has(H)&&V.get(H).test(q))C.add(H);if(!U.has(H)&&Y.get(H).test(q))U.add(H)}}let N=[];for(let L of $){let q=C.has(L),H=U.has(L);if(!q&&!H)continue;N.push({table:Z.tableVars[L],access:q&&H?"read-write":H?"write":"read"})}Q.set(X,N)}return Q}function Q5(Z,$){if(/_JSON_OR_JSONB|\bJSONB\b|\bJSON\b/.test(Z))return"jsonb";let Q=Z.match(/\b(GUID|Uuid|UUID|String|Text|DateTime|Date|Time|BigInteger|SmallInteger|Integer|Boolean|Float|Numeric|Decimal|Vector|TSVECTOR|LargeBinary|Enum)\b\s*(\([^)]*\))?/);if(Q){let Y=Q[2]??"",X=Y.match(/\d+/)?.[0];switch(Q[1]){case"GUID":case"Uuid":case"UUID":return"uuid";case"String":return X?`varchar(${X})`:"varchar";case"Text":return"text";case"DateTime":return/timezone\s*=\s*True/.test(Y)?"timestamptz":"timestamp";case"Date":return"date";case"Time":return"time";case"BigInteger":return"bigint";case"SmallInteger":return"smallint";case"Integer":return"integer";case"Boolean":return"boolean";case"Float":return"float";case"Numeric":case"Decimal":return"numeric";case"Vector":return X?`vector(${X})`:"vector";case"TSVECTOR":return"tsvector";case"LargeBinary":return"bytea";case"Enum":return"varchar"}}let J=$.replace(/\s*\|\s*None/g,"").trim(),V=J.match(/^Optional\[([\s\S]*)\]$/);if(V)J=V[1].trim();if(/uuid/i.test(J))return"uuid";if(/datetime/i.test(J))return"timestamptz";if(/\bint\b/i.test(J))return"integer";if(/\bbool\b/i.test(J))return"boolean";if(/\bfloat\b/.test(J)&&!/\blist\b/.test(J))return"float";if(/\bdict\b|\blist\b|\bAny\b/.test(J))return"jsonb";return"text"}function kZ(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="(")Q++;else if(Z[J]===")"){if(Q--,Q===0)return Z.slice($+1,J)}return""}function E7(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="[")Q++;else if(Z[J]==="]"){if(Q--,Q===0)return Z.slice($+1,J)}return null}function S7(Z,$,Q){let J=Q.match(/__tablename__\s*=\s*["']([^"']+)["']/)?.[1],V=[],Y=[],X=[],K=/(\w+)\s*:\s*Mapped\s*\[/g,j;while(j=K.exec(Q)){let N=j.index+j[0].length-1,L=E7(Q,N);if(L===null)continue;let q=N+L.length+2,H=Q.slice(q).match(/^\s*=\s*(\w+)\s*\(/);if(!H||H[1]!=="mapped_column")continue;X.push({colName:j[1],pyType:L,argsAt:q+H[0].length-1})}let C=/(\w+)\s*=\s*(mapped_column|Column)\s*\(/g;while(j=C.exec(Q))X.push({colName:j[1],pyType:"",argsAt:j.index+j[0].length-1});X.sort((N,L)=>N.argsAt-L.argsAt);let U=new Set;for(let N of X){if(U.has(N.colName)||N.colName==="__tablename__")continue;U.add(N.colName);let L=kZ(Q,N.argsAt),q=/primary_key\s*=\s*True/.test(L)||void 0,H=/nullable\s*=\s*False/.test(L)?!1:!0,G=L.match(/ForeignKey\(\s*["']([^"']+?)\.([^"'.]+)["']/);if(V.push({name:N.colName,type:Q5(L,N.pyType),isPk:q,isFk:G?!0:void 0,nullable:H}),G)Y.push({column:N.colName,toTable:G[1],toColumn:G[2]})}return{name:Z,bases:$,tableName:J,columns:V,fks:Y}}function v7(Z){let $=[],Q=[],J=/\bTable\s*(\()\s*["']([^"']+)["']\s*,/g,V;while(V=J.exec(Z)){let Y=V[2],X=kZ(Z,V.index+V[0].indexOf("("));if(!/\bmetadata\b/.test(X)||!/\bColumn\s*\(/.test(X))continue;let K=[],j=/\bColumn\s*\(/g,C;while(C=j.exec(X)){let U=kZ(X,C.index+C[0].length-1),N=U.match(/^\s*["'](\w+)["']\s*,/)?.[1];if(!N)continue;let L=/primary_key\s*=\s*True/.test(U)||void 0,q=/nullable\s*=\s*False/.test(U)?!1:!0,H=U.match(/ForeignKey\(\s*["']([^"']+?)\.([^"'.]+)["']/);if(K.push({name:N,type:Q5(U,""),isPk:L,isFk:H?!0:void 0,nullable:q}),H)Q.push({fromTable:Y,fromColumn:N,toTable:H[1],toColumn:H[2]})}if(K.length)$.push({name:Y,columns:K})}return{tables:$,relations:Q}}function k7(Z){let $=new Map,Q={tables:[],relations:[]};for(let K of Z){if(!K.path.endsWith(".py"))continue;if(!/mapped_column\s*\(|__tablename__|\bTable\s*\(\s*["']/.test(K.content))continue;let j=v7(K.content);Q.tables.push(...j.tables),Q.relations.push(...j.relations);let C=/^class\s+(\w+)\s*\(([^)]*)\)\s*:/gm,U,N=[];while(U=C.exec(K.content))N.push({name:U[1],bases:U[2].split(",").map((L)=>L.trim().split(/[.[]/)[0]).filter(Boolean),at:U.index});for(let L=0;L<N.length;L++){let q=K.content.slice(N[L].at,N[L+1]?.at??K.content.length),H=S7(N[L].name,N[L].bases,q);$.set(H.name,H)}}if(![...$.values()].some((K)=>K.tableName)&&!Q.tables.length)return{tables:[],relations:[]};let J=(K,j=new Set)=>{if(j.has(K.name))return[];j.add(K.name);let C=[];for(let U of K.bases){let N=$.get(U);if(N&&!N.tableName)C.push(...J(N,j))}return C.push(...K.columns),C},V=[],Y=[];for(let K of $.values()){if(!K.tableName)continue;let j=J(K),C=new Map;for(let H of j)if(!C.has(H.name))C.set(H.name,H);let U=[...C.values()],N=(H)=>U.splice(U.findIndex((G)=>G.name===H),1)[0],L=U.some((H)=>H.name==="id")?N("id"):null,q=["created_at","updated_at","deleted_at"].filter((H)=>U.some((G)=>G.name===H)).map((H)=>N(H));V.push({name:K.tableName,columns:[...L?[L]:[],...U,...q]});for(let H of K.fks)Y.push({fromTable:K.tableName,fromColumn:H.column,toTable:H.toTable,toColumn:H.toColumn})}let X=new Set(V.map((K)=>K.name));for(let K of Q.tables)if(!X.has(K.name))V.push(K);return Y.push(...Q.relations.filter((K)=>!X.has(K.fromTable))),{tables:V,relations:Y}}function w7(Z){let $=Z.replace(/[?[\]]/g,"");return{String:"text",Int:"integer",BigInt:"bigint",Float:"float",Decimal:"numeric",Boolean:"boolean",DateTime:"timestamptz",Json:"jsonb",Bytes:"bytea"}[$]??$.toLowerCase()}function T7(Z){let $=[],Q=[];for(let J of Z){if(!J.path.endsWith(".prisma"))continue;let V=/model\s+(\w+)\s*\{([\s\S]*?)\}/g,Y;while(Y=V.exec(J.content)){let X=Y[1],K=Y[2].match(/@@map\(\s*["']([^"']+)["']\s*\)/)?.[1]??X,j=[];for(let C of Y[2].split(`
|
|
4
|
-
`)){let
|
|
5
|
-
`)){let V=J.trim();if(!V||V.startsWith("//")||V.startsWith("*")||V.startsWith("/*"))continue;let{annots:Y,rest:X}=m7(V);if(Q.push(...Y),!X)continue;let K=X,j="";while(K!==j)j=K,K=K.replace(/^(?:public|private|protected|static|final|transient|volatile)\s+/,"");let C=!K.includes("(")?K.match(/^([\w.$]+(?:<[^>]*>)?(?:\s*\[\s*\])?)\s+(\w+)\s*[;=]/):null;if(C)$.push({annots:Q,type:C[1],name:C[2]});Q=[]}return $}function p7(Z){let $=[],Q=/\bclass\s+(\w+)/g,J;while(J=Q.exec(Z))$.push({name:J[1],at:J.index});let V=[];for(let Y=0;Y<$.length;Y++){let X=Z.slice(Y===0?0:$[Y-1].at,$[Y].at);if(!/@Entity\b/.test(X))continue;let K=X.match(/@Table\s*\([^)]*\)/)?.[0]??"",j=wZ(K,"name")??$[Y].name,C=Z.slice($[Y].at,$[Y+1]?.at??Z.length),U=b7(C),N=U.find((q)=>q.annots.some((H)=>/@Id\b/.test(H))),L=N?wZ(N.annots.find((q)=>/@Column\b/.test(q))??"","name")??N.name:"id";V.push({className:$[Y].name,tableName:j,idColumn:L,fields:U})}return V}function c7(Z){let $=Z.filter((K)=>K.path.endsWith(".java")&&/@Entity\b/.test(K.content));if(!$.length)return{tables:[],relations:[]};let Q=$.flatMap((K)=>p7(K.content));if(!Q.length)return{tables:[],relations:[]};let J=new Map(Q.map((K)=>[K.className,K.tableName])),V=new Map(Q.map((K)=>[K.className,K.idColumn])),Y=[],X=[];for(let K of Q){let j=[];for(let C of K.fields){let U=C.annots.join(" ");if(/@Transient\b/.test(U))continue;let N=J5(C.type);if(/@ManyToOne\b|@OneToOne\b|@OneToMany\b|@ManyToMany\b/.test(U)||J.has(N)){let O=C.annots.find((_)=>/@JoinColumn\b/.test(_)),M=O?wZ(O,"name"):void 0;if(M){j.push({name:M,type:"bigint",isFk:!0,nullable:$5(U,"nullable")??!0});let _=J.get(N);if(_)X.push({fromTable:K.tableName,fromColumn:M,toTable:_,toColumn:V.get(N)??"id"})}continue}if(g7.test(N))continue;let H=C.annots.find((O)=>/@Column\b/.test(O))??"",G=wZ(H,"name")??C.name,B=C.annots.some((O)=>/@Id\b/.test(O)),D=$5(H,"nullable");j.push({name:G,type:h7(C.type),...B?{isPk:!0}:{},...D!==void 0?{nullable:D}:{}})}Y.push({name:K.tableName,columns:j})}return{tables:Y,relations:X}}function V5(Z){let $=f7(Z);if($.tables.length)return $;let Q=T7(Z);if(Q.tables.length)return Q;let J=k7(Z);if(J.tables.length)return J;return c7(Z)}var d7=["GET","POST","PUT","PATCH","DELETE"];function l7(Z){let $=Z.match(/(?:^|\/)app\/(.+)\/route\.(?:ts|tsx|js|jsx|mjs)$/);if(!$)return null;let Q=$[1].split("/").filter((J)=>!(J.startsWith("(")&&J.endsWith(")"))).map((J)=>{let V=J.match(/^\[{1,2}(?:\.\.\.)?([^\]]+)\]{1,2}$/);return V?`{${V[1]}}`:J});if(Q[0]!=="api")return null;return`/${Q.join("/")}`}function K5(Z){let $=[];for(let Q of Z){let J=l7(Q.path);if(!J)continue;for(let V of d7)if(new RegExp(`export\\s+(?:async\\s+)?(?:function|const)\\s+${V}\\b`).test(Q.content))$.push({method:V,path:J,uses:[],file:Q.path})}return $.sort((Q,J)=>`${Q.path} ${Q.method}`.localeCompare(`${J.path} ${J.method}`))}var n7=/(^|\/)app\/.*\/route\.(ts|tsx|js|jsx|mjs)$/,r7=/\.(ts|py)$/,o7=/(schema|model)/i,i7=/(\.(test|spec)\.[jt]sx?$)|(^|\/)(tests?|__tests__|__mocks__)\/|(^|\/)test_[^/]+\.py$|_test\.py$/;function Z4(Z){if(i7.test(Z))return!1;if(Z.endsWith(".prisma"))return!0;if(n7.test(Z))return!0;if(Z.endsWith(".java"))return!0;return r7.test(Z)&&o7.test(Z)}function Y5(Z,$=300){return Z.filter(Z4).slice(0,$)}import{z as l}from"zod";import{and as P5,eq as CZ,inArray as P8,notInArray as I8}from"drizzle-orm";import{z as A}from"zod";import{and as D8,eq as fZ,inArray as J4,notInArray as z8,or as _8,sql as F8}from"drizzle-orm";var X5=300,G5=50;function M5(Z){for(let $=0;$<Z.length;$++)for(let Q=$+1;Q<Z.length;Q++){let J=Z[$],V=Z[Q];if(J.x<V.x+X5&&J.x+X5>V.x&&J.y<V.y+G5&&J.y+G5>V.y)return!0}return!1}import{eq as s7}from"drizzle-orm";var U5=(Z)=>Z.replace(/\{[^}]*\}/g,"{}");function a7(Z,$){if(Z.method.toUpperCase()!==$.method.toUpperCase())return!1;let Q=U5(Z.path),J=U5($.path);return J===Q||J.endsWith(Q)}async function j5(Z=b){let[$,Q]=await Promise.all([Z.query.endpoint.findMany({where:(V,{ne:Y})=>Y(V.source,"INTROSPECTION")}),Z.query.endpoint.findMany({where:(V,{eq:Y})=>Y(V.source,"INTROSPECTION")})]),J={collapsed:0,mappings:[]};for(let V of $){let Y=Q.find((X)=>a7(V,X));if(!Y)continue;await Z.delete(E).where(s7(E.id,V.id)),J.collapsed++,J.mappings.push({planned:`${V.method} ${V.path}`,code:`${Y.method} ${Y.path}`})}return J}import{and as H5,inArray as t7,isNull as W5,ne as C5,or as e7}from"drizzle-orm";var Z8=new Set(["DONE","CANCELLED","DEPRIORITIZED"]);async function $8(Z){let $=await Z.query.node.findMany({where:(J,{and:V,eq:Y,isNotNull:X})=>V(Y(J.view,"ROADMAP"),X(J.planId)),columns:{planId:!0,status:!0}}),Q=new Map;for(let J of $){let V=J.planId;Q.set(V,(Q.get(V)??!0)&&Z8.has(J.status))}return[...Q.entries()].filter(([,J])=>J).map(([J])=>J)}async function N5(Z=b){let $=await $8(Z),Q=(Y)=>$.length?e7(W5(Y.planId),t7(Y.planId,$)):W5(Y.planId),J=await Z.delete(P).where(H5(C5(P.source,"INTROSPECTION"),Q(P))).returning({id:P.id}),V=await Z.delete(E).where(H5(C5(E.source,"INTROSPECTION"),Q(E))).returning({id:E.id});return{tables:J.length,endpoints:V.length}}var Q8=(Z)=>Z&&Number.isFinite(Z)&&Z>0?Math.min(3.2,Math.max(0.7,Z)):1.8;function J8(Z,$){let Q=Q8($.viewportAspect)*($.aspectSlack??1),J=Z.reduce((V,Y)=>V+(Y.w+$.gapX)*(Y.h+$.gapY),0);return Math.max($.minBandW,Math.round(Math.sqrt(J*Q)))}function L5(Z,$){let Q=J8(Z,$),J=new Map,V=0,Y=0,X=0;for(let K of Z){if(V>0&&V+K.w>Q)Y+=X+$.gapY,V=0,X=0;J.set(K.id,{x:V,y:Y}),X=Math.max(X,K.h),V+=K.w+$.gapX}return J}var QZ=320,$4=30,V8=36,K8=30,Y8=16;function JZ(Z){return V8+Math.max(0,Z)*K8+Y8}var GZ=60,X8=300,TZ=10,G8=84,yZ=72,M8=3*QZ,U8=1.7;var uZ=(Z)=>(Z??"").trim()||"\u2014";function j8(Z,$,Q){let J=new Map;for(let Y of Z.uses){if(!$.has(Y.tableId))continue;J.set(Y.tableId,(J.get(Y.tableId)??0)+1)}let V=null;for(let[Y,X]of J){if(V===null){V=Y;continue}let K=J.get(V);if(X>K){V=Y;continue}if(X<K)continue;let j=Q?.get(Y)??0,C=Q?.get(V)??0;if(j<C)V=Y;else if(j===C&&$.get(Y).localeCompare($.get(V))<0)V=Y}return V}function Q4(Z,$){let Q=new Map(Z.map((V)=>[V.id,V.name])),J=new Map;for(let V of $)for(let Y of V.uses){if(!Q.has(Y.tableId))continue;J.set(Y.tableId,(J.get(Y.tableId)??0)+1)}return new Map($.map((V)=>[V.id,j8(V,Q,J)]))}var H8=(Z,$)=>Z.path.localeCompare($.path)||Z.method.localeCompare($.method)||Z.id.localeCompare($.id);function B5(Z,$,Q={}){let J=Q4(Z,$),V=new Map,Y=[];for(let G of[...$].sort(H8)){let B=J.get(G.id)??null;if(B){let D=V.get(B);if(D)D.push(G);else V.set(B,[G])}else Y.push(G)}let X=(G)=>{let B=V.get(G.id)?.length??0;return JZ(G.columnCount)+(B?TZ+B*GZ:0)+$4},K=Array.from(new Set(Z.map((G)=>uZ(G.domain)))),j=K.filter((G)=>G!=="\u2014").sort(),C=K.includes("\u2014")?[...j,"\u2014"]:j,U=[];for(let G of C){let B=Z.filter((z)=>uZ(z.domain)===G).sort((z,R)=>z.name.localeCompare(R.name)),D=B.reduce((z,R)=>z+X(R),0),O=Math.max(1,Math.min(12,B.length,Math.round(Math.sqrt(D/QZ)))),M=Array(O).fill(0),_=new Map;for(let z of B){let R=0;for(let w=1;w<O;w++)if(M[w]<M[R])R=w;_.set(z.id,{x:R*QZ,y:M[R]}),M[R]+=X(z)}U.push({d:G,w:O*QZ,h:Math.max(...M,0),tableLocal:_})}let N=L5(U.map((G)=>({id:G.d,w:G.w,h:G.h})),{gapX:G8,gapY:yZ,viewportAspect:Q.viewportAspect,minBandW:M8,aspectSlack:U8}),L=new Map,q=new Map,H=0;for(let G of U){let B=N.get(G.d),D=Z.filter((O)=>G.tableLocal.has(O.id));for(let O of D){let M=G.tableLocal.get(O.id),_=B.x+M.x,z=B.y+M.y;L.set(O.id,{x:_,y:z}),(V.get(O.id)??[]).forEach((w,T)=>{q.set(w.id,{x:_,y:z+JZ(O.columnCount)+TZ+T*GZ})})}H=Math.max(H,B.y+G.h)}if(Y.length){let G=H+yZ,B=Math.max(1,Math.min(4,Math.ceil(Math.sqrt(Y.length/2))));Y.forEach((D,O)=>{q.set(D.id,{x:O%B*X8,y:G+Math.floor(O/B)*GZ})})}return{tables:L,endpoints:q}}function q5(Z,$,Q){let J=Q4($,Q),V=new Map;for(let q of Q){let H=J.get(q.id);if(H)V.set(H,(V.get(H)??0)+1)}let Y=(q)=>{let H=V.get(q.id)??0;return q.y+JZ(q.columnCount)+(H?TZ+H*GZ:0)},X=uZ(Z.domain),K=$.filter((q)=>uZ(q.domain)===X);if(!K.length){let q=$.length?Math.max(...$.map(Y),...Q.map((H)=>H.y+GZ)):0;return{x:0,y:$.length||Q.length?q+yZ:0}}let j=Math.min(...K.map((q)=>q.x)),C=K.map((q)=>Math.max(0,Math.round((q.x-j)/QZ))),U=Math.min(12,Math.max(...C)+1),N=Array(U).fill(Math.min(...K.map((q)=>q.y)));K.forEach((q,H)=>{let G=Math.min(C[H],U-1);N[G]=Math.max(N[G],Y(q)+$4)});let L=0;for(let q=1;q<U;q++)if(N[q]<N[L])L=q;return{x:j+L*QZ,y:N[L]}}function O5(Z,$,Q){let J=Q4($,[...Q,Z]),V=J.get(Z.id),Y=V?$.find((K)=>K.id===V):void 0;if(Y){let K=Q.filter((U)=>J.get(U.id)===Y.id),j=Y.y+JZ(Y.columnCount)+TZ,C=K.length?Math.max(...K.map((U)=>U.y))+GZ:j;return{x:Y.x,y:C}}let X=[...$.map((K)=>K.y+JZ(K.columnCount)),...Q.map((K)=>K.y+GZ)];return{x:0,y:X.length?Math.max(...X)+yZ:0}}function D5(Z){let $=QZ-20;for(let Q=0;Q<Z.length;Q++)for(let J=Q+1;J<Z.length;J++){let V=Z[Q],Y=Z[J],X=JZ(V.columnCount),K=JZ(Y.columnCount);if(V.x<Y.x+$&&V.x+$>Y.x&&V.y<Y.y+K&&V.y+X>Y.y)return!0}return!1}import{eq as _5}from"drizzle-orm";z5();async function F5(Z=b,$){let[Q,J]=await Promise.all([Z.query.dbTable.findMany({with:{columns:{columns:{id:!0}}},orderBy:(X,{asc:K})=>K(X.name)}),Z.query.endpoint.findMany({with:{tables:{columns:{tableId:!0}}}})]),V=B5(Q.map((X)=>({id:X.id,name:X.name,domain:X.domain,columnCount:X.columns.length})),J.map((X)=>({id:X.id,method:X.method,path:X.path,uses:X.tables.map((K)=>({tableId:K.tableId}))})),{viewportAspect:$}),Y=0;for(let X of Q){let K=V.tables.get(X.id);if(!K||Math.round(K.x)===Math.round(X.x)&&Math.round(K.y)===Math.round(X.y))continue;await Z.update(P).set({x:K.x,y:K.y}).where(_5(P.id,X.id)),Y++}for(let X of J){let K=V.endpoints.get(X.id);if(!K||Math.round(K.x)===Math.round(X.x)&&Math.round(K.y)===Math.round(X.y))continue;await Z.update(E).set({x:K.x,y:K.y}).where(_5(E.id,X.id)),Y++}return Y}var A8=A.object({tables:A.array(A.object({name:A.string().trim().min(1),domain:A.string().nullish(),description:A.string().nullish(),columns:A.array(A.object({name:A.string().trim().min(1),type:A.string().trim().min(1),isPk:A.boolean().optional(),isFk:A.boolean().optional(),nullable:A.boolean().optional(),note:A.string().nullish()})).default([])})).default([]),relations:A.array(A.object({fromTable:A.string(),fromColumn:A.string(),toTable:A.string(),toColumn:A.string(),label:A.string().nullish()})).default([]),endpoints:A.array(A.object({method:A.string().trim().min(1),path:A.string().trim().min(1),domain:A.string().nullish(),description:A.string().nullish(),uses:A.array(A.object({table:A.string(),access:A.string().default("read")})).default([])})).default([])});async function xZ(Z=b){let[$]=await Z.insert(a).values({id:"singleton",version:1}).onConflictDoUpdate({target:a.id,set:{version:F8`${a.version} + 1`}}).returning();return $.version}async function A5(Z,$=b,Q={}){let J=A8.parse(Z),V=J.tables.length>0,Y=J.endpoints.length>0,X=J.tables.map((M)=>M.name);if(V)await $.delete(P).where(X.length?D8(fZ(P.source,"INTROSPECTION"),z8(P.name,X)):fZ(P.source,"INTROSPECTION"));let K=await $.query.dbTable.findMany({columns:{id:!0,name:!0,domain:!0,x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),j=await $.query.endpoint.findMany({columns:{id:!0,method:!0,path:!0,x:!0,y:!0},with:{tables:{columns:{tableId:!0}}}}),C=new Map(K.map((M)=>[M.name,M])),U=K.map((M)=>({id:M.id,name:M.name,domain:M.domain,columnCount:M.columns.length,x:M.x,y:M.y})),N=j.map((M)=>({id:M.id,method:M.method,path:M.path,uses:M.tables.map((_)=>({tableId:_.tableId})),x:M.x,y:M.y})),L=new Map;for(let M of J.tables){if(C.has(M.name))continue;let _=q5({domain:M.domain??null,columnCount:M.columns.length},U,N);L.set(M.name,_),U.push({id:`new:${M.name}`,name:M.name,domain:M.domain??null,columnCount:M.columns.length,..._})}let q=new Map;for(let M of J.tables){let _=C.get(M.name),z=L.get(M.name),R=_?.x??z?.x??0,w=_?.y??z?.y??0,[T]=await $.insert(P).values({name:M.name,domain:M.domain??null,description:M.description??null,source:"INTROSPECTION",x:R,y:w}).onConflictDoUpdate({target:P.name,set:{...M.domain!=null?{domain:M.domain}:{},...M.description!=null?{description:M.description}:{},source:"INTROSPECTION"}}).returning();if(q.set(M.name,T.id),await $.delete(e).where(fZ(e.tableId,T.id)),M.columns.length)await $.insert(e).values(M.columns.map((x,I)=>({tableId:T.id,name:x.name,type:x.type,isPk:x.isPk??!1,isFk:x.isFk??!1,nullable:x.nullable??!0,note:x.note??null,ord:I})))}let H=[...q.values()];if(H.length)await $.delete(d).where(_8(J4(d.fromTableId,H),J4(d.toTableId,H)));for(let M of J.relations){let _=q.get(M.fromTable),z=q.get(M.toTable);if(!_||!z)continue;await $.insert(d).values({fromTableId:_,toTableId:z,fromColumn:M.fromColumn,toColumn:M.toColumn,label:M.label??`${M.fromColumn} \u2192 ${M.toTable}.${M.toColumn}`})}let G=new Set(J.endpoints.map((M)=>`${M.method} ${M.path}`));if(Y){let _=(await $.query.endpoint.findMany({where:(z,{eq:R})=>R(z.source,"INTROSPECTION")})).filter((z)=>!G.has(`${z.method} ${z.path}`)).map((z)=>z.id);if(_.length)await $.delete(E).where(J4(E.id,_))}for(let M of U)if(M.id.startsWith("new:"))M.id=q.get(M.name)??M.id;for(let M of J.endpoints){let _=await $.query.endpoint.findFirst({where:(T,{and:x,eq:I})=>x(I(T.method,M.method),I(T.path,M.path))}),z,R;if(_)z=_.x,R=_.y;else{let T={id:`new:${M.method} ${M.path}`,method:M.method,path:M.path,uses:M.uses.map((I)=>({tableId:q.get(I.table)??""})).filter((I)=>I.tableId)},x=O5(T,U,N);z=x.x,R=x.y,N.push({...T,x:z,y:R})}let[w]=await $.insert(E).values({method:M.method,path:M.path,domain:M.domain??null,description:M.description??null,source:"INTROSPECTION",x:z,y:R}).onConflictDoUpdate({target:[E.method,E.path],set:{...M.domain!=null?{domain:M.domain}:{},...M.description!=null?{description:M.description}:{},source:"INTROSPECTION"}}).returning();if(!Q.partial||M.uses.length>0)await $.delete(i).where(fZ(i.endpointId,w.id));for(let T of M.uses){let x=q.get(T.table)??(await $.query.dbTable.findFirst({where:(I,{eq:UZ})=>UZ(I.name,T.table)}))?.id;if(!x)continue;await $.insert(i).values({endpointId:w.id,tableId:x,access:T.access})}}await j5($),await N5($);let B=await $.query.dbTable.findMany({where:(M,{eq:_})=>_(M.source,"INTROSPECTION"),columns:{x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),D=await $.select({x:E.x,y:E.y}).from(E);if(D5(B.map((M)=>({x:M.x,y:M.y,columnCount:M.columns.length})))||M5(D))await F5($);let O=await xZ($);return{tables:J.tables.length,relations:J.relations.length,endpoints:J.endpoints.length,version:O}}var I5=l.object({files:l.array(l.object({path:l.string().trim().min(1),root:l.string().nullish(),lang:l.string().nullish(),mtimeMs:l.number().nullish(),size:l.number().nullish()})).default([]),edges:l.array(l.object({from:l.string().trim().min(1),to:l.string().trim().min(1)})).default([])});function R5(Z,$){let Q=new Map;for(let L of Z)Q.set(L,[]);for(let L of $)Q.get(L.from)?.push(L.to);let J=new Map,V=new Map,Y=new Set,X=[],K=new Map,j=[],C=0,U=0;for(let L of Z){if(J.has(L))continue;let q=[{v:L,iter:0}];J.set(L,C),V.set(L,C),C++,X.push(L),Y.add(L);while(q.length){let H=q[q.length-1],G=Q.get(H.v)??[];if(H.iter<G.length){let B=G[H.iter++];if(!J.has(B))J.set(B,C),V.set(B,C),C++,X.push(B),Y.add(B),q.push({v:B,iter:0});else if(Y.has(B))V.set(H.v,Math.min(V.get(H.v),J.get(B)))}else{if(V.get(H.v)===J.get(H.v)){let D=0,O;do O=X.pop(),Y.delete(O),K.set(O,U),D++;while(O!==H.v);j.push(D),U++}q.pop();let B=q[q.length-1];if(B)V.set(B.v,Math.min(V.get(B.v),V.get(H.v)))}}}let N=new Set;for(let L of $){let q=K.get(L.from);if(q!==void 0&&q===K.get(L.to)&&j[q]>1)N.add(`${L.from}|${L.to}`)}return N}async function E5(Z,$=b){let Q=I5.parse(Z),J=Q.files.map((N)=>N.path),V=new Set(J),Y=Q.edges.filter((N)=>V.has(N.from)&&V.has(N.to)&&N.from!==N.to),X=R5(J,Y),K=new Map,j=new Map;for(let N of Y)j.set(N.from,(j.get(N.from)??0)+1),K.set(N.to,(K.get(N.to)??0)+1);await $.delete(y).where(I8(y.path,J));for(let N of Q.files){let L={root:N.root??null,lang:N.lang??null,mtimeMs:N.mtimeMs??null,size:N.size??null,inDegree:K.get(N.path)??0,outDegree:j.get(N.path)??0};await $.insert(y).values({path:N.path,...L}).onConflictDoUpdate({target:y.path,set:L})}await $.delete(f);let C=0;if(Y.length)await $.insert(f).values(Y.map((N)=>{let L=X.has(`${N.from}|${N.to}`);if(L)C++;return{fromPath:N.from,toPath:N.to,circular:L}}));let U=await xZ($);return await $.update(a).set({codeGraphSyncedAt:new Date}).where(CZ(a.id,"singleton")),{files:Q.files.length,edges:Y.length,circular:C,version:U}}var R8=(Z,$)=>`${Z}\x00${$}`;function V4(Z){let $=I5.parse(Z),Q=$.files.map((U)=>U.path),J=new Set(Q),V=$.edges.filter((U)=>J.has(U.from)&&J.has(U.to)&&U.from!==U.to),Y=R5(Q,V),X=new Map,K=new Map;for(let U of V)K.set(U.from,(K.get(U.from)??0)+1),X.set(U.to,(X.get(U.to)??0)+1);let j=new Map;for(let U of $.files)j.set(U.path,{root:U.root??null,lang:U.lang??null,mtimeMs:U.mtimeMs??null,size:U.size??null,inDegree:X.get(U.path)??0,outDegree:K.get(U.path)??0});let C=new Map;for(let U of V)C.set(R8(U.from,U.to),{from:U.from,to:U.to,circular:Y.has(`${U.from}|${U.to}`)});return{files:j,edges:C}}var E8=(Z,$)=>Z.root===$.root&&Z.lang===$.lang&&Z.mtimeMs===$.mtimeMs&&Z.size===$.size&&Z.inDegree===$.inDegree&&Z.outDegree===$.outDegree;async function S5(Z,$,Q=b){for(let[K,j]of $.files){let C=Z.files.get(K);if(C&&E8(C,j))continue;let U={root:j.root,lang:j.lang,mtimeMs:j.mtimeMs,size:j.size,inDegree:j.inDegree,outDegree:j.outDegree};await Q.insert(y).values({path:K,...U}).onConflictDoUpdate({target:y.path,set:U})}let J=[...Z.files.keys()].filter((K)=>!$.files.has(K));if(J.length)await Q.delete(y).where(P8(y.path,J));for(let[K,j]of Z.edges)if(!$.edges.has(K))await Q.delete(f).where(P5(CZ(f.fromPath,j.from),CZ(f.toPath,j.to)));let V=[];for(let[K,j]of $.edges){let C=Z.edges.get(K);if(!C)V.push({fromPath:j.from,toPath:j.to,circular:j.circular});else if(C.circular!==j.circular)await Q.update(f).set({circular:j.circular}).where(P5(CZ(f.fromPath,j.from),CZ(f.toPath,j.to)))}if(V.length)await Q.insert(f).values(V);let Y=await xZ(Q);await Q.update(a).set({codeGraphSyncedAt:new Date}).where(CZ(a.id,"singleton"));let X=0;for(let K of $.edges.values())if(K.circular)X++;return{files:$.files.size,edges:$.edges.size,circular:X,version:Y}}var T8=/[/\\](node_modules|\.git|\.next|dist|build|__pycache__|target|\.venv|venv|\.beacon|\.playwright-mcp|generated|coverage)[/\\]/;function y8(Z){try{let $=DZ(Z,"beacon.config.json");if(k5($)){let Q=JSON.parse(S8($,"utf8"));if(Array.isArray(Q.roots)&&Q.roots.length)return Q.roots.map((J)=>w8(Z,J))}}catch{}return[Z]}function w5(Z){let $=y8(Z.path),Q=nZ(Z.id),J=IZ(VZ(Z.id)),V=e4($,Z.path);async function Y(){let G=Y5(V.snapshot().files.map((_)=>_.path));for(let _ of $)for(let z of["prisma/schema.prisma","schema.prisma"]){let R=DZ(_,z);if(k5(R))G.push(X(R))}let B=[];for(let _ of G)try{B.push({path:_,content:await v5(DZ(Z.path,_),"utf8")})}catch{}let D=V5(B),O=K5(B);if(!D.tables.length&&!O.length)return;if(O.length&&D.tableVars&&Object.keys(D.tableVars).length){let z=V.snapshot().edges,R=new Set(O.map((I)=>I.file)),w=new Map;for(let I of z){let UZ=w.get(I.from)??[];UZ.push(I.to),w.set(I.from,UZ)}for(let I=0;I<2;I++)for(let UZ of[...R])for(let m5 of w.get(UZ)??[])R.add(m5);let T=new Map;for(let I of[...R].slice(0,600))try{T.set(I,await v5(DZ(Z.path,I),"utf8"))}catch{}let x=Z5({routeFiles:[...new Set(O.map((I)=>I.file))],edges:z,content:(I)=>T.get(I)??null,tableVars:D.tableVars});for(let I of O)I.uses=x.get(I.file)??[]}let M=await A5({tables:D.tables,relations:D.relations,endpoints:O},J,{partial:!0});console.log(`[beacon-inline] schema synced (${Z.name}): ${M.tables} tables / ${M.endpoints} endpoints`)}function X(G){return k8(Z.path,G).split(/[\\/]/).join("/")}let K=null,j=!1,C=new Set,U=null,N=!1;async function L(){if(N){q();return}N=!0;try{if(await Q,j)K=null,j=!1;if(K===null){let O=await V.seed(),M=await E5(O,J);K=V4(O),console.log(`[beacon-inline] code-graph synced (${Z.name}): ${M.files} files / ${M.edges} imports${M.circular>0?` (${M.circular} circular)`:""}`),await Y();return}let G=[...C];C.clear();let B=G.some((O)=>Z4(X(O))),D=!1;for(let O of G)if(await V.applyChange(O))D=!0;if(D){let O=V4(V.snapshot()),M=await S5(K,O,J);K=O,console.log(`[beacon-inline] code-graph updated (${Z.name}): ${M.files} files / ${M.edges} imports${M.circular>0?` (${M.circular} circular)`:""}`)}if(B)await Y()}catch(G){console.error(`[beacon-inline] error (${Z.name}):`,G instanceof Error?G.message:G)}finally{N=!1}}function q(){if(U)clearTimeout(U);U=setTimeout(L,600)}let H=[];for(let G of $)try{let B=v8(G,{recursive:!0,persistent:!0},(D,O)=>{if(!O){j=!0,q();return}let M=String(O);if(T8.test(`/${M}`))return;C.add(DZ(G,M)),q()});B.on("error",(D)=>console.error(`[beacon-inline] watcher error (${Z.name}):`,D)),H.push(B)}catch(B){console.error(`[beacon-inline] live watch unavailable for ${G} (${Z.name}):`,B instanceof Error?B.message:B)}return console.log(`[beacon-inline] watching ${Z.name} (${$.join(", ")}) \u2014 initial extract\u2026`),L(),{async stop(){if(U)clearTimeout(U);for(let G of H)G.close()}}}function f8(Z){let $=Z.limit??6,Q=Z.hardCap??12,J=new Map,V=0,Y=new Set;function X(G){let B=J.get(G);if(B)B.seq=++V}function K(G){if(J.has(G.id))return X(G.id);if(!Z.exists(G.path))return;J.set(G.id,{handle:Z.start(G),seq:++V})}function j(){let G=null,B=1/0;for(let[D,O]of J){if(Y.has(D))continue;if(O.seq<B)B=O.seq,G=D}if(G)J.get(G).handle.stop(),J.delete(G)}function C(){let G=Z.list().filter((B)=>Z.exists(B.path)).slice(0,$);Y=new Set(G.map((B)=>B.id));for(let B of G)K(B);for(let[B,D]of[...J]){let O=Z.get(B);if(!O||!Z.exists(O.path))D.handle.stop(),J.delete(B)}}function U(G){if(J.has(G))return X(G);let B=Z.get(G);if(!B||!Z.exists(B.path))return;if(J.size>=Q)j();if(J.size>=Q)return;J.set(G,{handle:Z.start(B),seq:++V})}async function N(G){let B=J.get(G);if(!B)return;J.delete(G),await B.handle.stop()}function L(G){return J.has(G)}function q(){return[...J.keys()]}async function H(){await Promise.all([...J.values()].map((G)=>G.handle.stop())),J.clear()}return{reconcile:C,ensureWatcher:U,stopWatcher:N,isWatching:L,activeIds:q,stopAll:H}}var x8=globalThis,g8=x8.__beaconWatcherManager??=f8({list:FZ,get:g,exists:u8,start:(Z)=>w5(Z)});async function T5(Z){await g8.stopWatcher(Z)}async function y5(Z){if(!g(Z))return{ok:!1,removed:!1,fallbackId:r(),error:"unknown workspace"};O4(Z),B4(Z),await T5(Z),R4(VZ(Z)),P4(Z);try{h8(n(Z),{recursive:!0,force:!0})}catch($){return{ok:!1,removed:!0,fallbackId:r(),error:$ instanceof Error?$.message:String($)}}return{ok:!0,removed:!0,fallbackId:r()}}var K4=process.argv.slice(3),x5=K4.includes("--yes")||K4.includes("-y"),MZ=K4.find((Z)=>!Z.startsWith("-")),u5=(Z)=>`\x1B[32m\u2713\x1B[0m ${Z}`,g5=(Z)=>`\x1B[2m${Z}\x1B[0m`,h5=(Z)=>`
|
|
6
|
-
\x1B[1m${Z}\x1B[0m`;function
|
|
7
|
-
`),process.exit(0);async function
|
|
3
|
+
var b5=Object.defineProperty;var p5=(Z)=>Z;function c5(Z,$){this[Z]=p5.bind(null,$)}var gZ=(Z,$)=>{for(var Q in $)b5(Z,Q,{get:$[Q],enumerable:!0,configurable:!0,set:c5.bind($,Q)})};var Y4=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var G4={};gZ(G4,{provisionDb:()=>$6});import{createClient as d5}from"@libsql/client";import{drizzle as l5}from"drizzle-orm/libsql";import{migrate as n5}from"drizzle-orm/libsql/migrator";import{readMigrationFiles as r5}from"drizzle-orm/migrator";import{dirname as hZ,join as o5}from"path";import{fileURLToPath as i5}from"url";async function zZ(Z,$){return(await Z.execute({sql:"SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?",args:[$]})).rows.length>0}async function e5(Z,$){let Q=await Z.execute(`PRAGMA table_info("${$}")`);return new Set(Q.rows.map((J)=>String(J.name)))}async function X4(Z){if(!await zZ(Z,"__drizzle_migrations"))return 0;let $=await Z.execute('SELECT count(*) AS n FROM "__drizzle_migrations"');return Number($.rows[0]?.n??0)}async function Z6(Z){for(let[$,Q]of Object.entries(t5)){if(!await zZ(Z,$))continue;let J=await e5(Z,$);for(let V of Q){if(!J.has(V))continue;await Z.execute(`UPDATE "${$}" SET "${V}" = CAST((julianday("${V}") - 2440587.5) * 86400000 AS INTEGER) WHERE typeof("${V}") = 'text'`)}}}async function $6(Z,$=a5){let Q=d5({url:Z});try{await Q.execute("PRAGMA journal_mode = WAL;"),await Q.execute("PRAGMA foreign_keys = ON;"),await Q.execute("PRAGMA busy_timeout = 5000;");let J=await zZ(Q,"__drizzle_migrations"),V=await zZ(Q,"Node"),Y=!1;if(V&&!J){let K=r5({migrationsFolder:$})[0];if(K)await Q.execute('CREATE TABLE IF NOT EXISTS "__drizzle_migrations" (id SERIAL PRIMARY KEY, hash text NOT NULL, created_at numeric)'),await Q.execute({sql:'INSERT INTO "__drizzle_migrations" ("hash", "created_at") VALUES (?, ?)',args:[K.hash,K.folderMillis]}),Y=!0}let X=await X4(Q);if(await n5(l5(Q),{migrationsFolder:$}),await X4(Q)>X)Y=!0;return await Z6(Q),{migrated:Y}}finally{Q.close()}}var s5,a5,t5;var M4=Y4(async()=>{s5=hZ(hZ(hZ(i5(import.meta.url)))),a5=process.env.BEACON_MIGRATIONS_DIR||o5(s5,"drizzle"),t5={Node:["createdAt","updatedAt"],Note:["createdAt","updatedAt"],DbTable:["createdAt","updatedAt"],Endpoint:["createdAt","updatedAt"],DraftTable:["createdAt"],SyncState:["codeGraphSyncedAt","updatedAt"],AppSetting:["updatedAt"],ProjectMeta:["updatedAt"],CodeFile:["updatedAt"]}});import{mkdirSync as W8,renameSync as C8,rmSync as N8,writeFileSync as L8}from"fs";import{dirname as B8}from"path";function q8(Z,$){W8(B8(Z),{recursive:!0});let Q=`${Z}.tmp`;try{L8(Q,$),C8(Q,Z)}catch(J){throw N8(Q,{force:!0}),J}}function O8(Z,$,Q=!1){q8(Z,JSON.stringify($,null,Q?2:void 0))}var z5=()=>{};import{AsyncLocalStorage as Q6}from"async_hooks";import{spawnSync as J6}from"child_process";import{createHash as V6}from"crypto";import{existsSync as j4,mkdirSync as NZ,readFileSync as bZ,writeFileSync as pZ}from"fs";import{homedir as H4}from"os";import{basename as K6,join as $Z,parse as Y6,resolve as U4}from"path";function t(){return process.env.BEACON_HOME||$Z(H4(),".beacon")}function cZ(){return $Z(t(),"workspaces.json")}function ZZ(Z){return V6("sha256").update(Z).digest("hex").slice(0,12)}function _Z(Z=process.cwd()){let $=J6("git",["rev-parse","--show-toplevel"],{cwd:Z,stdio:["ignore","pipe","ignore"]});if($.status===0){let Q=$.stdout?.toString().trim();if(Q)return Q}return Z}function W4(Z){let $=U4(Z);return $!==U4(H4())&&$!==Y6($).root}function C4(){return $Z(t(),"deleted.json")}function dZ(){try{let Z=JSON.parse(bZ(C4(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function N4(Z){NZ(t(),{recursive:!0}),pZ(C4(),JSON.stringify(Z,null,2))}function L4(Z){return dZ().includes(Z)}function B4(Z){let $=dZ();if(!$.includes(Z))N4([...$,Z])}function X6(Z){let $=dZ();if($.includes(Z))N4($.filter((Q)=>Q!==Z))}function n(Z){return $Z(t(),Z)}function VZ(Z){return`file:${$Z(n(Z),"db.sqlite")}`}function LZ(){try{let Z=JSON.parse(bZ(cZ(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function lZ(Z){NZ(t(),{recursive:!0}),pZ(cZ(),JSON.stringify(Z,null,2))}function FZ(){return LZ().sort((Z,$)=>$.lastOpenedAt.localeCompare(Z.lastOpenedAt))}function g(Z){return LZ().find(($)=>$.id===Z)??null}function q4(Z,$,Q=new Date().toISOString()){if(!W4(Z))throw Error(`beacon: refusing to register a non-repo path as a workspace: ${Z}`);let J=ZZ(Z);if(L4(J))throw Error(`beacon: workspace ${J} (${Z}) was deleted \u2014 run \`beacon\` or /beacon-init to re-add it`);let V=LZ(),Y=V.find((U)=>U.id===J),X={id:J,path:Z,name:$||Y?.name||K6(Z),lastOpenedAt:Q},K=[X,...V.filter((U)=>U.id!==J)];return NZ(n(J),{recursive:!0}),lZ(K),X}function V$(Z,$){return X6(ZZ(Z)),q4(Z,$)}function K$(Z,$=new Date().toISOString()){let Q=LZ(),J=Q.find((V)=>V.id===Z);if(!J)return;J.lastOpenedAt=$,lZ(Q)}function O4(Z){if(lZ(LZ().filter(($)=>$.id!==Z)),r()===Z)G6(FZ()[0]?.id??null)}function D4(){return $Z(t(),"active")}function r(){try{return bZ(D4(),"utf8").trim()||null}catch{return null}}function G6(Z){NZ(t(),{recursive:!0}),pZ(D4(),Z??"")}function M6(){let Z=r();return Z?g(Z):null}function Y$(){let Z=AZ()??r();return Z?g(Z):null}function X$(Z){return g(Z)?.path??null}function G$(){return j4(cZ())}var z4="beacon_ws";function _4(Z,$){let Q=Z.headers.get("cookie");if(!Q)return null;for(let J of Q.split(";")){let V=J.indexOf("=");if(V===-1)continue;if(J.slice(0,V).trim()===$)return decodeURIComponent(J.slice(V+1).trim())}return null}function M$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=_4(Z,z4);if(Q&&g(Q))return Q;return U6()}function U6(){let Z=FZ();return Z.length===1?Z[0].id:null}var F4="x-beacon-workspace-path";function U$(Z=process.cwd()){let $=_Z(Z);return{"x-beacon-workspace":ZZ($),[F4]:$}}async function j$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=Z.headers.get(F4);if(Q&&W4(Q)&&!L4(ZZ(Q))&&(!$||ZZ(Q)===$)){let V=q4(Q);return await nZ(V.id),V.id}let J=_4(Z,z4);if(J&&g(J))return J;return null}var A4=new Q6;function j6(Z,$){return Z?A4.run(Z,$):$()}function AZ(){return A4.getStore()??null}var mZ=new Set;function P4(Z){mZ.delete($Z(n(Z),"db.sqlite"))}async function nZ(Z){let $=n(Z),Q=$Z($,"db.sqlite"),J=j4(Q);if(J&&mZ.has(Q))return{ok:!0,created:!1,migrated:!1};try{NZ($,{recursive:!0});let{provisionDb:V}=await M4().then(() => G4),Y=await V(VZ(Z));return mZ.add(Q),{ok:!0,created:!J,migrated:J&&Y.migrated}}catch(V){return{ok:!1,created:!1,migrated:!1,error:V instanceof Error?V.message:String(V)}}}import{existsSync as b8,readFileSync as p8}from"fs";import{resolve as f5}from"path";import{rmSync as m8}from"fs";import{drizzle as f6}from"drizzle-orm/libsql";import{createClient as x6}from"@libsql/client";var rZ={};gZ(rZ,{workspaceFlag:()=>q6,tag:()=>jZ,syncState:()=>a,projectMeta:()=>B6,planContract:()=>O6,note:()=>C6,nodeTags:()=>YZ,nodeFile:()=>BZ,node:()=>k,endpointTable:()=>i,endpoint:()=>E,edge:()=>KZ,draftTable:()=>c,draftRelation:()=>XZ,draftColumn:()=>OZ,dbTable:()=>P,dbRelation:()=>d,dbColumn:()=>e,codeFileEdge:()=>f,codeFile:()=>y,bugFlag:()=>qZ,boardAnnotation:()=>N6,appSetting:()=>L6});import{sqliteTable as v,index as S,foreignKey as H6,text as H,integer as F,real as m,uniqueIndex as o,primaryKey as W6}from"drizzle-orm/sqlite-core";import{createId as u}from"@paralleldrive/cuid2";var k=v("Node",{id:H().primaryKey().$defaultFn(()=>u()),view:H().notNull(),kind:H().default("FEATURE").notNull(),cluster:H(),layer:H(),title:H().notNull(),role:H(),plain:H(),status:H().default("PENDING").notNull(),priority:F().default(2).notNull(),progress:F().default(0).notNull(),x:m().default(0).notNull(),y:m().default(0).notNull(),sourceRef:H(),externalId:H(),source:H().default("MANUAL").notNull(),planId:H(),parentId:H(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date),externalUpdatedAt:F({mode:"timestamp_ms"}),externalSyncedAt:F({mode:"timestamp_ms"}),externalSnapshot:H(),assigneeName:H(),assigneeAvatarUrl:H(),hiddenAt:F({mode:"timestamp_ms"})},(Z)=>[S("Node_cluster_idx").on(Z.cluster),S("Node_parentId_idx").on(Z.parentId),S("Node_view_idx").on(Z.view),H6(()=>({columns:[Z.parentId],foreignColumns:[Z.id],name:"Node_parentId_Node_id_fk"})).onUpdate("cascade").onDelete("cascade")]),BZ=v("NodeFile",{id:H().primaryKey().$defaultFn(()=>u()),nodeId:H().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),path:H().notNull()},(Z)=>[o("NodeFile_nodeId_path_key").on(Z.nodeId,Z.path),S("NodeFile_nodeId_idx").on(Z.nodeId)]),jZ=v("Tag",{id:H().primaryKey().$defaultFn(()=>u()),label:H().notNull(),color:H()},(Z)=>[o("Tag_label_key").on(Z.label)]),KZ=v("Edge",{id:H().primaryKey().$defaultFn(()=>u()),fromId:H().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),toId:H().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),kind:H().default("DEPENDS").notNull(),label:H(),sourceHandle:H(),targetHandle:H()},(Z)=>[o("Edge_fromId_toId_kind_key").on(Z.fromId,Z.toId,Z.kind),S("Edge_toId_idx").on(Z.toId),S("Edge_fromId_idx").on(Z.fromId)]),YZ=v("_NodeTags",{a:H("A").notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),b:H("B").notNull().references(()=>jZ.id,{onDelete:"cascade",onUpdate:"cascade"})},(Z)=>[o("_NodeTags_AB_unique").on(Z.a,Z.b),S("_NodeTags_B_index").on(Z.b)]),C6=v("Note",{id:H().primaryKey().$defaultFn(()=>u()),title:H().default("Untitled").notNull(),body:H().default("").notNull(),ord:m().default(0).notNull(),pinned:F({mode:"boolean"}).default(!1).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("Note_updatedAt_idx").on(Z.updatedAt)]),N6=v("BoardAnnotation",{id:H().primaryKey().$defaultFn(()=>u()),targetKind:H().notNull(),targetId:H().notNull(),columnName:H(),body:H().default("").notNull(),x:m(),y:m(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("BoardAnnotation_target_idx").on(Z.targetId)]),qZ=v("BugFlag",{id:H().primaryKey().$defaultFn(()=>u()),nodeId:H().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),by:H().notNull(),note:H().notNull(),resolvedAt:F({mode:"timestamp_ms"}),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[S("BugFlag_nodeId_idx").on(Z.nodeId)]),P=v("DbTable",{id:H().primaryKey().$defaultFn(()=>u()),name:H().notNull(),domain:H(),description:H(),source:H().default("MANUAL").notNull(),planId:H(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("DbTable_domain_idx").on(Z.domain),o("DbTable_name_key").on(Z.name)]),e=v("DbColumn",{id:H().primaryKey().$defaultFn(()=>u()),tableId:H().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),name:H().notNull(),type:H().notNull(),isPk:F({mode:"boolean"}).default(!1).notNull(),isFk:F({mode:"boolean"}).default(!1).notNull(),nullable:F({mode:"boolean"}).default(!0).notNull(),note:H(),ord:F().default(0).notNull()},(Z)=>[o("DbColumn_tableId_name_key").on(Z.tableId,Z.name),S("DbColumn_tableId_idx").on(Z.tableId)]),d=v("DbRelation",{id:H().primaryKey().$defaultFn(()=>u()),fromTableId:H().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:H().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:H().notNull(),toColumn:H().notNull(),label:H()},(Z)=>[S("DbRelation_toTableId_idx").on(Z.toTableId),S("DbRelation_fromTableId_idx").on(Z.fromTableId)]),E=v("Endpoint",{id:H().primaryKey().$defaultFn(()=>u()),method:H().notNull(),path:H().notNull(),domain:H(),description:H(),source:H().default("MANUAL").notNull(),planId:H(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("Endpoint_method_path_key").on(Z.method,Z.path),S("Endpoint_domain_idx").on(Z.domain)]),i=v("EndpointTable",{id:H().primaryKey().$defaultFn(()=>u()),endpointId:H().notNull().references(()=>E.id,{onDelete:"cascade",onUpdate:"cascade"}),tableId:H().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),access:H().default("read").notNull()},(Z)=>[o("EndpointTable_endpointId_tableId_key").on(Z.endpointId,Z.tableId),S("EndpointTable_tableId_idx").on(Z.tableId)]),c=v("DraftTable",{id:H().primaryKey().$defaultFn(()=>u()),name:H().notNull(),domain:H(),description:H(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[o("DraftTable_name_key").on(Z.name)]),OZ=v("DraftColumn",{id:H().primaryKey().$defaultFn(()=>u()),tableId:H().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),name:H().notNull(),type:H().notNull(),isPk:F({mode:"boolean"}).default(!1).notNull(),isFk:F({mode:"boolean"}).default(!1).notNull(),nullable:F({mode:"boolean"}).default(!0).notNull(),note:H(),ord:F().default(0).notNull()},(Z)=>[S("DraftColumn_tableId_idx").on(Z.tableId)]),XZ=v("DraftRelation",{id:H().primaryKey().$defaultFn(()=>u()),fromTableId:H().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:H().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:H().notNull(),toColumn:H().notNull(),label:H()},(Z)=>[S("DraftRelation_toTableId_idx").on(Z.toTableId),S("DraftRelation_fromTableId_idx").on(Z.fromTableId)]),y=v("CodeFile",{path:H().primaryKey(),root:H(),lang:H(),x:m().default(0).notNull(),y:m().default(0).notNull(),mtimeMs:m(),size:F(),inDegree:F().default(0).notNull(),outDegree:F().default(0).notNull(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),f=v("CodeFileEdge",{fromPath:H().notNull().references(()=>y.path,{onDelete:"cascade",onUpdate:"cascade"}),toPath:H().notNull().references(()=>y.path,{onDelete:"cascade",onUpdate:"cascade"}),circular:F({mode:"boolean"}).default(!1).notNull()},(Z)=>[S("CodeFileEdge_circular_idx").on(Z.circular),S("CodeFileEdge_toPath_idx").on(Z.toPath),S("CodeFileEdge_fromPath_idx").on(Z.fromPath),W6({columns:[Z.fromPath,Z.toPath],name:"CodeFileEdge_fromPath_toPath_pk"})]),a=v("SyncState",{id:H().primaryKey().default("singleton"),version:F().default(0).notNull(),codeGraphSyncedAt:F({mode:"timestamp_ms"}),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),L6=v("AppSetting",{id:H().primaryKey().default("singleton"),editor:H().default("auto").notNull(),currentFeatureId:H(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),B6=v("ProjectMeta",{id:H().primaryKey().default("singleton"),overview:H(),conventions:H().default("[]").notNull(),hasFrontend:F({mode:"boolean"}),classificationRoots:H().default("[]").notNull(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),q6=v("WorkspaceFlag",{id:H().primaryKey().$defaultFn(()=>u()),key:H().notNull(),enabled:F({mode:"boolean"}).default(!1).notNull(),config:H(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("WorkspaceFlag_key_key").on(Z.key)]),O6=v("PlanContract",{id:H().primaryKey().$defaultFn(()=>u()),planId:H().notNull(),declaredFiles:H().default("[]").notNull(),authorizedExtras:H().default("[]").notNull(),active:F({mode:"boolean"}).default(!1).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("PlanContract_planId_key").on(Z.planId),S("PlanContract_active_idx").on(Z.active)]);var oZ={};gZ(oZ,{tagRelations:()=>F6,nodeTagsRelations:()=>A6,nodeRelations:()=>D6,nodeFileRelations:()=>z6,endpointTableRelations:()=>v6,endpointRelations:()=>S6,edgeRelations:()=>P6,draftTableRelations:()=>k6,draftRelationRelations:()=>T6,draftColumnRelations:()=>w6,dbTableRelations:()=>I6,dbRelationRelations:()=>E6,dbColumnRelations:()=>R6,codeFileRelations:()=>y6,codeFileEdgeRelations:()=>u6,bugFlagRelations:()=>_6});import{relations as h}from"drizzle-orm";var D6=h(k,({one:Z,many:$})=>({files:$(BZ),bugFlags:$(qZ),nodeTags:$(YZ),edgesOut:$(KZ,{relationName:"EdgeFrom"}),edgesIn:$(KZ,{relationName:"EdgeTo"}),parent:Z(k,{fields:[k.parentId],references:[k.id],relationName:"NodeTree"}),children:$(k,{relationName:"NodeTree"})})),z6=h(BZ,({one:Z})=>({node:Z(k,{fields:[BZ.nodeId],references:[k.id]})})),_6=h(qZ,({one:Z})=>({node:Z(k,{fields:[qZ.nodeId],references:[k.id]})})),F6=h(jZ,({many:Z})=>({nodeTags:Z(YZ)})),A6=h(YZ,({one:Z})=>({node:Z(k,{fields:[YZ.a],references:[k.id]}),tag:Z(jZ,{fields:[YZ.b],references:[jZ.id]})})),P6=h(KZ,({one:Z})=>({from:Z(k,{fields:[KZ.fromId],references:[k.id],relationName:"EdgeFrom"}),to:Z(k,{fields:[KZ.toId],references:[k.id],relationName:"EdgeTo"})})),I6=h(P,({many:Z})=>({columns:Z(e),fksOut:Z(d,{relationName:"FkFrom"}),fksIn:Z(d,{relationName:"FkTo"}),usages:Z(i)})),R6=h(e,({one:Z})=>({table:Z(P,{fields:[e.tableId],references:[P.id]})})),E6=h(d,({one:Z})=>({fromTable:Z(P,{fields:[d.fromTableId],references:[P.id],relationName:"FkFrom"}),toTable:Z(P,{fields:[d.toTableId],references:[P.id],relationName:"FkTo"})})),S6=h(E,({many:Z})=>({tables:Z(i)})),v6=h(i,({one:Z})=>({endpoint:Z(E,{fields:[i.endpointId],references:[E.id]}),table:Z(P,{fields:[i.tableId],references:[P.id]})})),k6=h(c,({many:Z})=>({columns:Z(OZ),fksOut:Z(XZ,{relationName:"DraftFkFrom"}),fksIn:Z(XZ,{relationName:"DraftFkTo"})})),w6=h(OZ,({one:Z})=>({table:Z(c,{fields:[OZ.tableId],references:[c.id]})})),T6=h(XZ,({one:Z})=>({fromTable:Z(c,{fields:[XZ.fromTableId],references:[c.id],relationName:"DraftFkFrom"}),toTable:Z(c,{fields:[XZ.toTableId],references:[c.id],relationName:"DraftFkTo"})})),y6=h(y,({many:Z})=>({edgesOut:Z(f,{relationName:"CFEFrom"}),edgesIn:Z(f,{relationName:"CFETo"})})),u6=h(f,({one:Z})=>({fromFile:Z(y,{fields:[f.fromPath],references:[y.path],relationName:"CFEFrom"}),toFile:Z(y,{fields:[f.toPath],references:[y.path],relationName:"CFETo"})}));var g6={...rZ,...oZ};function h6(){let Z=process.env.DATABASE_URL;if(Z&&/^(file:|libsql:|wss?:|https?:|:memory:)/i.test(Z))return Z;return"file:./dev.db"}var m6=h6();function b6(Z){let $=x6({url:Z});return $.execute("PRAGMA foreign_keys = ON;"),$.execute("PRAGMA busy_timeout = 5000;"),f6($,{schema:g6})}var p6=globalThis,PZ=p6.dzByUrl??=new Map;function I4(){return IZ(m6)}function IZ(Z){let $=PZ.get(Z);if(!$)$=b6(Z),PZ.set(Z,$);return $}function R4(Z){let $=PZ.get(Z);PZ.delete(Z);try{$?.$client?.close?.()}catch{}}function c6(){if(process.env.BEACON_REPO)return I4();let Z=AZ()??r();if(!Z)return I4();return IZ(VZ(Z))}var b=new Proxy({},{get(Z,$){let Q=c6(),J=Q[$];return typeof J==="function"?J.bind(Q):J}});import{existsSync as u8}from"fs";import{existsSync as k5,readFileSync as S8,watch as v8}from"fs";import{readFile as v5}from"fs/promises";import{join as DZ,relative as k8,resolve as w8}from"path";import{existsSync as l4,readFileSync as n4}from"fs";import{readdir as D7,readFile as z7,stat as r4}from"fs/promises";import{extname as o4,join as vZ,relative as WZ,resolve as HZ}from"path";import{extname as m4}from"path";import{dirname as d6,resolve as l6}from"path";var iZ=[".ts",".tsx",".js",".jsx",".mjs",".cjs"],n6=[/(?:^|[\n;])\s*(?:import|export)[^'"`\n]{0,4000}?from\s*['"]([^'"`]+)['"]/g,/(?:^|[\n;])\s*import\s*['"]([^'"`]+)['"]/g,/\brequire\(\s*['"]([^'"`]+)['"]\s*\)/g,/\bimport\(\s*['"]([^'"`]+)['"]\s*\)/g];function r6(Z){return Z.split(/[\\/]/).join("/")}function E4(Z,$){if($.has(Z))return Z;for(let Q of iZ){let J=`${Z}${Q}`;if($.has(J))return J}for(let Q of iZ){let J=`${Z}/index${Q}`;if($.has(J))return J}return null}function o6(Z){let $=new Set;for(let Q of n6)for(let J of Z.matchAll(Q))$.add(J[1]);return $}function i6(Z,$,Q,J){if(Z.startsWith(".")){let V=l6("/",d6($),Z),Y=r6(V).replace(/^\//,"");return E4(Y,Q)}for(let V of J)if(Z.startsWith(V.from)){let Y=Z.slice(V.from.length),X=V.to?`${V.to}/${Y}`:Y,K=E4(X,Q);if(K)return K}return null}var S4={id:"ts",extensions:iZ,specifiers:o6,resolve(Z,$,Q){let J=i6(Z,$,Q.fileSet,Q.tsAliases??[]);return J?[J]:[]}};import{dirname as RZ,join as s6,normalize as a6}from"path";var t6=[".py",".pyi"],v4=[/(?:^|[\n;])\s*from\s+(\.*[\w.]*)\s+import\b/g,/(?:^|[\n;])\s*import\s+([\w.]+(?:\s*,\s*[\w.]+)*)/g];function k4(Z,$){for(let Q of[`${Z}.py`,`${Z}/__init__.py`,`${Z}.pyi`])if($.has(Q))return[Q];return[]}function e6(Z){let $=new Set;for(let Q of Z.matchAll(v4[0])){let J=Q[1].trim();if(J)$.add(J)}for(let Q of Z.matchAll(v4[1]))for(let J of Q[1].split(/\s*,\s*/)){let V=J.trim().split(/\s+as\s+/)[0].trim();if(V)$.add(V)}return $}var w4={id:"python",extensions:t6,specifiers:e6,resolve(Z,$,Q){if(Z.startsWith(".")){let X=Z.length-Z.replace(/^\.+/,"").length,K=Z.slice(X),U=RZ($);for(let M=1;M<X;M++)U=RZ(U);let W=K?s6(U,K.replace(/\./g,"/")):U;return k4(a6(W).replace(/\\/g,"/"),Q.fileSet)}let J=Z.replace(/\./g,"/"),V=[],Y=RZ($);while(Y&&Y!=="."&&Y!=="/")V.push(Y),Y=RZ(Y);V.push("");for(let X of V){let K=k4(X?`${X}/${J}`:J,Q.fileSet);if(K.length)return K}return[]}};import{dirname as Z7}from"path";var $7=[".go"],Q7=/(?:^|[\n;])\s*import\s+(?:[\w.]+\s+)?"([^"]+)"/g,J7=/(?:^|[\n;])\s*import\s*\(([\s\S]*?)\)/g,V7=/"([^"]+)"/g;function K7(Z){let $=new Set;for(let Q of Z.matchAll(Q7))$.add(Q[1]);for(let Q of Z.matchAll(J7))for(let J of Q[1].matchAll(V7))$.add(J[1]);return $}var T4={id:"go",extensions:$7,resolve(Z,$,Q){let J=Q.goModulePath;if(!J)return[];let V=null;if(Z===J)V="";else if(Z.startsWith(`${J}/`))V=Z.slice(J.length+1);if(V===null)return[];let Y=[];for(let X of Q.fileSet){if(!X.endsWith(".go"))continue;let K=Z7(X);if(V===""&&K==="."||K===V)Y.push(X)}return Y.sort()},specifiers:K7};import{basename as y4,dirname as sZ,join as u4,normalize as f4}from"path";var Y7=[".rs"],X7=/(?:^|[\n;])\s*(?:pub\s+)?mod\s+(\w+)\s*;/g,G7=/(?:^|[\n;])\s*(?:pub\s+)?use\s+([\w:]+)/g;function M7(Z){let $=Z.split("::").filter((Q)=>Q&&Q!=="*");if(!$.length)return"";if($[0]==="crate")return["crate",...$.slice(1)].join("/");if($[0]==="super")return["..",...$.slice(1)].join("/");if($[0]==="self")return[".",...$.slice(1)].join("/");return $.join("/")}function aZ(Z,$){for(let Q of[`${Z}.rs`,`${Z}/mod.rs`])if($.has(Q))return[Q];return[]}var U7=new Set(["mod.rs","lib.rs","main.rs"]);function j7(Z){let $=new Set;for(let Q of Z.matchAll(X7))$.add(`./${Q[1]}`);for(let Q of Z.matchAll(G7)){let J=M7(Q[1]);if(J)$.add(J)}return $}var x4={id:"rust",extensions:Y7,specifiers:j7,resolve(Z,$,Q){let J=Q.fileSet;if(Z.startsWith("./")||Z.startsWith("../")){let V=Z.replace(/^\.\//,""),Y=f4(u4(sZ($),Z)).replace(/\\/g,"/"),X=aZ(Y,J);if(X.length)return X;if(Z.startsWith("./")&&!U7.has(y4($))){let K=u4(sZ($),y4($,".rs"),V);if(X=aZ(f4(K).replace(/\\/g,"/"),J),X.length)return X}return[]}if(Z.startsWith("crate/")){let V=$.split("/"),Y=V.lastIndexOf("src"),X=Y>=0?V.slice(0,Y+1).join("/"):sZ($),K=Z.slice(6).split("/");for(let U of[K.join("/"),K.slice(0,-1).join("/")]){if(!U)continue;let W=aZ(`${X}/${U}`,J);if(W.length)return W}return[]}return[]}};import{dirname as H7,extname as W7,join as C7,normalize as N7}from"path";var g4=[".swift",".java",".rb",".kt",".kts",".cs",".php",".scala",".c",".h",".cpp",".hpp",".cc",".hh",".m",".mm",".ex",".exs",".lua",".dart",".vue",".svelte"],L7=[/\b(?:require_relative|require|include|import|use|using|from)\s*\(?\s*['"]([^'"`\n]+)['"]/g,/(?:^|[\n;])\s*import\s+([\w.]+)/g,/(?:^|[\n;])\s*from\s+([\w.]+)\s+import\b/g,/(?:^|[\n;])\s*using\s+([\w.]+)\s*;/g,/(?:^|[\n;])\s*use\s+([\w\\]+)/g,/#\s*include\s*[<"]([^>"\n]+)[>"]/g];function B7(Z){let $=new Set;for(let Q of L7)for(let J of Z.matchAll(Q)){let V=J[1].trim();if(V)$.add(V)}return $}var h4={id:"fallback",extensions:g4,specifiers:B7,resolve(Z,$,Q){let V=[W7($).toLowerCase(),...g4].filter((U,W,M)=>U&&M.indexOf(U)===W),Y=Z.includes("/")||Z.includes("\\"),X=Z.startsWith(".")||Y?Z.replace(/\\/g,"/"):Z.replace(/[.:]+/g,"/"),K=[N7(C7(H7($),X)).replace(/\\/g,"/"),X.replace(/^\.\//,"")];for(let U of K){if(Q.fileSet.has(U))return[U];for(let W of V){let M=U.endsWith(W)?U:`${U}${W}`;if(Q.fileSet.has(M))return[M];if(Q.fileSet.has(`${U}/index${W}`))return[`${U}/index${W}`]}}return[]}};var q7=[S4,w4,T4,x4,h4],EZ=new Map;for(let Z of q7)for(let $ of Z.extensions)EZ.set($,Z);var O7={".ts":"ts",".tsx":"ts",".js":"js",".jsx":"js",".mjs":"js",".cjs":"js",".py":"py",".pyi":"py",".go":"go",".rs":"rs",".swift":"swift",".java":"java",".rb":"ruby",".kt":"kotlin",".kts":"kotlin",".cs":"csharp",".php":"php",".scala":"scala",".c":"c",".h":"c",".cpp":"cpp",".hpp":"cpp",".cc":"cpp",".hh":"cpp",".m":"objc",".mm":"objc",".ex":"elixir",".exs":"elixir",".lua":"lua",".dart":"dart",".vue":"vue",".svelte":"svelte"};function tZ(Z){return EZ.get(m4(Z).toLowerCase())??null}function b4(Z){let $=m4(Z).toLowerCase();if(!EZ.has($))return null;return O7[$]??$.slice(1)}function eZ(){return new Set(EZ.keys())}var i4=new Set(["node_modules",".git",".next","dist","build","__pycache__","target",".venv","venv","env",".turbo","coverage",".beacon",".playwright-mcp","generated","migrations","alembic","migrate"]);function _7(Z=5){let $=performance.now();return async()=>{if(performance.now()-$>Z)await new Promise((Q)=>setImmediate(Q)),$=performance.now()}}var F7=()=>Promise.resolve();async function s4(Z,$,Q,J,V){let Y;try{Y=await D7($,{withFileTypes:!0})}catch{return}for(let X of Y){if(X.name.startsWith("."))continue;if(i4.has(X.name))continue;let K=vZ($,X.name);if(X.isDirectory()){await s4(Z,K,Q,J,V);continue}if(!X.isFile())continue;if(X.name.endsWith(".d.ts"))continue;if(!Q.has(o4(X.name).toLowerCase()))continue;J.push(WZ(Z,K))}await V()}async function A7(Z,$=F7){let Q=[];return await s4(Z,Z,eZ(),Q,$),Q.map((J)=>J.split(/[\\/]/).join("/")).sort()}function P7(Z){try{return JSON.parse(Z)}catch{}let $=Z.replace(/\/\*[^"]*?\*\//g,"").replace(/(^|[^:"])\/\/.*$/gm,"$1").replace(/,\s*([}\]])/g,"$1");return JSON.parse($)}function p4(Z){return Z.replace(/^\.\/?/,"").replace(/\/$/,"")}function a4(Z){let $=vZ(Z,"tsconfig.json");if(!l4($))return[];let Q;try{Q=P7(n4($,"utf8"))}catch{return[]}let J=Q.compilerOptions?.paths??{},V=p4(Q.compilerOptions?.baseUrl??"."),Y=[];for(let[X,K]of Object.entries(J)){if(!X.endsWith("/*")||!K.length)continue;let U=K[0];if(!U.endsWith("/*"))continue;let W=X.slice(0,-1),M=p4(U.slice(0,-1)),C=[V,M].filter(Boolean).join("/");Y.push({from:W,to:C})}return Y}function SZ(Z){let $=vZ(Z,"go.mod");if(!l4($))return null;try{let Q=/^\s*module\s+(\S+)/m.exec(n4($,"utf8"));return Q?Q[1]:null}catch{return null}}function p(Z){return Z.split(/[\\/]/).join("/")}function t4(Z){if(Z.length===1)return Z[0];let $=Z.map((V)=>p(V).split("/")),Q=$[0],J=0;for(;J<Q.length;J++)if(!$.every((V)=>V[J]===Q[J]))break;return Q.slice(0,J).join("/")||"/"}async function I7(Z,$,Q){let J=(Array.isArray(Z)?Z:[Z]).map((W)=>p(HZ(W))),V=p($?HZ($):J.length===1?J[0]:t4(J)),Y=new Map,X=[];for(let W of J){let M=p(WZ(V,W));for(let C of a4(W))X.push({from:C.from,to:[M,C.to].filter(Boolean).join("/")});for(let C of await A7(W,Q)){let L=p(vZ(W,C)),O=p(WZ(V,L));if(Y.has(O))continue;try{let j=await r4(L);Y.set(O,{path:O,abs:L,root:M||null,mtimeMs:j.mtimeMs,size:j.size})}catch{}await Q()}}let K=J.map(SZ).find(Boolean)??SZ(V);return{metas:[...Y.values()].sort((W,M)=>W.path.localeCompare(M.path)),ctx:{fileSet:new Set(Y.keys()),tsAliases:X,goModulePath:K}}}var c4=50000;function R7(Z){let $=0;for(let Q=0;Q<Z.length;Q++)if(Z.charCodeAt(Q)===10){if(Q-$>c4)return!0;$=Q+1}return Z.length-$>c4}async function d4(Z){let $=tZ(Z.path);if(!$||Z.size>200000)return new Set;try{let Q=await z7(Z.abs,"utf8");if(R7(Q))return new Set;return $.specifiers(Q)}catch{return new Set}}function e4(Z,$){let Q=(Array.isArray(Z)?Z:[Z]).map((j)=>p(HZ(j))),J=p($?HZ($):Q.length===1?Q[0]:t4(Q)),V=new Map,Y=new Map,X=[],K=null;function U(){X=[];for(let j of Q){let N=p(WZ(J,j));for(let B of a4(j))X.push({from:B.from,to:[N,B.to].filter(Boolean).join("/")})}K=Q.map(SZ).find(Boolean)??SZ(J)}function W(j){let N=j.split("/");for(let D=0;D<N.length;D++){let q=N[D];if(!q||q.startsWith("."))return!0;if(D<N.length-1&&i4.has(q))return!0}let B=N[N.length-1];if(B.endsWith(".d.ts"))return!0;return!eZ().has(o4(B).toLowerCase())}function M(j){let N=p(HZ(j));for(let B of Q)if(N===B||N.startsWith(`${B}/`)){let D=N.slice(B.length).replace(/^\/+/,"");if(W(D))return null;return{path:p(WZ(J,N)),root:p(WZ(J,B))||null}}return null}function C(){let j={fileSet:new Set(V.keys()),tsAliases:X,goModulePath:K},N=[...V.values()].sort((q,G)=>q.path.localeCompare(G.path)),B=[];for(let q of N){let G=tZ(q.path);if(!G)continue;let z=Y.get(q.path)??new Set,_=new Set;for(let R of z)for(let w of G.resolve(R,q.path,j)){if(!w||w===q.path||_.has(w))continue;_.add(w),B.push({from:q.path,to:w})}}return{files:N.map((q)=>({path:q.path,lang:b4(q.path),root:q.root,mtimeMs:q.mtimeMs,size:q.size})),edges:B}}async function L(){let j=_7(),{metas:N,ctx:B}=await I7(Z,$,j);V.clear(),Y.clear();for(let D of N)await j(),V.set(D.path,D),Y.set(D.path,await d4(D));return X=B.tsAliases??[],K=B.goModulePath??null,C()}async function O(j){let N=p(HZ(j));if(!Q.some((_)=>N===_||N.startsWith(`${_}/`)))return!1;let B=N.split("/").pop()??"";if(B==="tsconfig.json"||B==="go.mod"){let _=N.slice(0,N.length-B.length-1);if(Q.includes(_))return U(),!0;return!1}let D=M(j);if(!D)return!1;let q;try{q=await r4(N)}catch{let _=V.delete(D.path);return Y.delete(D.path),_}let G=V.get(D.path);if(G&&G.mtimeMs===q.mtimeMs&&G.size===q.size)return!1;let z={path:D.path,abs:N,root:D.root,mtimeMs:q.mtimeMs,size:q.size};return V.set(D.path,z),Y.set(D.path,await d4(z)),!0}return{seed:L,applyChange:O,snapshot:C}}function Z5(Z){let $=Object.keys(Z.tableVars),Q=new Map;if(!$.length){for(let X of Z.routeFiles)Q.set(X,[]);return Q}let J=new Map;for(let X of Z.edges){let K=J.get(X.from)??[];K.push(X.to),J.set(X.from,K)}let V=new Map($.map((X)=>[X,new RegExp(`(?:query\\.${X}\\b|\\.from\\(\\s*${X}\\b)`)])),Y=new Map($.map((X)=>[X,new RegExp(`(?:insert|update|delete)\\(\\s*${X}\\b`)]));for(let X of Z.routeFiles){let K=new Set([X]),U=[X];for(let L=0;L<2&&K.size<25;L++){let O=[];for(let j of U)for(let N of J.get(j)??[]){if(K.has(N)||K.size>=25)continue;K.add(N),O.push(N)}U=O}let W=new Set,M=new Set;for(let L of K){let O=Z.content(L);if(!O)continue;for(let j of $){if(!W.has(j)&&V.get(j).test(O))W.add(j);if(!M.has(j)&&Y.get(j).test(O))M.add(j)}}let C=[];for(let L of $){let O=W.has(L),j=M.has(L);if(!O&&!j)continue;C.push({table:Z.tableVars[L],access:O&&j?"read-write":j?"write":"read"})}Q.set(X,C)}return Q}function Q5(Z,$){if(/_JSON_OR_JSONB|\bJSONB\b|\bJSON\b/.test(Z))return"jsonb";let Q=Z.match(/\b(GUID|Uuid|UUID|String|Text|DateTime|Date|Time|BigInteger|SmallInteger|Integer|Boolean|Float|Numeric|Decimal|Vector|TSVECTOR|LargeBinary|Enum)\b\s*(\([^)]*\))?/);if(Q){let Y=Q[2]??"",X=Y.match(/\d+/)?.[0];switch(Q[1]){case"GUID":case"Uuid":case"UUID":return"uuid";case"String":return X?`varchar(${X})`:"varchar";case"Text":return"text";case"DateTime":return/timezone\s*=\s*True/.test(Y)?"timestamptz":"timestamp";case"Date":return"date";case"Time":return"time";case"BigInteger":return"bigint";case"SmallInteger":return"smallint";case"Integer":return"integer";case"Boolean":return"boolean";case"Float":return"float";case"Numeric":case"Decimal":return"numeric";case"Vector":return X?`vector(${X})`:"vector";case"TSVECTOR":return"tsvector";case"LargeBinary":return"bytea";case"Enum":return"varchar"}}let J=$.replace(/\s*\|\s*None/g,"").trim(),V=J.match(/^Optional\[([\s\S]*)\]$/);if(V)J=V[1].trim();if(/uuid/i.test(J))return"uuid";if(/datetime/i.test(J))return"timestamptz";if(/\bint\b/i.test(J))return"integer";if(/\bbool\b/i.test(J))return"boolean";if(/\bfloat\b/.test(J)&&!/\blist\b/.test(J))return"float";if(/\bdict\b|\blist\b|\bAny\b/.test(J))return"jsonb";return"text"}function kZ(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="(")Q++;else if(Z[J]===")"){if(Q--,Q===0)return Z.slice($+1,J)}return""}function E7(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="[")Q++;else if(Z[J]==="]"){if(Q--,Q===0)return Z.slice($+1,J)}return null}function S7(Z,$,Q){let J=Q.match(/__tablename__\s*=\s*["']([^"']+)["']/)?.[1],V=[],Y=[],X=[],K=/(\w+)\s*:\s*Mapped\s*\[/g,U;while(U=K.exec(Q)){let C=U.index+U[0].length-1,L=E7(Q,C);if(L===null)continue;let O=C+L.length+2,j=Q.slice(O).match(/^\s*=\s*(\w+)\s*\(/);if(!j||j[1]!=="mapped_column")continue;X.push({colName:U[1],pyType:L,argsAt:O+j[0].length-1})}let W=/(\w+)\s*=\s*(mapped_column|Column)\s*\(/g;while(U=W.exec(Q))X.push({colName:U[1],pyType:"",argsAt:U.index+U[0].length-1});X.sort((C,L)=>C.argsAt-L.argsAt);let M=new Set;for(let C of X){if(M.has(C.colName)||C.colName==="__tablename__")continue;M.add(C.colName);let L=kZ(Q,C.argsAt),O=/primary_key\s*=\s*True/.test(L)||void 0,j=/nullable\s*=\s*False/.test(L)?!1:!0,N=L.match(/ForeignKey\(\s*["']([^"']+?)\.([^"'.]+)["']/);if(V.push({name:C.colName,type:Q5(L,C.pyType),isPk:O,isFk:N?!0:void 0,nullable:j}),N)Y.push({column:C.colName,toTable:N[1],toColumn:N[2]})}return{name:Z,bases:$,tableName:J,columns:V,fks:Y}}function v7(Z){let $=[],Q=[],J=/\bTable\s*(\()\s*["']([^"']+)["']\s*,/g,V;while(V=J.exec(Z)){let Y=V[2],X=kZ(Z,V.index+V[0].indexOf("("));if(!/\bmetadata\b/.test(X)||!/\bColumn\s*\(/.test(X))continue;let K=[],U=/\bColumn\s*\(/g,W;while(W=U.exec(X)){let M=kZ(X,W.index+W[0].length-1),C=M.match(/^\s*["'](\w+)["']\s*,/)?.[1];if(!C)continue;let L=/primary_key\s*=\s*True/.test(M)||void 0,O=/nullable\s*=\s*False/.test(M)?!1:!0,j=M.match(/ForeignKey\(\s*["']([^"']+?)\.([^"'.]+)["']/);if(K.push({name:C,type:Q5(M,""),isPk:L,isFk:j?!0:void 0,nullable:O}),j)Q.push({fromTable:Y,fromColumn:C,toTable:j[1],toColumn:j[2]})}if(K.length)$.push({name:Y,columns:K})}return{tables:$,relations:Q}}function k7(Z){let $=new Map,Q={tables:[],relations:[]};for(let K of Z){if(!K.path.endsWith(".py"))continue;if(!/mapped_column\s*\(|__tablename__|\bTable\s*\(\s*["']/.test(K.content))continue;let U=v7(K.content);Q.tables.push(...U.tables),Q.relations.push(...U.relations);let W=/^class\s+(\w+)\s*\(([^)]*)\)\s*:/gm,M,C=[];while(M=W.exec(K.content))C.push({name:M[1],bases:M[2].split(",").map((L)=>L.trim().split(/[.[]/)[0]).filter(Boolean),at:M.index});for(let L=0;L<C.length;L++){let O=K.content.slice(C[L].at,C[L+1]?.at??K.content.length),j=S7(C[L].name,C[L].bases,O);$.set(j.name,j)}}if(![...$.values()].some((K)=>K.tableName)&&!Q.tables.length)return{tables:[],relations:[]};let J=(K,U=new Set)=>{if(U.has(K.name))return[];U.add(K.name);let W=[];for(let M of K.bases){let C=$.get(M);if(C&&!C.tableName)W.push(...J(C,U))}return W.push(...K.columns),W},V=[],Y=[];for(let K of $.values()){if(!K.tableName)continue;let U=J(K),W=new Map;for(let j of U)if(!W.has(j.name))W.set(j.name,j);let M=[...W.values()],C=(j)=>M.splice(M.findIndex((N)=>N.name===j),1)[0],L=M.some((j)=>j.name==="id")?C("id"):null,O=["created_at","updated_at","deleted_at"].filter((j)=>M.some((N)=>N.name===j)).map((j)=>C(j));V.push({name:K.tableName,columns:[...L?[L]:[],...M,...O]});for(let j of K.fks)Y.push({fromTable:K.tableName,fromColumn:j.column,toTable:j.toTable,toColumn:j.toColumn})}let X=new Set(V.map((K)=>K.name));for(let K of Q.tables)if(!X.has(K.name))V.push(K);return Y.push(...Q.relations.filter((K)=>!X.has(K.fromTable))),{tables:V,relations:Y}}function w7(Z){let $=Z.replace(/[?[\]]/g,"");return{String:"text",Int:"integer",BigInt:"bigint",Float:"float",Decimal:"numeric",Boolean:"boolean",DateTime:"timestamptz",Json:"jsonb",Bytes:"bytea"}[$]??$.toLowerCase()}function T7(Z){let $=[],Q=[];for(let J of Z){if(!J.path.endsWith(".prisma"))continue;let V=/model\s+(\w+)\s*\{([\s\S]*?)\}/g,Y;while(Y=V.exec(J.content)){let X=Y[1],K=Y[2].match(/@@map\(\s*["']([^"']+)["']\s*\)/)?.[1]??X,U=[];for(let W of Y[2].split(`
|
|
4
|
+
`)){let M=W.trim().match(/^(\w+)\s+(\w+(?:\[\])?\??)\s*(.*)$/);if(!M||/^@@/.test(W.trim()))continue;let[,C,L,O]=M,j=/^(String|Int|BigInt|Float|Decimal|Boolean|DateTime|Json|Bytes)(\[\])?\??$/.test(L),N=O.match(/@relation\([^)]*fields:\s*\[(\w+)\][^)]*references:\s*\[(\w+)\]/);if(N)Q.push({fromTable:K,fromColumn:N[1],toTable:L.replace(/[?[\]]/g,""),toColumn:N[2]});if(!j)continue;U.push({name:C,type:w7(L),isPk:/@id\b/.test(O)||void 0,isFk:/@relation\b/.test(O)||void 0,nullable:L.endsWith("?")})}if(U.length)$.push({name:K,columns:U})}}return{tables:$,relations:Q}}function y7(Z,$){if(/mode:\s*["']timestamp/.test($))return"timestamp";if(/mode:\s*["']boolean["']/.test($))return"boolean";if(/mode:\s*["']json["']/.test($))return"jsonb";return Z}function u7(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="{")Q++;else if(Z[J]==="}"){if(Q--,Q===0)return Z.slice($+1,J)}return""}function f7(Z){let $=[],Q=/(\w+)\s*:\s*(text|integer|real|blob|numeric|varchar|boolean|timestamp|serial|uuid|json|jsonb)\s*\(/g;for(let Y of Z){if(!/\.(ts|tsx|mts|cts)$/.test(Y.path))continue;if(!/\b(?:sqliteTable|pgTable|mysqlTable)\s*\(/.test(Y.content))continue;let X=/(?:export\s+)?const\s+(\w+)\s*=\s*(?:sqliteTable|pgTable|mysqlTable)\s*\(\s*["']([^"']+)["']\s*,/g,K;while(K=X.exec(Y.content)){let U=Y.content.indexOf("{",K.index+K[0].length);if(U<0)continue;let W=u7(Y.content,U),M={varName:K[1],tableName:K[2],columns:[],colByProp:new Map,fks:[]},C=[];Q.lastIndex=0;for(let L of W.matchAll(Q))C.push({prop:L[1],builder:L[2],at:L.index,argOpen:L.index+L[0].length-1});C.forEach((L,O)=>{let j=W.slice(L.at,C[O+1]?.at??W.length),N=kZ(W,L.argOpen),D=N.match(/^\s*["']([^"']+)["']/)?.[1]??L.prop,q=j.match(/\.references\(\s*\(\)\s*=>\s*(\w+)\.(\w+)/);if(M.columns.push({name:D,type:y7(L.builder,N),isPk:/\.primaryKey\(\)/.test(j)||void 0,isFk:q?!0:void 0,nullable:/\.notNull\(\)/.test(j)?!1:!0}),M.colByProp.set(L.prop,D),q)M.fks.push({column:D,toVar:q[1],toProp:q[2]})}),$.push(M)}}if(!$.length)return{tables:[],relations:[]};let J=new Map($.map((Y)=>[Y.varName,Y])),V=[];for(let Y of $)for(let X of Y.fks){let K=J.get(X.toVar);if(!K)continue;V.push({fromTable:Y.tableName,fromColumn:X.column,toTable:K.tableName,toColumn:K.colByProp.get(X.toProp)??X.toProp})}return{tables:$.map((Y)=>({name:Y.tableName,columns:Y.columns})),relations:V,tableVars:Object.fromEntries($.map((Y)=>[Y.varName,Y.tableName]))}}var x7={long:"bigint",Long:"bigint",BigInteger:"bigint",int:"integer",Integer:"integer",short:"smallint",Short:"smallint",String:"varchar",char:"varchar",Character:"varchar",boolean:"boolean",Boolean:"boolean",UUID:"uuid",BigDecimal:"numeric",double:"double",Double:"double",float:"float",Float:"float",LocalDate:"date",LocalDateTime:"timestamp",Instant:"timestamp",Timestamp:"timestamp",Date:"timestamp",OffsetDateTime:"timestamptz",ZonedDateTime:"timestamptz",LocalTime:"time"},g7=/^(List|Set|Map|Collection|Iterable)$/;function J5(Z){if(/byte\s*\[\s*\]/.test(Z))return"byte[]";return(Z.replace(/<.*>/,"").trim().split(".").pop()??Z).trim()}function h7(Z){let $=J5(Z);if($==="byte[]")return"bytea";return x7[$]??$.toLowerCase()}function wZ(Z,$){return Z.match(new RegExp(`\\b${$}\\s*=\\s*"([^"]*)"`))?.[1]}function $5(Z,$){let Q=Z.match(new RegExp(`\\b${$}\\s*=\\s*(true|false)`));return Q?Q[1]==="true":void 0}function m7(Z){let $=[],Q=Z,J;while(J=Q.match(/^@[\w.]+(\([^)]*\))?\s*/))$.push(Q.slice(0,J[0].length).trim()),Q=Q.slice(J[0].length);return{annots:$,rest:Q.trim()}}function b7(Z){let $=[],Q=[];for(let J of Z.split(`
|
|
5
|
+
`)){let V=J.trim();if(!V||V.startsWith("//")||V.startsWith("*")||V.startsWith("/*"))continue;let{annots:Y,rest:X}=m7(V);if(Q.push(...Y),!X)continue;let K=X,U="";while(K!==U)U=K,K=K.replace(/^(?:public|private|protected|static|final|transient|volatile)\s+/,"");let W=!K.includes("(")?K.match(/^([\w.$]+(?:<[^>]*>)?(?:\s*\[\s*\])?)\s+(\w+)\s*[;=]/):null;if(W)$.push({annots:Q,type:W[1],name:W[2]});Q=[]}return $}function p7(Z){let $=[],Q=/\bclass\s+(\w+)/g,J;while(J=Q.exec(Z))$.push({name:J[1],at:J.index});let V=[];for(let Y=0;Y<$.length;Y++){let X=Z.slice(Y===0?0:$[Y-1].at,$[Y].at);if(!/@Entity\b/.test(X))continue;let K=X.match(/@Table\s*\([^)]*\)/)?.[0]??"",U=wZ(K,"name")??$[Y].name,W=Z.slice($[Y].at,$[Y+1]?.at??Z.length),M=b7(W),C=M.find((O)=>O.annots.some((j)=>/@Id\b/.test(j))),L=C?wZ(C.annots.find((O)=>/@Column\b/.test(O))??"","name")??C.name:"id";V.push({className:$[Y].name,tableName:U,idColumn:L,fields:M})}return V}function c7(Z){let $=Z.filter((K)=>K.path.endsWith(".java")&&/@Entity\b/.test(K.content));if(!$.length)return{tables:[],relations:[]};let Q=$.flatMap((K)=>p7(K.content));if(!Q.length)return{tables:[],relations:[]};let J=new Map(Q.map((K)=>[K.className,K.tableName])),V=new Map(Q.map((K)=>[K.className,K.idColumn])),Y=[],X=[];for(let K of Q){let U=[];for(let W of K.fields){let M=W.annots.join(" ");if(/@Transient\b/.test(M))continue;let C=J5(W.type);if(/@ManyToOne\b|@OneToOne\b|@OneToMany\b|@ManyToMany\b/.test(M)||J.has(C)){let q=W.annots.find((z)=>/@JoinColumn\b/.test(z)),G=q?wZ(q,"name"):void 0;if(G){U.push({name:G,type:"bigint",isFk:!0,nullable:$5(M,"nullable")??!0});let z=J.get(C);if(z)X.push({fromTable:K.tableName,fromColumn:G,toTable:z,toColumn:V.get(C)??"id"})}continue}if(g7.test(C))continue;let j=W.annots.find((q)=>/@Column\b/.test(q))??"",N=wZ(j,"name")??W.name,B=W.annots.some((q)=>/@Id\b/.test(q)),D=$5(j,"nullable");U.push({name:N,type:h7(W.type),...B?{isPk:!0}:{},...D!==void 0?{nullable:D}:{}})}Y.push({name:K.tableName,columns:U})}return{tables:Y,relations:X}}function V5(Z){let $=f7(Z);if($.tables.length)return $;let Q=T7(Z);if(Q.tables.length)return Q;let J=k7(Z);if(J.tables.length)return J;return c7(Z)}var d7=["GET","POST","PUT","PATCH","DELETE"];function l7(Z){let $=Z.match(/(?:^|\/)app\/(.+)\/route\.(?:ts|tsx|js|jsx|mjs)$/);if(!$)return null;let Q=$[1].split("/").filter((J)=>!(J.startsWith("(")&&J.endsWith(")"))).map((J)=>{let V=J.match(/^\[{1,2}(?:\.\.\.)?([^\]]+)\]{1,2}$/);return V?`{${V[1]}}`:J});if(Q[0]!=="api")return null;return`/${Q.join("/")}`}function K5(Z){let $=[];for(let Q of Z){let J=l7(Q.path);if(!J)continue;for(let V of d7)if(new RegExp(`export\\s+(?:async\\s+)?(?:function|const)\\s+${V}\\b`).test(Q.content))$.push({method:V,path:J,uses:[],file:Q.path})}return $.sort((Q,J)=>`${Q.path} ${Q.method}`.localeCompare(`${J.path} ${J.method}`))}var n7=/(^|\/)app\/.*\/route\.(ts|tsx|js|jsx|mjs)$/,r7=/\.(ts|py)$/,o7=/(schema|model)/i,i7=/(\.(test|spec)\.[jt]sx?$)|(^|\/)(tests?|__tests__|__mocks__)\/|(^|\/)test_[^/]+\.py$|_test\.py$/;function Z4(Z){if(i7.test(Z))return!1;if(Z.endsWith(".prisma"))return!0;if(n7.test(Z))return!0;if(Z.endsWith(".java"))return!0;return r7.test(Z)&&o7.test(Z)}function Y5(Z,$=300){return Z.filter(Z4).slice(0,$)}import{z as l}from"zod";import{and as P5,eq as CZ,inArray as P8,notInArray as I8}from"drizzle-orm";import{z as A}from"zod";import{and as D8,eq as fZ,inArray as J4,notInArray as z8,or as _8,sql as F8}from"drizzle-orm";var X5=300,G5=50;function M5(Z){for(let $=0;$<Z.length;$++)for(let Q=$+1;Q<Z.length;Q++){let J=Z[$],V=Z[Q];if(J.x<V.x+X5&&J.x+X5>V.x&&J.y<V.y+G5&&J.y+G5>V.y)return!0}return!1}import{eq as s7}from"drizzle-orm";var U5=(Z)=>Z.replace(/\{[^}]*\}/g,"{}");function a7(Z,$){if(Z.method.toUpperCase()!==$.method.toUpperCase())return!1;let Q=U5(Z.path),J=U5($.path);return J===Q||J.endsWith(Q)}async function j5(Z=b){let[$,Q]=await Promise.all([Z.query.endpoint.findMany({where:(V,{ne:Y})=>Y(V.source,"INTROSPECTION")}),Z.query.endpoint.findMany({where:(V,{eq:Y})=>Y(V.source,"INTROSPECTION")})]),J={collapsed:0,mappings:[]};for(let V of $){let Y=Q.find((X)=>a7(V,X));if(!Y)continue;await Z.delete(E).where(s7(E.id,V.id)),J.collapsed++,J.mappings.push({planned:`${V.method} ${V.path}`,code:`${Y.method} ${Y.path}`})}return J}import{and as H5,inArray as t7,isNull as W5,ne as C5,or as e7}from"drizzle-orm";var Z8=new Set(["DONE","CANCELLED","DEPRIORITIZED"]);async function $8(Z){let $=await Z.query.node.findMany({where:(J,{and:V,eq:Y,isNotNull:X})=>V(Y(J.view,"ROADMAP"),X(J.planId)),columns:{planId:!0,status:!0}}),Q=new Map;for(let J of $){let V=J.planId;Q.set(V,(Q.get(V)??!0)&&Z8.has(J.status))}return[...Q.entries()].filter(([,J])=>J).map(([J])=>J)}async function N5(Z=b){let $=await $8(Z),Q=(Y)=>$.length?e7(W5(Y.planId),t7(Y.planId,$)):W5(Y.planId),J=await Z.delete(P).where(H5(C5(P.source,"INTROSPECTION"),Q(P))).returning({id:P.id}),V=await Z.delete(E).where(H5(C5(E.source,"INTROSPECTION"),Q(E))).returning({id:E.id});return{tables:J.length,endpoints:V.length}}var Q8=(Z)=>Z&&Number.isFinite(Z)&&Z>0?Math.min(3.2,Math.max(0.7,Z)):1.8;function J8(Z,$){let Q=Q8($.viewportAspect)*($.aspectSlack??1),J=Z.reduce((V,Y)=>V+(Y.w+$.gapX)*(Y.h+$.gapY),0);return Math.max($.minBandW,Math.round(Math.sqrt(J*Q)))}function L5(Z,$){let Q=J8(Z,$),J=new Map,V=0,Y=0,X=0;for(let K of Z){if(V>0&&V+K.w>Q)Y+=X+$.gapY,V=0,X=0;J.set(K.id,{x:V,y:Y}),X=Math.max(X,K.h),V+=K.w+$.gapX}return J}var QZ=320,$4=30,V8=36,K8=30,Y8=16;function JZ(Z){return V8+Math.max(0,Z)*K8+Y8}var GZ=60,X8=300,TZ=10,G8=84,yZ=72,M8=3*QZ,U8=1.7;var uZ=(Z)=>(Z??"").trim()||"\u2014";function j8(Z,$,Q){let J=new Map;for(let Y of Z.uses){if(!$.has(Y.tableId))continue;J.set(Y.tableId,(J.get(Y.tableId)??0)+1)}let V=null;for(let[Y,X]of J){if(V===null){V=Y;continue}let K=J.get(V);if(X>K){V=Y;continue}if(X<K)continue;let U=Q?.get(Y)??0,W=Q?.get(V)??0;if(U<W)V=Y;else if(U===W&&$.get(Y).localeCompare($.get(V))<0)V=Y}return V}function Q4(Z,$){let Q=new Map(Z.map((V)=>[V.id,V.name])),J=new Map;for(let V of $)for(let Y of V.uses){if(!Q.has(Y.tableId))continue;J.set(Y.tableId,(J.get(Y.tableId)??0)+1)}return new Map($.map((V)=>[V.id,j8(V,Q,J)]))}var H8=(Z,$)=>Z.path.localeCompare($.path)||Z.method.localeCompare($.method)||Z.id.localeCompare($.id);function B5(Z,$,Q={}){let J=Q4(Z,$),V=new Map,Y=[];for(let N of[...$].sort(H8)){let B=J.get(N.id)??null;if(B){let D=V.get(B);if(D)D.push(N);else V.set(B,[N])}else Y.push(N)}let X=(N)=>{let B=V.get(N.id)?.length??0;return JZ(N.columnCount)+(B?TZ+B*GZ:0)+$4},K=Array.from(new Set(Z.map((N)=>uZ(N.domain)))),U=K.filter((N)=>N!=="\u2014").sort(),W=K.includes("\u2014")?[...U,"\u2014"]:U,M=[];for(let N of W){let B=Z.filter((_)=>uZ(_.domain)===N).sort((_,R)=>_.name.localeCompare(R.name)),D=B.reduce((_,R)=>_+X(R),0),q=Math.max(1,Math.min(12,B.length,Math.round(Math.sqrt(D/QZ)))),G=Array(q).fill(0),z=new Map;for(let _ of B){let R=0;for(let w=1;w<q;w++)if(G[w]<G[R])R=w;z.set(_.id,{x:R*QZ,y:G[R]}),G[R]+=X(_)}M.push({d:N,w:q*QZ,h:Math.max(...G,0),tableLocal:z})}let C=L5(M.map((N)=>({id:N.d,w:N.w,h:N.h})),{gapX:G8,gapY:yZ,viewportAspect:Q.viewportAspect,minBandW:M8,aspectSlack:U8}),L=new Map,O=new Map,j=0;for(let N of M){let B=C.get(N.d),D=Z.filter((q)=>N.tableLocal.has(q.id));for(let q of D){let G=N.tableLocal.get(q.id),z=B.x+G.x,_=B.y+G.y;L.set(q.id,{x:z,y:_}),(V.get(q.id)??[]).forEach((w,T)=>{O.set(w.id,{x:z,y:_+JZ(q.columnCount)+TZ+T*GZ})})}j=Math.max(j,B.y+N.h)}if(Y.length){let N=j+yZ,B=Math.max(1,Math.min(4,Math.ceil(Math.sqrt(Y.length/2))));Y.forEach((D,q)=>{O.set(D.id,{x:q%B*X8,y:N+Math.floor(q/B)*GZ})})}return{tables:L,endpoints:O}}function q5(Z,$,Q){let J=Q4($,Q),V=new Map;for(let O of Q){let j=J.get(O.id);if(j)V.set(j,(V.get(j)??0)+1)}let Y=(O)=>{let j=V.get(O.id)??0;return O.y+JZ(O.columnCount)+(j?TZ+j*GZ:0)},X=uZ(Z.domain),K=$.filter((O)=>uZ(O.domain)===X);if(!K.length){let O=$.length?Math.max(...$.map(Y),...Q.map((j)=>j.y+GZ)):0;return{x:0,y:$.length||Q.length?O+yZ:0}}let U=Math.min(...K.map((O)=>O.x)),W=K.map((O)=>Math.max(0,Math.round((O.x-U)/QZ))),M=Math.min(12,Math.max(...W)+1),C=Array(M).fill(Math.min(...K.map((O)=>O.y)));K.forEach((O,j)=>{let N=Math.min(W[j],M-1);C[N]=Math.max(C[N],Y(O)+$4)});let L=0;for(let O=1;O<M;O++)if(C[O]<C[L])L=O;return{x:U+L*QZ,y:C[L]}}function O5(Z,$,Q){let J=Q4($,[...Q,Z]),V=J.get(Z.id),Y=V?$.find((K)=>K.id===V):void 0;if(Y){let K=Q.filter((M)=>J.get(M.id)===Y.id),U=Y.y+JZ(Y.columnCount)+TZ,W=K.length?Math.max(...K.map((M)=>M.y))+GZ:U;return{x:Y.x,y:W}}let X=[...$.map((K)=>K.y+JZ(K.columnCount)),...Q.map((K)=>K.y+GZ)];return{x:0,y:X.length?Math.max(...X)+yZ:0}}function D5(Z){let $=QZ-20;for(let Q=0;Q<Z.length;Q++)for(let J=Q+1;J<Z.length;J++){let V=Z[Q],Y=Z[J],X=JZ(V.columnCount),K=JZ(Y.columnCount);if(V.x<Y.x+$&&V.x+$>Y.x&&V.y<Y.y+K&&V.y+X>Y.y)return!0}return!1}import{eq as _5}from"drizzle-orm";z5();async function F5(Z=b,$){let[Q,J]=await Promise.all([Z.query.dbTable.findMany({with:{columns:{columns:{id:!0}}},orderBy:(X,{asc:K})=>K(X.name)}),Z.query.endpoint.findMany({with:{tables:{columns:{tableId:!0}}}})]),V=B5(Q.map((X)=>({id:X.id,name:X.name,domain:X.domain,columnCount:X.columns.length})),J.map((X)=>({id:X.id,method:X.method,path:X.path,uses:X.tables.map((K)=>({tableId:K.tableId}))})),{viewportAspect:$}),Y=0;for(let X of Q){let K=V.tables.get(X.id);if(!K||Math.round(K.x)===Math.round(X.x)&&Math.round(K.y)===Math.round(X.y))continue;await Z.update(P).set({x:K.x,y:K.y}).where(_5(P.id,X.id)),Y++}for(let X of J){let K=V.endpoints.get(X.id);if(!K||Math.round(K.x)===Math.round(X.x)&&Math.round(K.y)===Math.round(X.y))continue;await Z.update(E).set({x:K.x,y:K.y}).where(_5(E.id,X.id)),Y++}return Y}var A8=A.object({tables:A.array(A.object({name:A.string().trim().min(1),domain:A.string().nullish(),description:A.string().nullish(),columns:A.array(A.object({name:A.string().trim().min(1),type:A.string().trim().min(1),isPk:A.boolean().optional(),isFk:A.boolean().optional(),nullable:A.boolean().optional(),note:A.string().nullish()})).default([])})).default([]),relations:A.array(A.object({fromTable:A.string(),fromColumn:A.string(),toTable:A.string(),toColumn:A.string(),label:A.string().nullish()})).default([]),endpoints:A.array(A.object({method:A.string().trim().min(1),path:A.string().trim().min(1),domain:A.string().nullish(),description:A.string().nullish(),uses:A.array(A.object({table:A.string(),access:A.string().default("read")})).default([])})).default([])});async function xZ(Z=b){let[$]=await Z.insert(a).values({id:"singleton",version:1}).onConflictDoUpdate({target:a.id,set:{version:F8`${a.version} + 1`}}).returning();return $.version}async function A5(Z,$=b,Q={}){let J=A8.parse(Z),V=J.tables.length>0,Y=J.endpoints.length>0,X=J.tables.map((G)=>G.name);if(V)await $.delete(P).where(X.length?D8(fZ(P.source,"INTROSPECTION"),z8(P.name,X)):fZ(P.source,"INTROSPECTION"));let K=await $.query.dbTable.findMany({columns:{id:!0,name:!0,domain:!0,x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),U=await $.query.endpoint.findMany({columns:{id:!0,method:!0,path:!0,x:!0,y:!0},with:{tables:{columns:{tableId:!0}}}}),W=new Map(K.map((G)=>[G.name,G])),M=K.map((G)=>({id:G.id,name:G.name,domain:G.domain,columnCount:G.columns.length,x:G.x,y:G.y})),C=U.map((G)=>({id:G.id,method:G.method,path:G.path,uses:G.tables.map((z)=>({tableId:z.tableId})),x:G.x,y:G.y})),L=new Map;for(let G of J.tables){if(W.has(G.name))continue;let z=q5({domain:G.domain??null,columnCount:G.columns.length},M,C);L.set(G.name,z),M.push({id:`new:${G.name}`,name:G.name,domain:G.domain??null,columnCount:G.columns.length,...z})}let O=new Map;for(let G of J.tables){let z=W.get(G.name),_=L.get(G.name),R=z?.x??_?.x??0,w=z?.y??_?.y??0,[T]=await $.insert(P).values({name:G.name,domain:G.domain??null,description:G.description??null,source:"INTROSPECTION",x:R,y:w}).onConflictDoUpdate({target:P.name,set:{...G.domain!=null?{domain:G.domain}:{},...G.description!=null?{description:G.description}:{},source:"INTROSPECTION"}}).returning();if(O.set(G.name,T.id),await $.delete(e).where(fZ(e.tableId,T.id)),G.columns.length)await $.insert(e).values(G.columns.map((x,I)=>({tableId:T.id,name:x.name,type:x.type,isPk:x.isPk??!1,isFk:x.isFk??!1,nullable:x.nullable??!0,note:x.note??null,ord:I})))}let j=[...O.values()];if(j.length)await $.delete(d).where(_8(J4(d.fromTableId,j),J4(d.toTableId,j)));for(let G of J.relations){let z=O.get(G.fromTable),_=O.get(G.toTable);if(!z||!_)continue;await $.insert(d).values({fromTableId:z,toTableId:_,fromColumn:G.fromColumn,toColumn:G.toColumn,label:G.label??`${G.fromColumn} \u2192 ${G.toTable}.${G.toColumn}`})}let N=new Set(J.endpoints.map((G)=>`${G.method} ${G.path}`));if(Y){let z=(await $.query.endpoint.findMany({where:(_,{eq:R})=>R(_.source,"INTROSPECTION")})).filter((_)=>!N.has(`${_.method} ${_.path}`)).map((_)=>_.id);if(z.length)await $.delete(E).where(J4(E.id,z))}for(let G of M)if(G.id.startsWith("new:"))G.id=O.get(G.name)??G.id;for(let G of J.endpoints){let z=await $.query.endpoint.findFirst({where:(T,{and:x,eq:I})=>x(I(T.method,G.method),I(T.path,G.path))}),_,R;if(z)_=z.x,R=z.y;else{let T={id:`new:${G.method} ${G.path}`,method:G.method,path:G.path,uses:G.uses.map((I)=>({tableId:O.get(I.table)??""})).filter((I)=>I.tableId)},x=O5(T,M,C);_=x.x,R=x.y,C.push({...T,x:_,y:R})}let[w]=await $.insert(E).values({method:G.method,path:G.path,domain:G.domain??null,description:G.description??null,source:"INTROSPECTION",x:_,y:R}).onConflictDoUpdate({target:[E.method,E.path],set:{...G.domain!=null?{domain:G.domain}:{},...G.description!=null?{description:G.description}:{},source:"INTROSPECTION"}}).returning();if(!Q.partial||G.uses.length>0)await $.delete(i).where(fZ(i.endpointId,w.id));for(let T of G.uses){let x=O.get(T.table)??(await $.query.dbTable.findFirst({where:(I,{eq:UZ})=>UZ(I.name,T.table)}))?.id;if(!x)continue;await $.insert(i).values({endpointId:w.id,tableId:x,access:T.access})}}await j5($),await N5($);let B=await $.query.dbTable.findMany({where:(G,{eq:z})=>z(G.source,"INTROSPECTION"),columns:{x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),D=await $.select({x:E.x,y:E.y}).from(E);if(D5(B.map((G)=>({x:G.x,y:G.y,columnCount:G.columns.length})))||M5(D))await F5($);let q=await xZ($);return{tables:J.tables.length,relations:J.relations.length,endpoints:J.endpoints.length,version:q}}var I5=l.object({files:l.array(l.object({path:l.string().trim().min(1),root:l.string().nullish(),lang:l.string().nullish(),mtimeMs:l.number().nullish(),size:l.number().nullish()})).default([]),edges:l.array(l.object({from:l.string().trim().min(1),to:l.string().trim().min(1)})).default([])});function R5(Z,$){let Q=new Map;for(let L of Z)Q.set(L,[]);for(let L of $)Q.get(L.from)?.push(L.to);let J=new Map,V=new Map,Y=new Set,X=[],K=new Map,U=[],W=0,M=0;for(let L of Z){if(J.has(L))continue;let O=[{v:L,iter:0}];J.set(L,W),V.set(L,W),W++,X.push(L),Y.add(L);while(O.length){let j=O[O.length-1],N=Q.get(j.v)??[];if(j.iter<N.length){let B=N[j.iter++];if(!J.has(B))J.set(B,W),V.set(B,W),W++,X.push(B),Y.add(B),O.push({v:B,iter:0});else if(Y.has(B))V.set(j.v,Math.min(V.get(j.v),J.get(B)))}else{if(V.get(j.v)===J.get(j.v)){let D=0,q;do q=X.pop(),Y.delete(q),K.set(q,M),D++;while(q!==j.v);U.push(D),M++}O.pop();let B=O[O.length-1];if(B)V.set(B.v,Math.min(V.get(B.v),V.get(j.v)))}}}let C=new Set;for(let L of $){let O=K.get(L.from);if(O!==void 0&&O===K.get(L.to)&&U[O]>1)C.add(`${L.from}|${L.to}`)}return C}async function E5(Z,$=b){let Q=I5.parse(Z),J=Q.files.map((C)=>C.path),V=new Set(J),Y=Q.edges.filter((C)=>V.has(C.from)&&V.has(C.to)&&C.from!==C.to),X=R5(J,Y),K=new Map,U=new Map;for(let C of Y)U.set(C.from,(U.get(C.from)??0)+1),K.set(C.to,(K.get(C.to)??0)+1);await $.delete(y).where(I8(y.path,J));for(let C of Q.files){let L={root:C.root??null,lang:C.lang??null,mtimeMs:C.mtimeMs??null,size:C.size??null,inDegree:K.get(C.path)??0,outDegree:U.get(C.path)??0};await $.insert(y).values({path:C.path,...L}).onConflictDoUpdate({target:y.path,set:L})}await $.delete(f);let W=0;if(Y.length)await $.insert(f).values(Y.map((C)=>{let L=X.has(`${C.from}|${C.to}`);if(L)W++;return{fromPath:C.from,toPath:C.to,circular:L}}));let M=await xZ($);return await $.update(a).set({codeGraphSyncedAt:new Date}).where(CZ(a.id,"singleton")),{files:Q.files.length,edges:Y.length,circular:W,version:M}}var R8=(Z,$)=>`${Z}\x00${$}`;function V4(Z){let $=I5.parse(Z),Q=$.files.map((M)=>M.path),J=new Set(Q),V=$.edges.filter((M)=>J.has(M.from)&&J.has(M.to)&&M.from!==M.to),Y=R5(Q,V),X=new Map,K=new Map;for(let M of V)K.set(M.from,(K.get(M.from)??0)+1),X.set(M.to,(X.get(M.to)??0)+1);let U=new Map;for(let M of $.files)U.set(M.path,{root:M.root??null,lang:M.lang??null,mtimeMs:M.mtimeMs??null,size:M.size??null,inDegree:X.get(M.path)??0,outDegree:K.get(M.path)??0});let W=new Map;for(let M of V)W.set(R8(M.from,M.to),{from:M.from,to:M.to,circular:Y.has(`${M.from}|${M.to}`)});return{files:U,edges:W}}var E8=(Z,$)=>Z.root===$.root&&Z.lang===$.lang&&Z.mtimeMs===$.mtimeMs&&Z.size===$.size&&Z.inDegree===$.inDegree&&Z.outDegree===$.outDegree;async function S5(Z,$,Q=b){for(let[K,U]of $.files){let W=Z.files.get(K);if(W&&E8(W,U))continue;let M={root:U.root,lang:U.lang,mtimeMs:U.mtimeMs,size:U.size,inDegree:U.inDegree,outDegree:U.outDegree};await Q.insert(y).values({path:K,...M}).onConflictDoUpdate({target:y.path,set:M})}let J=[...Z.files.keys()].filter((K)=>!$.files.has(K));if(J.length)await Q.delete(y).where(P8(y.path,J));for(let[K,U]of Z.edges)if(!$.edges.has(K))await Q.delete(f).where(P5(CZ(f.fromPath,U.from),CZ(f.toPath,U.to)));let V=[];for(let[K,U]of $.edges){let W=Z.edges.get(K);if(!W)V.push({fromPath:U.from,toPath:U.to,circular:U.circular});else if(W.circular!==U.circular)await Q.update(f).set({circular:U.circular}).where(P5(CZ(f.fromPath,U.from),CZ(f.toPath,U.to)))}if(V.length)await Q.insert(f).values(V);let Y=await xZ(Q);await Q.update(a).set({codeGraphSyncedAt:new Date}).where(CZ(a.id,"singleton"));let X=0;for(let K of $.edges.values())if(K.circular)X++;return{files:$.files.size,edges:$.edges.size,circular:X,version:Y}}var T8=/[/\\](node_modules|\.git|\.next|dist|build|__pycache__|target|\.venv|venv|\.beacon|\.playwright-mcp|generated|coverage)[/\\]/;function y8(Z){try{let $=DZ(Z,"beacon.config.json");if(k5($)){let Q=JSON.parse(S8($,"utf8"));if(Array.isArray(Q.roots)&&Q.roots.length)return Q.roots.map((J)=>w8(Z,J))}}catch{}return[Z]}function w5(Z){let $=y8(Z.path),Q=nZ(Z.id),J=IZ(VZ(Z.id)),V=e4($,Z.path);async function Y(){let N=Y5(V.snapshot().files.map((z)=>z.path));for(let z of $)for(let _ of["prisma/schema.prisma","schema.prisma"]){let R=DZ(z,_);if(k5(R))N.push(X(R))}let B=[];for(let z of N)try{B.push({path:z,content:await v5(DZ(Z.path,z),"utf8")})}catch{}let D=V5(B),q=K5(B);if(!D.tables.length&&!q.length)return;if(q.length&&D.tableVars&&Object.keys(D.tableVars).length){let _=V.snapshot().edges,R=new Set(q.map((I)=>I.file)),w=new Map;for(let I of _){let UZ=w.get(I.from)??[];UZ.push(I.to),w.set(I.from,UZ)}for(let I=0;I<2;I++)for(let UZ of[...R])for(let m5 of w.get(UZ)??[])R.add(m5);let T=new Map;for(let I of[...R].slice(0,600))try{T.set(I,await v5(DZ(Z.path,I),"utf8"))}catch{}let x=Z5({routeFiles:[...new Set(q.map((I)=>I.file))],edges:_,content:(I)=>T.get(I)??null,tableVars:D.tableVars});for(let I of q)I.uses=x.get(I.file)??[]}let G=await A5({tables:D.tables,relations:D.relations,endpoints:q},J,{partial:!0});console.log(`[beacon-inline] schema synced (${Z.name}): ${G.tables} tables / ${G.endpoints} endpoints`)}function X(N){return k8(Z.path,N).split(/[\\/]/).join("/")}let K=null,U=!1,W=new Set,M=null,C=!1;async function L(){if(C){O();return}C=!0;try{if(await Q,U)K=null,U=!1;if(K===null){let q=await V.seed(),G=await E5(q,J);K=V4(q),console.log(`[beacon-inline] code-graph synced (${Z.name}): ${G.files} files / ${G.edges} imports${G.circular>0?` (${G.circular} circular)`:""}`),await Y();return}let N=[...W];W.clear();let B=N.some((q)=>Z4(X(q))),D=!1;for(let q of N)if(await V.applyChange(q))D=!0;if(D){let q=V4(V.snapshot()),G=await S5(K,q,J);K=q,console.log(`[beacon-inline] code-graph updated (${Z.name}): ${G.files} files / ${G.edges} imports${G.circular>0?` (${G.circular} circular)`:""}`)}if(B)await Y()}catch(N){console.error(`[beacon-inline] error (${Z.name}):`,N instanceof Error?N.message:N)}finally{C=!1}}function O(){if(M)clearTimeout(M);M=setTimeout(L,600)}let j=[];for(let N of $)try{let B=v8(N,{recursive:!0,persistent:!0},(D,q)=>{if(!q){U=!0,O();return}let G=String(q);if(T8.test(`/${G}`))return;W.add(DZ(N,G)),O()});B.on("error",(D)=>console.error(`[beacon-inline] watcher error (${Z.name}):`,D)),j.push(B)}catch(B){console.error(`[beacon-inline] live watch unavailable for ${N} (${Z.name}):`,B instanceof Error?B.message:B)}return console.log(`[beacon-inline] watching ${Z.name} (${$.join(", ")}) \u2014 initial extract\u2026`),L(),{async stop(){if(M)clearTimeout(M);for(let N of j)N.close()}}}var f8=1500;function x8(Z){let $=Z.limit??6,Q=Z.hardCap??12,J=Z.staggerMs??f8,V=new Map,Y=0,X=new Set;function K(B){let D=V.get(B);if(D)D.seq=++Y}function U(B){if(V.has(B.id))return K(B.id);if(!Z.exists(B.path))return;V.set(B.id,{handle:Z.start(B),seq:++Y})}function W(){let B=null,D=1/0;for(let[q,G]of V){if(X.has(q))continue;if(G.seq<D)D=G.seq,B=q}if(B)V.get(B).handle.stop(),V.delete(B)}function M(){let B=Z.list().filter((q)=>Z.exists(q.path)).slice(0,$);X=new Set(B.map((q)=>q.id)),B.filter((q)=>!V.has(q.id)).forEach((q,G)=>{if(G===0)U(q);else setTimeout(()=>X.has(q.id)&&U(q),G*J)});for(let[q,G]of[...V]){let z=Z.get(q);if(!z||!Z.exists(z.path))G.handle.stop(),V.delete(q)}}function C(B){if(V.has(B))return K(B);let D=Z.get(B);if(!D||!Z.exists(D.path))return;if(V.size>=Q)W();if(V.size>=Q)return;V.set(B,{handle:Z.start(D),seq:++Y})}async function L(B){let D=V.get(B);if(!D)return;V.delete(B),await D.handle.stop()}function O(B){return V.has(B)}function j(){return[...V.keys()]}async function N(){await Promise.all([...V.values()].map((B)=>B.handle.stop())),V.clear()}return{reconcile:M,ensureWatcher:C,stopWatcher:L,isWatching:O,activeIds:j,stopAll:N}}var g8=globalThis,h8=g8.__beaconWatcherManager??=x8({list:FZ,get:g,exists:u8,start:(Z)=>w5(Z)});async function T5(Z){await h8.stopWatcher(Z)}async function y5(Z){if(!g(Z))return{ok:!1,removed:!1,fallbackId:r(),error:"unknown workspace"};O4(Z),B4(Z),await T5(Z),R4(VZ(Z)),P4(Z);try{m8(n(Z),{recursive:!0,force:!0})}catch($){return{ok:!1,removed:!0,fallbackId:r(),error:$ instanceof Error?$.message:String($)}}return{ok:!0,removed:!0,fallbackId:r()}}var K4=process.argv.slice(3),x5=K4.includes("--yes")||K4.includes("-y"),MZ=K4.find((Z)=>!Z.startsWith("-")),u5=(Z)=>`\x1B[32m\u2713\x1B[0m ${Z}`,g5=(Z)=>`\x1B[2m${Z}\x1B[0m`,h5=(Z)=>`
|
|
6
|
+
\x1B[1m${Z}\x1B[0m`;function c8(){if(!MZ)return g(ZZ(_Z(process.cwd())));if(/^[0-9a-f]{12}$/.test(MZ)){let Z=g(MZ);if(Z)return Z}return g(ZZ(_Z(f5(MZ))))}var s=c8();if(!s)console.error(`[beacon] ${MZ??process.cwd()} is not a registered Beacon workspace \u2014 nothing to remove.`),process.exit(1);console.log(h5(x5?"Beacon \xB7 remove workspace":"Beacon \xB7 remove workspace (dry run)"));console.log(` name: ${s.name}${r()===s.id?" (currently active)":""}`);console.log(` repo: ${s.path} ${g5("(untouched \u2014 only Beacon's data is erased)")}`);console.log(` data: ${n(s.id)} ${g5("(deleted)")}`);if(!x5)console.log(h5("Nothing was changed.")),console.log(` Run \x1B[1mbeacon remove${MZ?` ${MZ}`:""} --yes\x1B[0m to apply.
|
|
7
|
+
`),process.exit(0);async function d8(Z){try{let{pid:$,port:Q}=JSON.parse(p8(f5(t(),"server.json"),"utf8"));if(!$||!Q)return!1;return process.kill($,0),(await fetch(`http://localhost:${Q}/api/workspace`,{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({id:Z}),signal:AbortSignal.timeout(1e4)})).ok}catch{return!1}}if(await d8(s.id))console.log(` ${u5(`removed ${s.name} (via the running daemon)`)}
|
|
8
8
|
`);else{let Z=await y5(s.id);if(!Z.ok)console.error(`[beacon] remove failed: ${Z.error??"unknown error"}`),process.exit(1);console.log(` ${u5(`removed ${s.name}`)}
|
|
9
|
-
`)}if(
|
|
9
|
+
`)}if(b8(n(s.id)))console.error(`[beacon] warning: ${n(s.id)} still exists \u2014 remove it manually.`),process.exit(1);
|