@thxgg/steward 0.1.16 → 0.1.17

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 (157) hide show
  1. package/.env.example +6 -0
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/_nuxt/{wbjFvimm.js → 4r0X30JV.js} +1 -1
  4. package/.output/public/_nuxt/{ynmyrfyT.js → BMdjSp24.js} +1 -1
  5. package/.output/public/_nuxt/{BWVTacYj.js → BSZqAKg4.js} +1 -1
  6. package/.output/public/_nuxt/{Dum5qplW.js → BdjPva1I.js} +1 -1
  7. package/.output/public/_nuxt/Beeir9iR.js +1 -0
  8. package/.output/public/_nuxt/Bh3vsUvl.js +1 -0
  9. package/.output/public/_nuxt/{Bibm_IDv.js → BlTKcjLJ.js} +2 -2
  10. package/.output/public/_nuxt/{CxHOXVf6.js → By7gAVcL.js} +1 -1
  11. package/.output/public/_nuxt/CbJfCtEa.js +1 -0
  12. package/.output/public/_nuxt/CbkpNvIu.js +141 -0
  13. package/.output/public/_nuxt/CmhLcqDu.js +1 -0
  14. package/.output/public/_nuxt/DC6iPLz1.js +30 -0
  15. package/.output/public/_nuxt/{BSA0RJ-H.js → DD--ojY9.js} +1 -1
  16. package/.output/public/_nuxt/Detail.DSyVQNdr.css +1 -0
  17. package/.output/public/_nuxt/DhKWRjCh.js +60 -0
  18. package/.output/public/_nuxt/_prd_.BkpxMFSV.css +1 -0
  19. package/.output/public/_nuxt/builds/latest.json +1 -1
  20. package/.output/public/_nuxt/builds/meta/f3f42dbd-d501-442b-871c-3d06157e7aa1.json +1 -0
  21. package/.output/public/_nuxt/c1sXju8w.js +1 -0
  22. package/.output/public/_nuxt/eGCjCghR.js +1 -0
  23. package/.output/public/_nuxt/nX8Sf7cz.js +13 -0
  24. package/.output/server/chunks/_/git-api.mjs +100 -7
  25. package/.output/server/chunks/_/git-api.mjs.map +1 -1
  26. package/.output/server/chunks/_/git.mjs +3 -10
  27. package/.output/server/chunks/_/git.mjs.map +1 -1
  28. package/.output/server/chunks/_/prd-service.mjs +234 -0
  29. package/.output/server/chunks/_/prd-service.mjs.map +1 -0
  30. package/.output/server/chunks/_/task-graph.mjs +3 -3
  31. package/.output/server/chunks/_/task-graph.mjs.map +1 -1
  32. package/.output/server/chunks/_/watcher.mjs +26 -46
  33. package/.output/server/chunks/_/watcher.mjs.map +1 -1
  34. package/.output/server/chunks/build/{Detail-CUfU85GY.mjs → Detail-MGwP_u2d.mjs} +63 -34
  35. package/.output/server/chunks/build/Detail-MGwP_u2d.mjs.map +1 -0
  36. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-BFsE2PCW.mjs +4 -0
  37. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-BFsE2PCW.mjs.map +1 -0
  38. package/.output/server/chunks/build/DiffViewer-styles.D2bqX3nK.mjs +8 -0
  39. package/.output/server/chunks/build/DiffViewer-styles.D2bqX3nK.mjs.map +1 -0
  40. package/.output/server/chunks/build/DiffViewer-styles.FoV36wuV.mjs +10 -0
  41. package/.output/server/chunks/build/DiffViewer-styles.FoV36wuV.mjs.map +1 -0
  42. package/.output/server/chunks/build/Viewer-styles.D6wYWFb1.mjs +8 -0
  43. package/.output/server/chunks/build/Viewer-styles.D6wYWFb1.mjs.map +1 -0
  44. package/.output/server/chunks/build/{_prd_-CeVnQzOV.mjs → _prd_-C-Aj4fVa.mjs} +75 -33
  45. package/.output/server/chunks/build/_prd_-C-Aj4fVa.mjs.map +1 -0
  46. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  47. package/.output/server/chunks/build/{default-DWCOHHTE.mjs → default-Cao5eO80.mjs} +4 -3
  48. package/.output/server/chunks/build/default-Cao5eO80.mjs.map +1 -0
  49. package/.output/server/chunks/build/error-404-Bf6kdO80.mjs +2 -1
  50. package/.output/server/chunks/build/error-500-D_bcARXN.mjs +2 -1
  51. package/.output/server/chunks/build/{index-CckL_NBD.mjs → index-ByZO4Bvq.mjs} +2 -2
  52. package/.output/server/chunks/build/index-ByZO4Bvq.mjs.map +1 -0
  53. package/.output/server/chunks/build/{index-QVeSHT3L.mjs → index-ljj9uTXI.mjs} +8 -5
  54. package/.output/server/chunks/build/index-ljj9uTXI.mjs.map +1 -0
  55. package/.output/server/chunks/build/nuxt-link-SvT1nf8Z.mjs +1 -1
  56. package/.output/server/chunks/build/{repo-graph-CHNl58mY.mjs → repo-graph-EuhMeFt7.mjs} +25 -10
  57. package/.output/server/chunks/build/repo-graph-EuhMeFt7.mjs.map +1 -0
  58. package/.output/server/chunks/build/server.mjs +7 -6
  59. package/.output/server/chunks/build/styles.mjs +4 -4
  60. package/.output/server/chunks/build/{usePrd-SqcxGyFU.mjs → usePrd-f7ylhIqs.mjs} +10 -34
  61. package/.output/server/chunks/build/usePrd-f7ylhIqs.mjs.map +1 -0
  62. package/.output/server/chunks/nitro/nitro.mjs +1106 -677
  63. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  64. package/.output/server/chunks/routes/api/browse.get.mjs +12 -6
  65. package/.output/server/chunks/routes/api/browse.get.mjs.map +1 -1
  66. package/.output/server/chunks/routes/api/index.get.mjs +2 -1
  67. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  68. package/.output/server/chunks/routes/api/index.post.mjs +3 -2
  69. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  70. package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs +11 -13
  71. package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs.map +1 -1
  72. package/.output/server/chunks/routes/api/repos/_repoId/git/diff.get.mjs +11 -6
  73. package/.output/server/chunks/routes/api/repos/_repoId/git/diff.get.mjs.map +1 -1
  74. package/.output/server/chunks/routes/api/repos/_repoId/git/file-content.get.mjs +31 -12
  75. package/.output/server/chunks/routes/api/repos/_repoId/git/file-content.get.mjs.map +1 -1
  76. package/.output/server/chunks/routes/api/repos/_repoId/git/file-diff.get.mjs +13 -13
  77. package/.output/server/chunks/routes/api/repos/_repoId/git/file-diff.get.mjs.map +1 -1
  78. package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs +5 -1
  79. package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs.map +1 -1
  80. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs +14 -1
  81. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs.map +1 -1
  82. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs +20 -9
  83. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs.map +1 -1
  84. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs +20 -85
  85. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs.map +1 -1
  86. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs +20 -9
  87. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs.map +1 -1
  88. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug_.get.mjs +30 -50
  89. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug_.get.mjs.map +1 -1
  90. package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs +19 -49
  91. package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs.map +1 -1
  92. package/.output/server/chunks/routes/api/repos/_repoId/refresh-git-repos.post.mjs +6 -13
  93. package/.output/server/chunks/routes/api/repos/_repoId/refresh-git-repos.post.mjs.map +1 -1
  94. package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs +2 -1
  95. package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs.map +1 -1
  96. package/.output/server/chunks/routes/api/runtime.get.mjs +3 -2
  97. package/.output/server/chunks/routes/api/runtime.get.mjs.map +1 -1
  98. package/.output/server/chunks/routes/api/watch.get.mjs +5 -4
  99. package/.output/server/chunks/routes/api/watch.get.mjs.map +1 -1
  100. package/.output/server/chunks/routes/renderer.mjs +1 -1
  101. package/.output/server/index.mjs +3 -2
  102. package/.output/server/index.mjs.map +1 -1
  103. package/.output/server/node_modules/zod/index.js +4 -0
  104. package/.output/server/node_modules/zod/package.json +118 -0
  105. package/.output/server/node_modules/zod/v3/ZodError.js +133 -0
  106. package/.output/server/node_modules/zod/v3/errors.js +9 -0
  107. package/.output/server/node_modules/zod/v3/external.js +6 -0
  108. package/.output/server/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  109. package/.output/server/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  110. package/.output/server/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  111. package/.output/server/node_modules/zod/v3/helpers/util.js +133 -0
  112. package/.output/server/node_modules/zod/v3/locales/en.js +109 -0
  113. package/.output/server/node_modules/zod/v3/types.js +3693 -0
  114. package/.output/server/package.json +2 -1
  115. package/README.md +7 -2
  116. package/dist/host/src/api/prds.js +6 -172
  117. package/dist/host/src/api/repos.js +3 -16
  118. package/dist/host/src/api/state.js +7 -2
  119. package/dist/host/src/executor-runner.js +368 -0
  120. package/dist/host/src/executor.js +138 -260
  121. package/dist/host/src/index.js +7 -2
  122. package/dist/host/src/mcp.js +27 -1
  123. package/dist/host/src/ui.js +18 -3
  124. package/dist/server/utils/change-events.js +33 -0
  125. package/dist/server/utils/git.js +11 -16
  126. package/dist/server/utils/prd-service.js +235 -0
  127. package/dist/server/utils/prd-state.js +57 -45
  128. package/dist/server/utils/repos.js +58 -13
  129. package/dist/server/utils/state-schema.js +61 -0
  130. package/dist/server/utils/task-graph.js +2 -2
  131. package/package.json +2 -1
  132. package/.output/public/_nuxt/CVJh28bx.js +0 -1
  133. package/.output/public/_nuxt/CyZuidLG.js +0 -60
  134. package/.output/public/_nuxt/D0op9E2g.js +0 -1
  135. package/.output/public/_nuxt/DX8awZaa.js +0 -1
  136. package/.output/public/_nuxt/Detail.z33AHKev.css +0 -1
  137. package/.output/public/_nuxt/DiTJUZOC.js +0 -1
  138. package/.output/public/_nuxt/T_3JE9C-.js +0 -1
  139. package/.output/public/_nuxt/WOI2tLsR.js +0 -42
  140. package/.output/public/_nuxt/_prd_.KTotLoF_.css +0 -1
  141. package/.output/public/_nuxt/builds/meta/029070b0-b8e2-4988-84f4-d0c9ff55c998.json +0 -1
  142. package/.output/public/_nuxt/odRGDGwj.js +0 -1
  143. package/.output/server/chunks/build/Detail-CUfU85GY.mjs.map +0 -1
  144. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-CS8FTppg.mjs +0 -4
  145. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-CS8FTppg.mjs.map +0 -1
  146. package/.output/server/chunks/build/DiffViewer-styles.AUfwwelI.mjs +0 -10
  147. package/.output/server/chunks/build/DiffViewer-styles.AUfwwelI.mjs.map +0 -1
  148. package/.output/server/chunks/build/DiffViewer-styles.D_it8zfk.mjs +0 -8
  149. package/.output/server/chunks/build/DiffViewer-styles.D_it8zfk.mjs.map +0 -1
  150. package/.output/server/chunks/build/Viewer-styles.CshnetGw.mjs +0 -8
  151. package/.output/server/chunks/build/Viewer-styles.CshnetGw.mjs.map +0 -1
  152. package/.output/server/chunks/build/_prd_-CeVnQzOV.mjs.map +0 -1
  153. package/.output/server/chunks/build/default-DWCOHHTE.mjs.map +0 -1
  154. package/.output/server/chunks/build/index-CckL_NBD.mjs.map +0 -1
  155. package/.output/server/chunks/build/index-QVeSHT3L.mjs.map +0 -1
  156. package/.output/server/chunks/build/repo-graph-CHNl58mY.mjs.map +0 -1
  157. package/.output/server/chunks/build/usePrd-SqcxGyFU.mjs.map +0 -1
@@ -1 +0,0 @@
1
- .prd-viewer .prose{--tw-prose-body:hsl(var(--foreground));--tw-prose-headings:hsl(var(--foreground));--tw-prose-links:hsl(var(--primary));--tw-prose-code:hsl(var(--foreground));--tw-prose-pre-bg:hsl(var(--muted));--tw-prose-quotes:hsl(var(--muted-foreground));--tw-prose-hr:hsl(var(--border))}.prd-viewer .prose h1,.prd-viewer .prose h2,.prd-viewer .prose h3,.prd-viewer .prose h4{font-weight:600;margin-bottom:.5em;margin-top:1.5em}.prd-viewer .prose h1{border-bottom:1px solid hsl(var(--border));font-size:1.875rem;padding-bottom:.5rem}.prd-viewer .prose h2{border-bottom:1px solid hsl(var(--border));font-size:1.5rem;padding-bottom:.25rem}.prd-viewer .prose h3{font-size:1.25rem}.prd-viewer .prose p{line-height:1.7;margin-bottom:.75em;margin-top:.75em}.prd-viewer .prose a{color:hsl(var(--primary));text-decoration:underline;text-underline-offset:2px}.prd-viewer .prose a:hover{opacity:.8}.prd-viewer .prose code:not(pre code){background:hsl(var(--muted));border-radius:.25rem;font-size:.875em;font-weight:500;padding:.125rem .375rem}.prd-viewer .prose pre{background:hsl(var(--muted));border-radius:.5rem;margin:1rem 0;overflow-x:auto;padding:1rem}.prd-viewer .prose pre.shiki{background-color:hsl(var(--muted))!important}.prd-viewer .prose .shiki code{background:transparent;font-size:.875rem;line-height:1.5;padding:0}.dark .prd-viewer .prose .shiki,.dark .prd-viewer .prose pre.shiki{background-color:hsl(var(--muted))!important}.dark .prd-viewer .prose .shiki.github-light,.light .prd-viewer .prose .shiki.github-dark,:not(.dark) .prd-viewer .prose .shiki.github-dark{display:none!important}.prd-viewer .prose table{border-collapse:collapse;margin:1rem 0;width:100%}.prd-viewer .prose td,.prd-viewer .prose th{border:1px solid hsl(var(--border));padding:.5rem .75rem;text-align:left}.prd-viewer .prose th{background:hsl(var(--muted));font-weight:600}.prd-viewer .prose tr:nth-child(2n){background:hsl(var(--muted)/.3)}.prd-viewer .prose ol,.prd-viewer .prose ul{margin:.75em 0;padding-left:1.5rem}.prd-viewer .prose li{margin:.25em 0}.prd-viewer .prose ul{list-style-type:disc}.prd-viewer .prose ol{list-style-type:decimal}.prd-viewer .prose input[type=checkbox]{margin-right:.5rem;pointer-events:none}.prd-viewer .prose blockquote{border-left:4px solid hsl(var(--border));color:hsl(var(--muted-foreground));font-style:italic;margin:1rem 0;padding-left:1rem}.prd-viewer .prose hr{border:none;border-top:1px solid hsl(var(--border));margin:2rem 0}.prd-viewer .prose img{border-radius:.5rem;height:auto;margin:1rem 0;max-width:100%}.scrollbar-hide[data-v-a1317eba]{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide[data-v-a1317eba]::-webkit-scrollbar{display:none}
@@ -1 +0,0 @@
1
- {"id":"029070b0-b8e2-4988-84f4-d0c9ff55c998","timestamp":1771932607416,"prerendered":[]}
@@ -1 +0,0 @@
1
- import{s as O,l as e,a1 as bt,g as D,k as ne,o as u,x as g,L as q,c as S,n as U,F as te,r as se,v as xt,B as fe,w as p,y as L,q as C,b as m,G as be,p as ke,ac as wt,z as re,A as ve,ad as Ct,j as Qe,M as Me,a as c,t as z,ae as kt,af as St,m as ye,H as le,d as J,a2 as $t,J as Ie,K as Pe,aa as Te,ag as Xe,ab as Et,$ as Rt,ah as Dt}from"./Bibm_IDv.js";import{c as xe,m as Fe,h as At,f as Ye,d as Ze,P as ie,g as Ae,u as Se,o as Bt,B as me,b as et,a as Ve,F as Oe,r as Z,e as Q,n as It}from"./D0op9E2g.js";import{q as Pt,V as Tt,u as Ft,c as we,a as $e,b as Ot,r as Lt,f as Mt,p as tt,g as Vt,o as zt,n as qt,i as jt,j as Kt,k as Ht,l as Ut,S as Nt,G as st,L as Gt,C as Wt,R as at,B as Jt,d as he,s as Qt,t as ze,v as ot,w as nt,x as lt,X as rt,e as Ee,y as Xt,z as Yt,A as Zt,h as es,K as ts}from"./BSA0RJ-H.js";import{F as ss,I as as,a as Le}from"./wbjFvimm.js";import{b as qe,u as je,g as os,A as ns}from"./DiTJUZOC.js";import{_ as ls}from"./CVJh28bx.js";const it=xe("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);const ut=xe("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]);const rs=xe("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);const dt=xe("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);const is=xe("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);function us(a,t,s){const o=a.findIndex(l=>Fe(l,t)),i=a.findIndex(l=>Fe(l,s));if(o===-1||i===-1)return[];const[r,n]=[o,i].sort((l,f)=>l-f);return a.slice(r,n+1)}function ds(a){const t=O(()=>e(a)),s=O(()=>new Intl.Collator("en",{usage:"search",...t.value}));return{startsWith:(n,l)=>l.length===0?!0:(n=n.normalize("NFC"),l=l.normalize("NFC"),s.value.compare(n.slice(0,l.length),l)===0),endsWith:(n,l)=>l.length===0?!0:(n=n.normalize("NFC"),l=l.normalize("NFC"),s.value.compare(n.slice(-l.length),l)===0),contains:(n,l)=>{if(l.length===0)return!0;n=n.normalize("NFC"),l=l.normalize("NFC");let f=0;const v=l.length;for(;f+v<=n.length;f++){const y=n.slice(f,f+v);if(s.value.compare(l,y)===0)return!0}return!1}}}function cs(a){return O(()=>bt(a)?!!At(a)?.closest("form"):!0)}function ps(){return{ALT:"Alt",ARROW_DOWN:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",BACKSPACE:"Backspace",CAPS_LOCK:"CapsLock",CONTROL:"Control",DELETE:"Delete",END:"End",ENTER:"Enter",ESCAPE:"Escape",F1:"F1",F10:"F10",F11:"F11",F12:"F12",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",HOME:"Home",META:"Meta",PAGE_DOWN:"PageDown",PAGE_UP:"PageUp",SHIFT:"Shift",SPACE:" ",TAB:"Tab",CTRL:"Control",ASTERISK:"*",SPACE_CODE:"Space"}}function fs(a){const t=Ye("",1e3);return{search:t,handleTypeaheadSearch:(i,r)=>{t.value=t.value+i;{const n=Pt(),l=r.map(_=>({..._,textValue:_.value?.textValue??_.ref.textContent?.trim()??""})),f=l.find(_=>_.ref===n),v=l.map(_=>_.textValue),y=vs(v,t.value,f?.textValue),d=l.find(_=>_.textValue===y);return d&&d.ref.focus(),d?.ref}},resetTypeahead:()=>{t.value=""}}}function ms(a,t){return a.map((s,o)=>a[(t+o)%a.length])}function vs(a,t,s){const i=t.length>1&&Array.from(t).every(v=>v===t[0])?t[0]:t,r=s?a.indexOf(s):-1;let n=ms(a,Math.max(r,0));i.length===1&&(n=n.filter(v=>v!==s));const f=n.find(v=>v.toLowerCase().startsWith(i.toLowerCase()));return f!==s?f:void 0}var hs=D({inheritAttrs:!1,__name:"VisuallyHiddenInputBubble",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(a){const t=a,{primitiveElement:s,currentElement:o}=qe(),i=O(()=>t.checked??t.value);return ne(i,(r,n)=>{if(!o.value)return;const l=o.value,f=window.HTMLInputElement.prototype,y=Object.getOwnPropertyDescriptor(f,"value").set;if(y&&r!==n){const d=new Event("input",{bubbles:!0}),_=new Event("change",{bubbles:!0});y.call(l,r),l.dispatchEvent(d),l.dispatchEvent(_)}}),(r,n)=>(u(),g(Tt,q({ref_key:"primitiveElement",ref:s},{...t,...r.$attrs},{as:"input"}),null,16))}}),Ne=hs,gs=D({inheritAttrs:!1,__name:"VisuallyHiddenInput",props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:"fully-hidden"}},setup(a){const t=a,s=O(()=>typeof t.value=="object"&&Array.isArray(t.value)&&t.value.length===0&&t.required),o=O(()=>typeof t.value=="string"||typeof t.value=="number"||typeof t.value=="boolean"||t.value===null||t.value===void 0?[{name:t.name,value:t.value}]:typeof t.value=="object"&&Array.isArray(t.value)?t.value.flatMap((i,r)=>typeof i=="object"?Object.entries(i).map(([n,l])=>({name:`${t.name}[${r}][${n}]`,value:l})):{name:`${t.name}[${r}]`,value:i}):t.value!==null&&typeof t.value=="object"&&!Array.isArray(t.value)?Object.entries(t.value).map(([i,r])=>({name:`${t.name}[${i}]`,value:r})):[]);return(i,r)=>(u(),S(te,null,[U(" We render single input if it's required "),s.value?(u(),g(Ne,q({key:i.name},{...t,...i.$attrs},{name:i.name,value:i.value}),null,16,["name","value"])):(u(!0),S(te,{key:1},se(o.value,n=>(u(),g(Ne,q({key:n.name},{ref_for:!0},{...t,...i.$attrs},{name:n.name,value:n.value}),null,16,["name","value"]))),128))],2112))}}),ys=gs;function _s(a,t,s){return a===void 0?!1:Array.isArray(a)?a.some(o=>_e(o,t,s)):_e(a,t,s)}function _e(a,t,s){return a===void 0||t===void 0?!1:typeof a=="string"?a===t:typeof s=="function"?s(a,t):typeof s=="string"?a?.[s]===t?.[s]:Fe(a,t)}const[Ke,bs]=we("ListboxRoot");var xs=D({__name:"ListboxRoot",props:{modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},multiple:{type:Boolean,required:!1},orientation:{type:String,required:!1,default:"vertical"},dir:{type:String,required:!1},disabled:{type:Boolean,required:!1},selectionBehavior:{type:String,required:!1,default:"toggle"},highlightOnHover:{type:Boolean,required:!1},by:{type:[String,Function],required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","highlight","entryFocus","leave"],setup(a,{expose:t,emit:s}){const o=a,i=s,{multiple:r,highlightOnHover:n,orientation:l,disabled:f,selectionBehavior:v,dir:y}=xt(o),{getItems:d}=je({isProvider:!0}),{handleTypeaheadSearch:_}=fs(),{primitiveElement:A,currentElement:w}=qe(),T=ps(),F=Ft(y),b=cs(w),M=C(),R=C(!1),j=C(!0),B=Ze(o,"modelValue",i,{defaultValue:o.defaultValue??(r.value?[]:void 0),passive:o.modelValue===void 0,deep:!0});function ae(h){if(R.value=!0,o.multiple){const k=Array.isArray(B.value)?[...B.value]:[],E=k.findIndex(H=>_e(H,h,o.by));o.selectionBehavior==="toggle"?(E===-1?k.push(h):k.splice(E,1),B.value=k):(B.value=[h],M.value=h)}else o.selectionBehavior==="toggle"&&_e(B.value,h,o.by)?B.value=void 0:B.value=h;setTimeout(()=>{R.value=!1},1)}const K=C(null),oe=C(null),ee=C(!1),G=C(!1),X=Ae(),W=Ae(),Y=Ae();function $(){return d().map(h=>h.ref).filter(h=>h.dataset.disabled!=="")}function I(h,k=!0){if(!h)return;K.value=h,j.value&&K.value.focus(),k&&K.value.scrollIntoView({block:"nearest"});const E=d().find(H=>H.ref===h);i("highlight",E)}function N(h){if(ee.value)Y.trigger(h);else{const k=d().find(E=>_e(E.value,h,o.by));k&&(K.value=k.ref,I(k.ref))}}function ue(h){K.value&&K.value.isConnected&&(h.preventDefault(),h.stopPropagation(),G.value||K.value.click())}function V(h){if(j.value){if(R.value=!0,ee.value)W.trigger(h);else{const k=h.altKey||h.ctrlKey||h.metaKey;if(k&&h.key==="a"&&r.value){const E=d(),H=E.map(ce=>ce.value);B.value=[...H],h.preventDefault(),I(E[E.length-1].ref)}else if(!k){const E=_(h.key,d());E&&I(E)}}setTimeout(()=>{R.value=!1},1)}}function x(){G.value=!0}function P(){fe(()=>{G.value=!1})}function de(){fe(()=>{const h=new KeyboardEvent("keydown",{key:"PageUp"});He(h)})}function De(h){const k=K.value;k?.isConnected&&(oe.value=k),K.value=null,i("leave",h)}function gt(h){const k=new CustomEvent("listbox.entryFocus",{bubbles:!1,cancelable:!0});if(h.currentTarget?.dispatchEvent(k),i("entryFocus",k),!k.defaultPrevented)if(oe.value)I(oe.value);else{const E=$()?.[0];I(E)}}function He(h){const k=os(h,l.value,F.value);if(!k)return;let E=$();if(K.value){if(k==="last")E.reverse();else if(k==="prev"||k==="next"){k==="prev"&&E.reverse();const H=E.indexOf(K.value);E=E.slice(H+1)}yt(h,E[0])}if(E.length){const H=!K.value&&k==="prev"?E.length-1:0;I(E[H])}if(ee.value)return W.trigger(h)}function yt(h,k){if(!(ee.value||o.selectionBehavior!=="replace"||!r.value||!Array.isArray(B.value)||(h.altKey||h.ctrlKey||h.metaKey)&&!h.shiftKey)&&h.shiftKey){const H=d().filter(ge=>ge.ref.dataset.disabled!=="");let ce=H.find(ge=>ge.ref===k)?.value;if(h.key===T.END?ce=H[H.length-1].value:h.key===T.HOME&&(ce=H[0].value),!ce||!M.value)return;const _t=us(H.map(ge=>ge.value),M.value,ce);B.value=_t}}async function Ue(h){if(await fe(),ee.value)X.trigger(h);else{const k=$(),E=k.find(H=>H.dataset.state==="checked");E?I(E):k.length&&I(k[0])}}return ne(B,()=>{R.value||fe(()=>{Ue()})},{immediate:!0,deep:!0}),t({highlightedElement:K,highlightItem:N,highlightFirstItem:de,highlightSelected:Ue,getItems:d}),bs({modelValue:B,onValueChange:ae,multiple:r,orientation:l,dir:F,disabled:f,highlightOnHover:n,highlightedElement:K,isVirtual:ee,virtualFocusHook:X,virtualKeydownHook:W,virtualHighlightHook:Y,by:o.by,firstValue:M,selectionBehavior:v,focusable:j,onLeave:De,onEnter:gt,changeHighlight:I,onKeydownEnter:ue,onKeydownNavigation:He,onKeydownTypeAhead:V,onCompositionStart:x,onCompositionEnd:P,highlightFirstItem:de}),(h,k)=>(u(),g(e(ie),{ref_key:"primitiveElement",ref:A,as:h.as,"as-child":h.asChild,dir:e(F),"data-disabled":e(f)?"":void 0,onPointerleave:De,onFocusout:k[0]||(k[0]=async E=>{const H=E.relatedTarget||E.target;await fe(),K.value&&e(w)&&!e(w).contains(H)&&De(E)})},{default:p(()=>[L(h.$slots,"default",{modelValue:e(B)}),e(b)&&h.name?(u(),g(e(ys),{key:0,name:h.name,value:e(B),disabled:e(f),required:h.required},null,8,["name","value","disabled","required"])):U("v-if",!0)]),_:3},8,["as","as-child","dir","data-disabled"]))}}),ws=xs,Cs=D({__name:"ListboxContent",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(a){const{CollectionSlot:t}=je(),s=Ke(),o=Ye(!1,10);return(i,r)=>(u(),g(e(t),null,{default:p(()=>[m(e(ie),{role:"listbox",as:i.as,"as-child":i.asChild,tabindex:e(s).focusable.value?e(s).highlightedElement.value?"-1":"0":"-1","aria-orientation":e(s).orientation.value,"aria-multiselectable":!!e(s).multiple.value,"data-orientation":e(s).orientation.value,onMousedown:r[0]||(r[0]=ke(n=>o.value=!0,["left"])),onFocus:r[1]||(r[1]=n=>{e(o)||e(s).onEnter(n)}),onKeydown:[r[2]||(r[2]=be(n=>{e(s).orientation.value==="vertical"&&(n.key==="ArrowLeft"||n.key==="ArrowRight")||e(s).orientation.value==="horizontal"&&(n.key==="ArrowUp"||n.key==="ArrowDown")||(n.preventDefault(),e(s).focusable.value&&e(s).onKeydownNavigation(n))},["down","up","left","right","home","end"])),be(e(s).onKeydownEnter,["enter"]),e(s).onKeydownTypeAhead]},{default:p(()=>[L(i.$slots,"default")]),_:3},8,["as","as-child","tabindex","aria-orientation","aria-multiselectable","data-orientation","onKeydown"])]),_:3}))}}),ks=Cs,Ss=D({__name:"ListboxFilter",props:{modelValue:{type:String,required:!1},autoFocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"input"}},emits:["update:modelValue"],setup(a,{emit:t}){const s=a,i=Ze(s,"modelValue",t,{defaultValue:"",passive:s.modelValue===void 0}),r=Ke(),{primitiveElement:n,currentElement:l}=qe(),f=O(()=>s.disabled||r.disabled.value||!1),v=C();return wt(()=>v.value=r.highlightedElement.value?.id),re(()=>{r.focusable.value=!1,setTimeout(()=>{s.autoFocus&&l.value?.focus()},1)}),ve(()=>{r.focusable.value=!0}),(y,d)=>(u(),g(e(ie),{ref_key:"primitiveElement",ref:n,as:y.as,"as-child":y.asChild,value:e(i),disabled:f.value?"":void 0,"data-disabled":f.value?"":void 0,"aria-disabled":f.value??void 0,"aria-activedescendant":v.value,type:"text",onKeydown:[be(ke(e(r).onKeydownNavigation,["prevent"]),["down","up","home","end"]),be(e(r).onKeydownEnter,["enter"])],onInput:d[0]||(d[0]=_=>{i.value=_.target.value,e(r).highlightFirstItem()}),onCompositionstart:e(r).onCompositionStart,onCompositionend:e(r).onCompositionEnd},{default:p(()=>[L(y.$slots,"default",{modelValue:e(i)})]),_:3},8,["as","as-child","value","disabled","data-disabled","aria-disabled","aria-activedescendant","onKeydown","onCompositionstart","onCompositionend"]))}}),$s=Ss;const[Es,Rs]=we("ListboxGroup");var Ds=D({__name:"ListboxGroup",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(a){const t=a,s=$e(void 0,"reka-listbox-group");return Rs({id:s}),(o,i)=>(u(),g(e(ie),q({role:"group"},t,{"aria-labelledby":e(s)}),{default:p(()=>[L(o.$slots,"default")]),_:3},16,["aria-labelledby"]))}}),As=Ds,Bs=D({__name:"ListboxGroupLabel",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},setup(a){const t=a,s=Es({id:""});return(o,i)=>(u(),g(e(ie),q(t,{id:e(s).id}),{default:p(()=>[L(o.$slots,"default")]),_:3},16,["id"]))}}),Is=Bs;const Ps="listbox.select",[Oo,Ts]=we("ListboxItem");var Fs=D({__name:"ListboxItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},emits:["select"],setup(a,{emit:t}){const s=a,o=t,i=$e(void 0,"reka-listbox-item"),{CollectionItem:r}=je(),{forwardRef:n,currentElement:l}=Ot(),f=Ke(),v=O(()=>l.value===f.highlightedElement.value),y=O(()=>_s(f.modelValue.value,s.value,f.by)),d=O(()=>f.disabled.value||s.disabled);async function _(w){o("select",w),!w?.defaultPrevented&&!d.value&&w&&(f.onValueChange(s.value),f.changeHighlight(l.value))}function A(w){const T={originalEvent:w,value:s.value};Lt(Ps,_,T)}return Ts({isSelected:y}),(w,T)=>(u(),g(e(r),{value:w.value},{default:p(()=>[Ct([v.value,y.value],()=>m(e(ie),q({id:e(i)},w.$attrs,{ref:e(n),role:"option",tabindex:e(f).focusable.value?v.value?"0":"-1":-1,"aria-selected":y.value,as:w.as,"as-child":w.asChild,disabled:d.value?"":void 0,"data-disabled":d.value?"":void 0,"data-highlighted":v.value?"":void 0,"data-state":y.value?"checked":"unchecked",onClick:A,onKeydown:be(ke(A,["prevent"]),["space"]),onPointermove:T[0]||(T[0]=()=>{e(f).highlightedElement.value!==e(l)&&e(f).highlightOnHover.value&&!e(f).focusable.value&&e(f).changeHighlight(e(l),!1)})}),{default:p(()=>[L(w.$slots,"default")]),_:3},16,["id","tabindex","aria-selected","as","as-child","disabled","data-disabled","data-highlighted","data-state","onKeydown"]),T,1)]),_:3},8,["value"]))}}),Os=Fs;const Ls={class:"flex items-center gap-2 truncate"},Ms={class:"truncate"},Vs={key:0,class:"absolute top-full right-0 z-[9999] mt-1 w-[280px] rounded-md border bg-popover p-1 text-popover-foreground shadow-md"},zs={class:"max-h-[200px] overflow-y-auto"},qs=["aria-selected","onClick"],js={class:"flex flex-1 flex-col gap-0.5 overflow-hidden text-left"},Ks={class:"truncate font-medium"},Hs={class:"truncate text-xs text-muted-foreground"},Us=["onClick"],Ns={key:1,class:"px-2 py-1.5 text-sm text-muted-foreground"},Gs={key:2,class:"my-1 h-px bg-border"},Ws={class:"space-y-2"},Js={class:"flex gap-2"},Qs={key:0,class:"text-sm text-destructive"},Xs={key:0,class:"space-y-2 rounded-md border p-3"},Ys={class:"flex items-center gap-2 text-sm"},Zs=["disabled"],ea={class:"flex-1 truncate font-mono text-xs text-muted-foreground"},ta={class:"max-h-[200px] overflow-y-auto"},sa={key:0,class:"py-2 text-center text-sm text-muted-foreground"},aa={key:1,class:"py-2 text-center text-sm text-muted-foreground"},oa=["onClick"],na={class:"truncate"},la={key:0},ra={key:1},ia=D({__name:"RepoSelector",setup(a,{expose:t}){const s=Qe(),o=Me(),{repos:i,currentRepo:r,currentRepoId:n,selectRepo:l,addRepo:f,removeRepo:v}=Se(),{showSuccess:y}=et(),d=C(!1),_=C(""),A=C(null);Bt(A,()=>{d.value&&(d.value=!1,_.value="")}),ne(()=>o.fullPath,()=>{d.value=!1,_.value=""});async function w(V){l(V),d.value=!1,_.value="";try{const P=(await $fetch(`/api/repos/${V}/prds`))?.[0];P?s.push(`/${V}/${P.slug}`):s.push("/")}catch{s.push("/")}}function T(){d.value=!1,G.value=!0}const F=C(!1),b=C(""),M=C(""),R=C([]),j=C(!1),B=O(()=>!!M.value&&M.value!==b.value);async function ae(V){j.value=!0;try{const x=await $fetch("/api/browse",{query:{path:V||b.value||void 0}});b.value=x.current,M.value=x.parent,R.value=x.directories}catch{}finally{j.value=!1}}function K(){F.value=!0,ae(X.value||void 0)}function oe(V){X.value=V,F.value=!1,W.value=null}function ee(){B.value&&ae(M.value)}const G=C(!1),X=C(""),W=C(null),Y=C(!1),$=O(()=>{if(!_.value)return i.value;const V=_.value.toLowerCase();return i.value?.filter(x=>x.name.toLowerCase().includes(V)||x.path.toLowerCase().includes(V))??[]});async function I(){if(!X.value.trim()){W.value="Please enter a repository path";return}Y.value=!0,W.value=null;try{const V=await f(X.value.trim());if(G.value=!1,X.value="",y("Repository added",V?.name||"Successfully added repository"),V?.id)try{const P=(await $fetch(`/api/repos/${V.id}/prds`))?.[0];P&&s.push(`/${V.id}/${P.slug}`)}catch{}}catch(V){if(V instanceof Error){const x=V;W.value=x.data?.message||V.message}else W.value="Failed to add repository"}finally{Y.value=!1}}async function N(V,x){V.stopPropagation(),await v(x)}function ue(){G.value=!1,X.value="",W.value=null}return t({openAddDialog:()=>{G.value=!0}}),(V,x)=>(u(),S("div",{ref_key:"dropdownRef",ref:A,class:"relative"},[c("button",{type:"button",class:"inline-flex h-8 w-[200px] items-center justify-between gap-2 rounded-md border border-input bg-background px-3 text-sm font-normal ring-offset-background transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",onClick:x[0]||(x[0]=P=>d.value=!e(d))},[c("span",Ls,[m(e(ss),{class:"size-4 shrink-0 text-muted-foreground"}),c("span",Ms,z(e(r)?.name??"Select repository"),1)]),m(e(Mt),{class:"size-4 shrink-0 opacity-50"})]),e(d)?(u(),S("div",Vs,[kt(c("input",{"onUpdate:modelValue":x[1]||(x[1]=P=>ye(_)?_.value=P:null),type:"text",placeholder:"Search repositories...",class:"mb-1 h-9 w-full rounded-md border border-input bg-background px-3 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"},null,512),[[St,e(_)]]),c("div",zs,[e($)?.length?(u(!0),S(te,{key:0},se(e($),P=>(u(),S("div",{key:P.id,class:"group flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent hover:text-accent-foreground cursor-pointer",role:"option","aria-selected":e(n)===P.id,onClick:de=>w(P.id)},[m(e(tt),{class:le(["size-4 shrink-0",e(n)===P.id?"opacity-100":"opacity-0"])},null,8,["class"]),c("div",js,[c("span",Ks,z(P.name),1),c("span",Hs,z(P.path),1)]),c("button",{type:"button",class:"ml-auto opacity-0 group-hover:opacity-100 p-1 hover:bg-destructive/10 rounded transition-opacity",title:"Remove repository",onClick:de=>N(de,P.id)},[m(e(is),{class:"size-3.5 text-destructive"})],8,Us)],8,qs))),128)):(u(),S("div",Ns," No repositories found. ")),e($)?.length?(u(),S("div",Gs)):U("",!0),c("button",{type:"button",class:"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-muted-foreground hover:bg-accent hover:text-accent-foreground",onClick:T},[m(e(Vt),{class:"size-4"}),x[5]||(x[5]=c("span",null,"Add repository...",-1))])])])):U("",!0),m(e(zt),{open:e(G),"onUpdate:open":x[4]||(x[4]=P=>G.value=P)},{default:p(()=>[m(e(qt),{side:"right",class:"flex h-full flex-col",onEscapeKeyDown:ue},{default:p(()=>[m(e(jt),{class:"px-6"},{default:p(()=>[m(e(Kt),null,{default:p(()=>[...x[6]||(x[6]=[J("Add Repository",-1)])]),_:1}),m(e(Ht),null,{default:p(()=>[...x[7]||(x[7]=[J(" Enter the absolute path to a repository containing PRD documents. ",-1)])]),_:1})]),_:1}),c("form",{id:"add-repo-form",class:"min-h-0 flex-1 space-y-4 overflow-y-auto px-6",onSubmit:ke(I,["prevent"])},[c("div",Ws,[x[8]||(x[8]=c("label",{for:"repo-path",class:"text-sm font-medium"}," Repository Path ",-1)),c("div",Js,[m(e(as),{id:"repo-path",modelValue:e(X),"onUpdate:modelValue":x[2]||(x[2]=P=>ye(X)?X.value=P:null),placeholder:"/path/to/your/project","aria-invalid":!!e(W),disabled:e(Y),class:"flex-1"},null,8,["modelValue","aria-invalid","disabled"]),m(e(me),{type:"button",variant:"outline",size:"icon",disabled:e(Y),onClick:K},{default:p(()=>[m(e(Le),{class:"size-4"})]),_:1},8,["disabled"])]),e(W)?(u(),S("p",Qs,z(e(W)),1)):U("",!0),x[9]||(x[9]=c("p",{class:"text-xs text-muted-foreground"},[J(" The repository should contain a "),c("code",{class:"rounded bg-muted px-1"},"docs/prd/"),J(" directory with markdown files. ")],-1))]),e(F)?(u(),S("div",Xs,[c("div",Ys,[c("button",{type:"button",class:"inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-xs text-muted-foreground hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:opacity-50",disabled:!e(B),onClick:ee},[m(e(ns),{class:"size-3"}),x[10]||(x[10]=J(" Up ",-1))],8,Zs),c("span",ea,z(e(b)),1),m(e(me),{type:"button",variant:"ghost",size:"sm",class:"h-7 text-xs",onClick:x[3]||(x[3]=P=>oe(e(b)))},{default:p(()=>[...x[11]||(x[11]=[J(" Select ",-1)])]),_:1})]),c("div",ta,[e(j)?(u(),S("div",sa," Loading... ")):e(R).length?(u(!0),S(te,{key:2},se(e(R),P=>(u(),S("button",{key:P.path,type:"button",class:"flex w-full items-center gap-2 rounded px-2 py-1 text-sm hover:bg-accent",onClick:de=>ae(P.path)},[m(e(Le),{class:"size-4 text-muted-foreground"}),c("span",na,z(P.name),1)],8,oa))),128)):(u(),S("div",aa," No subdirectories "))])])):U("",!0)],32),m(e(Ut),{class:"px-6 pb-6"},{default:p(()=>[m(e(me),{type:"button",variant:"outline",disabled:e(Y),onClick:ue},{default:p(()=>[...x[12]||(x[12]=[J(" Cancel ",-1)])]),_:1},8,["disabled"]),m(e(me),{type:"submit",form:"add-repo-form",disabled:e(Y)},{default:p(()=>[e(Y)?(u(),S("span",la,"Adding...")):(u(),S("span",ra,"Add Repository"))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"])],512))}}),ua=Object.assign(ia,{__name:"LayoutRepoSelector"}),da={class:"flex h-full w-64 flex-col border-r border-border bg-background"},ca={class:"p-2"},pa={key:1,class:"flex items-center justify-center py-8"},fa={key:2,class:"px-2 py-8 text-center"},ma={key:3,class:"px-2 py-8 text-center"},va={key:4,class:"px-2 py-8 text-center"},ha={key:5,class:"space-y-1"},ga={class:"flex-1 truncate"},ya=D({__name:"Sidebar",setup(a){const t=Me(),{prds:s,prdsStatus:o,refreshPrds:i}=Ve(),{currentRepoId:r}=Se(),n=O(()=>t.params.prd);function l(y){return n.value===y}const f=O(()=>r.value?`/${r.value}/repo-graph`:"/"),v=O(()=>r.value?t.path===`/${r.value}/repo-graph`:!1);return(y,d)=>{const _=ls;return u(),S("aside",da,[m(e(Nt),{class:"flex-1"},{default:p(()=>[c("div",ca,[e(r)?(u(),g(_,{key:0,to:e(f),class:le(["group mb-2 flex items-center gap-3 rounded-md px-3 py-2 text-sm transition-colors",[e(v)?"bg-accent text-accent-foreground":"text-muted-foreground hover:bg-accent/50 hover:text-foreground"]])},{default:p(()=>[m(e(st),{class:"size-4 shrink-0"}),d[0]||(d[0]=c("span",{class:"flex-1 truncate"},"Repo Graph",-1))]),_:1},8,["to","class"])):U("",!0),d[6]||(d[6]=c("h2",{class:"flex h-10 items-center px-2 text-sm font-medium text-muted-foreground"},"Documents",-1)),e(o)==="pending"?(u(),S("div",pa,[m(e(Gt),{class:"size-5 animate-spin text-muted-foreground"})])):e(r)?e(o)==="error"?(u(),S("div",ma,[m(e(Wt),{class:"mx-auto size-8 text-destructive/50"}),d[3]||(d[3]=c("p",{class:"mt-2 text-sm text-muted-foreground"}," Failed to load PRDs ",-1)),m(e(me),{variant:"ghost",size:"sm",class:"mt-2",onClick:e(i)},{default:p(()=>[m(e(at),{class:"mr-1 size-3"}),d[2]||(d[2]=J(" Retry ",-1))]),_:1},8,["onClick"])])):e(s)?.length?(u(),S("nav",ha,[(u(!0),S(te,null,se(e(s),A=>(u(),g(_,{key:A.slug,to:`/${e(r)}/${A.slug}`,class:le(["group flex items-center gap-3 rounded-md px-3 py-2 text-sm transition-colors",[l(A.slug)?"bg-accent text-accent-foreground":"text-muted-foreground hover:bg-accent/50 hover:text-foreground"]])},{default:p(()=>[m(e(Oe),{class:"size-4 shrink-0"}),c("span",ga,z(A.name),1),A.hasState&&A.taskCount?(u(),g(e(Jt),{key:0,variant:"secondary",class:"shrink-0 text-xs"},{default:p(()=>[J(z(A.completedCount??0)+"/"+z(A.taskCount),1)]),_:2},1024)):U("",!0)]),_:2},1032,["to","class"]))),128))])):(u(),S("div",va,[m(e(Oe),{class:"mx-auto size-8 text-muted-foreground/50"}),d[4]||(d[4]=c("p",{class:"mt-2 text-sm text-muted-foreground"}," No PRDs found ",-1)),d[5]||(d[5]=c("p",{class:"mt-1 text-xs text-muted-foreground/70"}," Add .md files to docs/prd/ ",-1))])):(u(),S("div",fa,[...d[1]||(d[1]=[c("p",{class:"text-sm text-muted-foreground"}," Select a repository to view PRDs ",-1)])]))])]),_:1})])}}}),_a=Object.assign(ya,{__name:"LayoutSidebar"}),ba=D({__name:"Command",props:{modelValue:{default:""},defaultValue:{},multiple:{type:Boolean},orientation:{},dir:{},disabled:{type:Boolean},selectionBehavior:{},highlightOnHover:{type:Boolean},by:{},asChild:{type:Boolean},as:{},name:{},required:{type:Boolean},class:{},defaultSearch:{default:""}},emits:["update:modelValue","highlight","entryFocus","leave"],setup(a,{emit:t}){const s=a,o=t,i=Z(s,"class"),r=he(i,o),n=C(new Map),l=C(new Map),{contains:f}=ds({sensitivity:"base"}),v=$t({search:s.defaultSearch||"",filtered:{count:0,items:new Map,groups:new Set}});ne(()=>s.defaultSearch,d=>{d!==void 0&&(v.search=d)});function y(){if(!v.search){v.filtered.count=n.value.size;return}v.filtered.groups=new Set;let d=0;for(const[_,A]of n.value){const w=f(A,v.search);v.filtered.items.set(_,w?1:0),w&&d++}for(const[_,A]of l.value)for(const w of A)if(v.filtered.items.get(w)>0){v.filtered.groups.add(_);break}v.filtered.count=d}return ne(()=>v.search,()=>{y()}),ne(()=>n.value.size,()=>{v.search&&y()}),Ga({allItems:n,allGroups:l,filterState:v}),(d,_)=>(u(),g(e(ws),q({"data-slot":"command"},e(r),{class:e(Q)("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",s.class)}),{default:p(()=>[L(d.$slots,"default")]),_:3},16,["class"]))}}),xa=Object.assign(ba,{__name:"UiCommand"}),wa=D({__name:"Dialog",props:{open:{type:Boolean},defaultOpen:{type:Boolean},modal:{type:Boolean}},emits:["update:open"],setup(a,{emit:t}){const i=he(a,t);return(r,n)=>(u(),g(e(Qt),q({"data-slot":"dialog"},e(i)),{default:p(l=>[L(r.$slots,"default",Ie(Pe(l)))]),_:3},16))}}),ct=Object.assign(wa,{__name:"UiDialog"}),Ca=D({__name:"DialogClose",props:{asChild:{type:Boolean},as:{}},setup(a){const t=a;return(s,o)=>(u(),g(e(ze),q({"data-slot":"dialog-close"},t),{default:p(()=>[L(s.$slots,"default")]),_:3},16))}});Object.assign(Ca,{__name:"UiDialogClose"});const ka=D({__name:"DialogOverlay",props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},setup(a){const t=a,s=Z(t,"class");return(o,i)=>(u(),g(e(ot),q({"data-slot":"dialog-overlay"},e(s),{class:e(Q)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80",t.class)}),{default:p(()=>[L(o.$slots,"default")]),_:3},16,["class"]))}}),Sa=Object.assign(ka,{__name:"UiDialogOverlay"}),$a=D({inheritAttrs:!1,__name:"DialogContent",props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{},class:{},showCloseButton:{type:Boolean,default:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(a,{emit:t}){const s=a,o=t,i=Z(s,"class"),r=he(i,o);return(n,l)=>(u(),g(e(nt),null,{default:p(()=>[m(Sa),m(e(lt),q({"data-slot":"dialog-content"},{...n.$attrs,...e(r)},{class:e(Q)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",s.class)}),{default:p(()=>[L(n.$slots,"default"),a.showCloseButton?(u(),g(e(ze),{key:0,"data-slot":"dialog-close",class:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"},{default:p(()=>[m(e(rt)),l[0]||(l[0]=c("span",{class:"sr-only"},"Close",-1))]),_:1})):U("",!0)]),_:3},16,["class"])]),_:3}))}}),pt=Object.assign($a,{__name:"UiDialogContent"}),Ea=D({__name:"DialogDescription",props:{asChild:{type:Boolean},as:{},class:{}},setup(a){const t=a,s=Z(t,"class"),o=Ee(s);return(i,r)=>(u(),g(e(Xt),q({"data-slot":"dialog-description"},e(o),{class:e(Q)("text-muted-foreground text-sm",t.class)}),{default:p(()=>[L(i.$slots,"default")]),_:3},16,["class"]))}}),ft=Object.assign(Ea,{__name:"UiDialogDescription"}),Ra=D({__name:"DialogFooter",props:{class:{}},setup(a){const t=a;return(s,o)=>(u(),S("div",{"data-slot":"dialog-footer",class:le(e(Q)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t.class))},[L(s.$slots,"default")],2))}});Object.assign(Ra,{__name:"UiDialogFooter"});const Da=D({__name:"DialogHeader",props:{class:{}},setup(a){const t=a;return(s,o)=>(u(),S("div",{"data-slot":"dialog-header",class:le(e(Q)("flex flex-col gap-2 text-center sm:text-left",t.class))},[L(s.$slots,"default")],2))}}),mt=Object.assign(Da,{__name:"UiDialogHeader"}),Aa=D({inheritAttrs:!1,__name:"DialogScrollContent",props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(a,{emit:t}){const s=a,o=t,i=Z(s,"class"),r=he(i,o);return(n,l)=>(u(),g(e(nt),null,{default:p(()=>[m(e(ot),{class:"fixed inset-0 z-50 grid place-items-center overflow-y-auto bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"},{default:p(()=>[m(e(lt),q({class:e(Q)("relative z-50 grid w-full max-w-lg my-8 gap-4 border border-border bg-background p-6 shadow-lg duration-200 sm:rounded-lg md:w-full",s.class)},{...n.$attrs,...e(r)},{onPointerDownOutside:l[0]||(l[0]=f=>{const v=f.detail.originalEvent,y=v.target;(v.offsetX>y.clientWidth||v.offsetY>y.clientHeight)&&f.preventDefault()})}),{default:p(()=>[L(n.$slots,"default"),m(e(ze),{class:"absolute top-4 right-4 p-0.5 transition-colors rounded-md hover:bg-secondary"},{default:p(()=>[m(e(rt),{class:"w-4 h-4"}),l[1]||(l[1]=c("span",{class:"sr-only"},"Close",-1))]),_:1})]),_:3},16,["class"])]),_:3})]),_:3}))}});Object.assign(Aa,{__name:"UiDialogScrollContent"});const Ba=D({__name:"DialogTitle",props:{asChild:{type:Boolean},as:{},class:{}},setup(a){const t=a,s=Z(t,"class"),o=Ee(s);return(i,r)=>(u(),g(e(Yt),q({"data-slot":"dialog-title"},e(o),{class:e(Q)("text-lg leading-none font-semibold",t.class)}),{default:p(()=>[L(i.$slots,"default")]),_:3},16,["class"]))}}),vt=Object.assign(Ba,{__name:"UiDialogTitle"}),Ia=D({__name:"DialogTrigger",props:{asChild:{type:Boolean},as:{}},setup(a){const t=a;return(s,o)=>(u(),g(e(Zt),q({"data-slot":"dialog-trigger"},t),{default:p(()=>[L(s.$slots,"default")]),_:3},16))}});Object.assign(Ia,{__name:"UiDialogTrigger"});const Pa=D({__name:"CommandDialog",props:{open:{type:Boolean},defaultOpen:{type:Boolean},modal:{type:Boolean},title:{default:"Command Palette"},description:{default:"Search for a command to run..."},defaultSearch:{default:""}},emits:["update:open"],setup(a,{emit:t}){const i=he(a,t);return(r,n)=>(u(),g(e(ct),Ie(Pe(e(i))),{default:p(l=>[m(e(pt),{class:"overflow-hidden p-0","show-close-button":!1},{default:p(()=>[m(e(mt),{class:"sr-only"},{default:p(()=>[m(e(vt),null,{default:p(()=>[J(z(a.title),1)]),_:1}),m(e(ft),null,{default:p(()=>[J(z(a.description),1)]),_:1})]),_:1}),m(xa,{"default-search":a.defaultSearch},{default:p(()=>[L(r.$slots,"default",Ie(Pe(l)))]),_:2},1032,["default-search"])]),_:2},1024)]),_:3},16))}}),Ta=Object.assign(Pa,{__name:"UiCommandDialog"}),Fa=D({__name:"CommandEmpty",props:{asChild:{type:Boolean},as:{},class:{}},setup(a){const t=a,s=Z(t,"class"),{filterState:o}=Re(),i=O(()=>!!o.search&&o.filtered.count===0);return(r,n)=>i.value?(u(),g(e(ie),q({key:0,"data-slot":"command-empty"},e(s),{class:e(Q)("py-6 text-center text-sm",t.class)}),{default:p(()=>[L(r.$slots,"default")]),_:3},16,["class"])):U("",!0)}}),Oa=Object.assign(Fa,{__name:"UiCommandEmpty"}),La=D({__name:"CommandGroup",props:{asChild:{type:Boolean},as:{},class:{},heading:{}},setup(a){const t=a,s=Z(t,"class"),{allGroups:o,filterState:i}=Re(),r=$e(),n=O(()=>i.search?i.filtered.groups.has(r):!0);return Ja({id:r}),re(()=>{o.value.has(r)||o.value.set(r,new Set)}),ve(()=>{o.value.delete(r)}),(l,f)=>(u(),g(e(As),q(e(s),{id:e(r),"data-slot":"command-group",class:e(Q)("text-foreground overflow-hidden p-1",t.class),hidden:n.value?void 0:!0}),{default:p(()=>[a.heading?(u(),g(e(Is),{key:0,"data-slot":"command-group-heading",class:"px-2 py-1.5 text-xs font-medium text-muted-foreground"},{default:p(()=>[J(z(a.heading),1)]),_:1})):U("",!0),L(l.$slots,"default")]),_:3},16,["id","class","hidden"]))}}),Be=Object.assign(La,{__name:"UiCommandGroup"}),Ma={"data-slot":"command-input-wrapper",class:"flex h-9 items-center gap-2 border-b px-3"},Va=D({inheritAttrs:!1,__name:"CommandInput",props:{modelValue:{},autoFocus:{type:Boolean},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},setup(a){const t=a,s=Z(t,"class"),o=Ee(s),{filterState:i}=Re(),r=C(null);return re(()=>{fe(()=>{const n=r.value?.$el;if(n&&i.search){const l=i.search.length;n.setSelectionRange(l,l)}})}),(n,l)=>(u(),S("div",Ma,[m(e(rs),{class:"size-4 shrink-0 opacity-50"}),m(e($s),q({ref_key:"inputRef",ref:r},{...e(o),...n.$attrs},{modelValue:e(i).search,"onUpdate:modelValue":l[0]||(l[0]=f=>e(i).search=f),"data-slot":"command-input","auto-focus":"",class:e(Q)("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",t.class)}),null,16,["modelValue","class"])]))}}),za=Object.assign(Va,{__name:"UiCommandInput"}),qa=D({__name:"CommandItem",props:{value:{},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},emits:["select"],setup(a,{emit:t}){const s=a,o=t,i=Z(s,"class"),r=he(i,o),n=$e(),{filterState:l,allItems:f,allGroups:v}=Re(),y=Wa(),d=O(()=>{if(l.search){const w=l.filtered.items.get(n);return w===void 0?!0:w>0}else return!0}),_=C(),A=It(_);return re(()=>{if(!(A.value instanceof HTMLElement))return;f.value.set(n,A.value.textContent??s.value?.toString()??"");const w=y?.id;w&&(v.value.has(w)?v.value.get(w)?.add(n):v.value.set(w,new Set([n])))}),ve(()=>{f.value.delete(n)}),(w,T)=>d.value?(u(),g(e(Os),q({key:0},e(r),{id:e(n),ref_key:"itemRef",ref:_,"data-slot":"command-item",class:e(Q)("data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",s.class),onSelect:T[0]||(T[0]=()=>{e(l).search=""})}),{default:p(()=>[L(w.$slots,"default")]),_:3},16,["id","class"])):U("",!0)}}),pe=Object.assign(qa,{__name:"UiCommandItem"}),ja={role:"presentation"},Ka=D({__name:"CommandList",props:{asChild:{type:Boolean},as:{},class:{}},setup(a){const t=a,s=Z(t,"class"),o=Ee(s);return(i,r)=>(u(),g(e(ks),q({"data-slot":"command-list"},e(o),{class:e(Q)("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto scrollbar-none",t.class)}),{default:p(()=>[c("div",ja,[L(i.$slots,"default")])]),_:3},16,["class"]))}}),Ha=Object.assign(Ka,{__name:"UiCommandList"}),Ua=D({__name:"CommandSeparator",props:{orientation:{},decorative:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},setup(a){const t=a,s=Z(t,"class");return(o,i)=>(u(),g(e(es),q({"data-slot":"command-separator"},e(s),{class:e(Q)("bg-border -mx-1 h-px",t.class)}),{default:p(()=>[L(o.$slots,"default")]),_:3},16,["class"]))}}),Ge=Object.assign(Ua,{__name:"UiCommandSeparator"}),Na=D({__name:"CommandShortcut",props:{class:{}},setup(a){const t=a;return(s,o)=>(u(),S("span",{"data-slot":"command-shortcut",class:le(e(Q)("text-muted-foreground ml-auto text-xs tracking-widest",t.class))},[L(s.$slots,"default")],2))}});Object.assign(Na,{__name:"UiCommandShortcut"});const[Re,Ga]=we("Command"),[Wa,Ja]=we("CommandGroup"),Qa={class:"flex-1"},Xa={class:"flex-1"},Ya={class:"ml-auto flex items-center gap-1"},Za={class:"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono text-[10px] text-muted-foreground"},eo={class:"flex-1"},to={class:"ml-auto flex items-center gap-1"},so={class:"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono text-[10px] text-muted-foreground"},ao={class:"ml-auto flex items-center gap-1"},oo={class:"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono text-[10px] text-muted-foreground"},no=D({__name:"CommandPalette",props:{open:{type:Boolean,default:!1},openModifiers:{},filter:{default:""},filterModifiers:{}},emits:Et(["openShortcutsHelp"],["update:open","update:filter"]),setup(a,{emit:t}){const s=Te(a,"open"),o=Te(a,"filter"),i=t,r=Qe(),{themeMode:n,cycleThemeMode:l}=Xe(),{prds:f}=Ve(),{repos:v,currentRepoId:y,selectRepo:d,refreshGitRepos:_}=Se(),{showSuccess:A,showError:w}=et(),T=["document","board","graph"],F={document:"Document",board:"Task Board",graph:"Graph"},b=C("document");{const $=localStorage.getItem("prd-viewer-tab");($==="document"||$==="board"||$==="graph")&&(b.value=$)}function M($){$.key!=="prd-viewer-tab"||!$.newValue||($.newValue==="document"||$.newValue==="board"||$.newValue==="graph")&&(b.value=$.newValue)}re(()=>{window.addEventListener("storage",M)}),ve(()=>{window.removeEventListener("storage",M)});const R=O(()=>{const $=T.indexOf(b.value),I=$>=0?$:0;return T[(I+1)%T.length]}),j=O(()=>F[R.value]);function B($){y.value&&(r.push(`/${y.value}/${$}`),s.value=!1)}function ae($){d($),r.push("/"),s.value=!1}function K(){l(),s.value=!1}function oe(){const $=R.value;b.value=$,localStorage.setItem("prd-viewer-tab",$),window.dispatchEvent(new StorageEvent("storage",{key:"prd-viewer-tab",newValue:$})),s.value=!1}function ee(){s.value=!1,i("openShortcutsHelp")}const G=C(!1);async function X(){if(!(!y.value||G.value)){G.value=!0,s.value=!1;try{const $=await _(y.value);A(`Discovered ${$.discovered} git repositories`)}catch{w("Failed to refresh git repos")}finally{G.value=!1}}}ne(s,$=>{$||(o.value="")});const W=O(()=>navigator.platform.toUpperCase().indexOf("MAC")>=0),Y=O(()=>W.value?"⌘":"Ctrl");return($,I)=>(u(),g(e(Ta),{open:s.value,"onUpdate:open":I[0]||(I[0]=N=>s.value=N),"default-search":o.value},{default:p(()=>[m(e(za),{placeholder:"Type a command or search..."}),m(e(Ha),null,{default:p(()=>[m(e(Oa),null,{default:p(()=>[...I[1]||(I[1]=[J("No results found.",-1)])]),_:1}),e(f)?.length?(u(),g(e(Be),{key:0,heading:"Documents"},{default:p(()=>[(u(!0),S(te,null,se(e(f),N=>(u(),g(e(pe),{key:N.slug,value:`PRD: ${N.name}`,onSelect:ue=>B(N.slug)},{default:p(()=>[m(e(Oe),{class:"size-4"}),c("span",null,z(N.name),1)]),_:2},1032,["value","onSelect"]))),128))]),_:1})):U("",!0),e(f)?.length&&e(v)?.length?(u(),g(e(Ge),{key:1})):U("",!0),e(v)?.length?(u(),g(e(Be),{key:2,heading:"Repositories"},{default:p(()=>[(u(!0),S(te,null,se(e(v),N=>(u(),g(e(pe),{key:N.id,value:`repo-${N.id} ${N.name}`,onSelect:ue=>ae(N.id)},{default:p(()=>[m(e(Le),{class:"size-4"}),c("span",Qa,z(N.name),1),N.id===e(y)?(u(),g(e(tt),{key:0,class:"size-4 text-primary"})):U("",!0)]),_:2},1032,["value","onSelect"]))),128))]),_:1})):U("",!0),e(v)?.length?(u(),g(e(Ge),{key:3})):U("",!0),m(e(Be),{heading:"Actions"},{default:p(()=>[m(e(pe),{value:"cycle-theme light dark system",onSelect:K},{default:p(()=>[e(n)==="system"?(u(),g(e(it),{key:0,class:"size-4"})):e(n)==="light"?(u(),g(e(dt),{key:1,class:"size-4"})):(u(),g(e(ut),{key:2,class:"size-4"})),c("span",Xa,"Cycle theme mode ("+z(e(n))+")",1),c("div",Ya,[c("kbd",Za,z(e(Y)),1),I[2]||(I[2]=c("kbd",{class:"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono text-[10px] text-muted-foreground"},".",-1))])]),_:1}),m(e(pe),{value:`switch-tab ${e(j).toLowerCase()}`,onSelect:oe},{default:p(()=>[m(e(st),{class:"size-4"}),c("span",eo,"Switch to "+z(e(j)),1),c("div",to,[c("kbd",so,z(e(Y)),1),I[3]||(I[3]=c("kbd",{class:"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono text-[10px] text-muted-foreground"},"\\",-1))])]),_:1},8,["value"]),m(e(pe),{value:"keyboard shortcuts help",onSelect:ee},{default:p(()=>[m(e(ts),{class:"size-4"}),I[5]||(I[5]=c("span",{class:"flex-1"},"Keyboard shortcuts",-1)),c("div",ao,[c("kbd",oo,z(e(Y)),1),I[4]||(I[4]=c("kbd",{class:"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono text-[10px] text-muted-foreground"},"/",-1))])]),_:1}),e(y)?(u(),g(e(pe),{key:0,value:"refresh git repos rescan discover",disabled:e(G),onSelect:X},{default:p(()=>[m(e(at),{class:le(["size-4",{"animate-spin":e(G)}])},null,8,["class"]),I[6]||(I[6]=c("span",{class:"flex-1"},"Refresh git repos",-1))]),_:1},8,["disabled"])):U("",!0)]),_:1})]),_:1})]),_:1},8,["open","default-search"]))}}),lo=Object.assign(no,{__name:"CommandPalette"}),ro={class:"space-y-6"},io={class:"mb-3 text-sm font-medium text-muted-foreground"},uo={class:"space-y-2"},co={class:"text-sm"},po={class:"flex items-center gap-1"},fo=D({__name:"ShortcutsHelp",props:{open:{type:Boolean,default:!1},openModifiers:{}},emits:["update:open"],setup(a){const t=Te(a,"open"),s=O(()=>navigator.platform.toUpperCase().indexOf("MAC")>=0),o=O(()=>s.value?"⌘":"Ctrl"),i=O(()=>[{name:"Navigation",shortcuts:[{keys:[o.value,"K"],description:"Open command palette"},{keys:[o.value,"J"],description:"Quick jump to document"}]},{name:"Actions",shortcuts:[{keys:[o.value,"."],description:"Cycle theme mode (light/dark/system)"},{keys:[o.value,"\\"],description:"Cycle Document, Task Board, and Graph tabs"},{keys:[o.value,","],description:"Add repository"}]},{name:"Help",shortcuts:[{keys:[o.value,"/"],description:"Show this help"},{keys:["Esc"],description:"Close dialog or palette"}]}]);return(r,n)=>(u(),g(e(ct),{open:t.value,"onUpdate:open":n[0]||(n[0]=l=>t.value=l)},{default:p(()=>[m(e(pt),{class:"max-w-md"},{default:p(()=>[m(e(mt),null,{default:p(()=>[m(e(vt),null,{default:p(()=>[...n[1]||(n[1]=[J("Keyboard Shortcuts",-1)])]),_:1}),m(e(ft),null,{default:p(()=>[...n[2]||(n[2]=[J(" Quick reference for available keyboard shortcuts. ",-1)])]),_:1})]),_:1}),c("div",ro,[(u(!0),S(te,null,se(e(i),l=>(u(),S("div",{key:l.name},[c("h3",io,z(l.name),1),c("div",uo,[(u(!0),S(te,null,se(l.shortcuts,f=>(u(),S("div",{key:f.description,class:"flex items-center justify-between"},[c("span",co,z(f.description),1),c("div",po,[(u(!0),S(te,null,se(f.keys,(v,y)=>(u(),S("kbd",{key:y,class:"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono text-xs font-medium text-muted-foreground"},z(v),1))),128))])]))),128))])]))),128))])]),_:1})]),_:1},8,["open"]))}}),mo=Object.assign(fo,{__name:"ShortcutsHelp"});function ht(){const a=document.activeElement;if(!a)return!1;const t=a.tagName.toLowerCase();return t==="input"||t==="textarea"||a.getAttribute("contenteditable")==="true"||a.getAttribute("role")==="textbox"}function vo(a){const t=a.toLowerCase().split("+"),s=t.pop()||"";return{meta:t.includes("meta"),ctrl:t.includes("ctrl"),shift:t.includes("shift"),alt:t.includes("alt"),key:s}}function ho(a,t){const s=a.key.toLowerCase();let o=s===t.key;return t.key==="\\"&&(o=s==="\\"||a.code==="Backslash"),t.key==="/"&&(o=s==="/"||a.code==="Slash"),t.key==="."&&(o=s==="."||a.code==="Period"),t.key===","&&(o=s===","||a.code==="Comma"),o&&a.metaKey===t.meta&&a.ctrlKey===t.ctrl&&a.shiftKey===t.shift&&a.altKey===t.alt}const Ce=[];let We=!1;function go(a){for(const t of Ce)if(ho(a,t.combo)){if(!t.allowInInput&&ht())continue;a.preventDefault(),a.stopPropagation(),t.handler();return}}function Je(){We||(document.addEventListener("keydown",go,{capture:!0}),We=!0)}function yo(){re(()=>{Je()});function a(s,o,i){const n={combo:vo(s),handler:o,allowInInput:i?.allowInInput??!1};Ce.push(n),Je(),ve(()=>{const l=Ce.indexOf(n);l>-1&&Ce.splice(l,1)})}function t(){return ht()}return{onShortcut:a,isInputFocused:t}}const _o=globalThis.setInterval,bo=2e3,xo=2e3;function wo(a){return!a.instanceId||!a.buildId?null:`${a.buildId}:${a.instanceId}`}function Co(a){const t=C(null),s=C(!1),o=C(null),i=C(null),r=C(null),n=C(null),l=C(!1),f=C(!1),v=C(!1);function y(){i.value&&(clearTimeout(i.value),i.value=null)}function d(){r.value&&(clearInterval(r.value),r.value=null)}async function _(){try{const R=await $fetch(`/api/runtime?_=${Date.now()}`);return wo(R)}catch{return null}}async function A(){n.value===null&&(n.value=await _())}async function w(){if(!(l.value||v.value)){l.value=!0;try{const R=await _();if(!R)return;if(!n.value){n.value=R;return}R!==n.value&&(v.value=!0,window.location.reload())}finally{l.value=!1}}}function T(){r.value||(r.value=_o(()=>{w()},xo))}function F(){i.value||(i.value=setTimeout(()=>{i.value=null,b()},bo))}function b(){if(!t.value)try{const R=new EventSource("/api/watch");R.onopen=async()=>{s.value=!0,o.value=null,y(),d(),f.value&&(f.value=!1,await w())},R.onmessage=j=>{try{const B=JSON.parse(j.data);a(B)}catch{}},R.onerror=()=>{s.value=!1,o.value="Connection lost",f.value=!0,t.value===R&&(R.close(),t.value=null),T(),F()},t.value=R}catch{o.value="Failed to connect",T(),F()}}function M(){y(),d(),f.value=!1,t.value&&(t.value.close(),t.value=null,s.value=!1)}return re(async()=>{await A(),b()}),ve(()=>{M()}),{isConnected:s,error:o,connect:b,disconnect:M}}const ko={class:"min-h-screen bg-background text-foreground"},So={class:"fixed top-0 left-0 right-0 z-50 h-14 border-b border-border bg-background/95 backdrop-blur-sm supports-[backdrop-filter]:bg-background/80"},$o={class:"flex h-full items-center justify-between px-4 md:px-6"},Eo={class:"flex items-center gap-3"},Ro={class:"flex h-screen pt-14"},Do={class:"flex-1 overflow-auto"},Lo=D({__name:"default",setup(a){const{themeMode:t,cycleThemeMode:s}=Xe(),{refreshPrds:o}=Ve(),{currentRepoId:i}=Se(),r=Me(),n=C(null);Rt("fileChangeEvent",n);const l=C(!1),f=C(""),v=C(!1),y=C(null),{onShortcut:d}=yo();d("Meta+k",()=>{l.value=!0}),d("Ctrl+k",()=>{l.value=!0}),d("Meta+j",()=>{f.value="PRD: ",l.value=!0}),d("Ctrl+j",()=>{f.value="PRD: ",l.value=!0});function _(){const F=["document","board","graph"],b=localStorage.getItem("prd-viewer-tab")||"document",M=F.indexOf(b),R=M>=0?M:0,j=F[(R+1)%F.length]??"document";localStorage.setItem("prd-viewer-tab",j),window.dispatchEvent(new StorageEvent("storage",{key:"prd-viewer-tab",newValue:j}))}d("Meta+\\",_),d("Ctrl+\\",_);function A(){s()}d("Meta+.",A),d("Ctrl+.",A);function w(){y.value?.openAddDialog()}d("Meta+,",w),d("Ctrl+,",w);function T(){v.value=!0}return d("Meta+/",T),d("Ctrl+/",T),d("Meta+Shift+/",T),d("Ctrl+Shift+/",T),Co(F=>{if(F.type==="connected"||!F.category)return;const b=F.category;if(F.repoId!==i.value)return;(b==="prd"||b==="tasks")&&o();const M=r.params.prd;if(M){const R=b==="prd"&&F.path?.includes(`/${M}.`),j=(b==="tasks"||b==="progress")&&F.path?.includes(`/${M}/`);(R||j||(b==="tasks"||b==="progress"))&&(n.value={category:b,path:F.path,timestamp:Date.now()})}}),(F,b)=>{const M=ua,R=Dt,j=_a;return u(),S("div",ko,[m(lo,{open:e(l),"onUpdate:open":b[0]||(b[0]=B=>ye(l)?l.value=B:null),filter:e(f),"onUpdate:filter":b[1]||(b[1]=B=>ye(f)?f.value=B:null),onOpenShortcutsHelp:T},null,8,["open","filter"]),m(mo,{open:e(v),"onUpdate:open":b[2]||(b[2]=B=>ye(v)?v.value=B:null)},null,8,["open"]),c("header",So,[c("div",$o,[b[5]||(b[5]=c("div",{class:"flex items-center gap-4"},[c("h1",{class:"text-lg font-semibold tracking-tight"}," PRD Viewer ")],-1)),m(R,null,{fallback:p(()=>[...b[4]||(b[4]=[c("div",{class:"flex items-center gap-3"},[c("div",{class:"h-8 w-[200px] animate-pulse rounded-md bg-muted"}),c("div",{class:"size-9 animate-pulse rounded-md bg-muted"})],-1)])]),default:p(()=>[c("div",Eo,[m(M,{ref_key:"repoSelectorRef",ref:y},null,512),m(e(me),{variant:"ghost",size:"icon",class:"size-9",onClick:A},{default:p(()=>[e(t)==="system"?(u(),g(e(it),{key:0,class:"size-4"})):e(t)==="light"?(u(),g(e(dt),{key:1,class:"size-4"})):(u(),g(e(ut),{key:2,class:"size-4"})),b[3]||(b[3]=c("span",{class:"sr-only"},"Cycle theme mode",-1))]),_:1})])]),_:1})])]),c("div",Ro,[m(R,null,{fallback:p(()=>[...b[6]||(b[6]=[c("aside",{class:"flex h-full w-64 flex-col border-r border-border bg-background"},[c("div",{class:"flex h-12 items-center border-b border-border px-4"},[c("div",{class:"h-4 w-20 animate-pulse rounded bg-muted"})]),c("div",{class:"flex-1 p-2 space-y-2"},[c("div",{class:"h-9 animate-pulse rounded-md bg-muted"}),c("div",{class:"h-9 animate-pulse rounded-md bg-muted"}),c("div",{class:"h-9 animate-pulse rounded-md bg-muted"})])],-1)])]),default:p(()=>[m(j)]),_:1}),c("main",Do,[L(F.$slots,"default")])])])}}});export{Lo as default};
@@ -1 +0,0 @@
1
- {"version":3,"file":"Detail-CUfU85GY.mjs","sources":["../../../../node_modules/@dagrejs/dagre/dist/dagre.esm.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/Detail-CUfU85GY.js"],"names":[],"mappings":"","x_google_ignoreList":[0,1]}
@@ -1,4 +0,0 @@
1
- const DiffViewer_vue_vue_type_style_index_0_scoped_8fd455b9_lang = ".diff-viewer[data-v-8fd455b9]{color:hsl(var(--foreground));font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Monaco,Consolas,monospace;font-size:.8125rem;line-height:1.5}.diff-container[data-v-8fd455b9]{overflow-x:auto}.diff-toolbar[data-v-8fd455b9]{background:hsl(var(--muted)/.3);border-bottom:1px solid hsl(var(--border));display:flex;justify-content:flex-end;padding:.25rem .5rem}.diff-split[data-v-8fd455b9]{display:flex;min-width:100%}.diff-column[data-v-8fd455b9]{flex:1;min-width:0;overflow-x:auto}.diff-column-left[data-v-8fd455b9]{border-right:1px solid hsl(var(--border))}.diff-column-content[data-v-8fd455b9]{min-width:-moz-fit-content;min-width:fit-content}.diff-line[data-v-8fd455b9]{display:flex}.diff-gutter[data-v-8fd455b9]{background:hsl(var(--muted)/.3);color:hsl(var(--muted-foreground));flex-shrink:0;padding:0 .5rem;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:3.5rem}.line-number[data-v-8fd455b9]{display:inline-block;min-width:2rem;opacity:.7}.diff-content[data-v-8fd455b9]{color:hsl(var(--foreground));flex:1;min-width:0;padding:0 .5rem;white-space:pre}.diff-code[data-v-8fd455b9]{color:inherit;display:inline}.diff-add[data-v-8fd455b9]{background:#16a24926}.diff-add .diff-gutter[data-v-8fd455b9]{background:#16a24940}.diff-remove[data-v-8fd455b9]{background:#ef434326}.diff-remove .diff-gutter[data-v-8fd455b9]{background:#ef434340}.diff-empty[data-v-8fd455b9]{background:hsl(var(--muted)/.2)}.diff-empty .diff-gutter[data-v-8fd455b9]{background:hsl(var(--muted)/.3)}.diff-context[data-v-8fd455b9]{background:transparent}.full-file-view[data-v-8fd455b9]{min-width:100%}.full-file-line[data-v-8fd455b9]{display:flex}.full-file-line .diff-gutter[data-v-8fd455b9]{width:4rem}.full-file-line.diff-add[data-v-8fd455b9]{background:#16a24926}.full-file-line.diff-add .diff-gutter[data-v-8fd455b9]{background:#16a24940}.dark .full-file-line.diff-add[data-v-8fd455b9]{background:#16a2491a}.dark .full-file-line.diff-add .diff-gutter[data-v-8fd455b9]{background:#16a24933}.diff-separator[data-v-8fd455b9],.diff-separator-half[data-v-8fd455b9]{align-items:center;background:hsl(var(--muted)/.4);display:flex;padding:.25rem 0}.separator-line[data-v-8fd455b9]{background:hsl(var(--border));flex:1;height:1px}.separator-text[data-v-8fd455b9]{color:hsl(var(--muted-foreground));font-size:.75rem;padding:0 .75rem}.dark .diff-add[data-v-8fd455b9]{background:#16a2491a}.dark .diff-add .diff-gutter[data-v-8fd455b9]{background:#16a24933}.dark .diff-remove[data-v-8fd455b9]{background:#ef43431a}.dark .diff-remove .diff-gutter[data-v-8fd455b9]{background:#ef434333}[data-v-8fd455b9] .shiki span,[data-v-8fd455b9] .shiki{background:transparent!important}";
2
-
3
- export { DiffViewer_vue_vue_type_style_index_0_scoped_8fd455b9_lang as D };
4
- //# sourceMappingURL=DiffViewer-styles-1.mjs-CS8FTppg.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DiffViewer-styles-1.mjs-CS8FTppg.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/DiffViewer-styles-1.mjs-CS8FTppg.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}
@@ -1,10 +0,0 @@
1
- import { D as DiffViewer_vue_vue_type_style_index_0_scoped_8fd455b9_lang } from './DiffViewer-styles-1.mjs-CS8FTppg.mjs';
2
- import { D as DiffViewer_vue_vue_type_style_index_1_lang } from './DiffViewer-styles-2.mjs-X6QKNjM0.mjs';
3
-
4
- const DiffViewerStyles_AUfwwelI = [
5
- DiffViewer_vue_vue_type_style_index_0_scoped_8fd455b9_lang,
6
- DiffViewer_vue_vue_type_style_index_1_lang
7
- ];
8
-
9
- export { DiffViewerStyles_AUfwwelI as default };
10
- //# sourceMappingURL=DiffViewer-styles.AUfwwelI.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DiffViewer-styles.AUfwwelI.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/DiffViewer-styles.AUfwwelI.mjs"],"names":["style_0","style_1"],"mappings":"","x_google_ignoreList":[0]}
@@ -1,8 +0,0 @@
1
- import { D as DiffViewer_vue_vue_type_style_index_0_scoped_8fd455b9_lang } from './DiffViewer-styles-1.mjs-CS8FTppg.mjs';
2
-
3
- const DiffViewerStyles_D_it8zfk = [
4
- DiffViewer_vue_vue_type_style_index_0_scoped_8fd455b9_lang
5
- ];
6
-
7
- export { DiffViewerStyles_D_it8zfk as default };
8
- //# sourceMappingURL=DiffViewer-styles.D_it8zfk.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DiffViewer-styles.D_it8zfk.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/DiffViewer-styles.D_it8zfk.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0]}
@@ -1,8 +0,0 @@
1
- const Viewer_vue_vue_type_style_index_0_lang = ".prd-viewer .prose{--tw-prose-body:hsl(var(--foreground));--tw-prose-headings:hsl(var(--foreground));--tw-prose-links:hsl(var(--primary));--tw-prose-code:hsl(var(--foreground));--tw-prose-pre-bg:hsl(var(--muted));--tw-prose-quotes:hsl(var(--muted-foreground));--tw-prose-hr:hsl(var(--border))}.prd-viewer .prose h1,.prd-viewer .prose h2,.prd-viewer .prose h3,.prd-viewer .prose h4{font-weight:600;margin-bottom:.5em;margin-top:1.5em}.prd-viewer .prose h1{border-bottom:1px solid hsl(var(--border));font-size:1.875rem;padding-bottom:.5rem}.prd-viewer .prose h2{border-bottom:1px solid hsl(var(--border));font-size:1.5rem;padding-bottom:.25rem}.prd-viewer .prose h3{font-size:1.25rem}.prd-viewer .prose p{line-height:1.7;margin-bottom:.75em;margin-top:.75em}.prd-viewer .prose a{color:hsl(var(--primary));text-decoration:underline;text-underline-offset:2px}.prd-viewer .prose a:hover{opacity:.8}.prd-viewer .prose code:not(pre code){background:hsl(var(--muted));border-radius:.25rem;font-size:.875em;font-weight:500;padding:.125rem .375rem}.prd-viewer .prose pre{background:hsl(var(--muted));border-radius:.5rem;margin:1rem 0;overflow-x:auto;padding:1rem}.prd-viewer .prose pre.shiki{background-color:hsl(var(--muted))!important}.prd-viewer .prose .shiki code{background:transparent;font-size:.875rem;line-height:1.5;padding:0}.dark .prd-viewer .prose .shiki,.dark .prd-viewer .prose pre.shiki{background-color:hsl(var(--muted))!important}.dark .prd-viewer .prose .shiki.github-light,.light .prd-viewer .prose .shiki.github-dark,:not(.dark) .prd-viewer .prose .shiki.github-dark{display:none!important}.prd-viewer .prose table{border-collapse:collapse;margin:1rem 0;width:100%}.prd-viewer .prose td,.prd-viewer .prose th{border:1px solid hsl(var(--border));padding:.5rem .75rem;text-align:left}.prd-viewer .prose th{background:hsl(var(--muted));font-weight:600}.prd-viewer .prose tr:nth-child(2n){background:hsl(var(--muted)/.3)}.prd-viewer .prose ol,.prd-viewer .prose ul{margin:.75em 0;padding-left:1.5rem}.prd-viewer .prose li{margin:.25em 0}.prd-viewer .prose ul{list-style-type:disc}.prd-viewer .prose ol{list-style-type:decimal}.prd-viewer .prose input[type=checkbox]{margin-right:.5rem;pointer-events:none}.prd-viewer .prose blockquote{border-left:4px solid hsl(var(--border));color:hsl(var(--muted-foreground));font-style:italic;margin:1rem 0;padding-left:1rem}.prd-viewer .prose hr{border:none;border-top:1px solid hsl(var(--border));margin:2rem 0}.prd-viewer .prose img{border-radius:.5rem;height:auto;margin:1rem 0;max-width:100%}";
2
-
3
- const ViewerStyles_CshnetGw = [
4
- Viewer_vue_vue_type_style_index_0_lang
5
- ];
6
-
7
- export { ViewerStyles_CshnetGw as default };
8
- //# sourceMappingURL=Viewer-styles.CshnetGw.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Viewer-styles.CshnetGw.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/Viewer-styles-1.mjs-CQdA9pq5.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/Viewer-styles.CshnetGw.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0,1]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_prd_-CeVnQzOV.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_prd_-CeVnQzOV.js"],"names":["__nuxt_component_0$3"],"mappings":"","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-DWCOHHTE.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/default-DWCOHHTE.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CckL_NBD.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/index-CckL_NBD.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-QVeSHT3L.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/index-QVeSHT3L.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"repo-graph-CHNl58mY.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/repo-graph-CHNl58mY.js"],"names":["__nuxt_component_0"],"mappings":"","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"usePrd-SqcxGyFU.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/usePrd-SqcxGyFU.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}