trybeacon 0.1.91 → 0.1.92

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 (96) 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 +20 -20
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/server/app/@modal/(.)settings/page_client-reference-manifest.js +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +1 -1
  18. package/.next/server/app/_not-found.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  25. package/.next/server/app/api/context/route.js +1 -1
  26. package/.next/server/app/api/ingest/route.js +1 -1
  27. package/.next/server/app/api/plan/approve/route.js +1 -1
  28. package/.next/server/app/api/share/create/route.js +1 -1
  29. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  30. package/.next/server/app/docs.html +1 -1
  31. package/.next/server/app/docs.rsc +1 -1
  32. package/.next/server/app/docs.segments/@modal/__DEFAULT__.segment.rsc +1 -1
  33. package/.next/server/app/docs.segments/_full.segment.rsc +1 -1
  34. package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/docs.segments/_index.segment.rsc +1 -1
  36. package/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
  37. package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  38. package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  39. package/.next/server/app/help/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/help.html +1 -1
  41. package/.next/server/app/help.rsc +1 -1
  42. package/.next/server/app/help.segments/@modal/__DEFAULT__.segment.rsc +1 -1
  43. package/.next/server/app/help.segments/_full.segment.rsc +1 -1
  44. package/.next/server/app/help.segments/_head.segment.rsc +1 -1
  45. package/.next/server/app/help.segments/_index.segment.rsc +1 -1
  46. package/.next/server/app/help.segments/_tree.segment.rsc +1 -1
  47. package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +1 -1
  48. package/.next/server/app/help.segments/help.segment.rsc +1 -1
  49. package/.next/server/app/index.html +1 -1
  50. package/.next/server/app/index.rsc +1 -1
  51. package/.next/server/app/index.segments/@modal/__DEFAULT__.segment.rsc +1 -1
  52. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  53. package/.next/server/app/index.segments/_full.segment.rsc +1 -1
  54. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  55. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  56. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  57. package/.next/server/app/learn/page.js +3 -3
  58. package/.next/server/app/learn/page.js.nft.json +1 -1
  59. package/.next/server/app/learn/page_client-reference-manifest.js +1 -1
  60. package/.next/server/app/map/page.js +2 -2
  61. package/.next/server/app/map/page.js.nft.json +1 -1
  62. package/.next/server/app/map/page_client-reference-manifest.js +1 -1
  63. package/.next/server/app/page_client-reference-manifest.js +1 -1
  64. package/.next/server/app/parked/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/plan/page.js +2 -2
  66. package/.next/server/app/plan/page.js.nft.json +1 -1
  67. package/.next/server/app/plan/page_client-reference-manifest.js +1 -1
  68. package/.next/server/app/s/[token]/page.js +2 -2
  69. package/.next/server/app/s/[token]/page.js.nft.json +1 -1
  70. package/.next/server/app/s/[token]/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  72. package/.next/server/app-paths-manifest.json +20 -20
  73. package/.next/server/chunks/1130.js +1 -1
  74. package/.next/server/chunks/2031.js +1 -1
  75. package/.next/server/chunks/2644.js +1 -0
  76. package/.next/server/chunks/8227.js +1 -1
  77. package/.next/server/middleware-build-manifest.js +1 -1
  78. package/.next/server/pages/404.html +1 -1
  79. package/.next/server/pages/500.html +1 -1
  80. package/.next/server/server-reference-manifest.js +1 -1
  81. package/.next/server/server-reference-manifest.json +1 -1
  82. package/.next/static/chunks/8653-27d42df759159788.js +1 -0
  83. package/.next/static/chunks/app/learn/page-53c201dbfd759610.js +7 -0
  84. package/.next/static/chunks/app/map/page-147befd24a412e04.js +1 -0
  85. package/.next/static/chunks/app/plan/{page-8e2a2edfb8fe69c5.js → page-a35f98b97c750679.js} +2 -2
  86. package/.next/static/chunks/app/s/[token]/page-db7be755d871820e.js +1 -0
  87. package/.next/trace +47 -47
  88. package/.next/trace-build +1 -1
  89. package/package.json +1 -1
  90. package/.next/server/chunks/799.js +0 -1
  91. package/.next/static/chunks/8907-f1d97713a336fc2b.js +0 -1
  92. package/.next/static/chunks/app/learn/page-ba0ec2cba32bd4e1.js +0 -7
  93. package/.next/static/chunks/app/map/page-a07e21cd94bae873.js +0 -1
  94. package/.next/static/chunks/app/s/[token]/page-b4dc768d9d1c6e29.js +0 -1
  95. /package/.next/static/{5WK9Cj2xVeIioVVqODVpo → Ced4ZzirE-x-xhZEP02do}/_buildManifest.js +0 -0
  96. /package/.next/static/{5WK9Cj2xVeIioVVqODVpo → Ced4ZzirE-x-xhZEP02do}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=1130,exports.ids=[1130],exports.modules={13560:(a,b,c)=>{c.d(b,{$Y:()=>k,Kq:()=>h,gY:()=>j,hj:()=>m,tI:()=>l});var d=c(44046);let e=d.k5(["ROADMAP","ARCHITECTURE"]),f=d.k5(["FEATURE","BUG"]),g=d.k5(["frontend","backend","fullstack"]),h=d.k5(["user","agent"]),i=d.k5(["PENDING","IN_PROGRESS","DONE","BLOCKED","CANCELLED","DEPRIORITIZED","KEEP","REBUILD","REPLACE","DROP"]);d.k5(["DEPENDS","CONTAINS","RELATES","REPLACES"]);let j=d.Ik({id:d.Yj().trim().min(1).max(64).optional(),view:e,kind:f.optional(),title:d.Yj().trim().min(1).max(200),cluster:d.Yj().trim().max(64).nullish(),layer:g.nullish(),role:d.Yj().trim().max(500).nullish(),plain:d.Yj().trim().max(2e4).nullish(),parentId:d.Yj().nullish(),status:i.optional(),priority:d.ai().int().min(0).max(3).optional(),x:d.ai().optional(),y:d.ai().optional(),sourceRef:d.Yj().trim().max(300).nullish()}),k=d.Ik({title:d.Yj().trim().min(1).max(200).optional(),kind:f.optional(),role:d.Yj().trim().max(500).nullish(),plain:d.Yj().trim().max(2e4).nullish(),cluster:d.Yj().trim().max(64).nullish(),layer:g.nullish(),status:i.optional(),priority:d.ai().int().min(0).max(3).optional(),sourceRef:d.Yj().trim().max(300).nullish()}),l=d.Ik({x:d.ai(),y:d.ai()}),m=d.Ik({fromId:d.Yj().min(1),toId:d.Yj().min(1),kind:d.k5(["DEPENDS","RELATES","REPLACES"]).optional(),label:d.Yj().trim().max(80).nullish(),sourceHandle:d.Yj().trim().max(16).nullish(),targetHandle:d.Yj().trim().max(16).nullish()})},29833:(a,b,c)=>{c.d(b,{mk:()=>i});let d=new Set(["a","an","the","of","for","to","and","or","in","on","with","via","by","using","use","add","adds","support","implement","implementation","feature","new","build","create","o","os","as","um","uma","de","da","do","das","dos","para","por","com","e","ou","no","na","nos","nas","ao","aos","adicionar","implementar","suporte","suportar","nova","novo","funcionalidade","usar","usando","criar"]);function e(a){return a.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}function f(a){return e(a).split(" ").filter(a=>a&&!d.has(a))}function g(a,b){if(!a.size||!b.size)return 0;let c=0;for(let d of a)b.has(d)&&c++;return 2*c/(a.size+b.size)}function h(a){let b=e(a).replace(/ /g,""),c=new Set;for(let a=0;a<b.length-1;a++)c.add(b.slice(a,a+2));return c}function i(a,b,c={}){let d=c.confident??.72,j=c.consider??.5,k=c.margin??.1,l=b.map(b=>{var c,d;let i,j;return{...b,score:Math.round(100*(c=a,d=b.title,i=e(c),j=e(d),i&&j?i===j?1:Math.min(1,.7*g(new Set(f(c)),new Set(f(d)))+.4*g(h(c),h(d))):0))/100}}).sort((a,b)=>b.score-a.score),m=l[0];if(!m||m.score<j)return{best:null,candidates:[]};let n=l[1]?.score??0,o=1===l.length||m.score-n>=k;return m.score>=d&&o?{best:m,candidates:[]}:{best:null,candidates:l.filter(a=>a.score>=j).slice(0,4)}}},38356:(a,b,c)=>{c.d(b,{AG:()=>i,Ey:()=>j,Kn:()=>g,eL:()=>f,oA:()=>h});var d=c(32753),e=c(29833);function f(a,b){let c=a=>(a.cluster??a.category??a.domain??"").trim().toLowerCase(),e=c(b);if(e&&e!==c(a))return!1;let f=(0,d.jR)(b.layer??null);return!f||f===(0,d.jR)(a.layer??null)}function g(a,b){let c=b?.requireLayer??!1,e=a.map(a=>{let b=[],e=a.cluster??a.category??a.domain??null;return e&&e.trim()||b.push("category"),null==a.priority&&b.push("priority"),c&&!(0,d.jR)(a.layer)&&b.push("layer"),b.length?` • "${a.title?.trim()||"(untitled)"}" — missing ${b.join(" + ")}`:null}).filter(a=>null!==a);return 0===e.length?null:"⛔ Every roadmap feature needs a category AND a priority — they drive grouping and ordering on the board, and the user shouldn't have to add them by hand."+(c?' This workspace has a frontend surface, so every feature must also carry `layer`: "frontend" | "backend" | "fullstack" — which side of the stack the work lands on.':"")+" Missing:\n"+e.join("\n")+"\n\nRe-present with each feature carrying its category as `category` (or `cluster` — both work; e.g. AUTH, SEARCH, DATA, INTEL, BILLING …) and `priority` (0 = P0 critical, 1 = P1 high, 2 = P2 medium, 3 = P3 low)."+(c?" Set `layer` on EVERY feature too.":"")+" Don't rely on defaults."}function h(a){let b=(a.title??"").trim();if(!b)return"⛔ A feature needs a non-empty title.";let c=(a.category??"").trim();if(!c){let c=function(a){let b=new Set;for(let c of a){let a=(c.cluster??"").trim();a&&b.add(a)}return[...b].sort()}(a.existing),d=c.length?` Reuse an existing category where it fits: ${c.join(", ")}.`:"";return`⛔ Feature "${b}" has no category. Every roadmap feature needs one — it drives grouping and color on the board.${d} Pass it as \`category\` (e.g. AUTH, SEARCH, DATA, INTEL, BILLING, INFRA …); don't rely on a default.`}if(a.requireLayer&&!(0,d.jR)(a.layer))return`⛔ Feature "${b}" has no layer. This workspace has a frontend surface, so every roadmap feature must say which side of the stack it lands on. Pass it as \`layer\`: "frontend" | "backend" | "fullstack".`;let g=a.existing.filter(b=>f(b,{category:c,layer:a.layer})),h=(0,e.mk)(b,g.map(a=>({id:a.id,title:a.title})));if(h.best){let a=g.find(a=>a.id===h.best.id),c=a?.status?` (${a.status})`:"";return`⛔ "${b}" already exists as the feature "${a?.title??h.best.title}"${c}. Don't create a duplicate — start it with \`beacon_feature({ action: "start", id })\`, add sub-tasks with \`beacon_feature({ action: "subtasks" })\`, or finish it with \`beacon_feature({ action: "done" })\`.`}return null}function i(a,b){let c=a.map(a=>{let c=b.filter(b=>f(b,a)),d=(0,e.mk)(a.title??"",c.map(a=>({id:a.id,title:a.title})));return d.best?{title:a.title,hit:c.find(a=>a.id===d.best.id)}:null}).filter(a=>null!==a);return c.length?"⛔ These proposed features already exist on the roadmap — reuse them instead of creating duplicates:\n"+c.map(a=>` • "${a.title}" → existing "${a.hit.title}"${a.hit.status?` (${a.hit.status})`:""}`).join("\n")+'\n\nDrop the duplicate(s) from the plan; to add work to an existing feature, ship sub-tasks or update it via `beacon_feature({ action: "done" })`. Keep only genuinely new features in the proposal.':null}function j(a,b){let c=(a??"").trim();if(!c)return null;let d=(0,e.mk)(c,b);if(d.best)return null;let f=d.candidates.length?` Did you mean: ${d.candidates.map(a=>`"${a.title}"`).join(", ")}?`:"";return`⛔ front "${c}" doesn't match an existing feature.${f} \`front\` nests a feature UNDER an existing parent feature — it is NOT a domain tag. If "${c}" is a domain, pass it as \`category\` instead. If it's a real umbrella feature, create it first via beacon_propose_plan.`}},40377:(a,b,c)=>{c.d(b,{U9:()=>e});var d=c(91430);function e(a){return(0,d.ll)`count(${a||d.ll.raw("*")})`.mapWith(Number)}},70299:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AS:()=>H,N5:()=>I,Nh:()=>A,Ol:()=>K,Pq:()=>D,hL:()=>J,nV:()=>y,r$:()=>C,y2:()=>E});var e=c(44046),f=c(34216),g=c(40377),h=c(56727),i=c(30046),j=c(19734),k=c(49565),l=c(29833),m=c(38356),n=c(32753),o=c(72595),p=c(71584),q=c(45775),r=c(72967),s=c(7903),t=c(89908),u=c(45301),v=c(76223),w=a([h,j,k,o,t,v]);async function x(a){await (0,v.Z)({currentFeatureId:a})}async function y(){let a=await h.db.query.node.findMany({where:(a,{and:b,eq:c,ne:d})=>b(c(a.view,"ROADMAP"),d(a.source,"DRAFT")),orderBy:(a,{asc:b})=>b(a.createdAt)}),b=a=>({id:a.id,title:a.title,status:a.status,category:a.cluster,priority:a.priority,layer:a.layer,kind:a.kind});return{fronts:a.filter(a=>!a.parentId).map(c=>({...b(c),tasks:a.filter(a=>a.parentId===c.id).map(a=>({...b(a),workingOn:"IN_PROGRESS"===a.status}))}))}}async function z(a,b){await h.db.update(i.node).set({status:b}).where((0,f.eq)(i.node.id,a)),await A(a),await (0,j.Bx)()}[h,j,k,o,t,v]=w.then?(await w)():w;let L=new Set(["DONE","CANCELLED","DEPRIORITIZED"]),M=new Set(["IN_PROGRESS","BLOCKED"]),N=new Set(["CANCELLED","DEPRIORITIZED"]);async function A(a){let b=new Set,c=a;for(;!b.has(c);){var d;b.add(c);let a=await h.db.query.node.findFirst({where:(a,{eq:b})=>b(a.id,c),columns:{parentId:!0,view:!0}});if(!a?.parentId||"ROADMAP"!==a.view)return;let e=await h.db.query.node.findFirst({where:(b,{eq:c})=>c(b.id,a.parentId),columns:{id:!0,status:!0,view:!0}});if(!e||"ROADMAP"!==e.view||N.has(e.status))return;let g=(d=(await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.parentId,e.id),columns:{status:!0}})).map(a=>a.status)).length?d.every(a=>L.has(a))?"DONE":d.some(a=>M.has(a))?"IN_PROGRESS":"PENDING":"PENDING";if(e.status===g)return;await h.db.update(i.node).set({status:g}).where((0,f.eq)(i.node.id,e.id)),c=e.id}}let O=new Set(["PENDING","IN_PROGRESS"]);async function B(a){let b=[],c=[],d=new Set([a]),e=[a];for(;e.length;){let a=await h.db.query.node.findMany({where:(a,{and:b,eq:c,inArray:d})=>b(d(a.parentId,e),c(a.view,"ROADMAP")),columns:{id:!0,title:!0,status:!0}});for(let f of(e=[],a))d.has(f.id)||(d.add(f.id),e.push(f.id),O.has(f.status)?b.push(f.id):"BLOCKED"===f.status&&c.push(f))}return b.length&&await h.db.update(i.node).set({status:"DONE"}).where((0,f.RV)(i.node.id,b)),{completed:b.length,blocked:c}}async function C(a){let b,c="ROADMAP"===a?"roadmap":"architecture",d=s.zP[c],e=(0,s.VE)(c);if(e.sig===d)return;let g=(await h.db.query.node.findMany({where:(b,{eq:c})=>c(b.view,a),orderBy:(a,{asc:b})=>b(a.createdAt),columns:{id:!0,parentId:!0,source:!0,cluster:!0,status:!0,priority:!0,title:!0,role:!0,x:!0,y:!0}})).filter(a=>"DRAFT"!==a.source);if(g.length<2)return;let j=null;if("ROADMAP"===a){let a="status"===e.arrangedBy||"priority"===e.arrangedBy?e.arrangedBy:"cluster";j=a,b=(0,q.VI)(g.map(a=>({id:a.id,parentId:a.parentId,cluster:a.cluster,status:a.status,priority:a.priority,title:a.title,role:a.role})),a)}else{let a=g.map(a=>a.id),c=await h.db.query.edge.findMany({where:(b,{and:c,eq:d})=>c(d(b.kind,"DEPENDS"),(0,f.RV)(b.fromId,a),(0,f.RV)(b.toId,a)),columns:{fromId:!0,toId:!0}});b=(0,r.to)(g.map(a=>({id:a.id,group:(a.cluster??"").trim()||"—"})),c)}let k=[];for(let a of g){let c=b.get(a.id);c&&(Math.round(c.x)!==Math.round(a.x)||Math.round(c.y)!==Math.round(a.y))&&k.push(h.db.update(i.node).set({x:c.x,y:c.y}).where((0,f.eq)(i.node.id,a.id)))}await Promise.all(k),(0,s.qT)(c,j?{sig:d,arrangedBy:j}:{sig:d})}async function D(a){let b=a.title.trim();if(!b)throw Error("title required");let c=a.flagExisting??!0,d=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ROADMAP")});if(a.id){let b=d.find(b=>b.id===a.id);if(b)return c?(await z(b.id,"IN_PROGRESS"),await x(b.id),{action:"flagged",id:b.id,title:b.title,via:"id"}):{action:"exists",id:b.id,title:b.title,status:b.status}}let e=c?d:d.filter(b=>(0,m.eL)(b,{cluster:a.cluster,layer:a.layer})),{best:f,candidates:g}=(0,l.mk)(b,e.map(a=>({id:a.id,title:a.title})));if(f){if(!c){let a=d.find(a=>a.id===f.id)?.status??"PENDING";return{action:"exists",id:f.id,title:f.title,status:a}}return await z(f.id,"IN_PROGRESS"),await x(f.id),{action:"flagged",id:f.id,title:f.title,via:"match",score:f.score}}if(g.length)return{action:"ambiguous",candidates:g};let k=d.filter(a=>!a.parentId),q=a.front?.trim()||"",r=q?(0,m.Ey)(q,k.map(a=>({id:a.id,title:a.title}))):null;if(r)return{action:"rejected",message:r};let s=null,t=null,u=null,v=null;if(q){let a=(0,l.mk)(q,k.map(a=>({id:a.id,title:a.title}))).best;s=a.id,t=a.title;let b=d.find(b=>b.id===a.id);u=b?.cluster??null,v=b?.layer??null}let w=(a.cluster?.trim()||u)??null,y=(0,n.jR)(a.layer)??(0,n.jR)(v),B=!s&&await (0,o.jZ)(),C=(0,m.oA)({title:b,category:w,layer:y,requireLayer:B,existing:d.map(a=>({id:a.id,title:a.title,cluster:a.cluster,status:a.status}))});if(C)return{action:"rejected",message:C};let D=s?d.filter(a=>a.parentId===s).length:0,E=a=>(a??"").trim()||"—",F=s?(0,p.B)(d.map(a=>({x:a.x,y:a.y})),{x:k.find(a=>a.id===s)?.x??0,y:160+110*D}):(0,p.E)(d.filter(a=>!a.parentId&&E(a.cluster)===E(w)).map(a=>({x:a.x,y:a.y})),d.map(a=>({x:a.x,y:a.y}))),G=(a.status??"").trim().toLowerCase(),[H]=await h.db.insert(i.node).values({view:"ROADMAP",kind:a.kind?.trim().toUpperCase()==="BUG"?"BUG":"FEATURE",title:b,plain:a.detail??null,cluster:w,layer:y,priority:"number"==typeof a.priority?a.priority:void 0,status:"backlog"===G||"pending"===G?"PENDING":"IN_PROGRESS",source:"SESSION",parentId:s,x:F.x,y:F.y}).returning();return await A(H.id),await (0,j.Bx)(),await x(H.id),{action:"created",id:H.id,title:b,front:t}}async function E(a){let b=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ROADMAP")}),c=async a=>{let b=await B(a);return await z(a,"DONE"),await (0,k.q)(),{ok:!0,id:a,subtasksCompleted:b.completed||void 0,subtasksBlocked:b.blocked.length?b.blocked:void 0}};if(a.id){let d=b.find(b=>b.id===a.id);if(d)return c(d.id)}if(!a.title)return{ok:!1};let{best:d,candidates:e}=(0,l.mk)(a.title,b.map(a=>({id:a.id,title:a.title})));return d?c(d.id):{ok:!1,candidates:e.length?e:void 0}}function F(a){let b=a.trim(),c=(0,u.jv)();return b.startsWith(c)&&(b=b.slice(c.length)),b.replace(/^[./]+/,"").trim()}let P=new Set(["KEEP","REBUILD","REPLACE","DROP"]),Q=e.Ik({title:e.Yj().trim().min(1),domain:e.Yj().trim().min(1),role:e.Yj().nullish(),plain:e.Yj().nullish(),layer:e.Yj().nullish(),status:e.Yj().nullish(),files:e.YO(e.Yj()).optional(),depends:e.YO(e.Yj()).optional(),bugs:e.YO(e.Ik({note:e.Yj().trim().min(1).max(2e3)})).optional()});async function G(a){let b=e.YO(Q).parse(a),c=(a,b)=>`${a.trim().toLowerCase()} ${(b??"").trim().toLowerCase()}`,d=new Map;for(let a of b)d.set(c(a.title,a.domain),a);let g=Array.from(d.values());if(!g.length)return 0;let j=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ARCHITECTURE")}),k=new Map(j.map(a=>[c(a.title,a.cluster),a])),l=new Map(j.map(a=>[a.title.toLowerCase(),a.id])),m=j.map(a=>({x:a.x,y:a.y,domain:(a.cluster??"").trim()||"—"}));for(let a of g){let b=c(a.title,a.domain),d=a.status&&P.has(a.status)?a.status:"KEEP",e=k.get(b);if(e)await h.db.update(i.node).set({cluster:a.domain,layer:(0,n.jR)(a.layer)??e.layer,role:a.role??e.role,plain:a.plain??e.plain,status:d}).where((0,f.eq)(i.node.id,e.id)),a.files?.length&&(await h.db.delete(i.nodeFile).where((0,f.eq)(i.nodeFile.nodeId,e.id)),await h.db.insert(i.nodeFile).values(Array.from(new Set(a.files)).map(a=>({nodeId:e.id,path:a}))));else{let b=a.domain.trim()||"—",{x:c,y:e}=(0,p.E)(m.filter(a=>a.domain===b),m);m.push({x:c,y:e,domain:b});let[f]=await h.db.insert(i.node).values({view:"ARCHITECTURE",source:"MANUAL",cluster:a.domain,layer:(0,n.jR)(a.layer),title:a.title,role:a.role??null,plain:a.plain??null,status:d,x:c,y:e}).returning();a.files?.length&&await h.db.insert(i.nodeFile).values(Array.from(new Set(a.files)).map(a=>({nodeId:f.id,path:a}))),l.set(a.title.toLowerCase(),f.id)}}for(let a of g){let b=l.get(a.title.toLowerCase());if(b)for(let c of a.depends??[]){let a=l.get(c.trim().toLowerCase());a&&a!==b&&(await h.db.query.edge.findFirst({where:(c,{and:d,eq:e})=>d(e(c.fromId,b),e(c.toId,a),e(c.kind,"DEPENDS"))})||await h.db.insert(i.edge).values({fromId:b,toId:a,kind:"DEPENDS"}).catch(()=>{}))}}for(let a of g){if(!a.bugs?.length)continue;let b=l.get(a.title.toLowerCase());if(b)for(let c of a.bugs)await h.db.query.bugFlag.findFirst({where:(a,{and:d,eq:e,isNull:f})=>d(e(a.nodeId,b),e(a.note,c.note),f(a.resolvedAt))})||await h.db.insert(i.bugFlag).values({nodeId:b,by:"agent",note:c.note})}return g.length}async function H(a){let b=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ROADMAP")}),c=a.id?b.find(b=>b.id===a.id):void 0;if(!c&&a.title){let{best:d,candidates:e}=(0,l.mk)(a.title,b.map(a=>({id:a.id,title:a.title})));if(d)c=b.find(a=>a.id===d.id);else if(e.length)return{ok:!1,candidates:e}}if(!c)return{ok:!1};await h.db.update(i.node).set({plain:a.description,status:"DONE"}).where((0,f.eq)(i.node.id,c.id));let d=await B(c.id);if(await A(c.id),await (0,k.q)(),a.files?.length)for(let b of Array.from(new Set(a.files.map(F).filter(Boolean))))await h.db.insert(i.nodeFile).values({nodeId:c.id,path:b}).onConflictDoNothing({target:[i.nodeFile.nodeId,i.nodeFile.path]});return await h.db.update(i.appSetting).set({currentFeatureId:null}).where((0,f.eq)(i.appSetting.currentFeatureId,c.id)),a.architecture?.length&&await G(a.architecture),await (0,j.Bx)(),{ok:!0,id:c.id,subtasksCompleted:d.completed||void 0,subtasksBlocked:d.blocked.length?d.blocked:void 0}}async function I(a){let b=[];for(let c of a){let a=await H(c);b.push({...a,title:c.title})}return{results:b}}async function J(a){let b=Array.from(new Set((a.files??[]).map(F).filter(Boolean))),c=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ROADMAP")}),d=a.id?c.find(b=>b.id===a.id):void 0;if(!d&&a.title){let{best:b,candidates:e}=(0,l.mk)(a.title,c.map(a=>({id:a.id,title:a.title})));if(b)d=c.find(a=>a.id===b.id);else if(e.length)return{ok:!1,candidates:e}}if(!d)return{ok:!1};for(let a of b)await h.db.insert(i.nodeFile).values({nodeId:d.id,path:a}).onConflictDoNothing({target:[i.nodeFile.nodeId,i.nodeFile.path]});await (0,j.Bx)();let e=(await h.db.select({n:(0,g.U9)()}).from(i.nodeFile).where((0,f.eq)(i.nodeFile.nodeId,d.id)))[0].n;return{ok:!0,id:d.id,count:e}}async function K(a){let b,c=a.items.filter(a=>a.title.trim());if(!c.length)return{ok:!1,reason:"no_items"};if(a.parentId)b=await h.db.query.node.findFirst({where:(b,{eq:c})=>c(b.id,a.parentId)});else if(a.parentTitle&&a.parentTitle.trim()){let c=await h.db.query.node.findMany({where:(a,{isNull:b})=>b(a.parentId),columns:{id:!0,title:!0,cluster:!0,status:!0}}),{best:d,candidates:e}=(0,l.mk)(a.parentTitle.trim(),c.map(a=>({id:a.id,title:a.title,cluster:a.cluster,status:a.status})));if(d)b=await h.db.query.node.findFirst({where:(a,{eq:b})=>b(a.id,d.id)});else if(e.length)return{ok:!1,reason:"ambiguous",candidates:e}}if(!b)return{ok:!1,reason:"parent_not_found"};let d=b,e=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.parentId,d.id),columns:{id:!0,title:!0}}),f=c.filter(a=>(0,l.mk)(a.title.trim(),e).best);if(f.length)return{ok:!1,reason:"duplicate",message:`⛔ These sub-tasks already exist under "${d.title}": ${f.map(a=>`"${a.title.trim()}"`).join(", ")}. Drop the duplicates — only add genuinely new sub-tasks.`};let g=(await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,d.view),columns:{x:!0,y:!0}})).map(a=>({x:a.x,y:a.y})),i=[];for(let a=0;a<c.length;a++){let b=c[a],e=(0,p.B)(g,{x:d.x+240*a,y:d.y+200});g.push(e);let f=await (0,t.RM)({view:d.view,kind:b.kind?.trim().toUpperCase()==="BUG"?"BUG":"FEATURE",title:b.title.trim(),plain:b.plain??null,cluster:d.cluster??null,layer:(0,n.jR)(b.layer)??(0,n.jR)(d.layer),parentId:d.id,x:e.x,y:e.y});i.push({id:f.id,title:f.title})}return i.length&&await A(i[0].id),await (0,j.Bx)(),{ok:!0,parent:{id:d.id,title:d.title},created:i}}d()}catch(a){d(a)}})},71584:(a,b,c)=>{function d(a,b){let c={x:b.x,y:b.y};for(let b=0;b<100&&a.some(a=>200>Math.abs(c.x-a.x)&&150>Math.abs(c.y-a.y));b++)c.y+=150;return c}function e(a,b,c={}){let f=c.colW??320,g=c.rowH??150,h=c.maxCols??4,i=c.bandGap??90;if(0===a.length){if(0===b.length)return{x:0,y:0};let a=Math.max(...b.map(a=>a.y));return d(b,{x:0,y:a+g+i})}let j=Math.min(...a.map(a=>a.x)),k=Math.min(...a.map(a=>a.y)),l=a.map(a=>Math.max(0,Math.round((a.x-j)/f))),m=Math.min(h,Math.max(Math.max(...l)+1,Math.ceil(Math.sqrt(a.length+1)))),n=Array(m).fill(k-g);a.forEach((a,b)=>{let c=Math.min(l[b],m-1);n[c]=Math.max(n[c],a.y)});let o=0;for(let a=1;a<m;a++)n[a]<n[o]&&(o=a);return d(b,{x:j+o*f,y:n[o]+g})}c.d(b,{B:()=>d,E:()=>e})},76223:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Z:()=>i,t:()=>h});var e=c(56727),f=c(30046),g=a([e]);async function h(a=e.db){let[b]=await a.insert(f.appSetting).values({id:"singleton"}).onConflictDoUpdate({target:f.appSetting.id,set:{id:"singleton"}}).returning();return b}async function i(a,b=e.db){let[c]=await b.insert(f.appSetting).values({id:"singleton",...a}).onConflictDoUpdate({target:f.appSetting.id,set:a}).returning();return c}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},89908:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AC:()=>n,B2:()=>q,CB:()=>r,OK:()=>m,Qd:()=>l,RM:()=>k,jO:()=>o,k5:()=>p});var e=c(34216),f=c(56727),g=c(30046),h=c(70299),i=c(13560),j=a([f,h]);async function k(a){let b=i.gY.parse(a),c="ARCHITECTURE"===b.view?"REBUILD":"PENDING",[d]=await f.db.insert(g.node).values({...b.id?{id:b.id}:{},view:b.view,kind:b.kind??"FEATURE",title:b.title,cluster:b.cluster??null,layer:b.layer??null,role:b.role??null,plain:b.plain??null,parentId:b.parentId??null,status:b.status??c,priority:b.priority??2,x:b.x??0,y:b.y??0,sourceRef:b.sourceRef??null}).returning();return d}async function l(a){let b=i.hj.parse(a);if(b.fromId===b.toId)throw Error("Self-edge not allowed");let c=b.kind??"DEPENDS",d=await f.db.query.edge.findFirst({where:(a,{and:d,eq:e})=>d(e(a.fromId,b.fromId),e(a.toId,b.toId),e(a.kind,c))});if(d)return d;let[e]=await f.db.insert(g.edge).values({fromId:b.fromId,toId:b.toId,kind:c,label:b.label??null,sourceHandle:b.sourceHandle??null,targetHandle:b.targetHandle??null}).returning();return e}async function m(a,b){let c=i.$Y.parse(b),[d]=await f.db.update(g.node).set(c).where((0,e.eq)(g.node.id,a)).returning();return void 0!==c.status&&await (0,h.Nh)(a),d}async function n(a){let[b]=await f.db.delete(g.node).where((0,e.eq)(g.node.id,a)).returning();return b}async function o(a,b,c){let d=i.tI.parse({x:b,y:c}),[h]=await f.db.update(g.node).set(d).where((0,e.eq)(g.node.id,a)).returning();return h}async function p(a){return await Promise.all(a.map(a=>{let b=i.tI.parse({x:a.x,y:a.y});return f.db.update(g.node).set(b).where((0,e.eq)(g.node.id,a.id))})),a.length}async function q(a,b,c){let d=i.tI.parse({x:b,y:c}),[h]=await f.db.update(g.dbTable).set(d).where((0,e.eq)(g.dbTable.id,a)).returning();return h}async function r(a,b,c){let d=i.tI.parse({x:b,y:c}),[h]=await f.db.update(g.endpoint).set(d).where((0,e.eq)(g.endpoint.id,a)).returning();return h}[f,h]=j.then?(await j)():j,d()}catch(a){d(a)}})}};
1
+ "use strict";exports.id=1130,exports.ids=[1130],exports.modules={13560:(a,b,c)=>{c.d(b,{$Y:()=>k,Kq:()=>h,gY:()=>j,hj:()=>m,tI:()=>l});var d=c(44046);let e=d.k5(["ROADMAP","ARCHITECTURE"]),f=d.k5(["FEATURE","BUG"]),g=d.k5(["frontend","backend","fullstack"]),h=d.k5(["user","agent"]),i=d.k5(["PENDING","IN_PROGRESS","DONE","BLOCKED","CANCELLED","DEPRIORITIZED","KEEP","REBUILD","REPLACE","DROP"]);d.k5(["DEPENDS","CONTAINS","RELATES","REPLACES"]);let j=d.Ik({id:d.Yj().trim().min(1).max(64).optional(),view:e,kind:f.optional(),title:d.Yj().trim().min(1).max(200),cluster:d.Yj().trim().max(64).nullish(),layer:g.nullish(),role:d.Yj().trim().max(500).nullish(),plain:d.Yj().trim().max(2e4).nullish(),parentId:d.Yj().nullish(),status:i.optional(),priority:d.ai().int().min(0).max(3).optional(),x:d.ai().optional(),y:d.ai().optional(),sourceRef:d.Yj().trim().max(300).nullish()}),k=d.Ik({title:d.Yj().trim().min(1).max(200).optional(),kind:f.optional(),role:d.Yj().trim().max(500).nullish(),plain:d.Yj().trim().max(2e4).nullish(),cluster:d.Yj().trim().max(64).nullish(),layer:g.nullish(),status:i.optional(),priority:d.ai().int().min(0).max(3).optional(),sourceRef:d.Yj().trim().max(300).nullish()}),l=d.Ik({x:d.ai(),y:d.ai()}),m=d.Ik({fromId:d.Yj().min(1),toId:d.Yj().min(1),kind:d.k5(["DEPENDS","RELATES","REPLACES"]).optional(),label:d.Yj().trim().max(80).nullish(),sourceHandle:d.Yj().trim().max(16).nullish(),targetHandle:d.Yj().trim().max(16).nullish()})},14286:(a,b,c)=>{c.d(b,{$t:()=>f,IX:()=>i,Oh:()=>h,rT:()=>g});let d={completed:"DONE",canceled:"CANCELLED",started:"IN_PROGRESS",backlog:"PENDING",unstarted:"PENDING",triage:"PENDING"},e={1:0,2:1,3:2,4:3,0:2};function f(a){return a+1}function g(a){let b={state:{name:a.stateName,color:a.stateColor,type:a.stateType},team:{id:a.teamId,key:a.teamKey,name:a.teamName}};return a.projectId&&a.projectName&&(b.project={id:a.projectId,name:a.projectName}),a.milestoneId&&a.milestoneName&&(b.milestone={id:a.milestoneId,name:a.milestoneName}),b}function h(a){if(!a)return null;try{return JSON.parse(a)}catch{return null}}function i(a){return{title:a.title,plain:a.description??null,status:d[a.stateType]??"PENDING",priority:e[a.priority]??2,kind:a.labels.some(a=>"bug"===a.toLowerCase())?"BUG":"FEATURE",cluster:a.projectName??a.teamKey,source:"LINEAR",externalId:a.id,sourceRef:a.url,assigneeName:a.assigneeName??null,assigneeAvatarUrl:a.assigneeAvatarUrl??null,externalMeta:JSON.stringify(g(a))}}},29833:(a,b,c)=>{c.d(b,{mk:()=>i});let d=new Set(["a","an","the","of","for","to","and","or","in","on","with","via","by","using","use","add","adds","support","implement","implementation","feature","new","build","create","o","os","as","um","uma","de","da","do","das","dos","para","por","com","e","ou","no","na","nos","nas","ao","aos","adicionar","implementar","suporte","suportar","nova","novo","funcionalidade","usar","usando","criar"]);function e(a){return a.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}function f(a){return e(a).split(" ").filter(a=>a&&!d.has(a))}function g(a,b){if(!a.size||!b.size)return 0;let c=0;for(let d of a)b.has(d)&&c++;return 2*c/(a.size+b.size)}function h(a){let b=e(a).replace(/ /g,""),c=new Set;for(let a=0;a<b.length-1;a++)c.add(b.slice(a,a+2));return c}function i(a,b,c={}){let d=c.confident??.72,j=c.consider??.5,k=c.margin??.1,l=b.map(b=>{var c,d;let i,j;return{...b,score:Math.round(100*(c=a,d=b.title,i=e(c),j=e(d),i&&j?i===j?1:Math.min(1,.7*g(new Set(f(c)),new Set(f(d)))+.4*g(h(c),h(d))):0))/100}}).sort((a,b)=>b.score-a.score),m=l[0];if(!m||m.score<j)return{best:null,candidates:[]};let n=l[1]?.score??0,o=1===l.length||m.score-n>=k;return m.score>=d&&o?{best:m,candidates:[]}:{best:null,candidates:l.filter(a=>a.score>=j).slice(0,4)}}},38356:(a,b,c)=>{c.d(b,{AG:()=>i,Ey:()=>j,Kn:()=>g,eL:()=>f,oA:()=>h});var d=c(32753),e=c(29833);function f(a,b){let c=a=>(a.cluster??a.category??a.domain??"").trim().toLowerCase(),e=c(b);if(e&&e!==c(a))return!1;let f=(0,d.jR)(b.layer??null);return!f||f===(0,d.jR)(a.layer??null)}function g(a,b){let c=b?.requireLayer??!1,e=a.map(a=>{let b=[],e=a.cluster??a.category??a.domain??null;return e&&e.trim()||b.push("category"),null==a.priority&&b.push("priority"),c&&!(0,d.jR)(a.layer)&&b.push("layer"),b.length?` • "${a.title?.trim()||"(untitled)"}" — missing ${b.join(" + ")}`:null}).filter(a=>null!==a);return 0===e.length?null:"⛔ Every roadmap feature needs a category AND a priority — they drive grouping and ordering on the board, and the user shouldn't have to add them by hand."+(c?' This workspace has a frontend surface, so every feature must also carry `layer`: "frontend" | "backend" | "fullstack" — which side of the stack the work lands on.':"")+" Missing:\n"+e.join("\n")+"\n\nRe-present with each feature carrying its category as `category` (or `cluster` — both work; e.g. AUTH, SEARCH, DATA, INTEL, BILLING …) and `priority` (0 = P0 critical, 1 = P1 high, 2 = P2 medium, 3 = P3 low)."+(c?" Set `layer` on EVERY feature too.":"")+" Don't rely on defaults."}function h(a){let b=(a.title??"").trim();if(!b)return"⛔ A feature needs a non-empty title.";let c=(a.category??"").trim();if(!c){let c=function(a){let b=new Set;for(let c of a){let a=(c.cluster??"").trim();a&&b.add(a)}return[...b].sort()}(a.existing),d=c.length?` Reuse an existing category where it fits: ${c.join(", ")}.`:"";return`⛔ Feature "${b}" has no category. Every roadmap feature needs one — it drives grouping and color on the board.${d} Pass it as \`category\` (e.g. AUTH, SEARCH, DATA, INTEL, BILLING, INFRA …); don't rely on a default.`}if(a.requireLayer&&!(0,d.jR)(a.layer))return`⛔ Feature "${b}" has no layer. This workspace has a frontend surface, so every roadmap feature must say which side of the stack it lands on. Pass it as \`layer\`: "frontend" | "backend" | "fullstack".`;let g=a.existing.filter(b=>f(b,{category:c,layer:a.layer})),h=(0,e.mk)(b,g.map(a=>({id:a.id,title:a.title})));if(h.best){let a=g.find(a=>a.id===h.best.id),c=a?.status?` (${a.status})`:"";return`⛔ "${b}" already exists as the feature "${a?.title??h.best.title}"${c}. Don't create a duplicate — start it with \`beacon_feature({ action: "start", id })\`, add sub-tasks with \`beacon_feature({ action: "subtasks" })\`, or finish it with \`beacon_feature({ action: "done" })\`.`}return null}function i(a,b){let c=a.map(a=>{let c=b.filter(b=>f(b,a)),d=(0,e.mk)(a.title??"",c.map(a=>({id:a.id,title:a.title})));return d.best?{title:a.title,hit:c.find(a=>a.id===d.best.id)}:null}).filter(a=>null!==a);return c.length?"⛔ These proposed features already exist on the roadmap — reuse them instead of creating duplicates:\n"+c.map(a=>` • "${a.title}" → existing "${a.hit.title}"${a.hit.status?` (${a.hit.status})`:""}`).join("\n")+'\n\nDrop the duplicate(s) from the plan; to add work to an existing feature, ship sub-tasks or update it via `beacon_feature({ action: "done" })`. Keep only genuinely new features in the proposal.':null}function j(a,b){let c=(a??"").trim();if(!c)return null;let d=(0,e.mk)(c,b);if(d.best)return null;let f=d.candidates.length?` Did you mean: ${d.candidates.map(a=>`"${a.title}"`).join(", ")}?`:"";return`⛔ front "${c}" doesn't match an existing feature.${f} \`front\` nests a feature UNDER an existing parent feature — it is NOT a domain tag. If "${c}" is a domain, pass it as \`category\` instead. If it's a real umbrella feature, create it first via beacon_propose_plan.`}},40377:(a,b,c)=>{c.d(b,{U9:()=>e});var d=c(91430);function e(a){return(0,d.ll)`count(${a||d.ll.raw("*")})`.mapWith(Number)}},70299:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AS:()=>I,N5:()=>J,Nh:()=>B,Ol:()=>L,Pq:()=>E,hL:()=>K,nV:()=>z,r$:()=>D,y2:()=>F});var e=c(44046),f=c(34216),g=c(40377),h=c(56727),i=c(30046),j=c(19734),k=c(49565),l=c(29833),m=c(38356),n=c(32753),o=c(72595),p=c(71584),q=c(45775),r=c(14286),s=c(72967),t=c(7903),u=c(89908),v=c(45301),w=c(76223),x=a([h,j,k,o,u,w]);async function y(a){await (0,w.Z)({currentFeatureId:a})}async function z(){let a=await h.db.query.node.findMany({where:(a,{and:b,eq:c,ne:d})=>b(c(a.view,"ROADMAP"),d(a.source,"DRAFT")),orderBy:(a,{asc:b})=>b(a.createdAt)}),b=a=>({id:a.id,title:a.title,status:a.status,category:a.cluster,priority:a.priority,layer:a.layer,kind:a.kind});return{fronts:a.filter(a=>!a.parentId).map(c=>({...b(c),tasks:a.filter(a=>a.parentId===c.id).map(a=>({...b(a),workingOn:"IN_PROGRESS"===a.status}))}))}}async function A(a,b){await h.db.update(i.node).set({status:b}).where((0,f.eq)(i.node.id,a)),await B(a),await (0,j.Bx)()}[h,j,k,o,u,w]=x.then?(await x)():x;let M=new Set(["DONE","CANCELLED","DEPRIORITIZED"]),N=new Set(["IN_PROGRESS","BLOCKED"]),O=new Set(["CANCELLED","DEPRIORITIZED"]);async function B(a){let b=new Set,c=a;for(;!b.has(c);){var d;b.add(c);let a=await h.db.query.node.findFirst({where:(a,{eq:b})=>b(a.id,c),columns:{parentId:!0,view:!0}});if(!a?.parentId||"ROADMAP"!==a.view)return;let e=await h.db.query.node.findFirst({where:(b,{eq:c})=>c(b.id,a.parentId),columns:{id:!0,status:!0,view:!0}});if(!e||"ROADMAP"!==e.view||O.has(e.status))return;let g=(d=(await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.parentId,e.id),columns:{status:!0}})).map(a=>a.status)).length?d.every(a=>M.has(a))?"DONE":d.some(a=>N.has(a))?"IN_PROGRESS":"PENDING":"PENDING";if(e.status===g)return;await h.db.update(i.node).set({status:g}).where((0,f.eq)(i.node.id,e.id)),c=e.id}}let P=new Set(["PENDING","IN_PROGRESS"]);async function C(a){let b=[],c=[],d=new Set([a]),e=[a];for(;e.length;){let a=await h.db.query.node.findMany({where:(a,{and:b,eq:c,inArray:d})=>b(d(a.parentId,e),c(a.view,"ROADMAP")),columns:{id:!0,title:!0,status:!0}});for(let f of(e=[],a))d.has(f.id)||(d.add(f.id),e.push(f.id),P.has(f.status)?b.push(f.id):"BLOCKED"===f.status&&c.push(f))}return b.length&&await h.db.update(i.node).set({status:"DONE"}).where((0,f.RV)(i.node.id,b)),{completed:b.length,blocked:c}}async function D(a){let b,c="ROADMAP"===a?"roadmap":"architecture",d=t.zP[c],e=(0,t.VE)(c);if(e.sig===d)return;let g=(await h.db.query.node.findMany({where:(b,{eq:c})=>c(b.view,a),orderBy:(a,{asc:b})=>b(a.createdAt),columns:{id:!0,parentId:!0,source:!0,cluster:!0,status:!0,priority:!0,title:!0,role:!0,x:!0,y:!0,externalMeta:!0}})).filter(a=>"DRAFT"!==a.source);if(g.length<2)return;let j=null;if("ROADMAP"===a){let a="status"===e.arrangedBy||"priority"===e.arrangedBy?e.arrangedBy:"cluster";j=a,b=(0,q.VI)(g.map(a=>{let b=(0,r.Oh)(a.externalMeta)?.state;return{id:a.id,parentId:a.parentId,cluster:a.cluster,status:a.status,priority:a.priority,stateName:b?.name??null,stateType:b?.type??null,title:a.title,role:a.role}}),a)}else{let a=g.map(a=>a.id),c=await h.db.query.edge.findMany({where:(b,{and:c,eq:d})=>c(d(b.kind,"DEPENDS"),(0,f.RV)(b.fromId,a),(0,f.RV)(b.toId,a)),columns:{fromId:!0,toId:!0}});b=(0,s.to)(g.map(a=>({id:a.id,group:(a.cluster??"").trim()||"—"})),c)}let k=[];for(let a of g){let c=b.get(a.id);c&&(Math.round(c.x)!==Math.round(a.x)||Math.round(c.y)!==Math.round(a.y))&&k.push(h.db.update(i.node).set({x:c.x,y:c.y}).where((0,f.eq)(i.node.id,a.id)))}await Promise.all(k),(0,t.qT)(c,j?{sig:d,arrangedBy:j}:{sig:d})}async function E(a){let b=a.title.trim();if(!b)throw Error("title required");let c=a.flagExisting??!0,d=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ROADMAP")});if(a.id){let b=d.find(b=>b.id===a.id);if(b)return c?(await A(b.id,"IN_PROGRESS"),await y(b.id),{action:"flagged",id:b.id,title:b.title,via:"id"}):{action:"exists",id:b.id,title:b.title,status:b.status}}let e=c?d:d.filter(b=>(0,m.eL)(b,{cluster:a.cluster,layer:a.layer})),{best:f,candidates:g}=(0,l.mk)(b,e.map(a=>({id:a.id,title:a.title})));if(f){if(!c){let a=d.find(a=>a.id===f.id)?.status??"PENDING";return{action:"exists",id:f.id,title:f.title,status:a}}return await A(f.id,"IN_PROGRESS"),await y(f.id),{action:"flagged",id:f.id,title:f.title,via:"match",score:f.score}}if(g.length)return{action:"ambiguous",candidates:g};let k=d.filter(a=>!a.parentId),q=a.front?.trim()||"",r=q?(0,m.Ey)(q,k.map(a=>({id:a.id,title:a.title}))):null;if(r)return{action:"rejected",message:r};let s=null,t=null,u=null,v=null;if(q){let a=(0,l.mk)(q,k.map(a=>({id:a.id,title:a.title}))).best;s=a.id,t=a.title;let b=d.find(b=>b.id===a.id);u=b?.cluster??null,v=b?.layer??null}let w=(a.cluster?.trim()||u)??null,x=(0,n.jR)(a.layer)??(0,n.jR)(v),z=!s&&await (0,o.jZ)(),C=(0,m.oA)({title:b,category:w,layer:x,requireLayer:z,existing:d.map(a=>({id:a.id,title:a.title,cluster:a.cluster,status:a.status}))});if(C)return{action:"rejected",message:C};let D=s?d.filter(a=>a.parentId===s).length:0,E=a=>(a??"").trim()||"—",F=s?(0,p.B)(d.map(a=>({x:a.x,y:a.y})),{x:k.find(a=>a.id===s)?.x??0,y:160+110*D}):(0,p.E)(d.filter(a=>!a.parentId&&E(a.cluster)===E(w)).map(a=>({x:a.x,y:a.y})),d.map(a=>({x:a.x,y:a.y}))),G=(a.status??"").trim().toLowerCase(),[H]=await h.db.insert(i.node).values({view:"ROADMAP",kind:a.kind?.trim().toUpperCase()==="BUG"?"BUG":"FEATURE",title:b,plain:a.detail??null,cluster:w,layer:x,priority:"number"==typeof a.priority?a.priority:void 0,status:"backlog"===G||"pending"===G?"PENDING":"IN_PROGRESS",source:"SESSION",parentId:s,x:F.x,y:F.y}).returning();return await B(H.id),await (0,j.Bx)(),await y(H.id),{action:"created",id:H.id,title:b,front:t}}async function F(a){let b=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ROADMAP")}),c=async a=>{let b=await C(a);return await A(a,"DONE"),await (0,k.q)(),{ok:!0,id:a,subtasksCompleted:b.completed||void 0,subtasksBlocked:b.blocked.length?b.blocked:void 0}};if(a.id){let d=b.find(b=>b.id===a.id);if(d)return c(d.id)}if(!a.title)return{ok:!1};let{best:d,candidates:e}=(0,l.mk)(a.title,b.map(a=>({id:a.id,title:a.title})));return d?c(d.id):{ok:!1,candidates:e.length?e:void 0}}function G(a){let b=a.trim(),c=(0,v.jv)();return b.startsWith(c)&&(b=b.slice(c.length)),b.replace(/^[./]+/,"").trim()}let Q=new Set(["KEEP","REBUILD","REPLACE","DROP"]),R=e.Ik({title:e.Yj().trim().min(1),domain:e.Yj().trim().min(1),role:e.Yj().nullish(),plain:e.Yj().nullish(),layer:e.Yj().nullish(),status:e.Yj().nullish(),files:e.YO(e.Yj()).optional(),depends:e.YO(e.Yj()).optional(),bugs:e.YO(e.Ik({note:e.Yj().trim().min(1).max(2e3)})).optional()});async function H(a){let b=e.YO(R).parse(a),c=(a,b)=>`${a.trim().toLowerCase()} ${(b??"").trim().toLowerCase()}`,d=new Map;for(let a of b)d.set(c(a.title,a.domain),a);let g=Array.from(d.values());if(!g.length)return 0;let j=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ARCHITECTURE")}),k=new Map(j.map(a=>[c(a.title,a.cluster),a])),l=new Map(j.map(a=>[a.title.toLowerCase(),a.id])),m=j.map(a=>({x:a.x,y:a.y,domain:(a.cluster??"").trim()||"—"}));for(let a of g){let b=c(a.title,a.domain),d=a.status&&Q.has(a.status)?a.status:"KEEP",e=k.get(b);if(e)await h.db.update(i.node).set({cluster:a.domain,layer:(0,n.jR)(a.layer)??e.layer,role:a.role??e.role,plain:a.plain??e.plain,status:d}).where((0,f.eq)(i.node.id,e.id)),a.files?.length&&(await h.db.delete(i.nodeFile).where((0,f.eq)(i.nodeFile.nodeId,e.id)),await h.db.insert(i.nodeFile).values(Array.from(new Set(a.files)).map(a=>({nodeId:e.id,path:a}))));else{let b=a.domain.trim()||"—",{x:c,y:e}=(0,p.E)(m.filter(a=>a.domain===b),m);m.push({x:c,y:e,domain:b});let[f]=await h.db.insert(i.node).values({view:"ARCHITECTURE",source:"MANUAL",cluster:a.domain,layer:(0,n.jR)(a.layer),title:a.title,role:a.role??null,plain:a.plain??null,status:d,x:c,y:e}).returning();a.files?.length&&await h.db.insert(i.nodeFile).values(Array.from(new Set(a.files)).map(a=>({nodeId:f.id,path:a}))),l.set(a.title.toLowerCase(),f.id)}}for(let a of g){let b=l.get(a.title.toLowerCase());if(b)for(let c of a.depends??[]){let a=l.get(c.trim().toLowerCase());a&&a!==b&&(await h.db.query.edge.findFirst({where:(c,{and:d,eq:e})=>d(e(c.fromId,b),e(c.toId,a),e(c.kind,"DEPENDS"))})||await h.db.insert(i.edge).values({fromId:b,toId:a,kind:"DEPENDS"}).catch(()=>{}))}}for(let a of g){if(!a.bugs?.length)continue;let b=l.get(a.title.toLowerCase());if(b)for(let c of a.bugs)await h.db.query.bugFlag.findFirst({where:(a,{and:d,eq:e,isNull:f})=>d(e(a.nodeId,b),e(a.note,c.note),f(a.resolvedAt))})||await h.db.insert(i.bugFlag).values({nodeId:b,by:"agent",note:c.note})}return g.length}async function I(a){let b=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ROADMAP")}),c=a.id?b.find(b=>b.id===a.id):void 0;if(!c&&a.title){let{best:d,candidates:e}=(0,l.mk)(a.title,b.map(a=>({id:a.id,title:a.title})));if(d)c=b.find(a=>a.id===d.id);else if(e.length)return{ok:!1,candidates:e}}if(!c)return{ok:!1};await h.db.update(i.node).set({plain:a.description,status:"DONE"}).where((0,f.eq)(i.node.id,c.id));let d=await C(c.id);if(await B(c.id),await (0,k.q)(),a.files?.length)for(let b of Array.from(new Set(a.files.map(G).filter(Boolean))))await h.db.insert(i.nodeFile).values({nodeId:c.id,path:b}).onConflictDoNothing({target:[i.nodeFile.nodeId,i.nodeFile.path]});return await h.db.update(i.appSetting).set({currentFeatureId:null}).where((0,f.eq)(i.appSetting.currentFeatureId,c.id)),a.architecture?.length&&await H(a.architecture),await (0,j.Bx)(),{ok:!0,id:c.id,subtasksCompleted:d.completed||void 0,subtasksBlocked:d.blocked.length?d.blocked:void 0}}async function J(a){let b=[];for(let c of a){let a=await I(c);b.push({...a,title:c.title})}return{results:b}}async function K(a){let b=Array.from(new Set((a.files??[]).map(G).filter(Boolean))),c=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ROADMAP")}),d=a.id?c.find(b=>b.id===a.id):void 0;if(!d&&a.title){let{best:b,candidates:e}=(0,l.mk)(a.title,c.map(a=>({id:a.id,title:a.title})));if(b)d=c.find(a=>a.id===b.id);else if(e.length)return{ok:!1,candidates:e}}if(!d)return{ok:!1};for(let a of b)await h.db.insert(i.nodeFile).values({nodeId:d.id,path:a}).onConflictDoNothing({target:[i.nodeFile.nodeId,i.nodeFile.path]});await (0,j.Bx)();let e=(await h.db.select({n:(0,g.U9)()}).from(i.nodeFile).where((0,f.eq)(i.nodeFile.nodeId,d.id)))[0].n;return{ok:!0,id:d.id,count:e}}async function L(a){let b,c=a.items.filter(a=>a.title.trim());if(!c.length)return{ok:!1,reason:"no_items"};if(a.parentId)b=await h.db.query.node.findFirst({where:(b,{eq:c})=>c(b.id,a.parentId)});else if(a.parentTitle&&a.parentTitle.trim()){let c=await h.db.query.node.findMany({where:(a,{isNull:b})=>b(a.parentId),columns:{id:!0,title:!0,cluster:!0,status:!0}}),{best:d,candidates:e}=(0,l.mk)(a.parentTitle.trim(),c.map(a=>({id:a.id,title:a.title,cluster:a.cluster,status:a.status})));if(d)b=await h.db.query.node.findFirst({where:(a,{eq:b})=>b(a.id,d.id)});else if(e.length)return{ok:!1,reason:"ambiguous",candidates:e}}if(!b)return{ok:!1,reason:"parent_not_found"};let d=b,e=await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.parentId,d.id),columns:{id:!0,title:!0}}),f=c.filter(a=>(0,l.mk)(a.title.trim(),e).best);if(f.length)return{ok:!1,reason:"duplicate",message:`⛔ These sub-tasks already exist under "${d.title}": ${f.map(a=>`"${a.title.trim()}"`).join(", ")}. Drop the duplicates — only add genuinely new sub-tasks.`};let g=(await h.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,d.view),columns:{x:!0,y:!0}})).map(a=>({x:a.x,y:a.y})),i=[];for(let a=0;a<c.length;a++){let b=c[a],e=(0,p.B)(g,{x:d.x+240*a,y:d.y+200});g.push(e);let f=await (0,u.RM)({view:d.view,kind:b.kind?.trim().toUpperCase()==="BUG"?"BUG":"FEATURE",title:b.title.trim(),plain:b.plain??null,cluster:d.cluster??null,layer:(0,n.jR)(b.layer)??(0,n.jR)(d.layer),parentId:d.id,x:e.x,y:e.y});i.push({id:f.id,title:f.title})}return i.length&&await B(i[0].id),await (0,j.Bx)(),{ok:!0,parent:{id:d.id,title:d.title},created:i}}d()}catch(a){d(a)}})},71584:(a,b,c)=>{function d(a,b){let c={x:b.x,y:b.y};for(let b=0;b<100&&a.some(a=>200>Math.abs(c.x-a.x)&&150>Math.abs(c.y-a.y));b++)c.y+=150;return c}function e(a,b,c={}){let f=c.colW??320,g=c.rowH??150,h=c.maxCols??4,i=c.bandGap??90;if(0===a.length){if(0===b.length)return{x:0,y:0};let a=Math.max(...b.map(a=>a.y));return d(b,{x:0,y:a+g+i})}let j=Math.min(...a.map(a=>a.x)),k=Math.min(...a.map(a=>a.y)),l=a.map(a=>Math.max(0,Math.round((a.x-j)/f))),m=Math.min(h,Math.max(Math.max(...l)+1,Math.ceil(Math.sqrt(a.length+1)))),n=Array(m).fill(k-g);a.forEach((a,b)=>{let c=Math.min(l[b],m-1);n[c]=Math.max(n[c],a.y)});let o=0;for(let a=1;a<m;a++)n[a]<n[o]&&(o=a);return d(b,{x:j+o*f,y:n[o]+g})}c.d(b,{B:()=>d,E:()=>e})},76223:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Z:()=>i,t:()=>h});var e=c(56727),f=c(30046),g=a([e]);async function h(a=e.db){let[b]=await a.insert(f.appSetting).values({id:"singleton"}).onConflictDoUpdate({target:f.appSetting.id,set:{id:"singleton"}}).returning();return b}async function i(a,b=e.db){let[c]=await b.insert(f.appSetting).values({id:"singleton",...a}).onConflictDoUpdate({target:f.appSetting.id,set:a}).returning();return c}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},89908:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AC:()=>n,B2:()=>q,CB:()=>r,OK:()=>m,Qd:()=>l,RM:()=>k,jO:()=>o,k5:()=>p});var e=c(34216),f=c(56727),g=c(30046),h=c(70299),i=c(13560),j=a([f,h]);async function k(a){let b=i.gY.parse(a),c="ARCHITECTURE"===b.view?"REBUILD":"PENDING",[d]=await f.db.insert(g.node).values({...b.id?{id:b.id}:{},view:b.view,kind:b.kind??"FEATURE",title:b.title,cluster:b.cluster??null,layer:b.layer??null,role:b.role??null,plain:b.plain??null,parentId:b.parentId??null,status:b.status??c,priority:b.priority??2,x:b.x??0,y:b.y??0,sourceRef:b.sourceRef??null}).returning();return d}async function l(a){let b=i.hj.parse(a);if(b.fromId===b.toId)throw Error("Self-edge not allowed");let c=b.kind??"DEPENDS",d=await f.db.query.edge.findFirst({where:(a,{and:d,eq:e})=>d(e(a.fromId,b.fromId),e(a.toId,b.toId),e(a.kind,c))});if(d)return d;let[e]=await f.db.insert(g.edge).values({fromId:b.fromId,toId:b.toId,kind:c,label:b.label??null,sourceHandle:b.sourceHandle??null,targetHandle:b.targetHandle??null}).returning();return e}async function m(a,b){let c=i.$Y.parse(b),[d]=await f.db.update(g.node).set(c).where((0,e.eq)(g.node.id,a)).returning();return void 0!==c.status&&await (0,h.Nh)(a),d}async function n(a){let[b]=await f.db.delete(g.node).where((0,e.eq)(g.node.id,a)).returning();return b}async function o(a,b,c){let d=i.tI.parse({x:b,y:c}),[h]=await f.db.update(g.node).set(d).where((0,e.eq)(g.node.id,a)).returning();return h}async function p(a){return await Promise.all(a.map(a=>{let b=i.tI.parse({x:a.x,y:a.y});return f.db.update(g.node).set(b).where((0,e.eq)(g.node.id,a.id))})),a.length}async function q(a,b,c){let d=i.tI.parse({x:b,y:c}),[h]=await f.db.update(g.dbTable).set(d).where((0,e.eq)(g.dbTable.id,a)).returning();return h}async function r(a,b,c){let d=i.tI.parse({x:b,y:c}),[h]=await f.db.update(g.endpoint).set(d).where((0,e.eq)(g.endpoint.id,a)).returning();return h}[f,h]=j.then?(await j)():j,d()}catch(a){d(a)}})}};
@@ -1 +1 @@
1
- "use strict";exports.id=2031,exports.ids=[2031],exports.modules={449:(a,b,c)=>{c.d(b,{Bz:()=>t,F:()=>o,G8:()=>k,Oh:()=>j,U3:()=>r,q2:()=>u,u7:()=>q,uh:()=>s});var d=c(77598),e=c(73024),f=c(76760),g=c(32213),h=c(6681),i=c(45301);function j(a,b,c){let e="question"===a?JSON.stringify({h:b?.header,q:b?.question,o:b?.options?.map(a=>a.label)}):JSON.stringify({t:c?.tool,ti:c?.title,p:c?.preview});return(0,d.createHash)("sha256").update(e).digest("hex").slice(0,16)}function k(a,b){if(!b||!a)return!1;let c=JSON.stringify(b).slice(1,-1);for(let b of a.split("\n"))if(b.includes("Your questions have been answered")&&b.includes(c))return!0;return!1}let l=()=>(0,f.join)((0,i.KS)(),"ask-pending.json"),m=()=>(0,f.join)((0,i.KS)(),"ask-resolution.json");function n(a){try{return JSON.parse((0,e.readFileSync)(a,"utf8"))}catch{return null}}let o=()=>n(l()),p=a=>(0,g.q)(l(),a),q=()=>(0,e.rmSync)(l(),{force:!0}),r=()=>n(m());function s(a,b){var c;let d="mirror"===a.mode;if(!d&&function(a,b,c,d,e=h.Il){return"question"===c&&!!a&&a.hash===b&&d-a.decidedAt<e}(r(),a.hash,a.kind,b))return{loop:!0};let f=(c=a.hash,`${c}-${b}`);return d||(0,e.rmSync)(m(),{force:!0}),p({id:f,kind:a.kind,hash:a.hash,createdAt:b,mode:a.mode,transcriptPath:a.transcriptPath,transcriptOffset:a.transcriptOffset,question:a.question,approval:a.approval}),{loop:!1,id:f}}function t(a,b){let c=o();return!!c&&c.id===a&&(p({...c,deliveredAt:b}),!0)}function u(a,b){let c,d=o();c={id:a.id,hash:d?.hash??"",kind:d?.kind??(a.decision?"approval":"question"),selected:a.selected,decision:a.decision,decidedAt:b},(0,g.q)(m(),c),q()}},6681:(a,b,c)=>{c.d(b,{Il:()=>e,TT:()=>d,US:()=>f});let d=["IN_PROGRESS","PENDING","BLOCKED","DONE","DEPRIORITIZED","CANCELLED"],e=6e4,f=18e5},19225:(a,b,c)=>{a.exports=c(44870)},31059:(a,b,c)=>{c.d(b,{ie:()=>f});var d=c(37096),e=c(71484);function f(...a){return a[0].columns?new g(a[0].columns,a[0].name):new g(a)}class g{static [d.i]="SQLitePrimaryKeyBuilder";columns;name;constructor(a,b){this.columns=a,this.name=b}build(a){return new h(a,this.columns,this.name)}}class h{constructor(a,b,c){this.table=a,this.columns=b,this.name=c}static [d.i]="SQLitePrimaryKey";columns;name;getName(){return this.name??`${this.table[e.jo.Symbol.Name]}_${this.columns.map(a=>a.name).join("_")}_pk`}}},32213:(a,b,c)=>{c.d(b,{q:()=>f});var d=c(73024),e=c(76760);function f(a,b,c=!1){var g=JSON.stringify(b,null,c?2:void 0);(0,d.mkdirSync)((0,e.dirname)(a),{recursive:!0});let h=`${a}.tmp`;try{(0,d.writeFileSync)(h,g),(0,d.renameSync)(h,a)}catch(a){throw(0,d.rmSync)(h,{force:!0}),a}}},45301:(a,b,c)=>{c.d(b,{KS:()=>l,Qq:()=>k,jv:()=>j});var d=c(31421),e=c(77598),f=c(48161),g=c(76760),h=c(6716);let i=null;function j(){if(process.env.BEACON_REPO)return process.env.BEACON_REPO;let a=(0,h.p1)();if(a){let b=(0,h.K4)(a);if(b)return b.path}let b=(0,h.WQ)();if(b)return b.path;if(i)return i;try{let a=(0,d.execSync)("git rev-parse --show-toplevel",{cwd:process.cwd(),stdio:["ignore","pipe","ignore"]}).toString().trim();if(a)return i=a}catch{}return i=(0,g.resolve)(process.cwd(),"../..")}function k(){return(0,g.basename)(j())}function l(){if(process.env.BEACON_DATA_DIR)return process.env.BEACON_DATA_DIR;let a=(0,h.p1)();if(a&&(0,h.K4)(a))return(0,h.T_)(a);let b=(0,h.WQ)();return b?(0,h.T_)(b.id):(0,g.join)((0,f.homedir)(),".beacon",(0,e.createHash)("sha256").update(j()).digest("hex").slice(0,12))}},76968:(a,b,c)=>{c.d(b,{GL:()=>i,Pe:()=>h});var d=c(37096);class e{constructor(a,b){this.name=a,this.unique=b}static [d.i]="SQLiteIndexBuilderOn";on(...a){return new f(this.name,a,this.unique)}}class f{static [d.i]="SQLiteIndexBuilder";config;constructor(a,b,c){this.config={name:a,columns:b,unique:c,where:void 0}}where(a){return this.config.where=a,this}build(a){return new g(this.config,a)}}class g{static [d.i]="SQLiteIndex";config;constructor(a,b){this.config={...a,table:b}}}function h(a){return new e(a,!1)}function i(a){return new e(a,!0)}},92280:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}}};
1
+ "use strict";exports.id=2031,exports.ids=[2031],exports.modules={449:(a,b,c)=>{c.d(b,{Bz:()=>t,F:()=>o,G8:()=>k,Oh:()=>j,U3:()=>r,q2:()=>u,u7:()=>q,uh:()=>s});var d=c(77598),e=c(73024),f=c(76760),g=c(32213),h=c(6681),i=c(45301);function j(a,b,c){let e="question"===a?JSON.stringify({h:b?.header,q:b?.question,o:b?.options?.map(a=>a.label)}):JSON.stringify({t:c?.tool,ti:c?.title,p:c?.preview});return(0,d.createHash)("sha256").update(e).digest("hex").slice(0,16)}function k(a,b){if(!b||!a)return!1;let c=JSON.stringify(b).slice(1,-1);for(let b of a.split("\n"))if(b.includes("Your questions have been answered")&&b.includes(c))return!0;return!1}let l=()=>(0,f.join)((0,i.KS)(),"ask-pending.json"),m=()=>(0,f.join)((0,i.KS)(),"ask-resolution.json");function n(a){try{return JSON.parse((0,e.readFileSync)(a,"utf8"))}catch{return null}}let o=()=>n(l()),p=a=>(0,g.q)(l(),a),q=()=>(0,e.rmSync)(l(),{force:!0}),r=()=>n(m());function s(a,b){var c;let d="mirror"===a.mode;if(!d&&function(a,b,c,d,e=h.Il){return"question"===c&&!!a&&a.hash===b&&d-a.decidedAt<e}(r(),a.hash,a.kind,b))return{loop:!0};let f=(c=a.hash,`${c}-${b}`);return d||(0,e.rmSync)(m(),{force:!0}),p({id:f,kind:a.kind,hash:a.hash,createdAt:b,mode:a.mode,transcriptPath:a.transcriptPath,transcriptOffset:a.transcriptOffset,question:a.question,approval:a.approval}),{loop:!1,id:f}}function t(a,b){let c=o();return!!c&&c.id===a&&(p({...c,deliveredAt:b}),!0)}function u(a,b){let c,d=o();c={id:a.id,hash:d?.hash??"",kind:d?.kind??(a.decision?"approval":"question"),selected:a.selected,decision:a.decision,decidedAt:b},(0,g.q)(m(),c),q()}},6681:(a,b,c)=>{c.d(b,{Il:()=>f,TT:()=>d,US:()=>g,nR:()=>e});let d=["IN_PROGRESS","PENDING","BLOCKED","DONE","DEPRIORITIZED","CANCELLED"],e={DONE:{label:"Done",className:"border-emerald-500/30 bg-emerald-500/15 text-emerald-700 dark:text-emerald-300"},IN_PROGRESS:{label:"In progress",className:"border-sky-500/30 bg-sky-500/15 text-sky-700 dark:text-sky-300"},PENDING:{label:"Pending",className:"border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-200"},BLOCKED:{label:"Blocked",className:"border-orange-500/30 bg-orange-500/15 text-orange-700 dark:text-orange-300"},CANCELLED:{label:"Cancelled",className:"border-zinc-500/30 bg-zinc-500/10 text-zinc-600 dark:text-zinc-400 line-through"},DEPRIORITIZED:{label:"Deprioritized",className:"border-zinc-600/40 bg-zinc-600/10 text-zinc-600 dark:text-zinc-400"},KEEP:{label:"Keep",className:"border-emerald-500/30 bg-emerald-500/15 text-emerald-700 dark:text-emerald-300"},REBUILD:{label:"Rebuild",className:"border-violet-500/30 bg-violet-500/15 text-violet-700 dark:text-violet-300"},REPLACE:{label:"Replace",className:"border-rose-500/30 bg-rose-500/15 text-rose-700 dark:text-rose-300"},DROP:{label:"Drop",className:"border-zinc-500/30 bg-zinc-500/10 text-zinc-600 dark:text-zinc-400 line-through"}},f=6e4,g=18e5},19225:(a,b,c)=>{a.exports=c(44870)},31059:(a,b,c)=>{c.d(b,{ie:()=>f});var d=c(37096),e=c(71484);function f(...a){return a[0].columns?new g(a[0].columns,a[0].name):new g(a)}class g{static [d.i]="SQLitePrimaryKeyBuilder";columns;name;constructor(a,b){this.columns=a,this.name=b}build(a){return new h(a,this.columns,this.name)}}class h{constructor(a,b,c){this.table=a,this.columns=b,this.name=c}static [d.i]="SQLitePrimaryKey";columns;name;getName(){return this.name??`${this.table[e.jo.Symbol.Name]}_${this.columns.map(a=>a.name).join("_")}_pk`}}},32213:(a,b,c)=>{c.d(b,{q:()=>f});var d=c(73024),e=c(76760);function f(a,b,c=!1){var g=JSON.stringify(b,null,c?2:void 0);(0,d.mkdirSync)((0,e.dirname)(a),{recursive:!0});let h=`${a}.tmp`;try{(0,d.writeFileSync)(h,g),(0,d.renameSync)(h,a)}catch(a){throw(0,d.rmSync)(h,{force:!0}),a}}},45301:(a,b,c)=>{c.d(b,{KS:()=>l,Qq:()=>k,jv:()=>j});var d=c(31421),e=c(77598),f=c(48161),g=c(76760),h=c(6716);let i=null;function j(){if(process.env.BEACON_REPO)return process.env.BEACON_REPO;let a=(0,h.p1)();if(a){let b=(0,h.K4)(a);if(b)return b.path}let b=(0,h.WQ)();if(b)return b.path;if(i)return i;try{let a=(0,d.execSync)("git rev-parse --show-toplevel",{cwd:process.cwd(),stdio:["ignore","pipe","ignore"]}).toString().trim();if(a)return i=a}catch{}return i=(0,g.resolve)(process.cwd(),"../..")}function k(){return(0,g.basename)(j())}function l(){if(process.env.BEACON_DATA_DIR)return process.env.BEACON_DATA_DIR;let a=(0,h.p1)();if(a&&(0,h.K4)(a))return(0,h.T_)(a);let b=(0,h.WQ)();return b?(0,h.T_)(b.id):(0,g.join)((0,f.homedir)(),".beacon",(0,e.createHash)("sha256").update(j()).digest("hex").slice(0,12))}},76968:(a,b,c)=>{c.d(b,{GL:()=>i,Pe:()=>h});var d=c(37096);class e{constructor(a,b){this.name=a,this.unique=b}static [d.i]="SQLiteIndexBuilderOn";on(...a){return new f(this.name,a,this.unique)}}class f{static [d.i]="SQLiteIndexBuilder";config;constructor(a,b,c){this.config={name:a,columns:b,unique:c,where:void 0}}where(a){return this.config.where=a,this}build(a){return new g(this.config,a)}}class g{static [d.i]="SQLiteIndex";config;constructor(a,b){this.config={...a,table:b}}}function h(a){return new e(a,!1)}function i(a){return new e(a,!0)}},92280:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=2644,exports.ids=[2644],exports.modules={347:(a,b,c)=>{},526:(a,b,c)=>{},1110:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{HQ:()=>o,Oz:()=>p,cl:()=>t,hY:()=>r,hg:()=>s,pJ:()=>u,t3:()=>q});var e=c(95349),f=c(42650),g=c(39321),h=c(62896),i=c(22443),j=c(16189),k=c(3173),l=c(89337),m=a([h,j,k]);function n(){(0,f.revalidatePath)("/map")}async function o(a){let b=await (0,j.n)(()=>(0,k.RM)(a));return n(),b}async function p(a,b){let c=await (0,j.n)(()=>(0,k.OK)(a,b));return n(),c}async function q(a,b){let c=await (0,j.n)(()=>(0,k.Pj)(a,b));return n(),c}async function r(a){let b=await (0,j.n)(()=>(0,k.Vp)(a));return n(),b}async function s(a){let b=await (0,j.n)(()=>(0,k.x$)(a));return n(),b}async function t(a){await (0,j.n)(()=>(0,k.AC)(a)),n()}async function u(a){await (0,j.n)(async()=>{await h.db.update(i.node).set({source:"MANUAL"}).where((0,g.eq)(i.node.id,a))}),n()}[h,j,k]=m.then?(await m)():m,(0,l.D)([o,p,q,r,s,t,u]),(0,e.A)(o,"40467e97c598f5efce143be114d181684cdc8c8801",null),(0,e.A)(p,"60fc1a1091aee96998c4058daf638f8a6efdb6f902",null),(0,e.A)(q,"60f8cdcb5931c995e6fe5830c60072052e21e49cb9",null),(0,e.A)(r,"40ad73811db4f257c117eddffe5857b199d064fe2c",null),(0,e.A)(s,"4038c80f0b4b50ab317b1da3463121032b8dfe0741",null),(0,e.A)(t,"4082e119e7997decee01b634b5bb66ddef57834032",null),(0,e.A)(u,"408addacb6c8748b9c906cc5e342ebbd01b3bc27e3",null),d()}catch(a){d(a)}})},1229:(a,b,c)=>{c.d(b,{x:()=>g});var d=c(48249),e=c(56024),f=c(55030);function g(){let a="!h-2 !w-2 !border-0 !bg-zinc-400";return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(e.h7,{type:"target",position:f.yX.Top,id:"tt",className:a}),(0,d.jsx)(e.h7,{type:"source",position:f.yX.Top,id:"st",className:a}),(0,d.jsx)(e.h7,{type:"target",position:f.yX.Right,id:"tr",className:a}),(0,d.jsx)(e.h7,{type:"source",position:f.yX.Right,id:"sr",className:a}),(0,d.jsx)(e.h7,{type:"target",position:f.yX.Bottom,id:"tb",className:a}),(0,d.jsx)(e.h7,{type:"source",position:f.yX.Bottom,id:"sb",className:a}),(0,d.jsx)(e.h7,{type:"target",position:f.yX.Left,id:"tl",className:a}),(0,d.jsx)(e.h7,{type:"source",position:f.yX.Left,id:"sl",className:a})]})}},2367:(a,b,c)=>{c.a(a,async(a,b)=>{try{var d=c(62896),e=a([d]);d=(e.then?(await e)():e)[0],b()}catch(a){b(a)}})},3173:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AC:()=>p,OK:()=>l,Pj:()=>m,RM:()=>k,Vp:()=>n,x$:()=>o});var e=c(39321),f=c(62896),g=c(22443),h=c(8292),i=c(7913),j=a([f,h]);async function k(a){let b=i.gY.parse(a),c="ARCHITECTURE"===b.view?"REBUILD":"PENDING",[d]=await f.db.insert(g.node).values({...b.id?{id:b.id}:{},view:b.view,kind:b.kind??"FEATURE",title:b.title,cluster:b.cluster??null,layer:b.layer??null,role:b.role??null,plain:b.plain??null,parentId:b.parentId??null,status:b.status??c,priority:b.priority??2,x:b.x??0,y:b.y??0,sourceRef:b.sourceRef??null}).returning();return d}async function l(a,b){let c=i.$Y.parse(b),[d]=await f.db.update(g.node).set(c).where((0,e.eq)(g.node.id,a)).returning();return void 0!==c.status&&await (0,h.Nh)(a),d}async function m(a,b){let c=i.M7.parse(b),[d]=await f.db.update(g.node).set({status:c}).where((0,e.eq)(g.node.id,a)).returning();return await (0,h.Nh)(a),d}async function n(a){let[b]=await f.db.update(g.node).set({status:"DEPRIORITIZED",priority:3}).where((0,e.eq)(g.node.id,a)).returning();return await (0,h.Nh)(a),b}async function o(a){let[b]=await f.db.update(g.node).set({status:"CANCELLED"}).where((0,e.eq)(g.node.id,a)).returning();return await (0,h.Nh)(a),b}async function p(a){let[b]=await f.db.delete(g.node).where((0,e.eq)(g.node.id,a)).returning();return b}[f,h]=j.then?(await j)():j,d()}catch(a){d(a)}})},4120:(a,b,c)=>{c.a(a,async(a,b)=>{try{var d=c(62896);c(22443);var e=a([d]);d=(e.then?(await e)():e)[0],b()}catch(a){b(a)}})},4963:(a,b,c)=>{c.a(a,async(a,b)=>{try{var d=c(23873),e=c(62896);c(22443);var f=c(2367),g=c(29303),h=c(56258);c(50320),c(66625);var i=c(76174),j=a([e,f,g,h,i]);[e,f,g,h,i]=j.then?(await j)():j,d.Ik({tables:d.YO(d.Ik({name:d.Yj().trim().min(1),domain:d.Yj().nullish(),description:d.Yj().nullish(),columns:d.YO(d.Ik({name:d.Yj().trim().min(1),type:d.Yj().trim().min(1),isPk:d.zM().optional(),isFk:d.zM().optional(),nullable:d.zM().optional(),note:d.Yj().nullish()})).default([])})).default([]),relations:d.YO(d.Ik({fromTable:d.Yj(),fromColumn:d.Yj(),toTable:d.Yj(),toColumn:d.Yj(),label:d.Yj().nullish()})).default([]),endpoints:d.YO(d.Ik({method:d.Yj().trim().min(1),path:d.Yj().trim().min(1),domain:d.Yj().nullish(),description:d.Yj().nullish(),uses:d.YO(d.Ik({table:d.Yj(),access:d.Yj().default("read")})).default([])})).default([])}),b()}catch(a){b(a)}})},7913:(a,b,c)=>{c.d(b,{$Y:()=>j,M7:()=>h,gY:()=>i});var d=c(23873);let e=d.k5(["ROADMAP","ARCHITECTURE"]),f=d.k5(["FEATURE","BUG"]),g=d.k5(["frontend","backend","fullstack"]);d.k5(["user","agent"]);let h=d.k5(["PENDING","IN_PROGRESS","DONE","BLOCKED","CANCELLED","DEPRIORITIZED","KEEP","REBUILD","REPLACE","DROP"]);d.k5(["DEPENDS","CONTAINS","RELATES","REPLACES"]);let i=d.Ik({id:d.Yj().trim().min(1).max(64).optional(),view:e,kind:f.optional(),title:d.Yj().trim().min(1).max(200),cluster:d.Yj().trim().max(64).nullish(),layer:g.nullish(),role:d.Yj().trim().max(500).nullish(),plain:d.Yj().trim().max(2e4).nullish(),parentId:d.Yj().nullish(),status:h.optional(),priority:d.ai().int().min(0).max(3).optional(),x:d.ai().optional(),y:d.ai().optional(),sourceRef:d.Yj().trim().max(300).nullish()}),j=d.Ik({title:d.Yj().trim().min(1).max(200).optional(),kind:f.optional(),role:d.Yj().trim().max(500).nullish(),plain:d.Yj().trim().max(2e4).nullish(),cluster:d.Yj().trim().max(64).nullish(),layer:g.nullish(),status:h.optional(),priority:d.ai().int().min(0).max(3).optional(),sourceRef:d.Yj().trim().max(300).nullish()});d.Ik({x:d.ai(),y:d.ai()}),d.Ik({fromId:d.Yj().min(1),toId:d.Yj().min(1),kind:d.k5(["DEPENDS","RELATES","REPLACES"]).optional(),label:d.Yj().trim().max(80).nullish(),sourceHandle:d.Yj().trim().max(16).nullish(),targetHandle:d.Yj().trim().max(16).nullish()})},8292:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Nh:()=>o});var e=c(23873),f=c(39321),g=c(62896),h=c(22443),i=c(4963),j=c(56258);c(526),c(58149),c(47446);var k=c(10556);c(47162),c(347),c(27840),c(66949);var l=c(3173);c(50042);var m=c(4120),n=a([g,i,j,k,l,m]);[g,i,j,k,l,m]=n.then?(await n)():n;let p=new Set(["DONE","CANCELLED","DEPRIORITIZED"]),q=new Set(["IN_PROGRESS","BLOCKED"]),r=new Set(["CANCELLED","DEPRIORITIZED"]);async function o(a){let b=new Set,c=a;for(;!b.has(c);){var d;b.add(c);let a=await g.db.query.node.findFirst({where:(a,{eq:b})=>b(a.id,c),columns:{parentId:!0,view:!0}});if(!a?.parentId||"ROADMAP"!==a.view)return;let e=await g.db.query.node.findFirst({where:(b,{eq:c})=>c(b.id,a.parentId),columns:{id:!0,status:!0,view:!0}});if(!e||"ROADMAP"!==e.view||r.has(e.status))return;let i=(d=(await g.db.query.node.findMany({where:(a,{eq:b})=>b(a.parentId,e.id),columns:{status:!0}})).map(a=>a.status)).length?d.every(a=>p.has(a))?"DONE":d.some(a=>q.has(a))?"IN_PROGRESS":"PENDING":"PENDING";if(e.status===i)return;await g.db.update(h.node).set({status:i}).where((0,f.eq)(h.node.id,e.id)),c=e.id}}e.Ik({title:e.Yj().trim().min(1),domain:e.Yj().trim().min(1),role:e.Yj().nullish(),plain:e.Yj().nullish(),layer:e.Yj().nullish(),status:e.Yj().nullish(),files:e.YO(e.Yj()).optional(),depends:e.YO(e.Yj()).optional(),bugs:e.YO(e.Ik({note:e.Yj().trim().min(1).max(2e3)})).optional()}),d()}catch(a){d(a)}})},8422:(a,b,c)=>{c.d(b,{p:()=>f});var d=c(48249);c(67484);var e=c(33191);function f({className:a,type:b,...c}){return(0,d.jsx)("input",{type:b,"data-slot":"input",className:(0,e.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",a),...c})}},10556:(a,b,c)=>{c.a(a,async(a,b)=>{try{var d=c(62896);c(22443),c(47446);var e=a([d]);d=(e.then?(await e)():e)[0],b()}catch(a){b(a)}})},16189:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{n:()=>i});var e=c(80941),f=c(62896),g=a([f]);async function h(a){if(a)return void await (0,e.kO)(a);let b=(0,e.UP)();b?await (0,e.kO)(b):await (0,f.e$)()}async function i(a){let b=null;try{let{cookies:a}=await c.e(6042).then(c.bind(c,36042)),d=await a(),f=d.get(e.Dk)?.value??null;b=f&&(0,e.K4)(f)?f:null}catch{}return await h(b),(0,e.X_)(b,a)}f=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},22443:(a,b,c)=>{c.r(b),c.d(b,{appSetting:()=>E,boardAnnotation:()=>r,bugFlag:()=>s,codeFile:()=>B,codeFileEdge:()=>C,dbColumn:()=>u,dbRelation:()=>v,dbTable:()=>t,draftColumn:()=>z,draftRelation:()=>A,draftTable:()=>y,edge:()=>o,endpoint:()=>w,endpointTable:()=>x,node:()=>l,nodeFile:()=>m,nodeTags:()=>p,note:()=>q,planContract:()=>H,projectMeta:()=>F,syncState:()=>D,tag:()=>n,workspaceFlag:()=>G});var d=c(16996),e=c(55402),f=c(76003),g=c(24267),h=c(3161),i=c(80822),j=c(96508),k=c(70202);let l=(0,d.D)("Node",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),view:(0,e.Qq)().notNull(),kind:(0,e.Qq)().default("FEATURE").notNull(),cluster:(0,e.Qq)(),layer:(0,e.Qq)(),title:(0,e.Qq)().notNull(),role:(0,e.Qq)(),plain:(0,e.Qq)(),status:(0,e.Qq)().default("PENDING").notNull(),priority:(0,f.nd)().default(2).notNull(),progress:(0,f.nd)().default(0).notNull(),x:(0,g.x)().default(0).notNull(),y:(0,g.x)().default(0).notNull(),sourceRef:(0,e.Qq)(),externalId:(0,e.Qq)(),source:(0,e.Qq)().default("MANUAL").notNull(),planId:(0,e.Qq)(),parentId:(0,e.Qq)(),createdAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date),externalUpdatedAt:(0,f.nd)({mode:"timestamp_ms"}),externalSyncedAt:(0,f.nd)({mode:"timestamp_ms"}),externalSnapshot:(0,e.Qq)(),assigneeName:(0,e.Qq)(),assigneeAvatarUrl:(0,e.Qq)(),externalMeta:(0,e.Qq)(),hiddenAt:(0,f.nd)({mode:"timestamp_ms"})},a=>[(0,h.Pe)("Node_cluster_idx").on(a.cluster),(0,h.Pe)("Node_parentId_idx").on(a.parentId),(0,h.Pe)("Node_view_idx").on(a.view),(0,i.mt)(()=>({columns:[a.parentId],foreignColumns:[a.id],name:"Node_parentId_Node_id_fk"})).onUpdate("cascade").onDelete("cascade")]),m=(0,d.D)("NodeFile",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),nodeId:(0,e.Qq)().notNull().references(()=>l.id,{onDelete:"cascade",onUpdate:"cascade"}),path:(0,e.Qq)().notNull()},a=>[(0,h.GL)("NodeFile_nodeId_path_key").on(a.nodeId,a.path),(0,h.Pe)("NodeFile_nodeId_idx").on(a.nodeId)]),n=(0,d.D)("Tag",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),label:(0,e.Qq)().notNull(),color:(0,e.Qq)()},a=>[(0,h.GL)("Tag_label_key").on(a.label)]),o=(0,d.D)("Edge",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),fromId:(0,e.Qq)().notNull().references(()=>l.id,{onDelete:"cascade",onUpdate:"cascade"}),toId:(0,e.Qq)().notNull().references(()=>l.id,{onDelete:"cascade",onUpdate:"cascade"}),kind:(0,e.Qq)().default("DEPENDS").notNull(),label:(0,e.Qq)(),sourceHandle:(0,e.Qq)(),targetHandle:(0,e.Qq)()},a=>[(0,h.GL)("Edge_fromId_toId_kind_key").on(a.fromId,a.toId,a.kind),(0,h.Pe)("Edge_toId_idx").on(a.toId),(0,h.Pe)("Edge_fromId_idx").on(a.fromId)]),p=(0,d.D)("_NodeTags",{a:(0,e.Qq)("A").notNull().references(()=>l.id,{onDelete:"cascade",onUpdate:"cascade"}),b:(0,e.Qq)("B").notNull().references(()=>n.id,{onDelete:"cascade",onUpdate:"cascade"})},a=>[(0,h.GL)("_NodeTags_AB_unique").on(a.a,a.b),(0,h.Pe)("_NodeTags_B_index").on(a.b)]),q=(0,d.D)("Note",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),title:(0,e.Qq)().default("Untitled").notNull(),body:(0,e.Qq)().default("").notNull(),ord:(0,g.x)().default(0).notNull(),pinned:(0,f.nd)({mode:"boolean"}).default(!1).notNull(),createdAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},a=>[(0,h.Pe)("Note_updatedAt_idx").on(a.updatedAt)]),r=(0,d.D)("BoardAnnotation",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),targetKind:(0,e.Qq)().notNull(),targetId:(0,e.Qq)().notNull(),columnName:(0,e.Qq)(),body:(0,e.Qq)().default("").notNull(),x:(0,g.x)(),y:(0,g.x)(),createdAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},a=>[(0,h.Pe)("BoardAnnotation_target_idx").on(a.targetId)]),s=(0,d.D)("BugFlag",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),nodeId:(0,e.Qq)().notNull().references(()=>l.id,{onDelete:"cascade",onUpdate:"cascade"}),by:(0,e.Qq)().notNull(),note:(0,e.Qq)().notNull(),resolvedAt:(0,f.nd)({mode:"timestamp_ms"}),createdAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},a=>[(0,h.Pe)("BugFlag_nodeId_idx").on(a.nodeId)]),t=(0,d.D)("DbTable",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),name:(0,e.Qq)().notNull(),domain:(0,e.Qq)(),description:(0,e.Qq)(),source:(0,e.Qq)().default("MANUAL").notNull(),planId:(0,e.Qq)(),x:(0,g.x)().default(0).notNull(),y:(0,g.x)().default(0).notNull(),createdAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},a=>[(0,h.Pe)("DbTable_domain_idx").on(a.domain),(0,h.GL)("DbTable_name_key").on(a.name)]),u=(0,d.D)("DbColumn",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),tableId:(0,e.Qq)().notNull().references(()=>t.id,{onDelete:"cascade",onUpdate:"cascade"}),name:(0,e.Qq)().notNull(),type:(0,e.Qq)().notNull(),isPk:(0,f.nd)({mode:"boolean"}).default(!1).notNull(),isFk:(0,f.nd)({mode:"boolean"}).default(!1).notNull(),nullable:(0,f.nd)({mode:"boolean"}).default(!0).notNull(),note:(0,e.Qq)(),ord:(0,f.nd)().default(0).notNull()},a=>[(0,h.GL)("DbColumn_tableId_name_key").on(a.tableId,a.name),(0,h.Pe)("DbColumn_tableId_idx").on(a.tableId)]),v=(0,d.D)("DbRelation",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),fromTableId:(0,e.Qq)().notNull().references(()=>t.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:(0,e.Qq)().notNull().references(()=>t.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:(0,e.Qq)().notNull(),toColumn:(0,e.Qq)().notNull(),label:(0,e.Qq)()},a=>[(0,h.Pe)("DbRelation_toTableId_idx").on(a.toTableId),(0,h.Pe)("DbRelation_fromTableId_idx").on(a.fromTableId)]),w=(0,d.D)("Endpoint",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),method:(0,e.Qq)().notNull(),path:(0,e.Qq)().notNull(),domain:(0,e.Qq)(),description:(0,e.Qq)(),source:(0,e.Qq)().default("MANUAL").notNull(),planId:(0,e.Qq)(),x:(0,g.x)().default(0).notNull(),y:(0,g.x)().default(0).notNull(),createdAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},a=>[(0,h.GL)("Endpoint_method_path_key").on(a.method,a.path),(0,h.Pe)("Endpoint_domain_idx").on(a.domain)]),x=(0,d.D)("EndpointTable",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),endpointId:(0,e.Qq)().notNull().references(()=>w.id,{onDelete:"cascade",onUpdate:"cascade"}),tableId:(0,e.Qq)().notNull().references(()=>t.id,{onDelete:"cascade",onUpdate:"cascade"}),access:(0,e.Qq)().default("read").notNull()},a=>[(0,h.GL)("EndpointTable_endpointId_tableId_key").on(a.endpointId,a.tableId),(0,h.Pe)("EndpointTable_tableId_idx").on(a.tableId)]),y=(0,d.D)("DraftTable",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),name:(0,e.Qq)().notNull(),domain:(0,e.Qq)(),description:(0,e.Qq)(),x:(0,g.x)().default(0).notNull(),y:(0,g.x)().default(0).notNull(),createdAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},a=>[(0,h.GL)("DraftTable_name_key").on(a.name)]),z=(0,d.D)("DraftColumn",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),tableId:(0,e.Qq)().notNull().references(()=>y.id,{onDelete:"cascade",onUpdate:"cascade"}),name:(0,e.Qq)().notNull(),type:(0,e.Qq)().notNull(),isPk:(0,f.nd)({mode:"boolean"}).default(!1).notNull(),isFk:(0,f.nd)({mode:"boolean"}).default(!1).notNull(),nullable:(0,f.nd)({mode:"boolean"}).default(!0).notNull(),note:(0,e.Qq)(),ord:(0,f.nd)().default(0).notNull()},a=>[(0,h.Pe)("DraftColumn_tableId_idx").on(a.tableId)]),A=(0,d.D)("DraftRelation",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),fromTableId:(0,e.Qq)().notNull().references(()=>y.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:(0,e.Qq)().notNull().references(()=>y.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:(0,e.Qq)().notNull(),toColumn:(0,e.Qq)().notNull(),label:(0,e.Qq)()},a=>[(0,h.Pe)("DraftRelation_toTableId_idx").on(a.toTableId),(0,h.Pe)("DraftRelation_fromTableId_idx").on(a.fromTableId)]),B=(0,d.D)("CodeFile",{path:(0,e.Qq)().primaryKey(),root:(0,e.Qq)(),lang:(0,e.Qq)(),x:(0,g.x)().default(0).notNull(),y:(0,g.x)().default(0).notNull(),mtimeMs:(0,g.x)(),size:(0,f.nd)(),inDegree:(0,f.nd)().default(0).notNull(),outDegree:(0,f.nd)().default(0).notNull(),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),C=(0,d.D)("CodeFileEdge",{fromPath:(0,e.Qq)().notNull().references(()=>B.path,{onDelete:"cascade",onUpdate:"cascade"}),toPath:(0,e.Qq)().notNull().references(()=>B.path,{onDelete:"cascade",onUpdate:"cascade"}),circular:(0,f.nd)({mode:"boolean"}).default(!1).notNull()},a=>[(0,h.Pe)("CodeFileEdge_circular_idx").on(a.circular),(0,h.Pe)("CodeFileEdge_toPath_idx").on(a.toPath),(0,h.Pe)("CodeFileEdge_fromPath_idx").on(a.fromPath),(0,j.ie)({columns:[a.fromPath,a.toPath],name:"CodeFileEdge_fromPath_toPath_pk"})]),D=(0,d.D)("SyncState",{id:(0,e.Qq)().primaryKey().default("singleton"),version:(0,f.nd)().default(0).notNull(),codeGraphSyncedAt:(0,f.nd)({mode:"timestamp_ms"}),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),E=(0,d.D)("AppSetting",{id:(0,e.Qq)().primaryKey().default("singleton"),editor:(0,e.Qq)().default("auto").notNull(),currentFeatureId:(0,e.Qq)(),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),F=(0,d.D)("ProjectMeta",{id:(0,e.Qq)().primaryKey().default("singleton"),overview:(0,e.Qq)(),conventions:(0,e.Qq)().default("[]").notNull(),hasFrontend:(0,f.nd)({mode:"boolean"}),classificationRoots:(0,e.Qq)().default("[]").notNull(),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),G=(0,d.D)("WorkspaceFlag",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),key:(0,e.Qq)().notNull(),enabled:(0,f.nd)({mode:"boolean"}).default(!1).notNull(),config:(0,e.Qq)(),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},a=>[(0,h.GL)("WorkspaceFlag_key_key").on(a.key)]),H=(0,d.D)("PlanContract",{id:(0,e.Qq)().primaryKey().$defaultFn(()=>(0,k.sX)()),planId:(0,e.Qq)().notNull(),declaredFiles:(0,e.Qq)().default("[]").notNull(),authorizedExtras:(0,e.Qq)().default("[]").notNull(),active:(0,f.nd)({mode:"boolean"}).default(!1).notNull(),createdAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,f.nd)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},a=>[(0,h.GL)("PlanContract_planId_key").on(a.planId),(0,h.Pe)("PlanContract_active_idx").on(a.active)])},23727:(a,b,c)=>{c.d(b,{U:()=>h,ZH:()=>i,u1:()=>j});var d=c(55030);function e(a){let{x:b,y:c}=a.internals.positionAbsolute,d=a.measured?.width??0,e=a.measured?.height??0;return{x:b,y:c,w:d,h:e,cx:b+d/2,cy:c+e/2}}function f(a,b){let c=e(a),d=e(b),f=c.w/2||1,g=c.h/2||1,h=(d.cx-c.cx)/(2*f)-(d.cy-c.cy)/(2*g),i=(d.cx-c.cx)/(2*f)+(d.cy-c.cy)/(2*g),j=1/(Math.abs(h)+Math.abs(i)||1);return{x:f*j*(h+i)+c.cx,y:g*j*(-h+i)+c.cy}}function g(a,b){let c=e(a),f=Math.round(b.x),g=Math.round(b.y);return f<=Math.round(c.x)+1?d.yX.Left:f>=Math.round(c.x+c.w)-1?d.yX.Right:g<=Math.round(c.y)+1?d.yX.Top:d.yX.Bottom}function h(a,b){let c=f(a,b),d=f(b,a);return{sx:c.x,sy:c.y,tx:d.x,ty:d.y,sourcePos:g(a,c),targetPos:g(b,d)}}function i(a,b,c,d,e){let f=e.filter(e=>(function(a,b,c,d,e){let f=e.x-14,g=e.x+e.w+14,h=e.y-14,i=e.y+e.h+14;if(Math.max(a,c)<f||Math.min(a,c)>g||Math.max(b,d)<h||Math.min(b,d)>i)return!1;for(let e=1;e<24;e++){let j=e/24,k=a+(c-a)*j,l=b+(d-b)*j;if(k>=f&&k<=g&&l>=h&&l<=i)return!0}return!1})(a,b,c,d,e));if(!f.length)return null;let g=(a+c)/2,h=(b+d)/2,i=Math.min(...f.map(a=>a.y))-14-26,j=Math.max(...f.map(a=>a.y+a.h))+14+26,k=Math.abs(i-h)<=Math.abs(j-h)?i:j,l=a+(c-a)*.25,m=a+(c-a)*.75;return{path:`M ${a},${b} C ${l},${k} ${m},${k} ${c},${d}`,labelX:g,labelY:k}}function j(a,b){let c=a.x+a.w/2,d=a.y+a.h/2,e=b.x-c,f=b.y-d;if(0===e&&0===f)return{x:c,y:d};let g=1/Math.max(Math.abs(e)/(a.w/2||1),Math.abs(f)/(a.h/2||1));return{x:c+e*g,y:d+f*g}}},25127:(a,b,c)=>{c.d(b,{W:()=>e});var d=c(67484);function e(a,b){let[c,e]=(0,d.useState)(!1),[f,g]=(0,d.useState)(0),h=c?a[f]??null:null,i=(0,d.useCallback)(()=>{g(0),e(!0)},[]),j=(0,d.useCallback)(()=>e(!1),[]),k=(0,d.useCallback)(()=>g(b=>Math.min(b+1,a.length-1)),[a.length]),l=(0,d.useCallback)(()=>g(a=>Math.max(a-1,0)),[]),m=(0,d.useCallback)(b=>{b>=0&&b<a.length&&g(b)},[a.length]),n=(0,d.useMemo)(()=>h&&h.focusIds.length?new Set(h.focusIds):null,[h]);return{active:c,index:f,step:h,start:i,stop:j,next:k,prev:l,goto:m,focusIds:n}}},27267:(a,b,c)=>{c.d(b,{TT:()=>f,Xf:()=>h,m6:()=>e,nR:()=>g,yl:()=>d});let d=["PENDING","IN_PROGRESS","DONE","BLOCKED","CANCELLED","DEPRIORITIZED"],e=["KEEP","REBUILD","REPLACE","DROP"],f=["IN_PROGRESS","PENDING","BLOCKED","DONE","DEPRIORITIZED","CANCELLED"],g={DONE:{label:"Done",className:"border-emerald-500/30 bg-emerald-500/15 text-emerald-700 dark:text-emerald-300"},IN_PROGRESS:{label:"In progress",className:"border-sky-500/30 bg-sky-500/15 text-sky-700 dark:text-sky-300"},PENDING:{label:"Pending",className:"border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-200"},BLOCKED:{label:"Blocked",className:"border-orange-500/30 bg-orange-500/15 text-orange-700 dark:text-orange-300"},CANCELLED:{label:"Cancelled",className:"border-zinc-500/30 bg-zinc-500/10 text-zinc-600 dark:text-zinc-400 line-through"},DEPRIORITIZED:{label:"Deprioritized",className:"border-zinc-600/40 bg-zinc-600/10 text-zinc-600 dark:text-zinc-400"},KEEP:{label:"Keep",className:"border-emerald-500/30 bg-emerald-500/15 text-emerald-700 dark:text-emerald-300"},REBUILD:{label:"Rebuild",className:"border-violet-500/30 bg-violet-500/15 text-violet-700 dark:text-violet-300"},REPLACE:{label:"Replace",className:"border-rose-500/30 bg-rose-500/15 text-rose-700 dark:text-rose-300"},DROP:{label:"Drop",className:"border-zinc-500/30 bg-zinc-500/10 text-zinc-600 dark:text-zinc-400 line-through"}};function h(a){return a?.trim()||"—"}},27741:(a,b,c)=>{c.d(b,{S:()=>d});function d(a,b={}){let c=b.pad??20,e=b.header??26,f=new Map;for(let b of a){let a=f.get(b.group);a?(a.minX=Math.min(a.minX,b.x),a.minY=Math.min(a.minY,b.y),a.maxX=Math.max(a.maxX,b.x+b.w),a.maxY=Math.max(a.maxY,b.y+b.h),a.count++):f.set(b.group,{minX:b.x,minY:b.y,maxX:b.x+b.w,maxY:b.y+b.h,count:1})}return Array.from(f.entries()).sort(([a],[b])=>a.localeCompare(b)).map(([a,b])=>({key:a,label:a,x:b.minX-c,y:b.minY-c-e,w:b.maxX-b.minX+2*c,h:b.maxY-b.minY+2*c+e,count:b.count}))}},27840:(a,b,c)=>{},29303:(a,b,c)=>{c.a(a,async(a,b)=>{try{var d=c(62896);c(22443);var e=a([d]);d=(e.then?(await e)():e)[0],b()}catch(a){b(a)}})},30693:(a,b,c)=>{c.d(b,{Sq:()=>j,ZB:()=>o,aO:()=>l,aU:()=>n,p_:()=>k,yc:()=>m});var d=c(48249),e=c(49783),f=c(45535),g=c(48779),h=c(62190),i=c(33191);let j="!h-6 w-fit max-w-full !gap-1 rounded-md !border-0 !bg-transparent !px-1.5 !py-0 text-xs font-medium !shadow-none transition-colors hover:!bg-[var(--ink-hover)] [&_svg]:size-3";function k({topOffset:a,children:b,style:c}){return(0,d.jsx)(g.b,{className:"absolute bottom-0 right-0 z-10 flex w-[340px] flex-col rounded-none border-y-0 border-r-0",style:{top:a??0,...c},children:b})}function l({tabs:a,breadcrumb:b,comment:c,onClose:g}){return(0,d.jsxs)("div",{className:"flex items-center gap-1 border-b border-border py-2 pl-3 pr-2",children:[a?(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-0.5",children:[(0,d.jsx)(h.E,{active:"details"===a.active,onClick:()=>a.onChange("details"),children:"Details"}),(0,d.jsxs)(h.E,{active:"comments"===a.active,onClick:()=>a.onChange("comments"),children:["Comments",a.count>0&&(0,d.jsx)("span",{className:"ml-1 rounded-full bg-[var(--ink-active)] px-1 text-[9px] font-semibold leading-4",children:a.count})]})]}):(0,d.jsx)("span",{className:"min-w-0 truncate text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:b}),(0,d.jsxs)("div",{className:"ml-auto flex shrink-0 items-center gap-0.5",children:[c&&(0,d.jsx)("button",{type:"button",title:c.title,onClick:c.onClick,className:"rounded-md p-1 text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-[var(--accent-2,#ff7a45)]",children:(0,d.jsx)(e.A,{className:"size-4"})}),(0,d.jsx)("button",{onClick:g,title:"Close panel",className:"rounded-md p-1 text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-foreground",children:(0,d.jsx)(f.A,{className:"size-4"})})]})]})}function m({icon:a,label:b,children:c}){return(0,d.jsxs)("div",{className:"flex min-h-7 items-center gap-2 text-xs",children:[(0,d.jsxs)("span",{className:"flex w-[88px] shrink-0 items-center gap-1.5 text-muted-foreground",children:[(0,d.jsx)(a,{className:"size-3.5"}),b]}),(0,d.jsx)("div",{className:"flex min-w-0 flex-1 items-center",children:c})]})}function n({title:a,children:b,className:c}){return(0,d.jsxs)("div",{className:(0,i.cn)("mt-4 border-t border-border pt-3",c),children:[(0,d.jsx)("h3",{className:"mb-1.5 flex items-center gap-1.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:a}),b]})}function o({label:a,value:b}){return(0,d.jsxs)("div",{children:[(0,d.jsx)("dd",{className:"text-lg font-semibold tabular-nums",children:b}),(0,d.jsx)("dt",{className:"text-[10px] uppercase tracking-wide text-muted-foreground",children:a})]})}},32450:(a,b,c)=>{c.d(b,{$2:()=>g,a4:()=>e,no:()=>f});var d=c(67484);let e=new Set(["ROADMAP","ARCHITECTURE","DATABASE"]),f=(0,d.createContext)(null);function g(){return(0,d.useContext)(f)}},32798:(a,b,c)=>{c.d(b,{m:()=>d});function d(a,b){let c=[];return a.forEach((a,d)=>{let e=a.excerpt.trim();if(!e)return;let f={annotationId:a.id,n:d+1};for(let a of b.tables){if(e===a.name)return void c.push({...f,kind:"table",targetId:a.id,column:null});if(e.startsWith(`${a.name}.`)){let b=e.slice(a.name.length+1);if(a.columns.includes(b))return void c.push({...f,kind:"column",targetId:a.id,column:b})}}for(let a of b.endpoints??[])if(e===`${a.method} ${a.path}`)return void c.push({...f,kind:"endpoint",targetId:a.id,column:null});for(let a of b.features??[])if(e===a.title||e===`feature: ${a.title}`)return void c.push({...f,kind:"feature",targetId:a.id,column:null})}),c}},33346:(a,b,c)=>{c.d(b,{a2:()=>g,i3:()=>j,xZ:()=>h});let d=["bg-emerald-500/15 text-emerald-700 dark:text-emerald-300","bg-sky-500/15 text-sky-700 dark:text-sky-300","bg-violet-500/15 text-violet-700 dark:text-violet-300","bg-amber-500/15 text-amber-700 dark:text-amber-200","bg-rose-500/15 text-rose-700 dark:text-rose-300","bg-cyan-500/15 text-cyan-700 dark:text-cyan-300","bg-fuchsia-500/15 text-fuchsia-700 dark:text-fuchsia-300","bg-lime-500/15 text-lime-700 dark:text-lime-300","bg-orange-500/15 text-orange-700 dark:text-orange-300","bg-teal-500/15 text-teal-700 dark:text-teal-300","bg-indigo-500/15 text-indigo-700 dark:text-indigo-300","bg-pink-500/15 text-pink-700 dark:text-pink-300"],e=["border-emerald-500/20 bg-emerald-500/[0.04]","border-sky-500/20 bg-sky-500/[0.04]","border-violet-500/20 bg-violet-500/[0.04]","border-amber-500/20 bg-amber-500/[0.04]","border-rose-500/20 bg-rose-500/[0.04]","border-cyan-500/20 bg-cyan-500/[0.04]","border-fuchsia-500/20 bg-fuchsia-500/[0.04]","border-lime-500/20 bg-lime-500/[0.04]","border-orange-500/20 bg-orange-500/[0.04]","border-teal-500/20 bg-teal-500/[0.04]","border-indigo-500/20 bg-indigo-500/[0.04]","border-pink-500/20 bg-pink-500/[0.04]"];function f(a){let b=(a??"").trim().toUpperCase();if(!b)return null;let c=0;for(let a=0;a<b.length;a++)c=31*c+b.charCodeAt(a)>>>0;return c%d.length}function g(a){let b=f(a);return null===b?"bg-[var(--ink-active)] text-muted-foreground":d[b]}function h(a){let b=f(a);return null===b?"border-border bg-[var(--ink-hover)]":e[b]}let i=["#34d399","#38bdf8","#a78bfa","#fbbf24","#fb7185","#22d3ee","#e879f9","#a3e635","#fb923c","#2dd4bf","#818cf8","#f472b6"];function j(a){let b=f(a);return null===b?"#9ca3af":i[b]}},34849:(a,b,c)=>{c.d(b,{Gg:()=>f,VI:()=>i});var d=c(27267),e=c(86892);function f(a){let b=(a.stateName??"").trim();if(!b)return a.status;let c=d.nR[a.status]?.label??a.status;return b.toLowerCase()===c.toLowerCase()?a.status:b}let g={started:"IN_PROGRESS",triage:"PENDING",backlog:"PENDING",unstarted:"PENDING",completed:"DONE",canceled:"CANCELLED"};function h(a,b,c){let d,e;return null==a.title?c:Math.max(c,(e=66+(((d=(a.title??"").trim())?Math.max(1,Math.ceil(d.length/17)):1)-1)*19,a.role&&a.role.trim()&&(e+=16),b>0&&(e+=22),e+24))}function i(a,b,c={}){let j=c.colW??320,k=c.rowH??150,l=c.childIndent??24,m=c.laneGap??56,n=c.bandGap??110,o=c.maxCols??10,p=c.minBandW??3*j,q=new Set(a.map(a=>a.id)),r=a=>!a.parentId||!q.has(a.parentId),s=a.filter(r),t=new Map;for(let b of a){if(r(b))continue;let a=t.get(b.parentId);a?a.push(b):t.set(b.parentId,[b])}let u="status"===b?f:"priority"===b?a=>String(a.priority):a=>(a.cluster??"").trim()||"—",v=new Map;for(let a of s){let b=u(a),c=v.get(b);c?c.push(a):v.set(b,[a])}let w=(function(a,b,c){if("status"===a){let a=new Set(d.TT),e=new Map;for(let d of b){let b=c(d);a.has(b)||e.has(b)||e.set(b,g[d.stateType??""]??"PENDING")}let f=[];for(let a of d.TT)f.push(a),f.push(...Array.from(e).filter(([,b])=>b===a).map(([a])=>a).sort());return f}if("priority"===a)return["0","1","2","3"];let e=Array.from(new Set(b.map(c))),f=e.filter(a=>"—"!==a).sort();return e.includes("—")?[...f,"—"]:f})(b,s,u).filter(a=>v.has(a)),x=[];for(let a of w){let b=v.get(a),c=b.reduce((a,b)=>a+1+(t.get(b.id)?.length??0),0),d=Math.max(1,Math.min(o,b.length,Math.round(Math.sqrt(.85*c))||1)),e=Array(d).fill(0),f=new Map;for(let a of b){let b=0;for(let a=1;a<d;a++)e[a]<e[b]&&(b=a);let c=b*j,g=e[b];f.set(a.id,{x:c,y:g});let i=t.get(a.id)??[],m=g+h(a,i.length,k);for(let a of i)f.set(a.id,{x:c+l,y:m}),m+=h(a,0,k);e[b]=m}let g=e.reduce((a,b)=>Math.max(a,b),0);x.push({id:a,w:d*j,h:g,local:f})}let y=(0,e.Xi)(x.map(a=>({id:a.id,w:a.w,h:a.h})),{gapX:m,gapY:n,viewportAspect:c.viewportAspect,minBandW:p,aspectSlack:1.5}),z=new Map;for(let a of x){let b=y.get(a.id);for(let[c,d]of a.local)z.set(c,{x:b.x+d.x,y:b.y+d.y})}return z}},35283:(a,b,c)=>{c.d(b,{H:()=>k,e:()=>j});var d=c(48249),e=c(67484),f=c(55030),g=c(8727),h=c(44010),i=c(33191);function j(a="pan"){let[b,c]=(0,e.useState)(a),d="pan"===b?{panOnDrag:!0,selectionOnDrag:!1,selectionMode:f.Qc.Partial,selectNodesOnDrag:!1}:{panOnDrag:[1,2],selectionOnDrag:!0,selectionMode:f.Qc.Partial,selectNodesOnDrag:!1};return{tool:b,setTool:c,flowProps:d,paneClass:"select"===b?"rf-tool-select":void 0}}function k({tool:a,onChange:b}){return(0,d.jsxs)("div",{className:"flex items-center gap-0.5 rounded-xl border border-border bg-card/95 p-1 shadow-lg backdrop-blur dark:border-white/15 dark:bg-[#202024]/95",children:[(0,d.jsx)(l,{active:"select"===a,label:"Select tool (V) — drag to box-select; move many nodes at once",onClick:()=>b("select"),children:(0,d.jsx)(g.A,{className:"size-4"})}),(0,d.jsx)(l,{active:"pan"===a,label:"Hand tool (H) — drag to pan the board",onClick:()=>b("pan"),children:(0,d.jsx)(h.A,{className:"size-4"})})]})}function l({active:a,label:b,onClick:c,children:e}){return(0,d.jsx)("button",{type:"button",title:b,"aria-pressed":a,onClick:c,className:(0,i.cn)("flex size-7 items-center justify-center rounded-lg transition-colors",a?"bg-[#ff7a45]/15 text-[#ff7a45]":"text-muted-foreground hover:bg-[var(--ink-active)] hover:text-foreground dark:hover:bg-white/8"),children:e})}},38476:(a,b,c)=>{c.d(b,{F1:()=>o,VY:()=>j,e6:()=>f,gG:()=>n,gX:()=>l,qA:()=>e,ru:()=>g});let d={auth:"#4ea1ff",firms:"#c792ea",search:"#7bd389",storage:"#ffb86b",petitions:"#ff7a45",monitoring:"#f5b942",admin:"#ff6b9d"};function e(a){return a&&d[a]||"#8a8a8a"}let f={GET:"#7bd389",POST:"#4ea1ff",PUT:"#ffb86b",PATCH:"#ffb86b",DELETE:"#ff3860"},g={read:"#4ea1ff",write:"#ffb86b","read-write":"#c792ea"},h="text-[#4b5563] dark:text-[#8a8a8a]",i={GET:"text-[#15803d] dark:text-[#7bd389]",POST:"text-[#1d4ed8] dark:text-[#4ea1ff]",PUT:"text-[#b45309] dark:text-[#ffb86b]",PATCH:"text-[#b45309] dark:text-[#ffb86b]",DELETE:"text-[#be123c] dark:text-[#ff3860]"};function j(a){return a&&i[a]||h}let k={read:"text-[#1d4ed8] dark:text-[#4ea1ff]",write:"text-[#b45309] dark:text-[#ffb86b]","read-write":"text-[#6d28d9] dark:text-[#c792ea]"};function l(a){return a&&k[a]||h}let m={auth:"text-[#1d4ed8] dark:text-[#4ea1ff]",firms:"text-[#6d28d9] dark:text-[#c792ea]",search:"text-[#15803d] dark:text-[#7bd389]",storage:"text-[#b45309] dark:text-[#ffb86b]",petitions:"text-[#c2410c] dark:text-[#ff7a45]",monitoring:"text-[#b45309] dark:text-[#f5b942]",admin:"text-[#be185d] dark:text-[#ff6b9d]"};function n(a){return a&&m[a]||h}function o(a,b){let c=new Set([a]);for(let d of b)d.source===a&&c.add(d.target),d.target===a&&c.add(d.source);return c}},40335:(a,b,c)=>{c.d(b,{b:()=>g,d:()=>h});let d=a=>a.slice(a.lastIndexOf("/")+1),e=(a,b)=>b>a?", …":"";function f(a){let b=new Map;for(let c of a)b.set(d(c),(b.get(d(c))??0)+1);return a.map(a=>{let c=d(a);if((b.get(c)??0)<=1)return c;let e=a.slice(0,a.lastIndexOf("/")),f=e.slice(e.lastIndexOf("/")+1);return f?`${f}/${c}`:c})}function g(a,b,c){if(0===a.length)return[];let d=a=>c.get(a)??"(root)",g=new Map;for(let b of a){let a=d(b.path),c=g.get(a);c?c.push(b):g.set(a,[b])}let h=[...g.keys()],i=a=>g.get(a)?.length??0,j=new Map,k=new Map;for(let a of h)j.set(a,new Set),k.set(a,0);let l=new Set;for(let a of b){if(a.circular)continue;let b=d(a.from),c=d(a.to);if(b===c||!j.has(b)||!j.has(c))continue;let e=`${b}\0${c}`;l.has(e)||(l.add(e),j.get(b).add(c),k.set(c,(k.get(c)??0)+1))}let m=(a,b)=>i(b)-i(a)||a.localeCompare(b),n=new Map(k),o=new Set,p=[];for(;p.length<h.length;){let a=h.filter(a=>!o.has(a)&&(n.get(a)??0)===0).sort(m);if(0===a.length){for(let a of h.filter(a=>!o.has(a)).sort((a,b)=>(n.get(a)??0)-(n.get(b)??0)||i(b)-i(a)||a.localeCompare(b)))p.push(a),o.add(a);break}for(let b of a)for(let a of(p.push(b),o.add(b),j.get(b)))n.set(a,(n.get(a)??0)-1)}let q=a.filter(a=>(a.inDegree??0)===0).sort((a,b)=>(b.outDegree??0)-(a.outDegree??0)||a.path.localeCompare(b.path)),r=[];if(r.push({id:"tour:overview",kind:"overview",title:"Project overview",summary:`${a.length} files across ${h.length} ${1===h.length?"area":"areas"} \xb7 ${b.length} imports. Step through the architecture in dependency order — entry points first.`,focusIds:[]}),q.length){let a=f(q.slice(0,4).map(a=>a.path));r.push({id:"tour:entry",kind:"entry",title:"Entry points",summary:`${q.length} file${1===q.length?"":"s"} nothing imports — where execution starts: ${a.join(", ")}${e(4,q.length)}.`,focusIds:q.slice(0,12).map(a=>a.path)})}for(let a of p){let b=g.get(a),c=f([...b].sort((a,b)=>(b.inDegree??0)-(a.inDegree??0)||a.path.localeCompare(b.path)).slice(0,3).map(a=>a.path)),d=[...j.get(a)].sort(m),h=d.length?` \xb7 imports ${d.slice(0,3).join(", ")}${e(3,d.length)}`:" \xb7 no cross-area imports";r.push({id:`tour:group:${a}`,kind:"group",title:a,summary:`${b.length} file${1===b.length?"":"s"}${h} \xb7 top hubs: ${c.join(", ")}.`,focusIds:b.map(a=>a.path)})}return r}function h(a){if(0===a.length)return[];let b=a=>a.cluster?.trim()||"—",c=new Map;for(let d of a){let a=b(d),e=c.get(a);e?e.push(d):c.set(a,[d])}let d=a=>Math.min(...c.get(a).map(a=>a.x??0)),f=[...c.keys()].sort((a,b)=>d(a)-d(b)||a.localeCompare(b)),g=[{id:"tour:overview",kind:"overview",title:"Architecture overview",summary:`${a.length} component${1===a.length?"":"s"} across ${f.length} ${1===f.length?"domain":"domains"}. Walk the architecture domain by domain, upstream first.`,focusIds:[]}];for(let a of f){let b=c.get(a),d=b.slice(0,3).map(a=>a.title?.trim()||a.id);g.push({id:`tour:domain:${a}`,kind:"group",title:a,summary:`${b.length} component${1===b.length?"":"s"}: ${d.join(", ")}${e(3,b.length)}.`,focusIds:b.map(a=>a.id)})}return g}},40359:(a,b,c)=>{c.d(b,{d:()=>k});var d=c(48249),e=c(32039),f=c(45535),g=c(34644),h=c(91995),i=c(48779),j=c(33191);function k({steps:a,index:b,onPrev:c,onNext:l,onExit:m,onGoto:n}){let o=a[b];if(!o)return null;let p=b===a.length-1;return(0,d.jsxs)(i.b,{className:"absolute bottom-3 left-3 top-16 z-10 flex w-72 flex-col rounded-2xl",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-3.5 py-2.5",children:[(0,d.jsxs)("span",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:[(0,d.jsx)(e.A,{className:"size-3.5"}),"Guided tour"]}),(0,d.jsx)("button",{onClick:m,title:"End tour (Esc)",className:"rounded-md p-1 text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-foreground",children:(0,d.jsx)(f.A,{className:"size-4"})})]}),(0,d.jsxs)("div",{className:"border-b border-border px-3.5 py-3",children:[(0,d.jsxs)("div",{className:"text-[10px] font-medium uppercase tracking-wide text-[var(--accent-2,#ff7a45)]",children:["Step ",b+1," / ",a.length]}),(0,d.jsx)("h2",{className:"mt-1 break-words text-sm font-semibold leading-tight",children:o.title}),(0,d.jsx)("p",{className:"mt-1 text-[11px] leading-snug text-muted-foreground",children:o.summary})]}),(0,d.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto p-1.5",children:(0,d.jsx)("ol",{className:"space-y-0.5",children:a.map((a,c)=>(0,d.jsx)("li",{children:(0,d.jsxs)("button",{onClick:()=>n(c),title:a.title,className:(0,j.cn)("flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left transition-colors",c===b?"bg-[var(--ink-active)] text-foreground":"text-muted-foreground hover:bg-[var(--ink-hover)] hover:text-foreground"),children:[(0,d.jsx)("span",{className:(0,j.cn)("flex size-4 shrink-0 items-center justify-center rounded-full text-[9px] font-bold",c===b?"bg-[var(--accent-2,#ff7a45)] text-background":"bg-[var(--ink-active)] text-muted-foreground"),children:c+1}),(0,d.jsx)("span",{className:"truncate text-[11px]",children:a.title})]})},a.id))})}),(0,d.jsxs)("div",{className:"flex items-center justify-between gap-2 border-t border-border p-2",children:[(0,d.jsxs)("button",{onClick:c,disabled:0===b,className:"flex items-center gap-1 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground transition-colors enabled:hover:bg-[var(--ink-hover)] enabled:hover:text-foreground disabled:opacity-40",children:[(0,d.jsx)(g.A,{className:"size-3.5"})," Prev"]}),p?(0,d.jsx)("button",{onClick:m,className:"rounded-md bg-[var(--accent-2,#ff7a45)]/90 px-3 py-1.5 text-[11px] font-semibold text-background transition-colors hover:bg-[var(--accent-2,#ff7a45)]",children:"Done"}):(0,d.jsxs)("button",{onClick:l,className:"flex items-center gap-1 rounded-md bg-foreground/10 px-3 py-1.5 text-[11px] font-semibold text-foreground transition-colors hover:bg-foreground/20",children:["Next ",(0,d.jsx)(h.A,{className:"size-3.5"})]})]})]})}},42800:(a,b,c)=>{c.d(b,{I:()=>j});var d=c(48249),e=c(67484),f=c(56024),g=c(55030),h=c(57684),i=c(23727);function j(a){let{deleteElements:b}=(0,f.VH)(),c=(0,f.JY)(a.source),j=(0,f.JY)(a.target),k=(0,f.pk)(),l=c&&j?(0,i.U)(c,j):null,m=(0,e.useMemo)(()=>k.filter(b=>b.id!==a.source&&b.id!==a.target).map(a=>({x:a.position.x,y:a.position.y,w:a.measured?.width??a.width??0,h:a.measured?.height??a.height??0})).filter(a=>a.w>0&&a.h>0),[k,a.source,a.target]),n=l?(0,i.ZH)(l.sx,l.sy,l.tx,l.ty,m):null,[o,p,q]=(0,g.Fp)(l?{sourceX:l.sx,sourceY:l.sy,sourcePosition:l.sourcePos,targetX:l.tx,targetY:l.ty,targetPosition:l.targetPos}:{sourceX:a.sourceX,sourceY:a.sourceY,sourcePosition:a.sourcePosition,targetX:a.targetX,targetY:a.targetY,targetPosition:a.targetPosition}),r=n?.path??o,s=n?.labelX??p,t=n?.labelY??q;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.tE,{id:a.id,path:r,style:a.style,markerEnd:a.markerEnd,interactionWidth:20}),a.label&&(0,d.jsx)(f.rV,{children:(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -120%) translate(${s}px, ${t}px)`,fontSize:11,color:"#cfcfcf",background:"#161616",padding:"1px 4px",borderRadius:4,pointerEvents:"none",zIndex:1e3},children:a.label})}),a.selected&&(0,d.jsx)(f.rV,{children:(0,d.jsx)("div",{className:"nodrag nopan",style:{position:"absolute",transform:`translate(-50%, 0) translate(${s}px, ${t+14}px)`,pointerEvents:"all",zIndex:1e3},children:(0,d.jsx)("button",{type:"button",onMouseDown:a=>a.stopPropagation(),onClick:c=>{c.stopPropagation(),b({edges:[{id:a.id}]})},title:"Delete (or press Backspace)",className:"flex size-7 items-center justify-center rounded-full border border-border bg-card/95 text-red-300 shadow-lg backdrop-blur-md transition-colors hover:bg-red-500/25 hover:text-red-200",children:(0,d.jsx)(h.A,{className:"size-3.5"})})})})]})}},47162:()=>{},47446:(a,b,c)=>{},50042:(a,b,c)=>{c(31421),c(77598),c(48161),c(76760),c(80941)},50320:(a,b,c)=>{c(66625)},50605:(a,b,c)=>{c.d(b,{J:()=>h,k:()=>g});var d=c(67484),e=c(56024),f=c(91365);function g(a){let[b,c]=(0,d.useState)("full"),g=(0,e.Pj)(c=>(0,f.gt)(c.transform[2],b,a));return g!==b&&c(g),g}function h({onLod:a,thresholds:b}){return g(b),(0,d.useRef)(null),null}},52351:(a,b,c)=>{c.d(b,{$v:()=>w,EO:()=>s,Lt:()=>o,Rx:()=>x,Zr:()=>y,ck:()=>u,r7:()=>v,tv:()=>p,wd:()=>t});var d=c(48249);c(67484);var e=c(71523),f=c(99469),g=c(60388),h=c(74283),i=c(25845),j=c(36902),k=c(64230),l=c(87298),m=c(33191),n=c(26284);function o({...a}){return(0,d.jsx)(e.V,{"data-slot":"alert-dialog",...a})}function p({...a}){return(0,d.jsx)(f.t,{"data-slot":"alert-dialog-trigger",...a})}function q({...a}){return(0,d.jsx)(g.Z,{"data-slot":"alert-dialog-portal",...a})}function r({className:a,...b}){return(0,d.jsx)(h.X,{"data-slot":"alert-dialog-overlay",className:(0,m.cn)("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",a),...b})}function s({className:a,size:b="default",...c}){return(0,d.jsxs)(q,{children:[(0,d.jsx)(r,{}),(0,d.jsx)(i.h,{"data-slot":"alert-dialog-content","data-size":b,className:(0,m.cn)("group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",a),...c})]})}function t({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"alert-dialog-header",className:(0,m.cn)("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",a),...b})}function u({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"alert-dialog-footer",className:(0,m.cn)("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",a),...b})}function v({className:a,...b}){return(0,d.jsx)(j.L,{"data-slot":"alert-dialog-title",className:(0,m.cn)("font-heading text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",a),...b})}function w({className:a,...b}){return(0,d.jsx)(k.r,{"data-slot":"alert-dialog-description",className:(0,m.cn)("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",a),...b})}function x({className:a,variant:b,size:c,...e}){return(0,d.jsx)(l.H,{"data-slot":"alert-dialog-action",className:(0,m.cn)(a),render:(0,d.jsx)(n.$,{variant:b,size:c}),...e})}function y({className:a,variant:b="outline",size:c="default",...e}){return(0,d.jsx)(l.H,{"data-slot":"alert-dialog-cancel",className:(0,m.cn)(a),render:(0,d.jsx)(n.$,{variant:b,size:c}),...e})}},52554:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{"4038c80f0b4b50ab317b1da3463121032b8dfe0741":()=>e.hg,"40467e97c598f5efce143be114d181684cdc8c8801":()=>e.HQ,"4082e119e7997decee01b634b5bb66ddef57834032":()=>e.cl,"408addacb6c8748b9c906cc5e342ebbd01b3bc27e3":()=>e.pJ,"40ad73811db4f257c117eddffe5857b199d064fe2c":()=>e.hY,"60f8cdcb5931c995e6fe5830c60072052e21e49cb9":()=>e.t3,"60fc1a1091aee96998c4058daf638f8a6efdb6f902":()=>e.Oz});var e=c(1110),f=a([e]);e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},54193:(a,b,c)=>{c.d(b,{X:()=>j});var d=c(48249),e=c(67484),f=c(29813),g=c(45535),h=c(33191),i=c(92994);function j({query:a,onQuery:b,hits:c,onPick:k,onZoomToMatches:l,placeholder:m="Search…"}){let[n,o]=(0,e.useState)(!1);return(0,d.jsxs)(i.er,{title:"Search",open:n,onOpenChange:a=>a?o(!0):void(o(!1),b("")),outsideClicksToClose:2,trigger:(b,c)=>(0,d.jsx)("button",{type:"button",onClick:c,title:"Search this canvas",className:(0,h.cn)("glass flex size-8 items-center justify-center rounded-lg transition-colors",b||a.trim()?"text-foreground":"text-muted-foreground hover:text-foreground"),children:(0,d.jsx)(f.A,{className:"size-4"})}),children:[(0,d.jsxs)("div",{className:"relative",children:[(0,d.jsx)("input",{autoFocus:!0,value:a,onChange:a=>b(a.target.value),onKeyDown:a=>{"Enter"===a.key&&l&&(a.preventDefault(),l())},placeholder:m,className:"w-full rounded-md border border-border bg-[var(--ink-hover)] py-1 pl-2 pr-7 text-[12px] outline-none placeholder:text-muted-foreground/50 focus:bg-[var(--ink-active)]"}),a&&(0,d.jsx)("button",{type:"button",onClick:()=>b(""),title:"Clear search",className:"absolute right-1 top-1/2 flex size-5 -translate-y-1/2 items-center justify-center rounded text-muted-foreground/60 transition-colors hover:bg-[var(--ink-hover)] hover:text-foreground",children:(0,d.jsx)(g.A,{className:"size-3.5"})})]}),(0,d.jsxs)("div",{className:"mt-2 max-h-64 space-y-0.5 overflow-y-auto",children:[a.trim()&&0===c.length&&(0,d.jsx)("div",{className:"px-1 py-1 text-[11px] text-muted-foreground",children:"No matches"}),c.map(a=>(0,d.jsxs)("button",{type:"button",onClick:()=>{k(a.id),o(!1)},className:"group flex w-full items-center gap-2 rounded-md px-2 py-1 text-left transition-colors hover:bg-[var(--ink-hover)]",children:[(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-[12px] text-muted-foreground transition-colors group-hover:text-foreground",children:a.label}),a.sublabel&&(0,d.jsx)("span",{className:"shrink-0 text-[10px] uppercase tracking-wide text-muted-foreground/50",children:a.sublabel})]},a.id))]})]})}},55805:(a,b,c)=>{c.d(b,{Z:()=>o});var d=c(48249),e=c(67484),f=c(2116),g=c.n(f),h=c(15996),i=c(41665),j=c(79602),k=c(36274);c(79768);var l=c(32450),m=c(33191);let n={ROADMAP:h.A,ARCHITECTURE:i.A,FILES:j.A,DATABASE:k.A};function o({tabs:a,active:b}){let[c,f]=(0,e.useState)(null),h=(0,l.$2)();return(0,d.jsx)("div",{className:"flex items-center gap-0.5",children:a.map(a=>{let e,f=a.value===b,i=a.Icon??n[a.value],j=(0,m.cn)("flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-[12px] font-medium tracking-tight transition-colors",f?"border-border bg-[var(--ink-active)] text-foreground shadow-[inset_0_1px_0_rgba(255,255,255,0.06)]":"border-transparent text-muted-foreground/80 hover:bg-[var(--ink-hover)] hover:text-foreground"),k=(0,d.jsxs)(d.Fragment,{children:[i?(0,d.jsx)(i,{className:(0,m.cn)("size-3",f&&"text-[#ff7a45]")}):null,(0,d.jsx)("span",{className:"hidden lg:inline",children:a.label})]});return h?.views.has(a.value)?(0,d.jsx)("button",{type:"button",title:a.label,onClick:()=>h.switchTo(a.value),className:j,children:k},a.value):(0,d.jsx)(g(),{href:(e=a.href,c?`${e}${e.includes("?")?"&":"?"}ws=${c}`:e),title:a.label,className:j,children:k},a.value)})})}},56173:(a,b,c)=>{c.d(b,{to:()=>e});var d=c(86892);function e(a,b,c={}){if(0===a.length)return new Map;let f=function(a,b){let c=a.map(a=>a.id).sort(),d=new Map(c.map(a=>[a,[]]));for(let a of[...b].sort((a,b)=>a.fromId.localeCompare(b.fromId)||a.toId.localeCompare(b.toId)))d.get(a.fromId)?.push(a);let e=new Map,f=[],g=a=>{for(let b of(e.set(a,"visiting"),d.get(a)??[])){let a=e.get(b.toId);"visiting"!==a&&(f.push(b),"done"!==a&&g(b.toId))}e.set(a,"done")};for(let a of c)e.has(a)||g(a);return f}(a,b),g=function(a,b){let c=new Map(a.map(a=>[a.id,[]]));for(let a of b)c.get(a.fromId)?.push(a.toId);let d=new Map,e=a=>{let b=d.get(a);if(void 0!==b)return b;d.set(a,0);let f=c.get(a)??[],g=f.length?1+Math.max(...f.map(e)):0;return d.set(a,g),g};for(let b of a)e(b.id);return d}(a,f),h=new Map(a.map(a=>[a.id,[]]));for(let a of f)h.get(a.fromId)?.push(a.toId);let i=Array.from(new Set(a.map(a=>a.group))),j=i.filter(a=>"—"!==a).sort(),k=i.includes("—")?[...j,"—"]:j,l=[];for(let b of k){let c=a.filter(a=>a.group===b),d=Math.min(...c.map(a=>g.get(a.id)??0)),e=Math.max(...c.map(a=>g.get(a.id)??0)),f=new Map,i=new Map,j=0,k=0;for(let a=d;a<=e;a++){let b=c.filter(b=>g.get(b.id)===a);if(!b.length)continue;let d=a=>{let b=(h.get(a.id)??[]).map(a=>i.get(a)).filter(a=>void 0!==a);return b.length?b.reduce((a,b)=>a+b,0)/b.length:1/0};b.sort((a,b)=>d(a)-d(b)||a.id.localeCompare(b.id));let e=Math.max(1,Math.ceil(Math.sqrt(2*b.length))),l=[];b.forEach((a,b)=>{let c=Math.floor(b/e),d=b%e;i.set(a.id,d);let g=l[c]??0;f.set(a.id,{x:j+360*c,y:g}),l[c]=g+(a.h??150),k=Math.max(k,l[c])}),j+=360*Math.ceil(b.length/e)}l.push({d:b,w:j,h:Math.max(k,150),local:f})}let m=(0,d.Xi)(l.map(a=>({id:a.d,w:a.w,h:a.h})),{gapX:84,gapY:80,viewportAspect:c.viewportAspect,minBandW:1080,aspectSlack:1.5}),n=new Map;for(let a of l){let b=m.get(a.d);for(let[c,d]of a.local)n.set(c,{x:b.x+d.x,y:b.y+d.y})}return n}},56258:(a,b,c)=>{c.a(a,async(a,b)=>{try{var d=c(62896);c(22443);var e=a([d]);d=(e.then?(await e)():e)[0],b()}catch(a){b(a)}})},58149:(a,b,c)=>{c(47446),c(526)},58720:(a,b,c)=>{c.d(b,{Sh:()=>k,V5:()=>j,e0:()=>m});var d=c(48249),e=c(67484),f=c(56024),g=c(55030),h=c(45535),i=c(33191);let j="#ff7a45";function k({data:a,selected:b}){let[c,l]=(0,e.useState)(a.text);return(0,d.jsxs)("div",{onClick:()=>a.onClick?.(a.annotationId),className:(0,i.cn)("group/anno relative w-[270px] rounded-xl border border-border bg-card/95 px-4 py-3 shadow-[0_18px_50px_-20px_rgba(0,0,0,0.9)] backdrop-blur transition-colors hover:border-foreground/20 dark:bg-[#1b1b1e]/95 dark:hover:border-white/20",!a.editable&&"cursor-pointer",b&&"border-[#ff7a45]/50"),children:[(0,d.jsx)("span",{"aria-hidden":!0,className:"pointer-events-none absolute -left-px bottom-2 top-2 w-[3px] rounded-full",style:{background:j}}),(0,d.jsx)(f.h7,{type:"target",id:"in",position:g.yX.Top,isConnectable:!1,className:"!pointer-events-none !size-1 !min-h-0 !min-w-0 !border-0 !bg-transparent",style:{left:"auto",right:22,top:0}}),(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("div",{className:"font-mono text-[10px] font-semibold uppercase tracking-[0.22em]",style:{color:j},children:"Annotation \xb7 You"}),a.editable&&a.onDelete&&(0,d.jsx)("button",{type:"button",title:"Delete annotation",onClick:b=>{b.stopPropagation(),a.onDelete?.(a.annotationId)},className:"nodrag nopan -mr-1 rounded p-0.5 text-muted-foreground/60 opacity-0 transition-opacity hover:text-red-300 group-hover/anno:opacity-100",children:(0,d.jsx)(h.A,{className:"size-3"})})]}),a.editable?(0,d.jsx)("textarea",{value:c,autoFocus:!a.text.trim(),placeholder:"Type your annotation…",onChange:a=>l(a.target.value),onBlur:()=>{c!==a.text&&a.onChangeText?.(a.annotationId,c)},onKeyDown:a=>a.stopPropagation(),className:"nodrag nopan field-sizing-content mt-1.5 max-h-40 min-h-[2.25rem] w-full resize-none overflow-y-auto bg-transparent text-[13px] leading-snug text-foreground/95 outline-none placeholder:text-muted-foreground/60"}):(0,d.jsx)("div",{className:"mt-1.5 max-h-40 overflow-y-auto text-[13px] leading-snug text-foreground/95",children:a.text.trim()?a.text:(0,d.jsx)("span",{className:"text-muted-foreground",children:"…"})})]})}function l({n:a,annotationId:b,onClick:c}){return(0,d.jsxs)("button",{type:"button",title:`Annotation ${a} — view comment`,onClick:a=>{a.stopPropagation(),c?.(b)},className:"nodrag nopan relative flex size-6 items-center justify-center rounded-full font-mono text-[11px] font-bold text-[#181818] shadow-[0_0_0_3px_rgba(255,122,69,0.22),0_0_16px_2px_rgba(255,122,69,0.4)] transition-transform hover:scale-110",style:{background:j},children:[a,(0,d.jsx)(f.h7,{type:"source",id:`pin-${b}`,position:g.yX.Bottom,isConnectable:!1,className:"!pointer-events-none !size-1 !min-h-0 !min-w-0 !border-0 !bg-transparent",style:{left:"50%",bottom:2}})]})}function m({pins:a,onPinClick:b}){return a.length?(0,d.jsx)("span",{className:"absolute -right-3 top-1/2 z-10 flex -translate-y-1/2 flex-row-reverse gap-1",children:a.map(a=>(0,d.jsx)(l,{n:a.n,annotationId:a.id,onClick:b},a.id))}):null}},62190:(a,b,c)=>{c.d(b,{E:()=>f});var d=c(48249),e=c(33191);function f({active:a,onClick:b,icon:c,children:g,pill:h=!1}){return(0,d.jsxs)("button",{type:"button",onClick:b,className:(0,e.cn)("flex items-center gap-1 px-2.5 py-1 text-[11px] font-medium transition-colors",h?"rounded-full":"rounded-md",a?"bg-[var(--ink-active)] text-foreground":"text-muted-foreground hover:text-foreground"),children:[c,g]})}},62896:(a,b,c)=>{c.a(a,async(a,d)=>{try{let m;c.d(b,{db:()=>s,e$:()=>l});var e=c(58296),f=c(28855),g=c(22443),h=c(76909),i=c(80941),j=a([f,e]);[f,e]=j.then?(await j)():j;let n={...g,...h},o=(m=process.env.DATABASE_URL)&&/^(file:|libsql:|wss?:|https?:|:memory:)/i.test(m)?m:"file:./dev.db",p=globalThis,q=p.dzByUrl??=new Map;function k(a){let b=q.get(a);if(!b){let c;(c=(0,f.createClient)({url:a})).execute("PRAGMA foreign_keys = ON;"),c.execute("PRAGMA busy_timeout = 5000;"),b=(0,e.f)(c,{schema:n}),q.set(a,b)}return b}let r=new Map;function l(a=o){if(!/^file:/i.test(a))return Promise.resolve();let b=r.get(a);return b||(b=c.e(9127).then(c.bind(c,29127)).then(({provisionDb:b})=>b(a)).then(()=>{}).catch(b=>{r.delete(a),console.error("[beacon] fallback db provision failed:",b instanceof Error?b.message:b)}),r.set(a,b)),b}let s=new Proxy({},{get(a,b){let c=function(){if(process.env.BEACON_REPO)return k(o);let a=(0,i.p1)()??(0,i.UP)();return a?k((0,i.Nx)(a)):k(o)}(),d=c[b];return"function"==typeof d?d.bind(c):d}});d()}catch(a){d(a)}})},66002:(a,b,c)=>{c.d(b,{G:()=>e});var d=c(67484);function e(){let[a,b]=(0,d.useState)("dark");return a}},66625:(a,b,c)=>{},66949:(a,b,c)=>{c(73024),c(76760),c(50042)},67637:(a,b,c)=>{c.d(b,{Z:()=>h});var d=c(48249),e=c(56024),f=c(33346),g=c(33191);function h({regions:a,tone:b="neutral",lod:c="full"}){let i=(0,e.Pj)(a=>a.transform[2]);if(0===a.length)return null;let j="far"===c,k=Math.min(150,26/Math.max(i,.05)),l=Math.min(80,13/Math.max(i,.05));return(0,d.jsx)(e.DX,{children:a.map(a=>(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(${a.x}px, ${a.y}px)`,width:a.w,height:a.h,pointerEvents:"none",zIndex:0},className:(0,g.cn)("rounded-2xl border","category"===b?(0,f.xZ)(a.key):"border-border bg-[var(--ink-hover)]",j&&"bg-card/80"),children:j?(0,d.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-[0.3em] px-2",children:[(0,d.jsx)("span",{className:"whitespace-nowrap text-center font-semibold tracking-tight text-foreground",style:{fontSize:Math.min(k,.34*a.h,(a.w-16)/(.74*Math.max(a.label.length,1))),lineHeight:1.1},children:a.label}),(0,d.jsxs)("span",{className:"tabular-nums text-muted-foreground",style:{fontSize:Math.min(l,.18*a.h)},children:[a.count," ",1===a.count?"card":"cards"]})]}):(0,d.jsxs)("div",{className:"flex items-baseline gap-2 px-3 py-1",children:[(0,d.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground/80",children:a.label}),(0,d.jsx)("span",{className:"text-[10px] tabular-nums text-muted-foreground/50",children:a.count})]})},a.key))})}},71703:(a,b,c)=>{c.d(b,{b:()=>e});var d=c(67484);function e(){let[a,b]=(0,d.useState)("idle"),[c,e]=(0,d.useState)(""),[f,g]=(0,d.useState)(""),[h,i]=(0,d.useState)(!1);async function j(){try{await navigator.clipboard.writeText(c),i(!0),setTimeout(()=>i(!1),1500)}catch{}}return{status:a,url:c,error:f,copied:h,mint:async function a(a){b("loading"),g(""),i(!1);try{let c=await fetch("/api/share/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(a)}),d=await c.json();if(!c.ok||!d.url){g(d.error??"Could not create the link."),b("error");return}e(d.url),b("done")}catch{g("Could not reach the local Beacon daemon."),b("error")}},copy:j,reset:function(){b("idle"),e(""),g(""),i(!1)}}}},74732:(a,b,c)=>{c.d(b,{Cf:()=>r,Es:()=>t,L3:()=>u,c7:()=>s,lG:()=>o,rr:()=>v});var d=c(48249);c(67484);var e=c(76424),f=c(60388),g=c(74283),h=c(25845),i=c(87298),j=c(36902),k=c(64230),l=c(33191),m=c(26284),n=c(45535);function o({...a}){return(0,d.jsx)(e.D,{"data-slot":"dialog",...a})}function p({...a}){return(0,d.jsx)(f.Z,{"data-slot":"dialog-portal",...a})}function q({className:a,...b}){return(0,d.jsx)(g.X,{"data-slot":"dialog-overlay",className:(0,l.cn)("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",a),...b})}function r({className:a,children:b,showCloseButton:c=!0,...e}){return(0,d.jsxs)(p,{children:[(0,d.jsx)(q,{}),(0,d.jsxs)(h.h,{"data-slot":"dialog-content",className:(0,l.cn)("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",a),...e,children:[b,c&&(0,d.jsxs)(i.H,{"data-slot":"dialog-close",render:(0,d.jsx)(m.$,{variant:"ghost",className:"absolute top-2 right-2",size:"icon-sm"}),children:[(0,d.jsx)(n.A,{}),(0,d.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function s({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"dialog-header",className:(0,l.cn)("flex flex-col gap-2",a),...b})}function t({className:a,showCloseButton:b=!1,children:c,...e}){return(0,d.jsxs)("div",{"data-slot":"dialog-footer",className:(0,l.cn)("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end",a),...e,children:[c,b&&(0,d.jsx)(i.H,{render:(0,d.jsx)(m.$,{variant:"outline"}),children:"Close"})]})}function u({className:a,...b}){return(0,d.jsx)(j.L,{"data-slot":"dialog-title",className:(0,l.cn)("font-heading text-base leading-none font-medium",a),...b})}function v({className:a,...b}){return(0,d.jsx)(k.r,{"data-slot":"dialog-description",className:(0,l.cn)("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",a),...b})}},76174:(a,b,c)=>{c.a(a,async(a,b)=>{try{var d=c(62896);c(22443),c(66625),c(66949);var e=a([d]);d=(e.then?(await e)():e)[0],b()}catch(a){b(a)}})},76909:(a,b,c)=>{c.r(b),c.d(b,{bugFlagRelations:()=>h,codeFileEdgeRelations:()=>u,codeFileRelations:()=>t,dbColumnRelations:()=>m,dbRelationRelations:()=>n,dbTableRelations:()=>l,draftColumnRelations:()=>r,draftRelationRelations:()=>s,draftTableRelations:()=>q,edgeRelations:()=>k,endpointRelations:()=>o,endpointTableRelations:()=>p,nodeFileRelations:()=>g,nodeRelations:()=>f,nodeTagsRelations:()=>j,tagRelations:()=>i});var d=c(74184),e=c(22443);let f=(0,d.K1)(e.node,({one:a,many:b})=>({files:b(e.nodeFile),bugFlags:b(e.bugFlag),nodeTags:b(e.nodeTags),edgesOut:b(e.edge,{relationName:"EdgeFrom"}),edgesIn:b(e.edge,{relationName:"EdgeTo"}),parent:a(e.node,{fields:[e.node.parentId],references:[e.node.id],relationName:"NodeTree"}),children:b(e.node,{relationName:"NodeTree"})})),g=(0,d.K1)(e.nodeFile,({one:a})=>({node:a(e.node,{fields:[e.nodeFile.nodeId],references:[e.node.id]})})),h=(0,d.K1)(e.bugFlag,({one:a})=>({node:a(e.node,{fields:[e.bugFlag.nodeId],references:[e.node.id]})})),i=(0,d.K1)(e.tag,({many:a})=>({nodeTags:a(e.nodeTags)})),j=(0,d.K1)(e.nodeTags,({one:a})=>({node:a(e.node,{fields:[e.nodeTags.a],references:[e.node.id]}),tag:a(e.tag,{fields:[e.nodeTags.b],references:[e.tag.id]})})),k=(0,d.K1)(e.edge,({one:a})=>({from:a(e.node,{fields:[e.edge.fromId],references:[e.node.id],relationName:"EdgeFrom"}),to:a(e.node,{fields:[e.edge.toId],references:[e.node.id],relationName:"EdgeTo"})})),l=(0,d.K1)(e.dbTable,({many:a})=>({columns:a(e.dbColumn),fksOut:a(e.dbRelation,{relationName:"FkFrom"}),fksIn:a(e.dbRelation,{relationName:"FkTo"}),usages:a(e.endpointTable)})),m=(0,d.K1)(e.dbColumn,({one:a})=>({table:a(e.dbTable,{fields:[e.dbColumn.tableId],references:[e.dbTable.id]})})),n=(0,d.K1)(e.dbRelation,({one:a})=>({fromTable:a(e.dbTable,{fields:[e.dbRelation.fromTableId],references:[e.dbTable.id],relationName:"FkFrom"}),toTable:a(e.dbTable,{fields:[e.dbRelation.toTableId],references:[e.dbTable.id],relationName:"FkTo"})})),o=(0,d.K1)(e.endpoint,({many:a})=>({tables:a(e.endpointTable)})),p=(0,d.K1)(e.endpointTable,({one:a})=>({endpoint:a(e.endpoint,{fields:[e.endpointTable.endpointId],references:[e.endpoint.id]}),table:a(e.dbTable,{fields:[e.endpointTable.tableId],references:[e.dbTable.id]})})),q=(0,d.K1)(e.draftTable,({many:a})=>({columns:a(e.draftColumn),fksOut:a(e.draftRelation,{relationName:"DraftFkFrom"}),fksIn:a(e.draftRelation,{relationName:"DraftFkTo"})})),r=(0,d.K1)(e.draftColumn,({one:a})=>({table:a(e.draftTable,{fields:[e.draftColumn.tableId],references:[e.draftTable.id]})})),s=(0,d.K1)(e.draftRelation,({one:a})=>({fromTable:a(e.draftTable,{fields:[e.draftRelation.fromTableId],references:[e.draftTable.id],relationName:"DraftFkFrom"}),toTable:a(e.draftTable,{fields:[e.draftRelation.toTableId],references:[e.draftTable.id],relationName:"DraftFkTo"})})),t=(0,d.K1)(e.codeFile,({many:a})=>({edgesOut:a(e.codeFileEdge,{relationName:"CFEFrom"}),edgesIn:a(e.codeFileEdge,{relationName:"CFETo"})})),u=(0,d.K1)(e.codeFileEdge,({one:a})=>({fromFile:a(e.codeFile,{fields:[e.codeFileEdge.fromPath],references:[e.codeFile.path],relationName:"CFEFrom"}),toFile:a(e.codeFile,{fields:[e.codeFileEdge.toPath],references:[e.codeFile.path],relationName:"CFETo"})}))},78103:(a,b,c)=>{c.d(b,{A6:()=>i,An:()=>j,RR:()=>d,YG:()=>g,ZD:()=>h,jR:()=>f});let d=["frontend","backend","fullstack"],e={fe:"frontend",front:"frontend",be:"backend",back:"backend",fs:"fullstack","full-stack":"fullstack","full stack":"fullstack"};function f(a){let b=(a??"").trim().toLowerCase();return b?d.includes(b)?b:e[b]??null:null}let g={frontend:{label:"Frontend",short:"FE"},backend:{label:"Backend",short:"BE"},fullstack:{label:"Fullstack",short:"FS"}},h={frontend:"#5AC8FA",backend:"#3ECF8E",fullstack:"#5AC8FA"};function i(a){return"fullstack"!==a?h[a]:`linear-gradient(to bottom, ${h.frontend} 0%, ${h.frontend} 50%, ${h.backend} 50%, ${h.backend} 100%)`}let j=/\.(tsx|jsx|vue|svelte)$/i},80941:(a,b,c)=>{c.d(b,{Dk:()=>m,K4:()=>k,Nx:()=>j,UP:()=>l,X_:()=>o,kO:()=>r,p1:()=>p});var d=c(16698);c(31421),c(77598);var e=c(73024),f=c(48161),g=c(76760);function h(){return process.env.BEACON_HOME||(0,g.join)((0,f.homedir)(),".beacon")}function i(a){return(0,g.join)(h(),a)}function j(a){return`file:${(0,g.join)(i(a),"db.sqlite")}`}function k(a){return(function(){try{let a=JSON.parse((0,e.readFileSync)((0,g.join)(h(),"workspaces.json"),"utf8"));return Array.isArray(a)?a:[]}catch{return[]}})().find(b=>b.id===a)??null}function l(){try{return(0,e.readFileSync)((0,g.join)(h(),"active"),"utf8").trim()||null}catch{return null}}let m="beacon_ws",n=new d.AsyncLocalStorage;function o(a,b){return a?n.run(a,b):b()}function p(){return n.getStore()??null}let q=new Set;async function r(a){let b=i(a),d=(0,g.join)(b,"db.sqlite"),f=(0,e.existsSync)(d);if(f&&q.has(d))return{ok:!0,created:!1,migrated:!1};try{(0,e.mkdirSync)(b,{recursive:!0});let{provisionDb:g}=await c.e(9127).then(c.bind(c,29127)),h=await g(j(a));return q.add(d),{ok:!0,created:!f,migrated:f&&h.migrated}}catch(a){return{ok:!1,created:!1,migrated:!1,error:a instanceof Error?a.message:String(a)}}}},81725:(a,b,c)=>{c.d(b,{$$:()=>g,Qk:()=>f,RU:()=>d,Uy:()=>e,jF:()=>h,r2:()=>k,sQ:()=>i,zn:()=>j});let d="0 0 0 3px var(--accent-2,#ff7a45), 0 0 32px -2px var(--accent-2,#ff7a45)",e=.14;function f(a,b){let c=b.trim().toLowerCase();if(!c)return!1;for(let b of a)if(b&&b.toLowerCase().includes(c))return!0;return!1}function g(a){return[a.title,a.role,a.plain,a.cluster,a.status].filter(Boolean)}function h(a){let b=[a.name,a.domain,a.description];for(let c of a.columns??[])b.push(c.name,c.type,c.note);return b.filter(Boolean)}function i(a){return[a.method,a.path,a.domain,a.description].filter(Boolean)}function j(a){return[a.path,a.lang].filter(Boolean)}function k(a,b,c,d,e=12){let g=b.trim().toLowerCase();if(!g)return[];let h=[];for(let b of a){if(!f(c(b),g))continue;let a=d(b);h.push({hit:a,score:function(a,b){let c=a.toLowerCase();return c===b?0:c.startsWith(b)?1:RegExp(`(^|[^a-z0-9])${b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}`,"i").test(a)?2:c.includes(b)?3:4}(a.label,g)})}return h.sort((a,b)=>a.score-b.score||a.hit.label.length-b.hit.label.length),h.slice(0,e).map(a=>a.hit)}},82626:(a,b,c)=>{c.d(b,{e:()=>B});var d=c(48249),e=c(67484),f=c(89327),g=c(69357),h=c(74732),i=c(26284),j=c(33191),k=c(42706);let l=["ROADMAP","ARCHITECTURE","DATABASE"],m=k.k5(l),n=k.Ik({name:k.Yj(),type:k.Yj(),isPk:k.zM(),isFk:k.zM(),nullable:k.zM(),note:k.Yj().nullable()}),o=k.Ik({id:k.Yj(),view:k.Yj(),kind:k.Yj(),cluster:k.Yj().nullable(),layer:k.Yj().nullable(),title:k.Yj(),role:k.Yj().nullable(),plain:k.Yj().nullable(),status:k.Yj(),priority:k.ai(),x:k.ai(),y:k.ai(),source:k.Yj(),sourceRef:k.Yj().nullable(),parentId:k.Yj().nullable(),isCriterion:k.zM(),files:k.YO(k.Yj()),signals:k.bz().optional(),bugFlags:k.YO(k.bz())}),p=k.Ik({id:k.Yj(),fromId:k.Yj(),toId:k.Yj(),kind:k.Yj(),label:k.Yj().nullable(),sourceHandle:k.Yj().nullable(),targetHandle:k.Yj().nullable()}),q=k.Ik({nodes:k.YO(o),edges:k.YO(p),hasFrontend:k.zM()}),r=k.Ik({id:k.Yj(),name:k.Yj(),domain:k.Yj().nullable(),description:k.Yj().nullable(),source:k.Yj(),x:k.ai(),y:k.ai(),columns:k.YO(n)}),s=k.Ik({id:k.Yj(),fromTableId:k.Yj(),toTableId:k.Yj(),fromColumn:k.Yj(),toColumn:k.Yj(),label:k.Yj().nullable()}),t=k.Ik({id:k.Yj(),method:k.Yj(),path:k.Yj(),domain:k.Yj().nullable(),description:k.Yj().nullable(),source:k.Yj(),x:k.ai(),y:k.ai(),tables:k.YO(k.Ik({tableId:k.Yj(),access:k.Yj()}))}),u=k.Ik({proposedAt:k.ai(),status:k.Yj(),tables:k.YO(k.bz()),relations:k.YO(k.bz()),endpoints:k.YO(k.bz())}).nullable(),v=k.Ik({tables:k.YO(r),relations:k.YO(s),endpoints:k.YO(t),draft:u}),w=k.Ik({kind:k.eu("boards"),version:k.eu(1),createdAt:k.ai(),workspaceLabel:k.Yj(),selectedTabs:k.YO(m).min(1),roadmap:q.optional(),architecture:q.optional(),database:v.optional()}),x=k.Ik({kind:k.eu("plan"),version:k.eu(1),createdAt:k.ai(),workspaceLabel:k.Yj(),title:k.Yj(),markdown:k.Yj(),verdict:k.k5(["approved","discarded"]).nullable(),roadmap:q.optional(),draft:u.optional()});k.gM("kind",[w,x]);var y=c(71703),z=c(99281);let A=[{value:"ALL",label:"All"},{value:"ROADMAP",label:"Roadmap"},{value:"ARCHITECTURE",label:"Architecture"},{value:"DATABASE",label:"Database"}];function B({defaultSelection:a="ALL"}){let[b,c]=(0,e.useState)(!1),[k,m]=(0,e.useState)(a),{status:n,url:o,error:p,copied:q,mint:r,copy:s,reset:t}=(0,y.b)();return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("button",{type:"button",title:"Share a read-only link to these boards",onClick:function(){m(a),t(),c(!0)},className:"glass flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:text-foreground",children:(0,d.jsx)(f.A,{className:"size-4"})}),(0,d.jsx)(h.lG,{open:b,onOpenChange:c,children:(0,d.jsxs)(h.Cf,{children:[(0,d.jsxs)(h.c7,{children:[(0,d.jsx)(h.L3,{children:"Share a read-only link"}),(0,d.jsx)(h.rr,{children:"Anyone with the link can view these boards — no Beacon needed. Links expire after 7 days."})]}),"done"===n?(0,d.jsx)(z.F,{url:o,copied:q,onCopy:s}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"flex rounded-lg border border-border bg-background/40 p-0.5",children:A.map(a=>(0,d.jsx)("button",{onClick:()=>m(a.value),className:(0,j.cn)("flex-1 rounded-md px-1.5 py-1.5 text-[11px] font-medium transition-colors",k===a.value?"bg-[var(--ink-active)] text-foreground":"text-muted-foreground hover:text-foreground"),children:a.label},a.value))}),"error"===n&&(0,d.jsx)("p",{className:"text-[12px] text-red-400",children:p}),(0,d.jsx)("div",{className:"flex justify-end",children:(0,d.jsx)(i.$,{size:"sm",onClick:function(){r({kind:"boards",tabs:"ALL"===k?[...l]:[k]})},disabled:"loading"===n,children:"loading"===n?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(g.A,{className:"size-3.5 animate-spin"})," Creating…"]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.A,{className:"size-3.5"})," Create link"]})})})]})]})})]})}},84170:(a,b,c)=>{c.d(b,{F:()=>g,o:()=>h});var d=c(48249),e=c(78103),f=c(33191);function g(a,b){return!!b&&("fullstack"===a?"fullstack"===b:b===a||"fullstack"===b)}function h({value:a,onChange:b,options:c=e.RR,bare:g=!1}){return(0,d.jsx)("div",{className:(0,f.cn)("flex items-center gap-0.5",!g&&"glass rounded-lg p-0.5"),children:c.map(c=>{let g=a===c;return(0,d.jsxs)("button",{type:"button",onClick:()=>b(g?null:c),title:g?"Show every layer at full strength again":`Highlight ${e.YG[c].label} — other cards dim, nothing is hidden`,className:(0,f.cn)("flex h-7 items-center gap-1.5 rounded-md px-2 text-[10px] font-semibold uppercase tracking-wide transition-colors",g?"bg-[var(--ink-active)] text-foreground":"text-muted-foreground hover:bg-[var(--ink-hover)] hover:text-foreground"),children:[(0,d.jsx)("span",{"aria-hidden":!0,className:"h-3 w-[3px] shrink-0 rounded-full",style:{background:(0,e.A6)(c)}}),e.YG[c].short]},c)})})}},85360:(a,b,c)=>{c.d(b,{h:()=>t});var d=c(48249),e=c(67484),f=c(13839),g=c(9728),h=c(15741),i=c(8251),j=c(91995),k=c(2409),l=c(22130);function m(a,b){return{name:a,path:b,folders:new Map,files:new Map}}function n(a,b){return a.kind!==b.kind?"folder"===a.kind?-1:1:a.name.localeCompare(b.name,void 0,{sensitivity:"base"})}var o=c(33191);let p={added:"text-emerald-400",modified:"text-amber-300",deleted:"text-rose-400 line-through"},q={added:"bg-emerald-400",modified:"bg-amber-300",deleted:"bg-rose-400"};function r({name:a,className:b}){let c=a.slice(a.lastIndexOf(".")+1).toLowerCase();return["ts","tsx","js","jsx","mjs","cjs"].includes(c)?(0,d.jsx)(f.A,{className:b}):"json"===c?(0,d.jsx)(g.A,{className:b}):["md","mdx","txt","css","scss"].includes(c)?(0,d.jsx)(h.A,{className:b}):(0,d.jsx)(i.A,{className:b})}function s({nodes:a,depth:b,collapsed:c,onToggle:e,onSelect:f,selectedPath:g,livePath:h}){return(0,d.jsx)("ul",{className:(0,o.cn)(b>0&&"ml-[7px] border-l border-border pl-1.5"),children:a.map(a=>{let i,m;return"folder"===a.kind?(0,d.jsxs)("li",{children:[(0,d.jsxs)("button",{type:"button",onClick:()=>e(a.path),title:a.path,className:"flex w-full items-center gap-1 rounded px-1.5 py-1 text-left text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-foreground",children:[(0,d.jsx)(j.A,{className:(0,o.cn)("size-3 shrink-0 transition-transform",!c.has(a.path)&&"rotate-90")}),c.has(a.path)?(0,d.jsx)(k.A,{className:"size-3.5 shrink-0 text-muted-foreground"}):(0,d.jsx)(l.A,{className:"size-3.5 shrink-0 text-muted-foreground"}),(0,d.jsx)("span",{className:"truncate text-[11px] font-medium",children:a.name})]}),!c.has(a.path)&&(0,d.jsx)(s,{nodes:a.children,depth:b+1,collapsed:c,onToggle:e,onSelect:f,selectedPath:g,livePath:h})]},`d:${a.path}`):(i=a.path===g,m=a.path===h,(0,d.jsx)("li",{children:(0,d.jsxs)("button",{type:"button",onClick:()=>f(a),title:a.path,"aria-current":i?"true":void 0,className:(0,o.cn)("flex w-full items-center gap-1.5 rounded py-1 pl-[18px] pr-1.5 text-left transition-colors",i?"bg-[var(--ink-active)]":m?"bg-[#ff7a45]/[0.08] hover:bg-[#ff7a45]/[0.13]":"hover:bg-[var(--ink-hover)]"),children:[(0,d.jsx)(r,{name:a.name,className:(0,o.cn)("size-3.5 shrink-0",m?"text-[#ff7a45]":a.status?p[a.status]:"text-muted-foreground")}),(0,d.jsx)("span",{className:(0,o.cn)("truncate text-[11px]",m?"font-medium text-[#ff7a45]":i?"text-foreground":a.status?p[a.status]:"text-foreground/90"),children:a.name}),(0,d.jsxs)("span",{className:"ml-auto flex shrink-0 items-center gap-1.5",children:[m&&(0,d.jsx)("span",{className:"size-1.5 rounded-full bg-[#ff7a45] motion-safe:animate-pulse",title:"The agent is editing this file now"}),a.meta&&(0,d.jsx)("span",{className:"text-[9px] text-teal-300/80",children:a.meta}),a.status&&(0,d.jsx)("span",{className:(0,o.cn)("size-1.5 rounded-full",q[a.status])})]})]})},`f:${a.path}`))})})}function t({files:a,onSelect:b,collapse:c=!0,emptyLabel:f,className:g,selectedPath:h,livePath:i}){let j=(0,e.useMemo)(()=>(function(a,b={}){let c=b.collapseSingleChildFolders??!0,d=m("","");for(let b of a){let a=b.path.split("\\").join("/").trim().replace(/^\/+/,"").replace(/\/+$/,"");if(!a)continue;let c=a.split("/").filter(Boolean);if(!c.length)continue;let e=d;for(let a=0;a<c.length-1;a++){let b=c[a],d=e.path?`${e.path}/${b}`:b,f=e.folders.get(b);f||(f=m(b,d),e.folders.set(b,f)),e=f}let f=c[c.length-1];e.files.set(f,{kind:"file",name:f,path:a,status:b.status,meta:b.meta})}return function a(b,c){let d=[];for(let e of b.folders.values())d.push(function(b,c){let d=b.name,e=b;for(;c&&0===e.files.size&&1===e.folders.size;){let a=e.folders.values().next().value;d=`${d}/${a.name}`,e=a}return{kind:"folder",name:d,path:e.path,children:a(e,c)}}(e,c));for(let a of b.files.values())d.push(a);return d.sort(n)}(d,c)})(a,{collapseSingleChildFolders:c}),[a,c]),[k,l]=(0,e.useState)(()=>new Set);return j.length?(0,d.jsx)("div",{className:g,children:(0,d.jsx)(s,{nodes:j,depth:0,collapsed:k,onToggle:a=>l(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c}),onSelect:a=>{var c;return b?b(a.path):(c=a.path,void fetch(`/api/open?path=${encodeURIComponent(c)}`).catch(()=>{}))},selectedPath:h,livePath:i})}):f?(0,d.jsx)("p",{className:(0,o.cn)("px-2 py-1 text-[11px] text-muted-foreground",g),children:f}):null}},86892:(a,b,c)=>{c.d(b,{Xi:()=>d});function d(a,b){let c,d,e,f=(d=((c=b.viewportAspect)&&Number.isFinite(c)&&c>0?Math.min(3.2,Math.max(.7,c)):1.8)*(b.aspectSlack??1),e=a.reduce((a,c)=>a+(c.w+b.gapX)*(c.h+b.gapY),0),Math.max(b.minBandW,Math.round(Math.sqrt(e*d)))),g=new Map,h=0,i=0,j=0;for(let c of a)h>0&&h+c.w>f&&(i+=j+b.gapY,h=0,j=0),g.set(c.id,{x:h,y:i}),j=Math.max(j,c.h),h+=c.w+b.gapX;return g}},91365:(a,b,c)=>{c.d(b,{fE:()=>f,gt:()=>g,kz:()=>e});let d={far:.3,farExit:.34,mid:.55,midExit:.6},e={far:.12,farExit:.15,mid:.45,midExit:.5},f={far:.2,farExit:.24,mid:.32,midExit:.36};function g(a,b="full",c=d){return a<c.far||"far"===b&&a<c.farExit?"far":a<c.mid||"mid"===b&&a<c.midExit?"mid":"full"}},92994:(a,b,c)=>{c.d(b,{er:()=>g,r1:()=>h,vu:()=>i});var d=c(48249),e=c(67484),f=c(33191);function g({trigger:a,title:b,align:c="right",children:h,open:i,onOpenChange:j,outsideClicksToClose:k=1}){let[l,m]=(0,e.useState)(!1),[n,o]=(0,e.useState)("down"),p=i??l,q=(0,e.useRef)(null);return(0,e.useRef)(()=>{}),(0,d.jsxs)("div",{ref:q,className:"relative",children:[a(p,()=>{var a;return a=!p,void(void 0===i&&m(a),j?.(a))}),p&&(0,d.jsxs)("div",{className:(0,f.cn)("glass absolute z-30 w-64 rounded-xl p-3 shadow-xl","up"===n?"bottom-full mb-1.5":"top-full mt-1.5","right"===c?"right-0":"left-0"),children:[b&&(0,d.jsx)("div",{className:"mb-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:b}),h]})]})}function h({title:a,children:b}){return(0,d.jsxs)("div",{className:"mb-2.5 last:mb-0",children:[(0,d.jsx)("div",{className:"mb-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground/80",children:a}),(0,d.jsx)("div",{className:"flex flex-wrap gap-1",children:b})]})}function i({on:a,onClick:b,children:c,tone:e="default"}){return(0,d.jsx)("button",{type:"button",onClick:b,className:(0,f.cn)("rounded-md border px-2 py-0.5 text-[11px] font-medium transition-colors",{default:a?"border-foreground/40 bg-[var(--ink-active)] text-foreground":"border-border text-muted-foreground hover:text-foreground",danger:a?"border-red-500/40 bg-red-500/15 text-red-300":"border-border text-muted-foreground hover:text-foreground",accent:a?"border-sky-500/40 bg-sky-500/15 text-sky-300":"border-border text-muted-foreground hover:text-foreground"}[e]),children:c})}},96271:(a,b,c)=>{c.d(b,{MapClient:()=>bO});var d=c(48249),e=c(67484),f=c(53735),g=c(55030),h=c(56024);c(71763);var i=c(10920),j=c(15828),k=c(69473),l=c(17313),m=c(28624),n=c(32039),o=c(90498),p=c(30170),q=c(95744),r=c(19099),s=c(1229),t=c(58720),u=c(99829);let v=(0,u.createServerReference)("408addacb6c8748b9c906cc5e342ebbd01b3bc27e3",u.callServer,void 0,u.findSourceMapURL,"acceptSuggestionAction");var w=c(48581),x=c(36274),y=c(38396),z=c(53061),A=c(74348),B=c(41665),C=c(28470),D=c(41332),E=c(6143),F=c(77904),G=c(29813),H=c(39737),I=c(93553),J=c(48632),K=c(54183),L=c(86056),M=c(53416),N=c(85139),O=c(64714),P=c(26773),Q=c(64258),R=c(85205),S=c(9880),T=c(24422),U=c(69627),V=c(49783),W=c(91995),X=c(47578),Y=c(97432),Z=c(57684),$=c(83394),_=c(15741),aa=c(33617),ab=c(11527),ac=c(47352),ad=c(35471),ae=c(45535),af=c(55056),ag=c(27267),ah=c(78103),ai=c(33346);let aj=(0,e.createContext)(null);function ak(){let a=(0,e.useContext)(aj);if(!a)throw Error("useNodeEdit must be used inside NodeEditContext");return a}var al=c(50605),am=c(13191),an=c(46891),ao=c(18252),ap=c(92329),aq=c(18201),ar=c(81965),as=c(47161),at=c(86596),au=c(74619),av=c(84458),aw=c(79768),ax=c(33191);function ay({value:a,onChange:b,onBlur:c,autoFocus:e,compact:f,bare:g,className:h,placeholder:i="Description (markdown)… type @ to mention a file, feature, table…",editable:j=!0}){let k=(0,am.hG)({editable:j,extensions:[...at.Pu,an.Or.configure({placeholder:i}),au.tw.configure({suggestion:{char:"@",items:async({query:a})=>{if(!a.trim())return[];try{let b=await fetch(`/api/mention-search?q=${encodeURIComponent(a)}`,{headers:(0,aw.dh)((0,aw.fk)())});if(!b.ok)return[];return(await b.json()).hits}catch{return[]}},command:({editor:a,range:b,props:c})=>{a.chain().focus().insertContentAt(b,[{type:"mention",attrs:{kind:c.kind,ref:c.ref,label:c.label}},{type:"text",text:" "}]).run()},render:()=>{let a=null,b=null,c=a=>{if(!b||!a)return;let c=a();c&&(b.style.left=`${c.left}px`,b.style.top=`${c.bottom+4}px`)};return{onStart:d=>{a=new am.NV(aB,{props:d,editor:d.editor}),(b=document.createElement("div")).style.position="fixed",b.style.zIndex="10000",document.body.appendChild(b),b.appendChild(a.element),c(d.clientRect)},onUpdate:b=>{a?.updateProps(b),c(b.clientRect)},onKeyDown:c=>"Escape"===c.event.key?(b?.remove(),!0):a?.ref?.onKeyDown(c)??!1,onExit:()=>{b?.remove(),b=null,a?.destroy(),a=null}}}}})],content:a?(0,at.Gd)(a):void 0,immediatelyRender:!1,autofocus:!!e&&"end",editorProps:{attributes:{class:(0,ax.cn)("nodrag nopan node-prose focus:outline-none",h)}},onUpdate:({editor:a})=>b((0,at.Z2)(a.getJSON())),onBlur:()=>c?.()});return k?(0,d.jsxs)("div",{className:"flex flex-col gap-1",children:[j&&(0,d.jsx)(az,{editor:k,compact:f}),(0,d.jsx)(am.$Z,{editor:k,onKeyDown:a=>a.stopPropagation(),className:(0,ax.cn)("node-editor rounded",g?"min-h-[3.5rem] text-[15px] leading-relaxed":j?"min-h-[3.5rem] bg-[var(--ink-hover)] px-1.5 py-1 text-xs focus-within:bg-[var(--ink-active)]":"text-xs",f&&"max-h-[24rem] overflow-y-auto")})]}):null}function az({editor:a,compact:b}){(0,av.U)(a);let c=()=>a.chain().focus(),e=b?"size-3":"size-3.5";return(0,d.jsxs)("div",{className:"flex items-center gap-0.5",children:[(0,d.jsx)(av.I,{label:"Bold",active:a.isActive("bold"),onClick:()=>c().toggleBold().run(),children:(0,d.jsx)(ao.A,{className:e})}),(0,d.jsx)(av.I,{label:"Italic",active:a.isActive("italic"),onClick:()=>c().toggleItalic().run(),children:(0,d.jsx)(ap.A,{className:e})}),(0,d.jsx)("span",{"aria-hidden":!0,className:"mx-0.5 h-3.5 w-px bg-border"}),(0,d.jsx)(av.I,{label:"Checklist",active:a.isActive("taskList"),onClick:()=>c().toggleTaskList().run(),children:(0,d.jsx)(aq.A,{className:e})}),(0,d.jsx)(av.I,{label:"Bullet list",active:a.isActive("bulletList"),onClick:()=>c().toggleBulletList().run(),children:(0,d.jsx)(ar.A,{className:e})}),(0,d.jsx)(av.I,{label:"Numbered list",active:a.isActive("orderedList"),onClick:()=>c().toggleOrderedList().run(),children:(0,d.jsx)(as.A,{className:e})})]})}let aA={file:"\uD83D\uDCC4",folder:"\uD83D\uDCC1",feature:"\uD83E\uDDE9",table:"⛁",endpoint:"⇄",note:"\uD83D\uDDD2"},aB=(0,e.forwardRef)(function({items:a,command:b},c){let[f,g]=(0,e.useState)(0);return((0,e.useEffect)(()=>g(0),[a]),(0,e.useImperativeHandle)(c,()=>({onKeyDown:({event:c})=>"ArrowDown"===c.key?(g(b=>(b+1)%Math.max(a.length,1)),!0):"ArrowUp"===c.key?(g(b=>(b-1+a.length)%Math.max(a.length,1)),!0):"Enter"===c.key&&(a[f]&&b(a[f]),!0)})),a.length)?(0,d.jsx)("div",{className:"glass max-h-72 min-w-56 max-w-80 overflow-y-auto rounded-lg p-1 shadow-xl",children:a.map((a,c)=>(0,d.jsxs)("button",{type:"button",onMouseDown:c=>{c.preventDefault(),b(a)},onMouseEnter:()=>g(c),className:(0,ax.cn)("flex w-full items-center gap-2 rounded px-2 py-1 text-left text-[12px]",c===f?"bg-[var(--ink-active)] text-foreground":"text-foreground/85 hover:bg-[var(--ink-hover)]"),children:[(0,d.jsx)("span",{"aria-hidden":!0,className:"shrink-0 text-[11px] opacity-80",children:aA[a.kind]??"•"}),(0,d.jsx)("span",{className:"truncate",children:a.label}),a.sublabel&&(0,d.jsx)("span",{className:"ml-auto shrink-0 truncate text-[10px] text-muted-foreground/70",children:a.sublabel})]},`${a.kind}:${a.ref}`))}):(0,d.jsx)("div",{className:"glass min-w-56 rounded-lg p-2 text-[11px] text-muted-foreground shadow-xl",children:"No matches"})}),aC=[{v:0,l:"P0 \xb7 critical"},{v:1,l:"P1 \xb7 high"},{v:2,l:"P2 \xb7 medium"},{v:3,l:"P3 \xb7 low"}],aD=["#ff3860","#ff7a45","#fbbf24","#a1a1aa"],aE=[[/AUTH|SECURIT|LOGIN|SESSION|IDENT/,w.A],[/DATA|\bDB\b|DBMAP|SQL|STORAGE|STORE|CACHE|PERSIST/,x.A],[/\bUI\b|FRONT|VIEW|CANVAS|BOARD|DESIGN/,y.A],[/MCP|\bAPI\b|INTEGRAT/,z.A],[/WEBHOOK|HOOK/,A.A],[/INTEL|GRAPH|\bCODE\b|SYMBOL|SEARCH|FIND/,B.A],[/PLAN|ROADMAP|REVIEW/,C.A],[/INFRA|DEVOPS|CLOUD|DEPLOY|MEDIA/,D.A],[/GAM|PLAY/,E.A],[/NOTE|DOC/,F.A],[/QUERY|SEARCH/,G.A],[/BILL|\bPAY|CHECKOUT|SUBSCRIPT|INVOICE/,H.A],[/LAUNCH|RELEASE|SHIP|ROCKET/,I.A],[/INSTALL|SETUP|BOOTSTRAP|INIT/,J.A],[/CONTEXT|LAYER|BUNDLE/,K.A]],aF=[L.A,M.A,N.A,O.A,P.A,Q.A],aG="nodrag nopan";function aH({layer:a,onSave:b,readOnly:c}){let e=(0,ah.jR)(a);return(0,d.jsxs)(af.l6,{value:e??"none",onValueChange:a=>b("none"===a?null:a),disabled:c,children:[(0,d.jsx)(af.bq,{title:"Which side of the stack this lands on",className:(0,ax.cn)(aG,"!h-5 shrink-0 gap-1 rounded !border-0 !bg-[var(--ink-active)] !px-1.5 !py-0 text-[9px] font-semibold uppercase tracking-wide text-muted-foreground [&_svg]:size-2.5 [&>svg]:hidden hover:[&>svg]:block"),children:(0,d.jsx)(af.yv,{children:a=>"none"===a?(0,d.jsx)("span",{className:"text-muted-foreground/70",children:"layer"}):(0,d.jsxs)("span",{className:"flex items-center gap-1",children:["backend"!==a&&(0,d.jsx)(R.A,{className:"size-2.5"}),"frontend"!==a&&(0,d.jsx)(S.A,{className:"size-2.5"}),ah.YG[a]?.short??a]})})}),(0,d.jsxs)(af.gC,{alignItemWithTrigger:!1,children:[(0,d.jsx)(af.eb,{value:"none",children:"— no layer"}),Object.entries(ah.YG).map(([a,b])=>(0,d.jsx)(af.eb,{value:a,children:b.label},a))]})]})}let aI={DONE:"#34d399",IN_PROGRESS:"#38bdf8",PENDING:"#fbbf24",BLOCKED:"#fb923c",CANCELLED:"#71717a",DEPRIORITIZED:"#52525b",KEEP:"#34d399",REBUILD:"#a78bfa",REPLACE:"#fb7185",DROP:"#71717a"};function aJ({status:a}){return(0,d.jsx)("span",{"aria-hidden":!0,title:ag.nR[a]?.label??a,className:"absolute bottom-2 left-1 top-2 w-[3px] rounded-full",style:{background:aI[a]??"#71717a"}})}function aK({priority:a,rank:b}){let c=aD[a]??aD[3];return(0,d.jsxs)("div",{className:"flex w-5 shrink-0 flex-col items-center gap-1 self-stretch border-r border-border py-1.5",title:aC[a]?.l??"priority",children:[null!=b&&(0,d.jsx)("span",{title:`#${b} in the work order`,className:(0,ax.cn)("flex size-4 shrink-0 items-center justify-center rounded text-[10px] font-bold leading-none",1===b?"bg-emerald-400 text-black":"bg-[var(--ink-active)] text-muted-foreground"),children:b}),(0,d.jsx)("span",{className:"w-[3px] flex-1 rounded-full",style:{background:c,opacity:.9}})]})}function aL({onFocus:a,onExpand:b,onDetails:c,expanded:e,className:f}){return(0,d.jsxs)("div",{className:(0,ax.cn)(aG,"absolute z-20 flex items-center gap-0.5 rounded-lg p-0.5 transition-colors group-hover/nc:border group-hover/nc:border-border group-hover/nc:bg-card/90 group-hover/nc:shadow-lg group-hover/nc:backdrop-blur",f??"right-2 top-2"),children:[(0,d.jsx)("button",{type:"button",onClick:b=>{b.stopPropagation(),a()},title:"Edit description in focus mode",className:"flex w-0 items-center justify-center overflow-hidden rounded p-0 text-muted-foreground opacity-0 transition-all hover:text-[#ff7a45] group-hover/nc:w-6 group-hover/nc:p-0.5 group-hover/nc:opacity-100",children:(0,d.jsx)(T.A,{className:"size-3.5"})}),(0,d.jsx)("button",{type:"button",onClick:a=>{a.stopPropagation(),b()},title:e?"Collapse":"Expand in place",className:"flex w-0 items-center justify-center overflow-hidden rounded p-0 text-muted-foreground opacity-0 transition-all hover:text-foreground group-hover/nc:w-6 group-hover/nc:p-0.5 group-hover/nc:opacity-100",children:(0,d.jsx)(U.A,{className:(0,ax.cn)("size-3.5 transition-transform",e&&"rotate-180")})}),(0,d.jsx)("button",{type:"button",onClick:a=>{a.stopPropagation(),c()},title:"Open details side panel",className:"flex w-0 items-center justify-center overflow-hidden rounded p-0 text-muted-foreground opacity-0 transition-all hover:text-[#ff7a45] group-hover/nc:w-6 group-hover/nc:p-0.5 group-hover/nc:opacity-100",children:(0,d.jsx)(q.A,{className:"size-3.5"})})]})}function aM({value:a,label:b,Icon:c,danger:e}){return(0,d.jsxs)("div",{className:"text-center",children:[(0,d.jsx)("div",{className:(0,ax.cn)("text-[13px] font-semibold leading-none tracking-tight tabular-nums",e&&"text-rose-700 dark:text-rose-300"),children:a}),(0,d.jsxs)("div",{className:"mt-0.5 flex items-center justify-center gap-0.5 text-[8px] font-medium uppercase tracking-wide text-muted-foreground",children:[(0,d.jsx)(c,{className:"size-2.5"}),b]})]})}function aN({importsIn:a}){let b=a>=16?5:a>=8?4:a>=4?3:a>=2?2:+(a>=1);return(0,d.jsxs)("span",{className:"flex items-center gap-1.5 text-[10px] text-muted-foreground",title:`${a} external file(s) import this component`,children:[(0,d.jsx)("span",{className:"flex items-center gap-0.5",children:[0,1,2,3,4].map(a=>(0,d.jsx)("span",{className:"size-1 rounded-full bg-sky-400",style:{opacity:a<b?.7:.18}},a))}),a>=8?"core dependency":a>=3?"shared":a>=1?"leaf":"isolated"]})}function aO({nodeId:a}){let b=(0,r.useRouter)(),[c,f]=(0,e.useState)(!1),[g,h]=(0,e.useState)(""),[i,j]=(0,e.useState)(!1),k=()=>{f(!1),h("")},m=async()=>{let c=g.trim();if(c&&!i){j(!0);try{(await fetch("/api/bug-flags",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:a,by:"user",note:c})})).ok&&(k(),b.refresh())}finally{j(!1)}}};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("button",{type:"button",title:"Flag a bug on this component",onClick:a=>{a.stopPropagation(),f(a=>!a)},className:(0,ax.cn)(aG,"absolute -right-3 top-[calc(50%-28px)] z-10 flex size-6 -translate-y-1/2 items-center justify-center rounded-full border border-border bg-card text-muted-foreground shadow-md transition-all hover:border-rose-400/50 hover:text-rose-600 dark:hover:text-rose-300",c?"border-rose-400/50 text-rose-600 opacity-100 dark:text-rose-300":"opacity-0 group-hover/nc:opacity-100"),children:(0,d.jsx)(l.A,{className:"size-3"})}),c&&(0,d.jsxs)("div",{onClick:a=>a.stopPropagation(),className:(0,ax.cn)(aG,"absolute -right-2 top-[calc(50%-28px)] z-20 w-60 translate-x-full rounded-xl border border-rose-400/25 bg-popover p-2 shadow-xl"),children:[(0,d.jsxs)("div",{className:"mb-1.5 flex items-center justify-between",children:[(0,d.jsxs)("span",{className:"flex items-center gap-1 text-[10px] font-semibold uppercase tracking-wide text-rose-700 dark:text-rose-300",children:[(0,d.jsx)(l.A,{className:"size-3"})," Flag a bug"]}),(0,d.jsx)("button",{type:"button",title:"Cancel",onClick:k,className:"rounded p-0.5 text-muted-foreground transition-colors hover:bg-[var(--ink-active)] hover:text-foreground",children:(0,d.jsx)("span",{className:"block px-1 text-[11px] leading-none",children:"✕"})})]}),(0,d.jsx)("textarea",{autoFocus:!0,rows:2,value:g,placeholder:"What did you find?",onChange:a=>h(a.target.value),onKeyDown:a=>{a.stopPropagation(),"Escape"===a.key&&k(),"Enter"!==a.key||a.shiftKey||(a.preventDefault(),m())},className:"field-sizing-content max-h-40 min-h-12 w-full resize-none rounded-md bg-[var(--ink-hover)] px-1.5 py-1 text-xs outline-none placeholder:text-muted-foreground/50 focus:bg-[var(--ink-active)]"}),(0,d.jsx)("button",{type:"button",disabled:i||!g.trim(),onClick:()=>void m(),className:"mt-1.5 w-full rounded-md bg-rose-500/15 py-1 text-[11px] font-semibold text-rose-700 transition-colors hover:bg-rose-500/25 disabled:opacity-50 dark:text-rose-300",children:i?"Flagging…":"Flag bug"})]})]})}let aP=["border-[#ff3860]/60 shadow-[0_0_0_1px_rgba(255,56,96,0.15)]","border-[#ff7a45]/50","border-amber-400/35","border-border"],aQ=(0,e.memo)(function({id:a,data:b,selected:c}){let{categories:f,statuses:g,patch:h,isExpanded:i,toggleExpand:j,openDetailed:k,openFocus:m,removeNode:n,editingTitleId:o,onAskAgent:p,hasFrontend:q,readOnly:r}=ak(),u=i(a),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(b.title),[A,B]=(0,e.useState)(b.cluster??""),[C,D]=(0,e.useState)(b.plain??"");(0,e.useEffect)(()=>D(b.plain??""),[b.plain]);let E="BUG"===b.kind&&"ROADMAP"===b.view,F="ARCHITECTURE"===b.view,G=F?"border-border":aP[b.priority]??"border-border",H=b.openBugs??0,I="CANCELLED"===b.status||"DROP"===b.status,J="DEPRIORITIZED"===b.status,K="DRAFT"===b.source,L="IN_PROGRESS"===b.status,M="INIT"===b.source&&"ROADMAP"===b.view,N=b=>{r||h(a,b,!0)},[O,P]=(0,e.useTransition)(),Q=(0,al.k)();if("full"!==Q)return(0,d.jsxs)("div",{className:(0,ax.cn)("relative rounded-lg border bg-card px-3 py-2.5 text-card-foreground shadow-sm","w-fit max-w-[296px]",b.isChild?"min-w-56":"min-w-64",E?"border-rose-400/50 bg-rose-500/[0.05]":G,L&&"border-sky-400/60",c&&"ring-2 ring-[var(--accent,#f5b942)]",I&&"opacity-60","far"===Q&&!r&&"!opacity-0"),children:[(0,d.jsx)(s.x,{}),(0,d.jsx)(aJ,{status:b.status}),(0,d.jsx)("div",{className:"break-words text-[15px] font-semibold leading-snug",children:b.title})]});let R=(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(s.x,{}),F&&(0,d.jsx)(aO,{nodeId:a}),(b.pins?.length??0)>0?(0,d.jsx)(t.e0,{pins:b.pins,onPinClick:b.onPinClick}):b.onComment&&(0,d.jsx)("button",{type:"button",title:`Annotate ${b.title}`,onClick:a=>{a.stopPropagation(),b.onComment?.(b.title)},className:(0,ax.cn)(aG,"absolute -right-3 top-1/2 z-10 flex size-6 -translate-y-1/2 items-center justify-center rounded-full border border-border bg-card text-muted-foreground opacity-0 shadow-md transition-all group-hover/nc:opacity-100 hover:border-[#ff7a45]/50 hover:text-[#ff7a45]"),children:(0,d.jsx)(V.A,{className:"size-3"})})]}),S=(b.childCount??0)>0&&(0,d.jsxs)("button",{type:"button",onClick:c=>{c.stopPropagation(),b.onToggleCollapse?.(a)},title:b.collapsed?`Show ${b.childCount} sub-task${1===b.childCount?"":"s"}`:`Hide ${b.childCount} sub-task${1===b.childCount?"":"s"}`,className:(0,ax.cn)(aG,"mt-0.5 flex shrink-0 items-center gap-0.5 rounded px-1 text-[10px] font-semibold transition-colors",b.collapsed?"bg-[var(--ink-active)] text-foreground hover:brightness-110":"text-muted-foreground hover:bg-[var(--ink-hover)] hover:text-foreground"),children:[b.collapsed?(0,d.jsx)(W.A,{className:"size-3"}):(0,d.jsx)(U.A,{className:"size-3"}),b.childCount]}),T=(0,d.jsx)(aL,{onFocus:()=>m({id:a,title:b.title||"Untitled",value:C,editable:!r,onCommit:a=>N({plain:a.trim()||null})}),onExpand:()=>j(a),onDetails:()=>k(a),expanded:u,className:"top-full right-1 mt-1.5 before:absolute before:inset-x-0 before:bottom-full before:h-2.5 before:content-['']"}),ah=(0,d.jsx)("textarea",{rows:1,value:y,readOnly:r,autoFocus:o===a,placeholder:"Title…",onFocus:b=>{o===a&&b.currentTarget.select()},onChange:a=>z(a.target.value),onBlur:()=>{let a=y.trim();a&&a!==b.title&&N({title:a})},onKeyDown:a=>{a.stopPropagation(),"Enter"!==a.key||a.shiftKey||(a.preventDefault(),a.currentTarget.blur())},className:(0,ax.cn)(aG,"field-sizing-content w-full resize-none bg-transparent text-sm font-medium leading-snug outline-none placeholder:text-muted-foreground/60",I&&"line-through")}),aj=(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("input",{list:`cats-${a}`,value:A,readOnly:r,placeholder:F?"domain":"category",title:F?"Architecture domain — the lane this component lives in":void 0,onChange:a=>B(a.target.value),onBlur:()=>{let a=A.trim()||null;a!==(b.cluster??null)&&N({cluster:a})},onKeyDown:a=>{a.stopPropagation(),"Enter"===a.key&&a.currentTarget.blur()},className:(0,ax.cn)(aG,"field-sizing-content min-w-12 max-w-[60%] rounded px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide outline-none focus:brightness-125 [&::-webkit-calendar-picker-indicator]:hidden",(0,ai.a2)(A))}),(0,d.jsx)("datalist",{id:`cats-${a}`,children:f.map(a=>(0,d.jsx)("option",{value:a},a))})]}),am="LINEAR"===b.source?b.externalMeta?.state:void 0,an=(0,d.jsxs)(af.l6,{value:b.status,onValueChange:a=>N({status:a}),disabled:r,children:[(0,d.jsx)(af.bq,{title:am?`Linear state: ${am.name}`:void 0,className:(0,ax.cn)(aG,"!h-5 shrink-0 !gap-0.5 rounded border !px-1.5 !py-0 text-[10px] font-medium [&_svg]:size-3",ag.nR[b.status]?.className??"border-border"),children:(0,d.jsx)(af.yv,{children:a=>am?(0,d.jsxs)("span",{className:"flex items-center gap-1",children:[(0,d.jsx)("span",{"aria-hidden":!0,className:"size-1.5 shrink-0 rounded-full",style:{background:am.color}}),am.name]}):ag.nR[a]?.label??a})}),(0,d.jsx)(af.gC,{alignItemWithTrigger:!1,children:g.map(a=>(0,d.jsx)(af.eb,{value:a,children:ag.nR[a]?.label??a},a))})]}),ao=(H>0||(b.signals?.untested??0)>0||b.signals?.auth)&&(0,d.jsxs)("div",{className:"mt-1.5 flex w-0 min-w-full flex-wrap items-center gap-1",children:[H>0&&(0,d.jsxs)("span",{title:`${H} open bug flag(s)`,className:"flex items-center gap-1 rounded bg-rose-500/15 px-1 text-[9px] font-semibold uppercase tracking-wide text-rose-700 dark:text-rose-300",children:[(0,d.jsx)(l.A,{className:"size-2.5"}),H]}),(b.signals?.untested??0)>0&&(0,d.jsxs)("span",{title:`${b.signals.untested} of ${b.signals.total} attached file(s) have no test importing them`,className:"flex items-center gap-1 rounded bg-amber-500/15 px-1 text-[9px] font-semibold uppercase tracking-wide text-amber-700 dark:text-amber-300",children:[(0,d.jsx)(X.A,{className:"size-2.5"}),b.signals.untested]}),b.signals?.auth&&(0,d.jsxs)("span",{title:"touches auth-sensitive files",className:"flex items-center gap-1 rounded bg-red-500/15 px-1 text-[9px] font-semibold uppercase tracking-wide text-red-700 dark:text-red-300",children:[(0,d.jsx)(Y.A,{className:"size-2.5"})," auth"]})]}),ap=u&&(0,d.jsxs)("div",{className:"mt-2 w-0 min-w-full space-y-2 border-t border-border pt-2",children:[(0,d.jsx)(ay,{compact:!0,editable:!r,value:C,onChange:D,onBlur:()=>{let a=C.trim()||null;a!==(b.plain??null)&&N({plain:a})}}),(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 pr-8",children:[(0,d.jsx)("div",{className:"flex items-center gap-1",children:!F&&(0,d.jsxs)(af.l6,{value:String(b.priority),onValueChange:a=>N({priority:Number(a)}),disabled:r,children:[(0,d.jsx)(af.bq,{className:(0,ax.cn)(aG,"!h-6 gap-1 rounded border-border !px-1.5 !py-0 text-[10px] [&_svg]:size-3"),children:(0,d.jsx)(af.yv,{children:a=>aC.find(b=>String(b.v)===a)?.l??a})}),(0,d.jsx)(af.gC,{alignItemWithTrigger:!1,children:aC.map(a=>(0,d.jsx)(af.eb,{value:String(a.v),children:a.l},a.v))})]})}),(0,d.jsxs)("div",{className:"flex items-center gap-1",children:[!r&&(0,d.jsxs)("button",{type:"button",onClick:b=>{b.stopPropagation(),w?n(a):x(!0)},onBlur:()=>x(!1),title:"Delete node",className:(0,ax.cn)(aG,"flex items-center gap-1 rounded px-1.5 py-1 text-[10px] transition-colors",w?"bg-red-500/20 text-red-700 dark:text-red-300":"text-muted-foreground hover:bg-[var(--ink-hover)] hover:text-red-600 dark:hover:text-red-300"),children:[(0,d.jsx)(Z.A,{className:"size-3"}),w&&"Delete?"]}),p&&(0,d.jsxs)("button",{type:"button",onClick:a=>{a.stopPropagation(),p(`${F?"component":"feature"}: ${b.title}`)},title:"Ask the agent a question about this (answered in its next round)",className:(0,ax.cn)(aG,"flex items-center gap-1 rounded px-1.5 py-1 text-[10px] text-sky-700/90 hover:bg-sky-500/15 hover:text-sky-700 dark:text-sky-300/90 dark:hover:text-sky-300"),children:[(0,d.jsx)($.A,{className:"size-3"})," Ask"]})]})]})]});if(F){let a=(0,ai.i3)(b.cluster);return(0,d.jsxs)("div",{className:(0,ax.cn)("group/nc relative rounded-lg border bg-card px-3 py-2.5 text-card-foreground shadow-sm transition","w-fit min-w-60 max-w-72",K?"border-dashed border-sky-400/50 bg-sky-500/[0.06]":"border-border",L&&"border-sky-400/60 shadow-[0_0_0_1px_rgba(56,160,255,0.25)]",c&&"ring-2 ring-[var(--accent,#f5b942)]",I&&"opacity-60",J&&"opacity-70 border-dashed"),children:[R,(0,d.jsxs)("div",{className:"flex items-start gap-2.5",children:[(0,d.jsx)("span",{className:"mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-lg",style:{background:`color-mix(in oklab, ${a} 18%, transparent)`,color:a},children:(0,e.createElement)(function(a){let b=(a??"").toUpperCase();for(let[a,c]of aE)if(a.test(b))return c;if(!b)return aF[0];let c=0;for(let a=0;a<b.length;a++)c=31*c+b.charCodeAt(a)>>>0;return aF[c%aF.length]}(b.cluster),{className:"size-4"})}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsxs)("div",{className:"flex items-start gap-1",children:[ah,S]}),(0,d.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-1.5",children:[aj,q&&(0,d.jsx)(aH,{layer:b.layer,onSave:a=>N({layer:a}),readOnly:r})]})]}),(0,d.jsx)("div",{className:"shrink-0",children:an})]}),b.role&&(0,d.jsx)("div",{className:"mt-2 line-clamp-1 text-[10.5px] leading-snug text-muted-foreground",children:b.role}),(0,d.jsxs)("div",{className:"mt-2.5 grid grid-cols-4 gap-1 border-t border-border pt-2",children:[(0,d.jsx)(aM,{value:b.fileCount??0,label:"files",Icon:_.A}),(0,d.jsx)(aM,{value:b.importsIn??"—",label:"in",Icon:aa.A}),(0,d.jsx)(aM,{value:b.importsOut??"—",label:"out",Icon:ab.A}),(0,d.jsx)(aM,{value:H,label:"bug",Icon:l.A,danger:H>0})]}),null!=b.importsIn&&(0,d.jsx)("div",{className:"mt-2",children:(0,d.jsx)(aN,{importsIn:b.importsIn})}),T,ap]})}let aq=b.childCount??0,ar=b.childDone??0;return(0,d.jsxs)("div",{className:(0,ax.cn)("group/nc relative flex rounded-lg border bg-card text-card-foreground shadow-sm transition","w-fit max-w-96",u?"min-w-80":"min-w-64",K?"border-dashed border-sky-400/50 bg-sky-500/[0.06]":M?"border-dashed border-violet-400/60 bg-violet-500/[0.07] shadow-[0_0_0_1px_rgba(167,139,250,0.18)]":G,E&&!K&&"border-rose-400/50 bg-rose-500/[0.05]",L&&"border-sky-400/60 shadow-[0_0_0_1px_rgba(56,160,255,0.25)]",b.isNext&&"border-emerald-400/70 shadow-[0_0_0_2px_rgba(52,211,153,0.35)]",null!=b.workOrderRank&&b.workOrderRank>1&&"border-emerald-400/25",c&&"ring-2 ring-[var(--accent,#f5b942)]",I&&"opacity-60",J&&"opacity-70 border-dashed"),children:[R,T,(0,d.jsx)(aK,{priority:b.priority,rank:b.workOrderRank}),"LINEAR"===b.source&&(b.assigneeAvatarUrl?(0,d.jsx)("img",{src:b.assigneeAvatarUrl,alt:b.assigneeName??"assignee",title:b.assigneeName?`Owner: ${b.assigneeName}`:"Assignee",draggable:!1,className:(0,ax.cn)(aG,"absolute -left-2 -top-2 z-20 size-5 rounded-full object-cover shadow ring-2 ring-background")}):b.assigneeName?(0,d.jsx)("span",{title:`Owner: ${b.assigneeName}`,className:(0,ax.cn)(aG,"absolute -left-2 -top-2 z-20 flex size-5 items-center justify-center rounded-full bg-[#3a3a40] text-[8px] font-semibold uppercase text-white/90 shadow ring-2 ring-background"),children:b.assigneeName.split(/\s+/).map(a=>a[0]).slice(0,2).join("")}):null),(0,d.jsxs)("div",{className:"min-w-0 flex-1 px-2.5 py-2.5",children:[(0,d.jsxs)("div",{className:"flex w-0 min-w-full items-start gap-1.5",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-1",children:[L&&(0,d.jsx)("span",{title:"in progress",className:"mt-1.5 inline-block size-2 shrink-0 animate-pulse rounded-full bg-sky-400"}),b.isCriterion&&!L&&(0,d.jsx)("span",{title:"Success criterion",className:"mt-1.5 inline-block size-1.5 shrink-0 rounded-full bg-[var(--accent,#f5b942)]"}),ah,S]}),(0,d.jsx)("div",{className:"shrink-0",children:an})]}),(0,d.jsxs)("div",{className:"mt-1.5 flex w-0 min-w-full flex-wrap items-center gap-1.5",children:[(0,d.jsxs)("span",{title:E?"Bug — something to fix":b.isChild?"Sub-task of a feature":"Feature — top-level roadmap item",className:(0,ax.cn)("flex shrink-0 items-center gap-1 rounded px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide",E?"bg-rose-500/15 text-rose-700 dark:text-rose-300":b.isChild?"bg-zinc-500/15 text-zinc-600 dark:text-zinc-300":"bg-sky-500/15 text-sky-700 dark:text-sky-300"),children:[E&&(0,d.jsx)(l.A,{className:"size-2.5"}),E?"bug":b.isChild?"sub-task":"feature"]}),q&&(0,d.jsx)(aH,{layer:b.layer,onSave:a=>N({layer:a}),readOnly:r}),M&&(0,d.jsxs)("span",{className:(0,ax.cn)("flex items-center gap-1 rounded bg-violet-500/15 px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-violet-700 dark:text-violet-300",O&&"opacity-50"),children:[(0,d.jsx)(ac.A,{className:"size-2.5"})," IA",(0,d.jsx)("button",{type:"button",title:"Accept suggestion — turn it into your own feature",disabled:O,onClick:b=>{b.stopPropagation(),P(async()=>v(a))},className:(0,ax.cn)(aG,"-my-0.5 rounded p-0.5 hover:bg-emerald-500/20 hover:text-emerald-600 dark:hover:text-emerald-300"),children:(0,d.jsx)(ad.A,{className:"size-2.5"})}),(0,d.jsx)("button",{type:"button",title:"Dismiss suggestion (deletes the card)",disabled:O,onClick:b=>{b.stopPropagation(),n(a)},className:(0,ax.cn)(aG,"-my-0.5 -ml-0.5 rounded p-0.5 hover:bg-red-500/20 hover:text-red-600 dark:hover:text-red-300"),children:(0,d.jsx)(ae.A,{className:"size-2.5"})})]}),aj]}),b.role&&(0,d.jsx)("div",{className:(0,ax.cn)("mt-1.5 w-0 min-w-full text-[10px] leading-snug text-muted-foreground",!u&&"line-clamp-1"),children:b.role}),aq>0&&(0,d.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,d.jsx)("span",{className:"h-[3px] flex-1 overflow-hidden rounded-full bg-[var(--ink-active)]",title:`${ar}/${aq} sub-tasks done`,children:(0,d.jsx)("span",{className:"block h-full rounded-full bg-sky-400/75",style:{width:`${aq?ar/aq*100:0}%`}})}),(0,d.jsxs)("span",{className:"flex shrink-0 items-center gap-1 text-[10px] text-muted-foreground",children:[(0,d.jsx)(ad.A,{className:"size-3"}),ar,"/",aq]})]}),ao,ap]})]})});var aR=c(32798),aS=c(42800),aT=c(90165),aU=c(89216);let aV=(0,e.memo)(function({data:a}){let[b,c]=(0,e.useState)(!1),f=a.columns??[],g=b?f:f.slice(0,5),h=f.length-g.length,i=a.sample??[];return(0,d.jsxs)("div",{className:"w-[270px] rounded-xl border border-sky-400/25 bg-card/95 text-card-foreground shadow-[0_18px_50px_-22px_rgba(0,0,0,0.9)] backdrop-blur dark:bg-[#13161b]/95",children:[(0,d.jsx)(s.x,{}),(0,d.jsxs)("div",{className:"flex items-center gap-1.5 rounded-t-[11px] border-b border-border dark:border-white/[0.06] bg-sky-400/[0.07] px-3 py-2",children:[(0,d.jsx)(x.A,{className:"size-3.5 shrink-0 text-sky-400/80"}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate font-mono text-[13px] font-semibold tracking-tight",title:a.name,children:a.name}),a.domain&&(0,d.jsx)("span",{className:"shrink-0 text-[9px] uppercase tracking-[0.14em] text-sky-300/70",children:a.domain})]}),a.note&&(0,d.jsx)("div",{className:"border-b border-border px-3 py-1.5 text-[11px] leading-snug text-muted-foreground dark:border-white/[0.05]",children:a.note}),(0,d.jsx)("div",{className:"divide-y divide-border dark:divide-white/[0.05]",children:g.map(a=>(0,d.jsxs)("div",{className:"px-3 py-[6px]",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 text-[12px]",children:[a.isPk?(0,d.jsx)(aT.A,{className:"size-3 shrink-0 text-amber-300/90"}):a.isFk?(0,d.jsx)(aU.A,{className:"size-3 shrink-0 text-sky-400/80"}):(0,d.jsx)("span",{className:"size-3 shrink-0"}),(0,d.jsx)("span",{className:(0,ax.cn)("shrink-0 whitespace-nowrap font-mono",a.isPk&&"text-amber-200/95"),children:a.name}),(0,d.jsx)("span",{title:a.fkTo?`→ ${a.fkTo}`:a.type,className:"ml-auto min-w-0 truncate font-mono text-[11px] text-muted-foreground/80",children:a.fkTo?(0,d.jsxs)(d.Fragment,{children:["→\xa0",a.fkTo]}):a.type})]}),a.note&&(0,d.jsx)("div",{className:"ml-5 mt-0.5 text-[10.5px] leading-snug text-muted-foreground/70 [overflow-wrap:anywhere]",children:a.note})]},a.name))}),(h>0||i.length>0)&&(0,d.jsx)("button",{type:"button",onClick:a=>{a.stopPropagation(),c(a=>!a)},className:"nodrag nopan flex w-full items-center justify-center gap-1 rounded-b-[11px] border-t border-border dark:border-white/[0.06] px-3 py-1.5 text-[10px] text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-foreground dark:hover:bg-white/[0.04]",children:b?"Show less":h>0?`+${h} more column${1===h?"":"s"}`:"Show example row"}),b&&i.length>0&&(0,d.jsxs)("div",{className:"nowheel overflow-x-auto border-t border-border dark:border-white/[0.06] px-3 py-2",children:[(0,d.jsx)("div",{className:"mb-1 text-[9px] font-semibold uppercase tracking-[0.14em] text-muted-foreground/70",children:"example"}),(0,d.jsxs)("table",{className:"border-collapse font-mono text-[10px]",children:[(0,d.jsx)("thead",{children:(0,d.jsx)("tr",{className:"text-muted-foreground/60",children:f.map(a=>(0,d.jsx)("th",{className:"whitespace-nowrap px-1.5 pb-1 text-left font-medium",children:a.name},a.name))})}),(0,d.jsx)("tbody",{children:i.map((a,b)=>(0,d.jsx)("tr",{className:"text-foreground/85",children:f.map(b=>(0,d.jsx)("td",{className:"whitespace-nowrap px-1.5 py-0.5",children:a[b.name]??""},b.name))},b))})]})]})]})});var aW=c(96863),aX=c(42925),aY=c(37663),aZ=c(10139),a$=c(96498),a_=c(35195),a0=c(16265),a1=c(90069),a2=c(82078),a3=c(60136),a4=c(30693),a5=c(85360),a6=c(26284),a7=c(52351),a8=c(74732),a9=c(8422);function ba({className:a,...b}){return(0,d.jsx)("textarea",{"data-slot":"textarea",className:(0,ax.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",a),...b})}var bb=c(86371);function bc({className:a,...b}){return(0,d.jsx)(bb.b,{"data-slot":"label",className:(0,ax.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",a),...b})}let bd=(0,u.createServerReference)("40467e97c598f5efce143be114d181684cdc8c8801",u.callServer,void 0,u.findSourceMapURL,"createNodeAction"),be=(0,u.createServerReference)("60fc1a1091aee96998c4058daf638f8a6efdb6f902",u.callServer,void 0,u.findSourceMapURL,"updateNodeAction");function bf({open:a,onOpenChange:b,mode:c,view:f,heading:g,nodeId:h,parentId:i,position:j,defaults:k,hasFrontend:l=!1}){let m=(0,r.useRouter)(),[n,o]=(0,e.useState)(k?.title??""),[p,q]=(0,e.useState)(k?.role??""),[s,t]=(0,e.useState)(k?.plain??""),[u,v]=(0,e.useState)(k?.cluster??""),[w,x]=(0,e.useState)(k?.status??("ARCHITECTURE"===f?"REBUILD":"PENDING")),[y,z]=(0,e.useState)(k?.kind==="BUG"?"BUG":"FEATURE"),[A,B]=(0,e.useState)((0,ah.jR)(k?.layer)??"none"),[C,D]=(0,e.useState)(!1),E="ARCHITECTURE"===f?ag.m6:ag.yl;async function F(){if(n.trim()){D(!0);try{let a="none"===A?null:A;"create"===c?await bd({view:f,..."ROADMAP"===f?{kind:y}:{},title:n.trim(),role:p.trim()||null,plain:s.trim()||null,cluster:u.trim()||null,...l?{layer:a}:{},parentId:i??null,status:w,x:j?.x??60,y:j?.y??60}):h&&await be(h,{..."ROADMAP"===f?{kind:y}:{},title:n.trim(),role:p.trim()||null,plain:s.trim()||null,cluster:u.trim()||null,...l?{layer:a}:{},status:w}),b(!1),m.refresh()}finally{D(!1)}}}return(0,d.jsx)(a8.lG,{open:a,onOpenChange:b,children:(0,d.jsxs)(a8.Cf,{children:[(0,d.jsx)(a8.c7,{children:(0,d.jsx)(a8.L3,{children:g})}),(0,d.jsxs)("div",{className:"space-y-3",children:[(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsx)(bc,{htmlFor:"nf-title",children:"Title"}),(0,d.jsx)(a9.p,{id:"nf-title",value:n,autoFocus:!0,onChange:a=>o(a.target.value)})]}),(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsx)(bc,{htmlFor:"nf-role",children:"Role (one line)"}),(0,d.jsx)(a9.p,{id:"nf-role",value:p,onChange:a=>q(a.target.value)})]}),(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsx)(bc,{htmlFor:"nf-plain",children:"Description"}),(0,d.jsx)(ba,{id:"nf-plain",rows:3,value:s,onChange:a=>t(a.target.value)})]}),"ROADMAP"===f&&(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsx)(bc,{children:"Kind"}),(0,d.jsxs)(af.l6,{value:y,onValueChange:a=>null!=a&&z(a),children:[(0,d.jsx)(af.bq,{children:(0,d.jsx)(af.yv,{children:a=>"BUG"===a?"Bug":"Feature"})}),(0,d.jsxs)(af.gC,{children:[(0,d.jsx)(af.eb,{value:"FEATURE",children:"Feature"}),(0,d.jsx)(af.eb,{value:"BUG",children:"Bug"})]})]})]}),l&&(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsx)(bc,{children:"Layer"}),(0,d.jsxs)(af.l6,{value:A,onValueChange:a=>null!=a&&B(a),children:[(0,d.jsx)(af.bq,{children:(0,d.jsx)(af.yv,{children:a=>"none"===a?"—":ah.YG[a]?.label??a})}),(0,d.jsxs)(af.gC,{children:[(0,d.jsx)(af.eb,{value:"none",children:"—"}),Object.keys(ah.YG).map(a=>(0,d.jsx)(af.eb,{value:a,children:ah.YG[a].label},a))]})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsx)(bc,{children:"Status"}),(0,d.jsxs)(af.l6,{value:w,onValueChange:a=>null!=a&&x(a),children:[(0,d.jsx)(af.bq,{children:(0,d.jsx)(af.yv,{children:a=>ag.nR[a]?.label??a})}),(0,d.jsx)(af.gC,{children:E.map(a=>(0,d.jsx)(af.eb,{value:a,children:ag.nR[a]?.label??a},a))})]})]}),(0,d.jsxs)("div",{className:"space-y-1.5",children:[(0,d.jsx)(bc,{htmlFor:"nf-cluster",children:"Cluster / lane"}),(0,d.jsx)(a9.p,{id:"nf-cluster",value:u,onChange:a=>v(a.target.value)})]})]})]}),(0,d.jsxs)(a8.Es,{children:[(0,d.jsx)(a6.$,{variant:"outline",onClick:()=>b(!1),children:"Cancel"}),(0,d.jsx)(a6.$,{onClick:F,disabled:C||!n.trim(),children:C?"Saving…":"Save"})]})]})})}let bg=(0,u.createServerReference)("4082e119e7997decee01b634b5bb66ddef57834032",u.callServer,void 0,u.findSourceMapURL,"deleteNodeAction"),bh=(0,u.createServerReference)("60f8cdcb5931c995e6fe5830c60072052e21e49cb9",u.callServer,void 0,u.findSourceMapURL,"setStatusAction"),bi=(0,u.createServerReference)("40ad73811db4f257c117eddffe5857b199d064fe2c",u.callServer,void 0,u.findSourceMapURL,"deprioritizeAction"),bj=(0,u.createServerReference)("4038c80f0b4b50ab317b1da3463121032b8dfe0741",u.callServer,void 0,u.findSourceMapURL,"cancelAction");function bk({view:a,selected:b,allNodes:c,onClose:e,commentsContent:f,commentsCount:g=0,activeTab:h,onTabChange:i,onAddComment:j,topOffset:k}){let l=!!f,m=h??"details",n=b?.parentId?c.find(a=>a.id===b.parentId)?.title??null:null;return(0,d.jsxs)(a4.p_,{topOffset:k,children:[(0,d.jsx)(a4.aO,{tabs:l?{active:m,count:g,onChange:a=>i?.(a)}:null,breadcrumb:b?(0,d.jsx)(bl,{node:b,view:a}):"ROADMAP"===a?"Roadmap":"Architecture",comment:j&&b&&"details"===m?{title:`Comment on this ${"ARCHITECTURE"===a?"component":"feature"}`,onClick:()=>j(b.title)}:null,onClose:e}),(0,d.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,d.jsx)("div",{className:"px-4 py-3",children:"comments"===m&&l?f:b?(0,d.jsx)(bm,{node:b,view:a,parentTitle:n,showBreadcrumb:l},b.id):(0,d.jsx)(bp,{view:a,nodes:c})})})]})}function bl({node:a,view:b}){let{hasFrontend:c}=ak(),e=(0,ah.jR)(a.layer),f="ARCHITECTURE"===b?"component":"BUG"===a.kind?"bug":a.parentId?"sub-task":"feature";return(0,d.jsxs)(d.Fragment,{children:[(0,ag.Xf)(a.cluster),c&&e&&(0,d.jsxs)("span",{children:[" \xb7 ",ah.YG[e].label]}),(0,d.jsxs)("span",{children:[" \xb7 ",f]})]})}function bm({node:a,view:b,parentTitle:c,showBreadcrumb:f}){let g=(0,r.useRouter)(),[h,i]=(0,e.useTransition)(),[j,l]=(0,e.useState)(!1),[m,n]=(0,e.useState)(!1),[o,p]=(0,e.useState)(!1),[q,s]=(0,e.useState)(!1),[t,u]=(0,e.useState)(!1),[w,x]=(0,e.useState)(a.plain??""),{hasFrontend:y,openFocus:z}=ak(),A="ARCHITECTURE"===b?ag.m6:ag.yl,B="LINEAR"===a.source&&a.sourceRef?a.sourceRef.match(/\/issue\/([^/]+)/)?.[1]??"Linear issue":null,C=a=>i(async()=>{await a(),g.refresh()});return(0,d.jsxs)("div",{children:[f&&(0,d.jsx)("div",{className:"mb-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:(0,d.jsx)(bl,{node:a,view:b})}),(0,d.jsx)("h2",{className:"text-base font-semibold leading-snug",children:a.title}),"INIT"===a.source&&"ROADMAP"===b&&(0,d.jsxs)("div",{className:"mt-3 rounded-lg border border-violet-400/25 bg-violet-500/[0.05] p-2.5",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-xs font-semibold text-violet-700 dark:text-violet-300",children:[(0,d.jsx)(ac.A,{className:"size-3.5"})," AI suggestion"]}),(0,d.jsx)("p",{className:"mt-1 text-[11px] leading-snug text-muted-foreground",children:"Suggested direction surfaced when mapping the repo. Accept to turn it into your own feature, or dismiss."}),(0,d.jsxs)("div",{className:"mt-2 flex gap-1.5",children:[(0,d.jsx)(a6.$,{size:"sm",className:"h-7 px-2.5 text-xs",disabled:h,onClick:()=>C(()=>v(a.id)),children:"Accept"}),(0,d.jsx)(a6.$,{size:"sm",variant:"ghost",className:"h-7 px-2.5 text-xs text-muted-foreground",disabled:h,onClick:()=>C(()=>bg(a.id)),children:"Dismiss"})]})]}),(0,d.jsxs)("div",{className:"mt-3 space-y-px",children:[(0,d.jsx)(a4.yc,{icon:aX.A,label:"Status",children:(0,d.jsxs)(af.l6,{value:a.status,onValueChange:b=>null!=b&&C(()=>bh(a.id,b)),children:[(0,d.jsx)(af.bq,{className:a4.Sq,disabled:h,children:(0,d.jsx)(af.yv,{children:a=>(0,d.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,d.jsx)("span",{"aria-hidden":!0,className:"size-2 rounded-full",style:{background:aI[a]??"#71717a"}}),ag.nR[a]?.label??a]})})}),(0,d.jsx)(af.gC,{alignItemWithTrigger:!1,children:A.map(a=>(0,d.jsx)(af.eb,{value:a,children:ag.nR[a]?.label??a},a))})]})}),"ARCHITECTURE"!==b&&(0,d.jsx)(a4.yc,{icon:aY.A,label:"Priority",children:(0,d.jsxs)(af.l6,{value:String(a.priority),onValueChange:b=>null!=b&&C(()=>be(a.id,{priority:Number(b)})),children:[(0,d.jsx)(af.bq,{className:a4.Sq,disabled:h,children:(0,d.jsx)(af.yv,{children:a=>aC.find(b=>String(b.v)===a)?.l??a})}),(0,d.jsx)(af.gC,{alignItemWithTrigger:!1,children:aC.map(a=>(0,d.jsx)(af.eb,{value:String(a.v),children:a.l},a.v))})]})}),y&&(0,d.jsx)(a4.yc,{icon:K.A,label:"Layer",children:(0,d.jsxs)(af.l6,{value:(0,ah.jR)(a.layer)??"none",onValueChange:b=>null!=b&&C(()=>be(a.id,{layer:"none"===b?null:b})),children:[(0,d.jsx)(af.bq,{className:a4.Sq,disabled:h,children:(0,d.jsx)(af.yv,{children:a=>"none"===a?(0,d.jsx)("span",{className:"text-muted-foreground",children:"No layer"}):ah.YG[a]?.label??a})}),(0,d.jsxs)(af.gC,{alignItemWithTrigger:!1,children:[(0,d.jsx)(af.eb,{value:"none",children:"— no layer"}),Object.entries(ah.YG).map(([a,b])=>(0,d.jsx)(af.eb,{value:a,children:b.label},a))]})]})}),a.cluster&&(0,d.jsx)(a4.yc,{icon:aZ.A,label:"Category",children:(0,d.jsx)("span",{className:(0,ax.cn)("rounded px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide",(0,ai.a2)(a.cluster)),children:a.cluster})}),c&&(0,d.jsx)(a4.yc,{icon:a$.A,label:"Parent",children:(0,d.jsx)("span",{className:"truncate",children:c})}),"LINEAR"===a.source&&a.externalMeta?.state&&(0,d.jsx)(a4.yc,{icon:aX.A,label:"State",children:(0,d.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,d.jsx)("span",{"aria-hidden":!0,className:"size-2 rounded-full",style:{background:a.externalMeta.state.color}}),a.externalMeta.state.name]})}),"LINEAR"===a.source&&a.externalMeta?.team&&(0,d.jsx)(a4.yc,{icon:a_.A,label:"Team",children:(0,d.jsx)("span",{className:"truncate",children:a.externalMeta.team.name})}),"LINEAR"===a.source&&a.externalMeta?.project&&(0,d.jsx)(a4.yc,{icon:M.A,label:"Project",children:(0,d.jsx)("span",{className:"truncate",children:a.externalMeta.project.name})}),"LINEAR"===a.source&&a.externalMeta?.milestone&&(0,d.jsx)(a4.yc,{icon:a0.A,label:"Milestone",children:(0,d.jsx)("span",{className:"truncate",children:a.externalMeta.milestone.name})}),B?(0,d.jsx)(a4.yc,{icon:a1.A,label:"Linear",children:(0,d.jsxs)("a",{href:a.sourceRef,target:"_blank",rel:"noreferrer",className:"flex items-center gap-1 rounded-md px-1.5 py-0.5 font-mono text-xs transition-colors hover:bg-[var(--ink-hover)] hover:text-[var(--accent-2,#ff7a45)]",children:[B,(0,d.jsx)(a1.A,{className:"size-3"})]})}):a.sourceRef?(0,d.jsx)(a4.yc,{icon:a1.A,label:"Source",children:(0,d.jsx)("span",{className:"truncate font-mono text-[11px] text-muted-foreground",children:a.sourceRef})}):null]}),(0,d.jsx)(a4.aU,{title:(0,d.jsxs)(d.Fragment,{children:["Description",(0,d.jsx)("button",{type:"button",title:"Edit in focus mode",onClick:()=>z({id:a.id,title:a.title,value:w,editable:!0,onCommit:b=>{x(b);let c=b.trim()||null;c!==(a.plain??null)&&C(()=>be(a.id,{plain:c}))}}),className:"ml-auto rounded p-0.5 text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-[var(--accent-2,#ff7a45)]",children:(0,d.jsx)(T.A,{className:"size-3.5"})})]}),children:t?(0,d.jsx)(ay,{value:w,onChange:x,onBlur:()=>{u(!1);let b=w.trim()||null;b!==(a.plain??null)&&C(()=>be(a.id,{plain:b}))},autoFocus:!0},"edit"):w.trim()?(0,d.jsx)("div",{role:"button",tabIndex:0,title:"Click to edit",onClick:()=>u(!0),onKeyDown:a=>{"Enter"===a.key&&u(!0)},className:"-mx-1.5 cursor-text rounded-md px-1.5 py-1 transition-colors hover:bg-[var(--ink-hover)]",children:(0,d.jsx)(ay,{value:w,onChange:()=>{},editable:!1},"view")}):(0,d.jsx)("button",{type:"button",onClick:()=>u(!0),className:"-mx-1.5 w-full rounded-md px-1.5 py-1 text-left text-xs text-muted-foreground/60 transition-colors hover:bg-[var(--ink-hover)] hover:text-muted-foreground",children:"Add a description…"})}),a.files.length>0&&(0,d.jsx)(a4.aU,{title:`Files (${a.files.length})`,children:(0,d.jsx)(a5.h,{files:a.files.map(a=>({path:a}))})}),"ARCHITECTURE"===b&&(0,d.jsx)(bo,{node:a}),(0,d.jsxs)("div",{className:"mt-4 flex items-center gap-1 border-t border-border pt-3",children:[(0,d.jsxs)(a6.$,{size:"sm",variant:"ghost",className:"h-7 gap-1.5 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:()=>l(!0),children:[(0,d.jsx)(a2.A,{className:"size-3.5"}),"Edit"]}),(0,d.jsxs)(a6.$,{size:"sm",variant:"ghost",className:"h-7 gap-1.5 px-2 text-xs text-muted-foreground hover:text-foreground",onClick:()=>n(!0),children:[(0,d.jsx)(k.A,{className:"size-3.5"}),"Sub-node"]}),(0,d.jsxs)("div",{className:"relative ml-auto",children:[(0,d.jsx)("button",{type:"button",title:"More actions",onClick:()=>p(a=>!a),className:(0,ax.cn)("rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-foreground",o&&"bg-[var(--ink-active)] text-foreground"),children:(0,d.jsx)(a3.A,{className:"size-4"})}),o&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"fixed inset-0 z-10",onClick:()=>p(!1)}),(0,d.jsxs)("div",{className:"absolute bottom-full right-0 z-20 mb-1 w-44 rounded-lg border border-border bg-popover p-1 shadow-xl",children:[(0,d.jsx)(bn,{disabled:h,onClick:()=>{p(!1),C(()=>bi(a.id))},children:"Deprioritize"}),(0,d.jsx)(bn,{disabled:h,onClick:()=>{p(!1),C(()=>bj(a.id))},children:"Cancel node"}),(0,d.jsx)(bn,{destructive:!0,disabled:h,onClick:()=>{p(!1),s(!0)},children:"Delete…"})]})]})]})]}),(0,d.jsx)(a7.Lt,{open:q,onOpenChange:s,children:(0,d.jsxs)(a7.EO,{children:[(0,d.jsxs)(a7.wd,{children:[(0,d.jsxs)(a7.r7,{children:["Delete “",a.title,"”?"]}),(0,d.jsx)(a7.$v,{children:"This removes the node and all its sub-nodes. It can’t be undone."})]}),(0,d.jsxs)(a7.ck,{children:[(0,d.jsx)(a7.Zr,{children:"Cancel"}),(0,d.jsx)(a7.Rx,{onClick:()=>C(()=>bg(a.id)),children:"Delete"})]})]})}),j&&(0,d.jsx)(bf,{open:!0,onOpenChange:l,mode:"edit",view:b,heading:"Edit node",nodeId:a.id,hasFrontend:y,defaults:{title:a.title,role:a.role,plain:a.plain,status:a.status,cluster:a.cluster,kind:a.kind,layer:a.layer}}),m&&(0,d.jsx)(bf,{open:!0,onOpenChange:n,mode:"create",view:b,heading:"New sub-node",parentId:a.id,position:{x:a.x,y:a.y+120},hasFrontend:y,defaults:{cluster:a.cluster,layer:a.layer}})]})}function bn({onClick:a,disabled:b,destructive:c,children:e}){return(0,d.jsx)("button",{type:"button",disabled:b,onClick:a,className:(0,ax.cn)("flex w-full items-center rounded-md px-2 py-1.5 text-left text-xs transition-colors disabled:opacity-50",c?"text-red-600 hover:bg-red-500/10 dark:text-red-300":"text-foreground hover:bg-[var(--ink-hover)]"),children:e})}function bo({node:a}){let b=(0,r.useRouter)(),[c,f]=(0,e.useState)(""),[g,h]=(0,e.useState)(!1),i=a.bugFlags.filter(a=>!a.resolved),j=a=>{h(!0),a().then(()=>b.refresh()).finally(()=>h(!1))},k=()=>{let b=c.trim();b&&j(async()=>{(await fetch("/api/bug-flags",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({nodeId:a.id,by:"user",note:b})})).ok&&f("")})};return(0,d.jsxs)(a4.aU,{title:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(l.A,{className:"size-3.5 text-rose-600 dark:text-rose-300"}),"Bug flags",i.length>0&&` (${i.length} open)`]}),children:[a.bugFlags.length>0&&(0,d.jsx)("ul",{className:"space-y-1.5",children:a.bugFlags.map(a=>(0,d.jsxs)("li",{className:(0,ax.cn)("rounded-md px-2 py-1.5",a.resolved?"opacity-50":"bg-rose-500/[0.06]"),children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,d.jsx)("span",{title:"agent"===a.by?"Flagged by an agent examining the code":"Flagged by you",className:(0,ax.cn)("rounded px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide","agent"===a.by?"bg-violet-500/15 text-violet-700 dark:text-violet-300":"bg-sky-500/15 text-sky-700 dark:text-sky-300"),children:"agent"===a.by?"agent":"you"}),(0,d.jsxs)("div",{className:"ml-auto flex items-center gap-1",children:[(0,d.jsx)("button",{type:"button",disabled:g,onClick:()=>j(()=>fetch(`/api/bug-flags/${a.id}`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({resolved:!a.resolved})})),className:"rounded px-1.5 py-0.5 text-[10px] text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-foreground",children:a.resolved?"Reopen":"Resolve"}),(0,d.jsx)("button",{type:"button",disabled:g,title:"Delete flag",onClick:()=>j(()=>fetch(`/api/bug-flags/${a.id}`,{method:"DELETE"})),className:"rounded p-0.5 text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-red-600 dark:hover:text-red-300",children:(0,d.jsx)(ae.A,{className:"size-3"})})]})]}),(0,d.jsx)("p",{className:(0,ax.cn)("mt-1 text-[11.5px] leading-snug",a.resolved&&"line-through"),children:a.note})]},a.id))}),(0,d.jsxs)("div",{className:"mt-1.5 flex items-start gap-1.5",children:[(0,d.jsx)("textarea",{rows:1,value:c,placeholder:"Flag a bug or something worth investigating…",onChange:a=>f(a.target.value),onKeyDown:a=>{"Enter"!==a.key||a.shiftKey||(a.preventDefault(),k())},className:"field-sizing-content min-h-7 w-full resize-none rounded-md bg-[var(--ink-hover)] px-2 py-1 text-[11.5px] outline-none placeholder:text-muted-foreground/60 focus:bg-[var(--ink-active)]"}),(0,d.jsx)(a6.$,{size:"sm",variant:"ghost",className:"h-7 shrink-0 px-2 text-[11px] text-muted-foreground hover:text-foreground",disabled:g||!c.trim(),onClick:k,children:"Flag"})]})]})}function bp({view:a,nodes:b}){let c=b.filter(a=>0===a.priority).length;return(0,d.jsxs)("div",{children:[(0,d.jsx)("h2",{className:"text-base font-semibold",children:"ROADMAP"===a?"Roadmap":"Architecture"}),(0,d.jsx)("p",{className:"mt-1 text-xs leading-relaxed text-muted-foreground",children:"Click a node for details and actions. Drag to rearrange — positions are saved."}),(0,d.jsxs)("dl",{className:"mt-4 flex gap-8 border-t border-border pt-3",children:[(0,d.jsx)(a4.ZB,{label:"nodes",value:b.length}),(0,d.jsx)(a4.ZB,{label:"critical",value:c})]})]})}var bq=c(48779);function br({payload:a,onDismiss:b}){let[c,f]=(0,e.useState)(""),[g,h]=(0,e.useState)(null);if((a?.id??null)!==g&&(h(a?.id??null),f(a?.value??"")),!a)return null;let i=()=>{a.onCommit(c),b()};return(0,d.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":`Edit description — ${a.title}`,onMouseDown:a=>{a.target===a.currentTarget&&i()},className:"fixed inset-0 z-[70] flex items-center justify-center bg-black/55 backdrop-blur-[5px] animate-in fade-in duration-150",children:(0,d.jsxs)(bq.b,{className:"flex max-h-[82vh] w-[min(720px,92vw)] flex-col rounded-2xl duration-150 animate-in fade-in zoom-in-95",onMouseDown:a=>a.stopPropagation(),children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[(0,d.jsx)("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:"Description"}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-sm font-semibold",children:a.title}),(0,d.jsxs)("span",{className:"shrink-0 font-mono text-[11px] text-muted-foreground",children:[c.length," chars"]}),(0,d.jsx)("button",{type:"button",onClick:i,title:"Close (Esc)",className:"shrink-0 rounded-lg p-1 text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-foreground",children:(0,d.jsx)(ae.A,{className:"size-4"})})]}),(0,d.jsx)("div",{className:"min-h-[40vh] flex-1 overflow-y-auto px-6 py-5 text-[15px] leading-relaxed",children:(0,d.jsx)(ay,{bare:!0,autoFocus:a.editable,editable:a.editable,value:c,onChange:f})}),(0,d.jsxs)("div",{className:"flex items-center gap-3 border-t border-border px-4 py-2.5 text-[11.5px] text-muted-foreground",children:[(0,d.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,d.jsx)("span",{className:"size-1.5 rounded-full bg-emerald-400"})," Autosaves"]}),(0,d.jsx)("span",{className:"opacity-70",children:"\xb7 Esc to close"}),a.editable&&(0,d.jsxs)("button",{type:"button",onClick:i,className:"ml-auto flex items-center gap-1.5 rounded-lg bg-[#ff7a45] px-3 py-1.5 text-xs font-semibold text-black transition hover:brightness-110",children:[(0,d.jsx)(ad.A,{className:"size-3.5"}),"Save & close"]})]})]})})}var bs=c(35283),bt=c(38476),bu=c(55805),bv=c(54193),bw=c(82626),bx=c(81725),by=c(40335),bz=c(25127),bA=c(40359),bB=c(92994),bC=c(84170),bD=c(34849),bE=c(56173),bF=c(27741);function bG(a,b){let c={x:b.x,y:b.y};for(let b=0;b<100&&a.some(a=>200>Math.abs(c.x-a.x)&&150>Math.abs(c.y-a.y));b++)c.y+=150;return c}var bH=c(67637),bI=c(66002);let bJ=[{value:"cluster",label:"Theme"},{value:"status",label:"Status"},{value:"priority",label:"Priority"}],bK=new Set(["title","role","plain","cluster","layer","status","priority"]),bL={roadmapNode:aQ,archNode:aQ,annotation:t.Sh,lessonTable:aV},bM={deletable:aS.I,annotation:aW.L},bN={CONTAINS:{stroke:"#7c7c8a"},DEPENDS:{stroke:"#f5b942",dash:"6 4"},RELATES:{stroke:"#8a8a95",dash:"4 4"},REPLACES:{stroke:"#ff6b9d"}};function bO({view:a,nodes:b,edges:c,workOrder:r=[],embedded:s=!1,commentsContent:u,commentsCount:v=0,controlRef:w,onAskAgent:x,onAddComment:y,annotations:z,onPinClick:A,onUpdateComment:B,onRemoveComment:C,boardAnnotations:D,initialArrangedBy:E=null,initialCollapsed:F=[],hasFrontend:G=!1,readOnly:H=!1,firstTapHighlightsOnly:I=!1,minimap:J,staticEdgeLabels:K=!1,tableNodes:L}){let M=r.join(","),N=(0,e.useMemo)(()=>{let a=new Map;return r.forEach((b,c)=>a.set(b,c+1)),a},[M]),O=r[0]??null,P=(0,e.useMemo)(()=>b.map(a=>({id:a.id,type:"ROADMAP"===a.view?"roadmapNode":"archNode",position:{x:a.x,y:a.y},data:{title:a.title,role:a.role,plain:a.plain,status:a.status,priority:a.priority,cluster:a.cluster,layer:a.layer,view:a.view,kind:a.kind,source:a.source,sourceRef:a.sourceRef,assigneeName:a.assigneeName,assigneeAvatarUrl:a.assigneeAvatarUrl,externalMeta:a.externalMeta,isCriterion:a.isCriterion,isChild:null!=a.parentId,parentId:a.parentId,signals:a.signals,fileCount:a.files.length,importsIn:a.importsIn,importsOut:a.importsOut,openBugs:a.bugFlags.filter(a=>!a.resolved).length}})),[b]),Q=(0,e.useMemo)(()=>{var a;let d;return a=new Set((L??[]).map(a=>a.id)),d=new Set([...b.map(a=>a.id),...a??[]]),[...b.filter(a=>a.parentId&&d.has(a.parentId)).map(a=>({id:`c-${a.id}`,source:a.parentId,sourceHandle:"sb",target:a.id,targetHandle:"tt",type:"smoothstep",style:{stroke:bN.CONTAINS.stroke}})),...c.filter(a=>d.has(a.fromId)&&d.has(a.toId)).map(a=>{let b=bN[a.kind]??bN.RELATES,c="DEPENDS"===a.kind?"depends on":void 0;return{id:a.id,source:a.fromId,sourceHandle:a.sourceHandle??void 0,target:a.toId,targetHandle:a.targetHandle??void 0,label:a.label??c,type:"deletable",markerEnd:{type:g.TG.ArrowClosed,color:b.stroke},style:{stroke:b.stroke,strokeDasharray:b.dash}}})]},[b,c,L]),[R,S]=(0,e.useState)(P),[T,U]=(0,e.useState)(Q),[V,W]=(0,e.useState)(null),[X,Y]=(0,e.useState)(null),[Z,$]=(0,e.useState)(null),[_,aa]=(0,e.useState)(!1),[ab,ac]=(0,e.useState)("details"),{tool:ad,setTool:ae,flowProps:af,paneClass:ai}=(0,bs.e)(),[ak,am]=(0,e.useState)(null),[an,ao]=(0,e.useState)(null),[ap,aq]=(0,e.useState)(!1),ar=(0,bI.G)(),as=(0,e.useRef)(!1);(0,e.useRef)("details");let[at,au]=(0,e.useState)(new Set),[av,aw]=(0,e.useState)(null),[ay,az]=(0,e.useState)(!1),aA=(0,e.useRef)(null),aB=(0,e.useCallback)((a,b,c)=>{S(c=>c.map(c=>c.id===a?{...c,data:{...c.data,...b}}:c)),c&&fetch(`/api/nodes/${a}`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify(Object.fromEntries(Object.entries(b).filter(([a])=>bK.has(a))))})},[]),aC=(0,e.useMemo)(()=>JSON.stringify(Array.from(new Set(R.map(a=>a.data.cluster).filter(a=>!!a))).sort()),[R]),aD=(0,e.useMemo)(()=>JSON.parse(aC),[aC]),aE=(0,e.useCallback)(a=>au(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c}),[]),aF=(0,e.useCallback)(a=>{W(a),aa(!0),ac("details")},[]),aG=(0,e.useCallback)(a=>{S(b=>b.filter(b=>b.id!==a)),W(b=>b===a?null:b),fetch(`/api/nodes/${a}`,{method:"DELETE"})},[]),aH=(0,e.useCallback)(async(b,c,d="FEATURE")=>{let e=(0,f.sX)(),g="ARCHITECTURE"===a?"REBUILD":"PENDING",h="BUG"===d?"New bug":"New node";S(f=>[...f,{id:e,type:"ROADMAP"===a?"roadmapNode":"archNode",position:{x:b,y:c},data:{title:h,role:null,plain:null,status:g,priority:2,cluster:null,view:a,kind:d,source:"MANUAL",sourceRef:null,isCriterion:!1,isChild:!1,parentId:null,openBugs:0}}]),au(a=>new Set(a).add(e)),aw(e),W(e);try{if(!(await fetch("/api/nodes",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:e,view:a,kind:d,title:h,status:g,x:b,y:c})})).ok)throw Error("create failed")}catch{S(a=>a.filter(a=>a.id!==e)),au(a=>{let b=new Set(a);return b.delete(e),b}),aw(a=>a===e?null:a),W(a=>a===e?null:a)}},[a]),aI=(0,e.useCallback)((a,b)=>{if(!ak||!aA.current)return;let c=aA.current.screenToFlowPosition({x:a,y:b});aH(c.x,c.y,ak),am(null),ao(null)},[ak,aH]);(0,e.useCallback)(()=>{let a=R.filter(a=>"annotation"!==a.type);return function(a,b,c={}){let d=c.colW??320,e=c.rowH??150,f=c.maxCols??4,g=c.bandGap??90;if(0===a.length){if(0===b.length)return{x:0,y:0};let a=Math.max(...b.map(a=>a.y));return bG(b,{x:0,y:a+e+g})}let h=Math.min(...a.map(a=>a.x)),i=Math.min(...a.map(a=>a.y)),j=a.map(a=>Math.max(0,Math.round((a.x-h)/d))),k=Math.min(f,Math.max(Math.max(...j)+1,Math.ceil(Math.sqrt(a.length+1)))),l=Array(k).fill(i-e);a.forEach((a,b)=>{let c=Math.min(j[b],k-1);l[c]=Math.max(l[c],a.y)});let m=0;for(let a=1;a<k;a++)l[a]<l[m]&&(m=a);return bG(b,{x:h+m*d,y:l[m]+e})}(a.filter(a=>!a.data.parentId&&!(a.data.cluster??"").trim()).map(a=>a.position),a.map(a=>a.position))},[R]);let aJ=(0,e.useCallback)(()=>{az(!1),am("FEATURE")},[]),aK=(0,e.useCallback)(()=>{az(!1),am("BUG")},[]),[aL,aM]=(0,e.useState)(null),aN=(0,e.useCallback)(a=>aM(a),[]),aO=(0,e.useMemo)(()=>({view:a,readOnly:H,categories:aD,statuses:"ARCHITECTURE"===a?ag.m6:ag.yl,patch:aB,isExpanded:a=>at.has(a),toggleExpand:aE,openDetailed:aF,openFocus:aN,removeNode:aG,editingTitleId:av,onAskAgent:x,hasFrontend:G}),[a,H,aD,aB,at,aE,aF,aN,aG,av,x,G]),[aP,aQ]=(0,e.useState)(E),[aS,aT]=(0,e.useState)(""),[aU,aV]=(0,e.useState)("full"),[aW,aX]=(0,e.useState)(new Set),[aY,aZ]=(0,e.useState)(new Set),[a$,a_]=(0,e.useState)(new Set),[a0,a1]=(0,e.useState)(new Set),[a2,a3]=(0,e.useState)(new Set),[a4,a5]=(0,e.useState)(new Set),[a6,a7]=(0,e.useState)(new Set),[a8,a9]=(0,e.useState)(null),ba=(0,e.useMemo)(()=>Array.from(new Set(b.map(a=>a.status))),[b]),bb=(0,e.useMemo)(()=>Array.from(new Set(b.map(a=>a.cluster).filter(a=>!!a))).sort(),[b]),bc=(0,e.useMemo)(()=>Array.from(new Set(b.map(a=>a.priority))).sort((a,b)=>a-b),[b]),bd=(0,e.useMemo)(()=>b.some(a=>a.externalMeta),[b]),be=(0,e.useMemo)(()=>Array.from(new Set(b.map(a=>a.externalMeta?.team.name).filter(a=>!!a))).sort(),[b]),bf=(0,e.useMemo)(()=>Array.from(new Set(b.map(a=>a.externalMeta?.project?.name).filter(a=>!!a))).sort(),[b]),bg=(0,e.useMemo)(()=>Array.from(new Set(b.map(a=>a.externalMeta?.milestone?.name).filter(a=>!!a))).sort(),[b]),bh=(0,e.useMemo)(()=>Array.from(new Set(b.map(a=>a.externalMeta?.state.name).filter(a=>!!a))).sort(),[b]),bi=(0,e.useMemo)(()=>({status:aW,cluster:aY,priority:a$,team:a0,project:a2,milestone:a4,state:a6}),[aW,aY,a$,a0,a2,a4,a6]),bj=(0,e.useCallback)(a=>(function(a,b){if(b.status.size&&!b.status.has(a.status)||b.cluster.size&&(!a.cluster||!b.cluster.has(a.cluster))||b.priority.size&&!b.priority.has(a.priority))return!1;if(!(b.team.size>0||b.project.size>0||b.milestone.size>0||b.state.size>0))return!0;let c=a.externalMeta;return!!c&&(!b.team.size||!!b.team.has(c.team.name))&&(!b.project.size||!!c.project&&!!b.project.has(c.project.name))&&(!b.milestone.size||!!c.milestone&&!!b.milestone.has(c.milestone.name))&&(!b.state.size||!!b.state.has(c.state.name))})(a,bi),[bi]),bl=aW.size+aY.size+a$.size+a0.size+a2.size+a4.size+a6.size+ +!!a8,bm=(0,e.useCallback)(()=>{aX(new Set),aZ(new Set),a_(new Set),a1(new Set),a3(new Set),a5(new Set),a7(new Set),a9(null)},[]),[bn,bo]=(0,e.useState)(()=>new Set(F)),bp=(0,e.useCallback)(b=>{bo(c=>{let d=new Set(c);return d.has(b)?d.delete(b):d.add(b),s||fetch("/api/board-layout",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({board:"ROADMAP"===a?"roadmap":"architecture",collapsed:[...d]})}).catch(()=>{}),d})},[s,a]),bq=(0,e.useMemo)(()=>(function(a){let b=new Map;for(let c of a)c.parentId&&b.set(c.parentId,(b.get(c.parentId)??0)+1);return b})(b),[b]),bP=(0,e.useMemo)(()=>{let a=new Map;for(let c of b)c.parentId&&"DONE"===c.status&&a.set(c.parentId,(a.get(c.parentId)??0)+1);return a},[b]),bQ=(0,e.useMemo)(()=>(function(a,b){let c=new Set;if(0===b.size)return c;let d=new Map;for(let b of a){if(!b.parentId)continue;let a=d.get(b.parentId);a?a.push(b.id):d.set(b.parentId,[b.id])}let e=[...b];for(;e.length;){let a=e.pop();for(let b of d.get(a)??[])c.has(b)||(c.add(b),e.push(b))}return c})(b,bn),[b,bn]),bR=(0,e.useMemo)(()=>R.map(a=>({...a,hidden:!bj(a.data)||bQ.has(a.id)})),[R,bj,bQ]),bS=(0,e.useMemo)(()=>new Set(bR.filter(a=>a.hidden).map(a=>a.id)),[bR]),bT=(0,e.useMemo)(()=>T.map(a=>({...a,hidden:bS.has(a.source)||bS.has(a.target)})),[T,bS]),bU=(0,e.useMemo)(()=>{if(X){let a=bT.find(a=>a.id===X);return a?new Set([a.source,a.target]):null}return V?(0,bt.F1)(V,bT.filter(a=>!a.hidden)):null},[V,X,bT]),bV=aS.trim().length>0,bW=(0,e.useMemo)(()=>{if(!bV)return null;let a=new Set;for(let b of R)bj(b.data)&&(0,bx.Qk)((0,bx.$$)(b.data),aS)&&a.add(b.id);return a},[R,aS,bj,bV]),bX=(0,e.useMemo)(()=>"ARCHITECTURE"===a?(0,by.d)(b):[],[a,b]),bY=(0,e.useCallback)(a=>{aA.current&&(a.focusIds.length?aA.current.fitView({nodes:a.focusIds.map(a=>({id:a})),duration:700,padding:.3,maxZoom:1.1}):aA.current.fitView({duration:700,padding:.2}))},[]),bZ=(0,bz.W)(bX,bY),b$=bZ.focusIds,b_=b$??bW??bU,b0=bW??b$??bU,b1=(0,e.useMemo)(()=>a8?new Set(bR.filter(a=>!a.hidden&&!(0,bC.F)(a8,(0,ah.jR)(a.data.layer))).map(a=>a.id)):null,[a8,bR]),b2=(0,e.useMemo)(()=>bR.map(a=>{let b=N.get(a.id),c=bq.get(a.id)??0,d={...b?{workOrderRank:b,isNext:1===b}:{},...c>0?{childCount:c,childDone:bP.get(a.id)??0,collapsed:bn.has(a.id),onToggleCollapse:bp}:{}},e=b||c>0?{...a,data:{...a.data,...d}}:a;if(at.has(a.id)&&(e={...e,zIndex:25}),e.hidden)return e;if(!b_)return b1?.has(a.id)?{...e,style:{...e.style,opacity:.3,filter:"saturate(0.3)",transition:"opacity 120ms, filter 120ms"}}:e;let f=b_.has(a.id),g=b0?bx.Uy:.45;return{...e,zIndex:f&&b0?24:e.zIndex,style:{...e.style,opacity:f?1:g,boxShadow:f&&b0?bx.RU:e.style?.boxShadow,borderRadius:f&&b0?"var(--radius-lg)":e.style?.borderRadius,transition:"opacity 120ms, box-shadow 120ms"}}}),[bR,b_,b0,N,at,b1,bq,bP,bn,bp]),[b3,b4]=(0,e.useState)(()=>new Map),[b5,b6]=(0,e.useState)(()=>new Map),b7=(0,e.useMemo)(()=>new Set((L??[]).map(a=>a.id)),[L]),b8=(0,e.useMemo)(()=>{if("ROADMAP"===a&&!aP||"ROADMAP"!==a&&"ARCHITECTURE"!==a)return[];let b=new Map(b2.map(a=>[a.id,a])),c=[];for(let d of b2){if(d.hidden||"annotation"===d.type)continue;let e=(d.data.parentId?b.get(d.data.parentId):void 0)??d,f="ROADMAP"===a&&aP?function(a,b){if("status"===a){let a=(0,bD.Gg)({status:b.status,stateName:b.externalMeta?.state?.name});return ag.nR[a]?.label??a}return"priority"===a?`P${b.priority}`:b.cluster?.trim()||"—"}(aP,e.data):e.data.cluster?.trim()||"—";c.push({id:d.id,group:f,x:d.position.x,y:d.position.y,w:d.measured?.width??(d.data.isChild?224:256),h:d.measured?.height??96})}for(let a of L??[]){let b=b5.get(a.id)??a;c.push({id:a.id,group:a.group?.trim()||"—",x:b.x,y:b.y,w:b3.get(a.id)?.width??270,h:b3.get(a.id)?.height??200})}return(0,bF.S)(c)},[b2,aP,a,L,b3,b5]),b9="ARCHITECTURE"===a||"cluster"===aP?"category":"neutral",ca=(0,e.useMemo)(()=>{if(b$)return bT.map(a=>a.hidden?a:b$.has(a.source)&&b$.has(a.target)?{...a,style:{...a.style,opacity:1}}:{...a,label:void 0,style:{...a.style,opacity:.06}});if(bW)return bT.map(a=>a.hidden?a:bW.has(a.source)&&bW.has(a.target)?{...a,style:{...a.style,opacity:1}}:{...a,label:void 0,style:{...a.style,opacity:.06}});let a=V??Z;return X||a?bT.map(b=>b.hidden?b:(X?b.id===X:b.source===a||b.target===a)?{...b,zIndex:20,style:{...b.style,opacity:1,strokeWidth:2.5}}:{...b,selectable:!1,label:void 0,markerEnd:void 0,style:{...b.style,opacity:.06}}):bT.map(a=>{if(a.hidden)return a;let b=b1&&(b1.has(a.source)||b1.has(a.target));return K?{...a,style:{...a.style,opacity:b?.25:1}}:{...a,label:void 0,style:{...a.style,opacity:b?.06:.18}}})},[bT,V,X,Z,bW,b1,b$,K]),cb=void 0!==D,[cc,cd]=(0,e.useState)(D??[]),ce=(0,e.useMemo)(()=>{if(cb){let a=new Set(b.map(a=>a.id));return cc.filter(b=>"feature"===b.targetKind&&a.has(b.targetId)).map((a,b)=>({id:a.id,n:b+1,targetId:a.targetId,text:a.body,x:a.x,y:a.y}))}let a=new Map((z??[]).map(a=>[a.id,a.comment]));return(0,aR.m)(z??[],{tables:[],features:b.map(a=>({id:a.id,title:a.title}))}).map(b=>({id:b.annotationId,n:b.n,targetId:b.targetId,text:a.get(b.annotationId)??"",x:null,y:null}))},[cb,cc,z,b]),cf=(0,e.useMemo)(()=>{let a=new Map;for(let b of ce){let c=a.get(b.targetId)??[];c.push({id:b.id,n:b.n,column:null}),a.set(b.targetId,c)}return a},[ce]),cg=(0,e.useCallback)(async a=>{let c=(0,aR.m)([{id:"_",excerpt:a}],{tables:[],features:b.map(a=>({id:a.id,title:a.title}))})[0];if(!c)return;let d=await fetch("/api/board-annotations",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({targetKind:"feature",targetId:c.targetId})});if(d.ok){let a=await d.json();cd(b=>[...b,a])}},[b]),ch=(0,e.useCallback)((a,b)=>{cd(c=>c.map(c=>c.id===a?{...c,...b}:c)),fetch(`/api/board-annotations/${a}`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify(b)})},[]),ci=(0,e.useCallback)(a=>{cd(b=>b.filter(b=>b.id!==a)),fetch(`/api/board-annotations/${a}`,{method:"DELETE"})},[]),cj=cb?cg:y,[ck,cl]=(0,e.useState)(()=>new Map),cm=(0,e.useMemo)(()=>{let a=new Map(b2.map(a=>[a.id,a])),b=new Map,c=ce.flatMap(c=>{let d=a.get(c.targetId);if(!d||d.hidden)return[];let e=b.get(c.targetId)??0;b.set(c.targetId,e+1);let f=d.measured?.height??96;return[{id:`anno-${c.id}`,type:"annotation",position:{x:c.x??d.position.x+26,y:c.y??d.position.y+f+56+112*e},measured:ck.get(`anno-${c.id}`),draggable:cb,data:{n:c.n,text:c.text,annotationId:c.id,onClick:cb||B?void 0:A,editable:cb||!!B,onChangeText:cb?(a,b)=>ch(a,{body:b}):B,onDelete:cb?ci:C}}]});return[...b2.map(a=>{let b=cf.get(a.id);return b||cj?{...a,data:{...a.data,pins:b,onPinClick:cb?void 0:A,onComment:cj}}:a}),...c,...(L??[]).map(a=>({id:a.id,type:"lessonTable",position:b5.get(a.id)??{x:a.x,y:a.y},measured:b3.get(a.id),draggable:!0,data:a.data}))]},[b2,ce,cf,cb,A,B,C,cj,ch,ci,ck,L,b3,b5]),cn=(0,e.useMemo)(()=>ce.map(a=>({id:`annoe-${a.id}`,source:a.targetId,sourceHandle:`pin-${a.id}`,target:`anno-${a.id}`,targetHandle:"in",type:"annotation",selectable:!1,zIndex:30,style:{stroke:t.V5,strokeWidth:1.5,opacity:.9}})),[ce]),co=(0,e.useCallback)(a=>{let b=[];for(let c of a)if("position"===c.type&&c.id.startsWith("anno-")&&c.position){let a=c.id.slice(5),{x:b,y:d}=c.position;cd(c=>c.map(c=>c.id===a?{...c,x:b,y:d}:c))}else if("dimensions"===c.type&&c.id.startsWith("anno-")){let a=c.dimensions;a&&cl(b=>{let d=b.get(c.id);if(d&&d.width===a.width&&d.height===a.height)return b;let e=new Map(b);return e.set(c.id,a),e})}else if("dimensions"===c.type&&b7.has(c.id)){let a=c.dimensions;a&&b4(b=>{let d=b.get(c.id);if(d&&d.width===a.width&&d.height===a.height)return b;let e=new Map(b);return e.set(c.id,a),e})}else if("position"===c.type&&b7.has(c.id)&&c.position){let{x:a,y:b}=c.position;b6(d=>new Map(d).set(c.id,{x:a,y:b}))}else b.push(c);b.length&&S(a=>(0,h._0)(b,a))},[b7]),cp=(0,e.useCallback)(a=>U(b=>(0,h.zW)(a,b)),[]),cq=(0,e.useCallback)(async a=>{if(!a.source||!a.target||a.source===a.target)return;let b=await fetch("/api/edges",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({fromId:a.source,toId:a.target,kind:"DEPENDS",sourceHandle:a.sourceHandle??null,targetHandle:a.targetHandle??null})});if(!b.ok)return;let c=await b.json(),d=bN.DEPENDS;U(b=>b.some(a=>a.id===c.id)?b:[...b,{id:c.id,source:c.fromId,sourceHandle:a.sourceHandle??void 0,target:c.toId,targetHandle:a.targetHandle??void 0,label:"depends on",type:"deletable",markerEnd:{type:g.TG.ArrowClosed,color:d.stroke},style:{stroke:d.stroke,strokeDasharray:d.dash}}])},[]),cr=(0,e.useCallback)(async(b,c,d)=>{let e=await fetch("/api/nodes",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({view:a,title:"New node",parentId:b.id,cluster:b.data.cluster??null,status:"ARCHITECTURE"===a?"REBUILD":"PENDING",x:c,y:d})});if(!e.ok)return;let f=await e.json();S(e=>[...e,{id:f.id,type:"ROADMAP"===a?"roadmapNode":"archNode",position:{x:c,y:d},data:{title:f.title,role:f.role,plain:f.plain,status:f.status,priority:f.priority,cluster:f.cluster,view:f.view,source:f.source,sourceRef:f.sourceRef,kind:f.kind,isCriterion:!1,isChild:!0,parentId:b.id,openBugs:0}}]),U(a=>[...a,{id:`c-${f.id}`,source:b.id,sourceHandle:"sb",target:f.id,targetHandle:"tt",type:"smoothstep",style:{stroke:bN.CONTAINS.stroke}}]),au(a=>new Set(a).add(f.id)),aw(f.id),W(f.id)},[a]),cs=(0,e.useCallback)(async(a,b)=>{if(b.isValid||!b.fromNode||!aA.current)return;let c=a.changedTouches,d=c?.[0]?.clientX??a.clientX,e=c?.[0]?.clientY??a.clientY,{x:f,y:g}=aA.current.screenToFlowPosition({x:d,y:e});await cr(b.fromNode,f,g)},[cr]),ct=(0,e.useMemo)(()=>b.find(a=>a.id===V)??null,[b,V]),cu=(0,e.useCallback)((a,b,c)=>{fetch(`/api/nodes/${a}/position`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({x:b,y:c})})},[]),cv=(0,e.useCallback)(a=>{W(a),Y(null);let b=aA.current?.getNode(a);if(!b||!aA.current)return;let c=b.measured?.width??128,d=b.measured?.height??48;aA.current.setCenter(b.position.x+c/2,b.position.y+d/2,{zoom:1.2,duration:600})},[]),cw=(0,e.useCallback)(a=>{let b=(0,bD.VI)(R.map(a=>({id:a.id,parentId:a.data.parentId??null,cluster:a.data.cluster,status:a.data.status,priority:a.data.priority,stateName:a.data.externalMeta?.state?.name??null,stateType:a.data.externalMeta?.state?.type??null,title:a.data.title,role:a.data.role})),a,{viewportAspect:window.innerWidth/window.innerHeight});S(a=>a.map(a=>{let c=b.get(a.id);return c?{...a,position:c}:a}));let c=Array.from(b,([a,b])=>({id:a,x:b.x,y:b.y}));c.length&&fetch("/api/nodes/positions",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({batch:c})}),aQ(a),fetch("/api/board-layout",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({board:"roadmap",arrangedBy:a})}),requestAnimationFrame(()=>aA.current?.fitView({duration:600,padding:.2}))},[R]);(0,e.useMemo)(()=>{let b=new Map;if("ROADMAP"!==a||!aP)return b;let c=a=>"status"===aP?a.status:"priority"===aP?`P${a.priority}`:a.cluster??"—";for(let a of R)"annotation"!==a.type&&b.set(a.id,c(a.data));return b},[R,aP,a]),(0,e.useRef)(null);let cx=(0,e.useCallback)(()=>{let a=R.filter(a=>"annotation"!==a.type),b=(0,bE.to)(a.map(a=>({id:a.id,group:(a.data.cluster??"").trim()||"—"})),c.filter(a=>"DEPENDS"===a.kind).map(a=>({fromId:a.fromId,toId:a.toId})),{viewportAspect:window.innerWidth/window.innerHeight});S(a=>a.map(a=>{let c=b.get(a.id);return c?{...a,position:c}:a}));let d=Array.from(b,([a,b])=>({id:a,x:b.x,y:b.y}));d.length&&fetch("/api/nodes/positions",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({batch:d})}),requestAnimationFrame(()=>aA.current?.fitView({duration:600,padding:.2}))},[R,c]),cy=(0,e.useMemo)(()=>bV?(0,bx.r2)(R.filter(a=>bj(a.data)),aS,a=>(0,bx.$$)(a.data),a=>({id:a.id,label:a.data.title,sublabel:a.data.cluster??a.data.status,kind:"feature"})):[],[R,aS,bj,bV]);function cz(a,b){b(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})}return(0,d.jsx)(aj.Provider,{value:aO,children:(0,d.jsxs)("div",{className:(0,ax.cn)("canvas-dots relative w-full",s?"h-full":"h-screen",ap&&"rf-panning"),onDragOver:a=>{a.dataTransfer.types.includes("application/beacon-node")&&(a.preventDefault(),a.dataTransfer.dropEffect="copy")},onDrop:a=>{if(!a.dataTransfer.getData("application/beacon-node")||!aA.current)return;a.preventDefault();let{x:b,y:c}=aA.current.screenToFlowPosition({x:a.clientX,y:a.clientY});aH(b,c,"BUG"===a.dataTransfer.getData("application/beacon-node-kind")?"BUG":"FEATURE")},children:[(0,d.jsxs)(h.Gc,{...af,className:(0,ax.cn)(ai,(ak||ay)&&"rf-placing"),nodes:cm,edges:"far"===aU?[...ca,...cn].map(a=>({...a,hidden:!0})):[...ca,...cn],nodeTypes:bL,edgeTypes:bM,nodesConnectable:!H,connectionMode:g.WZ.Loose,connectionLineStyle:{stroke:"var(--accent-2,#ff7a45)",strokeWidth:1.5,strokeDasharray:"4 4"},onInit:a=>{aA.current=a},onNodesChange:co,onEdgesChange:cp,onMoveStart:()=>aq(!0),onMoveEnd:()=>aq(!1),onConnect:cq,onConnectEnd:cs,onNodeMouseEnter:(a,b)=>$(b.id),onNodeMouseLeave:()=>$(null),onEdgesDelete:a=>{for(let b of a)b.id.startsWith("c-")||fetch(`/api/edges/${b.id}`,{method:"DELETE"})},onNodesDelete:a=>{for(let b of a)b.id.startsWith("anno-")||(fetch(`/api/nodes/${b.id}`,{method:"DELETE"}),W(a=>a===b.id?null:a))},onNodeClick:(a,b)=>{if(ak)return void aI(a.clientX,a.clientY);if("lessonTable"===b.type)return;if("annotation"===b.type){let a=b.data;a.editable||A?.(a.annotationId);return}if(ay){if(az(!1),b.data.isChild)return;cr(b,b.position.x+300,b.position.y+60);return}let c=V===b.id;if(W(b.id),Y(null),ac("details"),s){let b=a.target,d=b?.closest("input, textarea, select, button, [role='combobox']"),e=I&&!c&&!as.current;d||e||aa(!0)}},onEdgeClick:(a,b)=>{Y(b.id),W(null),ac("details")},onPaneClick:a=>{ak?aI(a.clientX,a.clientY):ay?az(!1):(aa(!1),W(null),Y(null))},onNodeDragStop:(a,b)=>{if(b.id.startsWith("anno-")){cb&&ch(b.id.slice(5),{x:b.position.x,y:b.position.y});return}H||cu(b.id,b.position.x,b.position.y)},deleteKeyCode:H?null:["Backspace","Delete"],colorMode:ar,fitView:!0,fitViewOptions:{padding:.15,minZoom:.38,maxZoom:.9},minZoom:.2,panOnScroll:!0,zoomActivationKeyCode:["Meta","Control"],proOptions:{hideAttribution:!0},children:[(0,d.jsx)(bH.Z,{regions:b8,tone:b9,lod:aU}),(0,d.jsx)(al.J,{onLod:aV}),(0,d.jsx)(h.H2,{position:"bottom-right",className:"!overflow-hidden !rounded-xl !border !border-border [&_button]:!border-border [&_button]:!bg-card/70 [&_button]:!text-foreground [&_button]:!backdrop-blur"}),(0,d.jsx)(h.Zk,{position:"bottom-left",style:{marginBottom:118},children:(0,d.jsx)(bs.H,{tool:ad,onChange:ae})}),(0,d.jsx)(h.Zk,{position:"bottom-right",style:{marginBottom:152},children:(0,d.jsx)(bB.er,{title:"Legend",trigger:(a,b)=>(0,d.jsx)("button",{type:"button",onClick:b,title:"Legend",className:(0,ax.cn)("glass flex size-8 items-center justify-center rounded-lg transition-colors",a?"text-foreground":"text-muted-foreground hover:text-foreground"),children:(0,d.jsx)(i.A,{className:"size-4"})}),children:(0,d.jsxs)("ul",{className:"space-y-1.5 text-[10.5px] text-muted-foreground",children:["ROADMAP"===a?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("li",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"inline-block rounded bg-sky-500/15 px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-sky-300",children:"feature"}),(0,d.jsx)("span",{children:"top-level card \xb7 can have sub-tasks"})]}),(0,d.jsxs)("li",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"inline-block rounded bg-zinc-500/15 px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-zinc-300",children:"sub-task"}),(0,d.jsx)("span",{children:"child of a feature"})]}),(0,d.jsxs)("li",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"inline-block rounded bg-rose-500/15 px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-rose-300",children:"bug"}),(0,d.jsx)("span",{children:"a bug to fix \xb7 not a feature"})]})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("li",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"inline-block rounded bg-sky-500/15 px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-sky-300",children:"component"}),(0,d.jsx)("span",{children:"a subsystem \xb7 can have sub-components"})]}),(0,d.jsxs)("li",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"inline-block rounded bg-zinc-500/15 px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-zinc-300",children:"sub-component"}),(0,d.jsx)("span",{children:"part of a component"})]}),(0,d.jsxs)("li",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"inline-block rounded bg-rose-500/15 px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-rose-300",children:"bug"}),(0,d.jsx)("span",{children:"a flagged issue on a component"})]})]}),G&&(0,d.jsxs)("li",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{"aria-hidden":!0,className:"inline-block h-3 w-1 shrink-0 rounded-sm",style:{background:(0,ah.A6)("fullstack")}}),(0,d.jsx)("span",{children:"left stripe \xb7 frontend / backend layer"})]}),(0,d.jsxs)("li",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{"aria-hidden":!0,className:"inline-block h-px w-6 bg-[#33333a]"}),(0,d.jsx)("span",{children:"contains \xb7 drag the bottom handle to empty canvas"})]}),(0,d.jsxs)("li",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{"aria-hidden":!0,className:"inline-block h-0 w-6 border-t border-dashed",style:{borderColor:"#f5b942"}}),(0,d.jsxs)("span",{children:["depends on \xb7 drag between two ","ROADMAP"===a?"cards":"components"]})]})]})})}),(J??!s)&&(0,d.jsx)(h.of,{pannable:!0,zoomable:!0,position:"bottom-left",style:{width:140,height:90},className:"!overflow-hidden !rounded-xl !border !border-border !bg-card/50 !backdrop-blur",nodeColor:a=>a.data?.priority===0?"#ff3860":"#555"}),!s&&(0,d.jsxs)(h.Zk,{position:"bottom-center",className:"!mb-4 flex flex-col items-center gap-2",children:[ay&&(0,d.jsxs)("div",{className:"glass rounded-full px-3 py-1 text-[11px] text-muted-foreground",children:["Click a ","ARCHITECTURE"===a?"component":"feature"," to attach the"," ","ARCHITECTURE"===a?"sub-component":"sub-task"," \xb7 Esc to cancel"]}),"ARCHITECTURE"===a&&(0,d.jsx)("div",{className:"glass flex items-center rounded-full p-0.5",children:(0,d.jsxs)("button",{onClick:cx,title:"Arrange components into a left→right dependency flow, grouped by domain",className:"flex h-6 items-center gap-1.5 rounded-full px-3 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-foreground",children:[(0,d.jsx)(j.A,{className:"size-3"}),"Arrange"]})}),"ROADMAP"===a&&(0,d.jsxs)("div",{className:"glass flex items-center gap-1 rounded-full p-1",children:[(0,d.jsx)("span",{className:"pl-2 pr-0.5 text-[11px] text-muted-foreground",children:"Group by"}),bJ.map(a=>(0,d.jsx)("button",{onClick:()=>cw(a.value),title:`Arrange features into lanes by ${a.label.toLowerCase()}`,className:(0,ax.cn)("h-7 rounded-full px-2.5 text-[11px] font-medium transition-colors",aP===a.value?"bg-[var(--ink-active)] text-foreground":"text-muted-foreground hover:bg-[var(--ink-hover)] hover:text-foreground"),children:a.label},a.value))]}),(0,d.jsxs)("div",{className:"glass flex items-center gap-1 rounded-full p-1",children:[(0,d.jsxs)("button",{onClick:aJ,draggable:!0,onDragStart:b=>{b.dataTransfer.setData("application/beacon-node",a),b.dataTransfer.effectAllowed="copy"},title:"ARCHITECTURE"===a?"Add component (click, or drag onto the board to place it)":"Add feature (click, or drag onto the board to place it)",className:"flex h-8 cursor-grab items-center gap-1.5 rounded-full px-3 text-[12px] font-medium text-foreground transition-colors hover:bg-[var(--ink-hover)] active:cursor-grabbing",children:[(0,d.jsx)(k.A,{className:"size-3.5 text-[var(--accent-2,#ff7a45)]"}),"ARCHITECTURE"===a?"Component":"Feature"]}),"ROADMAP"===a&&(0,d.jsxs)("button",{onClick:aK,draggable:!0,onDragStart:b=>{b.dataTransfer.setData("application/beacon-node",a),b.dataTransfer.setData("application/beacon-node-kind","BUG"),b.dataTransfer.effectAllowed="copy"},title:"Add bug (click, or drag onto the board to place it)",className:"flex h-8 cursor-grab items-center gap-1.5 rounded-full px-3 text-[12px] font-medium text-foreground transition-colors hover:bg-[var(--ink-hover)] active:cursor-grabbing",children:[(0,d.jsx)(l.A,{className:"size-3.5 text-rose-400"}),"Bug"]}),(0,d.jsx)("span",{"aria-hidden":!0,className:"mx-0.5 h-5 w-px bg-border"}),(0,d.jsxs)("button",{onClick:()=>{am(null),az(a=>!a)},title:"ARCHITECTURE"===a?"Add sub-component (click a component next)":"Add sub-task (click a feature next)",className:(0,ax.cn)("flex h-8 items-center gap-1.5 rounded-full px-3 text-[12px] font-medium transition-colors",ay?"bg-[var(--ink-active)] text-foreground":"text-muted-foreground hover:bg-[var(--ink-hover)] hover:text-foreground"),children:[(0,d.jsx)(m.A,{className:"size-3.5"}),"ARCHITECTURE"===a?"Sub-component":"Sub-task"]})]})]}),!s&&bX.length>0&&!bZ.active&&(0,d.jsx)(h.Zk,{position:"top-left",className:"!mt-14",children:(0,d.jsxs)("button",{type:"button",onClick:bZ.start,title:"Guided, domain-by-domain walkthrough of the architecture",className:"glass flex items-center gap-1.5 rounded-xl px-3 py-1.5 text-[11px] text-muted-foreground transition-colors hover:text-foreground",children:[(0,d.jsx)(n.A,{className:"size-3.5"}),"Start tour"]})}),!s&&(0,d.jsx)(h.Zk,{position:"top-right",className:(0,ax.cn)("glass rounded-full px-1 py-0.5 transition-[margin] duration-200",_&&"!mr-[352px]"),children:(0,d.jsx)(bu.Z,{active:a,tabs:[{value:"ROADMAP",label:"Roadmap",href:"/map?view=ROADMAP"},{value:"ARCHITECTURE",label:"Architecture",href:"/map?view=ARCHITECTURE"},{value:"DATABASE",label:"Database",href:"/map?view=DATABASE"},{value:"FILES",label:"Files",href:"/map?view=FILES"}]})}),(0,d.jsxs)(h.Zk,{position:"top-right",className:(0,ax.cn)("!mt-14 flex items-center gap-1 transition-[margin] duration-200",_&&"!mr-[352px]",s&&"hidden"),children:[(0,d.jsx)(bv.X,{query:aS,onQuery:aT,hits:cy,placeholder:"Find a feature…",onPick:a=>{aT(""),cv(a)},onZoomToMatches:()=>{bW?.size&&aA.current?.fitView({nodes:[...bW].map(a=>({id:a})),duration:600,padding:.2})}}),"ROADMAP"===a&&O&&(0,d.jsx)("button",{type:"button",onClick:()=>cv(O),title:"Jump to the next feature to work on",className:"glass flex size-8 items-center justify-center rounded-lg text-emerald-300 transition-colors hover:text-emerald-200",children:(0,d.jsx)(o.A,{className:"size-4"})}),(0,d.jsx)(bw.e,{defaultSelection:a}),(0,d.jsxs)(bB.er,{title:"Filters",trigger:(a,b)=>(0,d.jsxs)("button",{type:"button",onClick:b,title:"Filters",className:(0,ax.cn)("glass relative flex size-8 items-center justify-center rounded-lg transition-colors",a||bl>0?"text-foreground":"text-muted-foreground hover:text-foreground"),children:[(0,d.jsx)(p.A,{className:"size-4"}),bl>0&&(0,d.jsx)("span",{className:"absolute -right-1 -top-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-[var(--accent-2,#ff7a45)] px-1 text-[9px] font-semibold text-white",children:bl})]}),children:[G&&(0,d.jsx)(bB.r1,{title:"Layer",children:(0,d.jsx)(bC.o,{bare:!0,value:a8,onChange:a9})}),ba.length>0&&(0,d.jsx)(bB.r1,{title:"Status",children:ba.map(a=>(0,d.jsx)(bB.vu,{on:aW.has(a),onClick:()=>cz(a,aX),children:ag.nR[a]?.label??a},a))}),bb.length>0&&(0,d.jsx)(bB.r1,{title:"Cluster",children:bb.map(a=>(0,d.jsx)(bB.vu,{on:aY.has(a),onClick:()=>cz(a,aZ),children:a},a))}),bc.length>0&&(0,d.jsx)(bB.r1,{title:"Priority",children:bc.map(a=>(0,d.jsxs)(bB.vu,{on:a$.has(a),onClick:()=>cz(a,a_),children:["P",a]},a))}),bd&&be.length>0&&(0,d.jsx)(bB.r1,{title:"Team",children:be.map(a=>(0,d.jsx)(bB.vu,{on:a0.has(a),onClick:()=>cz(a,a1),children:a},a))}),bd&&bf.length>0&&(0,d.jsx)(bB.r1,{title:"Project",children:bf.map(a=>(0,d.jsx)(bB.vu,{on:a2.has(a),onClick:()=>cz(a,a3),children:a},a))}),bd&&bg.length>0&&(0,d.jsx)(bB.r1,{title:"Milestone",children:bg.map(a=>(0,d.jsx)(bB.vu,{on:a4.has(a),onClick:()=>cz(a,a5),children:a},a))}),bd&&bh.length>0&&(0,d.jsx)(bB.r1,{title:"State",children:bh.map(a=>(0,d.jsx)(bB.vu,{on:a6.has(a),onClick:()=>cz(a,a7),children:a},a))}),bl>0&&(0,d.jsx)("button",{type:"button",onClick:bm,className:"mt-1 w-full rounded-md border border-border px-2 py-1 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-[var(--ink-hover)] hover:text-foreground",children:"clear filters"})]}),!_&&(0,d.jsx)("button",{onClick:()=>{aa(!0),ac("details")},title:"Show panel",className:"glass flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:text-foreground",children:(0,d.jsx)(q.A,{className:"size-4"})})]})]}),_&&(0,d.jsx)(bk,{view:a,selected:ct,allNodes:b,onClose:()=>{aa(!1),ac("details")},commentsContent:u,commentsCount:v,activeTab:ab,onTabChange:ac,onAddComment:cj,topOffset:s?64:void 0}),(0,d.jsx)(br,{payload:aL,onDismiss:()=>aM(null)}),(ak||ay)&&an&&(0,d.jsxs)("div",{className:"pointer-events-none fixed z-50 flex translate-x-3 translate-y-3 items-center gap-1.5 rounded-lg border border-border bg-card/95 px-2.5 py-1.5 text-xs shadow-xl backdrop-blur dark:border-white/15",style:{left:an.x,top:an.y},children:[(0,d.jsx)("span",{className:(0,ax.cn)("rounded px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide","BUG"===ak?"bg-rose-500/15 text-rose-300":"FEATURE"===ak?"bg-sky-500/15 text-sky-300":"bg-zinc-500/15 text-zinc-300"),children:"BUG"===ak?"Bug":"FEATURE"===ak?"ARCHITECTURE"===a?"Component":"Feature":"Sub-task"}),(0,d.jsx)("span",{className:"text-muted-foreground",children:ak?"click to place \xb7 Esc":"click a feature to attach \xb7 Esc"})]}),bZ.active&&bZ.step&&(0,d.jsx)(bA.d,{steps:bX,index:bZ.index,onPrev:bZ.prev,onNext:bZ.next,onExit:bZ.stop,onGoto:bZ.goto})]})})}},96863:(a,b,c)=>{c.d(b,{L:()=>g});var d=c(48249),e=c(56024),f=c(23727);function g(a){let b=(0,e.JY)(a.target),c=a.targetX,g=a.targetY,h=b?.measured?.width,i=b?.measured?.height;if(b&&h&&i){let d=(0,f.u1)({x:b.internals.positionAbsolute.x,y:b.internals.positionAbsolute.y,w:h,h:i},{x:a.sourceX,y:a.sourceY});c=d.x,g=d.y}let j=a.sourceX,k=a.sourceY,l=c-j,m=g-k,n=Math.hypot(l,m)||1,o=Math.min(.18*n,42),p=(j+c)/2+-m/n*o,q=(k+g)/2+l/n*o,r=`M${j},${k} Q${p},${q} ${c},${g}`;return(0,d.jsx)(e.tE,{id:a.id,path:r,style:a.style,markerEnd:a.markerEnd})}},99281:(a,b,c)=>{c.d(b,{F:()=>i});var d=c(48249),e=c(35471),f=c(20878),g=c(90069),h=c(26284);function i({url:a,copied:b,onCopy:c}){return(0,d.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("input",{readOnly:!0,value:a,onFocus:a=>a.currentTarget.select(),className:"min-w-0 flex-1 rounded-md border border-border bg-background px-2.5 py-1.5 text-[12px] text-foreground outline-none"}),(0,d.jsxs)(h.$,{size:"sm",variant:"outline",onClick:c,children:[b?(0,d.jsx)(e.A,{className:"size-3.5"}):(0,d.jsx)(f.A,{className:"size-3.5"}),b?"Copied":"Copy"]})]}),(0,d.jsxs)("a",{href:a,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-1.5 text-[12px] text-muted-foreground transition-colors hover:text-foreground",children:[(0,d.jsx)(g.A,{className:"size-3.5"})," Open the shared view"]})]})}}};