trybeacon 0.1.89 → 0.1.91

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 (151) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.next/BUILD_ID +1 -1
  3. package/.next/app-path-routes-manifest.json +17 -17
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/server/app/@modal/(.)settings/page.js +1 -1
  7. package/.next/server/app/@modal/(.)settings/page.js.nft.json +1 -1
  8. package/.next/server/app/@modal/(.)settings/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/_global-error.html +1 -1
  11. package/.next/server/app/_global-error.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/_not-found/page.js +1 -1
  19. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  20. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/_not-found.html +1 -1
  22. package/.next/server/app/_not-found.rsc +3 -3
  23. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  24. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  26. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  28. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  29. package/.next/server/app/api/linear/route.js +1 -17
  30. package/.next/server/app/api/linear/route.js.nft.json +1 -1
  31. package/.next/server/app/api/linear/scopes/route.js +1 -17
  32. package/.next/server/app/api/linear/scopes/route.js.nft.json +1 -1
  33. package/.next/server/app/api/linear/sync/route.js +1 -17
  34. package/.next/server/app/api/linear/sync/route.js.nft.json +1 -1
  35. package/.next/server/app/api/share/create/route.js +1 -1
  36. package/.next/server/app/docs/page.js +1 -1
  37. package/.next/server/app/docs/page.js.nft.json +1 -1
  38. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/docs.html +1 -1
  40. package/.next/server/app/docs.rsc +4 -4
  41. package/.next/server/app/docs.segments/@modal/__DEFAULT__.segment.rsc +1 -1
  42. package/.next/server/app/docs.segments/_full.segment.rsc +4 -4
  43. package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  44. package/.next/server/app/docs.segments/_index.segment.rsc +3 -3
  45. package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  46. package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
  47. package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  48. package/.next/server/app/help/page.js +2 -2
  49. package/.next/server/app/help/page.js.nft.json +1 -1
  50. package/.next/server/app/help/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/help.html +1 -1
  52. package/.next/server/app/help.rsc +4 -4
  53. package/.next/server/app/help.segments/@modal/__DEFAULT__.segment.rsc +1 -1
  54. package/.next/server/app/help.segments/_full.segment.rsc +4 -4
  55. package/.next/server/app/help.segments/_head.segment.rsc +1 -1
  56. package/.next/server/app/help.segments/_index.segment.rsc +3 -3
  57. package/.next/server/app/help.segments/_tree.segment.rsc +2 -2
  58. package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +2 -2
  59. package/.next/server/app/help.segments/help.segment.rsc +1 -1
  60. package/.next/server/app/index.html +1 -1
  61. package/.next/server/app/index.rsc +3 -3
  62. package/.next/server/app/index.segments/@modal/__DEFAULT__.segment.rsc +1 -1
  63. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  64. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  65. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  66. package/.next/server/app/index.segments/_index.segment.rsc +3 -3
  67. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  68. package/.next/server/app/learn/page.js +3 -3
  69. package/.next/server/app/learn/page.js.nft.json +1 -1
  70. package/.next/server/app/learn/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/map/page.js +2 -2
  72. package/.next/server/app/map/page.js.nft.json +1 -1
  73. package/.next/server/app/map/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/page.js +1 -1
  75. package/.next/server/app/page.js.nft.json +1 -1
  76. package/.next/server/app/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/parked/page.js +1 -1
  78. package/.next/server/app/parked/page.js.nft.json +1 -1
  79. package/.next/server/app/parked/page_client-reference-manifest.js +1 -1
  80. package/.next/server/app/plan/page.js +3 -3
  81. package/.next/server/app/plan/page.js.nft.json +1 -1
  82. package/.next/server/app/plan/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/s/[token]/page.js +2 -2
  84. package/.next/server/app/s/[token]/page.js.nft.json +1 -1
  85. package/.next/server/app/s/[token]/page_client-reference-manifest.js +1 -1
  86. package/.next/server/app/settings/page.js +1 -1
  87. package/.next/server/app/settings/page.js.nft.json +1 -1
  88. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  89. package/.next/server/app-paths-manifest.json +17 -17
  90. package/.next/server/chunks/1495.js +18 -0
  91. package/.next/server/chunks/{7436.js → 1898.js} +3 -3
  92. package/.next/server/chunks/3825.js +1 -1
  93. package/.next/server/chunks/4378.js +1 -1
  94. package/.next/server/chunks/{5332.js → 473.js} +3 -3
  95. package/.next/server/chunks/5623.js +1 -1
  96. package/.next/server/chunks/799.js +1 -0
  97. package/.next/server/chunks/8709.js +8 -7
  98. package/.next/server/chunks/9683.js +1 -1
  99. package/.next/server/middleware-build-manifest.js +1 -1
  100. package/.next/server/pages/404.html +1 -1
  101. package/.next/server/pages/500.html +1 -1
  102. package/.next/server/server-reference-manifest.js +1 -1
  103. package/.next/server/server-reference-manifest.json +1 -1
  104. package/.next/static/chunks/2149-6eac4575d8a8281c.js +1 -0
  105. package/.next/static/chunks/{6283-20a6abe3453496ae.js → 3729-99f9edd66d1473ac.js} +3 -3
  106. package/.next/static/chunks/569-c70eb3d6c88282dc.js +1 -0
  107. package/.next/static/chunks/6818-051146427620d0f9.js +1 -0
  108. package/.next/static/chunks/8907-f1d97713a336fc2b.js +1 -0
  109. package/.next/static/chunks/app/@modal/(.)settings/page-77639f97e58859de.js +1 -0
  110. package/.next/static/chunks/app/docs/page-574e48b1b9519c80.js +1 -0
  111. package/.next/static/chunks/app/layout-6f04d1687adcd16e.js +1 -0
  112. package/.next/static/chunks/app/learn/page-ba0ec2cba32bd4e1.js +7 -0
  113. package/.next/static/chunks/app/map/page-a07e21cd94bae873.js +1 -0
  114. package/.next/static/chunks/app/plan/{page-809509b6149dbe6a.js → page-8e2a2edfb8fe69c5.js} +2 -2
  115. package/.next/static/chunks/app/s/[token]/page-b4dc768d9d1c6e29.js +1 -0
  116. package/.next/static/chunks/app/settings/page-c15764e1c2f54c5a.js +1 -0
  117. package/.next/static/css/b6c71ada5fa39830.css +1 -0
  118. package/.next/trace +47 -47
  119. package/.next/trace-build +1 -1
  120. package/dist/bin/ask.js +2 -2
  121. package/dist/bin/doctor.js +32 -30
  122. package/dist/bin/hook.js +31 -29
  123. package/dist/bin/mcp.js +41 -39
  124. package/dist/bin/plan.js +32 -30
  125. package/dist/bin/prompt.js +2 -2
  126. package/dist/bin/remove.js +3 -3
  127. package/dist/bin/stop-hook.js +4 -4
  128. package/dist/bin/uninstall.js +31 -29
  129. package/dist/lib/assets.js +20 -20
  130. package/dist/lib/codex-install.js +30 -28
  131. package/dist/lib/daemon-boot.js +11 -11
  132. package/dist/lib/global-install.js +31 -29
  133. package/drizzle/0013_quick_brother_voodoo.sql +1 -0
  134. package/drizzle/meta/0013_snapshot.json +1953 -0
  135. package/drizzle/meta/_journal.json +7 -0
  136. package/package.json +1 -1
  137. package/.next/server/chunks/2579.js +0 -1
  138. package/.next/static/chunks/2114-74736df56930b46c.js +0 -1
  139. package/.next/static/chunks/569-bfdcec83011428d3.js +0 -1
  140. package/.next/static/chunks/6579-1efe1d8b378c81a7.js +0 -1
  141. package/.next/static/chunks/6818-85b9a09bb74062ef.js +0 -1
  142. package/.next/static/chunks/app/@modal/(.)settings/page-58f068e66bf2fdf6.js +0 -1
  143. package/.next/static/chunks/app/docs/page-126c0e42c71731b2.js +0 -1
  144. package/.next/static/chunks/app/layout-a8bb07fb86893add.js +0 -1
  145. package/.next/static/chunks/app/learn/page-e6401368ea95de46.js +0 -7
  146. package/.next/static/chunks/app/map/page-374841ad0b729ce5.js +0 -1
  147. package/.next/static/chunks/app/s/[token]/page-57821fa904e9e018.js +0 -1
  148. package/.next/static/chunks/app/settings/page-435bfb2ac6f01744.js +0 -1
  149. package/.next/static/css/56890131dbc6daff.css +0 -1
  150. /package/.next/static/{CgztmUmahokH2oDzktISo → 5WK9Cj2xVeIioVVqODVpo}/_buildManifest.js +0 -0
  151. /package/.next/static/{CgztmUmahokH2oDzktISo → 5WK9Cj2xVeIioVVqODVpo}/_ssgManifest.js +0 -0
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var b5=Object.defineProperty;var p5=(Z)=>Z;function c5(Z,$){this[Z]=p5.bind(null,$)}var gZ=(Z,$)=>{for(var Q in $)b5(Z,Q,{get:$[Q],enumerable:!0,configurable:!0,set:c5.bind($,Q)})};var Y4=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var G4={};gZ(G4,{provisionDb:()=>$6});import{createClient as d5}from"@libsql/client";import{drizzle as l5}from"drizzle-orm/libsql";import{migrate as n5}from"drizzle-orm/libsql/migrator";import{readMigrationFiles as r5}from"drizzle-orm/migrator";import{dirname as hZ,join as o5}from"path";import{fileURLToPath as i5}from"url";async function zZ(Z,$){return(await Z.execute({sql:"SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?",args:[$]})).rows.length>0}async function e5(Z,$){let Q=await Z.execute(`PRAGMA table_info("${$}")`);return new Set(Q.rows.map((J)=>String(J.name)))}async function X4(Z){if(!await zZ(Z,"__drizzle_migrations"))return 0;let $=await Z.execute('SELECT count(*) AS n FROM "__drizzle_migrations"');return Number($.rows[0]?.n??0)}async function Z6(Z){for(let[$,Q]of Object.entries(t5)){if(!await zZ(Z,$))continue;let J=await e5(Z,$);for(let V of Q){if(!J.has(V))continue;await Z.execute(`UPDATE "${$}" SET "${V}" = CAST((julianday("${V}") - 2440587.5) * 86400000 AS INTEGER) WHERE typeof("${V}") = 'text'`)}}}async function $6(Z,$=a5){let Q=d5({url:Z});try{await Q.execute("PRAGMA journal_mode = WAL;"),await Q.execute("PRAGMA foreign_keys = ON;"),await Q.execute("PRAGMA busy_timeout = 5000;");let J=await zZ(Q,"__drizzle_migrations"),V=await zZ(Q,"Node"),Y=!1;if(V&&!J){let K=r5({migrationsFolder:$})[0];if(K)await Q.execute('CREATE TABLE IF NOT EXISTS "__drizzle_migrations" (id SERIAL PRIMARY KEY, hash text NOT NULL, created_at numeric)'),await Q.execute({sql:'INSERT INTO "__drizzle_migrations" ("hash", "created_at") VALUES (?, ?)',args:[K.hash,K.folderMillis]}),Y=!0}let X=await X4(Q);if(await n5(l5(Q),{migrationsFolder:$}),await X4(Q)>X)Y=!0;return await Z6(Q),{migrated:Y}}finally{Q.close()}}var s5,a5,t5;var M4=Y4(async()=>{s5=hZ(hZ(hZ(i5(import.meta.url)))),a5=process.env.BEACON_MIGRATIONS_DIR||o5(s5,"drizzle"),t5={Node:["createdAt","updatedAt"],Note:["createdAt","updatedAt"],DbTable:["createdAt","updatedAt"],Endpoint:["createdAt","updatedAt"],DraftTable:["createdAt"],SyncState:["codeGraphSyncedAt","updatedAt"],AppSetting:["updatedAt"],ProjectMeta:["updatedAt"],CodeFile:["updatedAt"]}});import{mkdirSync as W8,renameSync as C8,rmSync as N8,writeFileSync as L8}from"fs";import{dirname as B8}from"path";function q8(Z,$){W8(B8(Z),{recursive:!0});let Q=`${Z}.tmp`;try{L8(Q,$),C8(Q,Z)}catch(J){throw N8(Q,{force:!0}),J}}function O8(Z,$,Q=!1){q8(Z,JSON.stringify($,null,Q?2:void 0))}var z5=()=>{};import{AsyncLocalStorage as Q6}from"async_hooks";import{spawnSync as J6}from"child_process";import{createHash as V6}from"crypto";import{existsSync as j4,mkdirSync as NZ,readFileSync as bZ,writeFileSync as pZ}from"fs";import{homedir as H4}from"os";import{basename as K6,join as $Z,parse as Y6,resolve as U4}from"path";function t(){return process.env.BEACON_HOME||$Z(H4(),".beacon")}function cZ(){return $Z(t(),"workspaces.json")}function ZZ(Z){return V6("sha256").update(Z).digest("hex").slice(0,12)}function _Z(Z=process.cwd()){let $=J6("git",["rev-parse","--show-toplevel"],{cwd:Z,stdio:["ignore","pipe","ignore"]});if($.status===0){let Q=$.stdout?.toString().trim();if(Q)return Q}return Z}function W4(Z){let $=U4(Z);return $!==U4(H4())&&$!==Y6($).root}function C4(){return $Z(t(),"deleted.json")}function dZ(){try{let Z=JSON.parse(bZ(C4(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function N4(Z){NZ(t(),{recursive:!0}),pZ(C4(),JSON.stringify(Z,null,2))}function L4(Z){return dZ().includes(Z)}function B4(Z){let $=dZ();if(!$.includes(Z))N4([...$,Z])}function X6(Z){let $=dZ();if($.includes(Z))N4($.filter((Q)=>Q!==Z))}function n(Z){return $Z(t(),Z)}function VZ(Z){return`file:${$Z(n(Z),"db.sqlite")}`}function LZ(){try{let Z=JSON.parse(bZ(cZ(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function lZ(Z){NZ(t(),{recursive:!0}),pZ(cZ(),JSON.stringify(Z,null,2))}function FZ(){return LZ().sort((Z,$)=>$.lastOpenedAt.localeCompare(Z.lastOpenedAt))}function g(Z){return LZ().find(($)=>$.id===Z)??null}function q4(Z,$,Q=new Date().toISOString()){if(!W4(Z))throw Error(`beacon: refusing to register a non-repo path as a workspace: ${Z}`);let J=ZZ(Z);if(L4(J))throw Error(`beacon: workspace ${J} (${Z}) was deleted \u2014 run \`beacon\` or /beacon-init to re-add it`);let V=LZ(),Y=V.find((U)=>U.id===J),X={id:J,path:Z,name:$||Y?.name||K6(Z),lastOpenedAt:Q},K=[X,...V.filter((U)=>U.id!==J)];return NZ(n(J),{recursive:!0}),lZ(K),X}function V$(Z,$){return X6(ZZ(Z)),q4(Z,$)}function K$(Z,$=new Date().toISOString()){let Q=LZ(),J=Q.find((V)=>V.id===Z);if(!J)return;J.lastOpenedAt=$,lZ(Q)}function O4(Z){if(lZ(LZ().filter(($)=>$.id!==Z)),r()===Z)G6(FZ()[0]?.id??null)}function D4(){return $Z(t(),"active")}function r(){try{return bZ(D4(),"utf8").trim()||null}catch{return null}}function G6(Z){NZ(t(),{recursive:!0}),pZ(D4(),Z??"")}function M6(){let Z=r();return Z?g(Z):null}function Y$(){let Z=AZ()??r();return Z?g(Z):null}function X$(Z){return g(Z)?.path??null}function G$(){return j4(cZ())}var z4="beacon_ws";function _4(Z,$){let Q=Z.headers.get("cookie");if(!Q)return null;for(let J of Q.split(";")){let V=J.indexOf("=");if(V===-1)continue;if(J.slice(0,V).trim()===$)return decodeURIComponent(J.slice(V+1).trim())}return null}function M$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=_4(Z,z4);if(Q&&g(Q))return Q;return U6()}function U6(){let Z=FZ();return Z.length===1?Z[0].id:null}var F4="x-beacon-workspace-path";function U$(Z=process.cwd()){let $=_Z(Z);return{"x-beacon-workspace":ZZ($),[F4]:$}}async function j$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=Z.headers.get(F4);if(Q&&W4(Q)&&!L4(ZZ(Q))&&(!$||ZZ(Q)===$)){let V=q4(Q);return await nZ(V.id),V.id}let J=_4(Z,z4);if(J&&g(J))return J;return null}var A4=new Q6;function j6(Z,$){return Z?A4.run(Z,$):$()}function AZ(){return A4.getStore()??null}var mZ=new Set;function P4(Z){mZ.delete($Z(n(Z),"db.sqlite"))}async function nZ(Z){let $=n(Z),Q=$Z($,"db.sqlite"),J=j4(Q);if(J&&mZ.has(Q))return{ok:!0,created:!1,migrated:!1};try{NZ($,{recursive:!0});let{provisionDb:V}=await M4().then(() => G4),Y=await V(VZ(Z));return mZ.add(Q),{ok:!0,created:!J,migrated:J&&Y.migrated}}catch(V){return{ok:!1,created:!1,migrated:!1,error:V instanceof Error?V.message:String(V)}}}import{existsSync as b8,readFileSync as p8}from"fs";import{resolve as f5}from"path";import{rmSync as m8}from"fs";import{drizzle as f6}from"drizzle-orm/libsql";import{createClient as x6}from"@libsql/client";var rZ={};gZ(rZ,{workspaceFlag:()=>q6,tag:()=>jZ,syncState:()=>a,projectMeta:()=>B6,planContract:()=>O6,note:()=>C6,nodeTags:()=>YZ,nodeFile:()=>BZ,node:()=>k,endpointTable:()=>i,endpoint:()=>E,edge:()=>KZ,draftTable:()=>c,draftRelation:()=>XZ,draftColumn:()=>OZ,dbTable:()=>P,dbRelation:()=>d,dbColumn:()=>e,codeFileEdge:()=>f,codeFile:()=>y,bugFlag:()=>qZ,boardAnnotation:()=>N6,appSetting:()=>L6});import{sqliteTable as v,index as S,foreignKey as H6,text as H,integer as F,real as m,uniqueIndex as o,primaryKey as W6}from"drizzle-orm/sqlite-core";import{createId as u}from"@paralleldrive/cuid2";var k=v("Node",{id:H().primaryKey().$defaultFn(()=>u()),view:H().notNull(),kind:H().default("FEATURE").notNull(),cluster:H(),layer:H(),title:H().notNull(),role:H(),plain:H(),status:H().default("PENDING").notNull(),priority:F().default(2).notNull(),progress:F().default(0).notNull(),x:m().default(0).notNull(),y:m().default(0).notNull(),sourceRef:H(),externalId:H(),source:H().default("MANUAL").notNull(),planId:H(),parentId:H(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date),externalUpdatedAt:F({mode:"timestamp_ms"}),externalSyncedAt:F({mode:"timestamp_ms"}),externalSnapshot:H(),assigneeName:H(),assigneeAvatarUrl:H(),hiddenAt:F({mode:"timestamp_ms"})},(Z)=>[S("Node_cluster_idx").on(Z.cluster),S("Node_parentId_idx").on(Z.parentId),S("Node_view_idx").on(Z.view),H6(()=>({columns:[Z.parentId],foreignColumns:[Z.id],name:"Node_parentId_Node_id_fk"})).onUpdate("cascade").onDelete("cascade")]),BZ=v("NodeFile",{id:H().primaryKey().$defaultFn(()=>u()),nodeId:H().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),path:H().notNull()},(Z)=>[o("NodeFile_nodeId_path_key").on(Z.nodeId,Z.path),S("NodeFile_nodeId_idx").on(Z.nodeId)]),jZ=v("Tag",{id:H().primaryKey().$defaultFn(()=>u()),label:H().notNull(),color:H()},(Z)=>[o("Tag_label_key").on(Z.label)]),KZ=v("Edge",{id:H().primaryKey().$defaultFn(()=>u()),fromId:H().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),toId:H().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),kind:H().default("DEPENDS").notNull(),label:H(),sourceHandle:H(),targetHandle:H()},(Z)=>[o("Edge_fromId_toId_kind_key").on(Z.fromId,Z.toId,Z.kind),S("Edge_toId_idx").on(Z.toId),S("Edge_fromId_idx").on(Z.fromId)]),YZ=v("_NodeTags",{a:H("A").notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),b:H("B").notNull().references(()=>jZ.id,{onDelete:"cascade",onUpdate:"cascade"})},(Z)=>[o("_NodeTags_AB_unique").on(Z.a,Z.b),S("_NodeTags_B_index").on(Z.b)]),C6=v("Note",{id:H().primaryKey().$defaultFn(()=>u()),title:H().default("Untitled").notNull(),body:H().default("").notNull(),ord:m().default(0).notNull(),pinned:F({mode:"boolean"}).default(!1).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("Note_updatedAt_idx").on(Z.updatedAt)]),N6=v("BoardAnnotation",{id:H().primaryKey().$defaultFn(()=>u()),targetKind:H().notNull(),targetId:H().notNull(),columnName:H(),body:H().default("").notNull(),x:m(),y:m(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("BoardAnnotation_target_idx").on(Z.targetId)]),qZ=v("BugFlag",{id:H().primaryKey().$defaultFn(()=>u()),nodeId:H().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),by:H().notNull(),note:H().notNull(),resolvedAt:F({mode:"timestamp_ms"}),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[S("BugFlag_nodeId_idx").on(Z.nodeId)]),P=v("DbTable",{id:H().primaryKey().$defaultFn(()=>u()),name:H().notNull(),domain:H(),description:H(),source:H().default("MANUAL").notNull(),planId:H(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("DbTable_domain_idx").on(Z.domain),o("DbTable_name_key").on(Z.name)]),e=v("DbColumn",{id:H().primaryKey().$defaultFn(()=>u()),tableId:H().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),name:H().notNull(),type:H().notNull(),isPk:F({mode:"boolean"}).default(!1).notNull(),isFk:F({mode:"boolean"}).default(!1).notNull(),nullable:F({mode:"boolean"}).default(!0).notNull(),note:H(),ord:F().default(0).notNull()},(Z)=>[o("DbColumn_tableId_name_key").on(Z.tableId,Z.name),S("DbColumn_tableId_idx").on(Z.tableId)]),d=v("DbRelation",{id:H().primaryKey().$defaultFn(()=>u()),fromTableId:H().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:H().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:H().notNull(),toColumn:H().notNull(),label:H()},(Z)=>[S("DbRelation_toTableId_idx").on(Z.toTableId),S("DbRelation_fromTableId_idx").on(Z.fromTableId)]),E=v("Endpoint",{id:H().primaryKey().$defaultFn(()=>u()),method:H().notNull(),path:H().notNull(),domain:H(),description:H(),source:H().default("MANUAL").notNull(),planId:H(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("Endpoint_method_path_key").on(Z.method,Z.path),S("Endpoint_domain_idx").on(Z.domain)]),i=v("EndpointTable",{id:H().primaryKey().$defaultFn(()=>u()),endpointId:H().notNull().references(()=>E.id,{onDelete:"cascade",onUpdate:"cascade"}),tableId:H().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),access:H().default("read").notNull()},(Z)=>[o("EndpointTable_endpointId_tableId_key").on(Z.endpointId,Z.tableId),S("EndpointTable_tableId_idx").on(Z.tableId)]),c=v("DraftTable",{id:H().primaryKey().$defaultFn(()=>u()),name:H().notNull(),domain:H(),description:H(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[o("DraftTable_name_key").on(Z.name)]),OZ=v("DraftColumn",{id:H().primaryKey().$defaultFn(()=>u()),tableId:H().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),name:H().notNull(),type:H().notNull(),isPk:F({mode:"boolean"}).default(!1).notNull(),isFk:F({mode:"boolean"}).default(!1).notNull(),nullable:F({mode:"boolean"}).default(!0).notNull(),note:H(),ord:F().default(0).notNull()},(Z)=>[S("DraftColumn_tableId_idx").on(Z.tableId)]),XZ=v("DraftRelation",{id:H().primaryKey().$defaultFn(()=>u()),fromTableId:H().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:H().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:H().notNull(),toColumn:H().notNull(),label:H()},(Z)=>[S("DraftRelation_toTableId_idx").on(Z.toTableId),S("DraftRelation_fromTableId_idx").on(Z.fromTableId)]),y=v("CodeFile",{path:H().primaryKey(),root:H(),lang:H(),x:m().default(0).notNull(),y:m().default(0).notNull(),mtimeMs:m(),size:F(),inDegree:F().default(0).notNull(),outDegree:F().default(0).notNull(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),f=v("CodeFileEdge",{fromPath:H().notNull().references(()=>y.path,{onDelete:"cascade",onUpdate:"cascade"}),toPath:H().notNull().references(()=>y.path,{onDelete:"cascade",onUpdate:"cascade"}),circular:F({mode:"boolean"}).default(!1).notNull()},(Z)=>[S("CodeFileEdge_circular_idx").on(Z.circular),S("CodeFileEdge_toPath_idx").on(Z.toPath),S("CodeFileEdge_fromPath_idx").on(Z.fromPath),W6({columns:[Z.fromPath,Z.toPath],name:"CodeFileEdge_fromPath_toPath_pk"})]),a=v("SyncState",{id:H().primaryKey().default("singleton"),version:F().default(0).notNull(),codeGraphSyncedAt:F({mode:"timestamp_ms"}),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),L6=v("AppSetting",{id:H().primaryKey().default("singleton"),editor:H().default("auto").notNull(),currentFeatureId:H(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),B6=v("ProjectMeta",{id:H().primaryKey().default("singleton"),overview:H(),conventions:H().default("[]").notNull(),hasFrontend:F({mode:"boolean"}),classificationRoots:H().default("[]").notNull(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),q6=v("WorkspaceFlag",{id:H().primaryKey().$defaultFn(()=>u()),key:H().notNull(),enabled:F({mode:"boolean"}).default(!1).notNull(),config:H(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("WorkspaceFlag_key_key").on(Z.key)]),O6=v("PlanContract",{id:H().primaryKey().$defaultFn(()=>u()),planId:H().notNull(),declaredFiles:H().default("[]").notNull(),authorizedExtras:H().default("[]").notNull(),active:F({mode:"boolean"}).default(!1).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("PlanContract_planId_key").on(Z.planId),S("PlanContract_active_idx").on(Z.active)]);var oZ={};gZ(oZ,{tagRelations:()=>F6,nodeTagsRelations:()=>A6,nodeRelations:()=>D6,nodeFileRelations:()=>z6,endpointTableRelations:()=>v6,endpointRelations:()=>S6,edgeRelations:()=>P6,draftTableRelations:()=>k6,draftRelationRelations:()=>T6,draftColumnRelations:()=>w6,dbTableRelations:()=>I6,dbRelationRelations:()=>E6,dbColumnRelations:()=>R6,codeFileRelations:()=>y6,codeFileEdgeRelations:()=>u6,bugFlagRelations:()=>_6});import{relations as h}from"drizzle-orm";var D6=h(k,({one:Z,many:$})=>({files:$(BZ),bugFlags:$(qZ),nodeTags:$(YZ),edgesOut:$(KZ,{relationName:"EdgeFrom"}),edgesIn:$(KZ,{relationName:"EdgeTo"}),parent:Z(k,{fields:[k.parentId],references:[k.id],relationName:"NodeTree"}),children:$(k,{relationName:"NodeTree"})})),z6=h(BZ,({one:Z})=>({node:Z(k,{fields:[BZ.nodeId],references:[k.id]})})),_6=h(qZ,({one:Z})=>({node:Z(k,{fields:[qZ.nodeId],references:[k.id]})})),F6=h(jZ,({many:Z})=>({nodeTags:Z(YZ)})),A6=h(YZ,({one:Z})=>({node:Z(k,{fields:[YZ.a],references:[k.id]}),tag:Z(jZ,{fields:[YZ.b],references:[jZ.id]})})),P6=h(KZ,({one:Z})=>({from:Z(k,{fields:[KZ.fromId],references:[k.id],relationName:"EdgeFrom"}),to:Z(k,{fields:[KZ.toId],references:[k.id],relationName:"EdgeTo"})})),I6=h(P,({many:Z})=>({columns:Z(e),fksOut:Z(d,{relationName:"FkFrom"}),fksIn:Z(d,{relationName:"FkTo"}),usages:Z(i)})),R6=h(e,({one:Z})=>({table:Z(P,{fields:[e.tableId],references:[P.id]})})),E6=h(d,({one:Z})=>({fromTable:Z(P,{fields:[d.fromTableId],references:[P.id],relationName:"FkFrom"}),toTable:Z(P,{fields:[d.toTableId],references:[P.id],relationName:"FkTo"})})),S6=h(E,({many:Z})=>({tables:Z(i)})),v6=h(i,({one:Z})=>({endpoint:Z(E,{fields:[i.endpointId],references:[E.id]}),table:Z(P,{fields:[i.tableId],references:[P.id]})})),k6=h(c,({many:Z})=>({columns:Z(OZ),fksOut:Z(XZ,{relationName:"DraftFkFrom"}),fksIn:Z(XZ,{relationName:"DraftFkTo"})})),w6=h(OZ,({one:Z})=>({table:Z(c,{fields:[OZ.tableId],references:[c.id]})})),T6=h(XZ,({one:Z})=>({fromTable:Z(c,{fields:[XZ.fromTableId],references:[c.id],relationName:"DraftFkFrom"}),toTable:Z(c,{fields:[XZ.toTableId],references:[c.id],relationName:"DraftFkTo"})})),y6=h(y,({many:Z})=>({edgesOut:Z(f,{relationName:"CFEFrom"}),edgesIn:Z(f,{relationName:"CFETo"})})),u6=h(f,({one:Z})=>({fromFile:Z(y,{fields:[f.fromPath],references:[y.path],relationName:"CFEFrom"}),toFile:Z(y,{fields:[f.toPath],references:[y.path],relationName:"CFETo"})}));var g6={...rZ,...oZ};function h6(){let Z=process.env.DATABASE_URL;if(Z&&/^(file:|libsql:|wss?:|https?:|:memory:)/i.test(Z))return Z;return"file:./dev.db"}var m6=h6();function b6(Z){let $=x6({url:Z});return $.execute("PRAGMA foreign_keys = ON;"),$.execute("PRAGMA busy_timeout = 5000;"),f6($,{schema:g6})}var p6=globalThis,PZ=p6.dzByUrl??=new Map;function I4(){return IZ(m6)}function IZ(Z){let $=PZ.get(Z);if(!$)$=b6(Z),PZ.set(Z,$);return $}function R4(Z){let $=PZ.get(Z);PZ.delete(Z);try{$?.$client?.close?.()}catch{}}function c6(){if(process.env.BEACON_REPO)return I4();let Z=AZ()??r();if(!Z)return I4();return IZ(VZ(Z))}var b=new Proxy({},{get(Z,$){let Q=c6(),J=Q[$];return typeof J==="function"?J.bind(Q):J}});import{existsSync as u8}from"fs";import{existsSync as k5,readFileSync as S8,watch as v8}from"fs";import{readFile as v5}from"fs/promises";import{join as DZ,relative as k8,resolve as w8}from"path";import{existsSync as l4,readFileSync as n4}from"fs";import{readdir as D7,readFile as z7,stat as r4}from"fs/promises";import{extname as o4,join as vZ,relative as WZ,resolve as HZ}from"path";import{extname as m4}from"path";import{dirname as d6,resolve as l6}from"path";var iZ=[".ts",".tsx",".js",".jsx",".mjs",".cjs"],n6=[/(?:^|[\n;])\s*(?:import|export)[^'"`\n]{0,4000}?from\s*['"]([^'"`]+)['"]/g,/(?:^|[\n;])\s*import\s*['"]([^'"`]+)['"]/g,/\brequire\(\s*['"]([^'"`]+)['"]\s*\)/g,/\bimport\(\s*['"]([^'"`]+)['"]\s*\)/g];function r6(Z){return Z.split(/[\\/]/).join("/")}function E4(Z,$){if($.has(Z))return Z;for(let Q of iZ){let J=`${Z}${Q}`;if($.has(J))return J}for(let Q of iZ){let J=`${Z}/index${Q}`;if($.has(J))return J}return null}function o6(Z){let $=new Set;for(let Q of n6)for(let J of Z.matchAll(Q))$.add(J[1]);return $}function i6(Z,$,Q,J){if(Z.startsWith(".")){let V=l6("/",d6($),Z),Y=r6(V).replace(/^\//,"");return E4(Y,Q)}for(let V of J)if(Z.startsWith(V.from)){let Y=Z.slice(V.from.length),X=V.to?`${V.to}/${Y}`:Y,K=E4(X,Q);if(K)return K}return null}var S4={id:"ts",extensions:iZ,specifiers:o6,resolve(Z,$,Q){let J=i6(Z,$,Q.fileSet,Q.tsAliases??[]);return J?[J]:[]}};import{dirname as RZ,join as s6,normalize as a6}from"path";var t6=[".py",".pyi"],v4=[/(?:^|[\n;])\s*from\s+(\.*[\w.]*)\s+import\b/g,/(?:^|[\n;])\s*import\s+([\w.]+(?:\s*,\s*[\w.]+)*)/g];function k4(Z,$){for(let Q of[`${Z}.py`,`${Z}/__init__.py`,`${Z}.pyi`])if($.has(Q))return[Q];return[]}function e6(Z){let $=new Set;for(let Q of Z.matchAll(v4[0])){let J=Q[1].trim();if(J)$.add(J)}for(let Q of Z.matchAll(v4[1]))for(let J of Q[1].split(/\s*,\s*/)){let V=J.trim().split(/\s+as\s+/)[0].trim();if(V)$.add(V)}return $}var w4={id:"python",extensions:t6,specifiers:e6,resolve(Z,$,Q){if(Z.startsWith(".")){let X=Z.length-Z.replace(/^\.+/,"").length,K=Z.slice(X),U=RZ($);for(let M=1;M<X;M++)U=RZ(U);let W=K?s6(U,K.replace(/\./g,"/")):U;return k4(a6(W).replace(/\\/g,"/"),Q.fileSet)}let J=Z.replace(/\./g,"/"),V=[],Y=RZ($);while(Y&&Y!=="."&&Y!=="/")V.push(Y),Y=RZ(Y);V.push("");for(let X of V){let K=k4(X?`${X}/${J}`:J,Q.fileSet);if(K.length)return K}return[]}};import{dirname as Z7}from"path";var $7=[".go"],Q7=/(?:^|[\n;])\s*import\s+(?:[\w.]+\s+)?"([^"]+)"/g,J7=/(?:^|[\n;])\s*import\s*\(([\s\S]*?)\)/g,V7=/"([^"]+)"/g;function K7(Z){let $=new Set;for(let Q of Z.matchAll(Q7))$.add(Q[1]);for(let Q of Z.matchAll(J7))for(let J of Q[1].matchAll(V7))$.add(J[1]);return $}var T4={id:"go",extensions:$7,resolve(Z,$,Q){let J=Q.goModulePath;if(!J)return[];let V=null;if(Z===J)V="";else if(Z.startsWith(`${J}/`))V=Z.slice(J.length+1);if(V===null)return[];let Y=[];for(let X of Q.fileSet){if(!X.endsWith(".go"))continue;let K=Z7(X);if(V===""&&K==="."||K===V)Y.push(X)}return Y.sort()},specifiers:K7};import{basename as y4,dirname as sZ,join as u4,normalize as f4}from"path";var Y7=[".rs"],X7=/(?:^|[\n;])\s*(?:pub\s+)?mod\s+(\w+)\s*;/g,G7=/(?:^|[\n;])\s*(?:pub\s+)?use\s+([\w:]+)/g;function M7(Z){let $=Z.split("::").filter((Q)=>Q&&Q!=="*");if(!$.length)return"";if($[0]==="crate")return["crate",...$.slice(1)].join("/");if($[0]==="super")return["..",...$.slice(1)].join("/");if($[0]==="self")return[".",...$.slice(1)].join("/");return $.join("/")}function aZ(Z,$){for(let Q of[`${Z}.rs`,`${Z}/mod.rs`])if($.has(Q))return[Q];return[]}var U7=new Set(["mod.rs","lib.rs","main.rs"]);function j7(Z){let $=new Set;for(let Q of Z.matchAll(X7))$.add(`./${Q[1]}`);for(let Q of Z.matchAll(G7)){let J=M7(Q[1]);if(J)$.add(J)}return $}var x4={id:"rust",extensions:Y7,specifiers:j7,resolve(Z,$,Q){let J=Q.fileSet;if(Z.startsWith("./")||Z.startsWith("../")){let V=Z.replace(/^\.\//,""),Y=f4(u4(sZ($),Z)).replace(/\\/g,"/"),X=aZ(Y,J);if(X.length)return X;if(Z.startsWith("./")&&!U7.has(y4($))){let K=u4(sZ($),y4($,".rs"),V);if(X=aZ(f4(K).replace(/\\/g,"/"),J),X.length)return X}return[]}if(Z.startsWith("crate/")){let V=$.split("/"),Y=V.lastIndexOf("src"),X=Y>=0?V.slice(0,Y+1).join("/"):sZ($),K=Z.slice(6).split("/");for(let U of[K.join("/"),K.slice(0,-1).join("/")]){if(!U)continue;let W=aZ(`${X}/${U}`,J);if(W.length)return W}return[]}return[]}};import{dirname as H7,extname as W7,join as C7,normalize as N7}from"path";var g4=[".swift",".java",".rb",".kt",".kts",".cs",".php",".scala",".c",".h",".cpp",".hpp",".cc",".hh",".m",".mm",".ex",".exs",".lua",".dart",".vue",".svelte"],L7=[/\b(?:require_relative|require|include|import|use|using|from)\s*\(?\s*['"]([^'"`\n]+)['"]/g,/(?:^|[\n;])\s*import\s+([\w.]+)/g,/(?:^|[\n;])\s*from\s+([\w.]+)\s+import\b/g,/(?:^|[\n;])\s*using\s+([\w.]+)\s*;/g,/(?:^|[\n;])\s*use\s+([\w\\]+)/g,/#\s*include\s*[<"]([^>"\n]+)[>"]/g];function B7(Z){let $=new Set;for(let Q of L7)for(let J of Z.matchAll(Q)){let V=J[1].trim();if(V)$.add(V)}return $}var h4={id:"fallback",extensions:g4,specifiers:B7,resolve(Z,$,Q){let V=[W7($).toLowerCase(),...g4].filter((U,W,M)=>U&&M.indexOf(U)===W),Y=Z.includes("/")||Z.includes("\\"),X=Z.startsWith(".")||Y?Z.replace(/\\/g,"/"):Z.replace(/[.:]+/g,"/"),K=[N7(C7(H7($),X)).replace(/\\/g,"/"),X.replace(/^\.\//,"")];for(let U of K){if(Q.fileSet.has(U))return[U];for(let W of V){let M=U.endsWith(W)?U:`${U}${W}`;if(Q.fileSet.has(M))return[M];if(Q.fileSet.has(`${U}/index${W}`))return[`${U}/index${W}`]}}return[]}};var q7=[S4,w4,T4,x4,h4],EZ=new Map;for(let Z of q7)for(let $ of Z.extensions)EZ.set($,Z);var O7={".ts":"ts",".tsx":"ts",".js":"js",".jsx":"js",".mjs":"js",".cjs":"js",".py":"py",".pyi":"py",".go":"go",".rs":"rs",".swift":"swift",".java":"java",".rb":"ruby",".kt":"kotlin",".kts":"kotlin",".cs":"csharp",".php":"php",".scala":"scala",".c":"c",".h":"c",".cpp":"cpp",".hpp":"cpp",".cc":"cpp",".hh":"cpp",".m":"objc",".mm":"objc",".ex":"elixir",".exs":"elixir",".lua":"lua",".dart":"dart",".vue":"vue",".svelte":"svelte"};function tZ(Z){return EZ.get(m4(Z).toLowerCase())??null}function b4(Z){let $=m4(Z).toLowerCase();if(!EZ.has($))return null;return O7[$]??$.slice(1)}function eZ(){return new Set(EZ.keys())}var i4=new Set(["node_modules",".git",".next","dist","build","__pycache__","target",".venv","venv","env",".turbo","coverage",".beacon",".playwright-mcp","generated","migrations","alembic","migrate"]);function _7(Z=5){let $=performance.now();return async()=>{if(performance.now()-$>Z)await new Promise((Q)=>setImmediate(Q)),$=performance.now()}}var F7=()=>Promise.resolve();async function s4(Z,$,Q,J,V){let Y;try{Y=await D7($,{withFileTypes:!0})}catch{return}for(let X of Y){if(X.name.startsWith("."))continue;if(i4.has(X.name))continue;let K=vZ($,X.name);if(X.isDirectory()){await s4(Z,K,Q,J,V);continue}if(!X.isFile())continue;if(X.name.endsWith(".d.ts"))continue;if(!Q.has(o4(X.name).toLowerCase()))continue;J.push(WZ(Z,K))}await V()}async function A7(Z,$=F7){let Q=[];return await s4(Z,Z,eZ(),Q,$),Q.map((J)=>J.split(/[\\/]/).join("/")).sort()}function P7(Z){try{return JSON.parse(Z)}catch{}let $=Z.replace(/\/\*[^"]*?\*\//g,"").replace(/(^|[^:"])\/\/.*$/gm,"$1").replace(/,\s*([}\]])/g,"$1");return JSON.parse($)}function p4(Z){return Z.replace(/^\.\/?/,"").replace(/\/$/,"")}function a4(Z){let $=vZ(Z,"tsconfig.json");if(!l4($))return[];let Q;try{Q=P7(n4($,"utf8"))}catch{return[]}let J=Q.compilerOptions?.paths??{},V=p4(Q.compilerOptions?.baseUrl??"."),Y=[];for(let[X,K]of Object.entries(J)){if(!X.endsWith("/*")||!K.length)continue;let U=K[0];if(!U.endsWith("/*"))continue;let W=X.slice(0,-1),M=p4(U.slice(0,-1)),C=[V,M].filter(Boolean).join("/");Y.push({from:W,to:C})}return Y}function SZ(Z){let $=vZ(Z,"go.mod");if(!l4($))return null;try{let Q=/^\s*module\s+(\S+)/m.exec(n4($,"utf8"));return Q?Q[1]:null}catch{return null}}function p(Z){return Z.split(/[\\/]/).join("/")}function t4(Z){if(Z.length===1)return Z[0];let $=Z.map((V)=>p(V).split("/")),Q=$[0],J=0;for(;J<Q.length;J++)if(!$.every((V)=>V[J]===Q[J]))break;return Q.slice(0,J).join("/")||"/"}async function I7(Z,$,Q){let J=(Array.isArray(Z)?Z:[Z]).map((W)=>p(HZ(W))),V=p($?HZ($):J.length===1?J[0]:t4(J)),Y=new Map,X=[];for(let W of J){let M=p(WZ(V,W));for(let C of a4(W))X.push({from:C.from,to:[M,C.to].filter(Boolean).join("/")});for(let C of await A7(W,Q)){let L=p(vZ(W,C)),O=p(WZ(V,L));if(Y.has(O))continue;try{let j=await r4(L);Y.set(O,{path:O,abs:L,root:M||null,mtimeMs:j.mtimeMs,size:j.size})}catch{}await Q()}}let K=J.map(SZ).find(Boolean)??SZ(V);return{metas:[...Y.values()].sort((W,M)=>W.path.localeCompare(M.path)),ctx:{fileSet:new Set(Y.keys()),tsAliases:X,goModulePath:K}}}var c4=50000;function R7(Z){let $=0;for(let Q=0;Q<Z.length;Q++)if(Z.charCodeAt(Q)===10){if(Q-$>c4)return!0;$=Q+1}return Z.length-$>c4}async function d4(Z){let $=tZ(Z.path);if(!$||Z.size>200000)return new Set;try{let Q=await z7(Z.abs,"utf8");if(R7(Q))return new Set;return $.specifiers(Q)}catch{return new Set}}function e4(Z,$){let Q=(Array.isArray(Z)?Z:[Z]).map((j)=>p(HZ(j))),J=p($?HZ($):Q.length===1?Q[0]:t4(Q)),V=new Map,Y=new Map,X=[],K=null;function U(){X=[];for(let j of Q){let N=p(WZ(J,j));for(let B of a4(j))X.push({from:B.from,to:[N,B.to].filter(Boolean).join("/")})}K=Q.map(SZ).find(Boolean)??SZ(J)}function W(j){let N=j.split("/");for(let D=0;D<N.length;D++){let q=N[D];if(!q||q.startsWith("."))return!0;if(D<N.length-1&&i4.has(q))return!0}let B=N[N.length-1];if(B.endsWith(".d.ts"))return!0;return!eZ().has(o4(B).toLowerCase())}function M(j){let N=p(HZ(j));for(let B of Q)if(N===B||N.startsWith(`${B}/`)){let D=N.slice(B.length).replace(/^\/+/,"");if(W(D))return null;return{path:p(WZ(J,N)),root:p(WZ(J,B))||null}}return null}function C(){let j={fileSet:new Set(V.keys()),tsAliases:X,goModulePath:K},N=[...V.values()].sort((q,G)=>q.path.localeCompare(G.path)),B=[];for(let q of N){let G=tZ(q.path);if(!G)continue;let z=Y.get(q.path)??new Set,_=new Set;for(let R of z)for(let w of G.resolve(R,q.path,j)){if(!w||w===q.path||_.has(w))continue;_.add(w),B.push({from:q.path,to:w})}}return{files:N.map((q)=>({path:q.path,lang:b4(q.path),root:q.root,mtimeMs:q.mtimeMs,size:q.size})),edges:B}}async function L(){let j=_7(),{metas:N,ctx:B}=await I7(Z,$,j);V.clear(),Y.clear();for(let D of N)await j(),V.set(D.path,D),Y.set(D.path,await d4(D));return X=B.tsAliases??[],K=B.goModulePath??null,C()}async function O(j){let N=p(HZ(j));if(!Q.some((_)=>N===_||N.startsWith(`${_}/`)))return!1;let B=N.split("/").pop()??"";if(B==="tsconfig.json"||B==="go.mod"){let _=N.slice(0,N.length-B.length-1);if(Q.includes(_))return U(),!0;return!1}let D=M(j);if(!D)return!1;let q;try{q=await r4(N)}catch{let _=V.delete(D.path);return Y.delete(D.path),_}let G=V.get(D.path);if(G&&G.mtimeMs===q.mtimeMs&&G.size===q.size)return!1;let z={path:D.path,abs:N,root:D.root,mtimeMs:q.mtimeMs,size:q.size};return V.set(D.path,z),Y.set(D.path,await d4(z)),!0}return{seed:L,applyChange:O,snapshot:C}}function Z5(Z){let $=Object.keys(Z.tableVars),Q=new Map;if(!$.length){for(let X of Z.routeFiles)Q.set(X,[]);return Q}let J=new Map;for(let X of Z.edges){let K=J.get(X.from)??[];K.push(X.to),J.set(X.from,K)}let V=new Map($.map((X)=>[X,new RegExp(`(?:query\\.${X}\\b|\\.from\\(\\s*${X}\\b)`)])),Y=new Map($.map((X)=>[X,new RegExp(`(?:insert|update|delete)\\(\\s*${X}\\b`)]));for(let X of Z.routeFiles){let K=new Set([X]),U=[X];for(let L=0;L<2&&K.size<25;L++){let O=[];for(let j of U)for(let N of J.get(j)??[]){if(K.has(N)||K.size>=25)continue;K.add(N),O.push(N)}U=O}let W=new Set,M=new Set;for(let L of K){let O=Z.content(L);if(!O)continue;for(let j of $){if(!W.has(j)&&V.get(j).test(O))W.add(j);if(!M.has(j)&&Y.get(j).test(O))M.add(j)}}let C=[];for(let L of $){let O=W.has(L),j=M.has(L);if(!O&&!j)continue;C.push({table:Z.tableVars[L],access:O&&j?"read-write":j?"write":"read"})}Q.set(X,C)}return Q}function Q5(Z,$){if(/_JSON_OR_JSONB|\bJSONB\b|\bJSON\b/.test(Z))return"jsonb";let Q=Z.match(/\b(GUID|Uuid|UUID|String|Text|DateTime|Date|Time|BigInteger|SmallInteger|Integer|Boolean|Float|Numeric|Decimal|Vector|TSVECTOR|LargeBinary|Enum)\b\s*(\([^)]*\))?/);if(Q){let Y=Q[2]??"",X=Y.match(/\d+/)?.[0];switch(Q[1]){case"GUID":case"Uuid":case"UUID":return"uuid";case"String":return X?`varchar(${X})`:"varchar";case"Text":return"text";case"DateTime":return/timezone\s*=\s*True/.test(Y)?"timestamptz":"timestamp";case"Date":return"date";case"Time":return"time";case"BigInteger":return"bigint";case"SmallInteger":return"smallint";case"Integer":return"integer";case"Boolean":return"boolean";case"Float":return"float";case"Numeric":case"Decimal":return"numeric";case"Vector":return X?`vector(${X})`:"vector";case"TSVECTOR":return"tsvector";case"LargeBinary":return"bytea";case"Enum":return"varchar"}}let J=$.replace(/\s*\|\s*None/g,"").trim(),V=J.match(/^Optional\[([\s\S]*)\]$/);if(V)J=V[1].trim();if(/uuid/i.test(J))return"uuid";if(/datetime/i.test(J))return"timestamptz";if(/\bint\b/i.test(J))return"integer";if(/\bbool\b/i.test(J))return"boolean";if(/\bfloat\b/.test(J)&&!/\blist\b/.test(J))return"float";if(/\bdict\b|\blist\b|\bAny\b/.test(J))return"jsonb";return"text"}function kZ(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="(")Q++;else if(Z[J]===")"){if(Q--,Q===0)return Z.slice($+1,J)}return""}function E7(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="[")Q++;else if(Z[J]==="]"){if(Q--,Q===0)return Z.slice($+1,J)}return null}function S7(Z,$,Q){let J=Q.match(/__tablename__\s*=\s*["']([^"']+)["']/)?.[1],V=[],Y=[],X=[],K=/(\w+)\s*:\s*Mapped\s*\[/g,U;while(U=K.exec(Q)){let C=U.index+U[0].length-1,L=E7(Q,C);if(L===null)continue;let O=C+L.length+2,j=Q.slice(O).match(/^\s*=\s*(\w+)\s*\(/);if(!j||j[1]!=="mapped_column")continue;X.push({colName:U[1],pyType:L,argsAt:O+j[0].length-1})}let W=/(\w+)\s*=\s*(mapped_column|Column)\s*\(/g;while(U=W.exec(Q))X.push({colName:U[1],pyType:"",argsAt:U.index+U[0].length-1});X.sort((C,L)=>C.argsAt-L.argsAt);let M=new Set;for(let C of X){if(M.has(C.colName)||C.colName==="__tablename__")continue;M.add(C.colName);let L=kZ(Q,C.argsAt),O=/primary_key\s*=\s*True/.test(L)||void 0,j=/nullable\s*=\s*False/.test(L)?!1:!0,N=L.match(/ForeignKey\(\s*["']([^"']+?)\.([^"'.]+)["']/);if(V.push({name:C.colName,type:Q5(L,C.pyType),isPk:O,isFk:N?!0:void 0,nullable:j}),N)Y.push({column:C.colName,toTable:N[1],toColumn:N[2]})}return{name:Z,bases:$,tableName:J,columns:V,fks:Y}}function v7(Z){let $=[],Q=[],J=/\bTable\s*(\()\s*["']([^"']+)["']\s*,/g,V;while(V=J.exec(Z)){let Y=V[2],X=kZ(Z,V.index+V[0].indexOf("("));if(!/\bmetadata\b/.test(X)||!/\bColumn\s*\(/.test(X))continue;let K=[],U=/\bColumn\s*\(/g,W;while(W=U.exec(X)){let M=kZ(X,W.index+W[0].length-1),C=M.match(/^\s*["'](\w+)["']\s*,/)?.[1];if(!C)continue;let L=/primary_key\s*=\s*True/.test(M)||void 0,O=/nullable\s*=\s*False/.test(M)?!1:!0,j=M.match(/ForeignKey\(\s*["']([^"']+?)\.([^"'.]+)["']/);if(K.push({name:C,type:Q5(M,""),isPk:L,isFk:j?!0:void 0,nullable:O}),j)Q.push({fromTable:Y,fromColumn:C,toTable:j[1],toColumn:j[2]})}if(K.length)$.push({name:Y,columns:K})}return{tables:$,relations:Q}}function k7(Z){let $=new Map,Q={tables:[],relations:[]};for(let K of Z){if(!K.path.endsWith(".py"))continue;if(!/mapped_column\s*\(|__tablename__|\bTable\s*\(\s*["']/.test(K.content))continue;let U=v7(K.content);Q.tables.push(...U.tables),Q.relations.push(...U.relations);let W=/^class\s+(\w+)\s*\(([^)]*)\)\s*:/gm,M,C=[];while(M=W.exec(K.content))C.push({name:M[1],bases:M[2].split(",").map((L)=>L.trim().split(/[.[]/)[0]).filter(Boolean),at:M.index});for(let L=0;L<C.length;L++){let O=K.content.slice(C[L].at,C[L+1]?.at??K.content.length),j=S7(C[L].name,C[L].bases,O);$.set(j.name,j)}}if(![...$.values()].some((K)=>K.tableName)&&!Q.tables.length)return{tables:[],relations:[]};let J=(K,U=new Set)=>{if(U.has(K.name))return[];U.add(K.name);let W=[];for(let M of K.bases){let C=$.get(M);if(C&&!C.tableName)W.push(...J(C,U))}return W.push(...K.columns),W},V=[],Y=[];for(let K of $.values()){if(!K.tableName)continue;let U=J(K),W=new Map;for(let j of U)if(!W.has(j.name))W.set(j.name,j);let M=[...W.values()],C=(j)=>M.splice(M.findIndex((N)=>N.name===j),1)[0],L=M.some((j)=>j.name==="id")?C("id"):null,O=["created_at","updated_at","deleted_at"].filter((j)=>M.some((N)=>N.name===j)).map((j)=>C(j));V.push({name:K.tableName,columns:[...L?[L]:[],...M,...O]});for(let j of K.fks)Y.push({fromTable:K.tableName,fromColumn:j.column,toTable:j.toTable,toColumn:j.toColumn})}let X=new Set(V.map((K)=>K.name));for(let K of Q.tables)if(!X.has(K.name))V.push(K);return Y.push(...Q.relations.filter((K)=>!X.has(K.fromTable))),{tables:V,relations:Y}}function w7(Z){let $=Z.replace(/[?[\]]/g,"");return{String:"text",Int:"integer",BigInt:"bigint",Float:"float",Decimal:"numeric",Boolean:"boolean",DateTime:"timestamptz",Json:"jsonb",Bytes:"bytea"}[$]??$.toLowerCase()}function T7(Z){let $=[],Q=[];for(let J of Z){if(!J.path.endsWith(".prisma"))continue;let V=/model\s+(\w+)\s*\{([\s\S]*?)\}/g,Y;while(Y=V.exec(J.content)){let X=Y[1],K=Y[2].match(/@@map\(\s*["']([^"']+)["']\s*\)/)?.[1]??X,U=[];for(let W of Y[2].split(`
4
- `)){let M=W.trim().match(/^(\w+)\s+(\w+(?:\[\])?\??)\s*(.*)$/);if(!M||/^@@/.test(W.trim()))continue;let[,C,L,O]=M,j=/^(String|Int|BigInt|Float|Decimal|Boolean|DateTime|Json|Bytes)(\[\])?\??$/.test(L),N=O.match(/@relation\([^)]*fields:\s*\[(\w+)\][^)]*references:\s*\[(\w+)\]/);if(N)Q.push({fromTable:K,fromColumn:N[1],toTable:L.replace(/[?[\]]/g,""),toColumn:N[2]});if(!j)continue;U.push({name:C,type:w7(L),isPk:/@id\b/.test(O)||void 0,isFk:/@relation\b/.test(O)||void 0,nullable:L.endsWith("?")})}if(U.length)$.push({name:K,columns:U})}}return{tables:$,relations:Q}}function y7(Z,$){if(/mode:\s*["']timestamp/.test($))return"timestamp";if(/mode:\s*["']boolean["']/.test($))return"boolean";if(/mode:\s*["']json["']/.test($))return"jsonb";return Z}function u7(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="{")Q++;else if(Z[J]==="}"){if(Q--,Q===0)return Z.slice($+1,J)}return""}function f7(Z){let $=[],Q=/(\w+)\s*:\s*(text|integer|real|blob|numeric|varchar|boolean|timestamp|serial|uuid|json|jsonb)\s*\(/g;for(let Y of Z){if(!/\.(ts|tsx|mts|cts)$/.test(Y.path))continue;if(!/\b(?:sqliteTable|pgTable|mysqlTable)\s*\(/.test(Y.content))continue;let X=/(?:export\s+)?const\s+(\w+)\s*=\s*(?:sqliteTable|pgTable|mysqlTable)\s*\(\s*["']([^"']+)["']\s*,/g,K;while(K=X.exec(Y.content)){let U=Y.content.indexOf("{",K.index+K[0].length);if(U<0)continue;let W=u7(Y.content,U),M={varName:K[1],tableName:K[2],columns:[],colByProp:new Map,fks:[]},C=[];Q.lastIndex=0;for(let L of W.matchAll(Q))C.push({prop:L[1],builder:L[2],at:L.index,argOpen:L.index+L[0].length-1});C.forEach((L,O)=>{let j=W.slice(L.at,C[O+1]?.at??W.length),N=kZ(W,L.argOpen),D=N.match(/^\s*["']([^"']+)["']/)?.[1]??L.prop,q=j.match(/\.references\(\s*\(\)\s*=>\s*(\w+)\.(\w+)/);if(M.columns.push({name:D,type:y7(L.builder,N),isPk:/\.primaryKey\(\)/.test(j)||void 0,isFk:q?!0:void 0,nullable:/\.notNull\(\)/.test(j)?!1:!0}),M.colByProp.set(L.prop,D),q)M.fks.push({column:D,toVar:q[1],toProp:q[2]})}),$.push(M)}}if(!$.length)return{tables:[],relations:[]};let J=new Map($.map((Y)=>[Y.varName,Y])),V=[];for(let Y of $)for(let X of Y.fks){let K=J.get(X.toVar);if(!K)continue;V.push({fromTable:Y.tableName,fromColumn:X.column,toTable:K.tableName,toColumn:K.colByProp.get(X.toProp)??X.toProp})}return{tables:$.map((Y)=>({name:Y.tableName,columns:Y.columns})),relations:V,tableVars:Object.fromEntries($.map((Y)=>[Y.varName,Y.tableName]))}}var x7={long:"bigint",Long:"bigint",BigInteger:"bigint",int:"integer",Integer:"integer",short:"smallint",Short:"smallint",String:"varchar",char:"varchar",Character:"varchar",boolean:"boolean",Boolean:"boolean",UUID:"uuid",BigDecimal:"numeric",double:"double",Double:"double",float:"float",Float:"float",LocalDate:"date",LocalDateTime:"timestamp",Instant:"timestamp",Timestamp:"timestamp",Date:"timestamp",OffsetDateTime:"timestamptz",ZonedDateTime:"timestamptz",LocalTime:"time"},g7=/^(List|Set|Map|Collection|Iterable)$/;function J5(Z){if(/byte\s*\[\s*\]/.test(Z))return"byte[]";return(Z.replace(/<.*>/,"").trim().split(".").pop()??Z).trim()}function h7(Z){let $=J5(Z);if($==="byte[]")return"bytea";return x7[$]??$.toLowerCase()}function wZ(Z,$){return Z.match(new RegExp(`\\b${$}\\s*=\\s*"([^"]*)"`))?.[1]}function $5(Z,$){let Q=Z.match(new RegExp(`\\b${$}\\s*=\\s*(true|false)`));return Q?Q[1]==="true":void 0}function m7(Z){let $=[],Q=Z,J;while(J=Q.match(/^@[\w.]+(\([^)]*\))?\s*/))$.push(Q.slice(0,J[0].length).trim()),Q=Q.slice(J[0].length);return{annots:$,rest:Q.trim()}}function b7(Z){let $=[],Q=[];for(let J of Z.split(`
5
- `)){let V=J.trim();if(!V||V.startsWith("//")||V.startsWith("*")||V.startsWith("/*"))continue;let{annots:Y,rest:X}=m7(V);if(Q.push(...Y),!X)continue;let K=X,U="";while(K!==U)U=K,K=K.replace(/^(?:public|private|protected|static|final|transient|volatile)\s+/,"");let W=!K.includes("(")?K.match(/^([\w.$]+(?:<[^>]*>)?(?:\s*\[\s*\])?)\s+(\w+)\s*[;=]/):null;if(W)$.push({annots:Q,type:W[1],name:W[2]});Q=[]}return $}function p7(Z){let $=[],Q=/\bclass\s+(\w+)/g,J;while(J=Q.exec(Z))$.push({name:J[1],at:J.index});let V=[];for(let Y=0;Y<$.length;Y++){let X=Z.slice(Y===0?0:$[Y-1].at,$[Y].at);if(!/@Entity\b/.test(X))continue;let K=X.match(/@Table\s*\([^)]*\)/)?.[0]??"",U=wZ(K,"name")??$[Y].name,W=Z.slice($[Y].at,$[Y+1]?.at??Z.length),M=b7(W),C=M.find((O)=>O.annots.some((j)=>/@Id\b/.test(j))),L=C?wZ(C.annots.find((O)=>/@Column\b/.test(O))??"","name")??C.name:"id";V.push({className:$[Y].name,tableName:U,idColumn:L,fields:M})}return V}function c7(Z){let $=Z.filter((K)=>K.path.endsWith(".java")&&/@Entity\b/.test(K.content));if(!$.length)return{tables:[],relations:[]};let Q=$.flatMap((K)=>p7(K.content));if(!Q.length)return{tables:[],relations:[]};let J=new Map(Q.map((K)=>[K.className,K.tableName])),V=new Map(Q.map((K)=>[K.className,K.idColumn])),Y=[],X=[];for(let K of Q){let U=[];for(let W of K.fields){let M=W.annots.join(" ");if(/@Transient\b/.test(M))continue;let C=J5(W.type);if(/@ManyToOne\b|@OneToOne\b|@OneToMany\b|@ManyToMany\b/.test(M)||J.has(C)){let q=W.annots.find((z)=>/@JoinColumn\b/.test(z)),G=q?wZ(q,"name"):void 0;if(G){U.push({name:G,type:"bigint",isFk:!0,nullable:$5(M,"nullable")??!0});let z=J.get(C);if(z)X.push({fromTable:K.tableName,fromColumn:G,toTable:z,toColumn:V.get(C)??"id"})}continue}if(g7.test(C))continue;let j=W.annots.find((q)=>/@Column\b/.test(q))??"",N=wZ(j,"name")??W.name,B=W.annots.some((q)=>/@Id\b/.test(q)),D=$5(j,"nullable");U.push({name:N,type:h7(W.type),...B?{isPk:!0}:{},...D!==void 0?{nullable:D}:{}})}Y.push({name:K.tableName,columns:U})}return{tables:Y,relations:X}}function V5(Z){let $=f7(Z);if($.tables.length)return $;let Q=T7(Z);if(Q.tables.length)return Q;let J=k7(Z);if(J.tables.length)return J;return c7(Z)}var d7=["GET","POST","PUT","PATCH","DELETE"];function l7(Z){let $=Z.match(/(?:^|\/)app\/(.+)\/route\.(?:ts|tsx|js|jsx|mjs)$/);if(!$)return null;let Q=$[1].split("/").filter((J)=>!(J.startsWith("(")&&J.endsWith(")"))).map((J)=>{let V=J.match(/^\[{1,2}(?:\.\.\.)?([^\]]+)\]{1,2}$/);return V?`{${V[1]}}`:J});if(Q[0]!=="api")return null;return`/${Q.join("/")}`}function K5(Z){let $=[];for(let Q of Z){let J=l7(Q.path);if(!J)continue;for(let V of d7)if(new RegExp(`export\\s+(?:async\\s+)?(?:function|const)\\s+${V}\\b`).test(Q.content))$.push({method:V,path:J,uses:[],file:Q.path})}return $.sort((Q,J)=>`${Q.path} ${Q.method}`.localeCompare(`${J.path} ${J.method}`))}var n7=/(^|\/)app\/.*\/route\.(ts|tsx|js|jsx|mjs)$/,r7=/\.(ts|py)$/,o7=/(schema|model)/i,i7=/(\.(test|spec)\.[jt]sx?$)|(^|\/)(tests?|__tests__|__mocks__)\/|(^|\/)test_[^/]+\.py$|_test\.py$/;function Z4(Z){if(i7.test(Z))return!1;if(Z.endsWith(".prisma"))return!0;if(n7.test(Z))return!0;if(Z.endsWith(".java"))return!0;return r7.test(Z)&&o7.test(Z)}function Y5(Z,$=300){return Z.filter(Z4).slice(0,$)}import{z as l}from"zod";import{and as P5,eq as CZ,inArray as P8,notInArray as I8}from"drizzle-orm";import{z as A}from"zod";import{and as D8,eq as fZ,inArray as J4,notInArray as z8,or as _8,sql as F8}from"drizzle-orm";var X5=300,G5=50;function M5(Z){for(let $=0;$<Z.length;$++)for(let Q=$+1;Q<Z.length;Q++){let J=Z[$],V=Z[Q];if(J.x<V.x+X5&&J.x+X5>V.x&&J.y<V.y+G5&&J.y+G5>V.y)return!0}return!1}import{eq as s7}from"drizzle-orm";var U5=(Z)=>Z.replace(/\{[^}]*\}/g,"{}");function a7(Z,$){if(Z.method.toUpperCase()!==$.method.toUpperCase())return!1;let Q=U5(Z.path),J=U5($.path);return J===Q||J.endsWith(Q)}async function j5(Z=b){let[$,Q]=await Promise.all([Z.query.endpoint.findMany({where:(V,{ne:Y})=>Y(V.source,"INTROSPECTION")}),Z.query.endpoint.findMany({where:(V,{eq:Y})=>Y(V.source,"INTROSPECTION")})]),J={collapsed:0,mappings:[]};for(let V of $){let Y=Q.find((X)=>a7(V,X));if(!Y)continue;await Z.delete(E).where(s7(E.id,V.id)),J.collapsed++,J.mappings.push({planned:`${V.method} ${V.path}`,code:`${Y.method} ${Y.path}`})}return J}import{and as H5,inArray as t7,isNull as W5,ne as C5,or as e7}from"drizzle-orm";var Z8=new Set(["DONE","CANCELLED","DEPRIORITIZED"]);async function $8(Z){let $=await Z.query.node.findMany({where:(J,{and:V,eq:Y,isNotNull:X})=>V(Y(J.view,"ROADMAP"),X(J.planId)),columns:{planId:!0,status:!0}}),Q=new Map;for(let J of $){let V=J.planId;Q.set(V,(Q.get(V)??!0)&&Z8.has(J.status))}return[...Q.entries()].filter(([,J])=>J).map(([J])=>J)}async function N5(Z=b){let $=await $8(Z),Q=(Y)=>$.length?e7(W5(Y.planId),t7(Y.planId,$)):W5(Y.planId),J=await Z.delete(P).where(H5(C5(P.source,"INTROSPECTION"),Q(P))).returning({id:P.id}),V=await Z.delete(E).where(H5(C5(E.source,"INTROSPECTION"),Q(E))).returning({id:E.id});return{tables:J.length,endpoints:V.length}}var Q8=(Z)=>Z&&Number.isFinite(Z)&&Z>0?Math.min(3.2,Math.max(0.7,Z)):1.8;function J8(Z,$){let Q=Q8($.viewportAspect)*($.aspectSlack??1),J=Z.reduce((V,Y)=>V+(Y.w+$.gapX)*(Y.h+$.gapY),0);return Math.max($.minBandW,Math.round(Math.sqrt(J*Q)))}function L5(Z,$){let Q=J8(Z,$),J=new Map,V=0,Y=0,X=0;for(let K of Z){if(V>0&&V+K.w>Q)Y+=X+$.gapY,V=0,X=0;J.set(K.id,{x:V,y:Y}),X=Math.max(X,K.h),V+=K.w+$.gapX}return J}var QZ=320,$4=30,V8=36,K8=30,Y8=16;function JZ(Z){return V8+Math.max(0,Z)*K8+Y8}var GZ=60,X8=300,TZ=10,G8=84,yZ=72,M8=3*QZ,U8=1.7;var uZ=(Z)=>(Z??"").trim()||"\u2014";function j8(Z,$,Q){let J=new Map;for(let Y of Z.uses){if(!$.has(Y.tableId))continue;J.set(Y.tableId,(J.get(Y.tableId)??0)+1)}let V=null;for(let[Y,X]of J){if(V===null){V=Y;continue}let K=J.get(V);if(X>K){V=Y;continue}if(X<K)continue;let U=Q?.get(Y)??0,W=Q?.get(V)??0;if(U<W)V=Y;else if(U===W&&$.get(Y).localeCompare($.get(V))<0)V=Y}return V}function Q4(Z,$){let Q=new Map(Z.map((V)=>[V.id,V.name])),J=new Map;for(let V of $)for(let Y of V.uses){if(!Q.has(Y.tableId))continue;J.set(Y.tableId,(J.get(Y.tableId)??0)+1)}return new Map($.map((V)=>[V.id,j8(V,Q,J)]))}var H8=(Z,$)=>Z.path.localeCompare($.path)||Z.method.localeCompare($.method)||Z.id.localeCompare($.id);function B5(Z,$,Q={}){let J=Q4(Z,$),V=new Map,Y=[];for(let N of[...$].sort(H8)){let B=J.get(N.id)??null;if(B){let D=V.get(B);if(D)D.push(N);else V.set(B,[N])}else Y.push(N)}let X=(N)=>{let B=V.get(N.id)?.length??0;return JZ(N.columnCount)+(B?TZ+B*GZ:0)+$4},K=Array.from(new Set(Z.map((N)=>uZ(N.domain)))),U=K.filter((N)=>N!=="\u2014").sort(),W=K.includes("\u2014")?[...U,"\u2014"]:U,M=[];for(let N of W){let B=Z.filter((_)=>uZ(_.domain)===N).sort((_,R)=>_.name.localeCompare(R.name)),D=B.reduce((_,R)=>_+X(R),0),q=Math.max(1,Math.min(12,B.length,Math.round(Math.sqrt(D/QZ)))),G=Array(q).fill(0),z=new Map;for(let _ of B){let R=0;for(let w=1;w<q;w++)if(G[w]<G[R])R=w;z.set(_.id,{x:R*QZ,y:G[R]}),G[R]+=X(_)}M.push({d:N,w:q*QZ,h:Math.max(...G,0),tableLocal:z})}let C=L5(M.map((N)=>({id:N.d,w:N.w,h:N.h})),{gapX:G8,gapY:yZ,viewportAspect:Q.viewportAspect,minBandW:M8,aspectSlack:U8}),L=new Map,O=new Map,j=0;for(let N of M){let B=C.get(N.d),D=Z.filter((q)=>N.tableLocal.has(q.id));for(let q of D){let G=N.tableLocal.get(q.id),z=B.x+G.x,_=B.y+G.y;L.set(q.id,{x:z,y:_}),(V.get(q.id)??[]).forEach((w,T)=>{O.set(w.id,{x:z,y:_+JZ(q.columnCount)+TZ+T*GZ})})}j=Math.max(j,B.y+N.h)}if(Y.length){let N=j+yZ,B=Math.max(1,Math.min(4,Math.ceil(Math.sqrt(Y.length/2))));Y.forEach((D,q)=>{O.set(D.id,{x:q%B*X8,y:N+Math.floor(q/B)*GZ})})}return{tables:L,endpoints:O}}function q5(Z,$,Q){let J=Q4($,Q),V=new Map;for(let O of Q){let j=J.get(O.id);if(j)V.set(j,(V.get(j)??0)+1)}let Y=(O)=>{let j=V.get(O.id)??0;return O.y+JZ(O.columnCount)+(j?TZ+j*GZ:0)},X=uZ(Z.domain),K=$.filter((O)=>uZ(O.domain)===X);if(!K.length){let O=$.length?Math.max(...$.map(Y),...Q.map((j)=>j.y+GZ)):0;return{x:0,y:$.length||Q.length?O+yZ:0}}let U=Math.min(...K.map((O)=>O.x)),W=K.map((O)=>Math.max(0,Math.round((O.x-U)/QZ))),M=Math.min(12,Math.max(...W)+1),C=Array(M).fill(Math.min(...K.map((O)=>O.y)));K.forEach((O,j)=>{let N=Math.min(W[j],M-1);C[N]=Math.max(C[N],Y(O)+$4)});let L=0;for(let O=1;O<M;O++)if(C[O]<C[L])L=O;return{x:U+L*QZ,y:C[L]}}function O5(Z,$,Q){let J=Q4($,[...Q,Z]),V=J.get(Z.id),Y=V?$.find((K)=>K.id===V):void 0;if(Y){let K=Q.filter((M)=>J.get(M.id)===Y.id),U=Y.y+JZ(Y.columnCount)+TZ,W=K.length?Math.max(...K.map((M)=>M.y))+GZ:U;return{x:Y.x,y:W}}let X=[...$.map((K)=>K.y+JZ(K.columnCount)),...Q.map((K)=>K.y+GZ)];return{x:0,y:X.length?Math.max(...X)+yZ:0}}function D5(Z){let $=QZ-20;for(let Q=0;Q<Z.length;Q++)for(let J=Q+1;J<Z.length;J++){let V=Z[Q],Y=Z[J],X=JZ(V.columnCount),K=JZ(Y.columnCount);if(V.x<Y.x+$&&V.x+$>Y.x&&V.y<Y.y+K&&V.y+X>Y.y)return!0}return!1}import{eq as _5}from"drizzle-orm";z5();async function F5(Z=b,$){let[Q,J]=await Promise.all([Z.query.dbTable.findMany({with:{columns:{columns:{id:!0}}},orderBy:(X,{asc:K})=>K(X.name)}),Z.query.endpoint.findMany({with:{tables:{columns:{tableId:!0}}}})]),V=B5(Q.map((X)=>({id:X.id,name:X.name,domain:X.domain,columnCount:X.columns.length})),J.map((X)=>({id:X.id,method:X.method,path:X.path,uses:X.tables.map((K)=>({tableId:K.tableId}))})),{viewportAspect:$}),Y=0;for(let X of Q){let K=V.tables.get(X.id);if(!K||Math.round(K.x)===Math.round(X.x)&&Math.round(K.y)===Math.round(X.y))continue;await Z.update(P).set({x:K.x,y:K.y}).where(_5(P.id,X.id)),Y++}for(let X of J){let K=V.endpoints.get(X.id);if(!K||Math.round(K.x)===Math.round(X.x)&&Math.round(K.y)===Math.round(X.y))continue;await Z.update(E).set({x:K.x,y:K.y}).where(_5(E.id,X.id)),Y++}return Y}var A8=A.object({tables:A.array(A.object({name:A.string().trim().min(1),domain:A.string().nullish(),description:A.string().nullish(),columns:A.array(A.object({name:A.string().trim().min(1),type:A.string().trim().min(1),isPk:A.boolean().optional(),isFk:A.boolean().optional(),nullable:A.boolean().optional(),note:A.string().nullish()})).default([])})).default([]),relations:A.array(A.object({fromTable:A.string(),fromColumn:A.string(),toTable:A.string(),toColumn:A.string(),label:A.string().nullish()})).default([]),endpoints:A.array(A.object({method:A.string().trim().min(1),path:A.string().trim().min(1),domain:A.string().nullish(),description:A.string().nullish(),uses:A.array(A.object({table:A.string(),access:A.string().default("read")})).default([])})).default([])});async function xZ(Z=b){let[$]=await Z.insert(a).values({id:"singleton",version:1}).onConflictDoUpdate({target:a.id,set:{version:F8`${a.version} + 1`}}).returning();return $.version}async function A5(Z,$=b,Q={}){let J=A8.parse(Z),V=J.tables.length>0,Y=J.endpoints.length>0,X=J.tables.map((G)=>G.name);if(V)await $.delete(P).where(X.length?D8(fZ(P.source,"INTROSPECTION"),z8(P.name,X)):fZ(P.source,"INTROSPECTION"));let K=await $.query.dbTable.findMany({columns:{id:!0,name:!0,domain:!0,x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),U=await $.query.endpoint.findMany({columns:{id:!0,method:!0,path:!0,x:!0,y:!0},with:{tables:{columns:{tableId:!0}}}}),W=new Map(K.map((G)=>[G.name,G])),M=K.map((G)=>({id:G.id,name:G.name,domain:G.domain,columnCount:G.columns.length,x:G.x,y:G.y})),C=U.map((G)=>({id:G.id,method:G.method,path:G.path,uses:G.tables.map((z)=>({tableId:z.tableId})),x:G.x,y:G.y})),L=new Map;for(let G of J.tables){if(W.has(G.name))continue;let z=q5({domain:G.domain??null,columnCount:G.columns.length},M,C);L.set(G.name,z),M.push({id:`new:${G.name}`,name:G.name,domain:G.domain??null,columnCount:G.columns.length,...z})}let O=new Map;for(let G of J.tables){let z=W.get(G.name),_=L.get(G.name),R=z?.x??_?.x??0,w=z?.y??_?.y??0,[T]=await $.insert(P).values({name:G.name,domain:G.domain??null,description:G.description??null,source:"INTROSPECTION",x:R,y:w}).onConflictDoUpdate({target:P.name,set:{...G.domain!=null?{domain:G.domain}:{},...G.description!=null?{description:G.description}:{},source:"INTROSPECTION"}}).returning();if(O.set(G.name,T.id),await $.delete(e).where(fZ(e.tableId,T.id)),G.columns.length)await $.insert(e).values(G.columns.map((x,I)=>({tableId:T.id,name:x.name,type:x.type,isPk:x.isPk??!1,isFk:x.isFk??!1,nullable:x.nullable??!0,note:x.note??null,ord:I})))}let j=[...O.values()];if(j.length)await $.delete(d).where(_8(J4(d.fromTableId,j),J4(d.toTableId,j)));for(let G of J.relations){let z=O.get(G.fromTable),_=O.get(G.toTable);if(!z||!_)continue;await $.insert(d).values({fromTableId:z,toTableId:_,fromColumn:G.fromColumn,toColumn:G.toColumn,label:G.label??`${G.fromColumn} \u2192 ${G.toTable}.${G.toColumn}`})}let N=new Set(J.endpoints.map((G)=>`${G.method} ${G.path}`));if(Y){let z=(await $.query.endpoint.findMany({where:(_,{eq:R})=>R(_.source,"INTROSPECTION")})).filter((_)=>!N.has(`${_.method} ${_.path}`)).map((_)=>_.id);if(z.length)await $.delete(E).where(J4(E.id,z))}for(let G of M)if(G.id.startsWith("new:"))G.id=O.get(G.name)??G.id;for(let G of J.endpoints){let z=await $.query.endpoint.findFirst({where:(T,{and:x,eq:I})=>x(I(T.method,G.method),I(T.path,G.path))}),_,R;if(z)_=z.x,R=z.y;else{let T={id:`new:${G.method} ${G.path}`,method:G.method,path:G.path,uses:G.uses.map((I)=>({tableId:O.get(I.table)??""})).filter((I)=>I.tableId)},x=O5(T,M,C);_=x.x,R=x.y,C.push({...T,x:_,y:R})}let[w]=await $.insert(E).values({method:G.method,path:G.path,domain:G.domain??null,description:G.description??null,source:"INTROSPECTION",x:_,y:R}).onConflictDoUpdate({target:[E.method,E.path],set:{...G.domain!=null?{domain:G.domain}:{},...G.description!=null?{description:G.description}:{},source:"INTROSPECTION"}}).returning();if(!Q.partial||G.uses.length>0)await $.delete(i).where(fZ(i.endpointId,w.id));for(let T of G.uses){let x=O.get(T.table)??(await $.query.dbTable.findFirst({where:(I,{eq:UZ})=>UZ(I.name,T.table)}))?.id;if(!x)continue;await $.insert(i).values({endpointId:w.id,tableId:x,access:T.access})}}await j5($),await N5($);let B=await $.query.dbTable.findMany({where:(G,{eq:z})=>z(G.source,"INTROSPECTION"),columns:{x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),D=await $.select({x:E.x,y:E.y}).from(E);if(D5(B.map((G)=>({x:G.x,y:G.y,columnCount:G.columns.length})))||M5(D))await F5($);let q=await xZ($);return{tables:J.tables.length,relations:J.relations.length,endpoints:J.endpoints.length,version:q}}var I5=l.object({files:l.array(l.object({path:l.string().trim().min(1),root:l.string().nullish(),lang:l.string().nullish(),mtimeMs:l.number().nullish(),size:l.number().nullish()})).default([]),edges:l.array(l.object({from:l.string().trim().min(1),to:l.string().trim().min(1)})).default([])});function R5(Z,$){let Q=new Map;for(let L of Z)Q.set(L,[]);for(let L of $)Q.get(L.from)?.push(L.to);let J=new Map,V=new Map,Y=new Set,X=[],K=new Map,U=[],W=0,M=0;for(let L of Z){if(J.has(L))continue;let O=[{v:L,iter:0}];J.set(L,W),V.set(L,W),W++,X.push(L),Y.add(L);while(O.length){let j=O[O.length-1],N=Q.get(j.v)??[];if(j.iter<N.length){let B=N[j.iter++];if(!J.has(B))J.set(B,W),V.set(B,W),W++,X.push(B),Y.add(B),O.push({v:B,iter:0});else if(Y.has(B))V.set(j.v,Math.min(V.get(j.v),J.get(B)))}else{if(V.get(j.v)===J.get(j.v)){let D=0,q;do q=X.pop(),Y.delete(q),K.set(q,M),D++;while(q!==j.v);U.push(D),M++}O.pop();let B=O[O.length-1];if(B)V.set(B.v,Math.min(V.get(B.v),V.get(j.v)))}}}let C=new Set;for(let L of $){let O=K.get(L.from);if(O!==void 0&&O===K.get(L.to)&&U[O]>1)C.add(`${L.from}|${L.to}`)}return C}async function E5(Z,$=b){let Q=I5.parse(Z),J=Q.files.map((C)=>C.path),V=new Set(J),Y=Q.edges.filter((C)=>V.has(C.from)&&V.has(C.to)&&C.from!==C.to),X=R5(J,Y),K=new Map,U=new Map;for(let C of Y)U.set(C.from,(U.get(C.from)??0)+1),K.set(C.to,(K.get(C.to)??0)+1);await $.delete(y).where(I8(y.path,J));for(let C of Q.files){let L={root:C.root??null,lang:C.lang??null,mtimeMs:C.mtimeMs??null,size:C.size??null,inDegree:K.get(C.path)??0,outDegree:U.get(C.path)??0};await $.insert(y).values({path:C.path,...L}).onConflictDoUpdate({target:y.path,set:L})}await $.delete(f);let W=0;if(Y.length)await $.insert(f).values(Y.map((C)=>{let L=X.has(`${C.from}|${C.to}`);if(L)W++;return{fromPath:C.from,toPath:C.to,circular:L}}));let M=await xZ($);return await $.update(a).set({codeGraphSyncedAt:new Date}).where(CZ(a.id,"singleton")),{files:Q.files.length,edges:Y.length,circular:W,version:M}}var R8=(Z,$)=>`${Z}\x00${$}`;function V4(Z){let $=I5.parse(Z),Q=$.files.map((M)=>M.path),J=new Set(Q),V=$.edges.filter((M)=>J.has(M.from)&&J.has(M.to)&&M.from!==M.to),Y=R5(Q,V),X=new Map,K=new Map;for(let M of V)K.set(M.from,(K.get(M.from)??0)+1),X.set(M.to,(X.get(M.to)??0)+1);let U=new Map;for(let M of $.files)U.set(M.path,{root:M.root??null,lang:M.lang??null,mtimeMs:M.mtimeMs??null,size:M.size??null,inDegree:X.get(M.path)??0,outDegree:K.get(M.path)??0});let W=new Map;for(let M of V)W.set(R8(M.from,M.to),{from:M.from,to:M.to,circular:Y.has(`${M.from}|${M.to}`)});return{files:U,edges:W}}var E8=(Z,$)=>Z.root===$.root&&Z.lang===$.lang&&Z.mtimeMs===$.mtimeMs&&Z.size===$.size&&Z.inDegree===$.inDegree&&Z.outDegree===$.outDegree;async function S5(Z,$,Q=b){for(let[K,U]of $.files){let W=Z.files.get(K);if(W&&E8(W,U))continue;let M={root:U.root,lang:U.lang,mtimeMs:U.mtimeMs,size:U.size,inDegree:U.inDegree,outDegree:U.outDegree};await Q.insert(y).values({path:K,...M}).onConflictDoUpdate({target:y.path,set:M})}let J=[...Z.files.keys()].filter((K)=>!$.files.has(K));if(J.length)await Q.delete(y).where(P8(y.path,J));for(let[K,U]of Z.edges)if(!$.edges.has(K))await Q.delete(f).where(P5(CZ(f.fromPath,U.from),CZ(f.toPath,U.to)));let V=[];for(let[K,U]of $.edges){let W=Z.edges.get(K);if(!W)V.push({fromPath:U.from,toPath:U.to,circular:U.circular});else if(W.circular!==U.circular)await Q.update(f).set({circular:U.circular}).where(P5(CZ(f.fromPath,U.from),CZ(f.toPath,U.to)))}if(V.length)await Q.insert(f).values(V);let Y=await xZ(Q);await Q.update(a).set({codeGraphSyncedAt:new Date}).where(CZ(a.id,"singleton"));let X=0;for(let K of $.edges.values())if(K.circular)X++;return{files:$.files.size,edges:$.edges.size,circular:X,version:Y}}var T8=/[/\\](node_modules|\.git|\.next|dist|build|__pycache__|target|\.venv|venv|\.beacon|\.playwright-mcp|generated|coverage)[/\\]/;function y8(Z){try{let $=DZ(Z,"beacon.config.json");if(k5($)){let Q=JSON.parse(S8($,"utf8"));if(Array.isArray(Q.roots)&&Q.roots.length)return Q.roots.map((J)=>w8(Z,J))}}catch{}return[Z]}function w5(Z){let $=y8(Z.path),Q=nZ(Z.id),J=IZ(VZ(Z.id)),V=e4($,Z.path);async function Y(){let N=Y5(V.snapshot().files.map((z)=>z.path));for(let z of $)for(let _ of["prisma/schema.prisma","schema.prisma"]){let R=DZ(z,_);if(k5(R))N.push(X(R))}let B=[];for(let z of N)try{B.push({path:z,content:await v5(DZ(Z.path,z),"utf8")})}catch{}let D=V5(B),q=K5(B);if(!D.tables.length&&!q.length)return;if(q.length&&D.tableVars&&Object.keys(D.tableVars).length){let _=V.snapshot().edges,R=new Set(q.map((I)=>I.file)),w=new Map;for(let I of _){let UZ=w.get(I.from)??[];UZ.push(I.to),w.set(I.from,UZ)}for(let I=0;I<2;I++)for(let UZ of[...R])for(let m5 of w.get(UZ)??[])R.add(m5);let T=new Map;for(let I of[...R].slice(0,600))try{T.set(I,await v5(DZ(Z.path,I),"utf8"))}catch{}let x=Z5({routeFiles:[...new Set(q.map((I)=>I.file))],edges:_,content:(I)=>T.get(I)??null,tableVars:D.tableVars});for(let I of q)I.uses=x.get(I.file)??[]}let G=await A5({tables:D.tables,relations:D.relations,endpoints:q},J,{partial:!0});console.log(`[beacon-inline] schema synced (${Z.name}): ${G.tables} tables / ${G.endpoints} endpoints`)}function X(N){return k8(Z.path,N).split(/[\\/]/).join("/")}let K=null,U=!1,W=new Set,M=null,C=!1;async function L(){if(C){O();return}C=!0;try{if(await Q,U)K=null,U=!1;if(K===null){let q=await V.seed(),G=await E5(q,J);K=V4(q),console.log(`[beacon-inline] code-graph synced (${Z.name}): ${G.files} files / ${G.edges} imports${G.circular>0?` (${G.circular} circular)`:""}`),await Y();return}let N=[...W];W.clear();let B=N.some((q)=>Z4(X(q))),D=!1;for(let q of N)if(await V.applyChange(q))D=!0;if(D){let q=V4(V.snapshot()),G=await S5(K,q,J);K=q,console.log(`[beacon-inline] code-graph updated (${Z.name}): ${G.files} files / ${G.edges} imports${G.circular>0?` (${G.circular} circular)`:""}`)}if(B)await Y()}catch(N){console.error(`[beacon-inline] error (${Z.name}):`,N instanceof Error?N.message:N)}finally{C=!1}}function O(){if(M)clearTimeout(M);M=setTimeout(L,600)}let j=[];for(let N of $)try{let B=v8(N,{recursive:!0,persistent:!0},(D,q)=>{if(!q){U=!0,O();return}let G=String(q);if(T8.test(`/${G}`))return;W.add(DZ(N,G)),O()});B.on("error",(D)=>console.error(`[beacon-inline] watcher error (${Z.name}):`,D)),j.push(B)}catch(B){console.error(`[beacon-inline] live watch unavailable for ${N} (${Z.name}):`,B instanceof Error?B.message:B)}return console.log(`[beacon-inline] watching ${Z.name} (${$.join(", ")}) \u2014 initial extract\u2026`),L(),{async stop(){if(M)clearTimeout(M);for(let N of j)N.close()}}}var f8=1500;function x8(Z){let $=Z.limit??6,Q=Z.hardCap??12,J=Z.staggerMs??f8,V=new Map,Y=0,X=new Set;function K(B){let D=V.get(B);if(D)D.seq=++Y}function U(B){if(V.has(B.id))return K(B.id);if(!Z.exists(B.path))return;V.set(B.id,{handle:Z.start(B),seq:++Y})}function W(){let B=null,D=1/0;for(let[q,G]of V){if(X.has(q))continue;if(G.seq<D)D=G.seq,B=q}if(B)V.get(B).handle.stop(),V.delete(B)}function M(){let B=Z.list().filter((q)=>Z.exists(q.path)).slice(0,$);X=new Set(B.map((q)=>q.id)),B.filter((q)=>!V.has(q.id)).forEach((q,G)=>{if(G===0)U(q);else setTimeout(()=>X.has(q.id)&&U(q),G*J)});for(let[q,G]of[...V]){let z=Z.get(q);if(!z||!Z.exists(z.path))G.handle.stop(),V.delete(q)}}function C(B){if(V.has(B))return K(B);let D=Z.get(B);if(!D||!Z.exists(D.path))return;if(V.size>=Q)W();if(V.size>=Q)return;V.set(B,{handle:Z.start(D),seq:++Y})}async function L(B){let D=V.get(B);if(!D)return;V.delete(B),await D.handle.stop()}function O(B){return V.has(B)}function j(){return[...V.keys()]}async function N(){await Promise.all([...V.values()].map((B)=>B.handle.stop())),V.clear()}return{reconcile:M,ensureWatcher:C,stopWatcher:L,isWatching:O,activeIds:j,stopAll:N}}var g8=globalThis,h8=g8.__beaconWatcherManager??=x8({list:FZ,get:g,exists:u8,start:(Z)=>w5(Z)});async function T5(Z){await h8.stopWatcher(Z)}async function y5(Z){if(!g(Z))return{ok:!1,removed:!1,fallbackId:r(),error:"unknown workspace"};O4(Z),B4(Z),await T5(Z),R4(VZ(Z)),P4(Z);try{m8(n(Z),{recursive:!0,force:!0})}catch($){return{ok:!1,removed:!0,fallbackId:r(),error:$ instanceof Error?$.message:String($)}}return{ok:!0,removed:!0,fallbackId:r()}}var K4=process.argv.slice(3),x5=K4.includes("--yes")||K4.includes("-y"),MZ=K4.find((Z)=>!Z.startsWith("-")),u5=(Z)=>`\x1B[32m\u2713\x1B[0m ${Z}`,g5=(Z)=>`\x1B[2m${Z}\x1B[0m`,h5=(Z)=>`
3
+ var b5=Object.defineProperty;var p5=(Z)=>Z;function c5(Z,$){this[Z]=p5.bind(null,$)}var gZ=(Z,$)=>{for(var Q in $)b5(Z,Q,{get:$[Q],enumerable:!0,configurable:!0,set:c5.bind($,Q)})};var Y4=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var G4={};gZ(G4,{provisionDb:()=>$6});import{createClient as d5}from"@libsql/client";import{drizzle as l5}from"drizzle-orm/libsql";import{migrate as n5}from"drizzle-orm/libsql/migrator";import{readMigrationFiles as r5}from"drizzle-orm/migrator";import{dirname as hZ,join as o5}from"path";import{fileURLToPath as i5}from"url";async function zZ(Z,$){return(await Z.execute({sql:"SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?",args:[$]})).rows.length>0}async function e5(Z,$){let Q=await Z.execute(`PRAGMA table_info("${$}")`);return new Set(Q.rows.map((J)=>String(J.name)))}async function X4(Z){if(!await zZ(Z,"__drizzle_migrations"))return 0;let $=await Z.execute('SELECT count(*) AS n FROM "__drizzle_migrations"');return Number($.rows[0]?.n??0)}async function Z6(Z){for(let[$,Q]of Object.entries(t5)){if(!await zZ(Z,$))continue;let J=await e5(Z,$);for(let V of Q){if(!J.has(V))continue;await Z.execute(`UPDATE "${$}" SET "${V}" = CAST((julianday("${V}") - 2440587.5) * 86400000 AS INTEGER) WHERE typeof("${V}") = 'text'`)}}}async function $6(Z,$=a5){let Q=d5({url:Z});try{await Q.execute("PRAGMA journal_mode = WAL;"),await Q.execute("PRAGMA foreign_keys = ON;"),await Q.execute("PRAGMA busy_timeout = 5000;");let J=await zZ(Q,"__drizzle_migrations"),V=await zZ(Q,"Node"),Y=!1;if(V&&!J){let K=r5({migrationsFolder:$})[0];if(K)await Q.execute('CREATE TABLE IF NOT EXISTS "__drizzle_migrations" (id SERIAL PRIMARY KEY, hash text NOT NULL, created_at numeric)'),await Q.execute({sql:'INSERT INTO "__drizzle_migrations" ("hash", "created_at") VALUES (?, ?)',args:[K.hash,K.folderMillis]}),Y=!0}let X=await X4(Q);if(await n5(l5(Q),{migrationsFolder:$}),await X4(Q)>X)Y=!0;return await Z6(Q),{migrated:Y}}finally{Q.close()}}var s5,a5,t5;var M4=Y4(async()=>{s5=hZ(hZ(hZ(i5(import.meta.url)))),a5=process.env.BEACON_MIGRATIONS_DIR||o5(s5,"drizzle"),t5={Node:["createdAt","updatedAt"],Note:["createdAt","updatedAt"],DbTable:["createdAt","updatedAt"],Endpoint:["createdAt","updatedAt"],DraftTable:["createdAt"],SyncState:["codeGraphSyncedAt","updatedAt"],AppSetting:["updatedAt"],ProjectMeta:["updatedAt"],CodeFile:["updatedAt"]}});import{mkdirSync as W8,renameSync as C8,rmSync as N8,writeFileSync as L8}from"fs";import{dirname as B8}from"path";function q8(Z,$){W8(B8(Z),{recursive:!0});let Q=`${Z}.tmp`;try{L8(Q,$),C8(Q,Z)}catch(J){throw N8(Q,{force:!0}),J}}function O8(Z,$,Q=!1){q8(Z,JSON.stringify($,null,Q?2:void 0))}var z5=()=>{};import{AsyncLocalStorage as Q6}from"async_hooks";import{spawnSync as J6}from"child_process";import{createHash as V6}from"crypto";import{existsSync as j4,mkdirSync as NZ,readFileSync as bZ,writeFileSync as pZ}from"fs";import{homedir as H4}from"os";import{basename as K6,join as $Z,parse as Y6,resolve as U4}from"path";function t(){return process.env.BEACON_HOME||$Z(H4(),".beacon")}function cZ(){return $Z(t(),"workspaces.json")}function ZZ(Z){return V6("sha256").update(Z).digest("hex").slice(0,12)}function _Z(Z=process.cwd()){let $=J6("git",["rev-parse","--show-toplevel"],{cwd:Z,stdio:["ignore","pipe","ignore"]});if($.status===0){let Q=$.stdout?.toString().trim();if(Q)return Q}return Z}function W4(Z){let $=U4(Z);return $!==U4(H4())&&$!==Y6($).root}function C4(){return $Z(t(),"deleted.json")}function dZ(){try{let Z=JSON.parse(bZ(C4(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function N4(Z){NZ(t(),{recursive:!0}),pZ(C4(),JSON.stringify(Z,null,2))}function L4(Z){return dZ().includes(Z)}function B4(Z){let $=dZ();if(!$.includes(Z))N4([...$,Z])}function X6(Z){let $=dZ();if($.includes(Z))N4($.filter((Q)=>Q!==Z))}function n(Z){return $Z(t(),Z)}function VZ(Z){return`file:${$Z(n(Z),"db.sqlite")}`}function LZ(){try{let Z=JSON.parse(bZ(cZ(),"utf8"));return Array.isArray(Z)?Z:[]}catch{return[]}}function lZ(Z){NZ(t(),{recursive:!0}),pZ(cZ(),JSON.stringify(Z,null,2))}function FZ(){return LZ().sort((Z,$)=>$.lastOpenedAt.localeCompare(Z.lastOpenedAt))}function g(Z){return LZ().find(($)=>$.id===Z)??null}function q4(Z,$,Q=new Date().toISOString()){if(!W4(Z))throw Error(`beacon: refusing to register a non-repo path as a workspace: ${Z}`);let J=ZZ(Z);if(L4(J))throw Error(`beacon: workspace ${J} (${Z}) was deleted \u2014 run \`beacon\` or /beacon-init to re-add it`);let V=LZ(),Y=V.find((U)=>U.id===J),X={id:J,path:Z,name:$||Y?.name||K6(Z),lastOpenedAt:Q},K=[X,...V.filter((U)=>U.id!==J)];return NZ(n(J),{recursive:!0}),lZ(K),X}function V$(Z,$){return X6(ZZ(Z)),q4(Z,$)}function K$(Z,$=new Date().toISOString()){let Q=LZ(),J=Q.find((V)=>V.id===Z);if(!J)return;J.lastOpenedAt=$,lZ(Q)}function O4(Z){if(lZ(LZ().filter(($)=>$.id!==Z)),r()===Z)G6(FZ()[0]?.id??null)}function D4(){return $Z(t(),"active")}function r(){try{return bZ(D4(),"utf8").trim()||null}catch{return null}}function G6(Z){NZ(t(),{recursive:!0}),pZ(D4(),Z??"")}function M6(){let Z=r();return Z?g(Z):null}function Y$(){let Z=AZ()??r();return Z?g(Z):null}function X$(Z){return g(Z)?.path??null}function G$(){return j4(cZ())}var z4="beacon_ws";function _4(Z,$){let Q=Z.headers.get("cookie");if(!Q)return null;for(let J of Q.split(";")){let V=J.indexOf("=");if(V===-1)continue;if(J.slice(0,V).trim()===$)return decodeURIComponent(J.slice(V+1).trim())}return null}function M$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=_4(Z,z4);if(Q&&g(Q))return Q;return U6()}function U6(){let Z=FZ();return Z.length===1?Z[0].id:null}var F4="x-beacon-workspace-path";function U$(Z=process.cwd()){let $=_Z(Z);return{"x-beacon-workspace":ZZ($),[F4]:$}}async function j$(Z){let $=Z.headers.get("x-beacon-workspace");if($&&g($))return $;let Q=Z.headers.get(F4);if(Q&&W4(Q)&&!L4(ZZ(Q))&&(!$||ZZ(Q)===$)){let V=q4(Q);return await nZ(V.id),V.id}let J=_4(Z,z4);if(J&&g(J))return J;return null}var A4=new Q6;function j6(Z,$){return Z?A4.run(Z,$):$()}function AZ(){return A4.getStore()??null}var mZ=new Set;function P4(Z){mZ.delete($Z(n(Z),"db.sqlite"))}async function nZ(Z){let $=n(Z),Q=$Z($,"db.sqlite"),J=j4(Q);if(J&&mZ.has(Q))return{ok:!0,created:!1,migrated:!1};try{NZ($,{recursive:!0});let{provisionDb:V}=await M4().then(() => G4),Y=await V(VZ(Z));return mZ.add(Q),{ok:!0,created:!J,migrated:J&&Y.migrated}}catch(V){return{ok:!1,created:!1,migrated:!1,error:V instanceof Error?V.message:String(V)}}}import{existsSync as b8,readFileSync as p8}from"fs";import{resolve as f5}from"path";import{rmSync as m8}from"fs";import{drizzle as f6}from"drizzle-orm/libsql";import{createClient as x6}from"@libsql/client";var rZ={};gZ(rZ,{workspaceFlag:()=>q6,tag:()=>jZ,syncState:()=>a,projectMeta:()=>B6,planContract:()=>O6,note:()=>C6,nodeTags:()=>YZ,nodeFile:()=>BZ,node:()=>k,endpointTable:()=>i,endpoint:()=>E,edge:()=>KZ,draftTable:()=>c,draftRelation:()=>XZ,draftColumn:()=>OZ,dbTable:()=>P,dbRelation:()=>d,dbColumn:()=>e,codeFileEdge:()=>f,codeFile:()=>y,bugFlag:()=>qZ,boardAnnotation:()=>N6,appSetting:()=>L6});import{sqliteTable as v,index as S,foreignKey as H6,text as j,integer as F,real as m,uniqueIndex as o,primaryKey as W6}from"drizzle-orm/sqlite-core";import{createId as u}from"@paralleldrive/cuid2";var k=v("Node",{id:j().primaryKey().$defaultFn(()=>u()),view:j().notNull(),kind:j().default("FEATURE").notNull(),cluster:j(),layer:j(),title:j().notNull(),role:j(),plain:j(),status:j().default("PENDING").notNull(),priority:F().default(2).notNull(),progress:F().default(0).notNull(),x:m().default(0).notNull(),y:m().default(0).notNull(),sourceRef:j(),externalId:j(),source:j().default("MANUAL").notNull(),planId:j(),parentId:j(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date),externalUpdatedAt:F({mode:"timestamp_ms"}),externalSyncedAt:F({mode:"timestamp_ms"}),externalSnapshot:j(),assigneeName:j(),assigneeAvatarUrl:j(),externalMeta:j(),hiddenAt:F({mode:"timestamp_ms"})},(Z)=>[S("Node_cluster_idx").on(Z.cluster),S("Node_parentId_idx").on(Z.parentId),S("Node_view_idx").on(Z.view),H6(()=>({columns:[Z.parentId],foreignColumns:[Z.id],name:"Node_parentId_Node_id_fk"})).onUpdate("cascade").onDelete("cascade")]),BZ=v("NodeFile",{id:j().primaryKey().$defaultFn(()=>u()),nodeId:j().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),path:j().notNull()},(Z)=>[o("NodeFile_nodeId_path_key").on(Z.nodeId,Z.path),S("NodeFile_nodeId_idx").on(Z.nodeId)]),jZ=v("Tag",{id:j().primaryKey().$defaultFn(()=>u()),label:j().notNull(),color:j()},(Z)=>[o("Tag_label_key").on(Z.label)]),KZ=v("Edge",{id:j().primaryKey().$defaultFn(()=>u()),fromId:j().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),toId:j().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),kind:j().default("DEPENDS").notNull(),label:j(),sourceHandle:j(),targetHandle:j()},(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:j("A").notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),b:j("B").notNull().references(()=>jZ.id,{onDelete:"cascade",onUpdate:"cascade"})},(Z)=>[o("_NodeTags_AB_unique").on(Z.a,Z.b),S("_NodeTags_B_index").on(Z.b)]),C6=v("Note",{id:j().primaryKey().$defaultFn(()=>u()),title:j().default("Untitled").notNull(),body:j().default("").notNull(),ord:m().default(0).notNull(),pinned:F({mode:"boolean"}).default(!1).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("Note_updatedAt_idx").on(Z.updatedAt)]),N6=v("BoardAnnotation",{id:j().primaryKey().$defaultFn(()=>u()),targetKind:j().notNull(),targetId:j().notNull(),columnName:j(),body:j().default("").notNull(),x:m(),y:m(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("BoardAnnotation_target_idx").on(Z.targetId)]),qZ=v("BugFlag",{id:j().primaryKey().$defaultFn(()=>u()),nodeId:j().notNull().references(()=>k.id,{onDelete:"cascade",onUpdate:"cascade"}),by:j().notNull(),note:j().notNull(),resolvedAt:F({mode:"timestamp_ms"}),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[S("BugFlag_nodeId_idx").on(Z.nodeId)]),P=v("DbTable",{id:j().primaryKey().$defaultFn(()=>u()),name:j().notNull(),domain:j(),description:j(),source:j().default("MANUAL").notNull(),planId:j(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[S("DbTable_domain_idx").on(Z.domain),o("DbTable_name_key").on(Z.name)]),e=v("DbColumn",{id:j().primaryKey().$defaultFn(()=>u()),tableId:j().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),name:j().notNull(),type:j().notNull(),isPk:F({mode:"boolean"}).default(!1).notNull(),isFk:F({mode:"boolean"}).default(!1).notNull(),nullable:F({mode:"boolean"}).default(!0).notNull(),note:j(),ord:F().default(0).notNull()},(Z)=>[o("DbColumn_tableId_name_key").on(Z.tableId,Z.name),S("DbColumn_tableId_idx").on(Z.tableId)]),d=v("DbRelation",{id:j().primaryKey().$defaultFn(()=>u()),fromTableId:j().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:j().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:j().notNull(),toColumn:j().notNull(),label:j()},(Z)=>[S("DbRelation_toTableId_idx").on(Z.toTableId),S("DbRelation_fromTableId_idx").on(Z.fromTableId)]),E=v("Endpoint",{id:j().primaryKey().$defaultFn(()=>u()),method:j().notNull(),path:j().notNull(),domain:j(),description:j(),source:j().default("MANUAL").notNull(),planId:j(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("Endpoint_method_path_key").on(Z.method,Z.path),S("Endpoint_domain_idx").on(Z.domain)]),i=v("EndpointTable",{id:j().primaryKey().$defaultFn(()=>u()),endpointId:j().notNull().references(()=>E.id,{onDelete:"cascade",onUpdate:"cascade"}),tableId:j().notNull().references(()=>P.id,{onDelete:"cascade",onUpdate:"cascade"}),access:j().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:j().primaryKey().$defaultFn(()=>u()),name:j().notNull(),domain:j(),description:j(),x:m().default(0).notNull(),y:m().default(0).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},(Z)=>[o("DraftTable_name_key").on(Z.name)]),OZ=v("DraftColumn",{id:j().primaryKey().$defaultFn(()=>u()),tableId:j().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),name:j().notNull(),type:j().notNull(),isPk:F({mode:"boolean"}).default(!1).notNull(),isFk:F({mode:"boolean"}).default(!1).notNull(),nullable:F({mode:"boolean"}).default(!0).notNull(),note:j(),ord:F().default(0).notNull()},(Z)=>[S("DraftColumn_tableId_idx").on(Z.tableId)]),XZ=v("DraftRelation",{id:j().primaryKey().$defaultFn(()=>u()),fromTableId:j().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:j().notNull().references(()=>c.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:j().notNull(),toColumn:j().notNull(),label:j()},(Z)=>[S("DraftRelation_toTableId_idx").on(Z.toTableId),S("DraftRelation_fromTableId_idx").on(Z.fromTableId)]),y=v("CodeFile",{path:j().primaryKey(),root:j(),lang:j(),x:m().default(0).notNull(),y:m().default(0).notNull(),mtimeMs:m(),size:F(),inDegree:F().default(0).notNull(),outDegree:F().default(0).notNull(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),f=v("CodeFileEdge",{fromPath:j().notNull().references(()=>y.path,{onDelete:"cascade",onUpdate:"cascade"}),toPath:j().notNull().references(()=>y.path,{onDelete:"cascade",onUpdate:"cascade"}),circular:F({mode:"boolean"}).default(!1).notNull()},(Z)=>[S("CodeFileEdge_circular_idx").on(Z.circular),S("CodeFileEdge_toPath_idx").on(Z.toPath),S("CodeFileEdge_fromPath_idx").on(Z.fromPath),W6({columns:[Z.fromPath,Z.toPath],name:"CodeFileEdge_fromPath_toPath_pk"})]),a=v("SyncState",{id:j().primaryKey().default("singleton"),version:F().default(0).notNull(),codeGraphSyncedAt:F({mode:"timestamp_ms"}),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),L6=v("AppSetting",{id:j().primaryKey().default("singleton"),editor:j().default("auto").notNull(),currentFeatureId:j(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),B6=v("ProjectMeta",{id:j().primaryKey().default("singleton"),overview:j(),conventions:j().default("[]").notNull(),hasFrontend:F({mode:"boolean"}),classificationRoots:j().default("[]").notNull(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),q6=v("WorkspaceFlag",{id:j().primaryKey().$defaultFn(()=>u()),key:j().notNull(),enabled:F({mode:"boolean"}).default(!1).notNull(),config:j(),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("WorkspaceFlag_key_key").on(Z.key)]),O6=v("PlanContract",{id:j().primaryKey().$defaultFn(()=>u()),planId:j().notNull(),declaredFiles:j().default("[]").notNull(),authorizedExtras:j().default("[]").notNull(),active:F({mode:"boolean"}).default(!1).notNull(),createdAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:F({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},(Z)=>[o("PlanContract_planId_key").on(Z.planId),S("PlanContract_active_idx").on(Z.active)]);var oZ={};gZ(oZ,{tagRelations:()=>F6,nodeTagsRelations:()=>A6,nodeRelations:()=>D6,nodeFileRelations:()=>z6,endpointTableRelations:()=>v6,endpointRelations:()=>S6,edgeRelations:()=>P6,draftTableRelations:()=>k6,draftRelationRelations:()=>T6,draftColumnRelations:()=>w6,dbTableRelations:()=>I6,dbRelationRelations:()=>E6,dbColumnRelations:()=>R6,codeFileRelations:()=>y6,codeFileEdgeRelations:()=>u6,bugFlagRelations:()=>_6});import{relations as h}from"drizzle-orm";var D6=h(k,({one:Z,many:$})=>({files:$(BZ),bugFlags:$(qZ),nodeTags:$(YZ),edgesOut:$(KZ,{relationName:"EdgeFrom"}),edgesIn:$(KZ,{relationName:"EdgeTo"}),parent:Z(k,{fields:[k.parentId],references:[k.id],relationName:"NodeTree"}),children:$(k,{relationName:"NodeTree"})})),z6=h(BZ,({one:Z})=>({node:Z(k,{fields:[BZ.nodeId],references:[k.id]})})),_6=h(qZ,({one:Z})=>({node:Z(k,{fields:[qZ.nodeId],references:[k.id]})})),F6=h(jZ,({many:Z})=>({nodeTags:Z(YZ)})),A6=h(YZ,({one:Z})=>({node:Z(k,{fields:[YZ.a],references:[k.id]}),tag:Z(jZ,{fields:[YZ.b],references:[jZ.id]})})),P6=h(KZ,({one:Z})=>({from:Z(k,{fields:[KZ.fromId],references:[k.id],relationName:"EdgeFrom"}),to:Z(k,{fields:[KZ.toId],references:[k.id],relationName:"EdgeTo"})})),I6=h(P,({many:Z})=>({columns:Z(e),fksOut:Z(d,{relationName:"FkFrom"}),fksIn:Z(d,{relationName:"FkTo"}),usages:Z(i)})),R6=h(e,({one:Z})=>({table:Z(P,{fields:[e.tableId],references:[P.id]})})),E6=h(d,({one:Z})=>({fromTable:Z(P,{fields:[d.fromTableId],references:[P.id],relationName:"FkFrom"}),toTable:Z(P,{fields:[d.toTableId],references:[P.id],relationName:"FkTo"})})),S6=h(E,({many:Z})=>({tables:Z(i)})),v6=h(i,({one:Z})=>({endpoint:Z(E,{fields:[i.endpointId],references:[E.id]}),table:Z(P,{fields:[i.tableId],references:[P.id]})})),k6=h(c,({many:Z})=>({columns:Z(OZ),fksOut:Z(XZ,{relationName:"DraftFkFrom"}),fksIn:Z(XZ,{relationName:"DraftFkTo"})})),w6=h(OZ,({one:Z})=>({table:Z(c,{fields:[OZ.tableId],references:[c.id]})})),T6=h(XZ,({one:Z})=>({fromTable:Z(c,{fields:[XZ.fromTableId],references:[c.id],relationName:"DraftFkFrom"}),toTable:Z(c,{fields:[XZ.toTableId],references:[c.id],relationName:"DraftFkTo"})})),y6=h(y,({many:Z})=>({edgesOut:Z(f,{relationName:"CFEFrom"}),edgesIn:Z(f,{relationName:"CFETo"})})),u6=h(f,({one:Z})=>({fromFile:Z(y,{fields:[f.fromPath],references:[y.path],relationName:"CFEFrom"}),toFile:Z(y,{fields:[f.toPath],references:[y.path],relationName:"CFETo"})}));var g6={...rZ,...oZ};function h6(){let Z=process.env.DATABASE_URL;if(Z&&/^(file:|libsql:|wss?:|https?:|:memory:)/i.test(Z))return Z;return"file:./dev.db"}var m6=h6();function b6(Z){let $=x6({url:Z});return $.execute("PRAGMA foreign_keys = ON;"),$.execute("PRAGMA busy_timeout = 5000;"),f6($,{schema:g6})}var p6=globalThis,PZ=p6.dzByUrl??=new Map;function I4(){return IZ(m6)}function IZ(Z){let $=PZ.get(Z);if(!$)$=b6(Z),PZ.set(Z,$);return $}function R4(Z){let $=PZ.get(Z);PZ.delete(Z);try{$?.$client?.close?.()}catch{}}function c6(){if(process.env.BEACON_REPO)return I4();let Z=AZ()??r();if(!Z)return I4();return IZ(VZ(Z))}var b=new Proxy({},{get(Z,$){let Q=c6(),J=Q[$];return typeof J==="function"?J.bind(Q):J}});import{existsSync as u8}from"fs";import{existsSync as k5,readFileSync as S8,watch as v8}from"fs";import{readFile as v5}from"fs/promises";import{join as DZ,relative as k8,resolve as w8}from"path";import{existsSync as l4,readFileSync as n4}from"fs";import{readdir as D7,readFile as z7,stat as r4}from"fs/promises";import{extname as o4,join as vZ,relative as WZ,resolve as HZ}from"path";import{extname as m4}from"path";import{dirname as d6,resolve as l6}from"path";var iZ=[".ts",".tsx",".js",".jsx",".mjs",".cjs"],n6=[/(?:^|[\n;])\s*(?:import|export)[^'"`\n]{0,4000}?from\s*['"]([^'"`]+)['"]/g,/(?:^|[\n;])\s*import\s*['"]([^'"`]+)['"]/g,/\brequire\(\s*['"]([^'"`]+)['"]\s*\)/g,/\bimport\(\s*['"]([^'"`]+)['"]\s*\)/g];function r6(Z){return Z.split(/[\\/]/).join("/")}function E4(Z,$){if($.has(Z))return Z;for(let Q of iZ){let J=`${Z}${Q}`;if($.has(J))return J}for(let Q of iZ){let J=`${Z}/index${Q}`;if($.has(J))return J}return null}function o6(Z){let $=new Set;for(let Q of n6)for(let J of Z.matchAll(Q))$.add(J[1]);return $}function i6(Z,$,Q,J){if(Z.startsWith(".")){let V=l6("/",d6($),Z),Y=r6(V).replace(/^\//,"");return E4(Y,Q)}for(let V of J)if(Z.startsWith(V.from)){let Y=Z.slice(V.from.length),X=V.to?`${V.to}/${Y}`:Y,K=E4(X,Q);if(K)return K}return null}var S4={id:"ts",extensions:iZ,specifiers:o6,resolve(Z,$,Q){let J=i6(Z,$,Q.fileSet,Q.tsAliases??[]);return J?[J]:[]}};import{dirname as RZ,join as s6,normalize as a6}from"path";var t6=[".py",".pyi"],v4=[/(?:^|[\n;])\s*from\s+(\.*[\w.]*)\s+import\b/g,/(?:^|[\n;])\s*import\s+([\w.]+(?:\s*,\s*[\w.]+)*)/g];function k4(Z,$){for(let Q of[`${Z}.py`,`${Z}/__init__.py`,`${Z}.pyi`])if($.has(Q))return[Q];return[]}function e6(Z){let $=new Set;for(let Q of Z.matchAll(v4[0])){let J=Q[1].trim();if(J)$.add(J)}for(let Q of Z.matchAll(v4[1]))for(let J of Q[1].split(/\s*,\s*/)){let V=J.trim().split(/\s+as\s+/)[0].trim();if(V)$.add(V)}return $}var w4={id:"python",extensions:t6,specifiers:e6,resolve(Z,$,Q){if(Z.startsWith(".")){let X=Z.length-Z.replace(/^\.+/,"").length,K=Z.slice(X),U=RZ($);for(let M=1;M<X;M++)U=RZ(U);let W=K?s6(U,K.replace(/\./g,"/")):U;return k4(a6(W).replace(/\\/g,"/"),Q.fileSet)}let J=Z.replace(/\./g,"/"),V=[],Y=RZ($);while(Y&&Y!=="."&&Y!=="/")V.push(Y),Y=RZ(Y);V.push("");for(let X of V){let K=k4(X?`${X}/${J}`:J,Q.fileSet);if(K.length)return K}return[]}};import{dirname as Z7}from"path";var $7=[".go"],Q7=/(?:^|[\n;])\s*import\s+(?:[\w.]+\s+)?"([^"]+)"/g,J7=/(?:^|[\n;])\s*import\s*\(([\s\S]*?)\)/g,V7=/"([^"]+)"/g;function K7(Z){let $=new Set;for(let Q of Z.matchAll(Q7))$.add(Q[1]);for(let Q of Z.matchAll(J7))for(let J of Q[1].matchAll(V7))$.add(J[1]);return $}var T4={id:"go",extensions:$7,resolve(Z,$,Q){let J=Q.goModulePath;if(!J)return[];let V=null;if(Z===J)V="";else if(Z.startsWith(`${J}/`))V=Z.slice(J.length+1);if(V===null)return[];let Y=[];for(let X of Q.fileSet){if(!X.endsWith(".go"))continue;let K=Z7(X);if(V===""&&K==="."||K===V)Y.push(X)}return Y.sort()},specifiers:K7};import{basename as y4,dirname as sZ,join as u4,normalize as f4}from"path";var Y7=[".rs"],X7=/(?:^|[\n;])\s*(?:pub\s+)?mod\s+(\w+)\s*;/g,G7=/(?:^|[\n;])\s*(?:pub\s+)?use\s+([\w:]+)/g;function M7(Z){let $=Z.split("::").filter((Q)=>Q&&Q!=="*");if(!$.length)return"";if($[0]==="crate")return["crate",...$.slice(1)].join("/");if($[0]==="super")return["..",...$.slice(1)].join("/");if($[0]==="self")return[".",...$.slice(1)].join("/");return $.join("/")}function aZ(Z,$){for(let Q of[`${Z}.rs`,`${Z}/mod.rs`])if($.has(Q))return[Q];return[]}var U7=new Set(["mod.rs","lib.rs","main.rs"]);function j7(Z){let $=new Set;for(let Q of Z.matchAll(X7))$.add(`./${Q[1]}`);for(let Q of Z.matchAll(G7)){let J=M7(Q[1]);if(J)$.add(J)}return $}var x4={id:"rust",extensions:Y7,specifiers:j7,resolve(Z,$,Q){let J=Q.fileSet;if(Z.startsWith("./")||Z.startsWith("../")){let V=Z.replace(/^\.\//,""),Y=f4(u4(sZ($),Z)).replace(/\\/g,"/"),X=aZ(Y,J);if(X.length)return X;if(Z.startsWith("./")&&!U7.has(y4($))){let K=u4(sZ($),y4($,".rs"),V);if(X=aZ(f4(K).replace(/\\/g,"/"),J),X.length)return X}return[]}if(Z.startsWith("crate/")){let V=$.split("/"),Y=V.lastIndexOf("src"),X=Y>=0?V.slice(0,Y+1).join("/"):sZ($),K=Z.slice(6).split("/");for(let U of[K.join("/"),K.slice(0,-1).join("/")]){if(!U)continue;let W=aZ(`${X}/${U}`,J);if(W.length)return W}return[]}return[]}};import{dirname as H7,extname as W7,join as C7,normalize as N7}from"path";var g4=[".swift",".java",".rb",".kt",".kts",".cs",".php",".scala",".c",".h",".cpp",".hpp",".cc",".hh",".m",".mm",".ex",".exs",".lua",".dart",".vue",".svelte"],L7=[/\b(?:require_relative|require|include|import|use|using|from)\s*\(?\s*['"]([^'"`\n]+)['"]/g,/(?:^|[\n;])\s*import\s+([\w.]+)/g,/(?:^|[\n;])\s*from\s+([\w.]+)\s+import\b/g,/(?:^|[\n;])\s*using\s+([\w.]+)\s*;/g,/(?:^|[\n;])\s*use\s+([\w\\]+)/g,/#\s*include\s*[<"]([^>"\n]+)[>"]/g];function B7(Z){let $=new Set;for(let Q of L7)for(let J of Z.matchAll(Q)){let V=J[1].trim();if(V)$.add(V)}return $}var h4={id:"fallback",extensions:g4,specifiers:B7,resolve(Z,$,Q){let V=[W7($).toLowerCase(),...g4].filter((U,W,M)=>U&&M.indexOf(U)===W),Y=Z.includes("/")||Z.includes("\\"),X=Z.startsWith(".")||Y?Z.replace(/\\/g,"/"):Z.replace(/[.:]+/g,"/"),K=[N7(C7(H7($),X)).replace(/\\/g,"/"),X.replace(/^\.\//,"")];for(let U of K){if(Q.fileSet.has(U))return[U];for(let W of V){let M=U.endsWith(W)?U:`${U}${W}`;if(Q.fileSet.has(M))return[M];if(Q.fileSet.has(`${U}/index${W}`))return[`${U}/index${W}`]}}return[]}};var q7=[S4,w4,T4,x4,h4],EZ=new Map;for(let Z of q7)for(let $ of Z.extensions)EZ.set($,Z);var O7={".ts":"ts",".tsx":"ts",".js":"js",".jsx":"js",".mjs":"js",".cjs":"js",".py":"py",".pyi":"py",".go":"go",".rs":"rs",".swift":"swift",".java":"java",".rb":"ruby",".kt":"kotlin",".kts":"kotlin",".cs":"csharp",".php":"php",".scala":"scala",".c":"c",".h":"c",".cpp":"cpp",".hpp":"cpp",".cc":"cpp",".hh":"cpp",".m":"objc",".mm":"objc",".ex":"elixir",".exs":"elixir",".lua":"lua",".dart":"dart",".vue":"vue",".svelte":"svelte"};function tZ(Z){return EZ.get(m4(Z).toLowerCase())??null}function b4(Z){let $=m4(Z).toLowerCase();if(!EZ.has($))return null;return O7[$]??$.slice(1)}function eZ(){return new Set(EZ.keys())}var i4=new Set(["node_modules",".git",".next","dist","build","__pycache__","target",".venv","venv","env",".turbo","coverage",".beacon",".playwright-mcp","generated","migrations","alembic","migrate"]);function _7(Z=5){let $=performance.now();return async()=>{if(performance.now()-$>Z)await new Promise((Q)=>setImmediate(Q)),$=performance.now()}}var F7=()=>Promise.resolve();async function s4(Z,$,Q,J,V){let Y;try{Y=await D7($,{withFileTypes:!0})}catch{return}for(let X of Y){if(X.name.startsWith("."))continue;if(i4.has(X.name))continue;let K=vZ($,X.name);if(X.isDirectory()){await s4(Z,K,Q,J,V);continue}if(!X.isFile())continue;if(X.name.endsWith(".d.ts"))continue;if(!Q.has(o4(X.name).toLowerCase()))continue;J.push(WZ(Z,K))}await V()}async function A7(Z,$=F7){let Q=[];return await s4(Z,Z,eZ(),Q,$),Q.map((J)=>J.split(/[\\/]/).join("/")).sort()}function P7(Z){try{return JSON.parse(Z)}catch{}let $=Z.replace(/\/\*[^"]*?\*\//g,"").replace(/(^|[^:"])\/\/.*$/gm,"$1").replace(/,\s*([}\]])/g,"$1");return JSON.parse($)}function p4(Z){return Z.replace(/^\.\/?/,"").replace(/\/$/,"")}function a4(Z){let $=vZ(Z,"tsconfig.json");if(!l4($))return[];let Q;try{Q=P7(n4($,"utf8"))}catch{return[]}let J=Q.compilerOptions?.paths??{},V=p4(Q.compilerOptions?.baseUrl??"."),Y=[];for(let[X,K]of Object.entries(J)){if(!X.endsWith("/*")||!K.length)continue;let U=K[0];if(!U.endsWith("/*"))continue;let W=X.slice(0,-1),M=p4(U.slice(0,-1)),C=[V,M].filter(Boolean).join("/");Y.push({from:W,to:C})}return Y}function SZ(Z){let $=vZ(Z,"go.mod");if(!l4($))return null;try{let Q=/^\s*module\s+(\S+)/m.exec(n4($,"utf8"));return Q?Q[1]:null}catch{return null}}function p(Z){return Z.split(/[\\/]/).join("/")}function t4(Z){if(Z.length===1)return Z[0];let $=Z.map((V)=>p(V).split("/")),Q=$[0],J=0;for(;J<Q.length;J++)if(!$.every((V)=>V[J]===Q[J]))break;return Q.slice(0,J).join("/")||"/"}async function I7(Z,$,Q){let J=(Array.isArray(Z)?Z:[Z]).map((W)=>p(HZ(W))),V=p($?HZ($):J.length===1?J[0]:t4(J)),Y=new Map,X=[];for(let W of J){let M=p(WZ(V,W));for(let C of a4(W))X.push({from:C.from,to:[M,C.to].filter(Boolean).join("/")});for(let C of await A7(W,Q)){let L=p(vZ(W,C)),O=p(WZ(V,L));if(Y.has(O))continue;try{let H=await r4(L);Y.set(O,{path:O,abs:L,root:M||null,mtimeMs:H.mtimeMs,size:H.size})}catch{}await Q()}}let K=J.map(SZ).find(Boolean)??SZ(V);return{metas:[...Y.values()].sort((W,M)=>W.path.localeCompare(M.path)),ctx:{fileSet:new Set(Y.keys()),tsAliases:X,goModulePath:K}}}var c4=50000;function R7(Z){let $=0;for(let Q=0;Q<Z.length;Q++)if(Z.charCodeAt(Q)===10){if(Q-$>c4)return!0;$=Q+1}return Z.length-$>c4}async function d4(Z){let $=tZ(Z.path);if(!$||Z.size>200000)return new Set;try{let Q=await z7(Z.abs,"utf8");if(R7(Q))return new Set;return $.specifiers(Q)}catch{return new Set}}function e4(Z,$){let Q=(Array.isArray(Z)?Z:[Z]).map((H)=>p(HZ(H))),J=p($?HZ($):Q.length===1?Q[0]:t4(Q)),V=new Map,Y=new Map,X=[],K=null;function U(){X=[];for(let H of Q){let N=p(WZ(J,H));for(let B of a4(H))X.push({from:B.from,to:[N,B.to].filter(Boolean).join("/")})}K=Q.map(SZ).find(Boolean)??SZ(J)}function W(H){let N=H.split("/");for(let D=0;D<N.length;D++){let q=N[D];if(!q||q.startsWith("."))return!0;if(D<N.length-1&&i4.has(q))return!0}let B=N[N.length-1];if(B.endsWith(".d.ts"))return!0;return!eZ().has(o4(B).toLowerCase())}function M(H){let N=p(HZ(H));for(let B of Q)if(N===B||N.startsWith(`${B}/`)){let D=N.slice(B.length).replace(/^\/+/,"");if(W(D))return null;return{path:p(WZ(J,N)),root:p(WZ(J,B))||null}}return null}function C(){let H={fileSet:new Set(V.keys()),tsAliases:X,goModulePath:K},N=[...V.values()].sort((q,G)=>q.path.localeCompare(G.path)),B=[];for(let q of N){let G=tZ(q.path);if(!G)continue;let z=Y.get(q.path)??new Set,_=new Set;for(let R of z)for(let w of G.resolve(R,q.path,H)){if(!w||w===q.path||_.has(w))continue;_.add(w),B.push({from:q.path,to:w})}}return{files:N.map((q)=>({path:q.path,lang:b4(q.path),root:q.root,mtimeMs:q.mtimeMs,size:q.size})),edges:B}}async function L(){let H=_7(),{metas:N,ctx:B}=await I7(Z,$,H);V.clear(),Y.clear();for(let D of N)await H(),V.set(D.path,D),Y.set(D.path,await d4(D));return X=B.tsAliases??[],K=B.goModulePath??null,C()}async function O(H){let N=p(HZ(H));if(!Q.some((_)=>N===_||N.startsWith(`${_}/`)))return!1;let B=N.split("/").pop()??"";if(B==="tsconfig.json"||B==="go.mod"){let _=N.slice(0,N.length-B.length-1);if(Q.includes(_))return U(),!0;return!1}let D=M(H);if(!D)return!1;let q;try{q=await r4(N)}catch{let _=V.delete(D.path);return Y.delete(D.path),_}let G=V.get(D.path);if(G&&G.mtimeMs===q.mtimeMs&&G.size===q.size)return!1;let z={path:D.path,abs:N,root:D.root,mtimeMs:q.mtimeMs,size:q.size};return V.set(D.path,z),Y.set(D.path,await d4(z)),!0}return{seed:L,applyChange:O,snapshot:C}}function Z5(Z){let $=Object.keys(Z.tableVars),Q=new Map;if(!$.length){for(let X of Z.routeFiles)Q.set(X,[]);return Q}let J=new Map;for(let X of Z.edges){let K=J.get(X.from)??[];K.push(X.to),J.set(X.from,K)}let V=new Map($.map((X)=>[X,new RegExp(`(?:query\\.${X}\\b|\\.from\\(\\s*${X}\\b)`)])),Y=new Map($.map((X)=>[X,new RegExp(`(?:insert|update|delete)\\(\\s*${X}\\b`)]));for(let X of Z.routeFiles){let K=new Set([X]),U=[X];for(let L=0;L<2&&K.size<25;L++){let O=[];for(let H of U)for(let N of J.get(H)??[]){if(K.has(N)||K.size>=25)continue;K.add(N),O.push(N)}U=O}let W=new Set,M=new Set;for(let L of K){let O=Z.content(L);if(!O)continue;for(let H of $){if(!W.has(H)&&V.get(H).test(O))W.add(H);if(!M.has(H)&&Y.get(H).test(O))M.add(H)}}let C=[];for(let L of $){let O=W.has(L),H=M.has(L);if(!O&&!H)continue;C.push({table:Z.tableVars[L],access:O&&H?"read-write":H?"write":"read"})}Q.set(X,C)}return Q}function Q5(Z,$){if(/_JSON_OR_JSONB|\bJSONB\b|\bJSON\b/.test(Z))return"jsonb";let Q=Z.match(/\b(GUID|Uuid|UUID|String|Text|DateTime|Date|Time|BigInteger|SmallInteger|Integer|Boolean|Float|Numeric|Decimal|Vector|TSVECTOR|LargeBinary|Enum)\b\s*(\([^)]*\))?/);if(Q){let Y=Q[2]??"",X=Y.match(/\d+/)?.[0];switch(Q[1]){case"GUID":case"Uuid":case"UUID":return"uuid";case"String":return X?`varchar(${X})`:"varchar";case"Text":return"text";case"DateTime":return/timezone\s*=\s*True/.test(Y)?"timestamptz":"timestamp";case"Date":return"date";case"Time":return"time";case"BigInteger":return"bigint";case"SmallInteger":return"smallint";case"Integer":return"integer";case"Boolean":return"boolean";case"Float":return"float";case"Numeric":case"Decimal":return"numeric";case"Vector":return X?`vector(${X})`:"vector";case"TSVECTOR":return"tsvector";case"LargeBinary":return"bytea";case"Enum":return"varchar"}}let J=$.replace(/\s*\|\s*None/g,"").trim(),V=J.match(/^Optional\[([\s\S]*)\]$/);if(V)J=V[1].trim();if(/uuid/i.test(J))return"uuid";if(/datetime/i.test(J))return"timestamptz";if(/\bint\b/i.test(J))return"integer";if(/\bbool\b/i.test(J))return"boolean";if(/\bfloat\b/.test(J)&&!/\blist\b/.test(J))return"float";if(/\bdict\b|\blist\b|\bAny\b/.test(J))return"jsonb";return"text"}function kZ(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="(")Q++;else if(Z[J]===")"){if(Q--,Q===0)return Z.slice($+1,J)}return""}function E7(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="[")Q++;else if(Z[J]==="]"){if(Q--,Q===0)return Z.slice($+1,J)}return null}function S7(Z,$,Q){let J=Q.match(/__tablename__\s*=\s*["']([^"']+)["']/)?.[1],V=[],Y=[],X=[],K=/(\w+)\s*:\s*Mapped\s*\[/g,U;while(U=K.exec(Q)){let C=U.index+U[0].length-1,L=E7(Q,C);if(L===null)continue;let O=C+L.length+2,H=Q.slice(O).match(/^\s*=\s*(\w+)\s*\(/);if(!H||H[1]!=="mapped_column")continue;X.push({colName:U[1],pyType:L,argsAt:O+H[0].length-1})}let W=/(\w+)\s*=\s*(mapped_column|Column)\s*\(/g;while(U=W.exec(Q))X.push({colName:U[1],pyType:"",argsAt:U.index+U[0].length-1});X.sort((C,L)=>C.argsAt-L.argsAt);let M=new Set;for(let C of X){if(M.has(C.colName)||C.colName==="__tablename__")continue;M.add(C.colName);let L=kZ(Q,C.argsAt),O=/primary_key\s*=\s*True/.test(L)||void 0,H=/nullable\s*=\s*False/.test(L)?!1:!0,N=L.match(/ForeignKey\(\s*["']([^"']+?)\.([^"'.]+)["']/);if(V.push({name:C.colName,type:Q5(L,C.pyType),isPk:O,isFk:N?!0:void 0,nullable:H}),N)Y.push({column:C.colName,toTable:N[1],toColumn:N[2]})}return{name:Z,bases:$,tableName:J,columns:V,fks:Y}}function v7(Z){let $=[],Q=[],J=/\bTable\s*(\()\s*["']([^"']+)["']\s*,/g,V;while(V=J.exec(Z)){let Y=V[2],X=kZ(Z,V.index+V[0].indexOf("("));if(!/\bmetadata\b/.test(X)||!/\bColumn\s*\(/.test(X))continue;let K=[],U=/\bColumn\s*\(/g,W;while(W=U.exec(X)){let M=kZ(X,W.index+W[0].length-1),C=M.match(/^\s*["'](\w+)["']\s*,/)?.[1];if(!C)continue;let L=/primary_key\s*=\s*True/.test(M)||void 0,O=/nullable\s*=\s*False/.test(M)?!1:!0,H=M.match(/ForeignKey\(\s*["']([^"']+?)\.([^"'.]+)["']/);if(K.push({name:C,type:Q5(M,""),isPk:L,isFk:H?!0:void 0,nullable:O}),H)Q.push({fromTable:Y,fromColumn:C,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 U=v7(K.content);Q.tables.push(...U.tables),Q.relations.push(...U.relations);let W=/^class\s+(\w+)\s*\(([^)]*)\)\s*:/gm,M,C=[];while(M=W.exec(K.content))C.push({name:M[1],bases:M[2].split(",").map((L)=>L.trim().split(/[.[]/)[0]).filter(Boolean),at:M.index});for(let L=0;L<C.length;L++){let O=K.content.slice(C[L].at,C[L+1]?.at??K.content.length),H=S7(C[L].name,C[L].bases,O);$.set(H.name,H)}}if(![...$.values()].some((K)=>K.tableName)&&!Q.tables.length)return{tables:[],relations:[]};let J=(K,U=new Set)=>{if(U.has(K.name))return[];U.add(K.name);let W=[];for(let M of K.bases){let C=$.get(M);if(C&&!C.tableName)W.push(...J(C,U))}return W.push(...K.columns),W},V=[],Y=[];for(let K of $.values()){if(!K.tableName)continue;let U=J(K),W=new Map;for(let H of U)if(!W.has(H.name))W.set(H.name,H);let M=[...W.values()],C=(H)=>M.splice(M.findIndex((N)=>N.name===H),1)[0],L=M.some((H)=>H.name==="id")?C("id"):null,O=["created_at","updated_at","deleted_at"].filter((H)=>M.some((N)=>N.name===H)).map((H)=>C(H));V.push({name:K.tableName,columns:[...L?[L]:[],...M,...O]});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,U=[];for(let W of Y[2].split(`
4
+ `)){let M=W.trim().match(/^(\w+)\s+(\w+(?:\[\])?\??)\s*(.*)$/);if(!M||/^@@/.test(W.trim()))continue;let[,C,L,O]=M,H=/^(String|Int|BigInt|Float|Decimal|Boolean|DateTime|Json|Bytes)(\[\])?\??$/.test(L),N=O.match(/@relation\([^)]*fields:\s*\[(\w+)\][^)]*references:\s*\[(\w+)\]/);if(N)Q.push({fromTable:K,fromColumn:N[1],toTable:L.replace(/[?[\]]/g,""),toColumn:N[2]});if(!H)continue;U.push({name:C,type:w7(L),isPk:/@id\b/.test(O)||void 0,isFk:/@relation\b/.test(O)||void 0,nullable:L.endsWith("?")})}if(U.length)$.push({name:K,columns:U})}}return{tables:$,relations:Q}}function y7(Z,$){if(/mode:\s*["']timestamp/.test($))return"timestamp";if(/mode:\s*["']boolean["']/.test($))return"boolean";if(/mode:\s*["']json["']/.test($))return"jsonb";return Z}function u7(Z,$){let Q=0;for(let J=$;J<Z.length;J++)if(Z[J]==="{")Q++;else if(Z[J]==="}"){if(Q--,Q===0)return Z.slice($+1,J)}return""}function f7(Z){let $=[],Q=/(\w+)\s*:\s*(text|integer|real|blob|numeric|varchar|boolean|timestamp|serial|uuid|json|jsonb)\s*\(/g;for(let Y of Z){if(!/\.(ts|tsx|mts|cts)$/.test(Y.path))continue;if(!/\b(?:sqliteTable|pgTable|mysqlTable)\s*\(/.test(Y.content))continue;let X=/(?:export\s+)?const\s+(\w+)\s*=\s*(?:sqliteTable|pgTable|mysqlTable)\s*\(\s*["']([^"']+)["']\s*,/g,K;while(K=X.exec(Y.content)){let U=Y.content.indexOf("{",K.index+K[0].length);if(U<0)continue;let W=u7(Y.content,U),M={varName:K[1],tableName:K[2],columns:[],colByProp:new Map,fks:[]},C=[];Q.lastIndex=0;for(let L of W.matchAll(Q))C.push({prop:L[1],builder:L[2],at:L.index,argOpen:L.index+L[0].length-1});C.forEach((L,O)=>{let H=W.slice(L.at,C[O+1]?.at??W.length),N=kZ(W,L.argOpen),D=N.match(/^\s*["']([^"']+)["']/)?.[1]??L.prop,q=H.match(/\.references\(\s*\(\)\s*=>\s*(\w+)\.(\w+)/);if(M.columns.push({name:D,type:y7(L.builder,N),isPk:/\.primaryKey\(\)/.test(H)||void 0,isFk:q?!0:void 0,nullable:/\.notNull\(\)/.test(H)?!1:!0}),M.colByProp.set(L.prop,D),q)M.fks.push({column:D,toVar:q[1],toProp:q[2]})}),$.push(M)}}if(!$.length)return{tables:[],relations:[]};let J=new Map($.map((Y)=>[Y.varName,Y])),V=[];for(let Y of $)for(let X of Y.fks){let K=J.get(X.toVar);if(!K)continue;V.push({fromTable:Y.tableName,fromColumn:X.column,toTable:K.tableName,toColumn:K.colByProp.get(X.toProp)??X.toProp})}return{tables:$.map((Y)=>({name:Y.tableName,columns:Y.columns})),relations:V,tableVars:Object.fromEntries($.map((Y)=>[Y.varName,Y.tableName]))}}var x7={long:"bigint",Long:"bigint",BigInteger:"bigint",int:"integer",Integer:"integer",short:"smallint",Short:"smallint",String:"varchar",char:"varchar",Character:"varchar",boolean:"boolean",Boolean:"boolean",UUID:"uuid",BigDecimal:"numeric",double:"double",Double:"double",float:"float",Float:"float",LocalDate:"date",LocalDateTime:"timestamp",Instant:"timestamp",Timestamp:"timestamp",Date:"timestamp",OffsetDateTime:"timestamptz",ZonedDateTime:"timestamptz",LocalTime:"time"},g7=/^(List|Set|Map|Collection|Iterable)$/;function J5(Z){if(/byte\s*\[\s*\]/.test(Z))return"byte[]";return(Z.replace(/<.*>/,"").trim().split(".").pop()??Z).trim()}function h7(Z){let $=J5(Z);if($==="byte[]")return"bytea";return x7[$]??$.toLowerCase()}function wZ(Z,$){return Z.match(new RegExp(`\\b${$}\\s*=\\s*"([^"]*)"`))?.[1]}function $5(Z,$){let Q=Z.match(new RegExp(`\\b${$}\\s*=\\s*(true|false)`));return Q?Q[1]==="true":void 0}function m7(Z){let $=[],Q=Z,J;while(J=Q.match(/^@[\w.]+(\([^)]*\))?\s*/))$.push(Q.slice(0,J[0].length).trim()),Q=Q.slice(J[0].length);return{annots:$,rest:Q.trim()}}function b7(Z){let $=[],Q=[];for(let J of Z.split(`
5
+ `)){let V=J.trim();if(!V||V.startsWith("//")||V.startsWith("*")||V.startsWith("/*"))continue;let{annots:Y,rest:X}=m7(V);if(Q.push(...Y),!X)continue;let K=X,U="";while(K!==U)U=K,K=K.replace(/^(?:public|private|protected|static|final|transient|volatile)\s+/,"");let W=!K.includes("(")?K.match(/^([\w.$]+(?:<[^>]*>)?(?:\s*\[\s*\])?)\s+(\w+)\s*[;=]/):null;if(W)$.push({annots:Q,type:W[1],name:W[2]});Q=[]}return $}function p7(Z){let $=[],Q=/\bclass\s+(\w+)/g,J;while(J=Q.exec(Z))$.push({name:J[1],at:J.index});let V=[];for(let Y=0;Y<$.length;Y++){let X=Z.slice(Y===0?0:$[Y-1].at,$[Y].at);if(!/@Entity\b/.test(X))continue;let K=X.match(/@Table\s*\([^)]*\)/)?.[0]??"",U=wZ(K,"name")??$[Y].name,W=Z.slice($[Y].at,$[Y+1]?.at??Z.length),M=b7(W),C=M.find((O)=>O.annots.some((H)=>/@Id\b/.test(H))),L=C?wZ(C.annots.find((O)=>/@Column\b/.test(O))??"","name")??C.name:"id";V.push({className:$[Y].name,tableName:U,idColumn:L,fields:M})}return V}function c7(Z){let $=Z.filter((K)=>K.path.endsWith(".java")&&/@Entity\b/.test(K.content));if(!$.length)return{tables:[],relations:[]};let Q=$.flatMap((K)=>p7(K.content));if(!Q.length)return{tables:[],relations:[]};let J=new Map(Q.map((K)=>[K.className,K.tableName])),V=new Map(Q.map((K)=>[K.className,K.idColumn])),Y=[],X=[];for(let K of Q){let U=[];for(let W of K.fields){let M=W.annots.join(" ");if(/@Transient\b/.test(M))continue;let C=J5(W.type);if(/@ManyToOne\b|@OneToOne\b|@OneToMany\b|@ManyToMany\b/.test(M)||J.has(C)){let q=W.annots.find((z)=>/@JoinColumn\b/.test(z)),G=q?wZ(q,"name"):void 0;if(G){U.push({name:G,type:"bigint",isFk:!0,nullable:$5(M,"nullable")??!0});let z=J.get(C);if(z)X.push({fromTable:K.tableName,fromColumn:G,toTable:z,toColumn:V.get(C)??"id"})}continue}if(g7.test(C))continue;let H=W.annots.find((q)=>/@Column\b/.test(q))??"",N=wZ(H,"name")??W.name,B=W.annots.some((q)=>/@Id\b/.test(q)),D=$5(H,"nullable");U.push({name:N,type:h7(W.type),...B?{isPk:!0}:{},...D!==void 0?{nullable:D}:{}})}Y.push({name:K.tableName,columns:U})}return{tables:Y,relations:X}}function V5(Z){let $=f7(Z);if($.tables.length)return $;let Q=T7(Z);if(Q.tables.length)return Q;let J=k7(Z);if(J.tables.length)return J;return c7(Z)}var d7=["GET","POST","PUT","PATCH","DELETE"];function l7(Z){let $=Z.match(/(?:^|\/)app\/(.+)\/route\.(?:ts|tsx|js|jsx|mjs)$/);if(!$)return null;let Q=$[1].split("/").filter((J)=>!(J.startsWith("(")&&J.endsWith(")"))).map((J)=>{let V=J.match(/^\[{1,2}(?:\.\.\.)?([^\]]+)\]{1,2}$/);return V?`{${V[1]}}`:J});if(Q[0]!=="api")return null;return`/${Q.join("/")}`}function K5(Z){let $=[];for(let Q of Z){let J=l7(Q.path);if(!J)continue;for(let V of d7)if(new RegExp(`export\\s+(?:async\\s+)?(?:function|const)\\s+${V}\\b`).test(Q.content))$.push({method:V,path:J,uses:[],file:Q.path})}return $.sort((Q,J)=>`${Q.path} ${Q.method}`.localeCompare(`${J.path} ${J.method}`))}var n7=/(^|\/)app\/.*\/route\.(ts|tsx|js|jsx|mjs)$/,r7=/\.(ts|py)$/,o7=/(schema|model)/i,i7=/(\.(test|spec)\.[jt]sx?$)|(^|\/)(tests?|__tests__|__mocks__)\/|(^|\/)test_[^/]+\.py$|_test\.py$/;function Z4(Z){if(i7.test(Z))return!1;if(Z.endsWith(".prisma"))return!0;if(n7.test(Z))return!0;if(Z.endsWith(".java"))return!0;return r7.test(Z)&&o7.test(Z)}function Y5(Z,$=300){return Z.filter(Z4).slice(0,$)}import{z as l}from"zod";import{and as P5,eq as CZ,inArray as P8,notInArray as I8}from"drizzle-orm";import{z as A}from"zod";import{and as D8,eq as fZ,inArray as J4,notInArray as z8,or as _8,sql as F8}from"drizzle-orm";var X5=300,G5=50;function M5(Z){for(let $=0;$<Z.length;$++)for(let Q=$+1;Q<Z.length;Q++){let J=Z[$],V=Z[Q];if(J.x<V.x+X5&&J.x+X5>V.x&&J.y<V.y+G5&&J.y+G5>V.y)return!0}return!1}import{eq as s7}from"drizzle-orm";var U5=(Z)=>Z.replace(/\{[^}]*\}/g,"{}");function a7(Z,$){if(Z.method.toUpperCase()!==$.method.toUpperCase())return!1;let Q=U5(Z.path),J=U5($.path);return J===Q||J.endsWith(Q)}async function j5(Z=b){let[$,Q]=await Promise.all([Z.query.endpoint.findMany({where:(V,{ne:Y})=>Y(V.source,"INTROSPECTION")}),Z.query.endpoint.findMany({where:(V,{eq:Y})=>Y(V.source,"INTROSPECTION")})]),J={collapsed:0,mappings:[]};for(let V of $){let Y=Q.find((X)=>a7(V,X));if(!Y)continue;await Z.delete(E).where(s7(E.id,V.id)),J.collapsed++,J.mappings.push({planned:`${V.method} ${V.path}`,code:`${Y.method} ${Y.path}`})}return J}import{and as H5,inArray as t7,isNull as W5,ne as C5,or as e7}from"drizzle-orm";var Z8=new Set(["DONE","CANCELLED","DEPRIORITIZED"]);async function $8(Z){let $=await Z.query.node.findMany({where:(J,{and:V,eq:Y,isNotNull:X})=>V(Y(J.view,"ROADMAP"),X(J.planId)),columns:{planId:!0,status:!0}}),Q=new Map;for(let J of $){let V=J.planId;Q.set(V,(Q.get(V)??!0)&&Z8.has(J.status))}return[...Q.entries()].filter(([,J])=>J).map(([J])=>J)}async function N5(Z=b){let $=await $8(Z),Q=(Y)=>$.length?e7(W5(Y.planId),t7(Y.planId,$)):W5(Y.planId),J=await Z.delete(P).where(H5(C5(P.source,"INTROSPECTION"),Q(P))).returning({id:P.id}),V=await Z.delete(E).where(H5(C5(E.source,"INTROSPECTION"),Q(E))).returning({id:E.id});return{tables:J.length,endpoints:V.length}}var Q8=(Z)=>Z&&Number.isFinite(Z)&&Z>0?Math.min(3.2,Math.max(0.7,Z)):1.8;function J8(Z,$){let Q=Q8($.viewportAspect)*($.aspectSlack??1),J=Z.reduce((V,Y)=>V+(Y.w+$.gapX)*(Y.h+$.gapY),0);return Math.max($.minBandW,Math.round(Math.sqrt(J*Q)))}function L5(Z,$){let Q=J8(Z,$),J=new Map,V=0,Y=0,X=0;for(let K of Z){if(V>0&&V+K.w>Q)Y+=X+$.gapY,V=0,X=0;J.set(K.id,{x:V,y:Y}),X=Math.max(X,K.h),V+=K.w+$.gapX}return J}var QZ=320,$4=30,V8=36,K8=30,Y8=16;function JZ(Z){return V8+Math.max(0,Z)*K8+Y8}var GZ=60,X8=300,TZ=10,G8=84,yZ=72,M8=3*QZ,U8=1.7;var uZ=(Z)=>(Z??"").trim()||"\u2014";function j8(Z,$,Q){let J=new Map;for(let Y of Z.uses){if(!$.has(Y.tableId))continue;J.set(Y.tableId,(J.get(Y.tableId)??0)+1)}let V=null;for(let[Y,X]of J){if(V===null){V=Y;continue}let K=J.get(V);if(X>K){V=Y;continue}if(X<K)continue;let U=Q?.get(Y)??0,W=Q?.get(V)??0;if(U<W)V=Y;else if(U===W&&$.get(Y).localeCompare($.get(V))<0)V=Y}return V}function Q4(Z,$){let Q=new Map(Z.map((V)=>[V.id,V.name])),J=new Map;for(let V of $)for(let Y of V.uses){if(!Q.has(Y.tableId))continue;J.set(Y.tableId,(J.get(Y.tableId)??0)+1)}return new Map($.map((V)=>[V.id,j8(V,Q,J)]))}var H8=(Z,$)=>Z.path.localeCompare($.path)||Z.method.localeCompare($.method)||Z.id.localeCompare($.id);function B5(Z,$,Q={}){let J=Q4(Z,$),V=new Map,Y=[];for(let N of[...$].sort(H8)){let B=J.get(N.id)??null;if(B){let D=V.get(B);if(D)D.push(N);else V.set(B,[N])}else Y.push(N)}let X=(N)=>{let B=V.get(N.id)?.length??0;return JZ(N.columnCount)+(B?TZ+B*GZ:0)+$4},K=Array.from(new Set(Z.map((N)=>uZ(N.domain)))),U=K.filter((N)=>N!=="\u2014").sort(),W=K.includes("\u2014")?[...U,"\u2014"]:U,M=[];for(let N of W){let B=Z.filter((_)=>uZ(_.domain)===N).sort((_,R)=>_.name.localeCompare(R.name)),D=B.reduce((_,R)=>_+X(R),0),q=Math.max(1,Math.min(12,B.length,Math.round(Math.sqrt(D/QZ)))),G=Array(q).fill(0),z=new Map;for(let _ of B){let R=0;for(let w=1;w<q;w++)if(G[w]<G[R])R=w;z.set(_.id,{x:R*QZ,y:G[R]}),G[R]+=X(_)}M.push({d:N,w:q*QZ,h:Math.max(...G,0),tableLocal:z})}let C=L5(M.map((N)=>({id:N.d,w:N.w,h:N.h})),{gapX:G8,gapY:yZ,viewportAspect:Q.viewportAspect,minBandW:M8,aspectSlack:U8}),L=new Map,O=new Map,H=0;for(let N of M){let B=C.get(N.d),D=Z.filter((q)=>N.tableLocal.has(q.id));for(let q of D){let G=N.tableLocal.get(q.id),z=B.x+G.x,_=B.y+G.y;L.set(q.id,{x:z,y:_}),(V.get(q.id)??[]).forEach((w,T)=>{O.set(w.id,{x:z,y:_+JZ(q.columnCount)+TZ+T*GZ})})}H=Math.max(H,B.y+N.h)}if(Y.length){let N=H+yZ,B=Math.max(1,Math.min(4,Math.ceil(Math.sqrt(Y.length/2))));Y.forEach((D,q)=>{O.set(D.id,{x:q%B*X8,y:N+Math.floor(q/B)*GZ})})}return{tables:L,endpoints:O}}function q5(Z,$,Q){let J=Q4($,Q),V=new Map;for(let O of Q){let H=J.get(O.id);if(H)V.set(H,(V.get(H)??0)+1)}let Y=(O)=>{let H=V.get(O.id)??0;return O.y+JZ(O.columnCount)+(H?TZ+H*GZ:0)},X=uZ(Z.domain),K=$.filter((O)=>uZ(O.domain)===X);if(!K.length){let O=$.length?Math.max(...$.map(Y),...Q.map((H)=>H.y+GZ)):0;return{x:0,y:$.length||Q.length?O+yZ:0}}let U=Math.min(...K.map((O)=>O.x)),W=K.map((O)=>Math.max(0,Math.round((O.x-U)/QZ))),M=Math.min(12,Math.max(...W)+1),C=Array(M).fill(Math.min(...K.map((O)=>O.y)));K.forEach((O,H)=>{let N=Math.min(W[H],M-1);C[N]=Math.max(C[N],Y(O)+$4)});let L=0;for(let O=1;O<M;O++)if(C[O]<C[L])L=O;return{x:U+L*QZ,y:C[L]}}function O5(Z,$,Q){let J=Q4($,[...Q,Z]),V=J.get(Z.id),Y=V?$.find((K)=>K.id===V):void 0;if(Y){let K=Q.filter((M)=>J.get(M.id)===Y.id),U=Y.y+JZ(Y.columnCount)+TZ,W=K.length?Math.max(...K.map((M)=>M.y))+GZ:U;return{x:Y.x,y:W}}let X=[...$.map((K)=>K.y+JZ(K.columnCount)),...Q.map((K)=>K.y+GZ)];return{x:0,y:X.length?Math.max(...X)+yZ:0}}function D5(Z){let $=QZ-20;for(let Q=0;Q<Z.length;Q++)for(let J=Q+1;J<Z.length;J++){let V=Z[Q],Y=Z[J],X=JZ(V.columnCount),K=JZ(Y.columnCount);if(V.x<Y.x+$&&V.x+$>Y.x&&V.y<Y.y+K&&V.y+X>Y.y)return!0}return!1}import{eq as _5}from"drizzle-orm";z5();async function F5(Z=b,$){let[Q,J]=await Promise.all([Z.query.dbTable.findMany({with:{columns:{columns:{id:!0}}},orderBy:(X,{asc:K})=>K(X.name)}),Z.query.endpoint.findMany({with:{tables:{columns:{tableId:!0}}}})]),V=B5(Q.map((X)=>({id:X.id,name:X.name,domain:X.domain,columnCount:X.columns.length})),J.map((X)=>({id:X.id,method:X.method,path:X.path,uses:X.tables.map((K)=>({tableId:K.tableId}))})),{viewportAspect:$}),Y=0;for(let X of Q){let K=V.tables.get(X.id);if(!K||Math.round(K.x)===Math.round(X.x)&&Math.round(K.y)===Math.round(X.y))continue;await Z.update(P).set({x:K.x,y:K.y}).where(_5(P.id,X.id)),Y++}for(let X of J){let K=V.endpoints.get(X.id);if(!K||Math.round(K.x)===Math.round(X.x)&&Math.round(K.y)===Math.round(X.y))continue;await Z.update(E).set({x:K.x,y:K.y}).where(_5(E.id,X.id)),Y++}return Y}var A8=A.object({tables:A.array(A.object({name:A.string().trim().min(1),domain:A.string().nullish(),description:A.string().nullish(),columns:A.array(A.object({name:A.string().trim().min(1),type:A.string().trim().min(1),isPk:A.boolean().optional(),isFk:A.boolean().optional(),nullable:A.boolean().optional(),note:A.string().nullish()})).default([])})).default([]),relations:A.array(A.object({fromTable:A.string(),fromColumn:A.string(),toTable:A.string(),toColumn:A.string(),label:A.string().nullish()})).default([]),endpoints:A.array(A.object({method:A.string().trim().min(1),path:A.string().trim().min(1),domain:A.string().nullish(),description:A.string().nullish(),uses:A.array(A.object({table:A.string(),access:A.string().default("read")})).default([])})).default([])});async function xZ(Z=b){let[$]=await Z.insert(a).values({id:"singleton",version:1}).onConflictDoUpdate({target:a.id,set:{version:F8`${a.version} + 1`}}).returning();return $.version}async function A5(Z,$=b,Q={}){let J=A8.parse(Z),V=J.tables.length>0,Y=J.endpoints.length>0,X=J.tables.map((G)=>G.name);if(V)await $.delete(P).where(X.length?D8(fZ(P.source,"INTROSPECTION"),z8(P.name,X)):fZ(P.source,"INTROSPECTION"));let K=await $.query.dbTable.findMany({columns:{id:!0,name:!0,domain:!0,x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),U=await $.query.endpoint.findMany({columns:{id:!0,method:!0,path:!0,x:!0,y:!0},with:{tables:{columns:{tableId:!0}}}}),W=new Map(K.map((G)=>[G.name,G])),M=K.map((G)=>({id:G.id,name:G.name,domain:G.domain,columnCount:G.columns.length,x:G.x,y:G.y})),C=U.map((G)=>({id:G.id,method:G.method,path:G.path,uses:G.tables.map((z)=>({tableId:z.tableId})),x:G.x,y:G.y})),L=new Map;for(let G of J.tables){if(W.has(G.name))continue;let z=q5({domain:G.domain??null,columnCount:G.columns.length},M,C);L.set(G.name,z),M.push({id:`new:${G.name}`,name:G.name,domain:G.domain??null,columnCount:G.columns.length,...z})}let O=new Map;for(let G of J.tables){let z=W.get(G.name),_=L.get(G.name),R=z?.x??_?.x??0,w=z?.y??_?.y??0,[T]=await $.insert(P).values({name:G.name,domain:G.domain??null,description:G.description??null,source:"INTROSPECTION",x:R,y:w}).onConflictDoUpdate({target:P.name,set:{...G.domain!=null?{domain:G.domain}:{},...G.description!=null?{description:G.description}:{},source:"INTROSPECTION"}}).returning();if(O.set(G.name,T.id),await $.delete(e).where(fZ(e.tableId,T.id)),G.columns.length)await $.insert(e).values(G.columns.map((x,I)=>({tableId:T.id,name:x.name,type:x.type,isPk:x.isPk??!1,isFk:x.isFk??!1,nullable:x.nullable??!0,note:x.note??null,ord:I})))}let H=[...O.values()];if(H.length)await $.delete(d).where(_8(J4(d.fromTableId,H),J4(d.toTableId,H)));for(let G of J.relations){let z=O.get(G.fromTable),_=O.get(G.toTable);if(!z||!_)continue;await $.insert(d).values({fromTableId:z,toTableId:_,fromColumn:G.fromColumn,toColumn:G.toColumn,label:G.label??`${G.fromColumn} \u2192 ${G.toTable}.${G.toColumn}`})}let N=new Set(J.endpoints.map((G)=>`${G.method} ${G.path}`));if(Y){let z=(await $.query.endpoint.findMany({where:(_,{eq:R})=>R(_.source,"INTROSPECTION")})).filter((_)=>!N.has(`${_.method} ${_.path}`)).map((_)=>_.id);if(z.length)await $.delete(E).where(J4(E.id,z))}for(let G of M)if(G.id.startsWith("new:"))G.id=O.get(G.name)??G.id;for(let G of J.endpoints){let z=await $.query.endpoint.findFirst({where:(T,{and:x,eq:I})=>x(I(T.method,G.method),I(T.path,G.path))}),_,R;if(z)_=z.x,R=z.y;else{let T={id:`new:${G.method} ${G.path}`,method:G.method,path:G.path,uses:G.uses.map((I)=>({tableId:O.get(I.table)??""})).filter((I)=>I.tableId)},x=O5(T,M,C);_=x.x,R=x.y,C.push({...T,x:_,y:R})}let[w]=await $.insert(E).values({method:G.method,path:G.path,domain:G.domain??null,description:G.description??null,source:"INTROSPECTION",x:_,y:R}).onConflictDoUpdate({target:[E.method,E.path],set:{...G.domain!=null?{domain:G.domain}:{},...G.description!=null?{description:G.description}:{},source:"INTROSPECTION"}}).returning();if(!Q.partial||G.uses.length>0)await $.delete(i).where(fZ(i.endpointId,w.id));for(let T of G.uses){let x=O.get(T.table)??(await $.query.dbTable.findFirst({where:(I,{eq:UZ})=>UZ(I.name,T.table)}))?.id;if(!x)continue;await $.insert(i).values({endpointId:w.id,tableId:x,access:T.access})}}await j5($),await N5($);let B=await $.query.dbTable.findMany({where:(G,{eq:z})=>z(G.source,"INTROSPECTION"),columns:{x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),D=await $.select({x:E.x,y:E.y}).from(E);if(D5(B.map((G)=>({x:G.x,y:G.y,columnCount:G.columns.length})))||M5(D))await F5($);let q=await xZ($);return{tables:J.tables.length,relations:J.relations.length,endpoints:J.endpoints.length,version:q}}var I5=l.object({files:l.array(l.object({path:l.string().trim().min(1),root:l.string().nullish(),lang:l.string().nullish(),mtimeMs:l.number().nullish(),size:l.number().nullish()})).default([]),edges:l.array(l.object({from:l.string().trim().min(1),to:l.string().trim().min(1)})).default([])});function R5(Z,$){let Q=new Map;for(let L of Z)Q.set(L,[]);for(let L of $)Q.get(L.from)?.push(L.to);let J=new Map,V=new Map,Y=new Set,X=[],K=new Map,U=[],W=0,M=0;for(let L of Z){if(J.has(L))continue;let O=[{v:L,iter:0}];J.set(L,W),V.set(L,W),W++,X.push(L),Y.add(L);while(O.length){let H=O[O.length-1],N=Q.get(H.v)??[];if(H.iter<N.length){let B=N[H.iter++];if(!J.has(B))J.set(B,W),V.set(B,W),W++,X.push(B),Y.add(B),O.push({v:B,iter:0});else if(Y.has(B))V.set(H.v,Math.min(V.get(H.v),J.get(B)))}else{if(V.get(H.v)===J.get(H.v)){let D=0,q;do q=X.pop(),Y.delete(q),K.set(q,M),D++;while(q!==H.v);U.push(D),M++}O.pop();let B=O[O.length-1];if(B)V.set(B.v,Math.min(V.get(B.v),V.get(H.v)))}}}let C=new Set;for(let L of $){let O=K.get(L.from);if(O!==void 0&&O===K.get(L.to)&&U[O]>1)C.add(`${L.from}|${L.to}`)}return C}async function E5(Z,$=b){let Q=I5.parse(Z),J=Q.files.map((C)=>C.path),V=new Set(J),Y=Q.edges.filter((C)=>V.has(C.from)&&V.has(C.to)&&C.from!==C.to),X=R5(J,Y),K=new Map,U=new Map;for(let C of Y)U.set(C.from,(U.get(C.from)??0)+1),K.set(C.to,(K.get(C.to)??0)+1);await $.delete(y).where(I8(y.path,J));for(let C of Q.files){let L={root:C.root??null,lang:C.lang??null,mtimeMs:C.mtimeMs??null,size:C.size??null,inDegree:K.get(C.path)??0,outDegree:U.get(C.path)??0};await $.insert(y).values({path:C.path,...L}).onConflictDoUpdate({target:y.path,set:L})}await $.delete(f);let W=0;if(Y.length)await $.insert(f).values(Y.map((C)=>{let L=X.has(`${C.from}|${C.to}`);if(L)W++;return{fromPath:C.from,toPath:C.to,circular:L}}));let M=await xZ($);return await $.update(a).set({codeGraphSyncedAt:new Date}).where(CZ(a.id,"singleton")),{files:Q.files.length,edges:Y.length,circular:W,version:M}}var R8=(Z,$)=>`${Z}\x00${$}`;function V4(Z){let $=I5.parse(Z),Q=$.files.map((M)=>M.path),J=new Set(Q),V=$.edges.filter((M)=>J.has(M.from)&&J.has(M.to)&&M.from!==M.to),Y=R5(Q,V),X=new Map,K=new Map;for(let M of V)K.set(M.from,(K.get(M.from)??0)+1),X.set(M.to,(X.get(M.to)??0)+1);let U=new Map;for(let M of $.files)U.set(M.path,{root:M.root??null,lang:M.lang??null,mtimeMs:M.mtimeMs??null,size:M.size??null,inDegree:X.get(M.path)??0,outDegree:K.get(M.path)??0});let W=new Map;for(let M of V)W.set(R8(M.from,M.to),{from:M.from,to:M.to,circular:Y.has(`${M.from}|${M.to}`)});return{files:U,edges:W}}var E8=(Z,$)=>Z.root===$.root&&Z.lang===$.lang&&Z.mtimeMs===$.mtimeMs&&Z.size===$.size&&Z.inDegree===$.inDegree&&Z.outDegree===$.outDegree;async function S5(Z,$,Q=b){for(let[K,U]of $.files){let W=Z.files.get(K);if(W&&E8(W,U))continue;let M={root:U.root,lang:U.lang,mtimeMs:U.mtimeMs,size:U.size,inDegree:U.inDegree,outDegree:U.outDegree};await Q.insert(y).values({path:K,...M}).onConflictDoUpdate({target:y.path,set:M})}let J=[...Z.files.keys()].filter((K)=>!$.files.has(K));if(J.length)await Q.delete(y).where(P8(y.path,J));for(let[K,U]of Z.edges)if(!$.edges.has(K))await Q.delete(f).where(P5(CZ(f.fromPath,U.from),CZ(f.toPath,U.to)));let V=[];for(let[K,U]of $.edges){let W=Z.edges.get(K);if(!W)V.push({fromPath:U.from,toPath:U.to,circular:U.circular});else if(W.circular!==U.circular)await Q.update(f).set({circular:U.circular}).where(P5(CZ(f.fromPath,U.from),CZ(f.toPath,U.to)))}if(V.length)await Q.insert(f).values(V);let Y=await xZ(Q);await Q.update(a).set({codeGraphSyncedAt:new Date}).where(CZ(a.id,"singleton"));let X=0;for(let K of $.edges.values())if(K.circular)X++;return{files:$.files.size,edges:$.edges.size,circular:X,version:Y}}var T8=/[/\\](node_modules|\.git|\.next|dist|build|__pycache__|target|\.venv|venv|\.beacon|\.playwright-mcp|generated|coverage)[/\\]/;function y8(Z){try{let $=DZ(Z,"beacon.config.json");if(k5($)){let Q=JSON.parse(S8($,"utf8"));if(Array.isArray(Q.roots)&&Q.roots.length)return Q.roots.map((J)=>w8(Z,J))}}catch{}return[Z]}function w5(Z){let $=y8(Z.path),Q=nZ(Z.id),J=IZ(VZ(Z.id)),V=e4($,Z.path);async function Y(){let N=Y5(V.snapshot().files.map((z)=>z.path));for(let z of $)for(let _ of["prisma/schema.prisma","schema.prisma"]){let R=DZ(z,_);if(k5(R))N.push(X(R))}let B=[];for(let z of N)try{B.push({path:z,content:await v5(DZ(Z.path,z),"utf8")})}catch{}let D=V5(B),q=K5(B);if(!D.tables.length&&!q.length)return;if(q.length&&D.tableVars&&Object.keys(D.tableVars).length){let _=V.snapshot().edges,R=new Set(q.map((I)=>I.file)),w=new Map;for(let I of _){let UZ=w.get(I.from)??[];UZ.push(I.to),w.set(I.from,UZ)}for(let I=0;I<2;I++)for(let UZ of[...R])for(let m5 of w.get(UZ)??[])R.add(m5);let T=new Map;for(let I of[...R].slice(0,600))try{T.set(I,await v5(DZ(Z.path,I),"utf8"))}catch{}let x=Z5({routeFiles:[...new Set(q.map((I)=>I.file))],edges:_,content:(I)=>T.get(I)??null,tableVars:D.tableVars});for(let I of q)I.uses=x.get(I.file)??[]}let G=await A5({tables:D.tables,relations:D.relations,endpoints:q},J,{partial:!0});console.log(`[beacon-inline] schema synced (${Z.name}): ${G.tables} tables / ${G.endpoints} endpoints`)}function X(N){return k8(Z.path,N).split(/[\\/]/).join("/")}let K=null,U=!1,W=new Set,M=null,C=!1;async function L(){if(C){O();return}C=!0;try{if(await Q,U)K=null,U=!1;if(K===null){let q=await V.seed(),G=await E5(q,J);K=V4(q),console.log(`[beacon-inline] code-graph synced (${Z.name}): ${G.files} files / ${G.edges} imports${G.circular>0?` (${G.circular} circular)`:""}`),await Y();return}let N=[...W];W.clear();let B=N.some((q)=>Z4(X(q))),D=!1;for(let q of N)if(await V.applyChange(q))D=!0;if(D){let q=V4(V.snapshot()),G=await S5(K,q,J);K=q,console.log(`[beacon-inline] code-graph updated (${Z.name}): ${G.files} files / ${G.edges} imports${G.circular>0?` (${G.circular} circular)`:""}`)}if(B)await Y()}catch(N){console.error(`[beacon-inline] error (${Z.name}):`,N instanceof Error?N.message:N)}finally{C=!1}}function O(){if(M)clearTimeout(M);M=setTimeout(L,600)}let H=[];for(let N of $)try{let B=v8(N,{recursive:!0,persistent:!0},(D,q)=>{if(!q){U=!0,O();return}let G=String(q);if(T8.test(`/${G}`))return;W.add(DZ(N,G)),O()});B.on("error",(D)=>console.error(`[beacon-inline] watcher error (${Z.name}):`,D)),H.push(B)}catch(B){console.error(`[beacon-inline] live watch unavailable for ${N} (${Z.name}):`,B instanceof Error?B.message:B)}return console.log(`[beacon-inline] watching ${Z.name} (${$.join(", ")}) \u2014 initial extract\u2026`),L(),{async stop(){if(M)clearTimeout(M);for(let N of H)N.close()}}}var f8=1500;function x8(Z){let $=Z.limit??6,Q=Z.hardCap??12,J=Z.staggerMs??f8,V=new Map,Y=0,X=new Set;function K(B){let D=V.get(B);if(D)D.seq=++Y}function U(B){if(V.has(B.id))return K(B.id);if(!Z.exists(B.path))return;V.set(B.id,{handle:Z.start(B),seq:++Y})}function W(){let B=null,D=1/0;for(let[q,G]of V){if(X.has(q))continue;if(G.seq<D)D=G.seq,B=q}if(B)V.get(B).handle.stop(),V.delete(B)}function M(){let B=Z.list().filter((q)=>Z.exists(q.path)).slice(0,$);X=new Set(B.map((q)=>q.id)),B.filter((q)=>!V.has(q.id)).forEach((q,G)=>{if(G===0)U(q);else setTimeout(()=>X.has(q.id)&&U(q),G*J)});for(let[q,G]of[...V]){let z=Z.get(q);if(!z||!Z.exists(z.path))G.handle.stop(),V.delete(q)}}function C(B){if(V.has(B))return K(B);let D=Z.get(B);if(!D||!Z.exists(D.path))return;if(V.size>=Q)W();if(V.size>=Q)return;V.set(B,{handle:Z.start(D),seq:++Y})}async function L(B){let D=V.get(B);if(!D)return;V.delete(B),await D.handle.stop()}function O(B){return V.has(B)}function H(){return[...V.keys()]}async function N(){await Promise.all([...V.values()].map((B)=>B.handle.stop())),V.clear()}return{reconcile:M,ensureWatcher:C,stopWatcher:L,isWatching:O,activeIds:H,stopAll:N}}var g8=globalThis,h8=g8.__beaconWatcherManager??=x8({list:FZ,get:g,exists:u8,start:(Z)=>w5(Z)});async function T5(Z){await h8.stopWatcher(Z)}async function y5(Z){if(!g(Z))return{ok:!1,removed:!1,fallbackId:r(),error:"unknown workspace"};O4(Z),B4(Z),await T5(Z),R4(VZ(Z)),P4(Z);try{m8(n(Z),{recursive:!0,force:!0})}catch($){return{ok:!1,removed:!0,fallbackId:r(),error:$ instanceof Error?$.message:String($)}}return{ok:!0,removed:!0,fallbackId:r()}}var K4=process.argv.slice(3),x5=K4.includes("--yes")||K4.includes("-y"),MZ=K4.find((Z)=>!Z.startsWith("-")),u5=(Z)=>`\x1B[32m\u2713\x1B[0m ${Z}`,g5=(Z)=>`\x1B[2m${Z}\x1B[0m`,h5=(Z)=>`
6
6
  \x1B[1m${Z}\x1B[0m`;function c8(){if(!MZ)return g(ZZ(_Z(process.cwd())));if(/^[0-9a-f]{12}$/.test(MZ)){let Z=g(MZ);if(Z)return Z}return g(ZZ(_Z(f5(MZ))))}var s=c8();if(!s)console.error(`[beacon] ${MZ??process.cwd()} is not a registered Beacon workspace \u2014 nothing to remove.`),process.exit(1);console.log(h5(x5?"Beacon \xB7 remove workspace":"Beacon \xB7 remove workspace (dry run)"));console.log(` name: ${s.name}${r()===s.id?" (currently active)":""}`);console.log(` repo: ${s.path} ${g5("(untouched \u2014 only Beacon's data is erased)")}`);console.log(` data: ${n(s.id)} ${g5("(deleted)")}`);if(!x5)console.log(h5("Nothing was changed.")),console.log(` Run \x1B[1mbeacon remove${MZ?` ${MZ}`:""} --yes\x1B[0m to apply.
7
7
  `),process.exit(0);async function d8(Z){try{let{pid:$,port:Q}=JSON.parse(p8(f5(t(),"server.json"),"utf8"));if(!$||!Q)return!1;return process.kill($,0),(await fetch(`http://localhost:${Q}/api/workspace`,{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({id:Z}),signal:AbortSignal.timeout(1e4)})).ok}catch{return!1}}if(await d8(s.id))console.log(` ${u5(`removed ${s.name} (via the running daemon)`)}
8
8
  `);else{let Z=await y5(s.id);if(!Z.ok)console.error(`[beacon] remove failed: ${Z.error??"unknown error"}`),process.exit(1);console.log(` ${u5(`removed ${s.name}`)}
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var s=Object.defineProperty;var a=(Q)=>Q;function r(Q,X){this[Q]=a.bind(null,X)}var i=(Q,X)=>{for(var Z in X)s(Q,Z,{get:X[Z],enumerable:!0,configurable:!0,set:r.bind(X,Z)})};var t=(Q,X)=>()=>(Q&&(X=Q(Q=0)),X);var R={};i(R,{provisionDb:()=>UQ});import{createClient as e}from"@libsql/client";import{drizzle as QQ}from"drizzle-orm/libsql";import{migrate as XQ}from"drizzle-orm/libsql/migrator";import{readMigrationFiles as ZQ}from"drizzle-orm/migrator";import{dirname as O,join as $Q}from"path";import{fileURLToPath as JQ}from"url";async function B(Q,X){return(await Q.execute({sql:"SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?",args:[X]})).rows.length>0}async function VQ(Q,X){let Z=await Q.execute(`PRAGMA table_info("${X}")`);return new Set(Z.rows.map((J)=>String(J.name)))}async function W(Q){if(!await B(Q,"__drizzle_migrations"))return 0;let X=await Q.execute('SELECT count(*) AS n FROM "__drizzle_migrations"');return Number(X.rows[0]?.n??0)}async function MQ(Q){for(let[X,Z]of Object.entries(KQ)){if(!await B(Q,X))continue;let J=await VQ(Q,X);for(let $ of Z){if(!J.has($))continue;await Q.execute(`UPDATE "${X}" SET "${$}" = CAST((julianday("${$}") - 2440587.5) * 86400000 AS INTEGER) WHERE typeof("${$}") = 'text'`)}}}async function UQ(Q,X=GQ){let Z=e({url:Q});try{await Z.execute("PRAGMA journal_mode = WAL;"),await Z.execute("PRAGMA foreign_keys = ON;"),await Z.execute("PRAGMA busy_timeout = 5000;");let J=await B(Z,"__drizzle_migrations"),$=await B(Z,"Node"),Y=!1;if($&&!J){let K=ZQ({migrationsFolder:X})[0];if(K)await Z.execute('CREATE TABLE IF NOT EXISTS "__drizzle_migrations" (id SERIAL PRIMARY KEY, hash text NOT NULL, created_at numeric)'),await Z.execute({sql:'INSERT INTO "__drizzle_migrations" ("hash", "created_at") VALUES (?, ?)',args:[K.hash,K.folderMillis]}),Y=!0}let G=await W(Z);if(await XQ(QQ(Z),{migrationsFolder:X}),await W(Z)>G)Y=!0;return await MQ(Z),{migrated:Y}}finally{Z.close()}}var YQ,GQ,KQ;var v=t(async()=>{YQ=O(O(O(JQ(import.meta.url)))),GQ=process.env.BEACON_MIGRATIONS_DIR||$Q(YQ,"drizzle"),KQ={Node:["createdAt","updatedAt"],Note:["createdAt","updatedAt"],DbTable:["createdAt","updatedAt"],Endpoint:["createdAt","updatedAt"],DraftTable:["createdAt"],SyncState:["codeGraphSyncedAt","updatedAt"],AppSetting:["updatedAt"],ProjectMeta:["updatedAt"],CodeFile:["updatedAt"]}});import{AsyncLocalStorage as NQ}from"async_hooks";import{spawnSync as zQ}from"child_process";import{createHash as LQ}from"crypto";import{existsSync as F,mkdirSync as z,readFileSync as q,writeFileSync as _}from"fs";import{homedir as T}from"os";import{basename as BQ,join as M,parse as CQ,resolve as A}from"path";function V(){return process.env.BEACON_HOME||M(T(),".beacon")}function I(){return M(V(),"workspaces.json")}function N(Q){return LQ("sha256").update(Q).digest("hex").slice(0,12)}function HQ(Q=process.cwd()){let X=zQ("git",["rev-parse","--show-toplevel"],{cwd:Q,stdio:["ignore","pipe","ignore"]});if(X.status===0){let Z=X.stdout?.toString().trim();if(Z)return Z}return Q}function S(Q){let X=A(Q);return X!==A(T())&&X!==CQ(X).root}function x(){return M(V(),"deleted.json")}function D(){try{let Q=JSON.parse(q(x(),"utf8"));return Array.isArray(Q)?Q:[]}catch{return[]}}function P(Q){z(V(),{recursive:!0}),_(x(),JSON.stringify(Q,null,2))}function f(Q){return D().includes(Q)}function QX(Q){let X=D();if(!X.includes(Q))P([...X,Q])}function OQ(Q){let X=D();if(X.includes(Q))P(X.filter((Z)=>Z!==Q))}function C(Q){return M(V(),Q)}function jQ(Q){return`file:${M(C(Q),"db.sqlite")}`}function L(){try{let Q=JSON.parse(q(I(),"utf8"));return Array.isArray(Q)?Q:[]}catch{return[]}}function E(Q){z(V(),{recursive:!0}),_(I(),JSON.stringify(Q,null,2))}function y(){return L().sort((Q,X)=>X.lastOpenedAt.localeCompare(Q.lastOpenedAt))}function U(Q){return L().find((X)=>X.id===Q)??null}function w(Q,X,Z=new Date().toISOString()){if(!S(Q))throw Error(`beacon: refusing to register a non-repo path as a workspace: ${Q}`);let J=N(Q);if(f(J))throw Error(`beacon: workspace ${J} (${Q}) was deleted \u2014 run \`beacon\` or /beacon-init to re-add it`);let $=L(),Y=$.find((H)=>H.id===J),G={id:J,path:Q,name:X||Y?.name||BQ(Q),lastOpenedAt:Z},K=[G,...$.filter((H)=>H.id!==J)];return z(C(J),{recursive:!0}),E(K),G}function XX(Q,X){return OQ(N(Q)),w(Q,X)}function ZX(Q,X=new Date().toISOString()){let Z=L(),J=Z.find(($)=>$.id===Q);if(!J)return;J.lastOpenedAt=X,E(Z)}function $X(Q){if(E(L().filter((X)=>X.id!==Q)),u()===Q)qQ(y()[0]?.id??null)}function k(){return M(V(),"active")}function u(){try{return q(k(),"utf8").trim()||null}catch{return null}}function qQ(Q){z(V(),{recursive:!0}),_(k(),Q??"")}function JX(){let Q=u();return Q?U(Q):null}function YX(){let Q=IQ()??u();return Q?U(Q):null}function GX(Q){return U(Q)?.path??null}function KX(){return F(I())}var g="beacon_ws";function b(Q,X){let Z=Q.headers.get("cookie");if(!Z)return null;for(let J of Z.split(";")){let $=J.indexOf("=");if($===-1)continue;if(J.slice(0,$).trim()===X)return decodeURIComponent(J.slice($+1).trim())}return null}function VX(Q){let X=Q.headers.get("x-beacon-workspace");if(X&&U(X))return X;let Z=b(Q,g);if(Z&&U(Z))return Z;return _Q()}function _Q(){let Q=y();return Q.length===1?Q[0].id:null}var m="x-beacon-workspace-path";function h(Q=process.cwd()){let X=HQ(Q);return{"x-beacon-workspace":N(X),[m]:X}}async function MX(Q){let X=Q.headers.get("x-beacon-workspace");if(X&&U(X))return X;let Z=Q.headers.get(m);if(Z&&S(Z)&&!f(N(Z))&&(!X||N(Z)===X)){let $=w(Z);return await DQ($.id),$.id}let J=b(Q,g);if(J&&U(J))return J;return null}var p=new NQ;function UX(Q,X){return Q?p.run(Q,X):X()}function IQ(){return p.getStore()??null}var j=new Set;function NX(Q){j.delete(M(C(Q),"db.sqlite"))}async function DQ(Q){let X=C(Q),Z=M(X,"db.sqlite"),J=F(Z);if(J&&j.has(Z))return{ok:!0,created:!1,migrated:!1};try{z(X,{recursive:!0});let{provisionDb:$}=await v().then(() => R),Y=await $(jQ(Q));return j.add(Z),{ok:!0,created:!J,migrated:J&&Y.migrated}}catch($){return{ok:!1,created:!1,migrated:!1,error:$ instanceof Error?$.message:String($)}}}import{connect as EQ}from"net";var c=4319;function uQ(Q,X,Z=400){return new Promise((J)=>{let $=EQ({host:Q,port:X}),Y=!1,G=(K)=>{if(Y)return;Y=!0,$.destroy(),J(K)};$.once("connect",()=>G(!0)),$.once("error",()=>G(!1)),$.setTimeout(Z,()=>G(!1))})}async function WQ(Q){for(let X of["127.0.0.1","::1"])if(await uQ(X,Q))return!1;return!0}async function BX(Q,X=20){for(let Z=Q;Z<Q+X;Z++)if(await WQ(Z))return Z;return Q}import{closeSync as RQ,fstatSync as vQ,openSync as AQ,readSync as FQ}from"fs";function TQ(Q,X,Z){let J=AQ(Q,"r");try{let $=vQ(J).size,Y=X<0?Math.max(0,$+X):Math.min(X,$),G=Math.min(Z,$-Y);if(G<=0)return"";let K=Buffer.alloc(G);return FQ(J,K,0,G,Y),K.toString("utf8")}finally{RQ(J)}}var l=(Q,X)=>TQ(Q,-X,X);var SQ=[/\bshould i (go ahead|proceed|start|begin|continue|implement|build|kick)\b/i,/\b(want|do you want|would you like) me to (go ahead|proceed|start|begin|continue|implement|build|kick|do)\b/i,/\bshall i (proceed|start|begin|continue|implement|build|go)\b/i,/\bdoes (this|that|the plan|the approach|it) (look|sound) (right|good|ok|okay|fine)\b/i,/\b(looks?|sounds?) (right|good|fine) to you\b/i,/\blet me know (if|what|how|whether|once|when)\b/i,/\bbefore i (go|start|begin|implement|proceed|dive|write|send|build|continue|move|ship)\b/i,/\b(ready|good) to (proceed|implement|start|build|go)\b/i,/\b(things?|couple|two|a few)\b[^.?!]*\bto confirm\b/i,/\bto confirm[:?]/i,/\bif (this|that|it) looks (right|good|ok|okay)\b/i,/\bwaiting (for|on) your (approval|go-?ahead|sign-?off|ok|review|decision)\b/i,/\b(approve|green-?light|sign off on) (this|the plan|the approach|it)\b/i];function xQ(Q){if(!Q||!Q.trim())return!1;return SQ.some((X)=>X.test(Q))}function PQ(Q){if(typeof Q==="string")return Q;if(Array.isArray(Q))return Q.filter((X)=>(X?.type==="text"||X?.type==="output_text")&&typeof X.text==="string").map((X)=>X.text).join(`
4
- `).trim();return""}function fQ(Q){let X=Q.split(`
5
- `);for(let Z=X.length-1;Z>=0;Z--){let J=X[Z].trim();if(!J)continue;let $;try{$=JSON.parse(J)}catch{continue}let Y=$.message??$.payload??$;if((Y.role??$.type)!=="assistant")continue;return PQ(Y.content)}return""}function yQ(Q){let X=Q.split(/\n\s*\n/).map((Z)=>Z.trim()).filter(Boolean);return X.length?X[X.length-1]:""}function d(Q){return xQ(yQ(fQ(Q)))}import{readFileSync as wQ}from"fs";import{join as kQ}from"path";function gQ(){try{return JSON.parse(wQ(kQ(V(),"server.json"),"utf8"))}catch{return null}}function n(){if(process.env.BEACON_URL)return process.env.BEACON_URL;return`http://localhost:${gQ()?.port||process.env.PORT||c}`}var bQ="It looks like you ended your turn asking the user to approve a plan or decide how to "+"proceed \u2014 in prose. In this project, plans are reviewed on Beacon's /plan canvas, not in the "+"terminal. Present it through Beacon instead: call the `beacon_present_plan` MCP tool with your plan as markdown (embed a ```beacon block for any tables/endpoints/features). It opens /plan and BLOCKS until the user approves, discards, or leaves feedback, then returns their verdict. If this was NOT a plan (just a quick question), ignore this and continue.",mQ=65536,o="";for await(let Q of process.stdin)o+=Q;try{let Q=JSON.parse(o||"{}");if(Q.stop_hook_active)process.exit(0);let X=[];try{let J=typeof Q.session_id==="string"?Q.session_id:"",$=await fetch(`${n()}/api/changes/comment/claim?session=${encodeURIComponent(J)}`,{method:"POST",headers:h(typeof Q.cwd==="string"?Q.cwd:void 0),signal:AbortSignal.timeout(2500)}).catch(()=>null),Y=$?.ok?(await $.json().catch(()=>null))?.additionalContext:"";if(Y&&Y.trim())X.push(Y)}catch{}let Z=Q.transcript_path;if(typeof Z==="string"&&Z)try{if(d(l(Z,mQ)))X.push(bQ)}catch{}if(X.length)process.stdout.write(JSON.stringify({decision:"block",reason:X.join(`
3
+ var QQ=Object.defineProperty;var XQ=(Q)=>Q;function ZQ(Q,X){this[Q]=XQ.bind(null,X)}var $Q=(Q,X)=>{for(var Z in X)QQ(Q,Z,{get:X[Z],enumerable:!0,configurable:!0,set:ZQ.bind(X,Z)})};var A=(Q,X)=>()=>(Q&&(X=Q(Q=0)),X);var u={};$Q(u,{provisionDb:()=>CQ});import{createClient as JQ}from"@libsql/client";import{drizzle as YQ}from"drizzle-orm/libsql";import{migrate as GQ}from"drizzle-orm/libsql/migrator";import{readMigrationFiles as KQ}from"drizzle-orm/migrator";import{dirname as O,join as VQ}from"path";import{fileURLToPath as MQ}from"url";async function C(Q,X){return(await Q.execute({sql:"SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?",args:[X]})).rows.length>0}async function LQ(Q,X){let Z=await Q.execute(`PRAGMA table_info("${X}")`);return new Set(Z.rows.map((J)=>String(J.name)))}async function I(Q){if(!await C(Q,"__drizzle_migrations"))return 0;let X=await Q.execute('SELECT count(*) AS n FROM "__drizzle_migrations"');return Number(X.rows[0]?.n??0)}async function BQ(Q){for(let[X,Z]of Object.entries(zQ)){if(!await C(Q,X))continue;let J=await LQ(Q,X);for(let $ of Z){if(!J.has($))continue;await Q.execute(`UPDATE "${X}" SET "${$}" = CAST((julianday("${$}") - 2440587.5) * 86400000 AS INTEGER) WHERE typeof("${$}") = 'text'`)}}}async function CQ(Q,X=NQ){let Z=JQ({url:Q});try{await Z.execute("PRAGMA journal_mode = WAL;"),await Z.execute("PRAGMA foreign_keys = ON;"),await Z.execute("PRAGMA busy_timeout = 5000;");let J=await C(Z,"__drizzle_migrations"),$=await C(Z,"Node"),Y=!1;if($&&!J){let K=KQ({migrationsFolder:X})[0];if(K)await Z.execute('CREATE TABLE IF NOT EXISTS "__drizzle_migrations" (id SERIAL PRIMARY KEY, hash text NOT NULL, created_at numeric)'),await Z.execute({sql:'INSERT INTO "__drizzle_migrations" ("hash", "created_at") VALUES (?, ?)',args:[K.hash,K.folderMillis]}),Y=!0}let G=await I(Z);if(await GQ(YQ(Z),{migrationsFolder:X}),await I(Z)>G)Y=!0;return await BQ(Z),{migrated:Y}}finally{Z.close()}}var UQ,NQ,zQ;var F=A(async()=>{UQ=O(O(O(MQ(import.meta.url)))),NQ=process.env.BEACON_MIGRATIONS_DIR||VQ(UQ,"drizzle"),zQ={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 vQ,renameSync as xQ,rmSync as PQ,writeFileSync as fQ}from"fs";import{dirname as SQ}from"path";function yQ(Q,X){vQ(SQ(Q),{recursive:!0});let Z=`${Q}.tmp`;try{fQ(Z,X),xQ(Z,Q)}catch(J){throw PQ(Z,{force:!0}),J}}function n(Q,X,Z=!1){yQ(Q,JSON.stringify(X,null,Z?2:void 0))}var o=()=>{};import{AsyncLocalStorage as HQ}from"async_hooks";import{spawnSync as OQ}from"child_process";import{createHash as qQ}from"crypto";import{existsSync as x,mkdirSync as L,readFileSync as j,writeFileSync as _}from"fs";import{homedir as P}from"os";import{basename as jQ,join as M,parse as _Q,resolve as v}from"path";function V(){return process.env.BEACON_HOME||M(P(),".beacon")}function D(){return M(V(),"workspaces.json")}function U(Q){return qQ("sha256").update(Q).digest("hex").slice(0,12)}function E(Q=process.cwd()){let X=OQ("git",["rev-parse","--show-toplevel"],{cwd:Q,stdio:["ignore","pipe","ignore"]});if(X.status===0){let Z=X.stdout?.toString().trim();if(Z)return Z}return Q}function f(Q){let X=v(Q);return X!==v(P())&&X!==_Q(X).root}function S(){return M(V(),"deleted.json")}function W(){try{let Q=JSON.parse(j(S(),"utf8"));return Array.isArray(Q)?Q:[]}catch{return[]}}function y(Q){L(V(),{recursive:!0}),_(S(),JSON.stringify(Q,null,2))}function k(Q){return W().includes(Q)}function CX(Q){let X=W();if(!X.includes(Q))y([...X,Q])}function DQ(Q){let X=W();if(X.includes(Q))y(X.filter((Z)=>Z!==Q))}function z(Q){return M(V(),Q)}function EQ(Q){return`file:${M(z(Q),"db.sqlite")}`}function B(){try{let Q=JSON.parse(j(D(),"utf8"));return Array.isArray(Q)?Q:[]}catch{return[]}}function T(Q){L(V(),{recursive:!0}),_(D(),JSON.stringify(Q,null,2))}function w(){return B().sort((Q,X)=>X.lastOpenedAt.localeCompare(Q.lastOpenedAt))}function N(Q){return B().find((X)=>X.id===Q)??null}function b(Q,X,Z=new Date().toISOString()){if(!f(Q))throw Error(`beacon: refusing to register a non-repo path as a workspace: ${Q}`);let J=U(Q);if(k(J))throw Error(`beacon: workspace ${J} (${Q}) was deleted \u2014 run \`beacon\` or /beacon-init to re-add it`);let $=B(),Y=$.find((H)=>H.id===J),G={id:J,path:Q,name:X||Y?.name||jQ(Q),lastOpenedAt:Z},K=[G,...$.filter((H)=>H.id!==J)];return L(z(J),{recursive:!0}),T(K),G}function HX(Q,X){return DQ(U(Q)),b(Q,X)}function OX(Q,X=new Date().toISOString()){let Z=B(),J=Z.find(($)=>$.id===Q);if(!J)return;J.lastOpenedAt=X,T(Z)}function qX(Q){if(T(B().filter((X)=>X.id!==Q)),R()===Q)WQ(w()[0]?.id??null)}function g(){return M(V(),"active")}function R(){try{return j(g(),"utf8").trim()||null}catch{return null}}function WQ(Q){L(V(),{recursive:!0}),_(g(),Q??"")}function jX(){let Q=R();return Q?N(Q):null}function _X(){let Q=RQ()??R();return Q?N(Q):null}function DX(Q){return N(Q)?.path??null}function EX(){return x(D())}var m="beacon_ws";function h(Q,X){let Z=Q.headers.get("cookie");if(!Z)return null;for(let J of Z.split(";")){let $=J.indexOf("=");if($===-1)continue;if(J.slice(0,$).trim()===X)return decodeURIComponent(J.slice($+1).trim())}return null}function WX(Q){let X=Q.headers.get("x-beacon-workspace");if(X&&N(X))return X;let Z=h(Q,m);if(Z&&N(Z))return Z;return TQ()}function TQ(){let Q=w();return Q.length===1?Q[0].id:null}var p="x-beacon-workspace-path";function c(Q=process.cwd()){let X=E(Q);return{"x-beacon-workspace":U(X),[p]:X}}async function TX(Q){let X=Q.headers.get("x-beacon-workspace");if(X&&N(X))return X;let Z=Q.headers.get(p);if(Z&&f(Z)&&!k(U(Z))&&(!X||U(Z)===X)){let $=b(Z);return await AQ($.id),$.id}let J=h(Q,m);if(J&&N(J))return J;return null}var l=new HQ;function RX(Q,X){return Q?l.run(Q,X):X()}function RQ(){return l.getStore()??null}var q=new Set;function AX(Q){q.delete(M(z(Q),"db.sqlite"))}async function AQ(Q){let X=z(Q),Z=M(X,"db.sqlite"),J=x(Z);if(J&&q.has(Z))return{ok:!0,created:!1,migrated:!1};try{L(X,{recursive:!0});let{provisionDb:$}=await F().then(() => u),Y=await $(EQ(Q));return q.add(Z),{ok:!0,created:!J,migrated:J&&Y.migrated}}catch($){return{ok:!1,created:!1,migrated:!1,error:$ instanceof Error?$.message:String($)}}}import{connect as IQ}from"net";var d=4319;function uQ(Q,X,Z=400){return new Promise((J)=>{let $=IQ({host:Q,port:X}),Y=!1,G=(K)=>{if(Y)return;Y=!0,$.destroy(),J(K)};$.once("connect",()=>G(!0)),$.once("error",()=>G(!1)),$.setTimeout(Z,()=>G(!1))})}async function FQ(Q){for(let X of["127.0.0.1","::1"])if(await uQ(X,Q))return!1;return!0}async function FX(Q,X=20){for(let Z=Q;Z<Q+X;Z++)if(await FQ(Z))return Z;return Q}o();import{readFileSync as kQ}from"fs";import{join as wQ}from"path";var bQ=43200000;function gQ(Q,X){let Z={};for(let[J,$]of Object.entries(Q?.sessions??{}))if(X.now-$.ts<bQ)Z[J]=$;return Z[X.sessionId]={state:X.state,terminalId:X.terminalId,ts:X.now,cwd:X.cwd},{sessions:Z}}function s(Q){return wQ(z(Q),"agent-status.json")}function mQ(Q){try{return JSON.parse(kQ(s(Q),"utf8"))}catch{return null}}function i(Q,X,Z){try{if(!X)return;let J=U(E(Q)),$=process.env.BEACON_TERMINAL_ID||null,Y=gQ(mQ(J),{sessionId:X,state:Z,terminalId:$,cwd:Q,now:Date.now()});n(s(J),Y)}catch{}}import{closeSync as hQ,fstatSync as pQ,openSync as cQ,readSync as lQ}from"fs";function dQ(Q,X,Z){let J=cQ(Q,"r");try{let $=pQ(J).size,Y=X<0?Math.max(0,$+X):Math.min(X,$),G=Math.min(Z,$-Y);if(G<=0)return"";let K=Buffer.alloc(G);return lQ(J,K,0,G,Y),K.toString("utf8")}finally{hQ(J)}}var r=(Q,X)=>dQ(Q,-X,X);var nQ=[/\bshould i (go ahead|proceed|start|begin|continue|implement|build|kick)\b/i,/\b(want|do you want|would you like) me to (go ahead|proceed|start|begin|continue|implement|build|kick|do)\b/i,/\bshall i (proceed|start|begin|continue|implement|build|go)\b/i,/\bdoes (this|that|the plan|the approach|it) (look|sound) (right|good|ok|okay|fine)\b/i,/\b(looks?|sounds?) (right|good|fine) to you\b/i,/\blet me know (if|what|how|whether|once|when)\b/i,/\bbefore i (go|start|begin|implement|proceed|dive|write|send|build|continue|move|ship)\b/i,/\b(ready|good) to (proceed|implement|start|build|go)\b/i,/\b(things?|couple|two|a few)\b[^.?!]*\bto confirm\b/i,/\bto confirm[:?]/i,/\bif (this|that|it) looks (right|good|ok|okay)\b/i,/\bwaiting (for|on) your (approval|go-?ahead|sign-?off|ok|review|decision)\b/i,/\b(approve|green-?light|sign off on) (this|the plan|the approach|it)\b/i];function oQ(Q){if(!Q||!Q.trim())return!1;return nQ.some((X)=>X.test(Q))}function sQ(Q){if(typeof Q==="string")return Q;if(Array.isArray(Q))return Q.filter((X)=>(X?.type==="text"||X?.type==="output_text")&&typeof X.text==="string").map((X)=>X.text).join(`
4
+ `).trim();return""}function iQ(Q){let X=Q.split(`
5
+ `);for(let Z=X.length-1;Z>=0;Z--){let J=X[Z].trim();if(!J)continue;let $;try{$=JSON.parse(J)}catch{continue}let Y=$.message??$.payload??$;if((Y.role??$.type)!=="assistant")continue;return sQ(Y.content)}return""}function rQ(Q){let X=Q.split(/\n\s*\n/).map((Z)=>Z.trim()).filter(Boolean);return X.length?X[X.length-1]:""}function a(Q){return oQ(rQ(iQ(Q)))}import{readFileSync as aQ}from"fs";import{join as tQ}from"path";function eQ(){try{return JSON.parse(aQ(tQ(V(),"server.json"),"utf8"))}catch{return null}}function t(){if(process.env.BEACON_URL)return process.env.BEACON_URL;return`http://localhost:${eQ()?.port||process.env.PORT||d}`}var QX="It looks like you ended your turn asking the user to approve a plan or decide how to "+"proceed \u2014 in prose. In this project, plans are reviewed on Beacon's /plan canvas, not in the "+"terminal. Present it through Beacon instead: call the `beacon_present_plan` MCP tool with your plan as markdown (embed a ```beacon block for any tables/endpoints/features). It opens /plan and BLOCKS until the user approves, discards, or leaves feedback, then returns their verdict. If this was NOT a plan (just a quick question), ignore this and continue.",XX=65536,e="";for await(let Q of process.stdin)e+=Q;try{let Q=JSON.parse(e||"{}");if(Q.stop_hook_active)process.exit(0);let X=[];try{let J=typeof Q.session_id==="string"?Q.session_id:"",$=await fetch(`${t()}/api/changes/comment/claim?session=${encodeURIComponent(J)}`,{method:"POST",headers:c(typeof Q.cwd==="string"?Q.cwd:void 0),signal:AbortSignal.timeout(2500)}).catch(()=>null),Y=$?.ok?(await $.json().catch(()=>null))?.additionalContext:"";if(Y&&Y.trim())X.push(Y)}catch{}let Z=Q.transcript_path;if(typeof Z==="string"&&Z)try{if(a(r(Z,XX)))X.push(QX)}catch{}if(X.length)process.stdout.write(JSON.stringify({decision:"block",reason:X.join(`
6
6
 
7
7
  ---
8
8
 
9
- `)}))}catch{}process.exit(0);
9
+ `)}));i(typeof Q.cwd==="string"?Q.cwd:process.cwd(),typeof Q.session_id==="string"?Q.session_id:"",X.length?"working":"done")}catch{}process.exit(0);