@piwitests/server 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{Dz55UR7w.js → 36cXPVrY.js} +1 -1
  3. package/.output/public/_nuxt/{IFqRT_xJ.js → 87SGk1nu.js} +1 -1
  4. package/.output/public/_nuxt/{bAfTAihV.js → AjuKBlzz.js} +1 -1
  5. package/.output/public/_nuxt/{1AB111xL.js → B1CB30tg.js} +1 -1
  6. package/.output/public/_nuxt/{Br2K9yi_.js → B6IHiVa1.js} +1 -1
  7. package/.output/public/_nuxt/{iwD5atI2.js → B6rt3IcG.js} +1 -1
  8. package/.output/public/_nuxt/{Bvfmwzgw.js → BAaSmp8J.js} +1 -1
  9. package/.output/public/_nuxt/{DRtTLQri.js → BAkJhSAW.js} +1 -1
  10. package/.output/public/_nuxt/{DuBBqqbF.js → BCArQk0c.js} +1 -1
  11. package/.output/public/_nuxt/{BV83yObd.js → BEB2Mv6B.js} +1 -1
  12. package/.output/public/_nuxt/BFjmLXYo.js +8 -0
  13. package/.output/public/_nuxt/BJltXwHg.js +1 -0
  14. package/.output/public/_nuxt/{CuYYdFBL.js → BKaU95es.js} +1 -1
  15. package/.output/public/_nuxt/{2xvsvjLO.js → BReNbog6.js} +1 -1
  16. package/.output/public/_nuxt/{DJS3Bf50.js → BTYiG93l.js} +1 -1
  17. package/.output/public/_nuxt/{k-z_VVTK.js → BUMZHDRC.js} +1 -1
  18. package/.output/public/_nuxt/BVDBIVAQ.js +1 -0
  19. package/.output/public/_nuxt/{JCFZINev.js → B_aSGB8S.js} +1 -1
  20. package/.output/public/_nuxt/{e1zUTrBb.js → BaDv5D7A.js} +1 -1
  21. package/.output/public/_nuxt/{DjZKuUMz.js → BdHdHyop.js} +1 -1
  22. package/.output/public/_nuxt/{CJFqA_QW.js → BfoG8R5a.js} +1 -1
  23. package/.output/public/_nuxt/{CgoAUz76.js → Bi3i470l.js} +1 -1
  24. package/.output/public/_nuxt/Bi9DO8jm.js +1 -0
  25. package/.output/public/_nuxt/{BS0gKVuF.js → BiX7c2qU.js} +1 -1
  26. package/.output/public/_nuxt/{-KQO1A4C.js → BoC6qaRF.js} +4 -4
  27. package/.output/public/_nuxt/{CSYJwpXG.js → BsDB_eCd.js} +1 -1
  28. package/.output/public/_nuxt/{B43OGXzV.js → BuuvTH9e.js} +1 -1
  29. package/.output/public/_nuxt/{BRKa6EQR.js → C11lmBd4.js} +1 -1
  30. package/.output/public/_nuxt/C4AfzZER.js +47 -0
  31. package/.output/public/_nuxt/{BBdfPriC.js → C7ZVzS0K.js} +1 -1
  32. package/.output/public/_nuxt/{CQeMb57w.js → C8cz5feG.js} +1 -1
  33. package/.output/public/_nuxt/{Dzz9_Z0u.js → C9EpbPNU.js} +1 -1
  34. package/.output/public/_nuxt/{qzAP_nm7.js → C9ahP7km.js} +1 -1
  35. package/.output/public/_nuxt/{N3pCB6-m.js → CBEM3L1q.js} +1 -1
  36. package/.output/public/_nuxt/{C1K3r_fc.js → CCsl9MOZ.js} +1 -1
  37. package/.output/public/_nuxt/{BpceIssd.js → CCw3Tx4S.js} +1 -1
  38. package/.output/public/_nuxt/{B3NbDoBP.js → CGq9qR-0.js} +1 -1
  39. package/.output/public/_nuxt/{BoRFLTAO.js → CLdGRzLL.js} +1 -1
  40. package/.output/public/_nuxt/{BZekCf_x.js → CP0vUzbd.js} +1 -1
  41. package/.output/public/_nuxt/CPZ5wygb.js +1 -0
  42. package/.output/public/_nuxt/{CTdvGdc2.js → CRcjGmf7.js} +1 -1
  43. package/.output/public/_nuxt/{B2lYFco4.js → CRpbGS75.js} +1 -1
  44. package/.output/public/_nuxt/CTgM5Fke.js +2 -0
  45. package/.output/public/_nuxt/{DcCNnjKl.js → CU3W9YrI.js} +1 -1
  46. package/.output/public/_nuxt/{BIksQZfR.js → CUDeMcEK.js} +1 -1
  47. package/.output/public/_nuxt/{BpNqHxg2.js → CYIR2GbL.js} +1 -1
  48. package/.output/public/_nuxt/{ze9-Ill2.js → Ccit_CX1.js} +1 -1
  49. package/.output/public/_nuxt/CiPH-swI.js +1 -0
  50. package/.output/public/_nuxt/{BkDfdHFm.js → ClIKZ4qY.js} +1 -1
  51. package/.output/public/_nuxt/{BVW5qIDP.js → ClVRQpP_.js} +1 -1
  52. package/.output/public/_nuxt/CmbjAoQu.js +1 -0
  53. package/.output/public/_nuxt/Cx65B3c3.js +1 -0
  54. package/.output/public/_nuxt/{B3sNtVnf.js → D1ttGJfs.js} +1 -1
  55. package/.output/public/_nuxt/{DuMv-ugy.js → D3MWm6JP.js} +1 -1
  56. package/.output/public/_nuxt/{BPKwYP2Q.js → D3SYPlEB.js} +28 -28
  57. package/.output/public/_nuxt/{BGYbnqA7.js → D4SFgXAf.js} +1 -1
  58. package/.output/public/_nuxt/D51_cB9D.js +1 -0
  59. package/.output/public/_nuxt/{DbeHHTk-.js → D8YZvjas.js} +1 -1
  60. package/.output/public/_nuxt/{DgYM3eyi.js → DB3ljns7.js} +1 -1
  61. package/.output/public/_nuxt/{Bzl2H_vl.js → DC51KKt4.js} +1 -1
  62. package/.output/public/_nuxt/{BR9H8k-L.js → DCMFuzDI.js} +1 -1
  63. package/.output/public/_nuxt/{mfzslNx_.js → DIA_NAIv.js} +1 -1
  64. package/.output/public/_nuxt/{CKB_doYB.js → DM_YaJgJ.js} +1 -1
  65. package/.output/public/_nuxt/{BuZOa2M3.js → DOr_4nln.js} +2 -2
  66. package/.output/public/_nuxt/{oNq5pd3r.js → DRE6Aqqp.js} +1 -1
  67. package/.output/public/_nuxt/{CMYQpoOI.js → DVgMaBxD.js} +1 -1
  68. package/.output/public/_nuxt/{C3r_Sv1p.js → DaewB_zT.js} +1 -1
  69. package/.output/public/_nuxt/{DdbrJwT-.js → Db_-yjYg.js} +1 -1
  70. package/.output/public/_nuxt/{CpO-ABDW.js → Dbg8z684.js} +1 -1
  71. package/.output/public/_nuxt/{DOuoR2Pk.js → DcfRfTaA.js} +1 -1
  72. package/.output/public/_nuxt/{BpIsBP5g.js → Dm1_3W9g.js} +1 -1
  73. package/.output/public/_nuxt/{ABGJk0pu.js → DnThe2U0.js} +1 -1
  74. package/.output/public/_nuxt/{C38aZbFJ.js → Do6zIWQf.js} +1 -1
  75. package/.output/public/_nuxt/{B7yG1G_l.js → DoFSKAvY.js} +1 -1
  76. package/.output/public/_nuxt/{C8RBRg7I.js → DoYgYLOd.js} +1 -1
  77. package/.output/public/_nuxt/{BIf1R_fu.js → Doul3p1_.js} +1 -1
  78. package/.output/public/_nuxt/{BQrSEuzu.js → DraETso1.js} +1 -1
  79. package/.output/public/_nuxt/{DszOHBMG.js → Dwp3GkV-.js} +1 -1
  80. package/.output/public/_nuxt/{DqnyWaSQ.js → Dy4TloG3.js} +1 -1
  81. package/.output/public/_nuxt/{DfcAIbcX.js → EltzgiyS.js} +1 -1
  82. package/.output/public/_nuxt/{D2jhe9JK.js → HTQtMbWb.js} +1 -1
  83. package/.output/public/_nuxt/{xUrLy-Zn.js → KYucVFu7.js} +1 -1
  84. package/.output/public/_nuxt/TBDx0s9p.js +3 -0
  85. package/.output/public/_nuxt/{BdFEUAlx.js → Tt5LX5Y-.js} +1 -1
  86. package/.output/public/_nuxt/{d5ZB3uxF.js → Vnfkr1pJ.js} +1 -1
  87. package/.output/public/_nuxt/{DIkLLyR6.js → WAaPPk0g.js} +2 -2
  88. package/.output/public/_nuxt/builds/latest.json +1 -1
  89. package/.output/public/_nuxt/builds/meta/ed1db2e5-9865-4231-9605-4edd5272e164.json +1 -0
  90. package/.output/public/_nuxt/{DhA17dqR.js → empGC_x-.js} +1 -1
  91. package/.output/public/_nuxt/entry.ChQMshd4.css +1 -0
  92. package/.output/public/_nuxt/{nCjfWTGm.js → l0QnzFNM.js} +1 -1
  93. package/.output/public/_nuxt/{l0gdGdar.js → lowCGL2S.js} +1 -1
  94. package/.output/public/_nuxt/{DL20rwkA.js → mlAADjK3.js} +1 -1
  95. package/.output/public/_nuxt/{D33On6AX.js → n-QWmQgc.js} +1 -1
  96. package/.output/public/_nuxt/{CoHGrO41.js → oFIS9u6t.js} +2 -2
  97. package/.output/public/_nuxt/{BY4oA2IH.js → oWY3I9uX.js} +1 -1
  98. package/.output/public/_nuxt/{D4VpoHDP.js → q0DPzLKN.js} +1 -1
  99. package/.output/public/_nuxt/{uKeO2H7F.js → quV6tp4n.js} +1 -1
  100. package/.output/public/_nuxt/{B33X4zrC.js → riEUDnED.js} +1 -1
  101. package/.output/public/_nuxt/{mGJLLqyN.js → rm7OkgDG.js} +1 -1
  102. package/.output/public/_nuxt/uaqMzXqE.js +5 -0
  103. package/.output/public/_nuxt/{DAWn6Z7h.js → va1mwSm9.js} +1 -1
  104. package/.output/public/_nuxt/{DCpmQ47_.js → wGpfdK6o.js} +1 -1
  105. package/.output/public/_nuxt/{Bb64FEFL.js → wQZj69OY.js} +1 -1
  106. package/.output/public/_nuxt/wgcgHmRR.js +1 -0
  107. package/.output/public/sw.js +1 -1
  108. package/.output/server/chunks/build/{Checkbox-7ZiMz60w.mjs → Checkbox-cVOSIY93.mjs} +2 -2
  109. package/.output/server/chunks/build/Checkbox-cVOSIY93.mjs.map +1 -0
  110. package/.output/server/chunks/build/{CiEnvCard-DNxBVvx4.mjs → CiEnvCard-DXPOhdSG.mjs} +2 -2
  111. package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs.map +1 -0
  112. package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs +102 -0
  113. package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs.map +1 -0
  114. package/.output/server/chunks/build/{ProjectTestCasesTable-9418EI8J.mjs → ProjectTestCasesTable-9Ia825h8.mjs} +2 -2
  115. package/.output/server/chunks/build/ProjectTestCasesTable-9Ia825h8.mjs.map +1 -0
  116. package/.output/server/chunks/build/{Select-COwTIQlV.mjs → Select-ppPz926C.mjs} +3 -2
  117. package/.output/server/chunks/build/Select-ppPz926C.mjs.map +1 -0
  118. package/.output/server/chunks/build/{SelectMenu-BkyAHFCM.mjs → SelectMenu-799c_Ils.mjs} +2 -2
  119. package/.output/server/chunks/build/{SelectMenu-BkyAHFCM.mjs.map → SelectMenu-799c_Ils.mjs.map} +1 -1
  120. package/.output/server/chunks/build/{Switch-htSKgC38.mjs → Switch-xQQ3_ME1.mjs} +2 -2
  121. package/.output/server/chunks/build/Switch-xQQ3_ME1.mjs.map +1 -0
  122. package/.output/server/chunks/build/{_id_-CnwAyvvS.mjs → _id_-B2yirIuA.mjs} +5 -4
  123. package/.output/server/chunks/build/{_id_-CnwAyvvS.mjs.map → _id_-B2yirIuA.mjs.map} +1 -1
  124. package/.output/server/chunks/build/{_id_-BDqvTM9D.mjs → _id_-B4V5fop6.mjs} +5 -4
  125. package/.output/server/chunks/build/{_id_-BDqvTM9D.mjs.map → _id_-B4V5fop6.mjs.map} +1 -1
  126. package/.output/server/chunks/build/{_id_-Dy67M9Dj.mjs → _id_-bWcP2xFl.mjs} +8 -7
  127. package/.output/server/chunks/build/{_id_-Dy67M9Dj.mjs.map → _id_-bWcP2xFl.mjs.map} +1 -1
  128. package/.output/server/chunks/build/about-CoJjvUwM.mjs +733 -0
  129. package/.output/server/chunks/build/about-CoJjvUwM.mjs.map +1 -0
  130. package/.output/server/chunks/build/{ai-V3YOh3yx.mjs → ai-7jdaPOmj.mjs} +6 -5
  131. package/.output/server/chunks/build/{ai-V3YOh3yx.mjs.map → ai-7jdaPOmj.mjs.map} +1 -1
  132. package/.output/server/chunks/build/{analytics-BBlAEmj5.mjs → analytics-B276WPeU.mjs} +7 -6
  133. package/.output/server/chunks/build/{analytics-BBlAEmj5.mjs.map → analytics-B276WPeU.mjs.map} +1 -1
  134. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  135. package/.output/server/chunks/build/{default-BfMirIgG.mjs → default-BSzdkM_L.mjs} +9 -7
  136. package/.output/server/chunks/build/default-BSzdkM_L.mjs.map +1 -0
  137. package/.output/server/chunks/build/{docs-DtNcJCyb.mjs → docs-BN_x1OW3.mjs} +53 -8
  138. package/.output/server/chunks/build/{docs-DtNcJCyb.mjs.map → docs-BN_x1OW3.mjs.map} +1 -1
  139. package/.output/server/chunks/build/{edit-Dsf11mL5.mjs → edit-C9Z7oZeu.mjs} +5 -4
  140. package/.output/server/chunks/build/edit-C9Z7oZeu.mjs.map +1 -0
  141. package/.output/server/chunks/build/handleAndDispatchCustomEvent-Bk_AVSSo.mjs +13 -0
  142. package/.output/server/chunks/build/handleAndDispatchCustomEvent-Bk_AVSSo.mjs.map +1 -0
  143. package/.output/server/chunks/build/{index-DzEgjHlB.mjs → index-BK9PTRpd.mjs} +24 -8
  144. package/.output/server/chunks/build/{index-DzEgjHlB.mjs.map → index-BK9PTRpd.mjs.map} +1 -1
  145. package/.output/server/chunks/build/{index-BgpEKTSq.mjs → index-DVUtBexc.mjs} +9 -8
  146. package/.output/server/chunks/build/{index-BgpEKTSq.mjs.map → index-DVUtBexc.mjs.map} +1 -1
  147. package/.output/server/chunks/build/{mcp-CXwa3xU3.mjs → mcp-_o6cMS6m.mjs} +347 -158
  148. package/.output/server/chunks/build/mcp-_o6cMS6m.mjs.map +1 -0
  149. package/.output/server/chunks/build/{notifications-hJj8tbAT.mjs → notifications-Dzm9c0u_.mjs} +4 -3
  150. package/.output/server/chunks/build/notifications-Dzm9c0u_.mjs.map +1 -0
  151. package/.output/server/chunks/build/server.mjs +17 -17
  152. package/.output/server/chunks/build/{settings-metadata-Cp0dx0vm.mjs → settings-metadata-B0wo5R-W.mjs} +3 -1
  153. package/.output/server/chunks/build/settings-metadata-B0wo5R-W.mjs.map +1 -0
  154. package/.output/server/chunks/build/{settings-Ci_7EXYQ.mjs → settings-pNyPBXVa.mjs} +4 -3
  155. package/.output/server/chunks/build/settings-pNyPBXVa.mjs.map +1 -0
  156. package/.output/server/chunks/build/{storage-CM-Pd-9E.mjs → storage-XelzuyPy.mjs} +16 -182
  157. package/.output/server/chunks/build/storage-XelzuyPy.mjs.map +1 -0
  158. package/.output/server/chunks/build/{test-cases-DkGQB027.mjs → test-cases-pmOxi-AN.mjs} +5 -4
  159. package/.output/server/chunks/build/test-cases-pmOxi-AN.mjs.map +1 -0
  160. package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs +9 -0
  161. package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs.map +1 -0
  162. package/.output/server/chunks/build/useIsDesktop-BS13spVj.mjs +9 -0
  163. package/.output/server/chunks/build/useIsDesktop-BS13spVj.mjs.map +1 -0
  164. package/.output/server/chunks/build/{useSettingsNav-D2knPCqF.mjs → useSettingsNav-NjI2seBy.mjs} +5 -3
  165. package/.output/server/chunks/build/useSettingsNav-NjI2seBy.mjs.map +1 -0
  166. package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs +7 -0
  167. package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs.map +1 -0
  168. package/.output/server/chunks/build/{virtualizer-0-UBy7xl.mjs → virtualizer-ZaqK4guJ.mjs} +3 -2
  169. package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs.map +1 -0
  170. package/.output/server/chunks/build/{wasted-time-L4kBV5Nh.mjs → wasted-time-CguAF9zc.mjs} +2 -2
  171. package/.output/server/chunks/build/wasted-time-CguAF9zc.mjs.map +1 -0
  172. package/.output/server/chunks/nitro/nitro.mjs +664 -649
  173. package/.output/server/package.json +1 -1
  174. package/package.json +1 -1
  175. package/.output/public/_nuxt/B6Jp7fpa.js +0 -46
  176. package/.output/public/_nuxt/BP_SWi7S.js +0 -1
  177. package/.output/public/_nuxt/Bf62wdzp.js +0 -1
  178. package/.output/public/_nuxt/C219JuBV.js +0 -1
  179. package/.output/public/_nuxt/CCRRqXez.js +0 -1
  180. package/.output/public/_nuxt/CX1dcT4v.js +0 -1
  181. package/.output/public/_nuxt/CdME81ij.js +0 -2
  182. package/.output/public/_nuxt/Dsk4Ic18.js +0 -7
  183. package/.output/public/_nuxt/HoKG9cc2.js +0 -1
  184. package/.output/public/_nuxt/Kc7La4sL.js +0 -5
  185. package/.output/public/_nuxt/WctJXszi.js +0 -3
  186. package/.output/public/_nuxt/builds/meta/5182c9fb-56a6-4df2-9685-4020a08ce7a5.json +0 -1
  187. package/.output/public/_nuxt/entry.BsmKRJzR.css +0 -1
  188. package/.output/public/_nuxt/jIF87ALb.js +0 -1
  189. package/.output/server/chunks/build/Checkbox-7ZiMz60w.mjs.map +0 -1
  190. package/.output/server/chunks/build/CiEnvCard-DNxBVvx4.mjs.map +0 -1
  191. package/.output/server/chunks/build/ProjectTestCasesTable-9418EI8J.mjs.map +0 -1
  192. package/.output/server/chunks/build/Select-COwTIQlV.mjs.map +0 -1
  193. package/.output/server/chunks/build/Switch-htSKgC38.mjs.map +0 -1
  194. package/.output/server/chunks/build/about-FB9PYAHK.mjs +0 -313
  195. package/.output/server/chunks/build/about-FB9PYAHK.mjs.map +0 -1
  196. package/.output/server/chunks/build/default-BfMirIgG.mjs.map +0 -1
  197. package/.output/server/chunks/build/edit-Dsf11mL5.mjs.map +0 -1
  198. package/.output/server/chunks/build/mcp-CXwa3xU3.mjs.map +0 -1
  199. package/.output/server/chunks/build/notifications-hJj8tbAT.mjs.map +0 -1
  200. package/.output/server/chunks/build/settings-Ci_7EXYQ.mjs.map +0 -1
  201. package/.output/server/chunks/build/settings-metadata-Cp0dx0vm.mjs.map +0 -1
  202. package/.output/server/chunks/build/storage-CM-Pd-9E.mjs.map +0 -1
  203. package/.output/server/chunks/build/test-cases-DkGQB027.mjs.map +0 -1
  204. package/.output/server/chunks/build/useFormControl-DFTjniPG.mjs +0 -19
  205. package/.output/server/chunks/build/useFormControl-DFTjniPG.mjs.map +0 -1
  206. package/.output/server/chunks/build/useSettingsNav-D2knPCqF.mjs.map +0 -1
  207. package/.output/server/chunks/build/virtualizer-0-UBy7xl.mjs.map +0 -1
  208. package/.output/server/chunks/build/wasted-time-L4kBV5Nh.mjs.map +0 -1
@@ -1,17 +1,19 @@
1
1
  import { _ as _sfc_main$1, a as _sfc_main$4 } from './DashboardNavbar-Bdp-OwTN.mjs';
2
2
  import { _ as _sfc_main$2 } from './Alert-Bp1Wz_sq.mjs';
3
3
  import { _ as __nuxt_component_11 } from './SectionCard-COd9TuDq.mjs';
4
- import { l as useHead, o as _sfc_main$p, m as _sfc_main$k, r as useRuntimeConfig, L as useRequestEvent } from './server.mjs';
4
+ import { l as useHead, m as _sfc_main$k, o as _sfc_main$p, r as useRuntimeConfig, L as useRequestEvent } from './server.mjs';
5
5
  import { _ as _sfc_main$3 } from './Tabs-BV9XqjoO.mjs';
6
6
  import { _ as __nuxt_component_5 } from './CodeBlock-BGwNmJ8J.mjs';
7
- import { defineComponent, computed, withCtx, unref, createVNode, openBlock, createBlock, Fragment, renderList, toDisplayString, createTextVNode, createCommentVNode, useSSRContext } from 'vue';
8
- import { ssrRenderComponent, ssrRenderList, ssrInterpolate } from 'vue/server-renderer';
7
+ import { defineComponent, withAsyncContext, computed, withCtx, unref, createVNode, createTextVNode, openBlock, createBlock, toDisplayString, createCommentVNode, Fragment, renderList, useSSRContext } from 'vue';
8
+ import { ssrRenderComponent, ssrInterpolate, ssrRenderList } from 'vue/server-renderer';
9
9
  import { df as MCP_TOOL_DEFS, dg as getRequestURL } from '../nitro/nitro.mjs';
10
+ import { u as useIsDesktop } from './useIsDesktop-BS13spVj.mjs';
11
+ import { u as useCopy } from './useCopy-BQQKcwlq.mjs';
12
+ import { u as useFetch } from './fetch-8kznMtBM.mjs';
10
13
  import './DashboardSidebarToggle-Ji6ADuqF.mjs';
11
14
  import './Card-BQP_oZkQ.mjs';
12
15
  import './HelpHint-YEMWtKu1.mjs';
13
16
  import './help-content-DmFnuhNu.mjs';
14
- import './useCopy-BQQKcwlq.mjs';
15
17
  import 'vue-router';
16
18
  import '@iconify/vue';
17
19
  import 'tailwindcss/colors';
@@ -64,21 +66,36 @@ import 'highlight.js/lib/languages/javascript';
64
66
  import 'highlight.js/lib/languages/bash';
65
67
  import 'highlight.js/lib/languages/json';
66
68
  import 'highlight.js/lib/languages/diff';
69
+ import '@vue/shared';
67
70
 
68
71
  function useRequestURL(opts) {
69
72
  {
70
73
  return getRequestURL(useRequestEvent(), opts);
71
74
  }
72
75
  }
76
+ const apiKeyPlaceholder = "pd_YOUR_API_KEY";
73
77
  const _sfc_main = /* @__PURE__ */ defineComponent({
74
78
  __name: "mcp",
75
79
  __ssrInlineRender: true,
76
- setup(__props) {
80
+ async setup(__props) {
81
+ let __temp, __restore;
77
82
  const config = useRuntimeConfig();
78
83
  const isDemo = config.public.demoMode;
84
+ const isDesktop = useIsDesktop();
85
+ const { copy } = useCopy();
86
+ const { data: reporterConfig } = ([__temp, __restore] = withAsyncContext(() => useFetch(
87
+ "/api/desktop/reporter-config",
88
+ {
89
+ immediate: isDesktop,
90
+ default: () => null
91
+ },
92
+ "$fdl6kilREP"
93
+ /* nuxt-injected */
94
+ )), __temp = await __temp, __restore(), __temp);
95
+ const bearerToken = computed(() => reporterConfig.value?.token ?? apiKeyPlaceholder);
79
96
  const requestUrl = useRequestURL();
80
97
  const mcpUrl = computed(() => {
81
- const base = config.public.siteUrl || requestUrl.origin;
98
+ const base = reporterConfig.value?.url ?? config.public.siteUrl ?? requestUrl.origin;
82
99
  return `${base}/mcp`;
83
100
  });
84
101
  useHead({ title: "MCP server — Piwi Dashboard" });
@@ -93,7 +110,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
93
110
  ];
94
111
  const claudeCodeSnippet = computed(
95
112
  () => `claude mcp add --transport http piwi ${mcpUrl.value} \\
96
- --header "Authorization: Bearer pd_YOUR_API_KEY"`
113
+ --header "Authorization: Bearer ${bearerToken.value}"`
97
114
  );
98
115
  const cursorSnippet = computed(
99
116
  () => JSON.stringify(
@@ -101,7 +118,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
101
118
  mcpServers: {
102
119
  piwi: {
103
120
  url: mcpUrl.value,
104
- headers: { Authorization: "Bearer pd_YOUR_API_KEY" }
121
+ headers: { Authorization: `Bearer ${bearerToken.value}` }
105
122
  }
106
123
  }
107
124
  },
@@ -116,7 +133,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
116
133
  piwi: {
117
134
  type: "http",
118
135
  url: mcpUrl.value,
119
- headers: { Authorization: "Bearer pd_YOUR_API_KEY" }
136
+ headers: { Authorization: `Bearer ${bearerToken.value}` }
120
137
  }
121
138
  }
122
139
  },
@@ -131,7 +148,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
131
148
  piwi: {
132
149
  type: "http",
133
150
  url: mcpUrl.value,
134
- headers: { Authorization: "Bearer pd_YOUR_API_KEY" }
151
+ headers: { Authorization: `Bearer ${bearerToken.value}` }
135
152
  }
136
153
  }
137
154
  },
@@ -141,7 +158,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
141
158
  );
142
159
  const geminiSnippet = computed(
143
160
  () => `gemini mcp add --transport http piwi ${mcpUrl.value} \\
144
- --header "Authorization: Bearer pd_YOUR_API_KEY"`
161
+ --header "Authorization: Bearer ${bearerToken.value}"`
145
162
  );
146
163
  const windsurfSnippet = computed(
147
164
  () => JSON.stringify(
@@ -149,7 +166,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
149
166
  mcpServers: {
150
167
  piwi: {
151
168
  serverUrl: mcpUrl.value,
152
- headers: { Authorization: "Bearer pd_YOUR_API_KEY" }
169
+ headers: { Authorization: `Bearer ${bearerToken.value}` }
153
170
  }
154
171
  }
155
172
  },
@@ -162,10 +179,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
162
179
  const _component_UDashboardNavbar = _sfc_main$4;
163
180
  const _component_UAlert = _sfc_main$2;
164
181
  const _component_SectionCard = __nuxt_component_11;
165
- const _component_UIcon = _sfc_main$p;
182
+ const _component_UButton = _sfc_main$k;
166
183
  const _component_UTabs = _sfc_main$3;
167
184
  const _component_CodeBlock = __nuxt_component_5;
168
- const _component_UButton = _sfc_main$k;
185
+ const _component_UIcon = _sfc_main$p;
169
186
  _push(ssrRenderComponent(_component_UDashboardPanel, _attrs, {
170
187
  header: withCtx((_, _push2, _parent2, _scopeId) => {
171
188
  if (_push2) {
@@ -189,81 +206,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
189
206
  } else {
190
207
  _push2(`<!---->`);
191
208
  }
192
- _push2(ssrRenderComponent(_component_SectionCard, {
193
- icon: "i-lucide-bot",
194
- title: "What it provides",
195
- help: "mcp.tools"
196
- }, {
197
- default: withCtx((_2, _push3, _parent3, _scopeId2) => {
198
- if (_push3) {
199
- _push3(`<div class="flex flex-col gap-1.5"${_scopeId2}><!--[-->`);
200
- ssrRenderList(unref(tools), (t) => {
201
- _push3(`<div class="flex items-start gap-3 px-3 py-2.5 rounded-md bg-elevated/50 border border-default hover:bg-elevated transition-colors"${_scopeId2}>`);
202
- _push3(ssrRenderComponent(_component_UIcon, {
203
- name: "i-lucide-wrench",
204
- class: "size-4 mt-0.5 shrink-0 text-primary"
205
- }, null, _parent3, _scopeId2));
206
- _push3(`<div class="min-w-0"${_scopeId2}><p class="text-sm font-mono font-semibold text-foreground"${_scopeId2}>${ssrInterpolate(t.name)}</p><p class="text-xs text-gray-500 dark:text-gray-400 mt-0.5"${_scopeId2}>${ssrInterpolate(t.description)}</p></div></div>`);
207
- });
208
- _push3(`<!--]--></div>`);
209
- } else {
210
- return [
211
- createVNode("div", { class: "flex flex-col gap-1.5" }, [
212
- (openBlock(true), createBlock(Fragment, null, renderList(unref(tools), (t) => {
213
- return openBlock(), createBlock("div", {
214
- key: t.name,
215
- class: "flex items-start gap-3 px-3 py-2.5 rounded-md bg-elevated/50 border border-default hover:bg-elevated transition-colors"
216
- }, [
217
- createVNode(_component_UIcon, {
218
- name: "i-lucide-wrench",
219
- class: "size-4 mt-0.5 shrink-0 text-primary"
220
- }),
221
- createVNode("div", { class: "min-w-0" }, [
222
- createVNode("p", { class: "text-sm font-mono font-semibold text-foreground" }, toDisplayString(t.name), 1),
223
- createVNode("p", { class: "text-xs text-gray-500 dark:text-gray-400 mt-0.5" }, toDisplayString(t.description), 1)
224
- ])
225
- ]);
226
- }), 128))
227
- ])
228
- ];
229
- }
230
- }),
231
- _: 1
232
- }, _parent2, _scopeId));
233
- _push2(ssrRenderComponent(_component_SectionCard, {
234
- icon: "i-lucide-key",
235
- title: "Authentication",
236
- help: "mcp.auth"
237
- }, {
238
- default: withCtx((_2, _push3, _parent3, _scopeId2) => {
239
- if (_push3) {
240
- _push3(`<div class="space-y-3 text-sm text-gray-600 dark:text-gray-400"${_scopeId2}><p${_scopeId2}> MCP requests are authenticated with the same API keys used by the REST API. API keys start with <code class="px-1 py-0.5 bg-muted rounded text-xs font-mono"${_scopeId2}>pd_</code>. </p><p${_scopeId2}> Generate a key in <strong${_scopeId2}>Settings → Users → [your account] → API keys</strong>, then replace <code class="px-1 py-0.5 bg-muted rounded text-xs font-mono"${_scopeId2}>pd_YOUR_API_KEY</code> in the snippets below. </p><p class="text-xs text-gray-400"${_scopeId2}> When authentication is disabled (<code class="font-mono"${_scopeId2}>PIWI_AUTH_ENABLED</code> not set), any request is accepted without a key. </p></div>`);
241
- } else {
242
- return [
243
- createVNode("div", { class: "space-y-3 text-sm text-gray-600 dark:text-gray-400" }, [
244
- createVNode("p", null, [
245
- createTextVNode(" MCP requests are authenticated with the same API keys used by the REST API. API keys start with "),
246
- createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_"),
247
- createTextVNode(". ")
248
- ]),
249
- createVNode("p", null, [
250
- createTextVNode(" Generate a key in "),
251
- createVNode("strong", null, "Settings → Users → [your account] → API keys"),
252
- createTextVNode(", then replace "),
253
- createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
254
- createTextVNode(" in the snippets below. ")
255
- ]),
256
- createVNode("p", { class: "text-xs text-gray-400" }, [
257
- createTextVNode(" When authentication is disabled ("),
258
- createVNode("code", { class: "font-mono" }, "PIWI_AUTH_ENABLED"),
259
- createTextVNode(" not set), any request is accepted without a key. ")
260
- ])
261
- ])
262
- ];
263
- }
264
- }),
265
- _: 1
266
- }, _parent2, _scopeId));
267
209
  _push2(ssrRenderComponent(_component_SectionCard, {
268
210
  icon: "i-lucide-settings-2",
269
211
  title: "Client setup",
@@ -271,7 +213,36 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
271
213
  }, {
272
214
  default: withCtx((_2, _push3, _parent3, _scopeId2) => {
273
215
  if (_push3) {
274
- _push3(`<p class="text-sm text-gray-500 dark:text-gray-400 mb-4"${_scopeId2}> Replace <code class="px-1 py-0.5 bg-muted rounded text-xs font-mono"${_scopeId2}>pd_YOUR_API_KEY</code> with your actual API key. The MCP URL shown below is auto-detected from your current browser origin. </p>`);
216
+ if (unref(reporterConfig)) {
217
+ _push3(`<div class="mb-4 space-y-3 rounded-md border border-default bg-elevated/50 p-3"${_scopeId2}><div class="space-y-1"${_scopeId2}><div class="text-xs text-muted"${_scopeId2}>MCP URL</div><div class="flex items-start gap-2"${_scopeId2}><code class="text-xs break-all flex-1"${_scopeId2}>${ssrInterpolate(unref(mcpUrl))}</code>`);
218
+ _push3(ssrRenderComponent(_component_UButton, {
219
+ icon: "i-lucide-copy",
220
+ color: "neutral",
221
+ variant: "ghost",
222
+ size: "xs",
223
+ "aria-label": "Copy MCP URL",
224
+ onClick: ($event) => unref(copy)(unref(mcpUrl), { toast: true })
225
+ }, null, _parent3, _scopeId2));
226
+ _push3(`</div></div><div class="space-y-1"${_scopeId2}><div class="text-xs text-muted"${_scopeId2}>Access token</div><div class="flex items-start gap-2"${_scopeId2}><code class="text-xs break-all flex-1"${_scopeId2}>${ssrInterpolate(unref(bearerToken))}</code>`);
227
+ _push3(ssrRenderComponent(_component_UButton, {
228
+ icon: "i-lucide-copy",
229
+ color: "neutral",
230
+ variant: "ghost",
231
+ size: "xs",
232
+ "aria-label": "Copy access token",
233
+ onClick: ($event) => unref(copy)(unref(bearerToken), { toast: true })
234
+ }, null, _parent3, _scopeId2));
235
+ _push3(`</div></div><p class="text-xs text-muted"${_scopeId2}> This app authenticates with a local access token even though sign-in is off — it is the <code class="font-mono"${_scopeId2}>Bearer</code> value, already filled into the snippets below. </p></div>`);
236
+ } else {
237
+ _push3(`<!---->`);
238
+ }
239
+ _push3(`<p class="text-sm text-gray-500 dark:text-gray-400 mb-4"${_scopeId2}>`);
240
+ if (unref(reporterConfig)) {
241
+ _push3(`<!--[-->Pick your client below — the URL and access token above are already baked into each snippet.<!--]-->`);
242
+ } else {
243
+ _push3(`<!--[-->Replace <code class="px-1 py-0.5 bg-muted rounded text-xs font-mono"${_scopeId2}>pd_YOUR_API_KEY</code> with your actual API key. The MCP URL shown in the snippets is auto-detected from your current browser origin.<!--]-->`);
244
+ }
245
+ _push3(`</p>`);
275
246
  _push3(ssrRenderComponent(_component_UTabs, {
276
247
  items: clientItems,
277
248
  ui: { list: "mb-4" }
@@ -439,10 +410,52 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
439
410
  }, _parent3, _scopeId2));
440
411
  } else {
441
412
  return [
413
+ unref(reporterConfig) ? (openBlock(), createBlock("div", {
414
+ key: 0,
415
+ class: "mb-4 space-y-3 rounded-md border border-default bg-elevated/50 p-3"
416
+ }, [
417
+ createVNode("div", { class: "space-y-1" }, [
418
+ createVNode("div", { class: "text-xs text-muted" }, "MCP URL"),
419
+ createVNode("div", { class: "flex items-start gap-2" }, [
420
+ createVNode("code", { class: "text-xs break-all flex-1" }, toDisplayString(unref(mcpUrl)), 1),
421
+ createVNode(_component_UButton, {
422
+ icon: "i-lucide-copy",
423
+ color: "neutral",
424
+ variant: "ghost",
425
+ size: "xs",
426
+ "aria-label": "Copy MCP URL",
427
+ onClick: ($event) => unref(copy)(unref(mcpUrl), { toast: true })
428
+ }, null, 8, ["onClick"])
429
+ ])
430
+ ]),
431
+ createVNode("div", { class: "space-y-1" }, [
432
+ createVNode("div", { class: "text-xs text-muted" }, "Access token"),
433
+ createVNode("div", { class: "flex items-start gap-2" }, [
434
+ createVNode("code", { class: "text-xs break-all flex-1" }, toDisplayString(unref(bearerToken)), 1),
435
+ createVNode(_component_UButton, {
436
+ icon: "i-lucide-copy",
437
+ color: "neutral",
438
+ variant: "ghost",
439
+ size: "xs",
440
+ "aria-label": "Copy access token",
441
+ onClick: ($event) => unref(copy)(unref(bearerToken), { toast: true })
442
+ }, null, 8, ["onClick"])
443
+ ])
444
+ ]),
445
+ createVNode("p", { class: "text-xs text-muted" }, [
446
+ createTextVNode(" This app authenticates with a local access token even though sign-in is off — it is the "),
447
+ createVNode("code", { class: "font-mono" }, "Bearer"),
448
+ createTextVNode(" value, already filled into the snippets below. ")
449
+ ])
450
+ ])) : createCommentVNode("", true),
442
451
  createVNode("p", { class: "text-sm text-gray-500 dark:text-gray-400 mb-4" }, [
443
- createTextVNode(" Replace "),
444
- createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
445
- createTextVNode(" with your actual API key. The MCP URL shown below is auto-detected from your current browser origin. ")
452
+ unref(reporterConfig) ? (openBlock(), createBlock(Fragment, { key: 0 }, [
453
+ createTextVNode("Pick your client below the URL and access token above are already baked into each snippet.")
454
+ ], 64)) : (openBlock(), createBlock(Fragment, { key: 1 }, [
455
+ createTextVNode("Replace "),
456
+ createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
457
+ createTextVNode(" with your actual API key. The MCP URL shown in the snippets is auto-detected from your current browser origin.")
458
+ ], 64))
446
459
  ]),
447
460
  createVNode(_component_UTabs, {
448
461
  items: clientItems,
@@ -548,6 +561,106 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
548
561
  }),
549
562
  _: 1
550
563
  }, _parent2, _scopeId));
564
+ _push2(ssrRenderComponent(_component_SectionCard, {
565
+ icon: "i-lucide-bot",
566
+ title: "What it provides",
567
+ help: "mcp.tools"
568
+ }, {
569
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
570
+ if (_push3) {
571
+ _push3(`<div class="flex flex-col gap-1.5"${_scopeId2}><!--[-->`);
572
+ ssrRenderList(unref(tools), (t) => {
573
+ _push3(`<div class="flex items-start gap-3 px-3 py-2.5 rounded-md bg-elevated/50 border border-default hover:bg-elevated transition-colors"${_scopeId2}>`);
574
+ _push3(ssrRenderComponent(_component_UIcon, {
575
+ name: "i-lucide-wrench",
576
+ class: "size-4 mt-0.5 shrink-0 text-primary"
577
+ }, null, _parent3, _scopeId2));
578
+ _push3(`<div class="min-w-0"${_scopeId2}><p class="text-sm font-mono font-semibold text-foreground"${_scopeId2}>${ssrInterpolate(t.name)}</p><p class="text-xs text-gray-500 dark:text-gray-400 mt-0.5"${_scopeId2}>${ssrInterpolate(t.description)}</p></div></div>`);
579
+ });
580
+ _push3(`<!--]--></div>`);
581
+ } else {
582
+ return [
583
+ createVNode("div", { class: "flex flex-col gap-1.5" }, [
584
+ (openBlock(true), createBlock(Fragment, null, renderList(unref(tools), (t) => {
585
+ return openBlock(), createBlock("div", {
586
+ key: t.name,
587
+ class: "flex items-start gap-3 px-3 py-2.5 rounded-md bg-elevated/50 border border-default hover:bg-elevated transition-colors"
588
+ }, [
589
+ createVNode(_component_UIcon, {
590
+ name: "i-lucide-wrench",
591
+ class: "size-4 mt-0.5 shrink-0 text-primary"
592
+ }),
593
+ createVNode("div", { class: "min-w-0" }, [
594
+ createVNode("p", { class: "text-sm font-mono font-semibold text-foreground" }, toDisplayString(t.name), 1),
595
+ createVNode("p", { class: "text-xs text-gray-500 dark:text-gray-400 mt-0.5" }, toDisplayString(t.description), 1)
596
+ ])
597
+ ]);
598
+ }), 128))
599
+ ])
600
+ ];
601
+ }
602
+ }),
603
+ _: 1
604
+ }, _parent2, _scopeId));
605
+ _push2(ssrRenderComponent(_component_SectionCard, {
606
+ icon: "i-lucide-key",
607
+ title: "Authentication",
608
+ help: "mcp.auth"
609
+ }, {
610
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
611
+ if (_push3) {
612
+ _push3(`<div class="space-y-3 text-sm text-gray-600 dark:text-gray-400"${_scopeId2}><p${_scopeId2}> MCP requests are authenticated with the same API keys used by the REST API. API keys start with <code class="px-1 py-0.5 bg-muted rounded text-xs font-mono"${_scopeId2}>pd_</code>. </p>`);
613
+ if (!unref(isDesktop)) {
614
+ _push3(`<p${_scopeId2}> Generate a key in <strong${_scopeId2}>Settings → Users → [your account] → API keys</strong>, then replace <code class="px-1 py-0.5 bg-muted rounded text-xs font-mono"${_scopeId2}>pd_YOUR_API_KEY</code> in the snippets above. </p>`);
615
+ } else {
616
+ _push3(`<p${_scopeId2}> This app provides a local access token automatically — shown in <strong${_scopeId2}>Client setup</strong> above and already filled into every snippet, so there is nothing to replace. </p>`);
617
+ }
618
+ if (!unref(isDesktop)) {
619
+ _push3(`<p class="text-xs text-gray-400"${_scopeId2}> When authentication is disabled (<code class="font-mono"${_scopeId2}>PIWI_AUTH_ENABLED</code> not set), any request is accepted without a key. </p>`);
620
+ } else {
621
+ _push3(`<p class="text-xs text-gray-400"${_scopeId2}> This desktop app keeps sign-in off but still requires its own local access token on every request — it is the <code class="font-mono"${_scopeId2}>Bearer</code> value. The endpoint is not open. </p>`);
622
+ }
623
+ _push3(`</div>`);
624
+ } else {
625
+ return [
626
+ createVNode("div", { class: "space-y-3 text-sm text-gray-600 dark:text-gray-400" }, [
627
+ createVNode("p", null, [
628
+ createTextVNode(" MCP requests are authenticated with the same API keys used by the REST API. API keys start with "),
629
+ createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_"),
630
+ createTextVNode(". ")
631
+ ]),
632
+ !unref(isDesktop) ? (openBlock(), createBlock("p", { key: 0 }, [
633
+ createTextVNode(" Generate a key in "),
634
+ createVNode("strong", null, "Settings → Users → [your account] → API keys"),
635
+ createTextVNode(", then replace "),
636
+ createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
637
+ createTextVNode(" in the snippets above. ")
638
+ ])) : (openBlock(), createBlock("p", { key: 1 }, [
639
+ createTextVNode(" This app provides a local access token automatically — shown in "),
640
+ createVNode("strong", null, "Client setup"),
641
+ createTextVNode(" above and already filled into every snippet, so there is nothing to replace. ")
642
+ ])),
643
+ !unref(isDesktop) ? (openBlock(), createBlock("p", {
644
+ key: 2,
645
+ class: "text-xs text-gray-400"
646
+ }, [
647
+ createTextVNode(" When authentication is disabled ("),
648
+ createVNode("code", { class: "font-mono" }, "PIWI_AUTH_ENABLED"),
649
+ createTextVNode(" not set), any request is accepted without a key. ")
650
+ ])) : (openBlock(), createBlock("p", {
651
+ key: 3,
652
+ class: "text-xs text-gray-400"
653
+ }, [
654
+ createTextVNode(" This desktop app keeps sign-in off but still requires its own local access token on every request — it is the "),
655
+ createVNode("code", { class: "font-mono" }, "Bearer"),
656
+ createTextVNode(" value. The endpoint is not open. ")
657
+ ]))
658
+ ])
659
+ ];
660
+ }
661
+ }),
662
+ _: 1
663
+ }, _parent2, _scopeId));
551
664
  _push2(ssrRenderComponent(_component_SectionCard, {
552
665
  icon: "i-lucide-link",
553
666
  title: "Server URL"
@@ -575,7 +688,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
575
688
  }),
576
689
  _: 1
577
690
  }, _parent3, _scopeId2));
578
- _push3(`</div><p class="text-xs text-gray-400"${_scopeId2}> This is your Piwi instance&#39;s MCP endpoint. It is also the server URL to paste into client configs above. The server requires a valid Bearer token (or no auth if <code class="font-mono"${_scopeId2}>PIWI_AUTH_ENABLED</code> is not set). </p></div>`);
691
+ _push3(`</div><p class="text-xs text-gray-400"${_scopeId2}> This is your Piwi instance&#39;s MCP endpoint. It is also the server URL to paste into client configs above. `);
692
+ if (unref(isDesktop)) {
693
+ _push3(`<!--[-->This desktop app requires its local access token as the <code class="font-mono"${_scopeId2}>Bearer</code> value on every request.<!--]-->`);
694
+ } else {
695
+ _push3(`<!--[-->The server requires a valid Bearer token (or no auth if <code class="font-mono"${_scopeId2}>PIWI_AUTH_ENABLED</code> is not set).<!--]-->`);
696
+ }
697
+ _push3(`</p></div>`);
579
698
  } else {
580
699
  return [
581
700
  createVNode("div", { class: "space-y-2" }, [
@@ -597,9 +716,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
597
716
  }, 8, ["external"])
598
717
  ]),
599
718
  createVNode("p", { class: "text-xs text-gray-400" }, [
600
- createTextVNode(" This is your Piwi instance's MCP endpoint. It is also the server URL to paste into client configs above. The server requires a valid Bearer token (or no auth if "),
601
- createVNode("code", { class: "font-mono" }, "PIWI_AUTH_ENABLED"),
602
- createTextVNode(" is not set). ")
719
+ createTextVNode(" This is your Piwi instance's MCP endpoint. It is also the server URL to paste into client configs above. "),
720
+ unref(isDesktop) ? (openBlock(), createBlock(Fragment, { key: 0 }, [
721
+ createTextVNode("This desktop app requires its local access token as the "),
722
+ createVNode("code", { class: "font-mono" }, "Bearer"),
723
+ createTextVNode(" value on every request.")
724
+ ], 64)) : (openBlock(), createBlock(Fragment, { key: 1 }, [
725
+ createTextVNode("The server requires a valid Bearer token (or no auth if "),
726
+ createVNode("code", { class: "font-mono" }, "PIWI_AUTH_ENABLED"),
727
+ createTextVNode(" is not set).")
728
+ ], 64))
603
729
  ])
604
730
  ])
605
731
  ];
@@ -618,70 +744,58 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
618
744
  title: "Feature preview",
619
745
  description: "The MCP endpoint is not active in this demo — it requires a real Piwi backend. The tools and client setup shown below reflect what your own deployment exposes."
620
746
  })) : createCommentVNode("", true),
621
- createVNode(_component_SectionCard, {
622
- icon: "i-lucide-bot",
623
- title: "What it provides",
624
- help: "mcp.tools"
625
- }, {
626
- default: withCtx(() => [
627
- createVNode("div", { class: "flex flex-col gap-1.5" }, [
628
- (openBlock(true), createBlock(Fragment, null, renderList(unref(tools), (t) => {
629
- return openBlock(), createBlock("div", {
630
- key: t.name,
631
- class: "flex items-start gap-3 px-3 py-2.5 rounded-md bg-elevated/50 border border-default hover:bg-elevated transition-colors"
632
- }, [
633
- createVNode(_component_UIcon, {
634
- name: "i-lucide-wrench",
635
- class: "size-4 mt-0.5 shrink-0 text-primary"
636
- }),
637
- createVNode("div", { class: "min-w-0" }, [
638
- createVNode("p", { class: "text-sm font-mono font-semibold text-foreground" }, toDisplayString(t.name), 1),
639
- createVNode("p", { class: "text-xs text-gray-500 dark:text-gray-400 mt-0.5" }, toDisplayString(t.description), 1)
640
- ])
641
- ]);
642
- }), 128))
643
- ])
644
- ]),
645
- _: 1
646
- }),
647
- createVNode(_component_SectionCard, {
648
- icon: "i-lucide-key",
649
- title: "Authentication",
650
- help: "mcp.auth"
651
- }, {
652
- default: withCtx(() => [
653
- createVNode("div", { class: "space-y-3 text-sm text-gray-600 dark:text-gray-400" }, [
654
- createVNode("p", null, [
655
- createTextVNode(" MCP requests are authenticated with the same API keys used by the REST API. API keys start with "),
656
- createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_"),
657
- createTextVNode(". ")
658
- ]),
659
- createVNode("p", null, [
660
- createTextVNode(" Generate a key in "),
661
- createVNode("strong", null, "Settings → Users → [your account] → API keys"),
662
- createTextVNode(", then replace "),
663
- createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
664
- createTextVNode(" in the snippets below. ")
665
- ]),
666
- createVNode("p", { class: "text-xs text-gray-400" }, [
667
- createTextVNode(" When authentication is disabled ("),
668
- createVNode("code", { class: "font-mono" }, "PIWI_AUTH_ENABLED"),
669
- createTextVNode(" not set), any request is accepted without a key. ")
670
- ])
671
- ])
672
- ]),
673
- _: 1
674
- }),
675
747
  createVNode(_component_SectionCard, {
676
748
  icon: "i-lucide-settings-2",
677
749
  title: "Client setup",
678
750
  help: "mcp.client-setup"
679
751
  }, {
680
752
  default: withCtx(() => [
753
+ unref(reporterConfig) ? (openBlock(), createBlock("div", {
754
+ key: 0,
755
+ class: "mb-4 space-y-3 rounded-md border border-default bg-elevated/50 p-3"
756
+ }, [
757
+ createVNode("div", { class: "space-y-1" }, [
758
+ createVNode("div", { class: "text-xs text-muted" }, "MCP URL"),
759
+ createVNode("div", { class: "flex items-start gap-2" }, [
760
+ createVNode("code", { class: "text-xs break-all flex-1" }, toDisplayString(unref(mcpUrl)), 1),
761
+ createVNode(_component_UButton, {
762
+ icon: "i-lucide-copy",
763
+ color: "neutral",
764
+ variant: "ghost",
765
+ size: "xs",
766
+ "aria-label": "Copy MCP URL",
767
+ onClick: ($event) => unref(copy)(unref(mcpUrl), { toast: true })
768
+ }, null, 8, ["onClick"])
769
+ ])
770
+ ]),
771
+ createVNode("div", { class: "space-y-1" }, [
772
+ createVNode("div", { class: "text-xs text-muted" }, "Access token"),
773
+ createVNode("div", { class: "flex items-start gap-2" }, [
774
+ createVNode("code", { class: "text-xs break-all flex-1" }, toDisplayString(unref(bearerToken)), 1),
775
+ createVNode(_component_UButton, {
776
+ icon: "i-lucide-copy",
777
+ color: "neutral",
778
+ variant: "ghost",
779
+ size: "xs",
780
+ "aria-label": "Copy access token",
781
+ onClick: ($event) => unref(copy)(unref(bearerToken), { toast: true })
782
+ }, null, 8, ["onClick"])
783
+ ])
784
+ ]),
785
+ createVNode("p", { class: "text-xs text-muted" }, [
786
+ createTextVNode(" This app authenticates with a local access token even though sign-in is off — it is the "),
787
+ createVNode("code", { class: "font-mono" }, "Bearer"),
788
+ createTextVNode(" value, already filled into the snippets below. ")
789
+ ])
790
+ ])) : createCommentVNode("", true),
681
791
  createVNode("p", { class: "text-sm text-gray-500 dark:text-gray-400 mb-4" }, [
682
- createTextVNode(" Replace "),
683
- createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
684
- createTextVNode(" with your actual API key. The MCP URL shown below is auto-detected from your current browser origin. ")
792
+ unref(reporterConfig) ? (openBlock(), createBlock(Fragment, { key: 0 }, [
793
+ createTextVNode("Pick your client below the URL and access token above are already baked into each snippet.")
794
+ ], 64)) : (openBlock(), createBlock(Fragment, { key: 1 }, [
795
+ createTextVNode("Replace "),
796
+ createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
797
+ createTextVNode(" with your actual API key. The MCP URL shown in the snippets is auto-detected from your current browser origin.")
798
+ ], 64))
685
799
  ]),
686
800
  createVNode(_component_UTabs, {
687
801
  items: clientItems,
@@ -785,6 +899,74 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
785
899
  ]),
786
900
  _: 1
787
901
  }),
902
+ createVNode(_component_SectionCard, {
903
+ icon: "i-lucide-bot",
904
+ title: "What it provides",
905
+ help: "mcp.tools"
906
+ }, {
907
+ default: withCtx(() => [
908
+ createVNode("div", { class: "flex flex-col gap-1.5" }, [
909
+ (openBlock(true), createBlock(Fragment, null, renderList(unref(tools), (t) => {
910
+ return openBlock(), createBlock("div", {
911
+ key: t.name,
912
+ class: "flex items-start gap-3 px-3 py-2.5 rounded-md bg-elevated/50 border border-default hover:bg-elevated transition-colors"
913
+ }, [
914
+ createVNode(_component_UIcon, {
915
+ name: "i-lucide-wrench",
916
+ class: "size-4 mt-0.5 shrink-0 text-primary"
917
+ }),
918
+ createVNode("div", { class: "min-w-0" }, [
919
+ createVNode("p", { class: "text-sm font-mono font-semibold text-foreground" }, toDisplayString(t.name), 1),
920
+ createVNode("p", { class: "text-xs text-gray-500 dark:text-gray-400 mt-0.5" }, toDisplayString(t.description), 1)
921
+ ])
922
+ ]);
923
+ }), 128))
924
+ ])
925
+ ]),
926
+ _: 1
927
+ }),
928
+ createVNode(_component_SectionCard, {
929
+ icon: "i-lucide-key",
930
+ title: "Authentication",
931
+ help: "mcp.auth"
932
+ }, {
933
+ default: withCtx(() => [
934
+ createVNode("div", { class: "space-y-3 text-sm text-gray-600 dark:text-gray-400" }, [
935
+ createVNode("p", null, [
936
+ createTextVNode(" MCP requests are authenticated with the same API keys used by the REST API. API keys start with "),
937
+ createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_"),
938
+ createTextVNode(". ")
939
+ ]),
940
+ !unref(isDesktop) ? (openBlock(), createBlock("p", { key: 0 }, [
941
+ createTextVNode(" Generate a key in "),
942
+ createVNode("strong", null, "Settings → Users → [your account] → API keys"),
943
+ createTextVNode(", then replace "),
944
+ createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
945
+ createTextVNode(" in the snippets above. ")
946
+ ])) : (openBlock(), createBlock("p", { key: 1 }, [
947
+ createTextVNode(" This app provides a local access token automatically — shown in "),
948
+ createVNode("strong", null, "Client setup"),
949
+ createTextVNode(" above and already filled into every snippet, so there is nothing to replace. ")
950
+ ])),
951
+ !unref(isDesktop) ? (openBlock(), createBlock("p", {
952
+ key: 2,
953
+ class: "text-xs text-gray-400"
954
+ }, [
955
+ createTextVNode(" When authentication is disabled ("),
956
+ createVNode("code", { class: "font-mono" }, "PIWI_AUTH_ENABLED"),
957
+ createTextVNode(" not set), any request is accepted without a key. ")
958
+ ])) : (openBlock(), createBlock("p", {
959
+ key: 3,
960
+ class: "text-xs text-gray-400"
961
+ }, [
962
+ createTextVNode(" This desktop app keeps sign-in off but still requires its own local access token on every request — it is the "),
963
+ createVNode("code", { class: "font-mono" }, "Bearer"),
964
+ createTextVNode(" value. The endpoint is not open. ")
965
+ ]))
966
+ ])
967
+ ]),
968
+ _: 1
969
+ }),
788
970
  createVNode(_component_SectionCard, {
789
971
  icon: "i-lucide-link",
790
972
  title: "Server URL"
@@ -809,9 +991,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
809
991
  }, 8, ["external"])
810
992
  ]),
811
993
  createVNode("p", { class: "text-xs text-gray-400" }, [
812
- createTextVNode(" This is your Piwi instance's MCP endpoint. It is also the server URL to paste into client configs above. The server requires a valid Bearer token (or no auth if "),
813
- createVNode("code", { class: "font-mono" }, "PIWI_AUTH_ENABLED"),
814
- createTextVNode(" is not set). ")
994
+ createTextVNode(" This is your Piwi instance's MCP endpoint. It is also the server URL to paste into client configs above. "),
995
+ unref(isDesktop) ? (openBlock(), createBlock(Fragment, { key: 0 }, [
996
+ createTextVNode("This desktop app requires its local access token as the "),
997
+ createVNode("code", { class: "font-mono" }, "Bearer"),
998
+ createTextVNode(" value on every request.")
999
+ ], 64)) : (openBlock(), createBlock(Fragment, { key: 1 }, [
1000
+ createTextVNode("The server requires a valid Bearer token (or no auth if "),
1001
+ createVNode("code", { class: "font-mono" }, "PIWI_AUTH_ENABLED"),
1002
+ createTextVNode(" is not set).")
1003
+ ], 64))
815
1004
  ])
816
1005
  ])
817
1006
  ]),
@@ -834,4 +1023,4 @@ _sfc_main.setup = (props, ctx) => {
834
1023
  };
835
1024
 
836
1025
  export { _sfc_main as default };
837
- //# sourceMappingURL=mcp-CXwa3xU3.mjs.map
1026
+ //# sourceMappingURL=mcp-_o6cMS6m.mjs.map