@specship/specship-win32-arm64 0.11.8 → 0.12.0

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 (235) hide show
  1. package/lib/dist/bin/specship.js +141 -66
  2. package/lib/dist/bin/specship.js.map +1 -1
  3. package/lib/dist/commands/specship/check.md +5 -0
  4. package/lib/dist/commands/specship/spec.md +235 -15
  5. package/lib/dist/db/migrations.d.ts.map +1 -1
  6. package/lib/dist/db/migrations.js +1 -0
  7. package/lib/dist/db/migrations.js.map +1 -1
  8. package/lib/dist/enforce/enforce.d.ts +15 -0
  9. package/lib/dist/enforce/enforce.d.ts.map +1 -1
  10. package/lib/dist/enforce/enforce.js +43 -1
  11. package/lib/dist/enforce/enforce.js.map +1 -1
  12. package/lib/dist/extraction/index.d.ts +6 -0
  13. package/lib/dist/extraction/index.d.ts.map +1 -1
  14. package/lib/dist/extraction/index.js.map +1 -1
  15. package/lib/dist/index.d.ts +9 -1
  16. package/lib/dist/index.d.ts.map +1 -1
  17. package/lib/dist/index.js +53 -9
  18. package/lib/dist/index.js.map +1 -1
  19. package/lib/dist/installer/index.d.ts.map +1 -1
  20. package/lib/dist/installer/index.js +35 -0
  21. package/lib/dist/installer/index.js.map +1 -1
  22. package/lib/dist/installer/instructions-template.d.ts +2 -2
  23. package/lib/dist/installer/instructions-template.js +3 -3
  24. package/lib/dist/installer/targets/claude.d.ts +10 -0
  25. package/lib/dist/installer/targets/claude.d.ts.map +1 -1
  26. package/lib/dist/installer/targets/claude.js +33 -7
  27. package/lib/dist/installer/targets/claude.js.map +1 -1
  28. package/lib/dist/mcp/designer-tools.js +1 -1
  29. package/lib/dist/mcp/server-instructions.d.ts +1 -1
  30. package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
  31. package/lib/dist/mcp/server-instructions.js +1 -1
  32. package/lib/dist/mcp/spec-tools.d.ts +10 -0
  33. package/lib/dist/mcp/spec-tools.d.ts.map +1 -1
  34. package/lib/dist/mcp/spec-tools.js +228 -2
  35. package/lib/dist/mcp/spec-tools.js.map +1 -1
  36. package/lib/dist/mcp/tools.d.ts +12 -0
  37. package/lib/dist/mcp/tools.d.ts.map +1 -1
  38. package/lib/dist/mcp/tools.js +34 -1
  39. package/lib/dist/mcp/tools.js.map +1 -1
  40. package/lib/dist/reflect/index.d.ts +1 -1
  41. package/lib/dist/reflect/index.d.ts.map +1 -1
  42. package/lib/dist/reflect/index.js +2 -1
  43. package/lib/dist/reflect/index.js.map +1 -1
  44. package/lib/dist/reflect/miner.d.ts +8 -0
  45. package/lib/dist/reflect/miner.d.ts.map +1 -1
  46. package/lib/dist/reflect/miner.js +64 -36
  47. package/lib/dist/reflect/miner.js.map +1 -1
  48. package/lib/dist/resolution/brief-link-resolver.d.ts +20 -0
  49. package/lib/dist/resolution/brief-link-resolver.d.ts.map +1 -1
  50. package/lib/dist/resolution/brief-link-resolver.js +65 -1
  51. package/lib/dist/resolution/brief-link-resolver.js.map +1 -1
  52. package/lib/dist/resolution/spec-link-resolver.d.ts +16 -2
  53. package/lib/dist/resolution/spec-link-resolver.d.ts.map +1 -1
  54. package/lib/dist/resolution/spec-link-resolver.js +19 -1
  55. package/lib/dist/resolution/spec-link-resolver.js.map +1 -1
  56. package/lib/dist/server/cli.js +5 -49
  57. package/lib/dist/server/ingest/ingestor.js +17 -17
  58. package/lib/dist/server/ingest/pricing-backfill.js +55 -0
  59. package/lib/dist/server/ingest/pricing.js +3 -0
  60. package/lib/dist/server/ingest/project-paths.js +152 -0
  61. package/lib/dist/server/project-registry.js +15 -2
  62. package/lib/dist/server/routes/claude.js +47 -18
  63. package/lib/dist/server/routes/events.js +20 -1
  64. package/lib/dist/server/routes/projects.js +6 -3
  65. package/lib/dist/server/routes/spec.js +22 -2
  66. package/lib/dist/server/server.js +38 -4
  67. package/lib/dist/server/ssr/md.mjs +83 -0
  68. package/lib/dist/server/ssr/public/app.css +1 -0
  69. package/lib/dist/server/ssr/render.mjs +564 -0
  70. package/lib/dist/server/ssr/routes.js +73 -0
  71. package/lib/dist/server/static-handler.js +30 -0
  72. package/lib/dist/workflows/defaults/claude-design-implement.yaml +3 -3
  73. package/lib/dist/workflows/defaults/spec-implement.yaml +41 -9
  74. package/lib/node_modules/.package-lock.json +1 -1
  75. package/lib/package.json +3 -3
  76. package/package.json +1 -1
  77. package/lib/dist/commands/specship/design-implement.md +0 -84
  78. package/lib/dist/commands/specship/design-loop.md +0 -125
  79. package/lib/dist/commands/ss-behaviour.md +0 -116
  80. package/lib/dist/web/chunk-2AJCHB7P.js +0 -1
  81. package/lib/dist/web/chunk-2CPLUFCH.js +0 -2
  82. package/lib/dist/web/chunk-2I7L37NS.js +0 -1
  83. package/lib/dist/web/chunk-2IVSOVQZ.js +0 -1
  84. package/lib/dist/web/chunk-2NAWAJB5.js +0 -1
  85. package/lib/dist/web/chunk-2OJBIPE4.js +0 -1
  86. package/lib/dist/web/chunk-3E2WB6D5.js +0 -1
  87. package/lib/dist/web/chunk-3EBFYSCH.js +0 -2
  88. package/lib/dist/web/chunk-3QCQ4BXS.js +0 -1
  89. package/lib/dist/web/chunk-42XVAQ6I.js +0 -1
  90. package/lib/dist/web/chunk-4G7XU55L.js +0 -1
  91. package/lib/dist/web/chunk-4IMMPEYM.js +0 -1
  92. package/lib/dist/web/chunk-4TJQJPCZ.js +0 -1
  93. package/lib/dist/web/chunk-4WZIHTPC.js +0 -1
  94. package/lib/dist/web/chunk-4YVSYOSD.js +0 -1
  95. package/lib/dist/web/chunk-5BQIOYKW.js +0 -1
  96. package/lib/dist/web/chunk-5HGWHUJA.js +0 -1
  97. package/lib/dist/web/chunk-5NTGUSXJ.js +0 -1
  98. package/lib/dist/web/chunk-5Y244R4G.js +0 -1
  99. package/lib/dist/web/chunk-6RRDPT5Z.js +0 -1
  100. package/lib/dist/web/chunk-6VKB2ZWM.js +0 -1
  101. package/lib/dist/web/chunk-7656MA24.js +0 -1
  102. package/lib/dist/web/chunk-7DMFVTU4.js +0 -1
  103. package/lib/dist/web/chunk-7KWBINA7.js +0 -1
  104. package/lib/dist/web/chunk-7MUNFW56.js +0 -1
  105. package/lib/dist/web/chunk-7SMPKVEP.js +0 -1
  106. package/lib/dist/web/chunk-AZJVTPLU.js +0 -1
  107. package/lib/dist/web/chunk-AZUUBUEJ.js +0 -1
  108. package/lib/dist/web/chunk-BLBRMCN2.js +0 -1
  109. package/lib/dist/web/chunk-BMIAXD2V.js +0 -2
  110. package/lib/dist/web/chunk-BPCJLNBS.js +0 -47
  111. package/lib/dist/web/chunk-BUXWEHIY.js +0 -1
  112. package/lib/dist/web/chunk-CYXQILZI.js +0 -1
  113. package/lib/dist/web/chunk-DLQPZWSI.css +0 -1
  114. package/lib/dist/web/chunk-DOKZOFKM.js +0 -1
  115. package/lib/dist/web/chunk-DTWIJ3GJ.js +0 -1
  116. package/lib/dist/web/chunk-DYRFLPJA.js +0 -1
  117. package/lib/dist/web/chunk-E27QAKAB.js +0 -1
  118. package/lib/dist/web/chunk-E3J3CXR5.js +0 -1
  119. package/lib/dist/web/chunk-E73OX2P7.js +0 -1
  120. package/lib/dist/web/chunk-EAXRKDLV.js +0 -1
  121. package/lib/dist/web/chunk-EBKKDHYI.js +0 -1
  122. package/lib/dist/web/chunk-EE7V7Q5P.js +0 -1
  123. package/lib/dist/web/chunk-EKY2FUHU.js +0 -1
  124. package/lib/dist/web/chunk-EP6XOPXH.js +0 -1
  125. package/lib/dist/web/chunk-ESGDLJOJ.js +0 -1
  126. package/lib/dist/web/chunk-ETJG7NCY.js +0 -1
  127. package/lib/dist/web/chunk-EUUEFEDI.js +0 -1
  128. package/lib/dist/web/chunk-EXBUKHH2.js +0 -17
  129. package/lib/dist/web/chunk-F5TBUYDH.js +0 -1
  130. package/lib/dist/web/chunk-FC3R7YHR.js +0 -4
  131. package/lib/dist/web/chunk-FGNZDHTL.js +0 -11
  132. package/lib/dist/web/chunk-FIJW2UNJ.js +0 -1
  133. package/lib/dist/web/chunk-FMV5PXRC.js +0 -5
  134. package/lib/dist/web/chunk-G7RXFHYO.js +0 -1
  135. package/lib/dist/web/chunk-G7VZT5KB.js +0 -3
  136. package/lib/dist/web/chunk-GRZYXPSO.js +0 -7
  137. package/lib/dist/web/chunk-GYGPS3AN.js +0 -1
  138. package/lib/dist/web/chunk-H723TYYD.js +0 -2
  139. package/lib/dist/web/chunk-H7AF7YS4.js +0 -1
  140. package/lib/dist/web/chunk-HDZDQILN.js +0 -1
  141. package/lib/dist/web/chunk-HMK6UO6N.js +0 -1
  142. package/lib/dist/web/chunk-HSJNHNOH.js +0 -6
  143. package/lib/dist/web/chunk-IHEE5NYJ.js +0 -1
  144. package/lib/dist/web/chunk-IOB4JJT4.js +0 -1
  145. package/lib/dist/web/chunk-ISNEBICW.js +0 -1
  146. package/lib/dist/web/chunk-J2GZVLHH.js +0 -1
  147. package/lib/dist/web/chunk-JGDK6YKG.js +0 -1
  148. package/lib/dist/web/chunk-JLOJCDIY.js +0 -1
  149. package/lib/dist/web/chunk-JPSYO24K.js +0 -1
  150. package/lib/dist/web/chunk-JTFXTIPE.js +0 -903
  151. package/lib/dist/web/chunk-K7UD24Z4.js +0 -1
  152. package/lib/dist/web/chunk-KYSTCHAH.js +0 -1
  153. package/lib/dist/web/chunk-LB6JPLX2.js +0 -1
  154. package/lib/dist/web/chunk-LNSVDHCI.js +0 -1
  155. package/lib/dist/web/chunk-LVGIY3SO.js +0 -1
  156. package/lib/dist/web/chunk-LXLHIHEN.js +0 -1
  157. package/lib/dist/web/chunk-MNFTHCSJ.js +0 -1
  158. package/lib/dist/web/chunk-N6SS4G6S.js +0 -1
  159. package/lib/dist/web/chunk-NKPK3BR3.js +0 -1
  160. package/lib/dist/web/chunk-NTBJG6SJ.js +0 -1
  161. package/lib/dist/web/chunk-NUDB3Q2Y.js +0 -3
  162. package/lib/dist/web/chunk-OTQR5VFM.js +0 -1
  163. package/lib/dist/web/chunk-OXEF5E3E.js +0 -1
  164. package/lib/dist/web/chunk-P62EJGSF.js +0 -1
  165. package/lib/dist/web/chunk-PCW6R7OP.js +0 -1
  166. package/lib/dist/web/chunk-PGGJPDJG.js +0 -1
  167. package/lib/dist/web/chunk-POCVU4VK.js +0 -2
  168. package/lib/dist/web/chunk-PS6HRYQQ.js +0 -3
  169. package/lib/dist/web/chunk-PUYSJNJR.js +0 -1
  170. package/lib/dist/web/chunk-PZSU53SS.js +0 -1
  171. package/lib/dist/web/chunk-Q2RVFS45.js +0 -1
  172. package/lib/dist/web/chunk-Q7L6LLAK.js +0 -1
  173. package/lib/dist/web/chunk-QCMKJIWY.js +0 -1
  174. package/lib/dist/web/chunk-QH6CF3M3.js +0 -1
  175. package/lib/dist/web/chunk-QIZ65CGB.js +0 -1
  176. package/lib/dist/web/chunk-QPA2REUE.js +0 -1
  177. package/lib/dist/web/chunk-QQ5LD7PI.js +0 -1
  178. package/lib/dist/web/chunk-QR6L3KAC.js +0 -1
  179. package/lib/dist/web/chunk-R2DLK4HO.js +0 -1
  180. package/lib/dist/web/chunk-RD6TVPOT.js +0 -1
  181. package/lib/dist/web/chunk-RKY4EJYJ.js +0 -1
  182. package/lib/dist/web/chunk-RONYWVY7.js +0 -1
  183. package/lib/dist/web/chunk-RXKXYF2C.js +0 -1
  184. package/lib/dist/web/chunk-SQPYSOV6.js +0 -1
  185. package/lib/dist/web/chunk-SWKJRNYY.js +0 -1
  186. package/lib/dist/web/chunk-SYGIPC2P.js +0 -4
  187. package/lib/dist/web/chunk-T7AZ65JP.js +0 -1
  188. package/lib/dist/web/chunk-TCZDVOHD.js +0 -1
  189. package/lib/dist/web/chunk-TPTITA3V.js +0 -1
  190. package/lib/dist/web/chunk-TR335633.js +0 -1
  191. package/lib/dist/web/chunk-TWVVIWKO.js +0 -1
  192. package/lib/dist/web/chunk-U67LRNER.js +0 -1
  193. package/lib/dist/web/chunk-UR5KDXPX.js +0 -1
  194. package/lib/dist/web/chunk-UR6O2GEH.js +0 -1
  195. package/lib/dist/web/chunk-USVLLFVR.js +0 -1
  196. package/lib/dist/web/chunk-UTNMGWTP.js +0 -1
  197. package/lib/dist/web/chunk-V74ZPP4B.js +0 -1
  198. package/lib/dist/web/chunk-VECWMHJP.js +0 -1
  199. package/lib/dist/web/chunk-VUACT35R.js +0 -3
  200. package/lib/dist/web/chunk-VZI7H4SZ.js +0 -1
  201. package/lib/dist/web/chunk-WB6YHOD4.js +0 -1
  202. package/lib/dist/web/chunk-WBJ5VEB5.js +0 -1
  203. package/lib/dist/web/chunk-WBT64AWV.js +0 -1
  204. package/lib/dist/web/chunk-WFXJIXZE.js +0 -4
  205. package/lib/dist/web/chunk-WTGYRH3Z.js +0 -298
  206. package/lib/dist/web/chunk-WXTCVDTP.js +0 -1
  207. package/lib/dist/web/chunk-XAUQEKZX.js +0 -1
  208. package/lib/dist/web/chunk-XCDHWLVH.js +0 -1
  209. package/lib/dist/web/chunk-Y3H6FFUZ.js +0 -1
  210. package/lib/dist/web/chunk-Y4F5ULGJ.js +0 -1
  211. package/lib/dist/web/chunk-YEGKAAEE.js +0 -1
  212. package/lib/dist/web/chunk-YM2KU57F.js +0 -1
  213. package/lib/dist/web/chunk-YNYVOPWF.js +0 -1
  214. package/lib/dist/web/chunk-YRERBP6T.js +0 -1
  215. package/lib/dist/web/chunk-YV5LB22R.js +0 -1
  216. package/lib/dist/web/chunk-YWIRU745.js +0 -1
  217. package/lib/dist/web/chunk-YXYPTZ6E.js +0 -1
  218. package/lib/dist/web/chunk-ZLV4VCDG.js +0 -3
  219. package/lib/dist/web/chunk-ZTVI5KFF.js +0 -1
  220. package/lib/dist/web/favicon-16.png +0 -0
  221. package/lib/dist/web/favicon-180.png +0 -0
  222. package/lib/dist/web/favicon-32.png +0 -0
  223. package/lib/dist/web/favicon-512.png +0 -0
  224. package/lib/dist/web/favicon-small.svg +0 -15
  225. package/lib/dist/web/favicon.ico +0 -0
  226. package/lib/dist/web/favicon.svg +0 -20
  227. package/lib/dist/web/icon-192.png +0 -0
  228. package/lib/dist/web/icon-512.png +0 -0
  229. package/lib/dist/web/index.html +0 -146
  230. package/lib/dist/web/main-ESADRXN2.css +0 -1
  231. package/lib/dist/web/main-FY3HQ4PX.js +0 -1
  232. package/lib/dist/web/manifest.webmanifest +0 -15
  233. package/lib/dist/web/media/codicon-LN6W7LCM.ttf +0 -0
  234. package/lib/dist/web/styles-KSOPUVDA.css +0 -1
  235. package/lib/dist/web/sw.js +0 -69
@@ -1 +0,0 @@
1
- import{a as xe}from"./chunk-PZSU53SS.js";import{b as he}from"./chunk-WBJ5VEB5.js";import{a as _e}from"./chunk-SQPYSOV6.js";import{a as ge}from"./chunk-QIZ65CGB.js";import{a as ue}from"./chunk-IOB4JJT4.js";import{c as se}from"./chunk-DOKZOFKM.js";import{c as j}from"./chunk-DTWIJ3GJ.js";import{a as ce}from"./chunk-JGDK6YKG.js";import{a as pe}from"./chunk-TWVVIWKO.js";import{Aa as p,Ga as O,I as W,Ia as E,Ka as m,M as S,N as M,O as P,P as G,Ta as U,Ua as Y,Va as l,W as H,Wa as _,Xa as X,Ya as re,Za as le,bb as de,ea as o,ka as oe,lb as I,qa as Q,ra as C,sa as b,ua as q,va as D,wa as K,xa as k,ya as i,za as a,zb as me}from"./chunk-SYGIPC2P.js";import{a as ie,b as ae}from"./chunk-Q7L6LLAK.js";function fe(t,n,e){if(n.length===0)return new Map;switch(t){case"force":return te(n,e);case"anchored":return ye(n,e);default:return be(n,e)}}function be(t,n){let e=new Set(t.map(c=>c.id)),r=n.filter(c=>e.has(c.from)&&e.has(c.to)),d=new Map,s=new Map;for(let c of t)d.set(c.id,[]),s.set(c.id,0);for(let c of r)d.get(c.from).push(c.to),s.set(c.to,(s.get(c.to)??0)+1);let g=new Map;for(let c of t)g.set(c.id,0);let w=new Map(s),L=t.filter(c=>(s.get(c.id)??0)===0).map(c=>c.id),T=new Set;for(;L.length;){let c=L.shift();if(T.has(c))continue;T.add(c);let v=g.get(c);for(let f of d.get(c))g.set(f,Math.max(g.get(f),v+1)),w.set(f,(w.get(f)??1)-1),(w.get(f)??0)<=0&&L.push(f)}let u=14,z=new Map;for(let c of t){let v=Math.min(g.get(c.id),u),f=z.get(v)??[];f.push(c.id),z.set(v,f)}let h=210,y=48,x=new Map;for(let[c,v]of z)v.forEach((f,N)=>{x.set(f,{x:c*h,y:(N-(v.length-1)/2)*y})});return x}function te(t,n,e,r){let d=t.length,s=Math.max(220,d*9),g=new Map;t.forEach((h,y)=>{let x=r?.get(h.id);if(x){g.set(h.id,{x:x.x,y:x.y});return}let c=y/d*Math.PI*2,v=s*(.35+.65*(y*.6180339887%1));g.set(h.id,{x:Math.cos(c)*v,y:Math.sin(c)*v})});let w=new Set(t.map(h=>h.id)),L=n.filter(h=>w.has(h.from)&&w.has(h.to)),T=s/Math.sqrt(d),u=s/2,z=120;for(let h=0;h<z;h++){let y=new Map;for(let x of t)y.set(x.id,{x:0,y:0});for(let x=0;x<d;x++){let c=g.get(t[x].id),v=y.get(t[x].id);for(let f=x+1;f<d;f++){let N=g.get(t[f].id),V=c.x-N.x,R=c.y-N.y,$=Math.hypot(V,R)||.01,F=T*T/$,B=V/$,A=R/$;v.x+=B*F,v.y+=A*F;let ne=y.get(t[f].id);ne.x-=B*F,ne.y-=A*F}}for(let x of L){let c=g.get(x.from),v=g.get(x.to),f=c.x-v.x,N=c.y-v.y,V=Math.hypot(f,N)||.01,R=V*V/T,$=f/V,F=N/V,B=y.get(x.from),A=y.get(x.to);B.x-=$*R,B.y-=F*R,A.x+=$*R,A.y+=F*R}for(let x of t){if(e?.has(x.id))continue;let c=y.get(x.id),v=Math.hypot(c.x,c.y)||.01,f=g.get(x.id);f.x+=c.x/v*Math.min(v,u),f.y+=c.y/v*Math.min(v,u)}u*=.95}return g}function ye(t,n){let e=t.filter(g=>g.kind==="spec");if(e.length===0)return te(t,n);let r=-Math.max(340,t.length*5),d=new Map;e.forEach((g,w)=>d.set(g.id,{x:r,y:(w-(e.length-1)/2)*64}));let s=new Set(e.map(g=>g.id));return te(t,n,s,d)}var ke=()=>[1,2,3,4],we=(t,n)=>n.node.id,ee=(t,n)=>n.id;function Se(t,n){t&1&&p(0,"app-pick-project-empty",0)}function Me(t,n){if(t&1){let e=O();i(0,"button",19),E("click",function(){let d=S(e).$implicit,s=m(2);return M(s.toggleFilter(d))}),p(1,"span",20),l(2),i(3,"span",21),l(4),a()()}if(t&2){let e=n.$implicit,r=m(2);U("--chip-color",r.chipColor(e)),Y("is-active",r.isFilterActive(e)),o(),Q("data-kind",e),o(),X(" ",r.kindLabel(e)," "),o(2),_(r.countFor(e))}}function Ee(t,n){t&1&&p(0,"span",12)}function Pe(t,n){if(t&1){let e=O();i(0,"button",23),E("click",function(){let d=S(e).$implicit,s=m(3);return M(s.pickResult(d.node))}),p(1,"span",24),i(2,"span",25),l(3),a(),i(4,"span",26),l(5),a(),i(6,"span",27),l(7),a()()}if(t&2){let e=n.$implicit,r=m(3);o(),Y("is-spec",e.node.kind==="spec")("is-route",e.node.kind==="route")("is-test",e.node.kind==="test"),o(2),_(e.node.name),o(2),_(e.node.kind),o(2),_(r.shortPath(e.node.filePath))}}function Ge(t,n){if(t&1&&(i(0,"div",13),D(1,Pe,8,9,"button",22,we),a()),t&2){let e=m(2);o(),K(e.searchResults.state().data.results)}}function Oe(t,n){if(t&1){let e=O();i(0,"app-graph-canvas",28),E("nodeClick",function(d){S(e);let s=m(3);return M(s.pickFromCanvas(d))}),a(),i(1,"div",29),l(2),a()}if(t&2){let e=m(3);k("nodes",e.visibleNodes())("edges",e.visibleEdges())("selectedId","")("fitKey",e.fitKey())("hiddenIds",e.hiddenIds()),o(2),re(" Showing the ",e.fullGraphCounts().shown," most-connected of ",e.fullGraphCounts().total.toLocaleString()," nodes \xB7 search or click a node to drill in ")}}function Te(t,n){t&1&&(i(0,"div",17)(1,"p"),l(2,"Loading graph\u2026"),a()())}function Ie(t,n){if(t&1&&(i(0,"p",30),l(1),a()),t&2){let e=n;o(),le("",e.nodeCount.toLocaleString()," nodes \xB7 ",e.edgeCount.toLocaleString()," edges \xB7 ",e.fileCount.toLocaleString()," files")}}function Le(t,n){if(t&1&&(i(0,"div",17)(1,"h3"),l(2,"Explore the graph"),a(),i(3,"p"),l(4,"Search for a function, method or class to start. The graph renders the symbol with its callers, callees and any linked specs."),a(),C(5,Ie,2,3,"p",30),a()),t&2){let e,r=m(3);o(5),b((e=r.status.state().data)?5:-1,e)}}function ze(t,n){if(t&1&&C(0,Oe,3,7)(1,Te,3,0,"div",17)(2,Le,6,1,"div",17),t&2){let e=m(2);b(e.fullGraphActive()?0:e.fullGraphLoading()?1:2)}}function De(t,n){t&1&&(i(0,"div",17)(1,"p"),l(2,"Loading\u2026"),a()())}function Ke(t,n){if(t&1&&(i(0,"div",17)(1,"h3"),l(2,"Couldn't load that symbol"),a(),i(3,"p"),l(4),a()()),t&2){let e=m(2);o(4),_(e.nodeDetail.state().error)}}function Ne(t,n){if(t&1&&(i(0,"div",17)(1,"p"),l(2),a()()),t&2){let e=m(2);o(2),X('No match for "',e.selectedSymbol(),'".')}}function Ve(t,n){if(t&1&&(i(0,"div",33),p(1,"span",43),i(2,"span",44),l(3),a()()),t&2){let e=n.$implicit;o(),Q("data-kind",e),o(2),_(e)}}function Re(t,n){if(t&1){let e=O();i(0,"app-graph-canvas",28),E("nodeClick",function(d){S(e);let s=m(2);return M(s.pickFromCanvas(d))}),a(),i(1,"div",31)(2,"div",32),D(3,Ve,4,2,"div",33,q),a(),p(5,"div",34),i(6,"div",35)(7,"div",36),P(),i(8,"svg",37),p(9,"line",38),a(),G(),i(10,"span",39),l(11,"implements"),a()(),i(12,"div",36),P(),i(13,"svg",37),p(14,"line",40),a(),G(),i(15,"span",39),l(16,"tests"),a()(),i(17,"div",36),P(),i(18,"svg",37),p(19,"line",41),a(),G(),i(20,"span",39),l(21,"calls"),a()(),i(22,"div",36),P(),i(23,"svg",37),p(24,"line",42),a(),G(),i(25,"span",39),l(26,"synth"),a()()()()}if(t&2){let e=m(2);k("nodes",e.visibleNodes())("edges",e.visibleEdges())("selectedId",e.selectedDetail().id)("fitKey",e.fitKey())("hiddenIds",e.hiddenIds()),o(3),K(e.kindKeys)}}function Fe(t,n){if(t&1&&(i(0,"span",51),l(1),a()),t&2){let e=m();o(),_(e.startLine?"L"+e.startLine:"")}}function He(t,n){if(t&1&&(i(0,"div",59)(1,"div",61),l(2,"Signature"),a(),i(3,"pre",62),l(4),a()()),t&2){let e=m();o(4),_(e.signature)}}function $e(t,n){if(t&1&&(i(0,"div",59)(1,"div",61),l(2,"Docstring"),a(),i(3,"p",63),l(4),a()()),t&2){let e=m();o(4),_(e.docstring)}}function je(t,n){if(t&1&&(i(0,"span",68),l(1),a()),t&2){let e=m().$implicit;o(),_(e.specTitle)}}function Be(t,n){if(t&1&&(i(0,"div",65),p(1,"app-state-pill",66),i(2,"span",67),l(3),a(),C(4,je,2,1,"span",68),a()),t&2){let e=n.$implicit;o(),k("state",e.state),o(2),_(e.specId),o(),b(e.specTitle?4:-1)}}function Ae(t,n){if(t&1&&(i(0,"div",59)(1,"div",61),l(2,"Linked specs "),i(3,"span",64),l(4),a()(),D(5,Be,5,3,"div",65,ee),a()),t&2){let e=m();o(4),_(e.linkedSpecs.length),o(),K(e.linkedSpecs)}}function Qe(t,n){if(t&1){let e=O();i(0,"button",71),E("click",function(){let d=S(e).$implicit,s=m(5);return M(s.pickResult(d))}),p(1,"app-icon",72),i(2,"span",67),l(3),a(),i(4,"span",73),l(5),a()()}if(t&2){let e=n.$implicit,r=m(5);o(),k("size",12),o(2),_(e.name),o(2),_(r.fileName(e.filePath))}}function qe(t,n){if(t&1&&D(0,Qe,6,3,"button",70,ee),t&2){let e=m(2);K(e.callers)}}function Ue(t,n){t&1&&(i(0,"div",69),l(1,"No callers"),a())}function Xe(t,n){if(t&1){let e=O();i(0,"button",71),E("click",function(){let d=S(e).$implicit,s=m(5);return M(s.pickResult(d))}),p(1,"app-icon",72),i(2,"span",67),l(3),a(),i(4,"span",73),l(5),a()()}if(t&2){let e=n.$implicit,r=m(5);o(),k("size",12),o(2),_(e.name),o(2),_(r.fileName(e.filePath))}}function We(t,n){if(t&1&&D(0,Xe,6,3,"button",70,ee),t&2){let e=m(2);K(e.callees)}}function Ye(t,n){t&1&&(i(0,"div",69),l(1,"No callees"),a())}function Je(t,n){if(t&1&&(i(0,"div",59)(1,"div",61),l(2,"Callers "),i(3,"span",64),l(4),a()(),C(5,qe,2,0)(6,Ue,2,0,"div",69),a(),i(7,"div",59)(8,"div",61),l(9,"Callees "),i(10,"span",64),l(11),a()(),C(12,We,2,0)(13,Ye,2,0,"div",69),a()),t&2){let e=m();o(4),_(e.callers.length),o(),b(e.callers.length?5:6),o(6),_(e.callees.length),o(),b(e.callees.length?12:13)}}function Ze(t,n){if(t&1){let e=O();i(0,"button",74),p(1,"app-icon",75),l(2," Implement "),a(),i(3,"button",14),E("click",function(){S(e);let d=m(3);return M(d.navigateToDrift())}),l(4,"Fix"),a(),i(5,"button",76),l(6,"Relink"),a()}t&2&&(o(),k("size",13))}function et(t,n){if(t&1){let e=O();i(0,"button",74),p(1,"app-icon",77),l(2," Reveal in editor "),a(),i(3,"button",14),E("click",function(){S(e);let d=m(3);return M(d.navigateToSpecs())}),l(4,"Open Specs"),a()}t&2&&(o(),k("size",13))}function tt(t,n){if(t&1){let e=O();i(0,"div",45)(1,"div",46),p(2,"span",47),i(3,"div",48)(4,"div",49),l(5),a(),i(6,"div",50)(7,"span",51),l(8),a(),C(9,Fe,2,1,"span",51),a()(),i(10,"button",52),E("click",function(){S(e);let d=m(2);return M(d.clearSelection())}),p(11,"app-icon",53),a()(),i(12,"div",54),p(13,"app-icon",55),i(14,"span",56),l(15),a(),p(16,"app-copy-btn",57),a()(),i(17,"div",58),C(18,He,5,1,"div",59),C(19,$e,5,1,"div",59),C(20,Ae,7,1,"div",59),C(21,Je,14,4),a(),i(22,"div",60),C(23,Ze,7,1)(24,et,5,1),a()}if(t&2){let e=n,r=e.kind==="spec",d=m(2).detailColor(e);o(2),U("background",d)("box-shadow","0 0 8px "+d),Y("is-rect",r),o(3),_(e.name),o(2),U("color",d)("background","color-mix(in srgb, "+d+" 14%, transparent)"),o(),_(e.kind),o(),b(e.signature?9:-1),o(2),k("size",14),o(2),k("size",12),o(2),_(e.filePath),o(),k("text",e.filePath),o(2),b(e.signature?18:-1),o(),b(e.docstring?19:-1),o(),b(e.linkedSpecs&&e.linkedSpecs.length?20:-1),o(),b(r?-1:21),o(2),b(r?23:24)}}function nt(t,n){t&1&&(i(0,"span",82),l(1),a()),t&2&&(o(),X("",n.nodeCount.toLocaleString()," shown"))}function it(t,n){if(t&1&&(i(0,"div",85),p(1,"span",87),i(2,"span",88),l(3),a(),i(4,"span",89),l(5),a()()),t&2){let e=n.$implicit,r=m(3);o(),Q("data-kind",e),o(2),_(e),o(2),_(r.overviewKindCounts()[e])}}function at(t,n){t&1&&(i(0,"div",86),p(1,"app-state-pill",90)(2,"span",91)(3,"app-state-pill",92)(4,"span",91)(5,"app-state-pill",93)(6,"span",91),a())}function ot(t,n){if(t&1&&(i(0,"div",86),p(1,"app-state-pill",90),i(2,"span",94),l(3),a(),p(4,"app-state-pill",92),i(5,"span",94),l(6),a(),p(7,"app-state-pill",93),i(8,"span",94),l(9),a()()),t&2){let e,r,d,s=m(3);o(3),_(((e=s.health.state().data)==null||e.linkHealth==null?null:e.linkHealth.verified)??0),o(3),_(((r=s.health.state().data)==null||r.linkHealth==null?null:r.linkHealth.drifted)??0),o(3),_((((d=s.health.state().data)==null||d.linkHealth==null?null:d.linkHealth.broken)??0)+(((d=s.health.state().data)==null||d.linkHealth==null?null:d.linkHealth.orphaned)??0))}}function rt(t,n){t&1&&(i(0,"div",95),P(),i(1,"svg",96),p(2,"line",97),a(),G(),p(3,"span",98),a(),i(4,"div",95),P(),i(5,"svg",96),p(6,"line",99),a(),G(),p(7,"span",98),a(),i(8,"div",95),P(),i(9,"svg",96),p(10,"line",100),a(),G(),p(11,"span",98),a(),i(12,"div",95),P(),i(13,"svg",96),p(14,"line",101),a(),G(),p(15,"span",98),a())}function lt(t,n){if(t&1&&(i(0,"div",95),P(),i(1,"svg",96),p(2,"line",97),a(),G(),i(3,"span",102),l(4,"calls"),a(),i(5,"span",103),l(6),a()(),i(7,"div",95),P(),i(8,"svg",96),p(9,"line",99),a(),G(),i(10,"span",102),l(11,"implements / documents"),a(),i(12,"span",103),l(13),a()(),i(14,"div",95),P(),i(15,"svg",96),p(16,"line",100),a(),G(),i(17,"span",102),l(18,"tests"),a(),i(19,"span",103),l(20),a()(),i(21,"div",95),P(),i(22,"svg",96),p(23,"line",101),a(),G(),i(24,"span",102),l(25,"synthesized (heuristic)"),a(),i(26,"span",103),l(27),a()()),t&2){let e,r,d,s,g=m(3);o(6),_(((e=g.health.state().data)==null||e.edgeKinds==null?null:e.edgeKinds.calls)??0),o(7),_(((r=g.health.state().data)==null||r.edgeKinds==null?null:r.edgeKinds.implements)??0),o(7),_(((d=g.health.state().data)==null||d.edgeKinds==null?null:d.edgeKinds.tests)??0),o(7),_(((s=g.health.state().data)==null||s.edgeKinds==null?null:s.edgeKinds.synth)??0)}}function dt(t,n){t&1&&(i(0,"div",104),p(1,"span",105)(2,"span",106),a())}function st(t,n){t&1&&(i(0,"div",84)(1,"div",61),l(2,"Most connected"),a(),D(3,dt,3,0,"div",104,q),a()),t&2&&(o(3),K(de(0,ke)))}function pt(t,n){if(t&1){let e=O();i(0,"button",108),E("click",function(){let d=S(e).$implicit,s=m(4);return M(s.pickHub(d))}),p(1,"span",109),i(2,"span",110),l(3),a(),i(4,"span",111),l(5),a(),p(6,"app-icon",112),a()}if(t&2){let e=n.$implicit,r=m(4);Q("aria-label",e.name+", "+e.degree+" edges"),o(),U("background",r.nodeColor(e.kind))("border-radius",e.kind==="spec"?"2px":"50%"),o(2),_(e.name),o(2),X("",e.degree," edges"),o(),k("size",11)}}function ct(t,n){if(t&1&&(i(0,"div",84)(1,"div",61),l(2,"Most connected"),a(),D(3,pt,7,8,"button",107,ee),a()),t&2){let e=m(3);o(3),K(e.health.state().data.hubs.slice(0,8))}}function mt(t,n){if(t&1&&(i(0,"div",78),p(1,"app-icon",79),i(2,"span",80),l(3,"Graph overview"),a(),p(4,"div",81),C(5,nt,2,1,"span",82),a(),i(6,"div",58)(7,"p",83),l(8," Click any node to inspect its signature, links, callers and callees \u2014 without leaving this view. "),a(),i(9,"div",84)(10,"div",61),l(11,"Nodes by kind"),a(),D(12,it,6,3,"div",85,q),a(),i(14,"div",84)(15,"div",61),l(16,"Spec link health"),a(),C(17,at,7,0,"div",86)(18,ot,10,3,"div",86),a(),i(19,"div",84)(20,"div",61),l(21,"Edge types"),a(),C(22,rt,16,0)(23,lt,28,4),a(),C(24,st,5,1,"div",84)(25,ct,5,0,"div",84),a()),t&2){let e,r,d,s=m(2);o(),k("size",15),o(4),b((e=s.status.state().data)?5:-1,e),o(7),K(s.kindKeys),o(5),b(s.health.state().loading?17:18),o(5),b(s.health.state().loading?22:(r=s.health.state().data)!=null&&r.edgeKinds?23:-1),o(2),b(s.health.state().loading?24:!((d=s.health.state().data)==null||d.hubs==null)&&d.hubs.length?25:-1)}}function ut(t,n){if(t&1){let e=O();i(0,"div",1)(1,"div",2)(2,"div",3)(3,"app-segmented",4),E("change",function(d){S(e);let s=m();return M(s.onLayoutChange(d))}),a(),p(4,"div",5),D(5,Me,5,7,"button",6,q),p(7,"div",7),i(8,"div",8)(9,"div",9),p(10,"app-icon",10),i(11,"input",11),E("input",function(d){S(e);let s=m();return M(s.onSearchInput(d.target.value))}),a(),C(12,Ee,1,0,"span",12),a(),C(13,Ge,3,0,"div",13),a(),i(14,"button",14),E("click",function(){S(e);let d=m();return M(d.recenter())}),p(15,"app-icon",15),l(16," Recenter "),a()(),i(17,"div",16),C(18,ze,3,1)(19,De,3,0,"div",17)(20,Ke,5,1,"div",17)(21,Ne,3,1,"div",17)(22,Re,27,5),a()(),i(23,"aside",18),C(24,tt,25,22)(25,mt,26,5),a()()}if(t&2){let e,r=m();o(3),k("options",r.layoutOptions)("value",r.layoutMode()),o(2),K(r.kindKeys),o(5),k("size",13),o(),k("value",r.searchInput()),o(),b(r.searchResults.state().loading?12:-1),o(),b(r.searchResults.state().data&&r.searchResults.state().data.results.length>0?13:-1),o(2),k("size",13),o(3),b(r.selectedSymbol()?r.nodeDetail.state().loading?19:r.nodeDetail.state().error?20:r.selectedDetail()?22:21:18),o(6),b((e=r.selectedDetail())?24:25,e)}}var ve=class t{api=W(pe);projects=W(ce);router=W(se);status=j(this.api,()=>`/api/status${this.projects.projectQuery()}`);health=j(this.api,()=>`/api/graph/health${this.projects.projectQuery()}`);fullGraph=j(this.api,()=>`/api/graph/full?limit=250${this.projects.projectQuery("&")}`);layoutMode=H("hierarchical");layoutOptions=[{value:"hierarchical",label:"Hierarchical"},{value:"force",label:"Force"},{value:"anchored",label:"Anchored"}];searchInput=H("");searchQuery=H("");searchDebounce=null;searchResults=j(this.api,()=>{let n=this.searchQuery().trim();return n.length>=2?`/api/graph/search?q=${encodeURIComponent(n)}&limit=12${this.projects.projectQuery("&")}`:null});selectedSymbol=H(null);nodeDetail=j(this.api,()=>{let n=this.selectedSymbol();return n?`/api/graph/node?symbol=${encodeURIComponent(n)}${this.projects.projectQuery("&")}`:null});selectedDetail=I(()=>this.nodeDetail.state().data?.matches?.[0]??null);filters=H({code:!0,spec:!0,route:!0,test:!0});fitKey=H(0);canvasData=I(()=>{let n=this.selectedDetail();if(!n)return this.fullGraphData();let e=this.filters(),r=h=>{let y=J(h);return e[y]},d={id:n.id,label:n.name,sub:Z(n.filePath),kind:n.kind,x:0,y:0},s=(n.callers??[]).filter(h=>r(h.kind)),g=(n.callees??[]).filter(h=>r(h.kind)),w=(n.linkedSpecs??[]).filter(()=>e.spec),L=280,T=56,u=[d],z=[];return s.forEach((h,y)=>{let x=(y-(s.length-1)/2)*T;u.push(Ce(h,-L,x)),z.push({from:h.id,to:n.id,kind:"calls"})}),g.forEach((h,y)=>{let x=(y-(g.length-1)/2)*T;u.push(Ce(h,L,x)),z.push({from:n.id,to:h.id,kind:"calls"})}),w.forEach((h,y)=>{let x=(y-(w.length-1)/2)*220,c="spec:"+h.specId;u.push({id:c,label:h.specId,sub:h.specTitle??void 0,kind:"spec",state:h.state,x,y:-160}),z.push({from:c,to:n.id,kind:"implements"})}),{nodes:u,edges:z}});fullGraphData(){let n=this.fullGraph.state().data;if(!n?.nodes?.length)return{nodes:[],edges:[]};let e=this.filters(),r=n.nodes.filter(u=>e[J(u.kind)]),d=new Set(r.map(u=>u.id)),s=n.edges.filter(u=>d.has(u.from)&&d.has(u.to)),g=new Map(r.map(u=>[u.id,u.kind])),w=fe(this.layoutMode(),r.map(u=>({id:u.id,kind:u.kind})),s.map(u=>({from:u.from,to:u.to}))),L=r.map(u=>({id:u.id,label:u.name,sub:Z(u.filePath),kind:u.kind,x:w.get(u.id)?.x??0,y:w.get(u.id)?.y??0})),T=s.map(u=>({from:u.from,to:u.to,kind:u.provenance==="heuristic"?"synth":g.get(u.from)==="spec"||g.get(u.to)==="spec"?"implements":"calls"}));return{nodes:L,edges:T}}fullGraphActive=I(()=>!this.selectedSymbol()&&this.fullGraphData().nodes.length>0);fullGraphLoading=I(()=>!this.selectedSymbol()&&this.fullGraph.state().loading);fullGraphCounts=I(()=>{let n=this.fullGraph.state().data;return n?{shown:n.shown,total:n.total}:{shown:0,total:0}});visibleNodes=I(()=>this.canvasData().nodes);visibleEdges=I(()=>this.canvasData().edges);hiddenIds=I(()=>{let n=this.filters(),e=new Set;for(let r of this.canvasData().nodes)n[J(r.kind)]||e.add(r.id);return e});kindCounts=I(()=>{let n={code:0,spec:0,route:0,test:0};for(let e of this.canvasData().nodes)n[J(e.kind)]++;return n});overviewKindCounts=I(()=>{let n=this.status.state().data;if(!n?.nodesByKind)return{code:0,spec:0,route:0,test:0};let e=n.nodesByKind;return{code:(e.function??0)+(e.method??0)+(e.class??0)+(e.variable??0)+(e.constant??0)+(e.type_alias??0)+(e.interface??0)+(e.struct??0)+(e.enum??0)+(e.property??0)+(e.field??0)+(e.file??0)+(e.module??0)+(e.namespace??0)+(e.component??0),spec:e.spec??0,route:e.route??0,test:e.test??0}});kindKeys=["code","spec","route","test"];isFilterActive(n){return this.filters()[n]}countFor(n){return this.kindCounts()[n]}chipColor(n){switch(n){case"spec":return"var(--node-spec)";case"route":return"var(--node-route)";case"test":return"var(--node-test)";default:return"var(--node-code)"}}onSearchInput(n){this.searchInput.set(n),this.searchDebounce&&clearTimeout(this.searchDebounce),this.searchDebounce=setTimeout(()=>this.searchQuery.set(n),180)}pickResult(n){this.searchInput.set(n.name),this.searchQuery.set(""),this.selectedSymbol.set(n.name)}pickFromCanvas(n){let e=this.selectedDetail();if(!e){let s=this.fullGraph.state().data?.nodes.find(g=>g.id===n);s&&(this.selectedSymbol.set(s.name),this.fitKey.update(g=>g+1));return}if(n===e.id)return;let d=[...e.callers??[],...e.callees??[]].find(s=>s.id===n);d&&(this.selectedSymbol.set(d.name),this.fitKey.update(s=>s+1))}toggleFilter(n){this.filters.update(e=>ae(ie({},e),{[n]:!e[n]})),this.fitKey.update(e=>e+1)}recenter(){this.fitKey.update(n=>n+1)}clearSelection(){this.selectedSymbol.set(null),this.searchInput.set("")}onLayoutChange(n){this.layoutMode.set(n),this.fitKey.update(e=>e+1)}shortPath(n){return Z(n)}fileName(n){return n?n.split("/").pop()??"":""}kindLabel(n){return n.charAt(0).toUpperCase()+n.slice(1)}navigateToSpecs(){this.router.navigate(["/specs"])}navigateToDrift(){this.router.navigate(["/drift"])}nodeColor(n){return n==="spec"?"var(--node-spec)":n==="route"?"var(--node-route)":n==="test"?"var(--node-test)":"var(--node-code)"}pickHub(n){this.selectedSymbol.set(n.name),this.fitKey.update(e=>e+1)}detailColor(n){if(n.kind==="spec"){let e=n.linkedSpecs??[],r=e.some(s=>s.state==="broken"||s.state==="orphaned"),d=!r&&e.some(s=>s.state==="drifted");return r?"var(--error)":d?"var(--warn)":"var(--node-spec)"}return n.kind==="test"?"var(--node-test)":n.kind==="route"?"var(--node-route)":"var(--node-code)"}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=oe({type:t,selectors:[["app-graph"]],decls:2,vars:1,consts:[["surface","The graph"],[1,"gp-root"],[1,"gp-main"],[1,"gp-toolbar"],["size","sm",3,"change","options","value"],[1,"gp-divider"],["type","button",1,"gp-chip",3,"is-active","--chip-color"],[1,"gp-spacer"],[1,"gp-search"],[1,"gp-search-inner"],["name","search",1,"gp-search-icon",3,"size"],["type","text","placeholder","Fuzzy symbol search\u2026","aria-label","Symbol search",3,"input","value"],["aria-hidden","true",1,"gp-spinner"],["role","listbox",1,"gp-results"],["type","button",1,"btn","btn-secondary","btn-sm",3,"click"],["name","recenter",3,"size"],[1,"gp-canvas-wrap"],[1,"gp-empty"],[1,"gp-panel"],["type","button",1,"gp-chip",3,"click"],[1,"gp-chip-dot"],[1,"gp-chip-count"],["type","button",1,"gp-result"],["type","button",1,"gp-result",3,"click"],[1,"gp-result-dot"],[1,"gp-result-name","mono"],[1,"gp-result-kind"],[1,"gp-result-path","mono"],[3,"nodeClick","nodes","edges","selectedId","fitKey","hiddenIds"],[1,"gp-overview-note"],[1,"gp-stats"],[1,"gp-legend"],[1,"gp-legend-kinds"],[1,"gp-legend-item"],[1,"gp-legend-sep"],[1,"gp-legend-edges"],[1,"gp-legend-edge-row"],["width","16","height","8"],["x1","0","y1","4","x2","16","y2","4","stroke","var(--node-spec)","stroke-width","1.6"],[1,"secondary"],["x1","0","y1","4","x2","16","y2","4","stroke","var(--node-test)","stroke-width","1.6"],["x1","0","y1","4","x2","16","y2","4","stroke","var(--text-muted)","stroke-width","1.6"],["x1","0","y1","4","x2","16","y2","4","stroke","var(--text-muted)","stroke-width","1.6","stroke-dasharray","4 3"],[1,"gp-legend-dot"],[1,"secondary",2,"text-transform","capitalize"],[1,"gp-panel-header"],[1,"gp-panel-header-inner"],[1,"gp-node-dot"],[1,"grow",2,"min-width","0"],[1,"mono","gp-panel-name"],[1,"row","gap-6",2,"margin-top","3px"],[1,"pill"],["type","button","aria-label","Close panel",1,"btn","btn-ghost","btn-xs",3,"click"],["name","x",3,"size"],[1,"gp-panel-path","row","gap-6"],["name","folder",2,"color","var(--text-muted)","flex-shrink","0",3,"size"],[1,"mono","secondary","gp-path-text"],[3,"text"],[1,"gp-panel-body","scroll-y"],[1,"gp-section"],[1,"gp-panel-footer"],[1,"eyebrow","gp-eyebrow"],[1,"gp-code","mono"],[1,"secondary",2,"font-size","12px","line-height","1.6","margin","0"],[1,"muted",2,"font-weight","400","margin-left","5px"],[1,"gp-link-row"],[3,"state"],[1,"mono","grow","gp-link-text"],[1,"muted",2,"font-size","10px","flex-shrink","0","overflow","hidden","text-overflow","ellipsis","white-space","nowrap","max-width","120px"],[1,"muted",2,"font-size","12px","padding","4px 8px"],["type","button",1,"gp-node-link"],["type","button",1,"gp-node-link",3,"click"],["name","box",2,"color","var(--node-code)","flex-shrink","0",3,"size"],[1,"mono","muted","gp-link-file"],["type","button",1,"btn","btn-primary","btn-sm","grow",2,"justify-content","center"],["name","play",3,"size"],["type","button",1,"btn","btn-secondary","btn-sm"],["name","reveal",3,"size"],[1,"gp-panel-header","gp-overview-head"],["name","graph",2,"color","var(--accent)",3,"size"],[2,"font-weight","600","font-size","13.5px"],[1,"grow"],[1,"mono","muted",2,"font-size","11px"],[1,"secondary",2,"font-size","12px","line-height","1.55","margin","0 0 18px"],[1,"gp-section-plain"],[1,"gp-kind-row"],[1,"row","gap-6",2,"flex-wrap","wrap","align-items","center"],[1,"gp-kind-dot"],[1,"grow",2,"font-size","12.5px","text-transform","capitalize"],[1,"mono","tabular",2,"font-size","12.5px","font-weight","600"],["state","verified"],["aria-hidden","true",1,"gp-skel","gp-skel-sm"],["state","drifted"],["state","broken"],[1,"mono","tabular","muted",2,"font-size","11px","align-self","center"],[1,"gp-edge-row"],["width","20","height","8"],["x1","0","y1","4","x2","20","y2","4","stroke","var(--text-muted)","stroke-width","1.8"],["aria-hidden","true",1,"gp-skel","gp-skel-lg"],["x1","0","y1","4","x2","20","y2","4","stroke","var(--node-spec)","stroke-width","1.8"],["x1","0","y1","4","x2","20","y2","4","stroke","var(--node-test)","stroke-width","1.8"],["x1","0","y1","4","x2","20","y2","4","stroke","var(--text-muted)","stroke-width","1.8","stroke-dasharray","4 3"],[1,"grow","secondary",2,"font-size","12px"],[1,"mono","tabular","muted",2,"font-size","11px"],["aria-hidden","true",1,"gp-hub-row"],[1,"gp-hub-dot","gp-skel-dot"],["aria-hidden","true",1,"gp-skel","gp-skel-hub"],["type","button",1,"gp-hub-row"],["type","button",1,"gp-hub-row",3,"click"],[1,"gp-hub-dot"],[1,"mono","grow","gp-hub-name"],[1,"muted","gp-hub-degree"],["name","chevron-right",2,"color","var(--text-muted)","flex-shrink","0",3,"size"]],template:function(e,r){e&1&&C(0,Se,1,0,"app-pick-project-empty",0)(1,ut,26,9,"div",1),e&2&&b(r.status.state().noProject?0:1)},dependencies:[ge,_e,me,ue,he,xe],styles:["[_nghost-%COMP%]{display:contents}.gp-root[_ngcontent-%COMP%]{flex:1;display:flex;min-height:0;min-width:0}.gp-main[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column}.gp-toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:9px 14px;border-bottom:1px solid var(--border-subtle);background:var(--bg-panel-2, var(--bg-panel));flex-wrap:wrap;flex-shrink:0}.gp-divider[_ngcontent-%COMP%]{width:1px;height:20px;background:var(--border-subtle);flex-shrink:0}.gp-chip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:999px;font-size:11.5px;font-weight:500;cursor:pointer;border:1px solid var(--border-subtle);background:var(--bg-panel);color:var(--text-secondary);transition:all .1s}.gp-chip.is-active[_ngcontent-%COMP%]{border-color:transparent;background:color-mix(in srgb,var(--chip-color, var(--accent)) 22%,var(--bg-panel));color:var(--chip-color, var(--accent))}.gp-chip-dot[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%}.gp-chip-dot[data-kind=code][_ngcontent-%COMP%]{background:var(--node-code)}.gp-chip-dot[data-kind=spec][_ngcontent-%COMP%]{background:var(--node-spec);border-radius:2px}.gp-chip-dot[data-kind=route][_ngcontent-%COMP%]{background:var(--node-route)}.gp-chip-dot[data-kind=test][_ngcontent-%COMP%]{background:var(--node-test)}.gp-chip-count[_ngcontent-%COMP%]{font-size:10.5px;color:var(--text-muted);font-variant-numeric:tabular-nums}.gp-spacer[_ngcontent-%COMP%]{flex:1}.gp-search[_ngcontent-%COMP%]{position:relative;flex-shrink:0}.gp-search-inner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;height:28px;padding:0 10px;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:7px;width:220px}.gp-search-inner[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1;background:transparent;border:none;outline:none;color:var(--text-primary);font-size:12px;font-family:var(--font-mono)}.gp-search-icon[_ngcontent-%COMP%]{color:var(--text-muted);flex-shrink:0}.gp-spinner[_ngcontent-%COMP%]{width:12px;height:12px;border:2px solid var(--border-subtle);border-top-color:var(--accent);border-radius:50%;animation:_ngcontent-%COMP%_gp-spin .7s linear infinite;flex-shrink:0}@keyframes _ngcontent-%COMP%_gp-spin{to{transform:rotate(360deg)}}.gp-results[_ngcontent-%COMP%]{position:absolute;top:32px;left:0;right:0;background:var(--bg-elevated);border:1px solid var(--border-strong);border-radius:8px;box-shadow:var(--shadow-pop, 0 12px 28px rgba(0, 0, 0, .5));padding:5px;z-index:30;max-height:320px;overflow-y:auto}.gp-result[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border-radius:5px;background:transparent;border:none;cursor:pointer;font:inherit;color:var(--text-primary);text-align:left}.gp-result[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.gp-result-dot[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%;background:var(--node-code);flex-shrink:0}.gp-result-dot.is-spec[_ngcontent-%COMP%]{background:var(--node-spec);border-radius:2px}.gp-result-dot.is-route[_ngcontent-%COMP%]{background:var(--node-route)}.gp-result-dot.is-test[_ngcontent-%COMP%]{background:var(--node-test)}.gp-result-name[_ngcontent-%COMP%]{font-size:12px;flex-shrink:0}.gp-result-kind[_ngcontent-%COMP%]{font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.gp-result-path[_ngcontent-%COMP%]{flex:1;text-align:right;font-size:10px;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gp-canvas-wrap[_ngcontent-%COMP%]{flex:1;min-height:0;position:relative;display:flex}.gp-canvas-wrap[_ngcontent-%COMP%] app-graph-canvas[_ngcontent-%COMP%]{flex:1;min-height:0}.gp-empty[_ngcontent-%COMP%]{flex:1;display:grid;place-items:center;text-align:center;padding:60px 24px;background:var(--bg-canvas-2, var(--bg-canvas))}.gp-empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:18px;font-weight:600;margin:0 0 8px}.gp-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--text-secondary);font-size:13.5px;line-height:1.6;margin:0;max-width:520px}.gp-stats[_ngcontent-%COMP%]{margin-top:18px!important;font-family:var(--font-mono);font-size:11.5px!important;color:var(--text-muted)!important}.gp-legend[_ngcontent-%COMP%]{position:absolute;top:14px;left:14px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;max-width:70%;background:color-mix(in srgb,var(--bg-panel) 86%,transparent);border:1px solid var(--border-subtle);border-radius:8px;padding:6px 10px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);font-size:11px;pointer-events:none;z-index:3}.gp-legend-kinds[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.gp-legend-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.gp-legend-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.gp-legend-dot[data-kind=code][_ngcontent-%COMP%]{background:var(--node-code)}.gp-legend-dot[data-kind=spec][_ngcontent-%COMP%]{background:var(--node-spec);border-radius:2px}.gp-legend-dot[data-kind=route][_ngcontent-%COMP%]{background:var(--node-route)}.gp-legend-dot[data-kind=test][_ngcontent-%COMP%]{background:var(--node-test)}.gp-legend-sep[_ngcontent-%COMP%]{width:1px;height:16px;background:var(--border-subtle);flex-shrink:0}.gp-legend-edges[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.gp-legend-edge-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.gp-panel[_ngcontent-%COMP%]{width:360px;flex-shrink:0;border-left:1px solid var(--border-subtle);background:var(--bg-panel);display:flex;flex-direction:column;overflow:hidden}.gp-panel-header[_ngcontent-%COMP%]{padding:12px 14px;border-bottom:1px solid var(--border-subtle);flex-shrink:0}.gp-panel-header-inner[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:8px}.gp-overview-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.gp-node-dot[_ngcontent-%COMP%]{width:9px;height:9px;border-radius:50%;flex-shrink:0;margin-top:5px}.gp-node-dot.is-rect[_ngcontent-%COMP%]{border-radius:2px}.gp-panel-name[_ngcontent-%COMP%]{font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gp-panel-path[_ngcontent-%COMP%]{margin-top:8px;font-size:11.5px;color:var(--text-secondary)}.gp-path-text[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.gp-panel-body[_ngcontent-%COMP%]{flex:1;padding:14px;overflow-y:auto;display:flex;flex-direction:column;gap:18px}.gp-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.gp-section-plain[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.gp-eyebrow[_ngcontent-%COMP%]{font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:6px}.gp-code[_ngcontent-%COMP%]{margin:0;font-size:11.5px;line-height:1.6;color:var(--text-secondary);background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:7px;padding:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word}.gp-link-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;border:1px solid var(--border-subtle);margin-bottom:5px;font-size:11.5px}.gp-link-text[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px}.gp-node-link[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:5px 8px;border-radius:6px;border:none;background:transparent;cursor:pointer;font:inherit;color:inherit;text-align:left;font-size:12px}.gp-node-link[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.gp-link-file[_ngcontent-%COMP%]{font-size:10px;flex-shrink:0}.gp-edge-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:4px 0}.gp-kind-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:5px 0}.gp-kind-dot[_ngcontent-%COMP%]{width:9px;height:9px;border-radius:50%;flex-shrink:0}.gp-kind-dot[data-kind=code][_ngcontent-%COMP%]{background:var(--node-code);box-shadow:0 0 6px var(--node-code)}.gp-kind-dot[data-kind=spec][_ngcontent-%COMP%]{background:var(--node-spec);border-radius:2px;box-shadow:0 0 6px var(--node-spec)}.gp-kind-dot[data-kind=route][_ngcontent-%COMP%]{background:var(--node-route);box-shadow:0 0 6px var(--node-route)}.gp-kind-dot[data-kind=test][_ngcontent-%COMP%]{background:var(--node-test);box-shadow:0 0 6px var(--node-test)}.gp-panel-footer[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:12px 14px;border-top:1px solid var(--border-subtle);flex-shrink:0}.gp-hub-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:5px 8px;border-radius:6px;border:none;background:transparent;cursor:pointer;font:inherit;color:inherit;text-align:left}.gp-hub-row[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.gp-hub-dot[_ngcontent-%COMP%]{width:8px;height:8px;flex-shrink:0}.gp-hub-name[_ngcontent-%COMP%]{font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gp-hub-degree[_ngcontent-%COMP%]{font-size:10.5px;color:var(--text-muted);flex-shrink:0;font-variant-numeric:tabular-nums}@keyframes _ngcontent-%COMP%_gp-skel-pulse{0%,to{opacity:.35}50%{opacity:.7}}.gp-skel[_ngcontent-%COMP%]{display:inline-block;background:var(--border-subtle);border-radius:4px;animation:_ngcontent-%COMP%_gp-skel-pulse 1.4s ease-in-out infinite}.gp-skel-sm[_ngcontent-%COMP%]{width:24px;height:12px}.gp-skel-lg[_ngcontent-%COMP%]{width:80px;height:12px;flex:1}.gp-skel-hub[_ngcontent-%COMP%]{width:120px;height:12px;flex:1}.gp-skel-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;flex-shrink:0;background:var(--border-subtle);animation:_ngcontent-%COMP%_gp-skel-pulse 1.4s ease-in-out infinite}.grow[_ngcontent-%COMP%]{flex:1}.muted[_ngcontent-%COMP%]{color:var(--text-muted)}.mono[_ngcontent-%COMP%]{font-family:var(--font-mono)}.gp-overview-note[_ngcontent-%COMP%]{position:absolute;bottom:12px;left:50%;transform:translate(-50%);padding:5px 12px;border-radius:999px;background:var(--bg-elevated);border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:11px;white-space:nowrap;pointer-events:none;box-shadow:var(--shadow-pop)}"],changeDetection:0})};function Ce(t,n,e){return{id:t.id,label:t.name,sub:Z(t.filePath),kind:t.kind,x:n,y:e}}function Z(t){return t?t.split("/").slice(-2).join("/"):""}function J(t){return t==="spec"?"spec":t==="route"?"route":t==="test"?"test":"code"}export{ve as Graph};
@@ -1,4 +0,0 @@
1
- import{a as gt}from"./chunk-V74ZPP4B.js";import{a as Z}from"./chunk-NKPK3BR3.js";import{a as ut}from"./chunk-G7VZT5KB.js";import{a as xt}from"./chunk-JLOJCDIY.js";import{a as mt}from"./chunk-P62EJGSF.js";import{a as _t}from"./chunk-PZSU53SS.js";import{a as rt,c as lt,d as st}from"./chunk-DOKZOFKM.js";import{b as dt,c as Y}from"./chunk-DTWIJ3GJ.js";import"./chunk-JGDK6YKG.js";import{a as pt}from"./chunk-TWVVIWKO.js";import{Aa as d,Ga as N,I as F,Ia as M,Ka as p,M as k,N as S,R as K,Ta as C,Ua as q,Va as l,W as V,Wa as u,X as j,Xa as g,Ya as H,Za as nt,aa as L,bb as it,ea as o,gb as z,ib as $,ka as X,lb as h,qa as U,ra as m,sa as _,ta as tt,ua as et,va as O,vb as ot,wa as D,xa as c,ya as r,yb as at,za as a,zb as ct}from"./chunk-SYGIPC2P.js";import"./chunk-Q7L6LLAK.js";function Pt(n){return n>=85?{label:"Excellent",color:"var(--success)"}:n>=70?{label:"Good",color:"var(--node-route)"}:n>=50?{label:"Fair",color:"var(--warn)"}:{label:"Needs work",color:"var(--error)"}}function wt(n){let e=(n.input_tokens||0)+(n.cache_creation_tokens||0)+(n.cache_read_tokens||0);return e>0?(n.cache_read_tokens||0)/e:0}function Mt(n,e){let t=n.toLowerCase();return/grep|call site|every/.test(t)?`Use \`specship_search '${e||"<symbol>"}' --kind call-site\` instead of grep \u2014 it returns just the qualified call sites.`:/read|explain|map|where|how |why |walk|boundaries|module/.test(t)?`Use \`specship_explore --symbol ${e||"<symbol>"} --depth 2\` and summarize callers, callees and linked specs \u2014 avoid re-reading the file.`:/implement/.test(t)&&!/REQ-[A-Z]+-\d+/.test(n)?`Reference the requirement id: \`Implement REQ-\u2026: ${n.slice(0,48)}\u2026\` then plan before editing.`:e?null:`${n} \u2014 name the exact symbol, file or REQ id so it can be resolved structurally.`}function Tt(n){return n.is_specship===1||/specship_/.test(n.tool_name)||/^mcp__/.test(n.tool_name)}function Et(n){return(n.tool_name==="Bash"||n.tool_name==="Grep"||n.tool_name==="Read")&&(n.result_length||0)>3e4}function J(n,e){let t=n.text||"",i=(t.match(/[a-z][a-zA-Z]+[A-Z][a-zA-Z]+/)||[])[0],s=(t.match(/[\w/]+\.(ts|tsx|js|md)/)||[])[0],f=(t.match(/REQ-[A-Z]+-\d+/)||[])[0]||i||s,T=!!f,b=/^(read |grep |look |check |explain |tell me|why |what )/i.test(t.trim()),E=t.length>=45&&!b||t.length>=72,B=e.some(Et),A=e.some(Tt),R=wt(n)>=.5,P=62,I=[];I.push({label:"Names a concrete target",ok:T}),P+=T?12:-10,I.push({label:"Scoped & specific",ok:E}),P+=E?10:-9,I.push({label:"Cache-friendly",ok:R}),P+=R?8:-10,I.push({label:"Structural over brute-force",ok:A||!B}),P+=A||!B?9:-13,P=Math.max(14,Math.min(98,Math.round(P)));let w=[];T||w.push({sev:"warn",text:"Name the exact symbol, file or REQ id so the agent doesn\u2019t have to search for it first."}),E||w.push({sev:"warn",text:"Lead with the concrete change you want rather than an open-ended question."}),B&&!A&&w.push({sev:"error",text:"This turn leaned on Read/grep and pulled a lot of tokens. Ask for a structural query instead.",fix:`specship_explore --symbol ${i||"<name>"} --depth 2`}),R||w.push({sev:"warn",text:"Cache hit was low \u2014 keep a stable prompt prefix and avoid reordering context to reuse the 1h cache."}),w.length===0&&w.push({sev:"info",text:"Well-formed prompt \u2014 specific, scoped and cache-friendly. Nothing to change."});let Q=P<72?Mt(t,f):null,G=Pt(P);return{score:P,label:G.label,color:G.color,factors:I,suggestions:w,rewrite:Q}}function vt(n){return`Prompt quality: ${n.label} (${n.score}/100)
2
- `+n.suggestions.map(e=>`- ${e.text}${e.fix?` [${e.fix}]`:""}`).join(`
3
- `)+(n.rewrite?`
4
- Suggested rewrite: ${n.rewrite}`:"")}var Ot=()=>["/sessions"],Dt=(n,e)=>e.label,ht=(n,e)=>e.id,bt=(n,e)=>e.prompt.id,ft=(n,e)=>e.name;function It(n,e){if(n&1&&(r(0,"app-pill",7),l(1),a()),n&2){let t=p();c("color","var(--node-spec)")("bg","var(--node-spec-soft)"),o(),u(t.session().last_model)}}function zt(n,e){if(n&1&&l(0),n&2){let t=p(),i=p();nt(" \xB7 ",i.fmtClock(t.started_at)," \u2013 ",i.fmtClock(t.ended_at)," (",i.fmtDurationSec(t.started_at,t.ended_at),") ")}}function $t(n,e){if(n&1&&(r(0,"div",10),l(1),m(2,zt,1,3),a()),n&2){let t=e;o(),g("",t.project_path," "),o(),_(t.started_at&&t.ended_at?2:-1)}}function Rt(n,e){n&1&&(r(0,"div",14),l(1,"Loading session\u2026"),a())}function Ft(n,e){if(n&1){let t=N();r(0,"div",15)(1,"div",17),l(2,"Couldn't load session"),a(),r(3,"div",18),l(4),a(),r(5,"button",19),M("click",function(){k(t);let s=p();return S(s.forceRefresh())}),l(6,"Retry"),a()()}if(n&2){let t,i=p();o(4),u((t=i.resource.state().error)==null?null:t.message)}}function qt(n,e){if(n&1&&(r(0,"app-pill",25),d(1,"app-icon",56),l(2),a()),n&2){let t=p();o(),c("size",10),o(),u(t.slashCommand)}}function Bt(n,e){n&1&&(r(0,"app-pill",26),d(1,"app-icon",57),l(2,"subagent"),a()),n&2&&(o(),c("size",10))}function Nt(n,e){if(n&1&&(r(0,"span",31),l(1),a()),n&2){let t=p();o(),u(t.prompt.model)}}function At(n,e){if(n&1&&(r(0,"span",31),l(1),a()),n&2){let t=p(),i=p(2);o(),u(i.fmtDurationMs(t.prompt.durationMs))}}function Vt(n,e){if(n&1&&(r(0,"div",68),d(1,"app-icon",72),r(2,"span",73),l(3),a()()),n&2){let t=e.$implicit;o(),C("color",t.ok?"var(--success)":"var(--warn)"),c("name",t.ok?"check":"minus")("size",13),o(),q("bad",!t.ok),o(),u(t.label)}}function Lt(n,e){if(n&1&&(r(0,"div",76)(1,"code",77),l(2),a(),d(3,"app-copy-btn",50),a()),n&2){let t=p().$implicit;o(2),u(t.fix),o(),c("text",t.fix)}}function Ht(n,e){if(n&1&&(r(0,"div",71),d(1,"span",74),r(2,"div",27)(3,"div",75),l(4),a(),m(5,Lt,4,2,"div",76),a()()),n&2){let t=e.$implicit;o(),C("background",t.sev==="error"?"var(--error)":t.sev==="warn"?"var(--warn)":"var(--success)"),o(3),u(t.text),o(),_(t.fix?5:-1)}}function Qt(n,e){if(n&1&&(r(0,"div",69),l(1,"Suggested rewrite"),a(),r(2,"div",78)(3,"span",79),l(4),a(),d(5,"app-copy-btn",50),a()),n&2){let t=p();o(4),u(t.rewrite),o(),c("text",t.rewrite)}}function Gt(n,e){if(n&1&&(r(0,"div",58)(1,"div",59),d(2,"app-icon",60),r(3,"span",61),l(4,"Prompt quality"),a(),d(5,"span",27),r(6,"span",62),l(7),r(8,"span",63),l(9),a()(),d(10,"app-copy-btn",64),a(),r(11,"div",65),d(12,"app-bar",66),a(),r(13,"div",67),O(14,Vt,4,7,"div",68,Dt),a(),r(16,"div",69),l(17,"How to improve"),a(),r(18,"div",70),O(19,Ht,6,4,"div",71,tt),a(),m(21,Qt,6,2),a()),n&2){let t=e,i=p(3);C("border-color","color-mix(in srgb, "+t.color+" 32%, transparent)")("background","color-mix(in srgb, "+t.color+" 6%, var(--bg-canvas))"),o(2),C("color",t.color),c("size",14),o(4),C("color",t.color)("background","color-mix(in srgb, "+t.color+" 15%, transparent)"),o(),g("",t.label," \xB7 "),o(2),g("",t.score,"/100"),o(),c("text",i.qualityShareText()),o(2),c("frac",t.score/100)("color",t.color)("height",6),o(2),D(t.factors),o(5),D(t.suggestions),o(2),_(t.rewrite?21:-1)}}function Wt(n,e){if(n&1&&d(0,"app-copy-btn",50),n&2){let t=p();c("text",t.prompt.text)}}function jt(n,e){if(n&1&&d(0,"div",52),n&2){let t=p(),i=p(2);c("innerHTML",i.renderAssistant(t.prompt.assistant_text),L)}}function Ut(n,e){n&1&&(r(0,"div",53),l(1,"No assistant text captured for this turn."),a())}function Yt(n,e){if(n&1&&(r(0,"details",54)(1,"summary",80),l(2,"Extended thinking"),a(),d(3,"div",81),a()),n&2){let t=p(),i=p(2);o(3),c("innerHTML",i.renderAssistant(t.prompt.thinking_text),L)}}function Zt(n,e){if(n&1&&(r(0,"span",85),l(1),a()),n&2){let t=p().$implicit;o(),u(t.input_summary)}}function Jt(n,e){if(n&1&&(r(0,"span",86),l(1),a()),n&2){let t=p().$implicit,i=p(4);o(),u(i.fmtBytes(t.result_length))}}function Kt(n,e){if(n&1&&(r(0,"div",83)(1,"span",84),l(2),a(),m(3,Zt,2,1,"span",85),d(4,"span",27),m(5,Jt,2,1,"span",86),a()),n&2){let t=e.$implicit,i=p(4);o(),C("color",i.toolColor(t.tool_name)),o(),u(t.tool_name),o(),_(t.input_summary?3:-1),o(2),_(t.result_length?5:-1)}}function Xt(n,e){if(n&1&&(r(0,"div",34),l(1),a(),r(2,"div",82),O(3,Kt,6,5,"div",83,ht),a()),n&2){let t=p(),i=p(2);o(),H("Tools \xB7 ",t.tools.length," \xB7 returned ",i.fmtBytes(t.toolBytes)),o(2),D(t.tools)}}function te(n,e){if(n&1){let t=N();r(0,"div",20)(1,"div",22)(2,"button",23),M("click",function(){k(t);let s=p(2);return S(s.closePrompt())}),d(3,"app-icon",3),l(4," Timeline "),a(),r(5,"span",24),l(6),a(),m(7,qt,3,2,"app-pill",25),m(8,Bt,3,1,"app-pill",26),d(9,"span",27),r(10,"button",28),M("click",function(){k(t);let s=p(2);return S(s.stepPrompt(-1))}),d(11,"app-icon",3),l(12," Prev"),a(),r(13,"button",28),M("click",function(){k(t);let s=p(2);return S(s.stepPrompt(1))}),l(14,"Next "),d(15,"app-icon",29),a()(),r(16,"div",30)(17,"span",31),l(18),a(),r(19,"span",31),l(20),a(),m(21,Nt,2,1,"span",31),r(22,"span",31),d(23,"app-icon",32),l(24),a(),m(25,At,2,1,"span",31),a(),m(26,Gt,22,18,"div",33),r(27,"div",34),l(28,"Token breakdown"),a(),r(29,"div",35),d(30,"div",36)(31,"div",37)(32,"div",38)(33,"div",39),a(),r(34,"div",40)(35,"span",41),d(36,"span",42),l(37),a(),r(38,"span",41),d(39,"span",43),l(40),a(),r(41,"span",41),d(42,"span",44),l(43),a(),r(44,"span",41),d(45,"span",45),l(46),a()(),r(47,"div",46)(48,"div",47)(49,"div",48)(50,"span",49),l(51,"Input"),a(),d(52,"span",27),m(53,Wt,1,1,"app-copy-btn",50),a(),r(54,"pre",51),l(55),a()(),r(56,"div",47)(57,"div",48)(58,"span",49),l(59,"Output"),a()(),m(60,jt,1,1,"div",52)(61,Ut,2,0,"div",53),a()(),m(62,Yt,4,1,"details",54),m(63,Xt,5,2),d(64,"div",55),a()}if(n&2){let t,i=e,s=p(2);o(3),c("size",14),o(3),u(s.fmtClock(i.prompt.ts)),o(),_(i.slashCommand?7:-1),o(),_(i.prompt.is_sidechain===1?8:-1),o(2),c("disabled",!s.hasPrevPrompt()),o(),c("size",13),o(2),c("disabled",!s.hasNextPrompt()),o(2),c("size",13),o(3),g("",s.fmtTokens(i.totalTokens)," tok"),o(),C("color",i.prompt.cost_usd>2.5?"var(--error)":"var(--text-primary)"),o(),g("$",i.prompt.cost_usd.toFixed(2)),o(),_(i.prompt.model?21:-1),o(2),c("size",10),o(),g(" ",i.tools.length," tools"),o(),_(i.prompt.durationMs?25:-1),o(),_((t=s.quality())?26:-1,t),o(4),C("width",s.promptTokPct(i.prompt,"input"),"%"),c("title","Input: "+s.fmtTokens(i.prompt.input_tokens)),o(),C("width",s.promptTokPct(i.prompt,"output"),"%"),c("title","Output: "+s.fmtTokens(i.prompt.output_tokens)),o(),C("width",s.promptTokPct(i.prompt,"cacheWrite"),"%"),c("title","Cache write: "+s.fmtTokens(i.prompt.cache_creation_tokens)),o(),C("width",s.promptTokPct(i.prompt,"cacheRead"),"%"),c("title","Cache read: "+s.fmtTokens(i.prompt.cache_read_tokens)),o(4),g("Input ",s.fmtTokens(i.prompt.input_tokens)),o(3),g("Output ",s.fmtTokens(i.prompt.output_tokens)),o(3),g("Cache write ",s.fmtTokens(i.prompt.cache_creation_tokens)),o(3),g("Cache read ",s.fmtTokens(i.prompt.cache_read_tokens)),o(7),_(i.prompt.text?53:-1),o(2),u(i.prompt.text||"(assistant-only turn)"),o(5),_(i.prompt.assistant_text?60:61),o(2),_(i.prompt.thinking_text?62:-1),o(),_(i.tools.length?63:-1)}}function ee(n,e){n&1&&(r(0,"app-pill",118),d(1,"app-icon",57),l(2,"subagent "),a()),n&2&&(c("color","var(--node-route)")("bg","var(--node-route-soft)"),o(),c("size",10))}function ne(n,e){if(n&1&&d(0,"app-icon",119),n&2){let t=p().$implicit;c("size",12)("title",t.slashCommand)}}function ie(n,e){if(n&1&&l(0),n&2){let t=p().$implicit;g(" ",t.prompt.text.length>140?t.prompt.text.slice(0,140)+"\u2026":t.prompt.text," ")}}function oe(n,e){n&1&&(r(0,"span",121),l(1,"(assistant-only turn)"),a())}function ae(n,e){if(n&1&&(r(0,"span",122),l(1),a()),n&2){let t=p().$implicit;c("title","SpecShip \xB7 spent ~"+t.specshipSpendTokens+" tok \xB7 est. saved ~"+t.specshipSavedTokens+" tok"),o(),g("SS ~",t.specshipSpendTokens," tok")}}function re(n,e){if(n&1&&(r(0,"span",126),l(1),a()),n&2){let t=p().$implicit,i=p(3);o(),u(i.fmtDurationMs(t.prompt.durationMs))}}function le(n,e){if(n&1&&(r(0,"section",134)(1,"div",135),l(2,"User prompt"),a(),r(3,"pre",141),l(4),a()()),n&2){let t=p(2).$implicit;o(4),u(t.prompt.text)}}function se(n,e){if(n&1&&(r(0,"section",134)(1,"div",135),l(2,"Assistant response"),a(),d(3,"div",142),a()),n&2){let t=p(2).$implicit,i=p(3);o(3),c("innerHTML",i.renderAssistant(t.prompt.assistant_text),L)}}function pe(n,e){if(n&1&&(r(0,"section",134)(1,"details",143)(2,"summary",144),l(3," Extended thinking "),r(4,"span",145),l(5,"(click to expand)"),a()(),d(6,"div",146),a()()),n&2){let t=p(2).$implicit,i=p(3);o(6),c("innerHTML",i.renderAssistant(t.prompt.thinking_text),L)}}function de(n,e){if(n&1&&(r(0,"div",137)(1,"div",138),l(2,"Duration"),a(),r(3,"div",139),l(4),a()()),n&2){let t=p(2).$implicit,i=p(3);o(4),u(i.fmtDurationMs(t.prompt.durationMs))}}function ce(n,e){if(n&1&&(r(0,"div",137)(1,"div",138),l(2,"Model"),a(),r(3,"div",139),l(4),a()()),n&2){let t=p(2).$implicit;o(4),u(t.prompt.model)}}function me(n,e){if(n&1&&(r(0,"div",148)(1,"span",149),l(2),a()()),n&2){let t=e.$implicit;c("title",t),o(2),u(t)}}function _e(n,e){if(n&1&&(r(0,"section",134)(1,"div",135),l(2),a(),r(3,"div",147),O(4,me,3,2,"div",148,et),a()()),n&2){let t=p(2).$implicit;o(2),g("Files touched \xB7 ",t.filesTouched.length),o(2),D(t.filesTouched)}}function ue(n,e){n&1&&l(0," \u203A ")}function xe(n,e){if(n&1&&(r(0,"span",155),l(1),a()),n&2){let t=p().$implicit;o(),u(t.input_summary)}}function ge(n,e){if(n&1&&(r(0,"span",156),l(1),a()),n&2){let t=p().$implicit,i=p(6);o(),u(i.fmtBytes(t.result_length))}}function ve(n,e){if(n&1&&(r(0,"pre",157),l(1),a()),n&2){let t=p().$implicit,i=p(6);o(),u(i.formatToolInput(t.input_json))}}function fe(n,e){if(n&1){let t=N();r(0,"div",151)(1,"button",152),M("click",function(){let s=k(t).$implicit,x=p(6);return S(x.toggleToolInput(s.id))}),r(2,"span",153),m(3,ue,1,0),a(),r(4,"span",154),l(5),a(),m(6,xe,2,1,"span",155),d(7,"span",27),m(8,ge,2,1,"span",156),a(),m(9,ve,2,1,"pre",157),a()}if(n&2){let t=e.$implicit,i=p(6);o(),q("has-input",!!t.input_json)("expanded",i.isToolInputExpanded(t.id)),c("disabled",!t.input_json),U("aria-expanded",i.isToolInputExpanded(t.id)),o(),q("open",i.isToolInputExpanded(t.id)),o(),_(t.input_json?3:-1),o(),C("color",i.toolColor(t.tool_name)),o(),u(t.tool_name),o(),_(t.input_summary?6:-1),o(2),_(t.result_length?8:-1),o(),_(t.input_json&&i.isToolInputExpanded(t.id)?9:-1)}}function Ce(n,e){if(n&1&&(r(0,"section",134)(1,"div",135),l(2),a(),r(3,"div",150),O(4,fe,10,15,"div",151,ht),a()()),n&2){let t=p(2).$implicit,i=p(3);o(2),H("Tool calls \xB7 ",t.tools.length," \xB7 returned ",i.fmtBytes(t.toolBytes)),o(2),D(t.tools)}}function he(n,e){if(n&1&&(r(0,"div",133),m(1,le,5,1,"section",134),m(2,se,4,1,"section",134),m(3,pe,7,1,"section",134),r(4,"section",134)(5,"div",135),l(6,"Token breakdown"),a(),r(7,"div",136)(8,"div",137)(9,"div",138),l(10,"Input"),a(),r(11,"div",139),l(12),a()(),r(13,"div",137)(14,"div",138),l(15,"Output"),a(),r(16,"div",139),l(17),a()(),r(18,"div",137)(19,"div",138),l(20,"Cache write"),a(),r(21,"div",139),l(22),a()(),r(23,"div",137)(24,"div",138),l(25,"Cache read"),a(),r(26,"div",139),l(27),a()(),r(28,"div",137)(29,"div",138),l(30,"Cost"),a(),r(31,"div",140),l(32),a()(),m(33,de,5,1,"div",137),m(34,ce,5,1,"div",137),a()(),m(35,_e,6,1,"section",134),m(36,Ce,6,2,"section",134),a()),n&2){let t=p().$implicit,i=p(3);o(),_(t.prompt.text?1:-1),o(),_(t.prompt.assistant_text?2:-1),o(),_(t.prompt.thinking_text?3:-1),o(9),u(i.fmtTokens(t.prompt.input_tokens)),o(5),u(i.fmtTokens(t.prompt.output_tokens)),o(5),u(i.fmtTokens(t.prompt.cache_creation_tokens)),o(5),u(i.fmtTokens(t.prompt.cache_read_tokens)),o(5),g("$",t.prompt.cost_usd.toFixed(4)),o(),_(t.prompt.durationMs?33:-1),o(),_(t.prompt.model?34:-1),o(),_(t.filesTouched.length>0?35:-1),o(),_(t.tools.length>0?36:-1)}}function be(n,e){if(n&1){let t=N();r(0,"div",97)(1,"div",115),M("click",function(){let s=k(t).$implicit,x=p(3);return S(x.toggleExpand(s.prompt.id))})("keydown.enter",function(){let s=k(t).$implicit,x=p(3);return S(x.toggleExpand(s.prompt.id))})("keydown.space",function(s){let x=k(t).$implicit,f=p(3);return s.preventDefault(),S(f.toggleExpand(x.prompt.id))}),r(2,"span",116),l(3),a(),d(4,"span",117),m(5,ee,3,3,"app-pill",118),m(6,ne,1,2,"app-icon",119),r(7,"span",120),m(8,ie,1,1)(9,oe,2,0,"span",121),a(),m(10,ae,2,2,"span",122),r(11,"span",123),d(12,"app-icon",124),r(13,"span",125),l(14),a()(),m(15,re,2,1,"span",126),r(16,"span",127),l(17),a(),r(18,"span",128),l(19),z(20,"number"),a(),r(21,"span",129),l(22),a(),r(23,"button",130),M("click",function(s){let x=k(t).$implicit,f=p(3);return s.stopPropagation(),S(f.openPrompt(x.prompt.id))}),d(24,"app-icon",131),a(),d(25,"app-icon",132),a(),m(26,he,37,12,"div",133),a()}if(n&2){let t=e.$implicit,i=p(3);o(),q("expanded",i.isExpanded(t.prompt.id)),U("aria-expanded",i.isExpanded(t.prompt.id)),o(2),u(i.fmtClock(t.prompt.ts)),o(),C("background",i.promptQualityColor(t)),o(),_(t.prompt.is_sidechain===1?5:-1),o(),_(t.slashCommand?6:-1),o(2),_(t.prompt.text?8:9),o(2),_(t.specshipSpendTokens>0?10:-1),o(2),c("size",11),o(2),u(t.tools.length),o(),_(t.prompt.durationMs?15:-1),o(2),u(i.fmtTokens(t.totalTokens)),o(),C("color",i.cacheColor(t.totalTokens>0?(t.prompt.cache_read_tokens||0)/t.totalTokens:0)),o(),g(" ",t.totalTokens>0?$(20,23,(t.prompt.cache_read_tokens||0)/t.totalTokens*100,"1.0-0"):0,"% "),o(2),C("color",t.prompt.cost_usd>2.5?"var(--error)":"var(--text-primary)"),o(),g("$",t.prompt.cost_usd.toFixed(2)),o(2),c("size",12),o(),c("size",14),o(),_(i.isExpanded(t.prompt.id)?26:-1)}}function ye(n,e){n&1&&(r(0,"div",16),l(1,"No prompts logged for this session yet."),a())}function ke(n,e){if(n&1&&(r(0,"span",163),l(1),a()),n&2){let t=p().$implicit;o(),g("\xD7",t.count)}}function Se(n,e){if(n&1&&(r(0,"span",161),d(1,"app-icon",56),l(2),m(3,ke,2,1,"span",163),a()),n&2){let t=e.$implicit;o(),c("size",10),o(),g("",t.name," "),o(),_(t.count>1?3:-1)}}function Pe(n,e){if(n&1&&(r(0,"span",163),l(1),a()),n&2){let t=p().$implicit;o(),g("\xD7",t.count)}}function we(n,e){if(n&1&&(r(0,"span",162),d(1,"app-icon",60),l(2),m(3,Pe,2,1,"span",163),a()),n&2){let t=e.$implicit;o(),c("size",10),o(),g("",t.name," "),o(),_(t.count>1?3:-1)}}function Me(n,e){if(n&1&&(r(0,"div",158)(1,"div",99),l(2,"Commands & skills"),a(),r(3,"div",160),O(4,Se,4,3,"span",161,ft),O(6,we,4,3,"span",162,ft),a()()),n&2){let t=p();o(4),D(t.slashCommands),o(2),D(t.skills)}}function Te(n,e){if(n&1&&(r(0,"div",99),l(1),a(),d(2,"app-h-bars",164),r(3,"div",165),l(4,"bar = call count"),a()),n&2){let t=p(),i=p(3);o(),g("Tools used \xB7 ",t.byTool.length),o(),c("items",t.byTool)("fmt",i.fmtTokensFn)("color",i.toolBarColor)}}function Ee(n,e){if(n&1&&(r(0,"div",159)(1,"div",166)(2,"span",167),l(3,"SpecShip"),a(),r(4,"span",168),l(5,"est."),a()(),r(6,"div",169)(7,"div",68)(8,"span",170),l(9,"Spent"),a(),r(10,"span",171),l(11),a()(),r(12,"div",68)(13,"span",170),l(14,"Est. saved"),a(),r(15,"span",172),l(16),a()(),r(17,"div",173)(18,"span",170),l(19,"Net"),a(),r(20,"span",174),l(21),a()()()()),n&2){let t=p(),i=p(3);o(11),g("~",i.fmtTokens(t.specship.spendTokens)," tok"),o(5),g("~",i.fmtTokens(t.specship.savedTokens)," tok"),o(4),C("color",t.specship.netTokens>=0?"var(--success)":"var(--warn)"),o(),H("",t.specship.netTokens>0?"+":"","",i.fmtTokens(t.specship.netTokens)," tok")}}function Oe(n,e){if(n&1&&(m(0,Me,8,0,"div",158),m(1,Te,5,4),m(2,Ee,22,6,"div",159)),n&2){let t=e;_(t.slashCommands.length||t.skills.length?0:-1),o(),_(t.byTool.length?1:-1),o(),_(t.specship&&t.specship.spendTokens>0?2:-1)}}function De(n,e){if(n&1&&(r(0,"div",102)(1,"span",177),l(2),a(),r(3,"div",27),d(4,"app-bar",178),a(),r(5,"span",179),l(6),a()()),n&2){let t=e.$implicit,i=p(4);o(2),u(i.fmtClock(t.prompt.ts)),o(2),c("frac",t.prompt.cost_usd/i.maxPromptCost())("color",t.prompt.cost_usd>2.5?"var(--error)":"var(--accent)"),o(2),g("$",t.prompt.cost_usd.toFixed(2))}}function Ie(n,e){if(n&1&&(r(0,"div",175),l(1,"Cost per prompt"),a(),r(2,"div",176),O(3,De,7,4,"div",102,bt),a()),n&2){let t=p(3);o(3),D(t.groups())}}function ze(n,e){if(n&1){let t=N();r(0,"div",21)(1,"div",87)(2,"div",88)(3,"div",89)(4,"div",90),l(5,"Cost"),a(),r(6,"div",91),l(7),a()(),r(8,"div",89)(9,"div",90),l(10,"Prompts"),a(),r(11,"div",92),l(12),a()(),r(13,"div",89)(14,"div",90),l(15,"Window"),a(),r(16,"div",93),l(17),a()(),r(18,"div",89)(19,"div",90),l(20,"Cache hit"),a(),r(21,"div",92),l(22),z(23,"number"),a()(),r(24,"div",89)(25,"div",90),l(26,"Tool calls"),a(),r(27,"div",92),l(28),a()()(),r(29,"div",94)(30,"span",49),l(31),a(),r(32,"span",95),l(33,"click a prompt for full detail"),a(),d(34,"div",27),r(35,"button",23),M("click",function(){k(t);let s=p(2);return S(s.expandAll())}),l(36,"Expand all"),a(),r(37,"button",23),M("click",function(){k(t);let s=p(2);return S(s.collapseAll())}),l(38,"Collapse all"),a()(),r(39,"div",96),O(40,be,27,26,"div",97,bt,!1,ye,2,0,"div",16),a()(),r(43,"div",98)(44,"div",99),l(45,"Token mix"),a(),r(46,"div",100),d(47,"div",36)(48,"div",37)(49,"div",38)(50,"div",39),a(),r(51,"div",101)(52,"div",102),d(53,"span",103),r(54,"span",104),l(55,"Input"),a(),r(56,"span",105),l(57),a(),r(58,"span",106),l(59),z(60,"number"),a()(),r(61,"div",102),d(62,"span",107),r(63,"span",104),l(64,"Output"),a(),r(65,"span",105),l(66),a(),r(67,"span",106),l(68),z(69,"number"),a()(),r(70,"div",102),d(71,"span",108),r(72,"span",104),l(73,"Cache write"),a(),r(74,"span",105),l(75),a(),r(76,"span",106),l(77),z(78,"number"),a()(),r(79,"div",102),d(80,"span",109),r(81,"span",104),l(82,"Cache read"),a(),r(83,"span",105),l(84),a(),r(85,"span",106),l(86),z(87,"number"),a()()(),r(88,"div",110)(89,"div",102),d(90,"app-icon",111),r(91,"span",112),l(92,"Cache effectiveness"),a()(),r(93,"div",113)(94,"span",114),l(95),z(96,"number"),a(),r(97,"span",112),l(98,"of input served from cache"),a()()(),m(99,Oe,3,3),m(100,Ie,5,0),a()()}if(n&2){let t,i=p(),s=p();o(7),g("$",i.total_cost_usd.toFixed(2)),o(5),u(i.prompt_count),o(5),H(" ",s.fmtClock(i.started_at)," \u2013 ",s.fmtClock(i.ended_at).split(" ").pop()," "),o(4),C("color",s.cacheColor(s.cacheReadRate())),o(),g(" ",$(23,34,s.cacheReadRate()*100,"1.0-0"),"% "),o(6),u(s.totalToolCalls()),o(3),g("Prompt timeline \xB7 ",s.groups().length),o(9),D(s.groups()),o(7),C("width",s.tokPct("input"),"%"),c("title","Input: "+s.fmtTokens(i.total_input_tokens)),o(),C("width",s.tokPct("output"),"%"),c("title","Output: "+s.fmtTokens(i.total_output_tokens)),o(),C("width",s.tokPct("cacheWrite"),"%"),c("title","Cache write: "+s.fmtTokens(i.total_cache_creation_tokens)),o(),C("width",s.tokPct("cacheRead"),"%"),c("title","Cache read: "+s.fmtTokens(i.total_cache_read_tokens)),o(7),u(s.fmtTokens(i.total_input_tokens)),o(2),g("",$(60,37,s.tokPct("input"),"1.0-0"),"%"),o(7),u(s.fmtTokens(i.total_output_tokens)),o(2),g("",$(69,40,s.tokPct("output"),"1.0-0"),"%"),o(7),u(s.fmtTokens(i.total_cache_creation_tokens)),o(2),g("",$(78,43,s.tokPct("cacheWrite"),"1.0-0"),"%"),o(7),u(s.fmtTokens(i.total_cache_read_tokens)),o(2),g("",$(87,46,s.tokPct("cacheRead"),"1.0-0"),"%"),o(4),c("size",13),o(5),g("",$(96,49,s.cacheReadRate()*100,"1.0-0"),"%"),o(4),_((t=s.summaryData())?99:-1,t),o(),_(s.groups().length>0?100:-1)}}function $e(n,e){if(n&1&&m(0,te,65,38,"div",20)(1,ze,101,52,"div",21),n&2){let t,i=p();_((t=i.selectedGroup())?0:1,t)}}function Re(n,e){n&1&&(r(0,"div",16),l(1,"Session not found."),a())}var Fe=5e3,qe=/<command-name>([^<]+)<\/command-name>/,Be=new Set(["Read","Edit","Write","NotebookEdit","MultiEdit"]);function Ne(n){if(!n)return[];try{let e=JSON.parse(n);return Array.isArray(e)?e.filter(t=>Array.isArray(t)&&t.length>=2&&typeof t[0]=="string"&&typeof t[1]=="number"):[]}catch{return[]}}var Ct=class n{api=F(pt);route=F(rt);router=F(lt);sanitizer=F(at);destroyRef=F(K);refresh=F(dt);liveMode=V("idle");idSig=Z(this.route.paramMap,{initialValue:this.route.snapshot.paramMap});id=h(()=>this.idSig().get("id")??"");localRefreshing=V(!1);expandedIds=V(new Set);expandedToolInputs=V(new Set);resource=Y(this.api,()=>{let e=this.id();return e?`/api/claude/session/${encodeURIComponent(e)}`:null});summary=Y(this.api,()=>{let e=this.id();return e?`/api/claude/session/${encodeURIComponent(e)}/summary`:null});session=h(()=>this.resource.state().data?.session??null);prompts=h(()=>this.resource.state().data?.prompts??[]);toolCalls=h(()=>this.resource.state().data?.toolCalls??[]);summaryData=h(()=>this.summary.state().data??null);groups=h(()=>{let e=this.prompts(),t=this.toolCalls(),i=new Map;for(let s of t){let x=i.get(s.prompt_id)??[];x.push(s),i.set(s.prompt_id,x)}return e.map(s=>{let x=i.get(s.id)??[],f=(s.input_tokens||0)+(s.output_tokens||0)+(s.cache_creation_tokens||0)+(s.cache_read_tokens||0),T=x.reduce((v,y)=>v+(y.result_length||0),0),b=s.text?qe.exec(s.text):null,E=b?b[1].trim():null,B=x.length>0?Math.max(...x.map(v=>v.ts||0)):0,A=B>s.ts?B-s.ts:0,R=new Map;for(let v of x)R.set(v.tool_name,(R.get(v.tool_name)??0)+1);let P=Array.from(R.entries()).map(([v,y])=>({name:v,count:y,color:this.toolColor(v)})).sort((v,y)=>y.count-v.count),I=new Set;for(let v of x)Be.has(v.tool_name)&&v.input_summary&&I.add(v.input_summary);let w=x.filter(v=>v.is_specship===1),Q=w.reduce((v,y)=>v+(y.result_length||0),0),G=w.length>0?Math.ceil(Q/4):0,W=new Map;for(let v of w)if(v.resolution==="resolved")for(let[y,St]of Ne(v.displaced_files))W.has(y)||W.set(y,St);let yt=Array.from(W.values()).reduce((v,y)=>v+y,0),kt=Math.ceil(Math.max(0,yt-Q)/4);return{prompt:s,tools:x,totalTokens:f,toolBytes:T,slashCommand:E,durationMs:A,toolBreakdown:P,filesTouched:Array.from(I),specshipSpendTokens:G,specshipSavedTokens:kt}})});totalToolCalls=h(()=>this.toolCalls().length);queryMap=Z(this.route.queryParamMap,{initialValue:this.route.snapshot.queryParamMap});selectedPromptId=h(()=>this.queryMap().get("prompt"));selectedIndex=h(()=>{let e=this.selectedPromptId();return e?this.groups().findIndex(t=>t.prompt.id===e):-1});selectedGroup=h(()=>{let e=this.selectedIndex();return e>=0?this.groups()[e]:null});quality=h(()=>{let e=this.selectedGroup();return e?J(e.prompt,e.tools):null});qualityShareText=h(()=>{let e=this.quality();return e?vt(e):""});hasPrevPrompt=h(()=>this.selectedIndex()>0);hasNextPrompt=h(()=>{let e=this.selectedIndex();return e>=0&&e<this.groups().length-1});promptCacheRate(e){let t=(e.input_tokens||0)+(e.cache_creation_tokens||0)+(e.cache_read_tokens||0);return t>0?(e.cache_read_tokens||0)/t:0}promptQualityColor(e){return J(e.prompt,e.tools).color}openPrompt(e){this.router.navigate([],{relativeTo:this.route,queryParams:{prompt:e},queryParamsHandling:"merge"})}closePrompt(){this.router.navigate([],{relativeTo:this.route,queryParams:{prompt:null},queryParamsHandling:"merge"})}stepPrompt(e){let t=this.selectedIndex(),i=this.groups()[t+e];i&&this.openPrompt(i.prompt.id)}promptTok(e,t){return t==="input"?e.input_tokens||0:t==="output"?e.output_tokens||0:t==="cacheWrite"?e.cache_creation_tokens||0:e.cache_read_tokens||0}promptTokPct(e,t){let i=(e.input_tokens||0)+(e.output_tokens||0)+(e.cache_creation_tokens||0)+(e.cache_read_tokens||0)||1;return this.promptTok(e,t)/i*100}totalTokens=h(()=>{let e=this.session();return e&&(e.total_input_tokens||0)+(e.total_output_tokens||0)+(e.total_cache_creation_tokens||0)+(e.total_cache_read_tokens||0)||1});maxPromptCost=h(()=>{let e=this.groups();return Math.max(1e-4,...e.map(t=>t.prompt.cost_usd||0))});toolBarColor=e=>{let t=e.name;return t==="Read"?"var(--node-spec)":t==="Edit"||t==="Write"||t==="MultiEdit"?"var(--accent)":t==="Bash"?"var(--warn)":t==="Grep"||t==="Glob"?"var(--node-test)":t==="Task"?"var(--node-route)":t.startsWith("mcp__")?"var(--success)":"var(--node-code)"};cacheReadRate=h(()=>{let e=this.session();if(!e)return 0;let t=(e.total_input_tokens||0)+(e.total_cache_creation_tokens||0)+(e.total_cache_read_tokens||0);return t>0?(e.total_cache_read_tokens||0)/t:0});constructor(){j(()=>{!this.resource.state().loading&&this.localRefreshing()&&this.localRefreshing.set(!1)});let e=null,t=null,i=()=>{t!==null&&(clearInterval(t),t=null)},s=()=>{t===null&&(t=setInterval(()=>{typeof document<"u"&&document.visibilityState==="visible"&&this.resource.refetch()},Fe))},x=()=>{e&&(e(),e=null)},f=b=>{b&&(x(),e=this.api.openEventStream(`/api/claude/session/${encodeURIComponent(b)}/events`,E=>{E==="prompt_added"||E==="tool_call_added"?this.resource.refetch():E==="snapshot"?(this.liveMode.set("live"),i()):E==="stream_error"&&(this.liveMode.set("polling"),s())},()=>{this.liveMode.set("polling"),s()},["prompt_added","tool_call_added","snapshot","stream_error"]))},T=()=>{if(!(typeof document>"u"))if(document.visibilityState==="visible"){this.resource.refetch();let b=this.id();b&&this.liveMode()==="polling"&&f(b)}else i()};j(()=>{let b=this.id();if(x(),i(),!b){this.liveMode.set("idle");return}f(b)}),typeof document<"u"&&document.addEventListener("visibilitychange",T),this.destroyRef.onDestroy(()=>{x(),i(),this.liveMode.set("idle"),typeof document<"u"&&document.removeEventListener("visibilitychange",T)})}async forceRefresh(){this.localRefreshing.set(!0),await this.refresh.triggerGlobalRefresh()}isExpanded(e){return this.expandedIds().has(e)}toggleExpand(e){this.expandedIds.update(t=>{let i=new Set(t);return i.has(e)?i.delete(e):i.add(e),i})}expandAll(){this.expandedIds.set(new Set(this.prompts().map(e=>e.id)))}collapseAll(){this.expandedIds.set(new Set)}isToolInputExpanded(e){return this.expandedToolInputs().has(e)}toggleToolInput(e){this.expandedToolInputs.update(t=>{let i=new Set(t);return i.has(e)?i.delete(e):i.add(e),i})}renderAssistant(e){return this.sanitizer.bypassSecurityTrustHtml(ut(e??""))}formatToolInput(e){if(!e)return"";try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}fmtBytes(e){return e?e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} kB`:`${(e/(1024*1024)).toFixed(1)} MB`:"0"}fmtTokens(e){return e<1e3?`${e}`:e<1e6?`${(e/1e3).toFixed(1)}k`:`${(e/1e6).toFixed(2)}M`}fmtTokensFn=e=>this.fmtTokens(e);fmtClock(e){if(!e)return"";try{let t=new Date(e),i=new Date;i.setHours(0,0,0,0);let s=864e5,x=i.getTime()-new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),f=t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"});return x===0?f:x===s?"Yest "+f:t.toLocaleDateString([],{month:"short",day:"numeric"})+" "+f}catch{return String(e)}}fmtDurationSec(e,t){if(!e||!t)return"";let i=Math.round((t-e)/1e3);if(i<60)return`${i}s`;let s=Math.floor(i/60),x=i%60;if(s<60)return`${s}m ${x}s`;let f=Math.floor(s/60),T=s%60;return`${f}h ${T}m`}fmtDurationMs(e){if(!e||e<=0)return"";if(e<1e3)return`${e}ms`;let t=e/1e3;if(t<60)return`${t.toFixed(t<10?1:0)}s`;let i=Math.floor(t/60),s=Math.round(t%60);if(i<60)return`${i}m ${s}s`;let x=Math.floor(i/60),f=i%60;return`${x}h ${f}m`}basename(e){if(!e)return"";if(e.length<=40)return e;let t=e.split("/");return t.length<=2?e:"\u2026/"+t.slice(-2).join("/")}toolColor(e){return e==="Read"?"var(--node-spec)":e==="Edit"||e==="Write"||e==="MultiEdit"||e==="NotebookEdit"?"var(--accent)":e==="Bash"?"var(--warn)":e==="Grep"||e==="Glob"?"var(--node-test)":e==="Task"?"var(--node-route)":e.startsWith("mcp__")?"var(--success)":"var(--text-secondary)"}cacheColor(e){return e>=.7?"var(--success)":e>=.5?"var(--warn)":"var(--error)"}tokPct(e){let t=this.session();if(!t)return 0;let i=this.totalTokens();return(e==="input"?t.total_input_tokens||0:e==="output"?t.total_output_tokens||0:e==="cacheWrite"?t.total_cache_creation_tokens||0:t.total_cache_read_tokens||0)/i*100}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=X({type:n,selectors:[["app-session-detail"]],decls:22,vars:20,consts:[[1,"sd-root"],[1,"page-head"],[1,"back-link","btn","btn-ghost","btn-sm",3,"routerLink"],["name","chevronLeft",3,"size"],[1,"title-block"],[1,"title"],[1,"mono","session-id"],[3,"color","bg"],[1,"live-pill",3,"title"],[1,"dot"],[1,"sub"],[1,"page-actions"],["type","button","aria-label","Refresh session detail",1,"btn","btn-secondary","btn-sm","refresh-btn",3,"click","disabled"],["name","refresh",3,"size"],[1,"loading"],[1,"error"],[1,"empty"],[1,"error-title"],[1,"error-detail"],[1,"btn","btn-secondary","btn-sm",3,"click"],[1,"scroll-y","pp-page"],[1,"sd-body"],[1,"row","gap-10","pp-head"],["type","button",1,"btn","btn-ghost","btn-sm",3,"click"],[1,"mono","muted","pp-time"],["color","var(--node-code)","bg","var(--node-code-soft)"],["color","var(--node-route)","bg","var(--node-route-soft)"],[1,"grow"],["type","button",1,"btn","btn-ghost","btn-sm",3,"click","disabled"],["name","chevronRight",3,"size"],[1,"row","gap-6","pp-meta"],[1,"pp-chip","mono"],["name","wrench",3,"size"],[1,"pp-quality",3,"border-color","background"],[1,"eyebrow","pp-sec-lbl"],[1,"tok-bar","pp-tokbar"],[1,"tok-seg",2,"background","var(--node-spec)",3,"title"],[1,"tok-seg",2,"background","var(--node-code)",3,"title"],[1,"tok-seg",2,"background","var(--warn)",3,"title"],[1,"tok-seg",2,"background","var(--node-route)",3,"title"],[1,"row","gap-12","pp-tok-legend"],[1,"pp-tok-li"],[1,"dot",2,"background","var(--node-spec)"],[1,"dot",2,"background","var(--node-code)"],[1,"dot",2,"background","var(--warn)"],[1,"dot",2,"background","var(--node-route)"],[1,"pp-io"],[1,"pp-io-col"],[1,"row","gap-6","pp-io-head"],[1,"eyebrow"],[3,"text"],[1,"pp-io-body","mono"],[1,"pp-io-body","md-content",3,"innerHTML"],[1,"pp-io-body","muted"],[1,"pp-thinking"],[2,"height","24px"],["name","command",3,"size"],["name","bot",3,"size"],[1,"pp-quality"],[1,"row","gap-8","pp-q-head"],["name","sparkles",3,"size"],[1,"pp-q-title"],[1,"pill","pp-q-grade"],[1,"tabular"],["label","Share",3,"text"],[1,"pp-q-bar"],[3,"frac","color","height"],[1,"pp-q-factors"],[1,"row","gap-6"],[1,"eyebrow","pp-q-sub"],[1,"col","gap-8"],[1,"row","gap-8","pp-sug"],[3,"name","size"],[1,"pp-q-factor"],[1,"pp-sug-dot"],[1,"pp-sug-text"],[1,"row","gap-6","pp-sug-fix"],[1,"mono"],[1,"row","gap-8","pp-rewrite"],[1,"grow","pp-rewrite-text"],[1,"eyebrow","pp-thinking-sum"],[1,"md-content","pp-thinking-body",3,"innerHTML"],[1,"col","gap-4","pp-tools"],[1,"row","gap-8","pp-tool"],[1,"mono","pp-tool-name"],[1,"mono","muted","pp-tool-input"],[1,"mono","muted","pp-tool-bytes"],[1,"scroll-y","sd-main"],[1,"stat-strip"],[1,"stat"],[1,"stat-lbl"],[1,"stat-val","cost"],[1,"stat-val","mono"],[1,"stat-val","mono",2,"font-size","12px"],[1,"row","gap-8",2,"justify-content","space-between","margin-bottom","8px"],[1,"muted",2,"font-size","11px"],[1,"col","gap-6",2,"padding-bottom","16px"],[1,"prompt","card"],[1,"scroll-y","sd-rail"],[1,"eyebrow",2,"margin-bottom","10px"],[1,"tok-bar",2,"margin-bottom","10px"],[1,"col","gap-6",2,"margin-bottom","20px"],[1,"row","gap-8"],[2,"width","9px","height","9px","border-radius","2px","background","var(--node-spec)","flex-shrink","0"],[1,"muted","grow",2,"font-size","11.5px"],[1,"mono","tabular",2,"font-size","11.5px"],[1,"mono","tabular","muted",2,"font-size","10px","width","32px","text-align","right"],[2,"width","9px","height","9px","border-radius","2px","background","var(--node-code)","flex-shrink","0"],[2,"width","9px","height","9px","border-radius","2px","background","var(--warn)","flex-shrink","0"],[2,"width","9px","height","9px","border-radius","2px","background","var(--node-route)","flex-shrink","0"],[1,"cache-card",2,"margin-bottom","20px"],["name","database",2,"color","var(--success)",3,"size"],[1,"muted",2,"font-size","10.5px"],[1,"row",2,"align-items","baseline","gap","8px","margin-top","4px"],[1,"tabular",2,"font-size","24px","font-weight","700","color","var(--success)"],["role","button","tabindex","0",1,"prompt-head","row","gap-10",3,"click","keydown.enter","keydown.space"],[1,"mono","muted",2,"font-size","10.5px","width","52px","flex-shrink","0"],["title","Prompt quality",2,"width","8px","height","8px","border-radius","50%","flex-shrink","0"],[2,"flex-shrink","0",3,"color","bg"],["name","command",2,"color","var(--node-code)","flex-shrink","0",3,"size","title"],[1,"grow",2,"font-size","12.5px","overflow","hidden","text-overflow","ellipsis","white-space","nowrap","min-width","0"],[1,"muted"],[1,"pill",2,"color","var(--success)","background","var(--success-soft)","font-family","var(--font-mono)","font-size","10px","font-weight","600","flex-shrink","0","cursor","help",3,"title"],[1,"row","gap-4",2,"flex-shrink","0"],["name","wrench",2,"color","var(--text-muted)",3,"size"],[1,"mono","tabular","muted",2,"font-size","11px"],["title","Wall-clock duration for this prompt",1,"mono","tabular","muted",2,"font-size","11px","width","44px","text-align","right","flex-shrink","0"],[1,"mono","tabular","muted",2,"font-size","11px","width","50px","text-align","right","flex-shrink","0"],[1,"mono","tabular",2,"font-size","11px","width","38px","text-align","right","flex-shrink","0"],[1,"mono","tabular",2,"font-size","13px","font-weight","600","width","54px","text-align","right","flex-shrink","0"],["type","button","title","Open full view","aria-label","Open full prompt view",1,"pp-open-btn",3,"click"],["name","maximize",3,"size"],["name","chevronRight",2,"color","var(--text-muted)","flex-shrink","0",3,"size"],[1,"prompt-body"],[1,"prompt-section"],[1,"section-lbl"],[1,"kv-row"],[1,"kv"],[1,"kv-lbl"],[1,"kv-val","mono"],[1,"kv-val","mono","cost"],[1,"prompt-pre"],[1,"assistant-body","md-content",3,"innerHTML"],[1,"thinking-details"],[1,"section-lbl","thinking-summary"],[1,"muted","xs"],[1,"thinking-body","md-content",3,"innerHTML"],[1,"files-touched"],[1,"file-row",3,"title"],[1,"file-path","mono"],[1,"tools"],[1,"tool-block"],["type","button",1,"tool-row",3,"click","disabled"],["aria-hidden","true",1,"tool-chevron","mono"],[1,"tool-name","mono"],[1,"tool-input","mono"],[1,"tool-bytes","mono","muted"],[1,"tool-input-json","mono"],[2,"margin-bottom","20px"],[2,"margin-top","16px","padding","10px 12px","background","var(--success-soft)","border","1px solid rgba(70,194,107,0.25)","border-radius","8px"],[1,"row","gap-6",2,"flex-wrap","wrap"],[1,"pill",2,"color","var(--node-code)","background","var(--node-code-soft)","font-family","var(--font-mono)","font-weight","500"],[1,"pill",2,"color","var(--node-test)","background","var(--node-test-soft)","font-family","var(--font-mono)","font-weight","500"],[2,"opacity","0.7"],["valueKey","calls",3,"items","fmt","color"],[1,"muted",2,"font-size","10px","margin-top","8px"],[1,"row","gap-8",2,"margin-bottom","4px"],[2,"font-size","10.5px","font-weight","700","color","var(--success)","text-transform","uppercase","letter-spacing","0.04em"],[1,"pill",2,"color","var(--success)","background","rgba(70,194,107,0.15)","font-size","9.5px","padding","1px 5px"],[1,"col","gap-4"],[1,"muted","grow",2,"font-size","11px"],[1,"mono","tabular",2,"font-size","11px","color","var(--text-primary)"],[1,"mono","tabular",2,"font-size","11px","color","var(--success)"],[1,"row","gap-6",2,"border-top","1px dashed rgba(70,194,107,0.3)","padding-top","4px","margin-top","2px"],[1,"mono","tabular",2,"font-size","11px"],[1,"eyebrow",2,"margin","20px 0 10px"],[1,"col","gap-5"],[1,"mono","muted",2,"font-size","10px","width","44px","flex-shrink","0"],[3,"frac","color"],[1,"mono","tabular",2,"font-size","10.5px","width","40px","text-align","right"]],template:function(t,i){if(t&1&&(r(0,"div",0)(1,"header",1)(2,"a",2),d(3,"app-icon",3),l(4," Sessions "),a(),r(5,"div",4)(6,"div",5)(7,"span",6),l(8),a(),m(9,It,2,3,"app-pill",7),r(10,"span",8),d(11,"span",9),l(12),a()(),m(13,$t,3,2,"div",10),a(),r(14,"div",11)(15,"button",12),M("click",function(){return i.forceRefresh()}),d(16,"app-icon",13),l(17),a()()(),m(18,Rt,2,0,"div",14)(19,Ft,7,1,"div",15)(20,$e,2,1)(21,Re,2,0,"div",16),a()),t&2){let s,x,f;o(2),c("routerLink",it(19,Ot)),o(),c("size",14),o(5),u(i.id().slice(0,12)),o(),_((s=i.session())!=null&&s.last_model?9:-1),o(),q("live",i.liveMode()==="live")("polling",i.liveMode()==="polling")("idle",i.liveMode()==="idle"),c("title",i.liveMode()==="live"?"Live \u2014 new prompts push as Claude Code writes them":i.liveMode()==="polling"?"Polling \u2014 SSE unavailable, refetching every 5s":"Idle \u2014 live updates paused"),o(2),g(" ",i.liveMode()==="live"?"Live":i.liveMode()==="polling"?"Polling":"Idle"," "),o(),_((x=i.session())?13:-1,x),o(2),q("spinning",i.localRefreshing()||i.refresh.loading()),c("disabled",i.refresh.loading()),o(),c("size",13),o(),g(" ",i.localRefreshing()||i.refresh.loading()?"Refreshing\u2026":"Refresh"," "),o(),_(i.resource.state().loading&&!i.session()?18:i.resource.state().error?19:(f=i.session())?20:21,f)}},dependencies:[st,ct,xt,mt,_t,gt,ot],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:contents}.sd-root[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0;padding:16px 18px 0}.page-head[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px;flex-wrap:wrap}.back-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;color:var(--text-muted);text-decoration:none}.title-block[_ngcontent-%COMP%]{flex:1;min-width:250px}.title[_ngcontent-%COMP%]{font-size:var(--fs-title);font-weight:600;letter-spacing:-.01em;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.session-id[_ngcontent-%COMP%]{color:var(--accent);font-size:14px}.live-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:999px;white-space:nowrap;cursor:help}.live-pill[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%;flex-shrink:0}.live-pill.live[_ngcontent-%COMP%]{color:var(--success);background:var(--success-soft)}.live-pill.live[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{background:var(--success);animation:_ngcontent-%COMP%_live-pulse 1.6s ease-in-out infinite}.live-pill.polling[_ngcontent-%COMP%]{color:var(--warn);background:var(--warn-soft)}.live-pill.polling[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{background:var(--warn)}.live-pill.idle[_ngcontent-%COMP%]{color:var(--text-muted);background:var(--bg-canvas)}.live-pill.idle[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{background:var(--text-muted)}@keyframes _ngcontent-%COMP%_live-pulse{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.05)}}.sub[_ngcontent-%COMP%]{color:var(--text-secondary);font-size:12px;margin-top:2px}.page-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.refresh-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px}.refresh-btn.spinning[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_spin .9s linear infinite;color:var(--accent)}.refresh-btn[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.8}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.sd-body[_ngcontent-%COMP%]{flex:1;display:flex;min-height:0;gap:0}.sd-main[_ngcontent-%COMP%]{flex:1;min-width:0;padding:0 0 18px}.sd-rail[_ngcontent-%COMP%]{width:290px;flex-shrink:0;border-left:1px solid var(--border-subtle);background:var(--bg-panel);padding:16px}.stat-strip[_ngcontent-%COMP%]{display:flex;gap:24px;padding:12px 0;border-top:1px solid var(--border-subtle);border-bottom:1px solid var(--border-subtle);margin-bottom:16px}.stat[_ngcontent-%COMP%] .stat-lbl[_ngcontent-%COMP%]{font-size:10.5px;color:var(--text-muted)}.stat[_ngcontent-%COMP%] .stat-val[_ngcontent-%COMP%]{font-size:16px;font-weight:600;margin-top:2px;color:var(--text-primary);font-variant-numeric:tabular-nums}.stat-val.cost[_ngcontent-%COMP%]{color:var(--accent)}.tok-bar[_ngcontent-%COMP%]{display:flex;height:10px;border-radius:999px;overflow:hidden}.tok-seg[_ngcontent-%COMP%]{height:100%}.cache-card[_ngcontent-%COMP%]{background:var(--success-soft);border:1px solid rgba(70,194,107,.25);border-radius:8px;padding:10px 12px}.prompt.card[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:9px;overflow:hidden;transition:border-color .12s}.prompt.card[_ngcontent-%COMP%]:hover{border-color:var(--border-strong)}.prompt-head[_ngcontent-%COMP%]{width:100%;padding:11px 12px;background:transparent;border:0;text-align:left;cursor:pointer;color:inherit;font-family:inherit}.prompt-head[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.prompt-head[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.pp-open-btn[_ngcontent-%COMP%]{flex-shrink:0;display:inline-flex;align-items:center;background:transparent;border:0;cursor:pointer;color:var(--text-muted);padding:2px;border-radius:4px;opacity:0;transition:opacity .1s,background .1s,color .1s}.prompt-head[_ngcontent-%COMP%]:hover .pp-open-btn[_ngcontent-%COMP%]{opacity:1}.pp-open-btn[_ngcontent-%COMP%]:hover{background:var(--bg-panel-2);color:var(--text-primary)}.pp-open-btn[_ngcontent-%COMP%]:focus-visible{opacity:1;outline:2px solid var(--accent);outline-offset:1px}.pp-page[_ngcontent-%COMP%]{flex:1;min-height:0;padding:18px}.pp-head[_ngcontent-%COMP%]{align-items:center;margin-bottom:14px}.pp-time[_ngcontent-%COMP%]{font-size:11.5px}.pp-meta[_ngcontent-%COMP%]{flex-wrap:wrap;margin-bottom:16px}.pp-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;font-size:11px;padding:3px 8px;border-radius:6px;background:var(--bg-panel);border:1px solid var(--border-subtle);color:var(--text-secondary)}.pp-quality[_ngcontent-%COMP%]{border:1px solid var(--border-subtle);border-radius:8px;padding:12px;margin-bottom:16px}.pp-q-head[_ngcontent-%COMP%]{align-items:center;margin-bottom:10px}.pp-q-title[_ngcontent-%COMP%]{font-weight:600;font-size:12.5px}.pp-q-grade[_ngcontent-%COMP%]{font-weight:600}.pp-q-bar[_ngcontent-%COMP%]{margin-bottom:12px}.pp-q-factors[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;margin-bottom:12px}.pp-q-factor[_ngcontent-%COMP%]{font-size:11.5px;color:var(--text-secondary)}.pp-q-factor.bad[_ngcontent-%COMP%]{color:var(--text-primary)}.pp-q-sub[_ngcontent-%COMP%]{margin-bottom:7px}.pp-q-sub[_ngcontent-%COMP%] + .col[_ngcontent-%COMP%], .pp-q-sub[_ngcontent-%COMP%] + .pp-rewrite[_ngcontent-%COMP%]{margin-top:0}.col[_ngcontent-%COMP%] + .pp-q-sub[_ngcontent-%COMP%], .pp-q-bar[_ngcontent-%COMP%] + .pp-q-factors[_ngcontent-%COMP%] + .pp-q-sub[_ngcontent-%COMP%]{margin-top:12px}.pp-sug[_ngcontent-%COMP%]{align-items:flex-start}.pp-sug-dot[_ngcontent-%COMP%]{width:6px;height:6px;border-radius:50%;flex-shrink:0;margin-top:5px}.pp-sug-text[_ngcontent-%COMP%]{font-size:12px;line-height:1.5;color:var(--text-secondary);text-wrap:pretty}.pp-sug-fix[_ngcontent-%COMP%]{margin-top:5px;align-items:center}.pp-sug-fix[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-size:11px;color:var(--text-primary);background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:5px;padding:2px 7px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pp-rewrite[_ngcontent-%COMP%]{align-items:flex-start;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:7px;padding:9px 11px}.pp-rewrite-text[_ngcontent-%COMP%]{font-size:12px;line-height:1.5;color:var(--text-primary);text-wrap:pretty}.pp-sec-lbl[_ngcontent-%COMP%]{margin:16px 0 8px}.pp-tokbar[_ngcontent-%COMP%]{margin-bottom:8px}.pp-tok-legend[_ngcontent-%COMP%]{flex-wrap:wrap;margin-bottom:16px}.pp-tok-li[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;color:var(--text-muted)}.pp-tok-li[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:2px}.pp-io[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}.pp-io-col[_ngcontent-%COMP%]{min-width:0;display:flex;flex-direction:column}.pp-io-head[_ngcontent-%COMP%]{margin-bottom:6px;align-items:center}.pp-io-body[_ngcontent-%COMP%]{background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:8px;padding:11px 13px;font-size:12px;line-height:1.6;max-height:460px;overflow:auto;margin:0}pre.pp-io-body[_ngcontent-%COMP%]{white-space:pre-wrap;word-break:break-word}.pp-thinking[_ngcontent-%COMP%]{margin-bottom:16px}.pp-thinking-sum[_ngcontent-%COMP%]{cursor:pointer}.pp-thinking-body[_ngcontent-%COMP%]{margin-top:8px}.pp-tool[_ngcontent-%COMP%]{padding:7px 10px;border-radius:6px;background:var(--bg-panel);border:1px solid var(--border-subtle);align-items:center}.pp-tool-name[_ngcontent-%COMP%]{font-size:12px;font-weight:600}.pp-tool-input[_ngcontent-%COMP%]{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pp-tool-bytes[_ngcontent-%COMP%]{font-size:11px}@media(max-width:720px){.pp-io[_ngcontent-%COMP%]{grid-template-columns:1fr}}.prompt-body[_ngcontent-%COMP%]{border-top:1px solid var(--border-subtle);padding:14px 16px;background:var(--bg-canvas)}.prompt-section[_ngcontent-%COMP%]{margin-bottom:14px}.prompt-section[_ngcontent-%COMP%]:last-child{margin-bottom:0}.section-lbl[_ngcontent-%COMP%]{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:6px}.prompt-pre[_ngcontent-%COMP%]{margin:0;padding:10px 12px;background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:7px;font-family:var(--font-mono);font-size:11.5px;line-height:1.55;color:var(--text-primary);white-space:pre-wrap;word-break:break-word;max-height:280px;overflow-y:auto}.kv-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:10px 18px}.kv[_ngcontent-%COMP%] .kv-lbl[_ngcontent-%COMP%]{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;font-weight:600}.kv[_ngcontent-%COMP%] .kv-val[_ngcontent-%COMP%]{font-size:12.5px;font-weight:600;margin-top:2px;color:var(--text-primary);font-variant-numeric:tabular-nums}.kv-val.cost[_ngcontent-%COMP%]{color:var(--accent)}.tools[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:3px}.tool-block[_ngcontent-%COMP%]{display:flex;flex-direction:column}.tool-row[_ngcontent-%COMP%]{appearance:none;background:var(--bg-panel);border:1px solid var(--border-subtle);color:inherit;font-family:inherit;text-align:left;display:flex;align-items:center;gap:8px;width:100%;padding:5px 10px;border-radius:6px;font-size:11.5px;cursor:pointer}.tool-row[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--bg-hover)}.tool-row[_ngcontent-%COMP%]:disabled{cursor:default}.tool-row[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.tool-row.expanded[_ngcontent-%COMP%]{border-bottom-left-radius:0;border-bottom-right-radius:0}.tool-chevron[_ngcontent-%COMP%]{width:10px;color:var(--text-muted);transition:transform .12s;font-size:12px;flex-shrink:0;display:inline-block}.tool-chevron.open[_ngcontent-%COMP%]{transform:rotate(90deg);color:var(--accent)}.tool-name[_ngcontent-%COMP%]{font-weight:600;flex-shrink:0}.tool-input[_ngcontent-%COMP%]{color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:11px}.tool-bytes[_ngcontent-%COMP%]{font-size:10.5px;flex-shrink:0}.tool-input-json[_ngcontent-%COMP%]{margin:0;padding:10px 14px;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-top:0;border-radius:0 0 6px 6px;font-family:var(--font-mono);font-size:11px;line-height:1.5;color:var(--text-primary);white-space:pre-wrap;word-break:break-word;max-height:320px;overflow-y:auto}.assistant-body[_ngcontent-%COMP%]{padding:10px 14px;background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:7px;font-size:12.5px;line-height:1.55;color:var(--text-primary);max-height:480px;overflow-y:auto;overflow-wrap:anywhere}.thinking-details[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:7px;padding:8px 12px}.thinking-summary[_ngcontent-%COMP%]{cursor:pointer;list-style:none;display:flex;align-items:center;gap:6px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted)}.thinking-summary[_ngcontent-%COMP%]::-webkit-details-marker{display:none}.thinking-summary[_ngcontent-%COMP%]:before{content:"\\203a";display:inline-block;transition:transform .12s;font-size:14px;color:var(--text-muted)}.thinking-details[open][_ngcontent-%COMP%] .thinking-summary[_ngcontent-%COMP%]:before{transform:rotate(90deg);color:var(--accent)}.thinking-body[_ngcontent-%COMP%]{margin-top:10px;padding:8px 0 0;border-top:1px dashed var(--border-subtle);font-size:12px;line-height:1.55;color:var(--text-secondary);max-height:320px;overflow-y:auto;overflow-wrap:anywhere}.files-touched[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:3px;font-size:11.5px;max-height:180px;overflow-y:auto;padding:6px 10px;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:6px}.files-touched[_ngcontent-%COMP%] .file-row[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0}.files-touched[_ngcontent-%COMP%] .file-path[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary)}.loading[_ngcontent-%COMP%]{padding:40px 18px;text-align:center;color:var(--text-muted);font-size:13px}.error[_ngcontent-%COMP%]{padding:16px;margin:12px 0;border-radius:8px;border:1px solid rgba(255,90,90,.35);background:var(--error-soft);color:var(--error);display:flex;flex-direction:column;gap:8px;align-items:flex-start}.error-title[_ngcontent-%COMP%]{font-weight:600;font-size:13px}.error-detail[_ngcontent-%COMP%]{font-size:12px;color:var(--text-secondary)}.empty[_ngcontent-%COMP%]{padding:30px 18px;color:var(--text-muted);font-size:12.5px;text-align:center}.md-content[_ngcontent-%COMP%] .md-h1[_ngcontent-%COMP%]{font-size:14px;font-weight:650;color:var(--text-primary);letter-spacing:-.01em;margin:0 0 8px}.md-content[_ngcontent-%COMP%] .md-h2[_ngcontent-%COMP%]{font-size:12.5px;font-weight:650;color:var(--text-primary);margin:14px 0 4px;padding-bottom:3px;border-bottom:1px solid var(--border-subtle)}.md-content[_ngcontent-%COMP%] .md-h3[_ngcontent-%COMP%]{font-size:12px;font-weight:650;color:var(--text-primary);margin:12px 0 4px}.md-content[_ngcontent-%COMP%] .md-p[_ngcontent-%COMP%]{font-size:12.5px;line-height:1.6;color:var(--text-primary);margin:0 0 4px;overflow-wrap:anywhere}.md-content[_ngcontent-%COMP%] .md-p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--text-primary);font-weight:650}.md-content[_ngcontent-%COMP%] .md-list[_ngcontent-%COMP%], .md-content[_ngcontent-%COMP%] .md-ol[_ngcontent-%COMP%]{padding:0;margin:4px 0 6px}.md-content[_ngcontent-%COMP%] .md-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%], .md-content[_ngcontent-%COMP%] .md-ol[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{position:relative;padding:2px 0 2px 20px;font-size:12.5px;line-height:1.55;color:var(--text-primary);overflow-wrap:anywhere}.md-content[_ngcontent-%COMP%] .md-list[_ngcontent-%COMP%]{list-style:none}.md-content[_ngcontent-%COMP%] .md-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:before{content:"\\2022";position:absolute;left:4px;top:1px;color:var(--text-faint)}.md-content[_ngcontent-%COMP%] .md-spacer[_ngcontent-%COMP%]{height:5px}.md-content[_ngcontent-%COMP%] .md-inline-code[_ngcontent-%COMP%]{font-size:11px;background:var(--bg-canvas);padding:1px 5px;border-radius:3px;border:1px solid var(--border-subtle);color:var(--node-spec)}.md-content[_ngcontent-%COMP%] .md-blockquote[_ngcontent-%COMP%]{margin:5px 0;padding:6px 10px;border-left:3px solid var(--accent);background:var(--accent-soft);color:var(--text-secondary);font-size:12px;line-height:1.5;border-radius:0 5px 5px 0}.md-content[_ngcontent-%COMP%] .md-pre[_ngcontent-%COMP%]{position:relative;margin:6px 0 8px;padding:10px 12px;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:6px;overflow-x:auto}.md-content[_ngcontent-%COMP%] .md-pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{display:block;font-size:11px;line-height:1.5;color:var(--text-primary);white-space:pre}.md-content[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child{margin-top:0}'],changeDetection:0})};export{Ct as SessionDetail};
@@ -1,11 +0,0 @@
1
- import{a as Q}from"./chunk-EUUEFEDI.js";import{a as q}from"./chunk-AZJVTPLU.js";import{f as B,i as x,j as U,k as C,m as h,n as u}from"./chunk-JTFXTIPE.js";import{a as G,b as J}from"./chunk-Q7L6LLAK.js";var F=class{constructor(t,e){this._modeId=t,this._defaults=e,this._worker=null,this._client=null,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker()),this._updateExtraLibsToken=0,this._extraLibsChangeListener=this._defaults.onDidExtraLibsChange(()=>this._updateExtraLibs())}dispose(){this._configChangeListener.dispose(),this._extraLibsChangeListener.dispose(),this._stopWorker()}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}async _updateExtraLibs(){if(!this._worker)return;let t=++this._updateExtraLibsToken,e=await this._worker.getProxy();this._updateExtraLibsToken===t&&e.updateExtraLibs(this._defaults.getExtraLibs())}_getClient(){return this._client||(this._client=(async()=>(this._worker=q({moduleId:"vs/language/typescript/tsWorker",createWorker:()=>new Worker(new URL("ts.worker.js",import.meta.url),{type:"module"}),label:this._modeId,keepIdleModels:!0,createData:{compilerOptions:this._defaults.getCompilerOptions(),extraLibs:this._defaults.getExtraLibs(),customWorkerPath:this._defaults.workerOptions.customWorkerPath,inlayHintsOptions:this._defaults.inlayHintsOptions}}),this._defaults.getEagerModelSync()?await this._worker.withSyncedResources(h.getModels().filter(t=>t.getLanguageId()===this._modeId).map(t=>t.uri)):await this._worker.getProxy()))()),this._client}async getLanguageServiceWorker(...t){let e=await this._getClient();return this._worker&&await this._worker.withSyncedResources(t),e}};var r={};r["lib.d.ts"]=!0;r["lib.decorators.d.ts"]=!0;r["lib.decorators.legacy.d.ts"]=!0;r["lib.dom.asynciterable.d.ts"]=!0;r["lib.dom.d.ts"]=!0;r["lib.dom.iterable.d.ts"]=!0;r["lib.es2015.collection.d.ts"]=!0;r["lib.es2015.core.d.ts"]=!0;r["lib.es2015.d.ts"]=!0;r["lib.es2015.generator.d.ts"]=!0;r["lib.es2015.iterable.d.ts"]=!0;r["lib.es2015.promise.d.ts"]=!0;r["lib.es2015.proxy.d.ts"]=!0;r["lib.es2015.reflect.d.ts"]=!0;r["lib.es2015.symbol.d.ts"]=!0;r["lib.es2015.symbol.wellknown.d.ts"]=!0;r["lib.es2016.array.include.d.ts"]=!0;r["lib.es2016.d.ts"]=!0;r["lib.es2016.full.d.ts"]=!0;r["lib.es2016.intl.d.ts"]=!0;r["lib.es2017.arraybuffer.d.ts"]=!0;r["lib.es2017.d.ts"]=!0;r["lib.es2017.date.d.ts"]=!0;r["lib.es2017.full.d.ts"]=!0;r["lib.es2017.intl.d.ts"]=!0;r["lib.es2017.object.d.ts"]=!0;r["lib.es2017.sharedmemory.d.ts"]=!0;r["lib.es2017.string.d.ts"]=!0;r["lib.es2017.typedarrays.d.ts"]=!0;r["lib.es2018.asyncgenerator.d.ts"]=!0;r["lib.es2018.asynciterable.d.ts"]=!0;r["lib.es2018.d.ts"]=!0;r["lib.es2018.full.d.ts"]=!0;r["lib.es2018.intl.d.ts"]=!0;r["lib.es2018.promise.d.ts"]=!0;r["lib.es2018.regexp.d.ts"]=!0;r["lib.es2019.array.d.ts"]=!0;r["lib.es2019.d.ts"]=!0;r["lib.es2019.full.d.ts"]=!0;r["lib.es2019.intl.d.ts"]=!0;r["lib.es2019.object.d.ts"]=!0;r["lib.es2019.string.d.ts"]=!0;r["lib.es2019.symbol.d.ts"]=!0;r["lib.es2020.bigint.d.ts"]=!0;r["lib.es2020.d.ts"]=!0;r["lib.es2020.date.d.ts"]=!0;r["lib.es2020.full.d.ts"]=!0;r["lib.es2020.intl.d.ts"]=!0;r["lib.es2020.number.d.ts"]=!0;r["lib.es2020.promise.d.ts"]=!0;r["lib.es2020.sharedmemory.d.ts"]=!0;r["lib.es2020.string.d.ts"]=!0;r["lib.es2020.symbol.wellknown.d.ts"]=!0;r["lib.es2021.d.ts"]=!0;r["lib.es2021.full.d.ts"]=!0;r["lib.es2021.intl.d.ts"]=!0;r["lib.es2021.promise.d.ts"]=!0;r["lib.es2021.string.d.ts"]=!0;r["lib.es2021.weakref.d.ts"]=!0;r["lib.es2022.array.d.ts"]=!0;r["lib.es2022.d.ts"]=!0;r["lib.es2022.error.d.ts"]=!0;r["lib.es2022.full.d.ts"]=!0;r["lib.es2022.intl.d.ts"]=!0;r["lib.es2022.object.d.ts"]=!0;r["lib.es2022.regexp.d.ts"]=!0;r["lib.es2022.string.d.ts"]=!0;r["lib.es2023.array.d.ts"]=!0;r["lib.es2023.collection.d.ts"]=!0;r["lib.es2023.d.ts"]=!0;r["lib.es2023.full.d.ts"]=!0;r["lib.es2023.intl.d.ts"]=!0;r["lib.es2024.arraybuffer.d.ts"]=!0;r["lib.es2024.collection.d.ts"]=!0;r["lib.es2024.d.ts"]=!0;r["lib.es2024.full.d.ts"]=!0;r["lib.es2024.object.d.ts"]=!0;r["lib.es2024.promise.d.ts"]=!0;r["lib.es2024.regexp.d.ts"]=!0;r["lib.es2024.sharedmemory.d.ts"]=!0;r["lib.es2024.string.d.ts"]=!0;r["lib.es5.d.ts"]=!0;r["lib.es6.d.ts"]=!0;r["lib.esnext.array.d.ts"]=!0;r["lib.esnext.collection.d.ts"]=!0;r["lib.esnext.d.ts"]=!0;r["lib.esnext.decorators.d.ts"]=!0;r["lib.esnext.disposable.d.ts"]=!0;r["lib.esnext.error.d.ts"]=!0;r["lib.esnext.float16.d.ts"]=!0;r["lib.esnext.full.d.ts"]=!0;r["lib.esnext.intl.d.ts"]=!0;r["lib.esnext.iterator.d.ts"]=!0;r["lib.esnext.promise.d.ts"]=!0;r["lib.esnext.sharedmemory.d.ts"]=!0;r["lib.scripthost.d.ts"]=!0;r["lib.webworker.asynciterable.d.ts"]=!0;r["lib.webworker.d.ts"]=!0;r["lib.webworker.importscripts.d.ts"]=!0;r["lib.webworker.iterable.d.ts"]=!0;function T(i,t,e=0){if(typeof i=="string")return i;if(i===void 0)return"";let a="";if(e){a+=t;for(let o=0;o<e;o++)a+=" "}if(a+=i.messageText,e++,i.next)for(let o of i.next)a+=T(o,t,e);return a}function _(i){return i?i.map(t=>t.text).join(""):""}var y=class{constructor(t){this._worker=t}_textSpanToRange(t,e){let a=t.getPositionAt(e.start),o=t.getPositionAt(e.start+e.length),{lineNumber:l,column:m}=a,{lineNumber:n,column:s}=o;return{startLineNumber:l,startColumn:m,endLineNumber:n,endColumn:s}}},L=class{constructor(t){this._worker=t,this._libFiles={},this._hasFetchedLibFiles=!1,this._fetchLibFilesPromise=null}isLibFile(t){return t&&t.path.indexOf("/lib.")===0?!!r[t.path.slice(1)]:!1}getOrCreateModel(t){let e=C.parse(t),a=h.getModel(e);if(a)return a;if(this.isLibFile(e)&&this._hasFetchedLibFiles)return h.createModel(this._libFiles[e.path.slice(1)],"typescript",e);let o=Q.getExtraLibs()[t];return o?h.createModel(o.content,"typescript",e):null}_containsLibFile(t){for(let e of t)if(this.isLibFile(e))return!0;return!1}async fetchLibFilesIfNecessary(t){this._containsLibFile(t)&&await this._fetchLibFiles()}_fetchLibFiles(){return this._fetchLibFilesPromise||(this._fetchLibFilesPromise=this._worker().then(t=>t.getLibFiles()).then(t=>{this._hasFetchedLibFiles=!0,this._libFiles=t})),this._fetchLibFilesPromise}},A=class extends y{constructor(t,e,a,o){super(o),this._libFiles=t,this._defaults=e,this._selector=a,this._disposables=[],this._listener=Object.create(null);let l=s=>{if(s.getLanguageId()!==a)return;let c=()=>{let{onlyVisible:b}=this._defaults.getDiagnosticsOptions();b?s.isAttachedToEditor()&&this._doValidate(s):this._doValidate(s)},p,d=s.onDidChangeContent(()=>{clearTimeout(p),p=window.setTimeout(c,500)}),g=s.onDidChangeAttached(()=>{let{onlyVisible:b}=this._defaults.getDiagnosticsOptions();b&&(s.isAttachedToEditor()?c():h.setModelMarkers(s,this._selector,[]))});this._listener[s.uri.toString()]={dispose(){d.dispose(),g.dispose(),clearTimeout(p)}},c()},m=s=>{h.setModelMarkers(s,this._selector,[]);let c=s.uri.toString();this._listener[c]&&(this._listener[c].dispose(),delete this._listener[c])};this._disposables.push(h.onDidCreateModel(s=>l(s))),this._disposables.push(h.onWillDisposeModel(m)),this._disposables.push(h.onDidChangeModelLanguage(s=>{m(s.model),l(s.model)})),this._disposables.push({dispose(){for(let s of h.getModels())m(s)}});let n=()=>{for(let s of h.getModels())m(s),l(s)};this._disposables.push(this._defaults.onDidChange(n)),this._disposables.push(this._defaults.onDidExtraLibsChange(n)),h.getModels().forEach(s=>l(s))}dispose(){this._disposables.forEach(t=>t&&t.dispose()),this._disposables=[]}async _doValidate(t){let e=await this._worker(t.uri);if(t.isDisposed())return;let a=[],{noSyntaxValidation:o,noSemanticValidation:l,noSuggestionDiagnostics:m}=this._defaults.getDiagnosticsOptions();o||a.push(e.getSyntacticDiagnostics(t.uri.toString())),l||a.push(e.getSemanticDiagnostics(t.uri.toString())),m||a.push(e.getSuggestionDiagnostics(t.uri.toString()));let n=await Promise.all(a);if(!n||t.isDisposed())return;let s=n.reduce((p,d)=>d.concat(p),[]).filter(p=>(this._defaults.getDiagnosticsOptions().diagnosticCodesToIgnore||[]).indexOf(p.code)===-1),c=s.map(p=>p.relatedInformation||[]).reduce((p,d)=>d.concat(p),[]).map(p=>p.file?C.parse(p.file.fileName):null);await this._libFiles.fetchLibFilesIfNecessary(c),!t.isDisposed()&&h.setModelMarkers(t,this._selector,s.map(p=>this._convertDiagnostics(t,p)))}_convertDiagnostics(t,e){let a=e.start||0,o=e.length||1,{lineNumber:l,column:m}=t.getPositionAt(a),{lineNumber:n,column:s}=t.getPositionAt(a+o),c=[];return e.reportsUnnecessary&&c.push(U.Unnecessary),e.reportsDeprecated&&c.push(U.Deprecated),{severity:this._tsDiagnosticCategoryToMarkerSeverity(e.category),startLineNumber:l,startColumn:m,endLineNumber:n,endColumn:s,message:T(e.messageText,`
2
- `),code:e.code.toString(),tags:c,relatedInformation:this._convertRelatedInformation(t,e.relatedInformation)}}_convertRelatedInformation(t,e){if(!e)return[];let a=[];return e.forEach(o=>{let l=t;if(o.file&&(l=this._libFiles.getOrCreateModel(o.file.fileName)),!l)return;let m=o.start||0,n=o.length||1,{lineNumber:s,column:c}=l.getPositionAt(m),{lineNumber:p,column:d}=l.getPositionAt(m+n);a.push({resource:l.uri,startLineNumber:s,startColumn:c,endLineNumber:p,endColumn:d,message:T(o.messageText,`
3
- `)})}),a}_tsDiagnosticCategoryToMarkerSeverity(t){switch(t){case 1:return x.Error;case 3:return x.Info;case 0:return x.Warning;case 2:return x.Hint}return x.Info}},P=class i extends y{get triggerCharacters(){return["."]}async provideCompletionItems(t,e,a,o){let l=t.getWordUntilPosition(e),m=new B(e.lineNumber,l.startColumn,e.lineNumber,l.endColumn),n=t.uri,s=t.getOffsetAt(e),c=await this._worker(n);if(t.isDisposed())return;let p=await c.getCompletionsAtPosition(n.toString(),s);return!p||t.isDisposed()?void 0:{suggestions:p.entries.map(g=>{let b=m;if(g.replacementSpan){let v=t.getPositionAt(g.replacementSpan.start),D=t.getPositionAt(g.replacementSpan.start+g.replacementSpan.length);b=new B(v.lineNumber,v.column,D.lineNumber,D.column)}let S=[];return g.kindModifiers!==void 0&&g.kindModifiers.indexOf("deprecated")!==-1&&S.push(u.CompletionItemTag.Deprecated),{uri:n,position:e,offset:s,range:b,label:g.name,insertText:g.name,sortText:g.sortText,kind:i.convertKind(g.kind),tags:S}})}}async resolveCompletionItem(t,e){let a=t,o=a.uri,l=a.position,m=a.offset,s=await(await this._worker(o)).getCompletionEntryDetails(o.toString(),m,a.label);return s?{uri:o,position:l,label:s.name,kind:i.convertKind(s.kind),detail:_(s.displayParts),documentation:{value:i.createDocumentationString(s)}}:a}static convertKind(t){switch(t){case f.primitiveType:case f.keyword:return u.CompletionItemKind.Keyword;case f.variable:case f.localVariable:return u.CompletionItemKind.Variable;case f.memberVariable:case f.memberGetAccessor:case f.memberSetAccessor:return u.CompletionItemKind.Field;case f.function:case f.memberFunction:case f.constructSignature:case f.callSignature:case f.indexSignature:return u.CompletionItemKind.Function;case f.enum:return u.CompletionItemKind.Enum;case f.module:return u.CompletionItemKind.Module;case f.class:return u.CompletionItemKind.Class;case f.interface:return u.CompletionItemKind.Interface;case f.warning:return u.CompletionItemKind.File}return u.CompletionItemKind.Property}static createDocumentationString(t){let e=_(t.documentation);if(t.tags)for(let a of t.tags)e+=`
4
-
5
- ${X(a)}`;return e}};function X(i){let t=`*@${i.name}*`;if(i.name==="param"&&i.text){let[e,...a]=i.text;t+=`\`${e.text}\``,a.length>0&&(t+=` \u2014 ${a.map(o=>o.text).join(" ")}`)}else Array.isArray(i.text)?t+=` \u2014 ${i.text.map(e=>e.text).join(" ")}`:i.text&&(t+=` \u2014 ${i.text}`);return t}var I=class i extends y{constructor(){super(...arguments),this.signatureHelpTriggerCharacters=["(",","]}static _toSignatureHelpTriggerReason(t){switch(t.triggerKind){case u.SignatureHelpTriggerKind.TriggerCharacter:return t.triggerCharacter?t.isRetrigger?{kind:"retrigger",triggerCharacter:t.triggerCharacter}:{kind:"characterTyped",triggerCharacter:t.triggerCharacter}:{kind:"invoked"};case u.SignatureHelpTriggerKind.ContentChange:return t.isRetrigger?{kind:"retrigger"}:{kind:"invoked"};case u.SignatureHelpTriggerKind.Invoke:default:return{kind:"invoked"}}}async provideSignatureHelp(t,e,a,o){let l=t.uri,m=t.getOffsetAt(e),n=await this._worker(l);if(t.isDisposed())return;let s=await n.getSignatureHelpItems(l.toString(),m,{triggerReason:i._toSignatureHelpTriggerReason(o)});if(!s||t.isDisposed())return;let c={activeSignature:s.selectedItemIndex,activeParameter:s.argumentIndex,signatures:[]};return s.items.forEach(p=>{let d={label:"",parameters:[]};d.documentation={value:_(p.documentation)},d.label+=_(p.prefixDisplayParts),p.parameters.forEach((g,b,S)=>{let v=_(g.displayParts),D={label:v,documentation:{value:_(g.documentation)}};d.label+=v,d.parameters.push(D),b<S.length-1&&(d.label+=_(p.separatorDisplayParts))}),d.label+=_(p.suffixDisplayParts),c.signatures.push(d)}),{value:c,dispose(){}}}},O=class extends y{async provideHover(t,e,a){let o=t.uri,l=t.getOffsetAt(e),m=await this._worker(o);if(t.isDisposed())return;let n=await m.getQuickInfoAtPosition(o.toString(),l);if(!n||t.isDisposed())return;let s=_(n.documentation),c=n.tags?n.tags.map(d=>X(d)).join(`
6
-
7
- `):"",p=_(n.displayParts);return{range:this._textSpanToRange(t,n.textSpan),contents:[{value:"```typescript\n"+p+"\n```\n"},{value:s+(c?`
8
-
9
- `+c:"")}]}}},N=class extends y{async provideDocumentHighlights(t,e,a){let o=t.uri,l=t.getOffsetAt(e),m=await this._worker(o);if(t.isDisposed())return;let n=await m.getDocumentHighlights(o.toString(),l,[o.toString()]);if(!(!n||t.isDisposed()))return n.flatMap(s=>s.highlightSpans.map(c=>({range:this._textSpanToRange(t,c.textSpan),kind:c.kind==="writtenReference"?u.DocumentHighlightKind.Write:u.DocumentHighlightKind.Text})))}},K=class extends y{constructor(t,e){super(e),this._libFiles=t}async provideDefinition(t,e,a){let o=t.uri,l=t.getOffsetAt(e),m=await this._worker(o);if(t.isDisposed())return;let n=await m.getDefinitionAtPosition(o.toString(),l);if(!n||t.isDisposed()||(await this._libFiles.fetchLibFilesIfNecessary(n.map(c=>C.parse(c.fileName))),t.isDisposed()))return;let s=[];for(let c of n){let p=this._libFiles.getOrCreateModel(c.fileName);p&&s.push({uri:p.uri,range:this._textSpanToRange(p,c.textSpan)})}return s}},M=class extends y{constructor(t,e){super(e),this._libFiles=t}async provideReferences(t,e,a,o){let l=t.uri,m=t.getOffsetAt(e),n=await this._worker(l);if(t.isDisposed())return;let s=await n.getReferencesAtPosition(l.toString(),m);if(!s||t.isDisposed()||(await this._libFiles.fetchLibFilesIfNecessary(s.map(p=>C.parse(p.fileName))),t.isDisposed()))return;let c=[];for(let p of s){let d=this._libFiles.getOrCreateModel(p.fileName);d&&c.push({uri:d.uri,range:this._textSpanToRange(d,p.textSpan)})}return c}},R=class extends y{async provideDocumentSymbols(t,e){let a=t.uri,o=await this._worker(a);if(t.isDisposed())return;let l=await o.getNavigationTree(a.toString());if(!l||t.isDisposed())return;let m=(s,c)=>({name:s.text,detail:"",kind:w[s.kind]||u.SymbolKind.Variable,range:this._textSpanToRange(t,s.spans[0]),selectionRange:this._textSpanToRange(t,s.spans[0]),tags:[],children:s.childItems?.map(d=>m(d,s.text)),containerName:c});return l.childItems?l.childItems.map(s=>m(s)):[]}},f=(()=>{class i{}return i.unknown="",i.keyword="keyword",i.script="script",i.module="module",i.class="class",i.interface="interface",i.type="type",i.enum="enum",i.variable="var",i.localVariable="local var",i.function="function",i.localFunction="local function",i.memberFunction="method",i.memberGetAccessor="getter",i.memberSetAccessor="setter",i.memberVariable="property",i.constructorImplementation="constructor",i.callSignature="call",i.indexSignature="index",i.constructSignature="construct",i.parameter="parameter",i.typeParameter="type parameter",i.primitiveType="primitive type",i.label="label",i.alias="alias",i.const="const",i.let="let",i.warning="warning",i})(),w=Object.create(null);w[f.module]=u.SymbolKind.Module;w[f.class]=u.SymbolKind.Class;w[f.enum]=u.SymbolKind.Enum;w[f.interface]=u.SymbolKind.Interface;w[f.memberFunction]=u.SymbolKind.Method;w[f.memberVariable]=u.SymbolKind.Property;w[f.memberGetAccessor]=u.SymbolKind.Property;w[f.memberSetAccessor]=u.SymbolKind.Property;w[f.variable]=u.SymbolKind.Variable;w[f.const]=u.SymbolKind.Variable;w[f.localVariable]=u.SymbolKind.Variable;w[f.variable]=u.SymbolKind.Variable;w[f.function]=u.SymbolKind.Function;w[f.localFunction]=u.SymbolKind.Function;var k=class extends y{static _convertOptions(t){return{ConvertTabsToSpaces:t.insertSpaces,TabSize:t.tabSize,IndentSize:t.tabSize,IndentStyle:2,NewLineCharacter:`
10
- `,InsertSpaceAfterCommaDelimiter:!0,InsertSpaceAfterSemicolonInForStatements:!0,InsertSpaceBeforeAndAfterBinaryOperators:!0,InsertSpaceAfterKeywordsInControlFlowStatements:!0,InsertSpaceAfterFunctionKeywordForAnonymousFunctions:!0,InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis:!1,InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets:!1,InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces:!1,PlaceOpenBraceOnNewLineForControlBlocks:!1,PlaceOpenBraceOnNewLineForFunctions:!1}}_convertTextChanges(t,e){return{text:e.newText,range:this._textSpanToRange(t,e.span)}}},E=class extends k{constructor(){super(...arguments),this.canFormatMultipleRanges=!1}async provideDocumentRangeFormattingEdits(t,e,a,o){let l=t.uri,m=t.getOffsetAt({lineNumber:e.startLineNumber,column:e.startColumn}),n=t.getOffsetAt({lineNumber:e.endLineNumber,column:e.endColumn}),s=await this._worker(l);if(t.isDisposed())return;let c=await s.getFormattingEditsForRange(l.toString(),m,n,k._convertOptions(a));if(!(!c||t.isDisposed()))return c.map(p=>this._convertTextChanges(t,p))}},H=class extends k{get autoFormatTriggerCharacters(){return[";","}",`
11
- `]}async provideOnTypeFormattingEdits(t,e,a,o,l){let m=t.uri,n=t.getOffsetAt(e),s=await this._worker(m);if(t.isDisposed())return;let c=await s.getFormattingEditsAfterKeystroke(m.toString(),n,a,k._convertOptions(o));if(!(!c||t.isDisposed()))return c.map(p=>this._convertTextChanges(t,p))}},V=class extends k{async provideCodeActions(t,e,a,o){let l=t.uri,m=t.getOffsetAt({lineNumber:e.startLineNumber,column:e.startColumn}),n=t.getOffsetAt({lineNumber:e.endLineNumber,column:e.endColumn}),s=k._convertOptions(t.getOptions()),c=a.markers.filter(b=>b.code).map(b=>b.code).map(Number),p=await this._worker(l);if(t.isDisposed())return;let d=await p.getCodeFixesAtPosition(l.toString(),m,n,c,s);return!d||t.isDisposed()?{actions:[],dispose:()=>{}}:{actions:d.filter(b=>b.changes.filter(S=>S.isNewFile).length===0).map(b=>this._tsCodeFixActionToMonacoCodeAction(t,a,b)),dispose:()=>{}}}_tsCodeFixActionToMonacoCodeAction(t,e,a){let o=[];for(let m of a.changes)for(let n of m.textChanges)o.push({resource:t.uri,versionId:void 0,textEdit:{range:this._textSpanToRange(t,n.span),text:n.newText}});return{title:a.description,edit:{edits:o},diagnostics:e.markers,kind:"quickfix"}}},W=class extends y{constructor(t,e){super(e),this._libFiles=t}async provideRenameEdits(t,e,a,o){let l=t.uri,m=l.toString(),n=t.getOffsetAt(e),s=await this._worker(l);if(t.isDisposed())return;let c=await s.getRenameInfo(m,n,{allowRenameOfImportPath:!1});if(c.canRename===!1)return{edits:[],rejectReason:c.localizedErrorMessage};if(c.fileToRename!==void 0)throw new Error("Renaming files is not supported.");let p=await s.findRenameLocations(m,n,!1,!1,!1);if(!p||t.isDisposed())return;let d=[];for(let g of p){let b=this._libFiles.getOrCreateModel(g.fileName);if(b)d.push({resource:b.uri,versionId:void 0,textEdit:{range:this._textSpanToRange(b,g.textSpan),text:a}});else throw new Error(`Unknown file ${g.fileName}.`)}return{edits:d}}},j=class extends y{async provideInlayHints(t,e,a){let o=t.uri,l=o.toString(),m=t.getOffsetAt({lineNumber:e.startLineNumber,column:e.startColumn}),n=t.getOffsetAt({lineNumber:e.endLineNumber,column:e.endColumn}),s=await this._worker(o);return t.isDisposed()?null:{hints:(await s.provideInlayHints(l,m,n)).map(d=>J(G({},d),{label:d.text,position:t.getPositionAt(d.position),kind:this._convertHintKind(d.kind)})),dispose:()=>{}}}_convertHintKind(t){switch(t){case"Parameter":return u.InlayHintKind.Parameter;case"Type":return u.InlayHintKind.Type;default:return u.InlayHintKind.Type}}};var $,z;function ms(i){z=Y(i,"typescript")}function ds(i){$=Y(i,"javascript")}function fs(){return new Promise((i,t)=>{if(!$)return t("JavaScript not registered!");i($)})}function gs(){return new Promise((i,t)=>{if(!z)return t("TypeScript not registered!");i(z)})}function Y(i,t){let e=[],a=new F(t,i),o=(...n)=>a.getLanguageServiceWorker(...n),l=new L(o);function m(){let{modeConfiguration:n}=i;Z(e),n.completionItems&&e.push(u.registerCompletionItemProvider(t,new P(o))),n.signatureHelp&&e.push(u.registerSignatureHelpProvider(t,new I(o))),n.hovers&&e.push(u.registerHoverProvider(t,new O(o))),n.documentHighlights&&e.push(u.registerDocumentHighlightProvider(t,new N(o))),n.definitions&&e.push(u.registerDefinitionProvider(t,new K(l,o))),n.references&&e.push(u.registerReferenceProvider(t,new M(l,o))),n.documentSymbols&&e.push(u.registerDocumentSymbolProvider(t,new R(o))),n.rename&&e.push(u.registerRenameProvider(t,new W(l,o))),n.documentRangeFormattingEdits&&e.push(u.registerDocumentRangeFormattingEditProvider(t,new E(o))),n.onTypeFormattingEdits&&e.push(u.registerOnTypeFormattingEditProvider(t,new H(o))),n.codeActions&&e.push(u.registerCodeActionProvider(t,new V(o))),n.inlayHints&&e.push(u.registerInlayHintsProvider(t,new j(o))),n.diagnostics&&e.push(new A(l,i,t,o))}return m(),o}function Z(i){for(;i.length;)i.pop().dispose()}export{y as Adapter,V as CodeActionAdaptor,K as DefinitionAdapter,A as DiagnosticsAdapter,N as DocumentHighlightAdapter,E as FormatAdapter,k as FormatHelper,H as FormatOnTypeAdapter,j as InlayHintsAdapter,f as Kind,L as LibFiles,R as OutlineAdapter,O as QuickInfoAdapter,M as ReferenceAdapter,W as RenameAdapter,I as SignatureHelpAdapter,P as SuggestAdapter,F as WorkerManager,T as flattenDiagnosticMessageText,fs as getJavaScriptWorker,gs as getTypeScriptWorker,ds as setupJavaScript,ms as setupTypeScript};
@@ -1 +0,0 @@
1
- import"./chunk-Q7L6LLAK.js";var e={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*//\\s*#region\\b|^\\s*\\(\\*\\s*#region(.*)\\*\\)"),end:new RegExp("^\\s*//\\s*#endregion\\b|^\\s*\\(\\*\\s*#endregion\\s*\\*\\)")}}},n={defaultToken:"",tokenPostfix:".fs",keywords:["abstract","and","atomic","as","assert","asr","base","begin","break","checked","component","const","constraint","constructor","continue","class","default","delegate","do","done","downcast","downto","elif","else","end","exception","eager","event","external","extern","false","finally","for","fun","function","fixed","functor","global","if","in","include","inherit","inline","interface","internal","land","lor","lsl","lsr","lxor","lazy","let","match","member","mod","module","mutable","namespace","method","mixin","new","not","null","of","open","or","object","override","private","parallel","process","protected","pure","public","rec","return","static","sealed","struct","sig","then","to","true","tailcall","trait","try","type","upcast","use","val","void","virtual","volatile","when","while","with","yield"],symbols:/[=><!~?:&|+\-*\^%;\.,\/]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,integersuffix:/[uU]?[yslnLI]?/,floatsuffix:/[fFmM]?/,tokenizer:{root:[[/[a-zA-Z_]\w*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/\[<.*>\]/,"annotation"],[/^#(if|else|endif)/,"keyword"],[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,"delimiter"],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0x[0-9a-fA-F]+LF/,"number.float"],[/0x[0-9a-fA-F]+(@integersuffix)/,"number.hex"],[/0b[0-1]+(@integersuffix)/,"number.bin"],[/\d+(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"""/,"string",'@string."""'],[/"/,"string",'@string."'],[/\@"/,{token:"string.quote",next:"@litstring"}],[/'[^\\']'B?/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\(\*(?!\))/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^*(]+/,"comment"],[/\*\)/,"comment","@pop"],[/\*/,"comment"],[/\(\*\)/,"comment"],[/\(/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/("""|"B?)/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]]}};export{e as conf,n as language};