@repo-os/repoos 0.5.60 → 0.5.61

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 (100) hide show
  1. package/dist/.build-info.json +2 -2
  2. package/dist/.build-stamp.json +1 -1
  3. package/dist/ui/assets/{AgentsView-D0-0eTHc.js → AgentsView-9q7anXPX.js} +1 -1
  4. package/dist/ui/assets/{ChecksView-CuSoxLqv.css → ChecksView-DBUUKFT9.css} +1 -1
  5. package/dist/ui/assets/{ChecksView-B1i8XJKX.js → ChecksView-WlGBjSN-.js} +0 -0
  6. package/dist/ui/assets/{ContextView-BZtBkBvL.js → ContextView-B87v6rtv.js} +2 -2
  7. package/dist/ui/assets/{DashboardView-L3LxrCcG.js → DashboardView-CvSco6zw.js} +1 -1
  8. package/dist/ui/assets/{DiffView-CwcQsIy6.js → DiffView-vysXxYX3.js} +1 -1
  9. package/dist/ui/assets/{InputsView-DV--xXFD.js → InputsView-ADPSWfEb.js} +1 -1
  10. package/dist/ui/assets/{LoginView-CZyIyLbb.js → LoginView-1MpUfPOJ.js} +1 -1
  11. package/dist/ui/assets/{SettingsView-DcAJ_7I0.js → SettingsView-7duYhb2b.js} +1 -1
  12. package/dist/ui/assets/{StoriesView-7Y-m9ze_.js → StoriesView-DBnVlo1n.js} +1 -1
  13. package/dist/ui/assets/{WorkView-D3wRNx9w.js → WorkView-Bj-zrB-5.js} +1 -1
  14. package/dist/ui/assets/{abnfDiagram-VCTEODGH-CR-dgaI5.js → abnfDiagram-VCTEODGH-DcvIp8yb.js} +1 -1
  15. package/dist/ui/assets/architecture-7GRP2DOG-BD7yzf3L.js +1 -0
  16. package/dist/ui/assets/{architectureDiagram-5GKGNRK7-DZ96SWkx.js → architectureDiagram-5GKGNRK7-BZtu19cM.js} +1 -1
  17. package/dist/ui/assets/{blockDiagram-I7D4REHJ-DGqfLA3z.js → blockDiagram-I7D4REHJ-DmsRAZPM.js} +1 -1
  18. package/dist/ui/assets/{c4Diagram-7LVT6UL2-Cowa_bSL.js → c4Diagram-7LVT6UL2-CwkFgzc_.js} +1 -1
  19. package/dist/ui/assets/channel-DN5lHn6g.js +1 -0
  20. package/dist/ui/assets/{chunk-4HAMMTFA-BcVHsIg0.js → chunk-4HAMMTFA-NQ0EXnu1.js} +1 -1
  21. package/dist/ui/assets/{chunk-75Z2AOVW-CCrPEBxq.js → chunk-75Z2AOVW-D3vFPpCL.js} +1 -1
  22. package/dist/ui/assets/{chunk-DU6HZSFF-BlxKgrXx.js → chunk-DU6HZSFF-BUg7lr0p.js} +1 -1
  23. package/dist/ui/assets/{chunk-F27PBJKO-CoHtdaN7.js → chunk-F27PBJKO-CaIzqvK8.js} +1 -1
  24. package/dist/ui/assets/{chunk-GMAD6QVW-BcsnrHyI.js → chunk-GMAD6QVW-C6MmVDs8.js} +1 -1
  25. package/dist/ui/assets/{chunk-GVQU2GXP-DsWHJ94f.js → chunk-GVQU2GXP-DVsfbizv.js} +1 -1
  26. package/dist/ui/assets/{chunk-IMKFNOWR-DR9nP96a.js → chunk-IMKFNOWR-Bm_Ho6tm.js} +1 -1
  27. package/dist/ui/assets/{chunk-L3NEJ4N5-CB-GwFZo.js → chunk-L3NEJ4N5-e6EnP3AO.js} +1 -1
  28. package/dist/ui/assets/{chunk-OSK3NFVY-iY9KK7zg.js → chunk-OSK3NFVY-8PZkkCN2.js} +1 -1
  29. package/dist/ui/assets/{chunk-P2QGCYS3-CqI6JQdG.js → chunk-P2QGCYS3-cohJ6no2.js} +1 -1
  30. package/dist/ui/assets/{chunk-POPQ4Y6H-DV25Tql2.js → chunk-POPQ4Y6H-DTK3n5KW.js} +1 -1
  31. package/dist/ui/assets/{chunk-PWAF6VOD-DSYNRc8Y.js → chunk-PWAF6VOD-DGHKZoGz.js} +1 -1
  32. package/dist/ui/assets/{chunk-SHT3W25Y-Bo50rAC0.js → chunk-SHT3W25Y-p9PDFIUI.js} +1 -1
  33. package/dist/ui/assets/{chunk-SVP7TREG-BXeqvMHD.js → chunk-SVP7TREG-B55APnbi.js} +1 -1
  34. package/dist/ui/assets/{chunk-TICWLB2K-mRRCAZVT.js → chunk-TICWLB2K-By49cCSI.js} +1 -1
  35. package/dist/ui/assets/classDiagram-ZZMXUADV-CT1EkiYq.js +1 -0
  36. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-CT1EkiYq.js +1 -0
  37. package/dist/ui/assets/{cynefin-OW5HDTMX-j8AhdAmH.js → cynefin-OW5HDTMX-DG3pgtMl.js} +1 -1
  38. package/dist/ui/assets/{cynefinDiagram-5FMLGOSQ-T9YMbC5-.js → cynefinDiagram-5FMLGOSQ-BZWfawZP.js} +1 -1
  39. package/dist/ui/assets/{dagre-GXQ25YYZ-Db7gL2It.js → dagre-GXQ25YYZ-BjU77YUR.js} +1 -1
  40. package/dist/ui/assets/{diagram-S7CK7UJ4-u2nvAKJY.js → diagram-S7CK7UJ4-pLPKv2uC.js} +1 -1
  41. package/dist/ui/assets/{diagram-UQ7AKVKN-DTDLg2RD.js → diagram-UQ7AKVKN-BwdqJ0w5.js} +1 -1
  42. package/dist/ui/assets/{diagram-VSXAHHWV-Bg1yw3NM.js → diagram-VSXAHHWV-By6r2KA3.js} +1 -1
  43. package/dist/ui/assets/{diagram-VX7I27RA-C-2r-Zwc.js → diagram-VX7I27RA-CIJZw3zx.js} +1 -1
  44. package/dist/ui/assets/{diagram-Z3DM3KII-mhTivOeP.js → diagram-Z3DM3KII-CndjgxCz.js} +1 -1
  45. package/dist/ui/assets/{ebnfDiagram-PWID7BFC-BomtsdPH.js → ebnfDiagram-PWID7BFC-BMuc5oZZ.js} +1 -1
  46. package/dist/ui/assets/{erDiagram-RLTQ6QDP-ByyLYlKt.js → erDiagram-RLTQ6QDP-DBaUexRT.js} +1 -1
  47. package/dist/ui/assets/eventmodeling-NTZA5JFV-VCxcChvR.js +1 -0
  48. package/dist/ui/assets/flowDiagram-HODETNUW-CcYzPgFT.js +1 -0
  49. package/dist/ui/assets/{ganttDiagram-EL5Y4UJY-vwT9SFzy.js → ganttDiagram-EL5Y4UJY-DNjjWKzP.js} +1 -1
  50. package/dist/ui/assets/{gitGraph-4MIJSDKK-D4MR7EUd.js → gitGraph-4MIJSDKK-EGWVt0D-.js} +1 -1
  51. package/dist/ui/assets/{gitGraphDiagram-WWUBYQGX-CAs6Oicn.js → gitGraphDiagram-WWUBYQGX-FVI5MhlF.js} +1 -1
  52. package/dist/ui/assets/{index-DGwt0YaQ.js → index-C1p-aj2F.js} +2 -2
  53. package/dist/ui/assets/{info-A6RAGUB7-D-SDm8bt.js → info-A6RAGUB7-C6JXgt_P.js} +1 -1
  54. package/dist/ui/assets/{infoDiagram-27XIBGKW-I3RynMEK.js → infoDiagram-27XIBGKW-LbHcbqu2.js} +1 -1
  55. package/dist/ui/assets/{ishikawaDiagram-5VMMS53U-DViQsOVU.js → ishikawaDiagram-5VMMS53U-DfBOtewc.js} +1 -1
  56. package/dist/ui/assets/{journeyDiagram-3NMN7TZE-CoJkCrsA.js → journeyDiagram-3NMN7TZE-COg2Q6b9.js} +1 -1
  57. package/dist/ui/assets/{kanban-definition-UXKFOSKX-De32ZjHj.js → kanban-definition-UXKFOSKX-C1kytub8.js} +1 -1
  58. package/dist/ui/assets/{line-RJPM2c8D.js → line-A0XnPGQP.js} +1 -1
  59. package/dist/ui/assets/{mermaid-parser.core-bWpp6huV.js → mermaid-parser.core-5O3LQ8h4.js} +3 -3
  60. package/dist/ui/assets/{mermaid.core-CG0WgtUh.js → mermaid.core-BzCX7E5U.js} +4 -4
  61. package/dist/ui/assets/{mindmap-definition-YA3MSWOX-C56ZodSM.js → mindmap-definition-YA3MSWOX-CpFtBS4e.js} +1 -1
  62. package/dist/ui/assets/{packet-AYTQ26CC-CndaUGZ1.js → packet-AYTQ26CC-Cm5QNu9T.js} +1 -1
  63. package/dist/ui/assets/{pegDiagram-XKGWAZYB-DCC4hvTA.js → pegDiagram-XKGWAZYB-CWWpQpMC.js} +1 -1
  64. package/dist/ui/assets/{pie-WAS4IAKB-Cfm-_dkl.js → pie-WAS4IAKB-cth2dmy7.js} +1 -1
  65. package/dist/ui/assets/{pieDiagram-E7YTZNPT-Di3aGaMm.js → pieDiagram-E7YTZNPT-BkMWAnyL.js} +1 -1
  66. package/dist/ui/assets/{quadrantDiagram-AXDQQJYC-q_I_jD91.js → quadrantDiagram-AXDQQJYC-CtYG0RMe.js} +1 -1
  67. package/dist/ui/assets/{radar-RG4KPBEZ-DtiqcHoq.js → radar-RG4KPBEZ-CWQn9yqC.js} +1 -1
  68. package/dist/ui/assets/{railroad-74A4TZTK-DnepJqEX.js → railroad-74A4TZTK-yzw5kp92.js} +1 -1
  69. package/dist/ui/assets/railroad-abnf-HS5TGJTU-BiZBX6Vw.js +1 -0
  70. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-D9_CRhut.js +1 -0
  71. package/dist/ui/assets/railroad-peg-WCYAUIDC-DU96MxW6.js +1 -0
  72. package/dist/ui/assets/{railroadDiagram-O6MQD6OU-I8cQO0Ff.js → railroadDiagram-O6MQD6OU-DcZCjxPJ.js} +1 -1
  73. package/dist/ui/assets/{requirementDiagram-BXWQKSXE-CJJ0Hb8G.js → requirementDiagram-BXWQKSXE-CzitoqBl.js} +1 -1
  74. package/dist/ui/assets/{sankeyDiagram-P5KCCOFB-sV__k-lq.js → sankeyDiagram-P5KCCOFB-DFfw41CU.js} +1 -1
  75. package/dist/ui/assets/{sequenceDiagram-WJ2MYXX4-ouV9lTvQ.js → sequenceDiagram-WJ2MYXX4-DZoiKzMQ.js} +1 -1
  76. package/dist/ui/assets/{stateDiagram-D77RDMKH-hb_F14o9.js → stateDiagram-D77RDMKH-Yz89g9Nk.js} +1 -1
  77. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-Rj9MVdRm.js +1 -0
  78. package/dist/ui/assets/{swimlanes-42K2YHIH-zLlllJjz.js → swimlanes-42K2YHIH-DEroTaU_.js} +1 -1
  79. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-Ceol23D9.js +8 -0
  80. package/dist/ui/assets/{timeline-definition-24CTP7MA-sH1isqOu.js → timeline-definition-24CTP7MA-M5Q5DaRA.js} +1 -1
  81. package/dist/ui/assets/{treeView-Q6P3EWNA-BCmHIy3a.js → treeView-Q6P3EWNA-Tf-o5GnU.js} +1 -1
  82. package/dist/ui/assets/{treemap-WGGIJYW6-Dt0_pLds.js → treemap-WGGIJYW6-CGGNjkt2.js} +1 -1
  83. package/dist/ui/assets/{vennDiagram-4TSXK5OY-VyFD_IW6.js → vennDiagram-4TSXK5OY-5BIZGh7s.js} +1 -1
  84. package/dist/ui/assets/{wardley-WFR3VGLG-Bbzy3wiO.js → wardley-WFR3VGLG-BRynAGzB.js} +1 -1
  85. package/dist/ui/assets/{wardleyDiagram-VM6X3IG4-ywLURBFW.js → wardleyDiagram-VM6X3IG4-N9SyQ8L2.js} +1 -1
  86. package/dist/ui/assets/{xychartDiagram-S5SC5T6Z-B5J_sFHA.js → xychartDiagram-S5SC5T6Z-CzqGBWIA.js} +1 -1
  87. package/dist/ui/index.html +1 -1
  88. package/dist/ui/sw.js +2 -2
  89. package/package.json +1 -1
  90. package/dist/ui/assets/architecture-7GRP2DOG-Ck8_HLSt.js +0 -1
  91. package/dist/ui/assets/channel-f69_ZBo8.js +0 -1
  92. package/dist/ui/assets/classDiagram-ZZMXUADV-Bep317uI.js +0 -1
  93. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-Bep317uI.js +0 -1
  94. package/dist/ui/assets/eventmodeling-NTZA5JFV-KeldQ82t.js +0 -1
  95. package/dist/ui/assets/flowDiagram-HODETNUW-BGCbuMAO.js +0 -1
  96. package/dist/ui/assets/railroad-abnf-HS5TGJTU-BURH3L8i.js +0 -1
  97. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-BBeSEJsW.js +0 -1
  98. package/dist/ui/assets/railroad-peg-WCYAUIDC-BbMPu8ur.js +0 -1
  99. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-B8tCq2OW.js +0 -1
  100. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-CXzbsdys.js +0 -8
@@ -1,5 +1,5 @@
1
1
  {
2
- "hash": "cf6db5df542f115cccfac9cdfcfbd0703be0f1fa5628e248d1aa85ff48bf2c09",
3
- "version": "0.5.60",
2
+ "hash": "d8f2fd84b0323805456be5ae097bb68374f6464ff9c4a181f08c8a64066807ab",
3
+ "version": "0.5.61",
4
4
  "devUi": false
5
5
  }
@@ -1,3 +1,3 @@
1
1
  {
2
- "generatedAt": "2026-09-30T14:26:04.444Z"
2
+ "generatedAt": "2026-09-30T16:02:14.887Z"
3
3
  }
@@ -1 +1 @@
1
- import{C as e,D as t,Dt as n,Et as r,H as i,J as a,K as o,O as s,S as c,St as l,T as u,V as d,W as f,at as p,et as m,f as h,ft as g,g as _,h as ee,i as v,it as y,k as b,m as x,mt as S,p as C,r as w,v as T,w as E,wt as D,x as O,y as k}from"./vendor-vue-0d2wfih_.js";import{a as A,r as te}from"./api-BXg3t-A6.js";import{r as j}from"./config-BpusGwRJ.js";import{Ct as M,R as N,ht as P,k as ne,pt as F}from"./vendor-ui-BbK4TVl8.js";import{t as I}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as L}from"./button-BsLUWnfn.js";import{a as R,i as z,n as B,o as re,r as ie,t as ae}from"./title-CmTcwJQC.js";import{o as V,t as oe}from"./VoiceDictate-C0-jNbo1.js";import{n as H,t as U}from"./useChatScroll-BD10j3cq.js";import{t as se}from"./clipboard-CkhTprDX.js";import{n as ce}from"./AgentModelModal-CFdPv_af.js";import{A as le,F as W,K as ue,T as de,d as fe,f as pe,h as me,l as he,m as ge,n as _e,p as ve,u as ye}from"./index-DGwt0YaQ.js";var be={class:`agent-head`},xe={class:`agent-title`},Se={key:1,class:`agent-name`},Ce={key:2,class:`agent-badge`},we={key:0,style:{display:`flex`,"align-items":`center`,gap:`10px`}},Te={class:`agent-body`},Ee={class:`agent-field`},De={key:0,class:`agent-legacy-notice`,role:`status`},Oe={class:`agent-field agent-test-result`},ke={class:`agent-test-actions`},Ae={key:0,class:`model-test-spinner`},je=[`title`],Me={class:`agent-field agent-instr-field`},Ne={class:`instr-header agent-instr-header`},Pe={class:`agent-instr-header-actions`},G=[`aria-expanded`,`title`],K=[`value`],Fe={key:0,class:`agent-field agent-skills-field`},Ie={class:`agent-skills-row`},Le={class:`agent-skills-inline-summary`},Re=`Skills are selected dynamically for each task/run from repository skills; these are this agent's preferred candidates.`,ze=b({__name:`AgentCard`,props:{agent:{},variant:{},cliOptions:{},memoryKey:{},skillsAvailable:{type:Boolean},testing:{type:Boolean},testResult:{},registerInstrRef:{type:Function}},emits:[`test`,`open-skills`,`remove`,`instr-input`,`instr-blur`,`open-recommendations`,`transcribed`],setup(r,{emit:i}){let a=r,o=i,d=j(),p=S(!1);function m(e){return e.toLowerCase()===`gemini`}function h(){return a.variant==="default"?`default`:a.variant===`team`?`team`:null}return(i,g)=>(f(),u(`div`,{class:D([`agent-card`,{off:!r.agent.enabled}])},[c(`div`,be,[c(`div`,xe,[g[13]||=c(`span`,{class:`agent-dot`},null,-1),r.variant===`custom`?(f(),e(le,{key:0,"model-value":r.agent.name,class:`w-[180px] h-[30px]`,"onUpdate:modelValue":g[0]||=e=>r.agent.name=String(e??``)},null,8,[`model-value`])):(f(),u(`span`,Se,n(r.agent.name),1)),h()?(f(),u(`span`,Ce,n(h()),1)):E(``,!0)]),r.variant===`custom`?(f(),u(`div`,we,[s(L,{variant:`ghost`,size:`sm`,class:`agent-remove`,onClick:g[1]||=e=>o(`remove`)},{default:y(()=>[...g[14]||=[t(` Remove `,-1)]]),_:1}),s(_e,{checked:r.agent.enabled,"onUpdate:checked":g[2]||=e=>r.agent.enabled=e},null,8,[`checked`])])):(f(),e(_e,{key:1,checked:r.agent.enabled,"onUpdate:checked":g[3]||=e=>r.agent.enabled=e},null,8,[`checked`]))]),c(`div`,Te,[c(`div`,Ee,[g[17]||=c(`label`,null,`Coding agent + Model`,-1),s(he,{"cli-options":r.cliOptions,"model-options":l(d).modelsFor(r.agent.cli,r.agent.model),"memory-key":r.memoryKey,cli:r.agent.cli,"onUpdate:cli":g[4]||=e=>r.agent.cli=e,model:r.agent.model,"onUpdate:model":g[5]||=e=>r.agent.model=e},null,8,[`cli-options`,`model-options`,`memory-key`,`cli`,`model`]),m(r.agent.cli)?(f(),u(`div`,De,[g[15]||=c(`strong`,null,`Deprecated Gemini CLI`,-1),g[16]||=t(` — this saved value is preserved for history, but new assignments use Antigravity CLI (agy). `,-1),c(`button`,{type:`button`,class:`model-pricing-link`,onClick:g[6]||=e=>o(`open-recommendations`)},` Migrate in the agent guide → `)])):E(``,!0)]),c(`div`,Oe,[g[18]||=c(`label`,null,`Compatibility`,-1),c(`div`,ke,[s(L,{variant:`outline`,size:`sm`,disabled:r.testing,onClick:g[7]||=e=>o(`test`)},{default:y(()=>[r.testing?(f(),u(`span`,Ae)):E(``,!0),t(` `+n(r.testing?`Testing…`:r.testResult?`Test again`:`Test`),1)]),_:1},8,[`disabled`]),r.testResult?(f(),u(`span`,{key:0,class:D(`model-test model-test-`+r.testResult.status),title:r.testResult.error},n(r.testResult.status.replace(`_`,` `)),11,je)):E(``,!0)])]),c(`div`,Me,[c(`div`,Ne,[g[19]||=c(`label`,null,`Instructions`,-1),c(`div`,Pe,[p.value?(f(),e(oe,{key:0,onTranscribed:g[8]||=e=>o(`transcribed`,e)})):E(``,!0),c(`button`,{type:`button`,class:`agent-instr-toggle`,"aria-expanded":p.value,title:p.value?`Collapse instructions`:`Expand instructions`,onClick:g[9]||=e=>p.value=!p.value},[p.value?(f(),e(l(P),{key:0,class:`size-4`,"aria-hidden":`true`})):(f(),e(l(F),{key:1,class:`size-4`,"aria-hidden":`true`}))],8,G)])]),p.value?(f(),u(`textarea`,{key:0,ref:e=>a.registerInstrRef(e),value:r.agent.instructions??``,class:`agent-instr`,rows:`2`,placeholder:`Optional — how this agent should behave`,onInput:g[10]||=e=>o(`instr-input`,e),onBlur:g[11]||=e=>o(`instr-blur`)},null,40,K)):E(``,!0)]),r.skillsAvailable?(f(),u(`div`,Fe,[g[20]||=c(`label`,{class:`agent-skills-label`},`Enabled skills`,-1),c(`div`,Ie,[s(L,{variant:`ghost`,size:`sm`,class:`agent-skills-add`,title:`Add skills to agent`,onClick:g[12]||=e=>o(`open-skills`)},{default:y(()=>[s(l(N),{class:`size-3.5`,"aria-hidden":`true`})]),_:1}),c(`span`,{class:`agent-skills-info`,title:Re,"aria-label":`About enabled skills`},`ⓘ`),c(`span`,Le,n((r.agent.skills??[]).join(`, `)||`No default candidates`),1)])])):E(``,!0)])],2))}}),Be={class:`agent-head`},Ve={class:`agent-title`},He={class:`agent-name`},Ue={class:`agent-body`},We={class:`agent-field`},Ge={key:0,class:`agent-field`},Ke={key:1,class:`agent-field`},qe={class:`agent-field`},Je={class:`agent-test-actions`},Ye={key:0,class:`built-in-last-run`},Xe={key:2,class:`agent-field built-in-status-field`},q={key:0,class:`built-in-status success`},J={key:0,class:`built-in-autofixed`},Y={key:1,class:`built-in-task-link`},Ze={key:2,class:`built-in-run-doc`},X=[`href`],Z={key:1,class:`built-in-status error`},Qe={"data-testid":`built-in-started-modal`},$e={class:`built-in-started-head`},et={class:`built-in-started-body`},tt={class:`built-in-started-actions`},nt=I(b({__name:`BuiltInAgentCard`,props:{agent:{},interactive:{type:Boolean}},setup(r){let i=r,d=j(),p=O(()=>d.agentsMeta.clis[0]??`opencode`),h=O(()=>d.agentsMeta.models[0]??`default`),g=S({enabled:!1,schedule:`manual`,cli:``,model:``});m(()=>d.data?.builtInAgents,e=>{let t=e?.[i.agent];t&&(g.value={enabled:t.enabled??!1,schedule:t.schedule??`manual`,lastRunAt:t.lastRunAt,cli:t.cli||p.value,model:t.model||h.value})},{immediate:!0,deep:!0});let _=O(()=>d.agentsMeta.clis??[]),ee=d.modelsFor,v=S(!1),b=S(!1),x=S(``),C=S(``),w=S(null),M=S([]),N=S(null),P=O(()=>{switch(i.agent){case`performance`:return`Scans for performance issues like slow functions, blocking operations, deeply nested loops, unbounded memory growth, and duplicate computations. Findings are bundled into one inbox task.`;case`tech-debt`:return`Scans for technical debt patterns including outdated dependencies, code duplication, high-complexity files, unused code, and deprecated APIs. Findings are bundled into one inbox task.`;case`design`:return`Reviews your web UI for layout issues, styling inconsistencies, accessibility gaps, and UX friction. Findings and proposed fixes are bundled into one inbox task.`;case`architect`:return`Analyses your codebase for tight coupling, missing abstractions, scalability risks, and over-engineering. Findings are bundled into one inbox task.`;case`docs-debt`:return`Verifies that AGENTS.md and your project docs still match the code — checks file paths, symbols, and stated constraints. Stale references it can fix automatically are committed; anything that needs a human decision is bundled into one inbox task.`;default:return F.value?.description??``}});function ne(){b.value=!1}let F=O(()=>i.agent===`debugger`?{name:`Debugger Agent`,description:`Paste a bug, stack trace, or error and get a clear diagnosis — the root cause plus a suggested fix. Chat with him from his floating head next to Ross and the CTO.`,icon:`🐞`}:i.agent===`tech-debt`?{name:`Tech Debt Agent`,description:`Scans your repository for technical debt patterns including outdated dependencies, code duplication, high-complexity files, unused code, and deprecated APIs. Every finding is bundled into one inbox task, and the run is recorded in your configured docs directory.`,icon:`🔧`}:i.agent===`performance`?{name:`Performance Agent`,description:`Keeps your app fast by scanning for performance issues like slow functions, blocking operations, deeply nested loops, unbounded memory growth, and duplicate computations. Every finding is bundled into one inbox task, and the run is recorded in your configured docs directory.`,icon:`⚡`}:i.agent===`architect`?{name:`Architect Agent`,description:`Analyzes your codebase architecture — detects tight coupling, missing abstractions, scalability risks, and over-engineering. Findings are bundled into one inbox task and the run is recorded in your configured docs directory.`,icon:`🏛`}:i.agent===`design`?{name:`Design Agent`,description:`Reviews your web UI's quality — layout, styling consistency, accessibility, and interaction flows. Flags UI bugs and UX friction and proposes concrete fixes and design improvements, bundled into one inbox task and recorded in your configured docs directory.`,icon:`🎨`}:i.agent===`docs-debt`?{name:`Docs Debt Agent`,description:`Checks that AGENTS.md and your configured project docs still tell the truth about the code — a skill-guided agent verifies file paths, symbols, scripts, and stated constraints against the real repo, whatever its layout. A fix auto-commits only after an independent verification passes; everything else is bundled into one task, and the run is recorded in your configured docs directory.`,icon:`📖`}:null),I=O(()=>g.value.lastRunAt?new Date(g.value.lastRunAt).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`}):`Never`),V=O(()=>g.value.cli||p.value),oe=O(()=>g.value.model||h.value);async function H(){try{let e=d.data?.builtInAgents||{},t={enabled:g.value.enabled,schedule:g.value.schedule};g.value.lastRunAt&&(t.lastRunAt=g.value.lastRunAt),g.value.cli&&(t.cli=g.value.cli),g.value.model&&(t.model=g.value.model),await A(`/api/config`,te(`PATCH`,{builtInAgents:{...e,[i.agent]:t}}));let n=await A(`/api/config`);d.data=n.config}catch(e){x.value=e instanceof Error?e.message:`Failed to save configuration`}}function U(e){g.value.enabled=e,H()}function se(e){g.value.cli=e,H()}function ce(e){g.value.model=e,H()}async function le(e){e&&(e===`daily`||e===`weekly`||e===`manual`)&&(g.value.schedule=e,await H())}async function W(){if(!v.value){v.value=!0,b.value=!0,x.value=``,C.value=``,w.value=null,M.value=[],N.value=null;try{let e=await A(`/api/agents/built-in/${i.agent}/run`,te(`POST`,{}));if(e.ok){if(g.value.lastRunAt=new Date().toISOString(),N.value=e.runDoc??null,w.value=e.taskId??null,e.failed&&e.failed>0)x.value=`${e.taskCount} task(s) created, ${e.failed} failed — ${(e.errors??[]).join(`; `)||`unknown write error`}`;else if(i.agent===`design`)C.value=`Review complete — ${e.findingsFound??0} design finding(s) found (${e.scannedFiles??0} files scanned).`;else if(i.agent===`architect`)C.value=`Review complete — ${e.issuesFound??0} architecture issue(s) found (${e.scannedFiles??0} files scanned).`;else if(i.agent===`docs-debt`)if(e.error)x.value=e.error;else{let t=e.trivialFixesApplied??0;M.value=e.autoFixed??[];let n=t>0?`corrected ${t} stale reference(s); `:``;C.value=(e.findingsFound??0)>0?`Check complete — ${n}${e.findingsFound??0} claim(s) need a human decision, bundled into one task (${e.scannedFiles??0} docs scanned).`:`Check complete — ${n}docs match the code (${e.scannedFiles??0} docs scanned).`}else if(e.taskCount>0){let t=i.agent===`performance`?`performance`:`tech debt`;C.value=`Scan complete — ${e.taskCount} ${t} task(s) created from ${e.issuesFound??0} issue(s).`}else{let t=i.agent===`performance`?`performance`:`tech debt`;C.value=`Scan complete — no ${t} issues found (${e.scannedFiles??0} files scanned).`}await H()}else x.value=`Failed to run agent`}catch(e){x.value=e instanceof Error?e.message:`Failed to run agent`}finally{v.value=!1,b.value=!1}}}return(i,d)=>{let p=a(`router-link`);return F.value?(f(),u(`div`,{key:0,class:D([`agent-card`,{off:!g.value.enabled}])},[c(`div`,Be,[c(`div`,Ve,[d[1]||=c(`span`,{class:`agent-dot`},null,-1),c(`span`,He,n(F.value.icon)+` `+n(F.value.name),1),d[2]||=c(`span`,{class:`agent-badge`},`built-in`,-1)]),s(_e,{checked:g.value.enabled,"onUpdate:checked":U},null,8,[`checked`])]),c(`div`,Ue,[c(`div`,We,[d[3]||=c(`label`,null,`Coding agent + Model`,-1),s(he,{"cli-options":_.value,"model-options":l(ee)(V.value,oe.value),cli:V.value,model:oe.value,"memory-key":`builtin:`+r.agent,"onUpdate:cli":se,"onUpdate:model":ce},null,8,[`cli-options`,`model-options`,`cli`,`model`,`memory-key`])]),r.interactive?(f(),u(`div`,Ke,[...d[8]||=[c(`label`,null,`Interaction`,-1),c(`div`,{class:`built-in-interactive-hint`},[c(`span`,{class:`built-in-interactive-dot`}),t(` Chat from floating head `)],-1)]])):(f(),u(`div`,Ge,[d[7]||=c(`label`,null,`Run schedule`,-1),s(me,{"model-value":g.value.schedule,"onUpdate:modelValue":le},{default:y(()=>[s(pe,{class:`h-[34px] w-full rounded-[9px] px-[11px]`},{default:y(()=>[s(fe)]),_:1}),s(ge,{position:`popper`},{default:y(()=>[s(ye,{class:`min-w-[var(--radix-select-trigger-width)]`},{default:y(()=>[s(ve,{value:`daily`},{default:y(()=>[...d[4]||=[t(`Daily`,-1)]]),_:1}),s(ve,{value:`weekly`},{default:y(()=>[...d[5]||=[t(`Weekly`,-1)]]),_:1}),s(ve,{value:`manual`},{default:y(()=>[...d[6]||=[t(`Manual only`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`model-value`])])),c(`div`,qe,[d[9]||=c(`label`,null,`Actions`,-1),c(`div`,Je,[s(L,{variant:`outline`,size:`sm`,disabled:v.value||!g.value.enabled,onClick:W},{default:y(()=>[t(n(v.value?`Running…`:`Run now`),1)]),_:1},8,[`disabled`]),g.value.lastRunAt?(f(),u(`span`,Ye,` Last: `+n(I.value),1)):E(``,!0)])]),C.value||x.value?(f(),u(`div`,Xe,[C.value?(f(),u(`div`,q,[c(`span`,null,n(C.value),1),M.value.length?(f(),u(`ul`,J,[(f(!0),u(T,null,o(M.value,e=>(f(),u(`li`,{key:`${e.doc}:${e.from}`},[c(`code`,null,n(e.doc),1),d[10]||=t(`: `,-1),c(`code`,null,n(e.from),1),d[11]||=t(` → `,-1),c(`code`,null,n(e.to),1)]))),128))])):E(``,!0),w.value?(f(),u(`div`,Y,[s(p,{to:`/work?task=${w.value}`},{default:y(()=>[t(` #`+n(w.value)+` — review the findings task `,1)]),_:1},8,[`to`])])):E(``,!0),N.value?(f(),u(`div`,Ze,[c(`a`,{href:`/${N.value}`,target:`_blank`,rel:`noopener`},` Run doc: `+n(N.value),9,X)])):E(``,!0)])):E(``,!0),x.value?(f(),u(`div`,Z,n(x.value),1)):E(``,!0)])):E(``,!0)]),(f(),e(k,{to:`body`},[s(re,{open:b.value,"onUpdate:open":d[0]||=e=>b.value=e},{default:y(()=>[s(B),s(z,{class:`built-in-started-modal`},{default:y(()=>[c(`div`,Qe,[c(`div`,$e,[s(ae,{class:`built-in-started-title`},{default:y(()=>[t(n(F.value.icon)+` `+n(F.value.name)+` started `,1)]),_:1}),s(R,{class:`close-x`,"aria-label":`Close`,onClick:ne},{default:y(()=>[...d[12]||=[t(` × `,-1)]]),_:1})]),c(`div`,et,[s(ie,{class:`built-in-started-summary`},{default:y(()=>[t(n(P.value),1)]),_:1}),d[13]||=c(`div`,{class:`built-in-started-details`},[c(`p`,{class:`built-in-started-timing`},[c(`span`,{class:`built-in-started-dot`}),t(` Usually takes 1–3 minutes `)]),c(`p`,{class:`built-in-started-location`},` Findings will appear as a new task in your inbox when the run is complete. `)],-1)]),c(`div`,tt,[s(L,{variant:`outline`,size:`sm`,onClick:ne},{default:y(()=>[...d[14]||=[t(`Got it`,-1)]]),_:1})])])]),_:1})]),_:1},8,[`open`])]))],2)):E(``,!0)}}}),[[`__scopeId`,`data-v-2ba6742c`]]),rt=[`pm`,`engineer`,`reviewer`];function it(e){let t=new Map(rt.map((e,t)=>[e,t]));return[...e].sort((e,n)=>{let r=t.get(e.name.toLowerCase())??999,i=t.get(n.name.toLowerCase())??999;return r===i?e.name.localeCompare(n.name):r-i})}var at={class:`playground`},ot=[`aria-busy`],st={class:`playground-sidebar-head`},ct={class:`playground-filters`},lt={class:`playground-filter-row`},ut=[`value`],dt=[`value`],ft={key:0,class:`playground-error`},Q={class:`playground-list`},pt={key:0,class:`playground-skeletons`,"aria-hidden":`true`},$={key:1,class:`playground-loading playground-no-match`},mt={key:2,class:`playground-loading`},ht={key:0,class:`playground-provider-group`},gt={class:`playground-provider-label`},_t={key:0,class:`playground-provider-error`},vt=[`disabled`,`onClick`],yt={class:`playground-model-name`},bt={class:`playground-model-reason`},xt={class:`playground-model-meta`},St={key:0},Ct={class:`playground-chat`},wt={class:`playground-chat-head`},Tt={class:`playground-active-info`},Et=[`disabled`],Dt={class:`playground-log-wrap`},Ot=[`aria-label`],kt={key:0,class:`playground-welcome`},At={class:`playground-starters`},jt=[`onClick`],Mt=[`innerHTML`],Nt={key:1},Pt={key:1,class:`playground-send-error`},Ft=[`disabled`,`placeholder`,`aria-label`],It=[`disabled`],Lt={key:1,class:`playground-empty`},Rt={key:0},zt=I(b({__name:`ModelPlaygroundPanel`,props:{active:{type:Boolean,default:!0}},setup(e){let r=e,i=[`What's this repo about?`,`Explain this codebase`,`What would you improve here first?`],a=S([]),m=S(!1),g=S(``),ee=S(!1),v=S(null),b=S([]),x=S(``),w=S(!1),k=S(``),j=S(null),N=S(null),{showJumpToLatest:P,onScroll:ne,scrollToLatest:F}=U(j,{chatId:()=>`playground:${v.value?.runId??`none`}`,contentSize:()=>b.value.length,active:()=>r.active}),I=O(()=>a.value.flatMap(e=>e.models.map(t=>({...t,providerLabel:e.label})))),R=S(``),z=S(``),B=S(``),re=[.5,1,2,5,10];function ie(e){let t=R.value.trim().toLowerCase();if(t&&!e.name.toLowerCase().includes(t))return!1;let n=B.value===``?null:Number(B.value);if(n!=null){let t=e.inputPricePerM??e.outputPricePerM;if(t!=null&&t>n)return!1}return!0}let ae=O(()=>a.value.filter(e=>!z.value||e.id===z.value).map(e=>({...e,models:e.models.filter(ie)})).filter(e=>e.models.length>0||e.error)),oe=O(()=>ae.value.reduce((e,t)=>e+t.models.length,0)),se=O(()=>R.value.trim()!==``||z.value!==``||B.value!==``);function ce(){R.value=``,z.value=``,B.value=``}function le(e){return e==null?`—`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}async function ue(e=!1){m.value=!0,g.value=``;try{let t=await A(`/api/playground/models${e?`?refresh=1`:``}`);a.value=t.providers;let n=I.value;if(v.value){let e=n.find(e=>e.runId===v.value?.runId);v.value=e??v.value}else n.length&&(v.value=n[0])}catch(e){g.value=e instanceof Error?e.message:`Could not load the model catalog.`}finally{m.value=!1,ee.value=!0}}function de(e){w.value||v.value?.runId===e.runId||(v.value=e,b.value=[],k.value=``,x.value=``)}function fe(){w.value||(b.value=[],k.value=``,x.value=``)}async function pe(e){let t=(e??x.value).trim();if(!t||w.value||!v.value)return;let n=v.value;b.value=[...b.value,{role:`user`,text:t}],x.value=``,k.value=``,w.value=!0,F(`auto`);try{let e=await A(`/api/playground/chat`,te(`POST`,{runId:n.runId,messages:b.value}));b.value=[...b.value,{role:`assistant`,text:e.text}]}catch(e){k.value=e instanceof Error?e.message:`The model did not respond.`}finally{w.value=!1,F(`auto`)}}function me(e){e.key!==`Enter`||e.shiftKey||e.isComposing||(e.preventDefault(),pe())}return d(()=>{ue()}),(e,r)=>(f(),u(`div`,at,[c(`aside`,{class:`playground-sidebar`,"aria-label":`Models worth trying`,"aria-busy":m.value},[c(`div`,st,[r[9]||=c(`span`,{class:`sec-label`},[c(`span`,{class:`live-dot`}),t(`Models worth trying`)],-1),s(L,{variant:`outline`,size:`sm`,disabled:m.value,onClick:r[0]||=e=>ue(!0)},{default:y(()=>[t(n(m.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`disabled`])]),c(`div`,ct,[p(c(`input`,{"onUpdate:modelValue":r[1]||=e=>R.value=e,type:`search`,class:`playground-search`,placeholder:`Search models…`,"aria-label":`Search models by name`},null,512),[[C,R.value]]),c(`div`,lt,[p(c(`select`,{"onUpdate:modelValue":r[2]||=e=>z.value=e,class:`playground-provider-select`,"aria-label":`Filter by provider`},[r[10]||=c(`option`,{value:``},`All providers`,-1),(f(!0),u(T,null,o(a.value,e=>(f(),u(`option`,{key:e.id,value:e.id},n(e.label),9,ut))),128))],512),[[h,z.value]]),p(c(`select`,{"onUpdate:modelValue":r[3]||=e=>B.value=e,class:`playground-cost-select`,"aria-label":`Filter by maximum token cost`},[r[11]||=c(`option`,{value:``},`Any cost`,-1),(f(),u(T,null,o(re,e=>c(`option`,{key:e,value:String(e)},` ≤ `+n(le(e))+` / 1M `,9,dt)),64))],512),[[h,B.value]])])]),g.value?(f(),u(`div`,ft,n(g.value),1)):E(``,!0),c(`div`,Q,[m.value&&!I.value.length?(f(),u(`div`,pt,[(f(),u(T,null,o(3,e=>c(`div`,{key:e,class:`playground-skeleton`},[...r[12]||=[c(`div`,{class:`playground-skeleton-line w-70`},null,-1),c(`div`,{class:`playground-skeleton-line w-90`},null,-1),c(`div`,{class:`playground-skeleton-line w-45`},null,-1)]])),64))])):ee.value&&!g.value&&I.value.length&&!oe.value?(f(),u(`div`,$,[r[13]||=t(` No models match your filters. `,-1),se.value?(f(),u(`button`,{key:0,type:`button`,class:`playground-filter-clear`,onClick:ce},` Clear filters `)):E(``,!0)])):ee.value&&!I.value.length&&!g.value?(f(),u(`div`,mt,` No models available right now. `)):E(``,!0),(f(!0),u(T,null,o(ae.value,e=>(f(),u(T,{key:e.id},[e.models.length||e.error?(f(),u(`div`,ht,[c(`div`,gt,n(e.label),1),e.error?(f(),u(`div`,_t,n(e.error),1)):E(``,!0),(f(!0),u(T,null,o(e.models,t=>(f(),u(`button`,{key:t.runId,type:`button`,class:D([`playground-model-card`,{active:v.value?.runId===t.runId}]),disabled:w.value&&v.value?.runId!==t.runId,onClick:n=>de({...t,providerLabel:e.label})},[c(`div`,yt,n(t.name),1),c(`div`,bt,n(t.reason),1),c(`div`,xt,[c(`span`,null,n(le(t.inputPricePerM))+` / `+n(le(t.outputPricePerM))+` per 1M`,1),t.contextWindow?(f(),u(`span`,St,n(l(W)(t.contextWindow))+` ctx`,1)):E(``,!0)])],10,vt))),128))])):E(``,!0)],64))),128))])],8,ot),c(`section`,Ct,[v.value?(f(),u(T,{key:0},[c(`header`,wt,[r[14]||=c(`span`,{class:`playground-active-dot`,"aria-hidden":`true`},null,-1),c(`div`,Tt,[c(`strong`,null,n(v.value.name),1),c(`span`,null,n(v.value.providerLabel)+` · active model`,1)]),b.value.length?(f(),u(`button`,{key:0,type:`button`,class:`playground-clear`,disabled:w.value,"aria-label":`Clear conversation`,onClick:r[4]||=e=>fe()},` Clear `,8,Et)):E(``,!0)]),c(`div`,Dt,[c(`div`,{ref_key:`log`,ref:j,class:`playground-log ai-chat-log`,role:`log`,"aria-live":`polite`,"aria-label":`Conversation with ${v.value.name}`,onScroll:r[5]||=(...e)=>l(ne)&&l(ne)(...e)},[b.value.length?E(``,!0):(f(),u(`div`,kt,[c(`strong`,null,`Try `+n(v.value.name),1),c(`p`,null,n(v.value.reason),1),c(`div`,At,[(f(),u(T,null,o(i,e=>c(`button`,{key:e,type:`button`,onClick:t=>pe(e)},n(e),9,jt)),64))])])),(f(!0),u(T,null,o(b.value,(e,t)=>(f(),u(`div`,{key:t,class:D([`playground-row`,`playground-row-${e.role}`])},[c(`div`,{class:D([`playground-bubble`,`playground-bubble-${e.role}`])},[e.role===`assistant`?(f(),u(`div`,{key:0,class:`playground-markdown`,innerHTML:l(V)(e.text)},null,8,Mt)):(f(),u(`span`,Nt,n(e.text),1))],2)],2))),128)),s(H,{active:w.value,label:`Model is responding`},null,8,[`active`]),k.value?(f(),u(`div`,Pt,n(k.value),1)):E(``,!0)],40,Ot),l(P)?(f(),u(`button`,{key:0,type:`button`,class:`agent-jump`,onClick:r[6]||=e=>l(F)()},[s(l(M),{class:`size-3.5`}),r[15]||=t(` Latest `,-1)])):E(``,!0)]),c(`form`,{class:`playground-compose`,onSubmit:r[8]||=_(e=>pe(),[`prevent`])},[p(c(`textarea`,{ref_key:`draftTextarea`,ref:N,"onUpdate:modelValue":r[7]||=e=>x.value=e,rows:`1`,disabled:w.value,placeholder:`Message ${v.value.name}…`,"aria-label":`Message ${v.value.name}`,onKeydown:me},null,40,Ft),[[C,x.value]]),c(`button`,{type:`submit`,class:`ai-chat-send`,disabled:!x.value.trim()||w.value,"aria-label":`Send message`},` Send `,8,It)],32)],64)):(f(),u(`div`,Lt,[m.value?E(``,!0):(f(),u(`p`,Rt,`Pick a model from the sidebar to start chatting.`))]))])]))}}),[[`__scopeId`,`data-v-113d4f39`]]),Bt={class:`mp-panel agent-tab-panel`},Vt={key:0,class:`mp-error`},Ht={key:1,class:`agent-empty`},Ut={class:`mp-row-head`},Wt={class:`mp-row-title`},Gt={class:`agent-name`},Kt=[`href`],qt={class:`mp-note`},Jt={key:0,class:`mp-key-form`},Yt=[`onUpdate:modelValue`,`placeholder`,`aria-label`,`onKeyup`],Xt={key:1,class:`mp-error`},Zt={key:0,class:`mp-loading`},Qt={key:1,class:`mp-error`},$t=[`onClick`],en={key:2,class:`mp-data`},tn={key:0,class:`mp-stat mp-stat-hero`},nn={class:`mp-stat-value`},rn={key:0,class:`mp-stat-sub`},an={key:1,class:`mp-part-error`},on={key:2,class:`mp-stat-row`},sn={class:`mp-stat`},cn={class:`mp-stat-value sm`},ln={class:`mp-stat`},un={class:`mp-stat-value sm`},dn={class:`mp-stat`},fn={class:`mp-stat-value sm`},pn={key:0,class:`mp-stat`},mn={class:`mp-stat-value sm`},hn={key:3,class:`mp-part-error`},gn={key:3,class:`mp-data`},_n={class:`mp-window-head`},vn={class:`mp-stat-label`},yn={class:`mp-window-pct`},bn=[`aria-valuenow`,`aria-label`],xn={key:1,class:`mp-window-reset`},Sn={key:1,class:`mp-part-error`},Cn=[`href`],wn={key:2,class:`mp-part-error`},Tn={key:4,class:`mp-actions`},En=I(b({__name:`ModelProvidersPanel`,setup(i){let a=S([]),l=S(!1),m=S(``),h=g({}),_=g({}),v=g({}),b=g({}),x=g({});function w(e){return h[e]||(h[e]={usage:null,loading:!1,error:``}),h[e]}async function O(){l.value=!0,m.value=``;try{let e=await A(`/api/model-providers`);a.value=e.providers;for(let t of e.providers)t.kind===`live`&&t.hasKey&&!h[t.id]?.usage&&k(t.id)}catch(e){m.value=e instanceof Error?e.message:`Could not load the provider list.`}finally{l.value=!1}}async function k(e){let t=w(e);if(!t.loading){t.loading=!0,t.error=``;try{t.usage=await A(`/api/model-providers/${e}/usage`)}catch(e){t.error=e instanceof Error?e.message:`Could not load usage.`}finally{t.loading=!1}}}async function j(e){if(!v[e.id]){v[e.id]=!0,x[e.id]=``;try{let t=await A(`/api/model-providers/${e.id}/key`,te(`POST`,{key:_[e.id]??``}));e.hasKey=t.hasKey,_[e.id]=``,b[e.id]=!1,t.hasKey?k(e.id):w(e.id).usage=null}catch(t){x[e.id]=t instanceof Error?t.message:`Could not save the key.`}finally{v[e.id]=!1}}}function M(e){_[e.id]=``,j(e)}function N(e){return e==null?`—`:`$${e.toLocaleString(`en-US`,{minimumFractionDigits:2,maximumFractionDigits:2})}`}function P(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleString(`en-US`,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function ne(e){return e===`openrouter`||e===`opencode-go`}let F=e=>e?.kind===`openrouter`?e:null,I=e=>e?.kind===`opencode-go`?e:null;return d(()=>{O()}),(i,d)=>(f(),u(`div`,Bt,[d[11]||=c(`div`,{class:`sec-label`,style:{"padding-top":`16px`,"margin-bottom":`4px`}},[c(`span`,{class:`live-dot`}),t(`Model providers `)],-1),d[12]||=c(`div`,{class:`agent-desc`},` Spend and usage per model provider, without leaving RepoOS. Two providers report live numbers behind an API key; the rest link straight to their dashboard. `,-1),m.value?(f(),u(`div`,Vt,n(m.value),1)):l.value&&!a.value.length?(f(),u(`div`,Ht,`Loading providers…`)):E(``,!0),(f(!0),u(T,null,o(a.value,i=>(f(),u(`div`,{key:i.id,class:`mp-row`},[c(`div`,Ut,[c(`div`,Wt,[c(`span`,Gt,n(i.label),1),c(`span`,{class:D([`mp-pill`,i.kind===`live`?`pill-live`:`pill-link`])},n(i.kind===`live`?`live`:`dashboard only`),3)]),c(`a`,{class:`mp-dash-link`,href:i.dashboardUrl,target:`_blank`,rel:`noopener noreferrer`},` Open dashboard ↗ `,8,Kt)]),c(`div`,qt,n(i.note),1),ne(i.id)?(f(),u(T,{key:0},[!i.hasKey||b[i.id]?(f(),u(`div`,Jt,[p(c(`input`,{"onUpdate:modelValue":e=>_[i.id]=e,type:`password`,autocomplete:`off`,placeholder:`Paste your ${i.label} API key`,"aria-label":`${i.label} API key`,onKeyup:ee(e=>j(i),[`enter`])},null,40,Yt),[[C,_[i.id]]]),s(L,{variant:`outline`,size:`sm`,disabled:v[i.id],onClick:e=>j(i)},{default:y(()=>[t(n(v[i.id]?`Saving…`:`Save key`),1)]),_:2},1032,[`disabled`,`onClick`]),i.hasKey?(f(),e(L,{key:0,variant:`ghost`,size:`sm`,disabled:v[i.id],onClick:e=>b[i.id]=!1},{default:y(()=>[...d[0]||=[t(` Cancel `,-1)]]),_:1},8,[`disabled`,`onClick`])):E(``,!0),d[1]||=c(`div`,{class:`mp-key-hint`},[t(` Stored in `),c(`code`,null,`.env`),t(` on this machine (gitignored) — never committed, never logged. `)],-1),x[i.id]?(f(),u(`div`,Xt,n(x[i.id]),1)):E(``,!0)])):(f(),u(T,{key:1},[w(i.id).loading?(f(),u(`div`,Zt,`Checking…`)):w(i.id).error?(f(),u(`div`,Qt,[t(n(w(i.id).error)+` `,1),c(`button`,{class:`mp-retry`,onClick:e=>k(i.id)},`Retry`,8,$t)])):F(w(i.id).usage)?(f(),u(`div`,en,[F(w(i.id).usage).credits?(f(),u(`div`,tn,[d[2]||=c(`span`,{class:`mp-stat-label`},`Remaining credits`,-1),c(`span`,nn,n(N(F(w(i.id).usage).credits.remaining)),1),F(w(i.id).usage).credits.totalCredits==null?E(``,!0):(f(),u(`span`,rn,` of `+n(N(F(w(i.id).usage).credits.totalCredits))+` purchased `,1))])):E(``,!0),F(w(i.id).usage).creditsError?(f(),u(`div`,an,` Balance unavailable: `+n(F(w(i.id).usage).creditsError),1)):E(``,!0),F(w(i.id).usage).key?(f(),u(`div`,on,[c(`div`,sn,[d[3]||=c(`span`,{class:`mp-stat-label`},`Today`,-1),c(`span`,cn,n(N(F(w(i.id).usage).key.usageDaily)),1)]),c(`div`,ln,[d[4]||=c(`span`,{class:`mp-stat-label`},`This week`,-1),c(`span`,un,n(N(F(w(i.id).usage).key.usageWeekly)),1)]),c(`div`,dn,[d[5]||=c(`span`,{class:`mp-stat-label`},`This month`,-1),c(`span`,fn,n(N(F(w(i.id).usage).key.usageMonthly)),1)]),F(w(i.id).usage).key.rateLimit?.requests==null?E(``,!0):(f(),u(`div`,pn,[d[6]||=c(`span`,{class:`mp-stat-label`},`Rate limit`,-1),c(`span`,mn,n(F(w(i.id).usage).key.rateLimit.requests)+` req / `+n(F(w(i.id).usage).key.rateLimit.interval),1)]))])):E(``,!0),F(w(i.id).usage).keyError?(f(),u(`div`,hn,` Key usage unavailable: `+n(F(w(i.id).usage).keyError),1)):E(``,!0)])):I(w(i.id).usage)?(f(),u(`div`,gn,[I(w(i.id).usage).windows.length?(f(!0),u(T,{key:0},o(I(w(i.id).usage).windows,e=>(f(),u(`div`,{key:e.id,class:`mp-window`},[c(`div`,_n,[c(`span`,vn,n(e.label),1),c(`span`,yn,[t(n(e.usedPct==null?`—`:`${Math.round(e.usedPct)}% used`)+` `,1),e.usedUsd!=null&&e.limitUsd!=null?(f(),u(T,{key:0},[t(` · `+n(N(e.usedUsd))+` of `+n(N(e.limitUsd)),1)],64)):E(``,!0)])]),e.usedPct==null?E(``,!0):(f(),u(`div`,{key:0,class:`mp-bar`,role:`progressbar`,"aria-valuenow":Math.round(e.usedPct),"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":`${e.label} usage`},[c(`div`,{class:`mp-bar-fill`,style:r({width:`${Math.min(100,Math.max(0,e.usedPct))}%`})},null,4)],8,bn)),P(e.resetsAt)?(f(),u(`div`,xn,` resets `+n(P(e.resetsAt)),1)):E(``,!0)]))),128)):I(w(i.id).usage).unrecognized?(f(),u(`div`,Sn,[d[7]||=t(` Live usage responded, but in a format this build doesn't recognize — check the `,-1),c(`a`,{href:i.dashboardUrl,target:`_blank`,rel:`noopener noreferrer`},`console`,8,Cn),d[8]||=t(`. `,-1)])):(f(),u(`div`,wn,`No usage reported yet.`))])):E(``,!0),i.hasKey&&!b[i.id]?(f(),u(`div`,Tn,[s(L,{variant:`outline`,size:`sm`,disabled:w(i.id).loading,onClick:e=>k(i.id)},{default:y(()=>[t(n(w(i.id).loading?`Refreshing…`:`Refresh`),1)]),_:2},1032,[`disabled`,`onClick`]),s(L,{variant:`ghost`,size:`sm`,onClick:e=>b[i.id]=!0},{default:y(()=>[...d[9]||=[t(`Replace key`,-1)]]),_:1},8,[`onClick`]),s(L,{variant:`ghost`,size:`sm`,disabled:v[i.id],onClick:e=>M(i)},{default:y(()=>[...d[10]||=[t(` Clear `,-1)]]),_:1},8,[`disabled`,`onClick`])])):E(``,!0)],64))],64)):E(``,!0)]))),128))]))}}),[[`__scopeId`,`data-v-454cf721`]]),Dn={class:`agents-page`},On={class:`page-header`},kn={class:`page-desc`},An={key:0},jn={key:1,class:`save-msg err`},Mn={key:2,class:`save-msg ok`},Nn={key:0,class:`spin`},Pn={class:`agent-tabs`},Fn=[`onClick`],In={class:`agents-tab-content`},Ln={class:`agent-tab-panel`,style:{padding:`0 18px 6px`,"margin-bottom":`16px`}},Rn={class:`sec-label`,style:{"padding-top":`16px`,"margin-bottom":`4px`}},zn={class:`am-list-notice-text`},Bn=[`onClick`],Vn={class:`agent-tab-panel`,style:{padding:`0 18px 6px`,"margin-bottom":`16px`}},Hn={class:`agent-add`},Un={key:0,class:`agent-empty`},Wn={class:`agent-tab-panel`,style:{padding:`0 18px 6px`,"margin-bottom":`16px`}},Gn={key:0,class:`agent-tab-panel`,style:{padding:`0 18px 6px`,"margin-bottom":`16px`}},Kn={class:`sec-label`,style:{"padding-top":`16px`,"margin-bottom":`4px`}},qn={key:0,class:`detect-update-error`},Jn={key:1,class:`detect-cache-label`},Yn={key:2,class:`detect-cache-label`},Xn={key:3,class:`detect-loading`},Zn={key:4,class:`agent-empty`},Qn={class:`agent-name detect-agent-name`},$n={key:0,class:`agent-badge detect-deprecated`},er={key:1,class:`detect-ver detect-ver-inline`},tr={class:`detect-binary-item-name`},nr={class:`detect-binary-item-ver`},rr={class:`detect-binary-item-path`},ir={key:3,class:`detect-row-spinner`,title:`Probing…`},ar=[`aria-label`,`onClick`],or={key:5,class:`detect-update-detail`},sr={class:`detect-update-meta`},cr={key:0},lr={key:1},ur={key:2,class:`detect-update-reason`},dr=[`onClick`],fr={key:6,class:`detect-hint-inline`},pr=[`title`],mr=[`onClick`],hr={key:7,class:`detect-hint-inline`},gr=[`title`],_r=[`onClick`],vr={key:8,class:`detect-hint-inline`},yr=[`title`],br=[`onClick`],xr={key:9,class:`detect-migration-inline`},Sr=[`href`],Cr={key:1},wr=[`aria-pressed`,`aria-label`,`title`,`onClick`],Tr={key:0,class:`detect-compat-card`},Er={class:`detect-compat-card-explanation`},Dr={key:0,class:`detect-compat-probe-row`},Or={class:`detect-hint-code`},kr=[`onClick`],Ar={key:1,class:`detect-compat-card-hint`},jr={key:2,class:`detect-compat-card-hint`},Mr={class:`am-modal-head`},Nr={key:0,class:`agent-skill-modal-list`},Pr=[`checked`,`onChange`],Fr={key:0},Ir=`docs/agent-model-recommendations.md`,Lr=`docs/opencode-models.md`,Rr=b({__name:`AgentsView`,setup(a){let h=j(),g=v(),b=w(),C=ue(),k={default:`Default Agents`,custom:`Custom Agents`,team:`Build Your Team`,detected:`Detected Coding Agents`,playground:`Model Playground`,providers:`Model providers`},M=[`default`,`custom`,`team`,`detected`,`playground`,`providers`],N=S(`default`),P=S(!1),F=S(!1);m(N,e=>{e===`playground`&&(P.value=!0),e===`providers`&&(F.value=!0)});let I=()=>{let e=b.query.tab;return typeof e==`string`&&M.includes(e)?e:`default`};m(()=>b.query.tab,()=>{let e=I();e!==N.value&&(N.value=e)},{immediate:!0}),m(N,e=>{I()!==e&&g.replace({query:{...b.query,tab:e}})});function V(){C.loadDoc(Ir),g.push({name:`repo`})}function oe(){C.loadDoc(Lr),g.push({name:`repo`})}let H=S([]),U=S(``),W=S(null),he=!1,_e,be=!1,xe=!1;function Se(){he=!0,H.value=h.agents.map(e=>({...e})),he=!1}m(()=>h.loaded,e=>{e&&Se()},{immediate:!0});let Ce=O(()=>h.agentsMeta.defaults.map(e=>e.name.toLowerCase())),we=e=>Ce.value.includes(e.toLowerCase()),Te=[`ross`,`cto`],Ee=e=>Te.includes(e.toLowerCase()),De=O(()=>it(H.value.filter(e=>we(e.name)&&!Ee(e.name)))),Oe=O(()=>H.value.filter(e=>we(e.name)&&Ee(e.name))),ke=O(()=>H.value.filter(e=>!we(e.name))),Ae={"claude code":`Claude Code`,"github copilot":`GitHub Copilot CLI`,"qwen code":`qwen code`,codex:`codex`,antigravity:`Antigravity CLI (agy)`,crush:`Crush`},je=new Map,Me=new Map;function Ne(e,t){let n=je.get(e);n&&de(n,t)}function Pe(e,t){let n=Me.get(e);n&&de(n,t)}O(()=>h.agentsMeta.clis.map(e=>({value:e,label:Ae[e]??e})));let G=S({}),K=S({});h.modelsFor;let Fe=O(()=>h.modelsLoading),Ie=O(()=>h.agentsMeta.clis.map(e=>({cli:e,notice:h.modelNoticeFor(e)})).filter(e=>e.notice?.kind===`failed`));function Le(e){return`${e.name}\u0000${e.cli}\u0000${e.model}`}function Re(e){return G.value[Le(e)]}async function Be(e){let t=Le(e);if(K.value[t])return;K.value={...K.value,[t]:!0};let n=e.cli,r=e.model;try{let e=await A(`/api/models/test`,te(`POST`,{cli:n,model:r}));G.value={...G.value,[t]:e.result}}catch(e){G.value={...G.value,[t]:{cli:n,model:r,status:`failed`,durationMs:0,error:e instanceof Error?e.message:`Model compatibility test failed.`}}}finally{let e={...K.value};delete e[t],K.value=e}}let Ve=(e=!1)=>h.loadModels(e);function He(){let e=U.value.trim();if(e){if(H.value.some(t=>t.name.toLowerCase()===e.toLowerCase())){h.error=`An agent named "${e}" already exists.`;return}H.value.push({name:e,cli:h.agentsMeta.clis[0]??`opencode`,model:h.agentsMeta.models[1]??`big pickle`,enabled:!0,instructions:``}),U.value=``,h.error=``}}function Ue(e){H.value=H.value.filter(t=>t!==e)}function We(e,t){e.instructions=t.target.value}function Ge(e){let t=document.activeElement;t instanceof HTMLTextAreaElement&&t.value!==e.instructions&&(e.instructions=t.value)}function Ke(e,t,n){let r=new Set(e.skills??[]);n?r.add(t):r.delete(t),e.skills=[...r]}function qe(e){W.value=e}function Je(){let e=new Set;for(let t of H.value){let n=t.name.trim().toLowerCase();if(!n){h.error=`Every agent needs a name.`;return}if(e.has(n)){h.error=`Duplicate agent name "${t.name}".`;return}e.add(n)}return H.value.map(e=>({...e,name:e.name.trim()}))}async function Ye(){if(be){xe=!0;return}let e=Je();if(e){be=!0,xe=!1;try{await h.saveAgents(e)}catch{}finally{be=!1,xe&&Xe(0)}}}function Xe(e=450){clearTimeout(_e),_e=setTimeout(()=>void Ye(),e)}m(H,()=>{he||!h.loaded||(h.msg=``,h.error=``,be&&(xe=!0),Xe())},{deep:!0,flush:`sync`});let q=S([]),J=S(new Set),Y=S(!1),Ze=S(!1),X=S(null),Z=S(``),Qe=S(null),$e=S({});function et(e){Qe.value=Qe.value===e?null:e}function tt(e,t){$e.value={...$e.value,[e]:t}}function rt(e){let t=$e.value[e.id]??0,n=e.allBinaries?.[t];return n?{path:n.path,version:n.version}:{path:e.path,version:e.version}}function at(e){if(!e)return``;let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/6e4),r=Math.floor(t/36e5),i=Math.floor(t/864e5);return i>=1?`cached ${i}d ago`:r>=1?`cached ${r}h ago`:n>=1?`cached ${n}m ago`:`cached just now`}let ot=S(!1),st=S(!1),ct=S({}),lt=O(()=>new Set(q.value.filter(e=>e.installed&&e.drivable&&e.cli).map(e=>e.cli)));function ut(e,t={}){return(h.agentsMeta.clis??[]).filter(n=>n!==`antigravity`||n===e||!t.team&&lt.value.has(n))}let{isAgentFavorite:dt,toggleAgentFavorite:ft}=ce();function Q(e){return e.cli??e.id}let pt=O(()=>q.value.map(e=>e.installed?e.headless===!1?{agent:e,status:`desktop`,statusLabel:`desktop only`,color:`var(--amber)`,sortOrder:1}:e.auth===!1?{agent:e,status:`auth`,statusLabel:`sign-in required`,color:`var(--amber)`,sortOrder:1}:{agent:e,status:`ok`,statusLabel:`ready`,color:`var(--green)`,sortOrder:0}:{agent:e,status:`missing`,statusLabel:`not installed`,color:`var(--red)`,sortOrder:2}).sort((e,t)=>e.sortOrder-t.sortOrder)),$=null;async function mt(){Ze.value=!1,Z.value=``;try{let e=await A(`/api/agents/detect`);e.agents.length&&(q.value=e.agents,X.value=e.cachedAt)}catch{}$?.close();let e=new Set(q.value.map(e=>e.id));J.value=new Set(e.size?e:[`__loading__`]),Y.value=!0;let t=new EventSource(`/api/agents/detect/stream`);$=t,t.addEventListener(`agent`,e=>{try{let t=JSON.parse(e.data),n=q.value.findIndex(e=>e.id===t.id);n>=0?q.value=q.value.map((e,r)=>r===n?t:e):q.value=[...q.value,t];let r=new Set(J.value);r.delete(t.id),J.value=r}catch{}}),t.addEventListener(`done`,e=>{try{let{cachedAt:t}=JSON.parse(e.data);X.value=t}catch{}J.value=new Set,Y.value=!1,t.close(),$=null}),t.onerror=()=>{J.value=new Set,Y.value=!1,q.value.length||(Ze.value=!0),t.close(),$=null}}async function ht(){let e=Object.keys(ct.value).length>0;e&&await mt(),await gt(e)}async function gt(e=!1){ot.value=!0,st.value=!1;try{let t=await A(`/api/agents/updates`,te(`POST`,{refresh:e}));ct.value=t.updates,q.value=q.value.map(e=>({...e,update:t.updates[e.id]}))}catch{st.value=!0}finally{ot.value=!1}}function _t(e){return e?e.status===`up_to_date`?`Up to date`:e.status===`update_available`?`Update available: ${e.installedVersion} → ${e.latestVersion}`:e.status===`unavailable`?`Could not check`:`Check manually`:`Not checked`}function vt(e){return e?.status===`update_available`?`var(--amber)`:e?.status===`up_to_date`?`var(--green)`:e?.status===`unavailable`?`var(--red)`:`var(--txt-dim)`}function yt(e){let t=e.compatibility?.status;return t===`verified`?`var(--green)`:t===`unsupported`?`var(--red)`:t===`upgrade_recommended`||t===`newer_than_verified`?`var(--amber)`:`var(--txt-dim)`}function bt(e){return`repoos doctor --probe ${e.cli||e.binary} --yes`}function xt(e){let t=e.compatibility;return t?.contract?t.status===`not_probed`||t.status===`newer_than_verified`:!1}function St(e){let t=e.compatibility;if(!t)return``;let n=t.newestCertifiedVersion?`Newest certified: ${t.newestCertifiedVersion}.`:`No release is certified yet.`;return`${t.explanation} ${n}`}function Ct(e){let t=e.compatibility?.status;return t===`verified`?`✓`:t===`unsupported`?`!`:`?`}function wt(e){return e?.checkedAt?`checked ${new Date(e.checkedAt).toLocaleString()}`:``}function Tt(e){se(e),Z.value=e,setTimeout(()=>{Z.value===e&&(Z.value=``)},1500)}return d(()=>{mt(),Ve()}),i(()=>{clearTimeout(_e),$?.close(),$=null}),(i,a)=>(f(),u(`div`,Dn,[c(`header`,On,[c(`div`,null,[a[4]||=c(`div`,{class:`page-title agents-page-title`},`Agents`,-1),c(`div`,kn,[a[3]||=t(` The AI agents that work this repo `,-1),l(h).saving?(f(),u(`span`,An,` · Saving…`)):l(h).error?(f(),u(`span`,jn,` · `+n(l(h).error),1)):l(h).msg?(f(),u(`span`,Mn,` · Saved`)):E(``,!0)])]),c(`div`,{class:`page-header-actions`},[a[5]||=c(`a`,{class:`page-help-link`,href:`https://docs.repoos.org/agents`,target:`_blank`,rel:`noreferrer`},`Set up agents ↗`,-1),c(`button`,{class:`page-help-link`,onClick:V},` Model & agent guide → `),a[6]||=c(`a`,{class:`page-help-link`,href:`/settings?tab=toml`},`Advanced config`,-1)])]),l(h).loaded?(f(),u(T,{key:1},[c(`div`,Pn,[(f(),u(T,null,o(M,e=>c(`button`,{key:e,type:`button`,class:D([`tab-btn`,{active:N.value===e}]),onClick:t=>N.value=e},n(k[e]),11,Fn)),64))]),c(`div`,In,[p(c(`div`,Ln,[c(`div`,Rn,[a[7]||=c(`span`,{class:`live-dot`},null,-1),a[8]||=t(`Default agents `,-1),c(`button`,{class:`model-pricing-link`,onClick:oe},` Model pricing & use cases → `),s(L,{variant:`outline`,size:`sm`,style:{"margin-left":`auto`},disabled:Fe.value,title:`Re-probe every CLI's live model list (bypasses the cache)`,onClick:a[0]||=e=>Ve(!0)},{default:y(()=>[t(n(Fe.value?`Refreshing…`:`Refresh models`),1)]),_:1},8,[`disabled`])]),(f(!0),u(T,null,o(Ie.value,e=>(f(),u(`div`,{key:e.cli,class:`am-list-notice am-list-notice-failed agents-model-failure`,role:`status`,"data-testid":`agents-model-failure`},[c(`span`,zn,n(e.cli)+`: `+n(e.notice.text),1),c(`button`,{type:`button`,class:`am-list-notice-retry`,onClick:t=>l(h).refreshModelsForCli(e.cli)},` Retry `,8,Bn)]))),128)),a[9]||=c(`div`,{class:`agent-desc`},` Headless task-engine roles that run the roadmap. Toggle them on or off and pick their coding agent and model. `,-1),(f(!0),u(T,null,o(De.value,t=>(f(),e(ze,{key:t.name,agent:t,variant:`default`,"cli-options":ut(t.cli),"memory-key":`headless:`+t.name,"skills-available":l(h).agentsMeta.skills.length>0,testing:!!K.value[Le(t)],"test-result":Re(t),"register-instr-ref":e=>l(je).set(t.name,e),onTest:e=>Be(t),onOpenSkills:e=>qe(t),onInstrInput:e=>We(t,e),onInstrBlur:e=>Ge(t),onOpenRecommendations:V,onTranscribed:e=>Ne(t.name,e)},null,8,[`agent`,`cli-options`,`memory-key`,`skills-available`,`testing`,`test-result`,`register-instr-ref`,`onTest`,`onOpenSkills`,`onInstrInput`,`onInstrBlur`,`onTranscribed`]))),128))],512),[[x,N.value==="default"]]),p(c(`div`,Vn,[a[11]||=c(`div`,{class:`sec-label`,style:{"padding-top":`16px`,"margin-bottom":`4px`}},[c(`span`,{class:`live-dot`,style:{background:`var(--violet, var(--cyan))`}}),t(`Custom agents `)],-1),a[12]||=c(`div`,{class:`agent-desc`},` Your own roles — data analyst, refactor agent, anything you need. `,-1),c(`div`,Hn,[s(le,{modelValue:U.value,"onUpdate:modelValue":a[1]||=e=>U.value=e,placeholder:`e.g. data analyst`,class:`w-[220px]`,onKeyup:ee(He,[`enter`])},null,8,[`modelValue`]),s(L,{variant:`outline`,size:`sm`,disabled:!U.value.trim(),onClick:He},{default:y(()=>[...a[10]||=[t(` Add agent `,-1)]]),_:1},8,[`disabled`])]),ke.value.length?E(``,!0):(f(),u(`div`,Un,` No custom agents yet — add one above. `)),(f(!0),u(T,null,o(ke.value,t=>(f(),e(ze,{key:t.name,agent:t,variant:`custom`,"cli-options":ut(t.cli),"memory-key":`custom:`+t.name,"skills-available":l(h).agentsMeta.skills.length>0,testing:!!K.value[Le(t)],"test-result":Re(t),"register-instr-ref":e=>l(Me).set(t.name,e),onTest:e=>Be(t),onOpenSkills:e=>qe(t),onRemove:e=>Ue(t),onInstrInput:e=>We(t,e),onInstrBlur:e=>Ge(t),onOpenRecommendations:V,onTranscribed:e=>Pe(t.name,e)},null,8,[`agent`,`cli-options`,`memory-key`,`skills-available`,`testing`,`test-result`,`register-instr-ref`,`onTest`,`onOpenSkills`,`onRemove`,`onInstrInput`,`onInstrBlur`,`onTranscribed`]))),128))],512),[[x,N.value===`custom`]]),p(c(`div`,Wn,[a[13]||=c(`div`,{class:`sec-label`,style:{"padding-top":`16px`,"margin-bottom":`4px`}},[c(`span`,{class:`live-dot`,style:{background:`var(--green)`}}),t(`Build your team `)],-1),a[14]||=c(`div`,{class:`agent-desc`},` The agents that talk back or extend RepoOS. Enable them to add new capabilities. `,-1),(f(!0),u(T,null,o(Oe.value,t=>(f(),e(ze,{key:`team-`+t.name,agent:t,variant:`team`,"cli-options":ut(t.cli,{team:!0}),"memory-key":`team:`+t.name,"skills-available":l(h).agentsMeta.skills.length>0,testing:!!K.value[Le(t)],"test-result":Re(t),"register-instr-ref":e=>l(je).set(t.name,e),onTest:e=>Be(t),onOpenSkills:e=>qe(t),onInstrInput:e=>We(t,e),onInstrBlur:e=>Ge(t),onOpenRecommendations:V,onTranscribed:e=>Ne(t.name,e)},null,8,[`agent`,`cli-options`,`memory-key`,`skills-available`,`testing`,`test-result`,`register-instr-ref`,`onTest`,`onOpenSkills`,`onInstrInput`,`onInstrBlur`,`onTranscribed`]))),128)),s(nt,{agent:`debugger`,interactive:``}),s(nt,{agent:`tech-debt`}),s(nt,{agent:`performance`}),s(nt,{agent:`architect`}),s(nt,{agent:`design`}),s(nt,{agent:`docs-debt`})],512),[[x,N.value===`team`]]),Ze.value?E(``,!0):p((f(),u(`div`,Gn,[c(`div`,Kn,[a[15]||=c(`span`,{class:`live-dot`,style:{background:`var(--violet, var(--cyan))`}},null,-1),a[16]||=t(` Detected coding agents `,-1),s(L,{variant:`outline`,size:`sm`,class:`detect-updates-btn`,disabled:ot.value||Y.value,onClick:ht},{default:y(()=>[t(n(ot.value||Y.value?`Checking…`:Object.keys(ct.value).length>0?`Refresh update checks`:`Check for updates`),1)]),_:1},8,[`disabled`])]),a[17]||=c(`div`,{class:`agent-desc`},` What's on this machine's PATH — installed & headless-ready, desktop-only, or missing. Update checks contact only the supported public source after you request them; results are cached for 6 hours. `,-1),st.value?(f(),u(`div`,qn,` Update checks are temporarily unavailable. `)):E(``,!0),X.value&&Y.value?(f(),u(`div`,Jn,n(at(X.value))+` · scanning now… `,1)):X.value&&!Y.value?(f(),u(`div`,Yn,n(at(X.value)),1)):E(``,!0),Y.value&&!q.value.length?(f(),u(`div`,Xn,`Probing PATH…`)):q.value.length?(f(!0),u(T,{key:5},o(pt.value,i=>(f(),u(`div`,{key:i.agent.id,class:`detect-row-wrap`},[c(`div`,{class:D([`detect-row`,{"detect-row-pending":J.value.has(i.agent.id)}])},[c(`span`,{class:`detect-badge`,style:r({background:i.color,boxShadow:`0 0 8px `+i.color})},null,4),c(`span`,Qn,n(i.agent.name),1),c(`span`,{class:`detect-pill`,style:r({color:i.color})},n(i.statusLabel),5),c(`span`,{class:D([`agent-badge`,i.agent.drivable?`detect-driver-yes`:`detect-driver-no`])},n(i.agent.drivable?`RepoOS driver`:`detected only`),3),i.agent.deprecated?(f(),u(`span`,$n,`Deprecated`)):E(``,!0),rt(i.agent).version?(f(),u(`span`,er,n(rt(i.agent).version),1)):E(``,!0),i.agent.allBinaries&&i.agent.allBinaries.length>1?(f(),e(me,{key:2,"model-value":String($e.value[i.agent.id]??0),"onUpdate:modelValue":e=>tt(i.agent.id,Number(e))},{default:y(()=>[s(pe,{class:`detect-binary-select`,title:`${i.agent.allBinaries.length} copies found on PATH`},{default:y(()=>[s(fe)]),_:1},8,[`title`]),s(ge,{position:`popper`},{default:y(()=>[s(ye,{class:`detect-binary-viewport`},{default:y(()=>[(f(!0),u(T,null,o(i.agent.allBinaries,(t,r)=>(f(),e(ve,{key:t.path,value:String(r),"text-value":`${t.name} ${t.version??`?`}`,class:`detect-binary-item`},{default:y(()=>[c(`span`,tr,n(t.name),1),c(`span`,nr,n(t.version??`?`),1),c(`span`,rr,n(t.path),1)]),_:2},1032,[`value`,`text-value`]))),128))]),_:2},1024)]),_:2},1024)]),_:2},1032,[`model-value`,`onUpdate:modelValue`])):E(``,!0),J.value.has(i.agent.id)?(f(),u(`span`,ir)):E(``,!0),i.agent.compatibility?(f(),u(`button`,{key:4,type:`button`,class:D([`detect-compat-icon`,{active:Qe.value===i.agent.id}]),style:r({color:yt(i.agent)}),"aria-label":`Compatibility details for ${i.agent.name}`,onClick:_(e=>et(i.agent.id),[`stop`])},n(Ct(i.agent)),15,ar)):E(``,!0),i.agent.installed&&i.agent.update?(f(),u(`details`,or,[c(`summary`,{style:r({color:vt(i.agent.update)})},n(_t(i.agent.update)),5),c(`span`,sr,[i.agent.update.source?(f(),u(`span`,cr,n(i.agent.update.source),1)):E(``,!0),wt(i.agent.update)?(f(),u(`span`,lr,n(wt(i.agent.update)),1)):E(``,!0),i.agent.update.error?(f(),u(`span`,ur,n(i.agent.update.error),1)):E(``,!0),i.agent.update.updateCommand?(f(),u(`button`,{key:3,class:`detect-copy`,onClick:e=>Tt(i.agent.update.updateCommand)},n(Z.value===i.agent.update.updateCommand?`copied`:`copy update command`),9,dr)):E(``,!0)])])):E(``,!0),i.status===`auth`?(f(),u(`span`,fr,[c(`code`,{class:`detect-hint-code`,title:i.agent.authHint||`sign in with the CLI`},n(i.agent.authHint||`sign in with the CLI`),9,pr),i.agent.authHint?(f(),u(`button`,{key:0,class:`detect-copy`,onClick:e=>Tt(i.agent.authHint)},n(Z.value===i.agent.authHint?`copied`:`copy`),9,mr)):E(``,!0)])):i.status===`desktop`?(f(),u(`span`,hr,[c(`code`,{class:`detect-hint-code`,title:i.agent.installHint},n(i.agent.installHint),9,gr),c(`button`,{class:`detect-copy`,onClick:e=>Tt(i.agent.installHint)},n(Z.value===i.agent.installHint?`copied`:`copy`),9,_r)])):i.status===`missing`?(f(),u(`span`,vr,[c(`code`,{class:`detect-hint-code`,title:i.agent.installHint},n(i.agent.installHint),9,yr),c(`button`,{class:`detect-copy`,onClick:e=>Tt(i.agent.installHint)},n(Z.value===i.agent.installHint?`copied`:`copy`),9,br)])):E(``,!0),i.agent.deprecated?(f(),u(`span`,xr,[t(n(i.agent.installHint)+` `,1),i.agent.migrationUrl?(f(),u(`a`,{key:0,href:i.agent.migrationUrl,target:`_blank`,rel:`noopener noreferrer`},` Official migration and auth docs `,8,Sr)):E(``,!0),i.agent.migrationNote?(f(),u(`span`,Cr,n(i.agent.migrationNote),1)):E(``,!0)])):E(``,!0),c(`button`,{type:`button`,class:D([`detect-star-btn`,{on:l(dt)(Q(i.agent))}]),"aria-pressed":l(dt)(Q(i.agent)),"aria-label":l(dt)(Q(i.agent))?`Remove ${i.agent.name} from favorites`:`Add ${i.agent.name} to favorites`,title:l(dt)(Q(i.agent))?`Remove from favorites`:`Add to favorites`,onClick:e=>l(ft)(Q(i.agent))},[s(l(ne),{class:`size-3.5`,fill:l(dt)(Q(i.agent))?`currentColor`:`none`},null,8,[`fill`])],10,wr)],2),i.agent.compatibility&&Qe.value===i.agent.id?(f(),u(`div`,Tr,[c(`div`,{class:`detect-compat-card-label`,style:r({color:yt(i.agent)})},n(i.agent.compatibility.label),5),c(`div`,Er,n(St(i.agent)),1),xt(i.agent)?(f(),u(`div`,Dr,[c(`code`,Or,n(bt(i.agent)),1),c(`button`,{class:`detect-copy`,onClick:e=>Tt(bt(i.agent))},n(Z.value===bt(i.agent)?`copied`:`copy`),9,kr)])):i.agent.compatibility.status===`upgrade_recommended`?(f(),u(`div`,Ar,` upgrade recommended `)):i.agent.compatibility.status===`unsupported`?(f(),u(`div`,jr,` use a supported release `)):E(``,!0)])):E(``,!0)]))),128)):(f(),u(`div`,Zn,` No known coding agents detected on PATH. `))],512)),[[x,N.value===`detected`]]),P.value?p((f(),e(zt,{key:1,active:N.value===`playground`},null,8,[`active`])),[[x,N.value===`playground`]]):E(``,!0),F.value?p((f(),e(En,{key:2},null,512)),[[x,N.value===`providers`]]):E(``,!0)])],64)):(f(),u(`div`,Nn)),s(re,{open:!!W.value,"onUpdate:open":a[2]||=e=>{e||(W.value=null)}},{default:y(()=>[s(B),s(z,{class:`am-modal`},{default:y(()=>[c(`div`,Mr,[s(ae,null,{default:y(()=>[t(`Skills for `+n(W.value?.name),1)]),_:1}),s(R,{class:`close-x`},{default:y(()=>[...a[18]||=[t(`×`,-1)]]),_:1})]),s(ie,{class:`am-modal-desc`},{default:y(()=>[...a[19]||=[t(`Choose preferred candidates for this agent. RepoOS still selects only task-relevant skills on each run.`,-1)]]),_:1}),W.value?(f(),u(`div`,Nr,[(f(!0),u(T,null,o(l(h).agentsMeta.skills,e=>(f(),u(`label`,{key:e.path,class:`agent-skill-option`},[c(`input`,{type:`checkbox`,checked:(W.value.skills??[]).includes(e.name),onChange:t=>Ke(W.value,e.name,t.target.checked)},null,40,Pr),c(`span`,null,[c(`strong`,null,n(e.name),1),e.description?(f(),u(`small`,Fr,n(e.description),1)):E(``,!0)])]))),128))])):E(``,!0)]),_:1})]),_:1},8,[`open`])]))}});export{Rr as default};
1
+ import{C as e,D as t,Dt as n,Et as r,H as i,J as a,K as o,O as s,S as c,St as l,T as u,V as d,W as f,at as p,et as m,f as h,ft as g,g as _,h as ee,i as v,it as y,k as b,m as x,mt as S,p as C,r as w,v as T,w as E,wt as D,x as O,y as k}from"./vendor-vue-0d2wfih_.js";import{a as A,r as te}from"./api-BXg3t-A6.js";import{r as j}from"./config-BpusGwRJ.js";import{Ct as M,R as N,ht as P,k as ne,pt as F}from"./vendor-ui-BbK4TVl8.js";import{t as I}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as L}from"./button-BsLUWnfn.js";import{a as R,i as z,n as B,o as re,r as ie,t as ae}from"./title-CmTcwJQC.js";import{o as V,t as oe}from"./VoiceDictate-C0-jNbo1.js";import{n as H,t as U}from"./useChatScroll-BD10j3cq.js";import{t as se}from"./clipboard-CkhTprDX.js";import{n as ce}from"./AgentModelModal-CFdPv_af.js";import{A as le,F as W,K as ue,T as de,d as fe,f as pe,h as me,l as he,m as ge,n as _e,p as ve,u as ye}from"./index-C1p-aj2F.js";var be={class:`agent-head`},xe={class:`agent-title`},Se={key:1,class:`agent-name`},Ce={key:2,class:`agent-badge`},we={key:0,style:{display:`flex`,"align-items":`center`,gap:`10px`}},Te={class:`agent-body`},Ee={class:`agent-field`},De={key:0,class:`agent-legacy-notice`,role:`status`},Oe={class:`agent-field agent-test-result`},ke={class:`agent-test-actions`},Ae={key:0,class:`model-test-spinner`},je=[`title`],Me={class:`agent-field agent-instr-field`},Ne={class:`instr-header agent-instr-header`},Pe={class:`agent-instr-header-actions`},G=[`aria-expanded`,`title`],K=[`value`],Fe={key:0,class:`agent-field agent-skills-field`},Ie={class:`agent-skills-row`},Le={class:`agent-skills-inline-summary`},Re=`Skills are selected dynamically for each task/run from repository skills; these are this agent's preferred candidates.`,ze=b({__name:`AgentCard`,props:{agent:{},variant:{},cliOptions:{},memoryKey:{},skillsAvailable:{type:Boolean},testing:{type:Boolean},testResult:{},registerInstrRef:{type:Function}},emits:[`test`,`open-skills`,`remove`,`instr-input`,`instr-blur`,`open-recommendations`,`transcribed`],setup(r,{emit:i}){let a=r,o=i,d=j(),p=S(!1);function m(e){return e.toLowerCase()===`gemini`}function h(){return a.variant==="default"?`default`:a.variant===`team`?`team`:null}return(i,g)=>(f(),u(`div`,{class:D([`agent-card`,{off:!r.agent.enabled}])},[c(`div`,be,[c(`div`,xe,[g[13]||=c(`span`,{class:`agent-dot`},null,-1),r.variant===`custom`?(f(),e(le,{key:0,"model-value":r.agent.name,class:`w-[180px] h-[30px]`,"onUpdate:modelValue":g[0]||=e=>r.agent.name=String(e??``)},null,8,[`model-value`])):(f(),u(`span`,Se,n(r.agent.name),1)),h()?(f(),u(`span`,Ce,n(h()),1)):E(``,!0)]),r.variant===`custom`?(f(),u(`div`,we,[s(L,{variant:`ghost`,size:`sm`,class:`agent-remove`,onClick:g[1]||=e=>o(`remove`)},{default:y(()=>[...g[14]||=[t(` Remove `,-1)]]),_:1}),s(_e,{checked:r.agent.enabled,"onUpdate:checked":g[2]||=e=>r.agent.enabled=e},null,8,[`checked`])])):(f(),e(_e,{key:1,checked:r.agent.enabled,"onUpdate:checked":g[3]||=e=>r.agent.enabled=e},null,8,[`checked`]))]),c(`div`,Te,[c(`div`,Ee,[g[17]||=c(`label`,null,`Coding agent + Model`,-1),s(he,{"cli-options":r.cliOptions,"model-options":l(d).modelsFor(r.agent.cli,r.agent.model),"memory-key":r.memoryKey,cli:r.agent.cli,"onUpdate:cli":g[4]||=e=>r.agent.cli=e,model:r.agent.model,"onUpdate:model":g[5]||=e=>r.agent.model=e},null,8,[`cli-options`,`model-options`,`memory-key`,`cli`,`model`]),m(r.agent.cli)?(f(),u(`div`,De,[g[15]||=c(`strong`,null,`Deprecated Gemini CLI`,-1),g[16]||=t(` — this saved value is preserved for history, but new assignments use Antigravity CLI (agy). `,-1),c(`button`,{type:`button`,class:`model-pricing-link`,onClick:g[6]||=e=>o(`open-recommendations`)},` Migrate in the agent guide → `)])):E(``,!0)]),c(`div`,Oe,[g[18]||=c(`label`,null,`Compatibility`,-1),c(`div`,ke,[s(L,{variant:`outline`,size:`sm`,disabled:r.testing,onClick:g[7]||=e=>o(`test`)},{default:y(()=>[r.testing?(f(),u(`span`,Ae)):E(``,!0),t(` `+n(r.testing?`Testing…`:r.testResult?`Test again`:`Test`),1)]),_:1},8,[`disabled`]),r.testResult?(f(),u(`span`,{key:0,class:D(`model-test model-test-`+r.testResult.status),title:r.testResult.error},n(r.testResult.status.replace(`_`,` `)),11,je)):E(``,!0)])]),c(`div`,Me,[c(`div`,Ne,[g[19]||=c(`label`,null,`Instructions`,-1),c(`div`,Pe,[p.value?(f(),e(oe,{key:0,onTranscribed:g[8]||=e=>o(`transcribed`,e)})):E(``,!0),c(`button`,{type:`button`,class:`agent-instr-toggle`,"aria-expanded":p.value,title:p.value?`Collapse instructions`:`Expand instructions`,onClick:g[9]||=e=>p.value=!p.value},[p.value?(f(),e(l(P),{key:0,class:`size-4`,"aria-hidden":`true`})):(f(),e(l(F),{key:1,class:`size-4`,"aria-hidden":`true`}))],8,G)])]),p.value?(f(),u(`textarea`,{key:0,ref:e=>a.registerInstrRef(e),value:r.agent.instructions??``,class:`agent-instr`,rows:`2`,placeholder:`Optional — how this agent should behave`,onInput:g[10]||=e=>o(`instr-input`,e),onBlur:g[11]||=e=>o(`instr-blur`)},null,40,K)):E(``,!0)]),r.skillsAvailable?(f(),u(`div`,Fe,[g[20]||=c(`label`,{class:`agent-skills-label`},`Enabled skills`,-1),c(`div`,Ie,[s(L,{variant:`ghost`,size:`sm`,class:`agent-skills-add`,title:`Add skills to agent`,onClick:g[12]||=e=>o(`open-skills`)},{default:y(()=>[s(l(N),{class:`size-3.5`,"aria-hidden":`true`})]),_:1}),c(`span`,{class:`agent-skills-info`,title:Re,"aria-label":`About enabled skills`},`ⓘ`),c(`span`,Le,n((r.agent.skills??[]).join(`, `)||`No default candidates`),1)])])):E(``,!0)])],2))}}),Be={class:`agent-head`},Ve={class:`agent-title`},He={class:`agent-name`},Ue={class:`agent-body`},We={class:`agent-field`},Ge={key:0,class:`agent-field`},Ke={key:1,class:`agent-field`},qe={class:`agent-field`},Je={class:`agent-test-actions`},Ye={key:0,class:`built-in-last-run`},Xe={key:2,class:`agent-field built-in-status-field`},q={key:0,class:`built-in-status success`},J={key:0,class:`built-in-autofixed`},Y={key:1,class:`built-in-task-link`},Ze={key:2,class:`built-in-run-doc`},X=[`href`],Z={key:1,class:`built-in-status error`},Qe={"data-testid":`built-in-started-modal`},$e={class:`built-in-started-head`},et={class:`built-in-started-body`},tt={class:`built-in-started-actions`},nt=I(b({__name:`BuiltInAgentCard`,props:{agent:{},interactive:{type:Boolean}},setup(r){let i=r,d=j(),p=O(()=>d.agentsMeta.clis[0]??`opencode`),h=O(()=>d.agentsMeta.models[0]??`default`),g=S({enabled:!1,schedule:`manual`,cli:``,model:``});m(()=>d.data?.builtInAgents,e=>{let t=e?.[i.agent];t&&(g.value={enabled:t.enabled??!1,schedule:t.schedule??`manual`,lastRunAt:t.lastRunAt,cli:t.cli||p.value,model:t.model||h.value})},{immediate:!0,deep:!0});let _=O(()=>d.agentsMeta.clis??[]),ee=d.modelsFor,v=S(!1),b=S(!1),x=S(``),C=S(``),w=S(null),M=S([]),N=S(null),P=O(()=>{switch(i.agent){case`performance`:return`Scans for performance issues like slow functions, blocking operations, deeply nested loops, unbounded memory growth, and duplicate computations. Findings are bundled into one inbox task.`;case`tech-debt`:return`Scans for technical debt patterns including outdated dependencies, code duplication, high-complexity files, unused code, and deprecated APIs. Findings are bundled into one inbox task.`;case`design`:return`Reviews your web UI for layout issues, styling inconsistencies, accessibility gaps, and UX friction. Findings and proposed fixes are bundled into one inbox task.`;case`architect`:return`Analyses your codebase for tight coupling, missing abstractions, scalability risks, and over-engineering. Findings are bundled into one inbox task.`;case`docs-debt`:return`Verifies that AGENTS.md and your project docs still match the code — checks file paths, symbols, and stated constraints. Stale references it can fix automatically are committed; anything that needs a human decision is bundled into one inbox task.`;default:return F.value?.description??``}});function ne(){b.value=!1}let F=O(()=>i.agent===`debugger`?{name:`Debugger Agent`,description:`Paste a bug, stack trace, or error and get a clear diagnosis — the root cause plus a suggested fix. Chat with him from his floating head next to Ross and the CTO.`,icon:`🐞`}:i.agent===`tech-debt`?{name:`Tech Debt Agent`,description:`Scans your repository for technical debt patterns including outdated dependencies, code duplication, high-complexity files, unused code, and deprecated APIs. Every finding is bundled into one inbox task, and the run is recorded in your configured docs directory.`,icon:`🔧`}:i.agent===`performance`?{name:`Performance Agent`,description:`Keeps your app fast by scanning for performance issues like slow functions, blocking operations, deeply nested loops, unbounded memory growth, and duplicate computations. Every finding is bundled into one inbox task, and the run is recorded in your configured docs directory.`,icon:`⚡`}:i.agent===`architect`?{name:`Architect Agent`,description:`Analyzes your codebase architecture — detects tight coupling, missing abstractions, scalability risks, and over-engineering. Findings are bundled into one inbox task and the run is recorded in your configured docs directory.`,icon:`🏛`}:i.agent===`design`?{name:`Design Agent`,description:`Reviews your web UI's quality — layout, styling consistency, accessibility, and interaction flows. Flags UI bugs and UX friction and proposes concrete fixes and design improvements, bundled into one inbox task and recorded in your configured docs directory.`,icon:`🎨`}:i.agent===`docs-debt`?{name:`Docs Debt Agent`,description:`Checks that AGENTS.md and your configured project docs still tell the truth about the code — a skill-guided agent verifies file paths, symbols, scripts, and stated constraints against the real repo, whatever its layout. A fix auto-commits only after an independent verification passes; everything else is bundled into one task, and the run is recorded in your configured docs directory.`,icon:`📖`}:null),I=O(()=>g.value.lastRunAt?new Date(g.value.lastRunAt).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`}):`Never`),V=O(()=>g.value.cli||p.value),oe=O(()=>g.value.model||h.value);async function H(){try{let e=d.data?.builtInAgents||{},t={enabled:g.value.enabled,schedule:g.value.schedule};g.value.lastRunAt&&(t.lastRunAt=g.value.lastRunAt),g.value.cli&&(t.cli=g.value.cli),g.value.model&&(t.model=g.value.model),await A(`/api/config`,te(`PATCH`,{builtInAgents:{...e,[i.agent]:t}}));let n=await A(`/api/config`);d.data=n.config}catch(e){x.value=e instanceof Error?e.message:`Failed to save configuration`}}function U(e){g.value.enabled=e,H()}function se(e){g.value.cli=e,H()}function ce(e){g.value.model=e,H()}async function le(e){e&&(e===`daily`||e===`weekly`||e===`manual`)&&(g.value.schedule=e,await H())}async function W(){if(!v.value){v.value=!0,b.value=!0,x.value=``,C.value=``,w.value=null,M.value=[],N.value=null;try{let e=await A(`/api/agents/built-in/${i.agent}/run`,te(`POST`,{}));if(e.ok){if(g.value.lastRunAt=new Date().toISOString(),N.value=e.runDoc??null,w.value=e.taskId??null,e.failed&&e.failed>0)x.value=`${e.taskCount} task(s) created, ${e.failed} failed — ${(e.errors??[]).join(`; `)||`unknown write error`}`;else if(i.agent===`design`)C.value=`Review complete — ${e.findingsFound??0} design finding(s) found (${e.scannedFiles??0} files scanned).`;else if(i.agent===`architect`)C.value=`Review complete — ${e.issuesFound??0} architecture issue(s) found (${e.scannedFiles??0} files scanned).`;else if(i.agent===`docs-debt`)if(e.error)x.value=e.error;else{let t=e.trivialFixesApplied??0;M.value=e.autoFixed??[];let n=t>0?`corrected ${t} stale reference(s); `:``;C.value=(e.findingsFound??0)>0?`Check complete — ${n}${e.findingsFound??0} claim(s) need a human decision, bundled into one task (${e.scannedFiles??0} docs scanned).`:`Check complete — ${n}docs match the code (${e.scannedFiles??0} docs scanned).`}else if(e.taskCount>0){let t=i.agent===`performance`?`performance`:`tech debt`;C.value=`Scan complete — ${e.taskCount} ${t} task(s) created from ${e.issuesFound??0} issue(s).`}else{let t=i.agent===`performance`?`performance`:`tech debt`;C.value=`Scan complete — no ${t} issues found (${e.scannedFiles??0} files scanned).`}await H()}else x.value=`Failed to run agent`}catch(e){x.value=e instanceof Error?e.message:`Failed to run agent`}finally{v.value=!1,b.value=!1}}}return(i,d)=>{let p=a(`router-link`);return F.value?(f(),u(`div`,{key:0,class:D([`agent-card`,{off:!g.value.enabled}])},[c(`div`,Be,[c(`div`,Ve,[d[1]||=c(`span`,{class:`agent-dot`},null,-1),c(`span`,He,n(F.value.icon)+` `+n(F.value.name),1),d[2]||=c(`span`,{class:`agent-badge`},`built-in`,-1)]),s(_e,{checked:g.value.enabled,"onUpdate:checked":U},null,8,[`checked`])]),c(`div`,Ue,[c(`div`,We,[d[3]||=c(`label`,null,`Coding agent + Model`,-1),s(he,{"cli-options":_.value,"model-options":l(ee)(V.value,oe.value),cli:V.value,model:oe.value,"memory-key":`builtin:`+r.agent,"onUpdate:cli":se,"onUpdate:model":ce},null,8,[`cli-options`,`model-options`,`cli`,`model`,`memory-key`])]),r.interactive?(f(),u(`div`,Ke,[...d[8]||=[c(`label`,null,`Interaction`,-1),c(`div`,{class:`built-in-interactive-hint`},[c(`span`,{class:`built-in-interactive-dot`}),t(` Chat from floating head `)],-1)]])):(f(),u(`div`,Ge,[d[7]||=c(`label`,null,`Run schedule`,-1),s(me,{"model-value":g.value.schedule,"onUpdate:modelValue":le},{default:y(()=>[s(pe,{class:`h-[34px] w-full rounded-[9px] px-[11px]`},{default:y(()=>[s(fe)]),_:1}),s(ge,{position:`popper`},{default:y(()=>[s(ye,{class:`min-w-[var(--radix-select-trigger-width)]`},{default:y(()=>[s(ve,{value:`daily`},{default:y(()=>[...d[4]||=[t(`Daily`,-1)]]),_:1}),s(ve,{value:`weekly`},{default:y(()=>[...d[5]||=[t(`Weekly`,-1)]]),_:1}),s(ve,{value:`manual`},{default:y(()=>[...d[6]||=[t(`Manual only`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`model-value`])])),c(`div`,qe,[d[9]||=c(`label`,null,`Actions`,-1),c(`div`,Je,[s(L,{variant:`outline`,size:`sm`,disabled:v.value||!g.value.enabled,onClick:W},{default:y(()=>[t(n(v.value?`Running…`:`Run now`),1)]),_:1},8,[`disabled`]),g.value.lastRunAt?(f(),u(`span`,Ye,` Last: `+n(I.value),1)):E(``,!0)])]),C.value||x.value?(f(),u(`div`,Xe,[C.value?(f(),u(`div`,q,[c(`span`,null,n(C.value),1),M.value.length?(f(),u(`ul`,J,[(f(!0),u(T,null,o(M.value,e=>(f(),u(`li`,{key:`${e.doc}:${e.from}`},[c(`code`,null,n(e.doc),1),d[10]||=t(`: `,-1),c(`code`,null,n(e.from),1),d[11]||=t(` → `,-1),c(`code`,null,n(e.to),1)]))),128))])):E(``,!0),w.value?(f(),u(`div`,Y,[s(p,{to:`/work?task=${w.value}`},{default:y(()=>[t(` #`+n(w.value)+` — review the findings task `,1)]),_:1},8,[`to`])])):E(``,!0),N.value?(f(),u(`div`,Ze,[c(`a`,{href:`/${N.value}`,target:`_blank`,rel:`noopener`},` Run doc: `+n(N.value),9,X)])):E(``,!0)])):E(``,!0),x.value?(f(),u(`div`,Z,n(x.value),1)):E(``,!0)])):E(``,!0)]),(f(),e(k,{to:`body`},[s(re,{open:b.value,"onUpdate:open":d[0]||=e=>b.value=e},{default:y(()=>[s(B),s(z,{class:`built-in-started-modal`},{default:y(()=>[c(`div`,Qe,[c(`div`,$e,[s(ae,{class:`built-in-started-title`},{default:y(()=>[t(n(F.value.icon)+` `+n(F.value.name)+` started `,1)]),_:1}),s(R,{class:`close-x`,"aria-label":`Close`,onClick:ne},{default:y(()=>[...d[12]||=[t(` × `,-1)]]),_:1})]),c(`div`,et,[s(ie,{class:`built-in-started-summary`},{default:y(()=>[t(n(P.value),1)]),_:1}),d[13]||=c(`div`,{class:`built-in-started-details`},[c(`p`,{class:`built-in-started-timing`},[c(`span`,{class:`built-in-started-dot`}),t(` Usually takes 1–3 minutes `)]),c(`p`,{class:`built-in-started-location`},` Findings will appear as a new task in your inbox when the run is complete. `)],-1)]),c(`div`,tt,[s(L,{variant:`outline`,size:`sm`,onClick:ne},{default:y(()=>[...d[14]||=[t(`Got it`,-1)]]),_:1})])])]),_:1})]),_:1},8,[`open`])]))],2)):E(``,!0)}}}),[[`__scopeId`,`data-v-2ba6742c`]]),rt=[`pm`,`engineer`,`reviewer`];function it(e){let t=new Map(rt.map((e,t)=>[e,t]));return[...e].sort((e,n)=>{let r=t.get(e.name.toLowerCase())??999,i=t.get(n.name.toLowerCase())??999;return r===i?e.name.localeCompare(n.name):r-i})}var at={class:`playground`},ot=[`aria-busy`],st={class:`playground-sidebar-head`},ct={class:`playground-filters`},lt={class:`playground-filter-row`},ut=[`value`],dt=[`value`],ft={key:0,class:`playground-error`},Q={class:`playground-list`},pt={key:0,class:`playground-skeletons`,"aria-hidden":`true`},$={key:1,class:`playground-loading playground-no-match`},mt={key:2,class:`playground-loading`},ht={key:0,class:`playground-provider-group`},gt={class:`playground-provider-label`},_t={key:0,class:`playground-provider-error`},vt=[`disabled`,`onClick`],yt={class:`playground-model-name`},bt={class:`playground-model-reason`},xt={class:`playground-model-meta`},St={key:0},Ct={class:`playground-chat`},wt={class:`playground-chat-head`},Tt={class:`playground-active-info`},Et=[`disabled`],Dt={class:`playground-log-wrap`},Ot=[`aria-label`],kt={key:0,class:`playground-welcome`},At={class:`playground-starters`},jt=[`onClick`],Mt=[`innerHTML`],Nt={key:1},Pt={key:1,class:`playground-send-error`},Ft=[`disabled`,`placeholder`,`aria-label`],It=[`disabled`],Lt={key:1,class:`playground-empty`},Rt={key:0},zt=I(b({__name:`ModelPlaygroundPanel`,props:{active:{type:Boolean,default:!0}},setup(e){let r=e,i=[`What's this repo about?`,`Explain this codebase`,`What would you improve here first?`],a=S([]),m=S(!1),g=S(``),ee=S(!1),v=S(null),b=S([]),x=S(``),w=S(!1),k=S(``),j=S(null),N=S(null),{showJumpToLatest:P,onScroll:ne,scrollToLatest:F}=U(j,{chatId:()=>`playground:${v.value?.runId??`none`}`,contentSize:()=>b.value.length,active:()=>r.active}),I=O(()=>a.value.flatMap(e=>e.models.map(t=>({...t,providerLabel:e.label})))),R=S(``),z=S(``),B=S(``),re=[.5,1,2,5,10];function ie(e){let t=R.value.trim().toLowerCase();if(t&&!e.name.toLowerCase().includes(t))return!1;let n=B.value===``?null:Number(B.value);if(n!=null){let t=e.inputPricePerM??e.outputPricePerM;if(t!=null&&t>n)return!1}return!0}let ae=O(()=>a.value.filter(e=>!z.value||e.id===z.value).map(e=>({...e,models:e.models.filter(ie)})).filter(e=>e.models.length>0||e.error)),oe=O(()=>ae.value.reduce((e,t)=>e+t.models.length,0)),se=O(()=>R.value.trim()!==``||z.value!==``||B.value!==``);function ce(){R.value=``,z.value=``,B.value=``}function le(e){return e==null?`—`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}async function ue(e=!1){m.value=!0,g.value=``;try{let t=await A(`/api/playground/models${e?`?refresh=1`:``}`);a.value=t.providers;let n=I.value;if(v.value){let e=n.find(e=>e.runId===v.value?.runId);v.value=e??v.value}else n.length&&(v.value=n[0])}catch(e){g.value=e instanceof Error?e.message:`Could not load the model catalog.`}finally{m.value=!1,ee.value=!0}}function de(e){w.value||v.value?.runId===e.runId||(v.value=e,b.value=[],k.value=``,x.value=``)}function fe(){w.value||(b.value=[],k.value=``,x.value=``)}async function pe(e){let t=(e??x.value).trim();if(!t||w.value||!v.value)return;let n=v.value;b.value=[...b.value,{role:`user`,text:t}],x.value=``,k.value=``,w.value=!0,F(`auto`);try{let e=await A(`/api/playground/chat`,te(`POST`,{runId:n.runId,messages:b.value}));b.value=[...b.value,{role:`assistant`,text:e.text}]}catch(e){k.value=e instanceof Error?e.message:`The model did not respond.`}finally{w.value=!1,F(`auto`)}}function me(e){e.key!==`Enter`||e.shiftKey||e.isComposing||(e.preventDefault(),pe())}return d(()=>{ue()}),(e,r)=>(f(),u(`div`,at,[c(`aside`,{class:`playground-sidebar`,"aria-label":`Models worth trying`,"aria-busy":m.value},[c(`div`,st,[r[9]||=c(`span`,{class:`sec-label`},[c(`span`,{class:`live-dot`}),t(`Models worth trying`)],-1),s(L,{variant:`outline`,size:`sm`,disabled:m.value,onClick:r[0]||=e=>ue(!0)},{default:y(()=>[t(n(m.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`disabled`])]),c(`div`,ct,[p(c(`input`,{"onUpdate:modelValue":r[1]||=e=>R.value=e,type:`search`,class:`playground-search`,placeholder:`Search models…`,"aria-label":`Search models by name`},null,512),[[C,R.value]]),c(`div`,lt,[p(c(`select`,{"onUpdate:modelValue":r[2]||=e=>z.value=e,class:`playground-provider-select`,"aria-label":`Filter by provider`},[r[10]||=c(`option`,{value:``},`All providers`,-1),(f(!0),u(T,null,o(a.value,e=>(f(),u(`option`,{key:e.id,value:e.id},n(e.label),9,ut))),128))],512),[[h,z.value]]),p(c(`select`,{"onUpdate:modelValue":r[3]||=e=>B.value=e,class:`playground-cost-select`,"aria-label":`Filter by maximum token cost`},[r[11]||=c(`option`,{value:``},`Any cost`,-1),(f(),u(T,null,o(re,e=>c(`option`,{key:e,value:String(e)},` ≤ `+n(le(e))+` / 1M `,9,dt)),64))],512),[[h,B.value]])])]),g.value?(f(),u(`div`,ft,n(g.value),1)):E(``,!0),c(`div`,Q,[m.value&&!I.value.length?(f(),u(`div`,pt,[(f(),u(T,null,o(3,e=>c(`div`,{key:e,class:`playground-skeleton`},[...r[12]||=[c(`div`,{class:`playground-skeleton-line w-70`},null,-1),c(`div`,{class:`playground-skeleton-line w-90`},null,-1),c(`div`,{class:`playground-skeleton-line w-45`},null,-1)]])),64))])):ee.value&&!g.value&&I.value.length&&!oe.value?(f(),u(`div`,$,[r[13]||=t(` No models match your filters. `,-1),se.value?(f(),u(`button`,{key:0,type:`button`,class:`playground-filter-clear`,onClick:ce},` Clear filters `)):E(``,!0)])):ee.value&&!I.value.length&&!g.value?(f(),u(`div`,mt,` No models available right now. `)):E(``,!0),(f(!0),u(T,null,o(ae.value,e=>(f(),u(T,{key:e.id},[e.models.length||e.error?(f(),u(`div`,ht,[c(`div`,gt,n(e.label),1),e.error?(f(),u(`div`,_t,n(e.error),1)):E(``,!0),(f(!0),u(T,null,o(e.models,t=>(f(),u(`button`,{key:t.runId,type:`button`,class:D([`playground-model-card`,{active:v.value?.runId===t.runId}]),disabled:w.value&&v.value?.runId!==t.runId,onClick:n=>de({...t,providerLabel:e.label})},[c(`div`,yt,n(t.name),1),c(`div`,bt,n(t.reason),1),c(`div`,xt,[c(`span`,null,n(le(t.inputPricePerM))+` / `+n(le(t.outputPricePerM))+` per 1M`,1),t.contextWindow?(f(),u(`span`,St,n(l(W)(t.contextWindow))+` ctx`,1)):E(``,!0)])],10,vt))),128))])):E(``,!0)],64))),128))])],8,ot),c(`section`,Ct,[v.value?(f(),u(T,{key:0},[c(`header`,wt,[r[14]||=c(`span`,{class:`playground-active-dot`,"aria-hidden":`true`},null,-1),c(`div`,Tt,[c(`strong`,null,n(v.value.name),1),c(`span`,null,n(v.value.providerLabel)+` · active model`,1)]),b.value.length?(f(),u(`button`,{key:0,type:`button`,class:`playground-clear`,disabled:w.value,"aria-label":`Clear conversation`,onClick:r[4]||=e=>fe()},` Clear `,8,Et)):E(``,!0)]),c(`div`,Dt,[c(`div`,{ref_key:`log`,ref:j,class:`playground-log ai-chat-log`,role:`log`,"aria-live":`polite`,"aria-label":`Conversation with ${v.value.name}`,onScroll:r[5]||=(...e)=>l(ne)&&l(ne)(...e)},[b.value.length?E(``,!0):(f(),u(`div`,kt,[c(`strong`,null,`Try `+n(v.value.name),1),c(`p`,null,n(v.value.reason),1),c(`div`,At,[(f(),u(T,null,o(i,e=>c(`button`,{key:e,type:`button`,onClick:t=>pe(e)},n(e),9,jt)),64))])])),(f(!0),u(T,null,o(b.value,(e,t)=>(f(),u(`div`,{key:t,class:D([`playground-row`,`playground-row-${e.role}`])},[c(`div`,{class:D([`playground-bubble`,`playground-bubble-${e.role}`])},[e.role===`assistant`?(f(),u(`div`,{key:0,class:`playground-markdown`,innerHTML:l(V)(e.text)},null,8,Mt)):(f(),u(`span`,Nt,n(e.text),1))],2)],2))),128)),s(H,{active:w.value,label:`Model is responding`},null,8,[`active`]),k.value?(f(),u(`div`,Pt,n(k.value),1)):E(``,!0)],40,Ot),l(P)?(f(),u(`button`,{key:0,type:`button`,class:`agent-jump`,onClick:r[6]||=e=>l(F)()},[s(l(M),{class:`size-3.5`}),r[15]||=t(` Latest `,-1)])):E(``,!0)]),c(`form`,{class:`playground-compose`,onSubmit:r[8]||=_(e=>pe(),[`prevent`])},[p(c(`textarea`,{ref_key:`draftTextarea`,ref:N,"onUpdate:modelValue":r[7]||=e=>x.value=e,rows:`1`,disabled:w.value,placeholder:`Message ${v.value.name}…`,"aria-label":`Message ${v.value.name}`,onKeydown:me},null,40,Ft),[[C,x.value]]),c(`button`,{type:`submit`,class:`ai-chat-send`,disabled:!x.value.trim()||w.value,"aria-label":`Send message`},` Send `,8,It)],32)],64)):(f(),u(`div`,Lt,[m.value?E(``,!0):(f(),u(`p`,Rt,`Pick a model from the sidebar to start chatting.`))]))])]))}}),[[`__scopeId`,`data-v-113d4f39`]]),Bt={class:`mp-panel agent-tab-panel`},Vt={key:0,class:`mp-error`},Ht={key:1,class:`agent-empty`},Ut={class:`mp-row-head`},Wt={class:`mp-row-title`},Gt={class:`agent-name`},Kt=[`href`],qt={class:`mp-note`},Jt={key:0,class:`mp-key-form`},Yt=[`onUpdate:modelValue`,`placeholder`,`aria-label`,`onKeyup`],Xt={key:1,class:`mp-error`},Zt={key:0,class:`mp-loading`},Qt={key:1,class:`mp-error`},$t=[`onClick`],en={key:2,class:`mp-data`},tn={key:0,class:`mp-stat mp-stat-hero`},nn={class:`mp-stat-value`},rn={key:0,class:`mp-stat-sub`},an={key:1,class:`mp-part-error`},on={key:2,class:`mp-stat-row`},sn={class:`mp-stat`},cn={class:`mp-stat-value sm`},ln={class:`mp-stat`},un={class:`mp-stat-value sm`},dn={class:`mp-stat`},fn={class:`mp-stat-value sm`},pn={key:0,class:`mp-stat`},mn={class:`mp-stat-value sm`},hn={key:3,class:`mp-part-error`},gn={key:3,class:`mp-data`},_n={class:`mp-window-head`},vn={class:`mp-stat-label`},yn={class:`mp-window-pct`},bn=[`aria-valuenow`,`aria-label`],xn={key:1,class:`mp-window-reset`},Sn={key:1,class:`mp-part-error`},Cn=[`href`],wn={key:2,class:`mp-part-error`},Tn={key:4,class:`mp-actions`},En=I(b({__name:`ModelProvidersPanel`,setup(i){let a=S([]),l=S(!1),m=S(``),h=g({}),_=g({}),v=g({}),b=g({}),x=g({});function w(e){return h[e]||(h[e]={usage:null,loading:!1,error:``}),h[e]}async function O(){l.value=!0,m.value=``;try{let e=await A(`/api/model-providers`);a.value=e.providers;for(let t of e.providers)t.kind===`live`&&t.hasKey&&!h[t.id]?.usage&&k(t.id)}catch(e){m.value=e instanceof Error?e.message:`Could not load the provider list.`}finally{l.value=!1}}async function k(e){let t=w(e);if(!t.loading){t.loading=!0,t.error=``;try{t.usage=await A(`/api/model-providers/${e}/usage`)}catch(e){t.error=e instanceof Error?e.message:`Could not load usage.`}finally{t.loading=!1}}}async function j(e){if(!v[e.id]){v[e.id]=!0,x[e.id]=``;try{let t=await A(`/api/model-providers/${e.id}/key`,te(`POST`,{key:_[e.id]??``}));e.hasKey=t.hasKey,_[e.id]=``,b[e.id]=!1,t.hasKey?k(e.id):w(e.id).usage=null}catch(t){x[e.id]=t instanceof Error?t.message:`Could not save the key.`}finally{v[e.id]=!1}}}function M(e){_[e.id]=``,j(e)}function N(e){return e==null?`—`:`$${e.toLocaleString(`en-US`,{minimumFractionDigits:2,maximumFractionDigits:2})}`}function P(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleString(`en-US`,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function ne(e){return e===`openrouter`||e===`opencode-go`}let F=e=>e?.kind===`openrouter`?e:null,I=e=>e?.kind===`opencode-go`?e:null;return d(()=>{O()}),(i,d)=>(f(),u(`div`,Bt,[d[11]||=c(`div`,{class:`sec-label`,style:{"padding-top":`16px`,"margin-bottom":`4px`}},[c(`span`,{class:`live-dot`}),t(`Model providers `)],-1),d[12]||=c(`div`,{class:`agent-desc`},` Spend and usage per model provider, without leaving RepoOS. Two providers report live numbers behind an API key; the rest link straight to their dashboard. `,-1),m.value?(f(),u(`div`,Vt,n(m.value),1)):l.value&&!a.value.length?(f(),u(`div`,Ht,`Loading providers…`)):E(``,!0),(f(!0),u(T,null,o(a.value,i=>(f(),u(`div`,{key:i.id,class:`mp-row`},[c(`div`,Ut,[c(`div`,Wt,[c(`span`,Gt,n(i.label),1),c(`span`,{class:D([`mp-pill`,i.kind===`live`?`pill-live`:`pill-link`])},n(i.kind===`live`?`live`:`dashboard only`),3)]),c(`a`,{class:`mp-dash-link`,href:i.dashboardUrl,target:`_blank`,rel:`noopener noreferrer`},` Open dashboard ↗ `,8,Kt)]),c(`div`,qt,n(i.note),1),ne(i.id)?(f(),u(T,{key:0},[!i.hasKey||b[i.id]?(f(),u(`div`,Jt,[p(c(`input`,{"onUpdate:modelValue":e=>_[i.id]=e,type:`password`,autocomplete:`off`,placeholder:`Paste your ${i.label} API key`,"aria-label":`${i.label} API key`,onKeyup:ee(e=>j(i),[`enter`])},null,40,Yt),[[C,_[i.id]]]),s(L,{variant:`outline`,size:`sm`,disabled:v[i.id],onClick:e=>j(i)},{default:y(()=>[t(n(v[i.id]?`Saving…`:`Save key`),1)]),_:2},1032,[`disabled`,`onClick`]),i.hasKey?(f(),e(L,{key:0,variant:`ghost`,size:`sm`,disabled:v[i.id],onClick:e=>b[i.id]=!1},{default:y(()=>[...d[0]||=[t(` Cancel `,-1)]]),_:1},8,[`disabled`,`onClick`])):E(``,!0),d[1]||=c(`div`,{class:`mp-key-hint`},[t(` Stored in `),c(`code`,null,`.env`),t(` on this machine (gitignored) — never committed, never logged. `)],-1),x[i.id]?(f(),u(`div`,Xt,n(x[i.id]),1)):E(``,!0)])):(f(),u(T,{key:1},[w(i.id).loading?(f(),u(`div`,Zt,`Checking…`)):w(i.id).error?(f(),u(`div`,Qt,[t(n(w(i.id).error)+` `,1),c(`button`,{class:`mp-retry`,onClick:e=>k(i.id)},`Retry`,8,$t)])):F(w(i.id).usage)?(f(),u(`div`,en,[F(w(i.id).usage).credits?(f(),u(`div`,tn,[d[2]||=c(`span`,{class:`mp-stat-label`},`Remaining credits`,-1),c(`span`,nn,n(N(F(w(i.id).usage).credits.remaining)),1),F(w(i.id).usage).credits.totalCredits==null?E(``,!0):(f(),u(`span`,rn,` of `+n(N(F(w(i.id).usage).credits.totalCredits))+` purchased `,1))])):E(``,!0),F(w(i.id).usage).creditsError?(f(),u(`div`,an,` Balance unavailable: `+n(F(w(i.id).usage).creditsError),1)):E(``,!0),F(w(i.id).usage).key?(f(),u(`div`,on,[c(`div`,sn,[d[3]||=c(`span`,{class:`mp-stat-label`},`Today`,-1),c(`span`,cn,n(N(F(w(i.id).usage).key.usageDaily)),1)]),c(`div`,ln,[d[4]||=c(`span`,{class:`mp-stat-label`},`This week`,-1),c(`span`,un,n(N(F(w(i.id).usage).key.usageWeekly)),1)]),c(`div`,dn,[d[5]||=c(`span`,{class:`mp-stat-label`},`This month`,-1),c(`span`,fn,n(N(F(w(i.id).usage).key.usageMonthly)),1)]),F(w(i.id).usage).key.rateLimit?.requests==null?E(``,!0):(f(),u(`div`,pn,[d[6]||=c(`span`,{class:`mp-stat-label`},`Rate limit`,-1),c(`span`,mn,n(F(w(i.id).usage).key.rateLimit.requests)+` req / `+n(F(w(i.id).usage).key.rateLimit.interval),1)]))])):E(``,!0),F(w(i.id).usage).keyError?(f(),u(`div`,hn,` Key usage unavailable: `+n(F(w(i.id).usage).keyError),1)):E(``,!0)])):I(w(i.id).usage)?(f(),u(`div`,gn,[I(w(i.id).usage).windows.length?(f(!0),u(T,{key:0},o(I(w(i.id).usage).windows,e=>(f(),u(`div`,{key:e.id,class:`mp-window`},[c(`div`,_n,[c(`span`,vn,n(e.label),1),c(`span`,yn,[t(n(e.usedPct==null?`—`:`${Math.round(e.usedPct)}% used`)+` `,1),e.usedUsd!=null&&e.limitUsd!=null?(f(),u(T,{key:0},[t(` · `+n(N(e.usedUsd))+` of `+n(N(e.limitUsd)),1)],64)):E(``,!0)])]),e.usedPct==null?E(``,!0):(f(),u(`div`,{key:0,class:`mp-bar`,role:`progressbar`,"aria-valuenow":Math.round(e.usedPct),"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-label":`${e.label} usage`},[c(`div`,{class:`mp-bar-fill`,style:r({width:`${Math.min(100,Math.max(0,e.usedPct))}%`})},null,4)],8,bn)),P(e.resetsAt)?(f(),u(`div`,xn,` resets `+n(P(e.resetsAt)),1)):E(``,!0)]))),128)):I(w(i.id).usage).unrecognized?(f(),u(`div`,Sn,[d[7]||=t(` Live usage responded, but in a format this build doesn't recognize — check the `,-1),c(`a`,{href:i.dashboardUrl,target:`_blank`,rel:`noopener noreferrer`},`console`,8,Cn),d[8]||=t(`. `,-1)])):(f(),u(`div`,wn,`No usage reported yet.`))])):E(``,!0),i.hasKey&&!b[i.id]?(f(),u(`div`,Tn,[s(L,{variant:`outline`,size:`sm`,disabled:w(i.id).loading,onClick:e=>k(i.id)},{default:y(()=>[t(n(w(i.id).loading?`Refreshing…`:`Refresh`),1)]),_:2},1032,[`disabled`,`onClick`]),s(L,{variant:`ghost`,size:`sm`,onClick:e=>b[i.id]=!0},{default:y(()=>[...d[9]||=[t(`Replace key`,-1)]]),_:1},8,[`onClick`]),s(L,{variant:`ghost`,size:`sm`,disabled:v[i.id],onClick:e=>M(i)},{default:y(()=>[...d[10]||=[t(` Clear `,-1)]]),_:1},8,[`disabled`,`onClick`])])):E(``,!0)],64))],64)):E(``,!0)]))),128))]))}}),[[`__scopeId`,`data-v-454cf721`]]),Dn={class:`agents-page`},On={class:`page-header`},kn={class:`page-desc`},An={key:0},jn={key:1,class:`save-msg err`},Mn={key:2,class:`save-msg ok`},Nn={key:0,class:`spin`},Pn={class:`agent-tabs`},Fn=[`onClick`],In={class:`agents-tab-content`},Ln={class:`agent-tab-panel`,style:{padding:`0 18px 6px`,"margin-bottom":`16px`}},Rn={class:`sec-label`,style:{"padding-top":`16px`,"margin-bottom":`4px`}},zn={class:`am-list-notice-text`},Bn=[`onClick`],Vn={class:`agent-tab-panel`,style:{padding:`0 18px 6px`,"margin-bottom":`16px`}},Hn={class:`agent-add`},Un={key:0,class:`agent-empty`},Wn={class:`agent-tab-panel`,style:{padding:`0 18px 6px`,"margin-bottom":`16px`}},Gn={key:0,class:`agent-tab-panel`,style:{padding:`0 18px 6px`,"margin-bottom":`16px`}},Kn={class:`sec-label`,style:{"padding-top":`16px`,"margin-bottom":`4px`}},qn={key:0,class:`detect-update-error`},Jn={key:1,class:`detect-cache-label`},Yn={key:2,class:`detect-cache-label`},Xn={key:3,class:`detect-loading`},Zn={key:4,class:`agent-empty`},Qn={class:`agent-name detect-agent-name`},$n={key:0,class:`agent-badge detect-deprecated`},er={key:1,class:`detect-ver detect-ver-inline`},tr={class:`detect-binary-item-name`},nr={class:`detect-binary-item-ver`},rr={class:`detect-binary-item-path`},ir={key:3,class:`detect-row-spinner`,title:`Probing…`},ar=[`aria-label`,`onClick`],or={key:5,class:`detect-update-detail`},sr={class:`detect-update-meta`},cr={key:0},lr={key:1},ur={key:2,class:`detect-update-reason`},dr=[`onClick`],fr={key:6,class:`detect-hint-inline`},pr=[`title`],mr=[`onClick`],hr={key:7,class:`detect-hint-inline`},gr=[`title`],_r=[`onClick`],vr={key:8,class:`detect-hint-inline`},yr=[`title`],br=[`onClick`],xr={key:9,class:`detect-migration-inline`},Sr=[`href`],Cr={key:1},wr=[`aria-pressed`,`aria-label`,`title`,`onClick`],Tr={key:0,class:`detect-compat-card`},Er={class:`detect-compat-card-explanation`},Dr={key:0,class:`detect-compat-probe-row`},Or={class:`detect-hint-code`},kr=[`onClick`],Ar={key:1,class:`detect-compat-card-hint`},jr={key:2,class:`detect-compat-card-hint`},Mr={class:`am-modal-head`},Nr={key:0,class:`agent-skill-modal-list`},Pr=[`checked`,`onChange`],Fr={key:0},Ir=`docs/agent-model-recommendations.md`,Lr=`docs/opencode-models.md`,Rr=b({__name:`AgentsView`,setup(a){let h=j(),g=v(),b=w(),C=ue(),k={default:`Default Agents`,custom:`Custom Agents`,team:`Build Your Team`,detected:`Detected Coding Agents`,playground:`Model Playground`,providers:`Model providers`},M=[`default`,`custom`,`team`,`detected`,`playground`,`providers`],N=S(`default`),P=S(!1),F=S(!1);m(N,e=>{e===`playground`&&(P.value=!0),e===`providers`&&(F.value=!0)});let I=()=>{let e=b.query.tab;return typeof e==`string`&&M.includes(e)?e:`default`};m(()=>b.query.tab,()=>{let e=I();e!==N.value&&(N.value=e)},{immediate:!0}),m(N,e=>{I()!==e&&g.replace({query:{...b.query,tab:e}})});function V(){C.loadDoc(Ir),g.push({name:`repo`})}function oe(){C.loadDoc(Lr),g.push({name:`repo`})}let H=S([]),U=S(``),W=S(null),he=!1,_e,be=!1,xe=!1;function Se(){he=!0,H.value=h.agents.map(e=>({...e})),he=!1}m(()=>h.loaded,e=>{e&&Se()},{immediate:!0});let Ce=O(()=>h.agentsMeta.defaults.map(e=>e.name.toLowerCase())),we=e=>Ce.value.includes(e.toLowerCase()),Te=[`ross`,`cto`],Ee=e=>Te.includes(e.toLowerCase()),De=O(()=>it(H.value.filter(e=>we(e.name)&&!Ee(e.name)))),Oe=O(()=>H.value.filter(e=>we(e.name)&&Ee(e.name))),ke=O(()=>H.value.filter(e=>!we(e.name))),Ae={"claude code":`Claude Code`,"github copilot":`GitHub Copilot CLI`,"qwen code":`qwen code`,codex:`codex`,antigravity:`Antigravity CLI (agy)`,crush:`Crush`},je=new Map,Me=new Map;function Ne(e,t){let n=je.get(e);n&&de(n,t)}function Pe(e,t){let n=Me.get(e);n&&de(n,t)}O(()=>h.agentsMeta.clis.map(e=>({value:e,label:Ae[e]??e})));let G=S({}),K=S({});h.modelsFor;let Fe=O(()=>h.modelsLoading),Ie=O(()=>h.agentsMeta.clis.map(e=>({cli:e,notice:h.modelNoticeFor(e)})).filter(e=>e.notice?.kind===`failed`));function Le(e){return`${e.name}\u0000${e.cli}\u0000${e.model}`}function Re(e){return G.value[Le(e)]}async function Be(e){let t=Le(e);if(K.value[t])return;K.value={...K.value,[t]:!0};let n=e.cli,r=e.model;try{let e=await A(`/api/models/test`,te(`POST`,{cli:n,model:r}));G.value={...G.value,[t]:e.result}}catch(e){G.value={...G.value,[t]:{cli:n,model:r,status:`failed`,durationMs:0,error:e instanceof Error?e.message:`Model compatibility test failed.`}}}finally{let e={...K.value};delete e[t],K.value=e}}let Ve=(e=!1)=>h.loadModels(e);function He(){let e=U.value.trim();if(e){if(H.value.some(t=>t.name.toLowerCase()===e.toLowerCase())){h.error=`An agent named "${e}" already exists.`;return}H.value.push({name:e,cli:h.agentsMeta.clis[0]??`opencode`,model:h.agentsMeta.models[1]??`big pickle`,enabled:!0,instructions:``}),U.value=``,h.error=``}}function Ue(e){H.value=H.value.filter(t=>t!==e)}function We(e,t){e.instructions=t.target.value}function Ge(e){let t=document.activeElement;t instanceof HTMLTextAreaElement&&t.value!==e.instructions&&(e.instructions=t.value)}function Ke(e,t,n){let r=new Set(e.skills??[]);n?r.add(t):r.delete(t),e.skills=[...r]}function qe(e){W.value=e}function Je(){let e=new Set;for(let t of H.value){let n=t.name.trim().toLowerCase();if(!n){h.error=`Every agent needs a name.`;return}if(e.has(n)){h.error=`Duplicate agent name "${t.name}".`;return}e.add(n)}return H.value.map(e=>({...e,name:e.name.trim()}))}async function Ye(){if(be){xe=!0;return}let e=Je();if(e){be=!0,xe=!1;try{await h.saveAgents(e)}catch{}finally{be=!1,xe&&Xe(0)}}}function Xe(e=450){clearTimeout(_e),_e=setTimeout(()=>void Ye(),e)}m(H,()=>{he||!h.loaded||(h.msg=``,h.error=``,be&&(xe=!0),Xe())},{deep:!0,flush:`sync`});let q=S([]),J=S(new Set),Y=S(!1),Ze=S(!1),X=S(null),Z=S(``),Qe=S(null),$e=S({});function et(e){Qe.value=Qe.value===e?null:e}function tt(e,t){$e.value={...$e.value,[e]:t}}function rt(e){let t=$e.value[e.id]??0,n=e.allBinaries?.[t];return n?{path:n.path,version:n.version}:{path:e.path,version:e.version}}function at(e){if(!e)return``;let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/6e4),r=Math.floor(t/36e5),i=Math.floor(t/864e5);return i>=1?`cached ${i}d ago`:r>=1?`cached ${r}h ago`:n>=1?`cached ${n}m ago`:`cached just now`}let ot=S(!1),st=S(!1),ct=S({}),lt=O(()=>new Set(q.value.filter(e=>e.installed&&e.drivable&&e.cli).map(e=>e.cli)));function ut(e,t={}){return(h.agentsMeta.clis??[]).filter(n=>n!==`antigravity`||n===e||!t.team&&lt.value.has(n))}let{isAgentFavorite:dt,toggleAgentFavorite:ft}=ce();function Q(e){return e.cli??e.id}let pt=O(()=>q.value.map(e=>e.installed?e.headless===!1?{agent:e,status:`desktop`,statusLabel:`desktop only`,color:`var(--amber)`,sortOrder:1}:e.auth===!1?{agent:e,status:`auth`,statusLabel:`sign-in required`,color:`var(--amber)`,sortOrder:1}:{agent:e,status:`ok`,statusLabel:`ready`,color:`var(--green)`,sortOrder:0}:{agent:e,status:`missing`,statusLabel:`not installed`,color:`var(--red)`,sortOrder:2}).sort((e,t)=>e.sortOrder-t.sortOrder)),$=null;async function mt(){Ze.value=!1,Z.value=``;try{let e=await A(`/api/agents/detect`);e.agents.length&&(q.value=e.agents,X.value=e.cachedAt)}catch{}$?.close();let e=new Set(q.value.map(e=>e.id));J.value=new Set(e.size?e:[`__loading__`]),Y.value=!0;let t=new EventSource(`/api/agents/detect/stream`);$=t,t.addEventListener(`agent`,e=>{try{let t=JSON.parse(e.data),n=q.value.findIndex(e=>e.id===t.id);n>=0?q.value=q.value.map((e,r)=>r===n?t:e):q.value=[...q.value,t];let r=new Set(J.value);r.delete(t.id),J.value=r}catch{}}),t.addEventListener(`done`,e=>{try{let{cachedAt:t}=JSON.parse(e.data);X.value=t}catch{}J.value=new Set,Y.value=!1,t.close(),$=null}),t.onerror=()=>{J.value=new Set,Y.value=!1,q.value.length||(Ze.value=!0),t.close(),$=null}}async function ht(){let e=Object.keys(ct.value).length>0;e&&await mt(),await gt(e)}async function gt(e=!1){ot.value=!0,st.value=!1;try{let t=await A(`/api/agents/updates`,te(`POST`,{refresh:e}));ct.value=t.updates,q.value=q.value.map(e=>({...e,update:t.updates[e.id]}))}catch{st.value=!0}finally{ot.value=!1}}function _t(e){return e?e.status===`up_to_date`?`Up to date`:e.status===`update_available`?`Update available: ${e.installedVersion} → ${e.latestVersion}`:e.status===`unavailable`?`Could not check`:`Check manually`:`Not checked`}function vt(e){return e?.status===`update_available`?`var(--amber)`:e?.status===`up_to_date`?`var(--green)`:e?.status===`unavailable`?`var(--red)`:`var(--txt-dim)`}function yt(e){let t=e.compatibility?.status;return t===`verified`?`var(--green)`:t===`unsupported`?`var(--red)`:t===`upgrade_recommended`||t===`newer_than_verified`?`var(--amber)`:`var(--txt-dim)`}function bt(e){return`repoos doctor --probe ${e.cli||e.binary} --yes`}function xt(e){let t=e.compatibility;return t?.contract?t.status===`not_probed`||t.status===`newer_than_verified`:!1}function St(e){let t=e.compatibility;if(!t)return``;let n=t.newestCertifiedVersion?`Newest certified: ${t.newestCertifiedVersion}.`:`No release is certified yet.`;return`${t.explanation} ${n}`}function Ct(e){let t=e.compatibility?.status;return t===`verified`?`✓`:t===`unsupported`?`!`:`?`}function wt(e){return e?.checkedAt?`checked ${new Date(e.checkedAt).toLocaleString()}`:``}function Tt(e){se(e),Z.value=e,setTimeout(()=>{Z.value===e&&(Z.value=``)},1500)}return d(()=>{mt(),Ve()}),i(()=>{clearTimeout(_e),$?.close(),$=null}),(i,a)=>(f(),u(`div`,Dn,[c(`header`,On,[c(`div`,null,[a[4]||=c(`div`,{class:`page-title agents-page-title`},`Agents`,-1),c(`div`,kn,[a[3]||=t(` The AI agents that work this repo `,-1),l(h).saving?(f(),u(`span`,An,` · Saving…`)):l(h).error?(f(),u(`span`,jn,` · `+n(l(h).error),1)):l(h).msg?(f(),u(`span`,Mn,` · Saved`)):E(``,!0)])]),c(`div`,{class:`page-header-actions`},[a[5]||=c(`a`,{class:`page-help-link`,href:`https://docs.repoos.org/agents`,target:`_blank`,rel:`noreferrer`},`Set up agents ↗`,-1),c(`button`,{class:`page-help-link`,onClick:V},` Model & agent guide → `),a[6]||=c(`a`,{class:`page-help-link`,href:`/settings?tab=toml`},`Advanced config`,-1)])]),l(h).loaded?(f(),u(T,{key:1},[c(`div`,Pn,[(f(),u(T,null,o(M,e=>c(`button`,{key:e,type:`button`,class:D([`tab-btn`,{active:N.value===e}]),onClick:t=>N.value=e},n(k[e]),11,Fn)),64))]),c(`div`,In,[p(c(`div`,Ln,[c(`div`,Rn,[a[7]||=c(`span`,{class:`live-dot`},null,-1),a[8]||=t(`Default agents `,-1),c(`button`,{class:`model-pricing-link`,onClick:oe},` Model pricing & use cases → `),s(L,{variant:`outline`,size:`sm`,style:{"margin-left":`auto`},disabled:Fe.value,title:`Re-probe every CLI's live model list (bypasses the cache)`,onClick:a[0]||=e=>Ve(!0)},{default:y(()=>[t(n(Fe.value?`Refreshing…`:`Refresh models`),1)]),_:1},8,[`disabled`])]),(f(!0),u(T,null,o(Ie.value,e=>(f(),u(`div`,{key:e.cli,class:`am-list-notice am-list-notice-failed agents-model-failure`,role:`status`,"data-testid":`agents-model-failure`},[c(`span`,zn,n(e.cli)+`: `+n(e.notice.text),1),c(`button`,{type:`button`,class:`am-list-notice-retry`,onClick:t=>l(h).refreshModelsForCli(e.cli)},` Retry `,8,Bn)]))),128)),a[9]||=c(`div`,{class:`agent-desc`},` Headless task-engine roles that run the roadmap. Toggle them on or off and pick their coding agent and model. `,-1),(f(!0),u(T,null,o(De.value,t=>(f(),e(ze,{key:t.name,agent:t,variant:`default`,"cli-options":ut(t.cli),"memory-key":`headless:`+t.name,"skills-available":l(h).agentsMeta.skills.length>0,testing:!!K.value[Le(t)],"test-result":Re(t),"register-instr-ref":e=>l(je).set(t.name,e),onTest:e=>Be(t),onOpenSkills:e=>qe(t),onInstrInput:e=>We(t,e),onInstrBlur:e=>Ge(t),onOpenRecommendations:V,onTranscribed:e=>Ne(t.name,e)},null,8,[`agent`,`cli-options`,`memory-key`,`skills-available`,`testing`,`test-result`,`register-instr-ref`,`onTest`,`onOpenSkills`,`onInstrInput`,`onInstrBlur`,`onTranscribed`]))),128))],512),[[x,N.value==="default"]]),p(c(`div`,Vn,[a[11]||=c(`div`,{class:`sec-label`,style:{"padding-top":`16px`,"margin-bottom":`4px`}},[c(`span`,{class:`live-dot`,style:{background:`var(--violet, var(--cyan))`}}),t(`Custom agents `)],-1),a[12]||=c(`div`,{class:`agent-desc`},` Your own roles — data analyst, refactor agent, anything you need. `,-1),c(`div`,Hn,[s(le,{modelValue:U.value,"onUpdate:modelValue":a[1]||=e=>U.value=e,placeholder:`e.g. data analyst`,class:`w-[220px]`,onKeyup:ee(He,[`enter`])},null,8,[`modelValue`]),s(L,{variant:`outline`,size:`sm`,disabled:!U.value.trim(),onClick:He},{default:y(()=>[...a[10]||=[t(` Add agent `,-1)]]),_:1},8,[`disabled`])]),ke.value.length?E(``,!0):(f(),u(`div`,Un,` No custom agents yet — add one above. `)),(f(!0),u(T,null,o(ke.value,t=>(f(),e(ze,{key:t.name,agent:t,variant:`custom`,"cli-options":ut(t.cli),"memory-key":`custom:`+t.name,"skills-available":l(h).agentsMeta.skills.length>0,testing:!!K.value[Le(t)],"test-result":Re(t),"register-instr-ref":e=>l(Me).set(t.name,e),onTest:e=>Be(t),onOpenSkills:e=>qe(t),onRemove:e=>Ue(t),onInstrInput:e=>We(t,e),onInstrBlur:e=>Ge(t),onOpenRecommendations:V,onTranscribed:e=>Pe(t.name,e)},null,8,[`agent`,`cli-options`,`memory-key`,`skills-available`,`testing`,`test-result`,`register-instr-ref`,`onTest`,`onOpenSkills`,`onRemove`,`onInstrInput`,`onInstrBlur`,`onTranscribed`]))),128))],512),[[x,N.value===`custom`]]),p(c(`div`,Wn,[a[13]||=c(`div`,{class:`sec-label`,style:{"padding-top":`16px`,"margin-bottom":`4px`}},[c(`span`,{class:`live-dot`,style:{background:`var(--green)`}}),t(`Build your team `)],-1),a[14]||=c(`div`,{class:`agent-desc`},` The agents that talk back or extend RepoOS. Enable them to add new capabilities. `,-1),(f(!0),u(T,null,o(Oe.value,t=>(f(),e(ze,{key:`team-`+t.name,agent:t,variant:`team`,"cli-options":ut(t.cli,{team:!0}),"memory-key":`team:`+t.name,"skills-available":l(h).agentsMeta.skills.length>0,testing:!!K.value[Le(t)],"test-result":Re(t),"register-instr-ref":e=>l(je).set(t.name,e),onTest:e=>Be(t),onOpenSkills:e=>qe(t),onInstrInput:e=>We(t,e),onInstrBlur:e=>Ge(t),onOpenRecommendations:V,onTranscribed:e=>Ne(t.name,e)},null,8,[`agent`,`cli-options`,`memory-key`,`skills-available`,`testing`,`test-result`,`register-instr-ref`,`onTest`,`onOpenSkills`,`onInstrInput`,`onInstrBlur`,`onTranscribed`]))),128)),s(nt,{agent:`debugger`,interactive:``}),s(nt,{agent:`tech-debt`}),s(nt,{agent:`performance`}),s(nt,{agent:`architect`}),s(nt,{agent:`design`}),s(nt,{agent:`docs-debt`})],512),[[x,N.value===`team`]]),Ze.value?E(``,!0):p((f(),u(`div`,Gn,[c(`div`,Kn,[a[15]||=c(`span`,{class:`live-dot`,style:{background:`var(--violet, var(--cyan))`}},null,-1),a[16]||=t(` Detected coding agents `,-1),s(L,{variant:`outline`,size:`sm`,class:`detect-updates-btn`,disabled:ot.value||Y.value,onClick:ht},{default:y(()=>[t(n(ot.value||Y.value?`Checking…`:Object.keys(ct.value).length>0?`Refresh update checks`:`Check for updates`),1)]),_:1},8,[`disabled`])]),a[17]||=c(`div`,{class:`agent-desc`},` What's on this machine's PATH — installed & headless-ready, desktop-only, or missing. Update checks contact only the supported public source after you request them; results are cached for 6 hours. `,-1),st.value?(f(),u(`div`,qn,` Update checks are temporarily unavailable. `)):E(``,!0),X.value&&Y.value?(f(),u(`div`,Jn,n(at(X.value))+` · scanning now… `,1)):X.value&&!Y.value?(f(),u(`div`,Yn,n(at(X.value)),1)):E(``,!0),Y.value&&!q.value.length?(f(),u(`div`,Xn,`Probing PATH…`)):q.value.length?(f(!0),u(T,{key:5},o(pt.value,i=>(f(),u(`div`,{key:i.agent.id,class:`detect-row-wrap`},[c(`div`,{class:D([`detect-row`,{"detect-row-pending":J.value.has(i.agent.id)}])},[c(`span`,{class:`detect-badge`,style:r({background:i.color,boxShadow:`0 0 8px `+i.color})},null,4),c(`span`,Qn,n(i.agent.name),1),c(`span`,{class:`detect-pill`,style:r({color:i.color})},n(i.statusLabel),5),c(`span`,{class:D([`agent-badge`,i.agent.drivable?`detect-driver-yes`:`detect-driver-no`])},n(i.agent.drivable?`RepoOS driver`:`detected only`),3),i.agent.deprecated?(f(),u(`span`,$n,`Deprecated`)):E(``,!0),rt(i.agent).version?(f(),u(`span`,er,n(rt(i.agent).version),1)):E(``,!0),i.agent.allBinaries&&i.agent.allBinaries.length>1?(f(),e(me,{key:2,"model-value":String($e.value[i.agent.id]??0),"onUpdate:modelValue":e=>tt(i.agent.id,Number(e))},{default:y(()=>[s(pe,{class:`detect-binary-select`,title:`${i.agent.allBinaries.length} copies found on PATH`},{default:y(()=>[s(fe)]),_:1},8,[`title`]),s(ge,{position:`popper`},{default:y(()=>[s(ye,{class:`detect-binary-viewport`},{default:y(()=>[(f(!0),u(T,null,o(i.agent.allBinaries,(t,r)=>(f(),e(ve,{key:t.path,value:String(r),"text-value":`${t.name} ${t.version??`?`}`,class:`detect-binary-item`},{default:y(()=>[c(`span`,tr,n(t.name),1),c(`span`,nr,n(t.version??`?`),1),c(`span`,rr,n(t.path),1)]),_:2},1032,[`value`,`text-value`]))),128))]),_:2},1024)]),_:2},1024)]),_:2},1032,[`model-value`,`onUpdate:modelValue`])):E(``,!0),J.value.has(i.agent.id)?(f(),u(`span`,ir)):E(``,!0),i.agent.compatibility?(f(),u(`button`,{key:4,type:`button`,class:D([`detect-compat-icon`,{active:Qe.value===i.agent.id}]),style:r({color:yt(i.agent)}),"aria-label":`Compatibility details for ${i.agent.name}`,onClick:_(e=>et(i.agent.id),[`stop`])},n(Ct(i.agent)),15,ar)):E(``,!0),i.agent.installed&&i.agent.update?(f(),u(`details`,or,[c(`summary`,{style:r({color:vt(i.agent.update)})},n(_t(i.agent.update)),5),c(`span`,sr,[i.agent.update.source?(f(),u(`span`,cr,n(i.agent.update.source),1)):E(``,!0),wt(i.agent.update)?(f(),u(`span`,lr,n(wt(i.agent.update)),1)):E(``,!0),i.agent.update.error?(f(),u(`span`,ur,n(i.agent.update.error),1)):E(``,!0),i.agent.update.updateCommand?(f(),u(`button`,{key:3,class:`detect-copy`,onClick:e=>Tt(i.agent.update.updateCommand)},n(Z.value===i.agent.update.updateCommand?`copied`:`copy update command`),9,dr)):E(``,!0)])])):E(``,!0),i.status===`auth`?(f(),u(`span`,fr,[c(`code`,{class:`detect-hint-code`,title:i.agent.authHint||`sign in with the CLI`},n(i.agent.authHint||`sign in with the CLI`),9,pr),i.agent.authHint?(f(),u(`button`,{key:0,class:`detect-copy`,onClick:e=>Tt(i.agent.authHint)},n(Z.value===i.agent.authHint?`copied`:`copy`),9,mr)):E(``,!0)])):i.status===`desktop`?(f(),u(`span`,hr,[c(`code`,{class:`detect-hint-code`,title:i.agent.installHint},n(i.agent.installHint),9,gr),c(`button`,{class:`detect-copy`,onClick:e=>Tt(i.agent.installHint)},n(Z.value===i.agent.installHint?`copied`:`copy`),9,_r)])):i.status===`missing`?(f(),u(`span`,vr,[c(`code`,{class:`detect-hint-code`,title:i.agent.installHint},n(i.agent.installHint),9,yr),c(`button`,{class:`detect-copy`,onClick:e=>Tt(i.agent.installHint)},n(Z.value===i.agent.installHint?`copied`:`copy`),9,br)])):E(``,!0),i.agent.deprecated?(f(),u(`span`,xr,[t(n(i.agent.installHint)+` `,1),i.agent.migrationUrl?(f(),u(`a`,{key:0,href:i.agent.migrationUrl,target:`_blank`,rel:`noopener noreferrer`},` Official migration and auth docs `,8,Sr)):E(``,!0),i.agent.migrationNote?(f(),u(`span`,Cr,n(i.agent.migrationNote),1)):E(``,!0)])):E(``,!0),c(`button`,{type:`button`,class:D([`detect-star-btn`,{on:l(dt)(Q(i.agent))}]),"aria-pressed":l(dt)(Q(i.agent)),"aria-label":l(dt)(Q(i.agent))?`Remove ${i.agent.name} from favorites`:`Add ${i.agent.name} to favorites`,title:l(dt)(Q(i.agent))?`Remove from favorites`:`Add to favorites`,onClick:e=>l(ft)(Q(i.agent))},[s(l(ne),{class:`size-3.5`,fill:l(dt)(Q(i.agent))?`currentColor`:`none`},null,8,[`fill`])],10,wr)],2),i.agent.compatibility&&Qe.value===i.agent.id?(f(),u(`div`,Tr,[c(`div`,{class:`detect-compat-card-label`,style:r({color:yt(i.agent)})},n(i.agent.compatibility.label),5),c(`div`,Er,n(St(i.agent)),1),xt(i.agent)?(f(),u(`div`,Dr,[c(`code`,Or,n(bt(i.agent)),1),c(`button`,{class:`detect-copy`,onClick:e=>Tt(bt(i.agent))},n(Z.value===bt(i.agent)?`copied`:`copy`),9,kr)])):i.agent.compatibility.status===`upgrade_recommended`?(f(),u(`div`,Ar,` upgrade recommended `)):i.agent.compatibility.status===`unsupported`?(f(),u(`div`,jr,` use a supported release `)):E(``,!0)])):E(``,!0)]))),128)):(f(),u(`div`,Zn,` No known coding agents detected on PATH. `))],512)),[[x,N.value===`detected`]]),P.value?p((f(),e(zt,{key:1,active:N.value===`playground`},null,8,[`active`])),[[x,N.value===`playground`]]):E(``,!0),F.value?p((f(),e(En,{key:2},null,512)),[[x,N.value===`providers`]]):E(``,!0)])],64)):(f(),u(`div`,Nn)),s(re,{open:!!W.value,"onUpdate:open":a[2]||=e=>{e||(W.value=null)}},{default:y(()=>[s(B),s(z,{class:`am-modal`},{default:y(()=>[c(`div`,Mr,[s(ae,null,{default:y(()=>[t(`Skills for `+n(W.value?.name),1)]),_:1}),s(R,{class:`close-x`},{default:y(()=>[...a[18]||=[t(`×`,-1)]]),_:1})]),s(ie,{class:`am-modal-desc`},{default:y(()=>[...a[19]||=[t(`Choose preferred candidates for this agent. RepoOS still selects only task-relevant skills on each run.`,-1)]]),_:1}),W.value?(f(),u(`div`,Nr,[(f(!0),u(T,null,o(l(h).agentsMeta.skills,e=>(f(),u(`label`,{key:e.path,class:`agent-skill-option`},[c(`input`,{type:`checkbox`,checked:(W.value.skills??[]).includes(e.name),onChange:t=>Ke(W.value,e.name,t.target.checked)},null,40,Pr),c(`span`,null,[c(`strong`,null,n(e.name),1),e.description?(f(),u(`small`,Fr,n(e.description),1)):E(``,!0)])]))),128))])):E(``,!0)]),_:1})]),_:1},8,[`open`])]))}});export{Rr as default};
@@ -1 +1 @@
1
- .test-run-panel[data-v-7730c68d]{background:var(--panel-gradient,linear-gradient(180deg, #0c1222, #080c16));border:1px solid var(--border);border-radius:12px;margin-bottom:16px;padding:16px}.test-run-panel--embedded[data-v-7730c68d]{border-radius:14px;margin-bottom:0}.panel-title[data-v-7730c68d]{text-transform:uppercase;letter-spacing:.06em;color:var(--txt-dim);font-size:12px;font-weight:600}.trp-head[data-v-7730c68d]{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.trp-status[data-v-7730c68d]{text-transform:uppercase;letter-spacing:.04em;border-radius:999px;padding:2px 8px;font-family:JetBrains Mono,ui-monospace,monospace;font-size:10.5px;font-weight:600}.trp-idle[data-v-7730c68d]{color:var(--txt-faint);background:var(--chip-bg)}.trp-running[data-v-7730c68d]{color:var(--cyan);background:var(--cyan-dim)}.trp-passed[data-v-7730c68d]{color:var(--green);background:var(--green-tint)}.trp-failed[data-v-7730c68d]{color:var(--red);background:var(--red-tint)}.trp-elapsed[data-v-7730c68d]{color:var(--txt-dim);font-variant-numeric:tabular-nums;font-family:JetBrains Mono,ui-monospace,monospace;font-size:12px}.trp-actions[data-v-7730c68d]{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-left:auto;display:flex}.trp-lead[data-v-7730c68d]{color:var(--txt-dim);max-width:62ch;margin:10px 0 0;font-size:12.5px;line-height:1.5}.trp-lead code[data-v-7730c68d]{color:var(--txt);font-family:JetBrains Mono,ui-monospace,monospace}.trp-run[data-v-7730c68d]{border:1px solid var(--cyan-dim);background:var(--cyan-dim);color:var(--cyan);cursor:pointer;border-radius:7px;padding:6px 12px;font-family:JetBrains Mono,ui-monospace,monospace;font-size:11px;font-weight:600}.trp-run[data-v-7730c68d]:hover:not(:disabled){filter:brightness(1.15)}.trp-run[data-v-7730c68d]:disabled{cursor:default;opacity:.6}.trp-run-remote[data-v-7730c68d]{border-color:var(--border-bright);background:var(--chip-bg);color:var(--txt)}.trp-body[data-v-7730c68d]{flex-direction:column;gap:10px;margin-top:12px;display:flex}.trp-progress[data-v-7730c68d]{color:var(--txt-dim);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:6px;font-size:12px;display:flex}.trp-bad-count[data-v-7730c68d]{color:var(--red);font-weight:600}.trp-failures[data-v-7730c68d]{border:1px solid var(--red-border-tint,#ff6b7d40);background:var(--red-tint);border-radius:8px;max-height:220px;padding:10px 12px;overflow-y:auto}.trp-failures-title[data-v-7730c68d]{color:var(--red);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px;font-size:11px;font-weight:700}.trp-failure[data-v-7730c68d]{border-top:1px solid #ff6b7d26;padding:5px 0;font-size:12px}.trp-failure[data-v-7730c68d]:first-child{border-top:none}.trp-failure-file[data-v-7730c68d]{color:var(--txt);font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600}.trp-failure-test[data-v-7730c68d]{color:var(--txt-dim);margin-top:1px}.trp-log[data-v-7730c68d]{background:var(--md-body-bg,#070a12);border:1px solid var(--border);color:var(--txt-dim);white-space:pre-wrap;word-break:break-word;border-radius:8px;max-height:320px;margin:0;padding:10px 12px;font-family:JetBrains Mono,ui-monospace,monospace;font-size:11px;line-height:1.5;overflow-y:auto}.trp-empty[data-v-7730c68d]{color:var(--txt-faint);margin-top:10px;font-size:12px}.cr-panel[data-v-c7d635c6]{flex-direction:column;gap:14px;display:flex}.cr-toolbar[data-v-c7d635c6]{align-items:center;gap:10px;display:flex}.cr-count[data-v-c7d635c6]{color:var(--txt-dim);font-size:12px}.cr-err[data-v-c7d635c6]{color:var(--red);font-size:13px}.cr-err code[data-v-c7d635c6],.cr-empty code[data-v-c7d635c6]{font-family:var(--mono)}.spin[data-v-c7d635c6]{animation:1s linear infinite cr-spin-c7d635c6}@keyframes cr-spin-c7d635c6{to{transform:rotate(360deg)}}.cr-machines[data-v-c7d635c6]{flex-wrap:wrap;gap:8px;display:flex}.cr-machine[data-v-c7d635c6]{border:1px solid var(--border);background:var(--panel-gradient);border-radius:10px;flex-direction:column;gap:2px;min-width:200px;padding:8px 12px;display:flex}.cr-machine-name[data-v-c7d635c6]{font-size:12.5px;font-weight:700}.cr-machine-facts[data-v-c7d635c6]{color:var(--txt-dim);font-size:11.5px}.cr-empty[data-v-c7d635c6]{color:var(--txt-dim);border:1px dashed var(--border);border-radius:12px;padding:18px;font-size:12.5px;line-height:1.6}.cr-table-wrap[data-v-c7d635c6]{border:1px solid var(--border);border-radius:12px;overflow-x:auto}.cr-table[data-v-c7d635c6]{border-collapse:collapse;width:100%;font-size:12px}.cr-table th[data-v-c7d635c6]{text-align:left;border-bottom:1px solid var(--border);color:var(--txt-dim);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;padding:8px 10px;font-size:11px}.cr-sort[data-v-c7d635c6]{color:inherit;font:inherit;text-transform:inherit;letter-spacing:inherit;cursor:pointer;background:0 0;border:none;padding:0}.cr-sort[data-v-c7d635c6]:hover{color:var(--txt)}.cr-arrow[data-v-c7d635c6]{color:var(--cyan);margin-left:3px}.cr-table td[data-v-c7d635c6]{border-bottom:1px solid var(--border);vertical-align:top;padding:7px 10px}.cr-table tbody tr:last-child td[data-v-c7d635c6]{border-bottom:none}.mono[data-v-c7d635c6]{font-family:var(--mono)}.cr-time[data-v-c7d635c6]{white-space:nowrap}.cr-ago[data-v-c7d635c6]{color:var(--txt-dim);margin-left:6px;font-size:11px}.cr-dim[data-v-c7d635c6]{color:var(--txt-dim)}.cr-remote[data-v-c7d635c6]{color:var(--cyan)}.cr-machine-cell[data-v-c7d635c6],.cr-scope[data-v-c7d635c6]{white-space:nowrap}.cr-skipped[data-v-c7d635c6]{color:var(--amber);margin-left:6px;font-size:11px}.cr-outcome span[data-v-c7d635c6]{white-space:nowrap}.cr-outcome[data-outcome=pass] span[data-v-c7d635c6]{color:var(--green)}.cr-outcome[data-outcome=cancelled] span[data-v-c7d635c6],.cr-outcome[data-outcome=skipped] span[data-v-c7d635c6]{color:var(--amber)}.cr-outcome[data-outcome=fail] span[data-v-c7d635c6]{color:var(--red)}.cr-failed-step[data-v-c7d635c6]{font-family:var(--mono);font-size:11px}.cr-col-dur[data-v-c7d635c6],.cr-dur[data-v-c7d635c6]{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.rr-panel[data-v-136a69cf]{flex-direction:column;gap:12px;display:flex}.rr-toolbar[data-v-136a69cf]{align-items:center;gap:10px;display:flex}.rr-note[data-v-136a69cf]{color:var(--txt-dim);font-size:11.5px}.rr-err[data-v-136a69cf]{color:var(--red);font-size:13px}.rr-empty[data-v-136a69cf]{color:var(--txt-dim);border:1px dashed var(--border);border-radius:12px;padding:18px;font-size:12.5px;line-height:1.6}.rr-empty a[data-v-136a69cf]{color:var(--cyan)}.spin[data-v-136a69cf]{animation:1s linear infinite rr-spin-136a69cf}@keyframes rr-spin-136a69cf{to{transform:rotate(360deg)}}.rr-host[data-v-136a69cf]{border:1px solid var(--border);background:var(--panel-gradient);border-radius:14px;flex-direction:column;gap:8px;padding:13px 15px;display:flex}.rr-host-head[data-v-136a69cf]{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.rr-host-name[data-v-136a69cf]{font-size:13px;font-weight:700}.mono[data-v-136a69cf]{font-family:var(--mono)}.rr-cap[data-v-136a69cf]{text-transform:uppercase;letter-spacing:.05em;border:1px solid var(--border);color:var(--txt-dim);border-radius:999px;padding:2px 7px;font-size:10.5px}.rr-health[data-v-136a69cf]{margin-left:4px;font-size:11.5px}.rr-health.ok[data-v-136a69cf]{color:var(--green)}.rr-health.bad[data-v-136a69cf]{color:var(--red)}.rr-health.idle[data-v-136a69cf]{color:var(--txt-dim)}.rr-limits[data-v-136a69cf]{color:var(--txt-dim);font-variant-numeric:tabular-nums;margin-left:auto;font-size:11.5px}.rr-detail[data-v-136a69cf]{color:var(--red);margin:0;font-size:12px;line-height:1.5}.rr-facts[data-v-136a69cf]{flex-wrap:wrap;gap:6px 24px;margin:0;font-size:12px;display:flex}.rr-facts>div[data-v-136a69cf]{gap:6px;display:flex}.rr-facts dt[data-v-136a69cf]{color:var(--txt-dim)}.rr-facts dd[data-v-136a69cf]{margin:0}.rr-active-run[data-v-136a69cf]{margin-right:10px}.rr-dim[data-v-136a69cf]{color:var(--txt-dim)}.rr-ok[data-v-136a69cf]{color:var(--green)}.rr-bad[data-v-136a69cf]{color:var(--red)}.rr-queue-note[data-v-136a69cf]{color:var(--amber);margin:0;font-size:12px}.ck-page[data-v-a9c7c563]{max-width:960px}.ck-tabs[data-v-a9c7c563]{margin-bottom:18px}.ck-test-suite[data-v-a9c7c563]{margin-top:4px}.ck-head[data-v-a9c7c563]{justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:20px;display:flex}.ck-actions[data-v-a9c7c563]{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:10px;display:flex}.ck-help-link[data-v-a9c7c563],.ck-fact-link[data-v-a9c7c563]{color:var(--cyan);font-size:12px;text-decoration:none}.ck-help-link[data-v-a9c7c563]:hover,.ck-fact-link[data-v-a9c7c563]:hover{text-decoration:underline}.ck-fact-link[data-v-a9c7c563]{font-weight:inherit}.ck-title[data-v-a9c7c563]{letter-spacing:-.02em;margin:0;font-size:22px;font-weight:800}.ck-sub[data-v-a9c7c563]{color:var(--txt-dim);max-width:62ch;margin:3px 0 0;font-size:13px;line-height:1.5}.ck-sub code[data-v-a9c7c563]{font-family:var(--mono);color:var(--txt)}.ck-loading[data-v-a9c7c563],.ck-err[data-v-a9c7c563]{color:var(--txt-dim);padding:12px 0;font-size:13px}.ck-err[data-v-a9c7c563]{color:var(--red)}.ck-err code[data-v-a9c7c563]{font-family:var(--mono)}.ck-controls[data-v-a9c7c563]{flex-wrap:wrap;gap:16px;margin-bottom:16px;display:flex}.ck-control[data-v-a9c7c563]{flex-direction:column;gap:6px;min-width:200px;display:flex}.ck-control-ref[data-v-a9c7c563]{flex:1}.ck-control-label[data-v-a9c7c563]{text-transform:uppercase;letter-spacing:.08em;color:var(--txt-dim);font-size:11px}.ck-select-trigger[data-v-a9c7c563]{width:200px}.ck-select-viewport[data-v-a9c7c563]{width:100%}.ck-ref-row[data-v-a9c7c563]{align-items:center;gap:8px;display:flex}.ck-input[data-v-a9c7c563]{border:1px solid var(--border);background:var(--panel-solid);min-width:160px;height:36px;color:var(--txt);font-family:var(--mono);border-radius:8px;flex:1;padding:0 10px;font-size:12px}.ck-input[data-v-a9c7c563]:focus-visible{border-color:var(--border-bright);outline:none}.ck-banner[data-v-a9c7c563]{border:1px solid var(--border);background:var(--panel-gradient);border-radius:14px;margin-bottom:16px;padding:14px 16px}.ck-banner-facts[data-v-a9c7c563]{flex-wrap:wrap;gap:8px 16px;display:flex}.ck-fact[data-v-a9c7c563]{color:var(--txt-dim);font-size:12.5px}.ck-fact strong[data-v-a9c7c563]{color:var(--txt)}.ck-fact-changed code[data-v-a9c7c563]{font-family:var(--mono);color:var(--txt)}.ck-fact[data-source=declared][data-v-a9c7c563]{color:var(--green)}.ck-fact[data-source=inferred][data-v-a9c7c563],.ck-fact[data-source=legacy][data-v-a9c7c563]{color:var(--amber)}.ck-fact[data-source=empty][data-v-a9c7c563]{color:var(--red)}.ck-warn[data-v-a9c7c563]{color:var(--amber);margin:10px 0 0;font-size:12.5px;line-height:1.5}.ck-error-line[data-v-a9c7c563]{color:var(--red);margin:10px 0 0;font-size:12.5px}.ck-lastrun[data-v-a9c7c563]{border:1px solid var(--border);background:var(--panel);border-radius:12px;margin-bottom:18px;padding:12px 16px}.ck-lastrun[data-passed=true][data-v-a9c7c563]{border-color:var(--green-border-tint);background:var(--green-tint)}.ck-lastrun[data-passed=false][data-v-a9c7c563]{border-color:var(--red-border-tint);background:var(--red-tint)}.ck-lastrun[data-outcome=skipped][data-v-a9c7c563]{border-color:var(--amber-border-tint);background:var(--amber-tint)}.ck-lastrun-empty[data-v-a9c7c563]{color:var(--txt-dim);font-size:12.5px}.ck-lastrun-empty code[data-v-a9c7c563]{font-family:var(--mono);color:var(--txt)}.ck-lastrun-head[data-v-a9c7c563]{flex-wrap:wrap;align-items:baseline;gap:6px 14px;display:flex}.ck-lastrun-title[data-v-a9c7c563]{font-size:13.5px;font-weight:700}.ck-lastrun-meta[data-v-a9c7c563]{color:var(--txt-dim);font-size:12px}.ck-lastrun-meta strong[data-v-a9c7c563]{color:var(--txt)}.ck-steps[data-v-a9c7c563]{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.ck-step[data-v-a9c7c563]{border:1px solid var(--border);background:var(--panel-gradient);border-radius:14px;gap:12px;padding:14px 16px 14px 12px;display:flex}.ck-step[data-selected=false][data-v-a9c7c563]{opacity:.62}.ck-step-rail[data-v-a9c7c563]{flex-direction:column;align-items:center;display:flex}.ck-step-num[data-v-a9c7c563]{border:1px solid var(--border-bright);width:24px;height:24px;color:var(--txt-dim);font-variant-numeric:tabular-nums;border-radius:999px;justify-content:center;align-items:center;font-size:11.5px;font-weight:700;display:flex}.ck-step-body[data-v-a9c7c563]{flex:1;min-width:0}.ck-step-top[data-v-a9c7c563]{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px;display:flex}.ck-step-name[data-v-a9c7c563]{font-size:14px;font-weight:700}.ck-badge[data-v-a9c7c563]{text-transform:uppercase;letter-spacing:.05em;border:1px solid var(--border);color:var(--txt-dim);border-radius:999px;padding:2px 7px;font-size:10.5px}.ck-badge-advisory[data-v-a9c7c563]{color:var(--amber);border-color:var(--amber-border-tint)}.ck-badge-cross[data-v-a9c7c563]{color:var(--cyan);border-color:var(--border-bright)}.ck-step-cmd[data-v-a9c7c563]{font-family:var(--mono);color:var(--txt);background:var(--panel-solid);border:1px solid var(--border);white-space:pre;border-radius:8px;padding:7px 10px;font-size:12px;display:block;overflow-x:auto}.ck-step-meta[data-v-a9c7c563]{flex-wrap:wrap;gap:6px 18px;margin:9px 0 0;font-size:12px;display:flex}.ck-step-meta>div[data-v-a9c7c563]{gap:6px;display:flex}.ck-step-meta dt[data-v-a9c7c563]{color:var(--txt-dim)}.ck-step-meta dd[data-v-a9c7c563]{color:var(--txt);margin:0}.ck-step-meta code[data-v-a9c7c563]{font-family:var(--mono)}.ck-step-meta dd[data-status=passed][data-v-a9c7c563]{color:var(--green)}.ck-step-meta dd[data-status=failed][data-v-a9c7c563],.ck-step-meta dd[data-status=timeout][data-v-a9c7c563],.ck-step-meta dd[data-status=missing-prereq][data-v-a9c7c563]{color:var(--red)}.ck-missing[data-v-a9c7c563]{border:1px solid var(--red-border-tint);background:var(--red-tint);border-radius:10px;flex-direction:column;gap:6px;margin-top:10px;padding:9px 11px;display:flex}.ck-missing-row[data-v-a9c7c563]{flex-direction:column;font-size:12px;line-height:1.45;display:flex}.ck-missing-row strong[data-v-a9c7c563]{color:var(--red)}.ck-missing-row span[data-v-a9c7c563]{color:var(--txt-dim)}.ck-skip[data-v-a9c7c563],.ck-willrun[data-v-a9c7c563]{margin:9px 0 0;font-size:12px;line-height:1.5}.ck-willrun[data-v-a9c7c563]{color:var(--green)}.ck-skip[data-v-a9c7c563]{color:var(--txt-dim)}.ck-skip-tag[data-v-a9c7c563]{color:var(--amber);margin-right:6px}.ck-output-toggle[data-v-a9c7c563]{color:var(--cyan);cursor:pointer;background:0 0;border:none;margin-top:8px;padding:0;font-size:12px}.ck-output[data-v-a9c7c563]{background:var(--panel-solid);border:1px solid var(--border);max-height:320px;font-family:var(--mono);white-space:pre-wrap;word-break:break-word;border-radius:10px;margin:8px 0 0;padding:10px 12px;font-size:11.5px;line-height:1.5;overflow:auto}
1
+ .test-run-panel[data-v-7730c68d]{background:var(--panel-gradient,linear-gradient(180deg, #0c1222, #080c16));border:1px solid var(--border);border-radius:12px;margin-bottom:16px;padding:16px}.test-run-panel--embedded[data-v-7730c68d]{border-radius:14px;margin-bottom:0}.panel-title[data-v-7730c68d]{text-transform:uppercase;letter-spacing:.06em;color:var(--txt-dim);font-size:12px;font-weight:600}.trp-head[data-v-7730c68d]{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.trp-status[data-v-7730c68d]{text-transform:uppercase;letter-spacing:.04em;border-radius:999px;padding:2px 8px;font-family:JetBrains Mono,ui-monospace,monospace;font-size:10.5px;font-weight:600}.trp-idle[data-v-7730c68d]{color:var(--txt-faint);background:var(--chip-bg)}.trp-running[data-v-7730c68d]{color:var(--cyan);background:var(--cyan-dim)}.trp-passed[data-v-7730c68d]{color:var(--green);background:var(--green-tint)}.trp-failed[data-v-7730c68d]{color:var(--red);background:var(--red-tint)}.trp-elapsed[data-v-7730c68d]{color:var(--txt-dim);font-variant-numeric:tabular-nums;font-family:JetBrains Mono,ui-monospace,monospace;font-size:12px}.trp-actions[data-v-7730c68d]{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-left:auto;display:flex}.trp-lead[data-v-7730c68d]{color:var(--txt-dim);max-width:62ch;margin:10px 0 0;font-size:12.5px;line-height:1.5}.trp-lead code[data-v-7730c68d]{color:var(--txt);font-family:JetBrains Mono,ui-monospace,monospace}.trp-run[data-v-7730c68d]{border:1px solid var(--cyan-dim);background:var(--cyan-dim);color:var(--cyan);cursor:pointer;border-radius:7px;padding:6px 12px;font-family:JetBrains Mono,ui-monospace,monospace;font-size:11px;font-weight:600}.trp-run[data-v-7730c68d]:hover:not(:disabled){filter:brightness(1.15)}.trp-run[data-v-7730c68d]:disabled{cursor:default;opacity:.6}.trp-run-remote[data-v-7730c68d]{border-color:var(--border-bright);background:var(--chip-bg);color:var(--txt)}.trp-body[data-v-7730c68d]{flex-direction:column;gap:10px;margin-top:12px;display:flex}.trp-progress[data-v-7730c68d]{color:var(--txt-dim);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:6px;font-size:12px;display:flex}.trp-bad-count[data-v-7730c68d]{color:var(--red);font-weight:600}.trp-failures[data-v-7730c68d]{border:1px solid var(--red-border-tint,#ff6b7d40);background:var(--red-tint);border-radius:8px;max-height:220px;padding:10px 12px;overflow-y:auto}.trp-failures-title[data-v-7730c68d]{color:var(--red);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px;font-size:11px;font-weight:700}.trp-failure[data-v-7730c68d]{border-top:1px solid #ff6b7d26;padding:5px 0;font-size:12px}.trp-failure[data-v-7730c68d]:first-child{border-top:none}.trp-failure-file[data-v-7730c68d]{color:var(--txt);font-family:JetBrains Mono,ui-monospace,monospace;font-weight:600}.trp-failure-test[data-v-7730c68d]{color:var(--txt-dim);margin-top:1px}.trp-log[data-v-7730c68d]{background:var(--md-body-bg,#070a12);border:1px solid var(--border);color:var(--txt-dim);white-space:pre-wrap;word-break:break-word;border-radius:8px;max-height:320px;margin:0;padding:10px 12px;font-family:JetBrains Mono,ui-monospace,monospace;font-size:11px;line-height:1.5;overflow-y:auto}.trp-empty[data-v-7730c68d]{color:var(--txt-faint);margin-top:10px;font-size:12px}.cr-panel[data-v-c7d635c6]{flex-direction:column;gap:14px;display:flex}.cr-toolbar[data-v-c7d635c6]{align-items:center;gap:10px;display:flex}.cr-count[data-v-c7d635c6]{color:var(--txt-dim);font-size:12px}.cr-err[data-v-c7d635c6]{color:var(--red);font-size:13px}.cr-err code[data-v-c7d635c6],.cr-empty code[data-v-c7d635c6]{font-family:var(--mono)}.spin[data-v-c7d635c6]{animation:1s linear infinite cr-spin-c7d635c6}@keyframes cr-spin-c7d635c6{to{transform:rotate(360deg)}}.cr-machines[data-v-c7d635c6]{flex-wrap:wrap;gap:8px;display:flex}.cr-machine[data-v-c7d635c6]{border:1px solid var(--border);background:var(--panel-gradient);border-radius:10px;flex-direction:column;gap:2px;min-width:200px;padding:8px 12px;display:flex}.cr-machine-name[data-v-c7d635c6]{font-size:12.5px;font-weight:700}.cr-machine-facts[data-v-c7d635c6]{color:var(--txt-dim);font-size:11.5px}.cr-empty[data-v-c7d635c6]{color:var(--txt-dim);border:1px dashed var(--border);border-radius:12px;padding:18px;font-size:12.5px;line-height:1.6}.cr-table-wrap[data-v-c7d635c6]{border:1px solid var(--border);border-radius:12px;overflow-x:auto}.cr-table[data-v-c7d635c6]{border-collapse:collapse;width:100%;font-size:12px}.cr-table th[data-v-c7d635c6]{text-align:left;border-bottom:1px solid var(--border);color:var(--txt-dim);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;padding:8px 10px;font-size:11px}.cr-sort[data-v-c7d635c6]{color:inherit;font:inherit;text-transform:inherit;letter-spacing:inherit;cursor:pointer;background:0 0;border:none;padding:0}.cr-sort[data-v-c7d635c6]:hover{color:var(--txt)}.cr-arrow[data-v-c7d635c6]{color:var(--cyan);margin-left:3px}.cr-table td[data-v-c7d635c6]{border-bottom:1px solid var(--border);vertical-align:top;padding:7px 10px}.cr-table tbody tr:last-child td[data-v-c7d635c6]{border-bottom:none}.mono[data-v-c7d635c6]{font-family:var(--mono)}.cr-time[data-v-c7d635c6]{white-space:nowrap}.cr-ago[data-v-c7d635c6]{color:var(--txt-dim);margin-left:6px;font-size:11px}.cr-dim[data-v-c7d635c6]{color:var(--txt-dim)}.cr-remote[data-v-c7d635c6]{color:var(--cyan)}.cr-machine-cell[data-v-c7d635c6],.cr-scope[data-v-c7d635c6]{white-space:nowrap}.cr-skipped[data-v-c7d635c6]{color:var(--amber);margin-left:6px;font-size:11px}.cr-outcome span[data-v-c7d635c6]{white-space:nowrap}.cr-outcome[data-outcome=pass] span[data-v-c7d635c6]{color:var(--green)}.cr-outcome[data-outcome=cancelled] span[data-v-c7d635c6],.cr-outcome[data-outcome=skipped] span[data-v-c7d635c6]{color:var(--amber)}.cr-outcome[data-outcome=fail] span[data-v-c7d635c6]{color:var(--red)}.cr-failed-step[data-v-c7d635c6]{font-family:var(--mono);font-size:11px}.cr-col-dur[data-v-c7d635c6],.cr-dur[data-v-c7d635c6]{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.rr-panel[data-v-136a69cf]{flex-direction:column;gap:12px;display:flex}.rr-toolbar[data-v-136a69cf]{align-items:center;gap:10px;display:flex}.rr-note[data-v-136a69cf]{color:var(--txt-dim);font-size:11.5px}.rr-err[data-v-136a69cf]{color:var(--red);font-size:13px}.rr-empty[data-v-136a69cf]{color:var(--txt-dim);border:1px dashed var(--border);border-radius:12px;padding:18px;font-size:12.5px;line-height:1.6}.rr-empty a[data-v-136a69cf]{color:var(--cyan)}.spin[data-v-136a69cf]{animation:1s linear infinite rr-spin-136a69cf}@keyframes rr-spin-136a69cf{to{transform:rotate(360deg)}}.rr-host[data-v-136a69cf]{border:1px solid var(--border);background:var(--panel-gradient);border-radius:14px;flex-direction:column;gap:8px;padding:13px 15px;display:flex}.rr-host-head[data-v-136a69cf]{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.rr-host-name[data-v-136a69cf]{font-size:13px;font-weight:700}.mono[data-v-136a69cf]{font-family:var(--mono)}.rr-cap[data-v-136a69cf]{text-transform:uppercase;letter-spacing:.05em;border:1px solid var(--border);color:var(--txt-dim);border-radius:999px;padding:2px 7px;font-size:10.5px}.rr-health[data-v-136a69cf]{margin-left:4px;font-size:11.5px}.rr-health.ok[data-v-136a69cf]{color:var(--green)}.rr-health.bad[data-v-136a69cf]{color:var(--red)}.rr-health.idle[data-v-136a69cf]{color:var(--txt-dim)}.rr-limits[data-v-136a69cf]{color:var(--txt-dim);font-variant-numeric:tabular-nums;margin-left:auto;font-size:11.5px}.rr-detail[data-v-136a69cf]{color:var(--red);margin:0;font-size:12px;line-height:1.5}.rr-facts[data-v-136a69cf]{flex-wrap:wrap;gap:6px 24px;margin:0;font-size:12px;display:flex}.rr-facts>div[data-v-136a69cf]{gap:6px;display:flex}.rr-facts dt[data-v-136a69cf]{color:var(--txt-dim)}.rr-facts dd[data-v-136a69cf]{margin:0}.rr-active-run[data-v-136a69cf]{margin-right:10px}.rr-dim[data-v-136a69cf]{color:var(--txt-dim)}.rr-ok[data-v-136a69cf]{color:var(--green)}.rr-bad[data-v-136a69cf]{color:var(--red)}.rr-queue-note[data-v-136a69cf]{color:var(--amber);margin:0;font-size:12px}.ck-tabs[data-v-af166df5]{margin-bottom:18px}.ck-test-suite[data-v-af166df5]{margin-top:4px}.ck-head[data-v-af166df5]{justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:20px;display:flex}.ck-actions[data-v-af166df5]{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:10px;display:flex}.ck-help-link[data-v-af166df5],.ck-fact-link[data-v-af166df5]{color:var(--cyan);font-size:12px;text-decoration:none}.ck-help-link[data-v-af166df5]:hover,.ck-fact-link[data-v-af166df5]:hover{text-decoration:underline}.ck-fact-link[data-v-af166df5]{font-weight:inherit}.ck-title[data-v-af166df5]{letter-spacing:-.02em;margin:0;font-size:22px;font-weight:800}.ck-sub[data-v-af166df5]{color:var(--txt-dim);max-width:62ch;margin:3px 0 0;font-size:13px;line-height:1.5}.ck-sub code[data-v-af166df5]{font-family:var(--mono);color:var(--txt)}.ck-loading[data-v-af166df5],.ck-err[data-v-af166df5]{color:var(--txt-dim);padding:12px 0;font-size:13px}.ck-err[data-v-af166df5]{color:var(--red)}.ck-err code[data-v-af166df5]{font-family:var(--mono)}.ck-controls[data-v-af166df5]{flex-wrap:wrap;gap:16px;margin-bottom:16px;display:flex}.ck-control[data-v-af166df5]{flex-direction:column;gap:6px;min-width:200px;display:flex}.ck-control-ref[data-v-af166df5]{flex:1}.ck-control-label[data-v-af166df5]{text-transform:uppercase;letter-spacing:.08em;color:var(--txt-dim);font-size:11px}.ck-select-trigger[data-v-af166df5]{width:200px}.ck-select-viewport[data-v-af166df5]{width:100%}.ck-ref-row[data-v-af166df5]{align-items:center;gap:8px;display:flex}.ck-input[data-v-af166df5]{border:1px solid var(--border);background:var(--panel-solid);min-width:160px;height:36px;color:var(--txt);font-family:var(--mono);border-radius:8px;flex:1;padding:0 10px;font-size:12px}.ck-input[data-v-af166df5]:focus-visible{border-color:var(--border-bright);outline:none}.ck-banner[data-v-af166df5]{border:1px solid var(--border);background:var(--panel-gradient);border-radius:14px;margin-bottom:16px;padding:14px 16px}.ck-banner-facts[data-v-af166df5]{flex-wrap:wrap;gap:8px 16px;display:flex}.ck-fact[data-v-af166df5]{color:var(--txt-dim);font-size:12.5px}.ck-fact strong[data-v-af166df5]{color:var(--txt)}.ck-fact-changed code[data-v-af166df5]{font-family:var(--mono);color:var(--txt)}.ck-fact[data-source=declared][data-v-af166df5]{color:var(--green)}.ck-fact[data-source=inferred][data-v-af166df5],.ck-fact[data-source=legacy][data-v-af166df5]{color:var(--amber)}.ck-fact[data-source=empty][data-v-af166df5]{color:var(--red)}.ck-warn[data-v-af166df5]{color:var(--amber);margin:10px 0 0;font-size:12.5px;line-height:1.5}.ck-error-line[data-v-af166df5]{color:var(--red);margin:10px 0 0;font-size:12.5px}.ck-lastrun[data-v-af166df5]{border:1px solid var(--border);background:var(--panel);border-radius:12px;margin-bottom:18px;padding:12px 16px}.ck-lastrun[data-passed=true][data-v-af166df5]{border-color:var(--green-border-tint);background:var(--green-tint)}.ck-lastrun[data-passed=false][data-v-af166df5]{border-color:var(--red-border-tint);background:var(--red-tint)}.ck-lastrun[data-outcome=skipped][data-v-af166df5]{border-color:var(--amber-border-tint);background:var(--amber-tint)}.ck-lastrun-empty[data-v-af166df5]{color:var(--txt-dim);font-size:12.5px}.ck-lastrun-empty code[data-v-af166df5]{font-family:var(--mono);color:var(--txt)}.ck-lastrun-head[data-v-af166df5]{flex-wrap:wrap;align-items:baseline;gap:6px 14px;display:flex}.ck-lastrun-title[data-v-af166df5]{font-size:13.5px;font-weight:700}.ck-lastrun-meta[data-v-af166df5]{color:var(--txt-dim);font-size:12px}.ck-lastrun-meta strong[data-v-af166df5]{color:var(--txt)}.ck-steps[data-v-af166df5]{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.ck-step[data-v-af166df5]{border:1px solid var(--border);background:var(--panel-gradient);border-radius:14px;gap:12px;padding:14px 16px 14px 12px;display:flex}.ck-step[data-selected=false][data-v-af166df5]{opacity:.62}.ck-step-rail[data-v-af166df5]{flex-direction:column;align-items:center;display:flex}.ck-step-num[data-v-af166df5]{border:1px solid var(--border-bright);width:24px;height:24px;color:var(--txt-dim);font-variant-numeric:tabular-nums;border-radius:999px;justify-content:center;align-items:center;font-size:11.5px;font-weight:700;display:flex}.ck-step-body[data-v-af166df5]{flex:1;min-width:0}.ck-step-top[data-v-af166df5]{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px;display:flex}.ck-step-name[data-v-af166df5]{font-size:14px;font-weight:700}.ck-badge[data-v-af166df5]{text-transform:uppercase;letter-spacing:.05em;border:1px solid var(--border);color:var(--txt-dim);border-radius:999px;padding:2px 7px;font-size:10.5px}.ck-badge-advisory[data-v-af166df5]{color:var(--amber);border-color:var(--amber-border-tint)}.ck-badge-cross[data-v-af166df5]{color:var(--cyan);border-color:var(--border-bright)}.ck-step-cmd[data-v-af166df5]{font-family:var(--mono);color:var(--txt);background:var(--panel-solid);border:1px solid var(--border);white-space:pre;border-radius:8px;padding:7px 10px;font-size:12px;display:block;overflow-x:auto}.ck-step-meta[data-v-af166df5]{flex-wrap:wrap;gap:6px 18px;margin:9px 0 0;font-size:12px;display:flex}.ck-step-meta>div[data-v-af166df5]{gap:6px;display:flex}.ck-step-meta dt[data-v-af166df5]{color:var(--txt-dim)}.ck-step-meta dd[data-v-af166df5]{color:var(--txt);margin:0}.ck-step-meta code[data-v-af166df5]{font-family:var(--mono)}.ck-step-meta dd[data-status=passed][data-v-af166df5]{color:var(--green)}.ck-step-meta dd[data-status=failed][data-v-af166df5],.ck-step-meta dd[data-status=timeout][data-v-af166df5],.ck-step-meta dd[data-status=missing-prereq][data-v-af166df5]{color:var(--red)}.ck-missing[data-v-af166df5]{border:1px solid var(--red-border-tint);background:var(--red-tint);border-radius:10px;flex-direction:column;gap:6px;margin-top:10px;padding:9px 11px;display:flex}.ck-missing-row[data-v-af166df5]{flex-direction:column;font-size:12px;line-height:1.45;display:flex}.ck-missing-row strong[data-v-af166df5]{color:var(--red)}.ck-missing-row span[data-v-af166df5]{color:var(--txt-dim)}.ck-skip[data-v-af166df5],.ck-willrun[data-v-af166df5]{margin:9px 0 0;font-size:12px;line-height:1.5}.ck-willrun[data-v-af166df5]{color:var(--green)}.ck-skip[data-v-af166df5]{color:var(--txt-dim)}.ck-skip-tag[data-v-af166df5]{color:var(--amber);margin-right:6px}.ck-output-toggle[data-v-af166df5]{color:var(--cyan);cursor:pointer;background:0 0;border:none;margin-top:8px;padding:0;font-size:12px}.ck-output[data-v-af166df5]{background:var(--panel-solid);border:1px solid var(--border);max-height:320px;font-family:var(--mono);white-space:pre-wrap;word-break:break-word;border-radius:10px;margin:8px 0 0;padding:10px 12px;font-size:11.5px;line-height:1.5;overflow:auto}
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-CG0WgtUh.js","assets/index-DGwt0YaQ.js","assets/vendor-vue-0d2wfih_.js","assets/api-BXg3t-A6.js","assets/repo-CrA_4-Ii.js","assets/config-BpusGwRJ.js","assets/vendor-ui-BbK4TVl8.js","assets/_plugin-vue_export-helper-BDNMzG2s.js","assets/time-CwKjNEcq.js","assets/button-BsLUWnfn.js","assets/title-CmTcwJQC.js","assets/VoiceDictate-C0-jNbo1.js","assets/VoiceDictate-Bc00yWSj.css","assets/check-setup-Bfqp1ySB.js","assets/ActivityIndicator-BNDj8i9m.js","assets/useChatScroll-BD10j3cq.js","assets/clipboard-CkhTprDX.js","assets/AgentModelModal-CFdPv_af.js","assets/index-B_NqhhGa.css","assets/chunk-Y2CYZVJY-DsF7k-Jl.js","assets/src-B6xuSHsQ.js","assets/rolldown-runtime-hePW80VL.js","assets/chunk-DU6HZSFF-BlxKgrXx.js","assets/chunk-75Z2AOVW-CCrPEBxq.js","assets/dist-v5Q1xZ2K.js","assets/chunk-PWAF6VOD-DSYNRc8Y.js","assets/chunk-GMAD6QVW-BcsnrHyI.js","assets/chunk-P2QGCYS3-CqI6JQdG.js","assets/chunk-4HAMMTFA-BcVHsIg0.js","assets/rough.esm-By172zw-.js","assets/chunk-GVQU2GXP-DsWHJ94f.js","assets/chunk-OSK3NFVY-iY9KK7zg.js","assets/line-RJPM2c8D.js","assets/path-COt_16Va.js","assets/array-BifhSqXX.js","assets/graphlib-DS17s2tU.js","assets/chunk-L3NEJ4N5-CB-GwFZo.js"])))=>i.map(i=>d[i]);
2
- import{C as e,D as t,Dt as n,Et as r,H as i,J as a,K as o,L as s,O as c,S as l,St as u,T as d,V as f,W as p,at as ee,d as m,et as h,ft as g,g as te,h as _,i as v,it as y,k as b,mt as x,p as S,r as ne,s as C,v as w,w as T,wt as E,x as D}from"./vendor-vue-0d2wfih_.js";import{a as O,n as k,r as A}from"./api-BXg3t-A6.js";import{d as j,x as re}from"./repo-CrA_4-Ii.js";import{r as M}from"./config-BpusGwRJ.js";import{C as N,I as P,et as F,ht as I,pt as L}from"./vendor-ui-BbK4TVl8.js";import{t as R}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{r as z}from"./time-CwKjNEcq.js";import{t as B}from"./button-BsLUWnfn.js";import{a as V,i as ie,n as ae,o as oe,r as se,t as H}from"./title-CmTcwJQC.js";import{o as U,t as W}from"./VoiceDictate-C0-jNbo1.js";import{t as G}from"./ActivityIndicator-BNDj8i9m.js";import{A as K,B as ce,K as le,L as q,R as J,T as Y,V as X,d as Z,f as ue,h as de,l as fe,m as pe,p as me,t as he,u as Q,v as ge,z as _e}from"./index-DGwt0YaQ.js";import{t as ve}from"./checkbox-Bu0fOTRa.js";var ye=null;function be(){let e=document.documentElement.getAttribute(`data-theme`);return e===`dark`?`dark`:e===`light`?`default`:window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`default`}async function xe(){return ye||=he(async()=>{let{default:e}=await import(`./mermaid.core-CG0WgtUh.js`);return{default:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36])).then(({default:e})=>(e.initialize({startOnLoad:!1,securityLevel:`strict`,maxTextSize:5e4,maxEdges:1e3,theme:be()}),e)),ye}async function $(e){let t=e.querySelectorAll(`.md-mermaid:not([data-processed])`);if(t.length)try{await(await xe()).run({nodes:t,suppressErrors:!0})}catch{}}function Se(e){let t={};for(let n of e){if(!n.path)continue;let e=n.path.split(`/`),r=t;for(let t=0;t<e.length;t++){let i=e[t],a=t===e.length-1,o=e.slice(0,t+1).join(`/`);r[i]||(r[i]={name:i,key:o,isFile:a,path:a?n.path:void 0,children:{}}),a||(r=r[i].children)}}let n=e=>Object.values(e).sort((e,t)=>e.isFile===t.isFile?e.name.localeCompare(t.name):e.isFile?1:-1).map(e=>{let t={name:e.name,key:e.key,isFile:e.isFile,path:e.path},r=n(e.children);return r.length&&(t.children=r),t});return n(t)}function Ce(e,t){let n=[],r=(e,i)=>{for(let a of e)n.push({key:a.key,name:a.name,isFile:a.isFile,path:a.path,depth:i}),!a.isFile&&a.children&&t.has(a.key)&&r(a.children,i+1)};return r(e,0),n}var we={class:`drawer-head`},Te={class:`drawer-head-title`},Ee={class:`drawer-tabs`},De={class:`drawer-body`},Oe={class:`field`},ke={class:`field-header`},Ae={class:`ff-agent-bar`},je={class:`agent-pick-grid`},Me={class:`agent-field`},Ne={class:`agent-field`,style:{"grid-column":`1 / -1`}},Pe={key:0,class:`ff-notice`},Fe={key:1,class:`ff-error`},Ie={class:`btn-row`,style:{"margin-top":`20px`}},Le={key:2,class:`ff-stream`},Re={class:`ff-stream-head`},ze={class:`field`},Be={class:`field`},Ve={class:`field-header`},He={class:`btn-row`,style:{"margin-top":`20px`}},Ue={class:`field`},We={class:`field`},Ge={key:0,class:`upload-file-info`},Ke={key:0,class:`upload-dest`},qe={key:0,class:`ff-error`},Je={class:`btn-row`,style:{"margin-top":`20px`}},Ye=R(b({__name:`NewDocPanel`,setup(i){let f=re(),m=j(),v=M(),b=le(),ne=D(()=>f.isNewDoc);function C(e){e||f.close()}function O(e){f.isNewDoc&&(e.preventDefault(),requestAnimationFrame(()=>{let e;e=k.value===`freeform`?`nd-freeform`:k.value===`upload`?`nd-upload-path`:`nd-path`,document.getElementById(e)?.focus()}))}let k=x(`freeform`),A=x(``),P=x(``),F=x(!1),I=x(null),L=x(null),R=x(``),z=x(``),U=D(()=>{let e=R.value.trim();return e?/\/\s*$/.test(e)&&L.value?e.replace(/\s*$/,``)+L.value.name:e:``}),ce=D(()=>!v.loaded||(v.agents??[]).some(e=>e.name===`pm`&&e.enabled));h(()=>f.isNewDoc,e=>{e&&(k.value=v.form.defaultTaskMode===`manual`?`manual`:`freeform`,A.value=``,P.value=``,L.value=null,R.value=``,z.value=``,Se())});async function J(){let e=A.value.trim();if(e){f.saving=!0,F.value=!0,P.value=``,I.value&&m.clearOutput(I.value),I.value=q();try{let t=Ce.value?{agent:$.agent,cli:$.cli,model:$.model}:void 0,n=await m.createFreeformDocument(e,I.value,t);f.close(),A.value=``,await m.refresh(),n.path&&(await b.syncDocAfterCreate(n.path),await b.loadDoc(n.path))}catch(e){P.value=e instanceof Error?e.message:String(e)}finally{F.value=!1,I.value=null,f.saving=!1}}}async function X(){if(!(!f.nd.path||!f.nd.content)){f.saving=!0;try{let e=f.nd.path;await m.createDocument({path:e,content:f.nd.content}),f.close(),f.nd.path=``,f.nd.content=``,await m.refresh(),await b.syncDocAfterCreate(e),await b.loadDoc(e)}catch(e){m.onError(e)}finally{f.saving=!1}}}function he(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result).split(`,`)[1]??``),r.onerror=()=>n(r.error??Error(`could not read file`)),r.readAsDataURL(e)})}async function ge(){if(!(!L.value||!R.value.trim())){f.saving=!0,z.value=``;try{let e=L.value,t=U.value,n=await he(e);await m.createDocument({path:t,contentBase64:n}),f.close(),L.value=null,R.value=``,await m.refresh(),await b.syncDocAfterCreate(t),/\.(md|markdown|txt|svg)$/i.test(t)&&await b.loadDoc(t)}catch(e){z.value=e instanceof Error?e.message:String(e)}finally{f.saving=!1}}}function _e(e){let t=e.target.files;t&&t.length>0&&(L.value=t[0])}let ve=D(()=>(v.agents??[]).filter(e=>e.enabled)),ye=D(()=>v.agentsMeta.clis??[]),be=D(()=>v.modelsFor($.cli,$.model||void 0)),xe=D(()=>(v.agents?.length?v.agents:[]).find(e=>e.enabled&&e.name===`pm`)??null),$=g({agent:``,cli:``,model:``});function Se(){let e=xe.value;$.agent=e?.name||``,$.cli=e?.cli||``,$.model=e?.model||``}let Ce=D(()=>{let e=xe.value;return e?$.agent!==e.name||$.cli!==e.cli||$.model!==e.model:!1}),Ye=D(()=>(I.value?m.outputs[I.value]??[]:[]).map(e=>`type`in e?{s:`out`,d:e.type===`text`?e.text:e.d??``}:{s:e.s===`err`?`err`:`out`,d:e.d})),Xe=x(null);h(Ye,()=>{s(()=>{let e=Xe.value;e&&(e.scrollTop=e.scrollHeight)})});let Ze=x(null),Qe=x(null);function $e(e){Ze.value&&Y(Ze.value,e)}function et(e){Qe.value&&Y(Qe.value,e)}return(i,s)=>{let m=a(`router-link`);return p(),e(oe,{open:ne.value,"onUpdate:open":C},{default:y(()=>[c(ae),c(ie,{style:r({width:u(f).drawerWidth+`px`,"max-width":`100vw`}),onOpenAutoFocus:O},{default:y(()=>[l(`div`,{class:`drawer-resize`,onMousedown:s[0]||=te((...e)=>u(f).startResize&&u(f).startResize(...e),[`prevent`])},null,32),l(`div`,we,[l(`div`,Te,[c(H,null,{default:y(()=>[...s[15]||=[t(`New doc`,-1)]]),_:1}),c(se,{class:`sr-only`},{default:y(()=>[...s[16]||=[t(`Create a new document`,-1)]]),_:1})]),c(V,{class:`close-x`},{default:y(()=>[c(u(N),{class:`size-[15px]`})]),_:1})]),l(`div`,Ee,[l(`button`,{type:`button`,class:E([`tab-btn`,{active:k.value===`freeform`}]),onClick:s[1]||=e=>k.value=`freeform`},` Freeform `,2),l(`button`,{type:`button`,class:E([`tab-btn`,{active:k.value===`manual`}]),onClick:s[2]||=e=>k.value=`manual`},` Manual `,2),l(`button`,{type:`button`,class:E([`tab-btn`,{active:k.value===`upload`}]),onClick:s[3]||=e=>k.value=`upload`},` Upload `,2)]),l(`div`,De,[k.value===`freeform`?(p(),d(w,{key:0},[l(`div`,Oe,[l(`div`,ke,[s[17]||=l(`label`,{for:`nd-freeform`},`Describe the document`,-1),c(W,{onTranscribed:$e})]),ee(l(`textarea`,{id:`nd-freeform`,ref_key:`freeformTextarea`,ref:Ze,"onUpdate:modelValue":s[4]||=e=>A.value=e,class:`ff-textarea`,rows:`10`,placeholder:`Type the document description — like explaining what should be documented. The PM agent writes the document and chooses an appropriate path.`},null,512),[[S,A.value]])]),l(`div`,Ae,[l(`div`,je,[l(`div`,Me,[s[18]||=l(`label`,null,`Role`,-1),c(de,{modelValue:$.agent,"onUpdate:modelValue":s[5]||=e=>$.agent=e,disabled:F.value},{default:y(()=>[c(ue,{class:`h-[34px] w-full rounded-[9px] px-[11px]`},{default:y(()=>[c(Z,{placeholder:`agent`})]),_:1}),c(pe,{position:`popper`},{default:y(()=>[c(Q,{class:`min-w-[var(--radix-select-trigger-width)]`},{default:y(()=>[(p(!0),d(w,null,o(ve.value,r=>(p(),e(me,{key:r.name,value:r.name},{default:y(()=>[t(n(r.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1})]),_:1},8,[`modelValue`,`disabled`])]),l(`div`,Ne,[c(fe,{"cli-options":ye.value,"model-options":be.value,"memory-key":`panel:new-doc`,cli:$.cli,"onUpdate:cli":s[6]||=e=>$.cli=e,model:$.model,"onUpdate:model":s[7]||=e=>$.model=e,disabled:F.value},null,8,[`cli-options`,`model-options`,`cli`,`model`,`disabled`])])])]),ce.value?T(``,!0):(p(),d(`div`,Pe,[s[20]||=t(` No PM agent is configured. `,-1),c(m,{to:{name:`agents`},onClick:s[8]||=e=>u(f).close()},{default:y(()=>[...s[19]||=[t(` Set one up on the Agents page `,-1)]]),_:1}),s[21]||=t(` — until then use the Manual doc tab. `,-1)])),P.value?(p(),d(`div`,Fe,n(P.value),1)):T(``,!0),l(`div`,Ie,[c(B,{variant:`outline`,onClick:s[9]||=e=>u(f).close()},{default:y(()=>[...s[22]||=[t(`Cancel`,-1)]]),_:1}),c(B,{variant:`default`,onClick:J,disabled:u(f).saving||!A.value.trim()},{default:y(()=>[F.value?(p(),e(G,{key:0})):T(``,!0),t(` `+n(F.value?`Asking the PM agent…`:`Create document`),1)]),_:1},8,[`disabled`])]),Ye.value.length?(p(),d(`div`,Le,[l(`div`,Re,[c(G),s[23]||=t(` PM agent `,-1)]),l(`div`,{class:`ff-stream-log`,ref_key:`ffLogEl`,ref:Xe},[(p(!0),d(w,null,o(Ye.value,(e,t)=>(p(),d(`div`,{key:t,class:E([`ff-stream-line`,e.s===`err`?`err`:``])},n(e.d),3))),128))],512)])):T(``,!0)],64)):k.value===`manual`?(p(),d(w,{key:1},[l(`div`,ze,[s[24]||=l(`label`,{for:`nd-path`},`File path`,-1),c(K,{id:`nd-path`,modelValue:u(f).nd.path,"onUpdate:modelValue":s[10]||=e=>u(f).nd.path=e,placeholder:`docs/my-document.md`,onKeyup:_(X,[`enter`])},null,8,[`modelValue`])]),l(`div`,Be,[l(`div`,Ve,[s[25]||=l(`label`,{for:`nd-content`},`Content`,-1),c(W,{onTranscribed:et})]),ee(l(`textarea`,{id:`nd-content`,ref_key:`docBodyTextarea`,ref:Qe,"onUpdate:modelValue":s[11]||=e=>u(f).nd.content=e,class:`doc-textarea`,rows:`15`,placeholder:`Enter the document content in Markdown format...`},null,512),[[S,u(f).nd.content]])]),l(`div`,He,[c(B,{variant:`outline`,onClick:s[12]||=e=>u(f).close()},{default:y(()=>[...s[26]||=[t(`Cancel`,-1)]]),_:1}),c(B,{variant:`default`,onClick:X,disabled:u(f).saving||!u(f).nd.path||!u(f).nd.content},{default:y(()=>[...s[27]||=[t(` Create `,-1)]]),_:1},8,[`disabled`])])],64)):k.value===`upload`?(p(),d(w,{key:2},[l(`div`,Ue,[s[28]||=l(`label`,{for:`nd-upload-path`},`File path`,-1),c(K,{id:`nd-upload-path`,modelValue:R.value,"onUpdate:modelValue":s[13]||=e=>R.value=e,placeholder:`docs/my-document.md — or docs/design/assets/ to keep the filename`},null,8,[`modelValue`])]),l(`div`,We,[s[29]||=l(`label`,{for:`nd-upload-file`},`Select file`,-1),l(`input`,{id:`nd-upload-file`,type:`file`,class:`upload-input`,onChange:_e},null,32),L.value?(p(),d(`div`,Ge,[t(n(L.value.name)+` (`+n((L.value.size/1024).toFixed(1))+` KB) `,1),U.value?(p(),d(`span`,Ke,`→ `+n(U.value),1)):T(``,!0)])):T(``,!0)]),z.value?(p(),d(`div`,qe,n(z.value),1)):T(``,!0),l(`div`,Je,[c(B,{variant:`outline`,onClick:s[14]||=e=>u(f).close()},{default:y(()=>[...s[30]||=[t(`Cancel`,-1)]]),_:1}),c(B,{variant:`default`,onClick:ge,disabled:u(f).saving||!L.value||!R.value.trim()},{default:y(()=>[...s[31]||=[t(` Upload `,-1)]]),_:1},8,[`disabled`])])],64)):T(``,!0)])]),_:1},8,[`style`])]),_:1},8,[`open`])}}}),[[`__scopeId`,`data-v-69fef322`]]),Xe={class:`drawer-head`},Ze={class:`drawer-head-title`},Qe={class:`drawer-tabs`},$e={class:`drawer-body`},et={class:`field`},tt={class:`ff-agent-bar`},nt={key:0,class:`ff-notice`},rt={key:1,class:`ff-error`},it={class:`btn-row`,style:{"margin-top":`20px`}},at={key:2,class:`ff-stream`},ot={class:`ff-stream-head`},st={class:`field`},ct={key:0,class:`hint`},lt={class:`field`},ut={class:`field`},dt={key:0,class:`ff-error`},ft={class:`btn-row`,style:{"margin-top":`20px`}},pt={class:`field`},mt={key:0,class:`hint`},ht={class:`field`},gt={key:0,class:`upload-file-info`},_t={key:0,class:`ff-error`},vt={class:`btn-row`,style:{"margin-top":`20px`}},yt=R(b({__name:`NewSkillPanel`,setup(i){let f=re(),m=j(),_=M(),v=le(),b=D(()=>f.isNewSkill);function ne(e){e||f.close()}let C=x(`freeform`),O=x(``),k=x(``),A=x(!1),P=x(null),F=x(``),I=x(null),L=x(``),R=D(()=>!_.loaded||(_.agents??[]).some(e=>e.name===`pm`&&e.enabled)),z=D(()=>(_.agents??[]).find(e=>e.enabled&&e.name===`pm`)??null),U=g({cli:``,model:``});function W(){U.cli=z.value?.cli||``,U.model=z.value?.model||``}let ce=D(()=>{let e=z.value;return e?U.cli!==e.cli||U.model!==e.model:!1}),J=D(()=>_.agentsMeta.clis??[]),Y=D(()=>_.modelsFor(U.cli,U.model||void 0)),X=D(()=>f.ns.name.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``));h(()=>f.isNewSkill,e=>{e&&(C.value=`freeform`,O.value=``,k.value=``,F.value=``,I.value=null,L.value=``,W())});async function Z(e){f.close(),await m.refresh(),await v.loadSkills(),e&&await v.loadSkill(e)}async function ue(){let e=O.value.trim();if(e){f.saving=!0,A.value=!0,k.value=``,P.value&&m.clearOutput(P.value),P.value=q();try{let t=ce.value?{cli:U.cli,model:U.model}:void 0,n=await m.createFreeformSkill(e,P.value,t);O.value=``,await Z(n.path)}catch(e){k.value=e instanceof Error?e.message:String(e)}finally{A.value=!1,P.value=null,f.saving=!1}}}async function de(){if(!(!f.ns.name.trim()||!f.ns.description.trim()||!f.ns.content.trim())){f.saving=!0,F.value=``;try{await Z((await m.createSkill({name:f.ns.name.trim(),description:f.ns.description.trim(),body:f.ns.content})).path)}catch(e){F.value=e instanceof Error?e.message:String(e)}finally{f.saving=!1}}}async function pe(){if(!(!I.value||!f.ns.name.trim())){f.saving=!0,L.value=``;try{let e=await I.value.text();await Z((await m.createSkill({name:f.ns.name.trim(),content:e})).path)}catch(e){L.value=e instanceof Error?e.message:String(e)}finally{f.saving=!1}}}function me(e){let t=e.target.files;t&&t.length>0&&(I.value=t[0])}let he=D(()=>(P.value?m.outputs[P.value]??[]:[]).map(e=>`type`in e?{s:`out`,d:e.type===`text`?e.text:e.d??``}:{s:e.s===`err`?`err`:`out`,d:e.d})),Q=x(null);return h(he,()=>{s(()=>{let e=Q.value;e&&(e.scrollTop=e.scrollHeight)})}),(i,s)=>{let m=a(`router-link`);return p(),e(oe,{open:b.value,"onUpdate:open":ne},{default:y(()=>[c(ae),c(ie,{style:r({width:u(f).drawerWidth+`px`,"max-width":`100vw`})},{default:y(()=>[l(`div`,{class:`drawer-resize`,onMousedown:s[0]||=te((...e)=>u(f).startResize&&u(f).startResize(...e),[`prevent`])},null,32),l(`div`,Xe,[l(`div`,Ze,[c(H,null,{default:y(()=>[...s[15]||=[t(`New skill`,-1)]]),_:1}),c(se,{class:`sr-only`},{default:y(()=>[...s[16]||=[t(`Create a new skill`,-1)]]),_:1})]),c(V,{class:`close-x`},{default:y(()=>[c(u(N),{class:`size-[15px]`})]),_:1})]),l(`div`,Qe,[l(`button`,{type:`button`,class:E([`tab-btn`,{active:C.value===`freeform`}]),onClick:s[1]||=e=>C.value=`freeform`},` Freeform `,2),l(`button`,{type:`button`,class:E([`tab-btn`,{active:C.value===`manual`}]),onClick:s[2]||=e=>C.value=`manual`},` Manual `,2),l(`button`,{type:`button`,class:E([`tab-btn`,{active:C.value===`upload`}]),onClick:s[3]||=e=>C.value=`upload`},` Upload `,2)]),l(`div`,$e,[C.value===`freeform`?(p(),d(w,{key:0},[l(`div`,et,[s[17]||=l(`label`,{for:`ns-freeform`},`Describe the skill`,-1),ee(l(`textarea`,{id:`ns-freeform`,"onUpdate:modelValue":s[4]||=e=>O.value=e,class:`ff-textarea`,rows:`10`,placeholder:`Describe what the skill should do and when an agent should reach for it. The PM agent writes the SKILL.md and picks the skills/<name>/ folder.`},null,512),[[S,O.value]])]),l(`div`,tt,[c(fe,{"cli-options":J.value,"model-options":Y.value,"memory-key":`panel:new-skill`,cli:U.cli,"onUpdate:cli":s[5]||=e=>U.cli=e,model:U.model,"onUpdate:model":s[6]||=e=>U.model=e,disabled:A.value},null,8,[`cli-options`,`model-options`,`cli`,`model`,`disabled`])]),R.value?T(``,!0):(p(),d(`div`,nt,[s[19]||=t(` No PM agent is configured. `,-1),c(m,{to:{name:`agents`},onClick:s[7]||=e=>u(f).close()},{default:y(()=>[...s[18]||=[t(` Set one up on the Agents page `,-1)]]),_:1}),s[20]||=t(` — until then use the Manual tab. `,-1)])),k.value?(p(),d(`div`,rt,n(k.value),1)):T(``,!0),l(`div`,it,[c(B,{variant:`outline`,onClick:s[8]||=e=>u(f).close()},{default:y(()=>[...s[21]||=[t(`Cancel`,-1)]]),_:1}),c(B,{variant:`default`,onClick:ue,disabled:u(f).saving||!O.value.trim()},{default:y(()=>[A.value?(p(),e(G,{key:0})):T(``,!0),t(` `+n(A.value?`Asking the PM agent…`:`Create skill`),1)]),_:1},8,[`disabled`])]),he.value.length?(p(),d(`div`,at,[l(`div`,ot,[c(G),s[22]||=t(` PM agent `,-1)]),l(`div`,{class:`ff-stream-log`,ref_key:`ffLogEl`,ref:Q},[(p(!0),d(w,null,o(he.value,(e,t)=>(p(),d(`div`,{key:t,class:E([`ff-stream-line`,e.s===`err`?`err`:``])},n(e.d),3))),128))],512)])):T(``,!0)],64)):C.value===`manual`?(p(),d(w,{key:1},[l(`div`,st,[s[23]||=l(`label`,{for:`ns-name`},`Skill name`,-1),c(K,{id:`ns-name`,modelValue:u(f).ns.name,"onUpdate:modelValue":s[9]||=e=>u(f).ns.name=e,placeholder:`my-skill`},null,8,[`modelValue`]),X.value?(p(),d(`div`,ct,`→ skills/`+n(X.value)+`/SKILL.md`,1)):T(``,!0)]),l(`div`,lt,[s[24]||=l(`label`,{for:`ns-desc`},`Description`,-1),c(K,{id:`ns-desc`,modelValue:u(f).ns.description,"onUpdate:modelValue":s[10]||=e=>u(f).ns.description=e,placeholder:`One line: when should an agent use this skill?`},null,8,[`modelValue`])]),l(`div`,ut,[s[25]||=l(`label`,{for:`ns-body`},`Instructions (Markdown)`,-1),ee(l(`textarea`,{id:`ns-body`,"onUpdate:modelValue":s[11]||=e=>u(f).ns.content=e,class:`doc-textarea`,rows:`14`,placeholder:`# My skill
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-BzCX7E5U.js","assets/index-C1p-aj2F.js","assets/vendor-vue-0d2wfih_.js","assets/api-BXg3t-A6.js","assets/repo-CrA_4-Ii.js","assets/config-BpusGwRJ.js","assets/vendor-ui-BbK4TVl8.js","assets/_plugin-vue_export-helper-BDNMzG2s.js","assets/time-CwKjNEcq.js","assets/button-BsLUWnfn.js","assets/title-CmTcwJQC.js","assets/VoiceDictate-C0-jNbo1.js","assets/VoiceDictate-Bc00yWSj.css","assets/check-setup-Bfqp1ySB.js","assets/ActivityIndicator-BNDj8i9m.js","assets/useChatScroll-BD10j3cq.js","assets/clipboard-CkhTprDX.js","assets/AgentModelModal-CFdPv_af.js","assets/index-B_NqhhGa.css","assets/chunk-Y2CYZVJY-DsF7k-Jl.js","assets/src-B6xuSHsQ.js","assets/rolldown-runtime-hePW80VL.js","assets/chunk-DU6HZSFF-BUg7lr0p.js","assets/chunk-75Z2AOVW-D3vFPpCL.js","assets/dist-v5Q1xZ2K.js","assets/chunk-PWAF6VOD-DGHKZoGz.js","assets/chunk-GMAD6QVW-C6MmVDs8.js","assets/chunk-P2QGCYS3-cohJ6no2.js","assets/chunk-4HAMMTFA-NQ0EXnu1.js","assets/rough.esm-By172zw-.js","assets/chunk-GVQU2GXP-DVsfbizv.js","assets/chunk-OSK3NFVY-8PZkkCN2.js","assets/line-A0XnPGQP.js","assets/path-COt_16Va.js","assets/array-BifhSqXX.js","assets/graphlib-DS17s2tU.js","assets/chunk-L3NEJ4N5-e6EnP3AO.js"])))=>i.map(i=>d[i]);
2
+ import{C as e,D as t,Dt as n,Et as r,H as i,J as a,K as o,L as s,O as c,S as l,St as u,T as d,V as f,W as p,at as ee,d as m,et as h,ft as g,g as te,h as _,i as v,it as y,k as b,mt as x,p as S,r as ne,s as C,v as w,w as T,wt as E,x as D}from"./vendor-vue-0d2wfih_.js";import{a as O,n as k,r as A}from"./api-BXg3t-A6.js";import{d as j,x as re}from"./repo-CrA_4-Ii.js";import{r as M}from"./config-BpusGwRJ.js";import{C as N,I as P,et as F,ht as I,pt as L}from"./vendor-ui-BbK4TVl8.js";import{t as R}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{r as z}from"./time-CwKjNEcq.js";import{t as B}from"./button-BsLUWnfn.js";import{a as V,i as ie,n as ae,o as oe,r as se,t as H}from"./title-CmTcwJQC.js";import{o as U,t as W}from"./VoiceDictate-C0-jNbo1.js";import{t as G}from"./ActivityIndicator-BNDj8i9m.js";import{A as K,B as ce,K as le,L as q,R as J,T as Y,V as X,d as Z,f as ue,h as de,l as fe,m as pe,p as me,t as he,u as Q,v as ge,z as _e}from"./index-C1p-aj2F.js";import{t as ve}from"./checkbox-Bu0fOTRa.js";var ye=null;function be(){let e=document.documentElement.getAttribute(`data-theme`);return e===`dark`?`dark`:e===`light`?`default`:window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`default`}async function xe(){return ye||=he(async()=>{let{default:e}=await import(`./mermaid.core-BzCX7E5U.js`);return{default:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36])).then(({default:e})=>(e.initialize({startOnLoad:!1,securityLevel:`strict`,maxTextSize:5e4,maxEdges:1e3,theme:be()}),e)),ye}async function $(e){let t=e.querySelectorAll(`.md-mermaid:not([data-processed])`);if(t.length)try{await(await xe()).run({nodes:t,suppressErrors:!0})}catch{}}function Se(e){let t={};for(let n of e){if(!n.path)continue;let e=n.path.split(`/`),r=t;for(let t=0;t<e.length;t++){let i=e[t],a=t===e.length-1,o=e.slice(0,t+1).join(`/`);r[i]||(r[i]={name:i,key:o,isFile:a,path:a?n.path:void 0,children:{}}),a||(r=r[i].children)}}let n=e=>Object.values(e).sort((e,t)=>e.isFile===t.isFile?e.name.localeCompare(t.name):e.isFile?1:-1).map(e=>{let t={name:e.name,key:e.key,isFile:e.isFile,path:e.path},r=n(e.children);return r.length&&(t.children=r),t});return n(t)}function Ce(e,t){let n=[],r=(e,i)=>{for(let a of e)n.push({key:a.key,name:a.name,isFile:a.isFile,path:a.path,depth:i}),!a.isFile&&a.children&&t.has(a.key)&&r(a.children,i+1)};return r(e,0),n}var we={class:`drawer-head`},Te={class:`drawer-head-title`},Ee={class:`drawer-tabs`},De={class:`drawer-body`},Oe={class:`field`},ke={class:`field-header`},Ae={class:`ff-agent-bar`},je={class:`agent-pick-grid`},Me={class:`agent-field`},Ne={class:`agent-field`,style:{"grid-column":`1 / -1`}},Pe={key:0,class:`ff-notice`},Fe={key:1,class:`ff-error`},Ie={class:`btn-row`,style:{"margin-top":`20px`}},Le={key:2,class:`ff-stream`},Re={class:`ff-stream-head`},ze={class:`field`},Be={class:`field`},Ve={class:`field-header`},He={class:`btn-row`,style:{"margin-top":`20px`}},Ue={class:`field`},We={class:`field`},Ge={key:0,class:`upload-file-info`},Ke={key:0,class:`upload-dest`},qe={key:0,class:`ff-error`},Je={class:`btn-row`,style:{"margin-top":`20px`}},Ye=R(b({__name:`NewDocPanel`,setup(i){let f=re(),m=j(),v=M(),b=le(),ne=D(()=>f.isNewDoc);function C(e){e||f.close()}function O(e){f.isNewDoc&&(e.preventDefault(),requestAnimationFrame(()=>{let e;e=k.value===`freeform`?`nd-freeform`:k.value===`upload`?`nd-upload-path`:`nd-path`,document.getElementById(e)?.focus()}))}let k=x(`freeform`),A=x(``),P=x(``),F=x(!1),I=x(null),L=x(null),R=x(``),z=x(``),U=D(()=>{let e=R.value.trim();return e?/\/\s*$/.test(e)&&L.value?e.replace(/\s*$/,``)+L.value.name:e:``}),ce=D(()=>!v.loaded||(v.agents??[]).some(e=>e.name===`pm`&&e.enabled));h(()=>f.isNewDoc,e=>{e&&(k.value=v.form.defaultTaskMode===`manual`?`manual`:`freeform`,A.value=``,P.value=``,L.value=null,R.value=``,z.value=``,Se())});async function J(){let e=A.value.trim();if(e){f.saving=!0,F.value=!0,P.value=``,I.value&&m.clearOutput(I.value),I.value=q();try{let t=Ce.value?{agent:$.agent,cli:$.cli,model:$.model}:void 0,n=await m.createFreeformDocument(e,I.value,t);f.close(),A.value=``,await m.refresh(),n.path&&(await b.syncDocAfterCreate(n.path),await b.loadDoc(n.path))}catch(e){P.value=e instanceof Error?e.message:String(e)}finally{F.value=!1,I.value=null,f.saving=!1}}}async function X(){if(!(!f.nd.path||!f.nd.content)){f.saving=!0;try{let e=f.nd.path;await m.createDocument({path:e,content:f.nd.content}),f.close(),f.nd.path=``,f.nd.content=``,await m.refresh(),await b.syncDocAfterCreate(e),await b.loadDoc(e)}catch(e){m.onError(e)}finally{f.saving=!1}}}function he(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result).split(`,`)[1]??``),r.onerror=()=>n(r.error??Error(`could not read file`)),r.readAsDataURL(e)})}async function ge(){if(!(!L.value||!R.value.trim())){f.saving=!0,z.value=``;try{let e=L.value,t=U.value,n=await he(e);await m.createDocument({path:t,contentBase64:n}),f.close(),L.value=null,R.value=``,await m.refresh(),await b.syncDocAfterCreate(t),/\.(md|markdown|txt|svg)$/i.test(t)&&await b.loadDoc(t)}catch(e){z.value=e instanceof Error?e.message:String(e)}finally{f.saving=!1}}}function _e(e){let t=e.target.files;t&&t.length>0&&(L.value=t[0])}let ve=D(()=>(v.agents??[]).filter(e=>e.enabled)),ye=D(()=>v.agentsMeta.clis??[]),be=D(()=>v.modelsFor($.cli,$.model||void 0)),xe=D(()=>(v.agents?.length?v.agents:[]).find(e=>e.enabled&&e.name===`pm`)??null),$=g({agent:``,cli:``,model:``});function Se(){let e=xe.value;$.agent=e?.name||``,$.cli=e?.cli||``,$.model=e?.model||``}let Ce=D(()=>{let e=xe.value;return e?$.agent!==e.name||$.cli!==e.cli||$.model!==e.model:!1}),Ye=D(()=>(I.value?m.outputs[I.value]??[]:[]).map(e=>`type`in e?{s:`out`,d:e.type===`text`?e.text:e.d??``}:{s:e.s===`err`?`err`:`out`,d:e.d})),Xe=x(null);h(Ye,()=>{s(()=>{let e=Xe.value;e&&(e.scrollTop=e.scrollHeight)})});let Ze=x(null),Qe=x(null);function $e(e){Ze.value&&Y(Ze.value,e)}function et(e){Qe.value&&Y(Qe.value,e)}return(i,s)=>{let m=a(`router-link`);return p(),e(oe,{open:ne.value,"onUpdate:open":C},{default:y(()=>[c(ae),c(ie,{style:r({width:u(f).drawerWidth+`px`,"max-width":`100vw`}),onOpenAutoFocus:O},{default:y(()=>[l(`div`,{class:`drawer-resize`,onMousedown:s[0]||=te((...e)=>u(f).startResize&&u(f).startResize(...e),[`prevent`])},null,32),l(`div`,we,[l(`div`,Te,[c(H,null,{default:y(()=>[...s[15]||=[t(`New doc`,-1)]]),_:1}),c(se,{class:`sr-only`},{default:y(()=>[...s[16]||=[t(`Create a new document`,-1)]]),_:1})]),c(V,{class:`close-x`},{default:y(()=>[c(u(N),{class:`size-[15px]`})]),_:1})]),l(`div`,Ee,[l(`button`,{type:`button`,class:E([`tab-btn`,{active:k.value===`freeform`}]),onClick:s[1]||=e=>k.value=`freeform`},` Freeform `,2),l(`button`,{type:`button`,class:E([`tab-btn`,{active:k.value===`manual`}]),onClick:s[2]||=e=>k.value=`manual`},` Manual `,2),l(`button`,{type:`button`,class:E([`tab-btn`,{active:k.value===`upload`}]),onClick:s[3]||=e=>k.value=`upload`},` Upload `,2)]),l(`div`,De,[k.value===`freeform`?(p(),d(w,{key:0},[l(`div`,Oe,[l(`div`,ke,[s[17]||=l(`label`,{for:`nd-freeform`},`Describe the document`,-1),c(W,{onTranscribed:$e})]),ee(l(`textarea`,{id:`nd-freeform`,ref_key:`freeformTextarea`,ref:Ze,"onUpdate:modelValue":s[4]||=e=>A.value=e,class:`ff-textarea`,rows:`10`,placeholder:`Type the document description — like explaining what should be documented. The PM agent writes the document and chooses an appropriate path.`},null,512),[[S,A.value]])]),l(`div`,Ae,[l(`div`,je,[l(`div`,Me,[s[18]||=l(`label`,null,`Role`,-1),c(de,{modelValue:$.agent,"onUpdate:modelValue":s[5]||=e=>$.agent=e,disabled:F.value},{default:y(()=>[c(ue,{class:`h-[34px] w-full rounded-[9px] px-[11px]`},{default:y(()=>[c(Z,{placeholder:`agent`})]),_:1}),c(pe,{position:`popper`},{default:y(()=>[c(Q,{class:`min-w-[var(--radix-select-trigger-width)]`},{default:y(()=>[(p(!0),d(w,null,o(ve.value,r=>(p(),e(me,{key:r.name,value:r.name},{default:y(()=>[t(n(r.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1})]),_:1},8,[`modelValue`,`disabled`])]),l(`div`,Ne,[c(fe,{"cli-options":ye.value,"model-options":be.value,"memory-key":`panel:new-doc`,cli:$.cli,"onUpdate:cli":s[6]||=e=>$.cli=e,model:$.model,"onUpdate:model":s[7]||=e=>$.model=e,disabled:F.value},null,8,[`cli-options`,`model-options`,`cli`,`model`,`disabled`])])])]),ce.value?T(``,!0):(p(),d(`div`,Pe,[s[20]||=t(` No PM agent is configured. `,-1),c(m,{to:{name:`agents`},onClick:s[8]||=e=>u(f).close()},{default:y(()=>[...s[19]||=[t(` Set one up on the Agents page `,-1)]]),_:1}),s[21]||=t(` — until then use the Manual doc tab. `,-1)])),P.value?(p(),d(`div`,Fe,n(P.value),1)):T(``,!0),l(`div`,Ie,[c(B,{variant:`outline`,onClick:s[9]||=e=>u(f).close()},{default:y(()=>[...s[22]||=[t(`Cancel`,-1)]]),_:1}),c(B,{variant:`default`,onClick:J,disabled:u(f).saving||!A.value.trim()},{default:y(()=>[F.value?(p(),e(G,{key:0})):T(``,!0),t(` `+n(F.value?`Asking the PM agent…`:`Create document`),1)]),_:1},8,[`disabled`])]),Ye.value.length?(p(),d(`div`,Le,[l(`div`,Re,[c(G),s[23]||=t(` PM agent `,-1)]),l(`div`,{class:`ff-stream-log`,ref_key:`ffLogEl`,ref:Xe},[(p(!0),d(w,null,o(Ye.value,(e,t)=>(p(),d(`div`,{key:t,class:E([`ff-stream-line`,e.s===`err`?`err`:``])},n(e.d),3))),128))],512)])):T(``,!0)],64)):k.value===`manual`?(p(),d(w,{key:1},[l(`div`,ze,[s[24]||=l(`label`,{for:`nd-path`},`File path`,-1),c(K,{id:`nd-path`,modelValue:u(f).nd.path,"onUpdate:modelValue":s[10]||=e=>u(f).nd.path=e,placeholder:`docs/my-document.md`,onKeyup:_(X,[`enter`])},null,8,[`modelValue`])]),l(`div`,Be,[l(`div`,Ve,[s[25]||=l(`label`,{for:`nd-content`},`Content`,-1),c(W,{onTranscribed:et})]),ee(l(`textarea`,{id:`nd-content`,ref_key:`docBodyTextarea`,ref:Qe,"onUpdate:modelValue":s[11]||=e=>u(f).nd.content=e,class:`doc-textarea`,rows:`15`,placeholder:`Enter the document content in Markdown format...`},null,512),[[S,u(f).nd.content]])]),l(`div`,He,[c(B,{variant:`outline`,onClick:s[12]||=e=>u(f).close()},{default:y(()=>[...s[26]||=[t(`Cancel`,-1)]]),_:1}),c(B,{variant:`default`,onClick:X,disabled:u(f).saving||!u(f).nd.path||!u(f).nd.content},{default:y(()=>[...s[27]||=[t(` Create `,-1)]]),_:1},8,[`disabled`])])],64)):k.value===`upload`?(p(),d(w,{key:2},[l(`div`,Ue,[s[28]||=l(`label`,{for:`nd-upload-path`},`File path`,-1),c(K,{id:`nd-upload-path`,modelValue:R.value,"onUpdate:modelValue":s[13]||=e=>R.value=e,placeholder:`docs/my-document.md — or docs/design/assets/ to keep the filename`},null,8,[`modelValue`])]),l(`div`,We,[s[29]||=l(`label`,{for:`nd-upload-file`},`Select file`,-1),l(`input`,{id:`nd-upload-file`,type:`file`,class:`upload-input`,onChange:_e},null,32),L.value?(p(),d(`div`,Ge,[t(n(L.value.name)+` (`+n((L.value.size/1024).toFixed(1))+` KB) `,1),U.value?(p(),d(`span`,Ke,`→ `+n(U.value),1)):T(``,!0)])):T(``,!0)]),z.value?(p(),d(`div`,qe,n(z.value),1)):T(``,!0),l(`div`,Je,[c(B,{variant:`outline`,onClick:s[14]||=e=>u(f).close()},{default:y(()=>[...s[30]||=[t(`Cancel`,-1)]]),_:1}),c(B,{variant:`default`,onClick:ge,disabled:u(f).saving||!L.value||!R.value.trim()},{default:y(()=>[...s[31]||=[t(` Upload `,-1)]]),_:1},8,[`disabled`])])],64)):T(``,!0)])]),_:1},8,[`style`])]),_:1},8,[`open`])}}}),[[`__scopeId`,`data-v-69fef322`]]),Xe={class:`drawer-head`},Ze={class:`drawer-head-title`},Qe={class:`drawer-tabs`},$e={class:`drawer-body`},et={class:`field`},tt={class:`ff-agent-bar`},nt={key:0,class:`ff-notice`},rt={key:1,class:`ff-error`},it={class:`btn-row`,style:{"margin-top":`20px`}},at={key:2,class:`ff-stream`},ot={class:`ff-stream-head`},st={class:`field`},ct={key:0,class:`hint`},lt={class:`field`},ut={class:`field`},dt={key:0,class:`ff-error`},ft={class:`btn-row`,style:{"margin-top":`20px`}},pt={class:`field`},mt={key:0,class:`hint`},ht={class:`field`},gt={key:0,class:`upload-file-info`},_t={key:0,class:`ff-error`},vt={class:`btn-row`,style:{"margin-top":`20px`}},yt=R(b({__name:`NewSkillPanel`,setup(i){let f=re(),m=j(),_=M(),v=le(),b=D(()=>f.isNewSkill);function ne(e){e||f.close()}let C=x(`freeform`),O=x(``),k=x(``),A=x(!1),P=x(null),F=x(``),I=x(null),L=x(``),R=D(()=>!_.loaded||(_.agents??[]).some(e=>e.name===`pm`&&e.enabled)),z=D(()=>(_.agents??[]).find(e=>e.enabled&&e.name===`pm`)??null),U=g({cli:``,model:``});function W(){U.cli=z.value?.cli||``,U.model=z.value?.model||``}let ce=D(()=>{let e=z.value;return e?U.cli!==e.cli||U.model!==e.model:!1}),J=D(()=>_.agentsMeta.clis??[]),Y=D(()=>_.modelsFor(U.cli,U.model||void 0)),X=D(()=>f.ns.name.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``));h(()=>f.isNewSkill,e=>{e&&(C.value=`freeform`,O.value=``,k.value=``,F.value=``,I.value=null,L.value=``,W())});async function Z(e){f.close(),await m.refresh(),await v.loadSkills(),e&&await v.loadSkill(e)}async function ue(){let e=O.value.trim();if(e){f.saving=!0,A.value=!0,k.value=``,P.value&&m.clearOutput(P.value),P.value=q();try{let t=ce.value?{cli:U.cli,model:U.model}:void 0,n=await m.createFreeformSkill(e,P.value,t);O.value=``,await Z(n.path)}catch(e){k.value=e instanceof Error?e.message:String(e)}finally{A.value=!1,P.value=null,f.saving=!1}}}async function de(){if(!(!f.ns.name.trim()||!f.ns.description.trim()||!f.ns.content.trim())){f.saving=!0,F.value=``;try{await Z((await m.createSkill({name:f.ns.name.trim(),description:f.ns.description.trim(),body:f.ns.content})).path)}catch(e){F.value=e instanceof Error?e.message:String(e)}finally{f.saving=!1}}}async function pe(){if(!(!I.value||!f.ns.name.trim())){f.saving=!0,L.value=``;try{let e=await I.value.text();await Z((await m.createSkill({name:f.ns.name.trim(),content:e})).path)}catch(e){L.value=e instanceof Error?e.message:String(e)}finally{f.saving=!1}}}function me(e){let t=e.target.files;t&&t.length>0&&(I.value=t[0])}let he=D(()=>(P.value?m.outputs[P.value]??[]:[]).map(e=>`type`in e?{s:`out`,d:e.type===`text`?e.text:e.d??``}:{s:e.s===`err`?`err`:`out`,d:e.d})),Q=x(null);return h(he,()=>{s(()=>{let e=Q.value;e&&(e.scrollTop=e.scrollHeight)})}),(i,s)=>{let m=a(`router-link`);return p(),e(oe,{open:b.value,"onUpdate:open":ne},{default:y(()=>[c(ae),c(ie,{style:r({width:u(f).drawerWidth+`px`,"max-width":`100vw`})},{default:y(()=>[l(`div`,{class:`drawer-resize`,onMousedown:s[0]||=te((...e)=>u(f).startResize&&u(f).startResize(...e),[`prevent`])},null,32),l(`div`,Xe,[l(`div`,Ze,[c(H,null,{default:y(()=>[...s[15]||=[t(`New skill`,-1)]]),_:1}),c(se,{class:`sr-only`},{default:y(()=>[...s[16]||=[t(`Create a new skill`,-1)]]),_:1})]),c(V,{class:`close-x`},{default:y(()=>[c(u(N),{class:`size-[15px]`})]),_:1})]),l(`div`,Qe,[l(`button`,{type:`button`,class:E([`tab-btn`,{active:C.value===`freeform`}]),onClick:s[1]||=e=>C.value=`freeform`},` Freeform `,2),l(`button`,{type:`button`,class:E([`tab-btn`,{active:C.value===`manual`}]),onClick:s[2]||=e=>C.value=`manual`},` Manual `,2),l(`button`,{type:`button`,class:E([`tab-btn`,{active:C.value===`upload`}]),onClick:s[3]||=e=>C.value=`upload`},` Upload `,2)]),l(`div`,$e,[C.value===`freeform`?(p(),d(w,{key:0},[l(`div`,et,[s[17]||=l(`label`,{for:`ns-freeform`},`Describe the skill`,-1),ee(l(`textarea`,{id:`ns-freeform`,"onUpdate:modelValue":s[4]||=e=>O.value=e,class:`ff-textarea`,rows:`10`,placeholder:`Describe what the skill should do and when an agent should reach for it. The PM agent writes the SKILL.md and picks the skills/<name>/ folder.`},null,512),[[S,O.value]])]),l(`div`,tt,[c(fe,{"cli-options":J.value,"model-options":Y.value,"memory-key":`panel:new-skill`,cli:U.cli,"onUpdate:cli":s[5]||=e=>U.cli=e,model:U.model,"onUpdate:model":s[6]||=e=>U.model=e,disabled:A.value},null,8,[`cli-options`,`model-options`,`cli`,`model`,`disabled`])]),R.value?T(``,!0):(p(),d(`div`,nt,[s[19]||=t(` No PM agent is configured. `,-1),c(m,{to:{name:`agents`},onClick:s[7]||=e=>u(f).close()},{default:y(()=>[...s[18]||=[t(` Set one up on the Agents page `,-1)]]),_:1}),s[20]||=t(` — until then use the Manual tab. `,-1)])),k.value?(p(),d(`div`,rt,n(k.value),1)):T(``,!0),l(`div`,it,[c(B,{variant:`outline`,onClick:s[8]||=e=>u(f).close()},{default:y(()=>[...s[21]||=[t(`Cancel`,-1)]]),_:1}),c(B,{variant:`default`,onClick:ue,disabled:u(f).saving||!O.value.trim()},{default:y(()=>[A.value?(p(),e(G,{key:0})):T(``,!0),t(` `+n(A.value?`Asking the PM agent…`:`Create skill`),1)]),_:1},8,[`disabled`])]),he.value.length?(p(),d(`div`,at,[l(`div`,ot,[c(G),s[22]||=t(` PM agent `,-1)]),l(`div`,{class:`ff-stream-log`,ref_key:`ffLogEl`,ref:Q},[(p(!0),d(w,null,o(he.value,(e,t)=>(p(),d(`div`,{key:t,class:E([`ff-stream-line`,e.s===`err`?`err`:``])},n(e.d),3))),128))],512)])):T(``,!0)],64)):C.value===`manual`?(p(),d(w,{key:1},[l(`div`,st,[s[23]||=l(`label`,{for:`ns-name`},`Skill name`,-1),c(K,{id:`ns-name`,modelValue:u(f).ns.name,"onUpdate:modelValue":s[9]||=e=>u(f).ns.name=e,placeholder:`my-skill`},null,8,[`modelValue`]),X.value?(p(),d(`div`,ct,`→ skills/`+n(X.value)+`/SKILL.md`,1)):T(``,!0)]),l(`div`,lt,[s[24]||=l(`label`,{for:`ns-desc`},`Description`,-1),c(K,{id:`ns-desc`,modelValue:u(f).ns.description,"onUpdate:modelValue":s[10]||=e=>u(f).ns.description=e,placeholder:`One line: when should an agent use this skill?`},null,8,[`modelValue`])]),l(`div`,ut,[s[25]||=l(`label`,{for:`ns-body`},`Instructions (Markdown)`,-1),ee(l(`textarea`,{id:`ns-body`,"onUpdate:modelValue":s[11]||=e=>u(f).ns.content=e,class:`doc-textarea`,rows:`14`,placeholder:`# My skill
3
3
 
4
4
  What the agent should do when this skill is active...`},null,512),[[S,u(f).ns.content]])]),F.value?(p(),d(`div`,dt,n(F.value),1)):T(``,!0),l(`div`,ft,[c(B,{variant:`outline`,onClick:s[12]||=e=>u(f).close()},{default:y(()=>[...s[26]||=[t(`Cancel`,-1)]]),_:1}),c(B,{variant:`default`,onClick:de,disabled:u(f).saving||!u(f).ns.name.trim()||!u(f).ns.description.trim()||!u(f).ns.content.trim()},{default:y(()=>[...s[27]||=[t(` Create `,-1)]]),_:1},8,[`disabled`])])],64)):(p(),d(w,{key:2},[l(`div`,pt,[s[28]||=l(`label`,{for:`ns-upload-name`},`Skill name`,-1),c(K,{id:`ns-upload-name`,modelValue:u(f).ns.name,"onUpdate:modelValue":s[13]||=e=>u(f).ns.name=e,placeholder:`my-skill`},null,8,[`modelValue`]),X.value?(p(),d(`div`,mt,`→ skills/`+n(X.value)+`/SKILL.md`,1)):T(``,!0)]),l(`div`,ht,[s[29]||=l(`label`,{for:`ns-upload-file`},`Select SKILL.md`,-1),l(`input`,{id:`ns-upload-file`,type:`file`,class:`upload-input`,onChange:me},null,32),I.value?(p(),d(`div`,gt,n(I.value.name)+` (`+n((I.value.size/1024).toFixed(1))+` KB) `,1)):T(``,!0)]),L.value?(p(),d(`div`,_t,n(L.value),1)):T(``,!0),l(`div`,vt,[c(B,{variant:`outline`,onClick:s[14]||=e=>u(f).close()},{default:y(()=>[...s[30]||=[t(`Cancel`,-1)]]),_:1}),c(B,{variant:`default`,onClick:pe,disabled:u(f).saving||!I.value||!u(f).ns.name.trim()},{default:y(()=>[...s[31]||=[t(` Upload `,-1)]]),_:1},8,[`disabled`])])],64))])]),_:1},8,[`style`])]),_:1},8,[`open`])}}}),[[`__scopeId`,`data-v-e065073f`]]),bt={class:`hist`},xt={class:`hist-toolbar`},St={class:`hist-field`},Ct={class:`hist-field hist-field-grow`},wt={class:`hist-docs-toggle`,title:`Task-status flips, activity entries, and other documentation bookkeeping commits.`},Tt={key:0,class:`hist-state`},Et={key:1,class:`hist-state hist-empty`},Dt={key:2,class:`hist-state hist-error`},Ot={key:3,class:`hist-state hist-empty`},kt={key:4,class:`hist-rail`,role:`list`},At={key:0,class:`hist-state hist-error`},jt={class:`hist-day-head`},Mt=[`onClick`],Nt=[`title`],Pt={class:`hist-main`},Ft={class:`hist-subject`},It={class:`hist-type`},Lt=[`onClick`],Rt={class:`hist-meta`},zt={class:`hist-aside`},Bt=[`title`,`onClick`],Vt=[`datetime`,`title`],Ht={key:0,class:`hist-detail`},Ut={key:0,class:`hist-body`},Wt={key:1,class:`hist-body hist-body-empty`},Gt={key:2,class:`hist-state hist-error`},Kt={key:3,class:`hist-files`},qt=[`onClick`],Jt={class:`hist-file-path`},Yt={class:`hist-file-add`},Xt={class:`hist-file-del`},Zt={key:0,class:`hist-body-empty`},Qt={key:4,class:`hist-state`},$t={class:`hist-more`},en={key:1,class:`hist-end`},tn=R(b({__name:`RepoHistoryPanel`,setup(r){let i=v(),a=j(),s=re(),ee=x([]),m=x(`main`),g=x(``),_=x(``),b=x(``),S=x([]),ne=x(null),C=x(!1),A=x(!1),M=x(``),N=x(!1),P=x(null),F=x({}),I=x({}),L=x(null),R,V=x(!1),ie=D(()=>_e(S.value));function ae(e){return e.outcome===`skipped`?{cls:`skip`,label:`no checks configured`}:e.passed?{cls:`pass`,label:`checks passed`}:{cls:`fail`,label:`checks failed`}}f(async()=>{await oe(),N.value||await U(!1),V.value=!0}),h(g,()=>{V.value&&U(!1)});async function oe(){try{let e=await O(`/api/repo/branches`);if(!e.ok){N.value=!0,M.value=e.error||`This folder is not a git repository.`;return}m.value=e.defaultBranch||`main`,ee.value=e.branches?.length?e.branches:[m.value],g.value||=m.value}catch(e){M.value=e instanceof Error?e.message:`Could not load branches.`}}function se(e){let t=new URLSearchParams;return g.value&&t.set(`branch`,g.value),b.value&&t.set(`path`,b.value),s.historyShowDocsCommits&&t.set(`includeDocs`,`1`),t.set(`limit`,`50`),e&&t.set(`before`,e),`/api/repo/log?${t.toString()}`}function H(e){s.setHistoryShowDocsCommits(e),V.value&&U(!1)}async function U(e){e?A.value=!0:(C.value=!0,S.value=[],ne.value=null,P.value=null),M.value=``,N.value=!1;try{let t=await O(se(e?ne.value:null));if(!t.ok){N.value=/not a git/i.test(t.error??``),M.value=t.error||`Could not load history.`;return}let n=t.commits??[];S.value=e?[...S.value,...n]:n,ne.value=t.nextCursor??null}catch(e){e instanceof k&&e.status===400?M.value=e.message:M.value=e instanceof Error?e.message:`Could not load history.`}finally{C.value=!1,A.value=!1}}function W(){b.value=_.value.trim().replace(/\/+$/,``),U(!1)}async function G(e){if(P.value===e.sha){P.value=null;return}if(P.value=e.sha,!F.value[e.sha])try{let t=await O(`/api/repo/commits/${encodeURIComponent(e.sha)}`);if(!t.ok){I.value={...I.value,[e.sha]:t.error||`Could not load commit.`};return}F.value={...F.value,[e.sha]:t}}catch(t){I.value={...I.value,[e.sha]:t instanceof Error?t.message:`Could not load commit.`}}}async function le(e){try{await navigator.clipboard.writeText(e)}catch{}L.value=e,clearTimeout(R),R=setTimeout(()=>{L.value===e&&(L.value=null)},1200)}async function q(e){let t=a.tasks.find(t=>t.id===e);if(t){await s.openTask(t);return}try{let t=await a.fetchTask(e);await s.openTask(t)}catch{M.value=`Task #${e} is not on this board.`}}function Y(e){return ce(e.subject)}function X(e,t){i.push({name:`commit-diff`,params:{sha:e},query:t?{file:t}:{}})}return(r,i)=>(p(),d(`div`,bt,[l(`div`,xt,[l(`label`,St,[i[3]||=l(`span`,{class:`hist-label`},`Branch`,-1),c(de,{modelValue:g.value,"onUpdate:modelValue":i[0]||=e=>g.value=e},{default:y(()=>[c(ue,{class:`h-[34px] min-w-[180px] rounded-[9px] px-[11px]`,"aria-label":`Branch`},{default:y(()=>[c(Z,{placeholder:m.value},null,8,[`placeholder`])]),_:1}),c(pe,{position:`popper`},{default:y(()=>[c(Q,{class:`min-w-[var(--radix-select-trigger-width)]`},{default:y(()=>[(p(!0),d(w,null,o(ee.value,r=>(p(),e(me,{key:r,value:r},{default:y(()=>[t(n(r),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),l(`form`,{class:`hist-path`,onSubmit:te(W,[`prevent`])},[l(`label`,Ct,[i[4]||=l(`span`,{class:`hist-label`},`Path`,-1),c(K,{modelValue:_.value,"onUpdate:modelValue":i[1]||=e=>_.value=e,class:`h-[34px] py-0`,placeholder:`Filter by path, e.g. src/ui-app`,title:`A trailing slash is ignored. Paths must be relative (no ..).`,"aria-label":`Path filter`},null,8,[`modelValue`])]),c(B,{type:`submit`,variant:`ghost`,size:`sm`,class:`hist-apply`},{default:y(()=>[...i[5]||=[t(`Apply`,-1)]]),_:1})],32),l(`label`,wt,[c(ve,{checked:u(s).historyShowDocsCommits,"aria-label":`Show docs commits`,"onUpdate:checked":H},null,8,[`checked`]),i[6]||=l(`span`,{class:`hist-docs-label`},`Show docs commits`,-1)])]),C.value?(p(),d(`div`,Tt,`Loading history…`)):N.value?(p(),d(`div`,Et,` This folder is not a git repository, so there is no commit history to show. `)):M.value&&!S.value.length?(p(),d(`div`,Dt,n(M.value),1)):S.value.length?(p(),d(`div`,kt,[M.value?(p(),d(`div`,At,n(M.value),1)):T(``,!0),(p(!0),d(w,null,o(ie.value,e=>(p(),d(`section`,{key:e.key,class:`hist-day`},[l(`header`,jt,[i[13]||=l(`span`,{class:`hist-tick`,"aria-hidden":`true`},null,-1),l(`h2`,null,n(e.label),1)]),(p(!0),d(w,null,o(e.commits,e=>(p(),d(`article`,{key:e.sha,class:E([`hist-commit`,{open:P.value===e.sha}]),role:`listitem`},[l(`button`,{class:`hist-row`,type:`button`,onClick:t=>G(e)},[i[15]||=l(`span`,{class:`hist-node`,"aria-hidden":`true`},null,-1),l(`span`,{class:`hist-avatar`,title:e.authorName},n(u(J)(e.authorName)),9,Nt),l(`span`,Pt,[l(`span`,Ft,[Y(e).taskId?(p(),d(w,{key:0},[l(`span`,It,n(Y(e).type)+`(`,1),l(`a`,{class:`hist-task`,href:`#`,onClick:te(t=>q(Y(e).taskId),[`prevent`,`stop`])},n(Y(e).taskId),9,Lt),i[14]||=l(`span`,{class:`hist-type`},`):`,-1),t(` `+n(Y(e).rest),1)],64)):(p(),d(w,{key:1},[t(n(e.subject),1)],64))]),l(`span`,Rt,[(p(!0),d(w,null,o(e.refs,e=>(p(),d(`span`,{key:e,class:E([`hist-ref`,{head:e===`HEAD`}])},n(e),3))),128)),e.check?(p(),d(`span`,{key:0,class:E([`hist-badge`,ae(e.check).cls])},n(ae(e.check).label),3)):T(``,!0)])]),l(`span`,zt,[l(`button`,{type:`button`,class:`hist-sha`,title:L.value===e.sha?`Copied`:e.sha,onClick:te(t=>le(e.sha),[`stop`])},n(L.value===e.sha?`copied`:e.shortSha),9,Bt),l(`time`,{class:`hist-when`,datetime:e.date,title:e.date},n(u(z)(e.date)),9,Vt)])],8,Mt),P.value===e.sha?(p(),d(`div`,Ht,[e.body?(p(),d(`p`,Ut,n(e.body),1)):(p(),d(`p`,Wt,`No commit message body.`)),I.value[e.sha]?(p(),d(`div`,Gt,n(I.value[e.sha]),1)):F.value[e.sha]?(p(),d(`ul`,Kt,[(p(!0),d(w,null,o(F.value[e.sha].files,t=>(p(),d(`li`,{key:t.path},[l(`button`,{type:`button`,class:`hist-file`,onClick:n=>X(e.sha,t.path)},[l(`span`,Jt,n(t.path),1),l(`span`,Yt,`+`+n(t.additions),1),l(`span`,Xt,`−`+n(t.deletions),1)],8,qt)]))),128)),F.value[e.sha].files.length?T(``,!0):(p(),d(`li`,Zt,`No file changes.`))])):(p(),d(`p`,Qt,`Loading changes…`)),c(B,{variant:`accent`,size:`sm`,class:`hist-open-diff`,onClick:t=>X(e.sha)},{default:y(()=>[...i[16]||=[t(`Open diff`,-1)]]),_:1},8,[`onClick`])])):T(``,!0)],2))),128))]))),128)),l(`div`,$t,[ne.value?(p(),e(B,{key:0,variant:`ghost`,disabled:A.value,onClick:i[2]||=e=>U(!0)},{default:y(()=>[t(n(A.value?`Loading…`:`Load more`),1)]),_:1},8,[`disabled`])):(p(),d(`span`,en,`End of history`))])])):(p(),d(`div`,Ot,[u(s).historyShowDocsCommits?b.value?(p(),d(w,{key:1},[t(` No commits touch that path on this branch. `)],64)):(p(),d(w,{key:2},[t(` No commits on this branch yet. `)],64)):(p(),d(w,{key:0},[b.value?(p(),d(w,{key:0},[i[7]||=t(` No non-docs commits touch that path on this branch. Turn on `,-1),i[8]||=l(`strong`,null,`Show docs commits`,-1),i[9]||=t(` above to include documentation bookkeeping. `,-1)],64)):(p(),d(w,{key:1},[i[10]||=t(` Documentation and task-status commits are hidden. Turn on `,-1),i[11]||=l(`strong`,null,`Show docs commits`,-1),i[12]||=t(` above to include them. `,-1)],64))],64))]))]))}}),[[`__scopeId`,`data-v-d4bc8437`]]);function nn(e,t){let n=new Map(t.map(e=>[e.path,e.mtimeMs??0])),r=0,i=0,a=0;for(let[t,a]of n)e.has(t)?e.get(t)!==a&&i++:r++;for(let t of e.keys())n.has(t)||a++;return{added:r,changed:i,removed:a}}function rn(e){if(e.added===0&&e.changed===0&&e.removed===0)return`No changes`;let t=[];return e.added&&t.push(`${e.added} added`),e.changed&&t.push(`${e.changed} changed`),e.removed&&t.push(`${e.removed} removed`),t.join(`, `)}var an={class:`ctx-page`},on={class:`page-header`},sn={class:`page-header-actions ctx-header-actions`},cn={class:`ctx-tabs`},ln={key:1,class:`ctx-refresh-summary`,role:`status`},un={key:0,class:`hist-wrap`},dn={key:1,class:`repo-grid`},fn={key:0,class:`ctx-empty`},pn={key:1,class:`doc-tree`},mn={key:0,class:`ctx-refresh-error`},hn=[`onClick`],gn=[`onClick`],_n={class:`dir-name`},vn={key:0,class:`ctx-empty`},yn=[`onClick`],bn={class:`skill-name`},xn={key:0,class:`skill-desc`},Sn={class:`ctx-discover-head`},Cn={key:0,class:`ctx-refresh-error`},wn={key:1,class:`ctx-empty`},Tn=[`onClick`],En={class:`skill-name`},Dn={class:`ctx-skill-meta`},On={key:0,class:`ctx-installed`},kn={key:0},An={class:`doc-title`},jn={class:`doc-path`},Mn=[`innerHTML`],Nn={key:1,style:{color:`var(--txt-faint)`}},Pn={key:0},Fn={class:`doc-title`},In={class:`doc-path`},Ln={key:0,class:`skill-desc-line`},Rn=[`innerHTML`],zn={key:1,style:{color:`var(--txt-faint)`}},Bn={class:`doc-title`},Vn={class:`ctx-detail-meta`},Hn={class:`ctx-detail-copy`},Un={key:0,class:`ctx-detail-copy`},Wn={class:`ctx-detail-copy`},Gn={key:1,class:`ctx-review-check`},Kn={class:`ctx-detail-actions`},qn=R(b({__name:`ContextView`,setup(a){let g=le(),te=re(),_=ne(),b=v(),{docs:k,selDoc:j,docContent:M,docTitle:N,skills:R,selSkill:z,skillContent:V,skillName:ie,skillDesc:ae}=C(g),oe=[`docs`,`skills`,`discover`,`history`];function se(e){return typeof e==`string`&&oe.includes(e)?e:`docs`}let H=x(se(_.query.tab));function W(e){H.value=e;let t={..._.query};e===`docs`?delete t.tab:t.tab=e,b.replace({query:t})}let G=x(``),K=x([]),ce=x(!1),q=x(``),J=x(null),Y=x(null),Z=x(!1),ue=x(!1),de=D(()=>new Set(R.value.map(e=>e.name)));async function fe(){ce.value=!0,q.value=``;try{let e=G.value.trim().length>=2?`/api/skill-registry/search?q=${encodeURIComponent(G.value.trim())}`:`/api/skill-registry/curated`;K.value=(await O(e)).skills}catch(e){q.value=e instanceof Error?e.message:`Skills.sh is unavailable`}finally{ce.value=!1}}async function pe(e){try{let t=await O(`/api/skill-registry/detail?id=${encodeURIComponent(e.id)}`);J.value=t.detail,Y.value=t.audit,Z.value=!1}catch(e){q.value=e instanceof Error?e.message:`Could not load skill details`}}async function me(){if(!(!J.value||ue.value)){ue.value=!0,q.value=``;try{await O(`/api/skill-registry/install`,A(`POST`,{id:J.value.id})),await g.loadSkills()}catch(e){q.value=e instanceof Error?e.message:`Could not install skill`}finally{ue.value=!1}}}function he(e){let t=R.value.find(t=>t.name===e);t&&(H.value=`skills`,g.loadSkill(t.path))}let Q=x(new Set),_e=x(!1),ve=x(``),ye=x(``),be,xe=x(!1),we=x(null);function Te(){xe.value=!0}function Ee(e){(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),Te())}function De(e){ye.value=e,clearTimeout(be),be=setTimeout(()=>{ye.value=``},5e3)}let Oe=x(null),ke=e=>!!e&&/\.md$/i.test(e),Ae=D(()=>U(M.value)),je=D(()=>U(V.value));async function Me(){await s(),Oe.value&&await $(Oe.value)}h([M,V,H],()=>void Me(),{flush:`post`}),f(()=>{Me(),window.addEventListener(`keydown`,Ee)}),i(()=>{window.removeEventListener(`keydown`,Ee),clearTimeout(be)}),h(H,e=>{e===`discover`&&!K.value.length&&fe()});let Ne;h(G,()=>{clearTimeout(Ne),Ne=setTimeout(()=>void fe(),250)});let Pe=D(()=>Ce(Se(k.value),Q.value));function Fe(e){Q.value.has(e)?Q.value.delete(e):Q.value.add(e)}function Ie(e){return{paddingLeft:`${8+e*16}px`}}async function Le(){_e.value=!0,ve.value=``;let e=new Map(k.value.map(e=>[e.path,e.mtimeMs??0]));try{await g.loadDocs()?(De(rn(nn(e,k.value))),j.value&&!k.value.some(e=>e.path===j.value)&&(k.value.length?g.loadDoc(k.value[0].path):(j.value=null,M.value=``))):ve.value=`Could not refresh docs.`}finally{_e.value=!1}}function Re(){let e=typeof _.query.doc==`string`?_.query.doc:null;!e||!k.value.some(t=>t.path===e)||(H.value!==`docs`&&W(`docs`),j.value!==e&&g.loadDoc(e))}return h(()=>_.query.doc,()=>Re(),{immediate:!0}),h(k,()=>Re()),h(()=>_.query.tab,e=>{let t=se(e);H.value!==t&&(H.value=t)},{immediate:!0}),(i,a)=>(p(),d(`div`,an,[l(`header`,on,[a[11]||=l(`div`,null,[l(`div`,{class:`page-title`},`Repo Context`),l(`div`,{class:`page-desc`},`AI-readable docs · ADRs · skills · history`)],-1),l(`div`,sn,[l(`button`,{ref_key:`contextSearchBtn`,ref:we,type:`button`,class:`ctx-search-trigger search-input`,"aria-label":`Search context docs and skills`,onClick:Te},[...a[9]||=[l(`svg`,{class:`search-ico`,width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`},[l(`circle`,{cx:`11`,cy:`11`,r:`7`,stroke:`currentColor`,"stroke-width":`2`}),l(`path`,{d:`M20 20l-3.5-3.5`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`})],-1),l(`span`,{class:`search-placeholder hidden sm:inline`},`Search docs and skills…`,-1),l(`kbd`,null,`⌘K`,-1)]],512),H.value===`docs`||H.value===`skills`?(p(),e(B,{key:0,variant:`accent`,class:`new-btn`,onClick:a[0]||=e=>H.value===`docs`?u(te).openNewDoc():u(te).openNewSkill()},{default:y(()=>[a[10]||=l(`svg`,{viewBox:`0 0 24 24`,fill:`none`},[l(`path`,{d:`M12 5v14M5 12h14`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`})],-1),t(` `+n(H.value===`docs`?`New doc`:`New skill`),1)]),_:1})):T(``,!0)])]),c(X,{open:xe.value,"onUpdate:open":a[1]||=e=>xe.value=e,scope:`context`,"return-focus-el":we.value},null,8,[`open`,`return-focus-el`]),l(`div`,cn,[l(`button`,{class:E([`ctx-tab`,{on:H.value===`docs`}]),onClick:a[2]||=e=>W(`docs`)},`Docs`,2),l(`button`,{class:E([`ctx-tab`,{on:H.value===`skills`}]),onClick:a[3]||=e=>W(`skills`)},` Skills `,2),l(`button`,{class:E([`ctx-tab`,{on:H.value===`discover`}]),onClick:a[4]||=e=>W(`discover`)},` Discover `,2),l(`button`,{class:E([`ctx-tab`,{on:H.value===`history`}]),onClick:a[5]||=e=>W(`history`)},` History `,2),H.value===`docs`?(p(),e(B,{key:0,variant:`ghost`,size:`sm`,class:`ctx-refresh-btn`,disabled:_e.value,title:`Refresh documentation`,onClick:Le},{default:y(()=>[c(u(P),{class:E([`size-4`,{refreshing:_e.value}])},null,8,[`class`])]),_:1},8,[`disabled`])):T(``,!0),ye.value?(p(),d(`span`,ln,n(ye.value),1)):T(``,!0)]),H.value===`history`?(p(),d(`div`,un,[c(ge,{class:`hist-card`},{default:y(()=>[c(tn)]),_:1})])):(p(),d(`div`,dn,[c(ge,{class:`doc-list`},{default:y(()=>[H.value===`docs`?(p(),d(w,{key:0},[u(k).length?(p(),d(`div`,pn,[ve.value?(p(),d(`div`,mn,n(ve.value),1)):T(``,!0),(p(!0),d(w,null,o(Pe.value,t=>(p(),d(w,{key:t.key},[t.isFile?(p(),d(`div`,{key:0,class:E([`tree-item tree-file`,{sel:u(j)===t.path}]),style:r(Ie(t.depth)),onClick:e=>u(g).loadDoc(t.path)},[c(u(F),{class:`size-4`}),l(`span`,null,n(t.name),1)],14,hn)):(p(),d(`div`,{key:1,class:`tree-item tree-dir`,style:r(Ie(t.depth)),onClick:e=>Fe(t.key)},[Q.value.has(t.key)?(p(),e(u(I),{key:0,class:`size-4 chevron`})):(p(),e(u(L),{key:1,class:`size-4 chevron`})),l(`span`,_n,n(t.name),1)],12,gn))],64))),128))])):(p(),d(`div`,fn,`No docs found.`))],64)):H.value===`skills`?(p(),d(w,{key:1},[u(R).length?T(``,!0):(p(),d(`div`,vn,[...a[12]||=[t(` No skills yet — add a `,-1),l(`code`,null,`skills/<name>/SKILL.md`,-1),t(`. `,-1)]])),(p(!0),d(w,null,o(u(R),e=>(p(),d(`div`,{key:e.path,class:E([`skill-row`,{sel:u(z)===e.path}]),onClick:t=>u(g).loadSkill(e.path)},[l(`span`,bn,[a[13]||=l(`svg`,{viewBox:`0 0 24 24`,fill:`none`},[l(`path`,{d:`M13 2L4.5 13.5H11L9.5 22 19.5 10H13L13 2z`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linejoin":`round`})],-1),t(` `+n(e.name),1)]),e.description?(p(),d(`span`,xn,n(e.description),1)):T(``,!0)],10,yn))),128))],64)):(p(),d(w,{key:2},[l(`div`,Sn,[a[14]||=l(`strong`,null,`Skills.sh curated catalog`,-1),a[15]||=l(`span`,null,`Inspect files and audits before installing into this project.`,-1),ee(l(`input`,{"onUpdate:modelValue":a[6]||=e=>G.value=e,class:`ctx-skill-search`,placeholder:`Search skills`},null,512),[[S,G.value]])]),q.value?(p(),d(`div`,Cn,n(q.value),1)):ce.value?(p(),d(`div`,wn,`Loading Skills.sh…`)):T(``,!0),(p(!0),d(w,null,o(K.value,e=>(p(),d(`button`,{key:e.id,type:`button`,class:E([`skill-row ctx-catalog-skill`,{sel:J.value?.id===e.id}]),onClick:t=>pe(e)},[l(`span`,En,n(e.name),1),l(`span`,Dn,n(e.source)+` · `+n(e.installs.toLocaleString())+` installs`,1),de.value.has(e.slug)?(p(),d(`span`,On,`Installed`)):T(``,!0)],10,Tn))),128))],64))]),_:1}),c(ge,{class:`doc-view`},{default:y(()=>[H.value===`docs`?(p(),d(w,{key:0},[u(M)?(p(),d(`div`,kn,[l(`div`,An,n(u(N)),1),l(`div`,jn,n(u(j)),1),ke(u(j))?(p(),d(`div`,{key:0,ref_key:`markdownRoot`,ref:Oe,class:`md-rendered`,innerHTML:Ae.value},null,8,Mn)):(p(),d(w,{key:1},[t(n(u(M)),1)],64))])):(p(),d(`div`,Nn,`Select a document.`))],64)):H.value===`skills`?(p(),d(w,{key:1},[u(V)?(p(),d(`div`,Pn,[l(`div`,Fn,n(u(ie)),1),l(`div`,In,n(u(z)),1),u(ae)?(p(),d(`div`,Ln,n(u(ae)),1)):T(``,!0),ke(u(z))?(p(),d(`div`,{key:1,ref_key:`markdownRoot`,ref:Oe,class:`md-rendered`,innerHTML:je.value},null,8,Rn)):(p(),d(w,{key:2},[t(n(u(V)),1)],64))])):(p(),d(`div`,zn,`Select a skill.`))],64)):(p(),d(w,{key:2},[J.value?(p(),d(w,{key:0},[l(`div`,Bn,n(J.value.slug),1),l(`div`,Vn,n(J.value.source)+` · `+n(J.value.installs.toLocaleString())+` installs · `+n(J.value.hash??`unhashed`),1),l(`div`,Hn,[t(n(J.value.files?.length??0)+` files will be copied into `,1),l(`code`,null,`skills/`+n(J.value.slug)+`/`,1),a[16]||=t(` and locked in `,-1),a[17]||=l(`code`,null,`skills.lock.json`,-1),a[18]||=t(`. `,-1)]),Y.value?.audits?.length?(p(),d(`div`,Un,[a[20]||=l(`strong`,null,`Security audits`,-1),a[21]||=l(`br`,null,null,-1),(p(!0),d(w,null,o(Y.value.audits,e=>(p(),d(`span`,{key:e.provider},[t(n(e.provider)+`: `+n(e.status)+` — `+n(e.summary),1),a[19]||=l(`br`,null,null,-1)]))),128))])):T(``,!0),l(`details`,Wn,[a[22]||=l(`summary`,null,`Review files before installing`,-1),(p(!0),d(w,null,o(J.value.files,e=>(p(),d(`pre`,{key:e.path},[l(`strong`,null,n(e.path),1),t(`\\n`+n(e.contents),1)]))),128))]),de.value.has(J.value.slug)?T(``,!0):(p(),d(`label`,Gn,[ee(l(`input`,{"onUpdate:modelValue":a[7]||=e=>Z.value=e,type:`checkbox`},null,512),[[m,Z.value]]),a[23]||=t(` I reviewed these files and want to add this skill to the project. `,-1)])),l(`div`,Kn,[de.value.has(J.value.slug)?(p(),e(B,{key:0,variant:`accent`,onClick:a[8]||=e=>he(J.value.slug)},{default:y(()=>[...a[24]||=[t(`Open installed skill`,-1)]]),_:1})):(p(),e(B,{key:1,variant:`accent`,disabled:ue.value||!Z.value,onClick:me},{default:y(()=>[t(n(ue.value?`Installing…`:`Install to project`),1)]),_:1},8,[`disabled`]))])],64)):(p(),d(w,{key:1},[a[25]||=l(`div`,{class:`doc-title`},`Discover skills`,-1),a[26]||=l(`div`,{class:`skill-desc-line`},` Select a skill to inspect its exact files, content hash, publisher, and security audit before installing it. `,-1)],64))],64))]),_:1})])),c(Ye),c(yt)]))}}),[[`__scopeId`,`data-v-3574b0bc`]]);export{qn as default};