trybeacon 0.1.48 → 0.1.50

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.
Files changed (114) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +13 -13
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +2 -2
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/server/app/api/context/feature/route.js +1 -1
  24. package/.next/server/app/api/db/arrange/route.js +1 -1
  25. package/.next/server/app/api/entities/route.js +1 -1
  26. package/.next/server/app/api/map/start/route.js +1 -1
  27. package/.next/server/app/docs/page.js +1 -1
  28. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/docs.html +1 -1
  30. package/.next/server/app/docs.rsc +3 -3
  31. package/.next/server/app/docs.segments/_full.segment.rsc +3 -3
  32. package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  33. package/.next/server/app/docs.segments/_index.segment.rsc +2 -2
  34. package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  35. package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
  36. package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  37. package/.next/server/app/feedback/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/feedback.html +1 -1
  39. package/.next/server/app/feedback.rsc +2 -2
  40. package/.next/server/app/feedback.segments/_full.segment.rsc +2 -2
  41. package/.next/server/app/feedback.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/feedback.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/feedback.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/feedback.segments/feedback/__PAGE__.segment.rsc +1 -1
  45. package/.next/server/app/feedback.segments/feedback.segment.rsc +1 -1
  46. package/.next/server/app/help/page.js +1 -1
  47. package/.next/server/app/help/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/help.html +1 -1
  49. package/.next/server/app/help.rsc +4 -4
  50. package/.next/server/app/help.segments/_full.segment.rsc +4 -4
  51. package/.next/server/app/help.segments/_head.segment.rsc +1 -1
  52. package/.next/server/app/help.segments/_index.segment.rsc +2 -2
  53. package/.next/server/app/help.segments/_tree.segment.rsc +2 -2
  54. package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +10 -12
  55. package/.next/server/app/help.segments/help.segment.rsc +1 -1
  56. package/.next/server/app/index.html +1 -1
  57. package/.next/server/app/index.rsc +3 -3
  58. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  59. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  60. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  61. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  62. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  63. package/.next/server/app/map/page.js +2 -2
  64. package/.next/server/app/map/page.js.nft.json +1 -1
  65. package/.next/server/app/map/page_client-reference-manifest.js +1 -1
  66. package/.next/server/app/page.js +1 -1
  67. package/.next/server/app/page_client-reference-manifest.js +1 -1
  68. package/.next/server/app/plan/page.js +2 -2
  69. package/.next/server/app/plan/page.js.nft.json +1 -1
  70. package/.next/server/app/plan/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  72. package/.next/server/app-paths-manifest.json +13 -13
  73. package/.next/server/chunks/1130.js +1 -1
  74. package/.next/server/chunks/1341.js +1 -1
  75. package/.next/server/chunks/2933.js +1 -1
  76. package/.next/server/chunks/{7208.js → 2999.js} +3 -3
  77. package/.next/server/chunks/3622.js +1 -1
  78. package/.next/server/chunks/9734.js +1 -1
  79. package/.next/server/chunks/9773.js +1 -0
  80. package/.next/server/middleware-build-manifest.js +1 -1
  81. package/.next/server/pages/404.html +1 -1
  82. package/.next/server/pages/500.html +1 -1
  83. package/.next/server/server-reference-manifest.js +1 -1
  84. package/.next/server/server-reference-manifest.json +1 -1
  85. package/.next/static/chunks/1487-13f43d25413ae041.js +1 -0
  86. package/.next/static/chunks/3343-af1292b51a276724.js +1 -0
  87. package/.next/static/chunks/app/docs/page-ae19d2e91ec24771.js +1 -0
  88. package/.next/static/chunks/app/map/page-5074176a5e746ffb.js +1 -0
  89. package/.next/static/chunks/app/page-541e900d67f17dae.js +1 -0
  90. package/.next/static/chunks/app/plan/{page-257d486640eadd7f.js → page-3c4c1fc03275299f.js} +1 -1
  91. package/.next/static/css/629ab377241de9ca.css +1 -0
  92. package/.next/trace +39 -39
  93. package/.next/trace-build +1 -1
  94. package/dist/bin/beacon.js +7 -7
  95. package/dist/bin/doctor.js +43 -32
  96. package/dist/bin/hook.js +43 -32
  97. package/dist/bin/mcp.js +49 -38
  98. package/dist/bin/plan.js +45 -34
  99. package/dist/bin/prompt.js +1 -1
  100. package/dist/bin/remove.js +7 -7
  101. package/dist/bin/uninstall.js +42 -31
  102. package/dist/lib/assets.js +30 -19
  103. package/dist/lib/codex-install.js +40 -29
  104. package/dist/lib/global-install.js +40 -29
  105. package/package.json +1 -1
  106. package/.next/server/chunks/805.js +0 -1
  107. package/.next/static/chunks/8074-a6b2725786399e2c.js +0 -1
  108. package/.next/static/chunks/85-82015ecb44b65d3e.js +0 -1
  109. package/.next/static/chunks/app/docs/page-0c841cb9a7aa2f9a.js +0 -1
  110. package/.next/static/chunks/app/map/page-c06fcf30d8172f82.js +0 -1
  111. package/.next/static/chunks/app/page-968dd5a6f667bff9.js +0 -1
  112. package/.next/static/css/5a58d83133d25695.css +0 -1
  113. /package/.next/static/{gNMdQmtkjPn6XQhRMDoMg → J1AU9kp6Vs1x9YOBkXMiR}/_buildManifest.js +0 -0
  114. /package/.next/static/{gNMdQmtkjPn6XQhRMDoMg → J1AU9kp6Vs1x9YOBkXMiR}/_ssgManifest.js +0 -0
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var m5=Object.defineProperty;var p5=(Z)=>Z;function c5(Z,$){this[Z]=p5.bind(null,$)}var uZ=(Z,$)=>{for(var Q in $)m5(Z,Q,{get:$[Q],enumerable:!0,configurable:!0,set:c5.bind($,Q)})};var X4=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var G4={};uZ(G4,{provisionDb:()=>$6});import{createClient as l5}from"@libsql/client";import{drizzle as d5}from"drizzle-orm/libsql";import{migrate as n5}from"drizzle-orm/libsql/migrator";import{readMigrationFiles as r5}from"drizzle-orm/migrator";import{dirname as fZ,join as o5}from"path";import{fileURLToPath as i5}from"url";async function DZ(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 Y4(Z){if(!await DZ(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 DZ(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=l5({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 DZ(Q,"__drizzle_migrations"),V=await DZ(Q,"Node"),K=!1;if(V&&!J){let X=r5({migrationsFolder:$})[0];if(X)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:[X.hash,X.folderMillis]}),K=!0}let Y=await Y4(Q);if(await n5(d5(Q),{migrationsFolder:$}),await Y4(Q)>Y)K=!0;return await Z6(Q),{migrated:K}}finally{Q.close()}}var s5,a5,t5;var M4=X4(async()=>{s5=fZ(fZ(fZ(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 K8,renameSync as X8,rmSync as Y8,writeFileSync as G8}from"fs";import{dirname as M8}from"path";function U8(Z,$){K8(M8(Z),{recursive:!0});let Q=`${Z}.tmp`;try{G8(Q,$),X8(Q,Z)}catch(J){throw Y8(Q,{force:!0}),J}}function j8(Z,$,Q=!1){U8(Z,JSON.stringify($,null,Q?2:void 0))}var D5=()=>{};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 LZ,readFileSync as gZ,writeFileSync as hZ}from"fs";import{homedir as H4}from"os";import{basename as K6,join as ZZ,parse as X6,resolve as U4}from"path";function t(){return process.env.BEACON_HOME||ZZ(H4(),".beacon")}function bZ(){return ZZ(t(),"workspaces.json")}function QZ(Z){return V6("sha256").update(Z).digest("hex").slice(0,12)}function mZ(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())&&$!==X6($).root}function L4(){return ZZ(t(),"deleted.json")}function pZ(){try{let Z=JSON.parse(gZ(L4(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function C4(Z){LZ(t(),{recursive:!0}),hZ(L4(),JSON.stringify(Z,null,2))}function B4(Z){return pZ().includes(Z)}function N4(Z){let $=pZ();if(!$.includes(Z))C4([...$,Z])}function Y6(Z){let $=pZ();if($.includes(Z))C4($.filter((Q)=>Q!==Z))}function n(Z){return ZZ(t(),Z)}function JZ(Z){return`file:${ZZ(n(Z),"db.sqlite")}`}function CZ(){try{let Z=JSON.parse(gZ(bZ(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function cZ(Z){LZ(t(),{recursive:!0}),hZ(bZ(),JSON.stringify(Z,null,2))}function AZ(){return CZ().sort((Z,$)=>$.lastOpenedAt.localeCompare(Z.lastOpenedAt))}function g(Z){return CZ().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=QZ(Z);if(B4(J))throw Error(`beacon: workspace ${J} (${Z}) was deleted \u2014 run \`beacon\` or /beacon-init to re-add it`);let V=CZ(),K=V.find((U)=>U.id===J),Y={id:J,path:Z,name:$||K?.name||K6(Z),lastOpenedAt:Q},X=[Y,...V.filter((U)=>U.id!==J)];return LZ(n(J),{recursive:!0}),cZ(X),Y}function o8(Z,$){return Y6(QZ(Z)),q4(Z,$)}function i8(Z,$=new Date().toISOString()){let Q=CZ(),J=Q.find((V)=>V.id===Z);if(!J)return;J.lastOpenedAt=$,cZ(Q)}function O4(Z){if(cZ(CZ().filter(($)=>$.id!==Z)),r()===Z)G6(AZ()[0]?.id??null)}function _4(){return ZZ(t(),"active")}function r(){try{return gZ(_4(),"utf8").trim()||null}catch{return null}}function G6(Z){LZ(t(),{recursive:!0}),hZ(_4(),Z??"")}function M6(){let Z=r();return Z?g(Z):null}function s8(){let Z=zZ()??r();return Z?g(Z):null}function a8(Z){return g(Z)?.path??null}function t8(){return j4(bZ())}var D4="beacon_ws";function A4(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 e8(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=A4(Z,D4);if(Q&&g(Q))return Q;return U6()}function U6(){let Z=AZ();return Z.length===1?Z[0].id:null}var j6="x-beacon-workspace-path";async function Z$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=Z.headers.get(j6);if(Q&&W4(Q)&&!B4(QZ(Q))&&(!$||QZ(Q)===$)){let V=q4(Q);return await lZ(V.id),V.id}let J=A4(Z,D4);if(J&&g(J))return J;return null}var z4=new Q6;function H6(Z,$){return Z?z4.run(Z,$):$()}function zZ(){return z4.getStore()??null}var xZ=new Set;function F4(Z){xZ.delete(ZZ(n(Z),"db.sqlite"))}async function lZ(Z){let $=n(Z),Q=ZZ($,"db.sqlite"),J=j4(Q);if(J&&xZ.has(Q))return{ok:!0,created:!1,migrated:!1};try{LZ($,{recursive:!0});let{provisionDb:V}=await M4().then(() => G4),K=await V(JZ(Z));return xZ.add(Q),{ok:!0,created:!J,migrated:J&&K.migrated}}catch(V){return{ok:!1,created:!1,migrated:!1,error:V instanceof Error?V.message:String(V)}}}import{existsSync as k8,readFileSync as w8}from"fs";import{resolve as f5}from"path";import{rmSync as v8}from"fs";import{drizzle as x6}from"drizzle-orm/libsql";import{createClient as g6}from"@libsql/client";var dZ={};uZ(dZ,{workspaceFlag:()=>O6,tag:()=>UZ,syncState:()=>a,projectMeta:()=>q6,planContract:()=>_6,note:()=>C6,nodeTags:()=>KZ,nodeFile:()=>BZ,node:()=>T,endpointTable:()=>i,endpoint:()=>v,edge:()=>VZ,draftTable:()=>c,draftRelation:()=>XZ,draftColumn:()=>qZ,dbTable:()=>E,dbRelation:()=>l,dbColumn:()=>e,codeFileEdge:()=>x,codeFile:()=>u,bugFlag:()=>NZ,boardAnnotation:()=>B6,appSetting:()=>N6});import{sqliteTable as w,index as k,foreignKey as W6,text as C,integer as z,real as b,uniqueIndex as o,primaryKey as L6}from"drizzle-orm/sqlite-core";import{createId as f}from"@paralleldrive/cuid2";var T=w("Node",{id:C().primaryKey().$defaultFn(()=>f()),view:C().notNull(),kind:C().default("FEATURE").notNull(),cluster:C(),layer:C(),title:C().notNull(),role:C(),plain:C(),status:C().default("PENDING").notNull(),priority:z().default(2).notNull(),progress:z().default(0).notNull(),x:b().default(0).notNull(),y:b().default(0).notNull(),sourceRef:C(),externalId:C(),source:C().default("MANUAL").notNull(),planId:C(),parentId:C(),createdAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[k("Node_cluster_idx").on(Z.cluster),k("Node_parentId_idx").on(Z.parentId),k("Node_view_idx").on(Z.view),W6(()=>({columns:[Z.parentId],foreignColumns:[Z.id],name:"Node_parentId_Node_id_fk"})).onUpdate("cascade").onDelete("cascade")]),BZ=w("NodeFile",{id:C().primaryKey().$defaultFn(()=>f()),nodeId:C().notNull().references(()=>T.id,{onDelete:"cascade",onUpdate:"cascade"}),path:C().notNull()},(Z)=>[o("NodeFile_nodeId_path_key").on(Z.nodeId,Z.path),k("NodeFile_nodeId_idx").on(Z.nodeId)]),UZ=w("Tag",{id:C().primaryKey().$defaultFn(()=>f()),label:C().notNull(),color:C()},(Z)=>[o("Tag_label_key").on(Z.label)]),VZ=w("Edge",{id:C().primaryKey().$defaultFn(()=>f()),fromId:C().notNull().references(()=>T.id,{onDelete:"cascade",onUpdate:"cascade"}),toId:C().notNull().references(()=>T.id,{onDelete:"cascade",onUpdate:"cascade"}),kind:C().default("DEPENDS").notNull(),label:C(),sourceHandle:C(),targetHandle:C()},(Z)=>[o("Edge_fromId_toId_kind_key").on(Z.fromId,Z.toId,Z.kind),k("Edge_toId_idx").on(Z.toId),k("Edge_fromId_idx").on(Z.fromId)]),KZ=w("_NodeTags",{a:C("A").notNull().references(()=>T.id,{onDelete:"cascade",onUpdate:"cascade"}),b:C("B").notNull().references(()=>UZ.id,{onDelete:"cascade",onUpdate:"cascade"})},(Z)=>[o("_NodeTags_AB_unique").on(Z.a,Z.b),k("_NodeTags_B_index").on(Z.b)]),C6=w("Note",{id:C().primaryKey().$defaultFn(()=>f()),title:C().default("Untitled").notNull(),body:C().default("").notNull(),ord:b().default(0).notNull(),pinned:z({mode:"boolean"}).default(!1).notNull(),createdAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[k("Note_updatedAt_idx").on(Z.updatedAt)]),B6=w("BoardAnnotation",{id:C().primaryKey().$defaultFn(()=>f()),targetKind:C().notNull(),targetId:C().notNull(),columnName:C(),body:C().default("").notNull(),x:b(),y:b(),createdAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[k("BoardAnnotation_target_idx").on(Z.targetId)]),NZ=w("BugFlag",{id:C().primaryKey().$defaultFn(()=>f()),nodeId:C().notNull().references(()=>T.id,{onDelete:"cascade",onUpdate:"cascade"}),by:C().notNull(),note:C().notNull(),resolvedAt:z({mode:"timestamp_ms"}),createdAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[k("BugFlag_nodeId_idx").on(Z.nodeId)]),E=w("DbTable",{id:C().primaryKey().$defaultFn(()=>f()),name:C().notNull(),domain:C(),description:C(),source:C().default("MANUAL").notNull(),planId:C(),x:b().default(0).notNull(),y:b().default(0).notNull(),createdAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[k("DbTable_domain_idx").on(Z.domain),o("DbTable_name_key").on(Z.name)]),e=w("DbColumn",{id:C().primaryKey().$defaultFn(()=>f()),tableId:C().notNull().references(()=>E.id,{onDelete:"cascade",onUpdate:"cascade"}),name:C().notNull(),type:C().notNull(),isPk:z({mode:"boolean"}).default(!1).notNull(),isFk:z({mode:"boolean"}).default(!1).notNull(),nullable:z({mode:"boolean"}).default(!0).notNull(),note:C(),ord:z().default(0).notNull()},(Z)=>[o("DbColumn_tableId_name_key").on(Z.tableId,Z.name),k("DbColumn_tableId_idx").on(Z.tableId)]),l=w("DbRelation",{id:C().primaryKey().$defaultFn(()=>f()),fromTableId:C().notNull().references(()=>E.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:C().notNull().references(()=>E.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:C().notNull(),toColumn:C().notNull(),label:C()},(Z)=>[k("DbRelation_toTableId_idx").on(Z.toTableId),k("DbRelation_fromTableId_idx").on(Z.fromTableId)]),v=w("Endpoint",{id:C().primaryKey().$defaultFn(()=>f()),method:C().notNull(),path:C().notNull(),domain:C(),description:C(),source:C().default("MANUAL").notNull(),planId:C(),x:b().default(0).notNull(),y:b().default(0).notNull(),createdAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("Endpoint_method_path_key").on(Z.method,Z.path),k("Endpoint_domain_idx").on(Z.domain)]),i=w("EndpointTable",{id:C().primaryKey().$defaultFn(()=>f()),endpointId:C().notNull().references(()=>v.id,{onDelete:"cascade",onUpdate:"cascade"}),tableId:C().notNull().references(()=>E.id,{onDelete:"cascade",onUpdate:"cascade"}),access:C().default("read").notNull()},(Z)=>[o("EndpointTable_endpointId_tableId_key").on(Z.endpointId,Z.tableId),k("EndpointTable_tableId_idx").on(Z.tableId)]),c=w("DraftTable",{id:C().primaryKey().$defaultFn(()=>f()),name:C().notNull(),domain:C(),description:C(),x:b().default(0).notNull(),y:b().default(0).notNull(),createdAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[o("DraftTable_name_key").on(Z.name)]),qZ=w("DraftColumn",{id:C().primaryKey().$defaultFn(()=>f()),tableId:C().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),name:C().notNull(),type:C().notNull(),isPk:z({mode:"boolean"}).default(!1).notNull(),isFk:z({mode:"boolean"}).default(!1).notNull(),nullable:z({mode:"boolean"}).default(!0).notNull(),note:C(),ord:z().default(0).notNull()},(Z)=>[k("DraftColumn_tableId_idx").on(Z.tableId)]),XZ=w("DraftRelation",{id:C().primaryKey().$defaultFn(()=>f()),fromTableId:C().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:C().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:C().notNull(),toColumn:C().notNull(),label:C()},(Z)=>[k("DraftRelation_toTableId_idx").on(Z.toTableId),k("DraftRelation_fromTableId_idx").on(Z.fromTableId)]),u=w("CodeFile",{path:C().primaryKey(),root:C(),lang:C(),x:b().default(0).notNull(),y:b().default(0).notNull(),mtimeMs:b(),size:z(),inDegree:z().default(0).notNull(),outDegree:z().default(0).notNull(),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),x=w("CodeFileEdge",{fromPath:C().notNull().references(()=>u.path,{onDelete:"cascade",onUpdate:"cascade"}),toPath:C().notNull().references(()=>u.path,{onDelete:"cascade",onUpdate:"cascade"}),circular:z({mode:"boolean"}).default(!1).notNull()},(Z)=>[k("CodeFileEdge_circular_idx").on(Z.circular),k("CodeFileEdge_toPath_idx").on(Z.toPath),k("CodeFileEdge_fromPath_idx").on(Z.fromPath),L6({columns:[Z.fromPath,Z.toPath],name:"CodeFileEdge_fromPath_toPath_pk"})]),a=w("SyncState",{id:C().primaryKey().default("singleton"),version:z().default(0).notNull(),codeGraphSyncedAt:z({mode:"timestamp_ms"}),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),N6=w("AppSetting",{id:C().primaryKey().default("singleton"),editor:C().default("auto").notNull(),currentFeatureId:C(),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),q6=w("ProjectMeta",{id:C().primaryKey().default("singleton"),overview:C(),conventions:C().default("[]").notNull(),hasFrontend:z({mode:"boolean"}),classificationRoots:C().default("[]").notNull(),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),O6=w("WorkspaceFlag",{id:C().primaryKey().$defaultFn(()=>f()),key:C().notNull(),enabled:z({mode:"boolean"}).default(!1).notNull(),config:C(),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("WorkspaceFlag_key_key").on(Z.key)]),_6=w("PlanContract",{id:C().primaryKey().$defaultFn(()=>f()),planId:C().notNull(),declaredFiles:C().default("[]").notNull(),authorizedExtras:C().default("[]").notNull(),active:z({mode:"boolean"}).default(!1).notNull(),createdAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:z({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("PlanContract_planId_key").on(Z.planId),k("PlanContract_active_idx").on(Z.active)]);var nZ={};uZ(nZ,{tagRelations:()=>F6,nodeTagsRelations:()=>P6,nodeRelations:()=>D6,nodeFileRelations:()=>A6,endpointTableRelations:()=>k6,endpointRelations:()=>v6,edgeRelations:()=>E6,draftTableRelations:()=>w6,draftRelationRelations:()=>y6,draftColumnRelations:()=>T6,dbTableRelations:()=>I6,dbRelationRelations:()=>S6,dbColumnRelations:()=>R6,codeFileRelations:()=>u6,codeFileEdgeRelations:()=>f6,bugFlagRelations:()=>z6});import{relations as h}from"drizzle-orm";var D6=h(T,({one:Z,many:$})=>({files:$(BZ),bugFlags:$(NZ),nodeTags:$(KZ),edgesOut:$(VZ,{relationName:"EdgeFrom"}),edgesIn:$(VZ,{relationName:"EdgeTo"}),parent:Z(T,{fields:[T.parentId],references:[T.id],relationName:"NodeTree"}),children:$(T,{relationName:"NodeTree"})})),A6=h(BZ,({one:Z})=>({node:Z(T,{fields:[BZ.nodeId],references:[T.id]})})),z6=h(NZ,({one:Z})=>({node:Z(T,{fields:[NZ.nodeId],references:[T.id]})})),F6=h(UZ,({many:Z})=>({nodeTags:Z(KZ)})),P6=h(KZ,({one:Z})=>({node:Z(T,{fields:[KZ.a],references:[T.id]}),tag:Z(UZ,{fields:[KZ.b],references:[UZ.id]})})),E6=h(VZ,({one:Z})=>({from:Z(T,{fields:[VZ.fromId],references:[T.id],relationName:"EdgeFrom"}),to:Z(T,{fields:[VZ.toId],references:[T.id],relationName:"EdgeTo"})})),I6=h(E,({many:Z})=>({columns:Z(e),fksOut:Z(l,{relationName:"FkFrom"}),fksIn:Z(l,{relationName:"FkTo"}),usages:Z(i)})),R6=h(e,({one:Z})=>({table:Z(E,{fields:[e.tableId],references:[E.id]})})),S6=h(l,({one:Z})=>({fromTable:Z(E,{fields:[l.fromTableId],references:[E.id],relationName:"FkFrom"}),toTable:Z(E,{fields:[l.toTableId],references:[E.id],relationName:"FkTo"})})),v6=h(v,({many:Z})=>({tables:Z(i)})),k6=h(i,({one:Z})=>({endpoint:Z(v,{fields:[i.endpointId],references:[v.id]}),table:Z(E,{fields:[i.tableId],references:[E.id]})})),w6=h(c,({many:Z})=>({columns:Z(qZ),fksOut:Z(XZ,{relationName:"DraftFkFrom"}),fksIn:Z(XZ,{relationName:"DraftFkTo"})})),T6=h(qZ,({one:Z})=>({table:Z(c,{fields:[qZ.tableId],references:[c.id]})})),y6=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"})})),u6=h(u,({many:Z})=>({edgesOut:Z(x,{relationName:"CFEFrom"}),edgesIn:Z(x,{relationName:"CFETo"})})),f6=h(x,({one:Z})=>({fromFile:Z(u,{fields:[x.fromPath],references:[u.path],relationName:"CFEFrom"}),toFile:Z(u,{fields:[x.toPath],references:[u.path],relationName:"CFETo"})}));var h6={...dZ,...nZ};function b6(){let Z=process.env.DATABASE_URL;if(Z&&/^(file:|libsql:|wss?:|https?:|:memory:)/i.test(Z))return Z;return"file:./dev.db"}var m6=b6();function P4(Z){let $=g6({url:Z});return $.execute("PRAGMA foreign_keys = ON;"),$.execute("PRAGMA busy_timeout = 5000;"),x6($,{schema:h6})}var oZ=globalThis,rZ=oZ.dzDefault??P4(m6);oZ.dzDefault=rZ;var FZ=oZ.dzByUrl??=new Map;function iZ(Z){let $=FZ.get(Z);if(!$)$=P4(Z),FZ.set(Z,$);return $}function E4(Z){let $=FZ.get(Z);FZ.delete(Z);try{$?.$client?.close?.()}catch{}}function p6(){if(process.env.BEACON_REPO)return rZ;let Z=zZ()??r();if(!Z)return rZ;return iZ(JZ(Z))}var m=new Proxy({},{get(Z,$){let Q=p6(),J=Q[$];return typeof J==="function"?J.bind(Q):J}});import{existsSync as I8}from"fs";import{existsSync as k5,readFileSync as D8,watch as A8}from"fs";import{readFile as v5}from"fs/promises";import{join as _Z,relative as z8,resolve as F8}from"path";import{existsSync as l4,readFileSync as d4}from"fs";import{readdir as O7,readFile as _7,stat as n4}from"fs/promises";import{extname as r4,join as RZ,relative as HZ,resolve as jZ}from"path";import{extname as h4}from"path";import{dirname as c6,resolve as l6}from"path";var sZ=[".ts",".tsx",".js",".jsx",".mjs",".cjs"],d6=[/(?:^|[\n;])\s*(?:import|export)[^'"`\n]{0,4000}?from\s*['"]([^'"`]+)['"]/g,/(?:^|[\n;])\s*import\s*['"]([^'"`]+)['"]/g,/\brequire\(\s*['"]([^'"`]+)['"]\s*\)/g,/\bimport\(\s*['"]([^'"`]+)['"]\s*\)/g];function n6(Z){return Z.split(/[\\/]/).join("/")}function I4(Z,$){if($.has(Z))return Z;for(let Q of sZ){let J=`${Z}${Q}`;if($.has(J))return J}for(let Q of sZ){let J=`${Z}/index${Q}`;if($.has(J))return J}return null}function r6(Z){let $=new Set;for(let Q of d6)for(let J of Z.matchAll(Q))$.add(J[1]);return $}function o6(Z,$,Q,J){if(Z.startsWith(".")){let V=l6("/",c6($),Z),K=n6(V).replace(/^\//,"");return I4(K,Q)}for(let V of J)if(Z.startsWith(V.from)){let K=Z.slice(V.from.length),Y=V.to?`${V.to}/${K}`:K,X=I4(Y,Q);if(X)return X}return null}var R4={id:"ts",extensions:sZ,specifiers:r6,resolve(Z,$,Q){let J=o6(Z,$,Q.fileSet,Q.tsAliases??[]);return J?[J]:[]}};import{dirname as PZ,join as i6,normalize as s6}from"path";var a6=[".py",".pyi"],S4=[/(?:^|[\n;])\s*from\s+(\.*[\w.]*)\s+import\b/g,/(?:^|[\n;])\s*import\s+([\w.]+(?:\s*,\s*[\w.]+)*)/g];function v4(Z,$){for(let Q of[`${Z}.py`,`${Z}/__init__.py`,`${Z}.pyi`])if($.has(Q))return[Q];return[]}function t6(Z){let $=new Set;for(let Q of Z.matchAll(S4[0])){let J=Q[1].trim();if(J)$.add(J)}for(let Q of Z.matchAll(S4[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 k4={id:"python",extensions:a6,specifiers:t6,resolve(Z,$,Q){if(Z.startsWith(".")){let Y=Z.length-Z.replace(/^\.+/,"").length,X=Z.slice(Y),U=PZ($);for(let M=1;M<Y;M++)U=PZ(U);let H=X?i6(U,X.replace(/\./g,"/")):U;return v4(s6(H).replace(/\\/g,"/"),Q.fileSet)}let J=Z.replace(/\./g,"/"),V=[],K=PZ($);while(K&&K!=="."&&K!=="/")V.push(K),K=PZ(K);V.push("");for(let Y of V){let X=v4(Y?`${Y}/${J}`:J,Q.fileSet);if(X.length)return X}return[]}};import{dirname as e6}from"path";var Z7=[".go"],$7=/(?:^|[\n;])\s*import\s+(?:[\w.]+\s+)?"([^"]+)"/g,Q7=/(?:^|[\n;])\s*import\s*\(([\s\S]*?)\)/g,J7=/"([^"]+)"/g;function V7(Z){let $=new Set;for(let Q of Z.matchAll($7))$.add(Q[1]);for(let Q of Z.matchAll(Q7))for(let J of Q[1].matchAll(J7))$.add(J[1]);return $}var w4={id:"go",extensions:Z7,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 K=[];for(let Y of Q.fileSet){if(!Y.endsWith(".go"))continue;let X=e6(Y);if(V===""&&X==="."||X===V)K.push(Y)}return K.sort()},specifiers:V7};import{basename as T4,dirname as aZ,join as y4,normalize as u4}from"path";var K7=[".rs"],X7=/(?:^|[\n;])\s*(?:pub\s+)?mod\s+(\w+)\s*;/g,Y7=/(?:^|[\n;])\s*(?:pub\s+)?use\s+([\w:]+)/g;function G7(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 tZ(Z,$){for(let Q of[`${Z}.rs`,`${Z}/mod.rs`])if($.has(Q))return[Q];return[]}var M7=new Set(["mod.rs","lib.rs","main.rs"]);function U7(Z){let $=new Set;for(let Q of Z.matchAll(X7))$.add(`./${Q[1]}`);for(let Q of Z.matchAll(Y7)){let J=G7(Q[1]);if(J)$.add(J)}return $}var f4={id:"rust",extensions:K7,specifiers:U7,resolve(Z,$,Q){let J=Q.fileSet;if(Z.startsWith("./")||Z.startsWith("../")){let V=Z.replace(/^\.\//,""),K=u4(y4(aZ($),Z)).replace(/\\/g,"/"),Y=tZ(K,J);if(Y.length)return Y;if(Z.startsWith("./")&&!M7.has(T4($))){let X=y4(aZ($),T4($,".rs"),V);if(Y=tZ(u4(X).replace(/\\/g,"/"),J),Y.length)return Y}return[]}if(Z.startsWith("crate/")){let V=$.split("/"),K=V.lastIndexOf("src"),Y=K>=0?V.slice(0,K+1).join("/"):aZ($),X=Z.slice(6).split("/");for(let U of[X.join("/"),X.slice(0,-1).join("/")]){if(!U)continue;let H=tZ(`${Y}/${U}`,J);if(H.length)return H}return[]}return[]}};import{dirname as j7,extname as H7,join as W7,normalize as L7}from"path";var x4=[".swift",".java",".rb",".kt",".kts",".cs",".php",".scala",".c",".h",".cpp",".hpp",".cc",".hh",".m",".mm",".ex",".exs",".lua",".dart",".vue",".svelte"],C7=[/\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 C7)for(let J of Z.matchAll(Q)){let V=J[1].trim();if(V)$.add(V)}return $}var g4={id:"fallback",extensions:x4,specifiers:B7,resolve(Z,$,Q){let V=[H7($).toLowerCase(),...x4].filter((U,H,M)=>U&&M.indexOf(U)===H),K=Z.includes("/")||Z.includes("\\"),Y=Z.startsWith(".")||K?Z.replace(/\\/g,"/"):Z.replace(/[.:]+/g,"/"),X=[L7(W7(j7($),Y)).replace(/\\/g,"/"),Y.replace(/^\.\//,"")];for(let U of X){if(Q.fileSet.has(U))return[U];for(let H of V){let M=U.endsWith(H)?U:`${U}${H}`;if(Q.fileSet.has(M))return[M];if(Q.fileSet.has(`${U}/index${H}`))return[`${U}/index${H}`]}}return[]}};var N7=[R4,k4,w4,f4,g4],EZ=new Map;for(let Z of N7)for(let $ of Z.extensions)EZ.set($,Z);var q7={".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 eZ(Z){return EZ.get(h4(Z).toLowerCase())??null}function b4(Z){let $=h4(Z).toLowerCase();if(!EZ.has($))return null;return q7[$]??$.slice(1)}function Z4(){return new Set(EZ.keys())}var o4=new Set(["node_modules",".git",".next","dist","build","__pycache__","target",".venv","venv","env",".turbo","coverage",".beacon",".playwright-mcp","generated","migrations","alembic","migrate"]);function D7(Z=5){let $=performance.now();return async()=>{if(performance.now()-$>Z)await new Promise((Q)=>setImmediate(Q)),$=performance.now()}}var A7=()=>Promise.resolve();async function i4(Z,$,Q,J,V){let K;try{K=await O7($,{withFileTypes:!0})}catch{return}for(let Y of K){if(Y.name.startsWith("."))continue;if(o4.has(Y.name))continue;let X=RZ($,Y.name);if(Y.isDirectory()){await i4(Z,X,Q,J,V);continue}if(!Y.isFile())continue;if(Y.name.endsWith(".d.ts"))continue;if(!Q.has(r4(Y.name).toLowerCase()))continue;J.push(HZ(Z,X))}await V()}async function z7(Z,$=A7){let Q=[];return await i4(Z,Z,Z4(),Q,$),Q.map((J)=>J.split(/[\\/]/).join("/")).sort()}function F7(Z){try{return JSON.parse(Z)}catch{}let $=Z.replace(/\/\*[^"]*?\*\//g,"").replace(/(^|[^:"])\/\/.*$/gm,"$1").replace(/,\s*([}\]])/g,"$1");return JSON.parse($)}function m4(Z){return Z.replace(/^\.\/?/,"").replace(/\/$/,"")}function s4(Z){let $=RZ(Z,"tsconfig.json");if(!l4($))return[];let Q;try{Q=F7(d4($,"utf8"))}catch{return[]}let J=Q.compilerOptions?.paths??{},V=m4(Q.compilerOptions?.baseUrl??"."),K=[];for(let[Y,X]of Object.entries(J)){if(!Y.endsWith("/*")||!X.length)continue;let U=X[0];if(!U.endsWith("/*"))continue;let H=Y.slice(0,-1),M=m4(U.slice(0,-1)),L=[V,M].filter(Boolean).join("/");K.push({from:H,to:L})}return K}function IZ(Z){let $=RZ(Z,"go.mod");if(!l4($))return null;try{let Q=/^\s*module\s+(\S+)/m.exec(d4($,"utf8"));return Q?Q[1]:null}catch{return null}}function p(Z){return Z.split(/[\\/]/).join("/")}function a4(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 P7(Z,$,Q){let J=(Array.isArray(Z)?Z:[Z]).map((H)=>p(jZ(H))),V=p($?jZ($):J.length===1?J[0]:a4(J)),K=new Map,Y=[];for(let H of J){let M=p(HZ(V,H));for(let L of s4(H))Y.push({from:L.from,to:[M,L.to].filter(Boolean).join("/")});for(let L of await z7(H,Q)){let B=p(RZ(H,L)),q=p(HZ(V,B));if(K.has(q))continue;try{let j=await n4(B);K.set(q,{path:q,abs:B,root:M||null,mtimeMs:j.mtimeMs,size:j.size})}catch{}await Q()}}let X=J.map(IZ).find(Boolean)??IZ(V);return{metas:[...K.values()].sort((H,M)=>H.path.localeCompare(M.path)),ctx:{fileSet:new Set(K.keys()),tsAliases:Y,goModulePath:X}}}var p4=50000;function E7(Z){let $=0;for(let Q=0;Q<Z.length;Q++)if(Z.charCodeAt(Q)===10){if(Q-$>p4)return!0;$=Q+1}return Z.length-$>p4}async function c4(Z){let $=eZ(Z.path);if(!$||Z.size>200000)return new Set;try{let Q=await _7(Z.abs,"utf8");if(E7(Q))return new Set;return $.specifiers(Q)}catch{return new Set}}function t4(Z,$){let Q=(Array.isArray(Z)?Z:[Z]).map((j)=>p(jZ(j))),J=p($?jZ($):Q.length===1?Q[0]:a4(Q)),V=new Map,K=new Map,Y=[],X=null;function U(){Y=[];for(let j of Q){let W=p(HZ(J,j));for(let O of s4(j))Y.push({from:O.from,to:[W,O.to].filter(Boolean).join("/")})}X=Q.map(IZ).find(Boolean)??IZ(J)}function H(j){let W=j.split("/");for(let _=0;_<W.length;_++){let N=W[_];if(!N||N.startsWith("."))return!0;if(_<W.length-1&&o4.has(N))return!0}let O=W[W.length-1];if(O.endsWith(".d.ts"))return!0;return!Z4().has(r4(O).toLowerCase())}function M(j){let W=p(jZ(j));for(let O of Q)if(W===O||W.startsWith(`${O}/`)){let _=W.slice(O.length).replace(/^\/+/,"");if(H(_))return null;return{path:p(HZ(J,W)),root:p(HZ(J,O))||null}}return null}function L(){let j={fileSet:new Set(V.keys()),tsAliases:Y,goModulePath:X},W=[...V.values()].sort((N,G)=>N.path.localeCompare(G.path)),O=[];for(let N of W){let G=eZ(N.path);if(!G)continue;let D=K.get(N.path)??new Set,A=new Set;for(let R of D)for(let y of G.resolve(R,N.path,j)){if(!y||y===N.path||A.has(y))continue;A.add(y),O.push({from:N.path,to:y})}}return{files:W.map((N)=>({path:N.path,lang:b4(N.path),root:N.root,mtimeMs:N.mtimeMs,size:N.size})),edges:O}}async function B(){let j=D7(),{metas:W,ctx:O}=await P7(Z,$,j);V.clear(),K.clear();for(let _ of W)await j(),V.set(_.path,_),K.set(_.path,await c4(_));return Y=O.tsAliases??[],X=O.goModulePath??null,L()}async function q(j){let W=p(jZ(j));if(!Q.some((A)=>W===A||W.startsWith(`${A}/`)))return!1;let O=W.split("/").pop()??"";if(O==="tsconfig.json"||O==="go.mod"){let A=W.slice(0,W.length-O.length-1);if(Q.includes(A))return U(),!0;return!1}let _=M(j);if(!_)return!1;let N;try{N=await n4(W)}catch{let A=V.delete(_.path);return K.delete(_.path),A}let G=V.get(_.path);if(G&&G.mtimeMs===N.mtimeMs&&G.size===N.size)return!1;let D={path:_.path,abs:W,root:_.root,mtimeMs:N.mtimeMs,size:N.size};return V.set(_.path,D),K.set(_.path,await c4(D)),!0}return{seed:B,applyChange:q,snapshot:L}}function e4(Z){let $=Object.keys(Z.tableVars),Q=new Map;if(!$.length){for(let Y of Z.routeFiles)Q.set(Y,[]);return Q}let J=new Map;for(let Y of Z.edges){let X=J.get(Y.from)??[];X.push(Y.to),J.set(Y.from,X)}let V=new Map($.map((Y)=>[Y,new RegExp(`(?:query\\.${Y}\\b|\\.from\\(\\s*${Y}\\b)`)])),K=new Map($.map((Y)=>[Y,new RegExp(`(?:insert|update|delete)\\(\\s*${Y}\\b`)]));for(let Y of Z.routeFiles){let X=new Set([Y]),U=[Y];for(let B=0;B<2&&X.size<25;B++){let q=[];for(let j of U)for(let W of J.get(j)??[]){if(X.has(W)||X.size>=25)continue;X.add(W),q.push(W)}U=q}let H=new Set,M=new Set;for(let B of X){let q=Z.content(B);if(!q)continue;for(let j of $){if(!H.has(j)&&V.get(j).test(q))H.add(j);if(!M.has(j)&&K.get(j).test(q))M.add(j)}}let L=[];for(let B of $){let q=H.has(B),j=M.has(B);if(!q&&!j)continue;L.push({table:Z.tableVars[B],access:q&&j?"read-write":j?"write":"read"})}Q.set(Y,L)}return Q}function $5(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 K=Q[2]??"",Y=K.match(/\d+/)?.[0];switch(Q[1]){case"GUID":case"Uuid":case"UUID":return"uuid";case"String":return Y?`varchar(${Y})`:"varchar";case"Text":return"text";case"DateTime":return/timezone\s*=\s*True/.test(K)?"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 Y?`vector(${Y})`:"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 SZ(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 I7(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 R7(Z,$,Q){let J=Q.match(/__tablename__\s*=\s*["']([^"']+)["']/)?.[1],V=[],K=[],Y=[],X=/(\w+)\s*:\s*Mapped\s*\[/g,U;while(U=X.exec(Q)){let L=U.index+U[0].length-1,B=I7(Q,L);if(B===null)continue;let q=L+B.length+2,j=Q.slice(q).match(/^\s*=\s*(\w+)\s*\(/);if(!j||j[1]!=="mapped_column")continue;Y.push({colName:U[1],pyType:B,argsAt:q+j[0].length-1})}let H=/(\w+)\s*=\s*(mapped_column|Column)\s*\(/g;while(U=H.exec(Q))Y.push({colName:U[1],pyType:"",argsAt:U.index+U[0].length-1});Y.sort((L,B)=>L.argsAt-B.argsAt);let M=new Set;for(let L of Y){if(M.has(L.colName)||L.colName==="__tablename__")continue;M.add(L.colName);let B=SZ(Q,L.argsAt),q=/primary_key\s*=\s*True/.test(B)||void 0,j=/nullable\s*=\s*False/.test(B)?!1:!0,W=B.match(/ForeignKey\(\s*["']([^"']+?)\.([^"'.]+)["']/);if(V.push({name:L.colName,type:$5(B,L.pyType),isPk:q,isFk:W?!0:void 0,nullable:j}),W)K.push({column:L.colName,toTable:W[1],toColumn:W[2]})}return{name:Z,bases:$,tableName:J,columns:V,fks:K}}function S7(Z){let $=[],Q=[],J=/\bTable\s*(\()\s*["']([^"']+)["']\s*,/g,V;while(V=J.exec(Z)){let K=V[2],Y=SZ(Z,V.index+V[0].indexOf("("));if(!/\bmetadata\b/.test(Y)||!/\bColumn\s*\(/.test(Y))continue;let X=[],U=/\bColumn\s*\(/g,H;while(H=U.exec(Y)){let M=SZ(Y,H.index+H[0].length-1),L=M.match(/^\s*["'](\w+)["']\s*,/)?.[1];if(!L)continue;let B=/primary_key\s*=\s*True/.test(M)||void 0,q=/nullable\s*=\s*False/.test(M)?!1:!0,j=M.match(/ForeignKey\(\s*["']([^"']+?)\.([^"'.]+)["']/);if(X.push({name:L,type:$5(M,""),isPk:B,isFk:j?!0:void 0,nullable:q}),j)Q.push({fromTable:K,fromColumn:L,toTable:j[1],toColumn:j[2]})}if(X.length)$.push({name:K,columns:X})}return{tables:$,relations:Q}}function v7(Z){let $=new Map,Q={tables:[],relations:[]};for(let X of Z){if(!X.path.endsWith(".py"))continue;if(!/mapped_column\s*\(|__tablename__|\bTable\s*\(\s*["']/.test(X.content))continue;let U=S7(X.content);Q.tables.push(...U.tables),Q.relations.push(...U.relations);let H=/^class\s+(\w+)\s*\(([^)]*)\)\s*:/gm,M,L=[];while(M=H.exec(X.content))L.push({name:M[1],bases:M[2].split(",").map((B)=>B.trim().split(/[.[]/)[0]).filter(Boolean),at:M.index});for(let B=0;B<L.length;B++){let q=X.content.slice(L[B].at,L[B+1]?.at??X.content.length),j=R7(L[B].name,L[B].bases,q);$.set(j.name,j)}}if(![...$.values()].some((X)=>X.tableName)&&!Q.tables.length)return{tables:[],relations:[]};let J=(X,U=new Set)=>{if(U.has(X.name))return[];U.add(X.name);let H=[];for(let M of X.bases){let L=$.get(M);if(L&&!L.tableName)H.push(...J(L,U))}return H.push(...X.columns),H},V=[],K=[];for(let X of $.values()){if(!X.tableName)continue;let U=J(X),H=new Map;for(let j of U)if(!H.has(j.name))H.set(j.name,j);let M=[...H.values()],L=(j)=>M.splice(M.findIndex((W)=>W.name===j),1)[0],B=M.some((j)=>j.name==="id")?L("id"):null,q=["created_at","updated_at","deleted_at"].filter((j)=>M.some((W)=>W.name===j)).map((j)=>L(j));V.push({name:X.tableName,columns:[...B?[B]:[],...M,...q]});for(let j of X.fks)K.push({fromTable:X.tableName,fromColumn:j.column,toTable:j.toTable,toColumn:j.toColumn})}let Y=new Set(V.map((X)=>X.name));for(let X of Q.tables)if(!Y.has(X.name))V.push(X);return K.push(...Q.relations.filter((X)=>!Y.has(X.fromTable))),{tables:V,relations:K}}function k7(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 w7(Z){let $=[],Q=[];for(let J of Z){if(!J.path.endsWith(".prisma"))continue;let V=/model\s+(\w+)\s*\{([\s\S]*?)\}/g,K;while(K=V.exec(J.content)){let Y=K[1],X=K[2].match(/@@map\(\s*["']([^"']+)["']\s*\)/)?.[1]??Y,U=[];for(let H of K[2].split(`
4
- `)){let M=H.trim().match(/^(\w+)\s+(\w+(?:\[\])?\??)\s*(.*)$/);if(!M||/^@@/.test(H.trim()))continue;let[,L,B,q]=M,j=/^(String|Int|BigInt|Float|Decimal|Boolean|DateTime|Json|Bytes)(\[\])?\??$/.test(B),W=q.match(/@relation\([^)]*fields:\s*\[(\w+)\][^)]*references:\s*\[(\w+)\]/);if(W)Q.push({fromTable:X,fromColumn:W[1],toTable:B.replace(/[?[\]]/g,""),toColumn:W[2]});if(!j)continue;U.push({name:L,type:k7(B),isPk:/@id\b/.test(q)||void 0,isFk:/@relation\b/.test(q)||void 0,nullable:B.endsWith("?")})}if(U.length)$.push({name:X,columns:U})}}return{tables:$,relations:Q}}function T7(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 y7(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 u7(Z){let $=[],Q=/(\w+)\s*:\s*(text|integer|real|blob|numeric|varchar|boolean|timestamp|serial|uuid|json|jsonb)\s*\(/g;for(let K of Z){if(!/\.(ts|tsx|mts|cts)$/.test(K.path))continue;if(!/\b(?:sqliteTable|pgTable|mysqlTable)\s*\(/.test(K.content))continue;let Y=/(?:export\s+)?const\s+(\w+)\s*=\s*(?:sqliteTable|pgTable|mysqlTable)\s*\(\s*["']([^"']+)["']\s*,/g,X;while(X=Y.exec(K.content)){let U=K.content.indexOf("{",X.index+X[0].length);if(U<0)continue;let H=y7(K.content,U),M={varName:X[1],tableName:X[2],columns:[],colByProp:new Map,fks:[]},L=[];Q.lastIndex=0;for(let B of H.matchAll(Q))L.push({prop:B[1],builder:B[2],at:B.index,argOpen:B.index+B[0].length-1});L.forEach((B,q)=>{let j=H.slice(B.at,L[q+1]?.at??H.length),W=SZ(H,B.argOpen),_=W.match(/^\s*["']([^"']+)["']/)?.[1]??B.prop,N=j.match(/\.references\(\s*\(\)\s*=>\s*(\w+)\.(\w+)/);if(M.columns.push({name:_,type:T7(B.builder,W),isPk:/\.primaryKey\(\)/.test(j)||void 0,isFk:N?!0:void 0,nullable:/\.notNull\(\)/.test(j)?!1:!0}),M.colByProp.set(B.prop,_),N)M.fks.push({column:_,toVar:N[1],toProp:N[2]})}),$.push(M)}}if(!$.length)return{tables:[],relations:[]};let J=new Map($.map((K)=>[K.varName,K])),V=[];for(let K of $)for(let Y of K.fks){let X=J.get(Y.toVar);if(!X)continue;V.push({fromTable:K.tableName,fromColumn:Y.column,toTable:X.tableName,toColumn:X.colByProp.get(Y.toProp)??Y.toProp})}return{tables:$.map((K)=>({name:K.tableName,columns:K.columns})),relations:V,tableVars:Object.fromEntries($.map((K)=>[K.varName,K.tableName]))}}var f7={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"},x7=/^(List|Set|Map|Collection|Iterable)$/;function Q5(Z){if(/byte\s*\[\s*\]/.test(Z))return"byte[]";return(Z.replace(/<.*>/,"").trim().split(".").pop()??Z).trim()}function g7(Z){let $=Q5(Z);if($==="byte[]")return"bytea";return f7[$]??$.toLowerCase()}function vZ(Z,$){return Z.match(new RegExp(`\\b${$}\\s*=\\s*"([^"]*)"`))?.[1]}function Z5(Z,$){let Q=Z.match(new RegExp(`\\b${$}\\s*=\\s*(true|false)`));return Q?Q[1]==="true":void 0}function h7(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:K,rest:Y}=h7(V);if(Q.push(...K),!Y)continue;let X=Y,U="";while(X!==U)U=X,X=X.replace(/^(?:public|private|protected|static|final|transient|volatile)\s+/,"");let H=!X.includes("(")?X.match(/^([\w.$]+(?:<[^>]*>)?(?:\s*\[\s*\])?)\s+(\w+)\s*[;=]/):null;if(H)$.push({annots:Q,type:H[1],name:H[2]});Q=[]}return $}function m7(Z){let $=[],Q=/\bclass\s+(\w+)/g,J;while(J=Q.exec(Z))$.push({name:J[1],at:J.index});let V=[];for(let K=0;K<$.length;K++){let Y=Z.slice(K===0?0:$[K-1].at,$[K].at);if(!/@Entity\b/.test(Y))continue;let X=Y.match(/@Table\s*\([^)]*\)/)?.[0]??"",U=vZ(X,"name")??$[K].name,H=Z.slice($[K].at,$[K+1]?.at??Z.length),M=b7(H),L=M.find((q)=>q.annots.some((j)=>/@Id\b/.test(j))),B=L?vZ(L.annots.find((q)=>/@Column\b/.test(q))??"","name")??L.name:"id";V.push({className:$[K].name,tableName:U,idColumn:B,fields:M})}return V}function p7(Z){let $=Z.filter((X)=>X.path.endsWith(".java")&&/@Entity\b/.test(X.content));if(!$.length)return{tables:[],relations:[]};let Q=$.flatMap((X)=>m7(X.content));if(!Q.length)return{tables:[],relations:[]};let J=new Map(Q.map((X)=>[X.className,X.tableName])),V=new Map(Q.map((X)=>[X.className,X.idColumn])),K=[],Y=[];for(let X of Q){let U=[];for(let H of X.fields){let M=H.annots.join(" ");if(/@Transient\b/.test(M))continue;let L=Q5(H.type);if(/@ManyToOne\b|@OneToOne\b|@OneToMany\b|@ManyToMany\b/.test(M)||J.has(L)){let N=H.annots.find((D)=>/@JoinColumn\b/.test(D)),G=N?vZ(N,"name"):void 0;if(G){U.push({name:G,type:"bigint",isFk:!0,nullable:Z5(M,"nullable")??!0});let D=J.get(L);if(D)Y.push({fromTable:X.tableName,fromColumn:G,toTable:D,toColumn:V.get(L)??"id"})}continue}if(x7.test(L))continue;let j=H.annots.find((N)=>/@Column\b/.test(N))??"",W=vZ(j,"name")??H.name,O=H.annots.some((N)=>/@Id\b/.test(N)),_=Z5(j,"nullable");U.push({name:W,type:g7(H.type),...O?{isPk:!0}:{},..._!==void 0?{nullable:_}:{}})}K.push({name:X.tableName,columns:U})}return{tables:K,relations:Y}}function J5(Z){let $=u7(Z);if($.tables.length)return $;let Q=w7(Z);if(Q.tables.length)return Q;let J=v7(Z);if(J.tables.length)return J;return p7(Z)}var c7=["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 V5(Z){let $=[];for(let Q of Z){let J=l7(Q.path);if(!J)continue;for(let V of c7)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 d7=/(^|\/)app\/.*\/route\.(ts|tsx|js|jsx|mjs)$/,n7=/\.(ts|py)$/,r7=/(schema|model)/i,o7=/(\.(test|spec)\.[jt]sx?$)|(^|\/)(tests?|__tests__|__mocks__)\/|(^|\/)test_[^/]+\.py$|_test\.py$/;function $4(Z){if(o7.test(Z))return!1;if(Z.endsWith(".prisma"))return!0;if(d7.test(Z))return!0;if(Z.endsWith(".java"))return!0;return n7.test(Z)&&r7.test(Z)}function K5(Z,$=300){return Z.filter($4).slice(0,$)}import{z as d}from"zod";import{and as P5,eq as WZ,inArray as N8,notInArray as q8}from"drizzle-orm";import{z as P}from"zod";import{and as H8,eq as TZ,inArray as J4,notInArray as W8,or as L8,sql as C8}from"drizzle-orm";var X5=240,Y5=50;function G5(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+Y5&&J.y+Y5>V.y)return!0}return!1}import{eq as i7}from"drizzle-orm";var M5=(Z)=>Z.replace(/\{[^}]*\}/g,"{}");function s7(Z,$){if(Z.method.toUpperCase()!==$.method.toUpperCase())return!1;let Q=M5(Z.path),J=M5($.path);return J===Q||J.endsWith(Q)}async function U5(Z=m){let[$,Q]=await Promise.all([Z.query.endpoint.findMany({where:(V,{ne:K})=>K(V.source,"INTROSPECTION")}),Z.query.endpoint.findMany({where:(V,{eq:K})=>K(V.source,"INTROSPECTION")})]),J={collapsed:0,mappings:[]};for(let V of $){let K=Q.find((Y)=>s7(V,Y));if(!K)continue;await Z.delete(v).where(i7(v.id,V.id)),J.collapsed++,J.mappings.push({planned:`${V.method} ${V.path}`,code:`${K.method} ${K.path}`})}return J}import{and as j5,inArray as a7,isNull as H5,ne as W5,or as t7}from"drizzle-orm";var e7=new Set(["DONE","CANCELLED","DEPRIORITIZED"]);async function Z8(Z){let $=await Z.query.node.findMany({where:(J,{and:V,eq:K,isNotNull:Y})=>V(K(J.view,"ROADMAP"),Y(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)&&e7.has(J.status))}return[...Q.entries()].filter(([,J])=>J).map(([J])=>J)}async function L5(Z=m){let $=await Z8(Z),Q=(K)=>$.length?t7(H5(K.planId),a7(K.planId,$)):H5(K.planId),J=await Z.delete(E).where(j5(W5(E.source,"INTROSPECTION"),Q(E))).returning({id:E.id}),V=await Z.delete(v).where(j5(W5(v.source,"INTROSPECTION"),Q(v))).returning({id:v.id});return{tables:J.length,endpoints:V.length}}var B5=320;function $Z(Z){return 36+Math.max(0,Z)*30+16}var YZ=60,$8=280,kZ=14,C5=120,OZ=170,Q8=2560;var wZ=(Z)=>(Z??"").trim()||"\u2014";function J8(Z,$,Q){let J=new Map;for(let K of Z.uses){if(!$.has(K.tableId))continue;J.set(K.tableId,(J.get(K.tableId)??0)+1)}let V=null;for(let[K,Y]of J){if(V===null){V=K;continue}let X=J.get(V);if(Y>X){V=K;continue}if(Y<X)continue;let U=Q?.get(K)??0,H=Q?.get(V)??0;if(U<H)V=K;else if(U===H&&$.get(K).localeCompare($.get(V))<0)V=K}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 K of V.uses){if(!Q.has(K.tableId))continue;J.set(K.tableId,(J.get(K.tableId)??0)+1)}return new Map($.map((V)=>[V.id,J8(V,Q,J)]))}var V8=(Z,$)=>Z.path.localeCompare($.path)||Z.method.localeCompare($.method)||Z.id.localeCompare($.id);function N5(Z,$){let Q=Q4(Z,$),J=new Map,V=[];for(let N of[...$].sort(V8)){let G=Q.get(N.id)??null;if(G){let D=J.get(G);if(D)D.push(N);else J.set(G,[N])}else V.push(N)}let K=(N)=>{let G=J.get(N.id)?.length??0;return $Z(N.columnCount)+(G?kZ+G*YZ:0)+50},Y=Array.from(new Set(Z.map((N)=>wZ(N.domain)))),X=Y.filter((N)=>N!=="\u2014").sort(),U=Y.includes("\u2014")?[...X,"\u2014"]:X,H=[];for(let N of U){let G=Z.filter((S)=>wZ(S.domain)===N).sort((S,I)=>S.name.localeCompare(I.name)),D=G.reduce((S,I)=>S+K(I),0),A=Math.max(1,Math.min(12,G.length,Math.round(Math.sqrt(D/320)))),R=Array(A).fill(0),y=new Map;for(let S of G){let I=0;for(let F=1;F<A;F++)if(R[F]<R[I])I=F;y.set(S.id,{x:I*320,y:R[I]}),R[I]+=K(S)}H.push({d:N,w:A*320,h:Math.max(...R,0),tableLocal:y})}let M=H.reduce((N,G)=>N+(G.w+C5)*(G.h+OZ),0),L=Math.max(Q8,Math.round(Math.sqrt(M*2.2))),B=new Map,q=new Map,j=0,W=0,O=0,_=0;for(let N of H){if(j>0&&j+N.w>L)W+=O+OZ,j=0,O=0;let G=Z.filter((D)=>N.tableLocal.has(D.id));for(let D of G){let A=N.tableLocal.get(D.id),R=j+A.x,y=W+A.y;B.set(D.id,{x:R,y}),(J.get(D.id)??[]).forEach((I,F)=>{q.set(I.id,{x:R,y:y+$Z(D.columnCount)+kZ+F*YZ})})}O=Math.max(O,N.h),_=Math.max(_,W+N.h),j+=N.w+C5}if(V.length){let N=_+OZ,G=Math.max(1,Math.min(4,Math.ceil(Math.sqrt(V.length/2))));V.forEach((D,A)=>{q.set(D.id,{x:A%G*$8,y:N+Math.floor(A/G)*YZ})})}return{tables:B,endpoints:q}}function q5(Z,$,Q){let J=Q4($,Q),V=new Map;for(let q of Q){let j=J.get(q.id);if(j)V.set(j,(V.get(j)??0)+1)}let K=(q)=>{let j=V.get(q.id)??0;return q.y+$Z(q.columnCount)+(j?kZ+j*YZ:0)},Y=wZ(Z.domain),X=$.filter((q)=>wZ(q.domain)===Y);if(!X.length){let q=$.length?Math.max(...$.map(K),...Q.map((j)=>j.y+YZ)):0;return{x:0,y:$.length||Q.length?q+OZ:0}}let U=Math.min(...X.map((q)=>q.x)),H=X.map((q)=>Math.max(0,Math.round((q.x-U)/320))),M=Math.min(12,Math.max(...H)+1),L=Array(M).fill(Math.min(...X.map((q)=>q.y)));X.forEach((q,j)=>{let W=Math.min(H[j],M-1);L[W]=Math.max(L[W],K(q)+50)});let B=0;for(let q=1;q<M;q++)if(L[q]<L[B])B=q;return{x:U+B*320,y:L[B]}}function O5(Z,$,Q){let J=Q4($,[...Q,Z]),V=J.get(Z.id),K=V?$.find((X)=>X.id===V):void 0;if(K){let X=Q.filter((M)=>J.get(M.id)===K.id),U=K.y+$Z(K.columnCount)+kZ,H=X.length?Math.max(...X.map((M)=>M.y))+YZ:U;return{x:K.x,y:H}}let Y=[...$.map((X)=>X.y+$Z(X.columnCount)),...Q.map((X)=>X.y+YZ)];return{x:0,y:Y.length?Math.max(...Y)+OZ:0}}function _5(Z){let $=B5-20;for(let Q=0;Q<Z.length;Q++)for(let J=Q+1;J<Z.length;J++){let V=Z[Q],K=Z[J],Y=$Z(V.columnCount),X=$Z(K.columnCount);if(V.x<K.x+$&&V.x+$>K.x&&V.y<K.y+X&&V.y+Y>K.y)return!0}return!1}import{eq as A5}from"drizzle-orm";D5();async function z5(Z=m){let[$,Q]=await Promise.all([Z.query.dbTable.findMany({with:{columns:{columns:{id:!0}}},orderBy:(K,{asc:Y})=>Y(K.name)}),Z.query.endpoint.findMany({with:{tables:{columns:{tableId:!0}}}})]),J=N5($.map((K)=>({id:K.id,name:K.name,domain:K.domain,columnCount:K.columns.length})),Q.map((K)=>({id:K.id,method:K.method,path:K.path,uses:K.tables.map((Y)=>({tableId:Y.tableId}))}))),V=0;for(let K of $){let Y=J.tables.get(K.id);if(!Y||Math.round(Y.x)===Math.round(K.x)&&Math.round(Y.y)===Math.round(K.y))continue;await Z.update(E).set({x:Y.x,y:Y.y}).where(A5(E.id,K.id)),V++}for(let K of Q){let Y=J.endpoints.get(K.id);if(!Y||Math.round(Y.x)===Math.round(K.x)&&Math.round(Y.y)===Math.round(K.y))continue;await Z.update(v).set({x:Y.x,y:Y.y}).where(A5(v.id,K.id)),V++}return V}var B8=P.object({tables:P.array(P.object({name:P.string().trim().min(1),domain:P.string().nullish(),description:P.string().nullish(),columns:P.array(P.object({name:P.string().trim().min(1),type:P.string().trim().min(1),isPk:P.boolean().optional(),isFk:P.boolean().optional(),nullable:P.boolean().optional(),note:P.string().nullish()})).default([])})).default([]),relations:P.array(P.object({fromTable:P.string(),fromColumn:P.string(),toTable:P.string(),toColumn:P.string(),label:P.string().nullish()})).default([]),endpoints:P.array(P.object({method:P.string().trim().min(1),path:P.string().trim().min(1),domain:P.string().nullish(),description:P.string().nullish(),uses:P.array(P.object({table:P.string(),access:P.string().default("read")})).default([])})).default([])});async function yZ(Z=m){let[$]=await Z.insert(a).values({id:"singleton",version:1}).onConflictDoUpdate({target:a.id,set:{version:C8`${a.version} + 1`}}).returning();return $.version}async function F5(Z,$=m,Q={}){let J=B8.parse(Z),V=J.tables.length>0,K=J.endpoints.length>0,Y=J.tables.map((G)=>G.name);if(V)await $.delete(E).where(Y.length?H8(TZ(E.source,"INTROSPECTION"),W8(E.name,Y)):TZ(E.source,"INTROSPECTION"));let X=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}}}}),H=new Map(X.map((G)=>[G.name,G])),M=X.map((G)=>({id:G.id,name:G.name,domain:G.domain,columnCount:G.columns.length,x:G.x,y:G.y})),L=U.map((G)=>({id:G.id,method:G.method,path:G.path,uses:G.tables.map((D)=>({tableId:D.tableId})),x:G.x,y:G.y})),B=new Map;for(let G of J.tables){if(H.has(G.name))continue;let D=q5({domain:G.domain??null,columnCount:G.columns.length},M,L);B.set(G.name,D),M.push({id:`new:${G.name}`,name:G.name,domain:G.domain??null,columnCount:G.columns.length,...D})}let q=new Map;for(let G of J.tables){let D=H.get(G.name),A=B.get(G.name),R=D?.x??A?.x??0,y=D?.y??A?.y??0,[S]=await $.insert(E).values({name:G.name,domain:G.domain??null,description:G.description??null,source:"INTROSPECTION",x:R,y}).onConflictDoUpdate({target:E.name,set:{...G.domain!=null?{domain:G.domain}:{},...G.description!=null?{description:G.description}:{},source:"INTROSPECTION"}}).returning();if(q.set(G.name,S.id),await $.delete(e).where(TZ(e.tableId,S.id)),G.columns.length)await $.insert(e).values(G.columns.map((I,F)=>({tableId:S.id,name:I.name,type:I.type,isPk:I.isPk??!1,isFk:I.isFk??!1,nullable:I.nullable??!0,note:I.note??null,ord:F})))}let j=[...q.values()];if(j.length)await $.delete(l).where(L8(J4(l.fromTableId,j),J4(l.toTableId,j)));for(let G of J.relations){let D=q.get(G.fromTable),A=q.get(G.toTable);if(!D||!A)continue;await $.insert(l).values({fromTableId:D,toTableId:A,fromColumn:G.fromColumn,toColumn:G.toColumn,label:G.label??`${G.fromColumn} \u2192 ${G.toTable}.${G.toColumn}`})}let W=new Set(J.endpoints.map((G)=>`${G.method} ${G.path}`));if(K){let D=(await $.query.endpoint.findMany({where:(A,{eq:R})=>R(A.source,"INTROSPECTION")})).filter((A)=>!W.has(`${A.method} ${A.path}`)).map((A)=>A.id);if(D.length)await $.delete(v).where(J4(v.id,D))}for(let G of M)if(G.id.startsWith("new:"))G.id=q.get(G.name)??G.id;for(let G of J.endpoints){let D=await $.query.endpoint.findFirst({where:(S,{and:I,eq:F})=>I(F(S.method,G.method),F(S.path,G.path))}),A,R;if(D)A=D.x,R=D.y;else{let S={id:`new:${G.method} ${G.path}`,method:G.method,path:G.path,uses:G.uses.map((F)=>({tableId:q.get(F.table)??""})).filter((F)=>F.tableId)},I=O5(S,M,L);A=I.x,R=I.y,L.push({...S,x:A,y:R})}let[y]=await $.insert(v).values({method:G.method,path:G.path,domain:G.domain??null,description:G.description??null,source:"INTROSPECTION",x:A,y:R}).onConflictDoUpdate({target:[v.method,v.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(TZ(i.endpointId,y.id));for(let S of G.uses){let I=q.get(S.table)??(await $.query.dbTable.findFirst({where:(F,{eq:MZ})=>MZ(F.name,S.table)}))?.id;if(!I)continue;await $.insert(i).values({endpointId:y.id,tableId:I,access:S.access})}}await U5($),await L5($);let O=await $.query.dbTable.findMany({where:(G,{eq:D})=>D(G.source,"INTROSPECTION"),columns:{x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),_=await $.select({x:v.x,y:v.y}).from(v);if(_5(O.map((G)=>({x:G.x,y:G.y,columnCount:G.columns.length})))||G5(_))await z5($);let N=await yZ($);return{tables:J.tables.length,relations:J.relations.length,endpoints:J.endpoints.length,version:N}}var E5=d.object({files:d.array(d.object({path:d.string().trim().min(1),root:d.string().nullish(),lang:d.string().nullish(),mtimeMs:d.number().nullish(),size:d.number().nullish()})).default([]),edges:d.array(d.object({from:d.string().trim().min(1),to:d.string().trim().min(1)})).default([])});function I5(Z,$){let Q=new Map;for(let B of Z)Q.set(B,[]);for(let B of $)Q.get(B.from)?.push(B.to);let J=new Map,V=new Map,K=new Set,Y=[],X=new Map,U=[],H=0,M=0;for(let B of Z){if(J.has(B))continue;let q=[{v:B,iter:0}];J.set(B,H),V.set(B,H),H++,Y.push(B),K.add(B);while(q.length){let j=q[q.length-1],W=Q.get(j.v)??[];if(j.iter<W.length){let O=W[j.iter++];if(!J.has(O))J.set(O,H),V.set(O,H),H++,Y.push(O),K.add(O),q.push({v:O,iter:0});else if(K.has(O))V.set(j.v,Math.min(V.get(j.v),J.get(O)))}else{if(V.get(j.v)===J.get(j.v)){let _=0,N;do N=Y.pop(),K.delete(N),X.set(N,M),_++;while(N!==j.v);U.push(_),M++}q.pop();let O=q[q.length-1];if(O)V.set(O.v,Math.min(V.get(O.v),V.get(j.v)))}}}let L=new Set;for(let B of $){let q=X.get(B.from);if(q!==void 0&&q===X.get(B.to)&&U[q]>1)L.add(`${B.from}|${B.to}`)}return L}async function R5(Z,$=m){let Q=E5.parse(Z),J=Q.files.map((L)=>L.path),V=new Set(J),K=Q.edges.filter((L)=>V.has(L.from)&&V.has(L.to)&&L.from!==L.to),Y=I5(J,K),X=new Map,U=new Map;for(let L of K)U.set(L.from,(U.get(L.from)??0)+1),X.set(L.to,(X.get(L.to)??0)+1);await $.delete(u).where(q8(u.path,J));for(let L of Q.files){let B={root:L.root??null,lang:L.lang??null,mtimeMs:L.mtimeMs??null,size:L.size??null,inDegree:X.get(L.path)??0,outDegree:U.get(L.path)??0};await $.insert(u).values({path:L.path,...B}).onConflictDoUpdate({target:u.path,set:B})}await $.delete(x);let H=0;if(K.length)await $.insert(x).values(K.map((L)=>{let B=Y.has(`${L.from}|${L.to}`);if(B)H++;return{fromPath:L.from,toPath:L.to,circular:B}}));let M=await yZ($);return await $.update(a).set({codeGraphSyncedAt:new Date}).where(WZ(a.id,"singleton")),{files:Q.files.length,edges:K.length,circular:H,version:M}}var O8=(Z,$)=>`${Z}\x00${$}`;function V4(Z){let $=E5.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),K=I5(Q,V),Y=new Map,X=new Map;for(let M of V)X.set(M.from,(X.get(M.from)??0)+1),Y.set(M.to,(Y.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:Y.get(M.path)??0,outDegree:X.get(M.path)??0});let H=new Map;for(let M of V)H.set(O8(M.from,M.to),{from:M.from,to:M.to,circular:K.has(`${M.from}|${M.to}`)});return{files:U,edges:H}}var _8=(Z,$)=>Z.root===$.root&&Z.lang===$.lang&&Z.mtimeMs===$.mtimeMs&&Z.size===$.size&&Z.inDegree===$.inDegree&&Z.outDegree===$.outDegree;async function S5(Z,$,Q=m){for(let[X,U]of $.files){let H=Z.files.get(X);if(H&&_8(H,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(u).values({path:X,...M}).onConflictDoUpdate({target:u.path,set:M})}let J=[...Z.files.keys()].filter((X)=>!$.files.has(X));if(J.length)await Q.delete(u).where(N8(u.path,J));for(let[X,U]of Z.edges)if(!$.edges.has(X))await Q.delete(x).where(P5(WZ(x.fromPath,U.from),WZ(x.toPath,U.to)));let V=[];for(let[X,U]of $.edges){let H=Z.edges.get(X);if(!H)V.push({fromPath:U.from,toPath:U.to,circular:U.circular});else if(H.circular!==U.circular)await Q.update(x).set({circular:U.circular}).where(P5(WZ(x.fromPath,U.from),WZ(x.toPath,U.to)))}if(V.length)await Q.insert(x).values(V);let K=await yZ(Q);await Q.update(a).set({codeGraphSyncedAt:new Date}).where(WZ(a.id,"singleton"));let Y=0;for(let X of $.edges.values())if(X.circular)Y++;return{files:$.files.size,edges:$.edges.size,circular:Y,version:K}}var P8=/[/\\](node_modules|\.git|\.next|dist|build|__pycache__|target|\.venv|venv|\.beacon|\.playwright-mcp|generated|coverage)[/\\]/;function E8(Z){try{let $=_Z(Z,"beacon.config.json");if(k5($)){let Q=JSON.parse(D8($,"utf8"));if(Array.isArray(Q.roots)&&Q.roots.length)return Q.roots.map((J)=>F8(Z,J))}}catch{}return[Z]}function w5(Z){let $=E8(Z.path),Q=lZ(Z.id),J=iZ(JZ(Z.id)),V=t4($,Z.path);async function K(){let W=K5(V.snapshot().files.map((D)=>D.path));for(let D of $)for(let A of["prisma/schema.prisma","schema.prisma"]){let R=_Z(D,A);if(k5(R))W.push(Y(R))}let O=[];for(let D of W)try{O.push({path:D,content:await v5(_Z(Z.path,D),"utf8")})}catch{}let _=J5(O),N=V5(O);if(!_.tables.length&&!N.length)return;if(N.length&&_.tableVars&&Object.keys(_.tableVars).length){let A=V.snapshot().edges,R=new Set(N.map((F)=>F.file)),y=new Map;for(let F of A){let MZ=y.get(F.from)??[];MZ.push(F.to),y.set(F.from,MZ)}for(let F=0;F<2;F++)for(let MZ of[...R])for(let b5 of y.get(MZ)??[])R.add(b5);let S=new Map;for(let F of[...R].slice(0,600))try{S.set(F,await v5(_Z(Z.path,F),"utf8"))}catch{}let I=e4({routeFiles:[...new Set(N.map((F)=>F.file))],edges:A,content:(F)=>S.get(F)??null,tableVars:_.tableVars});for(let F of N)F.uses=I.get(F.file)??[]}let G=await F5({tables:_.tables,relations:_.relations,endpoints:N},J,{partial:!0});console.log(`[beacon-inline] schema synced (${Z.name}): ${G.tables} tables / ${G.endpoints} endpoints`)}function Y(W){return z8(Z.path,W).split(/[\\/]/).join("/")}let X=null,U=!1,H=new Set,M=null,L=!1;async function B(){if(L){q();return}L=!0;try{if(await Q,U)X=null,U=!1;if(X===null){let N=await V.seed(),G=await R5(N,J);X=V4(N),console.log(`[beacon-inline] code-graph synced (${Z.name}): ${G.files} files / ${G.edges} imports${G.circular>0?` (${G.circular} circular)`:""}`),await K();return}let W=[...H];H.clear();let O=W.some((N)=>$4(Y(N))),_=!1;for(let N of W)if(await V.applyChange(N))_=!0;if(_){let N=V4(V.snapshot()),G=await S5(X,N,J);X=N,console.log(`[beacon-inline] code-graph updated (${Z.name}): ${G.files} files / ${G.edges} imports${G.circular>0?` (${G.circular} circular)`:""}`)}if(O)await K()}catch(W){console.error(`[beacon-inline] error (${Z.name}):`,W instanceof Error?W.message:W)}finally{L=!1}}function q(){if(M)clearTimeout(M);M=setTimeout(B,600)}let j=[];for(let W of $)try{let O=A8(W,{recursive:!0,persistent:!0},(_,N)=>{if(!N){U=!0,q();return}let G=String(N);if(P8.test(`/${G}`))return;H.add(_Z(W,G)),q()});O.on("error",(_)=>console.error(`[beacon-inline] watcher error (${Z.name}):`,_)),j.push(O)}catch(O){console.error(`[beacon-inline] live watch unavailable for ${W} (${Z.name}):`,O instanceof Error?O.message:O)}return console.log(`[beacon-inline] watching ${Z.name} (${$.join(", ")}) \u2014 initial extract\u2026`),B(),{async stop(){if(M)clearTimeout(M);for(let W of j)W.close()}}}function R8(Z){let $=Z.limit??6,Q=Z.hardCap??12,J=new Map,V=0,K=new Set;function Y(W){let O=J.get(W);if(O)O.seq=++V}function X(W){if(J.has(W.id))return Y(W.id);if(!Z.exists(W.path))return;J.set(W.id,{handle:Z.start(W),seq:++V})}function U(){let W=null,O=1/0;for(let[_,N]of J){if(K.has(_))continue;if(N.seq<O)O=N.seq,W=_}if(W)J.get(W).handle.stop(),J.delete(W)}function H(){let W=Z.list().filter((O)=>Z.exists(O.path)).slice(0,$);K=new Set(W.map((O)=>O.id));for(let O of W)X(O);for(let[O,_]of[...J]){let N=Z.get(O);if(!N||!Z.exists(N.path))_.handle.stop(),J.delete(O)}}function M(W){if(J.has(W))return Y(W);let O=Z.get(W);if(!O||!Z.exists(O.path))return;if(J.size>=Q)U();if(J.size>=Q)return;J.set(W,{handle:Z.start(O),seq:++V})}async function L(W){let O=J.get(W);if(!O)return;J.delete(W),await O.handle.stop()}function B(W){return J.has(W)}function q(){return[...J.keys()]}async function j(){await Promise.all([...J.values()].map((W)=>W.handle.stop())),J.clear()}return{reconcile:H,ensureWatcher:M,stopWatcher:L,isWatching:B,activeIds:q,stopAll:j}}var S8=R8({list:AZ,get:g,exists:I8,start:(Z)=>w5(Z)});async function T5(Z){await S8.stopWatcher(Z)}async function y5(Z){if(!g(Z))return{ok:!1,removed:!1,fallbackId:r(),error:"unknown workspace"};O4(Z),N4(Z),await T5(Z),E4(JZ(Z)),F4(Z);try{v8(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"),GZ=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 T8(){if(!GZ)return g(QZ(mZ(process.cwd())));if(/^[0-9a-f]{12}$/.test(GZ)){let Z=g(GZ);if(Z)return Z}return g(QZ(mZ(f5(GZ))))}var s=T8();if(!s)console.error(`[beacon] ${GZ??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${GZ?` ${GZ}`:""} --yes\x1B[0m to apply.
7
- `),process.exit(0);async function y8(Z){try{let{pid:$,port:Q}=JSON.parse(w8(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 y8(s.id))console.log(` ${u5(`removed ${s.name} (via the running daemon)`)}
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(k8(n(s.id)))console.error(`[beacon] warning: ${n(s.id)} still exists \u2014 remove it manually.`),process.exit(1);
3
+ var p5=Object.defineProperty;var c5=(Z)=>Z;function l5(Z,$){this[Z]=c5.bind(null,$)}var xZ=(Z,$)=>{for(var Q in $)p5(Z,Q,{get:$[Q],enumerable:!0,configurable:!0,set:l5.bind($,Q)})};var G4=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var U4={};xZ(U4,{provisionDb:()=>Q6});import{createClient as d5}from"@libsql/client";import{drizzle as n5}from"drizzle-orm/libsql";import{migrate as r5}from"drizzle-orm/libsql/migrator";import{readMigrationFiles as o5}from"drizzle-orm/migrator";import{dirname as fZ,join as i5}from"path";import{fileURLToPath as s5}from"url";async function DZ(Z,$){return(await Z.execute({sql:"SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?",args:[$]})).rows.length>0}async function Z6(Z,$){let Q=await Z.execute(`PRAGMA table_info("${$}")`);return new Set(Q.rows.map((J)=>String(J.name)))}async function M4(Z){if(!await DZ(Z,"__drizzle_migrations"))return 0;let $=await Z.execute('SELECT count(*) AS n FROM "__drizzle_migrations"');return Number($.rows[0]?.n??0)}async function $6(Z){for(let[$,Q]of Object.entries(e5)){if(!await DZ(Z,$))continue;let J=await Z6(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 Q6(Z,$=t5){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 DZ(Q,"__drizzle_migrations"),V=await DZ(Q,"Node"),Y=!1;if(V&&!J){let K=o5({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 M4(Q);if(await r5(n5(Q),{migrationsFolder:$}),await M4(Q)>X)Y=!0;return await $6(Q),{migrated:Y}}finally{Q.close()}}var a5,t5,e5;var j4=G4(async()=>{a5=fZ(fZ(fZ(s5(import.meta.url)))),t5=process.env.BEACON_MIGRATIONS_DIR||i5(a5,"drizzle"),e5={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 N8,rmSync as C8,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,$),N8(Q,Z)}catch(J){throw C8(Q,{force:!0}),J}}function O8(Z,$,Q=!1){q8(Z,JSON.stringify($,null,Q?2:void 0))}var F5=()=>{};import{AsyncLocalStorage as J6}from"async_hooks";import{spawnSync as V6}from"child_process";import{createHash as K6}from"crypto";import{existsSync as W4,mkdirSync as CZ,readFileSync as hZ,writeFileSync as mZ}from"fs";import{homedir as N4}from"os";import{basename as Y6,join as ZZ,parse as X6,resolve as H4}from"path";function t(){return process.env.BEACON_HOME||ZZ(N4(),".beacon")}function bZ(){return ZZ(t(),"workspaces.json")}function JZ(Z){return K6("sha256").update(Z).digest("hex").slice(0,12)}function pZ(Z=process.cwd()){let $=V6("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 C4(Z){let $=H4(Z);return $!==H4(N4())&&$!==X6($).root}function L4(){return ZZ(t(),"deleted.json")}function cZ(){try{let Z=JSON.parse(hZ(L4(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function B4(Z){CZ(t(),{recursive:!0}),mZ(L4(),JSON.stringify(Z,null,2))}function q4(Z){return cZ().includes(Z)}function O4(Z){let $=cZ();if(!$.includes(Z))B4([...$,Z])}function G6(Z){let $=cZ();if($.includes(Z))B4($.filter((Q)=>Q!==Z))}function n(Z){return ZZ(t(),Z)}function VZ(Z){return`file:${ZZ(n(Z),"db.sqlite")}`}function LZ(){try{let Z=JSON.parse(hZ(bZ(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function lZ(Z){CZ(t(),{recursive:!0}),mZ(bZ(),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 z4(Z,$,Q=new Date().toISOString()){if(!C4(Z))throw Error(`beacon: refusing to register a non-repo path as a workspace: ${Z}`);let J=JZ(Z);if(q4(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||Y6(Z),lastOpenedAt:Q},K=[X,...V.filter((j)=>j.id!==J)];return CZ(n(J),{recursive:!0}),lZ(K),X}function Q$(Z,$){return G6(JZ(Z)),z4(Z,$)}function J$(Z,$=new Date().toISOString()){let Q=LZ(),J=Q.find((V)=>V.id===Z);if(!J)return;J.lastOpenedAt=$,lZ(Q)}function D4(Z){if(lZ(LZ().filter(($)=>$.id!==Z)),r()===Z)M6(FZ()[0]?.id??null)}function F4(){return ZZ(t(),"active")}function r(){try{return hZ(F4(),"utf8").trim()||null}catch{return null}}function M6(Z){CZ(t(),{recursive:!0}),mZ(F4(),Z??"")}function U6(){let Z=r();return Z?g(Z):null}function V$(){let Z=_Z()??r();return Z?g(Z):null}function K$(Z){return g(Z)?.path??null}function Y$(){return W4(bZ())}var _4="beacon_ws";function A4(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 X$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=A4(Z,_4);if(Q&&g(Q))return Q;return j6()}function j6(){let Z=FZ();return Z.length===1?Z[0].id:null}var H6="x-beacon-workspace-path";async function G$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=Z.headers.get(H6);if(Q&&C4(Q)&&!q4(JZ(Q))&&(!$||JZ(Q)===$)){let V=z4(Q);return await dZ(V.id),V.id}let J=A4(Z,_4);if(J&&g(J))return J;return null}var P4=new J6;function W6(Z,$){return Z?P4.run(Z,$):$()}function _Z(){return P4.getStore()??null}var gZ=new Set;function I4(Z){gZ.delete(ZZ(n(Z),"db.sqlite"))}async function dZ(Z){let $=n(Z),Q=ZZ($,"db.sqlite"),J=W4(Q);if(J&&gZ.has(Q))return{ok:!0,created:!1,migrated:!1};try{CZ($,{recursive:!0});let{provisionDb:V}=await j4().then(() => U4),Y=await V(VZ(Z));return gZ.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 h8,readFileSync as m8}from"fs";import{resolve as f5}from"path";import{rmSync as g8}from"fs";import{drizzle as g6}from"drizzle-orm/libsql";import{createClient as h6}from"@libsql/client";var nZ={};xZ(nZ,{workspaceFlag:()=>z6,tag:()=>jZ,syncState:()=>a,projectMeta:()=>O6,planContract:()=>D6,note:()=>L6,nodeTags:()=>YZ,nodeFile:()=>BZ,node:()=>k,endpointTable:()=>i,endpoint:()=>E,edge:()=>KZ,draftTable:()=>c,draftRelation:()=>XZ,draftColumn:()=>OZ,dbTable:()=>P,dbRelation:()=>l,dbColumn:()=>e,codeFileEdge:()=>x,codeFile:()=>y,bugFlag:()=>qZ,boardAnnotation:()=>B6,appSetting:()=>q6});import{sqliteTable as v,index as S,foreignKey as N6,text as C,integer as _,real as m,uniqueIndex as o,primaryKey as C6}from"drizzle-orm/sqlite-core";import{createId as u}from"@paralleldrive/cuid2";var k=v("Node",{id:C().primaryKey().$defaultFn(()=>u()),view:C().notNull(),kind:C().default("FEATURE").notNull(),cluster:C(),layer:C(),title:C().notNull(),role:C(),plain:C(),status:C().default("PENDING").notNull(),priority:_().default(2).notNull(),progress:_().default(0).notNull(),x:m().default(0).notNull(),y:m().default(0).notNull(),sourceRef:C(),externalId:C(),source:C().default("MANUAL").notNull(),planId:C(),parentId:C(),createdAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("Node_cluster_idx").on(Z.cluster),S("Node_parentId_idx").on(Z.parentId),S("Node_view_idx").on(Z.view),N6(()=>({columns:[Z.parentId],foreignColumns:[Z.id],name:"Node_parentId_Node_id_fk"})).onUpdate("cascade").onDelete("cascade")]),BZ=v("NodeFile",{id:C().primaryKey().$defaultFn(()=>u()),nodeId:C().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),path:C().notNull()},(Z)=>[o("NodeFile_nodeId_path_key").on(Z.nodeId,Z.path),S("NodeFile_nodeId_idx").on(Z.nodeId)]),jZ=v("Tag",{id:C().primaryKey().$defaultFn(()=>u()),label:C().notNull(),color:C()},(Z)=>[o("Tag_label_key").on(Z.label)]),KZ=v("Edge",{id:C().primaryKey().$defaultFn(()=>u()),fromId:C().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),toId:C().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),kind:C().default("DEPENDS").notNull(),label:C(),sourceHandle:C(),targetHandle:C()},(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:C("A").notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),b:C("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)]),L6=v("Note",{id:C().primaryKey().$defaultFn(()=>u()),title:C().default("Untitled").notNull(),body:C().default("").notNull(),ord:m().default(0).notNull(),pinned:_({mode:"boolean"}).default(!1).notNull(),createdAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("Note_updatedAt_idx").on(Z.updatedAt)]),B6=v("BoardAnnotation",{id:C().primaryKey().$defaultFn(()=>u()),targetKind:C().notNull(),targetId:C().notNull(),columnName:C(),body:C().default("").notNull(),x:m(),y:m(),createdAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("BoardAnnotation_target_idx").on(Z.targetId)]),qZ=v("BugFlag",{id:C().primaryKey().$defaultFn(()=>u()),nodeId:C().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),by:C().notNull(),note:C().notNull(),resolvedAt:_({mode:"timestamp_ms"}),createdAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[S("BugFlag_nodeId_idx").on(Z.nodeId)]),P=v("DbTable",{id:C().primaryKey().$defaultFn(()=>u()),name:C().notNull(),domain:C(),description:C(),source:C().default("MANUAL").notNull(),planId:C(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:_({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:C().primaryKey().$defaultFn(()=>u()),tableId:C().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),name:C().notNull(),type:C().notNull(),isPk:_({mode:"boolean"}).default(!1).notNull(),isFk:_({mode:"boolean"}).default(!1).notNull(),nullable:_({mode:"boolean"}).default(!0).notNull(),note:C(),ord:_().default(0).notNull()},(Z)=>[o("DbColumn_tableId_name_key").on(Z.tableId,Z.name),S("DbColumn_tableId_idx").on(Z.tableId)]),l=v("DbRelation",{id:C().primaryKey().$defaultFn(()=>u()),fromTableId:C().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:C().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:C().notNull(),toColumn:C().notNull(),label:C()},(Z)=>[S("DbRelation_toTableId_idx").on(Z.toTableId),S("DbRelation_fromTableId_idx").on(Z.fromTableId)]),E=v("Endpoint",{id:C().primaryKey().$defaultFn(()=>u()),method:C().notNull(),path:C().notNull(),domain:C(),description:C(),source:C().default("MANUAL").notNull(),planId:C(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:_({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:C().primaryKey().$defaultFn(()=>u()),endpointId:C().notNull().references(()=>E.id,{onDelete:"cascade",onUpdate:"cascade"}),tableId:C().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),access:C().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:C().primaryKey().$defaultFn(()=>u()),name:C().notNull(),domain:C(),description:C(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[o("DraftTable_name_key").on(Z.name)]),OZ=v("DraftColumn",{id:C().primaryKey().$defaultFn(()=>u()),tableId:C().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),name:C().notNull(),type:C().notNull(),isPk:_({mode:"boolean"}).default(!1).notNull(),isFk:_({mode:"boolean"}).default(!1).notNull(),nullable:_({mode:"boolean"}).default(!0).notNull(),note:C(),ord:_().default(0).notNull()},(Z)=>[S("DraftColumn_tableId_idx").on(Z.tableId)]),XZ=v("DraftRelation",{id:C().primaryKey().$defaultFn(()=>u()),fromTableId:C().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:C().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:C().notNull(),toColumn:C().notNull(),label:C()},(Z)=>[S("DraftRelation_toTableId_idx").on(Z.toTableId),S("DraftRelation_fromTableId_idx").on(Z.fromTableId)]),y=v("CodeFile",{path:C().primaryKey(),root:C(),lang:C(),x:m().default(0).notNull(),y:m().default(0).notNull(),mtimeMs:m(),size:_(),inDegree:_().default(0).notNull(),outDegree:_().default(0).notNull(),updatedAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),x=v("CodeFileEdge",{fromPath:C().notNull().references(()=>y.path,{onDelete:"cascade",onUpdate:"cascade"}),toPath:C().notNull().references(()=>y.path,{onDelete:"cascade",onUpdate:"cascade"}),circular:_({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),C6({columns:[Z.fromPath,Z.toPath],name:"CodeFileEdge_fromPath_toPath_pk"})]),a=v("SyncState",{id:C().primaryKey().default("singleton"),version:_().default(0).notNull(),codeGraphSyncedAt:_({mode:"timestamp_ms"}),updatedAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),q6=v("AppSetting",{id:C().primaryKey().default("singleton"),editor:C().default("auto").notNull(),currentFeatureId:C(),updatedAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),O6=v("ProjectMeta",{id:C().primaryKey().default("singleton"),overview:C(),conventions:C().default("[]").notNull(),hasFrontend:_({mode:"boolean"}),classificationRoots:C().default("[]").notNull(),updatedAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),z6=v("WorkspaceFlag",{id:C().primaryKey().$defaultFn(()=>u()),key:C().notNull(),enabled:_({mode:"boolean"}).default(!1).notNull(),config:C(),updatedAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("WorkspaceFlag_key_key").on(Z.key)]),D6=v("PlanContract",{id:C().primaryKey().$defaultFn(()=>u()),planId:C().notNull(),declaredFiles:C().default("[]").notNull(),authorizedExtras:C().default("[]").notNull(),active:_({mode:"boolean"}).default(!1).notNull(),createdAt:_({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:_({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 rZ={};xZ(rZ,{tagRelations:()=>P6,nodeTagsRelations:()=>I6,nodeRelations:()=>F6,nodeFileRelations:()=>_6,endpointTableRelations:()=>w6,endpointRelations:()=>k6,edgeRelations:()=>R6,draftTableRelations:()=>T6,draftRelationRelations:()=>u6,draftColumnRelations:()=>y6,dbTableRelations:()=>E6,dbRelationRelations:()=>v6,dbColumnRelations:()=>S6,codeFileRelations:()=>x6,codeFileEdgeRelations:()=>f6,bugFlagRelations:()=>A6});import{relations as h}from"drizzle-orm";var F6=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"})})),_6=h(BZ,({one:Z})=>({node:Z(k,{fields:[BZ.nodeId],references:[k.id]})})),A6=h(qZ,({one:Z})=>({node:Z(k,{fields:[qZ.nodeId],references:[k.id]})})),P6=h(jZ,({many:Z})=>({nodeTags:Z(YZ)})),I6=h(YZ,({one:Z})=>({node:Z(k,{fields:[YZ.a],references:[k.id]}),tag:Z(jZ,{fields:[YZ.b],references:[jZ.id]})})),R6=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"})})),E6=h(P,({many:Z})=>({columns:Z(e),fksOut:Z(l,{relationName:"FkFrom"}),fksIn:Z(l,{relationName:"FkTo"}),usages:Z(i)})),S6=h(e,({one:Z})=>({table:Z(P,{fields:[e.tableId],references:[P.id]})})),v6=h(l,({one:Z})=>({fromTable:Z(P,{fields:[l.fromTableId],references:[P.id],relationName:"FkFrom"}),toTable:Z(P,{fields:[l.toTableId],references:[P.id],relationName:"FkTo"})})),k6=h(E,({many:Z})=>({tables:Z(i)})),w6=h(i,({one:Z})=>({endpoint:Z(E,{fields:[i.endpointId],references:[E.id]}),table:Z(P,{fields:[i.tableId],references:[P.id]})})),T6=h(c,({many:Z})=>({columns:Z(OZ),fksOut:Z(XZ,{relationName:"DraftFkFrom"}),fksIn:Z(XZ,{relationName:"DraftFkTo"})})),y6=h(OZ,({one:Z})=>({table:Z(c,{fields:[OZ.tableId],references:[c.id]})})),u6=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"})})),x6=h(y,({many:Z})=>({edgesOut:Z(x,{relationName:"CFEFrom"}),edgesIn:Z(x,{relationName:"CFETo"})})),f6=h(x,({one:Z})=>({fromFile:Z(y,{fields:[x.fromPath],references:[y.path],relationName:"CFEFrom"}),toFile:Z(y,{fields:[x.toPath],references:[y.path],relationName:"CFETo"})}));var m6={...nZ,...rZ};function b6(){let Z=process.env.DATABASE_URL;if(Z&&/^(file:|libsql:|wss?:|https?:|:memory:)/i.test(Z))return Z;return"file:./dev.db"}var p6=b6();function R4(Z){let $=h6({url:Z});return $.execute("PRAGMA foreign_keys = ON;"),$.execute("PRAGMA busy_timeout = 5000;"),g6($,{schema:m6})}var iZ=globalThis,oZ=iZ.dzDefault??R4(p6);iZ.dzDefault=oZ;var AZ=iZ.dzByUrl??=new Map;function sZ(Z){let $=AZ.get(Z);if(!$)$=R4(Z),AZ.set(Z,$);return $}function E4(Z){let $=AZ.get(Z);AZ.delete(Z);try{$?.$client?.close?.()}catch{}}function c6(){if(process.env.BEACON_REPO)return oZ;let Z=_Z()??r();if(!Z)return oZ;return sZ(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 w5,readFileSync as S8,watch as v8}from"fs";import{readFile as k5}from"fs/promises";import{join as zZ,relative as k8,resolve as w8}from"path";import{existsSync as n4,readFileSync as r4}from"fs";import{readdir as z7,readFile as D7,stat as o4}from"fs/promises";import{extname as i4,join as EZ,relative as WZ,resolve as HZ}from"path";import{extname as b4}from"path";import{dirname as l6,resolve as d6}from"path";var aZ=[".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 S4(Z,$){if($.has(Z))return Z;for(let Q of aZ){let J=`${Z}${Q}`;if($.has(J))return J}for(let Q of aZ){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=d6("/",l6($),Z),Y=r6(V).replace(/^\//,"");return S4(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=S4(X,Q);if(K)return K}return null}var v4={id:"ts",extensions:aZ,specifiers:o6,resolve(Z,$,Q){let J=i6(Z,$,Q.fileSet,Q.tsAliases??[]);return J?[J]:[]}};import{dirname as PZ,join as s6,normalize as a6}from"path";var t6=[".py",".pyi"],k4=[/(?:^|[\n;])\s*from\s+(\.*[\w.]*)\s+import\b/g,/(?:^|[\n;])\s*import\s+([\w.]+(?:\s*,\s*[\w.]+)*)/g];function w4(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(k4[0])){let J=Q[1].trim();if(J)$.add(J)}for(let Q of Z.matchAll(k4[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 T4={id:"python",extensions:t6,specifiers:e6,resolve(Z,$,Q){if(Z.startsWith(".")){let X=Z.length-Z.replace(/^\.+/,"").length,K=Z.slice(X),j=PZ($);for(let U=1;U<X;U++)j=PZ(j);let W=K?s6(j,K.replace(/\./g,"/")):j;return w4(a6(W).replace(/\\/g,"/"),Q.fileSet)}let J=Z.replace(/\./g,"/"),V=[],Y=PZ($);while(Y&&Y!=="."&&Y!=="/")V.push(Y),Y=PZ(Y);V.push("");for(let X of V){let K=w4(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 y4={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 u4,dirname as tZ,join as x4,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 eZ(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 g4={id:"rust",extensions:Y7,specifiers:j7,resolve(Z,$,Q){let J=Q.fileSet;if(Z.startsWith("./")||Z.startsWith("../")){let V=Z.replace(/^\.\//,""),Y=f4(x4(tZ($),Z)).replace(/\\/g,"/"),X=eZ(Y,J);if(X.length)return X;if(Z.startsWith("./")&&!U7.has(u4($))){let K=x4(tZ($),u4($,".rs"),V);if(X=eZ(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("/"):tZ($),K=Z.slice(6).split("/");for(let j of[K.join("/"),K.slice(0,-1).join("/")]){if(!j)continue;let W=eZ(`${X}/${j}`,J);if(W.length)return W}return[]}return[]}};import{dirname as H7,extname as W7,join as N7,normalize as C7}from"path";var h4=[".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 m4={id:"fallback",extensions:h4,specifiers:B7,resolve(Z,$,Q){let V=[W7($).toLowerCase(),...h4].filter((j,W,U)=>j&&U.indexOf(j)===W),Y=Z.includes("/")||Z.includes("\\"),X=Z.startsWith(".")||Y?Z.replace(/\\/g,"/"):Z.replace(/[.:]+/g,"/"),K=[C7(N7(H7($),X)).replace(/\\/g,"/"),X.replace(/^\.\//,"")];for(let j of K){if(Q.fileSet.has(j))return[j];for(let W of V){let U=j.endsWith(W)?j:`${j}${W}`;if(Q.fileSet.has(U))return[U];if(Q.fileSet.has(`${j}/index${W}`))return[`${j}/index${W}`]}}return[]}};var q7=[v4,T4,y4,g4,m4],IZ=new Map;for(let Z of q7)for(let $ of Z.extensions)IZ.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 Z4(Z){return IZ.get(b4(Z).toLowerCase())??null}function p4(Z){let $=b4(Z).toLowerCase();if(!IZ.has($))return null;return O7[$]??$.slice(1)}function $4(){return new Set(IZ.keys())}var s4=new Set(["node_modules",".git",".next","dist","build","__pycache__","target",".venv","venv","env",".turbo","coverage",".beacon",".playwright-mcp","generated","migrations","alembic","migrate"]);function F7(Z=5){let $=performance.now();return async()=>{if(performance.now()-$>Z)await new Promise((Q)=>setImmediate(Q)),$=performance.now()}}var _7=()=>Promise.resolve();async function a4(Z,$,Q,J,V){let Y;try{Y=await z7($,{withFileTypes:!0})}catch{return}for(let X of Y){if(X.name.startsWith("."))continue;if(s4.has(X.name))continue;let K=EZ($,X.name);if(X.isDirectory()){await a4(Z,K,Q,J,V);continue}if(!X.isFile())continue;if(X.name.endsWith(".d.ts"))continue;if(!Q.has(i4(X.name).toLowerCase()))continue;J.push(WZ(Z,K))}await V()}async function A7(Z,$=_7){let Q=[];return await a4(Z,Z,$4(),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 c4(Z){return Z.replace(/^\.\/?/,"").replace(/\/$/,"")}function t4(Z){let $=EZ(Z,"tsconfig.json");if(!n4($))return[];let Q;try{Q=P7(r4($,"utf8"))}catch{return[]}let J=Q.compilerOptions?.paths??{},V=c4(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 W=X.slice(0,-1),U=c4(j.slice(0,-1)),N=[V,U].filter(Boolean).join("/");Y.push({from:W,to:N})}return Y}function RZ(Z){let $=EZ(Z,"go.mod");if(!n4($))return null;try{let Q=/^\s*module\s+(\S+)/m.exec(r4($,"utf8"));return Q?Q[1]:null}catch{return null}}function p(Z){return Z.split(/[\\/]/).join("/")}function e4(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]:e4(J)),Y=new Map,X=[];for(let W of J){let U=p(WZ(V,W));for(let N of t4(W))X.push({from:N.from,to:[U,N.to].filter(Boolean).join("/")});for(let N of await A7(W,Q)){let L=p(EZ(W,N)),q=p(WZ(V,L));if(Y.has(q))continue;try{let H=await o4(L);Y.set(q,{path:q,abs:L,root:U||null,mtimeMs:H.mtimeMs,size:H.size})}catch{}await Q()}}let K=J.map(RZ).find(Boolean)??RZ(V);return{metas:[...Y.values()].sort((W,U)=>W.path.localeCompare(U.path)),ctx:{fileSet:new Set(Y.keys()),tsAliases:X,goModulePath:K}}}var l4=50000;function R7(Z){let $=0;for(let Q=0;Q<Z.length;Q++)if(Z.charCodeAt(Q)===10){if(Q-$>l4)return!0;$=Q+1}return Z.length-$>l4}async function d4(Z){let $=Z4(Z.path);if(!$||Z.size>200000)return new Set;try{let Q=await D7(Z.abs,"utf8");if(R7(Q))return new Set;return $.specifiers(Q)}catch{return new Set}}function Z5(Z,$){let Q=(Array.isArray(Z)?Z:[Z]).map((H)=>p(HZ(H))),J=p($?HZ($):Q.length===1?Q[0]:e4(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 t4(H))X.push({from:B.from,to:[G,B.to].filter(Boolean).join("/")})}K=Q.map(RZ).find(Boolean)??RZ(J)}function W(H){let G=H.split("/");for(let z=0;z<G.length;z++){let O=G[z];if(!O||O.startsWith("."))return!0;if(z<G.length-1&&s4.has(O))return!0}let B=G[G.length-1];if(B.endsWith(".d.ts"))return!0;return!$4().has(i4(B).toLowerCase())}function U(H){let G=p(HZ(H));for(let B of Q)if(G===B||G.startsWith(`${B}/`)){let z=G.slice(B.length).replace(/^\/+/,"");if(W(z))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=Z4(O.path);if(!M)continue;let F=Y.get(O.path)??new Set,D=new Set;for(let R of F)for(let w of M.resolve(R,O.path,H)){if(!w||w===O.path||D.has(w))continue;D.add(w),B.push({from:O.path,to:w})}}return{files:G.map((O)=>({path:O.path,lang:p4(O.path),root:O.root,mtimeMs:O.mtimeMs,size:O.size})),edges:B}}async function L(){let H=F7(),{metas:G,ctx:B}=await I7(Z,$,H);V.clear(),Y.clear();for(let z of G)await H(),V.set(z.path,z),Y.set(z.path,await d4(z));return X=B.tsAliases??[],K=B.goModulePath??null,N()}async function q(H){let G=p(HZ(H));if(!Q.some((D)=>G===D||G.startsWith(`${D}/`)))return!1;let B=G.split("/").pop()??"";if(B==="tsconfig.json"||B==="go.mod"){let D=G.slice(0,G.length-B.length-1);if(Q.includes(D))return j(),!0;return!1}let z=U(H);if(!z)return!1;let O;try{O=await o4(G)}catch{let D=V.delete(z.path);return Y.delete(z.path),D}let M=V.get(z.path);if(M&&M.mtimeMs===O.mtimeMs&&M.size===O.size)return!1;let F={path:z.path,abs:G,root:z.root,mtimeMs:O.mtimeMs,size:O.size};return V.set(z.path,F),Y.set(z.path,await d4(F)),!0}return{seed:L,applyChange:q,snapshot:N}}function $5(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 W=new Set,U=new Set;for(let L of K){let q=Z.content(L);if(!q)continue;for(let H of $){if(!W.has(H)&&V.get(H).test(q))W.add(H);if(!U.has(H)&&Y.get(H).test(q))U.add(H)}}let N=[];for(let L of $){let q=W.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 J5(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 SZ(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 W=/(\w+)\s*=\s*(mapped_column|Column)\s*\(/g;while(j=W.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=SZ(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:J5(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=SZ(Z,V.index+V[0].indexOf("("));if(!/\bmetadata\b/.test(X)||!/\bColumn\s*\(/.test(X))continue;let K=[],j=/\bColumn\s*\(/g,W;while(W=j.exec(X)){let U=SZ(X,W.index+W[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:J5(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 W=/^class\s+(\w+)\s*\(([^)]*)\)\s*:/gm,U,N=[];while(U=W.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 W=[];for(let U of K.bases){let N=$.get(U);if(N&&!N.tableName)W.push(...J(N,j))}return W.push(...K.columns),W},V=[],Y=[];for(let K of $.values()){if(!K.tableName)continue;let j=J(K),W=new Map;for(let H of j)if(!W.has(H.name))W.set(H.name,H);let U=[...W.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 W of Y[2].split(`
4
+ `)){let U=W.trim().match(/^(\w+)\s+(\w+(?:\[\])?\??)\s*(.*)$/);if(!U||/^@@/.test(W.trim()))continue;let[,N,L,q]=U,H=/^(String|Int|BigInt|Float|Decimal|Boolean|DateTime|Json|Bytes)(\[\])?\??$/.test(L),G=q.match(/@relation\([^)]*fields:\s*\[(\w+)\][^)]*references:\s*\[(\w+)\]/);if(G)Q.push({fromTable:K,fromColumn:G[1],toTable:L.replace(/[?[\]]/g,""),toColumn:G[2]});if(!H)continue;j.push({name:N,type:w7(L),isPk:/@id\b/.test(q)||void 0,isFk:/@relation\b/.test(q)||void 0,nullable:L.endsWith("?")})}if(j.length)$.push({name:K,columns:j})}}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 x7(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 j=Y.content.indexOf("{",K.index+K[0].length);if(j<0)continue;let W=u7(Y.content,j),U={varName:K[1],tableName:K[2],columns:[],colByProp:new Map,fks:[]},N=[];Q.lastIndex=0;for(let L of W.matchAll(Q))N.push({prop:L[1],builder:L[2],at:L.index,argOpen:L.index+L[0].length-1});N.forEach((L,q)=>{let H=W.slice(L.at,N[q+1]?.at??W.length),G=SZ(W,L.argOpen),z=G.match(/^\s*["']([^"']+)["']/)?.[1]??L.prop,O=H.match(/\.references\(\s*\(\)\s*=>\s*(\w+)\.(\w+)/);if(U.columns.push({name:z,type:y7(L.builder,G),isPk:/\.primaryKey\(\)/.test(H)||void 0,isFk:O?!0:void 0,nullable:/\.notNull\(\)/.test(H)?!1:!0}),U.colByProp.set(L.prop,z),O)U.fks.push({column:z,toVar:O[1],toProp:O[2]})}),$.push(U)}}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 f7={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 V5(Z){if(/byte\s*\[\s*\]/.test(Z))return"byte[]";return(Z.replace(/<.*>/,"").trim().split(".").pop()??Z).trim()}function h7(Z){let $=V5(Z);if($==="byte[]")return"bytea";return f7[$]??$.toLowerCase()}function vZ(Z,$){return Z.match(new RegExp(`\\b${$}\\s*=\\s*"([^"]*)"`))?.[1]}function Q5(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,j="";while(K!==j)j=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]??"",j=vZ(K,"name")??$[Y].name,W=Z.slice($[Y].at,$[Y+1]?.at??Z.length),U=b7(W),N=U.find((q)=>q.annots.some((H)=>/@Id\b/.test(H))),L=N?vZ(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 W of K.fields){let U=W.annots.join(" ");if(/@Transient\b/.test(U))continue;let N=V5(W.type);if(/@ManyToOne\b|@OneToOne\b|@OneToMany\b|@ManyToMany\b/.test(U)||J.has(N)){let O=W.annots.find((F)=>/@JoinColumn\b/.test(F)),M=O?vZ(O,"name"):void 0;if(M){j.push({name:M,type:"bigint",isFk:!0,nullable:Q5(U,"nullable")??!0});let F=J.get(N);if(F)X.push({fromTable:K.tableName,fromColumn:M,toTable:F,toColumn:V.get(N)??"id"})}continue}if(g7.test(N))continue;let H=W.annots.find((O)=>/@Column\b/.test(O))??"",G=vZ(H,"name")??W.name,B=W.annots.some((O)=>/@Id\b/.test(O)),z=Q5(H,"nullable");j.push({name:G,type:h7(W.type),...B?{isPk:!0}:{},...z!==void 0?{nullable:z}:{}})}Y.push({name:K.tableName,columns:j})}return{tables:Y,relations:X}}function K5(Z){let $=x7(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 l7=["GET","POST","PUT","PATCH","DELETE"];function d7(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 Y5(Z){let $=[];for(let Q of Z){let J=d7(Q.path);if(!J)continue;for(let V of l7)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 Q4(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 X5(Z,$=300){return Z.filter(Q4).slice(0,$)}import{z as d}from"zod";import{and as I5,eq as NZ,inArray as P8,notInArray as I8}from"drizzle-orm";import{z as A}from"zod";import{and as z8,eq as yZ,inArray as K4,notInArray as D8,or as F8,sql as _8}from"drizzle-orm";var G5=300,M5=50;function U5(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+G5&&J.x+G5>V.x&&J.y<V.y+M5&&J.y+M5>V.y)return!0}return!1}import{eq as s7}from"drizzle-orm";var j5=(Z)=>Z.replace(/\{[^}]*\}/g,"{}");function a7(Z,$){if(Z.method.toUpperCase()!==$.method.toUpperCase())return!1;let Q=j5(Z.path),J=j5($.path);return J===Q||J.endsWith(Q)}async function H5(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 W5,inArray as t7,isNull as N5,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 L5(Z=b){let $=await $8(Z),Q=(Y)=>$.length?e7(N5(Y.planId),t7(Y.planId,$)):N5(Y.planId),J=await Z.delete(P).where(W5(C5(P.source,"INTROSPECTION"),Q(P))).returning({id:P.id}),V=await Z.delete(E).where(W5(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 B5(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 $Z=320,J4=30,V8=36,K8=30,Y8=16;function QZ(Z){return V8+Math.max(0,Z)*K8+Y8}var GZ=60,X8=300,kZ=10,G8=84,wZ=72,M8=3*$Z,U8=1.7;var TZ=(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,W=Q?.get(V)??0;if(j<W)V=Y;else if(j===W&&$.get(Y).localeCompare($.get(V))<0)V=Y}return V}function V4(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 q5(Z,$,Q={}){let J=V4(Z,$),V=new Map,Y=[];for(let G of[...$].sort(H8)){let B=J.get(G.id)??null;if(B){let z=V.get(B);if(z)z.push(G);else V.set(B,[G])}else Y.push(G)}let X=(G)=>{let B=V.get(G.id)?.length??0;return QZ(G.columnCount)+(B?kZ+B*GZ:0)+J4},K=Array.from(new Set(Z.map((G)=>TZ(G.domain)))),j=K.filter((G)=>G!=="\u2014").sort(),W=K.includes("\u2014")?[...j,"\u2014"]:j,U=[];for(let G of W){let B=Z.filter((D)=>TZ(D.domain)===G).sort((D,R)=>D.name.localeCompare(R.name)),z=B.reduce((D,R)=>D+X(R),0),O=Math.max(1,Math.min(12,B.length,Math.round(Math.sqrt(z/$Z)))),M=Array(O).fill(0),F=new Map;for(let D of B){let R=0;for(let w=1;w<O;w++)if(M[w]<M[R])R=w;F.set(D.id,{x:R*$Z,y:M[R]}),M[R]+=X(D)}U.push({d:G,w:O*$Z,h:Math.max(...M,0),tableLocal:F})}let N=B5(U.map((G)=>({id:G.d,w:G.w,h:G.h})),{gapX:G8,gapY:wZ,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),z=Z.filter((O)=>G.tableLocal.has(O.id));for(let O of z){let M=G.tableLocal.get(O.id),F=B.x+M.x,D=B.y+M.y;L.set(O.id,{x:F,y:D}),(V.get(O.id)??[]).forEach((w,T)=>{q.set(w.id,{x:F,y:D+QZ(O.columnCount)+kZ+T*GZ})})}H=Math.max(H,B.y+G.h)}if(Y.length){let G=H+wZ,B=Math.max(1,Math.min(4,Math.ceil(Math.sqrt(Y.length/2))));Y.forEach((z,O)=>{q.set(z.id,{x:O%B*X8,y:G+Math.floor(O/B)*GZ})})}return{tables:L,endpoints:q}}function O5(Z,$,Q){let J=V4($,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+QZ(q.columnCount)+(H?kZ+H*GZ:0)},X=TZ(Z.domain),K=$.filter((q)=>TZ(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+wZ:0}}let j=Math.min(...K.map((q)=>q.x)),W=K.map((q)=>Math.max(0,Math.round((q.x-j)/$Z))),U=Math.min(12,Math.max(...W)+1),N=Array(U).fill(Math.min(...K.map((q)=>q.y)));K.forEach((q,H)=>{let G=Math.min(W[H],U-1);N[G]=Math.max(N[G],Y(q)+J4)});let L=0;for(let q=1;q<U;q++)if(N[q]<N[L])L=q;return{x:j+L*$Z,y:N[L]}}function z5(Z,$,Q){let J=V4($,[...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+QZ(Y.columnCount)+kZ,W=K.length?Math.max(...K.map((U)=>U.y))+GZ:j;return{x:Y.x,y:W}}let X=[...$.map((K)=>K.y+QZ(K.columnCount)),...Q.map((K)=>K.y+GZ)];return{x:0,y:X.length?Math.max(...X)+wZ:0}}function D5(Z){let $=$Z-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=QZ(V.columnCount),K=QZ(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";F5();async function A5(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=q5(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 uZ(Z=b){let[$]=await Z.insert(a).values({id:"singleton",version:1}).onConflictDoUpdate({target:a.id,set:{version:_8`${a.version} + 1`}}).returning();return $.version}async function P5(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?z8(yZ(P.source,"INTROSPECTION"),D8(P.name,X)):yZ(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}}}}),W=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((F)=>({tableId:F.tableId})),x:M.x,y:M.y})),L=new Map;for(let M of J.tables){if(W.has(M.name))continue;let F=O5({domain:M.domain??null,columnCount:M.columns.length},U,N);L.set(M.name,F),U.push({id:`new:${M.name}`,name:M.name,domain:M.domain??null,columnCount:M.columns.length,...F})}let q=new Map;for(let M of J.tables){let F=W.get(M.name),D=L.get(M.name),R=F?.x??D?.x??0,w=F?.y??D?.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(yZ(e.tableId,T.id)),M.columns.length)await $.insert(e).values(M.columns.map((f,I)=>({tableId:T.id,name:f.name,type:f.type,isPk:f.isPk??!1,isFk:f.isFk??!1,nullable:f.nullable??!0,note:f.note??null,ord:I})))}let H=[...q.values()];if(H.length)await $.delete(l).where(F8(K4(l.fromTableId,H),K4(l.toTableId,H)));for(let M of J.relations){let F=q.get(M.fromTable),D=q.get(M.toTable);if(!F||!D)continue;await $.insert(l).values({fromTableId:F,toTableId:D,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 F=(await $.query.endpoint.findMany({where:(D,{eq:R})=>R(D.source,"INTROSPECTION")})).filter((D)=>!G.has(`${D.method} ${D.path}`)).map((D)=>D.id);if(F.length)await $.delete(E).where(K4(E.id,F))}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 F=await $.query.endpoint.findFirst({where:(T,{and:f,eq:I})=>f(I(T.method,M.method),I(T.path,M.path))}),D,R;if(F)D=F.x,R=F.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)},f=z5(T,U,N);D=f.x,R=f.y,N.push({...T,x:D,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:D,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(yZ(i.endpointId,w.id));for(let T of M.uses){let f=q.get(T.table)??(await $.query.dbTable.findFirst({where:(I,{eq:UZ})=>UZ(I.name,T.table)}))?.id;if(!f)continue;await $.insert(i).values({endpointId:w.id,tableId:f,access:T.access})}}await H5($),await L5($);let B=await $.query.dbTable.findMany({where:(M,{eq:F})=>F(M.source,"INTROSPECTION"),columns:{x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),z=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})))||U5(z))await A5($);let O=await uZ($);return{tables:J.tables.length,relations:J.relations.length,endpoints:J.endpoints.length,version:O}}var R5=d.object({files:d.array(d.object({path:d.string().trim().min(1),root:d.string().nullish(),lang:d.string().nullish(),mtimeMs:d.number().nullish(),size:d.number().nullish()})).default([]),edges:d.array(d.object({from:d.string().trim().min(1),to:d.string().trim().min(1)})).default([])});function E5(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=[],W=0,U=0;for(let L of Z){if(J.has(L))continue;let q=[{v:L,iter:0}];J.set(L,W),V.set(L,W),W++,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,W),V.set(B,W),W++,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 z=0,O;do O=X.pop(),Y.delete(O),K.set(O,U),z++;while(O!==H.v);j.push(z),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 S5(Z,$=b){let Q=R5.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=E5(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(x);let W=0;if(Y.length)await $.insert(x).values(Y.map((N)=>{let L=X.has(`${N.from}|${N.to}`);if(L)W++;return{fromPath:N.from,toPath:N.to,circular:L}}));let U=await uZ($);return await $.update(a).set({codeGraphSyncedAt:new Date}).where(NZ(a.id,"singleton")),{files:Q.files.length,edges:Y.length,circular:W,version:U}}var R8=(Z,$)=>`${Z}\x00${$}`;function Y4(Z){let $=R5.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=E5(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 W=new Map;for(let U of V)W.set(R8(U.from,U.to),{from:U.from,to:U.to,circular:Y.has(`${U.from}|${U.to}`)});return{files:j,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 v5(Z,$,Q=b){for(let[K,j]of $.files){let W=Z.files.get(K);if(W&&E8(W,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(x).where(I5(NZ(x.fromPath,j.from),NZ(x.toPath,j.to)));let V=[];for(let[K,j]of $.edges){let W=Z.edges.get(K);if(!W)V.push({fromPath:j.from,toPath:j.to,circular:j.circular});else if(W.circular!==j.circular)await Q.update(x).set({circular:j.circular}).where(I5(NZ(x.fromPath,j.from),NZ(x.toPath,j.to)))}if(V.length)await Q.insert(x).values(V);let Y=await uZ(Q);await Q.update(a).set({codeGraphSyncedAt:new Date}).where(NZ(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 $=zZ(Z,"beacon.config.json");if(w5($)){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 T5(Z){let $=y8(Z.path),Q=dZ(Z.id),J=sZ(VZ(Z.id)),V=Z5($,Z.path);async function Y(){let G=X5(V.snapshot().files.map((F)=>F.path));for(let F of $)for(let D of["prisma/schema.prisma","schema.prisma"]){let R=zZ(F,D);if(w5(R))G.push(X(R))}let B=[];for(let F of G)try{B.push({path:F,content:await k5(zZ(Z.path,F),"utf8")})}catch{}let z=K5(B),O=Y5(B);if(!z.tables.length&&!O.length)return;if(O.length&&z.tableVars&&Object.keys(z.tableVars).length){let D=V.snapshot().edges,R=new Set(O.map((I)=>I.file)),w=new Map;for(let I of D){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 b5 of w.get(UZ)??[])R.add(b5);let T=new Map;for(let I of[...R].slice(0,600))try{T.set(I,await k5(zZ(Z.path,I),"utf8"))}catch{}let f=$5({routeFiles:[...new Set(O.map((I)=>I.file))],edges:D,content:(I)=>T.get(I)??null,tableVars:z.tableVars});for(let I of O)I.uses=f.get(I.file)??[]}let M=await P5({tables:z.tables,relations:z.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,W=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 S5(O,J);K=Y4(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=[...W];W.clear();let B=G.some((O)=>Q4(X(O))),z=!1;for(let O of G)if(await V.applyChange(O))z=!0;if(z){let O=Y4(V.snapshot()),M=await v5(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},(z,O)=>{if(!O){j=!0,q();return}let M=String(O);if(T8.test(`/${M}`))return;W.add(zZ(G,M)),q()});B.on("error",(z)=>console.error(`[beacon-inline] watcher error (${Z.name}):`,z)),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 x8(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[z,O]of J){if(Y.has(z))continue;if(O.seq<B)B=O.seq,G=z}if(G)J.get(G).handle.stop(),J.delete(G)}function W(){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,z]of[...J]){let O=Z.get(B);if(!O||!Z.exists(O.path))z.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:W,ensureWatcher:U,stopWatcher:N,isWatching:L,activeIds:q,stopAll:H}}var f8=x8({list:FZ,get:g,exists:u8,start:(Z)=>T5(Z)});async function y5(Z){await f8.stopWatcher(Z)}async function u5(Z){if(!g(Z))return{ok:!1,removed:!1,fallbackId:r(),error:"unknown workspace"};D4(Z),O4(Z),await y5(Z),E4(VZ(Z)),I4(Z);try{g8(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 X4=process.argv.slice(3),g5=X4.includes("--yes")||X4.includes("-y"),MZ=X4.find((Z)=>!Z.startsWith("-")),x5=(Z)=>`\x1B[32m\u2713\x1B[0m ${Z}`,h5=(Z)=>`\x1B[2m${Z}\x1B[0m`,m5=(Z)=>`
6
+ \x1B[1m${Z}\x1B[0m`;function b8(){if(!MZ)return g(JZ(pZ(process.cwd())));if(/^[0-9a-f]{12}$/.test(MZ)){let Z=g(MZ);if(Z)return Z}return g(JZ(pZ(f5(MZ))))}var s=b8();if(!s)console.error(`[beacon] ${MZ??process.cwd()} is not a registered Beacon workspace \u2014 nothing to remove.`),process.exit(1);console.log(m5(g5?"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} ${h5("(untouched \u2014 only Beacon's data is erased)")}`);console.log(` data: ${n(s.id)} ${h5("(deleted)")}`);if(!g5)console.log(m5("Nothing was changed.")),console.log(` Run \x1B[1mbeacon remove${MZ?` ${MZ}`:""} --yes\x1B[0m to apply.
7
+ `),process.exit(0);async function p8(Z){try{let{pid:$,port:Q}=JSON.parse(m8(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 p8(s.id))console.log(` ${x5(`removed ${s.name} (via the running daemon)`)}
8
+ `);else{let Z=await u5(s.id);if(!Z.ok)console.error(`[beacon] remove failed: ${Z.error??"unknown error"}`),process.exit(1);console.log(` ${x5(`removed ${s.name}`)}
9
+ `)}if(h8(n(s.id)))console.error(`[beacon] warning: ${n(s.id)} still exists \u2014 remove it manually.`),process.exit(1);