@piwitests/server 0.17.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.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{BcLXUmKT.js → 36cXPVrY.js} +1 -1
- package/.output/public/_nuxt/{CMB-NkFa.js → 87SGk1nu.js} +1 -1
- package/.output/public/_nuxt/{CWmQcueG.js → AjuKBlzz.js} +1 -1
- package/.output/public/_nuxt/{DAeYmPfX.js → B1CB30tg.js} +1 -1
- package/.output/public/_nuxt/{BU6xjw05.js → B6IHiVa1.js} +1 -1
- package/.output/public/_nuxt/{z7PmsnBG.js → B6rt3IcG.js} +1 -1
- package/.output/public/_nuxt/{BDcIWTTq.js → BAaSmp8J.js} +1 -1
- package/.output/public/_nuxt/{rw7Hdll3.js → BAkJhSAW.js} +1 -1
- package/.output/public/_nuxt/{L6HlmmEa.js → BCArQk0c.js} +1 -1
- package/.output/public/_nuxt/{D811X8KM.js → BEB2Mv6B.js} +1 -1
- package/.output/public/_nuxt/BFjmLXYo.js +8 -0
- package/.output/public/_nuxt/{CbuWynGG.js → BJltXwHg.js} +1 -1
- package/.output/public/_nuxt/{Dn6cGVYB.js → BKaU95es.js} +1 -1
- package/.output/public/_nuxt/{CHHqhAsw.js → BReNbog6.js} +1 -1
- package/.output/public/_nuxt/{yZ4LuI9d.js → BTYiG93l.js} +1 -1
- package/.output/public/_nuxt/{D7P0ML0H.js → BUMZHDRC.js} +1 -1
- package/.output/public/_nuxt/{US3YSX4T.js → BVDBIVAQ.js} +1 -1
- package/.output/public/_nuxt/{BgDEjrcz.js → B_aSGB8S.js} +1 -1
- package/.output/public/_nuxt/{Ce3tBrN7.js → BaDv5D7A.js} +1 -1
- package/.output/public/_nuxt/{BWFY2RuU.js → BdHdHyop.js} +1 -1
- package/.output/public/_nuxt/{jlBi8Byu.js → BfoG8R5a.js} +1 -1
- package/.output/public/_nuxt/{3QTvYrZp.js → Bi3i470l.js} +1 -1
- package/.output/public/_nuxt/Bi9DO8jm.js +1 -0
- package/.output/public/_nuxt/{PxPbRVF-.js → BiX7c2qU.js} +1 -1
- package/.output/public/_nuxt/{DwZiG9xH.js → BoC6qaRF.js} +4 -4
- package/.output/public/_nuxt/{C7nwFokE.js → BsDB_eCd.js} +1 -1
- package/.output/public/_nuxt/{cBj9fai9.js → BuuvTH9e.js} +1 -1
- package/.output/public/_nuxt/{DvC5Adg1.js → C11lmBd4.js} +1 -1
- package/.output/public/_nuxt/{Dx1oCMgy.js → C4AfzZER.js} +1 -1
- package/.output/public/_nuxt/{CYuWAvXE.js → C7ZVzS0K.js} +1 -1
- package/.output/public/_nuxt/{B6hPf4UR.js → C8cz5feG.js} +1 -1
- package/.output/public/_nuxt/{DjRhouSr.js → C9EpbPNU.js} +1 -1
- package/.output/public/_nuxt/{HCK35QD8.js → C9ahP7km.js} +1 -1
- package/.output/public/_nuxt/{8jZmK2De.js → CBEM3L1q.js} +1 -1
- package/.output/public/_nuxt/{sMFaPAAR.js → CCsl9MOZ.js} +1 -1
- package/.output/public/_nuxt/{DTH2lteW.js → CCw3Tx4S.js} +1 -1
- package/.output/public/_nuxt/{99tAfVF5.js → CGq9qR-0.js} +1 -1
- package/.output/public/_nuxt/{Dym66h3p.js → CLdGRzLL.js} +1 -1
- package/.output/public/_nuxt/{BRdhP5lm.js → CP0vUzbd.js} +1 -1
- package/.output/public/_nuxt/{D_TbJDHY.js → CPZ5wygb.js} +1 -1
- package/.output/public/_nuxt/{Bua_L6p4.js → CRcjGmf7.js} +1 -1
- package/.output/public/_nuxt/{DS9yGVFL.js → CRpbGS75.js} +1 -1
- package/.output/public/_nuxt/{DDPptydi.js → CTgM5Fke.js} +1 -1
- package/.output/public/_nuxt/{D_A6axXa.js → CU3W9YrI.js} +1 -1
- package/.output/public/_nuxt/{BwKwWgQe.js → CUDeMcEK.js} +1 -1
- package/.output/public/_nuxt/{DFM2jv9I.js → CYIR2GbL.js} +1 -1
- package/.output/public/_nuxt/{B1CUXGbl.js → Ccit_CX1.js} +1 -1
- package/.output/public/_nuxt/CiPH-swI.js +1 -0
- package/.output/public/_nuxt/{DRTxhZBV.js → ClIKZ4qY.js} +1 -1
- package/.output/public/_nuxt/{DvXvJzFP.js → ClVRQpP_.js} +1 -1
- package/.output/public/_nuxt/{CvtYJHkY.js → CmbjAoQu.js} +1 -1
- package/.output/public/_nuxt/Cx65B3c3.js +1 -0
- package/.output/public/_nuxt/{Cz2HhsB6.js → D1ttGJfs.js} +1 -1
- package/.output/public/_nuxt/{DtXREpk_.js → D3MWm6JP.js} +1 -1
- package/.output/public/_nuxt/{BrT_Sys2.js → D3SYPlEB.js} +28 -28
- package/.output/public/_nuxt/{Cf4h8qty.js → D4SFgXAf.js} +1 -1
- package/.output/public/_nuxt/{DCffDvxl.js → D51_cB9D.js} +1 -1
- package/.output/public/_nuxt/{QFMx1VKs.js → D8YZvjas.js} +1 -1
- package/.output/public/_nuxt/{BE8ykmwr.js → DB3ljns7.js} +1 -1
- package/.output/public/_nuxt/{CSAmL8XJ.js → DC51KKt4.js} +1 -1
- package/.output/public/_nuxt/{3QTorEhJ.js → DCMFuzDI.js} +1 -1
- package/.output/public/_nuxt/{CNULGfLp.js → DIA_NAIv.js} +1 -1
- package/.output/public/_nuxt/{COVRAesU.js → DM_YaJgJ.js} +1 -1
- package/.output/public/_nuxt/{DJHNEqb7.js → DOr_4nln.js} +2 -2
- package/.output/public/_nuxt/{BGZQONfm.js → DRE6Aqqp.js} +1 -1
- package/.output/public/_nuxt/{DPSOtRoz.js → DVgMaBxD.js} +1 -1
- package/.output/public/_nuxt/{Sgf5OLhm.js → DaewB_zT.js} +1 -1
- package/.output/public/_nuxt/{ClJkng9p.js → Db_-yjYg.js} +1 -1
- package/.output/public/_nuxt/{DxQq_L07.js → Dbg8z684.js} +1 -1
- package/.output/public/_nuxt/{qYFZH4Z8.js → DcfRfTaA.js} +1 -1
- package/.output/public/_nuxt/{csqspBeX.js → Dm1_3W9g.js} +1 -1
- package/.output/public/_nuxt/{Dz3Wbekz.js → DnThe2U0.js} +1 -1
- package/.output/public/_nuxt/{D0-HTQTD.js → Do6zIWQf.js} +1 -1
- package/.output/public/_nuxt/{CoKEjZX7.js → DoFSKAvY.js} +1 -1
- package/.output/public/_nuxt/{Bpha13F_.js → DoYgYLOd.js} +1 -1
- package/.output/public/_nuxt/{Dvc1aWpA.js → Doul3p1_.js} +1 -1
- package/.output/public/_nuxt/{Ba4_ydKG.js → DraETso1.js} +1 -1
- package/.output/public/_nuxt/{CxLN5Tmq.js → Dwp3GkV-.js} +1 -1
- package/.output/public/_nuxt/{-9tk1FrT.js → Dy4TloG3.js} +1 -1
- package/.output/public/_nuxt/{DT5rhzhJ.js → EltzgiyS.js} +1 -1
- package/.output/public/_nuxt/{D13ybpY3.js → HTQtMbWb.js} +1 -1
- package/.output/public/_nuxt/{Wfk1m0ni.js → KYucVFu7.js} +1 -1
- package/.output/public/_nuxt/TBDx0s9p.js +3 -0
- package/.output/public/_nuxt/{Bq0PQfQY.js → Tt5LX5Y-.js} +1 -1
- package/.output/public/_nuxt/{BxRsAYRS.js → Vnfkr1pJ.js} +1 -1
- package/.output/public/_nuxt/{Df3QtbpW.js → WAaPPk0g.js} +2 -2
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/ed1db2e5-9865-4231-9605-4edd5272e164.json +1 -0
- package/.output/public/_nuxt/{CHIbdzqp.js → empGC_x-.js} +1 -1
- package/.output/public/_nuxt/entry.ChQMshd4.css +1 -0
- package/.output/public/_nuxt/{BciovqwK.js → l0QnzFNM.js} +1 -1
- package/.output/public/_nuxt/{73aPL7Ir.js → lowCGL2S.js} +1 -1
- package/.output/public/_nuxt/{B6w76fJT.js → mlAADjK3.js} +1 -1
- package/.output/public/_nuxt/{Ds2Y3oms.js → n-QWmQgc.js} +1 -1
- package/.output/public/_nuxt/{DpJrGwCr.js → oFIS9u6t.js} +1 -1
- package/.output/public/_nuxt/{BEsJE07U.js → oWY3I9uX.js} +1 -1
- package/.output/public/_nuxt/{lCkcEykv.js → q0DPzLKN.js} +1 -1
- package/.output/public/_nuxt/{r9WApUfF.js → quV6tp4n.js} +1 -1
- package/.output/public/_nuxt/{8xyZSRSO.js → riEUDnED.js} +1 -1
- package/.output/public/_nuxt/{ByoIgYX_.js → rm7OkgDG.js} +1 -1
- package/.output/public/_nuxt/uaqMzXqE.js +5 -0
- package/.output/public/_nuxt/{vzXhOO8R.js → va1mwSm9.js} +1 -1
- package/.output/public/_nuxt/{BoRJdCd4.js → wGpfdK6o.js} +1 -1
- package/.output/public/_nuxt/{za5M7BGh.js → wQZj69OY.js} +1 -1
- package/.output/public/_nuxt/wgcgHmRR.js +1 -0
- package/.output/public/sw.js +1 -1
- package/.output/server/chunks/build/{about-TuEZ9n1Q.mjs → about-CoJjvUwM.mjs} +119 -11
- package/.output/server/chunks/build/about-CoJjvUwM.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/{docs-EXhN3sqC.mjs → docs-BN_x1OW3.mjs} +50 -6
- package/.output/server/chunks/build/{docs-EXhN3sqC.mjs.map → docs-BN_x1OW3.mjs.map} +1 -1
- package/.output/server/chunks/build/{mcp-CQ-21rwc.mjs → mcp-_o6cMS6m.mjs} +307 -225
- package/.output/server/chunks/build/mcp-_o6cMS6m.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +3 -3
- package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs +7 -0
- package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +688 -695
- package/.output/server/package.json +1 -1
- package/package.json +1 -1
- package/.output/public/_nuxt/26ll_vBr.js +0 -1
- package/.output/public/_nuxt/B_QIrc7l.js +0 -1
- package/.output/public/_nuxt/CEuVRSr0.js +0 -3
- package/.output/public/_nuxt/Cl96oI21.js +0 -5
- package/.output/public/_nuxt/DATh_1DQ.js +0 -1
- package/.output/public/_nuxt/DUe6xuKQ.js +0 -1
- package/.output/public/_nuxt/DqsMiUoW.js +0 -2
- package/.output/public/_nuxt/Ds4Lb1vi.js +0 -7
- package/.output/public/_nuxt/builds/meta/05a2dd95-d1c1-4e3a-8625-ac6bfea83837.json +0 -1
- package/.output/public/_nuxt/entry.BaIGwMjT.css +0 -1
- package/.output/server/chunks/build/DesktopMcpCard-B4JuUTKj.mjs +0 -122
- package/.output/server/chunks/build/DesktopMcpCard-B4JuUTKj.mjs.map +0 -1
- package/.output/server/chunks/build/about-TuEZ9n1Q.mjs.map +0 -1
- package/.output/server/chunks/build/mcp-CQ-21rwc.mjs.map +0 -1
|
@@ -1,17 +1,16 @@
|
|
|
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
|
-
import { _ as __nuxt_component_5 } from './DesktopMcpCard-B4JuUTKj.mjs';
|
|
4
3
|
import { _ as __nuxt_component_11 } from './SectionCard-COd9TuDq.mjs';
|
|
5
|
-
import { l as useHead,
|
|
4
|
+
import { l as useHead, m as _sfc_main$k, o as _sfc_main$p, r as useRuntimeConfig, L as useRequestEvent } from './server.mjs';
|
|
6
5
|
import { _ as _sfc_main$3 } from './Tabs-BV9XqjoO.mjs';
|
|
7
|
-
import { _ as __nuxt_component_5
|
|
8
|
-
import { defineComponent, withAsyncContext, computed, withCtx, unref, createVNode, openBlock, createBlock,
|
|
9
|
-
import { ssrRenderComponent,
|
|
6
|
+
import { _ as __nuxt_component_5 } from './CodeBlock-BGwNmJ8J.mjs';
|
|
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';
|
|
10
9
|
import { df as MCP_TOOL_DEFS, dg as getRequestURL } from '../nitro/nitro.mjs';
|
|
11
10
|
import { u as useIsDesktop } from './useIsDesktop-BS13spVj.mjs';
|
|
11
|
+
import { u as useCopy } from './useCopy-BQQKcwlq.mjs';
|
|
12
12
|
import { u as useFetch } from './fetch-8kznMtBM.mjs';
|
|
13
13
|
import './DashboardSidebarToggle-Ji6ADuqF.mjs';
|
|
14
|
-
import './useCopy-BQQKcwlq.mjs';
|
|
15
14
|
import './Card-BQP_oZkQ.mjs';
|
|
16
15
|
import './HelpHint-YEMWtKu1.mjs';
|
|
17
16
|
import './help-content-DmFnuhNu.mjs';
|
|
@@ -74,6 +73,7 @@ function useRequestURL(opts) {
|
|
|
74
73
|
return getRequestURL(useRequestEvent(), opts);
|
|
75
74
|
}
|
|
76
75
|
}
|
|
76
|
+
const apiKeyPlaceholder = "pd_YOUR_API_KEY";
|
|
77
77
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
78
78
|
__name: "mcp",
|
|
79
79
|
__ssrInlineRender: true,
|
|
@@ -82,15 +82,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
82
82
|
const config = useRuntimeConfig();
|
|
83
83
|
const isDemo = config.public.demoMode;
|
|
84
84
|
const isDesktop = useIsDesktop();
|
|
85
|
+
const { copy } = useCopy();
|
|
85
86
|
const { data: reporterConfig } = ([__temp, __restore] = withAsyncContext(() => useFetch(
|
|
86
87
|
"/api/desktop/reporter-config",
|
|
87
|
-
{
|
|
88
|
+
{
|
|
89
|
+
immediate: isDesktop,
|
|
90
|
+
default: () => null
|
|
91
|
+
},
|
|
88
92
|
"$fdl6kilREP"
|
|
89
93
|
/* nuxt-injected */
|
|
90
94
|
)), __temp = await __temp, __restore(), __temp);
|
|
95
|
+
const bearerToken = computed(() => reporterConfig.value?.token ?? apiKeyPlaceholder);
|
|
91
96
|
const requestUrl = useRequestURL();
|
|
92
97
|
const mcpUrl = computed(() => {
|
|
93
|
-
const base = config.public.siteUrl
|
|
98
|
+
const base = reporterConfig.value?.url ?? config.public.siteUrl ?? requestUrl.origin;
|
|
94
99
|
return `${base}/mcp`;
|
|
95
100
|
});
|
|
96
101
|
useHead({ title: "MCP server — Piwi Dashboard" });
|
|
@@ -105,7 +110,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
105
110
|
];
|
|
106
111
|
const claudeCodeSnippet = computed(
|
|
107
112
|
() => `claude mcp add --transport http piwi ${mcpUrl.value} \\
|
|
108
|
-
--header "Authorization: Bearer
|
|
113
|
+
--header "Authorization: Bearer ${bearerToken.value}"`
|
|
109
114
|
);
|
|
110
115
|
const cursorSnippet = computed(
|
|
111
116
|
() => JSON.stringify(
|
|
@@ -113,7 +118,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
113
118
|
mcpServers: {
|
|
114
119
|
piwi: {
|
|
115
120
|
url: mcpUrl.value,
|
|
116
|
-
headers: { Authorization:
|
|
121
|
+
headers: { Authorization: `Bearer ${bearerToken.value}` }
|
|
117
122
|
}
|
|
118
123
|
}
|
|
119
124
|
},
|
|
@@ -128,7 +133,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
128
133
|
piwi: {
|
|
129
134
|
type: "http",
|
|
130
135
|
url: mcpUrl.value,
|
|
131
|
-
headers: { Authorization:
|
|
136
|
+
headers: { Authorization: `Bearer ${bearerToken.value}` }
|
|
132
137
|
}
|
|
133
138
|
}
|
|
134
139
|
},
|
|
@@ -143,7 +148,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
143
148
|
piwi: {
|
|
144
149
|
type: "http",
|
|
145
150
|
url: mcpUrl.value,
|
|
146
|
-
headers: { Authorization:
|
|
151
|
+
headers: { Authorization: `Bearer ${bearerToken.value}` }
|
|
147
152
|
}
|
|
148
153
|
}
|
|
149
154
|
},
|
|
@@ -153,7 +158,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
153
158
|
);
|
|
154
159
|
const geminiSnippet = computed(
|
|
155
160
|
() => `gemini mcp add --transport http piwi ${mcpUrl.value} \\
|
|
156
|
-
--header "Authorization: Bearer
|
|
161
|
+
--header "Authorization: Bearer ${bearerToken.value}"`
|
|
157
162
|
);
|
|
158
163
|
const windsurfSnippet = computed(
|
|
159
164
|
() => JSON.stringify(
|
|
@@ -161,7 +166,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
161
166
|
mcpServers: {
|
|
162
167
|
piwi: {
|
|
163
168
|
serverUrl: mcpUrl.value,
|
|
164
|
-
headers: { Authorization:
|
|
169
|
+
headers: { Authorization: `Bearer ${bearerToken.value}` }
|
|
165
170
|
}
|
|
166
171
|
}
|
|
167
172
|
},
|
|
@@ -173,12 +178,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
173
178
|
const _component_UDashboardPanel = _sfc_main$1;
|
|
174
179
|
const _component_UDashboardNavbar = _sfc_main$4;
|
|
175
180
|
const _component_UAlert = _sfc_main$2;
|
|
176
|
-
const _component_DesktopMcpCard = __nuxt_component_5;
|
|
177
181
|
const _component_SectionCard = __nuxt_component_11;
|
|
178
|
-
const _component_UIcon = _sfc_main$p;
|
|
179
|
-
const _component_UTabs = _sfc_main$3;
|
|
180
|
-
const _component_CodeBlock = __nuxt_component_5$1;
|
|
181
182
|
const _component_UButton = _sfc_main$k;
|
|
183
|
+
const _component_UTabs = _sfc_main$3;
|
|
184
|
+
const _component_CodeBlock = __nuxt_component_5;
|
|
185
|
+
const _component_UIcon = _sfc_main$p;
|
|
182
186
|
_push(ssrRenderComponent(_component_UDashboardPanel, _attrs, {
|
|
183
187
|
header: withCtx((_, _push2, _parent2, _scopeId) => {
|
|
184
188
|
if (_push2) {
|
|
@@ -202,116 +206,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
202
206
|
} else {
|
|
203
207
|
_push2(`<!---->`);
|
|
204
208
|
}
|
|
205
|
-
if (unref(reporterConfig)) {
|
|
206
|
-
_push2(ssrRenderComponent(_component_DesktopMcpCard, {
|
|
207
|
-
url: unref(reporterConfig).url,
|
|
208
|
-
token: unref(reporterConfig).token
|
|
209
|
-
}, null, _parent2, _scopeId));
|
|
210
|
-
} else {
|
|
211
|
-
_push2(`<!---->`);
|
|
212
|
-
}
|
|
213
|
-
_push2(ssrRenderComponent(_component_SectionCard, {
|
|
214
|
-
icon: "i-lucide-bot",
|
|
215
|
-
title: "What it provides",
|
|
216
|
-
help: "mcp.tools"
|
|
217
|
-
}, {
|
|
218
|
-
default: withCtx((_2, _push3, _parent3, _scopeId2) => {
|
|
219
|
-
if (_push3) {
|
|
220
|
-
_push3(`<div class="flex flex-col gap-1.5"${_scopeId2}><!--[-->`);
|
|
221
|
-
ssrRenderList(unref(tools), (t) => {
|
|
222
|
-
_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}>`);
|
|
223
|
-
_push3(ssrRenderComponent(_component_UIcon, {
|
|
224
|
-
name: "i-lucide-wrench",
|
|
225
|
-
class: "size-4 mt-0.5 shrink-0 text-primary"
|
|
226
|
-
}, null, _parent3, _scopeId2));
|
|
227
|
-
_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>`);
|
|
228
|
-
});
|
|
229
|
-
_push3(`<!--]--></div>`);
|
|
230
|
-
} else {
|
|
231
|
-
return [
|
|
232
|
-
createVNode("div", { class: "flex flex-col gap-1.5" }, [
|
|
233
|
-
(openBlock(true), createBlock(Fragment, null, renderList(unref(tools), (t) => {
|
|
234
|
-
return openBlock(), createBlock("div", {
|
|
235
|
-
key: t.name,
|
|
236
|
-
class: "flex items-start gap-3 px-3 py-2.5 rounded-md bg-elevated/50 border border-default hover:bg-elevated transition-colors"
|
|
237
|
-
}, [
|
|
238
|
-
createVNode(_component_UIcon, {
|
|
239
|
-
name: "i-lucide-wrench",
|
|
240
|
-
class: "size-4 mt-0.5 shrink-0 text-primary"
|
|
241
|
-
}),
|
|
242
|
-
createVNode("div", { class: "min-w-0" }, [
|
|
243
|
-
createVNode("p", { class: "text-sm font-mono font-semibold text-foreground" }, toDisplayString(t.name), 1),
|
|
244
|
-
createVNode("p", { class: "text-xs text-gray-500 dark:text-gray-400 mt-0.5" }, toDisplayString(t.description), 1)
|
|
245
|
-
])
|
|
246
|
-
]);
|
|
247
|
-
}), 128))
|
|
248
|
-
])
|
|
249
|
-
];
|
|
250
|
-
}
|
|
251
|
-
}),
|
|
252
|
-
_: 1
|
|
253
|
-
}, _parent2, _scopeId));
|
|
254
|
-
_push2(ssrRenderComponent(_component_SectionCard, {
|
|
255
|
-
icon: "i-lucide-key",
|
|
256
|
-
title: "Authentication",
|
|
257
|
-
help: "mcp.auth"
|
|
258
|
-
}, {
|
|
259
|
-
default: withCtx((_2, _push3, _parent3, _scopeId2) => {
|
|
260
|
-
if (_push3) {
|
|
261
|
-
_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>`);
|
|
262
|
-
if (!unref(isDesktop)) {
|
|
263
|
-
_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 below. </p>`);
|
|
264
|
-
} else {
|
|
265
|
-
_push3(`<p${_scopeId2}> This app provides a local access token automatically — see <strong${_scopeId2}>Connect an AI assistant (MCP)</strong> above. Use it wherever the snippets show <code class="px-1 py-0.5 bg-muted rounded text-xs font-mono"${_scopeId2}>pd_YOUR_API_KEY</code>. </p>`);
|
|
266
|
-
}
|
|
267
|
-
if (!unref(isDesktop)) {
|
|
268
|
-
_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>`);
|
|
269
|
-
} else {
|
|
270
|
-
_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 — use the token shown above as the <code class="font-mono"${_scopeId2}>Bearer</code> value. The endpoint is not open. </p>`);
|
|
271
|
-
}
|
|
272
|
-
_push3(`</div>`);
|
|
273
|
-
} else {
|
|
274
|
-
return [
|
|
275
|
-
createVNode("div", { class: "space-y-3 text-sm text-gray-600 dark:text-gray-400" }, [
|
|
276
|
-
createVNode("p", null, [
|
|
277
|
-
createTextVNode(" MCP requests are authenticated with the same API keys used by the REST API. API keys start with "),
|
|
278
|
-
createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_"),
|
|
279
|
-
createTextVNode(". ")
|
|
280
|
-
]),
|
|
281
|
-
!unref(isDesktop) ? (openBlock(), createBlock("p", { key: 0 }, [
|
|
282
|
-
createTextVNode(" Generate a key in "),
|
|
283
|
-
createVNode("strong", null, "Settings → Users → [your account] → API keys"),
|
|
284
|
-
createTextVNode(", then replace "),
|
|
285
|
-
createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
|
|
286
|
-
createTextVNode(" in the snippets below. ")
|
|
287
|
-
])) : (openBlock(), createBlock("p", { key: 1 }, [
|
|
288
|
-
createTextVNode(" This app provides a local access token automatically — see "),
|
|
289
|
-
createVNode("strong", null, "Connect an AI assistant (MCP)"),
|
|
290
|
-
createTextVNode(" above. Use it wherever the snippets show "),
|
|
291
|
-
createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
|
|
292
|
-
createTextVNode(". ")
|
|
293
|
-
])),
|
|
294
|
-
!unref(isDesktop) ? (openBlock(), createBlock("p", {
|
|
295
|
-
key: 2,
|
|
296
|
-
class: "text-xs text-gray-400"
|
|
297
|
-
}, [
|
|
298
|
-
createTextVNode(" When authentication is disabled ("),
|
|
299
|
-
createVNode("code", { class: "font-mono" }, "PIWI_AUTH_ENABLED"),
|
|
300
|
-
createTextVNode(" not set), any request is accepted without a key. ")
|
|
301
|
-
])) : (openBlock(), createBlock("p", {
|
|
302
|
-
key: 3,
|
|
303
|
-
class: "text-xs text-gray-400"
|
|
304
|
-
}, [
|
|
305
|
-
createTextVNode(" This desktop app keeps sign-in off but still requires its own local access token on every request — use the token shown above as the "),
|
|
306
|
-
createVNode("code", { class: "font-mono" }, "Bearer"),
|
|
307
|
-
createTextVNode(" value. The endpoint is not open. ")
|
|
308
|
-
]))
|
|
309
|
-
])
|
|
310
|
-
];
|
|
311
|
-
}
|
|
312
|
-
}),
|
|
313
|
-
_: 1
|
|
314
|
-
}, _parent2, _scopeId));
|
|
315
209
|
_push2(ssrRenderComponent(_component_SectionCard, {
|
|
316
210
|
icon: "i-lucide-settings-2",
|
|
317
211
|
title: "Client setup",
|
|
@@ -319,13 +213,36 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
319
213
|
}, {
|
|
320
214
|
default: withCtx((_2, _push3, _parent3, _scopeId2) => {
|
|
321
215
|
if (_push3) {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
_push3(
|
|
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>`);
|
|
325
236
|
} else {
|
|
326
|
-
_push3(
|
|
237
|
+
_push3(`<!---->`);
|
|
327
238
|
}
|
|
328
|
-
_push3(
|
|
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>`);
|
|
329
246
|
_push3(ssrRenderComponent(_component_UTabs, {
|
|
330
247
|
items: clientItems,
|
|
331
248
|
ui: { list: "mb-4" }
|
|
@@ -493,16 +410,52 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
493
410
|
}, _parent3, _scopeId2));
|
|
494
411
|
} else {
|
|
495
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),
|
|
496
451
|
createVNode("p", { class: "text-sm text-gray-500 dark:text-gray-400 mb-4" }, [
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
createTextVNode(" with "),
|
|
500
|
-
unref(isDesktop) ? (openBlock(), createBlock(Fragment, { key: 0 }, [
|
|
501
|
-
createTextVNode("this app's access token (shown above)")
|
|
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.")
|
|
502
454
|
], 64)) : (openBlock(), createBlock(Fragment, { key: 1 }, [
|
|
503
|
-
createTextVNode("
|
|
504
|
-
|
|
505
|
-
|
|
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))
|
|
506
459
|
]),
|
|
507
460
|
createVNode(_component_UTabs, {
|
|
508
461
|
items: clientItems,
|
|
@@ -608,6 +561,106 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
608
561
|
}),
|
|
609
562
|
_: 1
|
|
610
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));
|
|
611
664
|
_push2(ssrRenderComponent(_component_SectionCard, {
|
|
612
665
|
icon: "i-lucide-link",
|
|
613
666
|
title: "Server URL"
|
|
@@ -691,97 +744,58 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
691
744
|
title: "Feature preview",
|
|
692
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."
|
|
693
746
|
})) : createCommentVNode("", true),
|
|
694
|
-
unref(reporterConfig) ? (openBlock(), createBlock(_component_DesktopMcpCard, {
|
|
695
|
-
key: 1,
|
|
696
|
-
url: unref(reporterConfig).url,
|
|
697
|
-
token: unref(reporterConfig).token
|
|
698
|
-
}, null, 8, ["url", "token"])) : createCommentVNode("", true),
|
|
699
|
-
createVNode(_component_SectionCard, {
|
|
700
|
-
icon: "i-lucide-bot",
|
|
701
|
-
title: "What it provides",
|
|
702
|
-
help: "mcp.tools"
|
|
703
|
-
}, {
|
|
704
|
-
default: withCtx(() => [
|
|
705
|
-
createVNode("div", { class: "flex flex-col gap-1.5" }, [
|
|
706
|
-
(openBlock(true), createBlock(Fragment, null, renderList(unref(tools), (t) => {
|
|
707
|
-
return openBlock(), createBlock("div", {
|
|
708
|
-
key: t.name,
|
|
709
|
-
class: "flex items-start gap-3 px-3 py-2.5 rounded-md bg-elevated/50 border border-default hover:bg-elevated transition-colors"
|
|
710
|
-
}, [
|
|
711
|
-
createVNode(_component_UIcon, {
|
|
712
|
-
name: "i-lucide-wrench",
|
|
713
|
-
class: "size-4 mt-0.5 shrink-0 text-primary"
|
|
714
|
-
}),
|
|
715
|
-
createVNode("div", { class: "min-w-0" }, [
|
|
716
|
-
createVNode("p", { class: "text-sm font-mono font-semibold text-foreground" }, toDisplayString(t.name), 1),
|
|
717
|
-
createVNode("p", { class: "text-xs text-gray-500 dark:text-gray-400 mt-0.5" }, toDisplayString(t.description), 1)
|
|
718
|
-
])
|
|
719
|
-
]);
|
|
720
|
-
}), 128))
|
|
721
|
-
])
|
|
722
|
-
]),
|
|
723
|
-
_: 1
|
|
724
|
-
}),
|
|
725
|
-
createVNode(_component_SectionCard, {
|
|
726
|
-
icon: "i-lucide-key",
|
|
727
|
-
title: "Authentication",
|
|
728
|
-
help: "mcp.auth"
|
|
729
|
-
}, {
|
|
730
|
-
default: withCtx(() => [
|
|
731
|
-
createVNode("div", { class: "space-y-3 text-sm text-gray-600 dark:text-gray-400" }, [
|
|
732
|
-
createVNode("p", null, [
|
|
733
|
-
createTextVNode(" MCP requests are authenticated with the same API keys used by the REST API. API keys start with "),
|
|
734
|
-
createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_"),
|
|
735
|
-
createTextVNode(". ")
|
|
736
|
-
]),
|
|
737
|
-
!unref(isDesktop) ? (openBlock(), createBlock("p", { key: 0 }, [
|
|
738
|
-
createTextVNode(" Generate a key in "),
|
|
739
|
-
createVNode("strong", null, "Settings → Users → [your account] → API keys"),
|
|
740
|
-
createTextVNode(", then replace "),
|
|
741
|
-
createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
|
|
742
|
-
createTextVNode(" in the snippets below. ")
|
|
743
|
-
])) : (openBlock(), createBlock("p", { key: 1 }, [
|
|
744
|
-
createTextVNode(" This app provides a local access token automatically — see "),
|
|
745
|
-
createVNode("strong", null, "Connect an AI assistant (MCP)"),
|
|
746
|
-
createTextVNode(" above. Use it wherever the snippets show "),
|
|
747
|
-
createVNode("code", { class: "px-1 py-0.5 bg-muted rounded text-xs font-mono" }, "pd_YOUR_API_KEY"),
|
|
748
|
-
createTextVNode(". ")
|
|
749
|
-
])),
|
|
750
|
-
!unref(isDesktop) ? (openBlock(), createBlock("p", {
|
|
751
|
-
key: 2,
|
|
752
|
-
class: "text-xs text-gray-400"
|
|
753
|
-
}, [
|
|
754
|
-
createTextVNode(" When authentication is disabled ("),
|
|
755
|
-
createVNode("code", { class: "font-mono" }, "PIWI_AUTH_ENABLED"),
|
|
756
|
-
createTextVNode(" not set), any request is accepted without a key. ")
|
|
757
|
-
])) : (openBlock(), createBlock("p", {
|
|
758
|
-
key: 3,
|
|
759
|
-
class: "text-xs text-gray-400"
|
|
760
|
-
}, [
|
|
761
|
-
createTextVNode(" This desktop app keeps sign-in off but still requires its own local access token on every request — use the token shown above as the "),
|
|
762
|
-
createVNode("code", { class: "font-mono" }, "Bearer"),
|
|
763
|
-
createTextVNode(" value. The endpoint is not open. ")
|
|
764
|
-
]))
|
|
765
|
-
])
|
|
766
|
-
]),
|
|
767
|
-
_: 1
|
|
768
|
-
}),
|
|
769
747
|
createVNode(_component_SectionCard, {
|
|
770
748
|
icon: "i-lucide-settings-2",
|
|
771
749
|
title: "Client setup",
|
|
772
750
|
help: "mcp.client-setup"
|
|
773
751
|
}, {
|
|
774
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),
|
|
775
791
|
createVNode("p", { class: "text-sm text-gray-500 dark:text-gray-400 mb-4" }, [
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
createTextVNode(" with "),
|
|
779
|
-
unref(isDesktop) ? (openBlock(), createBlock(Fragment, { key: 0 }, [
|
|
780
|
-
createTextVNode("this app's access token (shown above)")
|
|
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.")
|
|
781
794
|
], 64)) : (openBlock(), createBlock(Fragment, { key: 1 }, [
|
|
782
|
-
createTextVNode("
|
|
783
|
-
|
|
784
|
-
|
|
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))
|
|
785
799
|
]),
|
|
786
800
|
createVNode(_component_UTabs, {
|
|
787
801
|
items: clientItems,
|
|
@@ -885,6 +899,74 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
885
899
|
]),
|
|
886
900
|
_: 1
|
|
887
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
|
+
}),
|
|
888
970
|
createVNode(_component_SectionCard, {
|
|
889
971
|
icon: "i-lucide-link",
|
|
890
972
|
title: "Server URL"
|
|
@@ -941,4 +1023,4 @@ _sfc_main.setup = (props, ctx) => {
|
|
|
941
1023
|
};
|
|
942
1024
|
|
|
943
1025
|
export { _sfc_main as default };
|
|
944
|
-
//# sourceMappingURL=mcp-
|
|
1026
|
+
//# sourceMappingURL=mcp-_o6cMS6m.mjs.map
|