@ai-projector/ide 0.11.0 → 0.11.1
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/bin/install-desktop +0 -0
- package/bin/projector +0 -0
- package/dist/assets/CodeViewer--WUSmn5i.css +1 -0
- package/dist/assets/CodeViewer-C-C3aibO.js +1 -0
- package/dist/assets/DiscussionView-Cd3exhWx.css +1 -0
- package/dist/assets/DiscussionView-K3YyWE-E.js +2 -0
- package/dist/assets/EditorSettings-DlzJc8cp.js +13 -0
- package/dist/assets/EditorSettings-jSngmpPq.css +1 -0
- package/dist/assets/HtmlViewer-DULKK0_6.js +2 -0
- package/dist/assets/HtmlViewer-XHn9rACG.css +1 -0
- package/dist/assets/ImageViewport-BT_ftU4z.js +1 -0
- package/dist/assets/{ImageViewport-BXN_-Ztv.css → ImageViewport-JcG9P4B6.css} +1 -1
- package/dist/assets/IssueView-ChJFmrTW.js +1 -0
- package/dist/assets/MarkdownViewer-C646XbYf.css +1 -0
- package/dist/assets/MarkdownViewer-Dm2MVp3X.js +2 -0
- package/dist/assets/PullRequestView-Cipn5P0H.js +3 -0
- package/dist/assets/PullRequestView-CzZn9mOg.css +1 -0
- package/dist/assets/ReleaseView-Cz6dH4ej.js +2 -0
- package/dist/assets/ReleaseView-VLO9NVfI.css +1 -0
- package/dist/assets/SplitPanes-0-UT7ksm.css +1 -0
- package/dist/assets/SplitPanes-DNDTWIta.js +1 -0
- package/dist/assets/SvgViewer-DP6-1_fw.css +1 -0
- package/dist/assets/SvgViewer-DkoULP8F.js +2 -0
- package/dist/assets/{TerminalView-DnkOpsvR.css → TerminalView-C30_q784.css} +1 -1
- package/dist/assets/TerminalView-fWmIbnZn.js +16 -0
- package/dist/assets/TrackerDetail-CBaLycQg.css +1 -0
- package/dist/assets/TrackerDetail-DuzfEwSZ.js +1 -0
- package/dist/assets/UiButton-AkN01P3P.css +1 -0
- package/dist/assets/UiButton-DvucBdmd.js +2 -0
- package/dist/assets/UiPanel-BUDYIo-h.css +1 -0
- package/dist/assets/UiPanel-DtI4DFYT.js +1 -0
- package/dist/assets/UiViewerPage-CMFEzZ2i.css +1 -0
- package/dist/assets/UiViewerPage-aHNgiSjO.js +2 -0
- package/dist/assets/{VisualMarkdownEditor-CcbKSvtd.css → VisualMarkdownEditor-1DNSAYyq.css} +1 -1
- package/dist/assets/VisualMarkdownEditor-BHx2olWh.js +1070 -0
- package/dist/assets/_plugin-vue_export-helper-D62Ebo7D.js +3 -0
- package/dist/assets/compiler-dom.esm-bundler-C5a_rSi1.js +9 -0
- package/dist/assets/{dist-BnsBZm0f.js → dist-BMX-4S0G.js} +1 -1
- package/dist/assets/{dist-gPzXCSJV.js → dist-BQmIGtmd.js} +1 -1
- package/dist/assets/{dist-tNJpR9Y1.js → dist-Bzl1vuDO.js} +1 -1
- package/dist/assets/{dist-b78ZWHZy.js → dist-CG79NjMk.js} +1 -1
- package/dist/assets/{dist-DrZek4TY.js → dist-Coak6JQD.js} +1 -1
- package/dist/assets/{dist-Br4AY_oy.js → dist-Cu_4z-jQ.js} +1 -1
- package/dist/assets/{dist-CyRvGpIP.js → dist-CzOhSFRQ.js} +1 -1
- package/dist/assets/{dist-B1XyTjRF.js → dist-DN5Y0OA5.js} +1 -1
- package/dist/assets/dist-Dvv0YQ-H.js +23 -0
- package/dist/assets/{dist-dwBOnDaY.js → dist-DzoDV6Eh.js} +2 -2
- package/dist/assets/dist-ZRLBgDFY.js +1 -0
- package/dist/assets/{dist-C-1XYtJO.js → dist-cLGxPfRN.js} +1 -1
- package/dist/assets/{editor-theme-DuQQ8n56.js → editor-theme-ClBxXjSu.js} +1 -1
- package/dist/assets/external-link-lkcxItwM.js +1 -0
- package/dist/assets/{github-emoji-C2UmmDoA.js → github-emoji-CXJ5RSZS.js} +120 -120
- package/dist/assets/{github-emoji-qJihbtN6.css → github-emoji-D8dkjuM_.css} +1 -1
- package/dist/assets/hub-DfPcTPCC.js +1 -0
- package/dist/assets/main-JoBAi6ol.css +1 -0
- package/dist/assets/main-iz4ud0jC.js +178 -0
- package/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/dist/assets/shared.esm-bundler-DoSbGLUP.js +2 -0
- package/dist/assets/styles-CCXo2OoQ.css +1 -0
- package/dist/assets/styles-DZDDPlL3.js +1 -0
- package/dist/hub.html +7 -5
- package/dist/index.html +19 -16
- package/package.json +5 -5
- package/dist/assets/CodeViewer-BAgvP3Yx.js +0 -1
- package/dist/assets/CodeViewer-QIU6uQDH.css +0 -1
- package/dist/assets/DiscussionView-83kZBzfq.js +0 -2
- package/dist/assets/DiscussionView-kEJZ0OhC.css +0 -1
- package/dist/assets/EditorSettings-CPklwfT-.js +0 -13
- package/dist/assets/EditorSettings-DVhn0sGg.css +0 -1
- package/dist/assets/HtmlViewer-C3Mf1IEK.css +0 -1
- package/dist/assets/HtmlViewer-CGHhO9bM.js +0 -2
- package/dist/assets/ImageViewport-lPITcKgO.js +0 -1
- package/dist/assets/IssueView-CfdeTTKs.js +0 -1
- package/dist/assets/MarkdownViewer-3VG5ygRT.css +0 -1
- package/dist/assets/MarkdownViewer-DKZvt6XG.js +0 -2
- package/dist/assets/PullRequestView-Bce3nQML.js +0 -3
- package/dist/assets/PullRequestView-F_M37BOq.css +0 -1
- package/dist/assets/ReleaseView-BKH8Kb3T.css +0 -1
- package/dist/assets/ReleaseView-DO-R7ktE.js +0 -2
- package/dist/assets/SplitPanes-BJR26w00.css +0 -1
- package/dist/assets/SplitPanes-DR126xV8.js +0 -1
- package/dist/assets/SvgViewer-CEIl2Ob2.js +0 -2
- package/dist/assets/SvgViewer-DyAp20sd.css +0 -1
- package/dist/assets/TerminalView-CDAJ5gmT.js +0 -16
- package/dist/assets/TrackerDetail-CV0Qqzx3.js +0 -1
- package/dist/assets/TrackerDetail-OFp4ONUm.css +0 -1
- package/dist/assets/UiPanel-CND7Qs_n.js +0 -1
- package/dist/assets/UiPanel-CS77nWcC.css +0 -1
- package/dist/assets/UiViewerPage-BOvnLith.css +0 -1
- package/dist/assets/UiViewerPage-z_s1uFHO.js +0 -2
- package/dist/assets/VisualMarkdownEditor-CwwWF0eb.js +0 -1069
- package/dist/assets/_plugin-vue_export-helper-C4wFX7Eq.js +0 -24
- package/dist/assets/compiler-dom.esm-bundler-B0iuTsih.js +0 -9
- package/dist/assets/dist-B_hKnsNE.js +0 -1
- package/dist/assets/dist-DzAS050M.js +0 -23
- package/dist/assets/external-link-BFTqPI03.js +0 -1
- package/dist/assets/hub-rvbmNftk.js +0 -1
- package/dist/assets/main-CgMl4Qjs.css +0 -1
- package/dist/assets/main-DEEGhxlk.js +0 -186
- package/dist/assets/shared.esm-bundler-EUzHGNqQ.js +0 -2
- package/dist/assets/styles-C07CLvbW.js +0 -2
- package/dist/assets/styles-CX3Ni7dk.css +0 -1
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/compiler-dom.esm-bundler-B0iuTsih.js","assets/shared.esm-bundler-EUzHGNqQ.js","assets/TerminalView-CDAJ5gmT.js","assets/_plugin-vue_export-helper-C4wFX7Eq.js","assets/styles-C07CLvbW.js","assets/styles-CX3Ni7dk.css","assets/UiPanel-CND7Qs_n.js","assets/UiPanel-CS77nWcC.css","assets/TerminalView-DnkOpsvR.css","assets/CodeViewer-BAgvP3Yx.js","assets/dist-dwBOnDaY.js","assets/preload-helper-BLdHbfdN.js","assets/dist-23D313r2.js","assets/dist-CRLdLpSX.js","assets/editor-theme-DuQQ8n56.js","assets/CodeViewer-QIU6uQDH.css","assets/IssueView-CfdeTTKs.js","assets/UiViewerPage-z_s1uFHO.js","assets/external-link-BFTqPI03.js","assets/UiViewerPage-BOvnLith.css","assets/TrackerDetail-CV0Qqzx3.js","assets/github-emoji-C2UmmDoA.js","assets/ImageViewport-lPITcKgO.js","assets/ImageViewport-BXN_-Ztv.css","assets/github-emoji-qJihbtN6.css","assets/VisualMarkdownEditor-CwwWF0eb.js","assets/dist-Dqsd8MyB.js","assets/VisualMarkdownEditor-CcbKSvtd.css","assets/TrackerDetail-OFp4ONUm.css","assets/PullRequestView-Bce3nQML.js","assets/PullRequestView-F_M37BOq.css","assets/DiscussionView-83kZBzfq.js","assets/DiscussionView-kEJZ0OhC.css","assets/ReleaseView-DO-R7ktE.js","assets/ReleaseView-BKH8Kb3T.css","assets/MarkdownViewer-DKZvt6XG.js","assets/MarkdownViewer-3VG5ygRT.css","assets/SvgViewer-CEIl2Ob2.js","assets/SplitPanes-DR126xV8.js","assets/SplitPanes-BJR26w00.css","assets/SvgViewer-DyAp20sd.css","assets/HtmlViewer-CGHhO9bM.js","assets/HtmlViewer-C3Mf1IEK.css","assets/EditorSettings-CPklwfT-.js","assets/EditorSettings-DVhn0sGg.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as m,O as h,P as g,Q as _,R as v,S as y,T as b,U as x,V as S,W as C,X as w,Y as T,Z as E,_ as D,a as O,at as k,b as A,c as j,ct as M,d as N,dt as ee,et as te,f as P,ft as ne,g as F,h as I,ht as re,i as ie,it as L,j as R,k as z,l as ae,lt as oe,m as B,mt as se,n as ce,nt as le,o as ue,ot as de,p as fe,pt as pe,q as V,r as me,rt as he,s as ge,st as _e,t as H,tt as ve,u as ye,ut as be,v as U,w as W,x as G,y as xe,z as K}from"./_plugin-vue_export-helper-C4wFX7Eq.js";import{A as Se,C as Ce,D as q,E as we,M as Te,N as Ee,O as De,S as Oe,T as ke,_ as Ae,a as je,b as Me,c as Ne,d as Pe,f as Fe,g as Ie,h as Le,i as Re,j as ze,k as Be,l as Ve,m as J,n as He,o as Ue,p as We,s as Ge,t as Ke,u as qe,v as Je,w as Ye,x as Xe,y as Ze}from"./styles-C07CLvbW.js";import{X as Qe,Y as $e,q as Y,tt as X}from"./shared.esm-bundler-EUzHGNqQ.js";import{$ as et,A as tt,B as nt,C as rt,D as it,E as at,F as ot,G as st,H as ct,I as lt,J as ut,K as dt,L as ft,M as pt,N as mt,O as ht,P as gt,Q as _t,R as vt,S as yt,T as bt,U as xt,V as St,W as Ct,X as wt,Y as Tt,Z as Et,_ as Dt,a as Ot,at as kt,b as At,c as jt,ct as Mt,d as Nt,et as Pt,g as Ft,h as It,i as Lt,it as Rt,j as zt,k as Bt,l as Vt,m as Ht,n as Ut,nt as Wt,ot as Gt,p as Kt,q as qt,r as Jt,rt as Yt,s as Xt,st as Zt,t as Qt,tt as $t,u as en,v as tn,w as nn,x as rn,y as an,z as on}from"./dist-dwBOnDaY.js";import{t as sn}from"./UiPanel-CND7Qs_n.js";import{_ as cn,a as ln,b as un,c as dn,d as fn,f as pn,g as mn,h as eee,i as hn,l as gn,m as _n,o as vn,p as yn,s as bn,u as xn,v as Sn,x as Cn,y as tee}from"./github-emoji-C2UmmDoA.js";import{a as wn,c as nee,d as Tn,i as En,l as Dn,n as On,o as kn,r as An,s as jn,t as Mn,u as Nn}from"./UiViewerPage-z_s1uFHO.js";import{t as Pn}from"./preload-helper-BLdHbfdN.js";import{t as Fn}from"./external-link-BFTqPI03.js";import{At as In,C as Ln,Ct as ree,Et as Rn,F as zn,Ft as Bn,L as Vn,Lt as Hn,M as Un,Nt as Wn,O as Gn,Ot as Kn,Pt as qn,Q as Jn,Rt as Yn,X as Xn,Y as Zn,Z as Qn,a as $n,dt as er,jt as tr,kt as nr,mt as rr,ot as ir,q as ar,t as or,zt as sr}from"./dist-23D313r2.js";import{n as cr,t as lr}from"./ImageViewport-lPITcKgO.js";function ur(e){let t=`[${e.name}] ${e.message}`,n=[];return e.fix&&n.push(`fix: ${e.fix}`),e.sources?.length&&n.push(`sources: ${e.sources.join(`, `)}`),e.docs&&n.push(`see: ${e.docs}`),n.length===0?t:[t,...n.map((e,t)=>`${t<n.length-1?`├▶`:`╰▶`} ${e}`)].join(`
|
|
3
|
-
`)}function dr(e,...t){return typeof e==`function`?e(...t):e}function fr({method:e=`warn`,formatter:t=ur}={}){return(n,{method:r=e}={})=>{console[r](t(n))}}var pr=Error.captureStackTrace,mr=class e extends Error{name;code;docs;fix;sources;data;get why(){return this.message}constructor(t,n=e){super(t.why,{cause:t.cause}),this.code=this.name=t.code,this.fix=t.fix,this.docs=t.docs,this.sources=t.sources,this.data=t.data,pr?.(this,n)}toJSON(){return{name:this.name,why:this.why,fix:this.fix,docs:this.docs,sources:this.sources,cause:this.cause,data:this.data,stack:this.stack}}};function hr(e,t){return typeof e==`string`?`${e}/${t.toLowerCase()}`:e?.(t)}function gr(e){let t=e.reporters??[],n={},{docsBase:r}=e;for(let i of Object.keys(e.codes)){let a=e.codes[i],o=a.docs===!1?void 0:a.docs||hr(r,i),s=(e={},n={})=>{let r=new mr({code:i,why:dr(a.why,e),fix:dr(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:dr(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}var _r=e=>e.startsWith(`/`);function vr(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function yr(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&vr(e.default)}var br=Object.assign;function xr(e,t){let n={};for(let r in t){let i=t[r];n[r]=Cr(i)?i.map(e):e(i)}return n}var Sr=()=>{},Cr=Array.isArray;function wr(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var Tr=Symbol(`navigation failure`),Er={1({location:e,currentLocation:t}){return`No match for\n ${JSON.stringify(e)}${t?`
|
|
4
|
-
while being at
|
|
5
|
-
`+JSON.stringify(t):``}`},2({from:e,to:t}){return`Redirected from "${e.fullPath}" to "${Ar(t)}" via a navigation guard.`},4({from:e,to:t}){return`Navigation aborted from "${e.fullPath}" to "${t.fullPath}" via a navigation guard.`},8({from:e,to:t}){return`Navigation cancelled from "${e.fullPath}" to "${t.fullPath}" with a new navigation.`},16({from:e,to:t}){return`Avoided redundant navigation to current location: "${e.fullPath}".`}};function Dr(e,t){return br(Error(Er[e](t)),{type:e,[Tr]:!0},t)}function Or(e,t){return e instanceof Error&&Tr in e&&(t==null||!!(e.type&t))}var kr=[`params`,`query`,`hash`];function Ar(e){if(!e||typeof e==`string`)return e;if(e.path!=null)return e.path;let t={};for(let n of kr)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}var jr=gr({reporters:[fr()],codes:{VUE_ROUTER_R0001:{why:e=>`Parent route "${e.name}" not found when adding child route`,fix:`Add the parent route before its children, or check the parent name for typos.`,docs:`https://router.vuejs.org/guide/advanced/dynamic-routing.html#Adding-nested-routes`},VUE_ROUTER_R0002:{why:e=>`Cannot remove non-existent route "${e.name}"`,fix:`Check the route name; it may already have been removed or was never added.`,docs:`https://router.vuejs.org/guide/advanced/dynamic-routing.html#Removing-routes`},VUE_ROUTER_R0003:{why:e=>`Location "${Ar(e.location)}" resolved to "${e.href}". A resolved location cannot start with multiple slashes.`,fix:`Remove the leading slashes from the location or fix the route configuration.`},VUE_ROUTER_R0004:{why:e=>`No match found for location with path "${Ar(e.path)}"`,fix:`Add a route matching this path or check for typos in the location.`,docs:`https://router.vuejs.org/guide/essentials/dynamic-matching.html#Catch-all-404-Not-found-Route`},VUE_ROUTER_R0005:{why:e=>`router.resolve() was passed an invalid location. This will fail in production.\nLocation: ${Ar(e.rawLocation)}`,fix:"Pass a valid route location: a string path or an object with `path` or `name`."},VUE_ROUTER_R0006:{why:e=>`Path "${e.path}" was passed with params but they will be ignored because a "path" was passed.`,fix:"Use a named route `{ name, params }` instead of `{ path, params }`.",docs:`https://router.vuejs.org/guide/essentials/navigation.html#Navigate-to-a-different-location`},VUE_ROUTER_R0007:{why:e=>`A \`hash\` should always start with the character "#" but received "${e.hash}".`,fix:e=>`Prepend "#" to the hash in your route location: use "#${e.hash}".`},VUE_ROUTER_R0008:{why:e=>`Invalid redirect found:\n${e.target}\n when navigating to "${e.to}".\nThis will break in production.`,fix:"A redirect must resolve to a location with a `name` or `path`; return one of those (or a string path) from `redirect`.",docs:`https://router.vuejs.org/guide/essentials/redirect-and-alias.html#Redirect`},VUE_ROUTER_R0009:{why:e=>`Detected a possibly infinite redirection in a navigation guard when going from "${e.from}" to "${e.to}". Aborting to avoid a Stack Overflow. This might break in production if not fixed.`,fix:`A guard is returning a new location on every call; make that return conditional so it only redirects when actually needed.`,docs:`https://router.vuejs.org/guide/advanced/navigation-guards.html#Global-Before-Guards`},VUE_ROUTER_R0010:{why:`Uncaught error during route navigation`,fix:"Register an error handler with `router.onError()` to handle navigation errors."},VUE_ROUTER_R0011:{why:`Unexpected error when starting the router:`,fix:`Inspect the actual cause; a navigation guard or async component likely threw during the initial navigation.`},VUE_ROUTER_R0020:{why:e=>`No active route record was found when calling \`${e.fn}()\`. Maybe you called it inside of App.vue?`,fix:`Call it from a component rendered inside <router-view> (a page component or one of its children), not from App.vue.`,docs:`https://router.vuejs.org/guide/advanced/composition-api.html#Navigation-Guards`},VUE_ROUTER_R0021:{why:`No active route record was found when reactivating component with navigation guard. This is likely a bug in vue-router.`,fix:`Report with a minimal reproduction at https://github.com/vuejs/router/issues/new/choose.`},VUE_ROUTER_R0022:{why:e=>`${e.fn}() was called outside of component setup but it must be called at the top of a setup function`,fix:"Call it synchronously at the top of `setup()`, before any `await`.",docs:`https://router.vuejs.org/guide/advanced/composition-api.html#Navigation-Guards`},VUE_ROUTER_R0023:{why:e=>`The "next" callback was never called inside of ${e.name?`"${e.name}"`:``}:\n${e.guard}`,fix:"Make sure `next()` runs on every branch, including early returns and async paths, or drop the `next` parameter and return the value instead.",docs:`https://router.vuejs.org/guide/advanced/navigation-guards.html#Optional-third-argument-next`},VUE_ROUTER_R0024:{why:e=>`The "next" callback was called more than once in one navigation guard when going from "${e.from}" to "${e.to}". This will fail in production.`,fix:"Call `next()` exactly once per guard: remove the extra call, or migrate to returning the value you passed to `next()`.",docs:`https://router.vuejs.org/guide/advanced/navigation-guards.html#Optional-third-argument-next`},VUE_ROUTER_R0025:{why:"The `next()` callback in navigation guards is deprecated.",fix:'Return the value instead: `next()` becomes `return`, `next(false)` becomes `return false`, `next("/path")` becomes `return "/path"`.',docs:`https://router.vuejs.org/guide/advanced/navigation-guards.html#Optional-third-argument-next`},VUE_ROUTER_R0026:{why:e=>`Record with path "${e.path}" is either missing a "component(s)" or "children" property.`,fix:"Add a `component`, `components`, or `children` to the route record.",docs:`https://router.vuejs.org/guide/essentials/nested-routes.html`},VUE_ROUTER_R0027:{why:e=>`Component "${e.name}" in record with path "${e.path}" is not a valid component. Received "${e.received}".`,fix:`Pass a component or a function returning a Promise that resolves to one.`},VUE_ROUTER_R0028:{why:e=>`Component "${e.name}" in record with path "${e.path}" is a Promise instead of a function that returns a Promise. This will break in production if not fixed.`,fix:`Defer the import in an arrow function so it loads lazily: write "() => import('./MyPage.vue')", not "import('./MyPage.vue')".`,docs:`https://router.vuejs.org/guide/advanced/lazy-loading.html`},VUE_ROUTER_R0029:{why:e=>`Component "${e.name}" in record with path "${e.path}" is defined using "defineAsyncComponent()".`,fix:`Drop the wrapper and pass "() => import('./MyPage.vue')" directly; the router handles lazy components itself.`,docs:`https://router.vuejs.org/guide/advanced/lazy-loading.html#Relationship-to-async-components`},VUE_ROUTER_R0030:{why:e=>`Component "${e.name}" in record with path "${e.path}" is a function that does not return a Promise. This will break in production if not fixed.`,fix:'Return a dynamic import (`() => import("./MyPage.vue")`) from the function, or add a `displayName` if it is a functional component.',docs:`https://router.vuejs.org/guide/advanced/lazy-loading.html`},VUE_ROUTER_R0040:{why:e=>`Because "${e.el}" starts with "#", scrollBehavior resolves it as an element id via document.getElementById("${e.el.slice(1)}"), not as a CSS selector. No element has that id, but "${e.el}" does match an element with document.querySelector().`,fix:e=>`Resolve the element yourself and return the node: el: document.querySelector('${e.el}').`,docs:`https://router.vuejs.org/guide/advanced/scroll-behavior.html`},VUE_ROUTER_R0041:{why:e=>`The selector "${e.el}" is invalid. See https://mathiasbynens.be/notes/css-escapes or CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape) for the escaping rules.`,fix:"Build an id selector as `#${CSS.escape(id)}` so special characters in the id are escaped.",docs:`https://router.vuejs.org/guide/advanced/scroll-behavior.html`},VUE_ROUTER_R0042:{why:e=>`Couldn't find element using selector "${e.el}" returned by scrollBehavior.`,fix:`Return a selector that matches an existing element, or guard against missing elements.`,docs:`https://router.vuejs.org/guide/advanced/scroll-behavior.html`},VUE_ROUTER_R0050:{why:e=>{let t;try{t=e.to===void 0?`undefined`:JSON.stringify(e.to)}catch{t=String(e.to)}return`Invalid value for prop "to" in useLink()\n- to: ${t}`},fix:`Pass a valid route location (a string path or an object) to the "to" prop.`},VUE_ROUTER_R0060:{why:e=>`<router-view> can no longer be used directly inside <${e.comp}>.`,fix:e=>`Wrap the slot's resolved component with <${e.comp}> instead of nesting <router-view> in it:\n\n<router-view v-slot="{ Component }">\n <${e.comp}>\n <component :is="Component" />\n </${e.comp}>\n</router-view>`,docs:`https://router.vuejs.org/guide/advanced/router-view-slot.html#KeepAlive-Transition`},VUE_ROUTER_R0070:{why:e=>`Cannot resolve a relative location without an absolute path. Trying to resolve "${e.to}" from "${e.from}".`,fix:e=>`Resolve from an absolute \`from\` path that starts with "/", e.g. "/${e.from}".`},VUE_ROUTER_R0080:{why:e=>`Error decoding "${e.text}". Using original value`,fix:`Ensure the value is correctly percent-encoded.`},VUE_ROUTER_R0090:{why:e=>`Found duplicated params with name "${e.name}" for path "${e.path}". Only the last one will be available on "$route.params".`,fix:`Give each param a unique name within the path.`,docs:`https://router.vuejs.org/guide/essentials/route-matching-syntax.html`},VUE_ROUTER_R0100:{why:e=>`Discarded invalid param(s) "${e.params}" when navigating.`+e.inherited+` See https://github.com/vuejs/router/commit/e887570 for more details.`,fix:`Only pass params that exist on the target route.`},VUE_ROUTER_R0101:{why:e=>`The Matcher cannot resolve relative paths but received "${e.path}". Unless you directly called \`matcher.resolve("${e.path}")\`, this is probably a bug in vue-router. Please open an issue at https://github.com/vuejs/router/issues/new/choose.`,fix:`Pass an absolute path (starting with "/") to the matcher.`},VUE_ROUTER_R0102:{why:e=>`Alias "${e.alias}" and the original record: "${e.original}" must have the exact same param named "${e.name}"`,fix:`Use the same param names in the alias as in the original route.`,docs:`https://router.vuejs.org/guide/essentials/redirect-and-alias.html#Alias`},VUE_ROUTER_R0103:{why:e=>`The route named "${e.name}" has a child without a name, an empty path, and no children. Using that name won't render the empty path child, so this is probably a mistake.`,fix:"Move the `name` onto the empty-path child; or, if intentional, give the child its own name to silence this.",docs:`https://router.vuejs.org/guide/essentials/nested-routes.html#Nested-Named-Routes`},VUE_ROUTER_R0104:{why:e=>`Absolute path "${e.path}" must have the exact same param named "${e.name}" as its parent "${e.parent}".`,fix:`Include the parent route params in the absolute child path.`,docs:`https://router.vuejs.org/guide/essentials/nested-routes.html`},VUE_ROUTER_R0105:{why:e=>`Finding ancestor route "${e.ancestor}" failed for "${e.record}"`,fix:`Report a reproduction at https://github.com/vuejs/router/issues/new/choose.`},VUE_ROUTER_R0110:{why:`A hash base must end with a "#"`,fix:e=>`Append "#" to the "base" argument passed to "createWebHashHistory()": "${e.base}" should be "${e.suggestion}".`},VUE_ROUTER_R0120:{why:`Error with push/replace State`,fix:`The browser rejected the history API call; check for cross-origin or rate-limit issues.`},VUE_ROUTER_R0121:{why:`history.state seems to have been manually replaced without preserving the necessary values.
|
|
6
|
-
You can find more information at https://router.vuejs.org/guide/migration/#Usage-of-history-state`,fix:"Merge the router's state into your own when calling it manually: `history.replaceState({ ...history.state, ...yourState }, '', url)`.",docs:`https://router.vuejs.org/guide/migration.html#Usage-of-history-state`},VUE_ROUTER_R1001:{why:e=>`Data loader "${String(e.key)}" has a different parent than the current context. This shouldn't be happening.`,fix:`Report a bug with a minimal reproduction at https://github.com/vuejs/router/.`},VUE_ROUTER_R1002:{why:`Returning a NavigationResult is deprecated.`,fix:"Replace `return new NavigationResult(to)` with `reroute(to)`, which throws internally to reroute.",docs:`https://router.vuejs.org/data-loaders/navigation-aware.html#Controlling-the-navigation-with-reroute-`},VUE_ROUTER_R1003:{why:e=>`Loader "${e.key}"'s "commit()" was called but there is no staged data.`,fix:"Ensure the loader resolved before calling `commit()`.",docs:`https://router.vuejs.org/data-loaders/defining-loaders.html#Delaying-data-updates-with-commit`},VUE_ROUTER_R1004:{why:e=>`A loader returned a NavigationResult but is not registered on the route.`+e.key,fix:"Export the loader from the page component so it gets registered, e.g. `export const useUserData = defineLoader(...)`.",docs:`https://router.vuejs.org/data-loaders/organization.html`},VUE_ROUTER_R1005:{why:e=>`Data loader "${e.key}" has itself as parent. This shouldn't be happening.`,fix:`Report a bug with a minimal reproduction at https://github.com/vuejs/router/.`},VUE_ROUTER_R1006:{why:e=>`A query was defined with the same key as the loader "[${e.key}]".\nSee https://pinia-colada.esm.dev/#TODO`,fix:"If the key is meant to match, use the data loader directly; otherwise rename the `useQuery()` key so it no longer collides.",docs:`https://router.vuejs.org/data-loaders/colada.html`},VUE_ROUTER_R1007:{why:`Data Loader was setup twice.`,fix:"Register `DataLoaderPlugin` a single time via `app.use()`.",docs:`https://router.vuejs.org/data-loaders.html#Installation`},VUE_ROUTER_R1008:{why:`Data Loader is experimental and subject to breaking changes in the future.`,docs:`https://router.vuejs.org/data-loaders.html`},VUE_ROUTER_R1009:{why:`Returning a NavigationResult from a loader is deprecated.`,fix:"Call `reroute(to)` inside the loader instead of returning `new NavigationResult(to)`; it throws internally to reroute.",docs:`https://router.vuejs.org/data-loaders/navigation-aware.html#Controlling-the-navigation-with-reroute-`}}}),Mr=Symbol(`router view location matched`),Nr=Symbol(`router view depth`),Pr=Symbol(`router`),Fr=Symbol(`route location`),Ir=Symbol(`router view location`);function Lr(){return z(Pr)}function Rr(e){return z(Fr)}var zr=Object.create,Br=Object.defineProperty,Vr=Object.getOwnPropertyDescriptor,Hr=Object.getOwnPropertyNames,Ur=Object.getPrototypeOf,Wr=Object.prototype.hasOwnProperty,Gr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Kr=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=Hr(t),a=0,o=i.length,s;a<o;a++)s=i[a],!Wr.call(e,s)&&s!==n&&Br(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=Vr(t,s))||r.enumerable});return e},qr=(e,t,n)=>(n=e==null?{}:zr(Ur(e)),Kr(t||!e||!e.__esModule?Br(n,`default`,{value:e,enumerable:!0}):n,e)),Jr=typeof navigator<`u`,Z=typeof window<`u`?window:typeof globalThis<`u`?globalThis:typeof global<`u`?global:{};Z.chrome!==void 0&&Z.chrome.devtools,Jr&&(Z.self,Z.top),typeof navigator<`u`&&navigator.userAgent?.toLowerCase().includes(`electron`),typeof window<`u`&&window.__NUXT__;var Yr=qr(Gr(((e,t)=>{t.exports=r;function n(e){return e instanceof Buffer?Buffer.from(e):new e.constructor(e.buffer.slice(),e.byteOffset,e.length)}function r(e){if(e||={},e.circles)return i(e);let t=new Map;if(t.set(Date,e=>new Date(e)),t.set(Map,(e,t)=>new Map(a(Array.from(e),t))),t.set(Set,(e,t)=>new Set(a(Array.from(e),t))),e.constructorHandlers)for(let n of e.constructorHandlers)t.set(n[0],n[1]);let r=null;return e.proto?s:o;function a(e,i){let a=Object.keys(e),o=Array(a.length);for(let s=0;s<a.length;s++){let c=a[s],l=e[c];o[c]=typeof l!=`object`||!l?l:l.constructor!==Object&&(r=t.get(l.constructor))?r(l,i):ArrayBuffer.isView(l)?n(l):i(l)}return o}function o(e){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return a(e,o);if(e.constructor!==Object&&(r=t.get(e.constructor)))return r(e,o);let i={};for(let a in e){if(Object.hasOwnProperty.call(e,a)===!1)continue;let s=e[a];i[a]=typeof s!=`object`||!s?s:s.constructor!==Object&&(r=t.get(s.constructor))?r(s,o):ArrayBuffer.isView(s)?n(s):o(s)}return i}function s(e){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return a(e,s);if(e.constructor!==Object&&(r=t.get(e.constructor)))return r(e,s);let i={};for(let a in e){let o=e[a];i[a]=typeof o!=`object`||!o?o:o.constructor!==Object&&(r=t.get(o.constructor))?r(o,s):ArrayBuffer.isView(o)?n(o):s(o)}return i}}function i(e){let t=[],r=[],i=new Map;if(i.set(Date,e=>new Date(e)),i.set(Map,(e,t)=>new Map(o(Array.from(e),t))),i.set(Set,(e,t)=>new Set(o(Array.from(e),t))),e.constructorHandlers)for(let t of e.constructorHandlers)i.set(t[0],t[1]);let a=null;return e.proto?c:s;function o(e,o){let s=Object.keys(e),c=Array(s.length);for(let l=0;l<s.length;l++){let u=s[l],d=e[u];if(typeof d!=`object`||!d)c[u]=d;else if(d.constructor!==Object&&(a=i.get(d.constructor)))c[u]=a(d,o);else if(ArrayBuffer.isView(d))c[u]=n(d);else{let e=t.indexOf(d);c[u]=e===-1?o(d):r[e]}}return c}function s(e){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return o(e,s);if(e.constructor!==Object&&(a=i.get(e.constructor)))return a(e,s);let c={};t.push(e),r.push(c);for(let o in e){if(Object.hasOwnProperty.call(e,o)===!1)continue;let l=e[o];if(typeof l!=`object`||!l)c[o]=l;else if(l.constructor!==Object&&(a=i.get(l.constructor)))c[o]=a(l,s);else if(ArrayBuffer.isView(l))c[o]=n(l);else{let e=t.indexOf(l);c[o]=e===-1?s(l):r[e]}}return t.pop(),r.pop(),c}function c(e){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return o(e,c);if(e.constructor!==Object&&(a=i.get(e.constructor)))return a(e,c);let s={};t.push(e),r.push(s);for(let o in e){let l=e[o];if(typeof l!=`object`||!l)s[o]=l;else if(l.constructor!==Object&&(a=i.get(l.constructor)))s[o]=a(l,c);else if(ArrayBuffer.isView(l))s[o]=n(l);else{let e=t.indexOf(l);s[o]=e===-1?c(l):r[e]}}return t.pop(),r.pop(),s}}}))(),1),Xr=/(?:^|[-_/])(\w)/g;function Zr(e,t){return t?t.toUpperCase():``}function Qr(e){return e&&`${e}`.replace(Xr,Zr)}function $r(e,t){let n=e.replace(/^[a-z]:/i,``).replace(/\\/g,`/`);n.endsWith(`index${t}`)&&(n=n.replace(`/index${t}`,t));let r=n.lastIndexOf(`/`),i=n.substring(r+1);if(t){let e=i.lastIndexOf(t);return i.substring(0,e)}return``}var ei=(0,Yr.default)({circles:!0}),ti={trailing:!0};function ni(e,t=25,n={}){if(n={...ti,...n},!Number.isFinite(t))throw TypeError("Expected `wait` to be a finite number");let r,i,a=[],o,s,c=(t,r)=>(o=ri(e,t,r),o.finally(()=>{if(o=null,n.trailing&&s&&!i){let e=c(t,s);return s=null,e}}),o),l=function(...e){return n.trailing&&(s=e),o||new Promise(o=>{let l=!i&&n.leading;clearTimeout(i),i=setTimeout(()=>{i=null;let t=n.leading?r:c(this,e);s=null;for(let e of a)e(t);a=[]},t),l?(r=c(this,e),o(r)):a.push(o)})},u=e=>{e&&(clearTimeout(e),i=null)};return l.isPending=()=>!!i,l.cancel=()=>{u(i),a=[],s=null},l.flush=()=>{if(u(i),!s||o)return;let e=s;return s=null,c(this,e)},l}async function ri(e,t,n){return await e.apply(t,n)}function ii(e,t={},n){for(let r in e){let i=e[r],a=n?`${n}:${r}`:r;typeof i==`object`&&i?ii(i,t,a):typeof i==`function`&&(t[a]=i)}return t}var ai={run:e=>e()},oi=console.createTask===void 0?()=>ai:console.createTask;function si(e,t){let n=oi(t.shift());return e.reduce((e,r)=>e.then(()=>n.run(()=>r(...t))),Promise.resolve())}function ci(e,t){let n=oi(t.shift());return Promise.all(e.map(e=>n.run(()=>e(...t))))}function li(e,t){for(let n of[...e])n(t)}var ui=class{constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(e,t,n={}){if(!e||typeof t!=`function`)return()=>{};let r=e,i;for(;this._deprecatedHooks[e];)i=this._deprecatedHooks[e],e=i.to;if(i&&!n.allowDeprecated){let e=i.message;e||=`${r} hook has been deprecated`+(i.to?`, please use ${i.to}`:``),this._deprecatedMessages||=new Set,this._deprecatedMessages.has(e)||(console.warn(e),this._deprecatedMessages.add(e))}if(!t.name)try{Object.defineProperty(t,"name",{get:()=>`_`+e.replace(/\W+/g,`_`)+`_hook_cb`,configurable:!0})}catch{}return this._hooks[e]=this._hooks[e]||[],this._hooks[e].push(t),()=>{t&&=(this.removeHook(e,t),void 0)}}hookOnce(e,t){let n,r=(...e)=>(typeof n==`function`&&n(),n=void 0,r=void 0,t(...e));return n=this.hook(e,r),n}removeHook(e,t){if(this._hooks[e]){let n=this._hooks[e].indexOf(t);n!==-1&&this._hooks[e].splice(n,1),this._hooks[e].length===0&&delete this._hooks[e]}}deprecateHook(e,t){this._deprecatedHooks[e]=typeof t==`string`?{to:t}:t;let n=this._hooks[e]||[];delete this._hooks[e];for(let t of n)this.hook(e,t)}deprecateHooks(e){Object.assign(this._deprecatedHooks,e);for(let t in e)this.deprecateHook(t,e[t])}addHooks(e){let t=ii(e),n=Object.keys(t).map(e=>this.hook(e,t[e]));return()=>{for(let e of n.splice(0,n.length))e()}}removeHooks(e){let t=ii(e);for(let e in t)this.removeHook(e,t[e])}removeAllHooks(){for(let e in this._hooks)delete this._hooks[e]}callHook(e,...t){return t.unshift(e),this.callHookWith(si,e,...t)}callHookParallel(e,...t){return t.unshift(e),this.callHookWith(ci,e,...t)}callHookWith(e,t,...n){let r=this._before||this._after?{name:t,args:n,context:{}}:void 0;this._before&&li(this._before,r);let i=e(t in this._hooks?[...this._hooks[t]]:[],n);return i instanceof Promise?i.finally(()=>{this._after&&r&&li(this._after,r)}):(this._after&&r&&li(this._after,r),i)}beforeEach(e){return this._before=this._before||[],this._before.push(e),()=>{if(this._before!==void 0){let t=this._before.indexOf(e);t!==-1&&this._before.splice(t,1)}}}afterEach(e){return this._after=this._after||[],this._after.push(e),()=>{if(this._after!==void 0){let t=this._after.indexOf(e);t!==-1&&this._after.splice(t,1)}}}};function di(){return new ui}var fi=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);function iee(e){if(typeof e==`function`)return e.displayName||e.name||e.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__||``;let t=e.name||e._componentTag||e.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__||e.__name;return t===`index`&&e.__file?.endsWith(`index.vue`)?``:t}function aee(e){let t=e.__file;if(t)return Qr($r(t,`.vue`))}function pi(e,t){return e.type.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__=t,t}function mi(e){if(e.__VUE_DEVTOOLS_NEXT_APP_RECORD__)return e.__VUE_DEVTOOLS_NEXT_APP_RECORD__;if(e.root)return e.appContext.app.__VUE_DEVTOOLS_NEXT_APP_RECORD__}function hi(e){let t=e.subTree?.type,n=mi(e);return n?n?.types?.Fragment===t:!1}function gi(e){let t=iee(e?.type||{});if(t)return t;if(e?.root===e)return`Root`;for(let t in e.parent?.type?.components)if(e.parent.type.components[t]===e?.type)return pi(e,t);for(let t in e.appContext?.components)if(e.appContext.components[t]===e?.type)return pi(e,t);return aee(e?.type||{})||`Anonymous Component`}function _i(e){return`${e?.appContext?.app?.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__??0}:${e===e?.root?`root`:e.uid}`}function vi(e,t){return t||=`${e.id}:root`,e.instanceMap.get(t)||e.instanceMap.get(`:root`)}function yi(){let e={top:0,bottom:0,left:0,right:0,get width(){return e.right-e.left},get height(){return e.bottom-e.top}};return e}var bi;function xi(e){return bi||=document.createRange(),bi.selectNode(e),bi.getBoundingClientRect()}function Si(e){let t=yi();if(!e.children)return t;for(let n=0,r=e.children.length;n<r;n++){let r=e.children[n],i;if(r.component)i=Ti(r.component);else if(r.el){let e=r.el;e.nodeType===1||e.getBoundingClientRect?i=e.getBoundingClientRect():e.nodeType===3&&e.data.trim()&&(i=xi(e))}i&&Ci(t,i)}return t}function Ci(e,t){return(!e.top||t.top<e.top)&&(e.top=t.top),(!e.bottom||t.bottom>e.bottom)&&(e.bottom=t.bottom),(!e.left||t.left<e.left)&&(e.left=t.left),(!e.right||t.right>e.right)&&(e.right=t.right),e}var wi={top:0,left:0,right:0,bottom:0,width:0,height:0};function Ti(e){let t=e.subTree.el;return typeof window>`u`?wi:hi(e)?Si(e.subTree):t?.nodeType===1?t?.getBoundingClientRect():e.subTree.component?Ti(e.subTree.component):wi}function Ei(e){return hi(e)?Di(e.subTree):e.subTree?[e.subTree.el]:[]}function Di(e){if(!e.children)return[];let t=[];return e.children.forEach(e=>{e.component?t.push(...Ei(e.component)):e?.el&&t.push(e.el)}),t}var Oi=`__vue-devtools-component-inspector__`,ki=`__vue-devtools-component-inspector__card__`,Ai=`__vue-devtools-component-inspector__name__`,ji=`__vue-devtools-component-inspector__indicator__`,Mi={display:`block`,zIndex:2147483640,position:`fixed`,backgroundColor:`#42b88325`,border:`1px solid #42b88350`,borderRadius:`5px`,transition:`all 0.1s ease-in`,pointerEvents:`none`},Ni={fontFamily:`Arial, Helvetica, sans-serif`,padding:`5px 8px`,borderRadius:`4px`,textAlign:`left`,position:`absolute`,left:0,color:`#e9e9e9`,fontSize:`14px`,fontWeight:600,lineHeight:`24px`,backgroundColor:`#42b883`,boxShadow:`0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)`},Pi={display:`inline-block`,fontWeight:400,fontStyle:`normal`,fontSize:`12px`,opacity:.7};function Fi(){return document.getElementById(Oi)}function Ii(){return document.getElementById(ki)}function Li(){return document.getElementById(ji)}function Ri(){return document.getElementById(Ai)}function zi(e){return{left:`${Math.round(e.left*100)/100}px`,top:`${Math.round(e.top*100)/100}px`,width:`${Math.round(e.width*100)/100}px`,height:`${Math.round(e.height*100)/100}px`}}function Bi(e){let t=document.createElement(`div`);t.id=e.elementId??Oi,Object.assign(t.style,{...Mi,...zi(e.bounds),...e.style});let n=document.createElement(`span`);n.id=ki,Object.assign(n.style,{...Ni,top:e.bounds.top<35?0:`-35px`});let r=document.createElement(`span`);r.id=Ai,r.innerHTML=`<${e.name}> `;let i=document.createElement(`i`);return i.id=ji,i.innerHTML=`${Math.round(e.bounds.width*100)/100} x ${Math.round(e.bounds.height*100)/100}`,Object.assign(i.style,Pi),n.appendChild(r),n.appendChild(i),t.appendChild(n),document.body.appendChild(t),t}function Vi(e){let t=Fi(),n=Ii(),r=Ri(),i=Li();t&&(Object.assign(t.style,{...Mi,...zi(e.bounds)}),Object.assign(n.style,{top:e.bounds.top<35?0:`-35px`}),r.innerHTML=`<${e.name}> `,i.innerHTML=`${Math.round(e.bounds.width*100)/100} x ${Math.round(e.bounds.height*100)/100}`)}function Hi(e){let t=Ti(e);if(!t.width&&!t.height)return;let n=gi(e);Fi()?Vi({bounds:t,name:n}):Bi({bounds:t,name:n})}function Ui(){let e=Fi();e&&(e.style.display=`none`)}var Wi=null;function Gi(e){let t=e.target;if(t){let e=t.__vueParentComponent;if(e&&(Wi=e,e.vnode.el)){let t=Ti(e),n=gi(e);Fi()?Vi({bounds:t,name:n}):Bi({bounds:t,name:n})}}}function Ki(e,t){e.preventDefault(),e.stopPropagation(),Wi&&t(_i(Wi))}var qi=null;function Ji(){Ui(),window.removeEventListener(`mouseover`,Gi),window.removeEventListener(`click`,qi,!0),qi=null}function Yi(){return window.addEventListener(`mouseover`,Gi),new Promise(e=>{function t(n){n.preventDefault(),n.stopPropagation(),Ki(n,n=>{window.removeEventListener(`click`,t,!0),qi=null,window.removeEventListener(`mouseover`,Gi);let r=Fi();r&&(r.style.display=`none`),e(JSON.stringify({id:n}))})}qi=t,window.addEventListener(`click`,t,!0)})}function Xi(e){let t=vi(wa.value,e.id);if(t){let[n]=Ei(t);if(typeof n.scrollIntoView==`function`)n.scrollIntoView({behavior:`smooth`});else{let e=Ti(t),n=document.createElement(`div`),r={...zi(e),position:`absolute`};Object.assign(n.style,r),document.body.appendChild(n),n.scrollIntoView({behavior:`smooth`}),setTimeout(()=>{document.body.removeChild(n)},2e3)}setTimeout(()=>{let n=Ti(t);if(n.width||n.height){let r=gi(t),i=Fi();i?Vi({...e,name:r,bounds:n}):Bi({...e,name:r,bounds:n}),setTimeout(()=>{i&&(i.style.display=`none`)},1500)}},1200)}}Z.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__??=!0;function Zi(e){let t=0,n=setInterval(()=>{Z.__VUE_INSPECTOR__&&(clearInterval(n),t+=30,e()),t>=5e3&&clearInterval(n)},30)}function Qi(){let e=Z.__VUE_INSPECTOR__,t=e.openInEditor;e.openInEditor=async(...n)=>{e.disable(),t(...n)}}function $i(){return new Promise(e=>{function t(){Qi(),e(Z.__VUE_INSPECTOR__)}Z.__VUE_INSPECTOR__?t():Zi(()=>{t()})})}var ea=function(e){return e.SKIP=`__v_skip`,e.IS_REACTIVE=`__v_isReactive`,e.IS_READONLY=`__v_isReadonly`,e.IS_SHALLOW=`__v_isShallow`,e.RAW=`__v_raw`,e}({});function ta(e){return!!(e&&e[ea.IS_READONLY])}function na(e){return ta(e)?na(e[ea.RAW]):!!(e&&e[ea.IS_REACTIVE])}function ra(e){return!!(e&&e.__v_isRef===!0)}function ia(e){let t=e&&e[ea.RAW];return t?ia(t):e}var aa=class{constructor(){this.refEditor=new oa}set(e,t,n,r){let i=Array.isArray(t)?t:t.split(`.`);for(;i.length>1;){let t=i.shift();e=e instanceof Map?e.get(t):e instanceof Set?Array.from(e.values())[t]:e[t],this.refEditor.isRef(e)&&(e=this.refEditor.get(e))}let a=i[0],o=this.refEditor.get(e)[a];r?r(e,a,n):this.refEditor.isRef(o)?this.refEditor.set(o,n):e[a]=n}get(e,t){let n=Array.isArray(t)?t:t.split(`.`);for(let t=0;t<n.length;t++)if(e=e instanceof Map?e.get(n[t]):e[n[t]],this.refEditor.isRef(e)&&(e=this.refEditor.get(e)),!e)return;return e}has(e,t,n=!1){if(e===void 0)return!1;let r=Array.isArray(t)?t.slice():t.split(`.`),i=n?2:1;for(;e&&r.length>i;){let t=r.shift();e=e[t],this.refEditor.isRef(e)&&(e=this.refEditor.get(e))}return e!=null&&Object.prototype.hasOwnProperty.call(e,r[0])}createDefaultSetCallback(e){return(t,n,r)=>{if((e.remove||e.newKey)&&(Array.isArray(t)?t.splice(n,1):ia(t)instanceof Map?t.delete(n):ia(t)instanceof Set?t.delete(Array.from(t.values())[n]):Reflect.deleteProperty(t,n)),!e.remove){let i=t[e.newKey||n];this.refEditor.isRef(i)?this.refEditor.set(i,r):ia(t)instanceof Map?t.set(e.newKey||n,r):ia(t)instanceof Set?t.add(r):t[e.newKey||n]=r}}}},oa=class{set(e,t){if(ra(e))e.value=t;else{if(e instanceof Set&&Array.isArray(t)){e.clear(),t.forEach(t=>e.add(t));return}let n=Object.keys(t);if(e instanceof Map){let r=new Set(e.keys());n.forEach(n=>{e.set(n,Reflect.get(t,n)),r.delete(n)}),r.forEach(t=>e.delete(t));return}let r=new Set(Object.keys(e));n.forEach(n=>{Reflect.set(e,n,Reflect.get(t,n)),r.delete(n)}),r.forEach(t=>Reflect.deleteProperty(e,t))}}get(e){return ra(e)?e.value:e}isRef(e){return ra(e)||na(e)}};new aa;var sa=`__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS_STATE__`;function ca(){if(typeof window>`u`||!Jr||typeof localStorage>`u`||localStorage===null)return{recordingState:!1,mouseEventEnabled:!1,keyboardEventEnabled:!1,componentEventEnabled:!1,performanceEventEnabled:!1,selected:``};let e=localStorage.getItem===void 0?null:localStorage.getItem(sa);return e?JSON.parse(e):{recordingState:!1,mouseEventEnabled:!1,keyboardEventEnabled:!1,componentEventEnabled:!1,performanceEventEnabled:!1,selected:``}}Z.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS??=[];var la=new Proxy(Z.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS,{get(e,t,n){return Reflect.get(e,t,n)}});function ua(e,t){Oa.timelineLayersState[t.id]=!1,la.push({...e,descriptorId:t.id,appRecord:mi(t.app)})}Z.__VUE_DEVTOOLS_KIT_INSPECTOR__??=[];var da=new Proxy(Z.__VUE_DEVTOOLS_KIT_INSPECTOR__,{get(e,t,n){return Reflect.get(e,t,n)}}),fa=ni(()=>{Xa.hooks.callHook(va.SEND_INSPECTOR_TO_CLIENT,ma())});function pa(e,t){da.push({options:e,descriptor:t,treeFilterPlaceholder:e.treeFilterPlaceholder??`Search tree...`,stateFilterPlaceholder:e.stateFilterPlaceholder??`Search state...`,treeFilter:``,selectedNodeId:``,appRecord:mi(t.app)}),fa()}function ma(){return da.filter(e=>e.descriptor.app===wa.value.app).filter(e=>e.descriptor.id!==`components`).map(e=>{let t=e.descriptor,n=e.options;return{id:n.id,label:n.label,logo:t.logo,icon:`custom-ic-baseline-${n?.icon?.replace(/_/g,`-`)}`,packageName:t.packageName,homepage:t.homepage,pluginId:t.id}})}function ha(e,t){return da.find(n=>n.options.id===e&&(!t||n.descriptor.app===t))}var ga=function(e){return e.VISIT_COMPONENT_TREE=`visitComponentTree`,e.INSPECT_COMPONENT=`inspectComponent`,e.EDIT_COMPONENT_STATE=`editComponentState`,e.GET_INSPECTOR_TREE=`getInspectorTree`,e.GET_INSPECTOR_STATE=`getInspectorState`,e.EDIT_INSPECTOR_STATE=`editInspectorState`,e.INSPECT_TIMELINE_EVENT=`inspectTimelineEvent`,e.TIMELINE_CLEARED=`timelineCleared`,e.SET_PLUGIN_SETTINGS=`setPluginSettings`,e}({}),_a=function(e){return e.ADD_INSPECTOR=`addInspector`,e.SEND_INSPECTOR_TREE=`sendInspectorTree`,e.SEND_INSPECTOR_STATE=`sendInspectorState`,e.CUSTOM_INSPECTOR_SELECT_NODE=`customInspectorSelectNode`,e.TIMELINE_LAYER_ADDED=`timelineLayerAdded`,e.TIMELINE_EVENT_ADDED=`timelineEventAdded`,e.GET_COMPONENT_INSTANCES=`getComponentInstances`,e.GET_COMPONENT_BOUNDS=`getComponentBounds`,e.GET_COMPONENT_NAME=`getComponentName`,e.COMPONENT_HIGHLIGHT=`componentHighlight`,e.COMPONENT_UNHIGHLIGHT=`componentUnhighlight`,e}({}),va=function(e){return e.SEND_INSPECTOR_TREE_TO_CLIENT=`sendInspectorTreeToClient`,e.SEND_INSPECTOR_STATE_TO_CLIENT=`sendInspectorStateToClient`,e.SEND_TIMELINE_EVENT_TO_CLIENT=`sendTimelineEventToClient`,e.SEND_INSPECTOR_TO_CLIENT=`sendInspectorToClient`,e.SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT=`sendActiveAppUpdatedToClient`,e.DEVTOOLS_STATE_UPDATED=`devtoolsStateUpdated`,e.DEVTOOLS_CONNECTED_UPDATED=`devtoolsConnectedUpdated`,e.ROUTER_INFO_UPDATED=`routerInfoUpdated`,e}({});function ya(){let e=di();e.hook(_a.ADD_INSPECTOR,({inspector:e,plugin:t})=>{pa(e,t.descriptor)});let t=ni(async({inspectorId:t,plugin:n})=>{if(!t||!n?.descriptor?.app||Oa.highPerfModeEnabled)return;let r=ha(t,n.descriptor.app),i={app:n.descriptor.app,inspectorId:t,filter:r?.treeFilter||``,rootNodes:[]};await new Promise(t=>{e.callHookWith(async e=>{await Promise.all(e.map(e=>e(i))),t()},ga.GET_INSPECTOR_TREE)}),e.callHookWith(async e=>{await Promise.all(e.map(e=>e({inspectorId:t,rootNodes:i.rootNodes})))},va.SEND_INSPECTOR_TREE_TO_CLIENT)},120);e.hook(_a.SEND_INSPECTOR_TREE,t);let n=ni(async({inspectorId:t,plugin:n})=>{if(!t||!n?.descriptor?.app||Oa.highPerfModeEnabled)return;let r=ha(t,n.descriptor.app),i={app:n.descriptor.app,inspectorId:t,nodeId:r?.selectedNodeId||``,state:null},a={currentTab:`custom-inspector:${t}`};i.nodeId&&await new Promise(t=>{e.callHookWith(async e=>{await Promise.all(e.map(e=>e(i,a))),t()},ga.GET_INSPECTOR_STATE)}),e.callHookWith(async e=>{await Promise.all(e.map(e=>e({inspectorId:t,nodeId:i.nodeId,state:i.state})))},va.SEND_INSPECTOR_STATE_TO_CLIENT)},120);return e.hook(_a.SEND_INSPECTOR_STATE,n),e.hook(_a.CUSTOM_INSPECTOR_SELECT_NODE,({inspectorId:e,nodeId:t,plugin:n})=>{let r=ha(e,n.descriptor.app);r&&(r.selectedNodeId=t)}),e.hook(_a.TIMELINE_LAYER_ADDED,({options:e,plugin:t})=>{ua(e,t.descriptor)}),e.hook(_a.TIMELINE_EVENT_ADDED,({options:t,plugin:n})=>{Oa.highPerfModeEnabled||!Oa.timelineLayersState?.[n.descriptor.id]&&![`performance`,`component-event`,`keyboard`,`mouse`].includes(t.layerId)||e.callHookWith(async e=>{await Promise.all(e.map(e=>e(t)))},va.SEND_TIMELINE_EVENT_TO_CLIENT)}),e.hook(_a.GET_COMPONENT_INSTANCES,async({app:e})=>{let t=e.__VUE_DEVTOOLS_NEXT_APP_RECORD__;if(!t)return null;let n=t.id.toString();return[...t.instanceMap].filter(([e])=>e.split(`:`)[0]===n).map(([,e])=>e)}),e.hook(_a.GET_COMPONENT_BOUNDS,async({instance:e})=>Ti(e)),e.hook(_a.GET_COMPONENT_NAME,({instance:e})=>gi(e)),e.hook(_a.COMPONENT_HIGHLIGHT,({uid:e})=>{let t=wa.value.instanceMap.get(e);t&&Hi(t)}),e.hook(_a.COMPONENT_UNHIGHLIGHT,()=>{Ui()}),e}Z.__VUE_DEVTOOLS_KIT_APP_RECORDS__??=[],Z.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__??={},Z.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__??=``,Z.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__??=[],Z.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__??=[];var ba=`__VUE_DEVTOOLS_KIT_GLOBAL_STATE__`;function xa(){return{connected:!1,clientConnected:!1,vitePluginDetected:!0,appRecords:[],activeAppRecordId:``,tabs:[],commands:[],highPerfModeEnabled:!0,devtoolsClientDetected:{},perfUniqueGroupId:0,timelineLayersState:ca()}}Z[ba]??=xa();var Sa=ni(e=>{Xa.hooks.callHook(va.DEVTOOLS_STATE_UPDATED,{state:e})});ni((e,t)=>{Xa.hooks.callHook(va.DEVTOOLS_CONNECTED_UPDATED,{state:e,oldState:t})});var Ca=new Proxy(Z.__VUE_DEVTOOLS_KIT_APP_RECORDS__,{get(e,t,n){return t===`value`?Z.__VUE_DEVTOOLS_KIT_APP_RECORDS__:Z.__VUE_DEVTOOLS_KIT_APP_RECORDS__[t]}}),wa=new Proxy(Z.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__,{get(e,t,n){return t===`value`?Z.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__:t===`id`?Z.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__:Z.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__[t]}});function Ta(){Sa({...Z[ba],appRecords:Ca.value,activeAppRecordId:wa.id,tabs:Z.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__,commands:Z.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__})}function Ea(e){Z.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__=e,Ta()}function Da(e){Z.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__=e,Ta()}var Oa=new Proxy(Z[ba],{get(e,t){return t===`appRecords`?Ca:t===`activeAppRecordId`?wa.id:t===`tabs`?Z.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__:t===`commands`?Z.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__:Z[ba][t]},deleteProperty(e,t){return delete e[t],!0},set(e,t,n){return e[t]=n,Z[ba][t]=n,!0}});function ka(e={}){let{file:t,host:n,baseUrl:r=window.location.origin,line:i=0,column:a=0}=e;if(t){if(n===`chrome-extension`){let e=t.replace(/\\/g,`\\\\`),n=window.VUE_DEVTOOLS_CONFIG?.openInEditorHost??`/`;fetch(`${n}__open-in-editor?file=${encodeURI(t)}`).then(t=>{if(!t.ok){let t=`Opening component ${e} failed`;console.log(`%c${t}`,`color:red`)}})}else if(Oa.vitePluginDetected){let e=Z.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__??r;Z.__VUE_INSPECTOR__.openInEditor(e,t,i,a)}}}Z.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__??=[];var Aa=new Proxy(Z.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__,{get(e,t,n){return Reflect.get(e,t,n)}});function ja(e){let t={};return Object.keys(e).forEach(n=>{t[n]=e[n].defaultValue}),t}function Ma(e){return`__VUE_DEVTOOLS_NEXT_PLUGIN_SETTINGS__${e}__`}function Na(e){return(Aa.find(t=>t[0].id===e&&!!t[0]?.settings)?.[0]??null)?.settings??null}function Pa(e,t){let n=Ma(e);if(n){let e=localStorage.getItem(n);if(e)return JSON.parse(e)}return ja(e?(Aa.find(t=>t[0].id===e)?.[0]??null)?.settings??{}:t)}function Fa(e,t){let n=Ma(e);localStorage.getItem(n)||localStorage.setItem(n,JSON.stringify(ja(t)))}function Ia(e,t,n){let r=Ma(e),i=localStorage.getItem(r),a=JSON.parse(i||`{}`),o={...a,[t]:n};localStorage.setItem(r,JSON.stringify(o)),Xa.hooks.callHookWith(r=>{r.forEach(r=>r({pluginId:e,key:t,oldValue:a[t],newValue:n,settings:o}))},ga.SET_PLUGIN_SETTINGS)}var La=function(e){return e.APP_INIT=`app:init`,e.APP_UNMOUNT=`app:unmount`,e.COMPONENT_UPDATED=`component:updated`,e.COMPONENT_ADDED=`component:added`,e.COMPONENT_REMOVED=`component:removed`,e.COMPONENT_EMIT=`component:emit`,e.PERFORMANCE_START=`perf:start`,e.PERFORMANCE_END=`perf:end`,e.ADD_ROUTE=`router:add-route`,e.REMOVE_ROUTE=`router:remove-route`,e.RENDER_TRACKED=`render:tracked`,e.RENDER_TRIGGERED=`render:triggered`,e.APP_CONNECTED=`app:connected`,e.SETUP_DEVTOOLS_PLUGIN=`devtools-plugin:setup`,e}({}),Ra=Z.__VUE_DEVTOOLS_HOOK??=di(),za={on:{vueAppInit(e){Ra.hook(La.APP_INIT,e)},vueAppUnmount(e){Ra.hook(La.APP_UNMOUNT,e)},vueAppConnected(e){Ra.hook(La.APP_CONNECTED,e)},componentAdded(e){return Ra.hook(La.COMPONENT_ADDED,e)},componentEmit(e){return Ra.hook(La.COMPONENT_EMIT,e)},componentUpdated(e){return Ra.hook(La.COMPONENT_UPDATED,e)},componentRemoved(e){return Ra.hook(La.COMPONENT_REMOVED,e)},setupDevtoolsPlugin(e){Ra.hook(La.SETUP_DEVTOOLS_PLUGIN,e)},perfStart(e){return Ra.hook(La.PERFORMANCE_START,e)},perfEnd(e){return Ra.hook(La.PERFORMANCE_END,e)}},setupDevToolsPlugin(e,t){return Ra.callHook(La.SETUP_DEVTOOLS_PLUGIN,e,t)}},Ba=class{constructor({plugin:e,ctx:t}){this.hooks=t.hooks,this.plugin=e}get on(){return{visitComponentTree:e=>{this.hooks.hook(ga.VISIT_COMPONENT_TREE,e)},inspectComponent:e=>{this.hooks.hook(ga.INSPECT_COMPONENT,e)},editComponentState:e=>{this.hooks.hook(ga.EDIT_COMPONENT_STATE,e)},getInspectorTree:e=>{this.hooks.hook(ga.GET_INSPECTOR_TREE,e)},getInspectorState:e=>{this.hooks.hook(ga.GET_INSPECTOR_STATE,e)},editInspectorState:e=>{this.hooks.hook(ga.EDIT_INSPECTOR_STATE,e)},inspectTimelineEvent:e=>{this.hooks.hook(ga.INSPECT_TIMELINE_EVENT,e)},timelineCleared:e=>{this.hooks.hook(ga.TIMELINE_CLEARED,e)},setPluginSettings:e=>{this.hooks.hook(ga.SET_PLUGIN_SETTINGS,e)}}}notifyComponentUpdate(e){if(Oa.highPerfModeEnabled)return;let t=ma().find(e=>e.packageName===this.plugin.descriptor.packageName);if(t?.id){if(e){let t=[e.appContext.app,e.uid,e.parent?.uid,e];Ra.callHook(La.COMPONENT_UPDATED,...t)}else Ra.callHook(La.COMPONENT_UPDATED);this.hooks.callHook(_a.SEND_INSPECTOR_STATE,{inspectorId:t.id,plugin:this.plugin})}}addInspector(e){this.hooks.callHook(_a.ADD_INSPECTOR,{inspector:e,plugin:this.plugin}),this.plugin.descriptor.settings&&Fa(e.id,this.plugin.descriptor.settings)}sendInspectorTree(e){Oa.highPerfModeEnabled||this.hooks.callHook(_a.SEND_INSPECTOR_TREE,{inspectorId:e,plugin:this.plugin})}sendInspectorState(e){Oa.highPerfModeEnabled||this.hooks.callHook(_a.SEND_INSPECTOR_STATE,{inspectorId:e,plugin:this.plugin})}selectInspectorNode(e,t){this.hooks.callHook(_a.CUSTOM_INSPECTOR_SELECT_NODE,{inspectorId:e,nodeId:t,plugin:this.plugin})}visitComponentTree(e){return this.hooks.callHook(ga.VISIT_COMPONENT_TREE,e)}now(){return Oa.highPerfModeEnabled?0:Date.now()}addTimelineLayer(e){this.hooks.callHook(_a.TIMELINE_LAYER_ADDED,{options:e,plugin:this.plugin})}addTimelineEvent(e){Oa.highPerfModeEnabled||this.hooks.callHook(_a.TIMELINE_EVENT_ADDED,{options:e,plugin:this.plugin})}getSettings(e){return Pa(e??this.plugin.descriptor.id,this.plugin.descriptor.settings)}getComponentInstances(e){return this.hooks.callHook(_a.GET_COMPONENT_INSTANCES,{app:e})}getComponentBounds(e){return this.hooks.callHook(_a.GET_COMPONENT_BOUNDS,{instance:e})}getComponentName(e){return this.hooks.callHook(_a.GET_COMPONENT_NAME,{instance:e})}highlightElement(e){let t=e.__VUE_DEVTOOLS_NEXT_UID__;return this.hooks.callHook(_a.COMPONENT_HIGHLIGHT,{uid:t})}unhighlightElement(){return this.hooks.callHook(_a.COMPONENT_UNHIGHLIGHT)}},Va=`__vue_devtool_undefined__`,Ha=`__vue_devtool_infinity__`,Ua=`__vue_devtool_negative_infinity__`,Wa=`__vue_devtool_nan__`;Object.entries({[Va]:`undefined`,[Wa]:`NaN`,[Ha]:`Infinity`,[Ua]:`-Infinity`}).reduce((e,[t,n])=>(e[n]=t,e),{}),Z.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__??=new Set;function oee(e,t){return za.setupDevToolsPlugin(e,t)}function see(e,t){let[n,r]=e;if(n.app!==t)return;let i=new Ba({plugin:{setupFn:r,descriptor:n},ctx:Xa});n.packageName===`vuex`&&i.on.editInspectorState(e=>{i.sendInspectorState(e.inspectorId)}),r(i)}function Ga(e,t){Z.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.has(e)||(!Oa.highPerfModeEnabled||t?.inspectingComponent)&&(Z.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.add(e),Aa.forEach(t=>{see(t,e)}))}var Ka=`__VUE_DEVTOOLS_ROUTER__`,qa=`__VUE_DEVTOOLS_ROUTER_INFO__`;Z[qa]??={currentRoute:null,routes:[]},Z[Ka]??={},new Proxy(Z[qa],{get(e,t){return Z[qa][t]}}),new Proxy(Z[Ka],{get(e,t){if(t===`value`)return Z[Ka]}});function cee(e){let t=new Map;return(e?.getRoutes()||[]).filter(e=>!t.has(e.path)&&t.set(e.path,1))}function Ja(e){return e.map(e=>{let{path:t,name:n,children:r,meta:i}=e;return r?.length&&(r=Ja(r)),{path:t,name:n,children:r,meta:i}})}function lee(e){if(e){let{fullPath:t,hash:n,href:r,path:i,name:a,matched:o,params:s,query:c}=e;return{fullPath:t,hash:n,href:r,path:i,name:a,params:s,query:c,matched:Ja(o)}}return e}function uee(e,t){function n(){let t=e.app?.config.globalProperties.$router,n=lee(t?.currentRoute.value),r=Ja(cee(t)),i=console.warn;console.warn=()=>{},Z[qa]={currentRoute:n?ei(n):{},routes:ei(r)},Z[Ka]=t,console.warn=i}n(),za.on.componentUpdated(ni(()=>{t.value?.app===e.app&&(n(),!Oa.highPerfModeEnabled&&Xa.hooks.callHook(va.ROUTER_INFO_UPDATED,{state:Z[qa]}))},200))}function dee(e){return{async getInspectorTree(t){let n={...t,app:wa.value.app,rootNodes:[]};return await new Promise(t=>{e.callHookWith(async e=>{await Promise.all(e.map(e=>e(n))),t()},ga.GET_INSPECTOR_TREE)}),n.rootNodes},async getInspectorState(t){let n={...t,app:wa.value.app,state:null},r={currentTab:`custom-inspector:${t.inspectorId}`};return await new Promise(t=>{e.callHookWith(async e=>{await Promise.all(e.map(e=>e(n,r))),t()},ga.GET_INSPECTOR_STATE)}),n.state},editInspectorState(t){let n=new aa,r={...t,app:wa.value.app,set:(e,r=t.path,i=t.state.value,a)=>{n.set(e,r,i,a||n.createDefaultSetCallback(t.state))}};e.callHookWith(e=>{e.forEach(e=>e(r))},ga.EDIT_INSPECTOR_STATE)},sendInspectorState(t){let n=ha(t);e.callHook(_a.SEND_INSPECTOR_STATE,{inspectorId:t,plugin:{descriptor:n.descriptor,setupFn:()=>({})}})},inspectComponentInspector(){return Yi()},cancelInspectComponentInspector(){return Ji()},getComponentRenderCode(e){let t=vi(wa.value,e);if(t)return typeof t?.type==`function`?t.type.toString():t.render.toString()},scrollToComponent(e){return Xi({id:e})},openInEditor:ka,getVueInspector:$i,toggleApp(e,t){let n=Ca.value.find(t=>t.id===e);n&&(Da(e),Ea(n),uee(n,wa),fa(),Ga(n.app,t))},inspectDOM(e){let t=vi(wa.value,e);if(t){let[e]=Ei(t);e&&(Z.__VUE_DEVTOOLS_INSPECT_DOM_TARGET__=e)}},updatePluginSettings(e,t,n){Ia(e,t,n)},getPluginSettings(e){return{options:Na(e),values:Pa(e)}}}}Z.__VUE_DEVTOOLS_ENV__??={vitePluginDetected:!1};var Ya=ya();Z.__VUE_DEVTOOLS_KIT_CONTEXT__??={hooks:Ya,get state(){return{...Oa,activeAppRecordId:wa.id,activeAppRecord:wa.value,appRecords:Ca.value}},api:dee(Ya)};var Xa=Z.__VUE_DEVTOOLS_KIT_CONTEXT__,fee=fi(((e,t)=>{(function(e){var n={À:`A`,Á:`A`,Â:`A`,Ã:`A`,Ä:`Ae`,Å:`A`,Æ:`AE`,Ç:`C`,È:`E`,É:`E`,Ê:`E`,Ë:`E`,Ì:`I`,Í:`I`,Î:`I`,Ï:`I`,Ð:`D`,Ñ:`N`,Ò:`O`,Ó:`O`,Ô:`O`,Õ:`O`,Ö:`Oe`,Ő:`O`,Ø:`O`,Ù:`U`,Ú:`U`,Û:`U`,Ü:`Ue`,Ű:`U`,Ý:`Y`,Þ:`TH`,ß:`ss`,à:`a`,á:`a`,â:`a`,ã:`a`,ä:`ae`,å:`a`,æ:`ae`,ç:`c`,è:`e`,é:`e`,ê:`e`,ë:`e`,ì:`i`,í:`i`,î:`i`,ï:`i`,ð:`d`,ñ:`n`,ò:`o`,ó:`o`,ô:`o`,õ:`o`,ö:`oe`,ő:`o`,ø:`o`,ù:`u`,ú:`u`,û:`u`,ü:`ue`,ű:`u`,ý:`y`,þ:`th`,ÿ:`y`,ẞ:`SS`,ا:`a`,أ:`a`,إ:`i`,آ:`aa`,ؤ:`u`,ئ:`e`,ء:`a`,ب:`b`,ت:`t`,ث:`th`,ج:`j`,ح:`h`,خ:`kh`,د:`d`,ذ:`th`,ر:`r`,ز:`z`,س:`s`,ش:`sh`,ص:`s`,ض:`dh`,ط:`t`,ظ:`z`,ع:`a`,غ:`gh`,ف:`f`,ق:`q`,ك:`k`,ل:`l`,م:`m`,ن:`n`,ه:`h`,و:`w`,ي:`y`,ى:`a`,ة:`h`,ﻻ:`la`,ﻷ:`laa`,ﻹ:`lai`,ﻵ:`laa`,گ:`g`,چ:`ch`,پ:`p`,ژ:`zh`,ک:`k`,ی:`y`,"َ":`a`,"ً":`an`,"ِ":`e`,"ٍ":`en`,"ُ":`u`,"ٌ":`on`,"ْ":``,"٠":`0`,"١":`1`,"٢":`2`,"٣":`3`,"٤":`4`,"٥":`5`,"٦":`6`,"٧":`7`,"٨":`8`,"٩":`9`,"۰":`0`,"۱":`1`,"۲":`2`,"۳":`3`,"۴":`4`,"۵":`5`,"۶":`6`,"۷":`7`,"۸":`8`,"۹":`9`,က:`k`,ခ:`kh`,ဂ:`g`,ဃ:`ga`,င:`ng`,စ:`s`,ဆ:`sa`,ဇ:`z`,စျ:`za`,ည:`ny`,ဋ:`t`,ဌ:`ta`,ဍ:`d`,ဎ:`da`,ဏ:`na`,တ:`t`,ထ:`ta`,ဒ:`d`,ဓ:`da`,န:`n`,ပ:`p`,ဖ:`pa`,ဗ:`b`,ဘ:`ba`,မ:`m`,ယ:`y`,ရ:`ya`,လ:`l`,ဝ:`w`,သ:`th`,ဟ:`h`,ဠ:`la`,အ:`a`,"ြ":`y`,"ျ":`ya`,"ွ":`w`,"ြွ":`yw`,"ျွ":`ywa`,"ှ":`h`,ဧ:`e`,"၏":`-e`,ဣ:`i`,ဤ:`-i`,ဉ:`u`,ဦ:`-u`,ဩ:`aw`,သြော:`aw`,ဪ:`aw`,"၀":`0`,"၁":`1`,"၂":`2`,"၃":`3`,"၄":`4`,"၅":`5`,"၆":`6`,"၇":`7`,"၈":`8`,"၉":`9`,"္":``,"့":``,"း":``,č:`c`,ď:`d`,ě:`e`,ň:`n`,ř:`r`,š:`s`,ť:`t`,ů:`u`,ž:`z`,Č:`C`,Ď:`D`,Ě:`E`,Ň:`N`,Ř:`R`,Š:`S`,Ť:`T`,Ů:`U`,Ž:`Z`,ހ:`h`,ށ:`sh`,ނ:`n`,ރ:`r`,ބ:`b`,ޅ:`lh`,ކ:`k`,އ:`a`,ވ:`v`,މ:`m`,ފ:`f`,ދ:`dh`,ތ:`th`,ލ:`l`,ގ:`g`,ޏ:`gn`,ސ:`s`,ޑ:`d`,ޒ:`z`,ޓ:`t`,ޔ:`y`,ޕ:`p`,ޖ:`j`,ޗ:`ch`,ޘ:`tt`,ޙ:`hh`,ޚ:`kh`,ޛ:`th`,ޜ:`z`,ޝ:`sh`,ޞ:`s`,ޟ:`d`,ޠ:`t`,ޡ:`z`,ޢ:`a`,ޣ:`gh`,ޤ:`q`,ޥ:`w`,"ަ":`a`,"ާ":`aa`,"ި":`i`,"ީ":`ee`,"ު":`u`,"ޫ":`oo`,"ެ":`e`,"ޭ":`ey`,"ޮ":`o`,"ޯ":`oa`,"ް":``,ა:`a`,ბ:`b`,გ:`g`,დ:`d`,ე:`e`,ვ:`v`,ზ:`z`,თ:`t`,ი:`i`,კ:`k`,ლ:`l`,მ:`m`,ნ:`n`,ო:`o`,პ:`p`,ჟ:`zh`,რ:`r`,ს:`s`,ტ:`t`,უ:`u`,ფ:`p`,ქ:`k`,ღ:`gh`,ყ:`q`,შ:`sh`,ჩ:`ch`,ც:`ts`,ძ:`dz`,წ:`ts`,ჭ:`ch`,ხ:`kh`,ჯ:`j`,ჰ:`h`,α:`a`,β:`v`,γ:`g`,δ:`d`,ε:`e`,ζ:`z`,η:`i`,θ:`th`,ι:`i`,κ:`k`,λ:`l`,μ:`m`,ν:`n`,ξ:`ks`,ο:`o`,π:`p`,ρ:`r`,σ:`s`,τ:`t`,υ:`y`,φ:`f`,χ:`x`,ψ:`ps`,ω:`o`,ά:`a`,έ:`e`,ί:`i`,ό:`o`,ύ:`y`,ή:`i`,ώ:`o`,ς:`s`,ϊ:`i`,ΰ:`y`,ϋ:`y`,ΐ:`i`,Α:`A`,Β:`B`,Γ:`G`,Δ:`D`,Ε:`E`,Ζ:`Z`,Η:`I`,Θ:`TH`,Ι:`I`,Κ:`K`,Λ:`L`,Μ:`M`,Ν:`N`,Ξ:`KS`,Ο:`O`,Π:`P`,Ρ:`R`,Σ:`S`,Τ:`T`,Υ:`Y`,Φ:`F`,Χ:`X`,Ψ:`PS`,Ω:`O`,Ά:`A`,Έ:`E`,Ί:`I`,Ό:`O`,Ύ:`Y`,Ή:`I`,Ώ:`O`,Ϊ:`I`,Ϋ:`Y`,ā:`a`,ē:`e`,ģ:`g`,ī:`i`,ķ:`k`,ļ:`l`,ņ:`n`,ū:`u`,Ā:`A`,Ē:`E`,Ģ:`G`,Ī:`I`,Ķ:`k`,Ļ:`L`,Ņ:`N`,Ū:`U`,Ќ:`Kj`,ќ:`kj`,Љ:`Lj`,љ:`lj`,Њ:`Nj`,њ:`nj`,Тс:`Ts`,тс:`ts`,ą:`a`,ć:`c`,ę:`e`,ł:`l`,ń:`n`,ś:`s`,ź:`z`,ż:`z`,Ą:`A`,Ć:`C`,Ę:`E`,Ł:`L`,Ń:`N`,Ś:`S`,Ź:`Z`,Ż:`Z`,Є:`Ye`,І:`I`,Ї:`Yi`,Ґ:`G`,є:`ye`,і:`i`,ї:`yi`,ґ:`g`,ă:`a`,Ă:`A`,ș:`s`,Ș:`S`,ț:`t`,Ț:`T`,ţ:`t`,Ţ:`T`,а:`a`,б:`b`,в:`v`,г:`g`,д:`d`,е:`e`,ё:`yo`,ж:`zh`,з:`z`,и:`i`,й:`i`,к:`k`,л:`l`,м:`m`,н:`n`,о:`o`,п:`p`,р:`r`,с:`s`,т:`t`,у:`u`,ф:`f`,х:`kh`,ц:`c`,ч:`ch`,ш:`sh`,щ:`sh`,ъ:``,ы:`y`,ь:``,э:`e`,ю:`yu`,я:`ya`,А:`A`,Б:`B`,В:`V`,Г:`G`,Д:`D`,Е:`E`,Ё:`Yo`,Ж:`Zh`,З:`Z`,И:`I`,Й:`I`,К:`K`,Л:`L`,М:`M`,Н:`N`,О:`O`,П:`P`,Р:`R`,С:`S`,Т:`T`,У:`U`,Ф:`F`,Х:`Kh`,Ц:`C`,Ч:`Ch`,Ш:`Sh`,Щ:`Sh`,Ъ:``,Ы:`Y`,Ь:``,Э:`E`,Ю:`Yu`,Я:`Ya`,ђ:`dj`,ј:`j`,ћ:`c`,џ:`dz`,Ђ:`Dj`,Ј:`j`,Ћ:`C`,Џ:`Dz`,ľ:`l`,ĺ:`l`,ŕ:`r`,Ľ:`L`,Ĺ:`L`,Ŕ:`R`,ş:`s`,Ş:`S`,ı:`i`,İ:`I`,ğ:`g`,Ğ:`G`,ả:`a`,Ả:`A`,ẳ:`a`,Ẳ:`A`,ẩ:`a`,Ẩ:`A`,đ:`d`,Đ:`D`,ẹ:`e`,Ẹ:`E`,ẽ:`e`,Ẽ:`E`,ẻ:`e`,Ẻ:`E`,ế:`e`,Ế:`E`,ề:`e`,Ề:`E`,ệ:`e`,Ệ:`E`,ễ:`e`,Ễ:`E`,ể:`e`,Ể:`E`,ỏ:`o`,ọ:`o`,Ọ:`o`,ố:`o`,Ố:`O`,ồ:`o`,Ồ:`O`,ổ:`o`,Ổ:`O`,ộ:`o`,Ộ:`O`,ỗ:`o`,Ỗ:`O`,ơ:`o`,Ơ:`O`,ớ:`o`,Ớ:`O`,ờ:`o`,Ờ:`O`,ợ:`o`,Ợ:`O`,ỡ:`o`,Ỡ:`O`,Ở:`o`,ở:`o`,ị:`i`,Ị:`I`,ĩ:`i`,Ĩ:`I`,ỉ:`i`,Ỉ:`i`,ủ:`u`,Ủ:`U`,ụ:`u`,Ụ:`U`,ũ:`u`,Ũ:`U`,ư:`u`,Ư:`U`,ứ:`u`,Ứ:`U`,ừ:`u`,Ừ:`U`,ự:`u`,Ự:`U`,ữ:`u`,Ữ:`U`,ử:`u`,Ử:`ư`,ỷ:`y`,Ỷ:`y`,ỳ:`y`,Ỳ:`Y`,ỵ:`y`,Ỵ:`Y`,ỹ:`y`,Ỹ:`Y`,ạ:`a`,Ạ:`A`,ấ:`a`,Ấ:`A`,ầ:`a`,Ầ:`A`,ậ:`a`,Ậ:`A`,ẫ:`a`,Ẫ:`A`,ắ:`a`,Ắ:`A`,ằ:`a`,Ằ:`A`,ặ:`a`,Ặ:`A`,ẵ:`a`,Ẵ:`A`,"⓪":`0`,"①":`1`,"②":`2`,"③":`3`,"④":`4`,"⑤":`5`,"⑥":`6`,"⑦":`7`,"⑧":`8`,"⑨":`9`,"⑩":`10`,"⑪":`11`,"⑫":`12`,"⑬":`13`,"⑭":`14`,"⑮":`15`,"⑯":`16`,"⑰":`17`,"⑱":`18`,"⑲":`18`,"⑳":`18`,"⓵":`1`,"⓶":`2`,"⓷":`3`,"⓸":`4`,"⓹":`5`,"⓺":`6`,"⓻":`7`,"⓼":`8`,"⓽":`9`,"⓾":`10`,"⓿":`0`,"⓫":`11`,"⓬":`12`,"⓭":`13`,"⓮":`14`,"⓯":`15`,"⓰":`16`,"⓱":`17`,"⓲":`18`,"⓳":`19`,"⓴":`20`,"Ⓐ":`A`,"Ⓑ":`B`,"Ⓒ":`C`,"Ⓓ":`D`,"Ⓔ":`E`,"Ⓕ":`F`,"Ⓖ":`G`,"Ⓗ":`H`,"Ⓘ":`I`,"Ⓙ":`J`,"Ⓚ":`K`,"Ⓛ":`L`,"Ⓜ":`M`,"Ⓝ":`N`,"Ⓞ":`O`,"Ⓟ":`P`,"Ⓠ":`Q`,"Ⓡ":`R`,"Ⓢ":`S`,"Ⓣ":`T`,"Ⓤ":`U`,"Ⓥ":`V`,"Ⓦ":`W`,"Ⓧ":`X`,"Ⓨ":`Y`,"Ⓩ":`Z`,"ⓐ":`a`,"ⓑ":`b`,"ⓒ":`c`,"ⓓ":`d`,"ⓔ":`e`,"ⓕ":`f`,"ⓖ":`g`,"ⓗ":`h`,"ⓘ":`i`,"ⓙ":`j`,"ⓚ":`k`,"ⓛ":`l`,"ⓜ":`m`,"ⓝ":`n`,"ⓞ":`o`,"ⓟ":`p`,"ⓠ":`q`,"ⓡ":`r`,"ⓢ":`s`,"ⓣ":`t`,"ⓤ":`u`,"ⓦ":`v`,"ⓥ":`w`,"ⓧ":`x`,"ⓨ":`y`,"ⓩ":`z`,"“":`"`,"”":`"`,"‘":`'`,"’":`'`,"∂":`d`,ƒ:`f`,"™":`(TM)`,"©":`(C)`,œ:`oe`,Œ:`OE`,"®":`(R)`,"†":`+`,"℠":`(SM)`,"…":`...`,"˚":`o`,º:`o`,ª:`a`,"•":`*`,"၊":`,`,"။":`.`,$:`USD`,"€":`EUR`,"₢":`BRN`,"₣":`FRF`,"£":`GBP`,"₤":`ITL`,"₦":`NGN`,"₧":`ESP`,"₩":`KRW`,"₪":`ILS`,"₫":`VND`,"₭":`LAK`,"₮":`MNT`,"₯":`GRD`,"₱":`ARS`,"₲":`PYG`,"₳":`ARA`,"₴":`UAH`,"₵":`GHS`,"¢":`cent`,"¥":`CNY`,元:`CNY`,円:`YEN`,"﷼":`IRR`,"₠":`EWE`,"฿":`THB`,"₨":`INR`,"₹":`INR`,"₰":`PF`,"₺":`TRY`,"؋":`AFN`,"₼":`AZN`,лв:`BGN`,"៛":`KHR`,"₡":`CRC`,"₸":`KZT`,ден:`MKD`,zł:`PLN`,"₽":`RUB`,"₾":`GEL`},r=[`်`,`ް`],i={"ာ":`a`,"ါ":`a`,"ေ":`e`,"ဲ":`e`,"ိ":`i`,"ီ":`i`,"ို":`o`,"ု":`u`,"ူ":`u`,"ေါင်":`aung`,"ော":`aw`,"ော်":`aw`,"ေါ":`aw`,"ေါ်":`aw`,"်":`်`,က်:`et`,"ိုက်":`aik`,"ောက်":`auk`,င်:`in`,"ိုင်":`aing`,"ောင်":`aung`,စ်:`it`,ည်:`i`,တ်:`at`,"ိတ်":`eik`,"ုတ်":`ok`,"ွတ်":`ut`,"ေတ်":`it`,ဒ်:`d`,"ိုဒ်":`ok`,"ုဒ်":`ait`,န်:`an`,"ာန်":`an`,"ိန်":`ein`,"ုန်":`on`,"ွန်":`un`,ပ်:`at`,"ိပ်":`eik`,"ုပ်":`ok`,"ွပ်":`ut`,န်ုပ်:`nub`,မ်:`an`,"ိမ်":`ein`,"ုမ်":`on`,"ွမ်":`un`,ယ်:`e`,"ိုလ်":`ol`,ဉ်:`in`,"ံ":`an`,"ိံ":`ein`,"ုံ":`on`,"ައް":`ah`,"ަށް":`ah`},a={en:{},az:{ç:`c`,ə:`e`,ğ:`g`,ı:`i`,ö:`o`,ş:`s`,ü:`u`,Ç:`C`,Ə:`E`,Ğ:`G`,İ:`I`,Ö:`O`,Ş:`S`,Ü:`U`},cs:{č:`c`,ď:`d`,ě:`e`,ň:`n`,ř:`r`,š:`s`,ť:`t`,ů:`u`,ž:`z`,Č:`C`,Ď:`D`,Ě:`E`,Ň:`N`,Ř:`R`,Š:`S`,Ť:`T`,Ů:`U`,Ž:`Z`},fi:{ä:`a`,Ä:`A`,ö:`o`,Ö:`O`},hu:{ä:`a`,Ä:`A`,ö:`o`,Ö:`O`,ü:`u`,Ü:`U`,ű:`u`,Ű:`U`},lt:{ą:`a`,č:`c`,ę:`e`,ė:`e`,į:`i`,š:`s`,ų:`u`,ū:`u`,ž:`z`,Ą:`A`,Č:`C`,Ę:`E`,Ė:`E`,Į:`I`,Š:`S`,Ų:`U`,Ū:`U`},lv:{ā:`a`,č:`c`,ē:`e`,ģ:`g`,ī:`i`,ķ:`k`,ļ:`l`,ņ:`n`,š:`s`,ū:`u`,ž:`z`,Ā:`A`,Č:`C`,Ē:`E`,Ģ:`G`,Ī:`i`,Ķ:`k`,Ļ:`L`,Ņ:`N`,Š:`S`,Ū:`u`,Ž:`Z`},pl:{ą:`a`,ć:`c`,ę:`e`,ł:`l`,ń:`n`,ó:`o`,ś:`s`,ź:`z`,ż:`z`,Ą:`A`,Ć:`C`,Ę:`e`,Ł:`L`,Ń:`N`,Ó:`O`,Ś:`S`,Ź:`Z`,Ż:`Z`},sv:{ä:`a`,Ä:`A`,ö:`o`,Ö:`O`},sk:{ä:`a`,Ä:`A`},sr:{љ:`lj`,њ:`nj`,Љ:`Lj`,Њ:`Nj`,đ:`dj`,Đ:`Dj`},tr:{Ü:`U`,Ö:`O`,ü:`u`,ö:`o`}},o={ar:{"∆":`delta`,"∞":`la-nihaya`,"♥":`hob`,"&":`wa`,"|":`aw`,"<":`aqal-men`,">":`akbar-men`,"∑":`majmou`,"¤":`omla`},az:{},ca:{"∆":`delta`,"∞":`infinit`,"♥":`amor`,"&":`i`,"|":`o`,"<":`menys que`,">":`mes que`,"∑":`suma dels`,"¤":`moneda`},cs:{"∆":`delta`,"∞":`nekonecno`,"♥":`laska`,"&":`a`,"|":`nebo`,"<":`mensi nez`,">":`vetsi nez`,"∑":`soucet`,"¤":`mena`},de:{"∆":`delta`,"∞":`unendlich`,"♥":`Liebe`,"&":`und`,"|":`oder`,"<":`kleiner als`,">":`groesser als`,"∑":`Summe von`,"¤":`Waehrung`},dv:{"∆":`delta`,"∞":`kolunulaa`,"♥":`loabi`,"&":`aai`,"|":`noonee`,"<":`ah vure kuda`,">":`ah vure bodu`,"∑":`jumula`,"¤":`faisaa`},en:{"∆":`delta`,"∞":`infinity`,"♥":`love`,"&":`and`,"|":`or`,"<":`less than`,">":`greater than`,"∑":`sum`,"¤":`currency`},es:{"∆":`delta`,"∞":`infinito`,"♥":`amor`,"&":`y`,"|":`u`,"<":`menos que`,">":`mas que`,"∑":`suma de los`,"¤":`moneda`},fa:{"∆":`delta`,"∞":`bi-nahayat`,"♥":`eshgh`,"&":`va`,"|":`ya`,"<":`kamtar-az`,">":`bishtar-az`,"∑":`majmooe`,"¤":`vahed`},fi:{"∆":`delta`,"∞":`aarettomyys`,"♥":`rakkaus`,"&":`ja`,"|":`tai`,"<":`pienempi kuin`,">":`suurempi kuin`,"∑":`summa`,"¤":`valuutta`},fr:{"∆":`delta`,"∞":`infiniment`,"♥":`Amour`,"&":`et`,"|":`ou`,"<":`moins que`,">":`superieure a`,"∑":`somme des`,"¤":`monnaie`},ge:{"∆":`delta`,"∞":`usasruloba`,"♥":`siqvaruli`,"&":`da`,"|":`an`,"<":`naklebi`,">":`meti`,"∑":`jami`,"¤":`valuta`},gr:{},hu:{"∆":`delta`,"∞":`vegtelen`,"♥":`szerelem`,"&":`es`,"|":`vagy`,"<":`kisebb mint`,">":`nagyobb mint`,"∑":`szumma`,"¤":`penznem`},it:{"∆":`delta`,"∞":`infinito`,"♥":`amore`,"&":`e`,"|":`o`,"<":`minore di`,">":`maggiore di`,"∑":`somma`,"¤":`moneta`},lt:{"∆":`delta`,"∞":`begalybe`,"♥":`meile`,"&":`ir`,"|":`ar`,"<":`maziau nei`,">":`daugiau nei`,"∑":`suma`,"¤":`valiuta`},lv:{"∆":`delta`,"∞":`bezgaliba`,"♥":`milestiba`,"&":`un`,"|":`vai`,"<":`mazak neka`,">":`lielaks neka`,"∑":`summa`,"¤":`valuta`},my:{"∆":`kwahkhyaet`,"∞":`asaonasme`,"♥":`akhyait`,"&":`nhin`,"|":`tho`,"<":`ngethaw`,">":`kyithaw`,"∑":`paungld`,"¤":`ngwekye`},mk:{},nl:{"∆":`delta`,"∞":`oneindig`,"♥":`liefde`,"&":`en`,"|":`of`,"<":`kleiner dan`,">":`groter dan`,"∑":`som`,"¤":`valuta`},pl:{"∆":`delta`,"∞":`nieskonczonosc`,"♥":`milosc`,"&":`i`,"|":`lub`,"<":`mniejsze niz`,">":`wieksze niz`,"∑":`suma`,"¤":`waluta`},pt:{"∆":`delta`,"∞":`infinito`,"♥":`amor`,"&":`e`,"|":`ou`,"<":`menor que`,">":`maior que`,"∑":`soma`,"¤":`moeda`},ro:{"∆":`delta`,"∞":`infinit`,"♥":`dragoste`,"&":`si`,"|":`sau`,"<":`mai mic ca`,">":`mai mare ca`,"∑":`suma`,"¤":`valuta`},ru:{"∆":`delta`,"∞":`beskonechno`,"♥":`lubov`,"&":`i`,"|":`ili`,"<":`menshe`,">":`bolshe`,"∑":`summa`,"¤":`valjuta`},sk:{"∆":`delta`,"∞":`nekonecno`,"♥":`laska`,"&":`a`,"|":`alebo`,"<":`menej ako`,">":`viac ako`,"∑":`sucet`,"¤":`mena`},sr:{},tr:{"∆":`delta`,"∞":`sonsuzluk`,"♥":`ask`,"&":`ve`,"|":`veya`,"<":`kucuktur`,">":`buyuktur`,"∑":`toplam`,"¤":`para birimi`},uk:{"∆":`delta`,"∞":`bezkinechnist`,"♥":`lubov`,"&":`i`,"|":`abo`,"<":`menshe`,">":`bilshe`,"∑":`suma`,"¤":`valjuta`},vn:{"∆":`delta`,"∞":`vo cuc`,"♥":`yeu`,"&":`va`,"|":`hoac`,"<":`nho hon`,">":`lon hon`,"∑":`tong`,"¤":`tien te`}},s=`;?:@&=+$,/`,c=`;?:@&=+$,`,l=`.!~*'()`,u=function(e,t){var u=`-`,d=``,m=``,h=!0,g={},_,v,y,b,x,S,C,w,T,E,D,O,k,A,j=``;if(typeof e!=`string`)return``;if(typeof t==`string`&&(u=t),C=o.en,w=a.en,typeof t==`object`)for(D in _=t.maintainCase||!1,g=t.custom&&typeof t.custom==`object`?t.custom:g,y=+t.truncate>1&&t.truncate||!1,b=t.uric||!1,x=t.uricNoSlash||!1,S=t.mark||!1,h=t.symbols!==!1&&t.lang!==!1,u=t.separator||u,b&&(j+=s),x&&(j+=c),S&&(j+=l),C=t.lang&&o[t.lang]&&h?o[t.lang]:h?o.en:{},w=t.lang&&a[t.lang]?a[t.lang]:t.lang===!1||t.lang===!0?{}:a.en,t.titleCase&&typeof t.titleCase.length==`number`&&Array.prototype.toString.call(t.titleCase)?(t.titleCase.forEach(function(e){g[e+``]=e+``}),v=!0):v=!!t.titleCase,t.custom&&typeof t.custom.length==`number`&&Array.prototype.toString.call(t.custom)&&t.custom.forEach(function(e){g[e+``]=e+``}),Object.keys(g).forEach(function(t){var n=t.length>1?RegExp(`\\b`+f(t)+`\\b`,`gi`):new RegExp(f(t),`gi`);e=e.replace(n,g[t])}),g)j+=D;for(j+=u,j=f(j),e=e.replace(/(^\s+|\s+$)/g,``),k=!1,A=!1,E=0,O=e.length;E<O;E++)D=e[E],p(D,g)?k=!1:w[D]?(D=k&&w[D].match(/[A-Za-z0-9]/)?` `+w[D]:w[D],k=!1):D in n?(E+1<O&&r.indexOf(e[E+1])>=0?(m+=D,D=``):A===!0?(D=i[m]+n[D],m=``):D=k&&n[D].match(/[A-Za-z0-9]/)?` `+n[D]:n[D],k=!1,A=!1):D in i?(m+=D,D=``,E===O-1&&(D=i[m]),A=!0):C[D]&&!(b&&s.indexOf(D)!==-1)&&!(x&&c.indexOf(D)!==-1)?(D=k||d.substr(-1).match(/[A-Za-z0-9]/)?u+C[D]:C[D],D+=e[E+1]!==void 0&&e[E+1].match(/[A-Za-z0-9]/)?u:``,k=!0):(A===!0?(D=i[m]+D,m=``,A=!1):k&&(/[A-Za-z0-9]/.test(D)||d.substr(-1).match(/A-Za-z0-9]/))&&(D=` `+D),k=!1),d+=D.replace(RegExp(`[^\\w\\s`+j+`_-]`,`g`),u);return v&&(d=d.replace(/(\w)(\S*)/g,function(e,t,n){var r=t.toUpperCase()+(n===null?``:n);return Object.keys(g).indexOf(r.toLowerCase())<0?r:r.toLowerCase()})),d=d.replace(/\s+/g,u).replace(RegExp(`\\`+u+`+`,`g`),u).replace(RegExp(`(^\\`+u+`+|\\`+u+`+$)`,`g`),``),y&&d.length>y&&(T=d.charAt(y)===u,d=d.slice(0,y),T||(d=d.slice(0,d.lastIndexOf(u)))),!_&&!v&&(d=d.toLowerCase()),d},d=function(e){return function(t){return u(t,e)}},f=function(e){return e.replace(/[-\\^$*+?.()|[\]{}\/]/g,`\\$&`)},p=function(e,t){for(var n in t)if(t[n]===e)return!0};if(t!==void 0&&t.exports)t.exports=u,t.exports.createSlug=d;else if(typeof define<`u`&&define.amd)define([],function(){return u});else try{if(e.getSlug||e.createSlug)throw`speakingurl: globals exists /(getSlug|createSlug)/`;e.getSlug=u,e.createSlug=d}catch{}})(e)}));fi(((e,t)=>{t.exports=fee()}))(),Z.__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__??={id:0,appIds:new Set};function pee(e){Oa.highPerfModeEnabled=e??!Oa.highPerfModeEnabled,!e&&wa.value&&Ga(wa.value.app)}function Za(e){Oa.devtoolsClientDetected={...Oa.devtoolsClientDetected,...e},pee(!Object.values(Oa.devtoolsClientDetected).some(Boolean))}Z.__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__??=Za;var Qa=class{constructor(){this.keyToValue=new Map,this.valueToKey=new Map}set(e,t){this.keyToValue.set(e,t),this.valueToKey.set(t,e)}getByKey(e){return this.keyToValue.get(e)}getByValue(e){return this.valueToKey.get(e)}clear(){this.keyToValue.clear(),this.valueToKey.clear()}},$a=class{constructor(e){this.generateIdentifier=e,this.kv=new Qa}register(e,t){this.kv.getByValue(e)||(t||=this.generateIdentifier(e),this.kv.set(t,e))}clear(){this.kv.clear()}getIdentifier(e){return this.kv.getByValue(e)}getValue(e){return this.kv.getByKey(e)}},eo=class extends $a{constructor(){super(e=>e.name),this.classToAllowedProps=new Map}register(e,t){typeof t==`object`?(t.allowProps&&this.classToAllowedProps.set(e,t.allowProps),super.register(e,t.identifier)):super.register(e,t)}getAllowedProps(e){return this.classToAllowedProps.get(e)}};function to(e){if(`values`in Object)return Object.values(e);let t=[];for(let n in e)e.hasOwnProperty(n)&&t.push(e[n]);return t}function no(e,t){let n=to(e);if(`find`in n)return n.find(t);let r=n;for(let e=0;e<r.length;e++){let n=r[e];if(t(n))return n}}function ro(e,t){Object.entries(e).forEach(([e,n])=>t(n,e))}function io(e,t){return e.indexOf(t)!==-1}function ao(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(t(r))return r}}var oo=class{constructor(){this.transfomers={}}register(e){this.transfomers[e.name]=e}findApplicable(e){return no(this.transfomers,t=>t.isApplicable(e))}findByName(e){return this.transfomers[e]}},so=e=>Object.prototype.toString.call(e).slice(8,-1),co=e=>e===void 0,lo=e=>e===null,uo=e=>typeof e!=`object`||!e||e===Object.prototype?!1:Object.getPrototypeOf(e)===null||Object.getPrototypeOf(e)===Object.prototype,fo=e=>uo(e)&&Object.keys(e).length===0,po=e=>Array.isArray(e),mo=e=>typeof e==`string`,ho=e=>typeof e==`number`&&!isNaN(e),go=e=>typeof e==`boolean`,_o=e=>e instanceof RegExp,vo=e=>e instanceof Map,yo=e=>e instanceof Set,bo=e=>so(e)===`Symbol`,xo=e=>e instanceof Date&&!isNaN(e.valueOf()),So=e=>e instanceof Error,Co=e=>typeof e==`number`&&isNaN(e),wo=e=>go(e)||lo(e)||co(e)||ho(e)||mo(e)||bo(e),To=e=>typeof e==`bigint`,Eo=e=>e===1/0||e===-1/0,Do=e=>ArrayBuffer.isView(e)&&!(e instanceof DataView),Oo=e=>e instanceof URL,ko=e=>e.replace(/\./g,`\\.`),Ao=e=>e.map(String).map(ko).join(`.`),jo=e=>{let t=[],n=``;for(let r=0;r<e.length;r++){let i=e.charAt(r);i===`\\`&&e.charAt(r+1)===`.`?(n+=`.`,r++):i===`.`?(t.push(n),n=``):n+=i}let r=n;return t.push(r),t};function Mo(e,t,n,r){return{isApplicable:e,annotation:t,transform:n,untransform:r}}var No=[Mo(co,`undefined`,()=>null,()=>void 0),Mo(To,`bigint`,e=>e.toString(),e=>typeof BigInt<`u`?BigInt(e):(console.error(`Please add a BigInt polyfill.`),e)),Mo(xo,`Date`,e=>e.toISOString(),e=>new Date(e)),Mo(So,`Error`,(e,t)=>{let n={name:e.name,message:e.message};return t.allowedErrorProps.forEach(t=>{n[t]=e[t]}),n},(e,t)=>{let n=Error(e.message);return n.name=e.name,n.stack=e.stack,t.allowedErrorProps.forEach(t=>{n[t]=e[t]}),n}),Mo(_o,`regexp`,e=>``+e,e=>{let t=e.slice(1,e.lastIndexOf(`/`)),n=e.slice(e.lastIndexOf(`/`)+1);return new RegExp(t,n)}),Mo(yo,`set`,e=>[...e.values()],e=>new Set(e)),Mo(vo,`map`,e=>[...e.entries()],e=>new Map(e)),Mo(e=>Co(e)||Eo(e),`number`,e=>Co(e)?`NaN`:e>0?`Infinity`:`-Infinity`,Number),Mo(e=>e===0&&1/e==-1/0,`number`,()=>`-0`,Number),Mo(Oo,`URL`,e=>e.toString(),e=>new URL(e))];function Po(e,t,n,r){return{isApplicable:e,annotation:t,transform:n,untransform:r}}var Fo=Po((e,t)=>bo(e)?!!t.symbolRegistry.getIdentifier(e):!1,(e,t)=>[`symbol`,t.symbolRegistry.getIdentifier(e)],e=>e.description,(e,t,n)=>{let r=n.symbolRegistry.getValue(t[1]);if(!r)throw Error(`Trying to deserialize unknown symbol`);return r}),Io=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,Uint8ClampedArray].reduce((e,t)=>(e[t.name]=t,e),{}),Lo=Po(Do,e=>[`typed-array`,e.constructor.name],e=>[...e],(e,t)=>{let n=Io[t[1]];if(!n)throw Error(`Trying to deserialize unknown typed array`);return new n(e)});function Ro(e,t){return e?.constructor?!!t.classRegistry.getIdentifier(e.constructor):!1}var zo=Po(Ro,(e,t)=>[`class`,t.classRegistry.getIdentifier(e.constructor)],(e,t)=>{let n=t.classRegistry.getAllowedProps(e.constructor);if(!n)return{...e};let r={};return n.forEach(t=>{r[t]=e[t]}),r},(e,t,n)=>{let r=n.classRegistry.getValue(t[1]);if(!r)throw Error(`Trying to deserialize unknown class '${t[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`);return Object.assign(Object.create(r.prototype),e)}),Bo=Po((e,t)=>!!t.customTransformerRegistry.findApplicable(e),(e,t)=>[`custom`,t.customTransformerRegistry.findApplicable(e).name],(e,t)=>t.customTransformerRegistry.findApplicable(e).serialize(e),(e,t,n)=>{let r=n.customTransformerRegistry.findByName(t[1]);if(!r)throw Error(`Trying to deserialize unknown custom value`);return r.deserialize(e)}),Vo=[zo,Fo,Bo,Lo],Ho=(e,t)=>{let n=ao(Vo,n=>n.isApplicable(e,t));if(n)return{value:n.transform(e,t),type:n.annotation(e,t)};let r=ao(No,n=>n.isApplicable(e,t));if(r)return{value:r.transform(e,t),type:r.annotation}},Uo={};No.forEach(e=>{Uo[e.annotation]=e});var Wo=(e,t,n)=>{if(po(t))switch(t[0]){case`symbol`:return Fo.untransform(e,t,n);case`class`:return zo.untransform(e,t,n);case`custom`:return Bo.untransform(e,t,n);case`typed-array`:return Lo.untransform(e,t,n);default:throw Error(`Unknown transformation: `+t)}else{let r=Uo[t];if(!r)throw Error(`Unknown transformation: `+t);return r.untransform(e,n)}},Go=(e,t)=>{if(t>e.size)throw Error(`index out of bounds`);let n=e.keys();for(;t>0;)n.next(),t--;return n.next().value};function Ko(e){if(io(e,`__proto__`))throw Error(`__proto__ is not allowed as a property`);if(io(e,`prototype`))throw Error(`prototype is not allowed as a property`);if(io(e,`constructor`))throw Error(`constructor is not allowed as a property`)}var qo=(e,t)=>{Ko(t);for(let n=0;n<t.length;n++){let r=t[n];if(yo(e))e=Go(e,+r);else if(vo(e)){let i=+r,a=+t[++n]==0?`key`:`value`,o=Go(e,i);switch(a){case`key`:e=o;break;case`value`:e=e.get(o)}}else e=e[r]}return e},Jo=(e,t,n)=>{if(Ko(t),t.length===0)return n(e);let r=e;for(let e=0;e<t.length-1;e++){let n=t[e];if(po(r)){let e=+n;r=r[e]}else if(uo(r))r=r[n];else if(yo(r)){let e=+n;r=Go(r,e)}else if(vo(r)){if(e===t.length-2)break;let i=+n,a=+t[++e]==0?`key`:`value`,o=Go(r,i);switch(a){case`key`:r=o;break;case`value`:r=r.get(o)}}}let i=t[t.length-1];if(po(r)?r[+i]=n(r[+i]):uo(r)&&(r[i]=n(r[i])),yo(r)){let e=Go(r,+i),t=n(e);e!==t&&(r.delete(e),r.add(t))}if(vo(r)){let e=+t[t.length-2],a=Go(r,e);switch(+i==0?`key`:`value`){case`key`:{let e=n(a);r.set(e,r.get(a)),e!==a&&r.delete(a);break}case`value`:r.set(a,n(r.get(a)))}}return e};function Yo(e,t,n=[]){if(!e)return;if(!po(e)){ro(e,(e,r)=>Yo(e,t,[...n,...jo(r)]));return}let[r,i]=e;i&&ro(i,(e,r)=>{Yo(e,t,[...n,...jo(r)])}),t(r,n)}function Xo(e,t,n){return Yo(t,(t,r)=>{e=Jo(e,r,e=>Wo(e,t,n))}),e}function Zo(e,t){function n(t,n){let r=qo(e,jo(n));t.map(jo).forEach(t=>{e=Jo(e,t,()=>r)})}if(po(t)){let[r,i]=t;r.forEach(t=>{e=Jo(e,jo(t),()=>e)}),i&&ro(i,n)}else ro(t,n);return e}var Qo=(e,t)=>uo(e)||po(e)||vo(e)||yo(e)||Ro(e,t);function $o(e,t,n){let r=n.get(e);r?r.push(t):n.set(e,[t])}function es(e,t){let n={},r;return e.forEach(e=>{if(e.length<=1)return;t||(e=e.map(e=>e.map(String)).sort((e,t)=>e.length-t.length));let[i,...a]=e;i.length===0?r=a.map(Ao):n[Ao(i)]=a.map(Ao)}),r?fo(n)?[r]:[r,n]:fo(n)?void 0:n}var ts=(e,t,n,r,i=[],a=[],o=new Map)=>{let s=wo(e);if(!s){$o(e,i,t);let n=o.get(e);if(n)return r?{transformedValue:null}:n}if(!Qo(e,n)){let t=Ho(e,n),r=t?{transformedValue:t.value,annotations:[t.type]}:{transformedValue:e};return s||o.set(e,r),r}if(io(a,e))return{transformedValue:null};let c=Ho(e,n),l=c?.value??e,u=po(l)?[]:{},d={};ro(l,(s,c)=>{if(c===`__proto__`||c===`constructor`||c===`prototype`)throw Error(`Detected property ${c}. This is a prototype pollution risk, please remove it from your object.`);let l=ts(s,t,n,r,[...i,c],[...a,e],o);u[c]=l.transformedValue,po(l.annotations)?d[c]=l.annotations:uo(l.annotations)&&ro(l.annotations,(e,t)=>{d[ko(c)+`.`+t]=e})});let f=fo(d)?{transformedValue:u,annotations:c?[c.type]:void 0}:{transformedValue:u,annotations:c?[c.type,d]:d};return s||o.set(e,f),f};function ns(e){return Object.prototype.toString.call(e).slice(8,-1)}function rs(e){return ns(e)===`Array`}function is(e){if(ns(e)!==`Object`)return!1;let t=Object.getPrototypeOf(e);return!!t&&t.constructor===Object&&t===Object.prototype}function as(e,t,n,r,i){let a={}.propertyIsEnumerable.call(r,t)?`enumerable`:`nonenumerable`;a===`enumerable`&&(e[t]=n),i&&a===`nonenumerable`&&Object.defineProperty(e,t,{value:n,enumerable:!1,writable:!0,configurable:!0})}function os(e,t={}){if(rs(e))return e.map(e=>os(e,t));if(!is(e))return e;let n=Object.getOwnPropertyNames(e),r=Object.getOwnPropertySymbols(e);return[...n,...r].reduce((n,r)=>{if(rs(t.props)&&!t.props.includes(r))return n;let i=e[r];return as(n,r,os(i,t),e,t.nonenumerable),n},{})}var ss=class{constructor({dedupe:e=!1}={}){this.classRegistry=new eo,this.symbolRegistry=new $a(e=>e.description??``),this.customTransformerRegistry=new oo,this.allowedErrorProps=[],this.dedupe=e}serialize(e){let t=new Map,n=ts(e,t,this,this.dedupe),r={json:n.transformedValue};n.annotations&&(r.meta={...r.meta,values:n.annotations});let i=es(t,this.dedupe);return i&&(r.meta={...r.meta,referentialEqualities:i}),r}deserialize(e){let{json:t,meta:n}=e,r=os(t);return n?.values&&(r=Xo(r,n.values,this)),n?.referentialEqualities&&(r=Zo(r,n.referentialEqualities)),r}stringify(e){return JSON.stringify(this.serialize(e))}parse(e){return this.deserialize(JSON.parse(e))}registerClass(e,t){this.classRegistry.register(e,t)}registerSymbol(e,t){this.symbolRegistry.register(e,t)}registerCustom(e,t){this.customTransformerRegistry.register({name:t,...e})}allowErrorProps(...e){this.allowedErrorProps.push(...e)}};ss.defaultInstance=new ss,ss.serialize=ss.defaultInstance.serialize.bind(ss.defaultInstance),ss.deserialize=ss.defaultInstance.deserialize.bind(ss.defaultInstance),ss.stringify=ss.defaultInstance.stringify.bind(ss.defaultInstance),ss.parse=ss.defaultInstance.parse.bind(ss.defaultInstance),ss.registerClass=ss.defaultInstance.registerClass.bind(ss.defaultInstance),ss.registerSymbol=ss.defaultInstance.registerSymbol.bind(ss.defaultInstance),ss.registerCustom=ss.defaultInstance.registerCustom.bind(ss.defaultInstance),ss.allowErrorProps=ss.defaultInstance.allowErrorProps.bind(ss.defaultInstance),ss.serialize,ss.deserialize,ss.stringify,ss.parse,ss.registerClass,ss.registerCustom,ss.registerSymbol,ss.allowErrorProps,Z.__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__??=[],Z.__VUE_DEVTOOLS_KIT_RPC_CLIENT__??=null,Z.__VUE_DEVTOOLS_KIT_RPC_SERVER__??=null,Z.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__??=null,Z.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__??=null,Z.__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__??=null;var cs=typeof document<`u`,ls=/#/g,us=/&/g,ds=/\//g,fs=/=/g,ps=/\?/g,ms=/\+/g,hs=/%5B/g,gs=/%5D/g,_s=/%5E/g,vs=/%60/g,ys=/%7B/g,bs=/%7C/g,xs=/%7D/g,Ss=/%20/g;function Cs(e){return e==null?``:encodeURI(``+e).replace(bs,`|`).replace(hs,`[`).replace(gs,`]`)}function ws(e){return Cs(e).replace(ys,`{`).replace(xs,`}`).replace(_s,`^`)}function Ts(e){return Cs(e).replace(ms,`%2B`).replace(Ss,`+`).replace(ls,`%23`).replace(us,`%26`).replace(vs,"`").replace(ys,`{`).replace(xs,`}`).replace(_s,`^`)}function Es(e){return Ts(e).replace(fs,`%3D`)}function Ds(e){return Cs(e).replace(ls,`%23`).replace(ps,`%3F`)}function Os(e){return Ds(e).replace(ds,`%2F`)}function ks(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{jr.VUE_ROUTER_R0080({text:``+e})}return``+e}var As=/\/$/,js=e=>e.replace(As,``);function Ms(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=Bs(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:ks(o)}}function Ns(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function Ps(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function Fs(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&Is(t.matched[r],n.matched[i])&&Ls(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Is(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Ls(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Rs(e[n],t[n]))return!1;return!0}function Rs(e,t){return Cr(e)?zs(e,t):Cr(t)?zs(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function zs(e,t){return Cr(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function Bs(e,t){if(_r(e))return e;if(!_r(t))return jr.VUE_ROUTER_R0070({to:e,from:t}),e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o<r.length;o++)if(s=r[o],s!==`.`){if(s===`..`)a>1&&a--;else break}return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var Vs={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0};function Hs(e){if(!e){if(cs){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^/]+/,``)}else e=`/`}return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),js(e)}var Us=/^[^#]+#/;function Ws(e,t){return e.replace(Us,`#`)+t}function Gs(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var Ks=()=>history.scrollRestoration===`manual`?{left:window.scrollX,top:window.scrollY}:null;function qs(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`);if(typeof e.el==`string`&&(!r||!document.getElementById(e.el.slice(1))))try{let t=document.querySelector(e.el);if(r&&t){jr.VUE_ROUTER_R0040({el:e.el});return}}catch{jr.VUE_ROUTER_R0041({el:e.el});return}let i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i){jr.VUE_ROUTER_R0042({el:e.el});return}t=Gs(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function Js(e,t){return(history.state?history.state.position-t:-1)+e}var Ys=new Map;function Xs(e){Ys.set(e,Ks())}function Zs(e){let t=Ys.get(e);return Ys.delete(e),t}function Qs(e){return typeof e==`string`||e&&typeof e==`object`}function $s(e){return typeof e==`string`||typeof e==`symbol`}function ec(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;e<n.length;++e){let r=n[e].replace(ms,` `),i=r.indexOf(`=`),a=ks(i<0?r:r.slice(0,i)),o=i<0?null:ks(r.slice(i+1));if(a in t){let e=t[a];Cr(e)||(e=t[a]=[e]),e.push(o)}else t[a]=o}return t}function tc(e){let t=``;for(let n in e){let r=e[n];n=Es(n),r==null?r!==void 0&&(t+=(t.length?`&`:``)+n):(Cr(r)?r.map(e=>e&&Ts(e)):[r&&Ts(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function nc(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=Cr(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}function rc(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function ic(e,t,n){let r=e.value;if(!r){{let e=t===`updateGuards`?`onBeforeRouteUpdate`:`onBeforeRouteLeave`;jr.VUE_ROUTER_R0020({fn:e})}return}let i=r,a=()=>{i[t].delete(n)};v(a),o(a),m(()=>{let r=e.value;r||jr.VUE_ROUTER_R0021(),r&&(i=r),i[t].add(n)}),i[t].add(n)}function ac(e){b()?ic(z(Mr,{}),`leaveGuards`,e):jr.VUE_ROUTER_R0022({fn:`onBeforeRouteLeave`})}function oc(e){b()?ic(z(Mr,{}),`updateGuards`,e):jr.VUE_ROUTER_R0022({fn:`onBeforeRouteUpdate`})}function sc(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(Dr(4,{from:n,to:t})):e instanceof Error?c(e):Qs(e)?c(Dr(2,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,cc(lc(l,t,n)))),d=Promise.resolve(u);if(e.length<3&&(d=d.then(l)),e.length>2){let t={name:e.name,guard:e.toString()};if(typeof u==`object`&&`then`in u)d=d.then(e=>l._called?e:(jr.VUE_ROUTER_R0023(t),Promise.reject(Error(`Invalid navigation guard`))));else if(u!==void 0&&!l._called){jr.VUE_ROUTER_R0023(t),c(Error(`Invalid navigation guard`));return}}d.catch(e=>c(e))})}function cc(e){let t=!1;return function(){return t||(t=!0,jr.VUE_ROUTER_R0025()),e.apply(this,arguments)}}function lc(e,t,n){let r=0;return function(){r++===1&&jr.VUE_ROUTER_R0024({from:n.fullPath,to:t.fullPath}),e._called=!0,r===1&&e.apply(null,arguments)}}function uc(e,t,n,r,i=e=>e()){let a=[];for(let o of e){!o.components&&o.children&&!o.children.length&&jr.VUE_ROUTER_R0026({path:o.path});for(let e in o.components){let s=o.components[e];if(!s||typeof s!=`object`&&typeof s!=`function`)throw jr.VUE_ROUTER_R0027({name:e,path:o.path,received:String(s)}),Error(`Invalid route component`);if(`then`in s){jr.VUE_ROUTER_R0028({name:e,path:o.path});let t=s;s=()=>t}else s.__asyncLoader&&!s.__warnedDefineAsync&&(s.__warnedDefineAsync=!0,jr.VUE_ROUTER_R0029({name:e,path:o.path}));if(t===`beforeRouteEnter`||o.instances[e]){if(vr(s)){let c=(s.__vccOpts||s)[t];c&&a.push(sc(c,n,r,o,e,i))}else{let c=s();`catch`in c||(jr.VUE_ROUTER_R0030({name:e,path:o.path}),c=Promise.resolve(c)),a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=yr(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&sc(c,n,r,o,e,i)()}))}}}}return a}function dc(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;o<a;o++){let a=t.matched[o];a&&(e.matched.find(e=>Is(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>Is(e,s))||i.push(s))}return[n,r,i]}function fc(e,t){let n=br({},e,{matched:e.matched.map(e=>Mc(e,[`instances`,`children`,`aliasOf`]))});return{_custom:{type:null,readOnly:!0,display:e.fullPath,tooltip:t,value:n}}}function pc(e){return{_custom:{display:e}}}var mc=0;function hc(e,t,n){if(t.__hasDevtools)return;t.__hasDevtools=!0;let r=mc++;oee({id:`org.vuejs.router`+(r?`.`+r:``),label:`Vue Router`,packageName:`vue-router`,homepage:`https://router.vuejs.org`,logo:`https://router.vuejs.org/logo.png`,componentStateTypes:[`Routing`],app:e},i=>{i.on.inspectComponent(e=>{e.instanceData&&e.instanceData.state.push({type:`Routing`,key:`$route`,editable:!1,value:fc(t.currentRoute.value,`Current Route`)})}),i.on.visitComponentTree(({treeNode:e,componentInstance:t})=>{if(t.__vrv_devtools){let n=t.__vrv_devtools;e.tags.push({label:(n.name?`${n.name.toString()}: `:``)+n.path,textColor:0,tooltip:`This component is rendered by <router-view>`,backgroundColor:vc})}Cr(t.__vrl_devtools)&&(t.__devtoolsApi=i,t.__vrl_devtools.forEach(t=>{let n=t.route.path,r=Sc,i=``,a=0;t.error?(n=t.error,r=wc,a=Tc):t.isExactActive?(r=bc,i=`This is exactly active`):t.isActive&&(r=yc,i=`This link is active`),e.tags.push({label:n,textColor:a,tooltip:i,backgroundColor:r})}))}),E(t.currentRoute,()=>{c(),i.notifyComponentUpdate(),i.sendInspectorTree(s),i.sendInspectorState(s)});let a=`router:navigations:`+r;i.addTimelineLayer({id:a,label:`Router${r?` `+r:``} Navigations`,color:4237508}),t.onError((e,t)=>{i.addTimelineEvent({layerId:a,event:{title:`Error during Navigation`,subtitle:t.fullPath,logType:`error`,time:i.now(),data:{error:e},groupId:t.meta.__navigationId}})});let o=0;t.beforeEach((e,t)=>{let n={guard:pc(`beforeEach`),from:fc(t,`Current Location during this navigation`),to:fc(e,`Target location`)};Object.defineProperty(e.meta,"__navigationId",{value:o++}),i.addTimelineEvent({layerId:a,event:{time:i.now(),title:`Start of navigation`,subtitle:e.fullPath,data:n,groupId:e.meta.__navigationId}})}),t.afterEach((e,t,n)=>{let r={guard:pc(`afterEach`)};n?(r.failure={_custom:{type:Error,readOnly:!0,display:n?n.message:``,tooltip:`Navigation Failure`,value:n}},r.status=pc(`❌`)):r.status=pc(`✅`),r.from=fc(t,`Current Location during this navigation`),r.to=fc(e,`Target location`),i.addTimelineEvent({layerId:a,event:{title:`End of navigation`,subtitle:e.fullPath,time:i.now(),data:r,logType:n?`warning`:`default`,groupId:e.meta.__navigationId}})});let s=`router-inspector:`+r;i.addInspector({id:s,label:`Routes`+(r?` `+r:``),icon:`book`,treeFilterPlaceholder:`Search routes`});function c(){if(!l)return;let e=l,r=n.getRoutes().filter(e=>!e.parent||!e.parent.record.components);r.forEach(Ac),e.filter&&(r=r.filter(t=>jc(t,e.filter.toLowerCase()))),r.forEach(e=>kc(e,t.currentRoute.value)),e.rootNodes=r.map(Ec)}let l;i.on.getInspectorTree(t=>{l=t,t.app===e&&t.inspectorId===s&&c()}),i.on.getInspectorState(t=>{if(t.app===e&&t.inspectorId===s){let e=n.getRoutes().find(e=>e.record.__vd_id===t.nodeId);e&&(t.state={options:_c(e)})}}),i.sendInspectorTree(s),i.sendInspectorState(s)})}function gc(e){return e.optional?e.repeatable?`*`:`?`:e.repeatable?`+`:``}function _c(e){let{record:t}=e,n=[{editable:!1,key:`path`,value:t.path}];return t.name!=null&&n.push({editable:!1,key:`name`,value:t.name}),n.push({editable:!1,key:`regexp`,value:e.re}),e.keys.length&&n.push({editable:!1,key:`keys`,value:{_custom:{type:null,readOnly:!0,display:e.keys.map(e=>`${e.name}${gc(e)}`).join(` `),tooltip:`Param keys`,value:e.keys}}}),t.redirect!=null&&n.push({editable:!1,key:`redirect`,value:t.redirect}),e.alias.length&&n.push({editable:!1,key:`aliases`,value:e.alias.map(e=>e.record.path)}),Object.keys(e.record.meta).length&&n.push({editable:!1,key:`meta`,value:e.record.meta}),n.push({key:`score`,editable:!1,value:{_custom:{type:null,readOnly:!0,display:e.score.map(e=>e.join(`, `)).join(` | `),tooltip:`Score used to sort routes`,value:e.score}}}),n}var vc=15485081,yc=2450411,bc=8702998,xc=2282478,Sc=16486972,Cc=6710886,wc=16704226,Tc=12131356;function Ec(e){let t=[],{record:n}=e;n.name!=null&&t.push({label:String(n.name),textColor:0,backgroundColor:xc}),n.aliasOf&&t.push({label:`alias`,textColor:0,backgroundColor:Sc}),e.__vd_match&&t.push({label:`matches`,textColor:0,backgroundColor:vc}),e.__vd_exactActive&&t.push({label:`exact`,textColor:0,backgroundColor:bc}),e.__vd_active&&t.push({label:`active`,textColor:0,backgroundColor:yc}),n.redirect&&t.push({label:typeof n.redirect==`string`?`redirect: ${n.redirect}`:`redirects`,textColor:16777215,backgroundColor:Cc});let r=n.__vd_id;return r??(r=String(Dc++),n.__vd_id=r),{id:r,label:n.path,tags:t,children:e.children.map(Ec)}}var Dc=0,Oc=/^\/(.*)\/([a-z]*)$/;function kc(e,t){let n=t.matched.length&&Is(t.matched[t.matched.length-1],e.record);e.__vd_exactActive=e.__vd_active=n,n||(e.__vd_active=t.matched.some(t=>Is(t,e.record))),e.children.forEach(e=>kc(e,t))}function Ac(e){e.__vd_match=!1,e.children.forEach(Ac)}function jc(e,t){let n=String(e.re).match(Oc);if(e.__vd_match=!1,!n||n.length<3)return!1;if(new RegExp(n[1].replace(/\$$/,``),n[2]).test(t))return e.children.forEach(e=>jc(e,t)),e.record.path!==`/`||t===`/`?(e.__vd_match=e.re.test(t),!0):!1;let r=e.record.path.toLowerCase(),i=ks(r);return!_r(t)&&(i.includes(t)||r.includes(t))||i.startsWith(t)||r.startsWith(t)||e.record.name&&String(e.record.name).includes(t)?!0:e.children.some(e=>jc(e,t))}function Mc(e,t){let n={};for(let r in e)t.includes(r)||(n[r]=e[r]);return n}var Nc=()=>location.protocol+`//`+location.host;function Pc(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),Ps(n,``)}return Ps(n,e)+r+i}function Fc(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=Pc(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:`pop`,direction:u?u>0?`forward`:`back`:``})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){let{history:e}=window;e.state&&e.replaceState(br({},e.state,{scroll:Ks()}),``)}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),{pauseListeners:c,listen:l,destroy:d}}function Ic(e,t,n,r=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:null}}function Lc(e){let{history:t,location:n}=window,r={value:Pc(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:Nc()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){jr.VUE_ROUTER_R0120({cause:e}),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,br({},t.state,Ic(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=br({},i.value,t.state,{forward:e,scroll:Ks()});t.state||jr.VUE_ROUTER_R0121(),a(o.current,o,!0),a(e,br({},Ic(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function Rc(e){e=Hs(e);let t=Lc(e),n=Fc(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=br({location:``,base:e,go:r,createHref:Ws.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}var zc={type:0,value:``},Bc=/[a-zA-Z0-9_]/;function Vc(e){if(!e)return[[]];if(e===`/`)return[[zc]];if(!_r(e))throw Error(`Route paths should start with a "/": "${e}" should be "/${e}".`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=0,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===0?a.push({type:0,value:l}):n===1||n===2||n===3?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;s<e.length;)switch(c=e[s++],n){case 0:c===`\\`?(r=n,n=4):c===`/`?(l&&d(),o()):c===`:`?(d(),n=1):f();break;case 4:f(),n=r;break;case 1:c===`(`?n=2:Bc.test(c)?f():(d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--);break;case 2:c===`)`?u[u.length-1]==`\\`?u=u.slice(0,-1)+c:n=3:u+=c;break;case 3:d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--,u=``;break;default:t(`Unknown state`)}return n===2&&t(`Unfinished custom RegExp for param "${l}"`),d(),o(),i}var Hc=`[^/]+?`,Uc={sensitive:!1,strict:!1,start:!0,end:!0},Wc=/[.+*?^${}()[\]/\\]/g;function Gc(e,t){let n=br({},Uc,t),r=[],i=n.start?`^`:``,a=[];for(let t of e){let e=t.length?[]:[90];n.strict&&!t.length&&(i+=`/`);for(let r=0;r<t.length;r++){let o=t[r],s=40+(n.sensitive?.25:0);if(o.type===0)r||(i+=`/`),i+=o.value.replace(Wc,`\\$&`),s+=40;else if(o.type===1){let{value:e,repeatable:n,optional:c,regexp:l}=o;a.push({name:e,repeatable:n,optional:c});let u=l||Hc;if(u!==Hc){s+=10;try{RegExp(`(${u})`)}catch(t){throw Error(`Invalid custom RegExp for param "${e}" (${u}): `+t.message)}}let d=n?`((?:${u})(?:/(?:${u}))*)`:`(${u})`;r||(d=c&&t.length<2?`(?:/${d})`:`/`+d),c&&(d+=`?`),i+=d,s+=20,c&&(s+=-8),n&&(s+=-20),u===`.*`&&(s+=-50)}e.push(s)}r.push(e)}if(n.strict&&n.end){let e=r.length-1;r[e][r[e].length-1]+=.7000000000000001}n.strict||(i+=`/?`),n.end?i+=`$`:n.strict&&!i.endsWith(`/`)&&(i+=`(?:/|$)`);let o=new RegExp(i,n.sensitive?``:`i`);function s(e){let t=e.match(o),n={};if(!t)return null;for(let e=1;e<t.length;e++){let r=t[e]||``,i=a[e-1];n[i.name]=r&&i.repeatable?r.split(`/`):r}return n}function c(t){let n=``,r=!1;for(let i of e){r&&n.endsWith(`/`)||(n+=`/`),r=!1;for(let e of i)if(e.type===0)n+=e.value;else if(e.type===1){let{value:a,repeatable:o,optional:s}=e,c=a in t?t[a]:``;if(Cr(c)&&!o)throw Error(`Provided param "${a}" is an array but it is not repeatable (* or + modifiers)`);let l=Cr(c)?c.join(`/`):c;if(!l){if(s)i.length<2&&(n.endsWith(`/`)?n=n.slice(0,-1):r=!0);else throw Error(`Missing required param "${a}"`)}n+=l}}return n||`/`}return{re:o,score:r,keys:a,parse:s,stringify:c}}function Kc(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===80?-1:1:e.length>t.length?t.length===1&&t[0]===80?1:-1:0}function qc(e,t){let n=0,r=e.score,i=t.score;for(;n<r.length&&n<i.length;){let e=Kc(r[n],i[n]);if(e)return e;n++}if(Math.abs(i.length-r.length)===1){if(Jc(r))return 1;if(Jc(i))return-1}return i.length-r.length}function Jc(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var Yc={strict:!1,end:!0,sensitive:!1};function Xc(e,t,n){let r=Gc(Vc(e.path),n);{let t=new Set;for(let n of r.keys)t.has(n.name)&&jr.VUE_ROUTER_R0090({name:n.name,path:e.path}),t.add(n.name)}let i=br(r,{record:e,parent:t,children:[],alias:[]});return t&&!i.record.aliasOf==!t.record.aliasOf&&t.children.push(i),i}function Zc(e,t){let n=[],r=new Map;t=wr(Yc,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=$c(e);al(s,n),s.aliasOf=r&&r.record;let l=wr(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push($c(br({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&!_r(u)){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(t.path===`*`)throw Error(`Catch all routes ("*") must now be defined using a param with a custom regexp.
|
|
7
|
-
See more at https://router.vuejs.org/guide/migration/#Removed-star-or-catch-all-routes.`);if(d=Xc(t,n,l),n&&_r(u)&&sl(d,n),r?(r.alias.push(d),il(r,d)):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!tl(d)&&(ol(e,n),o(e.name))),ul(d)&&c(d),s.children){let e=s.children;for(let t=0;t<e.length;t++)a(e[t],d,r&&r.children[t])}r||=d}return f?()=>{o(f)}:Sr}function o(e){if($s(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=cl(e,n);n.splice(t,0,e),e.record.name&&!tl(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw Dr(1,{location:e});{let n=Object.keys(e.params||{}).filter(e=>!i.keys.find(t=>t.name===e));if(n.length){let e=!i.keys.length&&n.some(e=>e in t.params);jr.VUE_ROUTER_R0100({params:n.join(`", "`),inherited:e?" If you are using a catch-all route with a named redirect, pass an empty `params` object: `redirect: { name: '...', params: {} }`.":``})}}s=i.record.name,a=br(Qc(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&Qc(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,_r(o)||jr.VUE_ROUTER_R0101({path:o}),i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name,i.keys.forEach(e=>{e.optional&&!a[e.name]&&delete a[e.name]}));else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw Dr(1,{location:e,currentLocation:t});s=i.record.name,a=br({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:nl(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function Qc(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function $c(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:el(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function el(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function tl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function nl(e){return e.reduce((e,t)=>br(e,t.meta),{})}function rl(e,t){return e.name===t.name&&e.optional===t.optional&&e.repeatable===t.repeatable}function il(e,t){for(let n of e.keys)if(!n.optional&&!t.keys.find(rl.bind(null,n))){jr.VUE_ROUTER_R0102({alias:t.record.path,original:e.record.path,name:n.name});return}for(let n of t.keys)if(!n.optional&&!e.keys.find(rl.bind(null,n))){jr.VUE_ROUTER_R0102({alias:t.record.path,original:e.record.path,name:n.name});return}}function al(e,t){t&&t.record.name&&!e.name&&!e.path&&e.children.length===0&&jr.VUE_ROUTER_R0103({name:String(t.record.name)})}function ol(e,t){for(let n=t;n;n=n.parent)if(n.record.name===e.name)throw Error(`A route named "${String(e.name)}" has been added as a ${t===n?`child`:`descendant`} of a route with the same name. Route names must be unique and a nested route cannot use the same name as an ancestor.`)}function sl(e,t){for(let n of t.keys)if(!e.keys.find(rl.bind(null,n))){jr.VUE_ROUTER_R0104({path:e.record.path,name:n.name,parent:t.record.path});return}}function cl(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;qc(e,t[i])<0?r=i:n=i+1}let i=ll(e);return i&&(r=t.lastIndexOf(i,r-1),r<0&&jr.VUE_ROUTER_R0105({ancestor:i.record.path,record:e.record.path})),r}function ll(e){let t=e;for(;t=t.parent;)if(ul(t)&&qc(e,t)===0)return t}function ul({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function dl(e){let t=z(Pr),n=z(Fr),r=!1,i=null,a=B(()=>{let n=re(e.to);return r&&n===i||(Qs(n)||jr.VUE_ROUTER_R0050({to:n}),i=n,r=!0),t.resolve(n)}),o=B(()=>{let{matched:e}=a.value,{length:t}=e,r=e[t-1],i=n.matched;if(!r||!i.length)return-1;let o=i.findIndex(Is.bind(null,r));if(o>-1)return o;let s=gl(e[t-2]);return t>1&&gl(r)===s&&i[i.length-1].path!==s?i.findIndex(Is.bind(null,e[t-2])):o}),s=B(()=>o.value>-1&&hl(n.params,a.value.params)),c=B(()=>o.value>-1&&o.value===n.matched.length-1&&Ls(n.params,a.value.params));function l(n={}){if(ml(n)){let n=t[re(e.replace)?`replace`:`push`](re(e.to)).catch(Sr);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}if(cs){let t=b();if(t){let n={route:a.value,isActive:s.value,isExactActive:c.value,error:null};t.__vrl_devtools=t.__vrl_devtools||[],t.__vrl_devtools.push(n),_(()=>{n.route=a.value,n.isActive=s.value,n.isExactActive=c.value,n.error=Qs(re(e.to))?null:`Invalid "to" value`},{flush:`post`})}}return{route:a,href:B(()=>a.value.href),isActive:s,isExactActive:c,navigate:l}}function fl(e){return e.length===1?e[0]:e}var pl=W({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:dl,setup(e,{slots:t}){let n=de(dl(e)),{options:r}=z(Pr),a=B(()=>({[_l(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[_l(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&fl(t.default(n));return e.custom?r:i(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:a.value},r)}}});function ml(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(e.button===void 0||e.button===0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function hl(e,t){for(let n in t){let r=t[n],i=e[n];if(Cr(r)){if(!Cr(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}else if(r!==i)return!1}return!0}function gl(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var _l=(e,t,n)=>e??t??n,mee=W({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:r}){gee();let a=z(Ir),o=B(()=>e.route||a.value),s=z(Nr,0),c=B(()=>{let e=re(s),{matched:t}=o.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),l=B(()=>o.value.matched[c.value]);n(Nr,B(()=>c.value+1)),n(Mr,l),n(Ir,o);let u=M();return E(()=>[u.value,l.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),!e||!t||i&&Is(t,i)&&r||(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let n=o.value,a=e.name,s=l.value,d=s&&s.components[a];if(!d)return vl(r.default,{Component:d,route:n});let f=s.props[a],p=f?f===!0?n.params:typeof f==`function`?f(n):f:null,m=i(d,br({},p,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(s.instances[a]=null)},ref:u}));if(cs&&m.ref){let e={depth:c.value,name:s.name,path:s.path,meta:s.meta};(Cr(m.ref)?m.ref.map(e=>e.i):[m.ref.i]).forEach(t=>{t&&(t.__vrv_devtools=e)})}return vl(r.default,{Component:m,route:n})||m}}});function vl(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var hee=mee;function gee(){let e=b(),t=e.parent&&e.parent.type.name,n=e.parent&&e.parent.subTree&&e.parent.subTree.type;if(t&&(t===`KeepAlive`||t.includes(`Transition`))&&typeof n==`object`&&n.name===`RouterView`){let e=t===`KeepAlive`?`keep-alive`:`transition`;jr.VUE_ROUTER_R0060({comp:e})}}function _ee(e){let t=Zc(e.routes,e),n=e.parseQuery||ec,r=e.stringifyQuery||tc,i=e.history;if(!i)throw Error(`Provide the "history" option when calling "createRouter()": https://router.vuejs.org/api/interfaces/RouterOptions.html#history`);let a=rc(),o=rc(),s=rc(),c=ee(Vs),l=ee(0),u=Vs;cs&&e.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let d=xr.bind(null,e=>``+e),f=xr.bind(null,Os),m=xr.bind(null,ks);function h(e,n){let r,i;$s(e)?(r=t.getRecordMatcher(e),r||jr.VUE_ROUTER_R0001({name:String(e)}),i=n):i=e;let a=t.addRoute(i,r);return l.value++,()=>{a(),l.value++}}function g(e){let n=t.getRecordMatcher(e);n?(t.removeRoute(n),l.value++):jr.VUE_ROUTER_R0002({name:String(e)})}function _(){t.clearRoutes(),l.value++}function v(){return t.getRoutes().map(e=>e.record)}function y(e){return!!t.getRecordMatcher(e)}function b(e,a){if(l.value,typeof e==`string`){a||=e.startsWith(`/`)?Vs:c.value;let r=Ms(n,e,a.path),o=t.resolve({path:r.path},a),s=i.createHref(r.fullPath);return s.startsWith(`//`)?jr.VUE_ROUTER_R0003({location:e,href:s}):o.matched.length||jr.VUE_ROUTER_R0004({path:e}),br(r,o,{params:m(o.params),redirectedFrom:void 0,href:s})}if(!Qs(e))return jr.VUE_ROUTER_R0005({rawLocation:e}),b({});a=br({},a||(e.path!=null&&e.path.startsWith(`/`)&&!(`name`in e&&e.name)?Vs:c.value));let o;if(e.path!=null)`params`in e&&!(`name`in e)&&Object.keys(e.params).length&&jr.VUE_ROUTER_R0006({path:e.path}),o=br({},e,{path:Ms(n,e.path,a.path).path});else{let t=br({},e.params);for(let e in t)t[e]??delete t[e];o=br({},e,{params:f(t)}),a.params=f(a.params)}let s=t.resolve(o,a),u=e.hash||``;u&&!u.startsWith(`#`)&&jr.VUE_ROUTER_R0007({hash:u}),s.params=d(m(s.params));let p=Ns(r,br({},e,{hash:ws(u),path:s.path})),h=i.createHref(p);return h.startsWith(`//`)?jr.VUE_ROUTER_R0003({location:e,href:h}):s.matched.length||jr.VUE_ROUTER_R0004({path:e.path==null?e:e.path}),br({fullPath:p,hash:u,query:r===tc?nc(e.query):e.query||{}},s,{redirectedFrom:void 0,href:h})}function x(e){return typeof e==`string`?Ms(n,e,c.value.path):br({},e)}function S(e,t){if(u!==e)return Dr(8,{from:t,to:e})}function C(e){return E(e)}function w(e){return C(br(x(e),{replace:!0}))}function T(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;if(typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=x(i):{path:i},i.params={}),i.path==null&&!(`name`in i))throw jr.VUE_ROUTER_R0008({target:JSON.stringify(i,null,2),to:e.fullPath}),Error(`Invalid redirect`);return br({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function E(e,t){let n=u=b(e),i=c.value,a=e.state,o=e.force,s=e.replace===!0,l=T(n,i);if(l)return E(br(x(l),{state:typeof l==`object`?br({},a,l.state):a,force:o,replace:s}),t||n);let d=n;d.redirectedFrom=t;let f;return!o&&Fs(r,i,n)&&(f=Dr(16,{to:d,from:i}),L(i,i,!0,!1)),(f?Promise.resolve(f):k(d,i)).catch(e=>Or(e)?Or(e,2)?e:ie(e):F(e,d,i)).then(e=>{if(e){if(Or(e,2))return Fs(r,b(e.to),d)&&t&&(t._count=t._count?t._count+1:1)>30?(jr.VUE_ROUTER_R0009({from:i.fullPath,to:d.fullPath}),Promise.reject(Error(`Infinite redirect in navigation guard`))):E(br({replace:s},x(e.to),{state:typeof e.to==`object`?br({},a,e.to.state):a,force:o}),t||d)}else e=j(d,i,!0,s,a);return A(d,i,e),e})}function D(e,t){let n=S(e,t);return n?Promise.reject(n):Promise.resolve()}function O(e){let t=ae.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function k(e,t){let n,[r,i,s]=dc(e,t);n=uc(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(sc(r,e,t))});let c=D.bind(null,e,t);return n.push(c),se(n).then(()=>{n=[];for(let r of a.list())n.push(sc(r,e,t));return n.push(c),se(n)}).then(()=>{n=uc(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(sc(r,e,t))});return n.push(c),se(n)}).then(()=>{n=[];for(let r of s)if(r.beforeEnter){if(Cr(r.beforeEnter))for(let i of r.beforeEnter)n.push(sc(i,e,t));else n.push(sc(r.beforeEnter,e,t))}return n.push(c),se(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=uc(s,`beforeRouteEnter`,e,t,O),n.push(c),se(n))).then(()=>{n=[];for(let r of o.list())n.push(sc(r,e,t));return n.push(c),se(n)}).catch(e=>Or(e,8)?e:Promise.reject(e))}function A(e,t,n){s.list().forEach(r=>O(()=>r(e,t,n)))}function j(e,t,n,r,a){let o=S(e,t);if(o)return o;let s=t===Vs,l=cs?history.state:{};n&&(r||s?i.replace(e.fullPath,br({scroll:s&&l&&l.scroll},a)):i.push(e.fullPath,a)),c.value=e,L(e,t,n,s),ie()}let M;function N(){M||=i.listen((e,t,n)=>{if(!B.listening)return;let r=b(e),a=T(r,B.currentRoute.value);if(a){E(br(a,{replace:!0,force:!0}),r).catch(Sr);return}u=r;let o=c.value;cs&&n.delta&&Xs(Js(o.fullPath,n.delta)),k(r,o).catch(e=>Or(e,12)?e:Or(e,2)?(E(br(x(e.to),{force:!0}),r).then(e=>{Or(e,20)&&!n.delta&&n.type===`pop`&&i.go(-1,!1)}).catch(Sr),Promise.reject()):(n.delta&&i.go(-n.delta,!1),F(e,r,o))).then(e=>{e||=j(r,o,!1),e&&(n.delta&&!Or(e,8)?i.go(-n.delta,!1):n.type===`pop`&&Or(e,20)&&i.go(-1,!1)),A(r,o,e)}).catch(Sr)})}let te=rc(),P=rc(),ne;function F(e,t,n){ie(e);let r=P.list();return r.length?r.forEach(r=>r(e,t,n)):(jr.VUE_ROUTER_R0010(),console.error(e)),Promise.reject(e)}function I(){return ne&&c.value!==Vs?Promise.resolve():new Promise((e,t)=>{te.add([e,t])})}function ie(e){return ne||(ne=!e,N(),te.list().forEach(([t,n])=>e?n(e):t()),te.reset()),e}function L(t,n,r,i){let{scrollBehavior:a}=e;if(!cs||!a)return Promise.resolve();let o=!r&&Zs(Js(t.fullPath,0))||(i||!r)&&history.state&&history.state.scroll||null;return p().then(()=>a(t,n,o)).then(e=>t===c.value&&e&&qs(e)).catch(e=>t===c.value&&F(e,t,n))}let R=e=>i.go(e),z,ae=new Set,B={currentRoute:c,listening:!0,addRoute:h,removeRoute:g,clearRoutes:_,hasRoute:y,getRoutes:v,resolve:b,options:e,push:C,replace:w,go:R,back:()=>R(-1),forward:()=>R(1),beforeEach:a.add,beforeResolve:o.add,afterEach:s.add,onError:P.add,isReady:I,install(e){e.component(`RouterLink`,pl),e.component(`RouterView`,hee),e.config.globalProperties.$router=B,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>re(c)}),cs&&!z&&c.value===Vs&&(z=!0,C(i.location).catch(e=>{jr.VUE_ROUTER_R0011({cause:e})}));let n={};for(let e in Vs)Object.defineProperty(n,e,{get:()=>c.value[e],enumerable:!0});e.provide(Pr,B),e.provide(Fr,oe(n)),e.provide(Ir,c);let r=e.unmount;ae.add(e),e.unmount=function(){ae.delete(e),ae.size<1&&(u=Vs,M&&M(),M=null,c.value=Vs,z=!1,ne=!1),r()},cs&&hc(e,B,t)}};function se(e){return e.reduce((e,t)=>e.then(()=>O(t)),Promise.resolve())}return B}new URLSearchParams(location.search).get(`surface`)===`window`&&sessionStorage.setItem(`projector-surface`,`window`);var yl=sessionStorage.getItem(`projector-surface`)===`window`;function bl(e){return e===`error`?`danger`:e===`stopping`?`muted`:e===`idle`?`faint`:`success`}var vee=W({__name:`UiLabel`,props:{for:{type:String,required:!1},as:{type:String,required:!1},inline:{type:Boolean,required:!1},size:{type:String,required:!1},tone:{type:String,required:!1},spaceBefore:{type:Number,required:!1},spaceAfter:{type:Number,required:!1}},setup(e,{expose:t}){t();let n={props:e};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function yee(t,n,r,i,a,o){return K(),F(C(r.as??`label`),{class:`ui-label`,for:r.as===`span`?void 0:i.props.for,style:Qe({display:r.inline?`inline`:void 0,fontSize:r.size?`var(--fs-${r.size})`:void 0,color:r.tone===`muted`?`var(--muted)`:r.tone===`secondary`?`var(--text-2)`:void 0,marginTop:r.spaceBefore?`var(--sp-${r.spaceBefore})`:void 0,marginBottom:r.spaceAfter?`var(--sp-${r.spaceAfter})`:void 0})},{default:e(()=>[c(t.$slots,`default`,{},void 0,!0)]),_:3},8,[`for`,`style`])}var xl=H(vee,[[`render`,yee],[`__scopeId`,`data-v-2f4d050d`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiLabel.vue`]]),bee=W({__name:`UiChoiceGroup`,props:{label:{type:String,required:!0},name:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=V(),i={props:n,id:r,groupName:B(()=>n.name??r)};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),xee={class:`choice-group`},See={class:`u-sr-only`};function Cee(e,t,n,r,i,a){return K(),U(`fieldset`,xee,[I(`legend`,See,X(n.label),1),c(e.$slots,`default`,{groupName:r.groupName},void 0,!0)])}var Sl=H(bee,[[`render`,Cee],[`__scopeId`,`data-v-c988c607`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiChoiceGroup.vue`]]),wee=W({__name:`UiChoiceRow`,props:{title:{type:String,required:!0},description:{type:String,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Tee={class:`choice-row`},Eee={key:0};function Dee(e,t,n,r,i,a){return K(),U(`label`,Tee,[c(e.$slots,`default`),I(`span`,null,[I(`strong`,null,X(n.title),1),n.description?(K(),U(`small`,Eee,X(n.description),1)):D(`v-if`,!0)])])}var Cl=H(wee,[[`render`,Dee],[`__scopeId`,`data-v-606ac1c8`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiChoiceRow.vue`]]),Oee=W({__name:`InterfaceSettings`,setup(e,{expose:t}){t();let n=V(),r=V(),i=M(`native`),a=M(`native`),o=M(`Ctrl+Alt+Space`),s=M(`Ctrl+Alt+Space`),c=M(),l=M(Oe()),u=M(l.value),{ready:d,busy:p,error:m,status:h,load:g,perform:_}=Me(),v=Me(),{busy:y,error:b,status:x,load:S,perform:C}=v;y.value=!0;let w=B(()=>Ye.find(e=>e.id===l.value)?.description??``),T=[{id:`native`,title:`Системное окно`,description:`Нативное поле поиска и список приложений. По умолчанию.`},{id:`window`,title:`Отдельное веб-окно`,description:`Интерфейс Projector без вкладок и адресной строки.`},{id:`browser`,title:`Страница в браузере`,description:`Обычная вкладка в вашем браузере.`}];async function E(e,t){let n=await fetch(`/api/launcher/settings`,{method:e,headers:{"Content-Type":`application/json`},body:t?JSON.stringify(t):void 0}),r=await n.json();if(!n.ok)throw Error(r.error);return r}f(()=>{O(),D()});async function D(){await g(async()=>{let e=await E(`GET`);i.value=a.value=e.mode,o.value=s.value=e.shortcut,c.value=e.hotkey},`Не удалось загрузить настройки`)}async function O(){await S(async()=>{let e=await fetch(`/api/appearance`),t=await e.json();if(!e.ok)throw Error(t.error||`Не удалось загрузить схему`);ke(t.choice)&&(l.value=t.choice),u.value=l.value,Xe(l.value)},`Не удалось загрузить схему`)}async function k(){let e=l.value;if(e===u.value)return;let t=u.value;Xe(e),await C(async()=>{let t=await fetch(`/api/appearance`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({choice:e})}),n=await t.json();if(!t.ok)throw Error(n.error||`Не удалось сохранить схему`);u.value=e},{errorFallback:`Не удалось сохранить схему`,success:`Схема сохранена`,rollback:()=>{l.value=t,Xe(t)}})}async function A(){await _(async()=>{let e=await E(`PUT`,{mode:i.value,shortcut:o.value});a.value=i.value,s.value=o.value,c.value=e.hotkey},{errorFallback:`Не удалось сохранить`,success:`Сохранено`})}async function j(){await _(async()=>{let e=await fetch(`/api/app/open`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:i.value})}),t=await e.json();if(!e.ok)throw Error(t.error)},{errorFallback:`Не удалось открыть`})}let N={shortcutId:n,appearanceId:r,mode:i,saved:a,shortcut:o,savedShortcut:s,hotkey:c,appearance:l,savedAppearance:u,ready:d,busy:p,error:m,status:h,loadLauncherSection:g,perform:_,appearanceState:v,appearanceBusy:y,appearanceError:b,appearanceStatus:x,loadAppearanceSection:S,performAppearance:C,appearanceDescription:w,modes:T,request:E,loadLauncher:D,loadAppearance:O,saveAppearance:k,save:A,open:j,UiHeading:Ee,UiLabel:xl,UiMessage:Te,UiControl:Se,UiChoiceGroup:Sl,UiChoiceRow:Cl,UiInline:Be,UiButton:q,UiHint:we,get appearanceOptions(){return Ye}};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}}),kee={class:`interface-settings`},Aee=[`value`];function jee(t,n,r,i,a,o){return K(),U(`section`,kee,[y(i.UiHeading,{as:`h2`,size:`sm`},{default:e(()=>[...n[3]||=[G(`Как открывать Projector`,-1)]]),_:1}),y(i.UiChoiceGroup,{label:`Режим интерфейса`,disabled:!i.ready||i.busy},{default:e(({groupName:t})=>[(K(),U(P,null,S(i.modes,r=>y(i.UiChoiceRow,{key:r.id,title:r.title,description:r.description},{default:e(()=>[y(i.UiControl,{modelValue:i.mode,"onUpdate:modelValue":n[0]||=e=>i.mode=e,type:`radio`,name:t,value:r.id},null,8,[`modelValue`,`name`,`value`])]),_:2},1032,[`title`,`description`])),64))]),_:1},8,[`disabled`]),y(i.UiLabel,{size:`sm`,tone:`secondary`,"space-before":4,"space-after":2,for:i.shortcutId},{default:e(()=>[...n[4]||=[G(`Горячая клавиша`,-1)]]),_:1},8,[`for`]),y(i.UiControl,{as:`select`,id:i.shortcutId,modelValue:i.shortcut,"onUpdate:modelValue":n[1]||=e=>i.shortcut=e,disabled:!i.ready||i.busy},{default:e(()=>[...n[5]||=[I(`option`,{value:`Ctrl+Alt+Space`},`Ctrl + Alt + Space`,-1),I(`option`,{value:`Super+Space`},`Super + Space`,-1),I(`option`,{value:`Alt+Space`},`Alt + Space`,-1),I(`option`,{value:``},`Выключена`,-1)]]),_:1},8,[`id`,`modelValue`,`disabled`]),y(i.UiHint,{class:`hint`,role:`status`},{default:e(()=>[i.shortcut?i.hotkey?.active?(K(),U(P,{key:1},[G(`Работает: `+X(i.hotkey.shortcut)+`. Projector остаётся в трее после закрытия поиска.`,1)],64)):i.hotkey?.supported?(K(),U(P,{key:2},[G(`Горячая клавиша пока не активна. Сохраните настройки или запустите Projector.`)],64)):(K(),U(P,{key:3},[n[6]||=G(`В этом окружении назначьте системный хоткей на команду `,-1),n[7]||=I(`code`,null,`projector toggle`,-1),n[8]||=G(`.`,-1)],64)):(K(),U(P,{key:0},[G(`Горячая клавиша выключена.`)],64))]),_:1}),y(i.UiInline,{class:`actions`,align:`stretch`,wrap:``},{default:e(()=>[y(i.UiButton,{appearance:`solid`,disabled:!i.ready||i.busy||i.saved===i.mode&&i.savedShortcut===i.shortcut,onClick:i.save},{default:e(()=>[...n[9]||=[G(` Сохранить `,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{disabled:!i.ready||i.busy,onClick:i.open},{default:e(()=>[...n[10]||=[G(`Открыть выбранный режим`,-1)]]),_:1},8,[`disabled`])]),_:1}),I(`details`,null,[n[12]||=I(`summary`,null,`Системный хоткей и трей`,-1),y(i.UiHint,{class:`hint`},{default:e(()=>[...n[11]||=[G(` Сочетание регистрируется в KDE или Windows; занятые клавиши не перехватываются. Клик по иконке в трее открывает поиск, меню даёт доступ к настройкам, перезапуску и выходу. `,-1)]]),_:1})]),i.error||i.status?(K(),F(i.UiMessage,{key:0,role:`status`,tone:i.error?`danger`:void 0},{default:e(()=>[G(X(i.error||i.status),1)]),_:1},8,[`tone`])):D(`v-if`,!0),y(i.UiHeading,{as:`h2`,size:`sm`,"space-before":4},{default:e(()=>[...n[13]||=[G(`Оформление`,-1)]]),_:1}),y(i.UiLabel,{for:i.appearanceId,"space-after":2},{default:e(()=>[...n[14]||=[G(`Цветовая схема`,-1)]]),_:1},8,[`for`]),y(i.UiControl,{as:`select`,id:i.appearanceId,modelValue:i.appearance,"onUpdate:modelValue":n[2]||=e=>i.appearance=e,disabled:i.appearanceBusy,onChange:i.saveAppearance},{default:e(()=>[(K(!0),U(P,null,S(i.appearanceOptions,e=>(K(),U(`option`,{key:e.id,value:e.id},X(e.title),9,Aee))),128))]),_:1},8,[`id`,`modelValue`,`disabled`]),y(i.UiHint,{class:`hint`},{default:e(()=>[G(X(i.appearanceDescription)+` Схема применяется сразу и сохраняется.`,1)]),_:1}),i.appearanceError||i.appearanceStatus?(K(),F(i.UiMessage,{key:1,role:`status`,tone:i.appearanceError?`danger`:void 0},{default:e(()=>[G(X(i.appearanceError||i.appearanceStatus),1)]),_:1},8,[`tone`])):D(`v-if`,!0)])}var Mee=H(Oee,[[`render`,jee],[`__scopeId`,`data-v-7bbda7dd`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/launcher/InterfaceSettings.vue`]]),Nee=W({__name:`UiActionRow`,props:{tone:{type:String,required:!1},type:{type:String,required:!1},separator:{type:String,required:!1},gap:{type:Number,required:!1},fill:{type:Boolean,required:!1,default:!0},interaction:{type:String,required:!1},padding:{type:String,required:!1},justify:{type:String,required:!1},radius:{type:String,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Pee=[`type`];function Fee(e,t,n,r,i,a){return K(),U(`button`,{class:Y([`action-row`,[n.tone,n.separator,{tight:n.gap===2,intrinsic:!n.fill,selection:n.interaction===`selection`,"item-interaction":n.interaction===`item`}]]),style:Qe({"--action-row-padding":n.padding,"--action-row-gap":n.gap===1.5?`6px`:void 0,justifyContent:n.justify===`between`?`space-between`:void 0,borderRadius:n.radius===`none`?`0`:void 0}),type:n.type??`button`},[c(e.$slots,`default`,{},void 0,!0)],14,Pee)}var wl=H(Nee,[[`render`,Fee],[`__scopeId`,`data-v-f6361ea9`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiActionRow.vue`]]),Iee=W({__name:`LaunchDetailPanel`,props:t({item:{type:Object,required:!0},actions:{type:Array,required:!0},info:{type:Object,required:!1},failure:{type:Object,required:!1},loading:{type:Boolean,required:!0}},{index:{type:Number,required:!0},indexModifiers:{}}),emits:t([`launch`],[`update:index`]),setup(e,{expose:t}){t();let n={index:u(e,`index`),UiActionRow:wl,get launcherStatusTone(){return bl},UiStatusDot:Ze};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Lee=[`aria-label`],Ree={class:`panel-title`},zee={key:0,"aria-hidden":`true`},Bee={key:0,class:`info-card`},Vee={class:`info-path`},Hee={class:`info-state`},Uee={key:0,class:`info-docker`},Wee={class:`name`},Gee={key:0,class:`enter`,"aria-hidden":`true`},Kee={key:1,class:`failure`,role:`alert`},qee={class:`failure-title`},Jee={key:0},Yee={key:1,class:`failure-empty`};function Xee(t,n,r,i,a,o){return K(),U(`div`,{class:`actions-panel`,role:`listbox`,"aria-label":`Действия: ${r.item.name}`},[I(`div`,Ree,[n[0]||=I(`span`,{class:`back`,"aria-hidden":`true`},`←`,-1),G(` `+X(r.item.name)+` `,1),r.loading?(K(),U(`span`,zee,`⋯`)):D(`v-if`,!0)]),r.info?(K(),U(`div`,Bee,[I(`div`,Vee,X(r.info.path),1),I(`div`,Hee,[y(i.UiStatusDot,{class:`status-dot`,size:8,inline:``,shrink:``,tone:i.launcherStatusTone(r.info.state),"aria-hidden":`true`},null,8,[`tone`]),G(X(r.info.stateLabel),1),r.info.command?(K(),U(P,{key:0},[G(` · `+X(r.info.command),1)],64)):D(`v-if`,!0),r.info.url?(K(),U(P,{key:1},[G(` · `+X(r.info.url),1)],64)):D(`v-if`,!0)]),r.info.docker?(K(),U(`div`,Uee,X(r.info.docker),1)):D(`v-if`,!0)])):D(`v-if`,!0),(K(!0),U(P,null,S(r.actions,(n,r)=>(K(),F(i.UiActionRow,{interaction:`selection`,padding:`var(--sp-3)`,justify:`between`,key:`${n.id}:${n.arg??``}`,role:`option`,class:Y([`result`,{selected:r===i.index}]),"aria-selected":r===i.index,tabindex:`-1`,onMousemove:e=>i.index=r,onClick:e=>t.$emit(`launch`,n)},{default:e(()=>[I(`span`,Wee,X(n.title),1),r===i.index?(K(),U(`span`,Gee,`↵`)):D(`v-if`,!0)]),_:2},1032,[`class`,`aria-selected`,`onMousemove`,`onClick`]))),128)),r.failure?(K(),U(`div`,Kee,[I(`div`,qee,[G(` «`+X(r.failure.command)+`» завершилась с ошибкой`,1),r.failure.exitCode===null?D(`v-if`,!0):(K(),U(P,{key:0},[G(` (код `+X(r.failure.exitCode)+`)`,1)],64))]),r.failure.output?(K(),U(`pre`,Jee,X(r.failure.output),1)):(K(),U(`div`,Yee,`Вывод терминала пуст.`))])):D(`v-if`,!0)],8,Lee)}var Zee=H(Iee,[[`render`,Xee],[`__scopeId`,`data-v-35032017`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/launcher/LaunchDetailPanel.vue`]]),Qee=W({__name:`FavoriteFolders`,setup(e,{expose:t}){t();let n=M([]),r=M(``),i=M(``),a=M(``),{busy:o,error:s,status:c,run:l}=Me();async function u(e,t=`GET`,n){let r={method:t};n&&(r.headers={"Content-Type":`application/json`},r.body=JSON.stringify(n));let i=await fetch(e,r),a=await i.json();if(!i.ok)throw Error(a.error);return a}async function d(){n.value=(await u(`/api/launcher/folders`)).folders,i.value||=n.value[0]??``}f(()=>l(d));async function p(e){let t=await u(`/api/launcher/folders`,`POST`,{path:e});return n.value=t.folders,i.value||=t.folders[0]??``,r.value=``,`Папка добавлена в избранные`}async function m(e){return n.value=(await u(`/api/launcher/folders`,`DELETE`,{path:e})).folders,i.value===e&&(i.value=n.value[0]??``),`Папка убрана из избранных`}async function h(e,t){let n=await u(`/api/launcher/folders/create`,`POST`,{folder:e,name:t});return a.value=``,window.location.assign(n.route),`Проект создан`}let g=Je(`favorite-folders`,()=>({surface:`favorite-folders`}));g.scope.registerCommand({id:`ide.folders.favorite.add`,title:`Добавить избранную папку`,description:`Делает папку избранной: её проекты идут в списке запуска первыми, в ней ищутся ещё не открытые папки, и в ней можно создавать новые проекты.`,arguments:{path:`абсолютный путь или ~/…`},enabled:()=>!o.value,run:e=>l(()=>p(String(J(e).path??r.value)))}),g.scope.registerCommand({id:`ide.folders.favorite.remove`,title:`Убрать избранную папку`,description:`Убирает папку из избранных; сама папка и её проекты не удаляются.`,arguments:{path:`путь избранной папки`},enabled:()=>!o.value&&n.value.length>0,run:e=>l(()=>m(String(J(e).path??``)))}),g.scope.registerCommand({id:`ide.folders.project.create`,title:`Создать проект в избранной папке`,description:`Создаёт новую пустую папку проекта внутри избранной папки, добавляет её в каталог и открывает воркспейс. Существующая папка не перезаписывается.`,arguments:{folder:`путь избранной папки`,name:`имя нового проекта`},enabled:()=>!o.value&&n.value.length>0,run:e=>{let t=J(e);return l(()=>h(String(t.folder??i.value),String(t.name??a.value)))}});let _={folders:n,path:r,folder:i,name:a,busy:o,error:s,status:c,run:l,request:u,load:d,add:p,remove:m,create:h,commands:g,UiHeading:Ee,UiControl:Se,UiButton:q,UiHint:we};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),$ee={class:`favorite-folders`},ete={key:0},tte=[`value`];function nte(t,n,r,i,a,o){return K(),U(`section`,$ee,[y(i.UiHeading,{as:`h2`,size:`sm`},{default:e(()=>[...n[5]||=[G(`Избранные папки`,-1)]]),_:1}),y(i.UiHint,{class:`hint`},{default:e(()=>[...n[6]||=[G(`Проекты из этих папок идут в списке запуска первыми, а ещё не открытые папки появляются в разделе «На диске». В поиске наберите `,-1),I(`code`,null,`new/имя`,-1),G(`, чтобы создать проект или открыть уже существующую папку.`,-1)]]),_:1}),i.folders.length?(K(),U(`ul`,ete,[(K(!0),U(P,null,S(i.folders,t=>(K(),U(`li`,{key:t},[I(`code`,null,X(t),1),y(i.UiButton,{disabled:i.busy,onClick:e=>i.run(()=>i.remove(t))},{default:e(()=>[...n[7]||=[G(`Убрать`,-1)]]),_:1},8,[`disabled`,`onClick`])]))),128))])):D(`v-if`,!0),I(`form`,{class:`row`,onSubmit:n[1]||=N(e=>i.run(()=>i.add(i.path)),[`prevent`])},[y(i.UiControl,{grow:``,modelValue:i.path,"onUpdate:modelValue":n[0]||=e=>i.path=e,"aria-label":`Путь к папке`,placeholder:`~/projects`,disabled:i.busy},null,8,[`modelValue`,`disabled`]),y(i.UiButton,{type:`submit`,disabled:i.busy||!i.path.trim()},{default:e(()=>[...n[8]||=[G(`Добавить`,-1)]]),_:1},8,[`disabled`])],32),i.folders.length?(K(),U(`form`,{key:1,class:`row`,onSubmit:n[4]||=N(e=>i.run(()=>i.create(i.folder,i.name)),[`prevent`])},[y(i.UiControl,{grow:``,as:`select`,modelValue:i.folder,"onUpdate:modelValue":n[2]||=e=>i.folder=e,"aria-label":`Папка нового проекта`,disabled:i.busy},{default:e(()=>[(K(!0),U(P,null,S(i.folders,e=>(K(),U(`option`,{key:e,value:e},X(e),9,tte))),128))]),_:1},8,[`modelValue`,`disabled`]),y(i.UiControl,{grow:``,modelValue:i.name,"onUpdate:modelValue":n[3]||=e=>i.name=e,"aria-label":`Имя нового проекта`,placeholder:`новый-проект`,disabled:i.busy},null,8,[`modelValue`,`disabled`]),y(i.UiButton,{type:`submit`,appearance:`solid`,disabled:i.busy||!i.name.trim()},{default:e(()=>[...n[9]||=[G(`Создать проект`,-1)]]),_:1},8,[`disabled`])],32)):D(`v-if`,!0),i.error||i.status?(K(),U(`p`,{key:2,role:`status`,class:Y({error:i.error})},X(i.error||i.status),3)):D(`v-if`,!0)])}var rte=H(Qee,[[`render`,nte],[`__scopeId`,`data-v-dec54b1f`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/launcher/FavoriteFolders.vue`]]);function Tl(e,t,n={}){let r=(e,t,r,i)=>{if(n[e]===void 0)return t;let a=Number(n[e]);if(!/^\d+$/.test(n[e])||!Number.isSafeInteger(a)||a<r||a>i)throw Error(`Неверный параметр ${e}`);return a},i=r(`offset`,0,0,2**53-1),a=r(`limit`,1e3,1,1e3),o=Math.min(e.length,i+a);if(n.reveal&&i===0){let r=e.findIndex(e=>(t?`${t}/`:``)+e.name===n.reveal);r>=0&&(o=Math.min(e.length,Math.max(o,Math.ceil((r+1)/30)*30)))}return{offset:i,end:o,total:e.length,nextOffset:o<e.length?o:null}}var ite=268435456;function El(e,t){let n=(t/1024/1024).toLocaleString(`ru`,{maximumFractionDigits:1});return`Файл ${e.split(`/`).pop()||e} весит ${n} МБ. Редактор может открыть его медленно или подвиснуть. Открыть?`}function Dl(e){return e.slice(0,Math.max(0,e.lastIndexOf(`/`)))}function Ol(e,t){if(!e||t===e||t.startsWith(`${e}/`))return;let n=e.slice(e.lastIndexOf(`/`)+1),r=t?`${t}/${n}`:n;return r===e?void 0:r}function kl(e,t,n){return e===t||e.startsWith(`${t}/`)?n+e.slice(t.length):e}function Al(e){return!!e.trim()&&e!==`!!`}function jl(e){let t=e.index+e.worktree;if(Al(t.replace(/ /g,``)))return t.includes(`U`)||t===`AA`||t===`DD`?`conflict`:t.includes(`?`)||t.includes(`A`)?`added`:t.includes(`D`)?`deleted`:t.includes(`R`)?`renamed`:t.includes(`C`)?`copied`:`modified`}function Ml(e){let t=[];for(let n of e){let e=jl(n);e&&t.push({path:n.path,kind:e,...n.originalPath?{originalPath:n.originalPath}:{}})}return t}function Nl(e){return e===`A`?`added`:e===`D`?`deleted`:e===`R`?`renamed`:e===`C`?`copied`:e===`U`?`conflict`:`modified`}function Pl(e){return e.map(e=>({path:e.path,kind:Nl(e.status),...e.originalPath?{originalPath:e.originalPath}:{},additions:e.additions,deletions:e.deletions,binary:e.binary}))}function Fl(e){if(e!==`unchanged`)return e===`removed`?`deleted`:e===`changed`?`modified`:e}function Il(e){let t=[];for(let n of e){let e=Fl(n.status);e&&t.push({path:n.path,kind:e,...n.previousPath?{originalPath:n.previousPath}:{},additions:n.additions,deletions:n.deletions,...n.binary?{binary:!0}:{},...n.tooLarge?{tooLarge:!0}:{},...n.generated?{generated:!0}:{}})}return t}function Ll(e){let t=new Map,n=(e,n)=>{let r=t.get(e);t.set(e,!r||r===n?n:r===`conflict`||n===`conflict`?`conflict`:`modified`)},r=(e,t)=>{if(!e)return;let r=e.replace(/\/$/,``).split(`/`);for(let e=1;e<=r.length;e++)n(r.slice(0,e).join(`/`),t)},i=e=>e===`added`||e===`deleted`||e===`conflict`?e:`modified`;for(let t of e)r(t.path,i(t.kind)),t.kind===`renamed`&&t.originalPath&&r(t.originalPath,`deleted`);return t}function Rl(e){let t=[],n=()=>{let e=t.indexOf(null);return e===-1?t.length:e};return e.map(e=>{let r=t.flatMap((t,n)=>t===e.hash?[n]:[]),i=r[0]??n(),a=t.flatMap((t,n)=>t!==null&&t!==e.hash?[n]:[]);for(let e of r)t[e]=null;let o=[];for(e.parents.forEach((e,r)=>{let a=t.indexOf(e);if(a!==-1){o.push(a);return}let s=r===0?i:n();t[s]=e,o.push(s)});t.length&&t.at(-1)===null;)t.pop();let s=[i,...a,...r,...o];return{column:i,through:a,joins:r,forks:o,width:Math.max(...s)+1}})}function zl(e,...t){let n=new Map;for(let e of t)for(let t of e??[])n.set(t.id,t);for(let[t,r]of n)r.requires&&!e(r.requires)&&n.delete(t);return{has:e=>n.has(e),get:e=>n.get(e),list:()=>[...n.values()]}}function Bl(e,t){return{has:n=>e.has(n)||t().some(e=>e.id===n),get:n=>t().find(e=>e.id===n)??e.get(n),list:()=>[...e.list(),...t()]}}function Vl(e){let t=new Set(e.map(e=>e.id)),n=[],r=new Map;for(let i of e){if(i.group&&t.has(i.group))continue;let e=[i];n.push(e),r.set(i.id,e)}for(let i of e){if(!i.group||!t.has(i.group))continue;let e=r.get(i.group);if(e)e.push(i);else{let e=[i];n.push(e),r.set(i.id,e)}}return n}var Hl=`gitlab.com`,Ul=`gl:/`,Wl=`Укажите адрес GitLab вида https://gitlab.example.com`,Gl=`Укажите group/project или ссылку на проект GitLab`,Kl=/^[A-Za-z][A-Za-z0-9+.-]*:\/\//,ql=/^[A-Za-z0-9_][A-Za-z0-9_.-]*$/;function Jl(e){if(![`http:`,`https:`].includes(e.protocol)||e.username||e.password||e.search||e.hash||e.pathname!==``&&e.pathname!==`/`)throw Error(Wl);return e.host.toLowerCase()}function Yl(e){let t=e.trim();if(!t)throw Error(Wl);let n;try{n=new URL(Kl.test(t)?t:`http://${t}`)}catch{throw Error(Wl)}return Jl(n)}function Xl(e){let t=e.split(`/`);if(t.length<2||t.some(e=>!e||e===`.`||e===`..`||!ql.test(e)||/\.(git|atom)$/i.test(e)))throw Error(Gl);return t.join(`/`)}function Zl(e,t){if(![`http:`,`https:`].includes(e.protocol)||e.username||e.password)throw Error(Gl);if(t){let n;try{n=Yl(t)}catch{throw Error(Wl)}if(e.host.toLowerCase()!==n)throw Error(`Ссылка ведёт на другой инстанс GitLab. Проверьте адрес`)}return e.pathname}function Ql(e,t){let n=e.trim();if(!n)throw Error(Gl);let r;if(Kl.test(n)){let e;try{e=new URL(n)}catch{throw Error(Gl)}r=Zl(e,t)}else if(n.startsWith(`gl:/`)){let e=n.slice(4),i=e.indexOf(`/`);if(i<0)throw Error(Gl);let a=e.slice(0,i);if(t&&Yl(a)!==Yl(t))throw Error(`Ссылка ведёт на другой инстанс GitLab. Проверьте адрес`);r=e.slice(i+1)}else if(r=n.split(/[?#]/,1)[0]??``,t){let e=Yl(t);r.toLowerCase().startsWith(`${e}/`)&&(r=r.slice(e.length+1))}return Xl(r.replace(/\/-\/.*$/,``).replace(/^\/+|\/+$/g,``).replace(/\.git$/i,``))}function $l(e,t){let n=Yl(e),r=Ql(t,n);return`/gl/projects/${encodeURIComponent(n).replaceAll(`%3A`,`:`)}/${r.split(`/`).map(encodeURIComponent).join(`/`)}`}var eu=`gh:/`,tu=/^[A-Za-z0-9][A-Za-z0-9-]*\/[A-Za-z0-9_.-]+$/;function nu(e){let t=e.trim().replace(/^https:\/\/github\.com\//,``).replace(/\/$/,``).replace(/\.git$/,``);if(!tu.test(t)||[`.`,`..`].includes(t.split(`/`)[1]))throw Error(`Укажите owner/repository`);return t}function ru(e){if(e.startsWith(`gl:/`)){let t=e.slice(Ul.length),n=t.indexOf(`/`);return n<0?{kind:`gitlab`,instance:t,path:``}:{kind:`gitlab`,instance:t.slice(0,n),path:t.slice(n+1)}}return e.startsWith(eu)?{kind:`github`,repository:e.slice(4)}:{kind:`local`,path:e}}function iu(e){return e.kind===`github`?`${eu}${e.repository}`:e.kind===`gitlab`?`${Ul}${e.instance}/${e.path}`:e.path}var au=/^[A-Za-z]:$/,ou=`unc:`;function su(e){return e.startsWith(`/`)||e.startsWith(`\\\\`)||/^[A-Za-z]:[\\/]/.test(e)}function cu(e){return e.startsWith(`\\\\`)||/^[A-Za-z]:(?:[\\/]|$)/.test(e)}function lu(e){if(!cu(e))return e===`/`?[]:e.split(`/`).filter(Boolean);let t=e.replaceAll(`\\`,`/`);return t.startsWith(`//`)?[ou,...t.slice(2).split(`/`).filter(Boolean)]:t.split(`/`).filter(Boolean)}function uu(e){let t=e.flatMap(e=>e.split(`/`)).filter(Boolean),n=t.length===1&&t[0]?.includes(`\\`)?t[0].split(`\\`).filter(Boolean):t;if(t[0]===ou||t.length===1&&t[0]?.startsWith(`\\\\`))return`\\\\${(t[0]===ou?t.slice(1):n).join(`\\`)}`;if(au.test(n[0]??``)){let[e,...t]=n;return t.length?`${e}\\${t.join(`\\`)}`:`${e}\\`}return`/${t.join(`/`)}`}function du(e){let t=lu(e);if(t[0]===ou){let e=t.slice(1);return e.map((t,n)=>({name:t,path:`\\\\${e.slice(0,n+1).join(`\\`)}`}))}if(au.test(t[0]??``)){let[e,...n]=t;return[{name:e,path:`${e}\\`},...n.map((t,r)=>({name:t,path:`${e}\\${n.slice(0,r+1).join(`\\`)}`}))]}return[{name:`/`,path:`/`},...t.map((e,n)=>({name:e,path:`/${t.slice(0,n+1).join(`/`)}`}))]}function fu(e){if(e.kind===`gitlab`){let t=e.path.split(`/`).filter(Boolean),n=`${Ul}${e.instance}`;return[{name:Ul,path:Ul},...e.instance?[{name:e.instance,path:n}]:[],...t.map((e,r)=>({name:e,path:`${n}/${t.slice(0,r+1).join(`/`)}`}))]}if(e.kind===`github`){let t=e.repository.split(`/`).filter(Boolean);return[{name:eu,path:eu},...t.map((e,n)=>({name:e,path:`${eu}${t.slice(0,n+1).join(`/`)}`}))]}return du(e.path)}async function pu(e,t){let n=await fetch(e,{...t,headers:{"Content-Type":`application/json`}}),r=await n.json();if(!n.ok)throw Error(r.error||`Ошибка запроса`);return r}function mu(){return pu(`/api/projects`)}function hu(e){return pu(`/api/projects/resolve`,{method:`POST`,body:JSON.stringify({path:e})})}function gu(e,t){return pu(`/api/projects/${e}/directory`,{method:`POST`,body:JSON.stringify(t)})}function _u(e){return pu(`/api/projects/${e}`)}function vu(e){return pu(`/api/projects/${e}/github`)}function yu(e){return pu(`/api/projects/${e}/gitlab`)}function bu(e){return pu(`/api/projects`,{method:`POST`,body:JSON.stringify(e)})}function xu(e,t){return pu(`/api/projects/${e}`,{method:`PATCH`,body:JSON.stringify(t)})}function Su(e){return pu(`/api/projects/${e}`,{method:`DELETE`})}function Cu(e){return pu(`/api/inspect`,{method:`POST`,body:JSON.stringify({path:e})})}function wu(){return pu(`/api/pick-folder`,{method:`POST`})}function Tu(e){if(e.iconUrl)return We(e.iconUrl);let t=new URLSearchParams({path:e.path,name:e.name,icon:e.icon??``});return We(`/api/projects/${encodeURIComponent(e.id)}/icon?${t}`)}function Eu(e,t,n=``){let r=new URLSearchParams({repository:t,version:`2`});return n&&r.set(`ref`,n),We(`/api/integrations/${e}/browse/icon?${r}`)}async function Du(e,t=!1,n){return ru(e).kind===`local`?pu(`/api/directories?${new URLSearchParams({path:e,complete:String(t)})}`,{signal:n}):{path:e,entries:[],truncated:!1}}function Ou(e){return pu(`/api/inspect/commands`,{method:`POST`,body:JSON.stringify({path:e})})}async function ku(e,t,n){let r=ru(e);return r.kind===`local`?Du(e,t,n):r.kind===`gitlab`?pu(`/api/integrations/gitlab/browse/directories?${new URLSearchParams({path:e,complete:String(t)})}`,{signal:n}):pu(`/api/integrations/github/browse/directories?${new URLSearchParams({path:e,complete:String(t)})}`,{signal:n})}var Au=de({projects:[],loading:!1,error:``});function ju(e){if(!e.environment)return;let t=vt(e.id);t.id=`docker`,t.features={...t.features,docker:!1,externalFiles:!1},an(e.id,t)}function Mu(){let e=B(()=>Au.projects),t=B(()=>Au.loading),n=B(()=>Au.error);async function r(){let e=new Set(Au.projects.map(e=>e.id));Au.loading=!0,Au.error=``;try{let t=await mu();t.projects.forEach(ju),Au.projects=[...t.projects,...Au.projects.filter(n=>!e.has(n.id)&&!t.projects.some(e=>e.id===n.id))]}catch(e){Au.error=e instanceof Error?e.message:`Не удалось загрузить проекты`}finally{Au.loading=!1}}async function i(e){let t=await bu(e);return Au.projects.unshift(t.project),t.project}async function a(e,t){let n=await xu(e,t),r=Au.projects.findIndex(t=>t.id===e);return r!==-1&&(Au.projects[r]=n.project),n.project}async function o(e){await Su(e),Au.projects=Au.projects.filter(t=>t.id!==e)}async function s(e){return Au.projects.find(t=>t.id===e)||(await _u(e)).project}function c(e){let t=Au.projects.find(t=>t.id===e.projectId);t&&(t.runtime=e)}function l(e){ju(e);let t=Au.projects.findIndex(t=>t.id===e.id);t===-1?Au.projects.unshift(e):Au.projects[t]=e}async function u(e){let t=await hu(e);return l(t.project),{project:t.project,missing:t.missing===!0,created:t.created===!0}}async function d(e,t){let n=await gu(e,t);return l(n.project),n.project}return{projects:e,loading:t,error:n,load:r,add:i,save:a,remove:o,getOne:s,inspect:Cu,applyRuntime:c,ingest:l,openPath:u,restoreDirectory:d}}function Nu(e){return{name:e.name,path:e.path,icon:e.icon??``,url:e.url,mode:e.mode,defaultCommandId:e.defaultCommandId,commands:e.commands.map(e=>({...e}))}}function Pu(e,t){return t.filter(t=>!e.some(e=>e.name.trim()===t.name||e.cmd.trim()===t.cmd))}function Fu(e,t){if(!e.name.trim()||!e.cmd.trim())return`У сценария должны быть название и команда запуска`;let n=(e.cwd??``).trim().replace(/\\/g,`/`).replace(/^\.(\/|$)/,``).replace(/\/+$/,``);if(n.startsWith(`/`)||/^[a-zA-Z]:/.test(n)||n.split(`/`).includes(`..`))return`Папка сценария должна лежать внутри проекта`;let r=(e.url??``).trim();if(r)try{if(![`http:`,`https:`].includes(new URL(r).protocol))throw Error()}catch{return`Адрес сценария должен начинаться с http:// или https://`}return(e.mode||t.mode)===`window`&&!(r||t.url.trim())?`Для открытия в окне укажите адрес сценария или проекта`:``}function Iu(e){if(!e.name.trim())return`Укажите название проекта`;if(!e.commands.length)return`Добавьте хотя бы одну команду`;let t=new Set;for(let n of e.commands){let r=Fu(n,e);if(r)return r;let i=n.name.trim();if(t.has(i))return`Сценарий «${i}» уже есть: названия должны различаться`;t.add(i)}if(!e.commands.some(t=>t.id===e.defaultCommandId))return`Выберите команду по умолчанию`;if(e.url.trim())try{let t=new URL(e.url.trim());if(![`http:`,`https:`].includes(t.protocol))throw Error()}catch{return`Адрес приложения должен начинаться с http:// или https://`}return``}function Lu(e,t){let n=e.findIndex(e=>e.id===t);if(n<0)return;let r=e[n],i=new Set(e.map(e=>e.name.trim())),a=`${r.name.trim()||`сценарий`} копия`;for(let e=2;i.has(a);e++)a=`${r.name.trim()} копия ${e}`;let o={...r,id:Mt(),name:a};return e.splice(n+1,0,o),o}function Ru(e){return`/gh/projects/${nu(e).split(`/`).map(encodeURIComponent).join(`/`)}`}function zu(e){return uu(Array.isArray(e)?e:(e??``).split(`/`))}function Bu(e){return(Array.isArray(e)?e:[e??``]).join(`/`)}function Vu(e){let[t=``,...n]=Array.isArray(e)?e:(e??``).split(`/`);return{instance:t,path:n.join(`/`)}}function Hu(e){let t=ru(e);if(t.kind===`github`)return Ru(t.repository);if(t.kind===`gitlab`)return $l(t.instance,t.path);let n=lu(e).map(e=>encodeURIComponent(e).replaceAll(`%3A`,`:`));return`/projects/${n.length?n.join(`/`):`%2F`}`}function Uu(e){let t=e.trim();if(!t)return null;try{let e=new URL(t);return[`http:`,`https:`].includes(e.protocol)?{instance:Yl(e.origin),prefix:e.pathname.replace(/^\/+|\/+$/g,``)}:null}catch{try{return{instance:Yl(t),prefix:``}}catch{return null}}}function Wu(e,t){if(!e)return!1;if(e===`gitlab.com`||e===t?.instance)return!0;if(!/[.:]/.test(e))return!1;try{return Yl(e),!0}catch{return!1}}function Gu(e,t,n){return!n||n.instance!==t||!n.prefix?e:e.startsWith(`${n.prefix}/`)?e.slice(n.prefix.length+1):e}function Ku(e,t,n){let r=e.indexOf(`/`);if(r<1)throw Error(`Укажите group/project или ссылку на проект GitLab`);let i=Yl(e.slice(0,r)),a=Ql(e.slice(r+1),i);return n&&(a=Gu(a,i,t)),$l(i,a)}function qu(e,t=``){let n=e.trim();if(!n)throw Error(`Укажите group/project или ссылку на проект GitLab`);let r=Uu(t);if(n.startsWith(`gl:/`))return Ku(n.slice(Ul.length).replace(/\/+$/,``),r,!1);if(/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(n)){let e;try{e=new URL(n)}catch{throw Error(`Укажите group/project или ссылку на проект GitLab`)}let t=Yl(e.origin);return $l(t,Gu(Ql(n,t),t,r))}if(Wu(n.split(`/`,1)[0]??``,r))return Ku(n,r,!1);let i=r?.instance||`gitlab.com`;return $l(i,Ql(n,i))}var Ju=W({__name:`UiSkeleton`,props:{width:{type:String,required:!1},height:{type:String,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function Yu(e,t,n,r,i,a){return K(),U(`span`,{class:`ui-skeleton`,style:Qe({width:n.width??`100%`,height:n.height??`12px`}),"aria-hidden":`true`},null,4)}var Xu=H(Ju,[[`render`,Yu],[`__scopeId`,`data-v-17f4e949`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiSkeleton.vue`]]),Zu=W({__name:`ProjectOpening`,setup(e,{expose:t}){t();let n={rows:[`62%`,`48%`,`70%`,`54%`,`66%`,`44%`,`58%`],UiSkeleton:Xu,UiSpinner:De};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Qu={class:`opening`,role:`status`,"aria-live":`polite`},$u={class:`rail`},ed={class:`side`},td={class:`label`};function nd(e,t,n,r,i,a){return K(),U(`section`,Qu,[I(`div`,$u,[(K(),U(P,null,S(6,e=>y(r.UiSkeleton,{key:e,width:`18px`,height:`18px`})),64))]),I(`div`,ed,[(K(),U(P,null,S(r.rows,e=>y(r.UiSkeleton,{key:e,width:e,height:`10px`},null,8,[`width`])),64))]),t[1]||=I(`div`,{class:`editor`},null,-1),t[2]||=I(`div`,{class:`terminal`},null,-1),I(`p`,td,[y(r.UiSpinner),t[0]||=G(` Открываю проект…`,-1)])])}var rd=H(Zu,[[`render`,nd],[`__scopeId`,`data-v-3392f3d1`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/project/ui/ProjectOpening.vue`]]),id=[`launcher-show`,`status`,`file-changed`,`dir-changed`,`watch-error`,`terminal-started`,`agent`,`secret-show`,`ide-command-request`,`ide-command-cancel`],ad=Symbol.for(`projector.page-events`),od=globalThis;function sd(e,t){let n=new EventSource(We(`/api/events?client=${e}`));for(let e of id)n.addEventListener(e,n=>t(e,n.data));n.addEventListener(`open`,()=>t(`open`,``))}var cd=typeof SharedWorker<`u`&&new URLSearchParams(location.search).get(`eventsTransport`)!==`legacy`;function ld(e,t){let n=od[ad];if(n){n.handler=t;return}let r=od[ad]={handler:t};ud(e,(e,t)=>r.handler(e,t))}function ud(e,t){if(!cd)return sd(e,t);let n=!1,r=!1,i=()=>{r||(r=!0,a.port.close(),sd(e,t))},a;try{a=new SharedWorker(new URL(`/assets/events.worker-C2Opu9Sc.js`,``+import.meta.url),{type:`module`,name:`projector-events-v1`+Pe()})}catch{return sd(e,t)}let o=setTimeout(()=>n||i(),8e3);a.onerror=()=>{clearTimeout(o),i()},a.port.onmessage=i=>{if(r)return;let s=i.data;s.type===`ready`?(n=!0,clearTimeout(o),a.port.postMessage({type:`join`,page:e,apiPrefix:Pe()})):s.type===`ping`?a.port.postMessage({type:`pong`}):s.type===`event`&&t(s.name,s.data)},a.port.start(),globalThis.addEventListener(`pagehide`,()=>a.port.postMessage({type:`leave`})),globalThis.addEventListener(`pageshow`,t=>{t.persisted&&!r&&a.port.postMessage({type:`join`,page:e,apiPrefix:Pe()})})}async function dd(e,t){let n=await fetch(e,{...t,headers:{"Content-Type":`application/json`}}),r=await n.json();if(!n.ok)throw Error(r.error||`Ошибка запроса`);return r}function fd(e,t,n){return dd(`/api/projects/${e}/start`,{method:`POST`,body:JSON.stringify({commandId:t,mode:n})})}function pd(e){return dd(`/api/projects/${e}/stop`,{method:`POST`})}function md(e,t){return dd(`/api/projects/${e}/open`,{method:`POST`,body:JSON.stringify({mode:t})})}var hd=de({error:``}),gd=!1;function _d(){let e=Mu(),t=B(()=>hd.error);function n(t){e.applyRuntime(t)}function r(){gd||(gd=!0,ld(on,(e,t)=>{e===`launcher-show`?window.dispatchEvent(new Event(`projector:show`)):e===`status`?n(JSON.parse(t)):e===`open`?window.dispatchEvent(new Event(`projector:events-open`)):window.dispatchEvent(new CustomEvent(`projector:${e}`,{detail:JSON.parse(t)}))}))}async function i(e,t,r){hd.error=``;try{n((await fd(e,t,r)).runtime)}catch(e){hd.error=e instanceof Error?e.message:`Не удалось запустить`}}async function a(e){hd.error=``;try{n((await pd(e)).runtime)}catch(e){hd.error=e instanceof Error?e.message:`Не удалось остановить`}}async function o(e,t){hd.error=``;try{await md(e,t)}catch(e){hd.error=e instanceof Error?e.message:`Не удалось открыть`}}return{error:t,connect:r,start:i,stop:a,open:o}}var vd={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function yd(e,t){return K(),U(`svg`,vd,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m6 9l6 6l6-6`},null,-1)]])}var bd=L({name:`lucide-chevron-down`,render:yd}),xd=W({__name:`UiIslandHeader`,props:{anchor:{type:String,required:!1},chevron:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n={get IconChevron(){return bd}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function Sd(e,t,n,r,i,a){return K(),U(`button`,{type:`button`,class:Y([`island-header`,n.anchor??`end`])},[c(e.$slots,`default`),n.chevron?(K(),F(r.IconChevron,{key:0,class:`island-chevron`,"aria-hidden":`true`})):D(`v-if`,!0)],2)}var Cd=H(xd,[[`render`,Sd],[`__scopeId`,`data-v-17392628`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiIslandHeader.vue`]]),wd=W({__name:`UiStack`,props:{as:{type:String,required:!1},gap:{type:[String,Number],required:!1},flow:{type:String,required:!1},align:{type:String,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function Td(t,n,r,i,a,o){return K(),F(C(r.as??`div`),{class:Y([`ui-stack`,{flex:r.flow===`flex`}]),style:Qe({"--stack-gap":r.gap===`none`?`normal`:`var(--sp-${r.gap??3})`,justifyItems:r.flow===`flex`?void 0:r.align,alignItems:r.flow===`flex`?r.align:void 0})},{default:e(()=>[c(t.$slots,`default`,{},void 0,!0)]),_:3},8,[`class`,`style`])}var Ed=H(wd,[[`render`,Td],[`__scopeId`,`data-v-4087f939`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiStack.vue`]]),Dd=W({__name:`UiBadge`,props:{tone:{type:String,required:!1},mono:{type:Boolean,required:!1},shrink:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function Od(e,t,n,r,i,a){return K(),U(`span`,{class:Y([`ui-badge`,[n.tone??`neutral`,{mono:n.mono}]]),style:Qe({flexShrink:+!!n.shrink})},[c(e.$slots,`default`,{},void 0,!0)],6)}var kd=H(Dd,[[`render`,Od],[`__scopeId`,`data-v-73c2ef89`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiBadge.vue`]]),Ad=W({__name:`UiActionCopy`,props:{title:{type:String,required:!0},grow:{type:Boolean,required:!1,default:!0},description:{type:String,required:!1},descriptionMode:{type:String,required:!1},descriptionTone:{type:String,required:!1},mono:{type:Boolean,required:!1},emphasized:{type:Boolean,required:!1},truncateTitle:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function jd(e,t,n,r,i,a){return K(),U(`span`,{class:Y([`copy`,{intrinsic:!n.grow}])},[I(`span`,{class:Y([`name`,{emphasized:n.emphasized,"u-truncate":n.truncateTitle}])},X(n.title),3),n.description?(K(),U(`span`,{key:0,class:Y([`caption`,[n.descriptionMode===`wrap`?`wrap`:`u-truncate`,{secondary:n.descriptionTone===`secondary`,mono:n.mono}]])},X(n.description),3)):D(`v-if`,!0)],2)}var Md=H(Ad,[[`render`,jd],[`__scopeId`,`data-v-36223171`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiActionCopy.vue`]]),Nd=W({__name:`UiPopupSurface`,props:{as:{type:String,required:!1},border:{type:String,required:!1},radius:{type:String,required:!1},flow:{type:String,required:!1},surface:{type:String,required:!1}},setup(e,{expose:t}){let n=ee();t({get element(){return n.value??void 0}});let r={element:n};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function Pd(t,n,r,i,a,o){return K(),F(C(r.as??`div`),{ref:`element`,class:Y([`popup-surface`,{column:r.flow===`column`}]),style:Qe({"--popup-border":r.border===`line`?`var(--line)`:`var(--line-strong)`,"--popup-background":r.surface===`tertiary`?`var(--bg-3)`:`var(--bg-2)`,"--popup-radius":r.radius===`md`?`var(--r-md)`:`var(--r-lg)`})},{default:e(()=>[c(t.$slots,`default`,{},void 0,!0)]),_:3},8,[`class`,`style`])}var Fd=H(Nd,[[`render`,Pd],[`__scopeId`,`data-v-3c264b5a`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiPopupSurface.vue`]]),Id=()=>typeof window<`u`&&window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches===!0,Ld=()=>({claimed:!1,delta:0,dx:0,dy:0,velocity:0});function Rd(e){let t=e.slop??8,n=e.dominance??1.15,r=e.hold??700,i,a=!1,o=!1,s,c=0,l=0,u=()=>{i=void 0,a=!1,o=!1,s=void 0,c=0,l=0},d=(t,n)=>({claimed:a,delta:e.axis===`x`?t:n,dx:t,dy:n,velocity:l});function f(e){u(),i=e,s=e}function p(u){let f=i;if(!f||o)return Ld();let p=u.x-f.x,m=u.y-f.y;if(!a){if(Math.max(Math.abs(p),Math.abs(m))<t)return Ld();if(u.time-f.time>r)return o=!0,Ld();let i=e.axis===`x`?Math.abs(p):Math.abs(m),h=e.axis===`x`?Math.abs(m):Math.abs(p);return i>=t&&i>h*n?(a=!0,c=e.axis===`x`?p:m,l=c/Math.max(u.time-f.time,1),s=u,d(p,m)):(h>=t&&h>=i*n&&(o=!0),Ld())}let h=e.axis===`x`?p:m,g=Math.max(u.time-(s?.time??f.time),1);return l=.6*((h-c)/g)+.4*l,c=h,s=u,d(p,m)}function m(e){e&&a&&p(e);let t=i,n=t?(s?.x??t.x)-t.x:0,r=t?(s?.y??t.y)-t.y:0,o=d(n,r);return u(),o}function h(){u()}return{begin:f,move:p,end:m,cancel:h}}function zd(e,t,n,r=.45){let i=Math.sign(e);return i?Math.abs(e)>=n||Math.abs(e)>=24&&Math.abs(t)>=r&&Math.sign(t)===i:!1}function Bd(e){return e instanceof Element&&!!e.closest(`input, textarea, select, option, [contenteditable]:not([contenteditable='false']), [role='textbox'], [role='slider'], [data-swipe-ignore]`)}function Vd(e,t){let n=getComputedStyle(e),r=t===`x`?n.overflowX:n.overflowY;return[`auto`,`scroll`,`overlay`].includes(r)?t===`x`?e.scrollWidth-e.clientWidth>1:e.scrollHeight-e.clientHeight>1:!1}function Hd(e,t,n,r){if(!(e instanceof Element)||!n)return!1;let i=e;for(;i;){if(Vd(i,t)){if(t===`x`){let e=i.scrollWidth-i.clientWidth;if(n<0?i.scrollLeft<e-1:i.scrollLeft>1)return!0}else{let e=i.scrollHeight-i.clientHeight;if(n>0?i.scrollTop>1:i.scrollTop<e-1)return!0}}if(i===r)break;i=i.parentElement}return!1}function Ud(e,t){let n=Rd(t),r=!1,i=!1,a=!1,o=(e,t)=>({x:e.clientX,y:e.clientY,time:t}),s=(e,n)=>({axis:t.axis,delta:e.delta,dx:e.dx,dy:e.dy,velocity:e.velocity,event:n}),c=(e=!1)=>{let a=i;r=!1,i=!1,n.cancel(),e&&a&&t.onCancel?.()},l=e=>{if(!a&&(t.enabled?.()??!0)){if(e.touches.length!==1)return c(!0);if(t.ignoreTarget?.(e.target)||Bd(e.target))return c();n.begin(o(e.touches[0],e.timeStamp)),r=!0,i=!1}},u=e=>{if(a||!r)return;if(e.touches.length!==1||!(t.enabled?.()??!0)||!e.cancelable)return c(!0);let l=n.move(o(e.touches[0],e.timeStamp));if(l.claimed){if(!i){if(t.canStart&&!t.canStart(e,l))return c();i=!0,t.onStart?.(s(l,e))}e.preventDefault(),t.onMove?.(s(l,e))}},d=e=>{if(!r)return;if(r=!1,!i){n.end();return}i=!1,e.cancelable&&e.preventDefault();let a=e.changedTouches[0],c=n.end(a?o(a,e.timeStamp):void 0);t.onEnd?.(s(c,e))},f=()=>c(!0);return e.addEventListener(`touchstart`,l,{passive:!0}),e.addEventListener(`touchmove`,u,{passive:!1}),e.addEventListener(`touchend`,d,{passive:!1}),e.addEventListener(`touchcancel`,f,{passive:!0}),()=>{a=!0,c(),e.removeEventListener(`touchstart`,l),e.removeEventListener(`touchmove`,u),e.removeEventListener(`touchend`,d),e.removeEventListener(`touchcancel`,f)}}var Wd=`cubic-bezier(.2, .8, .2, 1)`;function Gd(e){let t=M(!1),n,r,i=0;function a(e){r?.cancel(),r=void 0,e.style.transform=``,e.style.removeProperty(`--sheet-scrim`),e.style.transition=``,e.style.willChange=``,t.value=!1,i=0}function o(e,t,n){if(Id()||typeof e.animate!=`function`)return n();r?.cancel();let a=e.animate([{transform:`translate3d(0, ${i}px, 0)`},{transform:t}],{duration:180,easing:Wd});r=a,a.onfinish=()=>{r===a&&(r=void 0,n())}}function s(e){o(e,`translate3d(0, 0, 0)`,()=>a(e))}function c(t){o(t,`translate3d(0, 100%, 0)`,()=>{e.close(),a(t)})}function l(e){r?.cancel(),r=void 0,e.style.animation=`none`,e.style.transition=`none`,e.style.willChange=`transform`,t.value=!0}function u(e,t){i=Math.max(0,t.delta),e.style.transform=`translate3d(0, ${i}px, 0)`;let n=.6*(1-Math.min(i/320,1));e.style.setProperty(`--sheet-scrim`,`rgb(0 0 0 / ${n.toFixed(3)})`)}function d(e){t.value=!1;let n=e.getBoundingClientRect().height||0,r=Math.max(56,Math.min(n*.28,120));i>=r?c(e):s(e)}function f(){n?.(),n=void 0;let t=e.element.value;!t||!e.enabled.value?t&&a(t):n=Ud(t,{axis:`y`,enabled:()=>e.enabled.value,ignoreTarget:Bd,canStart:(e,n)=>n.delta>0&&!Hd(e.target,`y`,1,t),onStart:()=>l(t),onMove:e=>u(t,e),onEnd:()=>d(t),onCancel:()=>s(t)})}return E([e.element,e.enabled],f,{flush:`post`}),g(()=>{n?.(),n=void 0,e.element.value&&a(e.element.value)}),{dragging:t}}var Kd=W({__name:`UiIsland`,props:{menu:{type:null,required:!0},label:{type:String,required:!0},width:{type:Number,required:!1},gap:{type:String,required:!1},passive:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n=e;function r(e){n.menu.island.value=e?.element}let i={props:n,bindIsland:r,sheet:Gd({element:n.menu.island,enabled:B(()=>n.menu.compact.value&&!n.passive),close:()=>n.menu.close()}),UiPopupSurface:Fd};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),qd={key:0,class:`sheet-grabber`,"aria-hidden":`true`};function Jd(t,n,r,i,a,o){return K(),F(fe,{to:`body`},[r.menu.open.value?(K(),F(i.UiPopupSurface,{key:0,as:`section`,border:`strong`,radius:`lg`,flow:`column`,id:r.menu.id,ref:i.bindIsland,class:Y([`island`,{"mobile-sheet":r.menu.compact.value,"sheet-dragging":i.sheet.dragging.value,passive:r.passive}]),role:`dialog`,"aria-label":r.label,style:Qe({...r.menu.style.value,"--island-width":`${r.width??340}px`,"--island-content-gap":r.gap??`var(--sp-1)`}),onKeydown:r.menu.keydown,onFocusin:r.menu.trackFocus},{default:e(()=>[r.menu.compact.value&&!r.passive?(K(),U(`span`,qd)):D(`v-if`,!0),c(t.$slots,`default`,{},void 0,!0)]),_:3},8,[`id`,`aria-label`,`class`,`style`,`onKeydown`,`onFocusin`])):D(`v-if`,!0)])}var Yd=H(Kd,[[`render`,Jd],[`__scopeId`,`data-v-f2890ee2`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiIsland.vue`]]);function Xd(e,t){return le()?(k(e,t),!0):!1}var Zd=new WeakMap,Qd=(...e)=>{let t=e[0],n=b()?.proxy??le();if(n==null&&!h())throw Error(`injectLocal must be called in setup`);return n&&Zd.has(n)&&t in Zd.get(n)?Zd.get(n)[t]:z(...e)},$d=typeof window<`u`&&typeof document<`u`;typeof WorkerGlobalScope<`u`&&globalThis instanceof WorkerGlobalScope;var ef=e=>e!=null,tf=Object.prototype.toString,nf=e=>tf.call(e)===`[object Object]`,rf=()=>{},af=of();function of(){var e,t;return $d&&!!((e=window)!=null&&(e=e.navigator)!=null&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)==null||(t=t.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window?.navigator.userAgent))}function sf(e,t){function n(...n){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(r).catch(i)})}return`cancel`in e&&Object.assign(n,{cancel:e.cancel,flush:e.flush,isPending:e.isPending}),n}function cf(e,t={}){let n,r,i=rf,a=rf,o=ee(!1),s=e=>{clearTimeout(e),i(),i=rf},c;return Object.assign(l=>{let u=pe(e),d=pe(t.maxWait);return n&&s(n),u<=0||d!==void 0&&d<=0?(r&&=(s(r),void 0),o.value=!1,Promise.resolve(l())):(o.value=!0,new Promise((e,f)=>{i=t.rejectOnCancel?f:e,a=e,c=l,d&&!r&&(r=setTimeout(()=>{n&&s(n),r=void 0,o.value=!1,e(c())},d)),n=setTimeout(()=>{r&&s(r),r=void 0,o.value=!1,e(l())},u)}))},{cancel:()=>{n&&=(s(n),void 0),r&&=(s(r),void 0),o.value=!1,a=rf},flush:()=>{if(o.value){n&&=(clearTimeout(n),void 0),r&&=(clearTimeout(r),void 0),o.value=!1;let e=a;i=rf,a=rf,e(c())}},isPending:be(o)})}function lf(e){return e.endsWith(`rem`)?Number.parseFloat(e)*16:Number.parseFloat(e)}function uf(e){return Array.isArray(e)?e:[e]}function df(e){return e||b()}function ff(e,t=200,n={}){return sf(cf(t,n),e)}function pf(e,t=!0,n){df(n)?f(e,n):t?e():p(e)}function mf(e,t=1e3,n={}){let{immediate:r=!0,immediateCallback:i=!1}=n,a=null,o=ee(!1);function s(){a&&=(clearInterval(a),null)}function c(){o.value=!1,s()}function l(){let n=pe(t);n<=0||(o.value=!0,i&&e(),s(),o.value&&(a=setInterval(e,n)))}return r&&$d&&l(),(he(t)||typeof t==`function`)&&Xd(E(t,()=>{o.value&&$d&&l()})),Xd(c),{isActive:be(o),pause:c,resume:l}}function hf(e,t,n){return E(e,t,{...n,immediate:!0})}function gf(e,t,n){return E(e,t,{...n,once:!0})}var _f=$d?window:void 0;$d&&window.document,$d&&window.navigator,$d&&window.location;function vf(e){let t=pe(e);return t?.$el??t}function yf(...e){let t=(e,t,n,r)=>(e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)),n=B(()=>{let t=uf(pe(e[0])).filter(e=>e!=null);return t.every(e=>typeof e!=`string`)?t:void 0});return hf(()=>[n.value?.map(e=>vf(e))??[_f].filter(e=>e!=null),uf(pe(n.value?e[1]:e[0])),uf(re(n.value?e[2]:e[1])),pe(n.value?e[3]:e[2])],([e,n,r,i],a,o)=>{if(!e?.length||!n?.length||!r?.length)return;let s=nf(i)?{...i}:i,c=e.flatMap(e=>n.flatMap(n=>r.map(r=>t(e,n,r,s))));o(()=>{c.forEach(e=>e())})},{flush:`post`})}var bf=!1;function xf(e,t,n={}){let{window:r=_f,ignore:i=[],capture:a=!0,detectIframe:o=!1,controls:s=!1}=n;if(!r)return s?{stop:rf,cancel:rf,trigger:rf}:rf;if(af&&!bf){bf=!0;let e={passive:!0};Array.from(r.document.body.children).forEach(t=>t.addEventListener(`click`,rf,e)),r.document.documentElement.addEventListener(`click`,rf,e)}let c=!0,l=e=>pe(i).some(t=>{if(typeof t==`string`)return Array.from(r.document.querySelectorAll(t)).some(t=>t===e.target||e.composedPath().includes(t));{let n=vf(t);return n&&(e.target===n||e.composedPath().includes(n))}});function u(e){let t=pe(e);return t&&t.$.subTree.shapeFlag===16}function d(e,t){let n=pe(e),r=n.$.subTree&&n.$.subTree.children;return r==null||!Array.isArray(r)?!1:r.some(e=>e.el===t.target||t.composedPath().includes(e.el))}let f=n=>{let r=vf(e);n.target!=null&&(!(r instanceof Element)&&u(e)&&d(e,n)||r&&r!==n.target&&!n.composedPath().includes(r)&&(`detail`in n&&n.detail===0&&(c=!l(n)),c?t(n):c=!0))},p=!1,m=[yf(r,`click`,e=>{p||(p=!0,setTimeout(()=>{p=!1},0),f(e))},{passive:!0,capture:a}),yf(r,`pointerdown`,t=>{let n=vf(e);c=!l(t)&&!(!n||t.composedPath().includes(n))},{passive:!0}),o&&yf(r,`blur`,n=>{setTimeout(()=>{let i=vf(e),a=r.document.activeElement;for(;a?.shadowRoot;)a=a.shadowRoot.activeElement;a?.tagName===`IFRAME`&&!i?.contains(r.document.activeElement)&&t(n)},0)},{passive:!0})].filter(Boolean),h=()=>m.forEach(e=>e());return s?{stop:h,cancel:()=>{c=!1},trigger:e=>{c=!0,f(e),c=!1}}:h}function Sf(){let e=ee(!1),t=b();return t&&f(()=>{e.value=!0},t),e}function Cf(e){let t=Sf();return B(()=>(t.value,!!e()))}function wf(e,t={}){let{immediate:n=!0,fpsLimit:r=null,window:i=_f,once:a=!1}=t,o=ee(!1),s=B(()=>{let e=pe(r);return e?1e3/e:null}),c=0,l=null;function u(t){if(!o.value||!i)return;c||=t;let n=t-c;s.value&&n<s.value?l=i.requestAnimationFrame(u):(c=t,e({delta:n,timestamp:t}),a?(o.value=!1,l=null):l=i.requestAnimationFrame(u))}function d(){!o.value&&i&&(o.value=!0,c=0,l=i.requestAnimationFrame(u))}function f(){o.value=!1,l!=null&&i&&(i.cancelAnimationFrame(l),l=null)}return n&&d(),Xd(f),{isActive:be(o),pause:f,resume:d}}var Tf=Symbol(`vueuse-ssr-width`);function Ef(){let e=h()?Qd(Tf,null):null;return typeof e==`number`?e:void 0}function Df(e,t={}){let{window:n=_f,ssrWidth:r=Ef()}=t,i=Cf(()=>n&&`matchMedia`in n&&typeof n.matchMedia==`function`),a=ee(typeof r==`number`),o=ee(),s=ee(!1);return _(()=>{if(a.value){a.value=!i.value;let t=pe(e).split(`,`);s.value=t.some(e=>{let t=e.includes(`not all`),n=e.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),i=e.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),a=!!(n||i);return n&&a&&(a=r>=lf(n[1])),i&&a&&(a=r<=lf(i[1])),t?!a:a})}else i.value&&(o.value=n.matchMedia(pe(e)),s.value=o.value.matches)}),yf(o,`change`,e=>{s.value=e.matches},{passive:!0}),B(()=>s.value)}function Of(e,t,n={}){let{window:r=_f,...i}=n,a,o=Cf(()=>r&&`ResizeObserver`in r),s=()=>{a&&=(a.disconnect(),void 0)},c=B(()=>{let t=pe(e);return Array.isArray(t)?t.map(e=>vf(e)):[vf(t)]}),l=E(c,e=>{if(s(),o.value&&r){a=new ResizeObserver(t);for(let t of e)t instanceof Element&&a.observe(t,i)}},{immediate:!0,flush:`post`}),u=()=>{s(),l()};return Xd(u),{isSupported:o,stop:u}}function kf(e,t={width:0,height:0},n={}){let{window:r=_f,box:i=`content-box`}=n,a=B(()=>{var t;return(t=vf(e))==null||(t=t.namespaceURI)==null?void 0:t.includes(`svg`)}),o=ee(t.width),s=ee(t.height),{stop:c}=Of(e,([t])=>{let n=i===`border-box`?t.borderBoxSize:i===`content-box`?t.contentBoxSize:t.devicePixelContentBoxSize;if(r&&a.value){let t=vf(e);if(t){let e=t.getBoundingClientRect();o.value=e.width,s.value=e.height}}else if(n){let e=uf(n);o.value=e.reduce((e,{inlineSize:t})=>e+t,0),s.value=e.reduce((e,{blockSize:t})=>e+t,0)}else o.value=t.contentRect.width,s.value=t.contentRect.height},n);pf(()=>{let n=vf(e);if(n&&`offsetWidth`in n){if(i===`content-box`&&r){let e=r.getComputedStyle(n),t=Number.parseFloat(e.paddingLeft)+Number.parseFloat(e.paddingRight),i=Number.parseFloat(e.paddingTop)+Number.parseFloat(e.paddingBottom),a=Number.parseFloat(e.borderLeftWidth)+Number.parseFloat(e.borderRightWidth),c=Number.parseFloat(e.borderTopWidth)+Number.parseFloat(e.borderBottomWidth);o.value=n.offsetWidth-t-a,s.value=n.offsetHeight-i-c}else o.value=n.offsetWidth,s.value=n.offsetHeight}else n&&(o.value=t.width,s.value=t.height)});let l=E(()=>vf(e),e=>{o.value=e?t.width:0,s.value=e?t.height:0});function u(){c(),l()}return{width:o,height:s,stop:u}}function Af(e,t,n={}){let{root:r,rootMargin:i,threshold:a=0,window:o=_f,immediate:s=!0}=n,c=Cf(()=>o&&`IntersectionObserver`in o),l=B(()=>uf(pe(e)).map(vf).filter(ef)),u=rf,d=ee(s),f=c.value?E(()=>[l.value,vf(r),pe(i),d.value],([e,n,r])=>{if(u(),!d.value||!e.length)return;let i=new IntersectionObserver(t,{root:vf(n),rootMargin:r,threshold:a});e.forEach(e=>e&&i.observe(e)),u=()=>{i.disconnect(),u=rf}},{immediate:s,flush:`post`}):rf,p=()=>{u(),f(),d.value=!1};return Xd(p),{isSupported:c,isActive:d,pause(){u(),d.value=!1},resume(){d.value=!0},stop:p}}function jf(e,t={}){let{window:n=_f,scrollTarget:r,threshold:i=0,rootMargin:a,once:o=!1,initialValue:s=!1}=t,c=ee(s),l=Af(e,e=>{let t=c.value,n=0;for(let r of e)r.time>=n&&(n=r.time,t=r.isIntersecting);c.value=t,o&&gf(c,()=>{l.stop()})},{root:r,window:n,threshold:i,rootMargin:a});return t.controls?{...l,isVisible:c}:c}function Mf(e={}){let{controls:t=!1,scheduler:n=wf}=e,r=ee(new Date),i=n(()=>r.value=new Date);return t?{now:r,...i}:r}var Nf=`(max-width: 700px), (max-width: 1050px) and (max-height: 500px) and (pointer: coarse)`,Pf=()=>Df(Nf);function Ff(e){let t=M(!1),n=M(),r=M(),i=M(0),a=Pf(),o=V(),s=M({}),c=B(()=>a.value?void 0:s.value),l=0,u=!1,d=()=>[...r.value?.querySelectorAll(e.items??`button`)??[]],f=()=>d().filter(e=>!e.matches(`:disabled`));function m(){let e=d().indexOf(document.activeElement);e>=0&&(i.value=e)}function h(r=!0){if(t.value&&(++l,t.value=!1,r&&!u)){let t=n.value;(t?.querySelector(e.returnFocus??`button`)??t)?.focus?.()}}async function _(o=!t.value){if(u||o===t.value)return;if(!o)return h();let c=n.value?.getBoundingClientRect();if(!c)return;let d=++l,g=Math.max(8,c.top-4),_=Math.max(8,window.innerHeight-c.bottom-4);if(s.value={[e.anchor]:`${e.anchor===`left`?c.left-4:window.innerWidth-c.right-4}px`,...e.placement===`above`?{bottom:`${_}px`,maxHeight:`calc(100dvh - ${_}px - 8px)`}:{top:`${g}px`,"--island-top":`${g}px`}},i.value=0,t.value=!0,await p(),!u&&t.value&&d===l){if(!a.value&&r.value){let t=r.value.getBoundingClientRect().width,n=e.anchor===`left`?c.left-4:window.innerWidth-c.right-4;s.value={...s.value,[e.anchor]:`${Math.max(8,Math.min(n,window.innerWidth-t-8))}px`}}((typeof e.initialFocus==`string`?[e.initialFocus]:e.initialFocus).map(e=>r.value?.querySelector(e)).find(e=>e&&!e.matches(`:disabled`))??f()[0]??r.value?.querySelector(`button:not(:disabled)`))?.focus(),m()}}function v(t){if(!(t.defaultPrevented||t.isComposing)){if(t.key===`Escape`)t.preventDefault(),h();else if(t.key===`Tab`&&e.closeOnTab)h();else{let n=t.key===`ArrowDown`||e.horizontalArrows&&t.key===`ArrowRight`,r=t.key===`ArrowUp`||e.horizontalArrows&&t.key===`ArrowLeft`;if(!n&&!r)return;let i=f();if(!i.length)return;t.preventDefault();let a=i.indexOf(document.activeElement);i[a<0?n?0:i.length-1:(a+(n?1:-1)+i.length)%i.length]?.focus(),m()}}}return xf(r,()=>h(!1),{ignore:[n]}),yf(window,`resize`,()=>h()),yf(window,`blur`,()=>h(!1)),g(()=>{u=!0,++l,t.value=!1}),{open:t,trigger:n,island:r,active:i,compact:a,id:o,style:c,toggle:_,close:h,keydown:v,trackFocus:m}}function If(e,t,n,r,i){let a=t.filter(e=>e.command===n),o=structuredClone(a.length?a:e.filter(e=>e.command===n)),s=o[r],c={...s,command:n,key:i??s?.key??`Unassigned`,disabled:i===null};return s?o[r]=c:o.push(c),[...t.filter(e=>e.command!==n),...o]}function Lf(e){if(e.isComposing||e.repeat||[`Control`,`Meta`,`Alt`,`Shift`,`Dead`,`Unidentified`,`+`].includes(e.key))return;let t=qe(e);return[e.ctrlKey&&`Ctrl`,e.metaKey&&`Meta`,e.altKey&&`Alt`,e.shiftKey&&`Shift`,t===` `?`Space`:t.length===1?t.toUpperCase():t].filter(Boolean).join(`+`)}function Rf(e,t,n,r=``){let i=new Map(t.map(e=>[e.id,e.context])),a=i.get(n),o=new Map;for(let t of e){if(t.palette===!1)continue;let e=i.get(t.scope);if(a?.projectId&&e?.projectId&&e.projectId!==a.projectId)continue;let r=e?.surface===`fileTree`?`Файлы`:e?.surface===`editor`?`Редактор`:e?.namespace===`ide.workbench.tabs`?`Вкладки`:e?.surface===`keybindings`?`Горячие клавиши`:`IDE`,s=o.get(t.id);(!s||t.scope===n||s.scope!==n&&t.enabled&&!s.enabled)&&o.set(t.id,{...t,group:r})}let s=r.trim().replace(/^>\s*/,``).toLocaleLowerCase().split(/\s+/).filter(Boolean);return[...o.values()].filter(e=>s.every(t=>`${e.title} ${e.id} ${e.group}`.toLocaleLowerCase().includes(t))).sort((e,t)=>Number(t.enabled)-Number(e.enabled)||Number(t.scope===n)-Number(e.scope===n)||e.title.localeCompare(t.title,`ru`)||e.id.localeCompare(t.id))}function zf(e,t){return async(n,r)=>{let i=e.getScopes().filter(({context:e})=>e.projectId===t||e.projectId===void 0&&[`workbench`,`keybindings`,`settings`].includes(String(e.surface))),a=new Set(i.map(({id:e})=>e));if(n.operation===`list`){let t=(n.query??``).toLocaleLowerCase();return{scopes:i,commands:e.getCommands().filter(e=>a.has(e.scope)&&`${e.id} ${e.title} ${e.description}`.toLocaleLowerCase().includes(t)).map(({id:e,title:t,scope:n,enabled:r})=>({id:e,title:t,scope:n,enabled:r}))}}if(!n.scope||!a.has(n.scope))throw Error(`Область недоступна в текущем проекте`);if(!n.command)throw Error(`Укажите ID команды`);let o=e.describeCommand(n.scope,n.command,n.args);if(!o)throw Error(`Команда не зарегистрирована`);if(n.operation===`describe`)return{...o,context:i.find(({id:e})=>e===n.scope).context};if(n.operation!==`execute`)throw Error(`Неизвестная операция`);return await e.executeCommand(n.command,n.args,{scope:n.scope,signal:r})??{completed:!0}}}function Bf(e){return e.serviceWorker?!e.production||!e.secure?`unregister`:`register`:`none`}var Vf=ee(null),Hf=M(!1),Uf=M(!1),Wf=M(!1),Gf=M(`unknown`),Kf=M(`unknown`),qf=M(``),Jf=!1;function Yf(){return{installed:Hf,standalone:Uf,fullscreen:Wf,worker:Gf,mode:Kf,error:qf,canInstall:B(()=>Vf.value!==null&&!Hf.value&&!Uf.value)}}function Xf(){if(!Jf){Jf=!0,Uf.value=np(),document.addEventListener(`fullscreenchange`,ip);for(let e of[`(display-mode: standalone)`,`(display-mode: fullscreen)`])window.matchMedia(e).addEventListener(`change`,()=>{Uf.value=np()});window.addEventListener(`beforeinstallprompt`,e=>{e.preventDefault(),Vf.value=e}),window.addEventListener(`appinstalled`,()=>{Hf.value=!0,Vf.value=null,qf.value=``}),Zf()}}async function Zf(){let e=await Qf();if(e===null){Gf.value=`unknown`;return}Kf.value=e?`prod`:`dev`;let t=Bf({production:e,secure:window.isSecureContext,serviceWorker:`serviceWorker`in navigator});t===`register`?await ap():t===`unregister`?await op():Gf.value=`none`}async function Qf(){try{let e=await fetch(`/api/health`,{cache:`no-store`,headers:{Accept:`application/json`}});if(!e.ok)return null;let t=await e.json();return t.mode===`prod`||t.mode!==`dev`&&null}catch{return null}}async function $f(){if(Hf.value||Uf.value)return`installed`;let e=Vf.value;if(!e)throw Error(`Браузер пока не предлагает установку. Используйте меню браузера → «Установить приложение», а на iPhone — «Поделиться» → «На экран Домой».`);await e.prompt();let t=await e.userChoice;return Vf.value=null,t.outcome===`accepted`?(Hf.value=!0,`accepted`):`dismissed`}function ep(){return typeof document<`u`&&document.fullscreenEnabled===!0}async function tp(){if(!ep())throw Error(`Браузер не поддерживает полноэкранный режим. На iPhone установите Projector на экран «Домой».`);return document.fullscreenElement?(await document.exitFullscreen(),ip(),!1):(await document.documentElement.requestFullscreen({navigationUI:`hide`}),ip(),!0)}function np(){return typeof window>`u`?!1:navigator.standalone===!0||window.matchMedia(`(display-mode: standalone)`).matches||window.matchMedia(`(display-mode: fullscreen)`).matches}function rp(){return typeof window<`u`&&window.isSecureContext}function ip(){Wf.value=document.fullscreenElement!==null}async function ap(){try{await navigator.serviceWorker.register(`/sw.js`,{scope:`/`}),Gf.value=`active`,qf.value=``}catch(e){Gf.value=`none`,qf.value=e instanceof Error?e.message:`Не удалось включить service worker`}}async function op(){try{let e=await navigator.serviceWorker.getRegistrations();await Promise.all(e.filter(sp).map(e=>e.unregister()));let t=await caches.keys();await Promise.all(t.filter(e=>e.startsWith(`projector-shell-`)).map(e=>caches.delete(e))),Gf.value=`none`,qf.value=``}catch(e){Gf.value=`none`,qf.value=e instanceof Error?e.message:`Не удалось очистить service worker`}}function sp(e){return[e.active,e.installing,e.waiting].some(e=>e?.scriptURL.endsWith(`/sw.js`))}var cp=W({__name:`PwaSettings`,setup(e,{expose:t}){t();let{canInstall:n,installed:r,standalone:i,fullscreen:a,worker:o,mode:s,error:c}=Yf(),{busy:l,status:u,perform:d}=Me({error:c}),f=ep(),p=rp(),m=/iPhone|iPad|iPod/i.test(navigator.userAgent);async function h(){await d(async()=>{let e=await $f();return e===`accepted`?`Установка принята: Projector появится среди приложений.`:e===`installed`?`Projector уже открыт как приложение.`:`Установка отменена.`},{errorFallback:`Не удалось установить приложение`})}async function g(){await d(async()=>await tp()?`Полноэкранный режим включён.`:`Полноэкранный режим выключен.`,{errorFallback:`Не удалось переключить режим`})}let _={canInstall:n,installed:r,standalone:i,fullscreen:a,worker:o,mode:s,error:c,busy:l,status:u,perform:d,fullscreenSupported:f,secure:p,iphone:m,install:h,toggle:g,UiBadge:kd,UiButton:q,UiHeading:Ee,UiHint:we,UiInline:Be,UiMessage:Te};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),lp={class:`pwa-settings`};function up(t,n,r,i,a,o){return K(),U(`section`,lp,[y(i.UiHeading,{as:`h2`,size:`sm`},{default:e(()=>[...n[0]||=[G(`Установка приложения`,-1)]]),_:1}),y(i.UiHint,{class:`hint`},{default:e(()=>[...n[1]||=[G(` Projector — локальный сервер: установка добавляет иконку и отдельное окно без адресной строки. Офлайн-режима нет — файлы, Git и терминалы работают только с запущенным сервером. `,-1)]]),_:1}),y(i.UiInline,{class:`badges`,align:`center`,wrap:``},{default:e(()=>[y(i.UiBadge,{tone:i.standalone?`info`:`neutral`},{default:e(()=>[G(X(i.standalone?`открыто как приложение`:`вкладка браузера`),1)]),_:1},8,[`tone`]),i.installed?(K(),F(i.UiBadge,{key:0,tone:`info`},{default:e(()=>[...n[2]||=[G(`установлено`,-1)]]),_:1})):D(`v-if`,!0),i.worker===`active`?(K(),F(i.UiBadge,{key:1,tone:`info`},{default:e(()=>[...n[3]||=[G(`service worker`,-1)]]),_:1})):i.worker===`none`?(K(),F(i.UiBadge,{key:2},{default:e(()=>[...n[4]||=[G(`без service worker`,-1)]]),_:1})):D(`v-if`,!0),i.mode===`unknown`?D(`v-if`,!0):(K(),F(i.UiBadge,{key:3},{default:e(()=>[G(X(i.mode),1)]),_:1})),y(i.UiBadge,{tone:i.secure?`neutral`:`warning`},{default:e(()=>[G(X(i.secure?`localhost или HTTPS`:`HTTP в сети`),1)]),_:1},8,[`tone`])]),_:1}),i.standalone?(K(),F(i.UiHint,{key:0,class:`hint`},{default:e(()=>[...n[5]||=[G(` Окно уже работает без браузерной обвязки. Полноэкранный режим скрывает и системные панели. `,-1)]]),_:1})):i.mode===`dev`?(K(),F(i.UiHint,{key:1,class:`hint`},{default:e(()=>[...n[6]||=[G(` Сервер работает в dev: service worker отключён, поэтому при выключенном сервере нет даже страницы «Projector не отвечает». Установка доступна, если браузер её предлагает; в Chrome и Edge — меню → «Установить приложение». `,-1)]]),_:1})):!i.canInstall&&!i.iphone?(K(),F(i.UiHint,{key:2,class:`hint`},{default:e(()=>[...n[7]||=[G(` Браузер предложит установку, когда сочтёт страницу готовой. Если предложения нет, используйте меню браузера → «Установить приложение» (Chrome/Edge). `,-1)]]),_:1})):D(`v-if`,!0),i.iphone?(K(),F(i.UiHint,{key:3,class:`hint`},{default:e(()=>[...n[8]||=[G(` Safari на iPhone не показывает системное предложение: откройте «Поделиться» → «На экран Домой». Полноэкранный режим там даёт только установленное приложение. `,-1)]]),_:1})):D(`v-if`,!0),i.secure?D(`v-if`,!0):(K(),F(i.UiHint,{key:4,class:`hint`},{default:e(()=>[...n[9]||=[G(` Адрес в локальной сети открыт по HTTP. Установка и service worker требуют HTTPS или localhost; для телефона нужен сертификат либо туннель с HTTPS. `,-1)]]),_:1})),y(i.UiInline,{class:`actions`,align:`stretch`,wrap:``},{default:e(()=>[y(i.UiButton,{appearance:`solid`,disabled:i.busy||!i.canInstall||i.standalone,busy:i.busy,onClick:i.install},{default:e(()=>[...n[10]||=[G(`Установить приложение`,-1)]]),_:1},8,[`disabled`,`busy`]),i.fullscreenSupported?(K(),F(i.UiButton,{key:0,disabled:i.busy,onClick:i.toggle},{default:e(()=>[G(X(i.fullscreen?`Выйти из полного экрана`:`На весь экран`),1)]),_:1},8,[`disabled`])):D(`v-if`,!0)]),_:1}),i.error?(K(),F(i.UiMessage,{key:5,role:`alert`,tone:`danger`,size:`xs`,class:`message`},{default:e(()=>[G(X(i.error),1)]),_:1})):i.status?(K(),F(i.UiMessage,{key:6,role:`status`,size:`xs`,class:`message`},{default:e(()=>[G(X(i.status),1)]),_:1})):D(`v-if`,!0)])}var dp=H(cp,[[`render`,up],[`__scopeId`,`data-v-6e8e299c`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/pwa/PwaSettings.vue`]]),fp=(e,t)=>fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),pp=()=>{let e=Error(`Запрос IDE истёк`);return e.name=`AbortError`,e};function mp(e,t){return new Promise(n=>{if(t.aborted||e<=0)return n();let r,i=()=>{clearTimeout(r),t.removeEventListener(`abort`,i),n()};r=setTimeout(i,e),t.addEventListener(`abort`,i,{once:!0})})}function hp(e,t){return new Promise((n,r)=>{let i=()=>r(pp());if(t.aborted)return i();t.addEventListener(`abort`,i,{once:!0}),e.then(n,r).finally(()=>t.removeEventListener(`abort`,i))})}function gp(e){let t=new Map,n=async n=>{let r=new AbortController;t.set(n.id,r);let i=Number.isFinite(n.expiresAt)?n.expiresAt:Date.now()+6e4,a=setTimeout(()=>r.abort(),Math.max(0,i-Date.now())),o=()=>r.signal.aborted||Date.now()>=i;try{if(o()||n.owner&&n.owner!==on&&n.fallbackAt>Date.now()&&(await mp(n.fallbackAt-Date.now(),r.signal),o()))return;let t=await fp(`/api/ide/command-request/claim`,{id:n.id,page:on});if(!(t.ok&&(await t.json()).claimed===!0)||o())return;let i=n.request;if(i.operation===`execute`&&i.command&&!Ue(i.command)){let t=i.scope?e.describeCommand(i.scope,i.command,i.args):void 0,n=i.args?JSON.stringify(i.args,null,2):``,r=[t?.title??i.command,i.command,n].filter(Boolean).join(`
|
|
8
|
-
`);if(!window.confirm(`Агент хочет выполнить команду Projector:\n\n${r}`))throw Error(`Пользователь отклонил действие`);if(o())return}let a=await hp(zf(e,n.projectId)(i,r.signal),r.signal);if(o())return;await fp(`/api/ide/command-request/result`,{id:n.id,page:on,output:a})}catch(e){if(o())return;await fp(`/api/ide/command-request/result`,{id:n.id,page:on,error:e instanceof Error?e.message:`Не удалось выполнить команду`}).catch(()=>void 0)}finally{clearTimeout(a),t.delete(n.id)}},r=t=>{let r=t.detail;r?.id&&r.projectId&&e.getScopes().some(({context:e})=>e.projectId===r.projectId)&&n(r)},i=e=>{let n=e.detail;n?.id&&t.get(n.id)?.abort()};return window.addEventListener(`projector:ide-command-request`,r),window.addEventListener(`projector:ide-command-cancel`,i),()=>{window.removeEventListener(`projector:ide-command-request`,r),window.removeEventListener(`projector:ide-command-cancel`,i);for(let e of t.values())e.abort();t.clear()}}function _p(e,t){let n=new BroadcastChannel(`projector:page-reload`),r=!1,i=!1,a=e=>{r=e,t()};async function o(){let e=await fetch(`/api/health`,{cache:`no-store`,signal:AbortSignal.timeout(2e3)}),t=await e.json();if(!e.ok||!t.ok||t.app!==`projector`||!Number.isInteger(t.pid))throw Error(`Сервер Projector недоступен`);return{pid:t.pid,mode:t.mode===`prod`?`prod`:`dev`,network:t.network?.mode===`lan`?`lan`:`local`}}let s=null,c=null;async function l(){try{let{mode:e,network:n}=await o();(e!==s||n!==c)&&(s=e,c=n,i||t())}catch{}}async function u(e){a(!0);try{let t=Date.now()+6e4;for(;!i&&Date.now()<t;){try{if((await o()).pid!==e){i||window.location.reload();return}}catch{}await new Promise(e=>setTimeout(e,500))}if(!i)throw Error(`Сервер не запустился за 60 секунд. Страницы не перезагружены.`)}finally{i||a(!1)}}return n.onmessage=({data:t})=>{i||r||(t?.type===`reload`&&window.location.reload(),t?.type===`restart`&&Number.isInteger(t.pid)&&u(t.pid).catch(e))},{isBusy:()=>r,canSwitchMode:e=>!r&&s!==e,canSwitchNetwork:e=>!r&&c!==e,refreshMode:l,reloadPages(){n.postMessage({type:`reload`}),window.location.reload()},async restartServer(){if(!r&&window.confirm(`Перезапустить сервер Projector и открытые страницы? Все терминалы и дочерние процессы будут завершены. Сохраните изменения перед перезапуском.`)){a(!0);try{let{pid:e}=await o(),t=await fetch(`/api/app/restart`,{method:`POST`}),r=await t.json();if(!t.ok||!r.ok)throw Error(r.error||`Не удалось перезапустить сервер Projector`);n.postMessage({type:`restart`,pid:e}),await u(e)}finally{i||a(!1)}}},async switchMode(e){if(r)return;let{pid:t,mode:s}=await o();if(s===e)throw Error(`Сервер уже работает в режиме ${e}`);if(window.confirm(`Переключить сервер Projector в режим ${e}${e===`prod`?` (сначала выполняется сборка)`:``}? Все терминалы и дочерние процессы будут завершены. Сохраните изменения перед переключением.`)){a(!0);try{let r=await fetch(`/api/app/mode`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:e})}),i=await r.json();if(!r.ok||!i.ok)throw Error(i.error||`Не удалось переключить режим сервера`);n.postMessage({type:`restart`,pid:t}),await u(t)}finally{i||a(!1)}}},async switchNetwork(e){if(r)return;let{pid:t,network:s}=await o();if(s===e)throw Error(`Сервер уже работает в режиме ${e}`);if(window.confirm(`Переключить доступ Projector в режим ${e===`lan`?`локальной сети`:`только localhost`}? Сервер будет перезапущен, терминалы и дочерние процессы завершены.`)){a(!0);try{let r=await fetch(`/api/app/network`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:e})}),i=await r.json();if(!r.ok||!i.ok)throw Error(i.error||`Не удалось переключить доступ по сети`);n.postMessage({type:`restart`,pid:t}),await u(t)}finally{i||a(!1)}}},dispose(){i=!0,n.close()}}}var vp=Symbol(`ide`);function yp(){let e=z(vp);if(!e)throw Error(`IDE SDK unavailable`);return e}function bp(){return z(vp,void 0)}function xp(){let e=Ne(Ge),t=M(0),r=M(``),i=M(null),a=e=>{r.value=e instanceof Error?e.message:`Не удалось выполнить команду`},o=e.createScope(`workbench`,()=>({surface:`workbench`})),{canInstall:s}=Yf(),c=_p(a,()=>t.value++);o.registerCommand({id:`ide.workbench.pwa.install`,title:`Установить Projector как приложение`,description:`Открывает системное предложение установки: иконка в меню приложений и отдельное окно без адресной строки. Доступно, когда браузер предложил установку; в dev service worker и офлайн-кеш не включаются.`,enabled:()=>s.value,run:()=>$f()}),o.registerCommand({id:`ide.workbench.fullscreen.toggle`,title:`Полноэкранный режим`,description:`Скрывает интерфейс браузера и освобождает весь экран под рабочую область; на телефоне это заменяет установленное приложение. Выход — повторный вызов или Esc.`,enabled:()=>ep(),run:()=>tp()}),o.registerCommand({id:`ide.workbench.pages.reload`,title:`Перезагрузить открытые страницы Projector`,description:`Обновляет все открытые страницы Projector на текущем адресе. Несохранённые изменения используют обычное подтверждение страницы.`,enabled:()=>!c.isBusy(),run:()=>c.reloadPages()}),o.registerCommand({id:`ide.workbench.server.restart`,title:`Перезапустить сервер и открытые страницы`,description:`Запрашивает подтверждение, завершает терминалы и дочерние процессы, перезапускает сервер Projector и обновляет все открытые страницы после запуска нового процесса.`,enabled:()=>!c.isBusy(),run:()=>c.restartServer()}),o.registerCommand({id:`ide.workbench.server.mode.dev`,title:`Переключить сервер в режим dev (HMR)`,description:`Перезапускает Projector через vp dev с горячей заменой модулей. Запрашивает подтверждение, завершает терминалы и дочерние процессы, затем обновляет все открытые страницы.`,enabled:()=>c.canSwitchMode(`dev`),run:()=>c.switchMode(`dev`)}),o.registerCommand({id:`ide.workbench.server.mode.prod`,title:`Переключить сервер в режим prod (сборка)`,description:`Собирает фронтенд (vp build) и перезапускает Projector на собственном Node-сервере. Изменения кода после этого не применяются без повторного переключения. Запрашивает подтверждение, завершает терминалы и дочерние процессы, затем обновляет все открытые страницы.`,enabled:()=>c.canSwitchMode(`prod`),run:()=>c.switchMode(`prod`)}),o.registerCommand({id:`ide.workbench.server.network.lan`,title:`Открыть Projector для локальной сети`,description:`Переключает сервер на все сетевые интерфейсы, чтобы управлять Projector с телефона или другой машины. Пароль доступа задаётся в настройках. Перезапускает сервер и завершает терминалы.`,enabled:()=>c.canSwitchNetwork(`lan`),run:()=>c.switchNetwork(`lan`)}),o.registerCommand({id:`ide.workbench.server.network.local`,title:`Ограничить Projector только локально`,description:`Возвращает сервер на localhost и закрывает доступ из локальной сети. Перезапускает сервер и завершает терминалы.`,enabled:()=>c.canSwitchNetwork(`local`),run:()=>c.switchNetwork(`local`)}),o.registerCommand({id:`ide.workbench.commandPalette.open`,title:`Открыть командный центр`,enabled:()=>!!i.value||!document.querySelector(`dialog[open]`),run:async()=>{i.value||(await c.refreshMode(),!i.value&&(i.value={commands:Rf(e.getCommands(),e.getScopes(),e.getActiveScope()),trigger:document.activeElement instanceof HTMLElement?document.activeElement:null}))}});function l(e){if(e.defaultPrevented||document.querySelector(`dialog[open]`)&&!i.value)return;let t=e.target,n=t instanceof Element&&!!t.closest(`input,textarea,select,[contenteditable="true"]`),r=o.resolveKeybinding(e,n);r&&(e.preventDefault(),e.stopPropagation(),o.executeCommand(r.command,r.args).catch(a))}let u=gp(e);f(()=>{window.addEventListener(`keydown`,l,!0),c.refreshMode()});let d=e.subscribe(()=>t.value++);n(Le,{revision:t,createScope:e.createScope,reportError:a});async function p(){let t=await fetch(`/api/ide/keybindings`),n=await t.json();if(!t.ok)throw Error(n.error||`Не удалось загрузить привязки клавиш`);return e.setKeybindings(n.bindings),n}async function m(t){let n=Ve(t),r=await fetch(`/api/ide/keybindings`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({bindings:n})}),i=await r.json();if(!r.ok)throw Error(i.error||`Не удалось сохранить привязки клавиш`);return e.setKeybindings(i.bindings),i}let h={...e,reloadKeybindings:p,saveKeybindings:m};n(vp,{api:h,revision:t,palette:i,reportError:a});let _=window,v=_.projector?.ide;return _.projector??={},_.projector.ide=h,p().catch(e=>{r.value=e instanceof Error?e.message:String(e)}),g(()=>{u(),c.dispose(),d(),window.removeEventListener(`keydown`,l,!0),o.dispose(),_.projector?.ide===h&&(_.projector.ide=v)}),{error:r}}var Sp=W({__name:`UiScrollArea`,setup(e,{expose:t}){let n=ee();t({get element(){return n.value??void 0}});let r={element:n};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Cp={ref:`element`,class:`ui-scroll-area`};function wp(e,t,n,r,i,a){return K(),U(`div`,Cp,[c(e.$slots,`default`,{},void 0,!0)],512)}var Tp=H(Sp,[[`render`,wp],[`__scopeId`,`data-v-af251cf9`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiScrollArea.vue`]]),Ep=W({__name:`UiTable`,props:{padding:{type:String,required:!1},align:{type:String,required:!1},sticky:{type:Boolean,required:!1},headerTone:{type:String,required:!1},headerWeight:{type:Number,required:!1},subtle:{type:Boolean,required:!1},hover:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function Dp(e,t,n,r,i,a){return K(),U(`table`,{class:Y([`ui-table`,{sticky:n.sticky,hover:n.hover}]),style:Qe({"--ui-table-padding":n.padding??`var(--sp-3) var(--sp-3)`,"--ui-table-align":n.align,"--ui-table-header-color":n.headerTone===`muted`?`var(--muted)`:void 0,"--ui-table-header-weight":n.headerWeight??500,"--ui-table-body-border":n.subtle?`color-mix(in srgb, var(--line) 50%, transparent)`:`var(--line)`})},[c(e.$slots,`default`,{},void 0,!0)],6)}var Op=H(Ep,[[`render`,Dp],[`__scopeId`,`data-v-44cf35b8`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiTable.vue`]]);function kp(e){return typeof e==`object`?e.key:e}function Ap(e,t){let n=e.length;return new Proxy(e,{get(e,r,i){if(typeof r==`string`){let i=r.charCodeAt(0);if(i>=48&&i<=57){let i=+r;if(Number.isInteger(i)&&i>=0&&i<n){let n=e[i];if(typeof n!=`object`){let r=t[i*2];n=e[i]={index:i,key:n,start:r,size:t[i*2+1],end:r+t[i*2+1],lane:0}}return n}}if(r===`length`)return n}return Reflect.get(e,r,i)}})}function jp(e,t,n){let r=n.initialDeps??[],i,a=!0;function o(){let o=!!n.key&&!!n.debug?.call(n),s=0;o&&(s=Date.now());let c=e();if(!(c.length!==r.length||c.some((e,t)=>r[t]!==e)))return i;r=c;let l=0;if(o&&(l=Date.now()),i=t(...c),o){let e=Math.round((Date.now()-s)*100)/100,t=Math.round((Date.now()-l)*100)/100,r=t/16,i=(e,t)=>{for(e=String(e);e.length<t;)e=` `+e;return e};console.info(`%c⏱ ${i(t,5)} /${i(e,5)} ms`,`
|
|
9
|
-
font-size: .6rem;
|
|
10
|
-
font-weight: bold;
|
|
11
|
-
color: hsl(${Math.max(0,Math.min(120-120*r,120))}deg 100% 31%);`,n?.key)}return n?.onChange&&!(a&&n.skipInitialOnChange)&&n.onChange(i),a=!1,i}return o.updateDeps=e=>{r=e},o}function Mp(e,t){if(e===void 0)throw Error(`Unexpected undefined${t?`: ${t}`:``}`);return e}var Np=(e,t)=>Math.abs(e-t)<1.01,Pp=(e,t,n)=>{let r;return Object.assign(function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)},{cancel:()=>{e.clearTimeout(r)}})},Fp,Ip=()=>{if(Fp!==void 0)return Fp;if(typeof navigator>`u`)return Fp=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return Fp=!0;let e=navigator.maxTouchPoints;return Fp=navigator.platform===`MacIntel`&&e!==void 0&&e>0},Lp=e=>{let{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},Rp=e=>e,zp=e=>{let t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1)-t+1,r=Array(n);for(let e=0;e<n;e++)r[e]=t+e;return r},Bp=(e,t)=>{let n=e.scrollElement;if(!n)return;let r=e.targetWindow;if(!r)return;let i=e=>{let{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(i(Lp(n)),!r.ResizeObserver)return()=>{};let a=new r.ResizeObserver(t=>{let r=()=>{let e=t[0];if(e?.borderBoxSize){let t=e.borderBoxSize[0];if(t){i({width:t.inlineSize,height:t.blockSize});return}}i(Lp(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return a.observe(n,{box:`border-box`}),()=>{a.unobserve(n)}},Vp={passive:!0},Hp=typeof window>`u`||`onscrollend`in window,Up=(e,t,n)=>{let r=e.scrollElement;if(!r)return;let i=e.targetWindow;if(!i)return;let a=e.options.useScrollendEvent&&Hp,o=0,s=a?null:Pp(i,()=>t(n(r),!1),e.options.isScrollingResetDelay),c=e=>()=>{o=n(r),s?.(),t(o,e)},l=c(!0),u=c(!1);return r.addEventListener(`scroll`,l,Vp),a&&r.addEventListener(`scrollend`,u,Vp),()=>{r.removeEventListener(`scroll`,l),a&&r.removeEventListener(`scrollend`,u),s?.cancel()}},Wp=(e,t)=>Up(e,t,t=>{let{horizontal:n,isRtl:r}=e.options;return n?t.scrollLeft*(r&&-1||1):t.scrollTop}),Gp=(e,t,n)=>{if(n.options.useCachedMeasurements){let t=n.indexFromElement(e),r=n.options.getItemKey(t);return n.itemSizeCache.get(r)??n.options.estimateSize(t)}if(t?.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?`inlineSize`:`blockSize`])}if(!t){let t=n.indexFromElement(e),r=n.options.getItemKey(t),i=n.itemSizeCache.get(r);if(i!==void 0)return i}return e[n.options.horizontal?`offsetWidth`:`offsetHeight`]},Kp=(e,{adjustments:t=0,behavior:n},r)=>{var i,a;(a=(i=r.scrollElement)?.scrollTo)==null||a.call(i,{[r.options.horizontal?`left`:`top`]:e+t,behavior:n})};function qp(e,t,n,r){if(t===0)return!1;let i=r(0),a=new Set,o=0;for(;o<e;){let e=n(o);if(e===i)break;a.add(e),o++}let s=e-o;if(s===0||s>=t)return!1;for(let e=0;e<s;e++)if(r(e)!==n(o+e))return!1;for(let e=s;e<t;e++)if(a.has(r(e)))return!1;return!0}var Jp=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._singleLaneMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this._clampedAdjustment=null,this.elementsCache=new Map,this.now=()=>{var e;return((e=this.targetWindow?.performance)?.now)?.call(e)??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,n=this.indexFromElement(t);if(t.isConnected)this.isIndexInRange(n)&&this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this));else{this.observer.unobserve(t);for(let[e,n]of this.elementsCache)if(n===t){this.elementsCache.delete(e);break}}};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}));return{disconnect:()=>{var n;(n=t())==null||n.disconnect(),e=null},observe:e=>t()?.observe(e,{box:`border-box`}),unobserve:e=>t()?.unobserve(e)}})(),this.range=null,this.setOptions=e=>{let t={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:Rp,rangeExtractor:zp,onChange:()=>{},measureElement:Gp,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:`data-index`,initialMeasurementsCache:[],lanes:1,anchorTo:`start`,followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:`estimate`,useCachedMeasurements:!1};for(let n in e){let r=e[n];r!==void 0&&(t[n]=r)}let n=this.options,r=null,i=null,a=!1;if(n!==void 0&&n.enabled&&t.enabled&&t.anchorTo===`end`&&this.scrollElement!==null){let e=n.count,o=t.count,s=this.getMeasurements(),c=this._singleLaneMeasurements?.items??s,l=e=>kp(c[e]),u=e>0?l(0):null,d=e>0?l(e-1):null;if(o!==e||e>0&&o>0&&(t.getItemKey(0)!==u||t.getItemKey(o-1)!==d)){a=!0;let c=e>0?this.getVirtualItemForOffset(this.getScrollOffset())??s[0]:null;c&&(r=[c.key,this.getScrollOffset()-c.start]);let u=t.followOnAppend===!0?`auto`:t.followOnAppend||null;u&&o>0&&this.isAtEnd(n.scrollEndThreshold)&&(e===0||t.getItemKey(o-1)!==d)&&(o>e||qp(e,o,l,t.getItemKey))&&(i=u)}}this.options=t,a&&(this.pendingMin=0,this.itemSizeCacheVersion++);let o=!1,s=0;if(r&&this.scrollOffset!==null){let[e,t]=r,n=this.getMeasurements(),{count:a,getItemKey:c}=this.options,l=0;for(;l<a&&c(l)!==e;)l++;if(l<a){let e=n[l];if(e){let n=Math.max(0,e.start+t);!i&&n!==this.scrollOffset&&(s=n-this.scrollOffset,this.scrollOffset=n,o=!0)}}}(o||i)&&(this.pendingScrollAnchor=[o?r[0]:null,o?r[1]:0,i,s])},this.notify=e=>{var t,n;(n=(t=this.options).onChange)==null||n.call(t,this,e)},this.maybeNotify=jp(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:`maybeNotify`,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.isScrolling=!1,this.scrollDirection=null,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._clampedAdjustment=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{let e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.targetWindow=this.scrollElement&&`ownerDocument`in this.scrollElement?this.scrollElement.ownerDocument.defaultView:this.scrollElement?.window??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{if(t&&this._intendedScrollOffset===null&&e===this.scrollOffset)return;this._intendedScrollOffset!==null&&Math.abs(e-this._intendedScrollOffset)<1.5&&(e=this._intendedScrollOffset),this._intendedScrollOffset=null,this._clampedAdjustment!==null&&Math.abs(e-this._clampedAdjustment.maxAtWrite)>=1.5&&(this._clampedAdjustment=null),this.scrollAdjustments=0;let n=this.getScrollOffset();this.scrollDirection=t?n===e?this.scrollDirection:n<e?`forward`:`backward`:null,this.scrollOffset=e,this.isScrolling=t,this._flushIosDeferredIfReady(),this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),`addEventListener`in this.scrollElement){let e=this.scrollElement,t=()=>{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,Ip()&&this.targetWindow!=null&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};e.addEventListener(`touchstart`,t,Vp),e.addEventListener(`touchend`,n,Vp),this.unsubs.push(()=>{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchend`,n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}let t=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,t&&this.scrollElement&&this.options.enabled){let[e,n,r,i]=t;e!==null&&!r&&(Ip()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?i!==0&&(this._iosDeferredAdjustment+=i):this.scrollState?.behavior===`smooth`&&!Np(this.getScrollOffset()-i,this.scrollState.lastTargetOffset)||this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})),r&&this.scrollToEnd({behavior:r})}this._retryClampedAdjustment()},this._retryClampedAdjustment=()=>{if(this._clampedAdjustment===null||!this.scrollElement||!this.options.enabled)return;let{target:e,maxAtWrite:t}=this._clampedAdjustment,n=this.getMaxScrollOffset();n>t+.5&&(this._clampedAdjustment=e>n+.5?{target:e,maxAtWrite:n}:null,this._scrollToOffset(e,{adjustments:void 0,behavior:void 0}))},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;let e=this.getScrollOffset(),t=this.getMaxScrollOffset();if(e<0||e>t)return;if(this._iosDeferredAdjustment<0&&e>=t-1){this._iosDeferredAdjustment=0;return}let n=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(e,{adjustments:this.scrollAdjustments+=n,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?`width`:`height`]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset==`function`?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getMeasurementOptions=jp(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode,this.options.gap],(e,t,n,r,i,a,o,s)=>(this.prevLanes!==void 0&&this.prevLanes!==a&&(this.lanesChangedFlag=!0),this.prevLanes=a,this.pendingMin=null,{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o,gap:s}),{key:!1}),this.isIndexInRange=e=>e>=0&&e<this.options.count,this.getMeasurements=jp(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o,gap:s},c)=>{let l=this.itemSizeCache;if(!i)return this.measurementsCache=[],this._singleLaneMeasurements=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this._singleLaneMeasurements=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let u=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1),a===1){let i=e*2,a=this._singleLaneMeasurements?.flat;if(!a||a.length<i){let e=new Float64Array(i);a&&u>0&&e.set(a.subarray(0,u*2)),a=e}let o=u===0?Array(e):this._singleLaneMeasurements.items.slice(),c;if(u===0)c=t+n;else{let e=u-1;c=a[e*2]+a[e*2+1]+s}for(let t=u;t<e;t++){let e=r(t);o[t]=e;let n=l.get(e),i=typeof n==`number`?n:this.options.estimateSize(t);a[t*2]=c,a[t*2+1]=i,c+=i+s}this._singleLaneMeasurements={flat:a,items:o};let d=Ap(o,a);return this.measurementsCache=d,d}let d=this.measurementsCache.slice(0,u),f=Array(a).fill(void 0),p=new Float64Array(a),m=0;for(let e=0;e<u;e++){let t=d[e];t&&(f[t.lane]===void 0&&m++,f[t.lane]=e,p[t.lane]=t.end)}for(let i=u;i<e;i++){let e=r(i),c=this.laneAssignments.get(i),u,h,g=o===`estimate`||l.has(e);if(c!==void 0&&this.options.lanes>1){u=c;let e=f[u],r=e===void 0?void 0:d[e];h=r?r.end+s:t+n}else if(m===a){let e=0,t=p[0],n=f[0];for(let r=1;r<a;r++){let i=p[r];(i<t||i===t&&f[r]<n)&&(e=r,t=i,n=f[r])}u=e,h=t+s,g&&this.laneAssignments.set(i,u)}else u=i%this.options.lanes,h=t+n,g&&this.laneAssignments.set(i,u);let _=l.get(e),v=typeof _==`number`?_:this.options.estimateSize(i),y=h+v;d[i]={index:i,start:h,size:v,end:y,key:e,lane:u},f[u]===void 0&&m++,f[u]=i,p[u]=y}return this.measurementsCache=d,d},{key:`getMeasurements`,debug:()=>this.options.debug}),this.calculateRange=jp(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,r)=>e.length===0||t===0?(this.range=null,null):(this.range=Zp(e,t,n,r,r===1&&this._singleLaneMeasurements!==null?this._singleLaneMeasurements.flat:null),this.range),{key:`calculateRange`,debug:()=>this.options.debug}),this.getVirtualIndexes=jp(()=>{let e=null,t=null,n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,r,i)=>r===null||i===null?[]:e({startIndex:r,endIndex:i,overscan:t,count:n}),{key:`getVirtualIndexes`,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{if(!this.scrollState||this.scrollState.behavior!==`smooth`)return!0;let t=this.scrollState.index??this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index;if(t!==void 0&&this.range){let n=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),r=Math.max(0,t-n),i=Math.min(this.options.count-1,t+n);return e>=r&&e<=i}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});return}let t=this.indexFromElement(e);if(!this.isIndexInRange(t))return;let n=this.options.getItemKey(t),r=this.elementsCache.get(n);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(n,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{if(!this.isIndexInRange(e))return;let n,r,i,a=this._singleLaneMeasurements?.flat;if(this.options.lanes===1&&a!=null)i=this.options.getItemKey(e),r=a[e*2],n=a[e*2+1];else{let t=this.measurementsCache[e];if(!t)return;i=t.key,r=t.start,n=t.size}let o=this.itemSizeCache.get(i)??n,s=t-o;if(s!==0){let a=this.options.anchorTo===`end`&&this.scrollState?.behavior!==`smooth`&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,c=a?this.getTotalSize():0,l=this.getScrollOffset()+this.scrollAdjustments,u=this.itemSizeCache.has(i)?r+o<=l&&this.scrollDirection!==`backward`:r<l,d=this.scrollState?.behavior!==`smooth`&&(this.shouldAdjustScrollPositionOnItemSizeChange===void 0?u:this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[e]??{index:e,key:i,start:r,size:n,end:r+n,lane:0},s,this));(this.pendingMin===null||e<this.pendingMin)&&(this.pendingMin=e),this.itemSizeCache.set(i,t),this.itemSizeCacheVersion++;let f=!1;a?f=this.applyScrollAdjustment(this.getTotalSize()-c):d&&(f=this.applyScrollAdjustment(s)),this.notify(f),this._retryClampedAdjustment()}},this.getVirtualItems=jp(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let n=[];for(let r=0,i=e.length;r<i;r++){let i=t[e[r]];n.push(i)}return n},{key:`getVirtualItems`,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(t.length===0)return;let n=this._singleLaneMeasurements?.flat,r=this.options.lanes===1&&n!=null;return Mp(t[Yp(0,t.length-1,r?e=>n[e*2]:e=>Mp(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if(`scrollHeight`in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(e=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=e,this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;let r=this.getSize(),i=this.getScrollOffset();t===`auto`&&(t=e>=i+r?`end`:`start`),t===`center`?e+=(n-r)/2:t===`end`&&(e-=r);let a=this.getMaxScrollOffset();return Math.max(Math.min(a,e),0)},this.getOffsetForIndex=(e,t=`auto`)=>{e=Math.max(0,Math.min(e,this.options.count-1));let n=this.getSize(),r=this.getScrollOffset(),i=this.measurementsCache[e];if(!i)return;if(t===`auto`){if(i.end>=r+n-this.options.scrollPaddingEnd)t=`end`;else if(i.start<=r+this.options.scrollPaddingStart)t=`start`;else return[r,t]}if(t===`end`&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let a=t===`end`?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(a,t,i.size),t]},this.scrollToOffset=(e,{align:t=`start`,behavior:n=`auto`}={})=>{this._iosDeferredAdjustment=0;let r=this.getOffsetForAlignment(e,t),i=this.now();this.scrollState={index:null,align:t,behavior:n,startedAt:i,lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t=`auto`,behavior:n=`auto`}={})=>{this._iosDeferredAdjustment=0,e=Math.max(0,Math.min(e,this.options.count-1));let r=this.getOffsetForIndex(e,t);if(!r)return;let[i,a]=r,o=this.now();this.scrollState={index:e,align:a,behavior:n,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t=`auto`}={})=>{let n=this.getScrollOffset()+e,r=this.now();this.scrollState={index:null,align:`start`,behavior:t,startedAt:r,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:e=`auto`}={})=>{this.options.count>0?this.scrollToIndex(this.options.count-1,{align:`end`,behavior:e}):this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:e})},this.getTotalSize=()=>{let e=this.getMeasurements(),t;if(e.length===0)t=this.options.paddingStart;else if(this.options.lanes===1){let n=e.length-1,r=this._singleLaneMeasurements?.flat;t=r==null?e[n]?.end??0:r[n*2]+r[n*2+1]}else{let n=Array(this.options.lanes).fill(null),r=e.length-1;for(;r>=0&&n.some(e=>e===null);){let t=e[r];n[t.lane]===null&&(n[t.lane]=t.end),r--}t=Math.max(...n.filter(e=>e!==null))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{let e=[];if(this.itemSizeCache.size===0)return e;let t=this.getMeasurements();for(let n of t)n&&this.itemSizeCache.has(n.key)&&e.push({index:n.index,key:n.key,start:n.start,size:n.size,end:n.end,lane:n.lane});return e},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this._intendedScrollOffset=e+(t??0),this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(e)}applyScrollAdjustment(e,t){if(e===0)return!1;if(this.options.debug&&console.info(`correction`,e),Ip()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded))return this._iosDeferredAdjustment+=e,!1;{let n=this.getScrollOffset()+this.scrollAdjustments+e,r=this.scrollElement,i=r!==null&&(`scrollHeight`in r||`document`in r)?this.getMaxScrollOffset():null;return this._clampedAdjustment=i!==null&&n>i+.5?{target:n,maxAtWrite:i}:null,this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=e,behavior:t}),this.scrollOffset!==null&&(this.scrollOffset+=this.scrollAdjustments,this.scrollOffset<0&&(this.scrollOffset=0),this.scrollAdjustments=0),!0}}scheduleScrollReconcile(){this.targetWindow?this.rafId??=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}):this.scrollState=null}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=this.scrollState.index==null?void 0:this.getOffsetForIndex(this.scrollState.index,this.scrollState.align),t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&Np(t,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.getScrollOffset()!==t&&this._scrollToOffset(t,{adjustments:void 0,behavior:`auto`}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,n){let e=this.getSize()||600,n=Math.abs(t-this.getScrollOffset()),r=this.scrollState.behavior===`smooth`&&n>e;this.scrollState.lastTargetOffset=t,r||(this.scrollState.behavior=`auto`),this._scrollToOffset(t,{adjustments:void 0,behavior:r?`smooth`:`auto`})}this.scheduleScrollReconcile()}},Yp=(e,t,n,r)=>{for(;e<=t;){let i=(e+t)/2|0,a=n(i);if(a<r)e=i+1;else if(a>r)t=i-1;else return i}return e>0?e-1:0};function Xp(e,t,n){let r=0;for(;r<=t;){let i=(r+t)/2|0,a=e[i*2];if(a<n)r=i+1;else if(a>n)t=i-1;else return i}return r>0?r-1:0}function Zp(e,t,n,r,i){let a=e.length-1;if(e.length<=r)return{startIndex:0,endIndex:a};if(r===1&&i!==null){let e=Xp(i,a,n),r=e,o=n+t;for(;r<a&&i[r*2]+i[r*2+1]<o;)r++;return{startIndex:e,endIndex:r}}let o=Yp(0,a,t=>e[t].start,n),s=o;if(r===1)for(;s<a&&e[s].end<n+t;)s++;else if(r>1){let i=Array(r).fill(0);for(;s<a&&i.some(e=>e<n+t);){let t=e[s];i[t.lane]=t.end,s++}let c=Array(r).fill(n+t);for(;o>=0&&c.some(e=>e>=n);){let t=e[o];c[t.lane]=t.start,o--}o=Math.max(0,o-o%r),s=Math.min(a,s+(r-1-s%r))}return{startIndex:o,endIndex:s}}function Qp(e){let t=new Jp(re(e)),n=ee(t),r=t._didMount();return E(()=>re(e).getScrollElement(),e=>{e&&t._willUpdate()},{immediate:!0}),E(()=>re(e),e=>{t.setOptions({...e,onChange:(t,r)=>{var i;se(n),(i=e.onChange)==null||i.call(e,t,r)}}),t._willUpdate(),se(n)},{immediate:!0}),k(r),n}function $p(e){return Qp(B(()=>({observeElementRect:Bp,observeElementOffset:Wp,scrollToFn:Kp,...re(e)})))}var em=W({__name:`UiVirtualList`,props:{items:{type:Array,required:!0},itemKey:{type:Function,required:!0},scrollElement:{type:null,required:!0},estimateSize:{type:[Number,Function],required:!1,default:64},overscan:{type:Number,required:!1,default:6},scrollMargin:{type:Number,required:!1,default:0},resetKey:{type:null,required:!1}},setup(e,{expose:t}){let n=e,r=M(),i=$p(B(()=>{let e=r.value,t=e===void 0?-1:n.items.findIndex(t=>n.itemKey(t)===e);return{count:n.items.length,getScrollElement:()=>n.scrollElement,getItemKey:e=>n.itemKey(n.items[e]),estimateSize:e=>typeof n.estimateSize==`function`?n.estimateSize(n.items[e],e):n.estimateSize,overscan:n.overscan,useAnimationFrameWithResizeObserver:!0,scrollMargin:n.scrollMargin,rangeExtractor:e=>{let n=zp(e);return t<0||n.includes(t)?n:[...n,t].sort((e,t)=>e-t)}}}));function a(){let e=n.scrollElement?.contains(document.activeElement)?document.activeElement?.closest(`[data-virtual-index]`):null,t=e?n.items[Number(e.dataset.virtualIndex)]:void 0;r.value=t===void 0?void 0:n.itemKey(t)}yf(()=>n.scrollElement,`focusin`,a),yf(()=>n.scrollElement,`focusout`,()=>queueMicrotask(a));let o=B(()=>{let e=n.scrollMargin;return{rows:i.value.getVirtualItems().map(t=>{let r=Math.max(0,t.start-e);e=t.end;let i=n.items[t.index];return{item:i,index:t.index,key:n.itemKey(i),gapBefore:r}}),paddingAfter:Math.max(0,i.value.getTotalSize()+n.scrollMargin-e)}});function s(e){(e===null||e instanceof HTMLElement)&&i.value.measureElement(e)}E(()=>n.resetKey,()=>{i.value.scrollToOffset(0)},{flush:`post`}),E(()=>n.items.length,()=>{let e=n.scrollElement;e&&(e.scrollTop=Math.min(e.scrollTop,Math.max(0,i.value.getTotalSize()+n.scrollMargin-e.clientHeight)))},{flush:`post`}),t({scrollToIndex:e=>i.value.scrollToIndex(e,{align:`auto`}),measure:()=>i.value.measure()});let c={props:n,focusedKey:r,virtualizer:i,updateFocus:a,layout:o,measureElement:s};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}});function tm(e,t,n,r,i,a){return c(e.$slots,`default`,{rows:r.layout.rows,paddingAfter:r.layout.paddingAfter,measureElement:r.measureElement})}var nm=H(em,[[`render`,tm],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiVirtualList.vue`]]),rm=W({__name:`UiEmpty`,props:{density:{type:String,required:!1},align:{type:String,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function im(e,t,n,r,i,a){return K(),U(`p`,{class:Y([`empty`,[n.density,n.align]])},[c(e.$slots,`default`,{},void 0,!0)],2)}var am=H(rm,[[`render`,im],[`__scopeId`,`data-v-9f09557e`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiEmpty.vue`]]),om={},sm={class:`kbd`};function cm(e,t){return K(),U(`kbd`,sm,[c(e.$slots,`default`,{},void 0,!0)])}var lm=H(om,[[`render`,cm],[`__scopeId`,`data-v-7cfb56eb`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiKbd.vue`]]),um={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dm(e,t){return K(),U(`svg`,um,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497zM15 5l4 4`},null,-1)]])}var fm=L({name:`lucide-pencil`,render:dm}),pm={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mm(e,t){return K(),U(`svg`,pm,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8`}),I(`path`,{d:`M3 3v5h5`})],-1)]])}var hm=L({name:`lucide-rotate-ccw`,render:mm}),gm=W({__name:`KeybindingsTable`,props:{rows:{type:Array,required:!0},busy:{type:Boolean,required:!0},resetKey:{type:String,required:!0},displayKey:{type:Function,required:!0},condition:{type:Function,required:!0}},emits:[`action`],setup(e,{expose:t,emit:n}){t();let r=n,i=M(),a=B(()=>i.value?.element??null),o=M(null),{height:s}=kf(o),c=M(0),l;E(s,e=>{l!==void 0&&cancelAnimationFrame(l),l=requestAnimationFrame(()=>{l=void 0,c.value=e})}),k(()=>{l!==void 0&&cancelAnimationFrame(l)});let u={emit:r,scrollArea:i,scrollElement:a,tableHeader:o,measuredHeaderHeight:s,headerHeight:c,get headerFrame(){return l},set headerFrame(e){l=e},rowKey:e=>`${e.command}:${e.index}`,UiScrollArea:Tp,UiTable:Op,UiVirtualList:nm,UiButton:q,UiEmpty:am,UiKbd:lm,get IconEdit(){return fm},get IconReset(){return hm},get IconRemove(){return Cn}};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}}),_m={ref:`tableHeader`},vm={key:0,class:`virtual-spacer`,"aria-hidden":`true`},ym=[`data-index`,`data-virtual-index`,`aria-rowindex`,`data-command`,`onDblclick`],bm=[`disabled`,`aria-label`,`onClick`],xm={key:1,class:`muted`},Sm={class:`when`},Cm={class:`actions`},wm={key:0,class:`virtual-spacer`,"aria-hidden":`true`};function Tm(t,n,r,i,a,o){return K(),F(i.UiScrollArea,{ref:`scrollArea`,class:`table-scroll`},{default:e(()=>[y(i.UiTable,{"aria-rowcount":r.rows.length+1,"header-tone":`muted`,sticky:``,subtle:``,hover:``},{default:e(()=>[n[1]||=I(`colgroup`,null,[I(`col`,{class:`command-column`}),I(`col`,{class:`binding-column`}),I(`col`,{class:`when-column`}),I(`col`,{class:`source-column`}),I(`col`,{class:`actions-column`})],-1),I(`thead`,_m,[...n[0]||=[I(`tr`,null,[I(`th`,null,`Команда`),I(`th`,null,`Сочетание`),I(`th`,null,`Когда`),I(`th`,null,`Источник`),I(`th`,null,[I(`span`,{class:`u-sr-only`},`Действия`)])],-1)]],512),y(i.UiVirtualList,{items:r.rows,"item-key":i.rowKey,"scroll-element":i.scrollElement,"scroll-margin":i.headerHeight,"reset-key":r.resetKey,"estimate-size":72},{default:e(({rows:t,paddingAfter:n,measureElement:a})=>[I(`tbody`,null,[(K(!0),U(P,null,S(t,({item:t,index:n,key:o,gapBefore:s})=>(K(),U(P,{key:o},[s?(K(),U(`tr`,vm,[I(`td`,{colspan:`5`,style:Qe({height:`${s}px`})},null,4)])):D(`v-if`,!0),I(`tr`,{ref_for:!0,ref:a,"data-index":n,"data-virtual-index":n,"aria-rowindex":n+2,"data-command":t.command,onDblclick:e=>!r.busy&&i.emit(`action`,`edit`,t)},[I(`td`,null,[I(`span`,null,X(t.title),1),I(`small`,null,X(t.command),1)]),I(`td`,null,[I(`button`,{class:`binding`,disabled:r.busy,"aria-label":`Изменить сочетание: ${t.command}`,onClick:e=>i.emit(`action`,`edit`,t)},[t.rule&&!t.rule.disabled?(K(),F(i.UiKbd,{key:0},{default:e(()=>[G(X(r.displayKey(t.rule.key)),1)]),_:2},1024)):(K(),U(`span`,xm,`Не назначено`))],8,bm)]),I(`td`,Sm,X(r.condition(t.rule)),1),I(`td`,null,X(t.custom?`Пользователь`:`По умолчанию`),1),I(`td`,Cm,[y(i.UiButton,{shape:`icon`,size:`sm`,disabled:r.busy,"aria-label":`Изменить: ${t.command}`,title:`Изменить сочетание`,onClick:e=>i.emit(`action`,`edit`,t)},{default:e(()=>[y(i.IconEdit)]),_:1},8,[`disabled`,`aria-label`,`onClick`]),t.rule&&!t.rule.disabled?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,disabled:r.busy,"aria-label":`Удалить: ${t.command}`,title:`Удалить привязку`,onClick:e=>i.emit(`action`,`remove`,t)},{default:e(()=>[y(i.IconRemove)]),_:1},8,[`disabled`,`aria-label`,`onClick`])):D(`v-if`,!0),t.custom?(K(),F(i.UiButton,{key:1,shape:`icon`,size:`sm`,disabled:r.busy,"aria-label":`Сбросить: ${t.command}`,title:`Восстановить стандартные привязки команды`,onClick:e=>i.emit(`action`,`reset`,t)},{default:e(()=>[y(i.IconReset)]),_:1},8,[`disabled`,`aria-label`,`onClick`])):D(`v-if`,!0)])],40,ym)],64))),128)),n?(K(),U(`tr`,wm,[I(`td`,{colspan:`5`,style:Qe({height:`${n}px`})},null,4)])):D(`v-if`,!0)])]),_:1},8,[`items`,`scroll-element`,`scroll-margin`,`reset-key`])]),_:1},8,[`aria-rowcount`]),r.rows.length?D(`v-if`,!0):(K(),F(i.UiEmpty,{key:0},{default:e(()=>[...n[2]||=[G(`Команды не найдены`,-1)]]),_:1}))]),_:1},512)}var Em=H(gm,[[`render`,Tm],[`__scopeId`,`data-v-1a9a9d45`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/ide/ui/KeybindingsTable.vue`]]),Dm=W({__name:`UiDialogActions`,setup(e,{expose:t}){t();let n={UiInline:Be};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function Om(t,n,r,i,a,o){return K(),F(i.UiInline,{class:`actions`,align:`normal`,justify:`flex-end`},{default:e(()=>[c(t.$slots,`default`,{},void 0,!0)]),_:3})}var km=H(Dm,[[`render`,Om],[`__scopeId`,`data-v-c33d7a1f`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiDialogActions.vue`]]),Am=W({__name:`KeybindingsEditor`,props:{embedded:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let{api:n,revision:r}=yp(),i=M(``),a=M(!1),o=M(!1),s=M(``),c=M(``),l=M(``),u=M(),d=M(),m=M(``),h=M(),g=B(()=>{r.value;let e=new Map(n.getCommands().map(e=>[e.id,e.title])),t=n.getDefaultKeybindings(),o=n.getKeybindingOverrides();for(let n of[...t,...o])e.has(n.command)||e.set(n.command,n.command);let s=i.value.trim().toLocaleLowerCase();return[...e].flatMap(([e,n])=>{let r=o.some(t=>t.command===e),i=(r?o:t).filter(t=>t.command===e);return(i.length?i:[void 0]).map((t,i)=>({command:e,title:n,rule:t,index:i,custom:r}))}).filter(e=>(!a.value||e.custom)&&`${e.title} ${e.command} ${_(e.rule?.key)} ${v(e.rule)}`.toLocaleLowerCase().includes(s)).sort((e,t)=>e.title.localeCompare(t.title,`ru`)||e.command.localeCompare(t.command))});Tn(()=>{let e=h.value;return{note:`Горячие клавиши`,text:Nn(i.value?`Поиск: «${i.value}»`:``,`Только изменённые: ${a.value?`да`:`нет`}`,`Показано строк: ${g.value.length}`,`Пользовательских привязок: ${n.getKeybindingOverrides().length}`,e?`Изменить: ${e.title} (${e.command})`:``,e?`Новое сочетание: ${_(m.value)||`не задано`}`:``,o.value?`Сохранение и загрузка…`:``,c.value?`Статус: ${c.value}`:``,s.value?`Ошибка: ${s.value}`:``)}});function _(e){return e?.replace(/Mod/g,navigator.platform.includes(`Mac`)?`Meta`:`Ctrl`).replace(/ /g,`Space`)??``}function v(e){return Object.entries(e?.when??{}).map(([e,t])=>`${e} = ${t}`).join(` · `)||`В области команды`}async function y(e){if(o.value)return!1;o.value=!0,s.value=``,c.value=``;try{return await n.saveKeybindings(e),c.value=`Сохранено`,!0}catch(e){return s.value=e instanceof Error?e.message:String(e),!1}finally{o.value=!1}}function b(e){let t=J(e),n=g.value.find(e=>e.command===t.command&&e.index===t.index);if(!n)throw Error(`Привязка не найдена`);return n}let x=Je(`keybindings:${V()}`,()=>({surface:`keybindings`}));for(let[e,t,n]of[[`edit`,`Изменить сочетание клавиш`,e=>C(b(e))],[`remove`,`Удалить сочетание клавиш`,e=>E(b(e))],[`reset`,`Сбросить сочетания команды`,e=>D(b(e))],[`save`,`Сохранить сочетание клавиш`,()=>T()]])x.scope.registerCommand({id:`ide.keybindings.${e}`,palette:!1,title:t,run:n,enabled:()=>!o.value});function S(e,t){x.run(`ide.keybindings.${e}`,t&&{command:t.command,index:t.index})}async function C(e){h.value=e,m.value=``,await p(),u.value?.open(),d.value?.focus()}function w(e){if(e.key===`Tab`||e.key===`Escape`)return;e.preventDefault(),e.stopPropagation();let t=Lf(e);t&&(m.value=t)}async function T(){let e=h.value;e&&m.value&&await y(If(n.getDefaultKeybindings(),n.getKeybindingOverrides(),e.command,e.index,m.value))&&u.value?.close()}async function E(e){await y(If(n.getDefaultKeybindings(),n.getKeybindingOverrides(),e.command,e.index,null))}async function D(e){await y(n.getKeybindingOverrides().filter(t=>t.command!==e.command))}f(async()=>{o.value=!0;try{l.value=(await n.reloadKeybindings()).path}catch(e){s.value=e instanceof Error?e.message:String(e)}finally{o.value=!1}});let O={api:n,revision:r,search:i,customOnly:a,busy:o,error:s,status:c,path:l,dialog:u,recorder:d,shortcut:m,editing:h,rows:g,displayKey:_,condition:v,persist:y,commandRow:b,commands:x,run:S,startEdit:C,record:w,accept:T,remove:E,reset:D,UiPanel:sn,UiInline:Be,UiControl:Se,KeybindingsTable:Em,UiButton:q,UiDialog:un,UiDialogActions:km,UiHint:we,UiKbd:lm};return Object.defineProperty(O,"__isScriptSetup",{enumerable:!1,value:!0}),O}}),jm={key:0},Mm={key:1},Nm={class:`filters`},Pm={key:0,class:`message error`,role:`alert`},Fm={class:`message`,role:`status`},Im=[`title`],Lm=[`disabled`],Rm={key:1},zm={key:0,class:`error`,role:`alert`};function Bm(t,n,r,i,a,o){return K(),F(i.UiPanel,{class:Y([`keybindings-editor`,{embedded:r.embedded}]),"aria-label":`Настройки горячих клавиш`,"aria-busy":i.busy,onFocusin:n[6]||=e=>i.commands.scope.activate(),onKeydown:i.commands.keydown},{default:e(()=>[I(`header`,null,[r.embedded?D(`v-if`,!0):(K(),U(`h2`,jm,`Горячие клавиши`)),r.embedded?D(`v-if`,!0):(K(),U(`p`,Mm,`Сочетания клавиш для команд IDE`)),y(i.UiControl,{modelValue:i.search,"onUpdate:modelValue":n[0]||=e=>i.search=e,type:`search`,"aria-label":`Поиск горячих клавиш`,placeholder:`Найти команду или сочетание клавиш…`},null,8,[`modelValue`]),I(`div`,Nm,[y(i.UiInline,{as:`label`,justify:`normal`},{default:e(()=>[y(i.UiControl,{modelValue:i.customOnly,"onUpdate:modelValue":n[1]||=e=>i.customOnly=e,type:`checkbox`},null,8,[`modelValue`]),n[7]||=G(` Только изменённые`,-1)]),_:1}),I(`span`,null,X(i.rows.length)+` команд и привязок`,1)])]),i.error?(K(),U(`p`,Pm,X(i.error),1)):D(`v-if`,!0),I(`p`,Fm,X(i.busy?`Сохранение и загрузка…`:i.status),1),y(i.KeybindingsTable,{rows:i.rows,busy:i.busy,"reset-key":`${i.search}:${i.customOnly}`,"display-key":i.displayKey,condition:i.condition,onAction:i.run},null,8,[`rows`,`busy`,`reset-key`]),I(`footer`,{class:`u-truncate`,title:i.path},` Изменения применяются сразу`+X(i.path?` · ${i.path}`:``),9,Im),y(i.UiDialog,{ref:`dialog`,labelledby:`keybinding-dialog-title`,onCancel:n[4]||=e=>i.busy&&e.preventDefault(),onKeydown:n[5]||=N(()=>{},[`stop`])},{default:e(()=>[I(`form`,{onSubmit:n[3]||=N(e=>i.run(`save`),[`prevent`])},[n[11]||=I(`h3`,{id:`keybinding-dialog-title`},`Новое сочетание клавиш`,-1),I(`p`,null,X(i.editing?.title),1),I(`small`,null,X(i.editing?.command),1),I(`button`,{ref:`recorder`,type:`button`,class:`recorder`,"aria-label":`Записать сочетание клавиш`,disabled:i.busy,onKeydown:i.record},[i.shortcut?(K(),F(i.UiKbd,{key:0},{default:e(()=>[G(X(i.displayKey(i.shortcut)),1)]),_:1})):(K(),U(`span`,Rm,`Нажмите сочетание клавиш`))],40,Lm),y(i.UiHint,null,{default:e(()=>[...n[8]||=[G(`Tab — перейти к кнопкам · Esc — отменить`,-1)]]),_:1}),i.error?(K(),U(`p`,zm,X(i.error),1)):D(`v-if`,!0),y(i.UiDialogActions,null,{default:e(()=>[y(i.UiButton,{disabled:i.busy,onClick:n[2]||=e=>i.dialog?.close()},{default:e(()=>[...n[9]||=[G(`Отмена`,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{appearance:`solid`,type:`submit`,disabled:i.busy||!i.shortcut},{default:e(()=>[...n[10]||=[G(`Сохранить`,-1)]]),_:1},8,[`disabled`])]),_:1})],32)]),_:1},512)]),_:1},8,[`class`,`aria-busy`,`onKeydown`])}var Vm=H(Am,[[`render`,Bm],[`__scopeId`,`data-v-27126cb4`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/ide/ui/KeybindingsEditor.vue`]]),Hm=W({__name:`CommandPalette`,setup(e,{expose:t}){t();let{api:n,palette:r,reportError:i}=yp(),a=Rr(),o=M(),s=B(()=>o.value?.element),c=M(),l=M(``),u=M(-1),d=B(()=>{let e=l.value.trim().replace(/^>\s*/,``).toLocaleLowerCase().split(/\s+/).filter(Boolean);return(r.value?.commands??[]).filter(t=>e.every(e=>`${t.title} ${t.id} ${t.group}`.toLocaleLowerCase().includes(e)))});function f(e=!0){let t=r.value?.trigger;r.value=null,s.value?.close(),e&&t?.isConnected&&t.focus({preventScroll:!0})}async function m(){await p(),s.value?.querySelector(`[aria-selected="true"]`)?.scrollIntoView({block:`nearest`})}E(d,()=>{u.value=d.value.findIndex(e=>e.enabled),m()}),E(r,async e=>{e&&(l.value=``,u.value=d.value.findIndex(e=>e.enabled),await p(),s.value?.showModal(),c.value?.focus())}),E(()=>a.fullPath,()=>f(!1));function h(e){let t=d.value.flatMap((e,t)=>e.enabled?[t]:[]);if(!t.length)return;let n=t.indexOf(u.value);u.value=t[(n+e+t.length)%t.length],m()}async function g(e=u.value){let t=d.value[e];if(t?.enabled){f(),await p();try{await n.executeCommand(t.id,void 0,{scope:t.scope})}catch(e){i(e)}}}function _(e){e.target!==c.value?.element||e.isComposing||e.keyCode===229||(e.key===`ArrowDown`||e.key===`ArrowUp`?(e.preventDefault(),h(e.key===`ArrowDown`?1:-1)):e.key===`Enter`&&(e.preventDefault(),g()))}function v(e){if(e.target!==s.value)return;let t=s.value.getBoundingClientRect();(e.clientX<t.left||e.clientX>t.right||e.clientY<t.top||e.clientY>t.bottom)&&f()}let y={api:n,palette:r,reportError:i,route:a,dialogRef:o,dialog:s,input:c,query:l,selected:u,results:d,close:f,revealSelected:m,move:h,execute:g,keydown:_,backdrop:v,UiActionRow:wl,UiControl:Se,UiInline:Be,UiDialog:un,UiEmpty:am,UiKbd:lm};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}}),Um={id:`command-palette-results`,role:`listbox`,"aria-label":`Команды IDE`},Wm=[`id`,`aria-selected`,`aria-disabled`,`data-command`,`onPointermove`],Gm={class:`description`},Km={class:`title`},qm={key:1,class:`unavailable-label`};function Jm(t,n,r,i,a,o){return K(),F(i.UiDialog,{ref:`dialogRef`,class:`command-palette`,align:`top`,width:`660px`,label:`Командный центр`,onKeydown:i.keydown,onCancel:n[2]||=N(e=>i.close(),[`prevent`]),onClose:n[3]||=e=>i.palette&&i.close(),onClick:i.backdrop},{default:e(()=>[y(i.UiInline,{class:`search`,gap:3,justify:`normal`},{default:e(()=>[n[4]||=I(`span`,{"aria-hidden":`true`},`>`,-1),y(i.UiControl,{ref:`input`,modelValue:i.query,"onUpdate:modelValue":n[0]||=e=>i.query=e,name:`command-query`,role:`combobox`,"aria-label":`Найти команду`,"aria-autocomplete":`list`,"aria-expanded":`true`,"aria-controls":`command-palette-results`,"aria-activedescendant":i.selected>=0?`palette-option-${i.selected}`:void 0,placeholder:`Введите название или ID команды…`,autocomplete:`off`},null,8,[`modelValue`,`aria-activedescendant`]),I(`button`,{"aria-label":`Закрыть командный центр`,title:`Закрыть (Esc)`,onClick:n[1]||=e=>i.close()},` × `)]),_:1}),I(`ul`,Um,[(K(!0),U(P,null,S(i.results,(t,n)=>(K(),U(`li`,{id:`palette-option-${n}`,key:`${t.scope}:${t.id}`,role:`option`,"aria-selected":i.selected===n,"aria-disabled":!t.enabled,"data-command":t.id,class:Y({selected:i.selected===n,unavailable:!t.enabled}),onPointermove:e=>t.enabled&&(i.selected=n)},[y(i.UiActionRow,{class:`palette-row`,interaction:`selection`,radius:`none`,padding:`var(--sp-2) var(--sp-3)`,disabled:!t.enabled,tabindex:`-1`,onClick:e=>i.execute(n)},{default:e(()=>[I(`span`,Gm,[I(`span`,Km,X(t.group)+`: `+X(t.title),1),I(`small`,null,X(t.id),1)]),t.shortcut?(K(),F(i.UiKbd,{key:0},{default:e(()=>[G(X(t.shortcut),1)]),_:2},1024)):D(`v-if`,!0),t.enabled?D(`v-if`,!0):(K(),U(`span`,qm,`Недоступно`))]),_:2},1032,[`disabled`,`onClick`])],42,Wm))),128))]),i.results.length?D(`v-if`,!0):(K(),F(i.UiEmpty,{key:0,role:`status`},{default:e(()=>[...n[5]||=[G(`Команды не найдены`,-1)]]),_:1})),y(i.UiInline,{as:`footer`,align:`normal`,justify:`between`,gap:3},{default:e(()=>[n[6]||=I(`span`,null,`↑ ↓ выбор · Enter запуск · Esc закрыть`,-1),I(`span`,null,X(i.results.length)+` команд`,1)]),_:1})]),_:1},512)}var Ym=H(Hm,[[`render`,Jm],[`__scopeId`,`data-v-7fac3e6f`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/ide/ui/CommandPalette.vue`]]),Xm=W({__name:`ContextMenu`,props:{items:{type:Array,required:!0},label:{type:String,required:!1}},setup(e,{expose:t}){let n=e,r=Pf(),i=Ff({anchor:`left`,initialFocus:`.sheet-items button:not(:disabled)`,items:`.sheet-items button`}),a=M(),o=B(()=>a.value?.element),s=B(()=>n.label||`Действия`),c=`--context-${V().replace(/[^a-z0-9-]/gi,``)}`,l=M({x:0,y:0}),u,d=!1,f=0,m;function h(e=!0){f++,m?.(),d=e,o.value?.hidePopover(),i.close(!1),r.value&&e&&u?.isConnected&&u.focus()}function _(e){return!(e instanceof MouseEvent)||!(e.buttons!==0||r.value&&document.querySelector(`:active`))?Promise.resolve():new Promise(e=>{let t=()=>{m===t&&(window.removeEventListener(`pointerup`,t),window.removeEventListener(`pointercancel`,t),m=void 0,setTimeout(e,0))};m=t,window.addEventListener(`pointerup`,t),window.addEventListener(`pointercancel`,t)})}async function v(e,t){e.preventDefault(),e.stopPropagation(),d=!1,u=t??e.currentTarget;let n=u.getBoundingClientRect();u=u.querySelector(`[role="tab"]`)??u;let a=e instanceof MouseEvent&&(e.clientX!==0||e.clientY!==0);l.value={x:Math.max(4,Math.min(a?e.clientX:n.left+12,window.innerWidth-4)),y:Math.max(4,Math.min(a?e.clientY:n.bottom,window.innerHeight-4))};let s=++f;await _(e),await p(),s===f&&(r.value?(i.open.value&&i.close(!1),i.trigger.value=u,await i.toggle(!0)):(o.value?.showPopover({source:u}),await p(),o.value?.querySelector(`button:not(:disabled)`)?.focus()))}function y(e){e.newState===`closed`&&(d&&u?.isConnected&&u.focus(),d=!1)}function b(e){if(e.key===`Escape`||e.key===`Tab`){e.key===`Escape`&&e.preventDefault(),h();return}let t=[...o.value.querySelectorAll(`button:not(:disabled)`)],n=t.indexOf(document.activeElement),r;if(e.key===`ArrowDown`)r=(n+1)%t.length;else if(e.key===`ArrowUp`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else{e.key.length===1&&!e.ctrlKey&&!e.metaKey&&[...t.slice(n+1),...t.slice(0,n+1)].find(t=>t.textContent?.trim().toLocaleLowerCase().startsWith(e.key.toLocaleLowerCase()))?.focus();return}e.preventDefault(),t[r]?.focus()}function x(e){h(!1),u?.isConnected&&u.focus(),e.run()}function S(e){r.value||e.type===`scroll`&&e.target instanceof Node&&o.value?.contains(e.target)||h(!1)}E(r,()=>h(!1)),window.addEventListener(`resize`,S),window.addEventListener(`blur`,S),window.addEventListener(`scroll`,S,!0),g(()=>{h(!1),window.removeEventListener(`resize`,S),window.removeEventListener(`blur`,S),window.removeEventListener(`scroll`,S,!0)});function C(e){return v(new KeyboardEvent(`keydown`),e)}t({open:v,openForElement:C,close:h});function w(e){return e===`spare`?`info`:e===`hot`?`warning`:e===`over`?`danger`:`neutral`}let T={props:n,compact:r,island:i,surface:a,menu:o,title:s,anchorName:c,point:l,get trigger(){return u},set trigger(e){u=e},get restoreFocus(){return d},set restoreFocus(e){d=e},get opening(){return f},set opening(e){f=e},get releaseListener(){return m},set releaseListener(e){m=e},close:h,waitForRelease:_,open:v,toggle:y,keydown:b,activate:x,dismiss:S,openForElement:C,hintTone:w,UiPopupSurface:Fd,UiBadge:kd,UiActionRow:wl,UiIsland:Yd,UiIslandHeader:Cd};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}}),Zm=[`aria-label`],Qm={key:0,role:`separator`,class:`menu-separator`},$m={class:`item-label`},eh={key:0,role:`separator`,class:`menu-separator`},th={class:`item-label`},nh={key:1};function rh(t,n,r,i,a,o){return i.compact?(K(),F(i.UiIsland,{key:0,menu:i.island,label:i.title,width:320},{default:e(()=>[y(i.UiIslandHeader,{class:`island-head`,"aria-label":`Закрыть`,onClick:n[0]||=e=>i.close()},{default:e(()=>[G(X(i.title),1)]),_:1}),I(`div`,{class:`sheet-items`,role:`menu`,"aria-label":i.title},[(K(!0),U(P,null,S(r.items,t=>(K(),U(P,{key:t.id},[t.separator?(K(),U(`div`,Qm)):D(`v-if`,!0),y(i.UiActionRow,{class:`sheet-item`,role:`menuitem`,justify:`between`,disabled:t.disabled,tone:t.danger?`danger`:void 0,"data-command":t.command,onClick:e=>i.activate(t)},{default:e(()=>[I(`span`,$m,[t.icon?(K(),F(C(t.icon),{key:0,"aria-hidden":`true`})):D(`v-if`,!0),G(X(t.label),1)]),t.hint?(K(),F(i.UiBadge,{key:0,class:`hint`,mono:``,shrink:``,tone:i.hintTone(t.hint.tone)},{default:e(()=>[G(X(t.hint.text),1)]),_:2},1032,[`tone`])):D(`v-if`,!0)]),_:2},1032,[`disabled`,`tone`,`data-command`,`onClick`])],64))),128))],8,Zm)]),_:1},8,[`menu`,`label`])):(K(),F(fe,{key:1,to:`body`},[I(`span`,{class:`context-anchor`,style:Qe({left:`${i.point.x}px`,top:`${i.point.y}px`,anchorName:i.anchorName})},null,4),y(i.UiPopupSurface,{ref:`surface`,border:`strong`,radius:`md`,surface:`tertiary`,popover:`auto`,role:`menu`,class:`context-menu`,"aria-label":i.title,style:Qe({positionAnchor:i.anchorName}),onToggle:i.toggle,onKeydown:i.keydown,onContextmenu:n[1]||=N(()=>{},[`prevent`,`stop`])},{default:e(()=>[(K(!0),U(P,null,S(r.items,t=>(K(),U(P,{key:t.id},[t.separator?(K(),U(`div`,eh)):D(`v-if`,!0),y(i.UiActionRow,{class:`menu-item`,role:`menuitem`,"data-command":t.command,disabled:t.disabled,tone:t.danger?`danger`:void 0,gap:1.5,justify:`between`,onClick:e=>i.activate(t)},{default:e(()=>[I(`span`,th,[t.icon?(K(),F(C(t.icon),{key:0,"aria-hidden":`true`})):D(`v-if`,!0),G(X(t.label),1)]),t.hint?(K(),F(i.UiBadge,{key:0,class:`hint`,mono:``,shrink:``,tone:i.hintTone(t.hint.tone)},{default:e(()=>[G(X(t.hint.text),1)]),_:2},1032,[`tone`])):D(`v-if`,!0),t.shortcut?(K(),U(`kbd`,nh,X(t.shortcut),1)):D(`v-if`,!0)]),_:2},1032,[`data-command`,`disabled`,`tone`,`onClick`])],64))),128))]),_:1},8,[`aria-label`,`style`])]))}var ih=H(Xm,[[`render`,rh],[`__scopeId`,`data-v-7cfb188a`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/ContextMenu.vue`]]),ah=W({__name:`UiIslandLabel`,props:{divided:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function oh(e,t,n,r,i,a){return K(),U(`div`,{class:Y([`island-label`,{divided:n.divided}])},[c(e.$slots,`default`,{},void 0,!0)],2)}var sh=H(ah,[[`render`,oh],[`__scopeId`,`data-v-ed2da51b`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiIslandLabel.vue`]]),ch=W({__name:`UiIslandFooter`,props:{variant:{type:String,required:!1},hideOnCompact:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function lh(e,t,n,r,i,a){return K(),U(`footer`,{class:Y([`island-footer`,[n.variant??`padded`,{"hide-compact":n.hideOnCompact}]])},[c(e.$slots,`default`,{},void 0,!0)],2)}var uh=H(ch,[[`render`,lh],[`__scopeId`,`data-v-f3689f5f`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiIslandFooter.vue`]]),dh={favorites:`Избранное`,running:`Работает`,recent:`Недавние`,projects:`Проекты`,disk:`На диске`,apps:`Приложения`};function fh(e=``){async function t(t,n,r){let i=await fetch(e+t,{method:n===void 0?`GET`:`POST`,headers:n===void 0?void 0:{"Content-Type":`application/json`},body:n===void 0?void 0:JSON.stringify(n),signal:r??AbortSignal.timeout(15e3)}),a=await i.json();if(!i.ok)throw Error(a.error||`Ошибка запроса (${i.status})`);return a}return{search:(e,n,r)=>{let i=new URLSearchParams({q:e});return r?.disk===!1&&i.set(`disk`,`0`),t(`/api/launcher/search?${i}`,void 0,n)},launch:(e,n,r=!1,i)=>t(`/api/launcher/launch`,{id:e,action:n,inline:r,arg:i}),detail:(e,n)=>t(`/api/launcher/detail?id=${encodeURIComponent(e)}`,void 0,n),subscribe(t){let n=new AbortController;return(async()=>{for(;!n.signal.aborted;){try{let r=await fetch(`${e}/api/events`,{signal:n.signal});if(!r.ok||!r.body)throw Error(String(r.status));let i=r.body.pipeThrough(new TextDecoderStream).getReader(),a=``;for(;;){let{value:e,done:n}=await i.read();if(n)break;a+=e;let r;for(;(r=a.indexOf(`
|
|
12
|
-
|
|
13
|
-
`))>=0;){let e=a.slice(0,r);a=a.slice(r+2),/^event: status$/m.test(e)&&t()}}}catch{}n.signal.aborted||await new Promise(e=>setTimeout(e,2e3))}})(),()=>n.abort()},hide:()=>t(`/api/app/hide`,{}),open:(e=!1,n)=>t(`/api/app/open`,{toggle:e,mode:n}),quit:()=>t(`/api/app/quit`,{}),restart:()=>t(`/api/app/restart`,{})}}function ph(e){let t={query:``,focus:null,detail:null,detailLoading:!1,detailReady:!1,items:[],selected:0,loading:!0,busy:!1,error:``,warning:``,notice:``,route:``},n=new Set,r=0,i,a,o=!1,s=()=>{if(!o)for(let e of n)e({...t})},c,l=()=>{c?.abort(),t.focus=null,t.detail=null,t.detailReady=!1,t.detailLoading=!1},u=()=>{r++,clearTimeout(i),a?.abort()};async function d(n=!1){u();let i=r;a=new AbortController,n||(t.loading=!0),t.error=``,s();try{let n=await e.search(t.query,AbortSignal.any([a.signal,AbortSignal.timeout(15e3)]));if(o||i!==r)return;t.items=n.items,t.warning=n.warning??``,t.selected=0}catch(e){!o&&i===r&&(t.items=[],t.selected=0,t.warning=``,t.error=e instanceof Error?e.message:`Не удалось выполнить поиск`)}finally{!o&&i===r&&(t.loading=!1,s())}}let f,p;async function m(){if(o||t.busy||t.loading)return;let n=t.items[t.selected]?.id,r=t.focus;await d(!0);let i=t.items.findIndex(e=>e.id===n);if(i>=0&&!o&&(t.selected=i,s()),r&&t.focus?.id===r.id)try{let n=await e.detail(r.id,AbortSignal.timeout(15e3));!o&&t.focus?.id===r.id&&(t.detail=n,t.detailReady=!0,s())}catch{}}return{get state(){return t},subscribe(e){return n.add(e),e({...t}),()=>{n.delete(e)}},search:d,refresh:m,live(t){f?.(),f=void 0,clearTimeout(p),t&&!o&&e.subscribe&&(f=e.subscribe(()=>{clearTimeout(p),p=setTimeout(()=>void m(),150)}))},setQuery(e){l(),t.query=e,t.notice=``,u(),t.loading=!0,s(),i=setTimeout(()=>{d()},80)},select(e){t.selected=Math.max(0,Math.min(t.items.length-1,e)),s()},move(e){this.select(t.selected+e)},async enter(n=t.items[t.selected]){if(!n||t.busy||o)return!1;l(),t.focus=n,t.detail={actions:n.actions??[]},t.detailLoading=!0,t.error=``,c=new AbortController;let r=c;s();try{let i=await e.detail(n.id,AbortSignal.any([r.signal,AbortSignal.timeout(15e3)]));if(o||r.signal.aborted)return!0;t.detail=i,t.detailReady=!0}catch(e){!o&&!r.signal.aborted&&(t.error=e instanceof Error?e.message:`Не удалось загрузить действия`)}finally{!o&&!r.signal.aborted&&(t.detailLoading=!1,s())}return!0},leave(){l(),s()},async launch(n=t.items[t.selected],r,i=!1){let a=typeof r==`string`?n?.actions?.find(e=>e.id===r)??{id:r,title:``}:r??n?.actions?.[0];if(!n||t.busy||t.loading||o)return!1;t.busy=!0,t.error=``,t.notice=``,t.route=``,s();try{let r=await e.launch(n.id,a?.id,i,a?.arg);return!o&&(t.route=r?.route??``,t.notice=`${n.name} — ${a?.id===`favorite`?r?.favorite?`добавлено в избранное`:`убрано из избранного`:a?.id===`folder`?r?.favorite?`папка добавлена в избранные`:`папка убрана из избранных`:a?.id===`create`?`проект создан`:a?.id===`import`?`клонировано и добавлено`:a?.id===`open`?`открыто`:a?.id===`stop`?`остановлено`:`запущено`}`,!0)}catch(e){return t.error=e instanceof Error?e.message:`Не удалось запустить`,!1}finally{t.busy=!1,s()}},reportError(e){t.error=e instanceof Error?e.message:String(e),s()},dispose(){o=!0,c?.abort(),f?.(),clearTimeout(p),u(),n.clear()}}}var mh={projects:`Проекты`,github:`GitHub`,gitlab:`GitLab`,new:`Новый проект`},hh=/^https?:\/\/[^/\s]*gitlab[^/\s]*(?::\d+)?(?:\/|$)/i,gh=/^https?:\/\/(?:www\.)?github\.com(?:\/|$)/i;function _h(e){let[t=``,n=``]=e.split(/[?#]/)[0].split(`/`).filter(Boolean);return t?n?`${t}/${n.replace(/\.git$/i,``)}`:`${t}/`:``}function vh(e){let t=e.split(/[?#]/)[0].split(`/-/`)[0].split(`/`).filter(Boolean);if(!t.length)return``;let n=t.join(`/`).replace(/\.git$/i,``);return t.length>1?n:`${n}/`}function yh(e){let t=e.trimStart(),n=gh.exec(t);if(n)return{scope:`github`,text:_h(t.slice(n[0].length))};let r=hh.exec(t);return r?{scope:`gitlab`,text:vh(t.slice(r[0].length))}:/^gh\//i.test(t)?{scope:`github`,text:t.slice(3).trim()}:/^new\//i.test(t)?{scope:`new`,text:t.slice(4).trim()}:/^gl\//i.test(t)?{scope:`gitlab`,text:t.slice(3).trim()}:t.startsWith(`/`)?{scope:`projects`,text:t.slice(1).trim()}:{scope:`all`,text:e.trim()}}async function bh(e,t,n,r){return(r?.actions??(await e.detail(t.id)).actions).find(e=>e.id===n)}var xh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Sh(e,t){return K(),U(`svg`,xh,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m9 18l6-6l-6-6`},null,-1)]])}var Ch=L({name:`lucide-chevron-right`,render:Sh}),wh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Th(e,t){return K(),U(`svg`,wh,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M12 15V3m9 12v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`}),I(`path`,{d:`m7 10l5 5l5-5`})],-1)]])}var Eh=L({name:`lucide-download`,render:Th}),Dh={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Oh(e,t){return K(),U(`svg`,Dh,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`},null,-1)]])}var kh=L({name:`lucide-folder`,render:Oh}),Ah=W({__name:`PathDropdown`,props:{id:{type:String,required:!0},heading:{type:String,required:!0},editing:{type:Boolean,required:!0},remote:{type:Boolean,required:!1},entries:{type:Array,required:!0},selected:{type:Number,required:!0},loading:{type:Boolean,required:!0},error:{type:String,required:!0},truncated:{type:Boolean,required:!0},busy:{type:Boolean,required:!0}},emits:[`pick`],setup(e,{expose:t}){t();let n={UiPopupSurface:Fd,get IconChevronRight(){return Ch},get IconFolder(){return kh}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),jh={class:`dropdown-heading u-truncate`},Mh={key:0,class:`notice`,role:`status`},Nh={key:1,class:`notice error`,role:`alert`},Ph={key:2,class:`notice`},Fh=[`id`,`aria-label`],Ih=[`id`,`aria-selected`,`disabled`,`title`,`onClick`],Lh={class:`u-truncate`},Rh={key:3,class:`notice`};function zh(t,n,r,i,a,o){return K(),F(i.UiPopupSurface,{border:`line`,radius:`md`,class:`dropdown`},{default:e(()=>[I(`div`,jh,X(r.heading),1),r.loading?(K(),U(`p`,Mh,X(r.remote?`Читаю репозитории…`:`Читаю папки…`),1)):r.error?(K(),U(`p`,Nh,X(r.error),1)):r.entries.length?D(`v-if`,!0):(K(),U(`p`,Ph,X(r.remote?`Подходящих репозиториев нет`:r.editing?`Подходящих папок нет`:`Нет вложенных папок`),1)),I(`div`,{id:r.id,role:`listbox`,"aria-label":r.remote?`Доступные репозитории`:`Доступные папки`,class:`options`},[(K(!0),U(P,null,S(r.entries,(e,a)=>(K(),U(`button`,{id:`${r.id}-${a}`,key:e.path,role:`option`,"aria-selected":r.selected===a,class:Y({highlighted:r.selected===a}),disabled:r.busy,title:e.path,onPointerdown:n[0]||=N(()=>{},[`prevent`]),onClick:n=>t.$emit(`pick`,e.path)},[y(i.IconFolder,{"aria-hidden":`true`}),I(`span`,Lh,X(e.name),1),y(i.IconChevronRight,{"aria-hidden":`true`})],42,Ih))),128))],8,Fh),r.truncated?(K(),U(`p`,Rh,X(r.remote?`Первые 1000 репозиториев — уточните путь`:`Первые 1000 папок — уточните путь`),1)):D(`v-if`,!0)]),_:1})}var Bh=H(Ah,[[`render`,zh],[`__scopeId`,`data-v-2957c3a3`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/catalog/ui/PathDropdown.vue`]]);function Vh(){let e=M([]),t=M(-1),n=M(!1),r=M(``),i=M(!1),a,o=0,s;function c(){clearTimeout(s),++o,a?.abort(),n.value=!1}async function l(s,l){c();let u=o;a=new AbortController,n.value=!0,e.value=[],t.value=-1,r.value=``,i.value=!1;try{let t=await ku(s,l,a.signal);if(u!==o)return;e.value=t.entries,i.value=t.truncated}catch(e){u===o&&(r.value=e instanceof Error?e.message:`Не удалось прочитать папку`)}finally{u===o&&(n.value=!1)}}function u(i){c(),e.value=[],t.value=-1,r.value=``,n.value=!0,s=setTimeout(()=>void l(i,!0),100)}return g(c),{entries:e,selected:t,loading:n,error:r,truncated:i,invalidate:c,load:l,schedule:u}}var Hh=W({__name:`PathBar`,props:{path:{type:String,required:!0},navigate:{type:Function,required:!0}},setup(e,{expose:t}){t();let n=e,r=M(),i=M(),a=B(()=>i.value?.element),o=M(!1),s=M(``),c=M(null),l=M(!1),u=M(0),d=M(!0),f=V(),{entries:m,selected:h,loading:_,error:v,truncated:y,invalidate:b,load:x,schedule:S}=Vh(),C=!1,w=B(()=>ru(n.path)),T=B(()=>ru(s.value).kind!==`local`),D=B(()=>w.value.kind!==`local`),O=B(()=>ru(s.value).kind),k=B(()=>w.value.kind),A=B(()=>o.value||c.value!==null),j=Je(`path-bar:${f}`,()=>({surface:`path-bar`,path:n.path}));j.scope.registerCommand({id:`ide.project.path.suggestions`,title:`Выбрать соседний проект`,description:`Показывает папки локального пути или репозитории владельца GitHub. Повторный вызов закрывает список.`,arguments:{path:`Путь сегмента, например gh:/owner`},enabled:()=>!l.value,run:e=>{let{path:t}=J(e);if(typeof t!=`string`)throw Error(`Укажите путь сегмента`);return R(t)}});let{api:N,reportError:ee}=yp();function te(){let e=ru(n.path),t=e.kind===`gitlab`?`ide.gitlab.repository.clone.dialog`:`ide.github.repository.clone.dialog`,r=e.kind===`gitlab`?`gitlab-clone:${n.path}`:`github-clone:${n.path}`;N.executeCommand(t,void 0,{scope:r}).catch(ee)}let P=B(()=>{let e=ru(n.path);return e.kind===`github`?`gh:/${e.repository.split(`/`)[0]}`:``}),ne=B(()=>{let e=ru(c.value??s.value).kind;return e===`github`||e===`gitlab`}),F=B(()=>fu(ru(n.path))),I=B(()=>m.value[h.value<0?0:h.value]),re=B(()=>{if(!o.value||!d.value||!I.value)return``;let e=T.value?I.value.path.split(`/`).pop()??I.value.name:I.value.name,t=Math.max(s.value.lastIndexOf(`/`),s.value.lastIndexOf(`\\`)),n=s.value.slice(t+1),r=s.value.includes(`\\`)?`\\`:`/`;return s.value===`~`?``:(T.value?e.toLowerCase().startsWith(n.toLowerCase()):e.startsWith(n))?e.slice(n.length)+(T.value?``:r):``});async function ie(e=n.path){l.value||(c.value=null,o.value=!0,s.value=e,u.value=0,d.value=!0,await p(),a.value?.focus(),a.value?.setSelectionRange(e.length,e.length),x(e,!0))}function L(){l.value||(b(),o.value=!1,c.value=null,v.value=``)}async function R(e){if(l.value)return;if(c.value===e){L();return}o.value=!1,c.value=e;let t=ru(e),n=t.kind===`github`?`gh:/${t.repository.split(`/`)[0]||P.value.slice(4)}`:e;await x(n,!1)}function z(){u.value=a.value?.scrollLeft??0,d.value=a.value?.selectionStart===s.value.length&&a.value?.selectionEnd===s.value.length}function ae(){z(),S(s.value)}async function oe(){re.value&&(s.value+=re.value,await p(),a.value?.setSelectionRange(s.value.length,s.value.length),z(),x(s.value,!0))}async function se(e){if(!l.value){b(),l.value=!0,v.value=``;try{let t=await Du(e);if(C)return;await n.navigate(t.path),l.value=!1,L(),await p(),r.value?.querySelector(`.segment:last-of-type .segment-label`)?.focus()}catch(e){v.value=e instanceof Error?e.message:`Не удалось открыть папку`}finally{l.value=!1,o.value&&!C&&(await p(),a.value?.focus())}}}function ce(e){e.isComposing||l.value||(e.key===`Escape`?(e.preventDefault(),L()):e.key===`ArrowDown`||e.key===`ArrowUp`?(e.preventDefault(),m.value.length&&(h.value=(h.value+(e.key===`ArrowDown`?1:h.value<0?0:-1)+m.value.length)%m.value.length,p(()=>document.getElementById(`${f}-${h.value}`)?.scrollIntoView({block:`nearest`})))):o.value&&(e.key===`Tab`&&!e.shiftKey||e.key===`ArrowRight`&&d.value)&&re.value?(e.preventDefault(),oe()):e.key===`Enter`&&(o.value||h.value>=0)&&(e.preventDefault(),se(h.value>=0&&I.value?I.value.path:s.value)))}async function le(e){e.relatedTarget instanceof Node&&r.value?.contains(e.relatedTarget)||(await p(),!r.value?.contains(document.activeElement)&&L())}E(()=>n.path,()=>{l.value||L()}),E(re,async()=>{await p(),a.value&&d.value&&(a.value.scrollLeft=a.value.scrollWidth-a.value.clientWidth),z()}),E([()=>n.path,o],async()=>{await p();let e=r.value?.querySelector(`.segments`);e&&(e.scrollLeft=e.scrollWidth)},{immediate:!0}),g(()=>{C=!0});let ue={props:n,root:r,inputControl:i,input:a,editing:o,value:s,menuPath:c,busy:l,scroll:u,caretAtEnd:d,listId:f,entries:m,selected:h,loading:_,error:v,truncated:y,invalidate:b,load:x,schedule:S,get disposed(){return C},set disposed(e){C=e},project:w,remoteInput:T,remoteProject:D,remoteKind:O,projectKind:k,open:A,commands:j,api:N,reportError:ee,openClone:te,githubOwnerPath:P,listingRemote:ne,segments:F,candidate:I,completion:re,edit:ie,close:L,toggle:R,syncCaret:z,changed:ae,accept:oe,navigate:se,keydown:ce,focusout:le,UiControl:Se,get IconChevronRight(){return Ch},get IconDownload(){return Eh},get IconFolder(){return kh},PathDropdown:Bh};return Object.defineProperty(ue,"__isScriptSetup",{enumerable:!1,value:!0}),ue}}),Uh=[`aria-busy`],Wh={key:0,class:`segments`},Gh=[`title`,`disabled`,`onClick`],Kh=[`disabled`],qh=[`aria-label`,`aria-expanded`,`aria-controls`,`disabled`,`onClick`],Jh=[`disabled`],Yh={key:1,class:`input-wrap`},Xh={class:`completion`,"aria-hidden":`true`},Zh={class:`typed`},Qh={key:2,class:`key-hint`,"aria-hidden":`true`};function $h(e,t,n,r,i,a){return K(),U(`div`,{ref:`root`,class:`path-bar`,"aria-busy":r.busy,onKeydown:r.keydown,onFocusout:r.focusout},[y(r.IconFolder,{class:`path-icon`,"aria-hidden":`true`}),r.editing?(K(),U(`div`,Yh,[I(`div`,Xh,[I(`span`,{style:Qe({transform:`translateX(${-r.scroll}px)`})},[I(`span`,Zh,X(r.value),1),G(X(r.completion),1)],4)]),y(r.UiControl,{ref:`inputControl`,modelValue:r.value,"onUpdate:modelValue":t[1]||=e=>r.value=e,role:`combobox`,"aria-label":r.remoteKind===`gitlab`?`Проект GitLab`:r.remoteInput?`Репозиторий GitHub`:`Путь к папке`,"aria-autocomplete":`both`,"aria-expanded":r.open,"aria-controls":r.listId,"aria-activedescendant":r.selected>=0?`${r.listId}-${r.selected}`:void 0,disabled:r.busy,style:Qe({paddingRight:r.completion?`${Math.min(r.completion.length,20)}ch`:void 0}),autocomplete:`off`,spellcheck:`false`,onInput:r.changed,onScroll:r.syncCaret,onClick:r.syncCaret,onKeyup:r.syncCaret,onSelect:r.syncCaret},null,8,[`modelValue`,`aria-label`,`aria-expanded`,`aria-controls`,`aria-activedescendant`,`disabled`,`style`])])):(K(),U(`div`,Wh,[(K(!0),U(P,null,S(r.segments,e=>(K(),U(`span`,{key:e.path,class:`segment`},[I(`button`,{class:`segment-label`,title:e.path,disabled:r.busy,onClick:t=>r.edit(e.path)},X(e.name),9,Gh),r.remoteProject&&e.path===n.path?(K(),U(`button`,{key:0,class:`clone-trigger`,title:`Клонировать репозиторий`,"aria-label":`Клонировать репозиторий`,"aria-haspopup":`dialog`,disabled:r.busy,onClick:r.openClone},[y(r.IconDownload,{"aria-hidden":`true`})],8,Kh)):e.path===`gl:/`?D(`v-if`,!0):(K(),U(`button`,{key:1,class:`segment-arrow`,"aria-label":r.projectKind===`github`?`Репозитории ${r.githubOwnerPath.slice(4)} (${e.name})`:r.projectKind===`gitlab`?`Проект GitLab ${e.path}`:`Папки в ${e.path}`,"aria-expanded":r.menuPath===e.path,"aria-haspopup":`listbox`,"aria-controls":r.listId,disabled:r.busy,onClick:t=>r.commands.run(`ide.project.path.suggestions`,{path:e.path})},[y(r.IconChevronRight,{"aria-hidden":`true`})],8,qh))]))),128)),I(`button`,{class:`edit-space`,"aria-label":`Ввести путь`,disabled:r.busy,onClick:t[0]||=e=>r.edit()},null,8,Jh)])),r.editing?(K(),U(`span`,Qh,`Tab · Enter`)):D(`v-if`,!0),r.open?(K(),F(r.PathDropdown,{key:3,id:r.listId,heading:r.editing?r.remoteInput?r.remoteKind===`gitlab`?`Открыть проект GitLab`:`Открыть репозиторий`:`Перейти в папку`:r.projectKind===`github`?`Репозитории ${r.githubOwnerPath.slice(4)}`:r.projectKind===`gitlab`?`Проект GitLab`:r.menuPath??``,editing:r.editing,remote:r.listingRemote,entries:r.entries,selected:r.selected,loading:r.loading,error:r.error,truncated:r.truncated,busy:r.busy,onPick:r.navigate},null,8,[`id`,`heading`,`editing`,`remote`,`entries`,`selected`,`loading`,`error`,`truncated`,`busy`])):D(`v-if`,!0)],40,Uh)}var eg=H(Hh,[[`render`,$h],[`__scopeId`,`data-v-01532e01`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/catalog/ui/PathBar.vue`]]),tg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ng(e,t){return K(),U(`svg`,tg,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`m21 21l-4.34-4.34`}),I(`circle`,{cx:`11`,cy:`11`,r:`8`})],-1)]])}var rg=L({name:`lucide-search`,render:ng}),ig={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ag(e,t){return K(),U(`svg`,ig,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M10 11v6m4-6v6m5-11v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`},null,-1)]])}var og=L({name:`lucide-trash-2`,render:ag}),sg=W({__name:`ProjectSwitcher`,props:{project:{type:Object,required:!0},navigate:{type:Function,required:!0}},setup(e,{expose:t}){t();let n=e,r=Lr(),i=Mu(),a=M(),o=M(),s=M(!1),c=M(``),l=V(),u=ee(),d=M(),f=M(),m=M(!1),h,_,v=Je(`project-switcher`,()=>({surface:`project-switcher`,project:n.project.path}));v.scope.registerCommand({id:`ide.project.switcher.toggle`,title:`Открыть или закрыть переключатель проектов`,description:`Показывает остров с путём текущего проекта, поиском других проектов и списком недавних.`,run:()=>j()}),v.scope.registerCommand({id:`ide.project.switcher.remove`,title:`Убрать проект из Projector`,description:`После подтверждения убирает проект из каталога Projector, завершает его терминалы и процессы. Файлы на диске остаются.`,arguments:{id:`string (необязательно): id проекта`,path:`string (необязательно): абсолютный путь проекта`},enabled:()=>!m.value,run:e=>O(J(e))});let y=e=>/^(gh|gl)\//i.test(e)||/^https?:/i.test(e)?e:`/${e}`;E(c,e=>h?.setQuery(y(e.trim())));let b=B(()=>`project:${n.project.id}`),x=B(()=>(u.value?.items??[]).filter(e=>e.id!==b.value)),S=B(()=>u.value?.selected??0),C=B(()=>x.value.map((e,t)=>({item:e,index:t,heading:!c.value.trim()&&e.section&&e.section!==x.value[t-1]?.section?dh[e.section]:``}))),w=B(()=>{let e=f.value;return e?.kind===`project`&&e.id.startsWith(`project:`)?{id:e.id.slice(8),name:e.name}:void 0}),T=B(()=>{let e=w.value;return e?[{id:`ide.project.switcher.remove`,label:`Убрать из Projector`,icon:og,danger:!0,command:`ide.project.switcher.remove`,disabled:m.value,run:()=>v.run(`ide.project.switcher.remove`,{id:e.id})}]:[]});function D(e,t){t.kind===`project`&&(f.value=t,d.value?.open(e,e.currentTarget))}async function O(e){if(m.value)return;let t=typeof e.id==`string`?e.id:void 0,r=typeof e.path==`string`?e.path:void 0;if(!t&&!r)throw Error(`Укажите id или path проекта`);let a=i.projects.value.find(e=>t?e.id===t:e.path===r)??(t?await i.getOne(t):void 0);if(!a)throw Error(`Проект не найден`);if(a.id===n.project.id)throw Error(`Нельзя убрать открытый проект`);if(window.confirm(`Убрать «${a.name}» из Projector? Терминалы и запущенные процессы проекта будут завершены. Файлы останутся на диске.`)){m.value=!0;try{await i.remove(a.id),f.value?.id===`project:${a.id}`&&(f.value=void 0),await h?.refresh()}finally{m.value=!1}}}function k(){let e=fh();h=ph({...e,search:(t,n)=>e.search(t,n,{disk:!1})}),u.value={...h.state},_=h.subscribe(e=>u.value=e),h.setQuery(`/`),h.live(!0)}function A(){d.value?.close(!1),f.value=void 0,_?.(),h?.dispose(),h=void 0,_=void 0,u.value=void 0}async function j(e=!s.value){e!==s.value&&(s.value=e,e?(c.value=``,k(),await p(),o.value?.focus()):(A(),a.value?.querySelector(`.trigger`)?.focus()))}xf(a,e=>{e.target instanceof Element&&e.target.closest(`[role="menu"]`)||s.value&&j(!1)}),g(A);async function N(e,t=!1){if(!h||!e||!await h.launch(e,e.actions?.[+!!t],!0))return;let n=h.state.route;await j(!1),n&&await r.push(n)}async function te(e){await n.navigate(e),await j(!1)}function P(e,t){t.route&&(e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)||(e.preventDefault(),N(t))}function ne(e){e.key===`ArrowDown`||e.key===`ArrowUp`?(e.preventDefault(),h?.move(e.key===`ArrowDown`?1:-1),p(()=>document.getElementById(`${l}-${S.value}`)?.scrollIntoView({block:`nearest`}))):e.key===`Enter`&&(e.preventDefault(),N(x.value[S.value],e.ctrlKey||e.metaKey))}let F={props:n,router:r,catalog:i,root:a,input:o,open:s,text:c,listId:l,state:u,menu:d,contextItem:f,removing:m,get model(){return h},set model(e){h=e},get unsubscribe(){return _},set unsubscribe(e){_=e},commands:v,toQuery:y,currentId:b,items:x,selected:S,rows:C,contextProject:w,menuItems:T,showContext:D,removeProject:O,start:k,stop:A,toggle:j,pick:N,go:te,activate:P,keydown:ne,get deviceUrl(){return We},UiActionCopy:Md,UiBadge:kd,ContextMenu:ih,UiControl:Se,UiInline:Be,UiPopupSurface:Fd,UiIslandLabel:sh,UiIslandFooter:uh,get projectIconUrl(){return Tu},PathBar:eg,get IconChevron(){return bd},get IconSearch(){return rg}};return Object.defineProperty(F,"__isScriptSetup",{enumerable:!1,value:!0}),F}}),cg=[`aria-expanded`,`title`],lg=[`src`],ug={class:`u-truncate`},dg=[`id`],fg=[`src`],pg={key:0,class:`empty`},mg={key:1,class:`empty error`,role:`alert`};function hg(t,n,r,i,a,o){return K(),U(`div`,{ref:`root`,class:`switcher`,onKeydown:n[2]||=ye(N(e=>i.toggle(!1),[`stop`]),[`esc`])},[I(`button`,{class:`trigger`,"aria-haspopup":`dialog`,"aria-expanded":i.open,title:`${r.project.name} — переключить проект`,onClick:n[0]||=e=>i.commands.run(`ide.project.switcher.toggle`)},[I(`img`,{src:i.projectIconUrl(r.project),alt:``,width:`22`,height:`22`},null,8,lg),I(`span`,ug,X(r.project.name),1),y(i.IconChevron,{"aria-hidden":`true`})],8,cg),i.open?(K(),F(i.UiPopupSurface,{key:0,as:`section`,flow:`column`,class:`island`,role:`dialog`,"aria-label":`Переключение проекта`},{default:e(()=>[y(i.PathBar,{class:`island-path`,path:r.project.path,navigate:i.go},null,8,[`path`]),y(i.UiInline,{as:`label`,class:`search`,justify:`normal`},{default:e(()=>[y(i.IconSearch,{"aria-hidden":`true`}),y(i.UiControl,{ref:`input`,modelValue:i.text,"onUpdate:modelValue":n[1]||=e=>i.text=e,role:`combobox`,"aria-label":`Найти проект`,placeholder:`Найти проект, gh/owner/repo…`,"aria-expanded":!0,"aria-controls":i.listId,"aria-activedescendant":i.items.length?`${i.listId}-${i.selected}`:void 0,autocomplete:`off`,spellcheck:`false`,onKeydown:i.keydown},null,8,[`modelValue`,`aria-controls`,`aria-activedescendant`])]),_:1}),I(`div`,{id:i.listId,class:`results`,role:`listbox`},[(K(!0),U(P,null,S(i.rows,t=>(K(),U(P,{key:t.item.id},[t.heading?(K(),F(i.UiIslandLabel,{key:0},{default:e(()=>[G(X(t.heading),1)]),_:2},1024)):D(`v-if`,!0),(K(),F(C(t.item.route?`a`:`button`),{id:`${i.listId}-${t.index}`,href:t.item.route,class:Y([`row`,{active:t.index===i.selected}]),role:`option`,"aria-selected":t.index===i.selected,disabled:t.item.route?void 0:i.state?.busy,onMousemove:e=>i.model?.select(t.index),onClick:e=>i.activate(e,t.item),onContextmenu:N(e=>i.showContext(e,t.item),[`stop`])},{default:e(()=>[t.item.icon?(K(),U(`img`,{key:0,src:i.deviceUrl(t.item.icon),alt:``,width:`28`,height:`28`},null,8,fg)):D(`v-if`,!0),y(i.UiActionCopy,{title:t.item.name,description:t.item.description,"truncate-title":``},null,8,[`title`,`description`]),t.item.status?(K(),F(i.UiBadge,{key:1},{default:e(()=>[G(X(t.item.status.label),1)]),_:2},1024)):D(`v-if`,!0)]),_:2},1064,[`id`,`href`,`class`,`aria-selected`,`disabled`,`onMousemove`,`onClick`,`onContextmenu`]))],64))),128)),i.state&&!i.state.loading&&!i.items.length?(K(),U(`p`,pg,`Ничего не найдено`)):D(`v-if`,!0),i.state?.error?(K(),U(`p`,mg,X(i.state.error),1)):D(`v-if`,!0)],8,dg),y(i.UiIslandFooter,{variant:`plain`},{default:e(()=>[...n[3]||=[G(`↑↓ выбрать · Enter открыть · ПКМ убрать · Esc закрыть`,-1)]]),_:1})]),_:1})):D(`v-if`,!0),y(i.ContextMenu,{ref:`menu`,items:i.menuItems,label:`Действия с проектом`},null,8,[`items`])],544)}var gg=H(sg,[[`render`,hg],[`__scopeId`,`data-v-995681ef`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/catalog/ui/ProjectSwitcher.vue`]]),_g=M(`general`),vg=e=>`scenario:${e}`,yg=e=>e.startsWith(`scenario:`)?e.slice(9):void 0,bg=W({__name:`UiToolbar`,props:{as:{type:String,required:!1},gap:{type:Number,required:!1},columnGap:{type:Number,required:!1},text:{type:String,required:!1},justify:{type:String,required:!1},wrap:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function xg(t,n,r,i,a,o){return K(),F(C(r.as??`div`),{class:`ui-toolbar`,style:Qe({"--toolbar-row-gap":`var(--sp-${r.gap??2})`,"--toolbar-column-gap":`var(--sp-${r.columnGap??r.gap??2})`,fontSize:r.text===`xs`?`var(--fs-xs)`:void 0,justifyContent:r.justify===`between`?`space-between`:void 0,flexWrap:r.wrap?`wrap`:void 0})},{default:e(()=>[c(t.$slots,`default`,{},void 0,!0)]),_:3},8,[`style`])}var Sg=H(bg,[[`render`,xg],[`__scopeId`,`data-v-f15b9f9a`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiToolbar.vue`]]),Cg=W({__name:`UiControlScope`,props:{density:{type:String,required:!1}},setup(e,{expose:t}){t();let r=e;n(ze,B(()=>r.density===`compact`?{minHeight:`var(--control-h)`,paddingBlock:`var(--sp-1)`,fontSize:`var(--ui-control-font-size)`}:void 0));let i={props:r};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}});function wg(e,t,n,r,i,a){return K(),U(`div`,{class:Y({compact:n.density===`compact`})},[c(e.$slots,`default`,{},void 0,!0)],2)}var Tg=H(Cg,[[`render`,wg],[`__scopeId`,`data-v-c0a0d0c8`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiControlScope.vue`]]),Eg={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Dg(e,t){return K(),U(`svg`,Eg,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M14 17H5M19 7h-9`}),I(`circle`,{cx:`17`,cy:`17`,r:`3`}),I(`circle`,{cx:`7`,cy:`7`,r:`3`})],-1)]])}var Og=L({name:`lucide-settings-2`,render:Dg}),kg=W({__name:`SettingsWorkbench`,props:{sections:{type:Array,required:!0},selected:{type:String,required:!0},embedded:{type:Boolean,required:!1},title:{type:String,required:!1,default:`Настройки`},scope:{type:String,required:!1,default:`settings`},read:{type:Function,required:!1}},emits:[`select`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=M(``),o=M(),s=M(),c=M(),l=M(new Set),u=B(()=>{let e=a.value.toLocaleLowerCase().trim().split(/\s+/).filter(Boolean);return r.sections.filter(t=>{let n=`${t.title} ${t.group} ${t.description} ${t.keywords}`.toLocaleLowerCase();return e.every(e=>n.includes(e))})}),d=B(()=>[...new Set(u.value.map(e=>e.group))]),f=B(()=>u.value.find(e=>e.id===r.selected||e.items?.some(e=>e.id===r.selected))??u.value[0]);Tn(()=>r.read?.({section:f.value?.id??``,sectionTitle:f.value?.title??``,query:a.value,visible:u.value.length})),E(f,e=>{e&&l.value.add(e.id),p(()=>{c.value?.scrollTo({top:0});let e=s.value?.querySelector(`[aria-current="page"]`);if(!e||!s.value)return;let t=e.getBoundingClientRect(),n=s.value.getBoundingClientRect();t.right>n.right?s.value.scrollLeft+=t.right-n.right:t.left<n.left&&(s.value.scrollLeft+=t.left-n.left)})},{immediate:!0});let m=M(``),h=M(``),g=M(!1);function _(e,t){m.value=t,e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,t))}function v(){m.value=``,h.value=``}function y(e,t){let n;for(let r of e.querySelectorAll(`:scope > li`)){let e=r.getBoundingClientRect(),i=r.dataset.id??``;if(t<e.top)return n??{id:i,after:!1};n={id:i,after:t>e.top+e.height/2}}return n}function b(e,t){if(!m.value||!t.reorder)return;e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`);let n=y(e.currentTarget,e.clientY);h.value=n&&n.id!==m.value?n.id:``,g.value=n?.after??!1}function x(e,t){if(!m.value||!t.reorder||!t.items)return;e.preventDefault();let n=y(e.currentTarget,e.clientY),r=m.value;if(v(),!n||n.id===r)return;let i=t.items.map(e=>e.id).filter(e=>e!==r),a=i.indexOf(n.id);a<0||(i.splice(a+ +!!n.after,0,r),t.reorder(i))}function S(e,t,n){if(!e.altKey||!t.reorder||!t.items)return;let r=e.key===`ArrowUp`?n-1:e.key===`ArrowDown`?n+1:-1,i=t.items.map(e=>e.id);r<0||r>=i.length||(e.preventDefault(),[i[n],i[r]]=[i[r],i[n]],t.reorder(i))}let C=Je(r.scope,()=>({surface:`settings`,section:f.value?.id??``,query:a.value}));C.scope.registerCommand({id:`ide.settings.sections.list`,palette:!1,title:`Список разделов настроек`,description:`Возвращает id, название, группу, описание и ключевые слова всех разделов настроек.`,run:()=>r.sections.map(({id:e,title:t,group:n,description:r,keywords:i})=>({id:e,title:t,group:n,description:r,keywords:i}))}),C.scope.registerCommand({id:`ide.settings.section.open`,palette:!1,title:`Открыть раздел настроек`,description:`Открывает раздел настроек по id. Сохраняет незавершённые формы других разделов в текущей странице.`,arguments:{id:`string: идентификатор раздела настроек`},run:e=>{let{id:t}=J(e),n=r.sections.some(e=>e.id===t||e.items?.some(e=>e.id===t));if(typeof t!=`string`||!n)throw Error(`Неизвестный раздел настроек`);a.value=``,i(`select`,t)}}),C.scope.registerCommand({id:`ide.settings.search`,title:`Поиск настроек`,description:`Фильтрует разделы по названию, описанию и параметрам; без query фокусирует поиск.`,arguments:{query:`string: поисковый запрос, пустая строка сбрасывает фильтр`},run:e=>{let t=J(e);if(t.query!==void 0&&typeof t.query!=`string`)throw Error(`query должен быть строкой`);typeof t.query==`string`?a.value=t.query:o.value?.focus()}});function w(e){C.run(`ide.settings.search`,{query:e.target.value})}let T={props:r,emit:i,query:a,search:o,sidebar:s,content:c,visited:l,filtered:u,groups:d,active:f,itemDrag:m,itemTarget:h,itemAfter:g,itemDragStart:_,itemDragEnd:v,rowAt:y,listDragOver:b,listDrop:x,itemKey:S,commands:C,filter:w,UiToolbar:Sg,UiControl:Se,UiInline:Be,UiControlScope:Tg,get IconSettings(){return Og},get IconSearch(){return rg},get IconClose(){return Cn},UiButton:q};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}}),Ag=[`aria-label`],jg={class:`layout`},Mg={ref:`sidebar`,class:`sidebar`,"aria-label":`Разделы настроек`},Ng=[`aria-current`,`onClick`],Pg=[`onDragover`,`onDrop`],Fg=[`data-id`,`draggable`,`onDragstart`],Ig=[`aria-current`,`onClick`,`onKeydown`],Lg={class:`item-title`},Rg={key:0,class:`item-hint`},zg={key:0,class:`no-results`,role:`status`},Bg={ref:`content`,class:`content`},Vg={key:0,class:`section-heading`},Hg={key:1,class:`footer`},Ug={key:2,class:`empty`};function Wg(t,n,r,i,a,o){return K(),U(`section`,{class:Y([`settings-workbench`,{embedded:r.embedded}]),"aria-label":r.title,onPointerdown:n[3]||=e=>i.commands.scope.activate()},[y(i.UiToolbar,{as:`header`,class:`toolbar`,gap:4,justify:`between`},{default:e(()=>[I(`h1`,null,[y(i.IconSettings,{"aria-hidden":`true`}),G(X(r.title),1)]),y(i.UiInline,{class:`search`,justify:`normal`},{default:e(()=>[y(i.IconSearch,{"aria-hidden":`true`}),y(i.UiControl,{ref:`search`,value:i.query,type:`search`,placeholder:`Поиск настроек…`,"aria-label":`Поиск настроек`,onInput:i.filter,onKeydown:n[0]||=ye(N(e=>i.commands.run(`ide.settings.search`,{query:``}),[`prevent`]),[`esc`])},null,8,[`value`]),i.query?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,"aria-label":`Очистить поиск`,title:`Очистить поиск`,onClick:n[1]||=e=>i.commands.run(`ide.settings.search`,{query:``})},{default:e(()=>[y(i.IconClose)]),_:1})):D(`v-if`,!0)]),_:1})]),_:1}),I(`div`,jg,[I(`nav`,Mg,[(K(!0),U(P,null,S(i.groups,e=>(K(),U(`div`,{key:e,class:`group`},[I(`h2`,null,X(e),1),(K(!0),U(P,null,S(i.filtered.filter(t=>t.group===e),e=>(K(),U(P,{key:e.id},[I(`button`,{type:`button`,"aria-current":e.id===r.selected?`page`:void 0,class:Y({selected:e.id===r.selected}),onClick:t=>i.commands.run(`ide.settings.section.open`,{id:e.id})},X(e.title),11,Ng),e.items?.length?(K(),U(`ul`,{key:0,class:`items`,onDragover:t=>i.listDragOver(t,e),onDrop:t=>i.listDrop(t,e)},[(K(!0),U(P,null,S(e.items,(t,n)=>(K(),U(`li`,{key:t.id,"data-id":t.id,draggable:!!e.reorder,class:Y({dragging:i.itemDrag===t.id,"drop-before":i.itemTarget===t.id&&!i.itemAfter,"drop-after":i.itemTarget===t.id&&i.itemAfter}),onDragstart:e=>i.itemDragStart(e,t.id),onDragend:i.itemDragEnd},[I(`button`,{type:`button`,"aria-current":t.id===r.selected?`page`:void 0,class:Y({selected:t.id===r.selected,problem:t.problem}),onClick:e=>i.commands.run(`ide.settings.section.open`,{id:t.id}),onKeydown:t=>i.itemKey(t,e,n)},[I(`span`,Lg,X(t.title),1),t.hint?(K(),U(`span`,Rg,X(t.hint),1)):D(`v-if`,!0)],42,Ig)],42,Fg))),128))],40,Pg)):D(`v-if`,!0)],64))),128))]))),128)),i.filtered.length?D(`v-if`,!0):(K(),U(`p`,zg,`Нет подходящих разделов`))],512),I(`div`,Bg,[i.active?(K(),U(`header`,Vg,[I(`h2`,null,X(i.active.title),1),I(`p`,null,X(i.active.description),1)])):D(`v-if`,!0),(K(!0),U(P,null,S(r.sections,t=>(K(),U(P,{key:t.id},[i.visited.has(t.id)?te((K(),F(i.UiControlScope,{key:0,density:`compact`,class:`section-body`},{default:e(()=>[(K(),F(C(t.component),R({ref_for:!0},t.props),null,16))]),_:2},1536)),[[ae,t.id===i.active?.id]]):D(`v-if`,!0)],64))),128)),t.$slots.footer&&i.active?(K(),U(`div`,Hg,[c(t.$slots,`footer`,{},void 0,!0)])):D(`v-if`,!0),i.active?D(`v-if`,!0):(K(),U(`div`,Ug,[y(i.IconSearch,{"aria-hidden":`true`}),n[5]||=I(`p`,null,`Настройки не найдены`,-1),n[6]||=I(`span`,null,`Попробуйте другое название или параметр.`,-1),y(i.UiButton,{onClick:n[2]||=e=>i.commands.run(`ide.settings.search`,{query:``})},{default:e(()=>[...n[4]||=[G(`Сбросить поиск`,-1)]]),_:1})]))],512)])],42,Ag)}var Gg=H(kg,[[`render`,Wg],[`__scopeId`,`data-v-12637f68`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/settings/SettingsWorkbench.vue`]]),Kg=W({__name:`UiSettingsSection`,props:{activate:{type:Function,required:!1},error:{type:String,required:!1}},setup(e,{expose:t}){t();let n={UiMessage:Te,UiStack:Ed};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function qg(t,n,r,i,a,o){return K(),F(i.UiStack,{as:`section`,gap:4,onFocusin:n[0]||=e=>r.activate?.(),onPointerdown:n[1]||=e=>r.activate?.()},{default:e(()=>[c(t.$slots,`default`),r.error?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(r.error),1)]),_:1})):D(`v-if`,!0)]),_:3})}var Jg=H(Kg,[[`render`,qg],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiSettingsSection.vue`]]),Yg=W({__name:`AgentChatRoleCard`,props:{role:{type:Object,required:!0},agents:{type:Array,required:!0},controlsFor:{type:Function,required:!0},resourcesFor:{type:Function,required:!0},busy:{type:Boolean,required:!0}},emits:[`save`,`remove`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=de({name:``,description:``,agent:`projector`,selection:{},prompt:``,skillsMode:`all`,skills:[],mcpMode:`all`,mcp:[]}),o=M([]),s=M({skills:[],mcp:[]}),c=M(!1),l=M(!1),u=M(``);function d(e){return e===void 0?`all`:e.length?`some`:`none`}function p(e){a.name=e.name,a.description=e.description??``,a.agent=e.agent,a.selection={...e.selection},a.prompt=e.prompt??``,a.skillsMode=d(e.skills),a.skills=[...e.skills??[]],a.mcpMode=d(e.mcp),a.mcp=[...e.mcp??[]],m(e.agent)}async function m(e){c.value=!0,u.value=``;try{o.value=await r.controlsFor(e)}catch(e){o.value=[],u.value=e instanceof Error?e.message:`Не удалось получить настройки агента`}finally{c.value=!1}}async function h(){l.value=!0;try{s.value=await r.resourcesFor()}catch(e){u.value=e instanceof Error?e.message:`Не удалось получить навыки и MCP-серверы`}finally{l.value=!1}}E(()=>r.role,p,{immediate:!0}),f(()=>void h());function g(e){let t=e.target.value;t!==a.agent&&(a.agent=t,a.selection={},m(t))}function _(e){return a.selection[e.id]??``}function v(e,t){let n=t.target.value;if(n)a.selection={...a.selection,[e.id]:n};else{let t={...a.selection};delete t[e.id],a.selection=t}}function y(e){let t=_(e);return!t||e.options.some(e=>e.value===t)?e.options:[...e.options,{value:t,name:`${t} — недоступно`}]}function b(){let e=new Set(s.value.skills.map(e=>e.name));return[...s.value.skills,...a.skills.filter(t=>!e.has(t)).map(e=>({name:e,description:`недоступен в этом проекте`,kind:`skill`,source:`user`}))]}function x(){let e=new Set(s.value.mcp.map(e=>e.name));return[...s.value.mcp,...a.mcp.filter(t=>!e.has(t)).map(e=>({name:e,source:`user`,kind:`stdio`}))]}function S(e,t){let n=t.target.checked;a.skills=n?[...new Set([...a.skills,e])]:a.skills.filter(t=>t!==e)}function C(e,t){let n=t.target.checked;a.mcp=n?[...new Set([...a.mcp,e])]:a.mcp.filter(t=>t!==e)}function w(e,t){if(e!==`all`)return e===`none`?[]:[...t]}function T(){if(!a.name.trim()){u.value=`Укажите название роли`;return}let e=w(a.skillsMode,a.skills),t=w(a.mcpMode,a.mcp);i(`save`,{name:a.name.trim(),description:a.description.trim(),agent:a.agent,selection:{...a.selection},prompt:a.prompt.trim(),...e===void 0?{}:{skills:e},...t===void 0?{}:{mcp:t}})}function D(){confirm(`Удалить роль «${r.role.name}»?`)&&i(`remove`)}let O={props:r,emit:i,draft:a,controls:o,resources:s,loading:c,resourcesLoading:l,error:u,modeOf:d,adopt:p,loadControls:m,loadResources:h,chooseAgent:g,valueOf:_,chooseControl:v,optionsFor:y,skillChoices:b,mcpChoices:x,toggleSkill:S,toggleMcp:C,resourceValue:w,save:T,remove:D,UiButton:q,UiCard:je,UiControl:Se,UiField:Re,UiHint:we,UiInline:Be,UiMessage:Te};return Object.defineProperty(O,"__isScriptSetup",{enumerable:!1,value:!0}),O}}),Xg={class:`head`},Zg={key:0,class:`kicker`},Qg=[`value`],$g={key:0,class:`note`},e_={key:1,class:`choices`},t_={key:0,class:`note`},n_={key:1,class:`note`},r_={key:2,class:`choices`},i_={key:0,class:`note`},a_={key:1,class:`note`},o_={key:3,class:`note`},s_=[`value`],c_={key:0,class:`control-hint`},l_={key:0,class:`note`};function u_(t,n,r,i,a,o){return K(),F(i.UiCard,{as:`section`,appearance:`frame`,class:`role`},{default:e(()=>[I(`div`,Xg,[n[5]||=I(`span`,{class:`kicker`},`chat-роль`,-1),r.role.builtin?(K(),U(`span`,Zg,`встроенная`)):D(`v-if`,!0)]),y(i.UiField,{label:`название`},{default:e(({control:e})=>[y(i.UiControl,R(e,{value:i.draft.name,disabled:r.busy,onInput:n[0]||=e=>i.draft.name=e.target.value}),null,16,[`value`,`disabled`])]),_:1}),y(i.UiField,{label:`агент`},{default:e(({control:t})=>[y(i.UiControl,R({as:`select`},t,{value:i.draft.agent,disabled:r.busy,onChange:i.chooseAgent}),{default:e(()=>[(K(!0),U(P,null,S(r.agents,e=>(K(),U(`option`,{key:e.backend,value:e.backend},X(e.title)+X(e.builtin?` — встроенный`:``),9,Qg))),128))]),_:1},16,[`value`,`disabled`])]),_:1}),y(i.UiField,{label:`описание`},{default:e(({control:e})=>[y(i.UiControl,R(e,{value:i.draft.description,disabled:r.busy,placeholder:`Когда выбирать эту роль`,onInput:n[1]||=e=>i.draft.description=e.target.value}),null,16,[`value`,`disabled`])]),_:1}),y(i.UiField,{label:`промпт роли`},{default:e(({control:e})=>[y(i.UiControl,R({as:`textarea`},e,{value:i.draft.prompt,disabled:r.busy,rows:`4`,placeholder:`Дополнительные инструкции для этого чата`,onInput:n[2]||=e=>i.draft.prompt=e.target.value}),null,16,[`value`,`disabled`]),n[6]||=I(`span`,{class:`control-hint`},` Добавляется к системному промпту агента; пустое поле ничего не меняет. `,-1)]),_:1}),y(i.UiField,{label:`навыки`},{default:e(({control:t})=>[y(i.UiControl,R({as:`select`},t,{modelValue:i.draft.skillsMode,"onUpdate:modelValue":n[3]||=e=>i.draft.skillsMode=e,disabled:r.busy}),{default:e(()=>[...n[7]||=[I(`option`,{value:`all`},`Все доступные`,-1),I(`option`,{value:`some`},`Только выбранные`,-1),I(`option`,{value:`none`},`Не добавлять`,-1)]]),_:1},16,[`modelValue`,`disabled`])]),_:1}),i.resourcesLoading?(K(),U(`p`,$g,`Читаю навыки и MCP-серверы…`)):i.draft.skillsMode===`some`?(K(),U(`div`,e_,[(K(!0),U(P,null,S(i.skillChoices(),e=>(K(),U(`label`,{key:e.name,class:`choice`},[y(i.UiControl,{type:`checkbox`,checked:i.draft.skills.includes(e.name),disabled:r.busy,"aria-label":`Навык ${e.name}`,onChange:t=>i.toggleSkill(e.name,t)},null,8,[`checked`,`disabled`,`aria-label`,`onChange`]),I(`span`,null,[I(`strong`,null,X(e.name),1),I(`small`,null,X(e.kind===`command`?`команда`:`навык`)+` · `+X(e.description),1)])]))),128)),i.skillChoices().length?(K(),U(`p`,n_,`Ничего не выбрано — роль не получит навыков.`)):(K(),U(`p`,t_,`В этом проекте нет навыков.`))])):D(`v-if`,!0),y(i.UiField,{label:`MCP-серверы`},{default:e(({control:t})=>[y(i.UiControl,R({as:`select`},t,{modelValue:i.draft.mcpMode,"onUpdate:modelValue":n[4]||=e=>i.draft.mcpMode=e,disabled:r.busy}),{default:e(()=>[...n[8]||=[I(`option`,{value:`all`},`Все настроенные`,-1),I(`option`,{value:`some`},`Только выбранные`,-1),I(`option`,{value:`none`},`Не подключать`,-1)]]),_:1},16,[`modelValue`,`disabled`])]),_:1}),i.draft.mcpMode===`some`&&!i.resourcesLoading?(K(),U(`div`,r_,[(K(!0),U(P,null,S(i.mcpChoices(),e=>(K(),U(`label`,{key:e.name,class:`choice`},[y(i.UiControl,{type:`checkbox`,checked:i.draft.mcp.includes(e.name),disabled:r.busy,"aria-label":`MCP-сервер ${e.name}`,onChange:t=>i.toggleMcp(e.name,t)},null,8,[`checked`,`disabled`,`aria-label`,`onChange`]),I(`span`,null,[I(`strong`,null,X(e.name),1),I(`small`,null,X(e.source===`project`?`проект`:`пользователь`)+` · `+X(e.kind),1)])]))),128)),i.mcpChoices().length?(K(),U(`p`,a_,`Ничего не выбрано — роль не подключит MCP.`)):(K(),U(`p`,i_,`MCP-серверы не настроены.`))])):D(`v-if`,!0),i.loading?(K(),U(`p`,o_,`Читаю настройки агента…`)):(K(),U(P,{key:4},[(K(!0),U(P,null,S(i.controls,t=>(K(),F(i.UiField,{key:t.id,label:t.name},{default:e(({control:a})=>[y(i.UiControl,R({as:`select`},{ref_for:!0},a,{value:i.valueOf(t),disabled:r.busy,onChange:e=>i.chooseControl(t,e)}),{default:e(()=>[n[9]||=I(`option`,{value:``},`По умолчанию агента`,-1),(K(!0),U(P,null,S(i.optionsFor(t),e=>(K(),U(`option`,{key:e.value,value:e.value},X(e.name),9,s_))),128))]),_:2},1040,[`value`,`disabled`,`onChange`]),t.description?(K(),U(`span`,c_,X(t.description),1)):D(`v-if`,!0)]),_:2},1032,[`label`]))),128)),!i.controls.length&&!i.error?(K(),U(`p`,l_,` У этого агента нет настроек для роли: чат начнётся с его умолчаний. `)):D(`v-if`,!0)],64)),y(i.UiInline,null,{default:e(()=>[y(i.UiButton,{appearance:`solid`,size:`sm`,busy:r.busy,disabled:r.busy,onClick:i.save},{default:e(()=>[...n[10]||=[G(`Сохранить`,-1)]]),_:1},8,[`busy`,`disabled`]),y(i.UiButton,{appearance:`outline`,size:`sm`,disabled:r.busy,onClick:i.remove},{default:e(()=>[...n[11]||=[G(`Удалить`,-1)]]),_:1},8,[`disabled`])]),_:1}),y(i.UiHint,null,{default:e(()=>[...n[12]||=[G(` Роль применяется к новому чату и сохраняется в его истории. Изменение роли не меняет уже начатые чаты; пустое значение наследует умолчание агента. Projector ограничивает навыки выбором роли; внешний агент получает выбранные навыки путями к файлам, но свои нативные навыки сохраняет. `,-1)]]),_:1}),i.error?(K(),F(i.UiMessage,{key:5,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0)]),_:1})}var d_=H(Yg,[[`render`,u_],[`__scopeId`,`data-v-67595f9e`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-roles/ui/AgentChatRoleCard.vue`]]);async function f_(e,t){let n=await fetch(e,{cache:`no-store`,...t,headers:t?.body?{"Content-Type":`application/json`}:void 0}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error||`Роли агентов недоступны`);return r}function p_(){return f_(`/api/agent/roles`)}function m_(e,t){return f_(`/api/agent/roles/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify({selection:t})})}function h_(e){return f_(`/api/agent/roles/${encodeURIComponent(e)}/reset`,{method:`POST`,body:JSON.stringify({})})}function g_(e){return f_(`/api/agent/roles`,{method:`POST`,body:JSON.stringify({role:{...e,kind:`chat`}})})}function __(e,t){return f_(`/api/agent/roles/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify({role:{...t,kind:`chat`}})})}function v_(e){return f_(`/api/agent/roles/${encodeURIComponent(e)}`,{method:`DELETE`})}async function y_(e,t){let n=await fetch(e,{cache:`no-store`,...t,headers:t?.body?{"Content-Type":`application/json`}:void 0}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error||`Роли проекта недоступны`);return r}function b_(e){return y_(`/api/agent/project-roles?projectId=${encodeURIComponent(e)}`)}function x_(e,t){return y_(`/api/agent/project-roles`,{method:`POST`,body:JSON.stringify({projectId:e,role:{...t,kind:`chat`}})})}function S_(e,t,n){return y_(`/api/agent/project-roles/${encodeURIComponent(t)}`,{method:`PUT`,body:JSON.stringify({projectId:e,role:{...n,kind:`chat`}})})}function C_(e,t){return y_(`/api/agent/project-roles/${encodeURIComponent(t)}?projectId=${encodeURIComponent(e)}`,{method:`DELETE`})}function w_(e,t){return y_(`/api/agent/project-roles/trust`,{method:`PUT`,body:JSON.stringify({projectId:e,trusted:t})})}async function T_(e,t){let n=await fetch(`/api/agent/controls?backend=${encodeURIComponent(e)}&projectId=${encodeURIComponent(t)}`,{cache:`no-store`}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error||`Не удалось получить настройки агента`);return Array.isArray(r.controls)?r.controls:[]}var E_;function D_(){return E_??=(async()=>{let e=Mu();return e.projects.value.length||await e.load(),e.projects.value[0]?.id??``})().catch(()=>``),E_}var O_=de({data:{roles:[],file:``},controls:[],loaded:!1,error:``}),k_=new Map,A_,j_;function M_(e){return{roles:Array.isArray(e?.roles)?e.roles:[],file:typeof e?.file==`string`?e.file:``,...e?.created?{created:e.created}:{}}}async function N_(e=!1){return O_.loaded&&!e?O_.data:A_||(A_=p_().then(e=>(O_.data=M_(e),O_.loaded=!0,O_.error=``,O_.data)).catch(e=>{throw O_.error=e instanceof Error?e.message:`Ошибка ролей агентов`,e}).finally(()=>{A_=void 0}),A_)}async function P_(e=!1){return O_.controls.length&&!e?O_.controls:j_||(j_=T_(`projector`,``).then(e=>(O_.controls=e,k_.set(`projector`,e),e)).finally(()=>{j_=void 0}),j_)}function F_(e){O_.data=M_(e),O_.loaded=!0,O_.error=``}async function I_(e){let[t,n]=await Promise.all([p_(),e?b_(e).catch(()=>void 0):Promise.resolve(void 0)]),r=new Map(t.roles.filter(e=>e.kind===`chat`).map(e=>[e.id,e]));for(let e of n?.trusted?n.roles:[])e.kind===`chat`&&r.set(e.id,e);return[...r.values()]}async function L_(e){if(e===`projector`)return P_();let t=k_.get(e);if(t)return t;let n=await T_(e,await D_());return k_.set(e,n),n}function R_(){let e=M(``),t=M(``),n=Je(`agent-roles:${V()}`,()=>({surface:`agentRoles`,busy:e.value,roles:O_.data.roles.length})),r=B(()=>(k_.get(`projector`)??O_.controls).find(e=>e.id===`provider`)),i=B(()=>r.value?.options??[]),a=B(()=>O_.data.roles),o=B(()=>O_.data.roles.filter(e=>e.kind===`service`)),s=B(()=>O_.data.roles.filter(e=>e.kind===`chat`)),c=B(()=>st()),l=B(()=>O_.data.file),u=B(()=>t.value||O_.error);async function d(){t.value=``;try{let e=await N_(!0);return await P_(!0).catch(e=>{t.value=e instanceof Error?e.message:`Не удалось получить модели провайдеров`}),e}catch(e){throw t.value=e instanceof Error?e.message:`Ошибка ролей агентов`,e}}async function f(e){t.value=``;try{return await e()}catch(e){throw t.value=e instanceof Error?e.message:`Не удалось сохранить роль`,e}}async function p(t,n){if(!O_.data.roles.find(e=>e.id===t&&e.kind===`service`))throw Error(`Неизвестная служебная роль: ${t}`);let r=n.trim()?{provider:n.trim()}:{};e.value=t;try{return await f(async()=>{let e=await m_(t,r);return F_(e),e})}finally{e.value=``}}async function m(t){if(!O_.data.roles.find(e=>e.id===t&&e.kind===`service`))throw Error(`Неизвестная служебная роль: ${t}`);e.value=t;try{return await f(async()=>{let e=await h_(t);return F_(e),e})}finally{e.value=``}}async function h(){e.value=`new`;try{return await f(async()=>{let e=await g_({name:`Новая роль`,description:``,agent:`projector`,selection:{}});F_(e);let t=e.created??e.roles.findLast(e=>e.kind===`chat`);if(!t)throw Error(`Роль не создана`);return t})}finally{e.value=``}}async function g(t,n){if(!O_.data.roles.find(e=>e.id===t&&e.kind===`chat`))throw Error(`Неизвестная роль: ${t}`);e.value=t;try{return await f(async()=>{let e=await __(t,n);return F_(e),e})}finally{e.value=``}}async function _(t){if(!O_.data.roles.find(e=>e.id===t&&e.kind===`chat`))throw Error(`Неизвестная роль: ${t}`);e.value=t;try{return await f(async()=>{let e=await v_(t);return F_(e),e})}finally{e.value=``}}return n.scope.registerCommand({id:`ide.agent.roles.list`,palette:!1,title:`Список ролей агентов`,description:`Возвращает служебные роли (Доктор, Lens, Судья) и chat-роли: id, название, агента, выбранные настройки и наследуется ли модель. Служебные роли — внутренние вызовы без инструментов; chat-роль открывает обычный чат.`,run:async()=>{let e=await N_();return{file:e.file,roles:e.roles.map(e=>({id:e.id,name:e.name,description:e.description,kind:e.kind,agent:e.agent,selection:e.selection,prompt:e.prompt,skills:e.skills,mcp:e.mcp,inherited:e.inherited}))}}}),n.scope.registerCommand({id:`ide.agent.roles.set`,palette:!1,title:`Выбрать модель служебной роли`,description:`Задаёт модель для служебной роли Projector. provider — значение из ide.agent.roles.list, например provider:model; пустая строка возвращает роль к модели чата. Это меняет только внутренние вызовы Доктора, Lens или Судьи: промпты, отсутствие инструментов и лимиты остаются прежними.`,arguments:{role:`string: id служебной роли: doctor, lens или judge`,provider:`string: provider:model из настроек провайдеров; пустая строка — как в чате`},enabled:()=>!e.value,run:e=>{let t=J(e);if(typeof t.role!=`string`||!t.role)throw Error(`role: id служебной роли: doctor, lens или judge`);if(typeof t.provider!=`string`)throw Error(`provider: строка provider:model или пустая строка`);return p(t.role,t.provider)}}),n.scope.registerCommand({id:`ide.agent.roles.reset`,palette:!1,title:`Вернуть служебной роли модель чата`,description:`Удаляет выбранную модель роли. Доктор, Lens или Судья снова используют модель текущего чата или активного провайдера.`,arguments:{role:`string: id служебной роли: doctor, lens или judge`},enabled:()=>!e.value,run:e=>{let t=J(e);if(typeof t.role!=`string`||!t.role)throw Error(`role: id служебной роли: doctor, lens или judge`);return m(t.role)}}),n.scope.registerCommand({id:`ide.agent.roles.create`,palette:!1,title:`Создать chat-роль`,description:`Создаёт новую роль для чата с именем «Новая роль» и агентом Projector. Дальше её настройки меняет ide.agent.roles.save: название, агент и набор controls. Возвращает созданную роль.`,run:()=>h()}),n.scope.registerCommand({id:`ide.agent.roles.save`,palette:!1,title:`Сохранить chat-роль`,description:`Меняет название, описание, агента, выбранные настройки, промпт, навыки и MCP chat-роли. selection — объект control id → value; отсутствующее значение наследует умолчание агента. prompt добавляется к системному промпту; skills и mcp — имена, пустой массив выключает их. Не переданные поля сохраняются. Роль действует на новые чаты; уже начатые чаты сохраняют снимок.`,arguments:{role:`string: id chat-роли`,name:`string: название роли`,agent:`string: id агента из каталога`,description:`string: описание (необязательно)`,selection:`object: control id → value (необязательно)`,prompt:`string: дополнительные инструкции роли (необязательно)`,skills:`array: имена навыков; пустой массив выключает (необязательно)`,mcp:`array: имена MCP-серверов; пустой массив выключает (необязательно)`},enabled:()=>!e.value,run:e=>{let t=J(e);if(typeof t.role!=`string`||!t.role)throw Error(`role: id chat-роли`);if(typeof t.name!=`string`||!t.name.trim())throw Error(`name: название роли`);if(typeof t.agent!=`string`||!t.agent)throw Error(`agent: id агента`);let n=s.value.find(e=>e.id===t.role);if(!n)throw Error(`Неизвестная chat-роль: ${t.role}`);let r=t.selection&&typeof t.selection==`object`&&!Array.isArray(t.selection)?t.selection:n.selection,i=(e,t)=>Array.isArray(e)?e.filter(e=>typeof e==`string`):t;return g(t.role,{...n,name:t.name,agent:t.agent,description:typeof t.description==`string`?t.description:n.description,selection:r,prompt:typeof t.prompt==`string`?t.prompt:n.prompt,skills:i(t.skills,n.skills),mcp:i(t.mcp,n.mcp)})}}),n.scope.registerCommand({id:`ide.agent.roles.delete`,palette:!1,title:`Удалить chat-роль`,description:`Удаляет chat-роль. Уже начатые чаты продолжают работать со своим снимком; роль перестаёт появляться в меню новой сессии.`,arguments:{role:`string: id chat-роли`},enabled:()=>!e.value,run:e=>{let t=J(e);if(typeof t.role!=`string`||!t.role)throw Error(`role: id chat-роли`);return _(t.role)}}),{roles:a,serviceRoles:o,chatRoles:s,agents:c,file:l,modelOptions:i,controlsFor:L_,busy:e,error:u,load:d,setService:p,resetService:m,createChat:h,saveChat:g,removeChat:_,commands:n}}var z_=new Map;async function B_(e){let t=await fetch(e,{cache:`no-store`}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`Не удалось получить ресурсы роли`);return n}async function V_(e=``,t=!1){let n=e||await D_(),r=n||`-`;if(!t){let e=z_.get(r);if(e)return e}let i=Promise.all([B_(`/api/agent/skills?projectId=${encodeURIComponent(n)}`),B_(`/api/agent/mcp${n?`?projectId=${encodeURIComponent(n)}`:``}`)]).then(([e,t])=>({skills:Array.isArray(e.skills)?e.skills:[],mcp:Array.isArray(t.servers)?t.servers:[]}));return z_.set(r,i),i.catch(()=>z_.delete(r)),i}var H_=W({__name:`AgentRoleSettings`,setup(e,{expose:t}){t();let{serviceRoles:n,chatRoles:r,agents:i,file:a,modelOptions:o,controlsFor:s,busy:c,error:l,load:u,setService:d,resetService:p,createChat:m,saveChat:h,removeChat:g,commands:_}=R_(),v=()=>_.scope.activate(),y=M({}),b=e=>y.value[e.id]??e.selection?.provider??``;function x(e,t){y.value={...y.value,[e.id]:t.target.value}}function S(e){let t=b(e),n=o.value;return!t||n.some(e=>e.value===t)?n:[...n,{value:t,name:`${t} — недоступна`}]}async function C(e){await d(e.id,b(e)).catch(()=>void 0);let t={...y.value};delete t[e.id],y.value=t}async function w(e){await p(e.id).catch(()=>void 0);let t={...y.value};delete t[e.id],y.value=t}async function T(){await m().catch(()=>void 0)}async function D(e,t){await h(e.id,t).catch(()=>void 0)}async function O(e){await g(e.id).catch(()=>void 0)}E(n,e=>{let t={...y.value};for(let n of e)n.id in t||(t[n.id]=n.selection.provider??``);y.value=t},{immediate:!0}),f(()=>void u().catch(()=>void 0));let k={serviceRoles:n,chatRoles:r,agents:i,file:a,modelOptions:o,controlsFor:s,busy:c,error:l,load:u,setService:d,resetService:p,createChat:m,saveChat:h,removeChat:g,commands:_,activate:v,drafts:y,providerOf:b,choose:x,optionsFor:S,saveServiceRole:C,resetServiceRole:w,addChatRole:T,saveChatRole:D,removeChatRole:O,UiButton:q,UiCard:je,UiControl:Se,UiField:Re,UiHint:we,UiInline:Be,UiSettingsSection:Jg,AgentChatRoleCard:d_,get roleResources(){return V_}};return Object.defineProperty(k,"__isScriptSetup",{enumerable:!1,value:!0}),k}}),U_={class:`summary`},W_=[`value`],G_={class:`section-head roles-head`},K_={key:0,class:`empty`};function q_(t,n,r,i,a,o){return K(),F(i.UiSettingsSection,{activate:i.activate,error:i.error},{default:e(()=>[n[7]||=I(`div`,{class:`section-head`},[I(`h3`,null,`Служебные роли`),I(`p`,null,` Доктор, Lens и Судья выполняют один короткий запрос без инструментов. Выбранная модель действует только на эти вызовы. `)],-1),(K(!0),U(P,null,S(i.serviceRoles,t=>(K(),F(i.UiCard,{key:t.id,as:`section`,appearance:`frame`,class:`role`},{default:e(()=>[I(`h4`,null,X(t.name),1),I(`p`,U_,X(t.description),1),y(i.UiField,{label:`модель`},{default:e(({control:r})=>[y(i.UiControl,R({as:`select`},{ref_for:!0},r,{value:i.providerOf(t),disabled:i.busy===t.id,onChange:e=>i.choose(t,e)}),{default:e(()=>[n[0]||=I(`option`,{value:``},`Как в чате`,-1),(K(!0),U(P,null,S(i.optionsFor(t),e=>(K(),U(`option`,{key:e.value,value:e.value},X(e.name),9,W_))),128))]),_:2},1040,[`value`,`disabled`,`onChange`])]),_:2},1024),y(i.UiInline,null,{default:e(()=>[y(i.UiButton,{appearance:`solid`,size:`sm`,busy:i.busy===t.id,disabled:i.busy===t.id,onClick:e=>i.saveServiceRole(t)},{default:e(()=>[...n[1]||=[G(`Сохранить`,-1)]]),_:1},8,[`busy`,`disabled`,`onClick`]),y(i.UiButton,{appearance:`outline`,size:`sm`,disabled:i.busy===t.id||!t.selection.provider&&!i.drafts[t.id],onClick:e=>i.resetServiceRole(t)},{default:e(()=>[...n[2]||=[G(`Как в чате`,-1)]]),_:1},8,[`disabled`,`onClick`])]),_:2},1024),i.providerOf(t)?D(`v-if`,!0):(K(),F(i.UiHint,{key:0},{default:e(()=>[...n[3]||=[G(` Модель берётся из чата, а если её там нет — у активного провайдера. `,-1)]]),_:1}))]),_:2},1024))),128)),I(`div`,G_,[n[5]||=I(`div`,null,[I(`h3`,null,`Роли чатов`),I(`p`,null,` Пресет агента, модели и его настроек. Роль открывается из меню «+» и действует на новый чат; уже начатые чаты сохраняют свой снимок. `)],-1),y(i.UiButton,{appearance:`outline`,size:`sm`,busy:i.busy===`new`,disabled:!!i.busy,onClick:i.addChatRole},{default:e(()=>[...n[4]||=[G(`Добавить роль`,-1)]]),_:1},8,[`busy`,`disabled`])]),i.chatRoles.length?D(`v-if`,!0):(K(),U(`p`,K_,` Ролей чатов пока нет. Добавьте роль, выберите агента и настройки — она появится в меню новой сессии. `)),(K(!0),U(P,null,S(i.chatRoles,e=>(K(),F(i.AgentChatRoleCard,{key:e.id,role:e,agents:i.agents,"controls-for":i.controlsFor,"resources-for":i.roleResources,busy:i.busy===e.id,onSave:t=>i.saveChatRole(e,t),onRemove:t=>i.removeChatRole(e)},null,8,[`role`,`agents`,`controls-for`,`resources-for`,`busy`,`onSave`,`onRemove`]))),128)),y(i.UiHint,null,{default:e(()=>[n[6]||=G(` Служебные роли не меняют модель чатов. Файл настроек: `,-1),I(`code`,null,X(i.file),1)]),_:1})]),_:1},8,[`error`])}var J_=H(H_,[[`render`,q_],[`__scopeId`,`data-v-68651354`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-roles/ui/AgentRoleSettings.vue`]]);function Y_(e){let t=M(),n=M(``),r=M(``),i=Je(`agent-project-roles:${V()}`,()=>({surface:`agentProjectRoles`,projectId:e(),trusted:t.value?.trusted===!0,roles:t.value?.roles.length??0,busy:n.value})),a=B(()=>t.value?.roles??[]),o=B(()=>t.value?.trusted===!0),s=B(()=>t.value?.file??``),c=B(()=>t.value?.exists===!0),l=B(()=>t.value?.problem??``),u=B(()=>r.value||l.value);async function d(e){r.value=``;try{return await e()}catch(e){throw r.value=e instanceof Error?e.message:`Ошибка ролей проекта`,e}}async function f(){let n=e();if(!n)t.value=void 0;else return d(async()=>(t.value=await b_(n),t.value))}async function p(r){let i=e();n.value=`trust`;try{return await d(async()=>(t.value=await w_(i,r),t.value))}finally{n.value=``}}async function m(){let r=e();n.value=`new`;try{return await d(async()=>(t.value=await x_(r,{name:`Новая роль проекта`,description:``,agent:`projector`,selection:{}}),t.value))}finally{n.value=``}}async function h(r,i){let a=e();n.value=r;try{return await d(async()=>(t.value=await S_(a,r,i),t.value))}finally{n.value=``}}async function g(r){let i=e();n.value=r;try{return await d(async()=>(t.value=await C_(i,r),t.value))}finally{n.value=``}}return i.scope.registerCommand({id:`ide.agent.projectRoles.list`,palette:!1,title:`Роли проекта`,description:`Возвращает роли из .projector/roles.json, путь к файлу, признак доверия и ошибку чтения. Недоверенные роли не открываются в чатах, заданиях и task.`,run:async()=>(await f(),t.value??{projectId:e(),path:``,file:``,exists:!1,trusted:!1,roles:[]})}),i.scope.registerCommand({id:`ide.agent.projectRoles.create`,palette:!1,title:`Создать роль проекта`,description:`Создаёт chat-роль в .projector/roles.json. После записи файл нужно доверить заново. Роль появится в меню «+» только у доверенного файла.`,run:()=>m()}),i.scope.registerCommand({id:`ide.agent.projectRoles.save`,palette:!1,title:`Сохранить роль проекта`,description:`Меняет chat-роль в .projector/roles.json: название, агента, настройки, промпт, навыки и MCP. Не переданные поля сохраняются; пустой массив skills или mcp выключает их. Любая запись меняет хеш файла и отзывает доверие.`,arguments:{role:`string: id роли проекта`,name:`string: название`,agent:`string: id агента`,description:`string: описание`,selection:`object: control id → value`,prompt:`string: дополнительные инструкции роли`,skills:`array: имена навыков`,mcp:`array: имена MCP-серверов`},enabled:()=>!n.value,run:e=>{let t=J(e);if(typeof t.role!=`string`||!t.role)throw Error(`role: id роли проекта`);if(typeof t.name!=`string`||!t.name.trim())throw Error(`name: название`);if(typeof t.agent!=`string`||!t.agent)throw Error(`agent: id агента`);let n=a.value.find(e=>e.id===t.role);if(!n)throw Error(`Неизвестная роль проекта: ${t.role}`);let r=(e,t)=>Array.isArray(e)?e.filter(e=>typeof e==`string`):t;return h(t.role,{...n,name:t.name,agent:t.agent,description:typeof t.description==`string`?t.description:n.description,selection:t.selection&&typeof t.selection==`object`&&!Array.isArray(t.selection)?t.selection:n.selection,prompt:typeof t.prompt==`string`?t.prompt:n.prompt,skills:r(t.skills,n.skills),mcp:r(t.mcp,n.mcp)})}}),i.scope.registerCommand({id:`ide.agent.projectRoles.delete`,palette:!1,title:`Удалить роль проекта`,description:`Удаляет chat-роль из .projector/roles.json и отзывает доверие к файлу.`,arguments:{role:`string: id роли проекта`},enabled:()=>!n.value,run:e=>{let t=J(e);if(typeof t.role!=`string`||!t.role)throw Error(`role: id роли проекта`);return g(t.role)}}),i.scope.registerCommand({id:`ide.agent.projectRoles.trust`,palette:!1,title:`Доверять ролям проекта`,description:`Выдаёт или отзывает доверие к текущему содержимому .projector/roles.json. Доверие привязано к хешу файла: правка файла отзывает его автоматически.`,arguments:{trusted:`boolean: доверять ли текущему файлу`},enabled:()=>!n.value,run:e=>{let t=J(e).trusted;if(typeof t!=`boolean`)throw Error(`trusted должен быть boolean`);return p(t)}}),{data:t,roles:a,trusted:o,file:s,exists:c,problem:l,busy:n,error:u,load:f,trust:p,create:m,save:h,remove:g,commands:i}}var X_=W({__name:`AgentProjectRoles`,props:{project:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,{roles:r,trusted:i,file:a,exists:o,problem:s,busy:c,error:l,load:u,trust:d,create:f,save:p,remove:m,commands:h}=Y_(()=>n.project.id),g=()=>h.scope.activate(),_=st(),v=()=>V_(n.project.id);E(()=>n.project.id,()=>void u().catch(()=>void 0),{immediate:!0});async function y(){await f().catch(()=>void 0)}async function b(e,t){await p(e.id,t).catch(()=>void 0)}async function x(e){await m(e.id).catch(()=>void 0)}async function S(e){await d(e).catch(()=>void 0)}let C={props:n,roles:r,trusted:i,file:a,exists:o,problem:s,busy:c,error:l,load:u,trust:d,create:f,save:p,remove:m,commands:h,activate:g,agents:_,projectResources:v,addRole:y,saveRole:b,removeRole:x,setTrust:S,UiButton:q,UiHint:we,UiInline:Be,UiMessage:Te,UiSettingsSection:Jg,AgentChatRoleCard:d_,get roleControls(){return L_}};return Object.defineProperty(C,"__isScriptSetup",{enumerable:!1,value:!0}),C}}),Z_={class:`head`},Q_={class:`file`},$_={key:0,class:`trusted`},ev={key:1,class:`untrusted`},tv={key:2,class:`untrusted`},nv={key:2,class:`empty`};function rv(t,n,r,i,a,o){return K(),F(i.UiSettingsSection,{activate:i.activate,error:i.error,class:`project-roles`},{default:e(()=>[I(`div`,Z_,[y(i.UiInline,{wrap:``,gap:2},{default:e(()=>[I(`span`,Q_,X(i.file||`.projector/roles.json`),1),i.trusted?(K(),U(`span`,$_,`доверено`)):i.exists?(K(),U(`span`,ev,`не доверено`)):(K(),U(`span`,tv,`файла ещё нет`))]),_:1}),y(i.UiInline,{gap:2},{default:e(()=>[i.exists&&!i.trusted?(K(),F(i.UiButton,{key:0,appearance:`solid`,size:`sm`,busy:i.busy===`trust`,disabled:!!i.problem,onClick:n[0]||=e=>i.setTrust(!0)},{default:e(()=>[...n[2]||=[G(`Доверять`,-1)]]),_:1},8,[`busy`,`disabled`])):i.trusted?(K(),F(i.UiButton,{key:1,appearance:`outline`,size:`sm`,busy:i.busy===`trust`,onClick:n[1]||=e=>i.setTrust(!1)},{default:e(()=>[...n[3]||=[G(`Отозвать доверие`,-1)]]),_:1},8,[`busy`])):D(`v-if`,!0),y(i.UiButton,{appearance:`outline`,size:`sm`,busy:i.busy===`new`,disabled:!!i.busy,onClick:i.addRole},{default:e(()=>[...n[4]||=[G(`Добавить роль`,-1)]]),_:1},8,[`busy`,`disabled`])]),_:1})]),i.problem?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.problem),1)]),_:1})):i.exists&&!i.trusted?(K(),F(i.UiMessage,{key:1,tone:`muted`,variant:`note`,size:`xs`,flush:``},{default:e(()=>[...n[5]||=[G(` Роли из этого файла не открываются в чатах, заданиях и task. Проверьте файл и выдайте доверие. `,-1)]]),_:1})):D(`v-if`,!0),!i.roles.length&&!i.problem?(K(),U(`p`,nv,` В файле пока нет ролей. Добавьте роль — она появится в меню «+» после доверия. `)):D(`v-if`,!0),(K(!0),U(P,null,S(i.roles,e=>(K(),F(i.AgentChatRoleCard,{key:e.id,role:e,agents:i.agents,"controls-for":i.roleControls,"resources-for":i.projectResources,busy:i.busy===e.id,onSave:t=>i.saveRole(e,t),onRemove:t=>i.removeRole(e)},null,8,[`role`,`agents`,`controls-for`,`busy`,`onSave`,`onRemove`]))),128)),y(i.UiHint,null,{default:e(()=>[...n[6]||=[G(` Роли проекта действуют только в этом проекте. Доверие привязано к хешу файла; после изменения файла его нужно выдать заново. `,-1)]]),_:1})]),_:1},8,[`error`])}var iv=H(X_,[[`render`,rv],[`__scopeId`,`data-v-cedd219d`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-roles/ui/AgentProjectRoles.vue`]]),av=`<script>`,ov=`<\/script>`;function sv(e){let t=e.indexOf(av);if(t<0)return{template:e,scriptOpen:!1};let n=e.indexOf(ov,t);return n<0?{template:e.slice(0,t),scriptOpen:!0}:{template:e.slice(0,t)+e.slice(n+9),script:e.slice(t+8,n),scriptOpen:!1}}var cv=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`source`,`track`,`wbr`]);function lv(e,t){let n=``;for(let r=t;r<e.length;r++){let t=e[r];if(n)t===n&&(n=``);else if(t===`"`||t===`'`)n=t;else if(t===`>`)return r+1}return-1}function uv(e){let t=[],n=e.length,r=0;scan:for(;r<e.length;){let i=e.indexOf(`<`,r),a=e.indexOf(`{{`,r);if(a>=0&&(i<0||a<i)){let t=e.indexOf(`}}`,a);if(t<0){n=a;break}r=t+2;continue}if(i<0)break;let o=e.slice(i,i+4);if(o.startsWith(`<!--`)){let t=e.indexOf(`-->`,i);if(t<0){n=i;break}r=t+3}else if(o.startsWith(`</`)){let a=e.indexOf(`>`,i);if(a<0){n=i;break}let o=/^<\/\s*([A-Za-z][\w-]*)/.exec(e.slice(i,a))?.[1],s=o?t.lastIndexOf(o):-1;s>=0&&(t.length=s),r=a+1}else if(/^<[A-Za-z]/.test(o)){let a=/^<([A-Za-z][\w-]*)/.exec(e.slice(i))[1],o=lv(e,i+1+a.length);if(o<0){n=i;break}if(a===`script`||a===`style`){let t=e.indexOf(`</${a}>`,o);if(t<0){n=i;break scan}r=t+a.length+3;continue}e[o-2]!==`/`&&!cv.has(a.toLowerCase())&&t.push(a),r=o}else if(i===e.length-1){n=i;break}else r=i+1}return e.slice(0,n)+t.reverse().map(e=>`</${e}>`).join(``)}var dv,fv;function pv(){return fv??=Pn(()=>import(`./compiler-dom.esm-bundler-B0iuTsih.js`).then(e=>dv=e),__vite__mapDeps([0,1]))}var mv=new Map,hv={...ce,withCtx(...t){let[n,...r]=t;return e((...e)=>{s(-1);try{return n(...e)}finally{s(1)}},...r)}};function gv(e){let t=mv.get(e);if(t)return t;if(!dv)throw Error(`The template compiler is not loaded yet`);let{code:n}=dv.compile(e,{mode:`function`,onError(e){throw e}}),r=Function(`Vue`,n.replaceAll(`_: 1 /* STABLE */`,`_: 2 /* DYNAMIC */`))(hv);return mv.size>=200&&mv.delete(mv.keys().next().value),mv.set(e,r),r}var _v={ref:M,reactive:de,computed:B,watch:E,onMounted:e=>void p(e)},vv=new Map;function yv(e){let t=vv.get(e);if(t)return t;let n=Function(...Object.keys(_v),`reply`,`scope`,`with (scope) {\n${e}\n}`);return vv.size>=200&&vv.delete(vv.keys().next().value),vv.set(e,n),n}var bv=Symbol(`agent-widget-reply`);function xv(e,t){let n=typeof e==`string`?e:JSON.stringify(e,null,2),r=typeof e==`string`?e:`\`\`\`json\n${n}\n\`\`\``;return t?`${t}\n\n${r}`:r}function Sv(){return typeof navigator>`u`||navigator.userActivation?.isActive!==!1}function Cv(){let e=z(bv,void 0);return(t,n)=>!e||!Sv()?!1:(e(xv(t,n),t,n),!0)}var wv=Symbol(`agent-message-scope`),Tv=Symbol(`agent-widget-project`);function Ev(e,t,r){let i=de({}),a=Cv(),o=new Map,s=M(0);n(wv,{shared:i,done:t,version:s}),E(e,e=>{e.forEach((e,t)=>{if(e.type!==`script`||!e.complete)return;let n=o.get(t);if(n?.code===e.source)return;n?.scope.stop();let c=ve(!0);o.set(t,{code:e.source,scope:c});try{let t=c.run(()=>yv(e.source)(...Object.values(_v),a,i));Object.assign(i,t),s.value++}catch(e){r.value=[...r.value,e instanceof Error?e.message:String(e)]}})},{immediate:!0}),g(()=>o.forEach(({scope:e})=>e.stop()))}var Dv=new Set(`Math JSON Number String Boolean Array Object Date RegExp Map Set Symbol BigInt Intl parseInt parseFloat isNaN isFinite NaN Infinity undefined console encodeURIComponent decodeURIComponent`.split(` `));function Ov(e){return W({name:`AgentWidgetBody`,components:e.components,setup(){let t=Cv(),n=z(wv,null),r=de({reply:t}),i=n?.shared??{},a=e=>e in r||e in i,o=new Proxy({},{has:(e,t)=>a(t),get:(e,t)=>t in r?r[t]:i[t],set:(e,t,n)=>{let a=t in r||!(t in i)?r:i;return a[t]=n,!0}}),c=B(()=>e.strict.value&&(n?.done.value??!0)),l=M(0),u,d;E(e.script,n=>{u?.stop(),u=ve(!0);for(let e of Object.keys(r))e!==`reply`&&delete r[e];try{n&&Object.assign(r,u.run(()=>n(...Object.values(_v),t,o)))}catch(t){e.fail(t)}l.value++},{immediate:!0}),g(()=>u?.stop());let f=new Proxy(o,{has:(e,t)=>a(t)||typeof t==`string`&&t[0]!==`_`&&!Dv.has(t),get:(e,t)=>a(t)?Reflect.get(e,t):void 0}),p=[];return()=>{l.value;let t=e.render.value;if(!t)return null;s(-1);try{return c.value?t(o,p):d=t(f,p)}catch(e){if(c.value)throw e;return d??null}finally{s(1)}}}})}var kv={layout:`Раскладка`,data:`Данные`,form:`Форма и ввод`,action:`Действия`,project:`Виджеты проекта`};function Av(e){let t=Object.entries(e.props??{}).map(([e,t])=>` ${e}: ${t.type}; ${t.required?`обязательное`:`необязательное`} — ${t.description}`);return[`${e.name} — ${e.summary}`,...e.slot?[`Содержимое: ${e.slot}`]:[],...e.model?[`v-model: ${e.model.type} — ${e.model.description}`]:[],...t.length?[`Свойства:`,...t]:[],...e.notes??[],...e.answer?[`Форма ответа: если ответ заканчивается этим блоком, композер показывает его вместо поля ввода и сохраняет отправленные значения.`]:[],`Пример Vue-разметки:`,"```vue",e.example,"```"]}var jv=[`Используй только компоненты из каталога ниже. Каждый блок начинается сразу с зарегистрированного компонента; дополнительная обёртка не нужна. Обычные HTML- и SVG-элементы разрешены внутри блока.`,`Типы и обязательность свойств описаны отдельно от примеров: эти пояснения не входят в Vue-разметку. Необязательное свойство можно просто опустить.`,`Числа передавай через привязку с десятичной точкой, без единиц и знака процента: например, :delta="3.6". Компонент сам добавляет процент к delta. Строки передавай обычным атрибутом, например value="3,6%", если нужен текст показателя.`,`В ответе пиши Vue-разметку с новой строки прямо в markdown, без кодового блока. Примеры в справке выделены кодовыми блоками только для чтения. Корневой тег должен быть закрыт или самозакрыт. Массивы и объекты передавай через привязки свойств, как в примерах ниже. Булев флаг можно включить атрибутом без значения. Внутри блока — HTML и Vue-шаблон; для жирного текста используй элемент strong.`,`Для расчётов, где значения зависят друг от друга, добавь <script>: в нём есть ref, reactive, computed, watch, onMounted и reply(данные, "подпись"); верни из него объект со всем, что нужно шаблону. Например, тело скрипта: const n = ref(1); return { n }; <script> между блоками один на весь ответ: его значения видны во всех блоках (ползунок в одном управляет графиком в другом), порядок не важен; <script> внутри блока виден только ему.`,`Данные бери из фактов, которые проверил сам; не выдумывай цифры.`];function Mv(e){return e.guide?[`${e.name} — ${e.summary}`,...e.guide.split(`
|
|
14
|
-
`),`Пример Vue-разметки:`,"```vue",e.example,"```"]:Av(e)}function Nv(e){return Object.keys(kv).map(t=>{let n=e.filter(e=>e.group===t&&!e.special&&!e.hidden).flatMap(e=>[...Mv(e),``]);return n.length?`${kv[t]}:\n${n.join(`
|
|
15
|
-
`)}`:``}).filter(Boolean)}function Pv(e,t=`Специальные виджеты`){let n=e.filter(e=>e.special&&!e.hidden);return n.length?[`${t}:`,`Их свойства и примеры не загружены. Когда специальный виджет уместен, сначала вызови describe_widget с его именем; не угадывай свойства.`,...n.map(e=>`${e.name} — ${e.summary}`)].join(`
|
|
16
|
-
`):``}function Fv(e,t=`Специальные виджеты проекта`){return[...Nv(e),Pv(e,t)].filter(Boolean).join(`
|
|
17
|
-
`)}var Iv=e=>e;function Lv(){let e=new Map,t=()=>[...e.values()],n=(t,n=[])=>n.find(e=>e.name===t)??e.get(t);return{register:t=>void e.set(t.name,t),has:t=>e.has(t),get:t=>e.get(t),list:t,guide(){let e=Nv(t());return[jv.join(`
|
|
18
|
-
`),...e,Pv(t())].filter(Boolean).join(`
|
|
19
|
-
`)},extraGuide(e){return Fv(e)},describe(e,t=[]){let r=n(e,t);return r?Av(r).join(`
|
|
20
|
-
`):`Нет компонента ${e}`},describeSpecial(e,t=[]){let r=n(e,t);if(!r)throw Error(`Нет компонента ${e}`);if(!r.special)throw Error(`Компонент ${e} не специальный: его описание уже есть в промпте`);return Av(r).join(`
|
|
21
|
-
`)}}}var Rv=Lv(),zv=oe({}),Bv=oe({}),Vv=M(0);function Hv(e){Rv.register(e.definition),zv[e.definition.name]=e.component}function Uv(e,t){e&&(Bv[e]=t,Vv.value++)}function Wv(e){e&&e in Bv&&(delete Bv[e],Vv.value++)}function Gv(e){return e?Bv[e]??{}:{}}function Kv(e){let t=Gv(e);if(!Object.keys(t).length)return zv;let n=Object.assign({},zv);for(let[e,r]of Object.entries(t))n[e]=r.component;return n}var qv=(e,t)=>Object.hasOwn(zv,e)||Object.hasOwn(Gv(t),e);function Jv(e){let t=Object.values(Gv(e)).map(e=>e.definition).filter(e=>e.answer).map(e=>e.name);return[...Rv.list().filter(e=>e.answer).map(e=>e.name),...t]}var Yv=W({__name:`AgentWidget`,props:{source:{type:String,required:!0},complete:{type:Boolean,required:!0},projectId:{type:String,required:!1}},setup(e,{expose:t}){t();let r=e;n(Tv,ne(r,`projectId`));let i=ee(),a=ee(),o=ee(``),s=M(0),c=Ov({components:Kv(r.projectId),render:i,script:a,strict:ne(r,`complete`),fail:e=>o.value=u(e)}),u=e=>e instanceof Error?e.message:String(e),d=``,f=``,p,m=0;async function h(){m=0,await pv(),r.source.startsWith(d)||s.value++,d=r.source;let e=sv(r.source),t=r.complete?e.template:uv(e.template);try{e.script!==p&&(p=e.script,o.value=``,a.value=e.script?yv(e.script):void 0),t!==f&&(f=t,o.value=``,i.value=t.trim()?gv(t):void 0)}catch(e){r.complete&&(o.value=u(e))}}function _(){r.complete||typeof requestAnimationFrame>`u`?h():m||=requestAnimationFrame(()=>void h())}E(()=>[r.source,r.complete],_,{immediate:!0});let v=z(wv,null);E(()=>v?.version.value,()=>o.value=``),g(()=>m&&cancelAnimationFrame(m)),l(e=>(r.complete&&(o.value=u(e)),!1));let y={props:r,render:i,script:a,failure:o,generation:s,Host:c,message:u,get lastSource(){return d},set lastSource(e){d=e},get lastTemplate(){return f},set lastTemplate(e){f=e},get lastScript(){return p},set lastScript(e){p=e},get frame(){return m},set frame(e){m=e},update:h,schedule:_,sharedScope:v};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}}),Xv=[`inert`],Zv={key:0,class:`widget-failure`,role:`alert`},Qv={key:2,class:`widget-pending`,"aria-busy":`true`};function $v(e,t,n,r,i,a){return K(),U(P,null,[D(` inert while streaming: half a form must not be answerable. `),I(`div`,{class:`widget`,inert:!n.complete},[r.failure?(K(),U(`div`,Zv,[I(`p`,null,X(r.failure),1),I(`pre`,null,X(n.source),1)])):r.render?(K(),F(C(r.Host),{key:r.generation})):(K(),U(`div`,Qv))],8,Xv)],2112)}var ey=H(Yv,[[`render`,$v],[`__scopeId`,`data-v-6db7d0ec`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/widget-runtime/ui/AgentWidget.vue`]]),ty=/^ {0,3}<([A-Z][A-Za-z0-9]*)(?=[\s/>]|$)/,ny=/^ {0,3}<script>/,ry=/^ {0,3}(`{3,}|~{3,})/;function iy(e,t){let n=``;for(let r=t;r<e.length;r++){let t=e[r];if(n)t===n&&(n=``);else if(t===`"`||t===`'`||t==="`")n=t;else if(t===`>`)return r+1}return-1}function ay(e,t,n){let r=`<${n}`,i=`</${n}`,a=0,o=t;for(;o<e.length;){let t=e.indexOf(`<`,o);if(t<0)return-1;if(e.startsWith(i,t)&&/^\s*>/.test(e.slice(t+i.length,t+i.length+8))){let n=e.indexOf(`>`,t);if(n<0)return-1;if(--a===0)return n+1;o=n+1}else if(e.startsWith(r,t)&&/[\s/>]/.test(e[t+r.length]??``)){let n=iy(e,t+r.length);if(n<0)return-1;if(e[n-2]!==`/`)a++;else if(a===0)return n;o=n}else o=t+1}return-1}var oy=`<\/script>`;function sy(e,t={}){let n=[],r=0,i=``,a=0,o=t=>{let i=e.slice(r,t);i.trim()&&n.push({type:`markdown`,text:i})};for(;a<e.length;){let s=e.indexOf(`
|
|
22
|
-
`,a),c=s<0?e.length:s+1,l=e.slice(a,c),u=ry.exec(l)?.[1];if(i)u&&u[0]===i[0]&&u.length>=i.length&&(i=``);else if(u)i=u;else{let i=a+l.indexOf(`<`),s=ty.exec(l)?.[1];if(s&&(!t.known||t.known(s))){let c=ay(e,i,s);if(c>=0||t.streaming){if(o(a),n.push({type:`widget`,name:s,source:e.slice(i,c>=0?c:void 0),complete:c>=0}),c<0)return n;r=a=c;continue}}else if(ny.test(l)){let s=e.indexOf(oy,i);if(s>=0||t.streaming){if(o(a),n.push({type:`script`,source:e.slice(i+8,s>=0?s:void 0),complete:s>=0}),s<0)return n;r=a=s+9;continue}}}a=c}return o(e.length),n}var cy=e=>RegExp(`<${e}(?=[\\s/>])`);function ly(e,t){let n=Jv(t);if(!n.length)return;let r=sy(e,{known:e=>qv(e,t),streaming:!1}).filter(e=>e.type!==`script`&&(e.type!==`markdown`||e.text.trim())).at(-1);if(r?.type===`widget`&&r.complete)return n.some(e=>cy(e).test(r.source))?r.source:void 0}async function uy(e,t){let n=await fetch(e,{cache:`no-store`,...t,headers:t?.body?{"Content-Type":`application/json`}:void 0}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error||`Виджеты проекта недоступны`);return r}function dy(e){return uy(`/api/agent/project-widgets?projectId=${encodeURIComponent(e)}`)}function fy(e,t){return uy(`/api/agent/project-widgets/trust`,{method:`PUT`,body:JSON.stringify({projectId:e,trusted:t})})}function py(e,t){return uy(`/api/agent/project-widgets/data?projectId=${encodeURIComponent(e)}&widget=${encodeURIComponent(t)}`)}var my=new Set;function ate(e,t){let n=2166136261;for(let r of`${e}:${t}`)n=Math.imul(n^r.charCodeAt(0),16777619);return`pw-${(n>>>0).toString(36)}`}function hy(e,t){let n=e.replace(/\/\*[\s\S]*?\*\//g,``).trim(),r=`.${t}`,i=``,a=0;for(;a<n.length;){let e=n.indexOf(`{`,a);if(e<0)break;let o=n.slice(a,e).trim();if(!o){a=e+1;continue}let s=1,c=e+1;for(;c<n.length&&s>0;)n[c]===`{`?s++:n[c]===`}`&&s--,c++;let l=n.slice(e+1,c-1);if(/^@(media|supports|container|layer)\b/i.test(o))i+=`${o}{${hy(l,t)}}`;else if(/^@(keyframes|-webkit-keyframes|font-face|property|counter-style)\b/i.test(o))i+=`${o}{${l}}`;else{let e=o.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>e.includes(`&`)?e.replaceAll(`&`,r):`${r} ${e}`);e.length&&(i+=`${e.join(`,`)}{${l}}`)}a=c}return i}function ote(e){let t={string:String,number:Number,boolean:Boolean,array:Array,object:Object};return Object.fromEntries(Object.entries(e.props??{}).map(([e,n])=>{let r=n.type.split(`|`).map(e=>t[e.trim()]).filter(Boolean);return[e,{type:r.length===1?r[0]:r,required:n.required===!0}]}))}function ste(e,t){if(!t||my.has(e)||typeof document>`u`)return;my.add(e);let n=document.createElement(`style`);n.dataset.projectWidget=e,n.textContent=hy(t,e),document.head.append(n)}function cte(e,t){let n=ate(t,e.name);return W({name:`ProjectWidget${e.name}`,props:ote(e),components:new Proxy({},{get:(e,n)=>Kv(t)[String(n)],has:(e,n)=>String(n)in Kv(t)}),setup(r,{slots:a}){let o=Cv(),s=ee(),c=M(``),l=de({}),u=de({}),d=M(!!e.data),p=M(``),m=de({}),h=M(!e.script),_,v=!1,y=!1,b=!1,x;function S(){if(b||v)return;if(b=!0,!e.script){h.value=!0;return}let t=new Set([`props`,`data`,`dataErrors`,`dataLoading`,`dataError`]),n=new Proxy({},{has:(e,n)=>typeof n==`string`&&(t.has(n)||Object.hasOwn(m,n)),get:(e,t)=>t===`props`?r:t===`data`?l:t===`dataErrors`?u:t===`dataLoading`?d:t===`dataError`?p:typeof t==`string`?m[t]:void 0,set:(e,n,r)=>(typeof n!=`string`||t.has(n)||(m[n]=r),!0)});try{x=ve(!0);let t=x.run(()=>yv(e.script)(...Object.values(_v),o,n));t&&Object.assign(m,t)}catch(e){x?.stop(),x=void 0,c.value=e instanceof Error?e.message:String(e)}finally{h.value=!0}}async function C(){if(e.data&&!v&&!(y&&typeof document<`u`&&document.visibilityState===`hidden`)){d.value=!0,p.value=``;try{let n=await py(t,e.name);if(v)return;Object.assign(l,n.data);for(let e of Object.keys(u))delete u[e];Object.assign(u,n.errors),Object.keys(n.errors).length&&(p.value=`Не удалось прочитать: ${Object.keys(n.errors).join(`, `)}`)}catch(e){v||(p.value=e instanceof Error?e.message:`Данные проекта недоступны`)}finally{v||(y=!0,d.value=!1,S())}}}ste(n,e.styles),pv().then(()=>{v||(s.value=gv(e.template))}).catch(e=>{v||(c.value=e instanceof Error?e.message:String(e))}),f(()=>{e.data?C():S(),e.refresh&&(_=setInterval(C,e.refresh*1e3))}),g(()=>{v=!0,x?.stop(),_&&clearInterval(_)});let w=new Proxy({data:l,dataErrors:u,dataLoading:d,dataError:p,$slots:a},{get(e,t){if(typeof t==`string`){if(Object.hasOwn(r,t))return r[t];if(Object.hasOwn(m,t))return re(m[t])}return re(Reflect.get(e,t))},has(e,t){return typeof t==`string`&&(Object.hasOwn(r,t)||Object.hasOwn(m,t))||t in e},set(e,t,n){return typeof t==`string`&&Object.hasOwn(r,t)?!0:typeof t==`string`&&Object.hasOwn(m,t)?(m[t]=n,!0):Reflect.set(e,t,n)}}),T=[];return()=>{if(c.value)return i(`div`,{class:`project-widget-failure`,role:`alert`},c.value);if(d.value)return i(`div`,{class:`project-widget-loading`},`Читаю данные…`);if(!h.value)return i(`div`,{class:`project-widget-loading`},`Запускаю скрипт…`);try{return i(`div`,{class:`project-widget ${n}`},[s.value?s.value(w,T):null])}catch(e){return c.value=e instanceof Error?e.message:String(e),i(`div`,{class:`project-widget-failure`,role:`alert`},c.value)}}}})}var gy=new Map;function _y(e,t=!1){if(!e)return Promise.resolve(void 0);if(!t){let t=gy.get(e);if(t)return t}let n=dy(e).then(t=>{if(!t.trusted||!t.widgets.length)return Wv(e),t;let n={};for(let r of t.widgets)n[r.name]={definition:r,component:cte(r,e)};return Uv(e,n),t}).catch(()=>{Wv(e)});return gy.set(e,n),n.catch(()=>gy.delete(e)),n}function lte(e){return gy.delete(e),_y(e,!0)}var vy=Symbol(`agent-widget-form-preset`),yy=Symbol(`agent-widget-form-chrome`);async function by(e,t,n){await pv();let r=sv(e);if(r.scriptOpen)return`Незакрытый <script>`;if(!r.template.trim())return t;let i=[...r.template.matchAll(/<([A-Z][A-Za-z0-9]*)\b/g)].find(([,e])=>!qv(e,n));if(i)return`Неизвестный компонент ${i[1]}`;try{r.script&&yv(r.script),gv(r.template);for(let[,e]of r.template.matchAll(/<([A-Z][A-Za-z0-9]*)\b/g)){let t=(n?Gv(n)[e]:void 0)?.definition;t?.script&&yv(t.script),t?.template&&gv(t.template)}return}catch(e){return e instanceof Error?e.message:String(e)}}function xy(e,t){return by(e,`Пустая форма`,t)}var ute=/(^|\n)\s{0,3}(#{1,6}\s+\S|[-*+]\s+\S|\d+\.\s+\S)|\*\*[^*\n]+\*\*|`[^`\n]+`|(^|\n)\s*\|?\s*:?-{3,}/;function dte(e){let{template:t}=sv(e),n=t.replace(/<!--[\s\S]*?-->/g,``).replace(/<[^>]*>/g,`
|
|
23
|
-
`);return ute.test(n)?`Внутри виджета остался Markdown: он показывается как сломанный исходный текст`:void 0}async function Sy(e,t){let n=sy(e,{known:e=>qv(e,t),streaming:!1});for(let e of n){if(e.type===`widget`){let n=await by(e.source,`Пустой виджет ${e.name}`,t)??dte(e.source);if(n)return`${e.name}: ${n}`;continue}if(e.type!==`markdown`)continue;let n=``;for(let r of e.text.split(`
|
|
24
|
-
`)){let e=/^ {0,3}(`{3,}|~{3,})/.exec(r)?.[1];if(e){n?e[0]===n[0]&&e.length>=n.length&&(n=``):n=e;continue}let i=!n&&/^ {0,3}<([A-Z][A-Za-z0-9]*)(?=[\s/>]|$)/.exec(r)?.[1];if(i&&qv(i,t))return`Незакрытый или неверно оформленный виджет ${i}`}}}function fte(e){return(/^```(?:markdown|md|text|vue|html)?\s*\n?([\s\S]*?)\n?```$/i.exec(e.trim())?.[1]??e).trim()||void 0}function pte(e,t){let n=``;for(let r=t;r<e.length;r++){let t=e[r];if(n)t===n&&(n=``);else if(t===`"`||t===`'`||t==="`")n=t;else if(t===`>`)return r+1}return-1}function mte(e){let t=/^<\s*([A-Za-z][\w-]*)/.exec(e)?.[1];if(!t)return e;let n=e.length-1,r=e.indexOf(t,1)+t.length,i=e.slice(0,r),a=new Set;for(;r<n;){let t=r;for(;r<n&&/\s/.test(e[r]);)r++;if(r>=n||e[r]===`/`){i+=e.slice(t),r=e.length;break}let o=r;for(;r<n&&!/[\s=/>]/.test(e[r]);)r++;let s=e.slice(o,r),c=r,l=r;for(;l<n&&/\s/.test(e[l]);)l++;if(e[l]===`=`){for(l++;l<n&&/\s/.test(e[l]);)l++;let t=e[l];if(t===`"`||t===`'`||t==="`"){for(l++;l<n&&e[l]!==t;)l++;l<n&&l++}else for(;l<n&&!/[\s>]/.test(e[l]);)l++;c=l}a.has(s)||(a.add(s),i+=e.slice(t,c)),r=c}return i+e.slice(r)}function hte(e){let t=``,n=0;for(;n<e.length;){let r=e.indexOf(`<`,n);if(r<0)return t+e.slice(n);if(t+=e.slice(n,r),e.startsWith(`<!--`,r)){let i=e.indexOf(`-->`,r);if(i<0)return t+e.slice(r);t+=e.slice(r,i+3),n=i+3;continue}let i=e[r+1]??``;if(!/[A-Za-z]/.test(i)){t+=`<`,n=r+1;continue}let a=pte(e,r+1);if(a<0)return t+e.slice(r);t+=mte(e.slice(r,a)),n=a}return t}function Cy(e){let t=sv(e);if(t.scriptOpen)return e;let n=uv(hte(t.template));return t.script?`<script>${t.script}<\/script>${n}`:n}function gte(e,t){let n=([...e.matchAll(/```(?:vue|html)?\s*([\s\S]*?)```/gi)].at(-1)?.[1]??e).trim();if(n&&sy(n,{known:e=>qv(e,t),streaming:!1}).filter(e=>e.type!==`script`&&(e.type!==`markdown`||e.text.trim())).at(-1)?.type===`widget`)return ly(n,t)}function _te(e){return dy(e)}async function vte(e,t){let n=await fy(e,t);return await lte(e),n}function yte(e){let t=M(),n=M(``),r=M(``),i=Je(`project-widgets:${V()}`,()=>({surface:`projectWidgets`,projectId:e(),trusted:t.value?.trusted===!0,widgets:t.value?.widgets.length??0,busy:n.value})),a=B(()=>t.value?.widgets??[]),o=B(()=>t.value?.trusted===!0),s=B(()=>t.value?.file??``),c=B(()=>t.value?.exists===!0),l=B(()=>t.value?.problem??``),u=B(()=>r.value||l.value);async function d(e){r.value=``;try{return await e()}catch(e){throw r.value=e instanceof Error?e.message:`Ошибка виджетов проекта`,e}}async function f(){let n=e();if(!n)t.value=void 0;else return d(async()=>(t.value=await _te(n),t.value))}async function p(r){let i=e();n.value=`trust`;try{return await d(async()=>(t.value=await vte(i,r),t.value))}finally{n.value=``}}return i.scope.registerCommand({id:`ide.project.widgets.list`,palette:!1,title:`Виджеты проекта`,description:`Возвращает виджеты из .projector/widgets.json, путь к файлу, признак доверия и ошибку чтения. Недоверенный файл не попадает ни в промпт, ни в ответы.`,run:async()=>{await f();let n=t.value??{projectId:e(),path:``,file:``,exists:!1,trusted:!1,widgets:[]};return{...n,widgets:n.widgets.map(({template:e,script:t,styles:n,...r})=>r)}}}),i.scope.registerCommand({id:`ide.project.widgets.trust`,palette:!1,title:`Доверять виджетам проекта`,description:`Выдаёт или отзывает доверие к текущему содержимому .projector/widgets.json. Доверие привязано к хешу файла: правка файла отзывает его автоматически.`,arguments:{trusted:`boolean: доверять ли текущему файлу`},enabled:()=>!n.value,run:e=>{let t=J(e).trusted;if(typeof t!=`boolean`)throw Error(`trusted должен быть boolean`);return p(t)}}),{data:t,widgets:a,trusted:o,file:s,exists:c,problem:l,busy:n,error:u,load:f,trust:p,commands:i}}var bte=W({__name:`ProjectWidgets`,props:{project:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,{widgets:r,trusted:i,file:a,exists:o,problem:s,busy:c,error:l,load:u,trust:d,commands:f}=yte(()=>n.project.id);E(()=>n.project.id,()=>void u().catch(()=>void 0),{immediate:!0});async function p(e){await d(e).catch(()=>void 0)}let m={props:n,widgets:r,trusted:i,file:a,exists:o,problem:s,busy:c,error:l,load:u,trust:d,commands:f,setTrust:p,UiButton:q,UiCard:je,UiHint:we,UiInline:Be,UiMessage:Te,UiStack:Ed};return Object.defineProperty(m,"__isScriptSetup",{enumerable:!1,value:!0}),m}}),xte={class:`head`},Ste={class:`file`},Cte={key:0,class:`trusted`},wte={key:1,class:`untrusted`},Tte={key:2,class:`untrusted`},Ete={key:2,class:`empty`},Dte={class:`title`},Ote={key:0,class:`tag`},kte={key:1,class:`tag`},Ate={key:2,class:`tag`},jte={class:`summary`},Mte={key:0},Nte={key:1},Pte={key:2},Fte={key:3};function Ite(t,n,r,i,a,o){return K(),F(i.UiStack,{as:`section`,gap:4,class:`project-widgets`,onFocusin:n[2]||=e=>i.commands.scope.activate(),onPointerdown:n[3]||=e=>i.commands.scope.activate()},{default:e(()=>[I(`div`,xte,[y(i.UiInline,{wrap:``,gap:2},{default:e(()=>[I(`span`,Ste,X(i.file||`.projector/widgets.json`),1),i.trusted?(K(),U(`span`,Cte,`доверено`)):i.exists?(K(),U(`span`,wte,`не доверено`)):(K(),U(`span`,Tte,`файла ещё нет`))]),_:1}),y(i.UiInline,{gap:2},{default:e(()=>[i.exists&&!i.trusted?(K(),F(i.UiButton,{key:0,appearance:`solid`,size:`sm`,busy:i.busy===`trust`,disabled:!!i.problem,onClick:n[0]||=e=>i.setTrust(!0)},{default:e(()=>[...n[4]||=[G(`Доверять`,-1)]]),_:1},8,[`busy`,`disabled`])):i.trusted?(K(),F(i.UiButton,{key:1,appearance:`outline`,size:`sm`,busy:i.busy===`trust`,onClick:n[1]||=e=>i.setTrust(!1)},{default:e(()=>[...n[5]||=[G(`Отозвать доверие`,-1)]]),_:1},8,[`busy`])):D(`v-if`,!0)]),_:1})]),i.problem?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.problem),1)]),_:1})):i.exists&&!i.trusted?(K(),F(i.UiMessage,{key:1,tone:`muted`,variant:`note`,size:`xs`,flush:``},{default:e(()=>[...n[6]||=[G(` Виджеты из этого файла не попадают в промпт агента и не рисуются в ответах. Проверьте файл и выдайте доверие. `,-1)]]),_:1})):D(`v-if`,!0),!i.widgets.length&&!i.problem?(K(),U(`p`,Ete,[...n[7]||=[G(` В файле пока нет виджетов. Опишите их в `,-1),I(`code`,null,`.projector/widgets.json`,-1),G(` — после доверия они появятся у агента в разделе «Виджеты проекта». `,-1)]])):D(`v-if`,!0),(K(!0),U(P,null,S(i.widgets,t=>(K(),F(i.UiCard,{key:t.name,as:`article`,appearance:`frame`},{default:e(()=>[I(`div`,Dte,[I(`code`,null,X(t.name),1),t.special?(K(),U(`span`,Ote,`по требованию`)):D(`v-if`,!0),t.answer?(K(),U(`span`,kte,`форма ответа`)):D(`v-if`,!0),t.script?(K(),U(`span`,Ate,`свой скрипт`)):D(`v-if`,!0)]),I(`p`,jte,X(t.summary),1),y(i.UiInline,{wrap:``,gap:2,class:`meta`},{default:e(()=>[t.data?(K(),U(`span`,Mte,` данные: `+X(Object.keys(t.data).join(`, `)),1)):D(`v-if`,!0),t.refresh?(K(),U(`span`,Nte,`обновление: `+X(t.refresh)+` с`,1)):D(`v-if`,!0),t.styles?(K(),U(`span`,Pte,`свои стили`)):D(`v-if`,!0),t.script?(K(),U(`span`,Fte,`скрипт: `+X(t.script.length)+` символов`,1)):D(`v-if`,!0),I(`span`,null,X(Object.keys(t.props??{}).length)+` свойств`,1)]),_:2},1024)]),_:2},1024))),128)),y(i.UiHint,null,{default:e(()=>[...n[8]||=[G(` Файл действует только после доверия. Шаблон собирается из встроенных виджетов и HTML, а отдельное поле `,-1),I(`code`,null,`script`,-1),G(` выполняется в интерфейсе после загрузки данных. Доверяйте только тому коду, который готовы запустить. Данные читаются из JSON-файлов проекта. `,-1)]]),_:1}),i.error&&i.error!==i.problem?(K(),F(i.UiMessage,{key:3,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0)]),_:1})}var Lte=H(bte,[[`render`,Ite],[`__scopeId`,`data-v-f21bb809`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/project-widgets/ui/ProjectWidgets.vue`]]);function Rte(e,t){let r=Mu(),i=M(Nu(e())),a=M(JSON.stringify(i.value)),o=B(()=>JSON.stringify(i.value)!==a.value),s=M(!1),c=M(!1),l=M(``),u=M(``),d=M(null),f=B(()=>Pu(i.value.commands,d.value??[])),p=M([]),m=B(()=>Iu(i.value));E(o,e=>{e&&(u.value=``),t.onDirty(e)},{immediate:!0}),E(e,e=>{!o.value&&!s.value&&JSON.stringify(Nu(e))!==a.value&&h(e)});function h(t=e()){i.value=Nu(t),a.value=JSON.stringify(i.value),l.value=``,u.value=``,d.value=null,p.value=[]}function _(){return!s.value&&(!o.value||window.confirm(`Закрыть настройки без сохранения изменений?`))}ac(_),oc((e,t)=>e.path===t.path||_());function v(e){o.value&&(e.preventDefault(),e.returnValue=``)}window.addEventListener(`beforeunload`,v),g(()=>window.removeEventListener(`beforeunload`,v));function y(){i.value.commands.push({id:Mt(),name:``,cmd:``})}function b(e){Lu(i.value.commands,e)}function x(e){let t=new Map(i.value.commands.map(e=>[e.id,e])),n=e.map(e=>t.get(e)).filter(e=>!!e);n.length===i.value.commands.length&&(i.value.commands=n)}function S(e){i.value.defaultCommandId=e}function C(e){let t=i.value.commands.find(t=>t.id===e);return t?Fu(t,i.value):``}function w(e){i.value.commands.length<=1||(i.value.commands=i.value.commands.filter(t=>t.id!==e),i.value.defaultCommandId===e&&(i.value.defaultCommandId=i.value.commands[0].id))}async function T(){c.value=!0,l.value=``;try{d.value=(await Ou(e().path)).commands,p.value=f.value.map(e=>e.id)}catch(e){l.value=e instanceof Error?e.message:`Не удалось прочитать команды`}finally{c.value=!1}}function D(){i.value.commands.push(...f.value.filter(e=>p.value.includes(e.id))),d.value=null,p.value=[]}async function O(){if(!s.value&&o.value&&(l.value=m.value,!l.value)){s.value=!0;try{h(await r.save(e().id,{...i.value,name:i.value.name.trim(),url:i.value.url.trim(),icon:i.value.icon.trim(),commands:i.value.commands.map(e=>({...e,name:e.name.trim(),cmd:e.cmd.trim()}))})),u.value=`Настройки сохранены`}catch(e){l.value=e instanceof Error?e.message:`Не удалось сохранить настройки`}finally{s.value=!1}}}async function k(){if(!s.value&&window.confirm(`Убрать «${e().name}» из Projector? Терминалы и запущенные процессы проекта будут завершены. Файлы останутся на диске.`)){s.value=!0,l.value=``;try{await r.remove(e().id),a.value=JSON.stringify(i.value),await t.afterRemove()}catch(e){l.value=e instanceof Error?e.message:`Не удалось убрать проект`}finally{s.value=!1}}}let A={project:e,draft:i,dirty:o,busy:s,discovering:c,error:l,notice:u,discovered:d,candidates:f,selected:p,validation:m,setCommandOrder:x,duplicateCommand:b,setDefaultCommand:S,problemOf:C,reset:h,canLeave:_,addCommand:y,removeCommand:w,discover:T,importCommands:D,save:O,remove:k};return n(wy,A),A}var wy=Symbol(`project-settings-form`);function Ty(){let e=z(wy);if(!e)throw Error(`Раздел настроек проекта вне формы`);return e}var zte=W({__name:`ProjectGeneralSection`,setup(e,{expose:t}){t();let{draft:n,project:r,busy:i}=Ty(),a={draft:n,project:r,busy:i,UiControl:Se,UiStack:Ed,UiField:Re,UiHint:we};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),Bte={class:`project-root`};function Vte(t,n,r,i,a,o){return K(),F(i.UiStack,{as:`fieldset`,disabled:i.busy},{default:e(()=>[y(i.UiField,{layout:`plain`,label:`Название`,required:``},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.draft.name,"onUpdate:modelValue":n[0]||=e=>i.draft.name=e,autocomplete:`off`}),null,16,[`modelValue`])]),_:1}),y(i.UiField,{layout:`plain`,as:`div`,label:`Папка проекта`},{default:e(()=>[I(`code`,Bte,X(i.project().path),1)]),_:1}),y(i.UiField,{layout:`plain`,label:`Путь к иконке`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.draft.icon,"onUpdate:modelValue":n[1]||=e=>i.draft.icon=e,placeholder:`Автоматически`,spellcheck:`false`}),null,16,[`modelValue`])]),_:1}),y(i.UiHint,null,{default:e(()=>[...n[2]||=[G(`Файл внутри проекта, например public/icon.svg. Пустое поле — автоматический выбор.`,-1)]]),_:1})]),_:1},8,[`disabled`])}var Hte=H(zte,[[`render`,Vte],[`__scopeId`,`data-v-27567e44`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/catalog/ui/settings/ProjectGeneralSection.vue`]]),Ute=W({__name:`UiDisclosureSummary`,props:{variant:{type:String,required:!1,default:`inline`},highlight:{type:Boolean,required:!1,default:!0}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function Wte(e,t,n,r,i,a){return K(),U(`summary`,{class:Y([`ui-disclosure-summary`,[`variant-${n.variant}`,{highlight:n.highlight}]])},[c(e.$slots,`default`,{},void 0,!0)],2)}var Ey=H(Ute,[[`render`,Wte],[`__scopeId`,`data-v-c321da99`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiDisclosureSummary.vue`]]),Gte={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Kte(e,t){return K(),U(`svg`,Gte,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14m-7-7v14`},null,-1)]])}var Dy=L({name:`lucide-plus`,render:Kte}),qte={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Jte(e,t){return K(),U(`svg`,qte,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}),I(`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`})],-1)]])}var Oy=L({name:`lucide-copy`,render:Jte}),Yte={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Xte(e,t){return K(),U(`svg`,Yte,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.12 2.12 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.12 2.12 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.12 2.12 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.12 2.12 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.12 2.12 0 0 0 1.597-1.16z`},null,-1)]])}var ky=L({name:`lucide-star`,render:Xte}),Zte=W({__name:`ProjectScenariosSection`,props:{scenarioId:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=Ty(),{draft:i,busy:a,discovering:o,discovered:s,candidates:c,selected:l,dirty:u}=r,d=B(()=>i.value.commands.find(e=>e.id===n.scenarioId)),f=B(()=>i.value.commands.findIndex(e=>e.id===d.value?.id)),p=e=>e.id===i.value.defaultCommandId,m=e=>!!(e.cwd||e.url||e.mode),h=e=>e.cwd?`в папке ${e.cwd}`:`в корне проекта`,g=e=>(e.mode||i.value.mode)===`window`?`в окне приложения`:`в терминале`,_=e=>e.url||i.value.url||`не задан`;function v(e){_g.value=e?vg(e):`scenarios`}function y(){r.addCommand(),v(i.value.commands.at(-1)?.id)}function b(e){r.duplicateCommand(e.id),v(i.value.commands[f.value+1]?.id)}function x(e){i.value.commands.length<=1||(r.removeCommand(e.id),v(void 0))}let S={props:n,form:r,draft:i,busy:a,discovering:o,discovered:s,candidates:c,selected:l,dirty:u,current:d,index:f,isDefault:p,hasExtras:m,placeOf:h,modeOf:g,addressOf:_,open:v,addScenario:y,duplicate:b,remove:x,UiControl:Se,UiInline:Be,UiStack:Ed,UiField:Re,UiHint:we,UiButton:q,UiMessage:Te,UiDisclosureSummary:Ey,get IconPlus(){return Dy},get IconTrash(){return og},get IconCopy(){return Oy},get IconStar(){return ky},get IconChevron(){return Ch}};return Object.defineProperty(S,"__isScriptSetup",{enumerable:!1,value:!0}),S}}),Qte={class:`defaults`},$te={key:0,class:`script-picker`},ene={class:`summary`,"aria-live":`polite`},tne=[`open`],nne={class:`options`};function rne(t,n,r,i,a,o){return K(),F(i.UiStack,{as:`fieldset`,disabled:i.busy,class:`scenarios`},{default:e(()=>[i.current?(K(),U(`section`,{key:i.current.id,class:`detail`},[y(i.UiInline,{class:`head`,align:`end`,justify:`normal`},{default:e(()=>[y(i.UiField,{layout:`plain`,label:`Название`,required:``,class:`grow`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.current.name,"onUpdate:modelValue":n[5]||=e=>i.current.name=e,class:`name-input`,"aria-label":`Название сценария ${i.index+1}`,placeholder:`dev`}),null,16,[`modelValue`,`aria-label`])]),_:1}),y(i.UiButton,{size:`sm`,appearance:i.isDefault(i.current)?`solid`:`outline`,"aria-pressed":i.isDefault(i.current),title:i.isDefault(i.current)?`Основной сценарий`:`Сделать основным`,onClick:n[6]||=e=>i.form.setDefaultCommand(i.current.id)},{default:e(()=>[y(i.IconStar,{"aria-hidden":`true`}),G(X(i.isDefault(i.current)?`Основной`:`Сделать основным`),1)]),_:1},8,[`appearance`,`aria-pressed`,`title`]),y(i.UiButton,{shape:`icon`,size:`sm`,"aria-label":`Дублировать сценарий`,title:`Дублировать`,onClick:n[7]||=e=>i.duplicate(i.current)},{default:e(()=>[y(i.IconCopy,{"aria-hidden":`true`})]),_:1}),y(i.UiButton,{shape:`icon`,size:`sm`,disabled:i.draft.commands.length<=1,"aria-label":`Удалить сценарий`,title:i.draft.commands.length<=1?`Нужен хотя бы один сценарий`:`Удалить сценарий`,onClick:n[8]||=e=>i.remove(i.current)},{default:e(()=>[y(i.IconTrash,{"aria-hidden":`true`})]),_:1},8,[`disabled`,`title`])]),_:1}),y(i.UiField,{layout:`plain`,label:`Команда запуска`,required:``},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.current.cmd,"onUpdate:modelValue":n[9]||=e=>i.current.cmd=e,"aria-label":`Команда запуска ${i.index+1}`,mono:``,placeholder:`pnpm dev`,spellcheck:`false`}),null,16,[`modelValue`,`aria-label`])]),_:1}),I(`p`,ene,[G(` Запустится `+X(i.placeOf(i.current))+`, `+X(i.modeOf(i.current))+`, адрес `,1),I(`code`,null,X(i.addressOf(i.current)),1)]),I(`details`,{class:`more`,open:i.hasExtras(i.current)},[y(i.UiDisclosureSummary,{variant:`fit`},{default:e(()=>[y(i.IconChevron,{class:`chevron`,"aria-hidden":`true`}),n[19]||=G(`Дополнительно`,-1)]),_:1}),I(`div`,nne,[y(i.UiField,{layout:`plain`,label:`Папка`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.current.cwd,"onUpdate:modelValue":n[10]||=e=>i.current.cwd=e,"aria-label":`Папка сценария ${i.index+1}`,mono:``,placeholder:`корень проекта`,spellcheck:`false`}),null,16,[`modelValue`,`aria-label`])]),_:1}),y(i.UiField,{layout:`plain`,label:`Адрес`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.current.url,"onUpdate:modelValue":n[11]||=e=>i.current.url=e,"aria-label":`Адрес сценария ${i.index+1}`,mono:``,placeholder:i.draft.url?`из проекта`:`не задан`,spellcheck:`false`}),null,16,[`modelValue`,`aria-label`,`placeholder`])]),_:1}),y(i.UiField,{layout:`plain`,label:`Запуск`},{default:e(({control:t})=>[y(i.UiControl,R(t,{"model-value":i.current.mode??``,as:`select`,"aria-label":`Режим сценария ${i.index+1}`,"onUpdate:modelValue":n[12]||=e=>i.current.mode=e||void 0}),{default:e(()=>[...n[20]||=[I(`option`,{value:``},`как у проекта`,-1),I(`option`,{value:`server`},`в терминале`,-1),I(`option`,{value:`window`},`в окне приложения`,-1)]]),_:1},16,[`model-value`,`aria-label`])]),_:1})])],8,tne),i.form.problemOf(i.current.id)?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`,role:`alert`},{default:e(()=>[G(X(i.form.problemOf(i.current.id)),1)]),_:1})):D(`v-if`,!0),i.dirty?(K(),F(i.UiHint,{key:1},{default:e(()=>[...n[21]||=[G(`Сохраните изменения, чтобы они применились к запуску.`,-1)]]),_:1})):D(`v-if`,!0)])):(K(),U(P,{key:0},[y(i.UiInline,{gap:3,justify:`between`,wrap:``},{default:e(()=>[y(i.UiHint,null,{default:e(()=>[...n[13]||=[G(` Порядок задаётся перетаскиванием пунктов в навигации слева: он виден в меню запуска. `,-1)]]),_:1}),y(i.UiInline,{gap:2},{default:e(()=>[y(i.UiButton,{size:`sm`,onClick:i.addScenario},{default:e(()=>[y(i.IconPlus,{"aria-hidden":`true`}),n[14]||=G(`Добавить`,-1)]),_:1}),y(i.UiButton,{disabled:i.discovering,onClick:i.form.discover},{default:e(()=>[G(X(i.discovering?`читаю…`:`из package.json`),1)]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1}),I(`div`,Qte,[y(i.UiField,{layout:`plain`,label:`Адрес по умолчанию`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.draft.url,"onUpdate:modelValue":n[0]||=e=>i.draft.url=e,type:`url`,placeholder:`для сценариев без своего адреса, например http://localhost:5173`,spellcheck:`false`}),null,16,[`modelValue`])]),_:1}),y(i.UiField,{layout:`plain`,label:`Запуск по умолчанию`},{default:e(({control:t})=>[y(i.UiControl,R(t,{as:`select`,"model-value":i.draft.mode,"onUpdate:modelValue":n[1]||=e=>i.draft.mode=e}),{default:e(()=>[...n[15]||=[I(`option`,{value:`server`},`в терминале`,-1),I(`option`,{value:`window`},`в окне приложения`,-1)]]),_:1},16,[`model-value`])]),_:1})]),i.discovered===null?D(`v-if`,!0):(K(),U(`div`,$te,[i.candidates.length?(K(),U(P,{key:0},[(K(!0),U(P,null,S(i.candidates,t=>(K(),F(i.UiInline,{as:`label`,key:t.id,class:`script-option`,align:`baseline`,justify:`normal`},{default:e(()=>[y(i.UiControl,{modelValue:i.selected,"onUpdate:modelValue":n[2]||=e=>i.selected=e,type:`checkbox`,value:t.id},null,8,[`modelValue`,`value`]),I(`span`,null,X(t.name),1),I(`code`,null,X(t.cmd),1)]),_:2},1024))),128)),y(i.UiInline,{class:`picker-actions`,gap:3,justify:`between`,wrap:``},{default:e(()=>[y(i.UiButton,{disabled:!i.selected.length,onClick:i.form.importCommands},{default:e(()=>[...n[16]||=[G(`Добавить выбранные`,-1)]]),_:1},8,[`disabled`,`onClick`]),y(i.UiButton,{onClick:n[3]||=e=>i.discovered=null},{default:e(()=>[...n[17]||=[G(`Отмена`,-1)]]),_:1})]),_:1})],64)):(K(),U(P,{key:1},[y(i.UiHint,null,{default:e(()=>[G(X(i.discovered.length?`Все найденные команды уже добавлены.`:`В этой папке нет скриптов package.json. Добавьте свою команду.`),1)]),_:1}),y(i.UiButton,{onClick:n[4]||=e=>i.discovered=null},{default:e(()=>[...n[18]||=[G(`Закрыть`,-1)]]),_:1})],64))]))],64))]),_:1},8,[`disabled`])}var ine=H(Zte,[[`render`,rne],[`__scopeId`,`data-v-3a937d66`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/catalog/ui/settings/ProjectScenariosSection.vue`]]),ane=W({__name:`ProjectRemoveSection`,setup(e,{expose:t}){t();let n={form:Ty(),UiInline:Be,UiHint:we,UiButton:q};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function one(t,n,r,i,a,o){return K(),F(i.UiInline,{class:`remove`,justify:`between`,wrap:``,gap:3},{default:e(()=>[y(i.UiHint,null,{default:e(()=>[...n[0]||=[G(`Файлы останутся на диске. Терминалы и процессы проекта будут завершены.`,-1)]]),_:1}),y(i.UiButton,{tone:`danger`,disabled:i.form.busy.value,onClick:i.form.remove},{default:e(()=>[...n[1]||=[G(`Убрать проект`,-1)]]),_:1},8,[`disabled`,`onClick`])]),_:1})}var sne=H(ane,[[`render`,one],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/catalog/ui/settings/ProjectRemoveSection.vue`]]),cne=W({__name:`ProjectSettings`,props:{project:{type:Object,required:!0},afterRemove:{type:Function,required:!0}},emits:[`dirty`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=Rte(()=>r.project,{afterRemove:r.afterRemove,onDirty:e=>i(`dirty`,e)}),{dirty:o,busy:s,error:c,notice:l,validation:u}=a;t({canLeave:a.canLeave,save:a.save});let d=B(()=>[{id:`general`,title:`Основное`,group:`Проект`,description:`Название, папка и иконка проекта.`,keywords:`имя название иконка icon папка путь`,component:Hte},{id:`scenarios`,title:`Сценарии`,group:`Запуск`,description:`Команды запуска проекта: dev, build, test и свои. Можно импортировать из package.json.`,keywords:`команды запуск scripts package.json npm pnpm dev build test сценарии`,component:ine,props:{scenarioId:yg(_g.value)},reorder:e=>a.setCommandOrder(e.map(yg).filter(e=>!!e)),items:a.draft.value.commands.map(e=>({id:vg(e.id),title:e.name.trim()||`без названия`,hint:e.id===a.draft.value.defaultCommandId?`основной`:void 0,problem:!!a.problemOf(e.id)}))},{id:`roles`,title:`Роли проекта`,group:`Агент`,description:`Chat-роли из .projector/roles.json: агент, модель и настройки. Файл действует только после доверия.`,keywords:`роли agent roles проект чат пресет preset модель доверие trust`,component:iv,props:{project:r.project}},{id:`widgets`,title:`Виджеты проекта`,group:`Агент`,description:`Свои компоненты из .projector/widgets.json: шаблон, данные и формы. Файл действует только после доверия.`,keywords:`виджеты widgets компоненты agent проект шаблон данные доверие trust`,component:Lte,props:{project:r.project}},{id:`remove`,title:`Убрать проект`,group:`Управление`,description:`Убрать проект из Projector; файлы на диске не удаляются.`,keywords:`удалить убрать delete remove`,component:sne}]);function f(e){(e.ctrlKey||e.metaKey)&&qe(e)===`s`&&(e.preventDefault(),e.stopPropagation(),a.save())}let p={props:r,emit:i,form:a,dirty:o,busy:s,error:c,notice:l,validation:u,sections:d,saveKey:f,readout:e=>{let t=a.draft.value,n=t.commands.map(e=>`${e.id===t.defaultCommandId?`• `:` `}${e.name||`(без имени)`} — ${e.cmd||`(без команды)`}`);return{note:`Настройки проекта · ${r.project.name}`,text:Nn(`Проект: ${t.name||`(без имени)`}`,`Путь: ${t.path}`,`Раздел: ${e.sectionTitle||e.section||`—`}`,t.url?`Адрес: ${t.url} · режим ${t.mode}`:`Режим: ${t.mode}`,t.icon?`Иконка: ${t.icon}`:`Иконка: не задана`,`Команды:\n${n.join(`
|
|
25
|
-
`)}`,`Изменения: ${a.dirty.value?`есть несохранённые`:`нет`}`,a.error.value?`Ошибка: ${a.error.value}`:``,a.dirty.value&&a.validation.value?`Проверка: ${a.validation.value}`:``,e.query?`Поиск: «${e.query}»`:``)}},UiPanel:sn,UiButton:q,get SettingsWorkbench(){return Gg},get selected(){return _g}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),lne={class:`save-bar`},une={class:`save-status`,role:`status`},dne={key:0,class:`error`,role:`alert`},fne={key:1,class:`error`,role:`status`};function pne(t,n,r,i,a,o){return K(),F(i.UiPanel,{as:`form`,sizing:`flex`,class:`project-settings`,"aria-label":`Настройки проекта`,onSubmit:N(i.form.save,[`prevent`]),onKeydownCapture:i.saveKey},{default:e(()=>[y(i.SettingsWorkbench,{embedded:``,title:`Настройки проекта`,scope:`settings:project`,sections:i.sections,selected:i.selected,read:i.readout,onSelect:n[1]||=e=>i.selected=e},{footer:e(()=>[I(`div`,lne,[I(`span`,une,X(i.notice||(i.dirty?`Есть несохранённые изменения`:`Нет изменений`)),1),y(i.UiButton,{disabled:i.busy||!i.dirty,onClick:n[0]||=e=>i.form.reset()},{default:e(()=>[...n[2]||=[G(`Сбросить`,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{appearance:`solid`,type:`submit`,disabled:i.busy||!i.dirty},{default:e(()=>[G(X(i.busy?`сохраняю…`:`Сохранить`),1)]),_:1},8,[`disabled`])]),i.error?(K(),U(`p`,dne,X(i.error),1)):i.dirty&&i.validation?(K(),U(`p`,fne,X(i.validation),1)):D(`v-if`,!0)]),_:1},8,[`sections`,`selected`])]),_:1},8,[`onSubmit`])}var mne=H(cne,[[`render`,pne],[`__scopeId`,`data-v-1a30b681`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/catalog/ui/ProjectSettings.vue`]]),Ay=(e,t)=>{if(typeof e!=`string`)throw Error(`${t} должен быть строкой`);return e.trim()},hne=e=>{if(e===void 0||e===``)return``;if(e!==`server`&&e!==`window`)throw Error(`mode должен быть server или window`);return e};function jy(e,t){t.cwd!==void 0&&(e.cwd=Ay(t.cwd,`cwd`)),t.url!==void 0&&(e.url=Ay(t.url,`url`)),t.mode!==void 0&&(e.mode=hne(t.mode)||void 0)}var My={cwd:`string (необязательно): папка внутри проекта, например apps/web; пустая строка — корень проекта`,url:`string (необязательно): адрес приложения сценария http(s)://…; пустая строка — адрес проекта`,mode:`string (необязательно): server — в терминале, window — в окне приложения; пустая строка — как у проекта`};function gne(e,t){let n=Mu(),r=!1,i=()=>{let t=e();if(!t)throw Error(`Проект не открыт`);return t},a=Je(`project:settings`,()=>{let n=e();return{surface:`project`,projectId:n?.id??null,name:n?.name??null,icon:n?.icon??null,url:n?.url??null,mode:n?.mode??null,defaultCommandId:n?.defaultCommandId??null,dirty:t()}});function o(e,t){let n=t.id===void 0?void 0:Ay(t.id,`id`),r=t.name===void 0?void 0:Ay(t.name,`name`);if(!n&&!r)throw Error(`Укажите id или name команды`);let i=e.commands.find(e=>n?e.id===n:e.name===r);if(!i)throw Error(`Команда запуска не найдена`);return i}async function s(e){let a=i();if(t())throw Error(`В открытых настройках есть несохранённые изменения; сохраните или сбросьте их`);if(r)throw Error(`Настройки уже сохраняются`);let o=Nu(a);e(o);let s=Iu(o);if(s)throw Error(s);r=!0;try{return c(await n.save(a.id,o))}finally{r=!1}}let c=e=>({name:e.name,path:e.path,icon:e.icon,url:e.url,mode:e.mode,defaultCommandId:e.defaultCommandId,commands:e.commands}),l=(n,i,o,s,c,l=!0)=>a.scope.registerCommand({id:n,title:i,description:o,arguments:s,enabled:()=>!!e()&&(!l||!t()&&!r),run:e=>c(J(e))});l(`ide.project.settings.get`,`Показать настройки проекта`,`Возвращает название, иконку, адрес, режим запуска, команду по умолчанию и список команд запуска (таски) с их id.`,{},()=>c(i()),!1),l(`ide.project.settings.update`,`Изменить настройки проекта`,`Меняет только переданные поля и сохраняет их на диск. Изменения запуска применяются при следующем запуске.`,{name:`string (необязательно): название проекта`,icon:`string (необязательно): путь к иконке внутри проекта, например public/icon.svg; пустая строка — автоматический выбор`,url:`string (необязательно): адрес приложения http(s)://…; пустая строка — без адреса`,mode:`string (необязательно): server — команда работает в терминале, window — открыть окно приложения после запуска (нужен url)`,defaultCommandId:`string (необязательно): id команды запуска по умолчанию`},e=>s(t=>{if(e.name!==void 0&&(t.name=Ay(e.name,`name`)),e.icon!==void 0&&(t.icon=Ay(e.icon,`icon`)),e.url!==void 0&&(t.url=Ay(e.url,`url`)),e.mode!==void 0){if(e.mode!==`server`&&e.mode!==`window`)throw Error(`mode должен быть server или window`);t.mode=e.mode}e.defaultCommandId!==void 0&&(t.defaultCommandId=Ay(e.defaultCommandId,`defaultCommandId`))})),l(`ide.project.command.add`,`Добавить сценарий запуска`,`Добавляет сценарий запуска (команду), выполняемый в терминале из папки проекта или своей папки внутри него.`,{name:`string: название сценария, например dev`,cmd:`string: команда запуска, например pnpm dev`,makeDefault:`boolean (необязательно): сделать основным`,...My},e=>s(t=>{let n={id:Mt(),name:Ay(e.name,`name`),cmd:Ay(e.cmd,`cmd`)};if(jy(n,e),t.commands.some(e=>e.name===n.name))throw Error(`Сценарий «${n.name}» уже существует`);t.commands.push(n),e.makeDefault===!0&&(t.defaultCommandId=n.id)})),l(`ide.project.command.update`,`Изменить сценарий запуска`,`Переименовывает сценарий или меняет его команду, папку, адрес и режим. Сценарий ищется по id или по текущему названию.`,{id:`string (необязательно): id сценария`,name:`string (необязательно): текущее название, если id не указан`,newName:`string (необязательно): новое название`,cmd:`string (необязательно): новая команда запуска`,...My},e=>s(t=>{let n=o({...i(),commands:t.commands},e);e.newName!==void 0&&(n.name=Ay(e.newName,`newName`)),e.cmd!==void 0&&(n.cmd=Ay(e.cmd,`cmd`)),jy(n,e)})),l(`ide.project.command.remove`,`Удалить сценарий запуска`,`Удаляет команду запуска. Последнюю команду удалить нельзя; если удалена команда по умолчанию, выбирается первая оставшаяся.`,{id:`string (необязательно): id команды`,name:`string (необязательно): название, если id не указан`},e=>s(t=>{let n=o({...i(),commands:t.commands},e);if(t.commands.length<=1)throw Error(`Нужна хотя бы одна команда`);t.commands=t.commands.filter(e=>e.id!==n.id),t.defaultCommandId===n.id&&(t.defaultCommandId=t.commands[0].id)})),l(`ide.project.command.setDefault`,`Сделать сценарий основным`,`Назначает команду, которая запускается из палитры и списка проектов.`,{id:`string (необязательно): id команды`,name:`string (необязательно): название, если id не указан`},e=>s(t=>{t.defaultCommandId=o({...i(),commands:t.commands},e).id})),l(`ide.project.command.move`,`Переставить сценарий запуска`,`Сдвигает сценарий на одну позицию вверх или вниз; порядок виден в меню запуска.`,{id:`string (необязательно): id сценария`,name:`string (необязательно): название, если id не указан`,direction:`string: up или down`},e=>s(t=>{if(e.direction!==`up`&&e.direction!==`down`)throw Error(`direction должен быть up или down`);let n=o({...i(),commands:t.commands},e),r=t.commands.indexOf(n),a=r+(e.direction===`up`?-1:1);if(a<0||a>=t.commands.length)throw Error(`Сценарий уже у края списка`);[t.commands[r],t.commands[a]]=[t.commands[a],t.commands[r]]})),l(`ide.project.command.duplicate`,`Дублировать сценарий запуска`,`Копирует сценарий рядом с исходным под новым названием «… копия»; копия не становится основной.`,{id:`string (необязательно): id сценария`,name:`string (необязательно): название, если id не указан`},e=>s(t=>{Lu(t.commands,o({...i(),commands:t.commands},e).id)})),l(`ide.project.command.import`,`Импортировать скрипты package.json`,`Добавляет недостающие скрипты из package.json проекта как команды запуска; существующие не меняются.`,{},async()=>{let e=i(),t=Pu(e.commands,(await Ou(e.path)).commands);return t.length?(await s(e=>e.commands.push(...t)),{added:t.map(({name:e,cmd:t})=>({name:e,cmd:t}))}):{added:[]}})}var _ne=W({__name:`MobileProjectPicker`,props:{project:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r=Lr(),{api:i}=yp(),{projects:a}=Mu(),o=M(!1),s=Pf(),c=M();Gd({element:c,enabled:s,close:()=>o.value=!1});let l=B(()=>[n.project,...a.value.filter(e=>e.id!==n.project.id)]),u=Je(`mobile-project-picker`,()=>({surface:`workbench`}));u.scope.registerCommand({id:`ide.project.picker.toggle`,title:`Открыть или закрыть выбор проекта`,description:`Показывает мобильный выбор проекта, путь к папке и навигацию.`,run:()=>{o.value=!o.value}}),u.scope.registerCommand({id:`ide.project.picker.navigate`,title:`Открыть проект или страницу`,description:`Открывает папку проекта либо поиск, список проектов или настройки из мобильной шапки.`,arguments:{path:`Абсолютный путь к папке проекта или gh:/owner/repository`,page:`search или settings`},run:async e=>{let{path:t,page:a}=J(e);if(a===`settings`&&t===void 0){await i.executeCommand(`ide.workbench.settings.open`,void 0,{scope:`editor:${n.project.id}`}),o.value=!1;return}let s=typeof t==`string`&&(su(t)||ru(t).kind===`github`)?Hu(t):typeof a==`string`?{search:`/`,settings:`/settings`}[a]:void 0;if(!s)throw Error(`Укажите путь проекта или страницу`);await r.push(s),o.value=!1}});let d={props:n,router:r,api:i,projects:a,open:o,compact:s,sheetElement:c,choices:l,commands:u,navigate:e=>u.scope.executeCommand(`ide.project.picker.navigate`,{path:e}),get projectIconUrl(){return Tu},PathBar:eg,get IconChevron(){return bd},get IconClose(){return Cn}};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),vne=[`aria-expanded`],yne=[`src`],bne={class:`u-truncate`},xne={key:0,class:`sheet-grabber`,"aria-hidden":`true`},Sne={class:`sheet-heading`},Cne={class:`projects`,"aria-label":`Проекты`},wne=[`onClick`],Tne=[`src`],Ene={class:`u-truncate`},Dne={class:`u-truncate`};function One(e,t,n,r,i,a){return K(),U(`div`,{class:`picker`,onKeydown:t[6]||=ye(N(e=>r.open&&r.commands.run(`ide.project.picker.toggle`),[`stop`]),[`esc`])},[I(`button`,{class:`trigger`,"aria-label":`Выбрать проект`,"aria-expanded":r.open,onClick:t[0]||=e=>r.commands.run(`ide.project.picker.toggle`)},[I(`img`,{src:r.projectIconUrl(n.project),alt:``,width:`22`,height:`22`},null,8,yne),I(`span`,bne,X(n.project.name),1),y(r.IconChevron,{"aria-hidden":`true`})],8,vne),r.open?(K(),U(`button`,{key:0,class:`backdrop`,"aria-label":`Закрыть выбор проекта`,onClick:t[1]||=e=>r.commands.run(`ide.project.picker.toggle`)})):D(`v-if`,!0),r.open?(K(),U(`div`,{key:1,ref:`sheetElement`,class:`sheet mobile-sheet`,onKeydown:t[5]||=ye(N(e=>r.commands.run(`ide.project.picker.toggle`),[`stop`]),[`esc`])},[r.compact?(K(),U(`span`,xne)):D(`v-if`,!0),I(`div`,Sne,[t[7]||=I(`span`,null,`Выбор проекта`,-1),I(`button`,{"aria-label":`Закрыть выбор проекта`,onClick:t[2]||=e=>r.commands.run(`ide.project.picker.toggle`)},[y(r.IconClose)])]),y(r.PathBar,{path:n.project.path,navigate:r.navigate},null,8,[`path`]),I(`div`,Cne,[(K(!0),U(P,null,S(r.choices,e=>(K(),U(`button`,{key:e.id,class:Y({selected:e.id===n.project.id}),onClick:t=>r.commands.run(`ide.project.picker.navigate`,{path:e.path})},[I(`img`,{src:r.projectIconUrl(e),alt:``,width:`22`,height:`22`},null,8,Tne),I(`span`,null,[I(`strong`,Ene,X(e.name),1),I(`small`,Dne,X(e.path),1)])],10,wne))),128))]),I(`nav`,null,[I(`button`,{onClick:t[3]||=e=>r.commands.run(`ide.project.picker.navigate`,{page:`search`})},` Поиск `),I(`button`,{onClick:t[4]||=e=>r.commands.run(`ide.project.picker.navigate`,{page:`settings`})},` Настройки `)])],544)):D(`v-if`,!0)],32)}var kne=H(_ne,[[`render`,One],[`__scopeId`,`data-v-ef167fc2`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/catalog/ui/MobileProjectPicker.vue`]]),Ane=W({__name:`ProjectMissing`,props:{project:{type:Object,required:!0}},emits:[`restored`,`removed`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=Mu(),o=M(r.project.path),s=M(!1),c=M(!1),l=M(``);async function u(e){if(c.value)throw Error(`Операция уже выполняется`);c.value=!0,l.value=``;try{return await e()}catch(e){throw l.value=e instanceof Error?e.message:`Не удалось выполнить действие`,e}finally{c.value=!1}}async function d(){let e=await u(()=>a.restoreDirectory(r.project.id,{mode:`create`}));e&&i(`restored`,e)}async function f(e=o.value,t=s.value){let n=await u(()=>a.restoreDirectory(r.project.id,{mode:`relocate`,path:e,create:t}));n&&i(`restored`,n)}async function p(){!c.value&&window.confirm(`Убрать «${r.project.name}» из Projector? Файлы на диске не затрагиваются.`)&&(await u(()=>a.remove(r.project.id)),i(`removed`))}let m=Je(`project:missing`,()=>({surface:`project-missing`,projectId:r.project.id,path:r.project.path}));m.scope.registerCommand({id:`ide.project.directory.create`,title:`Создать папку проекта заново`,description:`Создаёт отсутствующую папку проекта по сохранённому пути.`,run:()=>d()}),m.scope.registerCommand({id:`ide.project.directory.relocate`,title:`Указать новый путь проекта`,description:`Привязывает проект к другой папке; create: true создаст её, если она не существует.`,arguments:{path:`string: абсолютный путь или ~/…`,create:`boolean (необязательно): создать папку, если её нет`},run:e=>{let t=J(e);if(typeof t.path!=`string`)throw Error(`Укажите path`);return f(t.path,t.create===!0)}}),m.scope.registerCommand({id:`ide.project.missing.remove`,title:`Убрать отсутствующий проект из Projector`,description:`После подтверждения удаляет проект из каталога Projector. Файлы на диске не затрагиваются.`,enabled:()=>!c.value,run:()=>p()});let h={props:r,emit:i,catalog:a,path:o,create:s,busy:c,error:l,guarded:u,recreate:d,relocate:f,remove:p,commands:m,UiControl:Se,UiStack:Ed,UiInline:Be,UiField:Re,UiHeading:Ee,UiMessage:Te,UiButton:q,UiHint:we};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}}),jne={class:`lead`};function Mne(t,n,r,i,a,o){let s=x(`router-link`);return K(),F(i.UiStack,{as:`section`,gap:4,class:`project-missing`,"aria-label":`Папка проекта не найдена`},{default:e(()=>[y(i.UiHeading,{"space-after":0},{default:e(()=>[...n[5]||=[G(`Папка проекта не найдена`,-1)]]),_:1}),I(`p`,jne,[G(` Проект «`+X(r.project.name)+`» сохранён, но каталог `,1),I(`code`,null,X(r.project.path),1),n[6]||=G(` больше не существует. Создайте его заново или укажите новый путь. `,-1)]),y(i.UiStack,{gap:2,align:`start`,class:`block`},{default:e(()=>[y(i.UiButton,{appearance:`solid`,disabled:i.busy,onClick:n[0]||=e=>i.commands.run(`ide.project.directory.create`)},{default:e(()=>[...n[7]||=[G(`Создать папку заново`,-1)]]),_:1},8,[`disabled`]),y(i.UiHint,null,{default:e(()=>[...n[8]||=[G(`Каталог будет создан пустым по прежнему пути.`,-1)]]),_:1})]),_:1}),y(i.UiStack,{as:`form`,gap:2,align:`start`,class:`block`,onSubmit:n[3]||=N(e=>i.commands.run(`ide.project.directory.relocate`,{path:i.path,create:i.create}),[`prevent`])},{default:e(()=>[y(i.UiField,{layout:`plain`,label:`Новый путь`,required:``,gap:1,class:`field`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.path,"onUpdate:modelValue":n[1]||=e=>i.path=e,required:``,spellcheck:`false`,autocomplete:`off`,placeholder:`/путь/к/проекту или ~/code/проект`}),null,16,[`modelValue`])]),_:1}),y(i.UiInline,{as:`label`,justify:`normal`,class:`check`},{default:e(()=>[y(i.UiControl,{modelValue:i.create,"onUpdate:modelValue":n[2]||=e=>i.create=e,type:`checkbox`},null,8,[`modelValue`]),n[9]||=G(` Создать папку, если её нет`,-1)]),_:1}),y(i.UiButton,{type:`submit`,disabled:i.busy||!i.path.trim()},{default:e(()=>[...n[10]||=[G(`Указать путь`,-1)]]),_:1},8,[`disabled`])]),_:1}),i.error?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0),y(i.UiInline,{justify:`between`,class:`block footer`},{default:e(()=>[y(i.UiButton,{tone:`danger`,disabled:i.busy,onClick:n[4]||=e=>i.commands.run(`ide.project.missing.remove`)},{default:e(()=>[...n[11]||=[G(`Убрать из Projector`,-1)]]),_:1},8,[`disabled`]),y(s,{to:`/`},{default:e(()=>[...n[12]||=[G(`к поиску`,-1)]]),_:1})]),_:1})]),_:1})}var Nne=H(Ane,[[`render`,Mne],[`__scopeId`,`data-v-84f41615`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/catalog/ui/ProjectMissing.vue`]]),Pne={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Fne(e,t){return K(),U(`svg`,Pne,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`},null,-1)]])}var Ny=L({name:`lucide-play`,render:Fne}),Ine={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Lne(e,t){return K(),U(`svg`,Ine,[...t[0]||=[I(`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,rx:`2`},null,-1)]])}var Py=L({name:`lucide-square`,render:Lne}),Rne={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function zne(e,t){return K(),U(`svg`,Rne,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`}),I(`path`,{d:`M3 9h18M9 21V9`})],-1)]])}var Bne=L({name:`lucide-panels-top-left`,render:zne}),Vne={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Hne(e,t){return K(),U(`svg`,Vne,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M22 7.7c0-.6-.4-1.2-.8-1.5l-6.3-3.9a1.72 1.72 0 0 0-1.7 0l-10.3 6c-.5.2-.9.8-.9 1.4v6.6c0 .5.4 1.2.8 1.5l6.3 3.9a1.72 1.72 0 0 0 1.7 0l10.3-6c.5-.3.9-1 .9-1.5Z`}),I(`path`,{d:`M10 21.9V14L2.1 9.1M10 14l11.9-6.9M14 19.8v-8.1m4 5.8V9.4`})],-1)]])}var Fy=L({name:`lucide-container`,render:Hne}),Une=W({__name:`RunMenu`,props:{project:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r=_d(),{api:i}=yp(),a=Ff({anchor:`right`,initialFocus:[`button.main:not(:disabled)`,`button:not(:disabled)`],returnFocus:`.arrow`}),{open:o,toggle:s,close:c}=a,l=V(),u=B(()=>n.project.runtime?.status??`idle`),d=B(()=>u.value===`running`||u.value===`starting`),f=B(()=>u.value===`starting`||u.value===`stopping`),p=B(()=>n.project.commands.find(e=>e.id===n.project.defaultCommandId)??n.project.commands[0]),m=B(()=>n.project.runtime?.commandName??p.value?.name??`запуск`),h=B(()=>d.value?m.value:p.value?.name??`—`),g=B(()=>d.value?`работает`:u.value===`stopping`?`останавливается`:``),_=Je(`project-run:${V()}`,()=>({surface:`project-run`,projectId:n.project.id,status:u.value}));_.scope.registerCommand({id:`ide.project.run.start`,title:`Запустить сценарий проекта`,description:`Запускает сценарий проекта (по умолчанию — основной) в сервере или в окне. Одновременно работает один сценарий.`,arguments:{command:`string?: id сценария`,mode:`server | window (по умолчанию server)`},enabled:()=>!d.value&&!f.value&&!!p.value,run:async e=>{let{command:t,mode:n}=J(e);await v(typeof t==`string`?t:void 0,n===`window`?`window`:`server`)}}),_.scope.registerCommand({id:`ide.project.run.stop`,title:`Остановить проект`,description:`Останавливает запущенный сценарий проекта.`,enabled:()=>d.value,run:()=>r.stop(n.project.id)}),_.scope.registerCommand({id:`ide.project.run.open`,title:`Открыть запущенный проект`,description:`Открывает работающий проект в браузере (server) или отдельном окне (window).`,arguments:{mode:`server | window`},enabled:()=>d.value,run:e=>{let{mode:t}=J(e);return r.open(n.project.id,t===`window`?`window`:`server`)}}),_.scope.registerCommand({id:`ide.project.run.scenarios.edit`,title:`Редактировать сценарии запуска`,description:`Открывает настройки проекта сразу на разделе «Сценарии»: названия и команды запуска, импорт из package.json.`,run:()=>b()}),_.scope.registerCommand({id:`ide.project.run.menu.toggle`,title:`Открыть или закрыть список сценариев запуска`,description:`Показывает остров со всеми сценариями проекта, статусом и настройкой.`,run:()=>s()});function v(e,t=`server`){return r.start(n.project.id,e??n.project.defaultCommandId,t)}async function y(e){c(),await e()}async function b(){c(),_g.value=`scenarios`,await i.executeCommand(`ide.workbench.project.settings.open`,void 0,{scope:`editor:${n.project.id}`})}let x={props:n,runner:r,api:i,menu:a,open:o,toggle:s,close:c,listId:l,status:u,busy:d,transitional:f,defaultCommand:p,runningName:m,label:h,stateLabel:g,commands:_,start:v,act:y,editScenarios:b,UiStatusDot:Ze,UiIslandHeader:Cd,UiStack:Ed,UiBadge:kd,UiActionRow:wl,UiActionCopy:Md,UiIsland:Yd,UiButton:q,get IconPlay(){return Ny},get IconStop(){return Py},get IconChevron(){return bd},get IconWindow(){return Bne},get IconOpen(){return Fn},get IconContainer(){return Fy},get IconSettings(){return Og}};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}}),Wne={class:`head-label`},Gne=[`title`],Kne={key:0,class:`empty`};function qne(t,n,r,i,a,o){return K(),U(P,null,[I(`div`,{ref:i.menu.trigger,class:`run`,role:`group`,"aria-label":`Запуск проекта`},[i.busy?(K(),F(i.UiButton,{key:1,size:`sm`,class:`main running`,disabled:i.status===`stopping`,title:`Остановить: ${i.runningName}`,"data-command":`ide.project.run.stop`,onClick:n[1]||=e=>i.commands.run(`ide.project.run.stop`)},{default:e(()=>[y(i.UiStatusDot,{class:`dot`,tone:i.status===`starting`||i.status===`stopping`?`warning`:`success`,"aria-hidden":`true`},null,8,[`tone`]),I(`span`,null,X(i.label),1),y(i.IconStop,{class:`stop`,"aria-hidden":`true`})]),_:1},8,[`disabled`,`title`])):(K(),F(i.UiButton,{key:0,size:`sm`,class:`main`,disabled:!i.defaultCommand||i.transitional,title:i.defaultCommand?`Запустить: ${i.defaultCommand.cmd}`:`Нет сценариев запуска`,"data-command":`ide.project.run.start`,onClick:n[0]||=e=>i.commands.run(`ide.project.run.start`)},{default:e(()=>[y(i.IconPlay,{class:`play`,"aria-hidden":`true`}),G(X(i.label),1)]),_:1},8,[`disabled`,`title`])),y(i.UiButton,{shape:`icon`,size:`sm`,class:`arrow`,title:`Сценарии запуска`,"aria-label":`Сценарии запуска`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.menu.id:void 0,"data-command":`ide.project.run.menu.toggle`,onClick:n[2]||=e=>i.commands.run(`ide.project.run.menu.toggle`)},{default:e(()=>[y(i.IconChevron,{"aria-hidden":`true`})]),_:1},8,[`aria-expanded`,`aria-controls`])],512),y(i.UiIsland,{menu:i.menu,label:`Сценарии запуска`,width:360},{default:e(()=>[y(i.UiIslandHeader,{chevron:``,class:`island-head`,"aria-label":`Закрыть`,onClick:n[3]||=e=>i.toggle(!1)},{default:e(()=>[I(`span`,Wne,[i.busy?(K(),F(i.UiStatusDot,{key:0,class:`dot`,tone:i.status===`starting`||i.status===`stopping`?`warning`:`success`,"aria-hidden":`true`},null,8,[`tone`])):D(`v-if`,!0),G(X(i.busy?`${i.runningName} · ${i.stateLabel}`:`Запуск`),1)])]),_:1}),r.project.environment?(K(),U(`div`,{key:0,class:`env`,title:`${r.project.environment.image} · сеть: ${r.project.environment.network}`},[y(i.IconContainer,{"aria-hidden":`true`}),G(`Docker · `+X(r.project.environment.image),1)],8,Gne)):D(`v-if`,!0),i.busy?(K(),F(i.UiStack,{key:1,flow:`flex`,gap:`none`,class:`group`,role:`group`,"aria-label":`Работающий проект`},{default:e(()=>[r.project.runtime?.url?(K(),F(i.UiActionRow,{key:0,class:`item`,onClick:n[4]||=e=>i.act(()=>i.commands.run(`ide.project.run.open`,{mode:`server`}))},{default:e(()=>[y(i.IconOpen,{"aria-hidden":`true`}),y(i.UiActionCopy,{title:`Открыть в браузере`,description:r.project.runtime.url},null,8,[`description`])]),_:1})):D(`v-if`,!0),y(i.UiActionRow,{class:`item`,onClick:n[5]||=e=>i.act(()=>i.commands.run(`ide.project.run.open`,{mode:`window`}))},{default:e(()=>[y(i.IconWindow,{"aria-hidden":`true`}),y(i.UiActionCopy,{title:`Открыть в окне`})]),_:1}),y(i.UiActionRow,{class:`item`,tone:`danger`,disabled:i.status===`stopping`,onClick:n[6]||=e=>i.act(()=>i.commands.run(`ide.project.run.stop`))},{default:e(()=>[y(i.IconStop,{"aria-hidden":`true`}),y(i.UiActionCopy,{title:`Остановить`})]),_:1},8,[`disabled`])]),_:1})):D(`v-if`,!0),y(i.UiStack,{flow:`flex`,gap:`none`,id:i.listId,class:`group`,role:`group`,"aria-label":`Сценарии`},{default:e(()=>[(K(!0),U(P,null,S(r.project.commands,t=>(K(),U(`div`,{key:t.id,class:`scenario`},[y(i.UiActionRow,{class:`item main`,disabled:i.busy||i.transitional,"data-command":`ide.project.run.start`,onClick:e=>i.act(()=>i.commands.run(`ide.project.run.start`,{command:t.id}))},{default:e(()=>[y(i.IconPlay,{class:`play`,"aria-hidden":`true`}),y(i.UiActionCopy,{title:t.name,description:t.cmd,mono:``},null,8,[`title`,`description`]),t.id===r.project.defaultCommandId?(K(),F(i.UiBadge,{key:0},{default:e(()=>[...n[8]||=[G(`основной`,-1)]]),_:1})):D(`v-if`,!0)]),_:2},1032,[`disabled`,`onClick`]),y(i.UiButton,{shape:`icon`,size:`sm`,disabled:i.busy||i.transitional,title:`${t.name} в окне`,"aria-label":`Запустить ${t.name} в окне`,onClick:e=>i.act(()=>i.commands.run(`ide.project.run.start`,{command:t.id,mode:`window`}))},{default:e(()=>[y(i.IconWindow,{"aria-hidden":`true`})]),_:1},8,[`disabled`,`title`,`aria-label`,`onClick`])]))),128)),r.project.commands.length?D(`v-if`,!0):(K(),U(`p`,Kne,`Сценариев пока нет`))]),_:1},8,[`id`]),y(i.UiActionRow,{separator:`before`,tone:`muted`,class:`item settings`,"data-command":`ide.project.run.scenarios.edit`,onClick:n[7]||=e=>i.commands.run(`ide.project.run.scenarios.edit`)},{default:e(()=>[y(i.IconSettings,{"aria-hidden":`true`}),n[9]||=G(`Настроить сценарии… `,-1)]),_:1})]),_:1},8,[`menu`])],64)}var Jne=H(Une,[[`render`,qne],[`__scopeId`,`data-v-666636a0`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/runner/ui/RunMenu.vue`]]),Yne={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Xne(e,t){return K(),U(`svg`,Yne,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M20 6L9 17l-5-5`},null,-1)]])}var Iy=L({name:`lucide-check`,render:Xne}),Zne={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Qne(e,t){return K(),U(`svg`,Zne,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`12`,cy:`12`,r:`10`}),I(`path`,{d:`M12 8v4m0 4h.01`})],-1)]])}var Ly=L({name:`lucide-circle-alert`,render:Qne}),Ry=8,zy=16,$ne=W({__name:`UiNoticeHost`,setup(e,{expose:t}){t();function n(e){let t=e.y<56;return{left:`${Math.min(Math.max(e.x,56),window.innerWidth-zy-40)}px`,top:`${t?e.y+e.height+Ry:e.y-Ry}px`,translate:t?`-50% 0`:`-50% -100%`}}let r={GAP:Ry,EDGE:zy,place:n,UiPopupSurface:Fd,get dismissNotice(){return _n},get dismissToast(){return eee},get notices(){return mn},get toasts(){return tee},get IconCheck(){return Iy},get IconAlert(){return Ly},get IconClose(){return Cn}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),ere={class:`notice-layer`,"aria-live":`polite`},tre={class:`toast-layer`,role:`region`,"aria-label":`Ошибки`},nre={class:`toast-text`},rre=[`onClick`],ire=[`onClick`];function are(t,n,r,i,a,o){return K(),F(fe,{to:`body`},[I(`div`,ere,[(K(!0),U(P,null,S(i.notices,t=>(K(),F(i.UiPopupSurface,{border:`strong`,radius:`md`,surface:`tertiary`,key:t.id,class:Y([`notice`,[t.kind,{below:t.y<56}]]),role:t.kind===`error`?`alert`:`status`,style:Qe(i.place(t)),onClick:e=>i.dismissNotice(t.id)},{default:e(()=>[t.kind===`success`?(K(),F(i.IconCheck,{key:0,"aria-hidden":`true`})):(K(),F(i.IconAlert,{key:1,"aria-hidden":`true`})),I(`span`,null,X(t.text),1)]),_:2},1032,[`class`,`role`,`style`,`onClick`]))),128))]),I(`div`,tre,[(K(!0),U(P,null,S(i.toasts,e=>(K(),U(`div`,{key:e.id,class:`toast`,role:`alert`},[y(i.IconAlert,{"aria-hidden":`true`}),I(`span`,nre,X(e.text),1),e.action?(K(),U(`button`,{key:0,type:`button`,class:`toast-action`,onClick:t=>{e.action.run(),i.dismissToast(e.id)}},X(e.action.label),9,rre)):D(`v-if`,!0),I(`button`,{type:`button`,class:`toast-close`,"aria-label":`Закрыть`,title:`Закрыть`,onClick:t=>i.dismissToast(e.id)},[y(i.IconClose,{"aria-hidden":`true`})],8,ire)]))),128))])])}var ore=H($ne,[[`render`,are],[`__scopeId`,`data-v-9bbefcd5`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiNoticeHost.vue`]]);async function By(e){let t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||`Не удалось получить возможности агентов`);return t}async function sre(){return By(await fetch(`/api/agent/features`))}async function cre(e,t,n){return By(await fetch(`/api/agent/features`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({feature:e,agent:t,enabled:n})}))}var Vy=de({data:{features:[],file:``},loaded:!1,error:``}),Hy;async function Uy(e=!1){return Vy.loaded&&!e?Vy.data:Hy||(Hy=sre().then(e=>(Vy.data=e,Vy.loaded=!0,Vy.error=``,e)).catch(e=>{throw Vy.error=e instanceof Error?e.message:`Ошибка возможностей агентов`,e}).finally(()=>{Hy=void 0}),Hy)}function lre(e){Vy.data=e,Vy.loaded=!0,Vy.error=``}function Wy(){return{data:B(()=>Vy.data),loaded:B(()=>Vy.loaded),error:B(()=>Vy.error),load:Uy}}var ure={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dre(e,t){return K(),U(`svg`,ure,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594zM20 2v4m2-2h-4`}),I(`circle`,{cx:`4`,cy:`20`,r:`2`})],-1)]])}var Gy=L({name:`lucide-sparkles`,render:dre}),fre=W({__name:`AgentFeaturesIsland`,props:{backend:{type:String,required:!0},chat:{type:String,required:!0},overrides:{type:Array,required:!1},disabled:{type:Boolean,required:!1},showTrigger:{type:Boolean,required:!1},anchor:{type:Function,required:!1}},emits:[`update:overrides`],setup(e,{expose:t,emit:n}){let r=e,i=n,{data:a,error:o}=Wy(),s=V(),c=B(()=>o.value),l=B(()=>new Set(a.value.features.filter(e=>e.agents.find(e=>e.id===r.backend)?.enabled).map(e=>e.id))),u=B(()=>r.overrides!==void 0),d=e=>r.overrides?r.overrides.includes(e):l.value.has(e),p=Ff({anchor:`right`,initialFocus:[`input:not(:disabled)`,`button:not(:disabled)`],items:`input, button`,returnFocus:`.trigger, button`}),m=M();function h(e){m.value=e instanceof HTMLElement?e:void 0}let g=Je(`agent-features:${V()}`,()=>({surface:`agentFeatures`,backend:r.backend,chat:r.chat,overridden:u.value,features:a.value.features.length}));async function _(){try{await Uy(!0)}catch{}}async function v(e,t){if(r.disabled)throw Error(`Чат ещё загружается: выбор возможностей пока недоступен`);if(!(await Uy()).features.find(t=>t.id===e))throw Error(`Неизвестная возможность: ${e}`);let n=r.overrides??[...l.value],a=t?[...new Set([...n,e])]:n.filter(t=>t!==e),o=a.length===l.value.size&&a.every(e=>l.value.has(e));return i(`update:overrides`,o?void 0:a),{feature:e,enabled:t,overridden:!o,overrides:o?void 0:a}}function y(){if(r.disabled)throw Error(`Чат ещё загружается: выбор возможностей пока недоступен`);i(`update:overrides`,void 0)}g.scope.registerCommand({id:`ide.agent.features.chat.list`,palette:!1,title:`Список возможностей текущего чата`,description:`Возвращает возможности выбранного агента в этом чате: id, название, описание, включена ли возможность сейчас (enabled) и включена ли она по умолчанию (default). overridden показывает, есть ли у чата собственный выбор.`,run:async()=>{let e=await Uy();return{backend:r.backend,chat:r.chat,overridden:u.value,features:e.features.map(e=>({id:e.id,title:e.title,summary:e.summary,enabled:d(e.id),default:l.value.has(e.id)}))}}}),g.scope.registerCommand({id:`ide.agent.features.chat.set`,palette:!1,title:`Включить или выключить возможность в текущем чате`,description:`Переопределяет возможность (widgets — виджеты в ответах, ide — команды IDE через MCP) для этого чата, не меняя умолчание агента в настройках. Часть агентов применяет изменение со следующего сообщения, часть — в новой сессии.`,arguments:{feature:`string: id возможности: widgets или ide`,enabled:`boolean: включена ли возможность в этом чате`},run:e=>{let t=J(e);if(typeof t.feature!=`string`||!t.feature)throw Error(`feature: id возможности: widgets или ide`);if(typeof t.enabled!=`boolean`)throw Error(`enabled должен быть boolean`);return v(t.feature,t.enabled)}}),g.scope.registerCommand({id:`ide.agent.features.chat.reset`,title:`Вернуть возможности чата к умолчаниям`,description:`Убирает собственный выбор возможностей у этого чата: дальше действуют умолчания агента из глобальных настроек.`,run:()=>(y(),{overridden:!1})}),g.scope.registerCommand({id:`ide.agent.features.panel`,title:`Открыть возможности агента`,description:`Открывает или закрывает остров возможностей в табе агента: какие необязательные возможности (виджеты в ответах, команды IDE через MCP) включены в этом чате и чем они отличаются от умолчаний.`,run:()=>x()});function b(e){p.trigger.value=e??r.anchor?.()??m.value,p.open.value||_(),g.scope.activate(),p.toggle(!0)}function x(){b()}t({openAt:b});function S(e,t){let n=t.target.checked;v(e,n).catch(()=>void 0)}f(()=>void Uy().catch(()=>void 0));let C={props:r,emit:i,data:a,loadError:o,uid:s,error:c,defaults:l,overridden:u,effective:d,menu:p,ownTrigger:m,bindTrigger:h,commands:g,reload:_,setFeature:v,reset:y,openAt:b,open:x,change:S,UiButton:q,UiControl:Se,UiIsland:Yd,UiIslandLabel:sh,UiMessage:Te,get IconSparkles(){return Gy}};return Object.defineProperty(C,"__isScriptSetup",{enumerable:!1,value:!0}),C}}),pre=[`aria-expanded`,`aria-controls`],mre={key:0,class:`changed-dot`,"aria-hidden":`true`},hre={class:`agent`},gre={class:`feature-title`},_re={key:0,class:`empty`},vre={key:2,class:`footer`};function yre(t,n,r,i,a,o){return K(),U(P,null,[I(`div`,{ref:i.bindTrigger,class:Y([`features`,{hidden:r.showTrigger===!1}])},[r.showTrigger===!1?D(`v-if`,!0):(K(),U(`button`,{key:0,type:`button`,class:Y([`trigger`,{changed:i.overridden}]),"aria-expanded":i.menu.open.value,"aria-controls":i.menu.id,"aria-label":`Возможности агента`,title:`Возможности агента`,onClick:i.open},[y(i.IconSparkles,{"aria-hidden":`true`}),i.overridden?(K(),U(`span`,mre)):D(`v-if`,!0)],10,pre))],2),y(i.UiIsland,{menu:i.menu,label:`Возможности агента`,width:340},{default:e(()=>[y(i.UiIslandLabel,null,{default:e(()=>[...n[0]||=[G(`Возможности агента`,-1)]]),_:1}),(K(!0),U(P,null,S(i.data.features,e=>(K(),U(`section`,{key:e.id,class:`feature`},[I(`label`,hre,[y(i.UiControl,{type:`checkbox`,id:`${i.uid}-${e.id}`,name:e.id,checked:i.effective(e.id),disabled:r.disabled,"aria-label":e.title,onChange:t=>i.change(e.id,t)},null,8,[`id`,`name`,`checked`,`disabled`,`aria-label`,`onChange`]),I(`span`,gre,X(e.title),1)])]))),128)),i.data.features.length?D(`v-if`,!0):(K(),U(`p`,_re,`Возможностей пока нет.`)),i.error?(K(),F(i.UiMessage,{key:1,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0),i.overridden?(K(),U(`div`,vre,[y(i.UiButton,{size:`sm`,disabled:r.disabled,onClick:i.reset},{default:e(()=>[...n[1]||=[G(`Как по умолчанию`,-1)]]),_:1},8,[`disabled`])])):D(`v-if`,!0)]),_:1},8,[`menu`])],64)}var bre=H(fre,[[`render`,yre],[`__scopeId`,`data-v-0d149e4d`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-features/ui/AgentFeaturesIsland.vue`]]),Ky=()=>st().map(e=>e.backend),xre=()=>st().map(e=>e.title);function Sre(){let{data:e,error:t,load:n}=Wy(),r=M(``),i=M(``),a=B(()=>i.value||t.value),o=Je(`agent-feature-defaults:${V()}`,()=>({surface:`agentFeatureDefaults`,busy:!!r.value,features:e.value.features.length}));async function s(){i.value=``;try{return await n(!0)}catch(e){throw i.value=e instanceof Error?e.message:`Ошибка возможностей агентов`,e}}async function c(t,n,a){r.value=`${t}:${n}`,i.value=``;try{return lre(await cre(t,n,a)),e.value}catch(e){throw i.value=e instanceof Error?e.message:`Не удалось сохранить умолчание`,e}finally{r.value=``}}return o.scope.registerCommand({id:`ide.agent.features.defaults.list`,palette:!1,title:`Список умолчаний возможностей агентов`,description:`Возвращает возможности чата (widgets — виджеты в ответах, ide — команды IDE через MCP) и для каждого агента (${xre().join(`, `)}) с умолчанием: включена ли она в новом чате. Это значения, которые чат может переопределить для себя; сам остров в табе агента меняет только текущий чат.`,run:()=>s()}),o.scope.registerCommand({id:`ide.agent.features.defaults.set`,palette:!1,title:`Изменить умолчание возможности агента`,description:`Включает или выключает возможность (widgets — виджеты в ответах, ide — команды IDE через MCP) для агента по умолчанию. Действует на новые чаты без своего переопределения; уже открытый чат меняет остров в табе агента. У внешних агентов ide добавляет MCP-сервер projector-ide с тремя инструментами команд.`,arguments:{feature:`string: id возможности: widgets или ide`,agent:`string: id агента каталога: ${Ky().join(`, `)}`,enabled:`boolean: включена ли возможность по умолчанию`},enabled:()=>!r.value,run:e=>{let t=J(e);if(typeof t.feature!=`string`||!t.feature)throw Error(`feature: id возможности: widgets или ide`);if(typeof t.agent!=`string`||!t.agent)throw Error(`agent: id агента каталога: ${Ky().join(`, `)}`);if(typeof t.enabled!=`boolean`)throw Error(`enabled должен быть boolean`);return c(t.feature,t.agent,t.enabled)}}),f(()=>void s().catch(()=>void 0)),{data:e,busy:r,error:a,load:s,set:c,commands:o}}var Cre=W({__name:`AgentFeatureDefaults`,props:{agent:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,{data:r,busy:i,error:a,set:o,commands:s}=Sre(),c=()=>s.scope.activate(),l=B(()=>r.value.features.map(e=>({...e,agents:n.agent?e.agents.filter(e=>e.id===n.agent):e.agents})).filter(e=>!n.agent||e.agents.length));function u(e,t,n){let r=n.target.checked;Promise.resolve(o(e,t,r)).catch(()=>void 0)}let d={props:n,data:r,busy:i,error:a,set:o,commands:s,activate:c,shown:l,toggle:u,UiControl:Se,UiHint:we,UiSettingsSection:Jg};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),wre={class:`summary`},Tre={class:`agents`},Ere={key:0,class:`hint`};function Dre(t,n,r,i,a,o){return K(),F(i.UiSettingsSection,{activate:i.activate,error:i.error},{default:e(()=>[(K(!0),U(P,null,S(i.shown,e=>(K(),U(`section`,{key:e.id,class:`feature`},[I(`h3`,null,X(e.title),1),I(`p`,wre,X(e.summary),1),I(`div`,Tre,[(K(!0),U(P,null,S(e.agents,t=>(K(),U(`label`,{key:t.id,class:`agent`},[y(i.UiControl,{type:`checkbox`,id:`feature-default-${e.id}-${t.id}`,name:e.id,checked:t.enabled,disabled:i.busy===`${e.id}:${t.id}`,"aria-label":`${e.title}: ${t.label}`,onChange:n=>i.toggle(e.id,t.id,n)},null,8,[`id`,`name`,`checked`,`disabled`,`aria-label`,`onChange`]),I(`span`,null,X(t.label),1)]))),128))])]))),128)),i.shown.length?D(`v-if`,!0):(K(),U(`p`,Ere,`Возможностей пока нет.`)),y(i.UiHint,null,{default:e(()=>[n[0]||=G(` Это умолчания для новых чатов. В табе агента остров «возможности» переопределяет их только для текущего чата; кнопка «Как по умолчанию» возвращает к этим значениям. Файл: `,-1),I(`code`,null,X(i.data.file),1)]),_:1})]),_:1},8,[`error`])}var Ore=H(Cre,[[`render`,Dre],[`__scopeId`,`data-v-49fdc328`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-features/ui/AgentFeatureDefaults.vue`]]);async function qy(e){let t=await fetch(`/api/agent/hooks`,{...e,headers:{"Content-Type":`application/json`}}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`Не удалось получить хуки агента`);return n}var kre=()=>qy(),Are=e=>qy({method:`PUT`,body:JSON.stringify({text:e})});async function Jy(e,t){let n=await fetch(e,{cache:`no-store`,...t,headers:t?.body?{"Content-Type":`application/json`}:void 0}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error||`Судья недоступен`);return r}function Yy(){return Jy(`/api/agent/judge`)}function jre(e){return Jy(`/api/agent/judge`,{method:`PUT`,body:JSON.stringify(e)})}async function Xy(e,t=``){let n=t?`?projectId=${encodeURIComponent(t)}`:``,r=await fetch(`/api/agent/mcp${n}`,{...e,headers:{"Content-Type":`application/json`}}),i=await r.json().catch(()=>({}));if(!r.ok)throw Error(i.error||`Не удалось получить MCP-серверы агента`);return i}var Mre=(e=``)=>Xy(void 0,e),Nre=e=>Xy({method:`PUT`,body:JSON.stringify({text:e})});async function Zy(e){let t=await fetch(`/api/agent/memory`,{...e,headers:{"Content-Type":`application/json`}}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`Не удалось получить заметки агента`);return n}var Pre=()=>Zy(),Fre=(e,t)=>Zy({method:`PUT`,body:JSON.stringify({scope:t?`project`:`user`,path:t,text:e})});async function Ire(e=``){let t=await fetch(`/api/agent/skills?projectId=${encodeURIComponent(e)}`),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`Не удалось получить навыки агента`);return n}async function Qy(e){let t=await fetch(`/api/agent/web`,{...e,headers:{"Content-Type":`application/json`}}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`Не удалось получить настройки веб-поиска`);return n}var $y=()=>Qy(),eb=e=>Qy({method:`PUT`,body:JSON.stringify(e)});function Lre(){let e=M({text:``,hooks:[]}),t=M(),n=M(!1),r=M(``),i=Je(`agent-hooks:${V()}`,()=>({surface:`agentHooks`,busy:n.value,hooks:e.value.hooks.length}));async function a(e){n.value=!0,r.value=``;try{return await e()}catch(e){throw r.value=e instanceof Error?e.message:`Ошибка хуков агента`,e}finally{n.value=!1}}async function o(){return e.value=await kre(),t.value=void 0,e.value}return i.scope.registerCommand({id:`ide.agent.hooks.get`,title:`Прочитать хуки агента`,description:`Возвращает хуки штатного агента Projector: файл пользователя (text) и действующие хуки (событие PreToolUse, PostToolUse или Stop, источник user или project, команда, matcher).`,enabled:()=>!n.value,run:()=>a(o)}),i.scope.registerCommand({id:`ide.agent.hooks.set`,title:`Записать хуки агента`,description:`Заменяет файл хуков пользователя целиком. text — JSON вида { "hooks": { "Stop": [{ "command": "notify-send Готово", "minSeconds": 30 }], "PreToolUse": [{ "matcher": "^run_command$", "command": "./check.sh" }] } }. Код выхода 2 у PreToolUse запрещает вызов; хук может ответить JSON { "decision": "block", "reason": "…" } или { "additionalContext": "…" }. Пустая строка удаляет файл. Без аргументов сохраняет текст с экрана.`,arguments:{text:`Новый JSON хуков; пустая строка — удалить`},enabled:()=>!n.value,run:n=>{let r=J(n),i=typeof r.text==`string`?r.text:t.value??e.value.text;return a(async()=>(await Are(i),o()))}}),f(()=>void a(o).catch(()=>void 0)),{hooks:e,draft:t,busy:n,error:r,commands:i}}var tb={show:!0,auto:!0,maxRisk:1,confidence:`high-medium`},Rre={1:`info`,2:`neutral`,3:`warning`,4:`danger`,5:`danger`};function zre(e){return Rre[e]}function nb(e,t){return rb(t,e)}function rb(e,t=tb){if(!e||typeof e!=`object`||Array.isArray(e))return{...t};let n=e;return{show:typeof n.show==`boolean`?n.show:t.show,auto:typeof n.auto==`boolean`?n.auto:t.auto,maxRisk:n.maxRisk===1||n.maxRisk===2||n.maxRisk===3?n.maxRisk:t.maxRisk,confidence:n.confidence===`high`||n.confidence===`high-medium`?n.confidence:t.confidence}}function Bre(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n={};return typeof t.show==`boolean`&&(n.show=t.show),typeof t.auto==`boolean`&&(n.auto=t.auto),(t.maxRisk===1||t.maxRisk===2||t.maxRisk===3)&&(n.maxRisk=t.maxRisk),(t.confidence===`high`||t.confidence===`high-medium`)&&(n.confidence=t.confidence),Object.keys(n).length?n:void 0}function Vre(){let e=M({...tb}),t=M(!1),n=M(``),r=Je(`agent-judge:${V()}`,()=>({surface:`agentJudge`,busy:t.value,show:e.value.show,auto:e.value.auto,maxRisk:e.value.maxRisk,confidence:e.value.confidence}));async function i(e){t.value=!0,n.value=``;try{return await e()}catch(e){throw n.value=e instanceof Error?e.message:`Ошибка настроек Судьи`,e}finally{t.value=!1}}function a(t){return e.value=t,t}return r.scope.registerCommand({id:`ide.agent.judge.get`,title:`Прочитать настройки Projector Judge`,description:`Возвращает глобальные настройки Судьи: показывать ли риск в карточке подтверждения (show), разрешать ли низкий риск автоматически (auto), максимальный автоматический балл (maxRisk 1–3) и достаточную уверенность (confidence: high или high-medium).`,run:()=>i(async()=>a(await Yy()))}),r.scope.registerCommand({id:`ide.agent.judge.set`,title:`Настроить Projector Judge`,description:`Меняет глобальные настройки Судьи. Без аргументов сохраняет состояние с экрана. maxRisk выше 3 запрещён: баллы 4–5 никогда не разрешаются автоматически.`,arguments:{show:`boolean: показывать оценку в карточке`,auto:`boolean: разрешать низкий риск автоматически`,maxRisk:`1, 2 или 3: максимальный автоматический балл`,confidence:`high или high-medium`},run:t=>i(async()=>{let n=J(t);return a(await jre(rb({show:typeof n.show==`boolean`?n.show:e.value.show,auto:typeof n.auto==`boolean`?n.auto:e.value.auto,maxRisk:n.maxRisk??e.value.maxRisk,confidence:n.confidence??e.value.confidence},e.value)))})}),f(()=>void i(async()=>a(await Yy())).catch(()=>void 0)),{settings:e,busy:t,error:n,commands:r}}function Hre(){let e=M({text:``,servers:[]}),t=M(),n=M(!1),r=M(``),i=Je(`agent-mcp:${V()}`,()=>({surface:`agentMcp`,busy:n.value,servers:e.value.servers.length}));async function a(e){n.value=!0,r.value=``;try{return await e()}catch(e){throw r.value=e instanceof Error?e.message:`Ошибка MCP-серверов агента`,e}finally{n.value=!1}}async function o(){return e.value=await Mre(),t.value=void 0,e.value}return i.scope.registerCommand({id:`ide.agent.mcp.get`,title:`Прочитать MCP-серверы агента`,description:`Возвращает список MCP-серверов штатного агента Projector: свой файл пользователя (text) и серверы, которые он подключает (имя, источник user или project, тип stdio, http или sse).`,enabled:()=>!n.value,run:()=>a(o)}),i.scope.registerCommand({id:`ide.agent.mcp.set`,title:`Записать MCP-серверы агента`,description:`Заменяет файл MCP-серверов пользователя целиком. text — JSON вида { "mcpServers": { "имя": { "command": "npx", "args": ["…"], "env": {} } } } или { "type": "http", "url": "…", "headers": {} }; пустая строка удаляет файл. Серверы из .mcp.json проекта подключаются сами, но с вопросом. Без аргументов сохраняет текст с экрана.`,arguments:{text:`Новый JSON списка серверов; пустая строка — удалить`},enabled:()=>!n.value,run:n=>{let r=J(n),i=typeof r.text==`string`?r.text:t.value??e.value.text;return a(async()=>(await Nre(i),o()))}}),f(()=>void a(o).catch(()=>void 0)),{mcp:e,draft:t,busy:n,error:r,commands:i}}function Ure(){let e=M({user:``,projects:[]}),t=M({}),n=M(!1),r=M(``),i=Je(`agent-memory:${V()}`,()=>({surface:`agentMemory`,busy:n.value,projects:e.value.projects.length}));async function a(e){n.value=!0,r.value=``;try{return await e()}catch(e){throw r.value=e instanceof Error?e.message:`Ошибка заметок агента`,e}finally{n.value=!1}}async function o(){return e.value=await Pre(),t.value={},e.value}let s=n=>t.value[n]??(n===`user`?e.value.user:e.value.projects.find(e=>e.path===n)?.text)??``;return i.scope.registerCommand({id:`ide.agent.memory.get`,title:`Прочитать заметки агента`,description:`Возвращает заметки штатного агента Projector: общие (user) и по проектам (путь и текст).`,enabled:()=>!n.value,run:()=>a(o)}),i.scope.registerCommand({id:`ide.agent.memory.set`,title:`Записать заметки агента`,description:`Заменяет заметки штатного агента целиком. Без path — общие заметки, с path — заметки проекта по его пути; пустой text удаляет их. Лимит 6000 знаков. Без аргументов сохраняет общие заметки с экрана.`,arguments:{text:`Новый текст заметок; пустая строка — удалить`,path:`Путь проекта; без него — общие заметки`},enabled:()=>!n.value,run:e=>{let t=J(e),n=typeof t.path==`string`&&t.path?t.path:void 0,r=typeof t.text==`string`?t.text:s(n??`user`);return a(async()=>(await Fre(r,n),o()))}}),f(()=>void a(o).catch(()=>void 0)),{memory:e,drafts:t,textOf:s,busy:n,error:r,commands:i}}function Wre(){let e=M({skills:[],folders:[]}),t=M(!1),n=M(``),r=Je(`agent-skills:${V()}`,()=>({surface:`agentSkills`,busy:t.value,skills:e.value.skills.length}));async function i(r){t.value=!0,n.value=``;try{return e.value=await Ire(r),e.value}catch(e){throw n.value=e instanceof Error?e.message:`Ошибка навыков агента`,e}finally{t.value=!1}}return r.scope.registerCommand({id:`ide.agent.skills.list`,title:`Список навыков агента`,description:`Возвращает навыки и команды-шаблоны штатного агента Projector: имя, описание, вид (skill или command), источник (user или project) и папки, где они лежат. С projectId — вместе с навыками проекта.`,arguments:{projectId:`Проект, чьи навыки добавить; без него только пользовательские`},enabled:()=>!t.value,run:e=>{let t=J(e).projectId;return i(typeof t==`string`?t:void 0)}}),f(()=>void i().catch(()=>void 0)),{data:e,busy:t,error:n,commands:r}}function Gre(){let e=M({provider:`brave`,url:``,hasKey:!1}),t=M(`brave`),n=M(``),r=M(``),i=M(!1),a=M(``),o=Je(`agent-web:${V()}`,()=>({surface:`agentWeb`,busy:i.value,provider:e.value.provider}));async function s(e){i.value=!0,a.value=``;try{return await e()}catch(e){throw a.value=e instanceof Error?e.message:`Ошибка веб-поиска агента`,e}finally{i.value=!1}}function c(i){return e.value=i,t.value=i.provider,n.value=i.url,r.value=``,i}return o.scope.registerCommand({id:`ide.agent.web.get`,title:`Прочитать настройки веб-поиска агента`,description:`Возвращает поисковый сервис штатного агента Projector (brave или searxng), адрес SearXNG и сохранён ли ключ. Сам ключ не возвращается.`,enabled:()=>!i.value,run:()=>s(async()=>c(await $y()))}),o.scope.registerCommand({id:`ide.agent.web.set`,title:`Выбрать веб-поиск агента`,description:`Задаёт поисковый сервис штатного агента: provider brave (нужен ключ Brave Search, его вводит пользователь на экране или в запросе секрета) или searxng (url своего сервера). Без аргументов сохраняет выбор с экрана. Ключ через команду не передаётся.`,arguments:{provider:`brave или searxng`,url:`Адрес сервера SearXNG, для brave не нужен`},enabled:()=>!i.value,run:e=>{let i=J(e),a=i.provider??t.value,o=typeof i.url==`string`?i.url:n.value;return s(async()=>c(await eb({provider:a,url:o,apiKey:r.value})))}}),o.scope.registerCommand({id:`ide.agent.web.key.clear`,title:`Удалить ключ веб-поиска агента`,description:`Стирает сохранённый ключ поискового сервиса штатного агента.`,enabled:()=>!i.value&&e.value.hasKey,run:()=>s(async()=>c(await eb({provider:e.value.provider,url:e.value.url,apiKey:null})))}),f(()=>void s(async()=>c(await $y())).catch(()=>void 0)),{web:e,provider:t,url:n,apiKey:r,busy:i,error:a,commands:o}}var Kre=W({__name:`AgentJsonSettings`,props:{label:{type:String,required:!0},"aria-label":{type:String,required:!0},placeholder:{type:String,required:!0},text:{type:String,required:!0},draft:{type:String,required:!1},busy:{type:Boolean,required:!0},error:{type:String,required:!1},activate:{type:Function,required:!0}},emits:[`update:draft`,`save`],setup(e,{expose:t,emit:n}){t();let r={props:e,emit:n,UiButton:q,UiControl:Se,UiField:Re,UiSettingsSection:Jg};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function qre(t,n,r,i,a,o){return K(),F(i.UiSettingsSection,{activate:r.activate,error:r.error},{default:e(()=>[y(i.UiField,{label:r.label},{default:e(({control:e})=>[y(i.UiControl,R(e,{as:`textarea`,rows:`10`,"aria-label":i.props[`aria-label`],spellcheck:`false`,placeholder:r.placeholder,value:r.draft??r.text,disabled:r.busy,onInput:n[0]||=e=>i.emit(`update:draft`,e.target.value)}),null,16,[`aria-label`,`placeholder`,`value`,`disabled`])]),_:1},8,[`label`]),y(i.UiButton,{appearance:`solid`,disabled:r.busy||r.draft===void 0,onClick:n[1]||=e=>i.emit(`save`)},{default:e(()=>[...n[2]||=[G(`Сохранить`,-1)]]),_:1},8,[`disabled`]),c(t.$slots,`summary`),c(t.$slots,`help`)]),_:3},8,[`activate`,`error`])}var ib=H(Kre,[[`render`,qre],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentJsonSettings.vue`]]),Jre=W({__name:`AgentHooksSettings`,setup(e,{expose:t}){t();let{hooks:n,draft:r,busy:i,error:a,commands:o}=Lre(),s={hooks:n,draft:r,busy:i,error:a,commands:o,activate:()=>o.scope.activate(),UiHint:we,AgentJsonSettings:ib};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}});function Yre(t,n,r,i,a,o){return K(),F(i.AgentJsonSettings,{label:`хуки пользователя (JSON)`,"aria-label":`Хуки агента`,placeholder:`{ "hooks": { "Stop": [{ "command": "notify-send Projector готов", "minSeconds": 30 }] } }`,text:i.hooks.text,draft:i.draft,busy:i.busy,error:i.error,activate:i.activate,"onUpdate:draft":n[0]||=e=>i.draft=e,onSave:n[1]||=e=>i.commands.run(`ide.agent.hooks.set`)},{summary:e(()=>[i.hooks.hooks.length?(K(),F(i.UiHint,{key:0},{default:e(()=>[G(` Действуют: `+X(i.hooks.hooks.map(e=>`${e.event}${e.matcher?` /`+e.matcher+`/`:``} (${e.source===`user`?`ваш`:`проект`}): ${e.command}`).join(`; `)),1)]),_:1})):D(`v-if`,!0)]),help:e(()=>[y(i.UiHint,null,{default:e(()=>[...n[2]||=[G(` События: `,-1),I(`code`,null,`PreToolUse`,-1),G(` (перед инструментом; код выхода 2 или ответ `,-1),I(`code`,null,`{"decision":"block","reason":"…"}`,-1),G(` запрещает вызов), `,-1),I(`code`,null,`PostToolUse`,-1),G(` (после; `,-1),I(`code`,null,`{"additionalContext":"…"}`,-1),G(` дописывается к результату) и `,-1),I(`code`,null,`Stop`,-1),G(` (после ответа; `,-1),I(`code`,null,`minSeconds`,-1),G(` — только для долгих ходов). `,-1),I(`code`,null,`matcher`,-1),G(` — регулярное выражение по имени инструмента. Событие приходит хуку в stdin как JSON. Хуки из `,-1),I(`code`,null,`.projector/hooks.json`,-1),G(` проекта тоже действуют, но включение подтверждаете вы. `,-1)]]),_:1})]),_:1},8,[`text`,`draft`,`busy`,`error`])}var Xre=H(Jre,[[`render`,Yre],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentHooksSettings.vue`]]);async function ab(e,t,n){let r=await fetch(`/api/agent/chats/${e}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),i=await r.json().catch(()=>({}));if(!r.ok)throw Error(i.error||n);return i}async function Zre(e){let t=await fetch(`/api/agent/chats?key=${encodeURIComponent(e)}`),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`Не удалось получить историю чатов`);return n.chats??[]}async function ob(e,t){let n=new URLSearchParams({projectId:e});t&&n.set(`backend`,t);let r=await fetch(`/api/agent/chats/recent?${n}`),i=await r.json().catch(()=>({}));if(!r.ok)throw Error(i.error||`Не удалось получить историю`);return i.chats??[]}var Qre=e=>ab(`archive`,{key:e},`Не удалось сохранить чат в истории`),$re=(e,t)=>ab(`open`,{key:e,id:t},`Не удалось открыть чат`),eie=(e,t)=>ab(`update`,{id:e,...t},`Не удалось изменить чат`),tie=e=>ab(`delete`,{id:e},`Не удалось удалить чат`),nie=(e,t)=>ab(`forget`,{projectId:e,chat:t},`Не удалось удалить чат`);async function sb(e,t,n,r){let i;try{if(!n)throw Error(`Команды недоступны в этом чате`);i={output:await n(t)}}catch(e){i={error:e instanceof Error?e.message:String(e)}}if(!(await fetch(`/api/agent/tool-result`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,...i}),signal:r})).ok)throw Error(`Не удалось передать результат команды агенту`)}var cb=Symbol(`events unavailable`),lb=class extends Error{status;constructor(e,t){super(e),this.status=t}};async function rie(e,t,n,r){if(typeof window>`u`)return cb;let i=Mt(),a,o=new Promise((e,t)=>{a=n=>n?t(n):e()}),s=Promise.resolve(),c=e=>{let n=e.detail;n.stream===i&&(n.event===`end`?s=s.then(()=>a()):(s=s.then(()=>t({event:n.event,data:n.data})),s.catch(a)))},l=()=>a(Error(`Соединение с событиями прервано`)),u=()=>{fetch(`/api/agent/detach`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({stream:i}),keepalive:!0}).catch(()=>{}),a(new DOMException(`Aborted`,`AbortError`))};window.addEventListener(`projector:agent`,c),window.addEventListener(`projector:events-open`,l),n?.addEventListener(`abort`,u,{once:!0});try{if(n?.aborted)throw new DOMException(`Aborted`,`AbortError`);let t=await fetch(`/api/agent`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...e,client:on,stream:i}),signal:n});if(t.status===409)return cb;if(!t.ok)throw new lb((await t.json().catch(()=>null))?.error||`Агент недоступен`,t.status);let a=await t.json().catch(()=>null);a?.run&&r?.(a.run),await o,await s}finally{window.removeEventListener(`projector:agent`,c),window.removeEventListener(`projector:events-open`,l),n?.removeEventListener(`abort`,u)}}function ub(e){let t=[],n=e.split(`
|
|
26
|
-
|
|
27
|
-
`),r=n.pop()??``;for(let e of n){let n=``,r=[];for(let t of e.split(`
|
|
28
|
-
`))t.startsWith(`event:`)&&(n=t.slice(6).trim()),t.startsWith(`data:`)&&r.push(t.slice(5).trim());if(n)try{t.push({event:n,data:JSON.parse(r.join(`
|
|
29
|
-
`)||`{}`)})}catch{t.push({event:`error`,data:{error:`Некорректный поток`}})}}return{events:t,rest:r}}async function iie(e){let t=await fetch(`/api/agent/form-repair`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:e.signal}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`Form Doctor недоступен`);if(typeof n.form!=`string`||!n.form.trim())throw Error(`Form Doctor не вернул форму`);return n.form}async function aie(e){let t=await fetch(`/api/agent/answer-repair`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:e.signal}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`Answer Doctor недоступен`);if(typeof n.answer!=`string`||!n.answer.trim())throw Error(`Answer Doctor не вернул ответ`);return n.answer}async function oie(e){let t=await fetch(`/api/agent/attachments?name=${encodeURIComponent(e.name)}`,{method:`POST`,headers:{"Content-Type":e.type},body:e}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(typeof n.error==`string`?n.error:`Не удалось загрузить файл`);let r=typeof n.path==`string`?n.path:``;if(!r)throw Error(`Сервер не вернул путь к файлу`);let i=typeof n.mime==`string`?n.mime:``;return i.startsWith(`image/`)&&typeof n.id==`string`?{type:`image`,id:n.id,name:typeof n.name==`string`?n.name:e.name,mime:i}:{type:`file`,path:r}}var db=class extends Error{};async function fb(e,t,n,r,i={}){let a=i.attach?{attach:i.attach,approvals:!0,commandBridge:!!i.commands}:{message:e,history:t,projectId:i.projectId,chat:i.chat,sessionId:i.sessionId,backend:i.backend,permissionMode:i.permissionMode,selection:i.selection,parts:i.parts,messageId:i.messageId,tail:i.tail,features:i.features,judge:i.judge,role:i.role,worktree:i.worktree,isolate:i.isolate,approvals:!0,commandBridge:!!i.commands};async function o(e){if(e.event!==`command-request`)return n(e);await sb(e.data.id,e.data,i.commands,r)}try{if(await rie(a,o,r,i.onRun)!==cb)return}catch(e){throw e instanceof lb&&e.status===404?new db(e.message):e}let s=await fetch(`/api/agent`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(a),signal:r});if(!s.ok||!s.body){let e=(await s.json().catch(()=>null))?.error||`Агент недоступен`;throw s.status===404?new db(e):Error(e)}let c=s.headers.get(`X-Agent-Run`);c&&i.onRun?.(c);let l=s.body.getReader(),u=new TextDecoder,d=``;for(;;){let{done:e,value:t}=await l.read();if(e)break;d+=u.decode(t,{stream:!0});let n=ub(d);d=n.rest;for(let e of n.events)await o(e)}if(d.trim()){let e=ub(`${d}\n\n`);for(let t of e.events)await o(t)}}async function sie(e){await fetch(`/api/agent/cancel`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({runId:e})})}async function cie(e,t,n=!1){if(!(await fetch(`/api/agent/tool-result`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,output:{allow:t,always:n}})})).ok)throw Error(`Запрос разрешения уже закрыт`)}async function lie(e,t){if(!(await fetch(`/api/agent/tool-result`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,output:t?{answers:t}:{}})})).ok)throw Error(`Вопрос уже закрыт`)}async function uie(e,t){if(!(await fetch(`/api/agent/tool-result`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:e,output:t?{value:t}:{}})})).ok)throw Error(`Запрос секрета уже закрыт`)}async function pb(e,t,n){let r=await fetch(e,t),i=await r.json().catch(()=>({}));if(!r.ok)throw Error(i.error||n);return i}var mb=(e,t)=>`backend=${encodeURIComponent(e)}&projectId=${encodeURIComponent(t)}`;async function die(e,t){return await pb(`/api/agent/controls?${mb(e,t)}`,void 0,`Не удалось получить настройки агента`)}async function fie(e,t){return(await pb(`/api/agent/commands?${mb(e,t)}`,void 0,`Не удалось получить команды агента`)).commands}async function pie(){return(await pb(`/api/agent/defaults`,void 0,`Не удалось получить выбор агента`)).defaults}async function mie(e,t,n){await pb(`/api/agent/defaults`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({backend:e,id:t,value:n})},`Не удалось сохранить выбор агента`)}async function hb(e,t){return(await pb(`/api/agent/sessions?${mb(e,t)}`,void 0,`Не удалось получить сессии агента`)).sessions}async function gb(e,t,n){return(await pb(`/api/agent/sessions/load`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({backend:e,projectId:t,sessionId:n})},`Не удалось открыть сессию`)).turns}async function hie(e){return pb(`/api/agent/rewind-files`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)},`Не удалось вернуть файлы`)}async function _b(e,t){return(await pb(`/api/agent/mcp?${mb(e,t)}`,void 0,`Не удалось получить MCP-серверы`)).servers}async function gie(e,t){return pb(`/api/agent/worktree?projectId=${encodeURIComponent(e)}&id=${encodeURIComponent(t)}`,void 0,`Не удалось получить состояние копии`)}var vb=(e,t,n,r)=>pb(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({projectId:t,id:n})},r),_ie=(e,t)=>vb(`/api/agent/worktree/merge`,e,t,`Не удалось влить изменения`),vie=(e,t)=>vb(`/api/agent/worktree/discard`,e,t,`Не удалось удалить копию`);async function yb(){let e=await fetch(`/api/agent/runs`,{cache:`no-store`});if(!e.ok)throw Error(`Не удалось получить работающие процессы агентов`);return(await e.json()).runs??[]}var bb=e=>e===`done`||e===`error`||e===`stopped`;async function xb(e,t,n=`Запрос не удался`){let r=await fetch(e,{cache:`no-store`,...t,headers:t?.body?{"Content-Type":`application/json`}:void 0}),i=await r.json().catch(()=>({}));if(!r.ok)throw Error(i.error||n);return i}var Sb=(e,t={},n)=>xb(e,{method:`POST`,body:JSON.stringify(t)},n);async function Cb(e){return(await xb(`/api/agent/jobs${e?`?projectId=${encodeURIComponent(e)}`:``}`)).jobs}function wb(e,t=0,n=0,r){return xb(`/api/agent/jobs/${e}${t?`?wait=${t}&rev=${n}`:``}`,{signal:r},`Не удалось прочитать задание`)}async function Tb(e){return(await Sb(`/api/agent/jobs`,e,`Не удалось запустить задание`)).job}async function Eb(e){return(await Sb(`/api/agent/jobs/${e}/stop`,{},`Не удалось остановить задание`)).job}async function Db(e,t=0){return(await xb(`/api/agent/jobs/${e}/diff${t?`?limit=${encodeURIComponent(t)}`:``}`,void 0,`Не удалось прочитать изменения задания`)).diff}async function Ob(e,t){return(await Sb(`/api/agent/jobs/${e}/answer`,t,`Не удалось передать ответ`)).job}async function kb(e){return(await xb(`/api/agent/jobs/${e}/worktree`,void 0,`Не удалось прочитать копию задания`)).worktree}async function Ab(e){return xb(`/api/agent/jobs/${e}/worktree/merge`,{method:`POST`},`Не удалось влить копию задания`)}async function jb(e){return xb(`/api/agent/jobs/${e}/worktree/discard`,{method:`POST`},`Не удалось удалить копию задания`)}async function Mb(e,t,n=!1){return(await xb(`/api/agent/jobs/${e}/retry`,{method:`POST`,body:JSON.stringify({task:t,append:n})},`Не удалось повторить задание`)).job}async function Nb(e,t){return xb(`/api/agent/jobs/${e}/send`,{method:`POST`,body:JSON.stringify({text:t})},`Не удалось отправить уточнение заданию`)}async function Pb(e,t){return(await xb(`/api/agent/jobs/${e}/fork`,{method:`POST`,body:JSON.stringify({task:t})},`Не удалось создать форк задания`)).job}async function Fb(e,t){let n=await fetch(`/api/agent/lens`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:t}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error||`Lens недоступен`);if(typeof r.text!=`string`||!r.text.trim())throw Error(`Lens не вернул описание`);return{text:r.text.trim(),at:typeof r.at==`number`?r.at:Date.now()}}async function Ib(e,t,n,r){await pb(`/api/agent/sessions/update`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({backend:e,projectId:t,sessionId:n,...r})},`Не удалось изменить сессию`)}async function Lb(e,t,n,r){await pb(`/api/agent/sessions/delete`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({backend:e,projectId:t,sessionId:n,...r?{chat:r}:{}})},`Не удалось удалить сессию`)}async function Rb(e,t,n){return(await fetch(`/api/agent/inject`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({messageId:e,text:t,inputId:n})})).ok}function zb(e){try{let t=new URL(e),n=decodeURIComponent(t.pathname);return t.host&&t.host!==`localhost`&&(n=`//${t.host}${n}`),/^\/[a-z]:[\\/]/i.test(n)&&(n=n.slice(1)),n||void 0}catch{return}}function Bb(e){return e.startsWith(`/`)||/^[a-z]:[\\/]/i.test(e)||e.startsWith(`\\\\`)}function Vb(e,t){if(Bb(t))return t;let n=e.replace(/[\\/]+$/,``);return n?`${n}/${t.replace(/^\.\//,``)}`:t}var Hb=/^(?:https?:|mailto:|tel:)/i,Ub=/^[a-z][a-z\d+.-]*:/i,Wb=/#L(\d+)(?:-L?(\d+))?(?:C(\d+))?$/i,Gb=/:(\d+)(?:-(\d+))?(?::(\d+))?$/;function Kb(e){try{return decodeURIComponent(e)}catch{return e}}function qb(e){let t=Wb.exec(e);if(t)return{path:e.slice(0,t.index),line:Number(t[1]),...t[2]?{endLine:Number(t[2])}:{},...t[3]?{column:Number(t[3])}:{}};let n=Gb.exec(e);return n?{path:e.slice(0,n.index),line:Number(n[1]),...n[2]?{endLine:Number(n[2])}:{},...n[3]?{column:Number(n[3])}:{}}:{path:e}}function Jb(e){let t=e.trim();if(!t)return{href:e,kind:`other`};if(t.startsWith(`#`))return{href:e,kind:`anchor`};if(Hb.test(t)||t.startsWith(`//`))return{href:e,kind:`web`};if(/^file:\/\//i.test(t)){let{path:n,...r}=qb(t),i=zb(n);return i?{href:e,kind:`file`,path:i,external:!0,...r}:{href:e,kind:`other`}}if(Ub.test(t)&&!Bb(t))return{href:e,kind:`other`};let{path:n,...r}=qb(t),i=(n.split(/[?#]/)[0]??``).replace(/^\.\//,``);if(!i)return{href:e,kind:`anchor`};let a=Kb(i);return{href:e,kind:`file`,path:a,external:Bb(a),...r}}function Yb(e,t=80){let n=e.replace(/\s+/g,` `).trim();return n?n.length<=t?n:`${n.slice(0,t-1).trimEnd()}…`:``}function Xb(e,t,n){return e?.replace(/\s+/g,` `).trim()||Yb(t)||n}var Zb=/^[a-z][a-z0-9-]{1,39}$/,Qb={name:80,description:400,agent:40,selection:24,key:100,value:300,prompt:8e3,resources:40,resource:80};function $b(e){if(!Array.isArray(e))return;let t=[];for(let n of e.slice(0,Qb.resources)){if(typeof n!=`string`)continue;let e=n.trim();!e||e.length>Qb.resource||t.includes(e)||t.push(e)}return t}function ex(e){return typeof e==`string`&&e.trim().slice(0,Qb.prompt)||void 0}function tx(e){let t={};if(!e||typeof e!=`object`||Array.isArray(e))return t;for(let[n,r]of Object.entries(e).slice(0,Qb.selection)){if(typeof r!=`string`)continue;let e=n.trim(),i=r.trim();!e||e.length>Qb.key||!i||i.length>Qb.value||(t[e]=i)}return t}function nx(e){return{roleId:e.id,name:e.name,selection:{...e.selection},...e.permissionMode?{permissionMode:e.permissionMode}:{},...e.prompt?{prompt:e.prompt}:{},...e.skills===void 0?{}:{skills:[...e.skills]},...e.mcp===void 0?{}:{mcp:[...e.mcp]}}}function rx(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n=typeof t.roleId==`string`?t.roleId.trim():``;if(!Zb.test(n))return;let r=typeof t.name==`string`?t.name.trim().slice(0,Qb.name):``;if(!r)return;let i=t.permissionMode==="default"||t.permissionMode===`auto`||t.permissionMode===`bypassPermissions`?t.permissionMode:void 0,a=ex(t.prompt),o=$b(t.skills),s=$b(t.mcp);return{roleId:n,name:r,selection:tx(t.selection),...i?{permissionMode:i}:{},...a?{prompt:a}:{},...o===void 0?{}:{skills:o},...s===void 0?{}:{mcp:s}}}function ix(e){return JSON.stringify(e)}function ax(e){if(typeof e==`string`)try{return rx(JSON.parse(e))}catch{return}}function ox(e,t,n,r){for(let i of st()){let a=i.builtin?`agent`:i.program,o=`${i.backend}:${e}:`;if(t.startsWith(o)&&t.length>o.length)return{command:`ide.workbench.${a}.open`,args:{chatId:t.slice(o.length),...n?{title:n}:{},...r?{role:ix(r)}:{}}}}}function sx(e,t){let n=e[t];if(typeof n!=`string`||!n)throw Error(`Укажите ${t}`);return n}function cx(e,t,n){if(typeof t.turnId==`string`&&t.turnId)return t.turnId;let r=e.turns().findLast(e=>e.role===n);if(!r)throw Error(`В чате ещё нет сообщений`);return r.id}function lx(e){if(e.type===`file`){let t=e.directory&&!e.path.endsWith(`/`)?`${e.path}/`:e.path,n=/\s/.test(t)?`@"${t}"`:`@${t}`;return e.range?`${n}:${e.range.from}-${e.range.to}`:n}return e.type===`command`?`/${e.name}`:`[${e.name}]`}function ux(e){return e.map(e=>e.type===`text`?e.text:lx(e)).join(``)}function dx(e){let t=[];for(let n of e)if(n.type!==`text`)t.push(n);else if(n.text){let e=t.at(-1);e?.type===`text`?t[t.length-1]={type:`text`,text:e.text+n.text}:t.push(n)}return t}var fx=e=>!!e?.some(e=>e.type!==`text`),px={file:`<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/>`,directory:`<path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/>`,image:`<rect width="18" height="18" x="3" y="3" rx="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.09-3.09a2 2 0 0 0-2.82 0L6 21"/>`,command:`<path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"/>`};function mx(e){return e.type===`image`&&/^[0-9a-f]{16}$/.test(e.id)?`<img class="chip-thumb" src="${We(`/api/agent/attachments/${e.id}`)}" alt="" width="14" height="14">`:hx(e)}function hx(e){return`<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${px[e.type===`file`&&e.directory?`directory`:e.type]}</svg>`}function gx(e){if(e.type===`file`){let t=e.path.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e.path;return e.range?`${t}:${e.range.from===e.range.to?`${e.range.from}`:`${e.range.from}–${e.range.to}`}`:t}return e.type===`command`?`/${e.name}`:e.name}function _x(e){if(e.type===`file`){if(!e.range)return e.path;let t=e.range.from===e.range.to?`строка ${e.range.from}`:`строки ${e.range.from}–${e.range.to}`;return`${e.path} · ${t}`}return e.type===`command`?`/${e.name}`:e.name}var vx=class extends Jn{chip;constructor(e){super(),this.chip=e}eq(e){return lx(e.chip)===lx(this.chip)}toDOM(){let e=document.createElement(`span`);e.className=`composer-chip ${this.chip.type}`,e.title=_x(this.chip),e.dataset.chip=JSON.stringify(this.chip),e.innerHTML=mx(this.chip);let t=document.createElement(`span`);return t.className=`composer-chip-label u-truncate`,t.textContent=gx(this.chip),e.append(t),e}ignoreEvent(){return!1}},yx=Hn.define(),bx=Yn.define({create:()=>ar.none,update(e,t){let n=e.map(t.changes);n=n.update({filter:(e,t,n)=>t-e===lx(n.spec.widget.chip).length});for(let e of t.effects)e.is(yx)&&(n=n.update({add:[ar.replace({widget:new vx(e.value.chip)}).range(e.value.from,e.value.to)]}));return n},provide:e=>[Zn.decorations.from(e),Zn.atomicRanges.of(t=>t.state.field(e))]});function xx(e){let t=[];return e.field(bx).between(0,e.doc.length,(e,n,r)=>{t.push({from:e,to:n,chip:r.spec.widget.chip})}),t}function Sx(e){let t=[],n=0;for(let{from:r,to:i,chip:a}of xx(e))r>n&&t.push({type:`text`,text:e.doc.sliceString(n,r)}),t.push(a),n=i;return n<e.doc.length&&t.push({type:`text`,text:e.doc.sliceString(n)}),dx(t)}function Cx(e,t){let n=``,r=[];for(let e of t)if(e.type===`text`)n+=e.text;else{let t=lx(e);r.push({from:n.length,to:n.length+t.length,chip:e}),n+=t}e.dispatch({changes:{from:0,to:e.state.doc.length,insert:n},effects:r.map(e=>yx.of(e)),selection:nr.cursor(n.length)})}function wx(e,t,n,r){let i=lx(r);e.dispatch({changes:{from:t,to:n,insert:`${i} `},effects:yx.of({from:t,to:t+i.length,chip:r}),selection:nr.cursor(t+i.length+1),userEvent:`input.complete`})}function Tx(e){return t=>{let{main:n}=t.state.selection;if(!n.empty)return!1;let r=xx(t.state).find(t=>e?t.from===n.head:t.to===n.head);return r?(t.dispatch({changes:{from:r.from,to:r.to},userEvent:`delete`}),!0):!1}}var Ex=Tx(!1),Dx=Tx(!0),Ox=[bx];function kx(e){let t=Math.max(0,Math.floor(e/1e3));if(t<60)return`${t} с`;let n=Math.floor(t/60),r=t%60;return n<60?`${n}:${String(r).padStart(2,`0`)}`:`${Math.floor(n/60)}:${String(n%60).padStart(2,`0`)}:${String(r).padStart(2,`0`)}`}var Ax=M(Date.now()),jx,Mx=0;function Nx(){return Mx++,Ax.value=Date.now(),jx??=setInterval(()=>{Ax.value=Date.now()},1e3),le()&&k(()=>{Mx--,!Mx&&jx!==void 0&&(clearInterval(jx),jx=void 0)}),Ax}var Px=`Это новый проект в Projector. Посмотри файлы в папке (package.json, Makefile, README), предложи команды запуска (dev, build, test) и адрес предпросмотра. Если папка пустая — предложи варианты инициализации. Покажи план и применяй настройки проекта командами Projector только после моего подтверждения.`;function Fx(){return typeof document<`u`&&document.visibilityState===`hidden`}function Ix(e,t,n){if(typeof Notification<`u`&&Notification.permission===`granted`&&Fx())try{new Notification(e,{body:t.slice(0,200),tag:n})}catch{}}async function Lx(){if(typeof Notification<`u`&&Notification.permission==="default")try{await Notification.requestPermission()}catch{}}function Rx(e,t){Ix(t?`Агент остановился с ошибкой`:`Агент закончил`,e.trim(),`agent-answer`)}function zx(e){Ix(`Агент задаёт вопрос`,e,`agent-question`)}function Bx(e){Ix(`Агент ждёт разрешения`,e,`agent-permission`)}function Vx(e,t,n){Ix(t,n,`agent-job:${e}`)}function Hx(e,t){if(e?.role!==`assistant`)return;let n=xt(t)?.plan;if(n)for(let t of e.tools.toReversed()){if(!t.input)continue;let e=n({name:t.name,input:t.input});if(e)return e}}function Ux(e,t){let n=e.filter(e=>e.role===`assistant`);for(let e of n.toReversed()){let r=Hx(e,t);if(r)return e===n.at(-1)||r.some(e=>e.status!==`completed`)?r:[]}return[]}function Wx(e){let t=new Map;for(let n of e)for(let e of n.tasks??[])t.set(e.id,e);return[...t.values()]}function Gx(e){let t=new Set(e.findLast(e=>e.role===`assistant`)?.tasks?.map(e=>e.id));return Wx(e).filter(e=>e.status===`running`||t.has(e.id))}function Kx(e,t){let n=Wx(e).find(e=>e.id===t);if(!n)return;let r=e.flatMap(e=>e.tools),i=n.tool?r.find(e=>e.id===n.tool):void 0;return{task:n,call:i,calls:i?r.filter(e=>e.parent===i.id):[]}}function qx(e,t){let n=e.durationMs??0;if(e.status===`running`){let r=e.startedAt?Math.max(n,t-e.startedAt):n;return r?kx(r):``}return n?kx(n):e.startedAt!==void 0&&e.endedAt!==void 0?kx(e.endedAt-e.startedAt):``}var Jx={running:`Выполняется`,done:`Готово`,error:`Ошибка`,stopped:`Остановлено`};function Yx(e){return(e??``).replace(/```[\s\S]*?```/g,` `).replace(/`([^`\n]*)`/g,`$1`).replace(/\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/\*\*([^*\n]+)\*\*/g,`$1`).replace(/__([^_\n]+)__/g,`$1`).replace(/(^|[\s(])\*([^*\n]+)\*(?=[\s).,!?:;]|$)/g,`$1$2`).replace(/^#{1,6}\s+/gm,``).replace(/\s+/g,` `).trim()}function Xx(e){let{task:t,call:n,calls:r}=e;return[`${t.title||`Задача`} — ${Jx[t.status]}`,t.subagent?`Субагент: ${t.subagent}`:``,n?.input?`Задание: ${n.input.slice(0,1e3)}`:``,r.length?`Вызовы: ${r.map(e=>`${e.name} — ${e.status}`).join(`; `)}`:``,t.summary?`Итог: ${t.summary}`:``].filter(Boolean).join(`
|
|
30
|
-
`)}var Zx=/\.(?:avif|bmp|gif|heic|heif|ico|jpe?g|png|svg|tiff?|webp)$/i;function Qx(e){let t=e.split(/[?#]/)[0]??``;return Zx.test(t)}function $x(e){let t=e.split(/[\\/]/);return(t.at(-1)??``).toLowerCase()===`skill.md`?t.at(-2)??``:``}var eS=[`command`,`query`,`path`,`file_path`,`filePath`,`pattern`,`url`,`skill`,`name`];function tS(e){try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}catch{return}}function nS(e){return tS(e)}function rS(e){let t=tS(e);if(!t)return``;for(let e of[`file_path`,`filePath`,`path`])if(typeof t[e]==`string`&&t[e])return t[e];return``}function iS(e){let t=tS(e);if(!t)return``;for(let e of eS)if(typeof t[e]==`string`&&t[e])return t[e];return``}var aS=e=>typeof e==`string`?e.split(`
|
|
31
|
-
`):[``],oS=(e,t)=>[...aS(e).map(e=>`- ${e}`),...aS(t).map(e=>`+ ${e}`)],sS=e=>[`edit`,`multiedit`].includes(e.toLowerCase()),cS=e=>typeof e==`string`?e:JSON.stringify(e);function lS(e,t){let n=tS(t);if(!n)return t;let r=e.toLowerCase(),i=typeof n.description==`string`?n.description:``;if(typeof n.command==`string`&&r!==`execute_command`&&r!==`describe_command`&&r!==`list_commands`)return[i&&`# ${i}`,`$ ${n.command}`].filter(Boolean).join(`
|
|
32
|
-
`);let a=typeof n.file_path==`string`?n.file_path:typeof n.filePath==`string`?n.filePath:n.path;if(typeof a==`string`&&typeof n.content==`string`)return`${a}\n\n${n.content}`;let o=n.old_string??n.oldString,s=n.new_string??n.newString;if(typeof a==`string`&&typeof o==`string`)return[a,``,...oS(o,s)].join(`
|
|
33
|
-
`);if(typeof a==`string`&&Array.isArray(n.edits))return[a,``,...n.edits.flatMap((e,t)=>[...t?[`@@`]:[],...oS(e.old_string??e.oldString,e.new_string??e.newString)])].join(`
|
|
34
|
-
`);if(r===`exitplanmode`&&typeof n.plan==`string`)return n.plan;let c=Object.entries(n).filter(([,e])=>e!==void 0&&e!==``);return c.length?c.map(([e,t])=>{let n=cS(t);return n.includes(`
|
|
35
|
-
`)?`${e}:\n${n}`:`${e}: ${n}`}).join(`
|
|
36
|
-
`):``}var uS={list_commands:`Поиск команд`,describe_command:`Описание команды`,execute_command:`Вызов команды`,describe_widget:`Описание виджета`,use_skill:`Загрузка навыка`,Skill:`Загрузка навыка`,skill:`Загрузка навыка`,bash:`Команда`,shell:`Команда`,terminal:`Терминал`,run:`Команда`,run_command:`Команда`,ask_user:`Вопрос пользователю`,find_projects:`Поиск проектов`,inspect_path:`Обзор проекта`,list_directory:`Обзор папки`,add_project:`Добавление проекта`,add_projects:`Добавление проектов`,list_projects:`Список проектов`,Read:`Чтение файла`,read:`Чтение файла`,read_file:`Чтение файла`,ReadMediaFile:`Чтение изображения`,read_media_file:`Чтение изображения`,view_image:`Чтение изображения`,viewimage:`Чтение изображения`,Edit:`Правка файла`,edit:`Правка файла`,edit_file:`Правка файла`,MultiEdit:`Правка файла`,multiedit:`Правка файла`,apply_patch:`Правка файла`,Write:`Запись файла`,write:`Запись файла`,write_file:`Запись файла`,Grep:`Поиск в файлах`,grep:`Поиск в файлах`,Glob:`Поиск файлов`,glob:`Поиск файлов`,WebFetch:`Загрузка страницы`,webfetch:`Загрузка страницы`,web_fetch:`Загрузка страницы`,WebSearch:`Поиск в сети`,websearch:`Поиск в сети`,web_search:`Поиск в сети`,Task:`Субагент`,task:`Субагент`,agent:`Субагент`,subagent:`Субагент`,TodoWrite:`План задач`,todowrite:`План задач`,TodoList:`План задач`},dS=Object.fromEntries(Object.entries(uS).map(([e,t])=>[e.toLowerCase(),t])),fS=e=>/^(?:invoke|load|use)[\s_]*skill\b/i.test(e)||/^skill\b/i.test(e);function pS(e,t=``){if(!fS(e))return``;let n=/^(?:invoke|load|use)[\s_]*skill\s+(.+)$/i.exec(e)?.[1]?.trim();if(n)return n;let r=nS(t);if(!r)return``;for(let e of[`skill`,`name`,`id`]){let t=r[e];if(typeof t==`string`&&t.trim())return t.trim()}return``}var mS=(e,t=``)=>{if(fS(e)){let n=pS(e,t);return n?`Загрузка навыка: ${n}`:`Загрузка навыка`}return/^reading media\b/i.test(e)?`Чтение изображения`:uS[e]||dS[e.toLowerCase()]||e},hS=new Map(Object.entries({read:[`read`,`read_file`,`readfile`,`read_file_content`,`readmediafile`,`read_media_file`,`view_image`,`viewimage`],write:[`write`,`write_file`,`writefile`,`create_file`],edit:[`edit`,`multiedit`,`edit_file`,`apply_patch`,`patch`],bash:[`bash`,`shell`,`terminal`,`run`,`run_command`,`execute`,`command`,`sh`],search:[`grep`,`glob`,`rg`,`search`,`find`,`list_directory`,`ls`,`list_files`],web:[`webfetch`,`web_fetch`,`websearch`,`web_search`,`fetch`,`fetch_url`],task:[`task`,`agent`,`subagent`,`delegate`]}).flatMap(([e,t])=>t.map(t=>[t,e]))),gS={read:`read`,edit:`edit`,delete:`write`,move:`write`,search:`search`,execute:`bash`,fetch:`web`},_S=[[/^reading media\b/i,`read`]];function vS(e,t){return hS.get(e.toLowerCase())??(t?gS[t]:void 0)??_S.find(([t])=>t.test(e))?.[1]??`other`}function yS(e,t){return!t||!e.startsWith(`${t}/`)?e:e.slice(t.length+1)}var bS=e=>e?e.split(`
|
|
37
|
-
`).length:0,xS=e=>typeof e==`string`&&e?e.split(`
|
|
38
|
-
`).length:0;function SS(e,t){let n=typeof e==`string`&&e?e.split(`
|
|
39
|
-
`):[],r=typeof t==`string`&&t?t.split(`
|
|
40
|
-
`):[],i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;let a=n.length,o=r.length;for(;a>i&&o>i&&n[a-1]===r[o-1];)a--,o--;let s=n.slice(i,a),c=r.slice(i,o);if(!s.length||!c.length||s.length*c.length>4e4)return{added:c.length,removed:s.length};let l=new Uint16Array(c.length+1);for(let e=0;e<s.length;e++){let t=0;for(let n=0;n<c.length;n++){let r=l[n+1];l[n+1]=s[e]===c[n]?t+1:Math.max(r,l[n]),t=r}}let u=l[c.length];return{added:c.length-u,removed:s.length-u}}function CS(e){if(e)try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}catch{return}}function wS(e){let t=CS(e)?.metadata,n=t&&typeof t==`object`?t.files:void 0;return Array.isArray(n)?n.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{file:t,additions:n,deletions:r}=e;return typeof t!=`string`||typeof n!=`number`||typeof r!=`number`?[]:[{path:t,added:n,removed:r}]}):[]}function TS(e,t=``){let n=new Map,r=(e,r,i)=>{if(typeof e!=`string`||!e)return;let a=t&&e.startsWith(`${t}/`)?e.slice(t.length+1):e,o=n.get(a)??{path:a,added:0,removed:0};o.added+=r,o.removed+=i,n.set(a,o)};for(let t of e){if(t.status===`error`)continue;let e=wS(t.detail);if(e.length){for(let t of e)r(t.path,t.added,t.removed);continue}let n=CS(t.input);if(!n)continue;let i=t.name.toLowerCase(),a=n.file_path??n.filePath??n.path;if(i===`write`)r(a,xS(n.content),0);else if(i===`edit`){let{added:e,removed:t}=SS(n.old_string??n.oldString,n.new_string??n.newString);r(a,e,t)}else if(i===`multiedit`&&Array.isArray(n.edits))for(let e of n.edits){let{added:t,removed:n}=SS(e.old_string??e.oldString,e.new_string??e.newString);r(a,t,n)}}return[...n.values()]}function ES(e){let t=(e.variants?.length??0)+1;return{count:t,position:Math.min(e.slot??t-1,t-1)}}function DS(e,t){let n=e[t],{position:r}=ES(n),i=n.variants??[],a=e.splice(t);return a[0].variants=void 0,a[0].slot=void 0,[...i.slice(0,r),a,...i.slice(r)]}function OS(e,t){let n=t.slice(-20);e.variants=n,e.slot=n.length}function kS(e,t,n){let r=e[t];if(!r||r.role!==`user`)return!1;let{count:i,position:a}=ES(r);if(n===a||n<0||n>=i)return!1;let o=r.variants??[],s=e.splice(t);s[0].variants=void 0,s[0].slot=void 0;let c=[...o.slice(0,a),s,...o.slice(a)],l=c[n];return l[0].variants=c.filter((e,t)=>t!==n),l[0].slot=n,e.push(...l),!0}function AS(e){return JSON.parse(JSON.stringify(e))}function jS(e,t,n){let r=e.findIndex(e=>e.id===t);if(r<0)return;let i=e[r],a=r;if(n===`before`){if(i.role!==`user`)return;a=r-1}else if(i.role===`user`){if(e[r+1]?.role!==`assistant`)return;a=r+1}let o=AS(e.slice(0,a+1));for(let e of o){e.run=void 0,e.variants=void 0,e.slot=void 0;for(let t of e.tasks??[])t.status===`running`&&(t.status=`stopped`,t.summary??=`Ветка отделена: задача осталась в исходном чате`)}return{turns:o,draft:n===`before`?{text:i.text,parts:AS(i.content??[])}:void 0}}function MS(e,t){let{backend:n,projectId:r,ready:i,persist:a,send:o,stop:s}=t;E(()=>e.queue,a,{deep:!0,flush:`sync`});function c(){let t=e.turns.findLast(e=>e.role===`assistant`);!t||e.capabilities.branchSession&&t.tail||(t.detached=!0)}let l;async function u(t){if(await l,e.busy||!e.queue.length)return;if(t||e.error&&!e.interrupting){e.interrupting=!1;return}e.interrupting=!1;let n=e.queue.shift(),r={...n.auto?{auto:n.auto}:{},...n.autoTitle?{autoTitle:n.autoTitle}:{},...n.form?{form:n.form}:{}};Object.keys(r).length?o(n.text,n.parts,r):o(n.text,n.parts)}async function d(t){let n=e.queue.findIndex(e=>e.id===t&&!e.delivering);if(n<0)return;let[r]=e.queue.splice(n,1);if(e.queue.unshift(r),!e.busy)return u(!1);e.interrupting=!0,s()}async function f(t){if(l)return e.queue.find(e=>e.id===t)?.delivering?l:!1;let n=e.queue.find(e=>e.id===t);if(!n||!e.busy||!e.capabilities.inject||!e.activeMessage||n.parts.some(e=>e.type===`image`))return!1;let r=e.activeMessage;n.delivering=!0,l=(async()=>{try{let i=await Rb(r,n.text,n.id);return i&&(e.queue=e.queue.filter(e=>e.id!==t),a()),i}catch{return!1}finally{n.delivering=!1}})();try{return await l}finally{l=void 0}}async function p(){if(!l){for(;e.busy&&e.queue.length;)if(!await f(e.queue[0].id))return}}function m(t){e.queue=e.queue.filter(e=>e.id!==t||e.delivering)}function h(t){let n=e.turns.findIndex(e=>e.id===t&&e.role===`user`);if(n<0||e.busy)return;let r=e.turns[n],{text:i,content:o}=r;return e.stash={index:n,versions:DS(e.turns,n)},e.error=``,c(),a(),{...r,text:i,content:o,tools:[]}}function g(t){let n=e.turns.find(e=>e.id===t&&e.role===`user`);n&&!e.busy&&(e.editing=t,e.draft=n.text,e.draftParts=n.content??[])}function _(){e.editing&&(e.editing=``,e.draft=``,e.draftParts=[])}function v(){let t=e.editing;e.editing=``;let n=e.turns.findIndex(e=>e.id===t&&e.role===`user`);n<0||(e.stash={index:n,versions:DS(e.turns,n)},e.error=``,c())}async function y(t){let n=e.turns.findIndex(e=>e.id===t),r=e.turns.slice(0,n+1).findLast(e=>e.role===`user`);if(!r||e.busy)return;let i=h(r.id);i&&await o(i.text,i.content??[],i.form?{form:i.form}:void 0)}function b(t,n){let r=e.turns.findIndex(e=>e.id===t);e.busy||r<0||!kS(e.turns,r,n)||(e.stash=void 0,e.editing=``,c(),a())}function x(t){let n=e.turns.findIndex(e=>e.id===t&&e.role===`user`),r=e.turns[n+1];return r?.role===`assistant`?r.session?.id:void 0}function S(t){return!!e.capabilities.rewindFiles&&!!x(t)}async function C(t,a){if(await i,!S(t))throw Error(`Файлы к этому шагу вернуть нельзя: копии нет`);if(e.busy)throw Error(`Дождитесь окончания ответа`);return hie({backend:n,projectId:r,sessionId:x(t)??``,messageId:t,dryRun:a,worktree:w()})}function w(){return e.turns.findLast(e=>e.role===`assistant`&&e.worktree)?.worktree?.id}function T(e,t){for(let n of e){n.worktree?.id===t&&(n.worktree=void 0);for(let e of n.variants??[])T(e,t)}}function D(t){T(e.turns,t);let n=e.turns.findLast(e=>e.role===`assistant`);n&&(n.detached=!0),a()}async function O(){let e=w();return e?gie(r,e):void 0}async function k(){let t=w();if(!t)throw Error(`Чат работает не в изолированной копии`);if(e.busy)throw Error(`Дождитесь окончания ответа`);let n=await _ie(r,t);return D(t),n.message??``}async function A(){let t=w();if(!t)throw Error(`Чат работает не в изолированной копии`);if(e.busy)throw Error(`Дождитесь окончания ответа`);await vie(r,t),D(t)}return{drainQueue:u,deliverQueue:p,sendQueuedNow:d,injectQueued:f,removeQueued:m,edit:g,cancelEdit:_,applyEdit:v,retry:y,showVersion:b,canRewindFiles:S,rewindFiles:C,isolate:B({get:()=>e.isolate,set:t=>{e.isolate=t}}),worktreeId:w,worktreeInfo:O,mergeCopy:k,discardCopy:A}}function NS(e,t,n){return`${e}:${t}:${n}`}var PS=/^\/(?:api|assets|file-icons)(?:\/|$)/i;function FS(e,t){if(e)return at(e,t,!0)||void 0}function IS(e){let t=e.split(/[?#]/)[0]??``;if(t)try{return decodeURIComponent(t)}catch{return t}}function LS(e,t){let n=e.trim();if(!n)return;if(/^https?:\/\//i.test(n)||/^data:image\//i.test(n)||/^blob:/i.test(n))return n;if(n.startsWith(`//`))return`https:${n}`;if(/^file:\/\//i.test(n)){let e=zb(n);return e?FS(t,e):void 0}if(/^[a-z]:[\\/]/i.test(n)){let e=IS(n);return e?FS(t,e):void 0}if(n.startsWith(`/`)){if(PS.test(n))return We(n);let e=IS(n);return e?FS(t,e):void 0}if(/^[a-z][a-z\d+.-]*:/i.test(n)||!t||n.includes(`\\`)||n.split(`/`).includes(`..`))return;let r=pn(n,``);if(r)return at(t,r)||void 0}var RS=Symbol(`chat-project`),zS=Symbol(`chat-link-actions`);function BS(e,t){n(RS,e),t&&n(zS,HS(e,t))}function VS(e,t){if(!t)return;let n=/^[a-z]:[\\/]/i.test(t)&&/^[a-z]:[\\/]/i.test(e),r=e=>{let t=e.replace(/\\/g,`/`);return n?t.toLowerCase():t};if(r(e).startsWith(`${r(t)}/`))return e.slice(t.length+1)}function HS(e,t){let n=`editor:${e}`,r;function i(){return r??=tt(e,`root`).then(e=>e.root).catch(e=>{throw r=void 0,e}),r}function a(e,t){return e instanceof Error&&e.message?e.message:t}async function o(e,r){try{let r=e.path,a=e.external;if(a){let e=(await i().catch(()=>``)).replace(/[\\/]+$/,``),t=VS(r,e);t!==void 0&&(r=t,a=!1)}await t.executeCommand(`ide.editor.path.open`,{path:r,...a?{external:!0}:{},...e.line?{line:e.line}:{},...e.endLine?{endLine:e.endLine}:{},...e.column?{column:e.column}:{}},{scope:n})}catch(e){cn(r,a(e,`Не удалось открыть файл`),`error`)}}async function s(e,t){try{let n=e.external?e.path:Vb(await i(),e.path);await yn(t,n,`Абсолютный путь скопирован`,`Не удалось скопировать путь`)}catch(e){cn(t,a(e,`Не удалось скопировать путь`),`error`)}}async function c(e,t){await yn(t,e.path,`Путь скопирован`,`Не удалось скопировать путь`)}async function l(e,t){await yn(t,e,`Ссылка скопирована`,`Не удалось скопировать ссылку`)}return{openFile:o,copyAbsolute:s,copyRelative:c,copyAddress:l}}var US=oe(new Map),WS=new Map;function GS(e){return US.set(e.key,e),WS.has(e.projectId)||WS.set(e.projectId,e.key),()=>{US.get(e.key)===e&&US.delete(e.key),WS.get(e.projectId)===e.key&&WS.delete(e.projectId)}}function KS(e){US.get(e.key)===e&&WS.set(e.projectId,e.key)}function qS(e){let t=[...US.values()].filter(t=>t.projectId===e),n=WS.get(e),r=e=>Number(e.visible())*2+Number(e.key===n);return t.sort((e,t)=>r(t)-r(e))}function JS(e,t,n=()=>!0){let r=qS(e).filter(n);if(typeof t==`string`&&t){let e=r.find(e=>e.key===t);if(!e)throw Error(`Чат «${t}» не открыт; открытые даёт ide.agent.chats.list`);return e}let i=r[0];if(!i)throw Error(`Нет открытого чата агента`);return i}function YS(){return[...US.values()]}async function XS(e,t,n=3e3){let r=()=>qS(e).find(e=>!t||e.key===t),i=Date.now();for(;;){let e=r();if(e)return await p(),e;if(Date.now()-i>n)throw Error(`Чат не открылся`);await new Promise(e=>setTimeout(e,20))}}var ZS=()=>de({turns:[],loading:!1,draft:``,draftParts:[],busy:!1,error:``,phase:``,lastEventAt:0,permissions:[],questions:[],secrets:[],permissionMode:`default`,controls:[],capabilities:{},commands:[],selection:{},roleSnapshot:void 0,controlsError:``,sessions:[],sessionsLoading:!1,sessionsError:``,recent:[],recentLoading:!1,recentError:``,abort:void 0,isolate:!1,featureOverrides:void 0,judgeOverride:void 0,activeMessage:``,queue:[],interrupting:!1,editing:``,stash:void 0});function QS(e){return e.map(({delivering:e,...t})=>t)}function $S(e){return Array.isArray(e)?e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{id:t,text:n,parts:r}=e;if(typeof t!=`string`||typeof n!=`string`||!Array.isArray(r))return[];let{delivering:i,...a}=e;return[a]}):[]}function eC(e){if(e==null)return``;if(typeof e==`string`)return e.slice(0,8e3);try{let t=JSON.stringify(e,null,2);if(t.length<=8e3)return t;if(typeof e==`object`&&!Array.isArray(e)){let t=Object.fromEntries(Object.entries(e).map(([e,t])=>[e,typeof t==`string`&&t.length>3500?`${t.slice(0,3500)}…`:t])),n=JSON.stringify(t,null,2);if(n.length<=8e3)return n}return t.slice(0,8e3)}catch{return``}}var tC=1500,nC={},rC=nC.chats??={releases:new Map,viewers:new Map,sessions:new Map,loads:new Map,saves:new Map,queued:new Set};rC.queued??=new Set;for(let e of rC.sessions.values())e.capabilities??={};var{releases:iC,viewers:aC,sessions:oC,loads:sC,saves:cC,queued:lC}=rC;function uC(e,t){return{attach(){aC.set(e,(aC.get(e)??0)+1)},release(){aC.set(e,Math.max(0,(aC.get(e)??1)-1)),!aC.get(e)&&(clearTimeout(iC.get(e)),iC.set(e,setTimeout(()=>{iC.delete(e),aC.get(e)||t()},tC)))}}}function dC(e){return e.role===`assistant`?(e.parts??[]).filter(e=>e.type===`thought`).map(e=>e.text.trim()).filter(Boolean).join(`
|
|
41
|
-
|
|
42
|
-
`):``}function fC(e,t=!1,n=!1){return e.flatMap(e=>{let t=()=>({role:e.role,text:e.text,thoughts:n?dC(e):``,tools:e.tools});if(e.role!==`assistant`||!e.parts?.some(e=>e.type===`note`))return[t()];let r=[],i=``,a=``,o=[],s=()=>{(i||a||o.length)&&r.push({role:`assistant`,text:i,thoughts:a,tools:o}),i=``,a=``,o=[]};for(let t of e.parts)if(t.type===`text`)i+=t.text;else if(t.type===`thought`&&n)a+=`${a?`
|
|
43
|
-
|
|
44
|
-
`:``}${t.text}`;else if(t.type===`tool`){let n=e.tools.find(e=>e.id===t.id);n&&o.push(n)}else t.type===`note`&&(s(),r.push({role:`user`,text:t.text,thoughts:``,tools:[]}));return s(),r}).flatMap(e=>{let n=(t?e.tools:[]).filter(e=>!e.parent&&e.status!==`running`).map(e=>({id:e.id,name:e.name,...e.input?{input:e.input}:{},output:e.detail,...e.status===`error`?{failed:!0}:{}})),r=e.thoughts.trim();return!e.text.trim()&&!r&&!n.length?[]:[{role:e.role,content:e.text,...r?{thoughts:r}:{},...n.length?{tools:n}:{}}]})}var pC=typeof BroadcastChannel>`u`?null:new BroadcastChannel(`projector:agent-chat`),mC=new Map;pC?.addEventListener(`message`,({data:e})=>{if(typeof e?.key==`string`)for(let t of mC.get(e.key)??[])t()});function hC(e){pC?.postMessage({key:e})}function gC(e,t,n){let r=!1,i=()=>{r||t()||(r=!0,n().finally(()=>{r=!1}))},a=mC.get(e)??new Set;mC.set(e,a),a.add(i);let o=()=>{document.visibilityState===`visible`&&i()};document.addEventListener(`visibilitychange`,o),le()&&k(()=>{a.delete(i),document.removeEventListener(`visibilitychange`,o)})}function _C(e){return{draftParts:B({get:()=>e.draftParts,set:t=>{e.draftParts=t}}),draft:B({get:()=>e.draft,set:t=>{e.draft=t}}),busy:B(()=>e.busy),loading:B(()=>e.loading),error:B({get:()=>e.error,set:t=>{e.error=t}}),phase:B(()=>e.phase),permissions:B(()=>e.permissions),questions:B(()=>e.questions),secrets:B(()=>e.secrets)}}function vC(e,t){return{featureOverrides:B(()=>e.featureOverrides),setFeatureOverrides(n){e.featureOverrides=n,t()}}}function yC(e,t){return{judgeOverride:B(()=>e.judgeOverride),setJudgeOverride(n){e.judgeOverride=n,t()}}}var bC=new Map;function xC(e,t){bC.set(e,t)}function SC(e){let t=bC.get(e);return bC.delete(e),t}function CC(e){let t=e.trim().replace(/\r\n/g,`
|
|
45
|
-
`),n=/```json\n([\s\S]*?)\n```$/.exec(t);if(!n)return;let r;try{r=JSON.parse(n[1])}catch{return}if(!r||typeof r!=`object`||Array.isArray(r))return;let i=t.slice(0,n.index).trim()||void 0;return{values:r,...i?{summary:i}:{}}}function wC(e,t){let n=new Set([...e.matchAll(/\bname="([^"]+)"/g)].map(e=>e[1])),r=Object.keys(t);return n.size>0&&r.every(e=>n.has(e))}async function TC(e,t){await _y(t);let n=0;for(let r=1;r<e.length;r++){let i=e[r],a=e[r-1];if(i.role!==`user`||i.form||a.role!==`assistant`)continue;let o=ly(a.text,t);if(!o)continue;let s=CC(i.text);s&&wC(o,s.values)&&(i.form={source:o,values:s.values,...s.summary?{summary:s.summary}:{}},n++)}return n}async function EC(e,t,n){await TC(e,t)>0&&n()}var DC=()=>st().filter(e=>!e.builtin),OC=e=>`ide.workbench.${e}.open`,kC=e=>!!Ct(e),AC=()=>st().find(e=>e.builtin),jC=e=>xt(e??``)?.builtin===!0;function MC(e){return xt(e??`projector`)?.title??`Агент`}var NC=de({modes:{},disabled:[],loaded:!1,error:``}),PC;async function FC(e){let t=await fetch(`/api/agent/modes`,{...e,headers:{"Content-Type":`application/json`}}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`Не удалось получить настройки агентов`);NC.modes=n.modes??{},NC.disabled=Array.isArray(n.disabled)?n.disabled:[],NC.loaded=!0}function IC(){PC??=FC().catch(e=>{NC.error=e.message,PC=void 0});let e=e=>kC(e)&&NC.modes[e]===`gui`?`gui`:`tui`;async function t(e,t){let n=NC.modes[e];NC.modes={...NC.modes,[e]:t};try{await FC({method:`PUT`,body:JSON.stringify({program:e,mode:t})}),NC.error=``}catch(t){NC.modes={...NC.modes,[e]:n??`tui`},NC.error=t instanceof Error?t.message:`Не удалось сохранить режим`}}let n=e=>{let t=Ct(e)?.backend;return!t||!NC.disabled.includes(t)};async function r(e,t){let n=Ct(e)?.backend??e,r=NC.disabled;NC.disabled=t?r.filter(e=>e!==n):[...r.filter(e=>e!==n),n];try{let e=await fetch(`/api/agent/integrations`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({backend:n,enabled:t})}),r=await e.json().catch(()=>({}));if(!e.ok)throw Error(r.error||`Не удалось сохранить интеграцию`);NC.disabled=Array.isArray(r.disabled)?r.disabled:NC.disabled,NC.error=``}catch(e){throw NC.disabled=r,NC.error=e instanceof Error?e.message:`Не удалось сохранить интеграцию`,e}}return{modeOf:e,setMode:t,isEnabled:n,setEnabled:r,loaded:B(()=>NC.loaded),error:B(()=>NC.error)}}var LC=M();function RC(e,t){LC.value={projectId:e,command:`ide.workbench.agent.job.open`,args:{job:t}}}function zC(e,t){let n=ox(e,t);return n&&(LC.value={projectId:e,command:n.command,args:n.args}),!!n}var BC=20,VC=150;function HC(e){let{api:t}=yp(),n=0;async function r(){let i=LC.value;if(i&&i.projectId===e)try{await t.executeCommand(i.command,i.args,{scope:`editor:${e}`}),LC.value===i&&(LC.value=void 0),n=0}catch{++n<=BC&&setTimeout(()=>void r(),VC)}}E(LC,()=>void r(),{immediate:!0})}var UC,WC=()=>UC??=pie().catch(()=>({}));function GC(e,t){let{backend:n,projectId:r,ready:i,persist:a,key:o}=t,s=!jC(n),c=!1,l=!1,u=B(()=>e.controls),d=B(()=>e.selection),f=B(()=>e.sessions);function p(t){return t.map(t=>{let n=e.selection[t.id];return n&&t.options.some(e=>e.value===n)?{...t,current:n}:t})}async function m(){if(!s||r){await i,e.permissionMode!=="default"&&!e.selection[`permission-mode`]&&(e.selection[`permission-mode`]=e.permissionMode),e.selection={...(await WC())[n],...e.selection};try{let t=await die(n,r);e.capabilities=t.capabilities,e.roleSnapshot&&(e.selection=Object.fromEntries(Object.entries(e.selection).filter(([e,n])=>{let r=t.controls.find(t=>t.id===e);return!r||!r.options.length||r.options.some(e=>e.value===n)}))),e.controls=p(t.controls),e.controlsError=``}catch(t){e.controlsError=t instanceof Error?t.message:`Не удалось получить настройки`}}}async function h(){if(!s||r)try{e.commands=await fie(n,r)}catch{}}async function g(t,r){let i=e.controls.find(e=>e.id===t);if(!i)throw Error(`Нет настройки «${t}»`);if(!i.options.some(e=>e.value===r))throw Error(`У настройки «${i.name}» нет значения «${r}»`);if(e.selection={...e.selection,[t]:r},e.controls=p(e.controls),e.roleSnapshot)e.roleSnapshot={...e.roleSnapshot,selection:{...e.roleSnapshot.selection,[t]:r}},e.turns.length&&a();else try{await mie(n,t,r);let e=await WC();e[n]={...e[n],[t]:r}}catch(t){e.error=t instanceof Error?t.message:`Не удалось сохранить выбор`}}async function _(t=!1){if(s&&!r)return[];let i=!t&&!c;i&&(e.sessionsLoading=!0);try{e.sessions=s?await hb(n,r):await Zre(o),e.sessionsError=``}catch(t){e.sessionsError=t instanceof Error?t.message:`Не удалось получить сессии`}finally{c=!0,i&&(e.sessionsLoading=!1)}return e.sessions}async function v(){if(!r)return e.recent=[],[];let t=!l;t&&(e.recentLoading=!0);try{e.recent=await ob(r,n),e.recentError=``}catch(t){e.recentError=t instanceof Error?t.message:`Не удалось получить историю`}finally{l=!0,t&&(e.recentLoading=!1)}return e.recent}async function y(t,i){try{s?await Ib(n,r,t,i):await eie(t,i),await _(!0)}catch(t){e.sessionsError=t instanceof Error?t.message:`Не удалось изменить сессию`}}async function b(){a(),await cC.get(o)?.catch(()=>{})}function x(){e.queue=[],e.stash=void 0,e.editing=``,e.draft=``,e.draftParts=[]}async function S(){if(await i,!e.busy){try{s||(await b(),await Qre(o))}catch(t){e.error=t instanceof Error?t.message:`Не удалось начать новый чат`;return}e.turns=[],x(),e.error=``,e.phase=``,a()}}async function C(t){if(typeof t!=`string`){let n=e.recent;e.recent=n.filter(e=>e.chat!==t.chat);try{await nie(r,t.chat)}catch(t){throw e.recent=n,e.recentError=t instanceof Error?t.message:`Не удалось удалить чат`,t}return}let i=t,a=e.sessions,c=e.recent;a.some(e=>e.id===i)&&(e.sessions=a.filter(e=>e.id!==i)),s&&(e.recent=c.filter(e=>e.session!==i));try{s?await Lb(n,r,i,o):await tie(i),await Promise.all([_(!0),s?v():void 0])}catch(t){throw e.sessions=a,e.recent=c,e.sessionsError=t instanceof Error?t.message:`Не удалось удалить чат`,t}}async function w(e){let t=(await yb().catch(()=>[])).find(t=>t.session===e&&t.projectId===r&&t.chat);return t?t.chat===o||zC(r,t.chat):!1}async function T(t){if(await i,e.busy)throw Error(`Дождитесь окончания ответа`);if(!(s&&await w(t))){e.error=``,e.loading=!0;try{if(s){let i=await gb(n,r,t);await TC(i,r),e.turns=i,a()}else await b(),e.turns=(await $re(o,t)).turns,x()}catch(t){throw e.error=t instanceof Error?t.message:`Не удалось открыть сессию`,t}finally{e.loading=!1}}}return{controls:u,selection:d,sessions:f,loadControls:m,loadCommands:h,setControl:g,loadSessions:_,loadRecent:v,recent:B(()=>e.recent),recentLoading:B(()=>e.recentLoading),recentError:B(()=>e.recentError),changeSession:y,resumeSession:T,removeSession:C,clear:S}}function KC(e,t,n=!1){!t||e.roleSnapshot&&!n||(e.roleSnapshot=t,e.selection={...e.selection,...t.selection},t.permissionMode&&(e.permissionMode=t.permissionMode,e.selection[`permission-mode`]=t.permissionMode))}var qC=`Ответ прерван: страница или сервер были перезапущены. Отправьте сообщение ещё раз — разговор продолжится.`;function JC(e,t,n=!1){return n||(t.loading=!0),fetch(e).then(async e=>{if(!e.ok)throw Error(`Не удалось загрузить историю чата`);let r=await e.json(),i=Array.isArray(r.features)?r.features:void 0,a=r.judge&&typeof r.judge==`object`?r.judge:void 0,o=rx(r.role),s=$S(r.queue),c=!!o&&(!t.roleSnapshot||t.roleSnapshot.roleId!==o.roleId);if(n&&JSON.stringify(r.turns)===JSON.stringify(t.turns)&&JSON.stringify(i??null)===JSON.stringify(t.featureOverrides??null)&&JSON.stringify(a??null)===JSON.stringify(t.judgeOverride??null)&&JSON.stringify(s)===JSON.stringify(QS(t.queue))&&!c)return;t.turns=r.turns,t.queue=s,t.featureOverrides=i,t.judgeOverride=a,o&&(!t.roleSnapshot||t.roleSnapshot.roleId!==o.roleId)&&KC(t,o,!0);let l=t.turns.at(-1);if(l?.role!==`assistant`||l.run||l.failure||l.text.trim()||l.tools.length||(l.text=qC),!l?.run)for(let e of t.turns)for(let t of e.tasks??[])t.status===`running`&&(t.status=`stopped`,t.summary??=`Процесс агента завершился до отчёта о задаче`);for(let e of t.turns)for(let t of e.tools)t.status===`running`&&(t.status=`error`,t.detail=`Выполнение прервано`)}).catch(e=>{n||(t.error=e.message)}).finally(()=>{n||(t.loading=!1)})}function YC(e){return e?.role===`assistant`&&!e.run&&!e.tools.length&&(!e.text.trim()||e.text===`Ответ прерван: страница или сервер были перезапущены. Отправьте сообщение ещё раз — разговор продолжится.`)}var XC=`<system-reminder>`;function ZC(e,t){let n=e.trim();return n.startsWith(t)||n.endsWith(t)||t.length>=40&&n.includes(t)}function QC(e,t){let n=[];for(let r of e.slice(t+1))if(r.role===`user`){if(!r.text.trim().startsWith(XC))break}else n.push(r);return n}function $C(e,t){let n=``,r=[],i=[],a=e=>{let t=i.at(-1);e.type===`text`&&t?.type===`text`?t.text+=`${t.text.endsWith(`
|
|
46
|
-
|
|
47
|
-
`)?``:`
|
|
48
|
-
|
|
49
|
-
`}${e.text}`:i.push({...e})};for(let e of t)if(e.text.trim()&&(n.trim()&&!n.endsWith(`
|
|
50
|
-
|
|
51
|
-
`)&&(n+=`
|
|
52
|
-
|
|
53
|
-
`),n+=e.text),r.push(...e.tools),e.parts?.length)for(let t of e.parts)a(t);else{e.text&&a({type:`text`,text:e.text});for(let t of e.tools)a({type:`tool`,id:t.id})}return!n.trim()&&!r.length?!1:(e.text=n,e.tools=r,e.parts=i,e.failure=void 0,!0)}function ew(e,t){let n=e.at(-1);if(!n||n.role!==`assistant`||!YC(n))return!1;let r=e.findLast(e=>e.role===`user`)?.text.trim();if(!r)return!1;let i=t.findLastIndex(e=>e.role===`user`&&ZC(e.text,r));return i<0?!1:$C(n,QC(t,i))}async function tw(e,t,n,r){if(!t?.session?.id||!YC(t))return!1;try{if(!ew(e,await n(t.session.id)))return!1}catch{return!1}return r(),!0}function nw(e,t,n,r){if(lC.has(e))return;lC.add(e);let i=(cC.get(e)??Promise.resolve()).catch(()=>{}).then(async()=>{lC.delete(e);let i=await fetch(t,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({turns:n.turns,queue:QS(n.queue),features:n.featureOverrides??null,judge:n.judgeOverride??null,role:n.roleSnapshot??null,...r?{projectId:r.project,backend:r.backend}:{}})});if(!i.ok){let e=await i.json().then(e=>typeof e?.error==`string`?`: ${e.error}`:``,()=>``);throw Error(`Не удалось сохранить историю чата${e}`)}hC(e)});cC.set(e,i),i.catch(e=>{n.error=e.message})}function rw(e){let t=e.findLast(e=>e.role===`assistant`);return t&&!t.detached?t.session?.id:void 0}function iw(e){return e.findLast(e=>e.role===`assistant`)?.tail}function aw(e){return[...e.tools.map(e=>({type:`tool`,id:e.id})),...e.text?[{type:`text`,text:e.text}]:[]]}var ow=new WeakMap;function sw(e){let t=ow.get(e);if(t)return t;let n=new Map;return ow.set(e,n),n}var cw=new WeakMap;function lw(e){let t=cw.get(e);if(t)return t;let n=new Set;return cw.set(e,n),n}function uw(e){let t=sw(e);cw.delete(e);for(let n of e.tools)(n.startedAt!==void 0||n.endedAt!==void 0)&&t.set(n.id,{startedAt:n.startedAt,endedAt:n.endedAt});e.text=``,e.tools.splice(0),e.parts=[]}function dw(e,t){let n=e.parts??=aw({...e,text:e.text.slice(0,-t.length)}),r=n.at(-1);r?.type===`text`?r.text+=t:n.push({type:`text`,text:t})}function fw(e,t){let n=e.parts??=aw(e),r=n.at(-1);r?.type===`thought`?r.text+=t:n.push({type:`thought`,text:t})}function pw(e,t,n){let r=n instanceof Error?n.message:`Агент не ответил`;e.error=r,t.failure=r}var mw=64e3;function hw(e,t,n,r,i=Date.now()){switch(e.lastEventAt=i,n.event){case`input`:{let r=lw(t),i=n.data.inputId;return i&&(e.queue=e.queue.filter(e=>e.id!==i)),i&&r.has(i)?!1:(i&&r.add(i),(t.parts??=aw(t)).push({type:`note`,text:n.data.text}),!0)}case`status`:return e.phase=n.data.phase===`fallback`?`запасная модель · ${n.data.model}`:n.data.model?`${n.data.provider??`qwen`} · ${n.data.model}`:n.data.phase===`compacting`?`сжимаю историю`:n.data.phase===`retrying`?`провайдер не ответил, повтор ${n.data.attempt}`:n.data.phase===`background`?`ждёт фоновых агентов`:`думает`,!1;case`run`:return t.run=n.data.id,!0;case`session`:return t.session=n.data,!0;case`worktree`:return t.worktree=n.data,!0;case`checkpoint`:return t.tail=n.data.tail,!0;case`commands`:return e.commands=n.data.commands,!1;case`controls`:return e.controls=n.data.controls,e.selection={...e.selection,...Object.fromEntries(n.data.controls.map(e=>[e.id,e.current]))},!1;case`context`:return t.context=n.data,!1;case`usage`:return t.usage=n.data,!1;case`permission-request`:return e.permissions.push({id:n.data.id,tool:n.data.tool,title:n.data.title||n.data.tool,detail:n.data.detail?.trim()||lS(n.data.tool,eC(n.data.input)),persistent:n.data.persistent===!0,...n.data.judge?{judge:n.data.judge}:{}}),!1;case`judge`:{let e=t.parts??=aw(t);return e.some(e=>e.type===`judge`&&e.tool===n.data.tool&&e.at===n.data.at)||e.push({type:`judge`,...n.data}),!1}case`question-request`:return e.questions.push(n.data),!1;case`secret-request`:return e.secrets.push(n.data),!1;case`text`:return t.text+=n.data.text,dw(t,n.data.text),!1;case`thought`:return fw(t,n.data.text),!1;case`tool`:let a=t.tools.find(e=>e.id===n.data.id);if(a)return a.status===`running`&&(a.detail=eC(n.data.input)),a.input=eC(n.data.input),n.data.kind&&(a.kind=n.data.kind),!1;t.text.trim()&&!t.text.endsWith(`
|
|
54
|
-
|
|
55
|
-
`)&&(t.text+=`
|
|
56
|
-
|
|
57
|
-
`);let o=t.parts??=aw(t),s=sw(t),c=s.get(n.data.id),l={id:n.data.id,name:n.data.name,status:`running`,input:eC(n.data.input),detail:eC(n.data.input),...n.data.kind?{kind:n.data.kind}:{},startedAt:c?.startedAt??i,...c?.endedAt===void 0?{}:{endedAt:c.endedAt},...n.data.parent?{parent:n.data.parent}:{}};return t.tools.push(l),s.set(l.id,{startedAt:l.startedAt,endedAt:l.endedAt}),o.push({type:`tool`,id:n.data.id}),!1;case`tool-output`:{let e=t.tools.find(e=>e.id===n.data.id);if(e&&e.status===`running`){let t=`${e.output??``}${n.data.chunk}`;e.output=t.length>mw?t.slice(-64e3):t}return!1}case`tool-result`:{let e=t.tools.find(e=>e.id===n.data.id);if(e){let r=sw(t),a=r.get(e.id);e.status=n.data.error?`error`:`done`,e.detail=n.data.error||eC(n.data.output),e.endedAt=a?.endedAt??i,e.output=void 0,r.set(e.id,{startedAt:e.startedAt,endedAt:e.endedAt})}return!1}case`task`:{let r=t.tasks??=[],a=r.find(e=>e.id===n.data.id),o=a?void 0:(e.turns??[]).flatMap(e=>e.tasks??[]).findLast(e=>e.id===n.data.id),s=a??r[r.push({kind:`other`,title:``,status:`running`,background:!1,...o,...n.data})-1];a&&Object.assign(a,n.data);let c=n.data.summary||n.data.lastTool&&mS(n.data.lastTool);return c&&s.log?.at(-1)!==c&&(s.log=[...s.log??[],c].slice(-100)),s.status===`running`?(s.startedAt??=i,s.endedAt=void 0):s.startedAt!==void 0&&s.endedAt===void 0&&(s.endedAt=i),!1}case`project`:return r(n.data),!1;case`error`:return e.error=n.data.error,t.failure=n.data.error,t.run=void 0,!1;case`done`:t.run=void 0,t.stopped=n.data.stopped;for(let e of t.tasks??[])e.status===`running`&&(!e.background||e.untracked)&&(e.status=`stopped`,e.endedAt=i,e.untracked&&(e.summary??=`Состояние после ответа неизвестно`));return!1;default:return!1}}function gw(e,t,n){return{id:Mt(),role:`user`,text:e,at:Date.now(),tools:[],...t?{content:t}:{},...n?.form?{form:n.form}:{},...n?.auto?{auto:n.auto}:{},...n?.autoTitle?{autoTitle:n.autoTitle}:{}}}var _w=1e3,vw=60;function yw(e=``,t,n={}){let r=n.backend??`projector`,i=jC(r)&&!n.chatId,a=i?e:NS(r,e,n.chatId??`main`);if(clearTimeout(iC.get(a)),iC.delete(a),!oC.has(a)){oC.set(a,ZS());let e=SC(a),t=oC.get(a);e&&(t.draft=e.text,t.draftParts=e.parts)}let o=oC.get(a);KC(o,n.role);let s=`/api/agent/history/${encodeURIComponent(a||`catalog`)}`;sC.has(a)||sC.set(a,JC(s,o));let c=sC.get(a),l=()=>nw(a,s,o,e?{project:e,backend:r}:void 0);i||c.then(()=>EC(o.turns,e,l));let u=t=>tw(o.turns,t,t=>gb(r,e,t),l),d=Mu(),{draftParts:f,draft:p,busy:m,loading:h,error:g,phase:_,permissions:v,questions:y,secrets:b}=_C(o),{controls:x,selection:S,sessions:C,loadControls:w,loadCommands:T,setControl:E,loadSessions:D,loadRecent:O,recent:k,recentLoading:A,recentError:j,changeSession:M,resumeSession:N,removeSession:ee,clear:te}=GC(o,{backend:r,projectId:e,ready:c,persist:l,key:a});async function P(e,t,n=!1){o.permissions=o.permissions.filter(t=>t.id!==e);try{await cie(e,t,n)}catch(e){o.error=e instanceof Error?e.message:`Не удалось передать решение`}}async function ne(e,t){o.questions=o.questions.filter(t=>t.id!==e);try{await lie(e,t)}catch(e){o.error=e instanceof Error?e.message:`Не удалось передать ответ`}}async function F(e,t){o.secrets=o.secrets.filter(t=>t.id!==e);try{await uie(e,t)}catch(e){o.error=e instanceof Error?e.message:`Не удалось передать секрет`}}let I=MS(o,{backend:r,projectId:e,ready:c,persist:l,send:R,stop:ae}),{drainQueue:re,worktreeId:ie}=I;async function L(e,t,n){o.busy=!0,o.phase=`думает`,o.abort=new AbortController;let{signal:r}=o.abort,i=t=>{t.event===`question-request`&&zx(t.data.questions[0]?.question??``),t.event===`permission-request`&&Bx(t.data.title||t.data.tool),t.event===`secret-request`&&zx(t.data.label),hw(o,e,t,d.ingest)&&l(),[`status`,`controls`,`tool-result`].includes(t.event)&&I.deliverQueue()};try{let a=n;for(let n=0;;n++){a&&uw(e);try{if(await t(i,r,a),r.aborted||!e.run)break}catch(t){if(t instanceof db||r.aborted||!e.run||n>=vw)throw t}if(await new Promise(e=>setTimeout(e,_w)),a=e.run,r.aborted||!a)break}}catch(t){t instanceof db?(e.run=void 0,!await u(e)&&!e.text.trim()&&(e.text=qC)):r.aborted||pw(o,e,t)}finally{let t=r.aborted;o.abort?.abort();for(let t of e.tools)t.status===`running`&&(t.status=`error`,Object.assign(t,{detail:`Выполнение прервано`,endedAt:Date.now()}),delete t.output);o.busy=!1,o.phase=``,o.permissions=[],o.questions=[],o.secrets=[],l(),t||Rx(e.text,!!o.error),re(t&&!o.interrupting)}}async function R(n,i,s){await c;let u=(n??o.draft).trim();if(!u)return;let d=i??(n===void 0&&ux(o.draftParts)===o.draft?o.draftParts:[]),f=fx(d)?dx(d):void 0;if(n===void 0&&(o.draft=``,o.draftParts=[]),o.busy){o.queue.push({id:Mt(),text:u,parts:f??[],...s?.form?{form:s.form}:{},...s?.auto?{auto:s.auto,autoTitle:s.autoTitle}:{}}),I.deliverQueue();return}n===void 0&&I.applyEdit(),o.error=``,Lx();let p=fC(o.turns,jC(r)),m=rw(o.turns),h=iw(o.turns),g=ie(),_=o.isolate&&!g&&!m&&!jC(r);o.isolate=!1;let v=gw(u,f,s);o.stash?.index===o.turns.length&&OS(v,o.stash.versions),o.stash=void 0,o.activeMessage=v.id;let y=de({id:Mt(),role:`assistant`,text:``,at:Date.now(),tools:[]});o.turns.push(v,y),l(),await L(y,(n,i,s)=>fb(u,p,n,i,{projectId:e||void 0,chat:a,sessionId:m,commands:t,backend:r,permissionMode:o.permissionMode,selection:o.selection,parts:f,messageId:v.id,tail:h,features:o.featureOverrides,judge:o.judgeOverride,role:o.roleSnapshot,worktree:g,isolate:_,attach:s,onRun:e=>{y.run=e,l()}}))}async function z(){await c;let n=o.turns.at(-1);!o.busy&&n?.role===`assistant`&&n.run&&await L(n,(i,a,o)=>fb(``,[],i,a,{projectId:e||void 0,commands:t,backend:r,attach:o,onRun:e=>{n.run=e,l()}}),n.run)}z().then(()=>u(o.turns.at(-1))),gC(a,()=>o.busy||o.loading||lC.has(a),async()=>{await c,await JC(s,o,!0),o.busy||await z(),o.busy||await u(o.turns.at(-1))});function ae(){let e=o.turns.at(-1),t=e?.run;e&&t&&(e.run=void 0,sie(t).catch(()=>{})),o.abort?.abort()}let{attach:oe,release:se}=uC(a,()=>o.abort?.abort());return{key:a,turns:B(()=>o.turns),persist:l,loading:h,draft:p,draftParts:f,busy:m,error:g,phase:_,lastEventAt:B(()=>o.lastEventAt),permissions:v,questions:y,secrets:b,controls:x,selection:S,roleSnapshot:B(()=>o.roleSnapshot),capabilities:B(()=>o.capabilities),controlsError:B(()=>o.controlsError),sessions:C,sessionsLoading:B(()=>o.sessionsLoading),sessionsError:B(()=>o.sessionsError),recent:k,recentLoading:A,recentError:j,loadControls:w,loadCommands:T,commands:B(()=>o.commands),setControl:E,loadSessions:D,loadRecent:O,changeSession:M,resumeSession:N,removeSession:ee,send:R,queue:B(()=>o.queue),sendQueuedNow:I.sendQueuedNow,injectQueued:I.injectQueued,removeQueued:I.removeQueued,edit:I.edit,cancelEdit:I.cancelEdit,editing:B(()=>o.editing),retry:I.retry,showVersion:I.showVersion,canRewindFiles:I.canRewindFiles,rewindFiles:I.rewindFiles,isolate:I.isolate,...vC(o,()=>void c.then(l)),...yC(o,()=>void c.then(l)),worktreeId:ie,worktreeInfo:I.worktreeInfo,mergeCopy:I.mergeCopy,discardCopy:I.discardCopy,clear:te,stop:ae,attach:oe,release:se,decide:P,answer:ne,answerSecret:F}}var bw=W({__name:`AgentIntegrationsSettings`,props:{agentId:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=()=>n.agentId?DC().filter(e=>e.backend===n.agentId):DC(),{isEnabled:i,setEnabled:a,error:o}=IC(),s=M(``),c=()=>DC().map(e=>e.program),l=()=>DC().map(e=>e.title),u=Je(`agentIntegrations:settings`,()=>({surface:`agentIntegrationsSettings`,busy:s.value}));u.scope.registerCommand({id:`ide.agent.integrations.list`,palette:!1,title:`Список интеграций агентов`,description:`Возвращает адаптеры агентов (${l().join(`, `)}) с состоянием «включён/выключен».`,run:()=>DC().map(e=>({program:e.program,backend:e.backend,title:e.title,enabled:i(e.program)}))}),u.scope.registerCommand({id:`ide.agent.integrations.set`,title:`Включить или выключить интеграцию агента`,description:`Включает или выключает адаптер агента: ${c().join(`, `)}. Отключённый агент скрывается из меню сессий и статусной строки, а его запуск отклоняется.`,arguments:{program:`string: ${c().join(`, `)}`,enabled:`boolean: включён ли агент`},enabled:()=>!s.value,run:async e=>{let{program:t,enabled:n}=J(e);if(typeof t!=`string`||!kC(t))throw Error(`program: ${c().join(`, `)}`);if(typeof n!=`boolean`)throw Error(`enabled должен быть boolean`);s.value=t;try{await a(t,n)}finally{s.value=``}return{program:t,enabled:i(t)}}});function d(e,t){let n=t.target.checked;Promise.resolve(u.run(`ide.agent.integrations.set`,{program:e,enabled:n})).catch(()=>{})}let f={props:n,shown:r,isEnabled:i,setEnabled:a,error:o,busy:s,programs:c,titles:l,commands:u,toggle:d,UiMessage:Te,UiControl:Se,UiStack:Ed,UiInline:Be,UiField:Re,UiHint:we};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}});function xw(t,n,r,i,a,o){return K(),F(i.UiStack,{as:`section`,gap:4,onPointerdown:n[0]||=e=>i.commands.scope.activate()},{default:e(()=>[(K(!0),U(P,null,S(i.shown(),t=>(K(),F(i.UiField,{key:t.program,label:t.title},{default:e(()=>[y(i.UiInline,{as:`label`,justify:`normal`},{default:e(()=>[y(i.UiControl,{type:`checkbox`,checked:i.isEnabled(t.program),disabled:i.busy===t.program,"aria-label":`Интеграция ${t.title}`,onChange:e=>i.toggle(t.program,e)},null,8,[`checked`,`disabled`,`aria-label`,`onChange`]),n[1]||=G(` включён `,-1)]),_:2},1024)]),_:2},1032,[`label`]))),128)),y(i.UiHint,null,{default:e(()=>[...n[2]||=[G(` Отключённый агент прячется из меню новых сессий, приветствия чата и индикаторов лимитов, а его запуск отклоняется сервером. Встроенный агент Projector отключить нельзя. `,-1)]]),_:1}),i.error?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0)]),_:1})}var Sw=H(bw,[[`render`,xw],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentIntegrationsSettings.vue`]]),Cw=W({__name:`AgentJudgeFields`,props:t({disabled:{type:Boolean,required:!1}},{modelValue:{type:Object,required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e,{expose:t}){t();let n=u(e,`modelValue`);function r(){n.value={...n.value}}let i={settings:n,touch:r,UiControl:Se,UiField:Re};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),ww={class:`option`},Tw={class:`option`};function Ew(t,n,r,i,a,o){return K(),U(P,null,[I(`label`,ww,[y(i.UiControl,{type:`checkbox`,"aria-label":`Показывать оценку риска`,modelValue:i.settings.show,"onUpdate:modelValue":n[0]||=e=>i.settings.show=e,disabled:r.disabled,onChange:i.touch},null,8,[`modelValue`,`disabled`]),n[4]||=I(`span`,null,`Показывать оценку риска в карточке подтверждения`,-1)]),I(`label`,Tw,[y(i.UiControl,{type:`checkbox`,"aria-label":`Разрешать низкий риск автоматически`,modelValue:i.settings.auto,"onUpdate:modelValue":n[1]||=e=>i.settings.auto=e,disabled:r.disabled,onChange:i.touch},null,8,[`modelValue`,`disabled`]),n[5]||=I(`span`,null,`Разрешать низкий риск автоматически`,-1)]),y(i.UiField,{label:`максимальный автоматический риск`},{default:e(({control:t})=>[y(i.UiControl,R({as:`select`},t,{"aria-label":`Максимальный автоматический риск`,modelValue:i.settings.maxRisk,"onUpdate:modelValue":n[2]||=e=>i.settings.maxRisk=e,modelModifiers:{number:!0},disabled:r.disabled||!i.settings.auto,onChange:i.touch}),{default:e(()=>[...n[6]||=[I(`option`,{value:1},`1/5 — безопасно`,-1),I(`option`,{value:2},`2/5 — низкий`,-1),I(`option`,{value:3},`3/5 — умеренный`,-1)]]),_:1},16,[`modelValue`,`disabled`])]),_:1}),y(i.UiField,{label:`достаточная уверенность`},{default:e(({control:t})=>[y(i.UiControl,R({as:`select`},t,{"aria-label":`Достаточная уверенность Судьи`,modelValue:i.settings.confidence,"onUpdate:modelValue":n[3]||=e=>i.settings.confidence=e,disabled:r.disabled||!i.settings.auto,onChange:i.touch}),{default:e(()=>[...n[7]||=[I(`option`,{value:`high`},`только высокая`,-1),I(`option`,{value:`high-medium`},`высокая и средняя`,-1)]]),_:1},16,[`modelValue`,`disabled`])]),_:1})],64)}var Dw=H(Cw,[[`render`,Ew],[`__scopeId`,`data-v-3a386207`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentJudgeFields.vue`]]),Ow=W({__name:`AgentJudgeIsland`,props:{chat:{type:String,required:!0},override:{type:Object,required:!1},disabled:{type:Boolean,required:!1},showTrigger:{type:Boolean,required:!1},anchor:{type:Function,required:!1}},emits:[`update:override`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=M({...tb}),o=M({...tb}),s=M(``),c=B(()=>r.override!==void 0),l=Ff({anchor:`right`,initialFocus:[`input:not(:disabled)`,`select:not(:disabled)`,`button:not(:disabled)`],items:`input, select, button`,returnFocus:`.trigger, button`}),u=M();function d(e){u.value=e instanceof HTMLElement?e:void 0}let f=Je(`agent-judge-chat:${V()}`,()=>({surface:`agentJudgeChat`,chat:r.chat,overridden:c.value,show:o.value.show,auto:o.value.auto,maxRisk:o.value.maxRisk,confidence:o.value.confidence}));function p(e){o.value={...e}}function m(e){o.value=e,r.disabled||i(`update:override`,{...e})}async function h(){try{a.value=await Yy(),s.value=``,p(nb(a.value,r.override))}catch(e){s.value=e instanceof Error?e.message:`Не удалось прочитать настройки`}}function g(){i(`update:override`,void 0),p(a.value)}function _(e){l.trigger.value=e??r.anchor?.()??u.value,l.open.value||h(),f.scope.activate(),l.toggle(!0)}function v(){_()}t({openAt:_});function y(e){if(r.disabled)throw Error(`Чат ещё загружается: настройки Судьи пока недоступны`);let t=Bre(e);return i(`update:override`,t),p(nb(a.value,t)),{overridden:t!==void 0,...nb(a.value,t)}}f.scope.registerCommand({id:`ide.agent.judge.chat.get`,title:`Прочитать настройки Судьи текущего чата`,description:`Возвращает настройки Projector Judge для этого чата с учётом глобальных: show, auto, maxRisk, confidence и overridden — есть ли у чата собственное переопределение.`,run:async()=>(await h(),{chat:r.chat,overridden:c.value,...o.value})}),f.scope.registerCommand({id:`ide.agent.judge.chat.set`,title:`Настроить Судью для текущего чата`,description:`Переопределяет настройки Projector Judge для этого чата, не меняя глобальные. Передайте хотя бы одно поле; maxRisk выше 3 запрещён.`,arguments:{show:`boolean: показывать оценку`,auto:`boolean: разрешать низкий риск автоматически`,maxRisk:`1, 2 или 3`,confidence:`high или high-medium`},run:e=>{let t=J(e);return y({...o.value,...typeof t.show==`boolean`?{show:t.show}:{},...typeof t.auto==`boolean`?{auto:t.auto}:{},...t.maxRisk===void 0?{}:{maxRisk:t.maxRisk},...t.confidence===void 0?{}:{confidence:t.confidence}})}}),f.scope.registerCommand({id:`ide.agent.judge.chat.reset`,title:`Вернуть настройки Судьи чата к глобальным`,description:`Убирает переопределение Projector Judge у этого чата.`,run:()=>(g(),{overridden:!1,...a.value})}),f.scope.registerCommand({id:`ide.agent.judge.panel`,title:`Открыть настройки Судьи`,description:`Открывает или закрывает остров Projector Judge в табе агента: показывать ли оценку риска, разрешать ли низкий риск автоматически и до какого балла.`,run:()=>v()});let b={props:r,emit:i,global:a,draft:o,error:s,overridden:c,menu:l,ownTrigger:u,bindTrigger:d,commands:f,adopt:p,apply:m,reload:h,reset:g,openAt:_,open:v,updateOverride:y,UiButton:q,UiHint:we,UiIsland:Yd,UiIslandLabel:sh,UiMessage:Te,UiStack:Ed,AgentJudgeFields:Dw};return Object.defineProperty(b,"__isScriptSetup",{enumerable:!1,value:!0}),b}}),kw=[`aria-expanded`,`aria-controls`],Aw={key:0,class:`changed-dot`,"aria-hidden":`true`};function jw(t,n,r,i,a,o){return K(),U(P,null,[I(`div`,{ref:i.bindTrigger,class:Y([`judge-island`,{hidden:r.showTrigger===!1}])},[r.showTrigger===!1?D(`v-if`,!0):(K(),U(`button`,{key:0,type:`button`,class:Y([`trigger`,{changed:i.overridden}]),"aria-expanded":i.menu.open.value,"aria-controls":i.menu.id,"aria-label":`Судья`,title:`Судья`,onClick:i.open},[n[0]||=I(`span`,{"aria-hidden":`true`},`⚖`,-1),i.overridden?(K(),U(`span`,Aw)):D(`v-if`,!0)],10,kw))],2),y(i.UiIsland,{menu:i.menu,label:`Судья`,width:360},{default:e(()=>[y(i.UiIslandLabel,null,{default:e(()=>[...n[1]||=[G(`Судья`,-1)]]),_:1}),y(i.UiStack,{gap:3},{default:e(()=>[y(i.AgentJudgeFields,{"model-value":i.draft,disabled:r.disabled,"onUpdate:modelValue":i.apply},null,8,[`model-value`,`disabled`]),y(i.UiHint,null,{default:e(()=>[...n[2]||=[G(` Баллы 4–5 не разрешаются автоматически. «Сбросить» возвращает чат к глобальным настройкам. `,-1)]]),_:1}),i.overridden?(K(),F(i.UiButton,{key:0,disabled:r.disabled,onClick:i.reset},{default:e(()=>[...n[3]||=[G(`Как по умолчанию`,-1)]]),_:1},8,[`disabled`])):D(`v-if`,!0),i.error?(K(),F(i.UiMessage,{key:1,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0)]),_:1})]),_:1},8,[`menu`])],64)}var Mw=H(Ow,[[`render`,jw],[`__scopeId`,`data-v-c69afbe5`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentJudgeIsland.vue`]]),Nw=W({__name:`AgentJudgeSettings`,setup(e,{expose:t}){t();let{settings:n,busy:r,error:i,commands:a}=Vre(),o={settings:n,busy:r,error:i,commands:a,activate:()=>a.scope.activate(),UiButton:q,UiHint:we,UiInline:Be,UiSettingsSection:Jg,AgentJudgeFields:Dw};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});function Pw(t,n,r,i,a,o){return K(),F(i.UiSettingsSection,{activate:i.activate,error:i.error},{default:e(()=>[y(i.AgentJudgeFields,{modelValue:i.settings,"onUpdate:modelValue":n[0]||=e=>i.settings=e,disabled:i.busy},null,8,[`modelValue`,`disabled`]),y(i.UiInline,null,{default:e(()=>[y(i.UiButton,{appearance:`solid`,disabled:i.busy,onClick:n[1]||=e=>i.commands.run(`ide.agent.judge.set`)},{default:e(()=>[...n[2]||=[G(`Сохранить`,-1)]]),_:1},8,[`disabled`])]),_:1}),y(i.UiHint,null,{default:e(()=>[...n[3]||=[G(` Судья оценивает действие по шкале от 1 до 5 и объясняет риск в карточке. Автоматически разрешаются только действия не выше выбранного балла и с достаточной уверенностью; баллы 4–5 не автоматизируются, а ошибка Судьи никогда не разрешает действие. Настройку можно переопределить для отдельного чата в меню «Ещё». `,-1)]]),_:1})]),_:1},8,[`error`])}var Fw=H(Nw,[[`render`,Pw],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentJudgeSettings.vue`]]),Iw=W({__name:`AgentMcpSettings`,setup(e,{expose:t}){t();let{mcp:n,draft:r,busy:i,error:a,commands:o}=Hre(),s={mcp:n,draft:r,busy:i,error:a,commands:o,activate:()=>o.scope.activate(),UiHint:we,AgentJsonSettings:ib};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}});function Lw(t,n,r,i,a,o){return K(),F(i.AgentJsonSettings,{label:`серверы пользователя (JSON)`,"aria-label":`MCP-серверы агента`,placeholder:`{ "mcpServers": { "files": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home"] } } }`,text:i.mcp.text,draft:i.draft,busy:i.busy,error:i.error,activate:i.activate,"onUpdate:draft":n[0]||=e=>i.draft=e,onSave:n[1]||=e=>i.commands.run(`ide.agent.mcp.set`)},{summary:e(()=>[i.mcp.servers.length?(K(),F(i.UiHint,{key:0},{default:e(()=>[G(` Подключаются: `+X(i.mcp.servers.map(e=>`${e.name} (${e.source===`user`?`ваш`:`проект`}, ${e.kind})`).join(`, `)),1)]),_:1})):D(`v-if`,!0)]),help:e(()=>[y(i.UiHint,null,{default:e(()=>[...n[2]||=[G(` Штатный агент подключает эти серверы в начале каждого ответа и получает их инструменты; серверы из `,-1),I(`code`,null,`.mcp.json`,-1),G(` проекта подключаются тоже, но запуск подтверждаете вы. Инструмент, который не только читает, перед вызовом тоже спрашивает подтверждение (в режиме «Без вопросов» — нет). Значения вида `,-1),I(`code`,null,"${NAME}",-1),G(` берутся из окружения Projector. Файл лежит в папке данных Projector и может содержать ключи. `,-1)]]),_:1})]),_:1},8,[`text`,`draft`,`busy`,`error`])}var Rw=H(Iw,[[`render`,Lw],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentMcpSettings.vue`]]),zw=W({__name:`AgentMemorySettings`,setup(e,{expose:t}){t();let{memory:n,drafts:r,textOf:i,busy:a,error:o,commands:s}=Ure(),c=()=>s.scope.activate();function l(e,t){r.value[e]=t.target.value}let u={memory:n,drafts:r,textOf:i,busy:a,error:o,commands:s,activate:c,edit:l,UiButton:q,UiControl:Se,UiField:Re,UiHint:we,UiSettingsSection:Jg};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});function Bw(t,n,r,i,a,o){return K(),F(i.UiSettingsSection,{activate:i.activate,error:i.error},{default:e(()=>[y(i.UiField,{label:`общие заметки`},{default:e(({control:e})=>[y(i.UiControl,R(e,{as:`textarea`,rows:`5`,"aria-label":`Общие заметки агента`,spellcheck:`false`,placeholder:`Например: отвечай коротко, пакеты ставь через pnpm`,value:i.textOf(`user`),disabled:i.busy,onInput:n[0]||=e=>i.edit(`user`,e)}),null,16,[`value`,`disabled`])]),_:1}),y(i.UiButton,{appearance:`solid`,disabled:i.busy||i.drafts.user===void 0,onClick:n[1]||=e=>i.commands.run(`ide.agent.memory.set`)},{default:e(()=>[...n[2]||=[G(`Сохранить`,-1)]]),_:1},8,[`disabled`]),(K(!0),U(P,null,S(i.memory.projects,t=>(K(),F(i.UiField,{key:t.path,label:t.path},{default:e(({control:r})=>[y(i.UiControl,R({ref_for:!0},r,{as:`textarea`,rows:`4`,"aria-label":`Заметки проекта ${t.path}`,spellcheck:`false`,value:i.textOf(t.path),disabled:i.busy,onInput:e=>i.edit(t.path,e)}),null,16,[`aria-label`,`value`,`disabled`,`onInput`]),y(i.UiButton,{disabled:i.busy||i.drafts[t.path]===void 0,onClick:e=>i.commands.run(`ide.agent.memory.set`,{path:t.path,text:i.textOf(t.path)})},{default:e(()=>[...n[3]||=[G(`Сохранить`,-1)]]),_:1},8,[`disabled`,`onClick`]),y(i.UiButton,{disabled:i.busy,onClick:e=>i.commands.run(`ide.agent.memory.set`,{path:t.path,text:``})},{default:e(()=>[...n[4]||=[G(`Удалить`,-1)]]),_:1},8,[`disabled`,`onClick`])]),_:2},1032,[`label`]))),128)),y(i.UiHint,null,{default:e(()=>[...n[5]||=[G(` Штатный агент попросит подтверждение и запишет сюда то, что вы просили запомнить («запомни…»). Заметки идут в каждый его запрос, поэтому держите их короткими; секреты здесь хранить не нужно. Заметки проекта привязаны к его пути. `,-1)]]),_:1})]),_:1},8,[`error`])}var Vw=H(zw,[[`render`,Bw],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentMemorySettings.vue`]]),Hw=W({__name:`AgentModeSettings`,props:{agentId:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=()=>n.agentId?DC().filter(e=>e.backend===n.agentId):DC(),{modeOf:i,setMode:a,isEnabled:o,error:s}=IC(),c={props:n,shown:r,modeOf:i,setMode:a,isEnabled:o,error:s,UiMessage:Te,UiControl:Se,UiStack:Ed,UiField:Re,UiHint:we};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}});function Uw(t,n,r,i,a,o){return K(),F(i.UiStack,{as:`section`,gap:4},{default:e(()=>[(K(!0),U(P,null,S(i.shown(),t=>(K(),F(i.UiField,{key:t.program,label:t.title},{default:e(({control:r})=>[y(i.UiControl,R({as:`select`},{ref_for:!0},r,{"aria-label":`Режим сессий ${t.title}`,disabled:!i.isEnabled(t.program),value:i.modeOf(t.program),onChange:e=>i.setMode(t.program,e.target.value)}),{default:e(()=>[...n[0]||=[I(`option`,{value:`tui`},`Терминал (TUI)`,-1),I(`option`,{value:`gui`},`Графический чат (GUI)`,-1)]]),_:1},16,[`aria-label`,`disabled`,`value`,`onChange`])]),_:2},1032,[`label`]))),128)),y(i.UiHint,null,{default:e(()=>[...n[1]||=[G(` По умолчанию агенты запускаются в терминале. Графический режим — тот же агент с тем же входом и настройками, но вывод в чате, а запросы разрешений — кнопками. Режим применяется к новым сессиям; переключить его можно и в меню «+». `,-1)]]),_:1}),i.error?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0)]),_:1})}var Ww=H(Hw,[[`render`,Uw],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentModeSettings.vue`]]),Gw=W({__name:`AgentSettings`,props:{agentId:{type:String,required:!1}},emits:[`open`],setup(e,{expose:t,emit:n}){t();let r=e,i={props:r,emit:n,agent:B(()=>st().find(e=>e.backend===r.agentId)),UiButton:q,UiHint:we,UiInline:Be,UiStack:Ed,get clientAgents(){return st},get AgentFeatureDefaults(){return Ore},AgentIntegrationsSettings:Sw,AgentModeSettings:Ww};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),Kw={key:1,class:`group`},qw={key:2,class:`group`},Jw={class:`group`};function Yw(t,n,r,i,a,o){return K(),F(i.UiStack,{as:`section`,gap:4},{default:e(()=>[i.agent?(K(),U(P,{key:1},[y(i.UiInline,{class:`agent-heading`,justify:`normal`,gap:3},{default:e(()=>[(K(),F(C(i.agent.icon),{class:`agent-icon`,"aria-hidden":`true`})),I(`div`,null,[I(`h3`,null,X(i.agent.title),1),I(`p`,null,X(i.agent.caption),1)])]),_:1}),i.agent.builtin?(K(),F(i.UiHint,{key:0},{default:e(()=>[...n[1]||=[G(` Встроенный агент Projector нельзя отключить, и у него нет терминального режима. Его возможности для новых чатов — ниже; остальные настройки Projector остаются отдельными разделами. `,-1)]]),_:1})):(K(),U(`section`,Kw,[n[2]||=I(`h4`,null,`интеграция`,-1),y(i.AgentIntegrationsSettings,{"agent-id":i.agent.backend},null,8,[`agent-id`])])),i.agent.builtin?D(`v-if`,!0):(K(),U(`section`,qw,[n[3]||=I(`h4`,null,`сессии`,-1),y(i.AgentModeSettings,{"agent-id":i.agent.backend},null,8,[`agent-id`])])),I(`section`,Jw,[n[4]||=I(`h4`,null,`возможности`,-1),y(i.AgentFeatureDefaults,{agent:i.agent.backend},null,8,[`agent`])])],64)):(K(),U(P,{key:0},[y(i.UiHint,null,{default:e(()=>[...n[0]||=[G(` У каждого адаптера своя страница: включение, режим сессий и возможности собраны в одном месте. Выберите агента слева или кнопкой ниже. `,-1)]]),_:1}),y(i.UiInline,{wrap:``,gap:2},{default:e(()=>[(K(!0),U(P,null,S(i.clientAgents(),t=>(K(),F(i.UiButton,{key:t.backend,title:t.caption,onClick:e=>i.emit(`open`,t.backend)},{default:e(()=>[G(X(t.title),1)]),_:2},1032,[`title`,`onClick`]))),128))]),_:1})],64))]),_:1})}var Xw=H(Gw,[[`render`,Yw],[`__scopeId`,`data-v-59f9e040`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentSettings.vue`]]),Zw=W({__name:`AgentSkillsSettings`,setup(e,{expose:t}){t();let{data:n,error:r,commands:i}=Wre(),a={data:n,error:r,commands:i,activate:()=>i.scope.activate(),UiHint:we,UiSettingsSection:Jg};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),Qw={key:1,class:`skills`},$w={key:0};function eT(t,n,r,i,a,o){return K(),F(i.UiSettingsSection,{activate:i.activate,error:i.error},{default:e(()=>[i.data.skills.length?(K(),U(`ul`,Qw,[(K(!0),U(P,null,S(i.data.skills,e=>(K(),U(`li`,{key:`${e.kind}:${e.name}`},[I(`strong`,null,X(e.kind===`skill`?e.name:`/${e.name}`),1),e.hint?(K(),U(`span`,$w,X(e.hint),1)):D(`v-if`,!0),G(` — `+X(e.description),1)]))),128))])):(K(),F(i.UiHint,{key:0},{default:e(()=>[...n[0]||=[G(`Своих навыков и команд пока нет.`,-1)]]),_:1})),y(i.UiHint,null,{default:e(()=>[n[1]||=G(` Навык — папка `,-1),n[2]||=I(`code`,null,`skills/<имя>/SKILL.md`,-1),n[3]||=G(` с описанием в шапке (`,-1),n[4]||=I(`code`,null,`description:`,-1),n[5]||=G(`): агент видит описания и сам загружает нужный. Команда — файл `,-1),n[6]||=I(`code`,null,`commands/<имя>.md`,-1),n[7]||=G(`: её набирают как `,-1),n[8]||=I(`code`,null,`/имя аргументы`,-1),n[9]||=G(`, в тексте `,-1),n[10]||=I(`code`,null,`$ARGUMENTS`,-1),n[11]||=G(` заменяется аргументами. Папка пользователя: `,-1),I(`code`,null,X(i.data.folders.find(e=>e.source===`user`)?.path),1),n[12]||=G(`; в проекте — `,-1),n[13]||=I(`code`,null,`.projector/`,-1),n[14]||=G(` с такими же подпапками; агенты со своей папкой навыков читают и её. Навык пользователя главнее одноимённого навыка проекта. `,-1)]),_:1})]),_:1},8,[`error`])}var tT=H(Zw,[[`render`,eT],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentSkillsSettings.vue`]]),nT=W({__name:`AgentWebSettings`,setup(e,{expose:t}){t();let{web:n,provider:r,url:i,apiKey:a,busy:o,error:s,commands:c}=Gre(),l={web:n,provider:r,url:i,apiKey:a,busy:o,error:s,commands:c,activate:()=>c.scope.activate(),UiButton:q,UiControl:Se,UiField:Re,UiHint:we,UiInline:Be,UiSettingsSection:Jg};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}});function rT(t,n,r,i,a,o){return K(),F(i.UiSettingsSection,{activate:i.activate,error:i.error},{default:e(()=>[y(i.UiField,{label:`поисковый сервис`},{default:e(({control:t})=>[y(i.UiControl,R({as:`select`},t,{"aria-label":`Поисковый сервис агента`,modelValue:i.provider,"onUpdate:modelValue":n[0]||=e=>i.provider=e,disabled:i.busy}),{default:e(()=>[...n[5]||=[I(`option`,{value:`brave`},`Brave Search (нужен ключ)`,-1),I(`option`,{value:`searxng`},`SearXNG (свой сервер)`,-1)]]),_:1},16,[`modelValue`,`disabled`])]),_:1}),i.provider===`searxng`?(K(),F(i.UiField,{key:0,label:`адрес SearXNG`},{default:e(({control:e})=>[y(i.UiControl,R(e,{"aria-label":`Адрес SearXNG`,placeholder:`https://searx.example.org`,spellcheck:`false`,modelValue:i.url,"onUpdate:modelValue":n[1]||=e=>i.url=e,disabled:i.busy}),null,16,[`modelValue`,`disabled`])]),_:1})):(K(),F(i.UiField,{key:1,label:`ключ Brave Search`},{default:e(({control:e})=>[y(i.UiControl,R(e,{type:`password`,autocomplete:`off`,"aria-label":`Ключ Brave Search`,placeholder:i.web.hasKey?`ключ сохранён; введите новый, чтобы заменить`:`ключ`,spellcheck:`false`,modelValue:i.apiKey,"onUpdate:modelValue":n[2]||=e=>i.apiKey=e,disabled:i.busy}),null,16,[`placeholder`,`modelValue`,`disabled`])]),_:1})),y(i.UiInline,null,{default:e(()=>[y(i.UiButton,{appearance:`solid`,disabled:i.busy,onClick:n[3]||=e=>i.commands.run(`ide.agent.web.set`)},{default:e(()=>[...n[6]||=[G(`Сохранить`,-1)]]),_:1},8,[`disabled`]),i.web.hasKey&&i.provider===`brave`?(K(),F(i.UiButton,{key:0,disabled:i.busy,onClick:n[4]||=e=>i.commands.run(`ide.agent.web.key.clear`)},{default:e(()=>[...n[7]||=[G(`Удалить ключ`,-1)]]),_:1},8,[`disabled`])):D(`v-if`,!0)]),_:1}),y(i.UiHint,null,{default:e(()=>[...n[8]||=[G(` Штатный агент ищет через `,-1),I(`code`,null,`web_search`,-1),G(` и читает страницы через `,-1),I(`code`,null,`web_fetch`,-1),G(`. Страницы из локальной сети ему недоступны, первое обращение к сайту подтверждаете вы. Всё, что приходит из интернета, агент считает чужими данными, а не указаниями. Ключ хранится в системном хранилище секретов; агент может сам попросить его отдельным закрытым полем. `,-1)]]),_:1})]),_:1},8,[`error`])}var iT=H(nT,[[`render`,rT],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/settings/ui/AgentWebSettings.vue`]]);function aT(e,t,n,r){e.executeCommand(OC(n),void 0,{scope:`editor:${t}`}).catch(e=>r(e instanceof Error?e.message:`Не удалось открыть агента`))}function oT(e){let t=M(!1),n=()=>t.value=!1;yf(window,`dragend`,n),yf(window,`drop`,n,!0);let r=t=>e()?.acceptsDrag(t.dataTransfer)?(t.preventDefault(),t.stopPropagation(),!0):!1;return{over:t,dragenter(e){r(e)&&(t.value=!0)},dragover(e){r(e)&&(t.value=!0,e.dataTransfer.dropEffect=`copy`)},dragleave(e){e.currentTarget.contains(e.relatedTarget)||(t.value=!1)},drop(n){t.value=!1,r(n)&&e().dropData(n.dataTransfer)}}}function sT(e){let t=(e.draft?.text??[...e.turns].reverse().find(e=>e.role===`user`)?.text??``).replace(/\s+/g,` `).trim();return t?`Ветка · ${t.length>40?`${t.slice(0,39)}…`:t}`:`Ветка`}async function cT(e){let{backend:t,projectId:n,turns:r,turnId:i,mode:a,branchSession:o}=e;if(!n)throw Error(`Форк доступен только в проекте`);let s=jS(r,i,a);if(!s)throw Error(`Это сообщение нельзя ответвить`);if(!jC(t)){let e=s.turns.findLast(e=>e.role===`assistant`);!e||o&&e.tail||(e.detached=!0)}let c=Mt(),l=NS(t,n,c),u=sT(s),d=await fetch(`/api/agent/history/${encodeURIComponent(l)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({turns:s.turns,projectId:n,backend:t,title:u,...e.role?{role:e.role}:{}})});if(!d.ok){let e=await d.json().catch(()=>({}));throw Error(e.error||`Не удалось сохранить ветку чата`)}return s.draft&&xC(l,s.draft),{chat:l,chatId:c,title:u}}function lT(e){let t=`editor:${e.projectId}`;async function n(n,r=`before`){let i=await cT({backend:e.backend,projectId:e.projectId,turns:e.turns(),turnId:n,mode:r,branchSession:e.capabilities().branchSession,role:e.role()}),a=ox(e.projectId,i.chat,i.title,e.role());if(!a)throw Error(`Для этой ветки нет вкладки чата`);return await e.api.executeCommand(a.command,a.args,{scope:t}),{chat:i.chat}}async function r(t,r){try{await n(t,r)}catch(t){e.fail(t instanceof Error?t.message:`Не удалось ответвить чат`)}}function i(n,r){let i=e.recent().find(e=>e.chat===n)?.role,a=ox(e.projectId,n,r,i);a&&Promise.resolve(e.api.executeCommand(a.command,a.args,{scope:t})).catch(t=>{e.fail(t instanceof Error?t.message:`Не удалось открыть чат`)})}return{fork:n,forkMessage:r,openRecent:i,recentChats:B(()=>e.recent().filter(t=>t.chat!==e.key&&!!ox(e.projectId,t.chat)))}}function uT(e){Tn(()=>{let t=e.turns.value.at(-1),n=e.turns.value.findLast(e=>e.role===`assistant`)?.text.trim().slice(0,2e3),r=t?.tools.map(e=>`${e.name} — ${e.status}`).join(`; `);return{note:`Чат агента ${e.agent}`,text:Nn(`Бэкенд: ${e.backend}`,e.busy.value?`Состояние: Работает (${e.phase.value})`:`Состояние: Готов`,e.error.value?`Ошибка: ${e.error.value}`:``,...e.controls.value.map(e=>`${e.name}: ${e.options.find(t=>t.value===e.current)?.name??e.current}`),`Сообщений: ${e.turns.value.length}`,n?`Последний ответ:\n${n}`:``,r?`Инструменты: ${r}`:``)}})}function dT(e){return e===`queued`||e===`running`||e===`needs-user`}function fT(e,t,n=8){return{active:e.filter(e=>dT(e.status)),recent:t?e.filter(e=>bb(e.status)&&e.origin===t).sort((e,t)=>(t.endedAt??t.createdAt)-(e.endedAt??e.createdAt)).slice(0,n):[]}}var pT={queued:`Запускается`,running:`Работает`,"needs-user":`Ждёт вас`,done:`Готово`,error:`Ошибка`,stopped:`Остановлено`};function mT(e){let t=xt(e);return t&&!t.builtin?t.program:void 0}function hT(e,t,n=Date.now()){return e?kx((t??n)-e):``}function gT(e,t=80){let n=e.replace(/\s+/g,` `).trim();if(!n)return`Задание`;if(n.length<=t)return n;let r=n.slice(0,t),i=Math.max(r.lastIndexOf(`. `),r.lastIndexOf(`! `),r.lastIndexOf(`? `)),a=(i>=Math.min(40,t/2)?r.slice(0,i+1):r).trimEnd();return/[.!?]$/.test(a)?a:`${a}…`}function _T(e,t){return(e.sessionId?t?.get(e.sessionId)?.trim():``)||gT(e.task)}function vT(e,t){let n=[],r=e.size===0;for(let i of t){let t=e.get(i.id);if(e.set(i.id,i.status),t===i.status||t===void 0&&(r||bb(i.status)))continue;let a=MC(i.backend),o=i.task.trim().slice(0,120);if(i.status===`needs-user`){let e=i.pending[0];n.push({id:i.id,title:`${a} ждёт вашего ответа`,body:e?`${e.title}: ${o}`:o})}else bb(i.status)&&n.push({id:i.id,title:i.status===`done`?`${a} закончил задание`:i.status===`error`?`${a}: задание завершилось ошибкой`:`${a}: задание остановлено`,body:i.status===`error`&&i.error?i.error:o})}return n}function yT(e,t){for(let n of vT(e,t))Vx(n.id,n.title,n.body)}var bT=4e3;function xT(){let e=M([]);async function t(){if(document.visibilityState===`visible`)try{e.value=await yb()}catch{}}t();let n=setInterval(()=>void t(),bT);return document.addEventListener(`visibilitychange`,t),le()&&k(()=>{clearInterval(n),document.removeEventListener(`visibilitychange`,t)}),e}function ST(e){return e.filter(e=>!bb(e.status)).map(e=>({chat:`job:${e.id}`,projectId:e.projectId,agent:MC(e.backend),topic:e.task.trim().slice(0,120),busy:e.status!==`needs-user`,tasks:0,startedAt:e.startedAt,job:{id:e.id,status:e.status},needsUser:e.status===`needs-user`}))}function CT(){let e=M([]),t=new Map;async function n(){try{e.value=await Cb(),yT(t,e.value)}catch{}}n();let r=setInterval(()=>void n(),bT);return le()&&k(()=>clearInterval(r)),e}function wT(){let e=xT(),t=CT();return{items:B(()=>{let n=YS().map(e=>({chat:e.key,projectId:e.projectId,agent:e.label,topic:e.turns().findLast(e=>e.role===`user`)?.text.trim().slice(0,120)??``,busy:e.busy(),tasks:e.tasks().filter(e=>e.status===`running`).length,startedAt:e.turns().findLast(e=>e.role===`assistant`)?.at})).filter(e=>e.busy||e.tasks),r=new Set(n.map(e=>e.chat)),i=e.value.filter(e=>{let t=e.chat||e.id;return!r.has(t)&&(r.add(t),!0)}).map(e=>({chat:e.chat||e.id,projectId:e.projectId,agent:MC(e.backend),topic:e.topic,busy:!0,tasks:0,startedAt:e.startedAt})),a=ST(t.value);return[...n,...i,...a]}),jobs:t}}var TT=3e4,ET=5e3,DT=6,OT=new Map,kT=new Map,AT=M(0),jT=(e,t)=>`${e}:${t}`;function MT(e,t,n=!1){let r=jT(e,t),i=OT.get(r);if(!n&&i&&Date.now()-i.at<TT)return Promise.resolve(i);let a=kT.get(r);if(a)return a;let o=hb(e,t).then(e=>{let t={at:Date.now(),titles:new Map(e.map(e=>[e.id,e.title]))};return OT.set(r,t),AT.value++,t}).catch(()=>i??{at:Date.now(),titles:new Map}).finally(()=>kT.delete(r));return kT.set(r,o),o}var NT=e=>!!e.sessionId&&!e.worktree;async function PT(e){if(!NT(e))return _T(e);let t=await MT(e.backend,e.projectId);return t.titles.get(e.sessionId)?.trim()||(t=await MT(e.backend,e.projectId,!0)),_T(e,t.titles)}function FT(e,t){let n=M(new Map),r,i=0,a=0,o=()=>t().map(e=>`${e.id}:${e.backend}:${e.sessionId??``}:${e.status}`).join(`|`);async function s(){clearTimeout(r),r=void 0;let o=t(),c=++a,l=new Map,u=e();if(u){let e=[...new Set(o.filter(NT).map(e=>e.backend))],t=await Promise.all(e.map(async e=>[e,(await MT(e,u)).titles]));if(c!==a)return;for(let[e,n]of t)l.set(e,n)}else if(c!==a)return;let d=new Map,f=!1;for(let e of o){let t=l.get(e.backend);d.set(e.id,_T(e,t)),NT(e)&&!t?.get(e.sessionId)?.trim()&&e.status===`running`&&(f=!0)}n.value=d,f&&i<DT&&(i++,r=setTimeout(()=>void s(),ET))}return E([o,AT],()=>{i=0,s()},{immediate:!0}),le()&&k(()=>{a++,clearTimeout(r)}),B(()=>n.value)}function IT(e,t){let n=FT(e,()=>{let e=t();return e?[e]:[]});return B(()=>{let e=t();return e?n.value.get(e.id)??_T(e):`Задание`})}var LT=2500,RT=new Set;function zT(e,t=gT(e.task)){return[`Фоновое задание «${t}» (${e.id}, ${e.backend}) завершилось: ${e.status}.`,e.error?`Ошибка: ${e.error}`:``,`Проверь результат командами ide.agent.job.result, ide.agent.job.diff и ide.agent.job.log, сверь с заданием и скажи пользователю, что изменилось и чем это проверено.`,e.worktree?`Работа шла в изолированной копии: слияние — ide.agent.job.merge, только по просьбе пользователя.`:``].filter(Boolean).join(` `)}function BT(e,t,n=()=>!0){let r=M([]),i=M(``),a=new Map,o=!1,s;async function c(){if(!o&&n()&&(typeof document>`u`||document.visibilityState!==`hidden`))try{let n=await Cb(e);if(o)return;i.value=``;for(let e of n){let n=a.get(e.id);n?n.status!==e.status&&t?.(e,n):t?.(e)}a=new Map(n.map(e=>[e.id,e])),r.value=n}catch(e){i.value=e instanceof Error?e.message:`Не удалось прочитать задания`}}return n()&&(s=setInterval(()=>void c(),LT),c()),k(()=>{o=!0,s&&clearInterval(s)}),{jobs:r,error:i,refresh:c}}var VT=e=>`projector:job-continued:${e}`;function HT(e){try{return localStorage.getItem(VT(e))===`1`}catch{return!1}}function UT(e){try{localStorage.setItem(VT(e),`1`)}catch{}}function WT(e,t,n,r){return e.origin!==n||!bb(e.status)||e.status===`stopped`||t&&bb(t.status)?!1:!!t||(e.endedAt??e.createdAt)>=r-5e3}function GT(e,t){let n=yp().api,r=Date.now(),{jobs:i,refresh:a}=BT(e,(e,n)=>{t.enabled()&&WT(e,n,t.chat,r)&&(RT.has(e.id)||HT(e.id)||(RT.add(e.id),UT(e.id),o(e)))},t.enabled);async function o(e){try{let n=await PT(e);await t.send(zT(e,n),{auto:e.id,autoTitle:n})}catch{}}function s(t){n?.executeCommand(`ide.workbench.agent.job.open`,{job:t},{scope:`editor:${e}`}).catch(()=>void 0)}return{jobs:i,refresh:a,open:s}}function KT(e){let{jobs:t,refresh:n,open:r}=GT(e.projectId,{enabled:e.enabled,chat:e.chat,send:e.send}),i=B(()=>e.permissions.value.length>0||e.questions.value.length>0||e.secrets.value.length>0||e.enabled()&&t.value.some(e=>e.pending.length>0));return de({jobs:t,refresh:n,open:r,hasRequests:i})}function qT(e){return!!e.sessionId&&!e.worktree&&!!mT(e.backend)}async function JT(e,t){if(!qT(t))throw Error(`Это задание нельзя продолжить в чате`);let n=mT(t.backend);if(!n)throw Error(`Это задание нельзя продолжить в чате`);let r=new Set(qS(t.projectId).map(e=>e.key));await e.executeCommand(`ide.workbench.${n}.open`,void 0,{scope:`editor:${t.projectId}`});let i=Date.now()+5e3;for(;Date.now()<i;){let e=qS(t.projectId).find(e=>!r.has(e.key)&&e.backend===t.backend);if(e)return e.resumeSession(t.sessionId);await new Promise(e=>setTimeout(e,100))}throw Error(`Чат не открылся вовремя`)}function YT(e){let t=M(),n=M([]),r=M(``),i=M(``),a=M(!1),o=!0,s,c=0;function l(e){t.value=e.job,n.value=e.journal,r.value=``}async function u(){let t=++c,n=0;for(;o&&t===c;){s=new AbortController;try{let r=await wb(e(),n?25:0,n,s.signal);if(!o||t!==c||(l(r),n=r.job.rev,bb(r.job.status)))return;await new Promise(e=>setTimeout(e,100))}catch(e){if(!o||t!==c)return;let n=e instanceof Error?e.message:`Не удалось прочитать задание`;if(/не найдено/.test(n)){a.value=!0;return}r.value=n,await new Promise(e=>setTimeout(e,3e3))}}}E(e,()=>{c++,s?.abort(),u()},{immediate:!0}),g(()=>{o=!1,s?.abort()});async function d(t){i.value=``;try{await t(),l(await wb(e()))}catch(e){i.value=e instanceof Error?e.message:`Не удалось выполнить действие`}}return{job:t,journal:n,error:r,actionError:i,missing:a,act:d,stop:()=>d(()=>Eb(e())),decide:(t,n,r=!1)=>d(()=>Ob(e(),{request:t,allow:n,always:r})),answer:(t,n)=>d(()=>Ob(e(),{request:t,answers:n}))}}var XT=new Set([`text`,`thought`,`tool`,`tool-output`,`tool-result`,`task`,`session`,`context`,`usage`]);function ZT(e,t,n){let r=ZS(),i={id:t,role:`assistant`,text:``,at:n,tools:[],parts:[]};for(let t of e)if(XT.has(t.event))hw(r,i,{event:t.event,data:t.data},()=>{},t.at);else if(t.event===`answer`){let e=t.data;i.parts.push({type:`note`,text:e.auto?`Разрешено автоматически: ${e.title??``}`.trim():`Ответ на запрос: ${e.summary??``}`.trim()})}return i}var QT=1500,$T=`Идентификатор задания из ide.agent.jobs.list или ide.agent.job.start`;function eE(e,t){let n=e[t];if(typeof n!=`string`||!n.trim())throw Error(`Укажите ${t}`);return n.trim()}function tE(e){let t=e.result??e.resultPreview??``;return{job:e.id,agent:e.backend,...e.role?{role:{id:e.role.roleId,name:e.role.name}}:{},status:e.status,task:e.task.slice(0,200),...e.error?{error:e.error}:{},waiting:e.pending.map(e=>({request:e.id,kind:e.kind,title:e.title,...e.detail?{detail:e.detail.slice(0,500)}:{},...e.custom?{custom:!0}:{},...e.questions?{questions:e.questions.map(e=>({id:e.id,question:e.question,...e.header?{header:e.header}:{},multiple:e.multiple,options:e.options.map(e=>({id:e.id,label:e.label}))}))}:{}})),files:e.files,...e.worktree?{copy:{branch:e.worktree.branch,folder:e.cwd}}:{},result:t,...e.result===void 0?{}:{resultLength:e.result.length}}}function nE(e){let t=typeof e.request==`string`?e.request:void 0;if(typeof e.allow==`boolean`||e.always===!0)throw Error(`Разрешение подтверждает пользователь карточкой в чате Projector`);let n=e.answers;if(n!==void 0){if(n===null)return{request:t,answers:null};if(typeof n!=`object`||Array.isArray(n))throw Error(`answers: объект { id вопроса: [id вариантов] }`);let e={};for(let[t,r]of Object.entries(n)){if(!Array.isArray(r)||r.some(e=>typeof e!=`string`))throw Error(`answers: значения — массивы идентификаторов вариантов`);e[t]=r}return{request:t,answers:e}}let r=typeof e.answer==`string`?e.answer.trim():``;if(/^(allow|always|deny)$/i.test(r))throw Error(`Разрешение подтверждает пользователь карточкой в чате Projector`);if(r)return{request:t,text:r};throw Error(`Укажите answers или текст ответа на вопрос`)}var rE=(e,t=QT)=>{if(e===void 0)return{cut:!1};let n=typeof e==`string`?e:JSON.stringify(e);return n.length>t?{text:`${n.slice(0,t)}…`,cut:!0}:{text:n,cut:!1}};function iE(e,t){let n=[],r=new Map;for(let t of e){let e=t.data;if(!e)continue;let i=typeof e.id==`string`?e.id:``;if(t.event===`tool`){let a={at:t.at,id:i,name:String(e.name??``),input:e.input};n.push(a),i&&r.set(i,a)}else if(t.event===`tool-result`&&i){let n=r.get(i);n&&(n.output=e.output,n.resultAt=t.at)}}let i=n.length>t;return{calls:n.slice(-t).map(e=>{let t=rE(e.input),n=rE(e.output);return(t.cut||n.cut)&&(i=!0),{at:e.at,...e.id?{id:e.id}:{},name:e.name,...t.text===void 0?{}:{input:t.text},...n.text===void 0?{}:{output:n.text},...e.resultAt?{resultAt:e.resultAt}:{}}}),cut:i}}function aE(e,t=10){let n=e.filter(e=>e.event===`input`).map(e=>{let t=e.data;return{at:e.at,text:typeof t?.text==`string`?t.text.slice(0,2e3):``,...t?.followUp===!0?{followUp:!0}:{}}}).filter(e=>e.text);return{followUps:n.slice(-t),followUpsCut:n.length>t}}var oE={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function sE(e,t){return K(),U(`svg`,oE,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M12 8V4H8`}),I(`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`}),I(`path`,{d:`M2 14h2m16 0h2m-7-1v2m-6-2v2`})],-1)]])}var cE=L({name:`lucide-bot`,render:sE}),lE=W({__name:`ActivityIsland`,props:{scopeId:{type:String,required:!1,default:`activity`}},setup(e,{expose:t}){t();let n=e,{projects:r}=Mu(),i=_d(),a=Lr(),{items:o}=wT(),s=B(()=>r.value.filter(e=>e.runtime?.status===`running`)),c=B(()=>s.value.length+o.value.length),l=B(()=>`Запущено проектов: ${s.value.length}, агентов за работой: ${o.value.length}`),u=e=>r.value.find(t=>t.id===e)?.name??e,d=Nx();function f(e){return[e.busy&&e.startedAt!==void 0?`работает ${kx(d.value-e.startedAt)}`:``,e.tasks?`в фоне: ${e.tasks}`:e.topic].filter(Boolean).join(` · `)}let p=Ff({anchor:`right`,initialFocus:[`button.row`],returnFocus:`.trigger`}),m=Je(n.scopeId,()=>({surface:`activity`}));m.scope.registerCommand({id:`ide.activity.toggle`,title:`Показать запущенные проекты и агентов`,description:`Открывает или закрывает остров активности: запущенные проекты (с остановкой) и агенты, которые сейчас работают.`,run:()=>p.toggle()});function h(e){p.close(!1),a.push(Hu(e))}function g(e){let t=r.value.find(t=>t.id===e.projectId);e.job?RC(e.projectId,e.job.id):zC(e.projectId,e.chat),t?h(t.path):p.close(!1)}let _={props:n,projects:r,runner:i,router:a,agents:o,running:s,total:c,summary:l,nameOf:u,now:d,agentSub:f,menu:p,commands:m,openProject:h,openAgent:g,UiActionRow:wl,UiButton:q,UiInline:Be,UiIsland:Yd,UiIslandLabel:sh,UiSpinner:De,get IconSquare(){return Py},get IconBot(){return cE},get IconAlert(){return Ly}};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),uE=[`title`,`aria-label`,`aria-expanded`,`aria-controls`],dE={key:0,class:`empty`},fE={class:`name u-truncate`},pE={class:`sub u-truncate`},mE={class:`name u-truncate`},hE={key:3,class:`badge`},gE={class:`sub u-truncate`};function _E(t,n,r,i,a,o){return K(),U(P,null,[I(`div`,{ref:e=>i.menu.trigger.value=e,class:`activity`},[I(`button`,{type:`button`,class:Y([`trigger count`,{active:i.total}]),title:i.summary,"aria-label":i.summary,"aria-expanded":i.menu.open.value,"aria-controls":i.menu.id,onClick:n[0]||=e=>i.menu.toggle()},[n[1]||=I(`span`,{class:`count-dot`,"aria-hidden":`true`},null,-1),G(X(i.total),1)],10,uE)],512),y(i.UiIsland,{menu:i.menu,label:`Запущенные проекты и агенты`,width:320},{default:e(()=>[i.total?D(`v-if`,!0):(K(),U(`p`,dE,`Ничего не запущено`)),i.running.length?(K(),U(P,{key:1},[y(i.UiIslandLabel,null,{default:e(()=>[...n[2]||=[G(`Проекты`,-1)]]),_:1}),(K(!0),U(P,null,S(i.running,t=>(K(),F(i.UiInline,{key:t.id,gap:1,justify:`normal`,align:`center`},{default:e(()=>[y(i.UiActionRow,{class:`row`,onClick:e=>i.openProject(t.path)},{default:e(()=>[n[3]||=I(`span`,{class:`dot`,"aria-hidden":`true`},null,-1),I(`span`,fE,X(t.name),1),I(`span`,pE,X(t.runtime?.commandName),1)]),_:2},1032,[`onClick`]),y(i.UiButton,{shape:`icon`,size:`sm`,title:`Остановить проект`,"aria-label":`Остановить проект`,onClick:e=>i.runner.stop(t.id)},{default:e(()=>[y(i.IconSquare,{"aria-hidden":`true`})]),_:1},8,[`onClick`])]),_:2},1024))),128))],64)):D(`v-if`,!0),i.agents.length?(K(),U(P,{key:2},[y(i.UiIslandLabel,{divided:i.running.length>0},{default:e(()=>[...n[4]||=[G(`Агенты`,-1)]]),_:1},8,[`divided`]),(K(!0),U(P,null,S(i.agents,t=>(K(),F(i.UiActionRow,{key:t.chat,class:`row`,title:t.topic,onClick:e=>i.openAgent(t)},{default:e(()=>[t.busy?(K(),F(i.UiSpinner,{key:0})):t.needsUser?(K(),F(i.IconAlert,{key:1,class:`alert`,"aria-hidden":`true`})):(K(),F(i.IconBot,{key:2,class:`bot`,"aria-hidden":`true`})),I(`span`,mE,X(t.agent)+` · `+X(i.nameOf(t.projectId)),1),t.needsUser?(K(),U(`span`,hE,`ждёт вас`)):D(`v-if`,!0),I(`span`,gE,X(i.agentSub(t)),1)]),_:2},1032,[`title`,`onClick`]))),128))],64)):D(`v-if`,!0)]),_:1},8,[`menu`])],64)}var vE=H(lE,[[`render`,_E],[`__scopeId`,`data-v-546de3ce`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/jobs/ui/ActivityIsland.vue`]]),yE={vue:`xml`,svelte:`xml`,astro:`xml`,mdx:`markdown`};function bE(e){if(!e)return``;let t=(e.split(/[\\/]/).at(-1)??e).toLowerCase(),n=t.includes(`.`)?t.split(`.`).at(-1):t,r=yE[n]??n;return fn.getLanguage(r)?r:``}var xE=new xn({html:!0,linkify:!0,breaks:!0,highlight(e,t){if(t&&fn.getLanguage(t))try{return fn.highlight(e,{language:t,ignoreIllegals:!0}).value}catch{}return``}});function SE(e,t){let n={target:`_blank`,rel:`noopener noreferrer`},r=Jb(e);if(r.kind===`file`&&(n[`data-chat-file`]=r.href,!t)){let e=r.line?r.endLine?`:${r.line}–${r.endLine}`:`:${r.line}${r.column?`:${r.column}`:``}`:``;n.title=e?`Открыть ${r.path}${e}`:`Открыть файл в Projector`}return n}var CE=xE.renderer.rules.fence;xE.renderer.rules.fence=(e,t,n,r,i)=>{let a=e[t];return a.info.trim().toLowerCase()===`mermaid`?`<div class="md-mermaid">${xE.utils.escapeHtml(a.content)}</div>`:CE?CE(e,t,n,r,i):i.renderToken(e,t,n)};var wE=xE.renderer.rules.link_open;xE.renderer.rules.link_open=(e,t,n,r,i)=>{let a=e[t],o=a.attrGet(`title`);for(let[e,t]of Object.entries(SE(String(a.attrGet(`href`)??``),o==null?void 0:String(o))))a.attrSet(e,t);return wE?wE(e,t,n,r,i):i.renderToken(e,t,n)},xE.renderer.rules.image=(e,t,n,r,i)=>{let a=e[t],o=i.renderInlineAsText(a.children??[],n,r),s=r?.resolveImage;if(s){let e=s(String(a.attrGet(`src`)??``));if(!e)return`<span class="md-image-text">${xE.utils.escapeHtml(o)}</span>`;a.attrSet(`src`,e)}return a.attrSet(`alt`,o),a.attrSet(`loading`,`lazy`),a.attrSet(`decoding`,`async`),a.attrSet(`referrerpolicy`,`no-referrer`),a.attrSet(`class`,`md-image`),i.renderToken(e,t,n)};function TE(e,t){for(let t of e.querySelectorAll(`a`))for(let[e,n]of Object.entries(SE(t.getAttribute(`href`)??``,t.getAttribute(`title`))))t.setAttribute(e,n);for(let n of e.querySelectorAll(`img`)){let e=n.getAttribute(`alt`)??``;if(n.removeAttribute(`srcset`),t){let r=t(n.getAttribute(`src`)??``);if(!r){let t=n.ownerDocument.createElement(`span`);t.className=`md-image-text`,t.textContent=e||`Изображение`,n.replaceWith(t);continue}n.setAttribute(`src`,r)}n.setAttribute(`alt`,e),n.setAttribute(`loading`,`lazy`),n.setAttribute(`decoding`,`async`),n.setAttribute(`referrerpolicy`,`no-referrer`),n.setAttribute(`class`,`md-image`)}for(let t of e.querySelectorAll(`source[srcset]`))t.removeAttribute(`srcset`)}var EE=(e,t={})=>xE.render(e,t),DE=e=>xE.parse(e,{});function OE(e,t={}){let n=gn.sanitize(EE(e,t),{USE_PROFILES:{html:!0},ADD_ATTR:[`target`,`loading`,`decoding`,`referrerpolicy`,`class`,`data-mermaid-source`],RETURN_DOM:!0});return TE(n,t.resolveImage),n.innerHTML}var kE=/^ {0,3}\[[^\]\n]+\]:\s*\S/m,AE=new Set([`bullet_list_open`,`ordered_list_open`,`code_block`]);function jE(e=OE){let t=[],n=``;function r(){t=[],n=``}return{update(i){let a=!kE.test(i);a&&i.startsWith(n)||r();let o=i.slice(n.length),s=[0];for(let e=o.indexOf(`
|
|
58
|
-
`);e>=0;e=o.indexOf(`
|
|
59
|
-
`,e+1))s.push(e+1);let c=a?DE(o).filter(e=>e.level===0&&e.map&&e.nesting>=0).map(e=>({start:e.map[0],continues:AE.has(e.type)})):[],l=c.at(-2)?.continues?c.length-2:c.length-1;if(l>0){let r=s[c[l].start];for(let n=0;n<l;n++){let r=n===0?0:s[c[n].start],i=o.slice(r,s[c[n+1].start]);t.push({key:t.length,html:e(i)})}return n+=o.slice(0,r),[...t,{key:t.length,html:e(o.slice(r))}]}return[...t,{key:t.length,html:e(o)}]}}}function ME(e){return e?`risk-${e.score}`:`risk-0`}function NE(e){return e?e.score>=4?`danger`:e.score===3?`warning`:`neutral`:`warning`}function PE(e){return e.persistent&&(!e.judge||e.judge.score<4)}var FE=300,IE=`Агент обдумывает задачу…`,LE=1500,RE=500;function zE(e){let t=fC(e,!0,!0).slice(-20),n=0;for(;n<t.length&&t[n].role!==`user`;)n++;return t.slice(n)}function BE(e,t=[]){if(t.some(e=>e.status!==`completed`))return!0;let n=e.at(-1);return n?.role===`assistant`?n.text.trim()||n.tools.some(e=>e.status===`running`&&!e.parent)?!0:(n.parts??[]).some(e=>e.type===`thought`&&e.text.trim()):!1}function VE(e,t,n){let r=e.at(-1);if(r?.role!==`assistant`)return``;let i=(r.parts??[]).some(e=>e.type===`thought`&&e.text.trim()),a=r.tools.some(e=>e.status===`running`&&!e.parent);return[i?`thought`:``,r.text.trim()?`text`:``,a?`running`:``,t.trim(),n.map(e=>e.status).join(`,`)].join(`|`)}function HE(e,t,n,r,i){let a=e.at(-1),o=a?.role===`assistant`?a.tools.filter(e=>e.status===`running`&&!e.parent).slice(-8).map(e=>({name:e.name,...e.input?{input:e.input.slice(0,FE)}:{},...e.startedAt?{startedAt:e.startedAt}:{}})):[];return{busy:t,...n.trim()?{phase:n.trim()}:{},running:o,plan:i.map(e=>({content:e.content,status:e.status})),queue:r.length}}function UE(e,t,n,r,i){return JSON.stringify({history:zE(e),state:HE(e,t,n,r,i)})}function WE(e){let t=de({open:!1,text:``,at:0,auto:!0,busy:!1,error:``}),n=e.intervalMs??2e4,r=0,i,a,o,s=``,c=!1;function l(){a!==void 0&&clearInterval(a),a=void 0,!t.open||!t.auto?d():a=setInterval(()=>{e.busy.value&&(typeof document<`u`&&document.hidden||m(!1))},n)}function u(){a!==void 0&&clearInterval(a),a=void 0,d()}function d(){c=!1,o!==void 0&&clearTimeout(o),o=void 0}function f(e=LE){t.open&&t.auto&&(c=!0,o!==void 0&&clearTimeout(o),o=setTimeout(()=>{o=void 0,p()},e))}async function p(){c&&(!t.open||!t.auto||!e.busy.value?c=!1:t.busy?o=setTimeout(()=>{o=void 0,p()},RE):(c=!1,await m(!1)))}async function m(n=!0){if(!t.open||t.busy)return t.text;if(e.busy.value&&!BE(e.turns.value,e.plan.value))return t.error=``,t.text=IE,t.at=0,t.text;let a=UE(e.turns.value,e.busy.value,e.phase.value,e.queue.value,e.plan.value);if(!n&&a===s)return t.text;let o=++r;i?.abort();let c=new AbortController;i=c,t.busy=!0,t.error=``;try{let n=await Fb({history:zE(e.turns.value),state:HE(e.turns.value,e.busy.value,e.phase.value,e.queue.value,e.plan.value),selection:e.selection.value},c.signal);return o===r?(t.text=n.text,t.at=n.at,s=a,n.text):t.text}catch(e){return o===r&&!c.signal.aborted&&(t.error=e instanceof Error?e.message:`Lens не удался`),t.text}finally{o===r&&(t.busy=!1,i=void 0)}}async function h(){return t.open||(t.open=!0,t.error=``,l()),m()}function g(){t.open=!1,r++,i?.abort(),i=void 0,t.busy=!1,u()}function _(){t.open?g():h()}function v(e){t.auto=e,l()}function y(){t.text=``,t.at=0,t.error=``,s=``}function b(){g(),y(),t.auto=!0}function x(){g()}return E(e.busy,e=>{t.open&&t.auto&&(e||Date.now()-t.at>1e3)&&(d(),m())}),E(()=>VE(e.turns.value,e.phase.value,e.plan.value),()=>{t.open&&t.auto&&e.busy.value&&f()}),E(()=>e.turns.value.length===0,e=>{e&&b()}),k(x),{state:t,open:h,close:g,toggle:_,setAuto:v,refresh:m,clear:y,reset:b,stop:x}}function GE(e){return{lensOpen:()=>e.state.open,openLens:()=>e.open(),closeLens:()=>e.close(),refreshLens:()=>e.refresh(),setLensAuto:t=>e.setAuto(t)}}function KE(e){let t=M([]),n=M(``),r=M(e.auto===!0),i=e.intervalMs??3e3,a,o=0;async function s(){if(!r.value)return;clearTimeout(a),a=void 0;let c=e.backend(),l=e.projectId(),u=e.session();if(!c||!l||!u)return;let d=++o;try{let e=await gb(c,l,u);if(d!==o)return;t.value=e,n.value=``}catch(e){d===o&&(n.value=e instanceof Error?e.message:`Не удалось прочитать сессию`)}d===o&&r.value&&e.running()&&(a=setTimeout(()=>void s(),i))}async function c(){r.value=!0,await s()}function l(){r.value=!1,o++,clearTimeout(a),a=void 0}return E(()=>[e.session(),e.running()],()=>{clearTimeout(a),a=void 0,s()},{immediate:e.auto===!0}),k(l),{turns:t,error:n,load:s,start:c,stop:l}}function qE(e){let t=KE({backend:e.backend,projectId:e.projectId,session:e.session,running:e.running,auto:e.auto}),n=B(()=>{if(t.turns.value.length)return t.turns.value;let n=e.fallback?.();return n?[{id:n.id,role:`user`,text:n.text,tools:[]}]:[]}),r=B(()=>{if(!e.running())return``;let t=e.lastTool();return t?`выполняет ${mS(t)}`:``}),i=WE({turns:n,busy:B(()=>e.running()),phase:r,queue:M([]),plan:M([]),selection:B(()=>e.selection?.()??{})}),a=B(()=>i.state.error||i.state.text||(i.state.busy?`Смотрю, чем занят…`:``));async function o(){i.state.open?(i.close(),e.stopOnClose&&t.stop()):(e.startOnOpen?await t.start():n.value.length||await t.load(),await i.open())}return{lens:i,lensNote:a,turns:n,loadError:t.error,toggleLens:o}}function JE(e){let t=B(()=>Gx(e.turns.value)),n=M(``),r=B(()=>n.value?Kx(e.turns.value,n.value):void 0);E(()=>!!n.value&&!r.value,e=>{e&&(n.value=``)});function i(e){n.value=n.value===e?``:e}function a(t){e.openTab(Wx(e.turns.value).find(e=>e.id===t),t)}return{tasks:t,viewing:n,viewed:r,view:i,open:a}}var YE=W({__name:`AgentCodeBlock`,props:{text:{type:String,required:!0},diff:{type:Boolean,required:!1},path:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=B(()=>bE(n.path));function i(e){if(!r.value)return``;try{return fn.highlight(e,{language:r.value,ignoreIllegals:!0}).value}catch{return``}}let a={props:n,language:r,highlightLine:i,highlighted:B(()=>{if(n.diff||!r.value)return``;try{return fn.highlight(n.text,{language:r.value,ignoreIllegals:!0}).value}catch{return``}}),lines:B(()=>n.text.split(`
|
|
60
|
-
`).filter((e,t)=>!(n.diff&&t===1&&!e)).map((e,t)=>{if(!n.diff)return{line:e,kind:``,html:``};if(t===0)return{line:e,kind:`path`,html:``};if(e.startsWith(`- `)){let t=e.slice(2);return{line:t,kind:`del`,html:i(t)}}if(e.startsWith(`+ `)){let t=e.slice(2);return{line:t,kind:`add`,html:i(t)}}return e===`@@`?{line:`⋯`,kind:`gap`,html:``}:{line:e,kind:``,html:i(e)}}))};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),XE={key:0,class:`code highlighted`},ZE=[`innerHTML`],QE=[`innerHTML`];function $E(e,t,n,r,i,a){return r.highlighted?(K(),U(`pre`,XE,[I(`code`,{innerHTML:r.highlighted},null,8,ZE)])):(K(),U(`pre`,{key:1,class:Y([`code`,{diff:n.diff}])},[(K(!0),U(P,null,S(r.lines,(e,t)=>(K(),U(`span`,{key:t,class:Y([`row`,e.kind])},[e.html?(K(),U(`span`,{key:0,innerHTML:e.html},null,8,QE)):(K(),U(P,{key:1},[G(X(e.line||` `),1)],64))],2))),128))],2))}var eD=H(YE,[[`render`,$E],[`__scopeId`,`data-v-aac11b8b`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentCodeBlock.vue`]]),tD={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function nD(e,t){return K(),U(`svg`,tD,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`}),I(`path`,{d:`M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3m.08 4h.01`})],-1)]])}var rD=L({name:`lucide-shield-question`,render:nD}),iD=W({__name:`AgentStatusIcon`,props:{status:{type:String,required:!0},label:{type:String,required:!1}},setup(e,{expose:t}){t();let n={UiSpinner:De,get IconAlert(){return Ly},get IconCheck(){return Iy},get IconShield(){return rD},get IconSquare(){return Py}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function aD(e,t,n,r,i,a){return n.status===`running`||n.status===`queued`?(K(),F(r.UiSpinner,{key:0})):n.status===`needs-user`||n.status===`waiting`?(K(),F(r.IconShield,{key:1,class:`waiting-icon`,"aria-hidden":`true`})):n.status===`error`||n.status===`failed`?(K(),F(r.IconAlert,{key:2,class:`error-icon`,"aria-label":n.label,"aria-hidden":n.label?void 0:`true`},null,8,[`aria-label`,`aria-hidden`])):n.status===`stopped`||n.status===`canceled`?(K(),F(r.IconSquare,{key:3,class:`faint-icon`,"aria-hidden":`true`})):(K(),F(r.IconCheck,{key:4,class:`done-icon`,"aria-hidden":`true`}))}var oD=H(iD,[[`render`,aD],[`__scopeId`,`data-v-c83de06c`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentStatusIcon.vue`]]),sD=/^(\d+)\t/;function cD(e){let t=e.split(`
|
|
61
|
-
`);t.length>1&&t.at(-1)===``&&(t=t.slice(0,-1));let n=sD.exec(t[0]??``);if(!n)return e;let r=Number(n[1]),i=[];for(let n of t){let t=`${r}\t`;if(!n.startsWith(t))return e;i.push(n.slice(t.length)),r++}return i.join(`
|
|
62
|
-
`)}var lD={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function uD(e,t){return K(),U(`svg`,lD,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 19h8M4 17l6-6l-6-6`},null,-1)]])}var dD=L({name:`lucide-terminal`,render:uD}),fD={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function pD(e,t){return K(),U(`svg`,fD,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`}),I(`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5M10 9H8m8 4H8m8 4H8`})],-1)]])}var mD=L({name:`lucide-file-text`,render:pD}),hD={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function gD(e,t){return K(),U(`svg`,hD,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`12`,cy:`12`,r:`10`}),I(`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20a14.5 14.5 0 0 0 0-20M2 12h20`})],-1)]])}var _D=L({name:`lucide-globe`,render:gD}),vD=W({__name:`AgentToolCall`,props:{tool:{type:Object,required:!0},root:{type:String,required:!1}},emits:[`open`],setup(e,{expose:t,emit:n}){t();let r=e,i=n;function a(e){try{let t=JSON.parse(e.detail);return e.name===`bash`&&e.status!==`running`?{hint:t.terminated?`Прервано`:`Код ${t.exitCode??`—`}`,status:t.terminated||t.exitCode!==0?`error`:`done`,text:[t.stdout,t.stderr].filter(Boolean).join(`
|
|
63
|
-
`)||`Без вывода`}:e.name===`list_commands`&&Array.isArray(t.commands)?{hint:`${t.commands.length} найдено`,text:t.commands.map(e=>`${e.title}\n${e.id}`).join(`
|
|
64
|
-
|
|
65
|
-
`)||`Подходящих команд нет`}:e.name===`describe_command`?{hint:t.title??t.command??``,text:t.description?[t.id,t.description,...Object.entries(t.arguments??{}).map(([e,t])=>`${e}: ${t}`)].join(`
|
|
66
|
-
|
|
67
|
-
`):e.detail}:e.name===`execute_command`&&t.completed?{hint:`Выполнено`,text:`Команда выполнена в Projector.`}:{hint:``,text:e.detail}}catch{return{hint:``,text:e.detail}}}let o=B(()=>vS(r.tool.name,r.tool.kind)),s=z(RS,``),c=B(()=>nS(r.tool.input??``)),l=B(()=>rS(r.tool.input??``)),u=B(()=>yS(l.value,r.root)),d=B(()=>typeof c.value?.command==`string`?c.value.command:``),f=B(()=>typeof c.value?.content==`string`?c.value.content:``),m=B(()=>$x(l.value)),h=B(()=>{if(o.value!==`read`)return``;if(Qx(l.value))return l.value;let e=/^Reading media:\s*(.+)$/i.exec(r.tool.name)?.[1]?.trim()??``;return Qx(e)?e:``}),g=B(()=>{let e=h.value;if(!e)return;let t=LS(e,s);return t?{src:t,alt:yS(e,r.root)||e}:void 0}),_=M(!1);E(g,()=>_.value=!1);let v=M(),y=B(()=>{let e=r.tool,t=a(e),n=e.input??(e.status===`running`?e.detail:``),i=o.value,s=e.status===`running`,c=!s&&i===`read`?cD(t.text):t.text,p=pS(e.name,n);return{label:m.value?`Чтение навыка`:mS(e.name,n),hint:m.value||(p?``:l.value?u.value:d.value||iS(n)||t.hint),path:l.value?u.value:``,status:t.status??e.status,result:s?``:c,resultHint:s?``:t.hint,live:s?e.output??``:``,input:n?lS(e.name,n):``,diff:sS(e.name),running:s,showInput:!!n&&i!==`read`,body:i===`write`?f.value:``,badge:s?``:i===`write`?`+${bS(f.value)}`:i===`read`?g.value?``:`${bS(c)} стр.`:i===`bash`?t.hint:``}}),b=B(()=>{switch(o.value){case`bash`:return dD;case`search`:return rg;case`web`:return _D;case`task`:return cE;case`read`:case`write`:case`edit`:return mD;default:return kh}}),x=M(o.value===`bash`&&r.tool.status===`running`);E(()=>r.tool.status,e=>{e===`running`&&o.value===`bash`||e===`error`||e===`done`&&o.value===`read`&&bS(y.value.result)<=80?x.value=!0:e===`done`&&o.value===`bash`&&y.value.status!==`error`&&(x.value=!1)});let S=e=>{x.value=e.target.open},C=M();E(()=>r.tool.output,async()=>{await p();let e=C.value?.querySelectorAll(`pre`),t=e?.[e.length-1];t&&(t.scrollTop=t.scrollHeight)});let w=Nx(),T=B(()=>{let e=r.tool;return e.startedAt===void 0?``:e.status===`running`?kx(w.value-e.startedAt):e.endedAt===void 0?``:kx(e.endedAt-e.startedAt)}),D={props:r,emit:i,output:a,visual:o,projectId:s,data:c,path:l,shownPath:u,command:d,written:f,skill:m,imagePath:h,image:g,imageFailed:_,preview:v,view:y,icon:b,opened:x,toggle:S,body:C,now:w,time:T,timeTitle:B(()=>r.tool.status===`running`?`Выполняется ${T.value}`:`Длительность: ${T.value}`),UiDisclosureSummary:Ey,AgentCodeBlock:eD,ImageModal:dn,get IconChevron(){return Ch},UiSpinner:De,get IconAlert(){return Ly}};return Object.defineProperty(D,"__isScriptSetup",{enumerable:!1,value:!0}),D}}),yD=[`open`],bD=[`title`],xD=[`title`],SD=[`title`],CD={ref:`body`,class:`tool-body`},wD={key:0,class:`file-row`},TD=[`title`],ED=[`aria-label`],DD=[`src`,`alt`],OD={key:1,class:`picture-fallback`},kD={class:`io-label`},AD={key:0,class:`file-row`},jD=[`title`],MD={class:`io-label`},ND={key:0,class:`nested`},PD={class:`io-label`};function FD(t,n,r,i,a,o){let s=x(`AgentToolCall`,!0);return K(),U(P,null,[I(`details`,{class:Y([`tool`,[i.view.status,{streaming:i.view.running&&i.view.live}]]),open:i.opened,onToggle:i.toggle},[y(i.UiDisclosureSummary,{variant:`padded`},{default:e(()=>[(K(),F(C(i.icon),{class:`tool-icon`,"aria-hidden":`true`})),I(`span`,{class:`tool-name u-truncate`,title:i.view.label},X(i.view.label),9,bD),I(`span`,{class:`tool-hint u-truncate`,title:i.view.hint},X(i.view.hint),9,xD),i.view.badge?(K(),U(`span`,{key:0,class:Y([`tool-badge`,{failed:i.view.status===`error`}])},X(i.view.badge),3)):D(`v-if`,!0),i.time?(K(),U(`span`,{key:1,class:`tool-time`,title:i.timeTitle},X(i.time),9,SD)):D(`v-if`,!0),r.tool.status===`running`?(K(),F(i.UiSpinner,{key:2,class:`state-icon`,label:`Выполняется`})):i.view.status===`error`?(K(),F(i.IconAlert,{key:3,class:`state-icon error-icon`,"aria-label":`Ошибка`})):D(`v-if`,!0),y(i.IconChevron,{class:`row-chevron`,"aria-hidden":`true`})]),_:1}),I(`div`,CD,[i.visual===`read`?(K(),U(P,{key:0},[i.view.path?(K(),U(`div`,wD,[n[6]||=I(`span`,{class:`io-label`},`Файл`,-1),I(`button`,{type:`button`,class:`file u-truncate`,title:`Открыть ${i.view.path}`,onClick:n[0]||=e=>i.emit(`open`,i.view.path)},X(i.view.path),9,TD)])):D(`v-if`,!0),i.image&&i.view.status!==`error`?(K(),U(P,{key:1},[n[7]||=I(`div`,{class:`io-label`},`Изображение`,-1),i.imageFailed?(K(),U(`p`,OD,X(i.image.alt),1)):(K(),U(`button`,{key:0,type:`button`,class:`picture`,"aria-label":`Открыть изображение: ${i.image.alt}`,onClick:n[2]||=e=>i.preview=i.image},[I(`img`,{src:i.image.src,alt:i.image.alt,loading:`lazy`,decoding:`async`,referrerpolicy:`no-referrer`,onError:n[1]||=e=>i.imageFailed=!0},null,40,DD)],8,ED))],64)):(K(),U(P,{key:2},[I(`div`,kD,X(i.view.status===`error`?`Ошибка`:`Содержимое`),1),y(i.AgentCodeBlock,{path:i.path,text:i.view.result||(i.view.running?`Ожидание результата…`:`Файл пуст или ничего не вернул`)},null,8,[`path`,`text`])],64))],64)):i.visual===`write`?(K(),U(P,{key:1},[i.view.path?(K(),U(`div`,AD,[n[8]||=I(`span`,{class:`io-label`},`Куда`,-1),I(`button`,{type:`button`,class:`file u-truncate`,title:`Открыть ${i.view.path}`,onClick:n[3]||=e=>i.emit(`open`,i.view.path)},X(i.view.path),9,jD)])):D(`v-if`,!0),n[10]||=I(`div`,{class:`io-label`},`Содержимое`,-1),y(i.AgentCodeBlock,{text:i.view.body||`Пустой файл`},null,8,[`text`]),i.view.result?(K(),U(P,{key:1},[n[9]||=I(`div`,{class:`io-label`},`Результат`,-1),y(i.AgentCodeBlock,{text:i.view.result},null,8,[`text`])],64)):D(`v-if`,!0)],64)):i.visual===`edit`&&i.view.diff&&i.view.showInput?(K(),U(P,{key:2},[n[12]||=I(`div`,{class:`io-label`},`Изменения`,-1),y(i.AgentCodeBlock,{path:i.path,text:i.view.input,diff:!0},null,8,[`path`,`text`]),i.view.status===`error`?(K(),U(P,{key:0},[n[11]||=I(`div`,{class:`io-label`},`Ошибка`,-1),y(i.AgentCodeBlock,{text:i.view.result||`Ошибка инструмента`},null,8,[`text`])],64)):D(`v-if`,!0)],64)):i.visual===`bash`?(K(),U(P,{key:3},[n[13]||=I(`div`,{class:`io-label`},`Команда`,-1),y(i.AgentCodeBlock,{text:i.view.input||`…`},null,8,[`text`]),I(`div`,MD,X(i.view.running?`Вывод`:`Результат`),1),y(i.AgentCodeBlock,{text:i.view.live||i.view.result||(i.view.running?`Ожидание вывода…`:`Без вывода`)},null,8,[`text`])],64)):(K(),U(P,{key:4},[i.view.showInput?(K(),U(P,{key:0},[n[14]||=I(`div`,{class:`io-label`},`Вход`,-1),y(i.AgentCodeBlock,{text:i.view.input,diff:i.view.diff},null,8,[`text`,`diff`])],64)):D(`v-if`,!0),n[15]||=I(`div`,{class:`io-label`},`Результат`,-1),y(i.AgentCodeBlock,{text:i.view.result||(i.view.running?`Ожидание результата…`:`Без вывода`)},null,8,[`text`])],64))],512),r.tool.children?.length?(K(),U(`div`,ND,[I(`div`,PD,`Вызовы субагента: `+X(r.tool.children.length),1),(K(!0),U(P,null,S(r.tool.children,e=>(K(),F(s,{key:e.id,tool:e,root:r.root,onOpen:n[4]||=e=>i.emit(`open`,e)},null,8,[`tool`,`root`]))),128))])):D(`v-if`,!0)],42,yD),i.preview?(K(),F(i.ImageModal,{key:0,src:i.preview.src,alt:i.preview.alt,onClose:n[5]||=e=>i.preview=void 0},null,8,[`src`,`alt`])):D(`v-if`,!0)],64)}var ID=H(vD,[[`render`,FD],[`__scopeId`,`data-v-11c5508e`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentToolCall.vue`]]),LD=W({__name:`AgentActivity`,props:{tools:{type:Array,required:!0},root:{type:String,required:!1}},emits:[`open`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=B(()=>r.tools.findLast(e=>e.status===`running`)),o=B(()=>a.value?.output??``),s=B(()=>o.value.split(`
|
|
68
|
-
`).slice(-6).filter((e,t,n)=>e||t<n.length-1).join(`
|
|
69
|
-
`)),c=B(()=>r.tools.some(e=>e.status===`error`)),l=B(()=>{let e=a.value;if(!e)return``;let t=e.input??e.detail;return pS(e.name,t)?``:iS(t)}),u=Nx(),d={props:r,emit:i,current:a,live:o,tail:s,failed:c,hint:l,now:u,currentTime:B(()=>{let e=a.value;return!e||e.startedAt===void 0?``:kx(u.value-e.startedAt)}),title:B(()=>{if(a.value)return mS(a.value.name,a.value.input??a.value.detail);let e=new Set(r.tools.map(e=>e.name)),t=r.tools[0];return e.size===1?`${mS(t.name,t.input??t.detail)} ×${r.tools.length}`:`Действия`}),UiDisclosureSummary:Ey,AgentCodeBlock:eD,AgentStatusIcon:oD,AgentToolCall:ID,get IconChevron(){return Ch}};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),RD={key:0,class:`activity single`},zD=[`title`],BD=[`title`],VD=[`title`],HD={key:2,class:`count`},UD={class:`activity-list`};function WD(t,n,r,i,a,o){return r.tools.length===1?(K(),U(`div`,RD,[y(i.AgentToolCall,{tool:r.tools[0],root:r.root,onOpen:n[0]||=e=>i.emit(`open`,e)},null,8,[`tool`,`root`])])):(K(),U(`details`,{key:1,class:Y([`activity`,{working:i.current,failed:i.failed}])},[y(i.UiDisclosureSummary,{variant:`fit`,class:`activity-summary`},{default:e(()=>[y(i.AgentStatusIcon,{status:i.current?`running`:i.failed?`error`:`done`},null,8,[`status`]),I(`span`,{class:`activity-title u-truncate`,title:i.title},X(i.title),9,zD),i.current?(K(),U(`span`,{key:0,class:`tool-hint u-truncate`,title:i.hint},X(i.hint),9,BD)):D(`v-if`,!0),i.currentTime?(K(),U(`span`,{key:1,class:`tool-time`,title:`Выполняется ${i.currentTime}`},X(i.currentTime),9,VD)):D(`v-if`,!0),i.current||i.title===`Действия`?(K(),U(`span`,HD,X(r.tools.length),1)):D(`v-if`,!0),y(i.IconChevron,{class:`group-chevron`,"aria-hidden":`true`})]),_:1}),i.tail?(K(),F(i.AgentCodeBlock,{key:0,text:i.tail},null,8,[`text`])):D(`v-if`,!0),I(`div`,UD,[(K(!0),U(P,null,S(r.tools,e=>(K(),F(i.AgentToolCall,{key:e.id,tool:e,root:r.root,onOpen:n[1]||=e=>i.emit(`open`,e)},null,8,[`tool`,`root`]))),128))])],2))}var GD=H(LD,[[`render`,WD],[`__scopeId`,`data-v-a5d11392`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentActivity.vue`]]),KD={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function qD(e,t){return K(),U(`svg`,KD,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2zm3-12h6m-3 3V7M9 17h6`},null,-1)]])}var JD=L({name:`lucide-file-diff`,render:qD}),YD={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function XD(e,t){return K(),U(`svg`,YD,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M9 14L4 9l5-5`}),I(`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`})],-1)]])}var ZD=L({name:`lucide-undo-2`,render:XD}),QD=W({__name:`AgentChanges`,props:{tools:{type:Array,required:!0},root:{type:String,required:!0},canRevert:{type:Boolean,required:!0}},emits:[`open`,`revert`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=B(()=>TS(r.tools,r.root)),o={props:r,emit:i,changes:a,totals:B(()=>({added:a.value.reduce((e,t)=>e+t.added,0),removed:a.value.reduce((e,t)=>e+t.removed,0)})),UiDisclosureSummary:Ey,UiButton:q,get IconFileDiff(){return JD},get IconUndo(){return ZD}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),$D={key:0,class:`changes`},eO={class:`added`},tO={class:`removed`},nO=[`title`,`onClick`],rO={class:`added`},iO={class:`removed`};function aO(t,n,r,i,a,o){return i.changes.length?(K(),U(`details`,$D,[y(i.UiDisclosureSummary,null,{default:e(()=>[y(i.IconFileDiff,{"aria-hidden":`true`}),I(`span`,null,`Изменено файлов: `+X(i.changes.length),1),I(`span`,eO,`+`+X(i.totals.added),1),I(`span`,tO,`−`+X(i.totals.removed),1)]),_:1}),I(`ul`,null,[(K(!0),U(P,null,S(i.changes,e=>(K(),U(`li`,{key:e.path},[I(`button`,{type:`button`,class:`file u-truncate`,title:e.path,onClick:t=>i.emit(`open`,e.path)},X(e.path),9,nO),I(`span`,rO,`+`+X(e.added),1),I(`span`,iO,`−`+X(e.removed),1)]))),128))]),r.canRevert?(K(),F(i.UiButton,{key:0,size:`sm`,title:`Вернуть файлы к состоянию до этого запроса`,onClick:n[0]||=e=>i.emit(`revert`)},{default:e(()=>[y(i.IconUndo,{"aria-hidden":`true`}),n[1]||=G(`Вернуть файлы `,-1)]),_:1})):D(`v-if`,!0)])):D(`v-if`,!0)}var oO=H(QD,[[`render`,aO],[`__scopeId`,`data-v-88a55764`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentChanges.vue`]]),sO=W({__name:`AgentFormPanel`,props:{source:{type:String,required:!0},values:{type:null,required:!1},readonly:{type:Boolean,required:!1},composer:{type:Boolean,required:!1},projectId:{type:String,required:!1}},emits:[`submit`,`submittable`],setup(e,{expose:t,emit:r}){let i=e,a=r,o=B(()=>i.readonly===!0),s=new Set;n(yy,{composer:i.composer===!0,registerSubmit(e){return s.add(e),a(`submittable`,!0),()=>{s.delete(e),a(`submittable`,s.size>0)}}});function c(){for(let e of s)if(e()===!0)return!0;return!1}t({submit:c});let l=B(()=>i.values&&typeof i.values==`object`?i.values:{});n(vy,{readonly:o,values:l.value}),n(bv,((e,t,n)=>a(`submit`,e,t,n)));let u={props:i,emit:a,readonly:o,submitters:s,submit:c,seeded:l,get AgentWidget(){return ey}};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});function cO(e,t,n,r,i,a){return K(),F(r.AgentWidget,{source:n.source,complete:!0,"project-id":n.projectId},null,8,[`source`,`project-id`])}var lO=H(sO,[[`render`,cO],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentFormPanel.vue`]]),uO=W({__name:`AgentFormAnswer`,props:{source:{type:String,required:!0},values:{type:null,required:!0},busy:{type:Boolean,required:!1},projectId:{type:String,required:!1}},emits:[`submit`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=M(!1),o=B(()=>!a.value||r.busy===!0);function s(){r.busy||(a.value=!0)}function c(){a.value=!1}function l(e,t,n){a.value=!1,i(`submit`,e,t,n)}t({start:s,cancel:c});let u={props:r,emit:i,editing:a,readonly:o,start:s,cancel:c,submit:l,UiButton:q,AgentFormPanel:lO};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}}),dO={key:0,class:`edit-bar`};function fO(t,n,r,i,a,o){return K(),U(`div`,{class:Y([`answer-form`,{editing:i.editing}])},[y(i.AgentFormPanel,{source:r.source,values:r.values,readonly:i.readonly,"project-id":r.projectId,onSubmit:i.submit},null,8,[`source`,`values`,`readonly`,`project-id`]),i.editing?(K(),U(`div`,dO,[n[1]||=I(`span`,null,`Измените ответ и нажмите кнопку в форме.`,-1),y(i.UiButton,{size:`sm`,onClick:i.cancel},{default:e(()=>[...n[0]||=[G(`Отмена`,-1)]]),_:1})])):D(`v-if`,!0)],2)}var pO=H(uO,[[`render`,fO],[`__scopeId`,`data-v-f1dc5e35`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentFormAnswer.vue`]]),mO=W({__name:`AgentJudgeNote`,props:{tool:{type:String,required:!0},title:{type:String,required:!1},verdict:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r={props:n,tone:B(()=>zre(n.verdict.score)),name:B(()=>n.title?.trim()||n.tool),UiBadge:kd};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),hO={class:`judge-note`},gO={class:`judge-text`};function _O(t,n,r,i,a,o){return K(),U(`p`,hO,[n[0]||=I(`span`,{class:`judge-name`},`Судья`,-1),y(i.UiBadge,{tone:i.tone},{default:e(()=>[G(X(r.verdict.score)+`/5 · `+X(r.verdict.label),1)]),_:1},8,[`tone`]),I(`span`,gO,[I(`strong`,null,X(i.name),1),G(` — `+X(r.verdict.reason)+`. Разрешено автоматически. `,1)])])}var vO=H(mO,[[`render`,_O],[`__scopeId`,`data-v-29290ca8`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentJudgeNote.vue`]]),yO={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bO(e,t){return K(),U(`svg`,yO,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M3 12a9 9 0 0 1 9-9a9.75 9.75 0 0 1 6.74 2.74L21 8`}),I(`path`,{d:`M21 3v5h-5m5 4a9 9 0 0 1-9 9a9.75 9.75 0 0 1-6.74-2.74L3 16`}),I(`path`,{d:`M8 16H3v5`})],-1)]])}var xO=L({name:`lucide-refresh-cw`,render:bO}),SO={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function CO(e,t){return K(),U(`svg`,SO,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2m10 0h2a2 2 0 0 1 2 2v2m0 10v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2`}),I(`circle`,{cx:`12`,cy:`12`,r:`1`}),I(`path`,{d:`M18.944 12.33a1 1 0 0 0 0-.66a7.5 7.5 0 0 0-13.888 0a1 1 0 0 0 0 .66a7.5 7.5 0 0 0 13.888 0`})],-1)]])}var wO=L({name:`lucide-scan-eye`,render:CO}),TO={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function EO(e,t){return K(),U(`svg`,TO,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M10 2h4m-2 12l3-3`}),I(`circle`,{cx:`12`,cy:`14`,r:`8`})],-1)]])}var DO=L({name:`lucide-timer`,render:EO}),OO=W({__name:`AgentLens`,props:{lens:{type:null,required:!0}},setup(e,{expose:t}){t();let n=e,r=Nx(),i={props:n,now:r,ago:B(()=>n.lens.state.at?`${kx(r.value-n.lens.state.at)} назад`:``),stamp:B(()=>n.lens.state.at?new Date(n.lens.state.at).toLocaleTimeString(`ru`):``),UiButton:q,UiSpinner:De,get IconRefresh(){return xO},get IconScanEye(){return wO},get IconTimer(){return DO},get IconX(){return Cn}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),kO={class:`lens`,"aria-label":`Lens: чем агент занят сейчас`},AO={class:`lens-head`},jO=[`title`],MO={key:0,class:`lens-text error`,role:`status`},NO={key:1,class:`lens-text`},PO={key:2,class:`lens-text empty`};function FO(t,n,r,i,a,o){return K(),U(`section`,kO,[I(`div`,AO,[y(i.IconScanEye,{class:`lens-icon`,"aria-hidden":`true`}),n[3]||=I(`span`,{class:`lens-title`},`Lens`,-1),r.lens.state.busy?(K(),F(i.UiSpinner,{key:0})):i.ago?(K(),U(`time`,{key:1,class:`lens-time`,title:i.stamp},X(i.ago),9,jO)):D(`v-if`,!0),y(i.UiButton,{shape:`icon`,size:`sm`,disabled:r.lens.state.busy,title:`Обновить описание`,"aria-label":`Обновить описание`,onClick:n[0]||=e=>r.lens.refresh()},{default:e(()=>[y(i.IconRefresh,{"aria-hidden":`true`})]),_:1},8,[`disabled`]),y(i.UiButton,{shape:`icon`,size:`sm`,class:Y({on:r.lens.state.auto}),"aria-pressed":r.lens.state.auto,title:`Обновлять по таймеру, пока агент работает`,"aria-label":`Автообновление Lens`,onClick:n[1]||=e=>r.lens.setAuto(!r.lens.state.auto)},{default:e(()=>[y(i.IconTimer,{"aria-hidden":`true`})]),_:1},8,[`class`,`aria-pressed`]),y(i.UiButton,{shape:`icon`,size:`sm`,title:`Скрыть Lens`,"aria-label":`Скрыть Lens`,onClick:n[2]||=e=>r.lens.close()},{default:e(()=>[y(i.IconX,{"aria-hidden":`true`})]),_:1})]),r.lens.state.error?(K(),U(`p`,MO,X(r.lens.state.error),1)):r.lens.state.text?(K(),U(`p`,NO,X(r.lens.state.text),1)):(K(),U(`p`,PO,X(r.lens.state.busy?`Смотрю, чем занят агент…`:`Обновите, чтобы узнать, чем занят агент.`),1))])}var IO=H(OO,[[`render`,FO],[`__scopeId`,`data-v-16487872`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentLens.vue`]]);function LO(e){let t=document.createElement(`a`);t.href=e,t.target=`_blank`,t.rel=`noopener noreferrer`,document.body.append(t),t.click(),t.remove()}var RO=W({__name:`AgentMarkdown`,props:{text:{type:String,required:!0},streaming:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n=e,r=z(RS,``),i=z(zS,void 0),a=jE(e=>OE(e,{resolveImage:e=>LS(e,r)})),o=M(),s=ee(a.update(n.text)),c=M(),l=M(),u=new Set,d=M(),f=M([]),m,h=0;function _(){clearTimeout(m),m=void 0;let e=performance.now();s.value=a.update(n.text);let t=performance.now();h=t+(t-e)*3}E(()=>[n.text,n.streaming],([,e])=>{let t=h-performance.now();!e||t<=0?_():m??=setTimeout(_,t)});function v(){for(let e of u)e.destroy();u.clear()}E(s,async()=>{v(),await p();for(let e of o.value?.querySelectorAll(`.md-mermaid`)??[]){let t=e.textContent??``,n=bn(t,{expand:()=>l.value=t});u.add(n),e.replaceWith(n.element)}},{flush:`post`,immediate:!0}),g(()=>{clearTimeout(m),v()});function y(e){if(!(e.target instanceof Element))return;let t=e.target.closest(`.md img`);if(!(t instanceof HTMLImageElement)||t.closest(`a`))return;let n=t.currentSrc||t.src;n&&(e.preventDefault(),c.value={src:n,alt:t.alt})}function b(e){if(!(e.target instanceof HTMLImageElement))return;let t=e.target,n=t.currentSrc||t.src,r=document.createElement(`a`);r.className=`md-image-text`,r.textContent=t.alt||`Изображение`,n&&(r.href=n),r.target=`_blank`,r.rel=`noopener noreferrer`,t.replaceWith(r)}function x(e){if(e instanceof Element)return e.closest(`.md a[href], .md a[data-chat-file]`)??void 0}function S(e){return e.dataset.chatFile||e.getAttribute(`href`)||``}function C(e){if(e.button!==0||e.defaultPrevented)return;let t=x(e.target);if(!t)return;let n=Jb(S(t));n.kind===`file`&&(e.preventDefault(),i&&i.openFile(n,t))}function w(e){y(e),C(e)}function T(e,t){if(e.kind===`web`)return[{id:`link.open`,label:`Открыть в новой вкладке`,icon:Fn,run:()=>LO(e.href)},{id:`link.copyAddress`,label:`Копировать адрес ссылки`,icon:Oy,run:()=>void i?.copyAddress(e.href,t)}];if(e.kind!==`file`)return[];let n=[{id:`link.openFile`,label:`Открыть файл`,icon:mD,run:()=>void i?.openFile(e,t)},{id:`link.copyAbsolute`,label:`Копировать абсолютный путь`,icon:Oy,separator:!0,run:()=>void i?.copyAbsolute(e,t)}];return e.external||n.push({id:`link.copyRelative`,label:`Копировать относительный путь`,icon:Oy,run:()=>void i?.copyRelative(e,t)}),n}function D(e){let t=x(e.target);if(!t)return;let n=T(Jb(S(t)),t);n.length&&(e.preventDefault(),f.value=n,p(()=>d.value?.open(e,t)))}let O={props:n,projectId:r,linkActions:i,stream:a,root:o,blocks:s,preview:c,mermaidPreview:l,diagrams:u,linkMenu:d,linkMenuItems:f,get timer(){return m},set timer(e){m=e},get pausedUntil(){return h},set pausedUntil(e){h=e},render:_,destroyDiagrams:v,openImage:y,replaceBrokenImage:b,linkAt:x,linkHref:S,followLink:C,handleClick:w,menuItems:T,openLinkMenu:D,ContextMenu:ih,ImageModal:dn,get MermaidModal(){return vn}};return Object.defineProperty(O,"__isScriptSetup",{enumerable:!1,value:!0}),O}}),zO=[`innerHTML`];function BO(e,t,n,r,i,a){return K(),U(P,null,[I(`div`,{ref:`root`,class:`md`,onClick:r.handleClick,onContextmenu:r.openLinkMenu,onErrorCapture:r.replaceBrokenImage},[(K(!0),U(P,null,S(r.blocks,e=>(K(),U(`div`,{key:e.key,class:`md-block`,innerHTML:e.html},null,8,zO))),128))],544),r.preview?(K(),F(r.ImageModal,{key:0,src:r.preview.src,alt:r.preview.alt,onClose:t[0]||=e=>r.preview=void 0},null,8,[`src`,`alt`])):D(`v-if`,!0),r.mermaidPreview===void 0?D(`v-if`,!0):(K(),F(r.MermaidModal,{key:1,source:r.mermaidPreview,onClose:t[1]||=e=>r.mermaidPreview=void 0},null,8,[`source`])),r.linkMenuItems.length?(K(),F(r.ContextMenu,{key:2,ref:`linkMenu`,items:r.linkMenuItems,label:`Ссылка`},null,8,[`items`])):D(`v-if`,!0)],64)}var VO=H(RO,[[`render`,BO],[`__scopeId`,`data-v-0f8982f1`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentMarkdown.vue`]]),HO=W({__name:`AgentMessage`,props:{text:{type:String,required:!0},streaming:{type:Boolean,required:!1},promoted:{type:String,required:!1},answered:{type:Boolean,required:!1},projectId:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e;E(()=>n.projectId,e=>void _y(e),{immediate:!0});let r=B(()=>(Vv.value,sy(n.text,{known:e=>qv(e,n.projectId),streaming:n.streaming}))),i=M([]);Ev(r,ne(()=>!n.streaming),i);let a={props:n,parts:r,scriptErrors:i,AgentMarkdown:VO,get AgentWidget(){return ey}};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),UO={class:`agent-message`},WO={key:0,class:`promoted-form`},GO={key:1,class:`promoted-form`};function KO(e,t,n,r,i,a){return K(),U(`div`,UO,[(K(!0),U(P,null,S(r.parts,(e,i)=>(K(),U(P,{key:i},[e.type===`markdown`?(K(),F(r.AgentMarkdown,{key:0,text:e.text,streaming:n.streaming},null,8,[`text`,`streaming`])):e.type===`widget`&&e.source===n.promoted?(K(),U(P,{key:1},[D(` A sent form lives in the user's snapshot; the active one lives in the composer. `),n.answered&&e.name!==`IntelligentForm`?(K(),U(`p`,WO,[...t[0]||=[I(`span`,{"aria-hidden":`true`},`✓`,-1),G(` Ответ отправлен в форме. `,-1)]])):!n.answered&&e.name!==`IntelligentForm`?(K(),U(`p`,GO,[...t[1]||=[I(`span`,{"aria-hidden":`true`},`↓`,-1),G(` Форма доступна в поле ввода. `,-1)]])):D(`v-if`,!0)],64)):e.type===`widget`?(K(),F(r.AgentWidget,{key:2,source:e.source,complete:e.complete,"project-id":n.projectId},null,8,[`source`,`complete`,`project-id`])):D(`v-if`,!0)],64))),128)),(K(!0),U(P,null,S(r.scriptErrors,e=>(K(),U(`p`,{key:e,class:`script-error`,role:`alert`},X(e),1))),128))])}var qO=H(HO,[[`render`,KO],[`__scopeId`,`data-v-ccc694fc`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentMessage.vue`]]),JO={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function YO(e,t){return K(),U(`svg`,JO,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`},null,-1)]])}var XO=L({name:`lucide-shield`,render:YO}),ZO={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function QO(e,t){return K(),U(`svg`,ZO,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1zm-8-5v4m0 4h.01`},null,-1)]])}var $O=L({name:`lucide-shield-alert`,render:QO}),ek={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function tk(e,t){return K(),U(`svg`,ek,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`}),I(`path`,{d:`m9 12l2 2l4-4`})],-1)]])}var nk=L({name:`lucide-shield-check`,render:tk}),rk={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function ik(e,t){return K(),U(`svg`,rk,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1zm-5.5-3.5l-5 5m0-5l5 5`},null,-1)]])}var ak=L({name:`lucide-shield-x`,render:ik}),ok=W({__name:`AgentPermissions`,props:{permissions:{type:Array,required:!0}},emits:[`decide`],setup(e,{expose:t,emit:n}){t();let r={emit:n,UiCard:je,UiInline:Be,UiButton:q,get canRememberPermission(){return PE},get permissionRiskClass(){return ME},get permissionTone(){return NE},get isEditTool(){return sS},AgentCodeBlock:eD,get IconShield(){return XO},get IconShieldAlert(){return $O},get IconShieldCheck(){return nk},get IconShieldX(){return ak}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),sk={key:0,class:`permissions`,role:`alertdialog`,"aria-label":`Запрос разрешения`},ck={class:`head`},lk=[`aria-label`,`title`],uk={key:4,class:`risk-score`},dk={class:`head-text`},fk={class:`title-row`},pk=[`title`],mk={class:`tool`},hk={key:0,class:`judge-copy`,role:`note`},gk={key:0};function _k(t,n,r,i,a,o){return r.permissions.length?(K(),U(`div`,sk,[(K(!0),U(P,null,S(r.permissions,t=>(K(),F(i.UiCard,{key:t.id,class:Y([`permission`,i.permissionRiskClass(t.judge)]),tone:i.permissionTone(t.judge),density:`notice`},{default:e(()=>[I(`div`,ck,[I(`div`,{class:Y([`risk-box`,i.permissionRiskClass(t.judge)]),"aria-label":t.judge?`Риск ${t.judge.score} из 5: ${t.judge.label}`:`Оценка риска недоступна`,title:t.judge?`Риск ${t.judge.score}/5 · ${t.judge.label}`:void 0},[t.judge&&t.judge.score<=2?(K(),F(i.IconShieldCheck,{key:0,"aria-hidden":`true`})):t.judge&&t.judge.score===3?(K(),F(i.IconShieldAlert,{key:1,"aria-hidden":`true`})):t.judge?(K(),F(i.IconShieldX,{key:2,"aria-hidden":`true`})):(K(),F(i.IconShield,{key:3,"aria-hidden":`true`})),t.judge?(K(),U(`span`,uk,X(t.judge.score)+`/5`,1)):D(`v-if`,!0)],10,lk),I(`div`,dk,[I(`div`,fk,[I(`span`,{class:`title`,title:t.title},X(t.title),9,pk),I(`code`,mk,X(t.tool),1)]),t.judge?(K(),U(`div`,hk,[I(`p`,null,[n[0]||=I(`span`,{class:`judge-label`},`Почему`,-1),G(` `+X(t.judge.reason),1)]),t.judge.effect?(K(),U(`p`,gk,[n[1]||=I(`span`,{class:`judge-label`},`Что изменится`,-1),G(` `+X(t.judge.effect),1)])):D(`v-if`,!0)])):D(`v-if`,!0)])]),t.detail?(K(),F(i.AgentCodeBlock,{key:0,class:`command`,text:t.detail,diff:i.isEditTool(t.tool)},null,8,[`text`,`diff`])):D(`v-if`,!0),y(i.UiInline,{align:`stretch`},{default:e(()=>[y(i.UiButton,{appearance:`solid`,size:`sm`,onClick:e=>i.emit(`decide`,t.id,!0)},{default:e(()=>[...n[2]||=[G(` Разрешить `,-1)]]),_:1},8,[`onClick`]),i.canRememberPermission(t)?(K(),F(i.UiButton,{key:0,size:`sm`,title:`Разрешить и больше не спрашивать про этот инструмент`,onClick:e=>i.emit(`decide`,t.id,!0,!0)},{default:e(()=>[...n[3]||=[G(` Всегда разрешать `,-1)]]),_:1},8,[`onClick`])):D(`v-if`,!0),y(i.UiButton,{size:`sm`,onClick:e=>i.emit(`decide`,t.id,!1)},{default:e(()=>[...n[4]||=[G(` Отклонить `,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1032,[`class`,`tone`]))),128))])):D(`v-if`,!0)}var vk=H(ok,[[`render`,_k],[`__scopeId`,`data-v-78732bb7`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentPermissions.vue`]]),yk={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bk(e,t){return K(),U(`svg`,yk,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092a10 10 0 1 0-4.777-4.719`}),I(`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3m.08 4h.01`})],-1)]])}var xk=L({name:`lucide-message-circle-question`,render:bk}),Sk=W({__name:`AgentQuestions`,props:{requests:{type:Array,required:!0}},emits:[`answer`],setup(e,{expose:t,emit:n}){t();let r=n,i=de({}),a=de({}),o=(e,t)=>`${e}\n${t}`;function s(e,t,n){let r=o(e,t.id),a=i[r]??[];t.multiple?i[r]=a.includes(n)?a.filter(e=>e!==n):[...a,n]:i[r]=a[0]===n?[]:[n]}function c(e){let t={};for(let n of e.questions){let r=o(e.id,n.id),s=(a[r]??``).trim(),c=[...i[r]??[],...s?[s]:[]];t[n.id]=!n.multiple&&s?[s]:c}return t}let l=e=>{let t=c(e);return e.questions.every(e=>e.optional||t[e.id].length>0)};function u(e){l(e)&&r(`answer`,e.id,c(e))}let d={emit:r,chosen:i,written:a,key:o,toggle:s,answersOf:c,complete:l,submit:u,UiCard:je,UiInline:Be,UiButton:q,get IconHelp(){return xk}};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),Ck={key:0,class:`questions`,role:`dialog`,"aria-label":`Вопрос агента`},wk={class:`title`},Tk={key:0,class:`header`},Ek=[`type`,`name`,`checked`,`onClick`],Dk={class:`label`},Ok={key:0},kk=[`onUpdate:modelValue`,`onKeydown`];function Ak(t,n,r,i,a,o){return r.requests.length?(K(),U(`div`,Ck,[(K(!0),U(P,null,S(r.requests,t=>(K(),F(i.UiCard,{key:t.id,as:`section`,tone:`warning`,density:`notice`,class:`question`},{default:e(()=>[y(i.UiInline,{as:`header`,align:`center`,justify:`normal`},{default:e(()=>[y(i.IconHelp,{"aria-hidden":`true`}),I(`span`,wk,X(t.title||`Агент спрашивает`),1)]),_:2},1024),(K(!0),U(P,null,S(t.questions,e=>(K(),U(`fieldset`,{key:e.id},[I(`legend`,null,[e.header?(K(),U(`span`,Tk,X(e.header),1)):D(`v-if`,!0),G(` `+X(e.question),1)]),(K(!0),U(P,null,S(e.options,n=>(K(),U(`label`,{key:n.id,class:`option`},[I(`input`,{type:e.multiple?`checkbox`:`radio`,name:`${t.id}-${e.id}`,checked:(i.chosen[i.key(t.id,e.id)]??[]).includes(n.id),onClick:r=>i.toggle(t.id,e,n.id)},null,8,Ek),I(`span`,Dk,[G(X(n.label)+` `,1),n.description?(K(),U(`small`,Ok,X(n.description),1)):D(`v-if`,!0)])]))),128)),t.custom||e.custom?te((K(),U(`input`,{key:0,"onUpdate:modelValue":n=>i.written[i.key(t.id,e.id)]=n,class:`own`,type:`text`,placeholder:`Свой вариант`,"aria-label":`Свой вариант ответа`,onKeydown:ye(N(e=>i.submit(t),[`prevent`]),[`enter`])},null,40,kk)),[[j,i.written[i.key(t.id,e.id)]]]):D(`v-if`,!0)]))),128)),y(i.UiInline,{align:`stretch`},{default:e(()=>[y(i.UiButton,{appearance:`solid`,disabled:!i.complete(t),onClick:e=>i.submit(t)},{default:e(()=>[...n[0]||=[G(` Ответить `,-1)]]),_:1},8,[`disabled`,`onClick`]),y(i.UiButton,{onClick:e=>i.emit(`answer`,t.id,null)},{default:e(()=>[...n[1]||=[G(` Пропустить `,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1024))),128))])):D(`v-if`,!0)}var jk=H(Sk,[[`render`,Ak],[`__scopeId`,`data-v-96fa4fb9`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentQuestions.vue`]]),Mk=W({__name:`AgentTaskFrame`,props:{title:{type:String,required:!0},hint:{type:String,required:!1,default:``},meta:{type:String,required:!0},running:{type:Boolean,required:!1},kind:{type:String,required:!1},label:{type:String,required:!0}},setup(e,{expose:t}){t();let n={UiSpinner:De,get IconBot(){return cE},get IconTerminal(){return dD}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Nk=[`aria-label`],Pk={class:`head`},Fk={class:`titles`},Ik=[`title`],Lk={class:`meta`};function Rk(e,t,n,r,i,a){return K(),U(`section`,{class:`task-frame`,"aria-label":n.label},[I(`header`,Pk,[c(e.$slots,`leading`,{},void 0,!0),(K(),F(C(n.kind===`shell`?r.IconTerminal:r.IconBot),{class:`kind`,"aria-hidden":`true`})),I(`div`,Fk,[I(`div`,{class:`title u-truncate`,title:n.hint||n.title},X(n.title),9,Ik),I(`div`,Lk,[n.running?(K(),F(r.UiSpinner,{key:0})):D(`v-if`,!0),G(X(n.meta),1)])]),c(e.$slots,`actions`,{},void 0,!0)]),c(e.$slots,`default`,{},void 0,!0)],8,Nk)}var zk=H(Mk,[[`render`,Rk],[`__scopeId`,`data-v-1754c3d9`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentTaskFrame.vue`]]),Bk={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Vk(e,t){return K(),U(`svg`,Bk,[...t[0]||=[A(`<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M12 18V5m3 8a4.17 4.17 0 0 1-3-4a4.17 4.17 0 0 1-3 4m8.598-6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"></path><path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"></path><path d="M18 18a4 4 0 0 0 2-7.464"></path><path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"></path><path d="M6 18a4 4 0 0 1-2-7.464"></path><path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"></path></g>`,1)]])}var Hk=L({name:`lucide-brain`,render:Vk}),Uk=W({__name:`AgentThought`,props:{text:{type:String,required:!0},streaming:{type:Boolean,required:!0}},setup(e,{expose:t}){t();let n=e,r=M();E(()=>n.text,async()=>{n.streaming&&(await p(),r.value&&(r.value.scrollTop=r.value.scrollHeight))});let i={props:n,body:r,UiDisclosureSummary:Ey,UiSpinner:De,get IconBrain(){return Hk},get IconChevron(){return Ch}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),Wk=[`open`];function Gk(t,n,r,i,a,o){return K(),U(`details`,{class:`thought`,open:r.streaming||void 0},[y(i.UiDisclosureSummary,{variant:`fit`,class:`thought-summary`},{default:e(()=>[r.streaming?(K(),F(i.UiSpinner,{key:0})):(K(),F(i.IconBrain,{key:1,class:`thought-icon`,"aria-hidden":`true`})),I(`span`,null,X(r.streaming?`Думает…`:`Рассуждения`),1),y(i.IconChevron,{class:`thought-chevron`,"aria-hidden":`true`})]),_:1}),I(`div`,{ref:`body`,class:`thought-text`},X(r.text),513)],8,Wk)}var Kk=H(Uk,[[`render`,Gk],[`__scopeId`,`data-v-25e08ac8`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentThought.vue`]]),qk=W({__name:`AgentWorkBody`,props:{items:{type:Array,required:!0},thinking:{type:Boolean,required:!1},root:{type:String,required:!1}},emits:[`open`],setup(e,{expose:t,emit:n}){t();let r={emit:n,AgentActivity:GD,AgentJudgeNote:vO,AgentThought:Kk};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function Jk(e,t,n,r,i,a){return K(!0),U(P,null,S(n.items,e=>(K(),U(P,{key:e.key},[e.type===`thought`?(K(),F(r.AgentThought,{key:0,text:e.text,streaming:n.thinking===!0&&e===n.items.at(-1)},null,8,[`text`,`streaming`])):e.type===`judge`?(K(),F(r.AgentJudgeNote,{key:1,tool:e.tool,title:e.title,verdict:e.verdict},null,8,[`tool`,`title`,`verdict`])):(K(),F(r.AgentActivity,{key:2,tools:e.tools,root:n.root,onOpen:t[0]||=e=>r.emit(`open`,e)},null,8,[`tools`,`root`]))],64))),128)}var Yk=H(qk,[[`render`,Jk],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentWorkBody.vue`]]),Xk=W({__name:`AgentWork`,props:{items:{type:Array,required:!0},busy:{type:Boolean,required:!0},last:{type:Boolean,required:!0},current:{type:Boolean,required:!1},anyRunning:{type:Boolean,required:!1},root:{type:String,required:!1},lens:{type:null,required:!1}},emits:[`open`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=Pf(),o=Ff({anchor:`left`,initialFocus:`.work-sheet-title`,items:`[data-work-nav]`,returnFocus:`.work-summary`}),s=M();function c(e){s.value=e??void 0,o.trigger.value=s.value}let l=jf(s),u=M(!1);E(l,e=>{e||o.close(!1)}),E(a,()=>{o.close(!1),u.value=!1}),yf(window,`keydown`,e=>{e.key===`Escape`&&o.open.value&&(e.preventDefault(),o.close())});let d=e=>{let t=e.target;a.value?t.open=!1:u.value=t.open};function f(e){a.value&&(e.preventDefault(),o.toggle())}function p(e){o.close(!1),i(`open`,e)}let m=B(()=>r.items.flatMap(e=>e.type===`tools`?e.tools:[]).findLast(e=>e.status===`running`)),h=B(()=>r.busy&&r.last),g=B(()=>h.value&&r.current===!0&&!m.value&&r.anyRunning!==!0),_=B(()=>h.value&&!!(m.value||g.value)),v=B(()=>r.items.some(e=>e.type===`tools`&&e.tools.some(e=>e.status===`error`))),y=B(()=>m.value?mS(m.value.name,m.value.input??m.value.detail):g.value?`Думает…`:``),b=B(()=>{let e=m.value;if(!e)return``;let t=e.input??e.detail;return pS(e.name,t)?``:iS(t)}),x=B(()=>[y.value,b.value].filter(Boolean).join(` `)),S=Nx(),C={props:r,emit:i,compact:a,menu:o,work:s,bindWork:c,visible:l,open:u,toggle:d,summaryClick:f,openFromIsland:p,running:m,active:h,thinking:g,live:_,failed:v,step:y,hint:b,title:x,now:S,elapsed:B(()=>{let e=m.value;return!h.value||!e||e.startedAt===void 0?``:kx(S.value-e.startedAt)}),UiDisclosureSummary:Ey,UiIsland:Yd,UiIslandHeader:Cd,AgentLensPanel:IO,AgentWorkBody:Yk,get IconAlert(){return Ly},get IconCheck(){return Iy},get IconChevron(){return Ch},UiSpinner:De};return Object.defineProperty(C,"__isScriptSetup",{enumerable:!1,value:!0}),C}}),Zk=[`data-compact`,`open`],Qk=[`title`],$k=[`title`],eA={key:0,class:`work-hint`},tA={key:0,class:`work-time`},nA={key:0,class:`work-head`},rA={key:1,class:`work-body`},iA={class:`work-sheet-head`},aA={key:0,class:`work-head-step`},oA={class:`work-sheet-steps`};function sA(t,n,r,i,a,o){return K(),U(P,null,[I(`details`,{ref:i.bindWork,class:Y([`work`,{"island-open":i.compact&&i.menu.open.value}]),"data-compact":i.compact?``:void 0,open:!i.compact&&i.open?!0:void 0,onToggle:i.toggle},[y(i.UiDisclosureSummary,{variant:`fit`,class:`work-summary`,onClick:i.summaryClick},{default:e(()=>[i.live?(K(),F(i.UiSpinner,{key:0})):i.failed?(K(),F(i.IconAlert,{key:1,class:`work-icon error`,"aria-hidden":`true`})):(K(),F(i.IconCheck,{key:2,class:`work-icon`,"aria-hidden":`true`})),n[6]||=I(`span`,{class:`work-title`},`Работа`,-1),!i.open&&r.lens&&r.lens.state.open&&r.lens.state.text?(K(),U(P,{key:3},[n[5]||=I(`span`,{class:`work-lens-label`},`Lens`,-1),I(`span`,{class:`work-lens u-truncate`,title:r.lens.state.text},X(r.lens.state.text),9,Qk)],64)):!i.open&&i.step?(K(),U(P,{key:4},[I(`span`,{class:`work-step u-truncate`,title:i.title},[G(X(i.step),1),i.hint?(K(),U(`span`,eA,X(` `+i.hint),1)):D(`v-if`,!0)],8,$k),i.elapsed?(K(),U(`span`,tA,X(i.elapsed),1)):D(`v-if`,!0)],64)):D(`v-if`,!0),y(i.IconChevron,{class:`work-chevron`,"aria-hidden":`true`})]),_:1}),!i.compact&&i.open&&r.lens&&r.lens.state.open?(K(),U(`div`,nA,[y(i.AgentLensPanel,{lens:r.lens},null,8,[`lens`])])):D(`v-if`,!0),!i.compact&&i.open?(K(),U(`div`,rA,[y(i.AgentWorkBody,{items:r.items,thinking:i.thinking,root:r.root,onOpen:n[0]||=e=>i.emit(`open`,e)},null,8,[`items`,`thinking`,`root`])])):D(`v-if`,!0)],42,Zk),i.compact?(K(),F(i.UiIsland,{key:0,menu:i.menu,label:`Работа`,width:420,gap:`var(--sp-2)`},{default:e(()=>[I(`div`,iA,[y(i.UiIslandHeader,{anchor:`start`,chevron:``,class:`work-sheet-title`,"aria-label":`Закрыть работу`,onClick:n[1]||=e=>i.menu.close()},{default:e(()=>[n[7]||=I(`span`,{class:`work-head-title`},`Работа`,-1),i.title?(K(),U(`span`,aA,X(i.title),1)):D(`v-if`,!0)]),_:1}),r.lens&&r.lens.state.open?(K(),F(i.AgentLensPanel,{key:0,class:`work-head-lens`,lens:r.lens},null,8,[`lens`])):D(`v-if`,!0)]),I(`div`,oA,[y(i.AgentWorkBody,{items:r.items,thinking:i.thinking,root:r.root,onOpen:i.openFromIsland},null,8,[`items`,`thinking`,`root`])])]),_:1},8,[`menu`])):D(`v-if`,!0),D(` The sheet's shadow only paints the scrim: this catches the tap so nothing opens under it. `),(K(),F(fe,{to:`body`},[i.compact&&i.menu.open.value?(K(),U(`button`,{key:0,type:`button`,class:`work-scrim`,tabindex:`-1`,"aria-label":`Закрыть работу`,onClick:n[2]||=e=>i.menu.close(!1),onTouchmove:n[3]||=N(()=>{},[`prevent`]),onWheel:n[4]||=N(()=>{},[`prevent`])},null,32)):D(`v-if`,!0)]))],64)}var cA=H(Xk,[[`render`,sA],[`__scopeId`,`data-v-424c6229`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentWork.vue`]]),lA=W({__name:`UiTooltip`,props:{delay:{type:Number,required:!1}},setup(e,{expose:t}){t();let n=e,r=V(),i=B(()=>`--tooltip-${r.replace(/\W/g,``)}`),a=w(`surface`),o;function s(e){clearTimeout(o),o=setTimeout(()=>a.value?.element?.showPopover(),e)}function c(){clearTimeout(o);let e=a.value?.element;e?.matches(`:popover-open`)&&e.hidePopover()}g(()=>clearTimeout(o));let l={props:n,id:r,anchor:i,surface:a,get timer(){return o},set timer(e){o=e},show:s,hide:c,UiPopupSurface:Fd};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}});function uA(t,n,r,i,a,o){return K(),U(`span`,{class:`tooltip-anchor`,style:Qe({anchorName:i.anchor}),onMouseenter:n[0]||=e=>i.show(i.props.delay??200),onFocusin:n[1]||=e=>i.show(0),onMouseleave:i.hide,onFocusout:i.hide,onMousedown:i.hide,onKeydown:ye(i.hide,[`esc`])},[c(t.$slots,`default`,{describedby:i.id},void 0,!0),y(i.UiPopupSurface,{id:i.id,ref:`surface`,popover:`manual`,class:`tooltip`,border:`strong`,radius:`md`,surface:`tertiary`,role:`tooltip`,style:Qe({positionAnchor:i.anchor})},{default:e(()=>[c(t.$slots,`content`,{},void 0,!0)]),_:3},8,[`id`,`style`])],36)}var dA=H(lA,[[`render`,uA],[`__scopeId`,`data-v-852bfb3a`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiTooltip.vue`]]),fA={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function pA(e,t){return K(),U(`svg`,fA,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`12`,cy:`12`,r:`10`}),I(`path`,{d:`M12 16v-4m0-4h.01`})],-1)]])}var mA=L({name:`lucide-info`,render:pA}),hA=W({__name:`AgentUsageInfo`,props:{usage:{type:Object,required:!0},chat:{type:Object,required:!1}},setup(e,{expose:t}){t();let n=e,r=new Intl.NumberFormat(`ru`),i=(e,t)=>t?`${Math.round(e/t*100)}%`:`—`;function a(e,t){let n=t.input+t.cacheRead+t.cacheWrite;return{label:e,value:`${i(t.cacheRead,n)} из кэша`,detail:`${r.format(t.cacheRead)} из ${r.format(n)}, записано ${r.format(t.cacheWrite)}, без кэша ${r.format(t.input)}`}}let o=e=>new Intl.NumberFormat(`ru`,{maximumFractionDigits:e<1?4:2}).format(e),s={props:n,number:r,percent:i,cacheRow:a,money:o,chatLine:B(()=>{let e=n.chat;if(!e)return``;let t=`Весь чат: ${r.format(e.tokens)} токенов`;return e.priced?`${t}, стоимость ${o(e.cost)}`:t}),rows:B(()=>[...n.usage.first?[a(`Первый запрос`,n.usage.first)]:[],a(`Весь ответ`,n.usage)]),UiButton:q,UiTooltip:dA,get IconInfo(){return mA}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),gA={class:`usage-label`},_A={class:`usage-value`},vA={class:`usage-detail`},yA={class:`usage-detail usage-line`},bA={key:0,class:`usage-detail usage-line`},xA={key:1,class:`usage-detail usage-line`};function SA(t,n,r,i,a,o){return K(),F(i.UiTooltip,null,{default:e(({describedby:t})=>[y(i.UiButton,{shape:`icon`,size:`sm`,"aria-label":`Токены и кэш`,"aria-describedby":t},{default:e(()=>[y(i.IconInfo,{"aria-hidden":`true`})]),_:1},8,[`aria-describedby`])]),content:e(()=>[(K(!0),U(P,null,S(i.rows,e=>(K(),U(`span`,{key:e.label,class:`usage-row`},[I(`span`,gA,X(e.label),1),I(`span`,_A,X(e.value),1),I(`span`,vA,X(e.detail),1)]))),128)),I(`span`,yA,`Выведено токенов: `+X(i.number.format(r.usage.output)),1),r.usage.cost===void 0?D(`v-if`,!0):(K(),U(`span`,bA,` Стоимость ответа: `+X(i.money(r.usage.cost)),1)),r.chat?(K(),U(`span`,xA,X(i.chatLine),1)):D(`v-if`,!0)]),_:1})}var CA=H(hA,[[`render`,SA],[`__scopeId`,`data-v-f19c97c8`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentUsageInfo.vue`]]),wA={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function TA(e,t){return K(),U(`svg`,wA,[...t[0]||=[A(`<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="12" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><circle cx="18" cy="6" r="3"></circle><path d="M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9m6 3v3"></path></g>`,1)]])}var EA=L({name:`lucide-git-fork`,render:TA}),DA={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function OA(e,t){return K(),U(`svg`,DA,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m15 18l-6-6l6-6`},null,-1)]])}var kA=L({name:`lucide-chevron-left`,render:OA}),AA=W({__name:`AgentTurn`,props:{turn:{type:Object,required:!0},chatUsage:{type:Object,required:!1},root:{type:String,required:!1},promotedForm:{type:String,required:!1},lens:{type:null,required:!1},flags:{type:Object,required:!1}},emits:[`copy`,`open`,`edit`,`formSubmit`,`rewind`,`retry`,`fork`,`continue`,`version`,`openFile`,`revert`],setup(e,{expose:t,emit:n}){t();let r=z(RS,``),i=e,a=n,o=B(()=>({busy:!1,last:!1,copied:!1,faded:!1,canRevert:!1,readonly:!1,formAnswered:!1,phase:``,...i.flags})),s=B(()=>ES(i.turn)),c=M(),l=B(()=>i.turn.form?`Изменить ответ в форме`:`Править и отправить заново`);function u(){i.turn.form?c.value?.start():a(`edit`,i.turn.id)}function d(e,t,n){a(`formSubmit`,i.turn.id,e,t,n)}let f=B(()=>i.turn.at?new Date(i.turn.at):void 0),p=B(()=>f.value?.toLocaleString(`ru`,{day:`numeric`,month:`short`,hour:`2-digit`,minute:`2-digit`})),m=B(()=>f.value?.toLocaleString(`ru`,{dateStyle:`long`,timeStyle:`medium`})),h=B(()=>{let e=[],t=new Set(i.turn.tools.map(e=>e.id)),n=new Map;for(let e of i.turn.tools)e.parent&&t.has(e.parent)&&n.set(e.parent,[...n.get(e.parent)??[],e]);let r=new Map(i.turn.tools.filter(e=>!e.parent||!t.has(e.parent)).map(e=>[e.id,{...e,children:n.get(e.id)}])),a=(t,n)=>{let r=e.at(-1);r?.type===`work`?r.items.push(n):e.push({key:`w${t}`,type:`work`,items:[n]})};for(let[t,n]of(i.turn.parts??aw(i.turn)).entries()){if(n.type===`text`){n.text.trim()&&e.push({key:`t${t}`,type:`text`,text:n.text});continue}if(n.type===`note`){e.push({key:`n${t}`,type:`note`,text:n.text});continue}if(n.type===`thought`){n.text.trim()&&a(t,{key:`r${t}`,type:`thought`,text:n.text});continue}if(n.type===`judge`){a(t,{key:`j${t}`,type:`judge`,tool:n.tool,...n.title?{title:n.title}:{},verdict:n.verdict});continue}let i=r.get(n.id);if(!i)continue;let o=e.at(-1);if(o?.type===`work`){let e=o.items.at(-1);if(e?.type===`tools`){e.tools.push(i);continue}}a(t,{key:`a${t}`,type:`tools`,tools:[i]})}return e}),g={projectId:r,props:i,emit:a,flags:o,versions:s,formAnswer:c,editTitle:l,editMessage:u,submitForm:d,written:f,stamp:p,stampFull:m,segments:h,waiting:B(()=>h.value.length===0),anyRunning:B(()=>i.turn.tools.some(e=>e.status===`running`)),currentWork:B(()=>{for(let e=h.value.length-1;e>=0;e--){let t=h.value[e];if(t.type===`text`)return``;if(t.type===`work`)return t.key}return``}),lastWork:B(()=>h.value.findLast(e=>e.type===`work`)?.key??``),UiInline:Be,UiButton:q,get chipIcon(){return mx},get chipLabel(){return gx},get chipTitle(){return _x},AgentMessage:qO,AgentFormAnswer:pO,AgentLensView:IO,AgentWork:cA,AgentChanges:oO,AgentUsageInfo:CA,get IconCopy(){return Oy},get IconCheck(){return Iy},get IconPencil(){return fm},get IconUndo(){return ZD},get IconRefresh(){return xO},get IconAlert(){return Ly},get IconGitFork(){return EA},get IconPrev(){return kA},get IconNext(){return Ch}};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}}),jA={key:0,class:`user-row`},MA=[`title`,`datetime`],NA={class:`version-count`},PA={key:1,class:`user-form`},FA=[`title`],IA={key:3,class:`user-message`},LA=[`title`,`data-chip`,`onClick`,`onKeydown`],RA=[`innerHTML`],zA={key:4,class:`injected`},BA={class:`injected-text`},VA={key:1,class:`assistant-body`},HA={key:1,class:`user-message note`},UA={key:3,class:`turn-failure`,role:`alert`},WA={class:`turn-failure-text`},GA=[`title`,`datetime`];function KA(t,n,r,i,a,o){return K(),U(`article`,{class:Y([`turn`,[r.turn.role,{faded:i.flags.faded}]])},[r.turn.role===`user`?(K(),U(`div`,jA,[i.flags.readonly?D(`v-if`,!0):(K(),F(i.UiInline,{key:0,gap:.5,justify:`normal`,class:Y([`turn-actions`,{pinned:i.versions.count>1}])},{default:e(()=>[i.stamp?(K(),U(`time`,{key:0,class:`turn-time`,title:i.stampFull,datetime:i.written?.toISOString()},X(i.stamp),9,MA)):D(`v-if`,!0),i.versions.count>1?(K(),F(i.UiInline,{key:1,as:`span`,gap:`none`,justify:`normal`,class:`versions`,role:`group`,"aria-label":`Версии`},{default:e(()=>[y(i.UiButton,{shape:`icon`,size:`sm`,title:`Предыдущая версия`,"aria-label":`Предыдущая версия`,disabled:i.flags.busy||i.versions.position===0,onClick:n[0]||=e=>i.emit(`version`,r.turn.id,i.versions.position-1)},{default:e(()=>[y(i.IconPrev,{"aria-hidden":`true`})]),_:1},8,[`disabled`]),I(`span`,NA,X(i.versions.position+1)+` / `+X(i.versions.count),1),y(i.UiButton,{shape:`icon`,size:`sm`,title:`Следующая версия`,"aria-label":`Следующая версия`,disabled:i.flags.busy||i.versions.position===i.versions.count-1,onClick:n[1]||=e=>i.emit(`version`,r.turn.id,i.versions.position+1)},{default:e(()=>[y(i.IconNext,{"aria-hidden":`true`})]),_:1},8,[`disabled`])]),_:1})):D(`v-if`,!0),y(i.UiButton,{shape:`icon`,size:`sm`,class:`turn-action`,title:i.editTitle,"aria-label":`Править сообщение`,disabled:i.flags.busy,onClick:i.editMessage},{default:e(()=>[y(i.IconPencil,{"aria-hidden":`true`})]),_:1},8,[`title`,`disabled`]),y(i.UiButton,{shape:`icon`,size:`sm`,class:`turn-action`,title:`Откатить к этому сообщению`,"aria-label":`Откатить к этому сообщению`,disabled:i.flags.busy,onClick:n[2]||=e=>i.emit(`rewind`,r.turn.id)},{default:e(()=>[y(i.IconUndo,{"aria-hidden":`true`})]),_:1},8,[`disabled`]),y(i.UiButton,{shape:`icon`,size:`sm`,class:`turn-action`,title:`Ответвить в новый чат: копия разговора до этого сообщения, текст останется в поле ввода`,"aria-label":`Ответвить в новый чат`,onClick:n[3]||=e=>i.emit(`fork`,r.turn.id,`before`)},{default:e(()=>[y(i.IconGitFork,{"aria-hidden":`true`})]),_:1})]),_:1},8,[`class`])),r.turn.form?(K(),U(`div`,PA,[y(i.AgentFormAnswer,{ref:`formAnswer`,source:r.turn.form.source,values:r.turn.form.values,busy:i.flags.busy,"project-id":i.projectId,onSubmit:i.submitForm},null,8,[`source`,`values`,`busy`,`project-id`])])):r.turn.auto?(K(),U(`p`,{key:2,class:`user-message`,title:r.turn.auto},[n[12]||=G(` Фоновое задание`,-1),r.turn.autoTitle?(K(),U(P,{key:0},[G(` «`+X(r.turn.autoTitle)+`»`,1)],64)):D(`v-if`,!0),n[13]||=G(` завершилось. Проверь результат и скажи, что изменилось. `,-1)],8,FA)):(K(),U(`p`,IA,[r.turn.content?.length?(K(!0),U(P,{key:0},S(r.turn.content,(e,t)=>(K(),U(P,{key:t},[e.type===`text`?(K(),U(P,{key:0},[G(X(e.text),1)],64)):(K(),U(`span`,{key:1,class:Y([`chip`,e.type]),title:i.chipTitle(e),"data-chip":JSON.stringify(e),role:`button`,tabindex:`0`,onClick:t=>i.emit(`open`,e),onKeydown:ye(t=>i.emit(`open`,e),[`enter`])},[I(`span`,{class:`chip-icon`,"aria-hidden":`true`,innerHTML:i.chipIcon(e)},null,8,RA),G(X(i.chipLabel(e)),1)],42,LA))],64))),128)):(K(),U(P,{key:1},[G(X(r.turn.text),1)],64))])),r.turn.injected?(K(),U(`details`,zA,[n[14]||=I(`summary`,null,`Возможности Projector`,-1),I(`pre`,BA,X(r.turn.injected),1)])):D(`v-if`,!0)])):(K(),U(`div`,VA,[(K(!0),U(P,null,S(i.segments,e=>(K(),U(P,{key:e.key},[e.type===`text`?(K(),F(i.AgentMessage,{key:0,text:e.text,streaming:i.flags.busy&&i.flags.last&&e===i.segments.at(-1),promoted:r.promotedForm,answered:i.flags.formAnswered,"project-id":i.projectId},null,8,[`text`,`streaming`,`promoted`,`answered`,`project-id`])):e.type===`note`?(K(),U(`p`,HA,X(e.text),1)):(K(),F(i.AgentWork,{key:2,items:e.items,busy:i.flags.busy,last:i.flags.last,current:e.key===i.currentWork,"any-running":i.anyRunning,root:r.root,lens:e.key===i.lastWork?r.lens:void 0,onOpen:n[4]||=e=>i.emit(`openFile`,e)},null,8,[`items`,`busy`,`last`,`current`,`any-running`,`root`,`lens`]))],64))),128)),D(` Until the first thought or call there is no work block: Lens sits by the thinking dots. `),i.waiting&&i.flags.busy&&i.flags.last&&r.lens&&r.lens.state.open?(K(),F(i.AgentLensView,{key:0,lens:r.lens,class:`early`},null,8,[`lens`])):D(`v-if`,!0),i.flags.busy&&i.flags.last&&(i.waiting||i.flags.phase===`compacting`)?(K(),F(i.UiInline,{key:1,gap:2,justify:`normal`,class:`thinking`,role:`status`},{default:e(()=>[y(i.UiInline,{as:`span`,gap:.75,align:`normal`,justify:`normal`,class:`thinking-dots`,"aria-hidden":`true`},{default:e(()=>[...n[15]||=[I(`i`,null,null,-1),I(`i`,null,null,-1),I(`i`,null,null,-1)]]),_:1}),G(` `+X(i.flags.phase===`compacting`?`Сжимаю историю`:r.turn.tools.some(e=>e.status===`running`)?`Выполняет задачу`:`Думает`),1)]),_:1})):D(`v-if`,!0),!i.flags.busy||!i.flags.last?(K(),F(i.AgentChanges,{key:2,tools:r.turn.tools,root:r.root??``,"can-revert":i.flags.canRevert===!0&&!i.flags.busy&&!i.flags.readonly,onOpen:n[5]||=e=>i.emit(`openFile`,e),onRevert:n[6]||=e=>i.emit(`revert`,r.turn.id)},null,8,[`tools`,`root`,`can-revert`])):D(`v-if`,!0),r.turn.failure?(K(),U(`div`,UA,[y(i.IconAlert,{"aria-hidden":`true`}),I(`p`,WA,X(r.turn.failure),1),i.flags.last&&!i.flags.busy&&!i.flags.readonly?(K(),F(i.UiButton,{key:0,size:`sm`,title:`Повторить запрос с начала; изменённые файлы не откатываются`,onClick:n[7]||=e=>i.emit(`retry`,r.turn.id)},{default:e(()=>[...n[16]||=[G(` Повторить `,-1)]]),_:1})):D(`v-if`,!0)])):D(`v-if`,!0),r.turn.text&&!(i.flags.busy&&i.flags.last)&&!i.flags.readonly?(K(),F(i.UiInline,{key:4,gap:.5,align:`normal`,justify:`normal`,class:`turn-footer`},{default:e(()=>[y(i.UiButton,{shape:`icon`,size:`sm`,class:`copy-button`,title:`Продолжить в новом чате: копия разговора до этого ответа`,"aria-label":`Продолжить в новом чате`,onClick:n[8]||=e=>i.emit(`fork`,r.turn.id,`after`)},{default:e(()=>[y(i.IconGitFork,{"aria-hidden":`true`})]),_:1}),y(i.UiButton,{shape:`icon`,size:`sm`,class:Y([`copy-button`,{copied:i.flags.copied}]),"aria-label":i.flags.copied?`Ответ скопирован`:`Копировать ответ`,title:i.flags.copied?`Скопировано`:`Копировать ответ`,onClick:n[9]||=e=>i.emit(`copy`,r.turn.id,r.turn.text)},{default:e(()=>[i.flags.copied?(K(),F(i.IconCheck,{key:0,"aria-hidden":`true`})):(K(),F(i.IconCopy,{key:1,"aria-hidden":`true`}))]),_:1},8,[`class`,`aria-label`,`title`]),i.flags.last&&!r.turn.failure?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,class:`copy-button`,title:`Повторить: получить другой ответ`,"aria-label":`Повторить ответ`,disabled:i.flags.busy,onClick:n[10]||=e=>i.emit(`retry`,r.turn.id)},{default:e(()=>[y(i.IconRefresh,{"aria-hidden":`true`})]),_:1},8,[`disabled`])):D(`v-if`,!0),i.flags.last&&r.turn.stopped?(K(),F(i.UiButton,{key:1,size:`sm`,title:`Ход остановлен на лимите: продолжить с того же места`,disabled:i.flags.busy,onClick:n[11]||=e=>i.emit(`continue`)},{default:e(()=>[...n[17]||=[G(` Продолжить `,-1)]]),_:1},8,[`disabled`])):D(`v-if`,!0),r.turn.usage?(K(),F(i.AgentUsageInfo,{key:2,usage:r.turn.usage,chat:r.chatUsage,class:`copy-button`},null,8,[`usage`,`chat`])):D(`v-if`,!0),i.stamp?(K(),U(`time`,{key:3,class:`turn-time footer-time`,title:i.stampFull,datetime:i.written?.toISOString()},X(i.stamp),9,GA)):D(`v-if`,!0)]),_:1})):D(`v-if`,!0)]))],2)}var qA=H(AA,[[`render`,KA],[`__scopeId`,`data-v-b78522e3`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentTurn.vue`]]),JA={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function YA(e,t){return K(),U(`svg`,JA,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m12 19l-7-7l7-7m7 7H5`},null,-1)]])}var XA=L({name:`lucide-arrow-left`,render:YA}),ZA={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function QA(e,t){return K(),U(`svg`,ZA,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M21 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h6m10 0l-9 9m3-9h6v6`},null,-1)]])}var $A=L({name:`lucide-square-arrow-out-up-right`,render:QA}),ej=W({__name:`AgentTaskView`,props:{detail:{type:Object,required:!0},embedded:{type:Boolean,required:!1},projectId:{type:String,required:!0},backend:{type:String,required:!0},selection:{type:Object,required:!1}},emits:[`back`,`tab`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=bp();BS(r.projectId,a?.api);let o=B(()=>r.detail.task),s=Nx(),c=B(()=>[Jx[o.value.status],o.value.subagent,o.value.background?`в фоне`:``,o.value.tools?`вызовов: ${o.value.tools}`:``,qx(o.value,s.value)].filter(Boolean).join(` · `)),l=B(()=>{if(o.value.prompt)return o.value.prompt;let e=r.detail.call?.input?.trim()??``;return e&&e!==`{}`?e:``}),u=B(()=>o.value.session??/"sessionID"\s*:\s*"([^"]+)"/.exec(r.detail.call?.detail??``)?.[1]),{lens:d,turns:f,loadError:p,toggleLens:m}=qE({backend:()=>r.backend,projectId:()=>r.projectId,session:()=>u.value,running:()=>o.value.status===`running`,lastTool:()=>o.value.lastTool,selection:()=>r.selection,auto:!0}),h={props:r,emit:i,ide:a,task:o,now:s,meta:c,assignment:l,sessionId:u,lens:d,turns:f,loadError:p,toggleLens:m,outcome:B(()=>{let{call:e}=r.detail;return o.value.status===`running`?``:o.value.summary?o.value.summary:e&&!o.value.background?e.detail:``}),UiButton:q,UiSpinner:De,AgentLensPanel:IO,AgentTaskFrame:zk,AgentTurn:qA,AgentCodeBlock:eD,AgentToolCall:ID,get IconBack(){return XA},get IconScanEye(){return wO},get IconTab(){return $A}};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}}),tj={key:0,class:`task-lens`},nj={key:1,class:`body conversation`,role:`log`,"aria-label":`Чат сабагента`},rj={key:2,class:`body`},ij={key:0,class:`note`},aj={class:`label`},oj={class:`label`},sj={class:`log`},cj={key:4,class:`note`},lj={key:6,class:`note`};function uj(t,n,r,i,a,o){return K(),F(i.AgentTaskFrame,{class:`task-view`,label:`Задача агента`,title:i.task.title||`Задача`,meta:i.meta,running:i.task.status===`running`,kind:i.task.kind,onKeydown:n[2]||=ye(e=>i.emit(`back`),[`esc`])},{leading:e(()=>[r.embedded?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,title:`Вернуться в чат (Esc)`,"aria-label":`Вернуться в чат`,onClick:n[0]||=e=>i.emit(`back`)},{default:e(()=>[y(i.IconBack,{"aria-hidden":`true`})]),_:1})):D(`v-if`,!0)]),actions:e(()=>[i.task.kind===`agent`?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,active:i.lens.state.open,"aria-pressed":i.lens.state.open,title:i.lens.state.open?`Скрыть Lens`:`Lens: чем занимается сабагент`,"aria-label":i.lens.state.open?`Скрыть Lens`:`Показать Lens`,onClick:i.toggleLens},{default:e(()=>[y(i.IconScanEye,{"aria-hidden":`true`})]),_:1},8,[`active`,`aria-pressed`,`title`,`aria-label`,`onClick`])):D(`v-if`,!0),r.embedded?(K(),F(i.UiButton,{key:1,shape:`icon`,size:`sm`,title:`Открыть в новой вкладке`,"aria-label":`Открыть в новой вкладке`,onClick:n[1]||=e=>i.emit(`tab`)},{default:e(()=>[y(i.IconTab,{"aria-hidden":`true`})]),_:1})):D(`v-if`,!0)]),default:e(()=>[i.lens.state.open?(K(),U(`div`,tj,[y(i.AgentLensPanel,{lens:i.lens},null,8,[`lens`])])):D(`v-if`,!0),i.turns.length?(K(),U(`div`,nj,[(K(!0),U(P,null,S(i.turns,(e,t)=>(K(),F(i.AgentTurn,{key:e.id,turn:e,flags:{busy:i.task.status===`running`,last:t===i.turns.length-1,copied:!1,readonly:!0}},null,8,[`turn`,`flags`]))),128))])):(K(),U(`div`,rj,[i.loadError?(K(),U(`p`,ij,X(i.loadError),1)):D(`v-if`,!0),i.assignment?(K(),U(P,{key:1},[I(`div`,aj,X(i.task.kind===`shell`?`Команда`:`Задание`),1),y(i.AgentCodeBlock,{text:i.assignment},null,8,[`text`])],64)):D(`v-if`,!0),r.detail.calls.length?(K(),U(P,{key:2},[I(`div`,oj,`Вызовы: `+X(r.detail.calls.length),1),(K(!0),U(P,null,S(r.detail.calls,e=>(K(),F(i.AgentToolCall,{key:e.id,tool:e},null,8,[`tool`]))),128))],64)):i.task.log?.length?(K(),U(P,{key:3},[n[3]||=I(`div`,{class:`label`},`Ход работы`,-1),I(`ol`,sj,[(K(!0),U(P,null,S(i.task.log,(e,t)=>(K(),U(`li`,{key:t},X(e),1))),128))])],64)):i.task.status===`running`?(K(),U(`p`,cj,[y(i.UiSpinner),n[4]||=G(` Агент работает, подробностей пока нет `,-1)])):D(`v-if`,!0),i.outcome?(K(),U(P,{key:5},[n[5]||=I(`div`,{class:`label`},`Итог`,-1),y(i.AgentCodeBlock,{text:i.outcome},null,8,[`text`])],64)):i.task.status===`running`?D(`v-if`,!0):(K(),U(`p`,lj,`Агент не сообщил итог`))]))]),_:1},8,[`title`,`meta`,`running`,`kind`])}var dj=H(ej,[[`render`,uj],[`__scopeId`,`data-v-c08fdfe7`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentTaskView.vue`]]),fj=W({__name:`AgentTaskTab`,props:{projectId:{type:String,required:!0},chat:{type:String,required:!0},task:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=B(()=>qS(n.projectId).find(e=>e.key===n.chat)),i=B(()=>r.value?Kx(r.value.turns(),n.task):void 0);Tn(()=>({note:`Задача агента`,text:i.value?Xx(i.value):`Чат или задача недоступны`}));let a={props:n,owner:r,detail:i,AgentTaskView:dj};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),pj={key:1,class:`gone`,role:`status`};function mj(e,t,n,r,i,a){return r.detail&&r.owner?(K(),F(r.AgentTaskView,{key:0,detail:r.detail,"project-id":n.projectId,backend:r.owner.backend,selection:r.owner.selection?r.owner.selection():{}},null,8,[`detail`,`project-id`,`backend`,`selection`])):(K(),U(`p`,pj,` Чат этой задачи сейчас не открыт: вкладка покажет её, когда чат вернётся. `))}var hj=H(fj,[[`render`,mj],[`__scopeId`,`data-v-af244629`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-turns/ui/AgentTaskTab.vue`]]),gj=W({__name:`AgentJobBar`,props:{projectId:{type:String,required:!1},active:{type:Array,required:!0},recent:{type:Array,required:!0}},emits:[`open`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=Nx(),o=FT(()=>r.projectId??``,()=>[...r.active,...r.recent]),s={props:r,emit:i,now:a,names:o,shown:B(()=>r.active.length>0||r.recent.length>0),title:e=>o.value.get(e.id)??gT(e.task),state:e=>e.status===`needs-user`?`ждёт ответа`:e.status===`queued`?`в очереди`:`работает`,meta:e=>[hT(e.startedAt??e.createdAt,e.endedAt,a.value),e.files.length?`файлов: ${e.files.length}`:``].filter(Boolean).join(` · `),outcome:e=>e.status===`error`||e.status===`stopped`?pT[e.status]:``,UiDisclosureSummary:Ey,get agentLabel(){return MC},get AgentStatusIcon(){return oD},get IconChevron(){return Ch}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),_j={key:0,class:`jobs`,"aria-label":`Фоновые задания`},vj=[`onClick`],yj={class:`agent`},bj=[`title`],xj={class:`end`},Sj={class:`meta`},Cj={class:`state`},wj={key:0,class:`finished`},Tj={class:`list`},Ej=[`onClick`],Dj={class:`agent`},Oj=[`title`],kj={class:`end`},Aj={class:`meta`},jj={key:0,class:`state`};function Mj(t,n,r,i,a,o){return i.shown?(K(),U(`div`,_j,[(K(!0),U(P,null,S(r.active,e=>(K(),U(`button`,{key:e.id,type:`button`,class:Y([`job`,e.status]),onClick:t=>i.emit(`open`,e.id)},[y(i.AgentStatusIcon,{status:e.status,class:`mark`},null,8,[`status`]),I(`span`,yj,X(i.agentLabel(e.backend)),1),I(`span`,{class:`task`,title:e.task},X(i.title(e)),9,bj),I(`span`,xj,[I(`span`,Sj,X(i.meta(e)),1),I(`span`,Cj,X(i.state(e)),1)])],10,vj))),128)),r.recent.length?(K(),U(`details`,wj,[y(i.UiDisclosureSummary,{variant:`fit`,class:`finished-summary`},{default:e(()=>[I(`span`,null,`Завершено: `+X(r.recent.length),1),y(i.IconChevron,{class:`chevron`,"aria-hidden":`true`})]),_:1}),I(`div`,Tj,[(K(!0),U(P,null,S(r.recent,e=>(K(),U(`button`,{key:e.id,type:`button`,class:Y([`job finished-row`,e.status]),onClick:t=>i.emit(`open`,e.id)},[y(i.AgentStatusIcon,{status:e.status,class:`mark`},null,8,[`status`]),I(`span`,Dj,X(i.agentLabel(e.backend)),1),I(`span`,{class:`task`,title:e.task},X(i.title(e)),9,Oj),I(`span`,kj,[I(`span`,Aj,X(i.meta(e)),1),i.outcome(e)?(K(),U(`span`,jj,X(i.outcome(e)),1)):D(`v-if`,!0)])],10,Ej))),128))])])):D(`v-if`,!0)])):D(`v-if`,!0)}var Nj=H(gj,[[`render`,Mj],[`__scopeId`,`data-v-be7544f3`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/jobs/ui/AgentJobBar.vue`]]),Pj={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Fj(e,t){return K(),U(`svg`,Pj,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M13 5h8m-8 7h8m-8 7h8M3 17l2 2l4-4M3 7l2 2l4-4`},null,-1)]])}var Ij=L({name:`lucide-list-checks`,render:Fj}),Lj={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Rj(e,t){return K(),U(`svg`,Lj,[...t[0]||=[I(`circle`,{cx:`12`,cy:`12`,r:`10`,fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},null,-1)]])}var zj=L({name:`lucide-circle`,render:Rj}),Bj=W({__name:`AgentPlan`,props:{items:{type:Array,required:!0},busy:{type:Boolean,required:!0},embedded:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n=e,r={props:n,done:B(()=>n.items.filter(e=>e.status===`completed`).length),current:B(()=>n.items.find(e=>e.status===`in_progress`)),UiDisclosureSummary:Ey,get IconListChecks(){return Ij},get IconCheck(){return Iy},UiSpinner:De,get IconCircle(){return zj}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Vj=[`open`],Hj={class:`plan-count`},Uj={key:0,class:`plan-current u-truncate`},Wj={class:`plan-bar`,"aria-hidden":`true`};function Gj(t,n,r,i,a,o){return r.items.length?(K(),U(`details`,{key:0,class:Y([`plan`,{embedded:r.embedded}]),open:r.busy},[y(i.UiDisclosureSummary,{highlight:!1},{default:e(()=>[y(i.IconListChecks,{"aria-hidden":`true`}),n[0]||=I(`span`,{class:`plan-title`},`План`,-1),I(`span`,Hj,X(i.done)+` / `+X(r.items.length),1),i.current?(K(),U(`span`,Uj,X(i.current.active??i.current.content),1)):D(`v-if`,!0),I(`span`,Wj,[I(`span`,{style:Qe({width:`${i.done/r.items.length*100}%`})},null,4)])]),_:1}),I(`ol`,null,[(K(!0),U(P,null,S(r.items,(e,t)=>(K(),U(`li`,{key:t,class:Y(e.status)},[e.status===`completed`?(K(),F(i.IconCheck,{key:0,"aria-hidden":`true`})):e.status===`in_progress`?(K(),F(i.UiSpinner,{key:1})):(K(),F(i.IconCircle,{key:2,"aria-hidden":`true`})),I(`span`,null,X(e.content),1)],2))),128))])],10,Vj)):D(`v-if`,!0)}var Kj=H(Bj,[[`render`,Gj],[`__scopeId`,`data-v-5efa893d`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/jobs/ui/AgentPlan.vue`]]),qj={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Jj(e,t){return K(),U(`svg`,qj,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`m15 10l5 5l-5 5`}),I(`path`,{d:`M4 4v7a4 4 0 0 0 4 4h12`})],-1)]])}var Yj=L({name:`lucide-corner-down-right`,render:Jj}),Xj={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zj(e,t){return K(),U(`svg`,Xj,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2zM12 8v6m-3-3h6`},null,-1)]])}var Qj=L({name:`lucide-message-square-plus`,render:Zj}),$j=W({__name:`AgentQueue`,props:{items:{type:Array,required:!0},busy:{type:Boolean,required:!0},canInject:{type:Boolean,required:!1},embedded:{type:Boolean,required:!1}},emits:[`now`,`inject`,`remove`],setup(e,{expose:t,emit:n}){t();let r={emit:n,UiButton:q,get IconX(){return Cn},get IconSend(){return Yj},get IconInject(){return Qj}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),eM={class:`label`},tM=[`title`];function nM(t,n,r,i,a,o){return r.items.length?(K(),U(`ul`,{key:0,class:Y([`queue`,{embedded:r.embedded}]),"aria-label":`Сообщения в очереди`},[(K(!0),U(P,null,S(r.items,t=>(K(),U(`li`,{key:t.id},[I(`span`,eM,X(t.delivering?`Передаётся агенту`:`В очереди`),1),I(`span`,{class:`text u-truncate`,title:t.text},X(t.text),9,tM),r.busy&&r.canInject&&!t.delivering?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,title:`Добавить в ответ, который пишется сейчас: агент учтёт это, не останавливаясь`,"aria-label":`Добавить в ответ`,onClick:e=>i.emit(`inject`,t.id)},{default:e(()=>[y(i.IconInject,{"aria-hidden":`true`})]),_:1},8,[`onClick`])):D(`v-if`,!0),r.busy&&!t.delivering?(K(),F(i.UiButton,{key:1,shape:`icon`,size:`sm`,title:`Остановить ответ и отправить это сообщение сразу`,"aria-label":`Отправить сразу`,onClick:e=>i.emit(`now`,t.id)},{default:e(()=>[y(i.IconSend,{"aria-hidden":`true`})]),_:1},8,[`onClick`])):D(`v-if`,!0),y(i.UiButton,{shape:`icon`,size:`sm`,disabled:t.delivering,title:`Убрать из очереди`,"aria-label":`Убрать из очереди`,onClick:e=>i.emit(`remove`,t.id)},{default:e(()=>[y(i.IconX,{"aria-hidden":`true`})]),_:1},8,[`disabled`,`onClick`])]))),128))],2)):D(`v-if`,!0)}var rM=H($j,[[`render`,nM],[`__scopeId`,`data-v-e76aeef6`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/jobs/ui/AgentQueue.vue`]]),iM=W({__name:`AgentTaskRow`,props:{task:{type:null,required:!0},current:{type:Boolean,required:!1},projectId:{type:String,required:!1},backend:{type:String,required:!1},selection:{type:Object,required:!1}},emits:[`view`,`tab`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=Nx(),o=B(()=>qx(r.task,a.value));function s(){let e=r.task;return[e.subagent,e.tools?`вызовов: ${e.tools}`:``,o.value,e.status===`running`&&e.lastTool?mS(e.lastTool):Yx(e.summary)].filter(Boolean).join(` · `)}let{lens:c,lensNote:l,toggleLens:u}=qE({backend:()=>r.backend,projectId:()=>r.projectId,session:()=>r.task.session,running:()=>r.task.status===`running`,lastTool:()=>r.task.lastTool,selection:()=>r.selection,fallback:()=>{let e=r.task.prompt?.trim();return e?{id:r.task.id,text:e}:void 0},startOnOpen:!0,stopOnClose:!0}),d={props:r,emit:i,now:a,duration:o,note:s,lens:c,lensNote:l,toggleLens:u,UiButton:q,get AgentStatusIcon(){return oD},get IconBot(){return cE},get IconRefresh(){return xO},get IconScanEye(){return wO},get IconTerminal(){return dD},get IconTab(){return $A}};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),aM=[`title`,`aria-pressed`],oM={class:`name u-truncate`},sM=[`title`],cM={key:1,class:`note u-truncate`};function lM(t,n,r,i,a,o){return K(),U(`li`,{class:Y({current:r.current})},[I(`button`,{type:`button`,class:`row`,title:`Открыть чат: ${r.task.title}`,"aria-pressed":r.current,onClick:n[0]||=e=>i.emit(`view`,r.task.id)},[y(i.AgentStatusIcon,{status:r.task.status},null,8,[`status`]),(K(),F(C(r.task.kind===`shell`?i.IconTerminal:i.IconBot),{class:`faint-icon`,"aria-hidden":`true`})),I(`span`,oM,X(r.task.title||`Задача`),1),i.lens.state.open?(K(),U(`span`,{key:0,class:Y([`note u-truncate`,{error:i.lens.state.error}]),title:i.lensNote},[n[3]||=I(`span`,{class:`lens-label`},`Lens`,-1),G(` `+X(i.lensNote),1)],10,sM)):(K(),U(`span`,cM,X(i.note()),1))],8,aM),r.task.kind===`agent`?(K(),U(P,{key:0},[y(i.UiButton,{shape:`icon`,size:`sm`,active:i.lens.state.open,"aria-pressed":i.lens.state.open,title:i.lens.state.open?`Скрыть Lens`:`Lens: чем занимается сабагент`,"aria-label":i.lens.state.open?`Скрыть Lens`:`Показать Lens`,onClick:i.toggleLens},{default:e(()=>[y(i.IconScanEye,{"aria-hidden":`true`})]),_:1},8,[`active`,`aria-pressed`,`title`,`aria-label`,`onClick`]),i.lens.state.open?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,disabled:i.lens.state.busy,title:`Обновить Lens`,"aria-label":`Обновить Lens`,onClick:n[1]||=e=>i.lens.refresh()},{default:e(()=>[y(i.IconRefresh,{"aria-hidden":`true`})]),_:1},8,[`disabled`])):D(`v-if`,!0)],64)):D(`v-if`,!0),y(i.UiButton,{shape:`icon`,size:`sm`,title:`Открыть в новой вкладке`,"aria-label":`Открыть в новой вкладке`,onClick:n[2]||=e=>i.emit(`tab`,r.task.id)},{default:e(()=>[y(i.IconTab,{"aria-hidden":`true`})]),_:1})],2)}var uM=H(iM,[[`render`,lM],[`__scopeId`,`data-v-9883d70f`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/jobs/ui/AgentTaskRow.vue`]]),dM=W({__name:`AgentTaskBar`,props:{tasks:{type:Array,required:!0},viewing:{type:String,required:!1},projectId:{type:String,required:!1},backend:{type:String,required:!1},selection:{type:Object,required:!1},embedded:{type:Boolean,required:!1}},emits:[`view`,`tab`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=B(()=>r.tasks.filter(e=>e.status===`running`||e.status===`error`)),o=B(()=>r.tasks.filter(e=>!a.value.includes(e))),s=B(()=>r.tasks.filter(e=>e.status===`running`).length),c=B(()=>r.tasks.filter(e=>e.status===`error`).length),l=B(()=>[s.value?`Выполняется в фоне: ${s.value}`:`Задачи: ${r.tasks.length}`,c.value?`ошибок: ${c.value}`:``,s.value&&o.value.length?`готово: ${o.value.length}`:``].filter(Boolean).join(` · `)),u=M(),d={props:r,emit:i,active:a,finished:o,running:s,failed:c,title:l,folded:u,open:B(()=>u.value===void 0?s.value>0:!u.value),showFinished:B(()=>!a.value.length),UiDisclosureSummary:Ey,get AgentStatusIcon(){return oD},AgentTaskRow:uM,get IconChevron(){return Ch}};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),fM=[`open`],pM={class:`scroll`},mM={key:0,class:`list`},hM=[`open`],gM={class:`list`};function _M(t,n,r,i,a,o){return r.tasks.length?(K(),U(`details`,{key:0,class:Y([`task-bar`,{embedded:r.embedded}]),open:i.open,onToggle:n[4]||=e=>i.folded=!e.target.open},[y(i.UiDisclosureSummary,{variant:`fit`,class:`bar-summary`},{default:e(()=>[y(i.AgentStatusIcon,{status:i.running?`running`:i.failed?`error`:`done`,label:`Есть ошибки`},null,8,[`status`]),I(`span`,null,X(i.title),1),y(i.IconChevron,{class:`chevron`,"aria-hidden":`true`})]),_:1}),I(`div`,pM,[i.active.length?(K(),U(`ul`,mM,[(K(!0),U(P,null,S(i.active,e=>(K(),F(i.AgentTaskRow,{key:e.id,task:e,current:r.viewing===e.id,"project-id":r.projectId,backend:r.backend,selection:r.selection,onView:n[0]||=e=>i.emit(`view`,e),onTab:n[1]||=e=>i.emit(`tab`,e)},null,8,[`task`,`current`,`project-id`,`backend`,`selection`]))),128))])):D(`v-if`,!0),i.finished.length?(K(),U(`details`,{key:1,class:`finished`,open:i.showFinished||void 0},[y(i.UiDisclosureSummary,{variant:`fit`,class:`finished-summary`},{default:e(()=>[I(`span`,null,`Завершено: `+X(i.finished.length),1),y(i.IconChevron,{class:`chevron`,"aria-hidden":`true`})]),_:1}),I(`ul`,gM,[(K(!0),U(P,null,S(i.finished,e=>(K(),F(i.AgentTaskRow,{key:e.id,task:e,current:r.viewing===e.id,"project-id":r.projectId,backend:r.backend,selection:r.selection,onView:n[2]||=e=>i.emit(`view`,e),onTab:n[3]||=e=>i.emit(`tab`,e)},null,8,[`task`,`current`,`project-id`,`backend`,`selection`]))),128))])],8,hM)):D(`v-if`,!0)])],42,fM)):D(`v-if`,!0)}var vM=H(dM,[[`render`,_M],[`__scopeId`,`data-v-2e609881`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/jobs/ui/AgentTaskBar.vue`]]),yM=W({__name:`AgentActivityDock`,props:{jobs:{type:Array,required:!0},chat:{type:String,required:!1},tasks:{type:Array,required:!0},plan:{type:Array,required:!0},queue:{type:Array,required:!0},busy:{type:Boolean,required:!0},canInject:{type:Boolean,required:!1},viewingTask:{type:String,required:!1},projectId:{type:String,required:!1},backend:{type:String,required:!1},selection:{type:Object,required:!1}},emits:[`open`,`view`,`tab`,`now`,`inject`,`remove`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=M(!1),o=B(()=>fT(r.jobs,r.chat)),s=B(()=>o.value.active),c=B(()=>o.value.recent),l=B(()=>r.tasks.filter(e=>e.status===`running`).length),u=B(()=>r.tasks.filter(e=>e.status===`error`).length),d=B(()=>r.plan.filter(e=>e.status===`completed`).length),f=B(()=>r.plan.length-d.value),p=B(()=>s.value.filter(e=>e.status===`needs-user`).length),m={props:r,emit:i,expanded:a,jobSections:o,activeJobs:s,recentJobs:c,runningTasks:l,failedTasks:u,planDone:d,planLeft:f,waiting:p,has:B(()=>s.value.length>0||c.value.length>0||r.tasks.length>0||f.value>0||r.queue.length>0),working:B(()=>s.value.length>0||l.value>0),attention:B(()=>p.value>0||u.value>0),summary:B(()=>{let e=[];return s.value.length&&e.push(`задания: ${s.value.length}${p.value?` · ждёт ответа: ${p.value}`:``}`),c.value.length&&e.push(`завершено: ${c.value.length}`),r.tasks.length&&e.push(`задачи: ${r.tasks.length}${l.value?` · в работе: ${l.value}`:u.value?` · ошибки: ${u.value}`:``}`),f.value&&e.push(`план: ${d.value}/${r.plan.length}`),r.queue.length&&e.push(`очередь: ${r.queue.length}`),e.join(` · `)}),UiSpinner:De,AgentJobBar:Nj,AgentPlan:Kj,AgentQueue:rM,AgentTaskBar:vM,get IconAlert(){return Ly},get IconChevron(){return Ch},get IconListChecks(){return Ij}};return Object.defineProperty(m,"__isScriptSetup",{enumerable:!1,value:!0}),m}}),bM={key:0,class:`activity`,"aria-label":`Фоновая работа`},xM=[`aria-expanded`],SM=[`title`],CM={key:0,class:`body`};function wM(e,t,n,r,i,a){return r.has?(K(),U(`section`,bM,[I(`button`,{type:`button`,class:`summary`,"aria-expanded":r.expanded,onClick:t[0]||=e=>r.expanded=!r.expanded},[r.working?(K(),F(r.UiSpinner,{key:0})):r.attention?(K(),F(r.IconAlert,{key:1,class:`alert`,"aria-hidden":`true`})):(K(),F(r.IconListChecks,{key:2,"aria-hidden":`true`})),I(`span`,{class:`text`,title:r.summary},X(r.summary),9,SM),y(r.IconChevron,{class:Y([`chevron`,{expanded:r.expanded}]),"aria-hidden":`true`},null,8,[`class`])],8,xM),r.expanded?(K(),U(`div`,CM,[y(r.AgentJobBar,{"project-id":n.projectId,active:r.activeJobs,recent:r.recentJobs,onOpen:t[1]||=e=>r.emit(`open`,e)},null,8,[`project-id`,`active`,`recent`]),y(r.AgentPlan,{items:n.plan,busy:n.busy,embedded:``},null,8,[`items`,`busy`]),y(r.AgentTaskBar,{tasks:n.tasks,viewing:n.viewingTask,"project-id":n.projectId,backend:n.backend,selection:n.selection,embedded:``,onView:t[2]||=e=>r.emit(`view`,e),onTab:t[3]||=e=>r.emit(`tab`,e)},null,8,[`tasks`,`viewing`,`project-id`,`backend`,`selection`]),y(r.AgentQueue,{items:n.queue,busy:n.busy,"can-inject":n.canInject,embedded:``,onNow:t[4]||=e=>r.emit(`now`,e),onInject:t[5]||=e=>r.emit(`inject`,e),onRemove:t[6]||=e=>r.emit(`remove`,e)},null,8,[`items`,`busy`,`can-inject`])])):D(`v-if`,!0)])):D(`v-if`,!0)}var TM=H(yM,[[`render`,wM],[`__scopeId`,`data-v-e056d565`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/jobs/ui/AgentActivityDock.vue`]]),EM=W({__name:`AgentJobRequests`,props:{jobs:{type:Array,required:!0}},emits:[`answered`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=B(()=>new Map(r.jobs.flatMap(e=>e.pending.map(t=>[t.id,e.id])))),o=B(()=>r.jobs.flatMap(e=>e.pending.filter(e=>e.kind===`permission`).map(t=>({id:t.id,job:e.id,tool:t.tool??``,title:`${MC(e.backend)} · ${t.title}`,detail:t.detail??``,persistent:t.persistent===!0})))),s=B(()=>r.jobs.flatMap(e=>e.pending.filter(e=>e.kind===`question`&&e.questions?.length).map(t=>({id:t.id,job:e.id,title:`${MC(e.backend)} · ${t.title||`Вопрос`}`,questions:t.questions,custom:t.custom===!0}))));async function c(e,t,n){let r=a.value.get(e);if(r){try{await Ob(r,{request:e,allow:t,always:n})}catch{}i(`answered`)}}async function l(e,t){let n=a.value.get(e);if(n){try{await Ob(n,{request:e,answers:t})}catch{}i(`answered`)}}let u={props:r,emit:i,jobsOf:a,permissions:o,questions:s,decide:c,answer:l,get AgentPermissions(){return vk},get AgentQuestions(){return jk}};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});function DM(e,t,n,r,i,a){return K(),U(P,null,[y(r.AgentPermissions,{permissions:r.permissions,onDecide:r.decide},null,8,[`permissions`]),y(r.AgentQuestions,{requests:r.questions,onAnswer:r.answer},null,8,[`requests`])],64)}var OM=H(EM,[[`render`,DM],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/jobs/ui/AgentJobRequests.vue`]]),kM={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function AM(e,t){return K(),U(`svg`,kM,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 3H4a2 2 0 0 0-2 2v16.286a.71.71 0 0 0 1.212.502l2.202-2.202A2 2 0 0 1 6.828 19H20a2 2 0 0 0 2-2v-4M16 3h6v6m-6 0l6-6`},null,-1)]])}var jM=L({name:`lucide-message-square-share`,render:AM}),MM=W({__name:`AgentJobTab`,props:{projectId:{type:String,required:!0},job:{type:String,required:!0}},emits:[`openFile`,`title`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{api:a}=yp();BS(r.projectId,a);let{job:o,journal:s,error:c,actionError:l,missing:u,stop:d,decide:f,answer:p}=YT(()=>r.job),m=IT(()=>r.projectId,()=>o.value);E(m,e=>{o.value&&i(`title`,e)},{immediate:!0});let h=B(()=>!!o.value&&bb(o.value.status)),g=B(()=>ZT(s.value,`job-${r.job}`,o.value?.startedAt??o.value?.createdAt??0)),_=B(()=>(o.value?.pending??[]).filter(e=>e.kind===`permission`).map(e=>({id:e.id,tool:e.tool??``,title:e.title,detail:e.detail??``,persistent:e.persistent===!0}))),v=B(()=>(o.value?.pending??[]).filter(e=>e.kind===`question`).map(e=>({id:e.id,title:e.title,questions:e.questions??[],custom:e.custom===!0}))),y=B(()=>{let e=o.value?.result?.trim()??``;return h.value&&e&&e!==g.value.text.trim()?e:``}),b=Nx(),x=B(()=>[o.value?pT[o.value.status]:``,o.value?MC(o.value.backend):``,o.value?.unattended?`без вопросов`:``,o.value?.worktree?`копия ${o.value.worktree.branch}`:``,hT(o.value?.startedAt??o.value?.createdAt,o.value?.endedAt,b.value)].filter(Boolean).join(` · `)),S=async()=>{l.value=``;try{o.value&&await JT(a,o.value)}catch(e){l.value=e instanceof Error?e.message:`Не удалось открыть чат`}};Tn(()=>({note:`Фоновое задание агента`,text:o.value?Nn(`Задание: ${o.value.task}`,`Состояние: ${pT[o.value.status]}`,`Агент: ${MC(o.value.backend)}`,o.value.error?`Ошибка: ${o.value.error}`:``,o.value.pending.length?`Ждёт ответа: ${o.value.pending.map(e=>e.title).join(`; `)}`:``,o.value.files.length?`Изменено файлов: ${o.value.files.length}`:``,o.value.result?`Итог:\n${o.value.result.slice(0,2e3)}`:``):`Задание загружается`}));let C={props:r,emit:i,api:a,job:o,journal:s,error:c,actionError:l,missing:u,stop:d,decide:f,answer:p,name:m,finished:h,turn:g,permissions:_,questions:v,outcome:y,now:b,meta:x,proceed:S,UiButton:q,UiDisclosureSummary:Ey,UiSpinner:De,get canContinueInChat(){return qT},get AgentCodeBlock(){return eD},get AgentPermissions(){return vk},get AgentQuestions(){return jk},get AgentTaskFrame(){return zk},get AgentTurn(){return qA},get IconSquare(){return Py},get IconChat(){return jM},get IconChevron(){return Ch},get IconFile(){return JD}};return Object.defineProperty(C,"__isScriptSetup",{enumerable:!1,value:!0}),C}}),NM={key:0,class:`missing`,"aria-label":`Фоновое задание`},PM={class:`body`,role:`log`,"aria-label":`Журнал задания`},FM={key:0,class:`assignment`},IM={class:`task-text`},LM={key:1,class:`note error`,role:`alert`},RM={key:2,class:`note error`,role:`alert`},zM={key:3,class:`note error`,role:`alert`},BM={key:4,class:`note`},VM={key:6,class:`note`},HM={class:`label`},UM={class:`files`},WM=[`onClick`],GM={key:1};function KM(t,n,r,i,a,o){return i.missing?(K(),U(`section`,NM,[...n[0]||=[I(`p`,{class:`note`,role:`status`},`Задание не найдено: его могли убрать.`,-1)]])):(K(),F(i.AgentTaskFrame,{key:1,label:`Фоновое задание`,kind:`agent`,title:i.name,hint:i.job?.task,meta:i.meta,running:!!i.job&&!i.finished},{actions:e(()=>[i.job&&!i.finished?(K(),F(i.UiButton,{key:0,size:`sm`,title:`Остановить задание`,"aria-label":`Остановить задание`,onClick:i.stop},{default:e(()=>[y(i.IconSquare,{"aria-hidden":`true`}),n[1]||=G(` Остановить `,-1)]),_:1},8,[`onClick`])):D(`v-if`,!0),i.job&&i.canContinueInChat(i.job)?(K(),F(i.UiButton,{key:1,size:`sm`,title:`Открыть обычный чат агента и продолжить эту сессию`,"aria-label":`Продолжить в чате`,onClick:i.proceed},{default:e(()=>[y(i.IconChat,{"aria-hidden":`true`}),n[2]||=G(` Продолжить в чате `,-1)]),_:1})):D(`v-if`,!0)]),default:e(()=>[I(`div`,PM,[i.job?.task?(K(),U(`details`,FM,[y(i.UiDisclosureSummary,{variant:`fit`,class:`assignment-summary`},{default:e(()=>[n[3]||=I(`span`,{class:`label`},`Задание`,-1),y(i.IconChevron,{class:`chevron`,"aria-hidden":`true`})]),_:1}),I(`p`,IM,X(i.job.task),1)])):D(`v-if`,!0),i.error?(K(),U(`p`,LM,X(i.error),1)):D(`v-if`,!0),i.actionError?(K(),U(`p`,RM,X(i.actionError),1)):D(`v-if`,!0),i.job?.error?(K(),U(`p`,zM,X(i.job.error),1)):D(`v-if`,!0),i.job?.worktree&&i.finished?(K(),U(`p`,BM,` Работа шла в изолированной копии (`+X(i.job.worktree.branch)+`): слить её в проект можно командой ide.agent.job.merge по просьбе пользователя. `,1)):D(`v-if`,!0),y(i.AgentPermissions,{permissions:i.permissions,onDecide:i.decide},null,8,[`permissions`,`onDecide`]),y(i.AgentQuestions,{requests:i.questions,onAnswer:i.answer},null,8,[`requests`,`onAnswer`]),i.journal.length?(K(),F(i.AgentTurn,{key:5,turn:i.turn,root:i.job?.cwd,flags:{busy:!!i.job&&!i.finished,last:!0,copied:!1,readonly:!0}},null,8,[`turn`,`root`,`flags`])):i.job&&!i.finished?(K(),U(`p`,VM,[y(i.UiSpinner),n[4]||=G(` Агент работает, событий пока нет `,-1)])):D(`v-if`,!0),i.outcome?(K(),U(P,{key:7},[n[5]||=I(`div`,{class:`label`},`Итог`,-1),y(i.AgentCodeBlock,{text:i.outcome},null,8,[`text`])],64)):D(`v-if`,!0),i.job?.files.length?(K(),U(P,{key:8},[I(`div`,HM,[y(i.IconFile,{"aria-hidden":`true`}),G(` Изменённые файлы: `+X(i.job.files.length),1)]),I(`ul`,UM,[(K(!0),U(P,null,S(i.job.files,e=>(K(),U(`li`,{key:e},[!i.job.worktree&&!i.job.worktreeCleared?(K(),U(`button`,{key:0,type:`button`,class:`file`,onClick:t=>i.emit(`openFile`,e)},X(e),9,WM)):(K(),U(`span`,GM,X(e),1))]))),128))])],64)):D(`v-if`,!0)])]),_:1},8,[`title`,`hint`,`meta`,`running`]))}var qM=H(MM,[[`render`,KM],[`__scopeId`,`data-v-a53520d6`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/jobs/ui/AgentJobTab.vue`]]);async function JM(e,t,n,r){let i=await fetch(`/api/agent/side`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({question:e,history:t,projectId:n.projectId,chat:n.chat,backend:n.backend,selection:n.selection,thread:n.thread,running:n.running,plan:n.plan}),signal:n.signal});if(!i.ok||!i.body){let e=await i.json().catch(()=>null);throw Error(e?.error||`Вопрос в сторону недоступен`)}let a=i.body.getReader(),o=new TextDecoder,s=``,c=async e=>{if(e.event!==`command-request`)return r(e);await sb(e.data.id,e.data,n.commands,n.signal)};for(;;){let{done:e,value:t}=await a.read();if(e)break;s+=o.decode(t,{stream:!0});let n=ub(s);s=n.rest;for(let e of n.events)await c(e)}if(s.trim()){let e=ub(`${s}\n\n`);for(let t of e.events)await c(t)}}function YM(e){let t=/^\/btw(?:\s+([\s\S]*))?$/.exec(e.trim());return t?(t[1]??``).trim():void 0}function XM(e,t){let n=M([]);async function r(){try{n.value=await _b(e(),t)}catch{n.value=[]}}return{mcp:n,load:r}}function ZM(e){let t=M(null),n=M(),r=M(``),i=M(),a=M(!1);function o(e,a=`conversation`){t.value={id:e,scope:a},n.value=void 0,r.value=``,i.value=void 0}async function s(i){let a=t.value;if(a&&(a.scope=i,!(i===`conversation`||n.value||r.value)))try{n.value=await e.rewindFiles(a.id,!0)}catch(e){r.value=e instanceof Error?e.message:`Не удалось посчитать откат`}}async function c(t,n){let r;return n!==`conversation`&&(r=await e.rewindFiles(t,!1)),n!==`files`&&(!r||r.ok)&&e.edit(t),r}async function l(r){let o=t.value;if(o&&!a.value){a.value=!0;try{let a=await c(o.id,r);a?i.value={...a,files:a.files.length?a.files:n.value?.files??[]}:t.value=null,r!==`files`&&await p(),e.focus()}catch(e){i.value={ok:!1,files:[],error:e instanceof Error?e.message:`Не удалось откатить`}}finally{a.value=!1}}}function u(){t.value=null,i.value=void 0}return{rewinding:t,rewindPreview:n,rewindPreviewError:r,rewindResult:i,rewindWorking:a,askRewind:o,previewRewind:s,rewindTo:c,confirmRewind:l,closeRewind:u}}var QM=3e4;function $M(e,t){let n=e.at(-1),r=fC(t&&n?.role===`assistant`?e.slice(0,-1):e,!0);if(t&&n?.role===`assistant`){let e=n.tools.filter(e=>!e.parent&&e.status!==`running`).map(e=>({id:e.id,name:e.name,...e.input?{input:e.input}:{},output:e.detail,...e.status===`error`?{failed:!0}:{}}));e.length&&r.push({role:`assistant`,content:``,tools:e})}let i=Math.max(0,r.length-60);for(;i<r.length&&r[i].role!==`user`;)i++;return r.slice(i)}function eN(e){let t=de({open:!1,question:``,currentQuestion:``,current:``,busy:!1,error:``,meta:{mode:`projector`},checks:[],exchanges:[]}),n;function r(){t.open=!0}function i(){t.open=!1}function a(){t.open=!t.open}function o(){n?.abort(),t.exchanges=[],t.current=``,t.currentQuestion=``,t.question=``,t.error=``,t.checks=[]}function s(){o(),t.open=!1,t.busy=!1,t.meta={mode:`projector`}}function c(){n?.abort()}function l(e){let t=e.at(-1);return t?.role===`assistant`?t.tools.filter(e=>e.status===`running`).map(e=>({name:e.name,...e.input?{input:e.input.slice(0,500)}:{},...e.startedAt?{startedAt:e.startedAt}:{}})):[]}async function u(){let t=e.turns.value,n=t.findLast(e=>e.role===`assistant`),r=n?.at,i=Date.now(),a=e.lastEventAt.value||void 0,o=l(t).map(e=>({name:e.name,...e.input?{input:e.input}:{},...e.startedAt?{startedAt:e.startedAt}:{},...e.startedAt?{elapsedMs:i-e.startedAt}:{}})),s={permissions:e.permissions.value.map(e=>({tool:e.tool,title:e.title})),questions:e.questions.value.map(e=>({...e.title?{title:e.title}:{},count:e.questions.length})),secrets:e.secrets.value.map(e=>({label:e.label}))},c=!0,u=await yb().then(t=>t.find(t=>t.chat===e.chat)).catch(()=>{c=!1}),d=s.permissions.length>0||s.questions.length>0||s.secrets.length>0,f=e.busy.value?d?`waiting-user`:e.phase.value.includes(`фонов`)?`waiting-background`:o.length?`running-tool`:c?u?a&&i-a>=QM?`quiet`:`active`:`broken`:`quiet`:`idle`;return{chat:e.chat,backend:e.backend,busy:e.busy.value,phase:e.phase.value,...r?{startedAt:r,elapsedMs:i-r}:{},...a?{lastEventAt:a,sinceLastEventMs:i-a}:{},currentTools:o,pending:s,queue:{count:e.queue.value.length,texts:e.queue.value.slice(0,5).map(e=>e.text.slice(0,200))},live:u?{found:!0,checked:!0,run:u.id,...u.startedAt?{startedAt:u.startedAt}:{}}:{found:!1,checked:c},health:f,...!e.busy.value&&n?.text.trim()?{lastAssistantText:n.text.trim().slice(0,1200)}:{},...n?.session?.id?{session:n.session.id}:{},...t.findLast(e=>e.context)?.context?{context:t.findLast(e=>e.context).context}:{}}}async function d(i=t.question){let a=i.trim();if(!a)return r(),``;if(t.busy)throw Error(`Дождитесь ответа на прошлый вопрос в сторону`);t.open=!0,t.question=``,t.currentQuestion=a,t.current=``,t.error=``,t.checks=[],t.meta={mode:`projector`},t.busy=!0,n=new AbortController;let o=``;try{if(await JM(a,$M(e.turns.value,e.busy.value),{projectId:e.projectId,chat:e.chat,backend:e.backend,selection:e.backend===`projector`?e.selection.value:{},thread:t.exchanges.slice(-20),running:l(e.turns.value),plan:Ux(e.turns.value,e.backend).map(e=>({content:e.content,status:e.status})),commands:e.commands,signal:n.signal},e=>{switch(e.event){case`meta`:t.meta={...t.meta,...e.data};return;case`status`:(e.data.provider||e.data.model)&&(t.meta={...t.meta,...e.data.provider?{provider:e.data.provider}:{},...e.data.model?{model:e.data.model}:{}});return;case`text`:t.current+=e.data.text;return;case`tool`:{let n=t.checks.find(t=>t.id===e.data.id);n?(n.name=e.data.name,n.status=`running`):t.checks.push({id:e.data.id,name:e.data.name,status:`running`});return}case`tool-result`:{let n=t.checks.find(t=>t.id===e.data.id);if(n){n.status=e.data.error?`error`:`done`;let t=e.data.error||e.data.output;t!==void 0&&(n.detail=(typeof t==`string`?t:JSON.stringify(t)).slice(0,2e3))}return}case`done`:e.data.text&&(t.current=e.data.text);return;case`error`:o=e.data.error;return;default:return}}),n.signal.aborted)return t.current.trim();if(o)throw Error(o);let r=t.current.trim();if(!r)throw Error(`Агент не ответил на вопрос в сторону`);return t.exchanges.push({question:a,answer:r}),t.current=``,t.currentQuestion=``,t.checks=[],r}catch(e){throw n.signal.aborted||(t.error=e instanceof Error?e.message:`Вопрос в сторону не удался`,t.question=a),e}finally{t.busy=!1,n=void 0}}function f(e){return YM(e)}return{state:t,openPanel:r,close:i,toggle:a,clear:o,reset:s,stop:c,ask:d,status:u,command:f}}function tN(e,t,n){let r=B(()=>(e.value.length,e.value.findLast(e=>e.role===`assistant`&&e.worktree)?.worktree)),i=M(),a=M(!1),o=M(``);async function s(){try{i.value=r.value?await n.worktreeInfo():void 0}catch{i.value=void 0}}E([()=>r.value?.id,t],s,{immediate:!0});async function c(e){a.value=!0;try{o.value=await e()??``}catch(e){o.value=e instanceof Error?e.message:`Не удалось выполнить`}finally{a.value=!1}}return{copy:r,copyInfo:i,copyWorking:a,copyNote:o,endCopy:c}}var nN=W({__name:`AgentRewind`,props:{canFiles:{type:Boolean,required:!0},preview:{type:Object,required:!1},previewError:{type:String,required:!0},working:{type:Boolean,required:!0},result:{type:Object,required:!1},root:{type:String,required:!0},initial:{type:String,required:!0}},emits:[`confirm`,`cancel`,`scope`],setup(e,{expose:t,emit:n}){t();let r=V(),i=e,a=n,o=M(i.initial);E(o,e=>a(`scope`,e),{immediate:!0});let s={radioName:r,props:i,emit:a,scope:o,withFiles:B(()=>o.value!==`conversation`),relative:e=>i.root&&e.startsWith(`${i.root}/`)?e.slice(i.root.length+1):e,options:B(()=>[{value:`conversation`,name:`Только разговор`,note:`Сообщение вернётся в поле ввода; файлы останутся как есть`,files:!1},{value:`both`,name:`Разговор и файлы`,note:`И сообщения, и изменения в проекте возвращаются на этот шаг. Файлы, изменённые командами оболочки, не откатываются`,files:!0},{value:`files`,name:`Только файлы`,note:`Разговор остаётся, файлы возвращаются на этот шаг. Файлы, изменённые командами оболочки, не откатываются`,files:!0}]),UiControl:Se,UiCard:je,UiInline:Be,UiButton:q,get IconUndo(){return ZD}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),rN={key:0,class:`preview`,"aria-live":`polite`},iN={class:`added`},aN={class:`removed`},oN={key:0},sN={class:`preview`,role:`status`};function cN(t,n,r,i,a,o){return K(),F(i.UiCard,{class:`rewind`,role:`dialog`,"aria-label":`Откат к сообщению`},{default:e(()=>[y(i.UiInline,{as:`header`,align:`center`,justify:`normal`},{default:e(()=>[y(i.IconUndo,{"aria-hidden":`true`}),n[4]||=I(`span`,null,`Откатить к этому сообщению`,-1)]),_:1}),r.result?(K(),U(P,{key:1},[I(`p`,sN,[r.result.ok?(K(),U(P,{key:0},[G(` Файлов возвращено: `+X(r.result.files.length)+`. `,1)],64)):(K(),U(P,{key:1},[G(X(r.result.error||`Не удалось вернуть файлы`),1)],64))]),y(i.UiInline,{align:`stretch`},{default:e(()=>[y(i.UiButton,{size:`sm`,onClick:n[3]||=e=>i.emit(`cancel`)},{default:e(()=>[...n[7]||=[G(`Закрыть`,-1)]]),_:1})]),_:1})],64)):(K(),U(P,{key:0},[(K(!0),U(P,null,S(i.options,t=>(K(),F(i.UiInline,{as:`label`,align:`start`,justify:`normal`,key:t.value,class:Y({off:t.files&&!r.canFiles})},{default:e(()=>[y(i.UiControl,{modelValue:i.scope,"onUpdate:modelValue":n[0]||=e=>i.scope=e,type:`radio`,name:i.radioName,value:t.value,disabled:t.files&&!r.canFiles},null,8,[`modelValue`,`name`,`value`,`disabled`]),I(`span`,null,[I(`b`,null,X(t.name),1),I(`small`,null,X(t.files&&!r.canFiles?`Этот агент не хранит резервные копии файлов`:t.note),1)])]),_:2},1032,[`class`]))),128)),i.withFiles?(K(),U(`div`,rN,[r.previewError?(K(),U(P,{key:0},[G(X(r.previewError),1)],64)):r.preview?r.preview.ok?r.preview.files.length?(K(),U(P,{key:4},[G(` Изменится файлов: `+X(r.preview.files.length)+` `,1),I(`span`,iN,`+`+X(r.preview.insertions??0),1),I(`span`,aN,`−`+X(r.preview.deletions??0),1),I(`ul`,null,[(K(!0),U(P,null,S(r.preview.files.slice(0,12),e=>(K(),U(`li`,{key:e},X(i.relative(e)),1))),128)),r.preview.files.length>12?(K(),U(`li`,oN,`и ещё `+X(r.preview.files.length-12),1)):D(`v-if`,!0)])],64)):(K(),U(P,{key:3},[G(`Файлы уже такие, как на этом шаге.`)],64)):(K(),U(P,{key:2},[G(X(r.preview.error||`Вернуть файлы нельзя`),1)],64)):(K(),U(P,{key:1},[G(`Считаю, что изменится…`)],64))])):D(`v-if`,!0),y(i.UiInline,{align:`stretch`},{default:e(()=>[y(i.UiButton,{appearance:`solid`,size:`sm`,disabled:r.working||i.withFiles&&(!r.preview||!r.preview.ok),onClick:n[1]||=e=>i.emit(`confirm`,i.scope)},{default:e(()=>[...n[5]||=[G(` Откатить `,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{size:`sm`,onClick:n[2]||=e=>i.emit(`cancel`)},{default:e(()=>[...n[6]||=[G(`Отмена`,-1)]]),_:1})]),_:1})],64))]),_:1})}var lN=H(nN,[[`render`,cN],[`__scopeId`,`data-v-7cef6de7`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/panels/ui/AgentRewind.vue`]]),uN=W({__name:`AgentSideQuestion`,props:{side:{type:null,required:!0}},setup(e,{expose:t}){t();let n=e,r=M(),i=M(),a=n.side.state,o=B(()=>{let e=[`Projector`,a.meta.provider,a.meta.model].filter(Boolean);return e.length>1?e.join(` · `):`Projector · только чтение`});function s(){p(()=>r.value?.focus())}function c(){a.question.trim()&&!a.busy&&(n.side.ask().catch(()=>{}),p(()=>{i.value?.scrollTo({top:i.value.scrollHeight})}))}function l(e){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),c())}function u(){n.side.close()}function d(){n.side.clear(),s()}E(()=>a.open,e=>{e&&s()}),E(()=>[a.current,a.checks.length,a.exchanges.length],()=>{p(()=>{let e=i.value;e&&(e.scrollTop=e.scrollHeight)})});let f={props:n,input:r,thread:i,state:a,source:o,focus:s,send:c,keydown:l,close:u,clear:d,UiButton:q,UiSpinner:De,get AgentMarkdown(){return VO},get IconMessageCircleQuestion(){return xk},get IconX(){return Cn},get IconTrash2(){return og}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}}),dN={class:`side`,"aria-label":`Вопрос в сторону`},fN={class:`head`},pN={class:`mark`,"aria-hidden":`true`},mN={class:`titles`},hN={class:`source`},gN={ref:`thread`,class:`thread`,"aria-live":`polite`},_N={key:0,class:`empty`},vN={class:`question`},yN={key:1,class:`exchange current`},bN={key:0,class:`question`},xN={key:1,class:`checks`},SN={key:1,class:`dot`,"aria-hidden":`true`},CN={class:`check-name`},wN={key:2,class:`check-detail`},TN={key:3,class:`pending`},EN={key:2,class:`error`,role:`alert`},DN={class:`composer`},ON=[`disabled`],kN={class:`actions`};function AN(t,n,r,i,a,o){return K(),U(`section`,dN,[I(`header`,fN,[I(`span`,pN,[y(i.IconMessageCircleQuestion)]),I(`div`,mN,[n[2]||=I(`strong`,null,`Вопрос в сторону`,-1),I(`span`,hN,X(i.source),1)]),n[3]||=I(`span`,{class:`badge`},`не в чат`,-1),i.state.exchanges.length?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,title:`Очистить историю вопросов`,"aria-label":`Очистить историю вопросов`,onClick:i.clear},{default:e(()=>[y(i.IconTrash2,{"aria-hidden":`true`})]),_:1})):D(`v-if`,!0),y(i.UiButton,{shape:`icon`,size:`sm`,title:`Закрыть`,"aria-label":`Закрыть вопрос в сторону`,onClick:i.close},{default:e(()=>[y(i.IconX,{"aria-hidden":`true`})]),_:1})]),I(`div`,gN,[!i.state.exchanges.length&&!i.state.currentQuestion&&!i.state.busy?(K(),U(`p`,_N,` Спросите о текущей работе, не прерывая агента. Ответ читается по видимой переписке и состоянию чата, но не попадает в историю. `)):D(`v-if`,!0),(K(!0),U(P,null,S(i.state.exchanges,(e,t)=>(K(),U(`article`,{key:t,class:`exchange`},[I(`p`,vN,X(e.question),1),y(i.AgentMarkdown,{text:e.answer},null,8,[`text`])]))),128)),i.state.currentQuestion||i.state.current||i.state.busy?(K(),U(`article`,yN,[i.state.currentQuestion?(K(),U(`p`,bN,X(i.state.currentQuestion),1)):D(`v-if`,!0),i.state.checks.length?(K(),U(`ul`,xN,[(K(!0),U(P,null,S(i.state.checks,e=>(K(),U(`li`,{key:e.id,class:Y(e.status)},[e.status===`running`?(K(),F(i.UiSpinner,{key:0})):(K(),U(`span`,SN)),I(`span`,CN,X(e.name),1),e.detail?(K(),U(`span`,wN,X(e.detail),1)):D(`v-if`,!0)],2))),128))])):D(`v-if`,!0),i.state.current?(K(),F(i.AgentMarkdown,{key:2,text:i.state.current,streaming:i.state.busy},null,8,[`text`,`streaming`])):i.state.busy?(K(),U(`p`,TN,[y(i.UiSpinner),n[4]||=G(` Смотрю состояние чата…`,-1)])):D(`v-if`,!0)])):D(`v-if`,!0),i.state.error?(K(),U(`p`,EN,X(i.state.error),1)):D(`v-if`,!0)],512),I(`div`,DN,[te(I(`textarea`,{ref:`input`,"onUpdate:modelValue":n[0]||=e=>i.state.question=e,name:`side-question`,rows:`2`,placeholder:`Например: завис ли процесс? какой сейчас статус?`,"aria-label":`Вопрос в сторону`,disabled:i.state.busy,onKeydown:i.keydown},null,40,ON),[[j,i.state.question]]),I(`div`,kN,[n[7]||=I(`span`,{class:`note`},`Enter — спросить · Shift+Enter — новая строка`,-1),i.state.busy?(K(),F(i.UiButton,{key:0,size:`sm`,onClick:n[1]||=e=>i.props.side.stop()},{default:e(()=>[...n[5]||=[G(`Остановить`,-1)]]),_:1})):(K(),F(i.UiButton,{key:1,size:`sm`,disabled:!i.state.question.trim(),onClick:i.send},{default:e(()=>[...n[6]||=[G(` Спросить `,-1)]]),_:1},8,[`disabled`]))])])])}var jN=H(uN,[[`render`,AN],[`__scopeId`,`data-v-f1bc215c`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/panels/ui/AgentSideQuestion.vue`]]),MN={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function NN(e,t){return K(),U(`svg`,MN,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M15 6a9 9 0 0 0-9 9V3`}),I(`circle`,{cx:`18`,cy:`6`,r:`3`}),I(`circle`,{cx:`6`,cy:`18`,r:`3`})],-1)]])}var PN=L({name:`lucide-git-branch`,render:NN}),FN=W({__name:`AgentWorktree`,props:{branch:{type:String,required:!0},info:{type:Object,required:!1},working:{type:Boolean,required:!0},note:{type:String,required:!0}},emits:[`merge`,`discard`],setup(e,{expose:t,emit:n}){t();let r={emit:n,UiCard:je,UiInline:Be,UiButton:q,get IconBranch(){return PN}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),IN={class:`what`},LN={key:0,class:`note`,role:`status`};function RN(t,n,r,i,a,o){return K(),F(i.UiCard,{density:`compact`,class:`worktree`,"aria-label":`Изолированная копия проекта`},{default:e(()=>[y(i.UiInline,{as:`header`,align:`flex-start`,justify:`normal`},{default:e(()=>[y(i.IconBranch,{"aria-hidden":`true`}),I(`span`,IN,[n[2]||=G(`Чат работает в изолированной копии, ветка `,-1),I(`code`,null,X(r.branch),1),n[3]||=G(`. Файлы проекта не затронуты`,-1),r.info?(K(),U(P,{key:0},[G(`; изменено файлов: `+X(r.info.changed),1)],64)):D(`v-if`,!0),n[4]||=G(`.`,-1)])]),_:1}),r.note?(K(),U(`p`,LN,X(r.note),1)):D(`v-if`,!0),y(i.UiInline,{align:`stretch`},{default:e(()=>[y(i.UiButton,{appearance:`solid`,size:`sm`,disabled:r.working,title:`Влить изменения в ветку проекта и удалить копию`,onClick:n[0]||=e=>i.emit(`merge`)},{default:e(()=>[...n[5]||=[G(` Влить в проект `,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{size:`sm`,disabled:r.working,title:`Удалить копию вместе со всем, что агент в ней сделал`,onClick:n[1]||=e=>i.emit(`discard`)},{default:e(()=>[...n[6]||=[G(` Отбросить `,-1)]]),_:1},8,[`disabled`])]),_:1})]),_:1})}var zN=H(FN,[[`render`,RN],[`__scopeId`,`data-v-020db392`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/panels/ui/AgentWorktree.vue`]]);function BN(e){E(e.busy,n=>{let r=e.capabilities.value.compact;n||!r||e.contextShare.value<r.autoAt||e.queue.value.length||e.turns.value.findLast(e=>e.role===`user`)?.text!==r.command&&(e.error.value||t())});async function t(){await e.toBottom();let t=e.capabilities.value.compact;if(!t)throw Error(`Агент не поддерживает сжатие разговора`);await e.send(t.command)}return{compact:t}}function VN(e,t,n,r,i){let a=B(()=>{let t=e.value.at(-1);return t?.role===`assistant`&&t.failure?t:void 0}),o=B(()=>!!a.value&&!r.value&&!t.value&&n.value===a.value.failure);async function s(){let e=a.value;e&&await i(e.id)}return{retryableError:o,retryFailed:s}}function HN(e){async function t(){if(!e.draft.value.trim())return;let t=e.side.command(e.draft.value);t===void 0?(e.toBottom(),await e.send(),e.focus()):(e.draft.value=``,e.draftParts.value=[],e.side.openPanel(),t&&e.side.ask(t).catch(()=>{}))}async function n(){e.toBottom(),await e.send(`продолжай`)}async function r(t){e.draft.value=t,await p(),e.focus()}async function i(){e.side.reset(),await e.clear(),e.resetAway(),e.focus()}return{submit:t,continueTurn:n,suggest:r,newChat:i}}var UN=3;function WN(e){return e.slice(-16).map(e=>`${e.role===`user`?`Пользователь`:`Ассистент`}: ${e.text}`).join(`
|
|
70
|
-
|
|
71
|
-
`).slice(-2e4)}function GN(e,t){let n=new Map;for(let r=0;r<e.length-1;r++){let i=e[r],a=e[r+1];if(i.role!==`assistant`||a.role!==`user`||!a.form)continue;let o=ly(i.text,t);o&&n.set(i.id,o)}return n}function KN(e){let t=B(()=>{if(e.busy.value)return;let t=e.turns.value.at(-1);return t?.role===`assistant`?ly(t.text,e.projectId):void 0}),n=ee(),r=ee(),i=B(()=>GN(e.turns.value,e.projectId));function a(t){if(t.role!==`assistant`)return{};if(t.id===e.turns.value.at(-1)?.id)return r.value?{promotedForm:r.value}:{};let n=i.value.get(t.id);return n?{promotedForm:n,formAnswered:!0}:{}}let o=ee(!1),s=ee(``),c=0,l;async function u(t){let i=++c;if(l?.abort(),l=void 0,n.value=void 0,r.value=t,o.value=!1,s.value=``,!t)return;let a=Cy(t),u=await xy(a,e.projectId);if(i!==c)return;if(!u){n.value=a;return}o.value=!0;let d=new AbortController;l=d;for(let t=0;t<UN&&!d.signal.aborted;t++)try{let t=await iie({form:a,error:u,history:WN(e.turns.value),selection:e.selection?.value,signal:d.signal});if(i!==c||d.signal.aborted)return;let r=gte(t,e.projectId);if(!r){u=`Form Doctor вернул не форму`;continue}if(a=Cy(r),u=await xy(a,e.projectId),i!==c||d.signal.aborted)return;if(!u){n.value=a;return}}catch(e){if(i!==c||d.signal.aborted)return;u=e instanceof Error?e.message:String(e)}i===c&&(o.value=!1,s.value=u??`Не удалось восстановить форму`)}E(t,e=>void u(e),{immediate:!0});async function d(t,n,r,i,a){a&&e.edit(a),e.draft.value=t,e.draftParts.value=[],await p(),await e.send(void 0,void 0,{form:{source:i,values:n,...r?{summary:r}:{}}})}function f(e,t,n,r){return d(e,t,n,r)}function m(t,n,r,i){let a=e.turns.value.find(e=>e.id===t&&e.role===`user`);if(a?.form)return d(n,r,i,a.form.source,t)}return{pendingForm:n,originalForm:r,answeredForms:i,answerFormFor:a,repairing:o,repairError:s,submitComposerForm:f,submitTurnForm:m}}var qN=3;function JN(e){return e.slice(-16).map(e=>`${e.role===`user`?`Пользователь`:`Ассистент`}: ${e.text}`).join(`
|
|
72
|
-
|
|
73
|
-
`).slice(-2e4)}function YN(e,t){if(e.text=t,!e.parts)return;let n=!1,r=[];for(let i of e.parts)i.type===`text`?n||=(r.push({type:`text`,text:t}),!0):r.push(i);e.parts=r}function XN(e){let t=new Map,n=new Map;async function r(r){if(r.role!==`assistant`||t.get(r.id)===r.text)return;t.set(r.id,r.text),n.get(r.id)?.abort();let i=await Sy(r.text,e.projectId);if(!i||t.get(r.id)!==r.text)return;let a=r.text,o=i,s=new AbortController;n.set(r.id,s);for(let n=0;n<qN&&!s.signal.aborted;n++)try{let n=await aie({answer:a,error:o,history:JN(e.turns.value),selection:e.selection?.value,signal:s.signal});if(s.signal.aborted||t.get(r.id)!==r.text)return;let i=fte(n);if(!i){o=`Answer Doctor вернул пустой ответ`;continue}a=i;let c=await Sy(a,e.projectId);if(s.signal.aborted||t.get(r.id)!==r.text)return;if(!c){let t=e.turns.value.find(e=>e.id===r.id);if(t?.text!==r.text)return;YN(t,a),e.persist();return}o=c}catch(e){if(s.signal.aborted||t.get(r.id)!==r.text)return;o=e instanceof Error?e.message:String(e)}}E(()=>e.busy.value?[]:e.turns.value.filter(e=>e.role===`assistant`).map(e=>[e.id,e.text]),t=>{for(let[n]of t){let t=e.turns.value.find(e=>e.id===n);t&&r(t)}},{immediate:!0}),k(()=>{for(let e of n.values())e.abort()})}var ZN=W({__name:`AgentWelcome`,props:{plain:{type:Boolean,required:!1,default:!1},agentName:{type:String,required:!1,default:`Агент`},roleName:{type:String,required:!1,default:void 0}},emits:[`suggest`,`open`],setup(e,{expose:t,emit:n}){t();let r=n,{isEnabled:i}=IC(),a={emit:r,isEnabled:i,coders:B(()=>DC().filter(e=>i(e.program))),suggestions:[{title:`Разобраться в проекте`,text:`Посмотри структуру проекта и расскажи, где находятся основные части приложения.`},{title:`Посмотреть изменения в Git`,text:`Посмотри изменения в Git и кратко объясни, что изменилось. Ничего не меняй.`},{title:`Найти команду Projector`,text:`Какие команды Projector доступны для этого проекта?`}],UiButton:q};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),QN={class:`welcome`},$N={key:0,class:`role`},eP={key:1},tP={key:2,class:`suggestions`},nP={key:3,class:`coders`},rP={class:`coders-list`};function iP(t,n,r,i,a,o){return K(),U(`div`,QN,[I(`h1`,null,X(r.plain?r.agentName:`С чего начнём?`),1),r.roleName?(K(),U(`p`,$N,`Роль: `+X(r.roleName),1)):D(`v-if`,!0),r.plain?(K(),U(`p`,eP,`Работает в папке проекта, как в терминале.`)):(K(),U(`div`,tP,[(K(),U(P,null,S(i.suggestions,t=>y(i.UiButton,{appearance:`outline`,tone:`muted`,shape:`pill`,key:t.title,type:`button`,onClick:e=>i.emit(`suggest`,t.text)},{default:e(()=>[G(X(t.title),1)]),_:2},1032,[`onClick`])),64))])),r.plain?D(`v-if`,!0):(K(),U(`div`,nP,[n[0]||=I(`span`,{class:`coders-label`,title:`Я управляю Projector и не пишу код в файлах`},` Писать код — в агенте `,-1),I(`div`,rP,[(K(!0),U(P,null,S(i.coders,t=>(K(),F(i.UiButton,{appearance:`outline`,tone:`muted`,shape:`pill`,key:t.program,type:`button`,onClick:e=>i.emit(`open`,t.program)},{default:e(()=>[G(X(t.title),1)]),_:2},1032,[`onClick`]))),128))])]))])}var aP=H(ZN,[[`render`,iP],[`__scopeId`,`data-v-39865c2c`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/ui/AgentWelcome.vue`]]);function oP(e){let t=e.replace(/\r\n?/g,`
|
|
74
|
-
`).split(`
|
|
75
|
-
`);for(;t.length&&!t[0].trim();)t.shift();for(;t.length&&!t.at(-1).trim();)t.pop();return t.map(e=>{let t=e.replace(/[ \t]+$/,``);return t?`> ${t}`:`>`}).join(`
|
|
76
|
-
`)}var sP=104,cP=28;function lP(e){let t=M(``),n=M(),r,i=!1;function a(){clearTimeout(r),r=void 0,t.value=``,n.value=void 0}function o(){let t=e.root(),n=document.getSelection();if(!t||!n||n.isCollapsed)return;let{anchorNode:r,focusNode:i}=n;if(!r||!i||!t.contains(r)||!t.contains(i))return;let a=n.toString().trim();if(!a||!n.rangeCount)return;let o=n.getRangeAt(0),s=o.getClientRects(),c=s.length?s[s.length-1]:o.getBoundingClientRect();return{text:a,position:{left:Math.min(Math.max(8,c.right+8),Math.max(8,window.innerWidth-sP-8)),top:Math.min(Math.max(8,c.bottom+8),Math.max(8,window.innerHeight-cP-8))}}}function s(){r=void 0;let e=o();e?(t.value=e.text,n.value=e.position):a()}function c(e=0){clearTimeout(r),r=setTimeout(s,e)}function l(e){e.target?.closest?.(`.quote-selection`)||(i=!0,a())}function u(){i&&(i=!1,c(30))}function d(){if(i)return;let e=document.getSelection();!e||e.isCollapsed?a():c(180)}function f(e){e.key===`Escape`?a():(e.shiftKey||e.key.startsWith(`Arrow`)||e.key===`Home`||e.key===`End`)&&c(120)}function p(){let n=oP(t.value);n&&e.quote(n),document.getSelection()?.removeAllRanges(),a()}return document.addEventListener(`pointerdown`,l,!0),document.addEventListener(`pointerup`,u,!0),document.addEventListener(`selectionchange`,d),document.addEventListener(`keyup`,f),document.addEventListener(`scroll`,a,!0),g(()=>{clearTimeout(r),document.removeEventListener(`pointerdown`,l,!0),document.removeEventListener(`pointerup`,u,!0),document.removeEventListener(`selectionchange`,d),document.removeEventListener(`keyup`,f),document.removeEventListener(`scroll`,a,!0)}),{text:t,position:n,add:p,hide:a}}function uP(e){let t=e.trim();if(!t||t.startsWith(`#`))return null;let n=t.split(` `)[0]?.trim()??``;if(n.startsWith(`file:`))try{let e=new URL(n);return decodeURIComponent(e.pathname)}catch{return decodeURIComponent(n.replace(/^file:\/\/[^/]*/,``))}return n.startsWith(`/`)?n.replace(/\/+$/,``)||`/`:null}function dP(e,t){for(let n of e.split(/\r?\n/)){let e=uP(n);e&&!t.includes(e)&&t.push(e)}}function fP(e){return e?e.types.some(e=>e===`Files`||e===`text/uri-list`||e===`text/x-moz-url`||e.includes(`uri`)):!1}function pP(e){if(!e)return[];let t=[],n=[...e.types];for(let r of n){if(r===`Files`)continue;let n=e.getData(r);n&&dP(n,t)}t.length||(dP(e.getData(`text/uri-list`),t),dP(e.getData(`text/plain`),t));for(let n of e.files){let e=n.path;e&&!t.includes(e)&&t.push(e)}return t}var mP=e=>new Promise((t,n)=>e.readEntries(t,n)),hP=e=>new Promise((t,n)=>e.file(t,n));async function gP(e,t,n){let r=t+e.name;if(e.isFile){n.push({path:r,file:await hP(e)});return}let i=e.createReader(),a=n.length;for(let e=await mP(i);e.length;e=await mP(i))for(let t of e)await gP(t,r+`/`,n);n.length===a&&n.push({path:r})}function _P(e){let t=pP(e);if(t.length)return{kind:`paths`,paths:t};let n=[...e.items].filter(e=>e.kind===`file`).map(e=>({entry:e.webkitGetAsEntry?.()??null,file:e.getAsFile()})),r=n.length?[]:[...e.files],i=(async()=>{let e=r.map(e=>({path:e.name,file:e}));for(let{entry:t,file:r}of n)t?await gP(t,``,e):r&&e.push({path:r.name,file:r});return e})();return i.catch(()=>void 0),{kind:`files`,entries:i}}var vP=e=>e.split(`/`)[0],yP=e=>e.replace(/\/+$/,``).split(`/`).at(-1)??``;function bP(e,t,n){let r=n;for(let n of t)wx(e,r,r,n),r+=lx(n).length+1}function xP(e,t){bP(e,t,e.state.selection.main.head),e.focus()}function SP(e,t){let n=e.state.doc.length,r=e.state.doc.toString();r&&!/\s$/.test(r)&&(e.dispatch({changes:{from:n,insert:` `},selection:nr.cursor(n+1)}),n+=1),bP(e,t,n),e.focus()}function CP(e,t){let n=t.trim();if(!n)return;let r=e.state.doc.toString(),i=r?r.endsWith(`
|
|
77
|
-
|
|
78
|
-
`)?``:r.endsWith(`
|
|
79
|
-
`)?`
|
|
80
|
-
`:`
|
|
81
|
-
|
|
82
|
-
`:``,a=e.state.doc.length;e.dispatch({changes:{from:a,insert:i+n},selection:nr.cursor(a+i.length+n.length),userEvent:`input.paste`}),e.focus()}function wP(e,t){let n=t.trim();if(!n)return;let{from:r,to:i}=e.state.selection.main,a=e.state.doc.sliceString(0,r),o=e.state.doc.sliceString(i),s=a?a.endsWith(`
|
|
83
|
-
|
|
84
|
-
`)?``:a.endsWith(`
|
|
85
|
-
`)?`
|
|
86
|
-
`:`
|
|
87
|
-
|
|
88
|
-
`:``,c=o?o.startsWith(`
|
|
89
|
-
|
|
90
|
-
`)?``:o.startsWith(`
|
|
91
|
-
`)?`
|
|
92
|
-
`:`
|
|
93
|
-
|
|
94
|
-
`:`
|
|
95
|
-
|
|
96
|
-
`,l=s+n+c;e.dispatch({changes:{from:r,to:i,insert:l},selection:nr.cursor(r+s.length+n.length+c.length),userEvent:`input.paste`}),e.focus()}async function TP(e,t){if(!t.length)throw Error(`Не удалось прочитать перетащенные файлы`);if(!it(e))throw Error(`Этот проект не принимает загрузку файлов`);let n=[...new Set(t.map(e=>vP(e.path)))],{conflicts:r}=await jt(e,``,n),i=new Map(r.map(({name:e,free:t})=>[e,t])),a=e=>i.get(e)??e;for(let n of t){let[t,...r]=n.path.split(`/`);await nn(e,``,[a(t),...r].join(`/`),n.file)}return n.map(e=>{let n=a(e);return t.find(t=>t.path===e)?.file?{type:`file`,path:n}:{type:`file`,path:n,directory:!0}})}function EP(e){let t=``;async function n(){let n=e.projectId();if(n)try{t=(await tt(n,`root`)).root}catch{t=``}}f(n);function r(e){return{type:`file`,path:t&&e.startsWith(`${t}/`)?e.slice(t.length+1):e}}function i(t){let n=e.projectId(),i=t.getData(`application/x-projector-tree-entry`);if(i)try{let e=JSON.parse(i);return e.projectId===n?(Array.isArray(e.paths)&&e.paths.length?e.paths:[e.path]).filter(e=>typeof e==`string`&&!!e).map(e=>({type:`file`,path:e})):[]}catch{return[]}return pP(t).map(r)}async function a(t,n){let r=e.view.value;if(!r)return;let i=n;for(let n of t)try{let e=await oie(n),t=Math.min(i??r.state.selection.main.head,r.state.doc.length);wx(r,t,t,e),i=t+lx(e).length+1}catch(t){e.onFail(t instanceof Error?t.message:`Не удалось загрузить файл`)}r.focus()}let o=e=>[...e?.files??[]].filter(e=>e.type.startsWith(`image/`));function s(e){let t=o(e);return t.length?(a(t),!0):!1}function c(e){return!!e&&(fP(e)||e.types.includes(`application/x-projector-tree-entry`))}async function l(t,n){let r=e.view.value,i=e.projectId();if(r){if(!i)e.onFail(`Папку можно добавить только в проект`);else try{let a=await TP(i,t.kind===`files`?await t.entries:[]);if(e.view.value!==r||i!==e.projectId()||!a.length)return;bP(r,a,Math.min(n,r.state.doc.length)),r.focus()}catch(t){e.onFail(t instanceof Error?t.message:`Не удалось добавить файлы`)}}}function u(t,n){let r=e.view.value;if(!r)return!1;let o=n??r.state.selection.main.head,s=i(t);if(s.length)return bP(r,s,o),r.focus(),!0;let c=[...t.files];return[...t.items].filter(e=>e.kind===`file`).some(e=>e.webkitGetAsEntry?.()?.isDirectory)?(l(_P(t),o),!0):c.length?(a(c,o),!0):!1}return{acceptsDrag:c,dropData:u,pasteImages:s,attachFiles:a}}function DP(e){let{main:t}=e.selection;if(!t.empty)return;let n=e.doc.lineAt(t.head),r=n.text.slice(0,t.head-n.from),i=/(?:^|\s)@([^\s@"]*)$/.exec(r);if(i){let e=i[1];return{kind:`file`,query:e,from:t.head-e.length-1,to:t.head}}let a=/^\/([^\s/]*)$/.exec(r);if(a&&n.number===1)return{kind:`command`,query:a[1],from:n.from,to:t.head}}function OP(e){let t=M([]),n=M(0),r,i;async function a(){let a=e.trigger.value;if(r?.abort(),clearTimeout(i),!a||e.dismissed.value===`${a.from}:${a.query}`){t.value=[];return}if(a.kind===`command`){let r=a.query.toLowerCase();t.value=(e.commands()??[]).map(e=>({command:e,at:e.name.toLowerCase().indexOf(r)})).filter(e=>e.at>=0).sort((e,t)=>e.at-t.at||e.command.name.localeCompare(t.command.name)).map(e=>e.command).slice(0,30).map(e=>({key:e.name,label:`/${e.name}`,detail:e.description,chip:{type:`command`,name:e.name},icon:mx({type:`command`,name:e.name})})),n.value=0;return}let o=e.projectId();if(!o)return;let s=r=new AbortController;i=setTimeout(async()=>{try{let e=await Nt(o,a.query,s.signal);if(s.signal.aborted)return;t.value=e.map(e=>{let t={type:`file`,path:e.path,directory:e.directory};return{key:e.path,label:e.path.split(`/`).pop()||e.path,detail:e.path.includes(`/`)?e.path.slice(0,e.path.lastIndexOf(`/`)):``,path:!0,chip:t,icon:mx(t)}}),n.value=0}catch{s.signal.aborted||(t.value=[])}},60)}return E(e.trigger,a,{deep:!0}),E(e.commands,()=>{e.trigger.value?.kind===`command`&&a()},{deep:!0}),k(()=>{r?.abort(),clearTimeout(i)}),{suggestions:t,active:n,refresh:a}}var kP=W({__name:`AgentInput`,props:t({projectId:{type:String,required:!1},commands:{type:Array,required:!1}},{modelValue:{type:String,required:!0},modelModifiers:{},parts:{type:Array,default:()=>[]},partsModifiers:{}}),emits:t([`submit`,`open`,`fail`],[`update:modelValue`,`update:parts`]),setup(e,{expose:t,emit:n}){let r=u(e,`modelValue`),i=u(e,`parts`),a=e,o=n,s=M(),c=ee(),{acceptsDrag:l,dropData:d,pasteImages:p}=EP({projectId:()=>a.projectId,view:c,onFail:e=>o(`fail`,e)}),m=M(),h=M(``),{suggestions:_,active:v}=OP({projectId:()=>a.projectId,commands:()=>a.commands,trigger:m,dismissed:h}),y=B(()=>!!m.value&&_.value.length>0);function b(e=v.value){let t=c.value,n=_.value[e],r=m.value;return!t||!n||!r||!y.value?!1:(wx(t,r.from,r.to,n.chip),_.value=[],t.focus(),!0)}function x(e){return y.value?(v.value=(v.value+e+_.value.length)%_.value.length,s.value?.parentElement?.querySelector(`[data-index="${v.value}"]`)?.scrollIntoView({block:`nearest`}),!0):!1}function S(){return!y.value||!m.value?!1:(h.value=`${m.value.from}:${m.value.query}`,_.value=[],!0)}function C(e){let t=Sx(e),n=ux(t);n!==r.value&&(r.value=n),i.value=t}function w(e){return i.value.length&&ux(i.value).trim()===e.trim()?i.value:e?[{type:`text`,text:e}]:[]}f(()=>{let e=()=>(b()||o(`submit`),!0),t=new Zn({parent:s.value,state:In.create({doc:``,extensions:[Lt(),Ox,Zn.lineWrapping,Zn.contentAttributes.of({"aria-label":`Сообщение агенту`,"aria-multiline":`true`,spellcheck:`true`}),rr(`Что нужно сделать в проекте?`),Wn.highest(er.of([{key:`ArrowDown`,run:()=>x(1)},{key:`ArrowUp`,run:()=>x(-1)},{key:`Tab`,run:()=>b()},{key:`Escape`,run:S},{key:`Backspace`,run:Ex},{key:`Delete`,run:Dx},{key:`Enter`,run:t=>!t.composing&&e()},{key:`Shift-Enter`,run:e=>(e.dispatch(e.state.replaceSelection(`
|
|
97
|
-
`),{userEvent:`input`}),!0)}])),er.of([...Jt,...Ot]),Zn.domEventHandlers({dragover(e){return l(e.dataTransfer)?(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect=`copy`,!0):!1},drop(e,t){let n=e.dataTransfer;if(!n)return!1;let r=t.posAtCoords({x:e.clientX,y:e.clientY})??t.state.selection.main.head;return d(n,r)?(e.preventDefault(),e.stopPropagation(),!0):!1},paste(e){return p(e.clipboardData)?(e.preventDefault(),!0):!1},mousedown(e){let t=e.target.closest(`.composer-chip`);return t?.dataset.chip?(e.preventDefault(),o(`open`,JSON.parse(t.dataset.chip)),!0):!1}}),Zn.updateListener.of(e=>{if(e.docChanged&&C(e.state),e.docChanged||e.selectionSet){let t=DP(e.state);(t?.kind!==m.value?.kind||t?.from!==m.value?.from||t?.query!==m.value?.query)&&(m.value=t)}})]})});c.value=t,(r.value||i.value.length)&&Cx(t,w(r.value))}),g(()=>{c.value?.destroy()}),E(r,e=>{let t=c.value,n=t?ux(Sx(t.state)):``;!t||e===n||e&&e===n.trim()||Cx(t,w(e))}),t({focus:()=>c.value?.focus(),insertChips:e=>{c.value&&xP(c.value,e)},appendChips:e=>{c.value&&SP(c.value,e)},appendText:e=>{c.value&&CP(c.value,e)},insertQuote:e=>{c.value&&wP(c.value,e)},acceptsDrag:l,dropData:d,end:()=>c.value?.dispatch({selection:nr.cursor(c.value.state.doc.length)})});let T={draft:r,parts:i,props:a,emit:o,host:s,view:c,acceptsDrag:l,dropData:d,pasteImages:p,trigger:m,dismissed:h,suggestions:_,active:v,open:y,accept:b,moveActive:x,dismiss:S,commit:C,draftContent:w,UiPopupSurface:Fd};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}}),AP={class:`agent-input`},jP={ref:`host`,class:`editor`},MP=[`aria-selected`,`data-index`,`onMousedown`,`onMousemove`],NP=[`innerHTML`],PP={class:`label`};function FP(t,n,r,i,a,o){return K(),U(`div`,AP,[I(`div`,jP,null,512),i.open?(K(),F(i.UiPopupSurface,{key:0,class:`suggest`,role:`listbox`,"aria-label":`Подсказки`,flow:`column`,border:`strong`,radius:`lg`},{default:e(()=>[(K(!0),U(P,null,S(i.suggestions,(e,t)=>(K(),U(`button`,{key:e.key,type:`button`,role:`option`,class:Y([`suggestion`,{active:t===i.active}]),"aria-selected":t===i.active,"data-index":t,tabindex:`-1`,onMousedown:N(e=>i.accept(t),[`prevent`]),onMousemove:e=>i.active=t},[I(`span`,{class:`icon`,"aria-hidden":`true`,innerHTML:e.icon},null,8,NP),I(`span`,PP,X(e.label),1),e.detail?(K(),U(`span`,{key:0,class:Y([`detail u-truncate`,{path:e.path}])},X(e.detail),3)):D(`v-if`,!0)],42,MP))),128))]),_:1})):D(`v-if`,!0)])}var IP=H(kP,[[`render`,FP],[`__scopeId`,`data-v-eb2881d3`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/composer/ui/AgentInput.vue`]]),LP=W({__name:`AgentWorkClock`,props:{startedAt:{type:Number,required:!1,default:void 0},title:{type:String,required:!1,default:`Агент работает над ответом`}},setup(e,{expose:t}){t();let n=e,r=Nx(),i={props:n,now:r,elapsed:B(()=>n.startedAt===void 0?``:kx(r.value-n.startedAt)),get IconTimer(){return DO}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),RP=[`title`,`aria-label`];function zP(e,t,n,r,i,a){return r.elapsed?(K(),U(`span`,{key:0,class:`work-clock`,role:`timer`,title:`${n.title}: ${r.elapsed}`,"aria-label":`${n.title}: ${r.elapsed}`},[y(r.IconTimer,{"aria-hidden":`true`}),I(`span`,null,X(r.elapsed),1)],8,RP)):D(`v-if`,!0)}var BP=H(LP,[[`render`,zP],[`__scopeId`,`data-v-09e11397`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/composer/ui/AgentWorkClock.vue`]]),VP=W({__name:`AgentQuote`,props:{root:{type:null,required:!1}},emits:[`quote`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{text:a,position:o,add:s}=lP({root:()=>r.root,quote:e=>i(`quote`,e)}),c={props:r,emit:i,text:a,position:o,add:s};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}});function HP(e,t,n,r,i,a){return K(),F(fe,{to:`body`},[r.text&&r.position?(K(),U(`button`,{key:0,type:`button`,class:`quote-selection`,title:`Цитировать выделенный текст`,"aria-label":`Цитировать выделенный текст`,style:Qe({left:`${r.position.left}px`,top:`${r.position.top}px`}),onMousedown:t[0]||=N(()=>{},[`prevent`]),onClick:t[1]||=(...e)=>r.add&&r.add(...e)},` Цитировать `,36)):D(`v-if`,!0)])}var UP=H(VP,[[`render`,HP],[`__scopeId`,`data-v-fd6aa458`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/composer/ui/AgentQuote.vue`]]),WP={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function GP(e,t){return K(),U(`svg`,WP,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m5 12l7-7l7 7m-7 7V5`},null,-1)]])}var KP=L({name:`lucide-arrow-up`,render:GP}),qP={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function JP(e,t){return K(),U(`svg`,qP,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 4v16M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2M9 20h6`},null,-1)]])}var YP=L({name:`lucide-type`,render:JP}),XP=W({__name:`AgentComposer`,props:t({busy:{type:Boolean,required:!0},startedAt:{type:Number,required:!1},error:{type:String,required:!0},copied:{type:Boolean,required:!0},projectId:{type:String,required:!1},quoteRoot:{type:null,required:!1},commands:{type:Array,required:!1},form:{type:String,required:!1},editing:{type:Boolean,required:!1},retryable:{type:Boolean,required:!1}},{modelValue:{type:String,required:!0},modelModifiers:{},parts:{type:Array,default:()=>[]},partsModifiers:{}}),emits:t([`submit`,`stop`,`open`,`fail`,`dismiss`,`retry`,`formSubmit`],[`update:modelValue`,`update:parts`]),setup(e,{expose:t,emit:n}){let r=u(e,`modelValue`),i=u(e,`parts`),a=e,o=n,s=M(!1),c=B(()=>a.error.length>160||a.error.includes(`
|
|
98
|
-
`));E(()=>a.error,()=>s.value=!1);let l=M(``);E(()=>a.form,(e,t)=>{e&&e!==t&&(l.value=``)}),E(()=>a.busy,(e,t)=>{t&&!e&&(l.value=``)});let d=B(()=>!!a.form&&!a.busy&&!a.editing&&l.value!==a.form),f=B(()=>d.value?a.form:void 0);function m(){l.value=a.form??``}function h(){a.form&&(l.value=``)}function g(e,t,n){let r=a.form;r&&(l.value=r,o(`formSubmit`,e,t,n,r))}let _=M(),v=M(),y=M(!1);E(()=>d.value,e=>{e||(y.value=!1)}),E(f,()=>y.value=!1);function b(){d.value?v.value?.submit():o(`submit`)}async function x(e){m(),await p(),_.value?.appendChips(e)}async function S(e){m(),await p(),_.value?.appendText(e)}async function C(e){m(),await p(),_.value?.insertQuote(e)}t({focus:()=>{d.value||_.value?.focus()},attach:x,appendText:S,quote:C,acceptsDrag:e=>!!_.value?.acceptsDrag(e),dropData:e=>!!_.value?.dropData(e),showForm:h,hideForm:m});let w={draft:r,parts:i,props:a,emit:o,expanded:s,long:c,dismissed:l,formOpen:d,activeForm:f,dismissForm:m,restoreForm:h,submitForm:g,input:_,formPanel:v,formSubmittable:y,submitActive:b,attach:x,appendText:S,quote:C,UiInline:Be,AgentInput:IP,get AgentFormPanel(){return lO},AgentWorkClock:BP,AgentQuote:UP,UiButton:q,get IconArrowUp(){return KP},get IconSquare(){return Py},get IconAlert(){return Ly},get IconType(){return YP},get IconListChecks(){return Ij},get IconRefresh(){return xO},get IconX(){return Cn}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}}),ZP={class:`composer-area`},QP={key:0,class:`chat-error`,role:`alert`},$P={key:0,class:`composer-form`},eF=[`title`,`aria-label`,`disabled`],tF={class:`u-sr-only`,role:`status`};function nF(t,n,r,i,a,o){return K(),U(`div`,ZP,[r.error?(K(),U(`div`,QP,[y(i.IconAlert,{"aria-hidden":`true`}),I(`p`,{class:Y([`chat-error-text`,{clamped:i.long&&!i.expanded,open:i.expanded}])},X(r.error),3),i.long?(K(),U(`button`,{key:0,type:`button`,class:`chat-error-toggle`,onClick:n[0]||=e=>i.expanded=!i.expanded},X(i.expanded?`Свернуть`:`Развернуть`),1)):D(`v-if`,!0),r.retryable&&!r.busy?(K(),U(`button`,{key:1,type:`button`,class:`chat-error-retry`,title:`Повторить ответ`,"aria-label":`Повторить ответ`,onClick:n[1]||=e=>i.emit(`retry`)},[y(i.IconRefresh,{"aria-hidden":`true`})])):D(`v-if`,!0),I(`button`,{type:`button`,class:`chat-error-close`,title:`Скрыть`,"aria-label":`Скрыть ошибку`,onClick:n[2]||=e=>i.emit(`dismiss`)},[y(i.IconX,{"aria-hidden":`true`})])])):D(`v-if`,!0),y(i.AgentQuote,{root:r.quoteRoot,onQuote:i.quote},null,8,[`root`]),I(`form`,{class:Y([`composer`,{working:r.busy,"form-mode":i.formOpen}]),onSubmit:N(i.submitActive,[`prevent`])},[i.activeForm?(K(),U(`div`,$P,[y(i.AgentFormPanel,{ref:`formPanel`,composer:``,source:i.activeForm,"project-id":r.projectId,onSubmit:i.submitForm,onSubmittable:n[3]||=e=>i.formSubmittable=e},null,8,[`source`,`project-id`])])):D(`v-if`,!0),te(y(i.AgentInput,{ref:`input`,modelValue:i.draft,"onUpdate:modelValue":n[4]||=e=>i.draft=e,parts:i.parts,"onUpdate:parts":n[5]||=e=>i.parts=e,"project-id":r.projectId,commands:r.commands,onSubmit:n[6]||=e=>i.emit(`submit`),onOpen:n[7]||=e=>i.emit(`open`,e),onFail:n[8]||=e=>i.emit(`fail`,e)},null,8,[`modelValue`,`parts`,`project-id`,`commands`]),[[ae,!i.formOpen]]),y(i.UiInline,{class:`composer-footer`,justify:`normal`},{default:e(()=>[c(t.$slots,`controls`,{},void 0,!0),y(i.UiInline,{class:`footer-end`,justify:`normal`},{default:e(()=>[r.form&&!r.editing?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,class:`form-toggle`,title:i.formOpen?`Переключиться на текст`:`Открыть форму ответа`,"aria-label":i.formOpen?`Переключиться на текст`:`Открыть форму ответа`,"aria-pressed":i.formOpen,onClick:n[9]||=e=>i.formOpen?i.dismissForm():i.restoreForm()},{default:e(()=>[i.formOpen?(K(),F(i.IconType,{key:0,"aria-hidden":`true`})):(K(),F(i.IconListChecks,{key:1,"aria-hidden":`true`}))]),_:1},8,[`title`,`aria-label`,`aria-pressed`])):D(`v-if`,!0),r.busy&&r.startedAt?(K(),F(i.AgentWorkClock,{key:1,"started-at":r.startedAt},null,8,[`started-at`])):D(`v-if`,!0),c(t.$slots,`status`,{},void 0,!0),r.busy?(K(),U(`button`,{key:2,type:`button`,class:`send-button stop-button`,title:`Остановить`,"aria-label":`Остановить`,onClick:n[10]||=e=>i.emit(`stop`)},[y(i.IconSquare,{"aria-hidden":`true`})])):D(`v-if`,!0),!r.busy||i.draft.trim()?(K(),U(`button`,{key:3,type:`submit`,class:`send-button`,title:i.formOpen?i.formSubmittable?`Отправить форму`:`Сначала отправьте форму`:r.busy?`В очередь: уйдёт, когда агент закончит (Enter)`:`Отправить (Enter)`,"aria-label":i.formOpen?i.formSubmittable?`Отправить форму`:`Отправка недоступна, пока открыта форма`:r.busy?`Поставить сообщение в очередь`:`Отправить сообщение`,disabled:i.formOpen?!i.formSubmittable:!i.draft.trim()},[y(i.IconArrowUp,{"aria-hidden":`true`})],8,eF)):D(`v-if`,!0)]),_:3})]),_:3})],34),I(`span`,tF,X(r.copied?`Ответ скопирован`:``),1)])}var rF=H(XP,[[`render`,nF],[`__scopeId`,`data-v-974cd04f`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/composer/ui/AgentComposer.vue`]]),iF={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function aF(e,t){return K(),U(`svg`,iF,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m18 15l-6-6l-6 6`},null,-1)]])}var oF=L({name:`lucide-chevron-up`,render:aF}),sF={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function cF(e,t){return K(),U(`svg`,sF,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M12 20v2m0-20v2m5 16v2m0-20v2M2 12h2m-2 5h2M2 7h2m16 5h2m-2 5h2M20 7h2M7 20v2M7 2v2`}),I(`rect`,{width:`16`,height:`16`,x:`4`,y:`4`,rx:`2`}),I(`rect`,{width:`8`,height:`8`,x:`8`,y:`8`,rx:`1`})],-1)]])}var lF=L({name:`lucide-cpu`,render:cF}),uF={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function dF(e,t){return K(),U(`svg`,uF,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15.914 4a1.5 1.5 0 0 0-2.474-1.561l-9 9A1.5 1.5 0 0 0 5.5 14h4.002a.5.5 0 0 1 .471.666L8.086 20a1.5 1.5 0 0 0 2.475 1.56l9-9A1.5 1.5 0 0 0 18.5 10h-3.997a.5.5 0 0 1-.472-.667z`},null,-1)]])}var fF=L({name:`lucide-zap`,render:dF}),pF={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function mF(e,t){return K(),U(`svg`,pF,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M10 5H3m9 14H3M14 3v4m2 10v4m5-9h-9m9 7h-5m5-14h-7m-6 5v4m0-2H3`},null,-1)]])}var hF=L({name:`lucide-sliders-horizontal`,render:mF}),gF=W({__name:`AgentControls`,props:{controls:{type:Array,required:!0},disabled:{type:Boolean,required:!0},mcp:{type:Array,required:!1}},emits:[`change`,`opened`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=Ff({anchor:`left`,placement:`above`,initialFocus:[`button.option.current`,`button.option`],returnFocus:`.trigger`}),{open:o,toggle:s,close:c}=a,l={model:lF,effort:Hk,mode:nk,flag:fF,other:hF};function u(e){return e.options.find(t=>t.value===e.current)?.name??e.current}let d=B(()=>r.controls.filter(e=>e.category!==`other`).map(e=>({id:e.id,category:e.category,name:e.name,value:u(e)}))),f=M(),m=B(()=>r.controls.find(e=>e.id===f.value)),h=B(()=>{let e=m.value?.options??[],t=[];for(let n of e){let e=t.at(-1);e&&e.name===n.group?e.options.push(n):t.push({name:n.group,options:[n]})}return t});E(o,e=>{e?i(`opened`):f.value=void 0});async function g(e){f.value=e,await p(),a.island.value?.querySelector(`button.option.current, button.option, button.row`)?.focus()}function _(e,t){t!==e.current&&i(`change`,e.id,t),c()}function v(e){m.value&&(e.preventDefault(),g())}t({toggle:()=>a.toggle()});let y={props:r,emit:i,menu:a,open:o,toggle:s,close:c,icons:l,currentName:u,summary:d,view:f,selected:m,optionGroups:h,show:g,pick:_,back:v,UiInline:Be,UiStatusDot:Ze,UiStack:Ed,UiActionRow:wl,UiActionCopy:Md,UiIsland:Yd,get IconChevron(){return oF},get IconNext(){return Ch},get IconBack(){return kA},get IconCheck(){return Iy},get IconOther(){return hF}};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}}),_F=[`disabled`,`aria-expanded`,`aria-controls`],vF={class:`value u-truncate`},yF={key:0,class:`mcp`,role:`group`,"aria-label":`MCP-серверы`},bF=[`title`],xF={class:`mcp-name u-truncate`},SF={class:`mcp-state`},CF={key:0,class:`group`};function wF(t,n,r,i,a,o){return K(),U(P,null,[r.controls.length?(K(),U(`div`,{key:0,ref:i.menu.trigger,class:`agent-controls`},[I(`button`,{type:`button`,class:`trigger`,disabled:r.disabled,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.menu.id:void 0,"aria-label":`Параметры агента`,onClick:n[0]||=e=>i.toggle()},[(K(!0),U(P,null,S(i.summary,t=>(K(),F(i.UiInline,{as:`span`,inline:``,gap:1.25,justify:`normal`,key:t.id,class:`chip`,"data-category":t.category,title:`${t.name}: ${t.value}`},{default:e(()=>[(K(),F(C(i.icons[t.category]),{"aria-hidden":`true`})),I(`span`,vF,X(t.value),1)]),_:2},1032,[`data-category`,`title`]))),128)),i.summary.length?D(`v-if`,!0):(K(),F(i.IconOther,{key:0,"aria-hidden":`true`})),y(i.IconChevron,{class:`arrow`,"aria-hidden":`true`})],8,_F)],512)):D(`v-if`,!0),y(i.UiIsland,{menu:i.menu,label:`Параметры агента`,width:300},{default:e(()=>[i.selected?(K(),F(i.UiStack,{key:1,flow:`flex`,gap:`none`,class:`options`,role:`group`,"aria-label":i.selected.name,onKeydown:ye(i.back,[`left`])},{default:e(()=>[y(i.UiActionRow,{separator:`after`,tone:`neutral`,type:`button`,class:`head`,onClick:n[1]||=e=>i.show()},{default:e(()=>[y(i.IconBack,{"aria-hidden":`true`}),y(i.UiActionCopy,{title:i.selected.name,description:i.selected.description,"description-mode":`wrap`},null,8,[`title`,`description`])]),_:1}),y(i.UiStack,{flow:`flex`,gap:`none`,class:`list`},{default:e(()=>[(K(!0),U(P,null,S(i.optionGroups,(t,n)=>(K(),U(P,{key:t.name??n},[t.name?(K(),U(`span`,CF,X(t.name),1)):D(`v-if`,!0),(K(!0),U(P,null,S(t.options,t=>(K(),F(i.UiActionRow,{key:t.value,type:`button`,class:Y([`option`,{current:t.value===i.selected.current}]),role:`menuitemradio`,"aria-checked":t.value===i.selected.current,onClick:e=>i.pick(i.selected,t.value)},{default:e(()=>[y(i.UiActionCopy,{title:t.name,description:t.description,"description-mode":`wrap`,emphasized:t.value===i.selected.current},null,8,[`title`,`description`,`emphasized`]),t.value===i.selected.current?(K(),F(i.IconCheck,{key:0,class:`check`,"aria-hidden":`true`})):D(`v-if`,!0)]),_:2},1032,[`class`,`aria-checked`,`onClick`]))),128))],64))),128))]),_:1})]),_:1},8,[`aria-label`])):(K(),F(i.UiStack,{key:0,flow:`flex`,gap:`none`,class:`rows`,role:`group`,"aria-label":`Параметры агента`},{default:e(()=>[(K(!0),U(P,null,S(r.controls,t=>(K(),F(i.UiActionRow,{key:t.id,type:`button`,class:`row`,title:t.description,onClick:e=>i.show(t.id)},{default:e(()=>[(K(),F(C(i.icons[t.category]),{class:`lead`,"aria-hidden":`true`})),y(i.UiActionCopy,{title:t.name,description:i.currentName(t),"description-mode":`wrap`,"description-tone":`secondary`},null,8,[`title`,`description`]),y(i.IconNext,{class:`next`,"aria-hidden":`true`})]),_:2},1032,[`title`,`onClick`]))),128)),r.mcp?.length?(K(),U(`div`,yF,[n[2]||=I(`span`,{class:`mcp-title`},`MCP-серверы`,-1),(K(!0),U(P,null,S(r.mcp,e=>(K(),U(`span`,{key:e.name,class:`mcp-row`,title:e.error||e.status},[y(i.UiStatusDot,{as:`i`,size:6,radius:`circle`,tone:e.status===`connected`?`success`:e.error?`danger`:`faint`},null,8,[`tone`]),I(`span`,xF,X(e.name),1),I(`span`,SF,X(e.status===`connected`?`работает`:e.status)+X(e.tools?` · ${e.tools}`:``),1)],8,bF))),128))])):D(`v-if`,!0)]),_:1}))]),_:1},8,[`menu`])],64)}var TF=H(gF,[[`render`,wF],[`__scopeId`,`data-v-80abce19`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/modules/composer/ui/AgentControls.vue`]]),EF={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function DF(e,t){return K(),U(`svg`,EF,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`}),I(`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`})],-1)]])}var OF=L({name:`lucide-key-round`,render:DF}),kF=W({__name:`AgentSecrets`,props:{requests:{type:Array,required:!0}},emits:[`answer`],setup(e,{expose:t,emit:n}){t();let r=n,i=de({});function a(e){let t=i[e]??``;t&&(delete i[e],r(`answer`,e,t))}function o(e){delete i[e],r(`answer`,e,null)}let s={emit:r,typed:i,submit:a,decline:o,UiCard:je,UiInline:Be,UiButton:q,get IconKey(){return OF}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),AF={key:0,class:`secrets`,role:`dialog`,"aria-label":`Запрос секрета`},jF={class:`title`},MF={key:0,class:`reason`},NF={key:1,class:`destination`},PF={key:0},FF={key:2,class:`destination`},IF={class:`address`},LF={key:0},RF={key:1},zF={key:3,class:`destination`},BF={key:0},VF=[`onSubmit`],HF=[`onUpdate:modelValue`];function UF(t,n,r,i,a,o){return r.requests.length?(K(),U(`div`,AF,[(K(!0),U(P,null,S(r.requests,t=>(K(),F(i.UiCard,{key:t.id,as:`section`,tone:`warning`,density:`notice`,class:`secret`},{default:e(()=>[y(i.UiInline,{as:`header`,align:`center`,justify:`normal`},{default:e(()=>[y(i.IconKey,{"aria-hidden":`true`}),I(`span`,jF,X(t.label),1)]),_:2},1024),t.reason?(K(),U(`p`,MF,X(t.reason),1)):D(`v-if`,!0),t.destination.kind===`env_file`?(K(),U(`p`,NF,[n[0]||=G(` Значение запишется в `,-1),I(`code`,null,X(t.destination.file),1),n[1]||=G(` как `,-1),I(`code`,null,X(t.destination.key),1),t.destination.replaces?(K(),U(`span`,PF,`, заменит текущее`)):D(`v-if`,!0),n[2]||=G(`. Агент его не увидит. `,-1)])):t.destination.kind===`ai_provider`?(K(),U(`p`,FF,[n[4]||=G(` Ключ провайдера `,-1),I(`strong`,null,X(t.destination.name),1),n[5]||=G(`, адрес `,-1),I(`code`,IF,X(t.destination.url),1),t.destination.model?(K(),U(`span`,LF,[n[3]||=G(`, модель `,-1),I(`code`,null,X(t.destination.model),1)])):D(`v-if`,!0),n[6]||=G(`. Ключ будет отправляться только на этот адрес. Хранится в системном хранилище секретов; `,-1),t.destination.replaces?(K(),U(`span`,RF,`заменит текущий ключ. `)):D(`v-if`,!0),n[7]||=G(`Агент его не увидит. `,-1)])):(K(),U(`p`,zF,[G(` Ключ или токен `+X(t.destination.label)+`: сохраним в системном хранилище секретов`,1),t.destination.replaces?(K(),U(`span`,BF,`, заменит текущий`)):D(`v-if`,!0),n[8]||=G(`. Агент его не увидит. `,-1)])),I(`form`,{class:`entry`,onSubmit:N(e=>i.submit(t.id),[`prevent`])},[te(I(`input`,{"onUpdate:modelValue":e=>i.typed[t.id]=e,class:`value`,type:`password`,name:`secret`,autocomplete:`off`,autocapitalize:`off`,autocorrect:`off`,spellcheck:`false`,placeholder:`Значение`,"aria-label":`Значение секрета`,"data-1p-ignore":``,"data-lpignore":`true`},null,8,HF),[[j,i.typed[t.id]]]),y(i.UiInline,{align:`stretch`},{default:e(()=>[y(i.UiButton,{type:`submit`,appearance:`solid`,size:`sm`,disabled:!i.typed[t.id]},{default:e(()=>[...n[9]||=[G(` Сохранить `,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{type:`button`,size:`sm`,onClick:e=>i.decline(t.id)},{default:e(()=>[...n[10]||=[G(` Отказаться `,-1)]]),_:1},8,[`onClick`])]),_:2},1024)],40,VF)]),_:2},1024))),128))])):D(`v-if`,!0)}var WF=H(kF,[[`render`,UF],[`__scopeId`,`data-v-d8b2ab53`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/ui/AgentSecrets.vue`]]),GF={"System prompt":`Системный промпт`,"System tools":`Инструменты`,"MCP tools":`MCP-инструменты`,"Custom agents":`Агенты`,"Memory files":`Файлы памяти`,Skills:`Навыки`,Messages:`Сообщения`},KF={"System prompt":`var(--info)`,"System tools":`color-mix(in srgb, var(--info) 65%, var(--accent))`,"MCP tools":`color-mix(in srgb, var(--accent) 70%, var(--err))`,"Custom agents":`color-mix(in srgb, var(--run) 65%, var(--info))`,"Memory files":`var(--accent)`,Skills:`color-mix(in srgb, var(--warn) 70%, var(--err))`,Messages:`var(--run)`},qF=W({__name:`AgentContextMeter`,props:{context:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r=Ff({anchor:`right`,placement:`above`,initialFocus:`button`,returnFocus:`button`}),{open:i}=r,a=B(()=>Math.min(100,Math.max(0,n.context.used/n.context.size*100))),o=B(()=>a.value>=90?`err`:a.value>=70?`warn`:`ok`),s=B(()=>Math.max(0,n.context.size-n.context.used)),c=new Intl.NumberFormat(`ru`),l=e=>c.format(Math.round(e)),u=e=>e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${Math.round(e/1e3)}k`:String(e),d={props:n,menu:r,open:i,percent:a,tone:o,left:s,number:c,tokens:l,short:u,label:B(()=>`Контекст заполнен на ${Math.round(a.value)}%: ${u(n.context.used)} из ${u(n.context.size)}`),categories:B(()=>(n.context.categories??[]).filter(e=>e.tokens>0&&!/^free space$/i.test(e.name)).sort((e,t)=>t.tokens-e.tokens).map(e=>({name:GF[e.name]??e.name,tokens:e.tokens,color:KF[e.name]??`var(--muted)`,width:Math.min(100,e.tokens/Math.max(1,n.context.size)*100)}))),cost:B(()=>{let e=n.context.cost;if(!e)return``;try{return new Intl.NumberFormat(`ru`,{style:`currency`,currency:e.currency}).format(e.amount)}catch{return`${e.amount} ${e.currency}`}}),show:()=>void r.toggle(!0),hide:()=>r.close(!1),UiIsland:Yd};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),JF=[`aria-label`,`aria-expanded`,`aria-controls`],YF={viewBox:`0 0 20 20`,"aria-hidden":`true`},XF=[`stroke-dasharray`],ZF={class:`headline`},QF={class:`percent`},$F={class:`bar`,"aria-hidden":`true`},eI={class:`line`},tI={class:`note`},nI={key:0,class:`categories`},rI={class:`cat-name u-truncate`},iI={class:`cat-tokens`},aI={key:1,class:`note`},oI={key:2,class:`note`},sI={key:0},cI={key:1},lI={key:2};function uI(t,n,r,i,a,o){return K(),U(P,null,[I(`div`,{ref:i.menu.trigger,class:`context-meter`},[I(`button`,{type:`button`,class:Y([`ring-button`,i.tone]),"aria-label":i.label,"aria-expanded":i.open,"aria-controls":i.open?i.menu.id:void 0,"aria-haspopup":`dialog`,onMouseenter:i.show,onMouseleave:i.hide,onFocus:i.show,onBlur:i.hide,onKeydown:ye(i.hide,[`esc`])},[(K(),U(`svg`,YF,[n[0]||=I(`circle`,{class:`track`,cx:`10`,cy:`10`,r:`7.5`,pathLength:`100`},null,-1),I(`circle`,{class:`fill`,cx:`10`,cy:`10`,r:`7.5`,pathLength:`100`,"stroke-dasharray":`${i.percent} 100`},null,8,XF)]))],42,JF)],512),y(i.UiIsland,{menu:i.menu,passive:``,label:`Контекст агента`,width:280},{default:e(()=>[I(`div`,{class:Y([`details`,i.tone])},[I(`div`,ZF,[n[1]||=I(`span`,{class:`title`},`Контекст`,-1),I(`span`,QF,X(Math.round(i.percent))+`%`,1)]),I(`div`,$F,[i.categories.length?(K(!0),U(P,{key:0},S(i.categories,e=>(K(),U(`span`,{key:e.name,class:`bar-segment`,style:Qe({width:`${e.width}%`,background:e.color})},null,4))),128)):(K(),U(`span`,{key:1,class:`bar-fill`,style:Qe({width:`${i.percent}%`})},null,4)),r.context.compactAt?(K(),U(`span`,{key:2,class:`bar-mark`,style:Qe({left:`${r.context.compactAt/r.context.size*100}%`})},null,4)):D(`v-if`,!0)]),I(`p`,eI,X(i.tokens(r.context.used))+` из `+X(i.tokens(r.context.size))+` токенов`,1),I(`p`,tI,`Свободно `+X(i.tokens(i.left)),1),i.categories.length?(K(),U(`ul`,nI,[(K(!0),U(P,null,S(i.categories,e=>(K(),U(`li`,{key:e.name},[I(`span`,{class:`cat-dot`,style:Qe({background:e.color}),"aria-hidden":`true`},null,4),I(`span`,rI,X(e.name),1),I(`span`,iI,X(i.short(e.tokens)),1)]))),128))])):D(`v-if`,!0),r.context.compactAt?(K(),U(`p`,aI,` Автосжатие при `+X(i.tokens(r.context.compactAt))+` токенов `,1)):D(`v-if`,!0),r.context.model||i.cost?(K(),U(`p`,oI,[r.context.model?(K(),U(`span`,sI,X(r.context.model),1)):D(`v-if`,!0),r.context.model&&i.cost?(K(),U(`span`,cI,` · `)):D(`v-if`,!0),i.cost?(K(),U(`span`,lI,X(i.cost),1)):D(`v-if`,!0)])):D(`v-if`,!0)],2)]),_:1},8,[`menu`])],64)}var dI=H(qF,[[`render`,uI],[`__scopeId`,`data-v-09d6743a`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/ui/AgentContextMeter.vue`]]),fI=220,pI=W({__name:`AgentChipPreview`,props:{projectId:{type:String,required:!0},scope:{type:null,required:!0}},setup(e,{expose:t}){t();let n=e,r=/\.(png|jpe?g|gif|webp|svg|bmp|avif|ico)$/i,i=M(),a=M({left:0,top:0,below:!1}),o=M(!1),s,c;function l(e){return e?e.type===`image`?We(`/api/agent/attachments/${encodeURIComponent(e.id)}`):e.type===`file`&&!e.directory&&r.test(e.path)?at(n.projectId,e.path,Bb(e.path)):``:``}let u=B(()=>l(i.value));function d(e){return(e instanceof Element?e.closest(`[data-chip]`):null)??void 0}function f(){clearTimeout(s),c=void 0,i.value=void 0}function p(e){let t=d(e.target);if(t===c||(f(),!t?.dataset.chip))return;let n;try{n=JSON.parse(t.dataset.chip)}catch{return}l(n)&&(c=t,s=setTimeout(()=>{let e=t.getBoundingClientRect(),r=e.top<220;o.value=!1,a.value={left:Math.max(8,Math.min(e.left,window.innerWidth-280)),top:r?e.bottom+6:e.top-6,below:r},i.value=n},fI))}let m;function h(e){m?.removeEventListener(`mouseover`,p),m?.removeEventListener(`mouseleave`,f),m?.removeEventListener(`mousedown`,f),m=e,m?.addEventListener(`mouseover`,p),m?.addEventListener(`mouseleave`,f),m?.addEventListener(`mousedown`,f)}E(()=>n.scope,h,{immediate:!0}),g(()=>{h(void 0),clearTimeout(s)});let _={props:n,IMAGE_PATH:r,SHOW_DELAY_MS:fI,chip:i,place:a,failed:o,get timer(){return s},set timer(e){s=e},get current(){return c},set current(e){c=e},sourceOf:l,source:u,chipOf:d,hide:f,over:p,get bound(){return m},set bound(e){m=e},bind:h,UiPopupSurface:Fd};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),mI=[`src`];function hI(t,n,r,i,a,o){return K(),F(fe,{to:`body`},[i.chip&&i.source&&!i.failed?(K(),F(i.UiPopupSurface,{key:0,class:Y([`chip-preview`,{below:i.place.below}]),style:Qe({left:`${i.place.left}px`,top:`${i.place.top}px`}),role:`img`,"aria-label":i.chip.type===`image`?i.chip.name:i.chip.type===`file`?i.chip.path:``},{default:e(()=>[I(`img`,{src:i.source,alt:``,onError:n[0]||=e=>i.failed=!0},null,40,mI)]),_:1},8,[`class`,`style`,`aria-label`])):D(`v-if`,!0)])}var gI=H(pI,[[`render`,hI],[`__scopeId`,`data-v-f386167d`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/ui/AgentChipPreview.vue`]]),_I={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function vI(e,t){return K(),U(`svg`,_I,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8`}),I(`path`,{d:`M3 3v5h5m4-1v5l4 2`})],-1)]])}var yI=L({name:`lucide-history`,render:vI}),bI={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function xI(e,t){return K(),U(`svg`,bI,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 17v5M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4a1 1 0 0 1 1 1z`},null,-1)]])}var SI=L({name:`lucide-pin`,render:xI}),CI=W({__name:`AgentSessions`,props:{native:{type:Object,required:!0},disabled:{type:Boolean,required:!0},active:{type:String,required:!1},editable:{type:Boolean,required:!1},deletable:{type:Boolean,required:!1},recent:{type:Object,required:!0}},emits:[`open`,`pick`,`change`,`remove`,`openRecent`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=Ff({anchor:`right`,initialFocus:[`input[type=search]`,`button.item`],items:`button.item, button.mini`}),{open:o}=a,s=M(``),c=M(``),l=M(``),u=M(``),d=M(),f=B(()=>{let e=r.native.sessions.map(e=>({...e,native:!0})),t=new Map(e.map(e=>[e.id,e])),n=new Set;for(let i of r.recent.items){if(i.session){let e=t.get(i.session);if(e){if(e.chat)continue;e.chat=i.chat,i.updatedAt>(e.updatedAt??``)&&(e.updatedAt=i.updatedAt);continue}if(n.has(i.session))continue;n.add(i.session)}e.push({id:i.chat,title:i.title,updatedAt:i.updatedAt,chat:i.chat,native:!1})}let i=new Set(e.filter(e=>e.native&&e.chat).map(e=>e.title));return e.filter(e=>!e.native||e.chat||e.parent?!0:!i.has(e.title)).sort((e,t)=>Number(t.pinned===!0)-Number(e.pinned===!0)||(t.updatedAt??``).localeCompare(e.updatedAt??``))}),m=M(!1),h=B(()=>f.value.filter(e=>e.parent).length),g=B(()=>s.value.trim().length>0),_=B(()=>m.value||g.value),v=B(()=>{let e=s.value.trim().toLocaleLowerCase();return e?f.value.filter(t=>t.title.toLocaleLowerCase().includes(e)):f.value}),y=B(()=>{let e=v.value.filter(e=>!e.parent);if(!_.value)return e.map(e=>({session:e,depth:0}));let t=new Map;for(let e of v.value)e.parent&&t.set(e.parent,[...t.get(e.parent)??[],e]);let n=[],r=new Set,i=(e,a)=>{if(!r.has(e.id)){r.add(e.id),n.push({session:e,depth:a});for(let n of t.get(e.id)??[])i(n,a+1)}};for(let t of e)i(t,0);for(let e of v.value)e.parent&&i(e,1);return n});function b(e){return e.parent?`${e.title} · ветка субагента${e.agent?` (${e.agent})`:``}`:e.title}let x;function S(e,t){x=t.currentTarget.closest(`.row`)??void 0,c.value=e.id,l.value=e.title,p(()=>a.island.value?.querySelector(`[aria-label="Название чата"]`)?.focus())}function C(e,t=!1){let n=x;x=void 0;let a=c.value;c.value=``;let s=l.value.trim();e&&a&&s&&s!==r.native.sessions.find(e=>e.id===a)?.title&&i(`change`,a,{title:s}),t&&p(()=>{o.value&&(n?.isConnected?n.querySelector(`.mini[aria-label="Переименовать чат"]`):d.value)?.focus()})}function w(e){u.value===e.id?(u.value=``,e.native?i(`remove`,e.id):e.chat&&i(`remove`,{chat:e.chat}),p(()=>{o.value&&!a.island.value?.contains(document.activeElement)&&a.island.value?.querySelector(`input[type=search], button.item`)?.focus()})):u.value=e.id}function T(e){a.close(),e.chat?i(`openRecent`,e.chat,e.title):i(`pick`,e.id)}E(o,e=>{e?(s.value=``,i(`open`)):(c.value=``,u.value=``,x=void 0)}),E(()=>r.native.loading,async e=>{!e&&o.value&&(await p(),o.value&&!a.island.value?.contains(document.activeElement)&&a.island.value?.querySelector(`input[type=search], button.item`)?.focus())});let D=new Intl.RelativeTimeFormat(`ru`,{numeric:`auto`});function O(e){let t=e?Date.parse(e):NaN;if(Number.isNaN(t))return``;let n=Math.round((t-Date.now())/6e4);if(Math.abs(n)<60)return D.format(n,`minute`);let r=Math.round(n/60);return Math.abs(r)<48?D.format(r,`hour`):D.format(Math.round(r/24),`day`)}let k={props:r,emit:i,menu:a,shown:o,search:s,renaming:c,draft:l,confirming:u,searchInput:d,history:f,showBranches:m,branchCount:h,searchActive:g,branchesShown:_,visible:v,rows:y,titleOf:b,get renameRow(){return x},set renameRow(e){x=e},startRename:S,finishRename:C,remove:w,pick:T,relative:D,age:O,UiIsland:Yd,UiInline:Be,UiControl:Se,UiButton:q,get IconHistory(){return yI},get IconBranch(){return PN},get IconPin(){return SI},get IconPencil(){return fm},get IconTrash(){return og}};return Object.defineProperty(k,"__isScriptSetup",{enumerable:!1,value:!0}),k}}),wI={key:1,class:`note`},TI={key:2,class:`note error`,role:`alert`},EI={key:3,class:`note`},DI={key:4,class:`note`},OI={key:5,class:`note`},kI=[`title`,`onClick`],AI={class:`title u-truncate`},jI={key:2,class:`branch-agent`},MI={class:`age`},NI=[`title`,`aria-label`,`onClick`],PI=[`onClick`],FI=[`title`,`aria-label`,`onClick`],II=[`aria-expanded`,`disabled`,`title`],LI={key:0},RI={key:1},zI={key:2},BI={key:7,class:`note`},VI={key:8,class:`note error`,role:`alert`};function HI(t,n,r,i,a,o){return K(),U(`div`,{ref:i.menu.trigger,class:`agent-sessions`},[y(i.UiButton,{shape:`icon`,size:`sm`,title:`История`,"aria-label":`История`,"aria-expanded":i.shown,disabled:r.disabled,onClick:n[0]||=e=>i.menu.toggle()},{default:e(()=>[y(i.IconHistory,{"aria-hidden":`true`})]),_:1},8,[`aria-expanded`,`disabled`]),y(i.UiIsland,{menu:i.menu,label:`История`,width:320},{default:e(()=>[i.history.length>4?(K(),F(i.UiControl,{key:0,ref:`searchInput`,modelValue:i.search,"onUpdate:modelValue":n[1]||=e=>i.search=e,class:`search`,type:`search`,placeholder:`Найти чат`,"aria-label":`Найти чат`},null,8,[`modelValue`])):D(`v-if`,!0),r.native.loading&&!i.history.length?(K(),U(`p`,wI,`Загружаю…`)):r.native.error?(K(),U(`p`,TI,X(r.native.error),1)):!i.history.length&&!r.recent.loading?(K(),U(`p`,EI,`В истории пока пусто`)):!i.visible.length&&!r.recent.loading?(K(),U(`p`,DI,`Ничего не найдено`)):!i.rows.length&&!r.recent.loading&&i.branchCount&&!i.branchesShown?(K(),U(`p`,OI,` Основных чатов нет — только ветки субагентов `)):D(`v-if`,!0),(K(!0),U(P,null,S(i.rows,t=>(K(),F(i.UiInline,{key:t.session.id,class:`row`,gap:.5,justify:`normal`},{default:e(()=>[i.renaming===t.session.id?(K(),F(i.UiControl,{key:0,modelValue:i.draft,"onUpdate:modelValue":n[2]||=e=>i.draft=e,class:`rename`,"aria-label":`Название чата`,onKeydown:[n[3]||=ye(N(e=>i.finishRename(!0,!0),[`prevent`]),[`enter`]),n[4]||=ye(N(e=>i.finishRename(!1,!0),[`stop`,`prevent`]),[`esc`])],onBlur:n[5]||=e=>i.finishRename(!0)},null,8,[`modelValue`])):(K(),U(`button`,{key:1,type:`button`,role:`menuitem`,class:Y([`item`,{active:t.session.id===r.active,branch:t.depth>0}]),style:Qe(t.depth?{paddingLeft:`${10+t.depth*14}px`}:void 0),title:i.titleOf(t.session),onClick:e=>i.pick(t.session)},[t.session.parent?(K(),F(i.IconBranch,{key:0,class:`branch-mark`,"aria-hidden":`true`})):D(`v-if`,!0),t.session.pinned?(K(),F(i.IconPin,{key:1,class:`pinned`,"aria-hidden":`true`})):D(`v-if`,!0),I(`span`,AI,X(t.session.title),1),t.session.agent?(K(),U(`span`,jI,X(t.session.agent),1)):D(`v-if`,!0),I(`span`,MI,X(i.age(t.session.updatedAt)),1)],14,kI)),i.renaming!==t.session.id&&(t.session.native?r.editable||r.deletable:t.session.chat)?(K(),F(i.UiInline,{key:2,as:`span`,class:`row-actions`,gap:.5,align:`normal`,justify:`normal`},{default:e(()=>[r.editable&&t.session.native?(K(),U(`button`,{key:0,type:`button`,class:`mini`,title:t.session.pinned?`Открепить`:`Закрепить сверху`,"aria-label":t.session.pinned?`Открепить чат`:`Закрепить чат`,onClick:e=>i.emit(`change`,t.session.id,{pinned:!t.session.pinned})},[y(i.IconPin,{"aria-hidden":`true`})],8,NI)):D(`v-if`,!0),r.editable&&t.session.native?(K(),U(`button`,{key:1,type:`button`,class:`mini`,title:`Переименовать`,"aria-label":`Переименовать чат`,onClick:e=>i.startRename(t.session,e)},[y(i.IconPencil,{"aria-hidden":`true`})],8,PI)):D(`v-if`,!0),!t.session.native||r.deletable?(K(),U(`button`,{key:2,type:`button`,class:Y([`mini`,{danger:i.confirming===t.session.id}]),title:i.confirming===t.session.id?`Нажмите ещё раз, чтобы удалить навсегда`:`Удалить`,"aria-label":i.confirming===t.session.id?`Подтвердить удаление`:`Удалить чат`,onClick:e=>i.remove(t.session),onBlur:n[6]||=e=>i.confirming=``},[y(i.IconTrash,{"aria-hidden":`true`})],42,FI)):D(`v-if`,!0)]),_:2},1024)):D(`v-if`,!0)]),_:2},1024))),128)),i.branchCount?(K(),U(`button`,{key:6,type:`button`,class:`toggle`,"aria-expanded":i.branchesShown,disabled:i.searchActive,title:i.searchActive?`Ветки субагентов видны при поиске`:i.branchesShown?`Свернуть ветки субагентов`:`Развернуть ветки субагентов`,onClick:n[7]||=e=>i.showBranches=!i.showBranches},[y(i.IconBranch,{"aria-hidden":`true`}),i.searchActive?(K(),U(`span`,LI,`Ветки субагентов · `+X(i.branchCount),1)):i.branchesShown?(K(),U(`span`,RI,`Скрыть ветки субагентов`)):(K(),U(`span`,zI,`Показать ветки субагентов · `+X(i.branchCount),1))],8,II)):D(`v-if`,!0),r.recent.loading&&!i.history.length&&!r.native.loading?(K(),U(`p`,BI,` Загружаю историю… `)):r.recent.error?(K(),U(`p`,VI,X(r.recent.error),1)):D(`v-if`,!0)]),_:1},8,[`menu`])],512)}var UI=H(CI,[[`render`,HI],[`__scopeId`,`data-v-9a1c3103`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/ui/AgentSessions.vue`]]),WI={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function GI(e,t){return K(),U(`svg`,WI,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`12`,cy:`12`,r:`1`}),I(`circle`,{cx:`19`,cy:`12`,r:`1`}),I(`circle`,{cx:`5`,cy:`12`,r:`1`})],-1)]])}var KI=L({name:`lucide-ellipsis`,render:GI}),qI={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function JI(e,t){return K(),U(`svg`,qI,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M12 3v18m7-13l3 8a5 5 0 0 1-6 0zV7`}),I(`path`,{d:`M3 7h1a17 17 0 0 0 8-2a17 17 0 0 0 8 2h1M5 8l3 8a5 5 0 0 1-6 0zV7m2 14h10`})],-1)]])}var YI=L({name:`lucide-scale`,render:JI}),XI=W({__name:`AgentChatMenu`,props:{lens:{type:Boolean,required:!0},side:{type:Boolean,required:!0},canDownload:{type:Boolean,required:!0},canIsolate:{type:Boolean,required:!0},isolate:{type:Boolean,required:!0},featuresChanged:{type:Boolean,required:!0},judgeChanged:{type:Boolean,required:!0}},emits:[`lens`,`side`,`features`,`judge`,`download`,`isolate`],setup(e,{expose:t,emit:n}){let r=n,i=Ff({anchor:`right`,initialFocus:`button.item`,items:`button.item`,returnFocus:`button`});t({anchor:()=>i.trigger.value});function a(e){switch(i.close(),e){case`lens`:r(`lens`);break;case`side`:r(`side`);break;case`features`:r(`features`);break;case`judge`:r(`judge`);break;case`download`:r(`download`);break;case`isolate`:r(`isolate`)}}let o={emit:r,menu:i,run:a,UiButton:q,UiIsland:Yd,UiIslandLabel:sh,get IconBranch(){return PN},get IconCheck(){return Iy},get IconDownload(){return Eh},get IconEllipsis(){return KI},get IconMessageCircleQuestion(){return xk},get IconScanEye(){return wO},get IconScale(){return YI},get IconSparkles(){return Gy}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),ZI={key:0,class:`dot`,"aria-hidden":`true`},QI={key:0,class:`dot`,"aria-hidden":`true`},$I=[`aria-pressed`],eL=[`aria-pressed`],tL=[`aria-pressed`];function nL(t,n,r,i,a,o){return K(),U(`div`,{ref:i.menu.trigger,class:`chat-menu`},[y(i.UiButton,{shape:`icon`,size:`sm`,title:`Ещё`,"aria-label":`Ещё`,active:r.lens||r.side||r.isolate||r.featuresChanged||r.judgeChanged,"aria-expanded":i.menu.open.value,onClick:n[0]||=e=>i.menu.toggle()},{default:e(()=>[y(i.IconEllipsis,{"aria-hidden":`true`})]),_:1},8,[`active`,`aria-expanded`]),y(i.UiIsland,{menu:i.menu,label:`Действия чата`,width:300},{default:e(()=>[y(i.UiIslandLabel,null,{default:e(()=>[...n[7]||=[G(`Чат`,-1)]]),_:1}),I(`button`,{type:`button`,class:`item`,onClick:n[1]||=e=>i.run(`features`)},[y(i.IconSparkles,{"aria-hidden":`true`}),n[8]||=I(`span`,{class:`text`},[I(`span`,{class:`title`},`Возможности агента`),I(`span`,{class:`hint`},`Виджеты и команды IDE в этом чате`)],-1),r.featuresChanged?(K(),U(`span`,ZI)):D(`v-if`,!0)]),I(`button`,{type:`button`,class:`item`,onClick:n[2]||=e=>i.run(`judge`)},[y(i.IconScale,{"aria-hidden":`true`}),n[9]||=I(`span`,{class:`text`},[I(`span`,{class:`title`},`Судья`),I(`span`,{class:`hint`},`Риск действия и автоматическое разрешение`)],-1),r.judgeChanged?(K(),U(`span`,QI)):D(`v-if`,!0)]),I(`button`,{type:`button`,class:`item`,"aria-pressed":r.lens,onClick:n[3]||=e=>i.run(`lens`)},[y(i.IconScanEye,{"aria-hidden":`true`}),n[10]||=I(`span`,{class:`text`},[I(`span`,{class:`title`},`Lens`),I(`span`,{class:`hint`},`Чем агент занят сейчас`)],-1),r.lens?(K(),F(i.IconCheck,{key:0,class:`state`,"aria-hidden":`true`})):D(`v-if`,!0)],8,$I),I(`button`,{type:`button`,class:`item`,"aria-pressed":r.side,onClick:n[4]||=e=>i.run(`side`)},[y(i.IconMessageCircleQuestion,{"aria-hidden":`true`}),n[11]||=I(`span`,{class:`text`},[I(`span`,{class:`title`},`Вопрос в сторону`),I(`span`,{class:`hint`},`Не прерывает агента и не попадает в чат`)],-1),r.side?(K(),F(i.IconCheck,{key:0,class:`state`,"aria-hidden":`true`})):D(`v-if`,!0)],8,eL),r.canDownload?(K(),U(`button`,{key:0,type:`button`,class:`item`,onClick:n[5]||=e=>i.run(`download`)},[y(i.IconDownload,{"aria-hidden":`true`}),n[12]||=I(`span`,{class:`text`},[I(`span`,{class:`title`},`Скачать в Markdown`),I(`span`,{class:`hint`},`Вся переписка одним файлом`)],-1)])):D(`v-if`,!0),r.canIsolate?(K(),U(`button`,{key:1,type:`button`,class:`item`,"aria-pressed":r.isolate,onClick:n[6]||=e=>i.run(`isolate`)},[y(i.IconBranch,{"aria-hidden":`true`}),n[13]||=I(`span`,{class:`text`},[I(`span`,{class:`title`},`Изолированная копия`),I(`span`,{class:`hint`},`git worktree: файлы не меняются до слияния`)],-1),r.isolate?(K(),F(i.IconCheck,{key:0,class:`state`,"aria-hidden":`true`})):D(`v-if`,!0)],8,tL)):D(`v-if`,!0)]),_:1},8,[`menu`])],512)}var rL=H(XI,[[`render`,nL],[`__scopeId`,`data-v-87b344a0`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/ui/AgentChatMenu.vue`]]);function iL(e,t){e.type===`image`?t.openImage(We(`/api/agent/attachments/${encodeURIComponent(e.id)}`),e.name):e.type===`file`&&t.openFile(e.path,e.directory===!0,e.range).catch(e=>t.fail(e instanceof Error?e.message:`Не удалось открыть файл`))}function aL(e,t,n){let r=M();return{open:i=>iL(i,{openFile:(n,r,i)=>t.executeCommand(`ide.editor.path.open`,{path:n,directory:r,...r||!Bb(n)?{}:{external:!0},...i?{line:i.from,endLine:i.to}:{}},{scope:`editor:${e}`}),openImage:(e,t)=>r.value={src:e,alt:t},fail:n}),image:r}}function oL(e,t){let n=[`# ${t}`];for(let r of e){if(r.role===`user`){n.push(`## Вы\n\n${r.text.trim()}`);continue}let e=new Map(r.tools.map(e=>[e.id,e])),i=[];for(let t of r.parts??aw(r)){if(t.type===`text`){t.text.trim()&&i.push(t.text.trim());continue}if(t.type===`thought`)continue;if(t.type===`note`){i.push(`**Вы добавили:** ${t.text.trim()}`);continue}if(t.type===`judge`){i.push(`> Судья: риск ${t.verdict.score}/5 · ${t.verdict.label} — ${t.verdict.reason}`);continue}let n=e.get(t.id);if(!n)continue;let r=n.input??``,a=pS(n.name,r)?``:iS(r);i.push(`> ${mS(n.name,r)}${a?`: \`${a.replace(/`/g,`'`)}\``:``}`)}n.push(`## ${t.split(` · `)[0]||`Агент`}\n\n${i.join(`
|
|
99
|
-
|
|
100
|
-
`)}`)}return`${n.join(`
|
|
101
|
-
|
|
102
|
-
`)}\n`}function sL(e,t,n){let r=URL.createObjectURL(new Blob([oL(e,t)],{type:`text/markdown;charset=utf-8`}));Object.assign(document.createElement(`a`),{href:r,download:n}).click(),setTimeout(()=>URL.revokeObjectURL(r),1e3)}function cL(e,t){return oL(e,`${t} · ${new Date().toLocaleString(`ru`)}`)}function lL(e,t,n){sL(e,`${t} · ${new Date().toLocaleString(`ru`)}`,`${n}-chat.md`)}async function uL(e){try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function dL(e,t){let n=e.findIndex(e=>e.id===t);return e.slice(0,n+1).findLast(e=>e.role===`user`)?.id??``}var fL=W({__name:`UiSecretValue`,props:{value:{type:String,required:!0},label:{type:String,required:!1},hideAfter:{type:Number,required:!1,default:30}},setup(e,{expose:t}){t();let n=e,r=M(!1),i=M(!1),a,o,s=B(()=>`•`.repeat(Math.min(Math.max(n.value.length,12),48))),c=B(()=>Math.min(Math.max(n.value.split(`
|
|
103
|
-
`).length,1),8));function l(){a!==void 0&&clearTimeout(a),a=void 0}function u(){l(),r.value=!1}function d(){if(r.value)return u();r.value=!0,l(),n.hideAfter>0&&(a=setTimeout(u,n.hideAfter*1e3))}async function f(){try{await navigator.clipboard.writeText(n.value),i.value=!0,o!==void 0&&clearTimeout(o),o=setTimeout(()=>i.value=!1,2e3)}catch{i.value=!1}}E(()=>n.value,()=>{u(),i.value=!1}),g(()=>{l(),o!==void 0&&clearTimeout(o)});let p={props:n,revealed:r,copied:i,get hideTimer(){return a},set hideTimer(e){a=e},get copyTimer(){return o},set copyTimer(e){o=e},masked:s,rows:c,clearHide:l,hide:u,toggle:d,copy:f,UiButton:q,UiControl:Se};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),pL={class:`secret-value`},mL={class:`actions`};function hL(t,n,r,i,a,o){return K(),U(`div`,pL,[y(i.UiControl,{class:`control`,as:`textarea`,readonly:``,rows:i.rows,value:i.revealed?r.value:i.masked,"aria-label":r.label||`Секрет`,autocomplete:`off`,autocapitalize:`off`,autocorrect:`off`,spellcheck:`false`,"data-1p-ignore":``,"data-lpignore":`true`},null,8,[`rows`,`value`,`aria-label`]),I(`div`,mL,[y(i.UiButton,{size:`sm`,"aria-label":i.revealed?`Скрыть секрет`:`Показать секрет`,onClick:i.toggle},{default:e(()=>[G(X(i.revealed?`Скрыть`:`Показать`),1)]),_:1},8,[`aria-label`]),y(i.UiButton,{size:`sm`,"aria-label":`Скопировать секрет`,onClick:i.copy},{default:e(()=>[G(X(i.copied?`Скопировано`:`Копировать`),1)]),_:1})])])}var gL=H(fL,[[`render`,hL],[`__scopeId`,`data-v-31e94352`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiSecretValue.vue`]]),_L=W({__name:`AgentSecretShow`,props:{items:{type:Array,required:!0}},emits:[`dismiss`],setup(e,{expose:t,emit:n}){t();let r={emit:n,UiButton:q,UiCard:je,UiInline:Be,UiSecretValue:gL,get IconClose(){return Cn},get IconKey(){return OF}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),vL={key:0,class:`secret-shows`,role:`region`,"aria-live":`polite`,"aria-label":`Секреты от агента`},yL={class:`title`},bL={key:0,class:`comment`};function xL(t,n,r,i,a,o){return r.items.length?(K(),U(`div`,vL,[(K(!0),U(P,null,S(r.items,t=>(K(),F(i.UiCard,{key:t.id,as:`section`,tone:`warning`,density:`notice`,class:`secret-show`},{default:e(()=>[y(i.UiInline,{as:`header`,align:`center`,justify:`between`},{default:e(()=>[y(i.UiInline,{align:`center`,justify:`normal`,class:`heading`},{default:e(()=>[y(i.IconKey,{"aria-hidden":`true`}),I(`span`,yL,X(t.label||`Секрет от агента`),1)]),_:2},1024),y(i.UiButton,{shape:`icon`,size:`sm`,"aria-label":`Закрыть`,title:`Закрыть`,onClick:e=>i.emit(`dismiss`,t.id)},{default:e(()=>[y(i.IconClose,{"aria-hidden":`true`})]),_:1},8,[`onClick`])]),_:2},1024),t.comment?(K(),U(`p`,bL,X(t.comment),1)):D(`v-if`,!0),y(i.UiSecretValue,{value:t.secret,label:t.label||`Секрет`},null,8,[`value`,`label`]),n[0]||=I(`p`,{class:`note`},`Панель видна только в этом окне; агент секрет не получает.`,-1)]),_:2},1024))),128))])):D(`v-if`,!0)}var SL=H(_L,[[`render`,xL],[`__scopeId`,`data-v-0725ac0b`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-secret-show/ui/AgentSecretShow.vue`]]),CL=32768,wL=3e5;function TL(e,t){let n=M([]),r=new Map;function i(e){let t=r.get(e);t!==void 0&&clearTimeout(t),r.delete(e),n.value=n.value.filter(t=>t.id!==e)}function a(a){let o=typeof a.projectId==`string`?a.projectId:``;if(o&&o!==e||!t())return;let s=typeof a.secret==`string`?a.secret:``;if(!s||s.length>CL)return;let c=typeof a.id==`string`&&a.id?a.id:globalThis.crypto?.randomUUID?.()||String(Date.now()),l=typeof a.label==`string`?a.label.slice(0,200):``,u=typeof a.comment==`string`?a.comment.slice(0,1e3):``;r.has(c)&&i(c),n.value.push({id:c,secret:s,label:l,comment:u}),r.set(c,setTimeout(()=>i(c),wL))}let o=e=>{let t=e.detail;t&&typeof t==`object`&&a(t)};return f(()=>window.addEventListener(`projector:secret-show`,o)),g(()=>{window.removeEventListener(`projector:secret-show`,o);for(let e of r.values())clearTimeout(e);r.clear()}),{shows:n,dismiss:i}}var EL=72;function DL(e){let t=M(!1),n=0,r=0,i=0,a,o;function s(){let t=e.log.value;t&&(n=t.scrollTop,r=t.scrollHeight)}function c(){let i=e.log.value;if(!i||!i.clientHeight)return;let a=i.scrollTop,o=i.scrollHeight<r;r=i.scrollHeight,i.scrollHeight-a-i.clientHeight<=EL?t.value=!1:a<n&&!o&&(t.value=!0),n=a,a<e.preloadPx&&e.topUp()}function l(){i||=requestAnimationFrame(()=>{i=0;let a=e.log.value;a&&!t.value&&(a.scrollTop=e.turns.value.length?a.scrollHeight:0,n=a.scrollTop,r=a.scrollHeight)})}async function u(){t.value=!1,await p(),l()}function d(){let t=e.log.value?.firstElementChild;a&&t&&t!==o&&(o&&a.unobserve(o),a.observe(t),o=t)}return E(e.watchSource,async()=>{l(),await p(),d(),e.topUp(!0)},{deep:!0}),f(()=>{a=new ResizeObserver(()=>{l(),e.onShown?.()}),e.log.value&&a.observe(e.log.value),d()}),g(()=>{a?.disconnect(),cancelAnimationFrame(i)}),{away:t,trackScroll:c,pin:l,toBottom:u,rememberScroll:s,observeContent:d}}var OL=5,kL=400;function AL(e,t,n,r){let i=M(OL),a=B(()=>e.value.filter(e=>e.role===`user`).length),o=B(()=>{let t=0;for(let n=e.value.length-1;n>=0;n--)if(e.value[n].role===`user`&&++t===i.value)return n;return 0}),s=B(()=>o.value?e.value.slice(o.value):e.value),c=B(()=>e.value.slice(0,o.value).filter(e=>e.role===`user`).length);E(()=>e.value[0]?.id,()=>{i.value=OL}),E(a,(e,t)=>{e===t+1&&(i.value+=1)});let l=!1;async function u(){let e=t.value;if(!e||!c.value||l||r.value)return!1;l=!0;try{let t=e.scrollHeight,r=e.scrollTop;return i.value+=OL,await p(),e.scrollTop=r+e.scrollHeight-t,n(),!0}finally{l=!1}}async function d(e=!1){let n=t.value,r=()=>!!n&&(e?n.scrollHeight-n.clientHeight:n.scrollTop)<kL;for(;n&&c.value&&n.clientHeight&&r();)if(!await u())return}return E(r,async e=>{e||(await p(),d(!0))}),{PRELOAD_PX:kL,firstShown:o,shown:s,hidden:c,loadEarlier:u,topUp:d}}var jL=5e3,ML=6;function NL(e){let t=M(new Map),n,r=0,i=0;function a(n){return e.known?.().find(e=>e.id===n)?.title.trim()||t.value.get(n)?.trim()||``}async function o(s=!1){clearTimeout(n),n=void 0;let c=e.projectId(),l=e.session(),u=++i;if(!c||!l||a(l))return;let d=await MT(e.backend(),c,s);u===i&&(t.value=d.titles,!a(l)&&e.running()&&r<ML&&(r++,n=setTimeout(()=>void o(!0),jL)))}return E([()=>e.projectId(),()=>e.backend(),()=>e.session(),()=>e.running(),()=>e.known?.()],()=>{r=0,o()},{immediate:!0}),le()&&k(()=>{i++,clearTimeout(n)}),B(()=>{let t=e.session();return Xb(t?a(t):``,e.firstMessage(),e.fallback())})}function PL(e,t,n,r,i,a){let o=NL({projectId:()=>t.projectId,backend:()=>t.backend??`projector`,session:()=>n.value.findLast(e=>e.role===`assistant`)?.session?.id,firstMessage:()=>n.value.find(e=>e.role===`user`&&!e.auto)?.text??``,fallback:()=>a.value,running:()=>r.value,known:()=>i.value});E(o,t=>e(`title`,t),{immediate:!0})}var FL=(e,t)=>e.tokens===t.tokens&&e.cost===t.cost&&e.priced===t.priced;function IL(e,t){let n=new Map,r={tokens:0,cost:0,priced:!1};for(let i of e){let e=i.usage;if(!e)continue;r.tokens+=e.input+e.cacheRead+e.cacheWrite+e.output,e.cost!==void 0&&(r.cost+=e.cost,r.priced=!0);let a=t?.get(i.id);n.set(i.id,a&&FL(a,r)?a:{...r})}return n}var LL={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function RL(e,t){return K(),U(`svg`,LL,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 5v14m7-7l-7 7l-7-7`},null,-1)]])}var zL=L({name:`lucide-arrow-down`,render:RL}),BL={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function VL(e,t){return K(),U(`svg`,BL,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7`}),I(`path`,{d:`M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z`})],-1)]])}var HL=L({name:`lucide-square-pen`,render:VL}),UL=W({__name:`AgentChat`,props:{projectId:{type:String,required:!0},backend:{type:String,required:!1,default:`projector`},chatId:{type:String,required:!1,default:void 0},role:{type:Object,required:!1,default:void 0}},emits:[`title`],setup(e,{expose:t,emit:r}){t();let i=e,a=B(()=>!jC(i.backend)),o=B(()=>MC(i.backend)),{api:s}=yp(),c=M(),l=M(),u=M(),{key:d,turns:m,persist:h,loading:_,draft:v,draftParts:y,busy:b,error:x,phase:S,lastEventAt:C,permissions:w,questions:T,secrets:E,controls:D,selection:O,roleSnapshot:k,capabilities:A,sessions:j,sessionsLoading:N,sessionsError:ee,recent:te,recentLoading:P,recentError:ne,loadControls:F,loadCommands:I,commands:re,setControl:ie,loadSessions:L,loadRecent:R,changeSession:z,resumeSession:ae,removeSession:oe,send:se,queue:ce,sendQueuedNow:le,injectQueued:ue,removeQueued:de,edit:fe,cancelEdit:pe,editing:V,retry:me,showVersion:he,canRewindFiles:ge,rewindFiles:_e,isolate:H,featureOverrides:ve,setFeatureOverrides:ye,judgeOverride:be,setJudgeOverride:U,worktreeId:W,worktreeInfo:G,mergeCopy:xe,discardCopy:K,clear:Se,stop:Ce,attach:we,release:Te,decide:Ee,answer:Oe,answerSecret:ke}=yw(i.projectId,a.value?void 0:zf(s,i.projectId),{backend:i.backend,chatId:i.chatId,role:i.role}),Ae=r,{shows:je,dismiss:Me}=TL(i.projectId,()=>qS(i.projectId)[0]?.key===d);PL(Ae,i,m,b,j,o);let Ne=KT({projectId:i.projectId,chat:d,enabled:()=>!a.value,send:(e,t)=>se(e,void 0,t),permissions:w,questions:T,secrets:E});f(()=>{F(),I()});let Pe,Fe=B(()=>Pe=IL(m.value,Pe)),Ie=B(()=>m.value.findLast(e=>e.context)?.context),Le=eN({chat:d,projectId:i.projectId,backend:i.backend,turns:m,busy:b,phase:S,lastEventAt:C,permissions:w,questions:T,secrets:E,queue:ce,selection:O,commands:zf(s,i.projectId)}),Re=B(()=>[{name:`btw`,description:`Вопрос в сторону, не прерывая агента`},...re.value]),{fork:ze,forkMessage:Ve,recentChats:J,openRecent:He}=lT({backend:i.backend,projectId:i.projectId,key:d,turns:()=>m.value,capabilities:()=>A.value,recent:()=>te.value,role:()=>k.value,api:s,fail:e=>{x.value=e}});function Ue(e){aT(s,i.projectId,e,e=>{x.value=e})}we();let{tasks:We,viewing:Ge,viewed:Ke,view:qe,open:Je}=JE({turns:m,openTab:(e,t)=>{s.executeCommand(`ide.workbench.agent.task.open`,{chat:d,task:e?.id??t,title:e?.title},{scope:`editor:${i.projectId}`}).catch(e=>{x.value=e instanceof Error?e.message:`Не удалось открыть задачу`})}});uT({backend:i.backend,agent:o.value,busy:b,phase:S,error:x,controls:D,turns:m});let Ye=M(),Xe=M(),Ze=M(),Qe=oT(()=>Ze.value),$e=M(),Y=B(()=>$e.value?.element),X=()=>{},{PRELOAD_PX:et,firstShown:nt,shown:rt,hidden:it,loadEarlier:at,topUp:ot}=AL(m,Ye,()=>X(),_),st=!1,{away:ct,trackScroll:lt,toBottom:ut,rememberScroll:dt}=DL({turns:m,log:Ye,topUp:ot,preloadPx:et,watchSource:()=>[m.value.length,m.value.at(-1)?.text,w.value.length,T.value.length,E.value.length,m.value.at(-1)?.tools.map(e=>`${e.id}:${e.status}:${e.detail}`).join(`|`)],onShown:()=>{let e=!!Y.value&&Y.value.getClientRects().length>0;e&&!st&&Ze.value?.focus(),st=e}});X=dt;let ft=M(``);tt(i.projectId,`root`).then(e=>{ft.value=e.root}).catch(()=>{});let{mcp:pt,load:mt}=XM(()=>i.backend,i.projectId),ht=()=>a.value?mt():Promise.resolve(),{copy:gt,copyInfo:_t,copyWorking:vt,copyNote:yt,endCopy:bt}=tN(m,b,{worktreeInfo:G,mergeCopy:xe,discardCopy:K}),xt=B(()=>V.value?m.value.findIndex(e=>e.id===V.value):-1),{pendingForm:St,answerFormFor:Ct,submitComposerForm:wt,submitTurnForm:Tt}=KN({turns:m,busy:b,draft:v,draftParts:y,selection:O,send:se,edit:fe,projectId:i.projectId});XN({turns:m,busy:b,selection:O,persist:h,projectId:i.projectId});let Et=B(()=>Ux(m.value,i.backend)),Dt=B(()=>Ie.value?Ie.value.used/Math.max(1,Ie.value.size):0),Ot=WE({turns:m,busy:b,phase:S,queue:ce,plan:Et,selection:O}),{rewinding:kt,rewindPreview:At,rewindPreviewError:jt,rewindResult:Mt,rewindWorking:Nt,askRewind:Pt,previewRewind:Ft,rewindTo:It,confirmRewind:Lt,closeRewind:Rt}=ZM({rewindFiles:_e,edit:fe,focus:()=>Ze.value?.focus()}),zt=e=>dL(m.value,e),Bt=e=>ge(zt(e));async function Vt(e){fe(e),await p(),Ze.value?.focus()}async function Ht(e){ut(),await me(e)}async function Ut(){await Promise.all([L(),R()])}let{compact:Wt}=BN({busy:b,capabilities:A,contextShare:Dt,queue:ce,turns:m,error:x,send:se,toBottom:ut}),Gt={key:d,projectId:i.projectId,backend:i.backend,label:o.value,busy:()=>b.value,visible:()=>!!Y.value&&Y.value.getClientRects().length>0,turns:()=>m.value,tasks:()=>Wx(m.value),queue:()=>ce.value,controls:()=>D.value,selection:()=>O.value,capabilities:()=>A.value,setControl:ie,loadSessions:L,resumeSession:ae,removeSession:oe,toggleControlsMenu:()=>Xe.value?.toggle(),send:e=>se(e),attach:async e=>Ze.value?.attach(e),appendText:async e=>Ze.value?.appendText(e),pendingForm:()=>St.value,showForm:()=>Ze.value?.showForm(),hideForm:()=>Ze.value?.hideForm(),inject:async e=>{await se(e);let t=ce.value.findLast(t=>t.text===e.trim());return t?ue(t.id):!1},stop:Ce,edit:fe,retry:me,fork:ze,rewind:async(e,t)=>await It(e,t)??{ok:!0,files:[]},showVersion:he,removeQueued:de,exportMarkdown:()=>cL(m.value,o.value),compact:Wt,status:()=>Le.status(),openSide:()=>Le.openPanel(),askSide:e=>Le.ask(e),clearSide:()=>Le.clear(),...GE(Ot),mcpServers:()=>_b(i.backend,i.projectId),worktree:async()=>W()?G():void 0,mergeWorktree:xe,discardWorktree:K,setIsolate:e=>{H.value=e}};g(GS(Gt));let{open:Kt,image:qt}=aL(i.projectId,s,e=>{x.value=e}),Jt=M(``),Yt=M(``);function Xt(){x.value=``,Yt.value=``}let{retryableError:Zt,retryFailed:Qt}=VN(m,b,x,Yt,Ht),$t;n(bv,e=>{ut(),se(e)}),BS(i.projectId,s);let{submit:en,continueTurn:tn,suggest:nn,newChat:rn}=HN({draft:v,draftParts:y,send:se,side:Le,clear:Se,toBottom:ut,resetAway:()=>{ct.value=!1},focus:()=>Ze.value?.focus()});async function an(e,t){await uL(t)?(Jt.value=e,Yt.value=``,clearTimeout($t),$t=setTimeout(()=>{Jt.value=``},2e3)):Yt.value=`Не удалось скопировать ответ`}g(()=>{Te(),clearTimeout($t)});let on={props:i,plain:a,agentName:o,api:s,chatMenu:c,featuresIsland:l,judgeIsland:u,chatKey:d,turns:m,persist:h,loading:_,draft:v,draftParts:y,busy:b,error:x,phase:S,lastEventAt:C,permissions:w,questions:T,secrets:E,controls:D,selection:O,roleSnapshot:k,capabilities:A,sessions:j,sessionsLoading:N,sessionsError:ee,recent:te,recentLoading:P,recentError:ne,loadControls:F,loadCommands:I,agentCommands:re,setControl:ie,loadSessions:L,loadRecent:R,changeSession:z,resumeSession:ae,removeSession:oe,send:se,queue:ce,sendQueuedNow:le,injectQueued:ue,removeQueued:de,edit:fe,cancelEdit:pe,editing:V,retry:me,showVersion:he,canRewindFiles:ge,rewindFiles:_e,isolate:H,featureOverrides:ve,setFeatureOverrides:ye,judgeOverride:be,setJudgeOverride:U,worktreeId:W,worktreeInfo:G,mergeCopy:xe,discardCopy:K,clear:Se,stop:Ce,attach:we,release:Te,decide:Ee,answer:Oe,answerSecret:ke,emit:Ae,secretShows:je,dismissSecretShow:Me,jobsState:Ne,get shownUsage(){return Pe},set shownUsage(e){Pe=e},chatUsage:Fe,latestContext:Ie,side:Le,slashCommands:Re,fork:ze,forkMessage:Ve,recentChats:J,openRecentChat:He,openAgent:Ue,tasks:We,viewingTask:Ge,viewed:Ke,viewTask:qe,taskInTab:Je,log:Ye,controlsMenu:Xe,composer:Ze,chatDrop:Qe,panel:$e,root:Y,get rememberScroll(){return X},set rememberScroll(e){X=e},PRELOAD_PX:et,firstShown:nt,shown:rt,hidden:it,loadEarlier:at,topUp:ot,get tabShown(){return st},set tabShown(e){st=e},away:ct,trackScroll:lt,toBottom:ut,rememberChatScroll:dt,projectRoot:ft,mcp:pt,loadMcpServers:mt,loadMcp:ht,copy:gt,copyInfo:_t,copyWorking:vt,copyNote:yt,endCopy:bt,editFrom:xt,pendingForm:St,answerFormFor:Ct,submitComposerForm:wt,submitTurnForm:Tt,plan:Et,contextShare:Dt,lens:Ot,rewinding:kt,rewindPreview:At,rewindPreviewError:jt,rewindResult:Mt,rewindWorking:Nt,askRewind:Pt,previewRewind:Ft,rewindTo:It,confirmRewind:Lt,closeRewind:Rt,precedingUser:zt,canRevert:Bt,editMessage:Vt,retryMessage:Ht,openHistory:Ut,compact:Wt,controller:Gt,openChip:Kt,chipPreview:qt,copied:Jt,copyError:Yt,dismissError:Xt,retryableError:Zt,retryFailed:Qt,get copyTimer(){return $t},set copyTimer(e){$t=e},submit:en,continueTurn:tn,suggest:nn,newChat:rn,copyMessage:an,get AgentFeaturesIsland(){return bre},get AgentJudgeIsland(){return Mw},UiPanel:sn,UiInline:Be,UiBadge:kd,UiButton:q,UiSpinner:De,AgentWelcome:aP,get AgentTurn(){return qA},get AgentComposer(){return rF},get AgentActivityDock(){return TM},get AgentJobRequests(){return OM},get AgentQuestions(){return jk},AgentSecrets:WF,get AgentPermissions(){return vk},AgentContextMeter:dI,AgentChipPreview:gI,ImageModal:dn,get AgentControls(){return TF},AgentSessions:UI,get AgentSideQuestion(){return jN},get AgentTaskView(){return dj},AgentChatMenu:rL,get AgentRewind(){return lN},get AgentWorktree(){return zN},get saveChatMarkdown(){return lL},get activateChat(){return KS},get AgentSecretShow(){return SL},get IconArrowDown(){return zL},get IconSquarePen(){return HL}};return Object.defineProperty(on,"__isScriptSetup",{enumerable:!1,value:!0}),on}}),WL={key:0,class:`chat-drop-hint`,"aria-hidden":`true`},GL={key:0,class:`chat-loading`,role:`status`},KL={key:2,class:`conversation`,role:`log`,"aria-label":`Сообщения`,"aria-live":`polite`,"aria-relevant":`additions text`},qL={class:`dock`},JL={key:0,class:`edit-hint`,role:`status`},YL={key:2,class:`requests`};function XL(t,n,r,i,a,o){return K(),F(i.UiPanel,{ref:`panel`,class:`agent-chat`,"aria-label":`Чат с агентом`,onFocusin:n[23]||=e=>i.activateChat(i.controller),onPointerdownCapture:n[24]||=e=>i.activateChat(i.controller),onDragenter:i.chatDrop.dragenter,onDragover:i.chatDrop.dragover,onDragleave:i.chatDrop.dragleave,onDrop:i.chatDrop.drop},{default:e(()=>[i.chatDrop.over.value?(K(),U(`div`,WL,` Бросьте файлы или папки — добавим в сообщение `)):D(`v-if`,!0),y(i.UiInline,{class:`chat-tools`,gap:1,align:`normal`,justify:`end`},{default:e(()=>[i.roleSnapshot?(K(),F(i.UiBadge,{key:0,tone:`info`,class:`role-badge`,title:`Роль: ${i.roleSnapshot.name}`},{default:e(()=>[G(X(i.roleSnapshot.name),1)]),_:1},8,[`title`])):D(`v-if`,!0),y(i.AgentSessions,{native:{sessions:i.sessions,loading:i.sessionsLoading,error:i.sessionsError},disabled:i.busy,active:i.turns.findLast(e=>e.role===`assistant`)?.session?.id,editable:!i.plain||i.capabilities.editSessions,deletable:!i.plain||i.capabilities.deleteSessions,recent:{items:i.recentChats,loading:i.recentLoading,error:i.recentError},onOpen:i.openHistory,onChange:i.changeSession,onRemove:n[0]||=e=>void i.removeSession(e).catch(()=>{}),onPick:n[1]||=e=>void i.resumeSession(e).catch(()=>{}),onOpenRecent:i.openRecentChat},null,8,[`native`,`disabled`,`active`,`editable`,`deletable`,`recent`,`onChange`,`onOpenRecent`]),i.turns.length?(K(),F(i.UiButton,{key:1,shape:`icon`,size:`sm`,title:`Новый чат`,"aria-label":`Новый чат`,disabled:i.busy,onClick:i.newChat},{default:e(()=>[y(i.IconSquarePen,{"aria-hidden":`true`})]),_:1},8,[`disabled`,`onClick`])):D(`v-if`,!0),y(i.AgentChatMenu,{ref:`chatMenu`,lens:i.lens.state.open,side:i.side.state.open,"can-download":i.turns.length>0,"can-isolate":i.plain&&!i.turns.length,isolate:i.isolate,"features-changed":i.featureOverrides!==void 0,"judge-changed":i.judgeOverride!==void 0,onFeatures:n[2]||=e=>i.featuresIsland?.openAt(i.chatMenu?.anchor()),onJudge:n[3]||=e=>i.judgeIsland?.openAt(i.chatMenu?.anchor()),onLens:n[4]||=e=>i.lens.toggle(),onSide:n[5]||=e=>i.side.toggle(),onDownload:n[6]||=e=>i.saveChatMarkdown(i.turns,i.agentName,r.backend),onIsolate:n[7]||=e=>i.isolate=!i.isolate},null,8,[`lens`,`side`,`can-download`,`can-isolate`,`isolate`,`features-changed`,`judge-changed`])]),_:1}),y(i.AgentFeaturesIsland,{ref:`featuresIsland`,"show-trigger":!1,anchor:()=>i.chatMenu?.anchor(),backend:r.backend,chat:i.chatKey,overrides:i.featureOverrides,disabled:i.loading,"onUpdate:overrides":i.setFeatureOverrides},null,8,[`anchor`,`backend`,`chat`,`overrides`,`disabled`,`onUpdate:overrides`]),y(i.AgentJudgeIsland,{ref:`judgeIsland`,"show-trigger":!1,anchor:()=>i.chatMenu?.anchor(),chat:i.chatKey,override:i.judgeOverride,disabled:i.loading,"onUpdate:override":i.setJudgeOverride},null,8,[`anchor`,`chat`,`override`,`disabled`,`onUpdate:override`]),te(I(`div`,{ref:`log`,class:`chat-log`,onScrollPassive:n[11]||=(...e)=>i.trackScroll&&i.trackScroll(...e)},[i.loading?(K(),U(`div`,GL,[y(i.UiSpinner),n[25]||=I(`span`,null,`Загружаю чат…`,-1)])):i.turns.length?(K(),U(`div`,KL,[i.hidden?(K(),U(`button`,{key:0,type:`button`,class:`earlier`,onClick:n[8]||=(...e)=>i.loadEarlier&&i.loadEarlier(...e)},` Показать ранние запросы · скрыто `+X(i.hidden),1)):D(`v-if`,!0),(K(!0),U(P,null,S(i.shown,(e,t)=>(K(),F(i.AgentTurn,{key:e.id,turn:e,"chat-usage":i.chatUsage.get(e.id),root:i.projectRoot,"promoted-form":i.answerFormFor(e).promotedForm,lens:e.role===`assistant`&&e.id===i.turns.at(-1)?.id?i.lens:void 0,flags:{busy:i.busy,last:i.firstShown+t===i.turns.length-1,copied:i.copied===e.id,faded:i.editFrom>=0&&i.firstShown+t>=i.editFrom,canRevert:i.canRevert(e.id),formAnswered:i.answerFormFor(e).formAnswered,phase:e.role===`assistant`&&e.id===i.turns.at(-1)?.id?i.phase:void 0},onCopy:i.copyMessage,onOpen:i.openChip,onEdit:i.editMessage,onFormSubmit:i.submitTurnForm,onRewind:i.askRewind,onRetry:i.retryMessage,onFork:i.forkMessage,onContinue:i.continueTurn,onVersion:i.showVersion,onOpenFile:n[9]||=e=>i.openChip({type:`file`,path:e}),onRevert:n[10]||=e=>i.askRewind(i.precedingUser(e),`files`)},null,8,[`turn`,`chat-usage`,`root`,`promoted-form`,`lens`,`flags`,`onOpen`,`onFormSubmit`,`onRewind`,`onFork`,`onContinue`,`onVersion`]))),128))])):(K(),F(i.AgentWelcome,{key:1,plain:i.plain,"agent-name":i.agentName,"role-name":i.roleSnapshot?.name,onSuggest:i.suggest,onOpen:i.openAgent},null,8,[`plain`,`agent-name`,`role-name`,`onSuggest`]))],544),[[ae,!i.viewed]]),i.viewed?(K(),F(i.AgentTaskView,{key:1,detail:i.viewed,"project-id":r.projectId,backend:r.backend,selection:i.selection,embedded:``,onBack:n[12]||=e=>i.viewingTask=``,onTab:n[13]||=e=>i.taskInTab(i.viewed.task.id)},null,8,[`detail`,`project-id`,`backend`,`selection`])):D(`v-if`,!0),I(`div`,qL,[i.editing?(K(),U(`p`,JL,[n[26]||=G(` Правка сообщения: новое заменит выделенное и всё после него, старый вариант останется версией. `,-1),I(`button`,{type:`button`,onClick:n[14]||=(...e)=>i.cancelEdit&&i.cancelEdit(...e)},`Отмена`)])):D(`v-if`,!0),i.away?(K(),U(`button`,{key:1,type:`button`,class:`latest-button`,onClick:n[15]||=(...e)=>i.toBottom&&i.toBottom(...e)},[y(i.IconArrowDown,{"aria-hidden":`true`}),n[27]||=G(`К последнему сообщению `,-1)])):D(`v-if`,!0),i.jobsState.hasRequests||i.secretShows.length?(K(),U(`div`,YL,[y(i.AgentPermissions,{permissions:i.permissions,onDecide:i.decide},null,8,[`permissions`,`onDecide`]),y(i.AgentQuestions,{requests:i.questions,onAnswer:i.answer},null,8,[`requests`,`onAnswer`]),y(i.AgentSecrets,{requests:i.secrets,onAnswer:i.answerSecret},null,8,[`requests`,`onAnswer`]),y(i.AgentSecretShow,{items:i.secretShows,onDismiss:i.dismissSecretShow},null,8,[`items`,`onDismiss`]),i.plain?D(`v-if`,!0):(K(),F(i.AgentJobRequests,{key:0,jobs:i.jobsState.jobs,onAnswered:i.jobsState.refresh},null,8,[`jobs`,`onAnswered`]))])):D(`v-if`,!0),i.rewinding?(K(),F(i.AgentRewind,{key:i.rewinding.id,"can-files":i.canRewindFiles(i.rewinding.id),preview:i.rewindPreview,"preview-error":i.rewindPreviewError,working:i.rewindWorking,result:i.rewindResult,root:i.projectRoot,initial:i.rewinding.scope,onScope:i.previewRewind,onConfirm:i.confirmRewind,onCancel:i.closeRewind},null,8,[`can-files`,`preview`,`preview-error`,`working`,`result`,`root`,`initial`,`onScope`,`onConfirm`,`onCancel`])):D(`v-if`,!0),i.copy?(K(),F(i.AgentWorktree,{key:4,branch:i.copy.branch,info:i.copyInfo,working:i.copyWorking||i.busy,note:i.copyNote,onMerge:n[16]||=e=>i.endCopy(i.mergeCopy),onDiscard:n[17]||=e=>i.endCopy(i.discardCopy)},null,8,[`branch`,`info`,`working`,`note`])):D(`v-if`,!0),i.side.state.open?(K(),F(i.AgentSideQuestion,{key:5,side:i.side},null,8,[`side`])):D(`v-if`,!0),i.capabilities.compact&&i.contextShare>=i.capabilities.compact.hintAt&&!i.busy?(K(),U(`p`,{key:6,class:Y([`compact-hint`,{urgent:i.contextShare>=i.capabilities.compact.autoAt}]),role:`status`},[i.contextShare>=i.capabilities.compact.autoAt?(K(),U(P,{key:0},[G(`Контекст почти заполнен (`+X(Math.round(i.contextShare*100))+`%): после этого ответа он сожмётся сам.`,1)],64)):(K(),U(P,{key:1},[G(`Контекст заполнен на `+X(Math.round(i.contextShare*100))+`%.`,1)],64)),I(`button`,{type:`button`,onClick:n[18]||=(...e)=>i.compact&&i.compact(...e)},`Сжать сейчас`)],2)):D(`v-if`,!0),y(i.AgentActivityDock,{jobs:i.jobsState.jobs,chat:i.chatKey,tasks:i.tasks,plan:i.plan,queue:i.queue,busy:i.busy,"can-inject":!!i.capabilities.inject,"viewing-task":i.viewingTask,"project-id":r.projectId,backend:r.backend,selection:i.selection,onOpen:i.jobsState.open,onView:i.viewTask,onTab:i.taskInTab,onNow:i.sendQueuedNow,onInject:i.injectQueued,onRemove:i.removeQueued},null,8,[`jobs`,`chat`,`tasks`,`plan`,`queue`,`busy`,`can-inject`,`viewing-task`,`project-id`,`backend`,`selection`,`onOpen`,`onView`,`onTab`,`onNow`,`onInject`,`onRemove`])]),te(y(i.AgentComposer,{ref:`composer`,modelValue:i.draft,"onUpdate:modelValue":n[19]||=e=>i.draft=e,parts:i.draftParts,"onUpdate:parts":n[20]||=e=>i.draftParts=e,"project-id":r.projectId,"quote-root":i.log,commands:i.slashCommands,busy:i.busy,"started-at":i.turns.findLast(e=>e.role===`assistant`)?.at,error:i.error||i.copyError,copied:!!i.copied,form:i.pendingForm,editing:!!i.editing,retryable:i.retryableError,onSubmit:i.submit,onFormSubmit:i.submitComposerForm,onOpen:i.openChip,onFail:n[21]||=e=>i.error=e,onDismiss:i.dismissError,onRetry:i.retryFailed,onStop:i.stop},xe({_:2},[i.latestContext?{name:`status`,fn:e(()=>[y(i.AgentContextMeter,{context:i.latestContext},null,8,[`context`])]),key:`0`}:void 0,i.controls.length?{name:`controls`,fn:e(()=>[y(i.AgentControls,{ref:`controlsMenu`,controls:i.controls,disabled:i.busy,mcp:i.mcp,onOpened:i.loadMcp,onChange:i.setControl},null,8,[`controls`,`disabled`,`mcp`,`onChange`])]),key:`1`}:void 0]),1032,[`modelValue`,`parts`,`project-id`,`quote-root`,`commands`,`busy`,`started-at`,`error`,`copied`,`form`,`editing`,`retryable`,`onSubmit`,`onFormSubmit`,`onOpen`,`onRetry`,`onStop`]),[[ae,!i.viewed]]),y(i.AgentChipPreview,{"project-id":r.projectId,scope:i.root},null,8,[`project-id`,`scope`]),i.chipPreview?(K(),F(i.ImageModal,{key:2,src:i.chipPreview.src,alt:i.chipPreview.alt,onClose:n[22]||=e=>i.chipPreview=void 0},null,8,[`src`,`alt`])):D(`v-if`,!0)]),_:1},8,[`onDragenter`,`onDragover`,`onDragleave`,`onDrop`])}var ZL=H(UL,[[`render`,XL],[`__scopeId`,`data-v-da6fa6f4`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent/ui/AgentChat.vue`]]),QL=e=>`agent:${e}`,$L=e=>e.startsWith(`agent:`)?e.slice(6):void 0,eR=`Ключ чата из ide.agent.chats.list; без него — чат, с которым работали последним`;function tR(e,t){let n=e[t];if(typeof n!=`string`||!n)throw Error(`Укажите ${t}`);return n}function nR(e,t){let n=()=>qS(t).length>0,r=e=>JS(t,J(e).chat);e(`ide.agent.chats.recent`,`Недавние чаты проекта`,()=>ob(t).then(e=>e.map(e=>({...e,open:ox(t,e.chat,e.title)??null}))),()=>!0,void 0,{description:`Возвращает чаты агентов проекта, сохранённые на диске, включая закрытые вкладки: ключ, агент, название, время и команда открытия (open: { command, args }; null — если вкладки у чата нет). Позволяет вернуться к ветке после закрытия её вкладки.`}),e(`ide.agent.chat.fork`,`Ответвить чат в новый`,async e=>{let t=J(e),n=r(e),i=tR(t,`turnId`),a=t.mode;if(a!==void 0&&a!==`before`&&a!==`after`)throw Error(`mode: before или after`);let o=n.turns().find(e=>e.id===i)?.role,s=a??(o===`assistant`?`after`:`before`);return n.fork(i,s)},n,void 0,{description:`Создаёт новую ветку разговора в отдельном чате, не меняя текущий. mode: before — копия разговора до сообщения пользователя, его текст остаётся в поле ввода новой ветки; after — копия включая ответ, ветка продолжает с этого места. Открывает вкладку ветки и возвращает её ключ. Файлы не откатываются, изолированная копия проекта у веток общая.`,arguments:{turnId:`Сообщение из ide.agent.turns.list`,mode:`before | after; по умолчанию before для вопроса и after для ответа`,chat:eR}})}var rR=()=>st().filter(e=>!e.builtin),iR=()=>rR().map(e=>e.title).join(`, `),aR=()=>rR().map(e=>e.backend).join(`, `);function oR(e,t,n=b()?yp().api:void 0){b()&&HC(t),e(`ide.agent.job.start`,`Запустить фонового агента`,async e=>{let n=J(e),r=typeof n.role==`string`?n.role.trim():``,i,a=n.isolate===!0;if(r){let e=(await I_(t)).find(e=>e.id===r);if(!e)throw Error(`Неизвестная chat-роль: ${r}`);if(i=xt(e.agent),!i||i.builtin)throw Error(`Роль «${e.name}» указывает на агента без фоновых заданий`);if(typeof n.agent==`string`&&n.agent.trim()){let t=xt(n.agent.toLowerCase())??Ct(n.agent.toLowerCase());if(t&&t.backend!==e.agent)throw Error(`Роль «${e.name}» принадлежит агенту ${i.title}`)}a||=e.isolate===!0}else{let e=eE(n,`agent`).toLowerCase();if(i=xt(e)??Ct(e),!i||i.builtin)throw Error(`agent: ${aR()}`)}return tE(await Tb({projectId:t,backend:i.backend,role:r||void 0,task:eE(n,`task`),isolate:a,origin:qS(t).find(e=>jC(e.backend))?.key}))},()=>!0,void 0,{description:`Запускает фонового агента (${iR()}) с заданием в проекте: сервер ведёт его сам, вкладка чата не нужна, прогресс виден в острове активности. Возвращает идентификатор задания. Вместо agent можно указать role — chat-роль из ide.agent.roles.chat.list: её агент, модель и режим станут снимком задания, а isolate роли включит копию. Запросы разрешений и вопросы агента приходят как состояние needs-user и ждут ответа (ide.agent.job.answer). С isolate: true агент работает в изолированной git-копии проекта (слияние только по просьбе пользователя). Код пишут фоновые агенты, не вы: поручайте им работу, потом проверяйте результат через ide.agent.job.result и git diff.`,arguments:{agent:`id агента: ${aR()}; необязателен, если указан role`,role:`id chat-роли из ide.agent.roles.chat.list (необязательно)`,task:`Полное задание агенту: цель, файлы, критерии готовности`,isolate:`true — работать в изолированной копии проекта (для независимых задач, которые идут параллельно)`}}),e(`ide.agent.jobs.list`,`Фоновые задания агентов`,async()=>(await Cb(t)).map(tE),()=>!0,void 0,{description:`Возвращает фоновые задания агентов этого проекта, новые первыми: идентификатор, агент, состояние (queued, running, needs-user, done, error, stopped), запросы, которые ждут ответа, изменённые файлы и начало итога.`}),e(`ide.agent.job.result`,`Результат фонового задания`,async e=>{let t=J(e),n=eE(t,`job`),r=Math.min(Math.max(Number(t.wait)||0,0),45),i=await wb(n);return r&&!bb(i.job.status)&&(i=await wb(n,r,i.job.rev)),tE(i.job)},()=>!0,void 0,{description:`Возвращает состояние и итог фонового задания целиком, изменённые файлы, ошибку и запросы, которые ждут ответа. С wait (секунды, до 45) ждёт смены состояния, а не возвращается сразу. Результат агента сверяйте с git diff и ide.agent.job.diff, а не принимайте на веру.`,arguments:{job:$T,wait:`Сколько секунд ждать смены состояния, до 45 (необязательно)`}}),e(`ide.agent.job.diff`,`Изменения фонового задания`,async e=>{let t=J(e),n=eE(t,`job`),r=Number(t.limit);return{job:n,...await Db(n,Number.isFinite(r)?r:0)}},()=>!0,void 0,{description:`Возвращает, что задание изменило в своей папке: список файлов (включая новые), git --stat и unified patch. Для задания в изолированной копии diff берётся из копии. Patch ограничен (по умолчанию 60 000 символов, truncated: true — продолжение в ide.agent.job.open); limit можно увеличить. Это проверка результата, а не повод править файлы самому.`,arguments:{job:$T,limit:`Предел длины patch в символах (необязательно)`}}),e(`ide.agent.job.log`,`Вызовы инструментов фонового задания`,async e=>{let t=J(e),n=eE(t,`job`),r=Math.min(Math.max(Math.trunc(Number(t.tail))||20,1),40),i=await wb(n);return{job:n,status:i.job.status,...iE(i.journal,r),...aE(i.journal)}},()=>!0,void 0,{description:`Возвращает последние вызовы инструментов задания с их результатами: какие команды проверок запускались и что они ответили. Вывод и вход обрезаны до 1500 символов, cut: true — было больше. Нужен, чтобы судить о работе по фактам, а не по итоговому тексту агента.`,arguments:{job:$T,tail:`Сколько последних вызовов вернуть, до 40 (по умолчанию 20)`}}),e(`ide.agent.job.worktree`,`Копия фонового задания`,async e=>{let t=eE(J(e),`job`);return{job:t,worktree:await kb(t)}},()=>!0,void 0,{description:`Возвращает изолированную копию задания: ветку и число изменённых файлов; worktree: null — задание работает в папке проекта. Копия есть только у заданий с isolate: true.`,arguments:{job:$T}}),e(`ide.agent.job.merge`,`Влить копию задания в проект`,async e=>{let t=eE(J(e),`job`),n=await Ab(t);return{job:t,merged:n.merged,message:n.message}},()=>!0,void 0,{description:`Коммитит изменения задания в его изолированной копии и вливает ветку в проект (git merge), затем удаляет копию. Доступно только завершённому заданию. Меняет файлы и историю git: только по явной просьбе пользователя. При конфликте слияние отменяется, проект остаётся как был.`,arguments:{job:$T}}),e(`ide.agent.job.discard`,`Отбросить копию задания`,async e=>{let t=eE(J(e),`job`);return await jb(t),{job:t,discarded:!0}},()=>!0,void 0,{description:`Удаляет изолированную копию задания и всё, что агент в ней сделал. Необратимо: только по явной просьбе пользователя.`,arguments:{job:$T}}),e(`ide.agent.job.send`,`Уточнить идущее задание`,async e=>{let t=J(e),n=eE(t,`job`),r=await Nb(n,eE(t,`text`));if(!r.accepted)throw Error(`Этот агент не принимает уточнения на ходу`);return r.job?tE(r.job):{job:n,sent:!0}},()=>!0,void 0,{description:`Досылает уточнение заданию. Идущему — в текущий ход, если агент это умеет. Завершённому — новый ход в той же записи, копии и нативной сессии: то же задание продолжается, без создания нового. Для вопросов, которые ждут ответа, используйте ide.agent.job.answer.`,arguments:{job:$T,text:`Уточнение агенту: что поправить, добавить или проверить`}}),e(`ide.agent.job.retry`,`Повторить фоновое задание`,async e=>{let t=J(e),n=typeof t.task==`string`?t.task:void 0;return tE(await Mb(eE(t,`job`),n))},()=>!0,void 0,{description:`Повторяет завершившееся задание с той же формулировкой, папкой, изолированной копией и нативной сессией: новый ход в той же копии, без создания второй. С task — идёт дальше с новым заданием. Возвращает новое задание.`,arguments:{job:$T,task:`Новая формулировка вместо прежней (необязательно)`}}),e(`ide.agent.job.continue`,`Продолжить фоновое задание`,async e=>{let t=J(e),n=await Nb(eE(t,`job`),eE(t,`text`));if(!n.accepted||!n.job)throw Error(`Задание не удалось продолжить: возможно, оно ещё работает`);return tE(n.job)},()=>!0,void 0,{description:`Продолжает завершённое задание новым ходом в той же записи, копии и нативной сессии: исходная задача и результат остаются в контексте. Для идущего задания это то же, что ide.agent.job.send. Новую запись создаёт только ide.agent.job.retry.`,arguments:{job:$T,text:`Что сделать дальше`}}),e(`ide.agent.job.fork`,`Ответвить фоновое задание`,async e=>{let t=J(e),n=typeof t.task==`string`?t.task.trim():void 0;return tE(await Pb(eE(t,`job`),n||void 0))},()=>!0,void 0,{description:`Создаёт новое задание в отдельной изолированной копии, которая начинается с текущего состояния копии исходного задания: незакоммиченная работа фиксируется на ветке исходной копии, исходное задание не меняется. Подходит, чтобы попробовать другой вариант, не мешая исходному. Работает только для задания в изолированной копии.`,arguments:{job:$T,task:`Задание форку вместо исходного (необязательно)`}}),e(`ide.agent.job.stop`,`Остановить фоновое задание`,async e=>tE(await Eb(eE(J(e),`job`))),()=>!0,void 0,{description:`Останавливает работающее фоновое задание агента. Сделанное остаётся в файлах.`,arguments:{job:$T}}),e(`ide.agent.job.answer`,`Ответить фоновому агенту`,async e=>{let t=J(e);return tE(await Ob(eE(t,`job`),nE(t)))},()=>!0,void 0,{description:`Отвечает на вопрос фонового задания в состоянии needs-user: answers — объект { id вопроса: [id вариантов] } по идентификаторам из waiting, null — пропустить; текст — ответ своими словами. Запросы и их идентификаторы видно в ide.agent.job.result. Разрешения эта команда не подтверждает: их выдаёт пользователь карточкой в чате Projector.`,arguments:{job:$T,answer:`Текст ответа на вопрос`,answers:`Объект { id вопроса: [id вариантов] }; null — пропустить вопросы`,request:`Идентификатор запроса из waiting (по умолчанию первый)`}}),e(`ide.agent.job.open`,`Открыть фоновое задание во вкладке`,async e=>{let r=eE(J(e),`job`);return await n?.executeCommand(`ide.workbench.agent.job.open`,{job:r},{scope:`editor:${t}`}),{job:r}},()=>!0,void 0,{description:`Открывает вкладку фонового задания: журнал событий, итог, изменённые файлы, запросы с ответом, остановка и продолжение в чате.`,arguments:{job:$T}})}function sR(e,t,n=b()?yp().api:void 0){e(`ide.agent.roles.chat.list`,`Роли агентов для чата`,async()=>({roles:(await I_(t)).map(e=>({id:e.id,name:e.name,description:e.description,agent:e.agent,selection:e.selection,prompt:e.prompt,skills:e.skills,mcp:e.mcp,inherited:e.inherited}))}),()=>!0,void 0,{description:`Возвращает chat-роли, которые можно открыть командой ide.agent.role.open: id, название, агент и выбранные настройки. Служебные роли (Доктор, Lens, Судья) сюда не входят — они не открывают чат.`}),e(`ide.agent.role.open`,`Открыть чат с ролью`,async e=>{let r=J(e).role;if(typeof r!=`string`||!r)throw Error(`role: id chat-роли`);let i=(await I_(t)).find(e=>e.id===r);if(!i)throw Error(`Неизвестная chat-роль: ${r}`);let a=xt(i.agent);if(!a)throw Error(`Агент роли не найден: ${i.agent}`);if(!n)throw Error(`Роли открываются только в рабочей области проекта`);let o=a.builtin?`agent`:a.program,s=Mt(),c=`ide.workbench.${o}.open`;return await n.executeCommand(c,{chatId:s,role:ix(nx(i))},{scope:`editor:${t}`}),{role:i.id,name:i.name,agent:i.agent,chatId:s,command:c}},()=>!0,void 0,{description:`Открывает новый чат с chat-ролью: агент роли, её модель и настройки применяются к новому разговору и сохраняются в его истории. Правка роли позже не меняет уже открытый чат. Идентификаторы ролей даёт ide.agent.roles.chat.list.`,arguments:{role:`id chat-роли из ide.agent.roles.chat.list`}})}var cR=`Ключ чата из ide.agent.chats.list; без него — чат, с которым работали последним`,lR=e=>jC(e.backend)||!!e.capabilities().deleteSessions;function uR(e,t){e(`ide.agent.session.delete`,`Удалить прошлую сессию агента`,async e=>{let n=J(e),r=n.sessionId;if(typeof r!=`string`||!r)throw Error(`Укажите sessionId`);if(n.confirm!==!0)throw Error(`Удаление необратимо: передайте confirm: true`);return await JS(t,n.chat,lR).removeSession(r),{sessionId:r}},()=>qS(t).some(lR),void 0,{description:`Навсегда удаляет прошлую сессию (историю чата) агента открытого чата; восстановить её нельзя, поэтому нужен confirm: true. Идентификаторы даёт ide.agent.sessions.list. Не все внешние агенты умеют удалять сессии.`,arguments:{sessionId:`Идентификатор сессии`,confirm:`true — подтверждение`,chat:cR}})}var dR=`Ключ чата из ide.agent.chats.list; без него — чат, с которым работали последним`;function fR(e,t){let n=e[t];if(typeof n!=`string`||!n.trim())throw Error(`Укажите ${t}`);return n.trim()}function pR(e,t){let n=()=>qS(t).length>0,r=e=>JS(t,J(e).chat);e(`ide.agent.side.open`,`Открыть вопрос в сторону`,e=>r(e).openSide(),n,void 0,{description:`Открывает панель вопроса в сторону: ответ читается по контексту чата и не попадает в его историю. Не прерывает активный ход агента.`,arguments:{chat:dR}}),e(`ide.agent.side.ask`,`Спросить в сторону`,async e=>({answer:await r(e).askSide(fR(J(e),`text`))}),n,void 0,{description:`Задаёт вопрос в сторону и ждёт ответ. Работает и во время ответа агента; вопрос и ответ не записываются в чат. Ответ даёт Projector по видимой переписке и только читает состояние чата.`,arguments:{text:`Текст вопроса`,chat:dR}}),e(`ide.agent.side.clear`,`Очистить историю вопросов в сторону`,e=>r(e).clearSide(),n,void 0,{description:`Убирает из панели предыдущие вопросы в сторону этого чата. История чата и файлы не меняются.`,arguments:{chat:dR}}),e(`ide.agent.chat.status`,`Состояние чата агента`,e=>r(e).status(),n,void 0,{description:`Возвращает снимок состояния чата: занят ли агент, фаза, сколько идёт, когда было последнее событие, выполняющиеся инструменты, ожидающие разрешения и вопросы, очередь, живой процесс и сессию. Только чтение: используется вопросами в сторону, чтобы отличить ожидание пользователя от зависания.`,arguments:{chat:dR}})}var mR=`Ключ чата из ide.agent.chats.list; без него — чат, с которым работали последним`;function hR(e,t){let n=()=>qS(t).some(e=>e.turns().length>0),r=e=>JS(t,J(e).chat);e(`ide.agent.lens.show`,`Показать Lens: чем агент занят`,async e=>({open:!0,text:await r(e).openLens()}),n,void 0,{description:`Включает Lens в блоке работы последнего ответа и возвращает короткую сводку: чем агент занят сейчас, по видимой переписке и состоянию чата. Ничего не пишет в историю, не прерывает агента и не создаёт запуск. Дальше Lens обновляется по таймеру, пока агент работает, и по ide.agent.lens.refresh.`,arguments:{chat:mR}}),e(`ide.agent.lens.hide`,`Скрыть Lens`,e=>(r(e).closeLens(),{open:!1}),n,void 0,{description:`Выключает Lens в этом чате и отменяет запрос сводки, если он ещё идёт.`,arguments:{chat:mR}}),e(`ide.agent.lens.refresh`,`Обновить Lens`,async e=>({text:await r(e).refreshLens()}),n,void 0,{description:`Просит новую сводку о текущей работе и ждёт её. Работает и во время ответа агента; прежняя сводка остаётся, пока не придёт новая.`,arguments:{chat:mR}}),e(`ide.agent.lens.auto`,`Автообновление Lens`,e=>{let t=J(e).enabled;if(typeof t!=`boolean`)throw Error(`enabled должен быть boolean`);let n=r(e);return n.setLensAuto(t),{open:n.lensOpen(),auto:t}},n,void 0,{description:`Включает или выключает автообновление Lens по таймеру, пока агент занят. Ручной ide.agent.lens.refresh работает в любом случае.`,arguments:{enabled:`boolean: обновлять автоматически`,chat:mR}})}var gR=`Ключ чата из ide.agent.chats.list; без него — чат, с которым работали последним`;function _R(e,t){let n=()=>qS(t).some(e=>!e.busy()&&!!e.pendingForm()),r=e=>JS(t,J(e).chat,e=>!!e.pendingForm());e(`ide.agent.form.show`,`Показать форму ответа в поле ввода`,e=>(r(e).showForm(),{shown:!0}),n,void 0,{description:`Возвращает в поле ввода форму, которой закончился последний ответ. Форму заполняет пользователь; команда только показывает её и ничего не отправляет.`,arguments:{chat:gR}}),e(`ide.agent.form.text`,`Вернуть текстовое поле вместо формы`,e=>(r(e).hideForm(),{text:!0}),n,void 0,{description:`Убирает форму из поля ввода и возвращает обычное текстовое поле. Сама форма остаётся в ответе; ide.agent.form.show вернёт её.`,arguments:{chat:gR}})}function vR(e,t){e(`ide.agent.tasks.list`,`Задачи чата агента`,e=>{let n=JS(t,J(e).chat);return n.tasks().map(e=>({chat:n.key,task:e.id,title:e.title,kind:e.kind,status:e.status,background:e.background,summary:e.summary}))},()=>qS(t).length>0,void 0,{description:`Возвращает субагентов и фоновые команды открытого чата: ключ чата и идентификатор задачи (для ide.workbench.agent.task.open), название, вид, состояние и итог.`,arguments:{chat:`Ключ чата из ide.agent.chats.list; без него — чат, с которым работали последним`}})}var yR=`Ключ чата из ide.agent.chats.list; без него — чат, с которым работали последним`,bR=[`conversation`,`files`,`both`];function xR(e,t){vR(e,t),oR(e,t),sR(e,t),uR(e,t),nR(e,t),pR(e,t),hR(e,t),_R(e,t);let n=()=>qS(t).length>0,r=()=>qS(t).some(e=>!jC(e.backend)),i=()=>qS(t).some(e=>!e.busy()),a=(e,n)=>JS(t,J(e).chat,n),o=e=>!jC(e.backend);e(`ide.agent.chats.list`,`Открытые чаты агентов`,()=>qS(t).map(e=>({chat:e.key,agent:e.label,busy:e.busy(),messages:e.turns().length})),n,void 0,{description:`Возвращает открытые чаты агентов проекта: ключ (аргумент chat других ide.agent.*), агент, занят ли он и число сообщений. Первым идёт чат, с которым работали последним.`}),e(`ide.agent.turns.list`,`Сообщения чата агента`,e=>a(e).turns().map(e=>({turnId:e.id,role:e.role,text:e.text.trim().slice(0,200),versions:(e.variants?.length??0)+ +(e.role===`user`)})),n,void 0,{description:`Возвращает сообщения открытого чата: идентификатор (turnId для edit, retry и rewind), роль, начало текста и число версий пользовательского сообщения.`,arguments:{chat:yR}}),e(`ide.agent.controls.menu.toggle`,`Открыть или закрыть параметры агента`,e=>a(e,o).toggleControlsMenu(),()=>r()&&i(),void 0,{description:`Показывает остров над полем ввода: модель, усилие, режим и разрешения с пояснениями.`,arguments:{chat:yR}}),e(`ide.agent.controls.list`,`Параметры агента: модель, усилие, режим`,e=>a(e,o).controls().map(e=>({id:e.id,name:e.name,current:e.current,options:e.options.map(e=>e.value)})),r,void 0,{description:`Возвращает настройки открытого чата внешнего агента (модель, усилие рассуждений, режим) с текущими значениями и допустимыми вариантами.`,arguments:{chat:yR}}),e(`ide.agent.control.set`,`Выбрать модель, усилие или режим агента`,async e=>{let t=J(e),n=sx(t,`id`),r=sx(t,`value`);return await a(e,o).setControl(n,r),{id:n,value:r}},()=>r()&&i(),void 0,{description:`Задаёт настройку открытого чата внешнего агента. Действует со следующего сообщения и запоминается как выбор по умолчанию для этого агента.`,arguments:{id:`Идентификатор настройки из ide.agent.controls.list (например model)`,value:`Одно из допустимых значений настройки`,chat:yR}}),e(`ide.agent.sessions.list`,`Прошлые сессии агента`,e=>a(e,o).loadSessions(),r,void 0,{description:"Возвращает прошлые сессии агента открытого чата в папке проекта, от новых к старым: идентификатор, название и время. У ветки субагента есть поле `parent` с идентификатором чата, из которого она запущена, и `agent` с именем агента ветки; ветки не смешиваются с основными чатами.",arguments:{chat:yR}}),e(`ide.agent.session.resume`,`Продолжить прошлую сессию агента`,async e=>{let t=sx(J(e),`sessionId`);return await a(e,o).resumeSession(t),{sessionId:t}},()=>r()&&i(),void 0,{description:`Заменяет содержимое открытого чата сообщениями выбранной прошлой сессии; следующее сообщение продолжит её. Идентификаторы даёт ide.agent.sessions.list.`,arguments:{sessionId:`Идентификатор сессии`,chat:yR}}),e(`ide.agent.chat.send`,`Отправить сообщение агенту`,async e=>{await a(e).send(sx(J(e),`text`))},n,void 0,{description:`Отправляет сообщение в открытый чат агента. Если агент ещё отвечает, сообщение передаётся перед следующим запросом к модели, если агент поддерживает уточнения во время работы; иначе — после ответа.`,arguments:{text:`Текст сообщения`,chat:yR}}),e(`ide.agent.chat.inject`,`Добавить сообщение в идущий ответ агента`,async e=>({added:await a(e,e=>e.busy()&&!!e.capabilities().inject).inject(sx(J(e),`text`))}),()=>qS(t).some(e=>e.busy()&&!!e.capabilities().inject),void 0,{description:`Добавляет уточнение в ответ, который агент пишет сейчас: он учтёт его, не останавливаясь. Если ответ уже закончился, сообщение остаётся в очереди (added: false).`,arguments:{text:`Текст уточнения`,chat:yR}}),e(`ide.agent.chat.stop`,`Остановить ответ агента`,e=>a(e,e=>e.busy()).stop(),()=>qS(t).some(e=>e.busy()),void 0,{description:`Останавливает ответ, который агент пишет сейчас. Сообщения в очереди после этого сами не уходят.`,arguments:{chat:yR}}),e(`ide.agent.chat.edit`,`Править сообщение и отправить заново`,e=>{let t=a(e,e=>!e.busy());t.edit(cx(t,J(e),`user`))},i,void 0,{description:`Возвращает отправленное сообщение в поле ввода, а разговор после него убирает в другую версию (к ней можно вернуться). Без turnId берётся последнее сообщение пользователя. Файлы не меняются.`,arguments:{turnId:`Сообщение из ide.agent.turns.list`,chat:yR}}),e(`ide.agent.chat.retry`,`Повторить ответ агента`,async e=>{let t=a(e,e=>!e.busy());await t.retry(cx(t,J(e),`assistant`))},i,void 0,{description:`Задаёт агенту тот же вопрос заново; прежний ответ остаётся другой версией сообщения. Файлы не откатываются.`,arguments:{turnId:`Сообщение или ответ из ide.agent.turns.list`,chat:yR}}),e(`ide.agent.chat.rewind`,`Откатить чат к сообщению`,async e=>{let t=J(e),n=t.scope??`conversation`;if(!bR.includes(n))throw Error(`scope: ${bR.join(`, `)}`);let r=a(e,e=>!e.busy());return r.rewind(cx(r,t,`user`),n)},i,void 0,{description:`Возвращает чат к моменту до сообщения. scope: conversation — только разговор (сообщение уходит в поле ввода), files — файлы проекта возвращаются к тому шагу (если агент хранит резервные копии), both — и то и другое. Меняет файлы на диске: используйте по просьбе пользователя.`,arguments:{turnId:`Сообщение пользователя из ide.agent.turns.list; по умолчанию последнее`,scope:`conversation | files | both`,chat:yR}}),e(`ide.agent.chat.version.show`,`Показать другую версию разговора`,e=>{let t=J(e),n=Number(t.version);if(!Number.isInteger(n)||n<1)throw Error(`version — номер от 1`);a(e,e=>!e.busy()).showVersion(sx(t,`turnId`),n-1)},i,void 0,{description:`Переключает чат на другую версию разговора с сообщения, которое правили или повторяли.`,arguments:{turnId:`Сообщение пользователя из ide.agent.turns.list`,version:`Номер версии, с 1`,chat:yR}}),e(`ide.agent.chat.queue.list`,`Сообщения в очереди агента`,e=>a(e).queue(),n,void 0,{description:`Возвращает сообщения, которые ждут конца ответа агента.`,arguments:{chat:yR}}),e(`ide.agent.chat.queue.remove`,`Убрать сообщение из очереди агента`,e=>a(e).removeQueued(sx(J(e),`id`)),n,void 0,{description:`Убирает сообщение из очереди по идентификатору из ide.agent.chat.queue.list.`,arguments:{id:`Идентификатор из очереди`,chat:yR}}),e(`ide.agent.chat.export`,`Экспортировать чат агента в Markdown`,e=>a(e).exportMarkdown(),n,void 0,{description:`Возвращает весь открытый разговор как Markdown-документ.`,arguments:{chat:yR}}),e(`ide.agent.chat.compact`,`Сжать контекст агента`,e=>a(e,e=>!!e.capabilities().compact&&!e.busy()).compact(),()=>qS(t).some(e=>!!e.capabilities().compact&&!e.busy()),void 0,{description:`Просит агента сжать разговор, освобождая место в окне контекста. Подходит, когда в чате показано предупреждение о заполнении контекста.`,arguments:{chat:yR}}),e(`ide.agent.worktree.status`,`Изолированная копия проекта у чата`,async e=>await a(e,o).worktree()??null,r,void 0,{description:`Возвращает изолированную копию проекта (git worktree), в которой работает чат: ветку и число изменённых файлов; null, если чат работает в самом проекте.`,arguments:{chat:yR}}),e(`ide.agent.worktree.merge`,`Влить изолированную копию в проект`,e=>a(e,e=>o(e)&&!e.busy()).mergeWorktree(),i,void 0,{description:`Коммитит изменения агента в его изолированной копии и вливает ветку копии в ветку проекта (git merge), затем удаляет копию. Меняет файлы проекта и историю git: используйте по просьбе пользователя. При конфликте слияние отменяется, проект остаётся как был.`,arguments:{chat:yR}}),e(`ide.agent.worktree.discard`,`Отбросить изолированную копию проекта`,async e=>{await a(e,e=>o(e)&&!e.busy()).discardWorktree()},i,void 0,{description:`Удаляет изолированную копию чата и всё, что агент в ней сделал. Необратимо: используйте по просьбе пользователя.`,arguments:{chat:yR}}),e(`ide.agent.chat.isolate`,`Начать чат в изолированной копии проекта`,e=>{let t=J(e).on!==!1;return a(e,e=>o(e)&&!e.busy()&&e.turns().length===0).setIsolate(t),{isolate:t}},()=>qS(t).some(e=>o(e)&&e.turns().length===0),void 0,{description:`Включает (on: true, по умолчанию) или выключает режим, при котором первое сообщение пустого чата запускает агента в отдельной копии проекта (git worktree на своей ветке). Так несколько агентов не мешают друг другу. Работает только в git-проекте и в чате без сообщений.`,arguments:{on:`true или false`,chat:yR}}),e(`ide.agent.mcp.list`,`MCP-серверы агента`,e=>a(e,o).mcpServers(),r,void 0,{description:`Возвращает MCP-серверы агента в проекте: серверы из его настроек и .mcp.json проекта (имя, состояние, число инструментов, ошибка).`,arguments:{chat:yR}})}function SR(e,t,n,r,i){return CR(e,[{type:`file`,path:t,range:n}],{chat:r,run:i})}function CR(e,t,n){return TR(e,n,e=>e.attach(t))}async function wR(e,t,n){let r=t.trim();if(!r)throw Error(`Выделите текст`);let i=n.source?.trim();return TR(e,n,e=>e.appendText(i?`${i}:\n${r}`:r))}async function TR(e,t,n){let r=qS(e);if(t.chat){let e=r.find(e=>e.key===t.chat);if(!e)throw Error(`Чат «${t.chat}» не открыт; открытые даёт ide.agent.chats.list`);return await n(e),e}if(r.length)return await n(r[0]),r[0];if(t.open===!1)throw Error(`Нет открытого чата агента`);let i=await ob(e).catch(()=>[]);for(let r of i){let i=ox(e,r.chat,r.title);if(!i)continue;await t.run(i.command,i.args);let a=await XS(e,r.chat);return await n(a),a}await t.run(`ide.workbench.agent.open`);let a=await XS(e);return await n(a),a}async function ER(e=``,t=`GET`,n){let r=await fetch(`/api/integrations${e}`,{method:t,headers:{"Content-Type":`application/json`},body:n===void 0?void 0:JSON.stringify(n)}),i=await r.json();if(!r.ok)throw Error(i.error||`Ошибка интеграции`);return i}var DR=()=>ER(),OR={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function kR(e,t){return K(),U(`svg`,OR,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0`}),I(`circle`,{cx:`12`,cy:`12`,r:`3`})],-1)]])}var AR=L({name:`lucide-eye`,render:kR}),jR={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function MR(e,t){return K(),U(`svg`,jR,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242`}),I(`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20`})],-1)]])}var NR=L({name:`lucide-eye-off`,render:MR}),PR=W({__name:`TokenReveal`,props:{integration:{type:String,required:!0},label:{type:String,required:!0},disabled:{type:Boolean,required:!1}},emits:[`error`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=M(``),o;function s(){clearTimeout(o),a.value=``}async function c(){if(a.value)return s();try{let e=await ER(`/${r.integration}/token`,`POST`);a.value=e.token,o=setTimeout(s,3e4)}catch(e){i(`error`,e instanceof Error?e.message:`Ошибка интеграции`)}}g(s),t({hide:s});let l={props:r,emit:i,revealed:a,get hideTimer(){return o},set hideTimer(e){o=e},hide:s,toggle:c,UiControl:Se,get IconEye(){return AR},get IconEyeOff(){return NR},UiButton:q};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),FR={class:`secret`};function IR(t,n,r,i,a,o){return K(),U(`div`,FR,[n[0]||=I(`span`,{class:`muted`},`Токен`,-1),y(i.UiControl,{class:`secret-value`,readonly:``,type:i.revealed?`text`:`password`,value:i.revealed||`••••••••••••••••`,"aria-label":r.label},null,8,[`type`,`value`,`aria-label`]),y(i.UiButton,{disabled:r.disabled,"aria-label":i.revealed?`Скрыть токен`:`Показать токен`,title:i.revealed?`Скрыть токен`:`Показать токен (скроется через 30 секунд)`,onClick:i.toggle},{default:e(()=>[(K(),F(C(i.revealed?i.IconEyeOff:i.IconEye)))]),_:1},8,[`disabled`,`aria-label`,`title`])])}var LR=H(PR,[[`render`,IR],[`__scopeId`,`data-v-adb0e485`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/integration-api/TokenReveal.vue`]]),RR=`node:24-bookworm`,zR={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function BR(e,t){return K(),U(`svg`,zR,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m6 14l1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2`},null,-1)]])}var VR=L({name:`lucide-folder-open`,render:BR}),HR=W({__name:`CloneRepositoryDialog`,props:{source:{type:String,required:!0},repository:{type:String,required:!0},destinationName:{type:String,required:!0},projectId:{type:String,required:!0},navigate:{type:Function,required:!0}},emits:[`cloned`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a={github:{dialog:`Клонировать репозиторий`,dialogCommand:`Клонировать репозиторий GitHub`,dialogDescription:`Открывает выбор папки для клонирования текущего репозитория и перехода в локальный проект.`,cloneDescription:`Клонирует текущий репозиторий в папку/имя репозитория, добавляет в каталог и открывает /projects. Существующие папки не перезаписывает.`,abortDescription:`Отменяет идущее клонирование: останавливает загрузку образа и git clone, удаляет временную папку. Проект не добавляется.`,directoryDescription:`Открывает системный выбор папки для локальной копии репозитория.`,fallback:`Не удалось клонировать репозиторий`},gitlab:{dialog:`Клонировать проект`,dialogCommand:`Клонировать проект GitLab`,dialogDescription:`Открывает выбор папки для клонирования текущего проекта GitLab и перехода в локальный проект.`,cloneDescription:`Клонирует текущий проект GitLab в папку/<group>/<project>, добавляет в каталог и открывает /projects. Существующие папки не перезаписывает.`,abortDescription:`Отменяет идущее клонирование: останавливает загрузку образа и git clone, удаляет временную папку. Проект не добавляется.`,directoryDescription:`Открывает системный выбор папки для локальной копии проекта GitLab.`,fallback:`Не удалось клонировать проект`}},o=a[r.source],s=`/${r.source}/clone-jobs`,c=`ide.${r.source}.repository.clone`,l=V(),u=M(),d=M(),f=M(``),m=M(`docker`),h=M(RR),_=M(!1),v=M(`5173`),y=M(!1),b=M(!1),x=M(``),S=M(),C=M(``),w=``;async function T(e){w=(await ER(s,`POST`,e)).job.id;try{for(;;){let{job:e}=await ER(`${s}/${w}`);if(C.value=e.message,e.phase===`done`&&e.project)return e.project;if(e.phase===`cancelled`)throw Error(`Клонирование отменено`);if(e.phase===`error`)throw Error(e.message);await new Promise(e=>setTimeout(e,700))}}finally{w=``,C.value=``}}g(()=>{w&&ER(`${s}/${w}`,`DELETE`).catch(()=>{})});let E=Mu(),D=Je(`${r.source}-clone:${r.projectId}`,()=>({surface:`${r.source}-clone`,projectId:r.projectId}));D.scope.registerCommand({id:`${c}.dialog`,title:o.dialogCommand,description:o.dialogDescription,enabled:()=>!b.value,run:async()=>{x.value=``,S.value=void 0,f.value=``,y.value=!0,u.value?.open();try{let e=await DR();f.value=e.integrations.find(e=>e.id===r.source)?.settings.directory||`~/Projects`}catch(e){x.value=e instanceof Error?e.message:`Не удалось прочитать настройки`,f.value=`~/Projects`}finally{y.value=!1,await p(),u.value?.element?.open&&d.value?.focus()}}}),D.scope.registerCommand({id:c,title:`Клонировать и открыть локальный проект`,description:o.cloneDescription,arguments:{directory:`Абсолютная папка назначения или ~/папка`,environment:`local или { kind: docker, image, network: none|bridge, ports: number[] }; по умолчанию настройки диалога`},enabled:()=>!b.value&&!y.value,run:async e=>{let t=J(e),n=t.directory??f.value;if(typeof n!=`string`||!n.trim())throw Error(`Укажите папку назначения`);b.value=!0,x.value=``;try{if(!S.value){let e=await T({repository:r.repository,directory:n.trim(),environment:t.environment??(m.value===`docker`?{kind:`docker`,image:h.value,network:_.value?`bridge`:`none`,ports:_.value?v.value.split(`,`).filter(e=>e.trim()).map(Number):[]}:`local`)});S.value=e,E.ingest(e),i(`cloned`,e)}await r.navigate(S.value.path),u.value?.close()}catch(e){x.value=e instanceof Error?e.message:o.fallback}finally{b.value=!1}}}),D.scope.registerCommand({id:`${c}.abort`,title:`Прервать клонирование`,description:o.abortDescription,enabled:()=>b.value&&!!w,run:async()=>{await ER(`${s}/${w}`,`DELETE`)}}),D.scope.registerCommand({id:`${c}.cancel`,title:`Закрыть окно клонирования`,description:`Закрывает окно клонирования и возвращает фокус в строку пути.`,palette:!1,enabled:()=>!b.value,run:()=>u.value?.close()}),D.scope.registerCommand({id:`${c}.directory`,title:`Выбрать папку клонирования`,description:o.directoryDescription,palette:!1,enabled:()=>!b.value&&!y.value&&!S.value,run:async()=>{try{let e=await wu();e.path&&(f.value=e.path)}catch(e){x.value=e instanceof Error?e.message:`Не удалось выбрать папку`}}});let O=B(()=>{let e=f.value.trim().replace(/[\\/]+$/,``);if(!e||!r.destinationName)return``;let t=e.includes(`\\`)?`\\`:`/`;return`${e}${t}${r.destinationName.split(`/`).filter(Boolean).join(t)}`});function k(e){e.preventDefault(),b.value||D.run(`${c}.cancel`)}let A={props:r,emit:i,TEXT:a,text:o,apiBase:s,commandPrefix:c,id:l,dialog:u,input:d,directory:f,mode:m,image:h,network:_,ports:v,loading:y,busy:b,error:x,cloned:S,step:C,get jobId(){return w},set jobId(e){w=e},cloneInBackground:T,projects:E,commands:D,destination:O,cancel:k,UiButton:q,UiControl:Se,UiDialog:un,UiDialogActions:km,UiHeading:Ee,UiInline:Be,UiLabel:xl,UiMessage:Te,get IconFolder(){return VR}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}}),UR=[`aria-busy`],WR={class:`repository`},GR={key:0,class:`destination`},KR={key:2,role:`status`},qR={key:3,role:`status`};function JR(t,n,r,i,a,o){return K(),F(fe,{to:`body`},[y(i.UiDialog,{ref:`dialog`,labelledby:i.id,width:`520px`,onKeydown:n[9]||=N(()=>{},[`stop`]),onCancel:i.cancel},{default:e(()=>[I(`form`,{onSubmit:n[8]||=N(e=>i.commands.run(i.commandPrefix),[`prevent`]),"aria-busy":i.busy},[y(i.UiHeading,{id:i.id},{default:e(()=>[G(X(i.text.dialog),1)]),_:1},8,[`id`]),I(`p`,WR,X(r.repository),1),y(i.UiLabel,{size:`xs`,tone:`muted`,"space-after":2,for:`${i.id}-directory`},{default:e(()=>[...n[10]||=[G(`Папка назначения`,-1)]]),_:1},8,[`for`]),y(i.UiInline,{class:`directory`,align:`normal`,justify:`normal`},{default:e(()=>[y(i.UiControl,{grow:``,id:`${i.id}-directory`,ref:`input`,modelValue:i.directory,"onUpdate:modelValue":n[0]||=e=>i.directory=e,required:``,disabled:i.busy||i.loading||!!i.cloned,autocomplete:`off`,spellcheck:`false`},null,8,[`id`,`modelValue`,`disabled`]),y(i.UiButton,{title:`Выбрать папку`,"aria-label":`Выбрать папку`,disabled:i.busy||i.loading||!!i.cloned,onClick:n[1]||=e=>i.commands.run(`${i.commandPrefix}.directory`)},{default:e(()=>[y(i.IconFolder,{"aria-hidden":`true`})]),_:1},8,[`disabled`])]),_:1}),i.destination?(K(),U(`p`,GR,X(i.destination),1)):D(`v-if`,!0),y(i.UiLabel,{size:`xs`,tone:`muted`,"space-after":2,for:`${i.id}-mode`},{default:e(()=>[...n[11]||=[G(`Окружение`,-1)]]),_:1},8,[`for`]),y(i.UiControl,{as:`select`,id:`${i.id}-mode`,modelValue:i.mode,"onUpdate:modelValue":n[2]||=e=>i.mode=e,disabled:i.busy||!!i.cloned},{default:e(()=>[...n[12]||=[I(`option`,{value:`docker`},`Docker — изолированный запуск`,-1),I(`option`,{value:`local`},`Локально — запуск на хосте`,-1)]]),_:1},8,[`id`,`modelValue`,`disabled`]),i.mode===`docker`?(K(),U(P,{key:1},[y(i.UiLabel,{size:`xs`,tone:`muted`,"space-after":2,for:`${i.id}-image`},{default:e(()=>[...n[13]||=[G(`Образ`,-1)]]),_:1},8,[`for`]),y(i.UiControl,{id:`${i.id}-image`,modelValue:i.image,"onUpdate:modelValue":n[3]||=e=>i.image=e,disabled:i.busy||!!i.cloned,required:``},null,8,[`id`,`modelValue`,`disabled`]),y(i.UiInline,{as:`label`,class:`network`,justify:`normal`},{default:e(()=>[y(i.UiControl,{modelValue:i.network,"onUpdate:modelValue":n[4]||=e=>i.network=e,type:`checkbox`,disabled:i.busy||!!i.cloned},null,8,[`modelValue`,`disabled`]),n[14]||=G(` Разрешить сеть (интернет и локальная сеть)`,-1)]),_:1}),i.network?(K(),U(P,{key:0},[y(i.UiLabel,{size:`xs`,tone:`muted`,"space-after":2,for:`${i.id}-ports`},{default:e(()=>[...n[15]||=[G(`Порты приложения`,-1)]]),_:1},8,[`for`]),y(i.UiControl,{id:`${i.id}-ports`,modelValue:i.ports,"onUpdate:modelValue":n[5]||=e=>i.ports=e,placeholder:`5173, 3000`,disabled:i.busy||!!i.cloned},null,8,[`id`,`modelValue`,`disabled`])],64)):D(`v-if`,!0),n[16]||=I(`p`,null,` Контейнеру доступна только папка проекта. Установка зависимостей — из терминала; без сети она недоступна. `,-1)],64)):D(`v-if`,!0),i.loading?(K(),U(`p`,KR,`Читаю настройки…`)):D(`v-if`,!0),i.busy?(K(),U(`p`,qR,X(i.cloned?`Открываю проект…`:i.step||`Запускаю…`),1)):D(`v-if`,!0),i.error?(K(),F(i.UiMessage,{key:4,tone:`danger`,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0),y(i.UiDialogActions,null,{default:e(()=>[i.busy&&!i.cloned?(K(),F(i.UiButton,{key:0,onClick:n[6]||=e=>i.commands.run(`${i.commandPrefix}.abort`)},{default:e(()=>[...n[17]||=[G(`Прервать`,-1)]]),_:1})):(K(),F(i.UiButton,{key:1,onClick:n[7]||=e=>i.commands.run(`${i.commandPrefix}.cancel`)},{default:e(()=>[...n[18]||=[G(`Отмена`,-1)]]),_:1})),y(i.UiButton,{type:`submit`,appearance:`solid`,disabled:i.busy||i.loading||!i.directory.trim()},{default:e(()=>[G(X(i.cloned?`Открыть проект`:`Клонировать`),1)]),_:1},8,[`disabled`])]),_:1})],40,UR)]),_:1},8,[`labelledby`])])}var YR=H(HR,[[`render`,JR],[`__scopeId`,`data-v-71ad9bbf`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/integration-api/CloneRepositoryDialog.vue`]]),XR=W({__name:`DeviceLoginPanel`,props:{host:{type:String,required:!0},device:{type:Object,required:!0},commandId:{type:String,required:!0}},emits:[`cancel`],setup(e,{expose:t,emit:n}){t();let r={emit:n,UiButton:q};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),ZR={class:`device`,role:`status`},QR=[`href`];function $R(t,n,r,i,a,o){return K(),U(`div`,ZR,[I(`p`,null,[n[1]||=G(` Введите код `,-1),I(`strong`,null,X(r.device.userCode),1),G(` на странице `+X(r.host)+`. `,1)]),I(`a`,{href:r.device.verificationUri,target:`_blank`,rel:`noopener noreferrer`},`открыть `+X(r.host)+` для входа ↗`,9,QR),n[3]||=I(`p`,{class:`muted`},`Ожидаем подтверждения…`,-1),y(i.UiButton,{"data-command":r.commandId,onClick:n[0]||=e=>i.emit(`cancel`)},{default:e(()=>[...n[2]||=[G(`отменить`,-1)]]),_:1},8,[`data-command`])])}var ez=H(XR,[[`render`,$R],[`__scopeId`,`data-v-7dacec3c`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/integration-api/DeviceLoginPanel.vue`]]);function tz(e){let t=M(null),n,r=!1;function i(){clearTimeout(n),t.value=null}async function a(o){if(!(r||t.value?.id!==o.id))try{let s=await ER(e.pollEndpoint,`POST`,{id:o.id});if(r||t.value?.id!==o.id)return;if(s.pending){n=setTimeout(()=>void a(o),(s.interval||5)*1e3);return}s.integration&&e.apply(s.integration),i(),e.message.value=e.connectedMessage}catch(n){!r&&t.value?.id===o.id&&(i(),e.error.value=n instanceof Error?n.message:`Ошибка входа`)}}function o(){return e.action(async()=>{await e.save();let r=await ER(e.endpoint,`POST`);t.value=r,n=setTimeout(()=>void a(r),r.interval*1e3)})}return g(()=>{r=!0,i()}),{device:t,start:o,cancel:i}}function nz(e){let t=M(),n=M(``),r=M(!1),i=M(!1),a=M(0),o=M(),s=new AbortController,c,l=!1,u=!1;async function d(){n.value=``;try{let n=await e.read(s.signal);if(l)return;let o=e.createProfile(n,e=>{t.value=e});c?.(),c=an(e.projectId,o),t.value=n,r.value=!1,u=!1,a.value++,i.value=!0}catch(o){if(l)return;e.isAuthError(o)?(c?.(),c=an(e.projectId,e.createConnectionProfile()),t.value=void 0,r.value=!0,u=!1,a.value++,i.value=!0):n.value=o instanceof Error?o.message:e.errorFallback}}async function p(){if(!t.value||t.value.empty)return;let n=e.initialPath();if(n)return o.value?.openFile(n);let r=(await tt(e.projectId,`tree`)).entries.find(e=>/^readme\.(?:md|markdown)$/i.test(e.name));!l&&r&&await o.value?.openFile(r.name)}function m(t){o.value=t,o.value&&!u&&(u=!0,r.value?o.value.openTab(e.connectionTab):p().catch(t=>{n.value=t instanceof Error?t.message:e.readmeError}))}return f(d),g(()=>{l=!0,s.abort()}),v(()=>c?.()),{metadata:t,error:n,needsConnection:r,profileReady:i,workspaceVersion:a,workspace:o,loadRepository:d,ready:m}}var rz={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function iz(e,t){return K(),U(`svg`,rz,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`12`,cy:`12`,r:`1`}),I(`circle`,{cx:`12`,cy:`12`,r:`10`})],-1)]])}var az=L({name:`lucide-circle-dot`,render:iz}),oz={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function sz(e,t){return K(),U(`svg`,oz,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`18`,cy:`18`,r:`3`}),I(`circle`,{cx:`6`,cy:`6`,r:`3`}),I(`path`,{d:`M6 21V9a9 9 0 0 0 9 9`})],-1)]])}var cz=L({name:`lucide-git-merge`,render:sz}),lz=W({__name:`RepositoryOverview`,props:{repository:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r={star:ky,fork:EA,eye:AR,issue:az,merge:cz},i=e=>e.toLocaleString(`ru-RU`),a=()=>n.repository.visibility??(n.repository.private?`приватный`:`публичный`);Tn(()=>n.repository.readout);let o={props:n,icons:r,number:i,visibility:a,UiAvatar:jn,UiBadge:kd,UiCard:je,UiHeading:Ee,UiInline:Be,get IconBranch(){return PN},get IconExternal(){return Fn},get IconGlobe(){return _D},get IconScale(){return YI}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),uz={class:`repository-panel`},dz={key:0,class:`namespace`},fz={key:0,class:`description`},pz={key:1,class:`description muted`},mz={key:2,class:`topics`},hz={class:`stats`},gz={class:`details`},_z={key:3,class:`note-line`},vz=[`href`],yz={key:4,class:`note-line`},bz={key:0},xz={key:1},Sz={key:5,class:`note-line`};function Cz(t,n,r,i,a,o){return K(),U(`div`,uz,[y(i.UiInline,{as:`header`,class:`head`,align:`flex-start`,gap:3,justify:`between`,wrap:``},{default:e(()=>[y(i.UiInline,{class:`identity`,wrap:``,justify:`normal`},{default:e(()=>[y(i.UiAvatar,{src:r.repository.avatarUrl,alt:r.repository.namespace||r.repository.fullName,size:30},null,8,[`src`,`alt`]),r.repository.namespace?(K(),U(`span`,dz,X(r.repository.namespace)+`/`,1)):D(`v-if`,!0),y(i.UiHeading,{as:`h2`,size:`lg`,weight:`semibold`,"space-after":0},{default:e(()=>[G(X(r.repository.name),1)]),_:1}),y(i.UiBadge,{tone:r.repository.private?`warning`:`neutral`},{default:e(()=>[G(X(i.visibility()),1)]),_:1},8,[`tone`]),r.repository.archived?(K(),F(i.UiBadge,{key:1,tone:`warning`},{default:e(()=>[...n[0]||=[G(`в архиве`,-1)]]),_:1})):D(`v-if`,!0),r.repository.empty?(K(),F(i.UiBadge,{key:2},{default:e(()=>[...n[1]||=[G(`пустой`,-1)]]),_:1})):D(`v-if`,!0)]),_:1}),y(i.UiInline,{as:`a`,inline:``,justify:`normal`,class:`repo-link`,href:r.repository.htmlUrl,target:`_blank`,rel:`noopener noreferrer`},{default:e(()=>[y(i.IconExternal,{"aria-hidden":`true`}),G(`Открыть на `+X(r.repository.hostLabel),1)]),_:1},8,[`href`])]),_:1}),r.repository.description?(K(),U(`p`,fz,X(r.repository.description),1)):(K(),U(`p`,pz,`Без описания`)),r.repository.topics.length?(K(),U(`ul`,mz,[(K(!0),U(P,null,S(r.repository.topics,e=>(K(),U(`li`,{key:e},X(e),1))),128))])):D(`v-if`,!0),I(`dl`,hz,[(K(!0),U(P,null,S(r.repository.stats,t=>(K(),F(i.UiCard,{as:`div`,appearance:`frame`,key:t.key,class:`stat`},{default:e(()=>[I(`dt`,null,[(K(),F(C(i.icons[t.icon]),{"aria-hidden":`true`})),G(X(t.label),1)]),I(`dd`,null,X(i.number(t.value)),1)]),_:2},1024))),128))]),I(`dl`,gz,[(K(!0),U(P,null,S(r.repository.details,e=>(K(),U(`div`,{key:e.key},[I(`dt`,null,X(e.label),1),I(`dd`,null,X(e.value),1)]))),128))]),r.repository.homepage?(K(),U(`p`,_z,[y(i.IconGlobe,{"aria-hidden":`true`}),I(`a`,{href:r.repository.homepage,target:`_blank`,rel:`noopener noreferrer`},X(r.repository.homepage),9,vz)])):D(`v-if`,!0),r.repository.refNote?(K(),U(`p`,yz,[y(i.IconBranch,{"aria-hidden":`true`}),G(X(r.repository.refNote.text)+` `,1),r.repository.refNote.code?(K(),U(`code`,bz,X(r.repository.refNote.code),1)):D(`v-if`,!0),r.repository.refNote.suffix?(K(),U(`span`,xz,X(r.repository.refNote.suffix),1)):D(`v-if`,!0)])):D(`v-if`,!0),r.repository.license?(K(),U(`p`,Sz,[y(i.IconScale,{"aria-hidden":`true`}),G(`Лицензия: `+X(r.repository.license),1)])):D(`v-if`,!0)])}var wz=H(lz,[[`render`,Cz],[`__scopeId`,`data-v-0346f0ba`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/integration-api/RepositoryOverview.vue`]]);function Tz(){let e=M(!1),t=M(``),n=M(``);async function r(r){if(!e.value){t.value=``,n.value=``,e.value=!0;try{await r()}catch(e){throw t.value=e instanceof Error?e.message:`Ошибка интеграции`,e}finally{e.value=!1}}}return{busy:e,error:t,message:n,action:r}}var Ez=W({__name:`TokenConnectionForm`,props:{host:{type:String,required:!0},subjectLabel:{type:String,required:!0},subject:{type:String,required:!0},projectId:{type:String,required:!0},scopeKey:{type:String,required:!0},surface:{type:String,required:!0},placeholder:{type:String,required:!0},tokenUrl:{type:String,required:!0},commandId:{type:String,required:!0},commandDescription:{type:String,required:!0},readoutNote:{type:String,required:!0},intro:{type:String,required:!1},connect:{type:Function,required:!0}},emits:[`connected`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=M(``),o=V(),{busy:s,error:c,action:l}=Tz(),u=Je(r.scopeKey,()=>({surface:r.surface,projectId:r.projectId,repository:r.subject}));u.scope.registerCommand({id:r.commandId,title:`Подключить ${r.host}`,description:r.commandDescription,enabled:()=>!s.value&&!!a.value.trim(),run:()=>l(async()=>{await r.connect(a.value),a.value=``,i(`connected`)})}),Tn(()=>({note:r.readoutNote,text:Nn(`${r.subjectLabel}: ${r.subject}`,s.value?`Состояние: подключение…`:`Состояние: не подключено`,a.value.trim()?`Токен: введён`:`Токен: не введён`,c.value?`Ошибка: ${c.value}`:``)}));let d={props:r,emit:i,token:a,tokenId:o,busy:s,error:c,action:l,commands:u,UiButton:q,UiControl:Se,UiHeading:Ee,UiLabel:xl,UiMessage:Te,UiStack:Ed};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),Dz={class:`connection`},Oz=[`href`];function kz(t,n,r,i,a,o){return K(),U(`section`,Dz,[y(i.UiHeading,null,{default:e(()=>[G(`Подключить `+X(r.host),1)]),_:1}),I(`p`,null,X(r.intro??`Установите токен, чтобы открыть ${r.subject}.`),1),c(t.$slots,`hint`,{},void 0,!0),y(i.UiStack,{as:`form`,onSubmit:n[1]||=N(e=>i.commands.run(r.commandId),[`prevent`])},{default:e(()=>[y(i.UiLabel,{for:i.tokenId,size:`sm`},{default:e(()=>[G(`Токен `+X(r.host),1)]),_:1},8,[`for`]),y(i.UiControl,{id:i.tokenId,modelValue:i.token,"onUpdate:modelValue":n[0]||=e=>i.token=e,type:`password`,autocomplete:`off`,placeholder:r.placeholder,disabled:i.busy,required:``},null,8,[`id`,`modelValue`,`placeholder`,`disabled`]),y(i.UiButton,{type:`submit`,"data-command":r.commandId,disabled:i.busy||!i.token.trim()},{default:e(()=>[G(X(i.busy?`Подключаю…`:`Подключить ${r.host}`),1)]),_:1},8,[`data-command`,`disabled`])]),_:1}),i.error?(K(),F(i.UiMessage,{key:0,tone:`danger`,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0),I(`a`,{href:r.tokenUrl,target:`_blank`,rel:`noopener noreferrer`},`Создать токен в `+X(r.host)+` ↗`,9,Oz)])}var Az=H(Ez,[[`render`,kz],[`__scopeId`,`data-v-cd6d8f42`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/integration-api/TokenConnectionForm.vue`]]),jz=W({__name:`AppShell`,props:{currentProject:{type:Object,required:!1}},setup(e,{expose:t}){t();let{openPath:n}=Mu(),r=Rr(),i=Lr(),a=Pf(),o=Je(`project:path`,()=>({surface:`project-path`}));o.scope.registerCommand({id:`ide.project.path.open`,title:`Открыть проект по пути`,description:`Открывает локальную папку, gh:/owner/repository или gl:/<instance>/<group>/<project> в readonly без клонирования.`,arguments:{path:`string: абсолютный путь, gh:/owner/repository или gl:/<instance>/<group>/<project>`},run:async e=>{let{path:t}=J(e);if(typeof t!=`string`)throw Error(`Укажите path`);await i.push(Hu(t))}}),o.scope.registerCommand({id:`ide.github.repository.open`,title:`Открыть репозиторий GitHub`,description:`Открывает репозиторий GitHub в readonly без клонирования; публичный репозиторий не требует входа.`,arguments:{repository:`string: owner/repository или ссылка GitHub`},run:async e=>{let{repository:t}=J(e);if(typeof t!=`string`)throw Error(`Укажите repository`);await i.push(Ru(t))}}),o.scope.registerCommand({id:`ide.gitlab.repository.open`,title:`Открыть проект GitLab`,description:`Открывает проект GitLab в readonly без клонирования: ссылку, gl:/<instance>/<group>/<project> или group/project настроенного инстанса. Публичные проекты gitlab.com доступны без входа.`,arguments:{repository:`string: group/project, <instance>/group/project, gl:/<instance>/group/project или ссылка GitLab`},run:async e=>{let{repository:t}=J(e);if(typeof t!=`string`)throw Error(`Укажите repository`);let n=(await DR()).integrations.find(e=>e.id===`gitlab`);await i.push(qu(t,n?.settings.url))}}),o.scope.registerCommand({id:`ide.project.paths.open`,title:`Открыть папки как проекты`,description:`Создаёт проекты для локальных папок, которых нет в каталоге, и открывает первую из них.`,arguments:{paths:`string[]: абсолютные пути папок`},run:async e=>{let{paths:t}=J(e);if(!Array.isArray(t)||!t.length||t.some(e=>typeof e!=`string`))throw Error(`Укажите paths`);let r=[];for(let e of t)r.push((await n(e)).project);await i.push(Hu(r[0].path))}});let s=B(()=>r.name===`launcher`),c=M(!1),l=M(``),u=0;function d(e){s.value&&fP(e.dataTransfer)&&(u++,c.value=!0)}function f(){u=Math.max(0,u-1),u||(c.value=!1)}async function p(e){if(c.value=!1,u=0,!s.value||!fP(e.dataTransfer))return;let t=pP(e.dataTransfer);if(l.value=``,!t.length)l.value=`Не удалось прочитать путь. Перетащите папку из файлового менеджера.`;else try{await o.scope.executeCommand(`ide.project.paths.open`,{paths:t})}catch(e){l.value=e instanceof Error?e.message:`Не удалось открыть папку`}}let m={openPath:n,route:r,router:i,compact:a,commands:o,dropsProjects:s,dragging:c,dropError:l,get dragDepth(){return u},set dragDepth(e){u=e},dragEnter:d,dragLeave:f,drop:p,navigatePath:e=>o.scope.executeCommand(`ide.project.path.open`,{path:e}),get HubNavigation(){return Ke},get ActivityIsland(){return vE},get ProjectSwitcher(){return gg},get MobileProjectPicker(){return kne}};return Object.defineProperty(m,"__isScriptSetup",{enumerable:!1,value:!0}),m}}),Mz={key:0,class:`drop-hint`},Nz={key:2,id:`header-tools`,class:`header-tools`},Pz={class:`nav`},Fz={key:1,class:`drop-error`,role:`alert`};function Iz(t,n,r,i,a,o){let s=x(`router-link`);return K(),U(`div`,{class:Y([`shell`,{workspace:i.route.name===`project`||i.route.name===`github-project`||i.route.name===`gitlab-project`,settings:i.route.name===`settings`}]),onDragenter:i.dragEnter,onDragover:n[0]||=N(()=>{},[`prevent`]),onDragleave:i.dragLeave,onDrop:N(i.drop,[`prevent`])},[i.dragging?(K(),U(`div`,Mz,`Бросьте папку — откроем проект`)):D(`v-if`,!0),I(`header`,{class:Y([`top`,{"has-project":r.currentProject}])},[r.currentProject?(K(),F(i.MobileProjectPicker,{key:r.currentProject.id,class:`mobile-picker`,project:r.currentProject},null,8,[`project`])):D(`v-if`,!0),r.currentProject?(K(),F(i.ProjectSwitcher,{key:r.currentProject.id,class:`project-switcher`,project:r.currentProject,navigate:i.navigatePath},null,8,[`project`])):D(`v-if`,!0),r.currentProject?(K(),U(`div`,Nz)):(K(),F(s,{key:3,class:`brand`,to:`/`,title:`Открыть поиск`},{default:e(()=>[...n[1]||=[I(`span`,{class:`u-truncate`},`projector`,-1)]]),_:1})),I(`nav`,Pz,[y(i.HubNavigation),r.currentProject?D(`v-if`,!0):(K(),F(s,{key:0,to:`/settings`},{default:e(()=>[...n[2]||=[G(`настройки`,-1)]]),_:1})),!r.currentProject||!i.compact?(K(),F(i.ActivityIsland,{key:1})):D(`v-if`,!0)])],2),i.dropError?(K(),U(`p`,Fz,X(i.dropError),1)):D(`v-if`,!0),I(`main`,null,[c(t.$slots,`default`,{},void 0,!0)])],34)}var Lz=H(jz,[[`render`,Iz],[`__scopeId`,`data-v-bbf2c6b0`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/app/layouts/AppShell.vue`]]),Rz=W({__name:`App`,setup(e,{expose:t}){t();let{error:n}=xp(),{load:r,projects:i}=Mu(),{connect:a}=_d(),o=Rr(),s=Lr(),c=B(()=>typeof o.query.ref==`string`?o.query.ref:``),l=B(()=>{if(o.name===`gitlab-project`)try{let e=Vu(o.params.gitlabPath),t=Yl(e.instance);return{instance:t,path:Ql(e.path,t)}}catch{return}}),u=B(()=>{if(o.name===`project`)return i.value.find(e=>e.path===zu(o.params.projectPath));if(o.name===`github-project`){let e=Bu(o.params.githubPath),t=iu({kind:`github`,repository:e});return{id:t,path:t,name:e.split(`/`).at(-1)||`GitHub`,iconUrl:Eu(`github`,e,c.value)}}if(o.name===`gitlab-project`){let e=l.value;if(!e)return;let t=iu({kind:`gitlab`,...e});return{id:t,path:t,name:e.path.split(`/`).at(-1)||`GitLab`,iconUrl:Eu(`gitlab`,`${e.instance}/${e.path}`,c.value)}}});_(()=>{let e=u.value,t=o.name===`launcher`?`поиск`:o.name===`github-project`?iu({kind:`github`,repository:Bu(o.params.githubPath)}):o.name===`gitlab-project`?l.value?iu({kind:`gitlab`,...l.value}):`проект`:o.name===`settings`?`настройки`:`проект`;document.title=e?`${e.name} — Projector`:`Projector — ${t}`;let n=document.querySelector(`link[rel="icon"]`);n&&(n.removeAttribute(`type`),n.href=e?Tu(e):`/favicon.svg`)});let d;function p(){clearTimeout(d)}function m(){yl&&o.name===`launcher`&&(p(),d=setTimeout(()=>{o.name===`launcher`&&!document.hasFocus()&&fetch(`/api/app/hide`,{method:`POST`}).catch(()=>void 0)},100))}function h(){yl&&o.name!==`launcher`&&s.push(`/`)}f(()=>{a(),r(),window.addEventListener(`projector:show`,h),window.addEventListener(`blur`,m),window.addEventListener(`focus`,p)}),v(()=>{p(),window.removeEventListener(`projector:show`,h),window.removeEventListener(`blur`,m),window.removeEventListener(`focus`,p)});let g={commandError:n,load:r,projects:i,connect:a,route:o,router:s,iconRef:c,gitlabProject:l,currentProject:u,get blurTimer(){return d},set blurTimer(e){d=e},cancelHide:p,windowBlur:m,showLauncher:h,get CommandPalette(){return Ym},UiMessage:Te,UiNoticeHost:ore,AppShell:Lz};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}});function zz(t,n,r,i,a,o){let s=x(`router-view`);return K(),U(P,null,[y(i.CommandPalette),y(i.UiNoticeHost),i.commandError?(K(),F(i.UiMessage,{key:0,as:`div`,tone:`danger`,size:`xs`,class:`command-error`,role:`alert`},{default:e(()=>[G(X(i.commandError),1),I(`button`,{"aria-label":`Закрыть сообщение`,onClick:n[0]||=e=>i.commandError=``},`×`)]),_:1})):D(`v-if`,!0),i.route.name===`launcher`?(K(),F(s,{key:1})):(K(),F(i.AppShell,{key:2,"current-project":i.currentProject},{default:e(()=>[y(s)]),_:1},8,[`current-project`]))],64)}var Bz=H(Rz,[[`render`,zz],[`__scopeId`,`data-v-bcba93d7`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/app/App.vue`]]),Vz=W({__name:`UiResizeHandle`,props:{orientation:{type:String,required:!1},appearance:{type:String,required:!1},dragging:{type:Boolean,required:!1},labelled:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Hz=[`aria-orientation`];function Uz(e,t,n,r,i,a){return K(),U(`div`,{class:Y([`ui-resize-handle`,[n.orientation??`horizontal`,n.appearance??`bar`,{dragging:n.dragging,labelled:n.labelled}]]),role:`separator`,"aria-orientation":n.orientation??`horizontal`,tabindex:`0`},[c(e.$slots,`default`,{},void 0,!0)],10,Hz)}var Wz=H(Vz,[[`render`,Uz],[`__scopeId`,`data-v-2323aea9`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiResizeHandle.vue`]]),Gz=ee(),Kz=.35,qz=e=>JSON.parse(JSON.stringify(e)),Jz=e=>!!e&&e!==`center`;function Yz(e,t){return{type:`group`,id:e,panels:[],active:``,keepEmpty:!0,...t?{role:t}:{}}}function Xz(){return{root:{type:`split`,id:`s1`,direction:`row`,children:[Yz(`g1`,`editor`),Yz(`g2`,`terminal`)],sizes:[.65,.35]},focused:`g1`}}function Zz(e){let t=[],n=e=>e.type===`group`?t.push(e):e.children.forEach(n);return n(e.root),t}var Qz=(e,t)=>Zz(e).find(e=>e.id===t),$z=(e,t)=>Zz(e).find(e=>e.panels.includes(t)),eB=e=>Zz(e).flatMap(e=>e.panels);function tB(e){return e.type===`group`?!e.hidden:e.children.some(tB)}function nB(e,t){if(e.id===t)return{node:e,index:-1};if(e.type===`split`)for(let[n,r]of e.children.entries()){if(r.id===t)return{node:r,parent:e,index:n};let i=nB(r,t);if(i)return i}}function rB(e){let t=0,n=e=>{let r=/^[gs](\d+)$/.exec(e.id);r&&(t=Math.max(t,Number(r[1]))),e.type===`split`&&e.children.forEach(n)};return n(e.root),e=>`${e}${++t}`}function iB(e){let t=e.map(e=>Number.isFinite(e)&&e>0?e:0),n=t.reduce((e,t)=>e+t,0);return n>0?t.map(e=>e/n):t.map(()=>1/t.length)}function aB(e){if(e.type===`group`)return!e.panels.length&&!e.keepEmpty?void 0:(e.panels.includes(e.active)||(e.active=e.panels[0]??``),e);let t=[],n=[],r=iB(e.sizes.length===e.children.length?e.sizes:[]);for(let[i,a]of e.children.entries()){let o=aB(a);if(!o)continue;let s=r[i]??1/e.children.length;if(o.type===`split`&&o.direction===e.direction){let e=iB(o.sizes);o.children.forEach((r,i)=>{t.push(r),n.push(s*e[i])})}else t.push(o),n.push(s)}if(t.length)return t.length===1?t[0]:(e.children=t,e.sizes=iB(n),e)}function oB(e,t){let n=new Map,r=Zz(e);for(let e of r){if(!e.role)continue;let t=n.get(e.role);(!t||!t.panels.length&&e.panels.length)&&n.set(e.role,e)}for(let e of r)e.role&&!e.panels.length&&n.get(e.role)!==e&&(e.keepEmpty&&(n.get(e.role).keepEmpty=!0),delete e.keepEmpty);e.root=aB(e.root)??Yz(`g1`);let i=Zz(e);t&&i.some(e=>e.id===t)&&(e.focused=t);let a=i.find(t=>t.id===e.focused);return(!a||a.hidden&&i.some(e=>!e.hidden))&&(e.focused=(i.find(e=>!e.hidden)??i[0]).id),e.maximized&&!i.some(t=>t.id===e.maximized&&!t.hidden)&&delete e.maximized,e}function sB(e,t){return JSON.stringify(e)===JSON.stringify(t)?e:t}function cB(e,t){if(e.active===t)return;let n=(e.history??[]).filter(n=>n!==t&&n!==e.active);e.active&&e.panels.includes(e.active)&&n.push(e.active),e.history=n.slice(-50),e.active=t}function lB(e,t){let n=$z(e,t);if(!n)return;let r=n.panels.indexOf(t);n.panels.splice(r,1);let i=(n.history??[]).filter(e=>e!==t&&n.panels.includes(e)),a=n.active===t?i.pop():void 0;return i.length?n.history=i:delete n.history,n.active===t&&(n.active=a??n.panels[Math.min(r,n.panels.length-1)]??``),n}function uB(e,t,n,r,i,a){let o=r===`left`||r===`right`?`row`:`column`,s=r===`left`||r===`top`,c=nB(e.root,t.id);if(c?.parent&&c.parent.direction===o){let{parent:e,index:t}=c,r=e.sizes[t];e.sizes[t]=r*(1-a);let i=t+ +!s;e.children.splice(i,0,n),e.sizes.splice(i,0,r*a);return}let l={type:`split`,id:i(`s`),direction:o,children:s?[n,t]:[t,n],sizes:s?[a,1-a]:[1-a,a]};c?.parent?c.parent.children[c.index]=l:e.root=l}function dB(e,t,n){return{type:`group`,id:e,panels:[t],active:t,...n?.role?{role:n.role}:{},...n?.keepEmpty?{keepEmpty:!0}:{}}}function fB(e,t,n,r){let i=rB(e),a=Zz(e),o=a.find(e=>e.id===n.groupId)??a.find(t=>t.id===e.focused)??a[0];if(Jz(n.zone)){let s=dB(i(`g`),t,n.groupId?o:void 0),c=n.groupId&&a.some(e=>e.id===n.groupId)?o:e.root;return uB(e,c,s,n.zone,i,c===e.root?Kz:.5),r&&(e.focused=s.id),s}let s=Math.max(0,Math.min(n.index??o.panels.length,o.panels.length));return o.panels.splice(s,0,t),(r||!o.active)&&cB(o,t),r&&(delete o.hidden,e.focused=o.id),o}function pB(e,t){let n=qz(e),r=$z(n,t);return r?(cB(r,t),delete r.hidden,n.focused=r.id,n.maximized&&n.maximized!==r.id&&delete n.maximized,sB(e,oB(n))):e}function mB(e,t){let n=qz(e),r=Qz(n,t);return!r||r.hidden?e:(n.focused=t,sB(e,n))}function hB(e,t,n={},r=!0){if($z(e,t))return r?pB(e,t):e;let i=qz(e),a=fB(i,t,n,r);return sB(e,oB(i,r?a.id:void 0))}function gB(e,t,n){let r=$z(e,t),i=n.groupId?Qz(e,n.groupId):void 0;if(!r||!i&&!Jz(n.zone)||Jz(n.zone)&&i===r&&r.panels.length===1)return e;let a=qz(e),o=$z(a,t),s=i?Qz(a,i.id):void 0;if(Jz(n.zone)){let r=rB(a);lB(a,t);let i=dB(r(`g`),t,o),c=s??a.root;return uB(a,c,i,n.zone,r,c===a.root?Kz:.5),sB(e,oB(a,i.id))}if(o===s){let r=o.panels.indexOf(t),i=n.index??o.panels.length;return o.panels.splice(r,1),o.panels.splice(Math.max(0,Math.min(i>r?i-1:i,o.panels.length)),0,t),cB(o,t),sB(e,oB(a,o.id))}return lB(a,t),sB(e,oB(a,fB(a,t,{groupId:s.id,zone:`center`,index:n.index},!0).id))}function _B(e,t,n){let r=qz(e),i=Qz(r,t);return!i||n.length!==i.panels.length||new Set(n).size!==n.length||n.some(e=>!i.panels.includes(e))?e:(i.panels=n,sB(e,r))}function vB(e,t,n){let r=qz(e),i=$z(r,t);return!i||$z(r,n)?e:(i.panels[i.panels.indexOf(t)]=n,i.active===t&&(i.active=n),i.history&&=i.history.map(e=>e===t?n:e).filter((e,t,n)=>n.indexOf(e)===t),sB(e,r))}function yB(e,t,n){let r=qz(e),i=Qz(r,t);return i?(i.hidden=n||void 0,sB(e,oB(r,n?void 0:t))):e}function bB(e,t){let n=qz(e),r=Qz(n,t);return!r||r.hidden?e:(n.maximized===t?delete n.maximized:n.maximized=t,n.focused=t,sB(e,n))}function xB(e,t,n){let r=qz(e),i=nB(r.root,t);return i?.node.type!==`split`||n.length!==i.node.children.length?e:(i.node.sizes=iB(n),sB(e,r))}function SB(e,t){let n=qz(e);for(let e of Zz(n))!e.role&&e.panels.length&&t.role&&(e.role=t.role(e.active||e.panels[0]));for(let e of eB(n))t.exists(e)===!1&&lB(n,e);for(let e of t.ids)$z(n,e)||fB(n,e,t.place?.(e,n)??{},!1);return sB(e,oB(n))}function CB(e){let t=qz(e);return delete t.maximized,t}var wB=e=>!!e&&typeof e==`object`&&!Array.isArray(e);function TB(e,t,n,r){if(t>8||!wB(e)||typeof e.id!=`string`||!e.id||e.id.length>32||n.has(e.id))return;if(n.add(e.id),e.type===`group`){if(!Array.isArray(e.panels)||e.panels.length>500)return;let t=[];for(let n of e.panels)typeof n!=`string`||!n||n.length>1024||r.has(n)||(r.add(n),t.push(n));return{type:`group`,id:e.id,panels:t,active:typeof e.active==`string`&&t.includes(e.active)?e.active:t[0]??``,...typeof e.role==`string`&&e.role.length<=20?{role:e.role}:{},...e.hidden===!0?{hidden:!0}:{},...e.keepEmpty===!0?{keepEmpty:!0}:{}}}if(e.type!==`split`||e.direction!==`row`&&e.direction!==`column`||!Array.isArray(e.children)||e.children.length>16)return;let i=[],a=[];for(let[o,s]of e.children.entries()){let c=TB(s,t+1,n,r);if(!c)continue;i.push(c);let l=Array.isArray(e.sizes)?e.sizes[o]:void 0;a.push(typeof l==`number`&&Number.isFinite(l)&&l>0?l:1)}if(i.length)return{type:`split`,id:e.id,direction:e.direction,children:i,sizes:iB(a)}}function EB(e){if(!wB(e))return;let t=TB(e.root,0,new Set,new Set);if(t)return oB({root:t,focused:typeof e.focused==`string`?e.focused:``})}var DB=Symbol(`dock`),OB=new WeakMap;function kB(e,t){let n=e.body.style,r=e=>({value:n.getPropertyValue(e),priority:n.getPropertyPriority(e)}),i=OB.get(e)??{cursor:r(`cursor`),selection:r(`user-select`),leases:[]},a={cursor:t};return i.leases.push(a),OB.set(e,i),n.setProperty(`cursor`,t),n.setProperty(`user-select`,`none`),()=>{i.leases.splice(i.leases.indexOf(a),1);let t=i.leases.at(-1);t?n.setProperty(`cursor`,t.cursor):(n.setProperty(`cursor`,i.cursor.value,i.cursor.priority),n.setProperty(`user-select`,i.selection.value,i.selection.priority),OB.delete(e))}}function AB(e){let t=M(!1),n;function r(r=`stop`,c){let l=n;if(!l)return;n=void 0,t.value=!1;let u=l.target;u.removeEventListener(`pointermove`,i),u.removeEventListener(`pointerup`,a),u.removeEventListener(`pointercancel`,o),u.removeEventListener(`lostpointercapture`,s),l.unlock?.(),u.hasPointerCapture(l.id)&&u.releasePointerCapture(l.id),e.finish?.(r,l.state,c)}let i=t=>{n?.id===t.pointerId&&e.move(t,n.state)},a=e=>{n?.id===e.pointerId&&r(`up`,e)},o=e=>{n?.id===e.pointerId&&r(`cancel`,e)},s=e=>{n?.id===e.pointerId&&r(`lostcapture`,e)};function c(r){if(r.button!==0||n)return;let c=e.start(r);if(c===void 0)return;let l=r.currentTarget;r.preventDefault(),l.focus(),l.setPointerCapture(r.pointerId),n={id:r.pointerId,target:l,state:c},e.cursor&&(n.unlock=kB(l.ownerDocument,e.cursor())),t.value=!0,l.addEventListener(`pointermove`,i),l.addEventListener(`pointerup`,a),l.addEventListener(`pointercancel`,o),l.addEventListener(`lostpointercapture`,s)}return k(()=>r(`dispose`)),{dragging:_e(t),start:c,stop:r}}var jB=(e,t)=>`${e}.${t}`;function MB({props:e,commands:t,contextId:n,strip:r,menu:i,startRename:a}){let o=t=>jB(e.commandNamespace,t);function s(t){let r=J(t);if(r.id!==void 0&&typeof r.id!=`string`)throw Error(`id должен быть строкой`);return e.tabs.find(t=>t.id===(r.id??(n.value||e.activeId)))}let c=(n,r,i,a=()=>!0)=>t.scope.registerCommand({id:o(n),palette:n!==`reorder`,title:r,run:i,enabled:t=>!e.disabled&&a(t)}),l=e=>!!s(e);c(`select`,`Открыть вкладку`,t=>e.commandHandlers.select(s(t).id),l),c(`close`,`Закрыть`,t=>e.commandHandlers.close(s(t).id),l),c(`closeOthers`,`Закрыть остальные`,t=>e.commandHandlers.closeMany(e.tabs.filter(e=>e.id!==s(t).id).map(e=>e.id)),t=>l(t)&&e.tabs.length>1),c(`closeLeft`,`Закрыть слева`,t=>e.commandHandlers.closeMany(e.tabs.slice(0,e.tabs.indexOf(s(t))).map(e=>e.id)),t=>l(t)&&e.tabs.indexOf(s(t))>0),c(`closeRight`,`Закрыть справа`,t=>e.commandHandlers.closeMany(e.tabs.slice(e.tabs.indexOf(s(t))+1).map(e=>e.id)),t=>l(t)&&e.tabs.indexOf(s(t))<e.tabs.length-1),c(`closeAll`,`Закрыть все`,()=>e.commandHandlers.closeMany(e.tabs.map(e=>e.id)),()=>!!e.tabs.length),c(`closeSaved`,`Закрыть сохранённые`,()=>e.commandHandlers.closeMany(e.tabs.filter(e=>!e.dirty&&!e.saving).map(e=>e.id)),()=>!!e.closeSaved&&e.tabs.some(e=>!e.dirty&&!e.saving)),c(`rename`,`Переименовать…`,t=>{let n=J(t),r=s(t);if(n.label===void 0)return a(r);if(typeof n.label!=`string`||!n.label.trim())throw Error(`Укажите label вкладки`);return e.commandHandlers.rename?.(r.id,n.label.trim())},t=>l(t)&&!!(e.renameable||s(t)?.renameable)),c(`pin`,`Закрепить вкладку`,t=>e.commandHandlers.pin?.(s(t).id),e=>l(e)&&!!s(e)?.preview),c(`reorder`,`Переставить вкладки`,t=>{let{ids:n}=J(t);if(!Array.isArray(n)||n.length!==e.tabs.length||new Set(n).size!==n.length||n.some(t=>typeof t!=`string`||!e.tabs.some(e=>e.id===t)))throw Error(`Укажите все id вкладок без повторений`);return e.commandHandlers.reorder(n)});for(let t of[`next`,`previous`,`first`,`last`])c(t,`Перейти к вкладке`,n=>{let i=e.tabs.indexOf(s(n)),a=t===`first`?0:t===`last`?e.tabs.length-1:(i+(t===`next`?1:e.tabs.length-1))%e.tabs.length,o=e.tabs[a],c=e.commandHandlers.select(o.id);return r.value?.querySelectorAll(`[role="tab"]`)[a]?.focus(),c},l);return c(`contextMenu`,`Открыть меню вкладки`,t=>{let a=s(t);n.value=a.id;let o=e.tabs.indexOf(a),c=r.value?.querySelectorAll(`[role="tab"]`)[o];if(c)return i.value?.openForElement(c)},l),{findTab:s}}var NB=W({__name:`DockTabs`,props:{tabs:{type:Array,required:!0},activeId:{type:String,required:!0},label:{type:String,required:!0},disabled:{type:Boolean,required:!1},group:{type:String,required:!1},dim:{type:Boolean,required:!1},actions:{type:Function,required:!1},closeSaved:{type:Boolean,required:!1},commandNamespace:{type:String,required:!0},projectId:{type:String,required:!0},commandHandlers:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r=M(),i=M(``);function a(e,t){i.value=t.id,o.scope.activate(),r.value?.open(e)}let o=Je(`tabs:${V()}`,()=>({surface:`tabs`,namespace:n.commandNamespace,activeTab:n.activeId,tabs:JSON.stringify(n.tabs.map(({id:e,label:t})=>({id:e,label:t}))),projectId:n.projectId,busy:!!n.disabled})),s=e=>jB(n.commandNamespace,e),c=M(),{findTab:l}=MB({props:n,commands:o,contextId:i,strip:c,menu:r,startRename:v}),u=B(()=>{let e=l();if(!e)return[];let t=(t,n={})=>o.item(s(t),{id:e.id},n),r=[`close`,`closeOthers`,`closeLeft`,`closeRight`,`closeAll`].map(e=>t(e));return n.closeSaved&&r.push(t(`closeSaved`)),e.renameable&&r.push(t(`rename`,{separator:!0})),r.push(...n.actions?.(e.id)??[]),r.map(e=>({...e,disabled:n.disabled||e.disabled}))});E(()=>n.disabled,e=>{e&&r.value?.close(!1)});let d=M(``),f=M(``),m=M(``),h=B(()=>n.group??``),g=M(``),_=M(!1);async function v(e){if(!e.renameable||n.disabled)return;d.value=e.id,f.value=e.label,await p();let t=c.value?.querySelector(`input`);t?.focus(),t?.select()}function y(e){let t=d.value;d.value=``;let r=f.value.trim();t&&e&&r&&r!==n.tabs.find(e=>e.id===t)?.label&&o.run(s(`rename`),{id:t,label:r})}function b(e,t){e.button===1&&(e.preventDefault(),n.disabled||o.run(s(`close`),{id:t}))}function x(e,t){d.value||n.disabled||!e.dataTransfer?e.preventDefault():(m.value=t,Gz.value={id:t,group:h.value},e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`application/x-projector-tab`,t),e.dataTransfer.setData(`text/plain`,n.tabs.find(e=>e.id===t)?.label??t))}function S(){let e=Gz.value;return!e||n.disabled?!1:e.group===h.value||!!n.commandHandlers.move}function C(e,t){if(!S())return;e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`);let r=e.currentTarget.getBoundingClientRect();g.value=t??n.tabs.at(-1)?.id??``,_.value=t===void 0||e.clientX>r.left+r.width/2;let i=c.value,a=i.getBoundingClientRect();e.clientX<a.left+32?i.scrollLeft-=24:e.clientX>a.right-32&&(i.scrollLeft+=24)}function w(){m.value&&Gz.value?.id===m.value&&(Gz.value=void 0),m.value=``,g.value=``}function T(e,t){let r=Gz.value;if(!r||!S())return;e.preventDefault();let i=t??n.tabs.at(-1)?.id,a=t===void 0||_.value?1:0;if(r.group===h.value){if(i&&i!==r.id){let e=n.tabs.map(e=>e.id).filter(e=>e!==r.id);e.splice(e.indexOf(i)+a,0,r.id),o.run(s(`reorder`),{ids:e})}}else{let e=i?n.tabs.findIndex(e=>e.id===i)+a:0;n.commandHandlers.move(r.id,e)}g.value=``,m.value=``,Gz.value=void 0}function D(e,t){i.value=t,o.keydown(e)}function O(e){i.value=e,o.scope.activate()}function k(e){e.preview?o.run(s(`pin`),{id:e.id}):e.renameable&&o.run(s(`rename`),{id:e.id})}E(()=>n.activeId,async()=>{await p(),c.value?.querySelector(`[aria-selected="true"]`)?.scrollIntoView({block:`nearest`,inline:`nearest`})}),E(()=>n.tabs,()=>{n.tabs.some(e=>e.id===i.value)||r.value?.close(!1),n.tabs.some(e=>e.id===d.value)||(d.value=``),m.value&&!n.tabs.some(e=>e.id===m.value)&&w()});let A={props:n,menu:r,contextId:i,showContext:a,commands:o,commandId:s,strip:c,findTab:l,menuItems:u,editing:d,draft:f,dragging:m,groupId:h,target:g,after:_,startRename:v,finishRename:y,middleClick:b,dragStart:x,accepts:S,dragOver:C,endDrag:w,drop:T,navigate:D,activateTab:O,dblclickTab:k,UiControl:Se,ContextMenu:ih,get IconClose(){return Cn}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}}),PB=[`aria-label`],FB=[`draggable`,`onContextmenu`,`onDragstart`,`onDragover`,`onDrop`,`onAuxclick`],IB=[`aria-selected`,`tabindex`,`title`,`onFocus`,`onClick`,`onDblclick`,`onKeydown`],LB={class:`u-truncate`},RB=[`disabled`,`title`,`aria-label`,`onClick`],zB=[`aria-label`];function BB(e,t,n,r,i,a){return K(),U(P,null,[I(`div`,{ref:`strip`,class:Y([`workspace-tabs`,{dim:n.dim}]),role:`tablist`,"aria-label":n.label,onDragover:t[9]||=N(e=>r.dragOver(e),[`self`,`stop`]),onDrop:t[10]||=N(e=>r.drop(e),[`self`,`stop`]),onDragleave:t[11]||=e=>!r.strip?.contains(e.relatedTarget)&&(r.target=``)},[(K(!0),U(P,null,S(n.tabs,i=>(K(),U(`div`,{key:i.id,class:Y([`workspace-tab`,{selected:i.id===n.activeId,dirty:i.dirty,saving:i.saving,error:i.error,preview:i.preview,dragging:i.id===r.dragging,"drop-before":i.id===r.target&&!r.after&&i.id!==r.dragging,"drop-after":i.id===r.target&&r.after&&i.id!==r.dragging}]),draggable:!n.disabled&&r.editing!==i.id,onContextmenu:N(e=>r.showContext(e,i),[`stop`]),onDragstart:N(e=>r.dragStart(e,i.id),[`stop`]),onDragover:N(e=>r.dragOver(e,i.id),[`stop`]),onDrop:N(e=>r.drop(e,i.id),[`stop`]),onDragend:r.endDrag,onMousedown:t[8]||=e=>e.button===1&&e.preventDefault(),onAuxclick:e=>r.middleClick(e,i.id)},[r.editing===i.id?(K(),F(r.UiControl,{key:0,modelValue:r.draft,"onUpdate:modelValue":t[0]||=e=>r.draft=e,class:`tab-rename`,maxlength:`80`,"aria-label":`Название вкладки`,onKeydown:[t[1]||=ye(N(e=>r.finishRename(!0),[`prevent`]),[`enter`]),t[2]||=ye(N(e=>r.finishRename(!1),[`prevent`,`stop`]),[`esc`])],onBlur:t[3]||=e=>r.finishRename(!0),onMousedown:t[4]||=N(()=>{},[`stop`]),onClick:t[5]||=N(()=>{},[`stop`]),onDblclick:t[6]||=N(()=>{},[`stop`])},null,8,[`modelValue`])):(K(),U(`button`,{key:1,class:`tab-label`,role:`tab`,"aria-selected":i.id===n.activeId,tabindex:i.id===n.activeId?0:-1,title:i.title??i.label,onFocus:e=>r.activateTab(i.id),onClick:e=>r.commands.run(r.commandId(`select`),{id:i.id}),onDblclick:e=>r.dblclickTab(i),onKeydown:e=>r.navigate(e,i.id)},[c(e.$slots,`icon`,{tab:i},void 0,!0),I(`span`,LB,X(i.label),1)],40,IB)),I(`button`,{class:`tab-close`,disabled:n.disabled,title:`Закрыть ${i.label}`,"aria-label":`Закрыть ${i.label}`,onClick:N(e=>r.commands.run(r.commandId(`close`),{id:i.id}),[`stop`]),onDblclick:t[7]||=N(()=>{},[`stop`])},[i.dirty||i.saving?(K(),U(`span`,{key:0,class:Y([`tab-state`,{spinning:i.saving}]),role:`status`,"aria-label":i.saving?`Сохраняется`:i.error?`Не удалось сохранить`:`Не сохранено`},null,10,zB)):D(`v-if`,!0),y(r.IconClose,{class:Y([`close-icon`,{"has-state":i.dirty||i.saving}]),"aria-hidden":`true`},null,8,[`class`])],40,RB)],42,FB))),128))],42,PB),y(r.ContextMenu,{ref:`menu`,items:r.menuItems,label:`Действия: ${n.label}`},null,8,[`items`,`label`])],64)}var VB=H(NB,[[`render`,BB],[`__scopeId`,`data-v-708a2531`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/dock/ui/DockTabs.vue`]]),HB=W({props:{render:{type:Function,required:!0},args:{type:Object,required:!0}},setup:e=>()=>e.render(e.args)}),UB={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function WB(e,t){return K(),U(`svg`,UB,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M15 3h6v6m0-6l-7 7M3 21l7-7m-1 7H3v-6`},null,-1)]])}var GB=L({name:`lucide-maximize-2`,render:WB}),KB={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function qB(e,t){return K(),U(`svg`,KB,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m14 10l7-7m-1 7h-6V4M3 21l7-7m-6 0h6v6`},null,-1)]])}var JB=L({name:`lucide-minimize-2`,render:qB}),YB=W({__name:`DockGroupView`,props:{group:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r=z(DB),i=M(),a=M(``),o=B(()=>r.layout().focused===n.group.id),s=B(()=>r.layout().maximized===n.group.id),c=B(()=>n.group.panels.map(e=>r.describe(e)));function l(e){let t=i.value.getBoundingClientRect(),n=(e.clientX-t.left)/t.width,r=(e.clientY-t.top)/t.height,a=[[`left`,n],[`right`,1-n],[`top`,r],[`bottom`,1-r]].reduce((e,t)=>t[1]<e[1]?t:e);return a[1]<.25?a[0]:`center`}function u(e){let t=Gz.value;return!t||t.group!==n.group.id||e!==`center`&&n.group.panels.length>1}function d(e){if(!Gz.value)return;e.preventDefault(),e.stopPropagation(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`);let t=l(e);a.value=u(t)?t:``}function f(e){let t=Gz.value;if(!t)return;e.preventDefault(),e.stopPropagation();let i=l(e);a.value=``,Gz.value=void 0,u(i)&&r.update(gB(r.layout(),t.id,{groupId:n.group.id,zone:i}))}function p(e){Gz.value&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`))}function m(e){let t=Gz.value;t&&(e.preventDefault(),e.stopPropagation(),Gz.value=void 0,r.update(gB(r.layout(),t.id,{groupId:n.group.id,zone:`center`})))}function h(e){!Gz.value&&r.acceptsDrop?.(e.dataTransfer)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`),a.value=l(e))}function g(e){if(Gz.value||!r.acceptsDrop?.(e.dataTransfer))return;e.preventDefault();let t={groupId:n.group.id,zone:l(e)};a.value=``,r.drop(e,t)}let _=()=>a.value=``;E(()=>Gz.value,e=>!e&&_()),yf(window,`dragend`,_),yf(window,`drop`,_,!0);function v(e){i.value?.contains(e.relatedTarget)||(a.value=``)}let y={props:n,dock:r,body:i,zone:a,focused:o,maximized:s,tabs:c,zoneAt:l,allowed:u,tabOver:d,tabDrop:f,stripOver:p,stripDrop:m,externalOver:h,externalDrop:g,clearZone:_,leave:v,handlers:{select:e=>r.select(e),close:e=>r.close(e),closeMany:e=>r.closeMany(e),reorder:e=>r.update(_B(r.layout(),n.group.id,e)),rename:(e,t)=>r.rename(e,t),pin:e=>r.pin(e),move:(e,t)=>r.update(gB(r.layout(),e,{groupId:n.group.id,zone:`center`,index:t}))},focus:()=>{o.value||r.update(mB(r.layout(),n.group.id))},UiPanel:sn,DockTabs:VB,get DockSlot(){return HB},UiButton:q,get IconMaximize(){return GB},get IconMinimize(){return JB},get toggleMaximized(){return bB}};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}}),XB={class:`dock-actions`},ZB=[`data-panel`],QB={key:0,class:`dock-empty`};function $B(t,n,r,i,a,o){return K(),F(i.UiPanel,{as:`section`,sizing:`flex`,class:Y([`dock-group`,{focused:i.focused,maximized:i.maximized}]),"data-group":r.group.id,onPointerdownCapture:i.focus,onFocusin:i.focus},{default:e(()=>[I(`header`,{class:`dock-header`,onDragenterCapture:i.clearZone,onDragoverCapture:i.clearZone},[i.dock.slots.leading?(K(),F(i.DockSlot,{key:0,render:i.dock.slots.leading,args:{group:r.group}},null,8,[`render`,`args`])):D(`v-if`,!0),r.group.panels.length?(K(),F(i.DockTabs,{key:1,tabs:i.tabs,"active-id":r.group.active,label:`Вкладки блока`,group:r.group.id,dim:!i.focused,"command-namespace":i.dock.commandNamespace,"project-id":i.dock.projectId,"command-handlers":i.handlers,actions:i.dock.tabActions,"close-saved":``},{icon:e(({tab:e})=>[i.dock.slots.icon?(K(),F(i.DockSlot,{key:0,render:i.dock.slots.icon,args:{tab:e}},null,8,[`render`,`args`])):D(`v-if`,!0)]),_:1},8,[`tabs`,`active-id`,`group`,`dim`,`command-namespace`,`project-id`,`actions`])):(K(),U(`div`,{key:2,class:`dock-fill`,onDragover:i.stripOver,onDrop:i.stripDrop},null,32)),I(`div`,XB,[i.dock.slots.actions?(K(),F(i.DockSlot,{key:0,render:i.dock.slots.actions,args:{group:r.group,activeId:r.group.active}},null,8,[`render`,`args`])):D(`v-if`,!0),y(i.UiButton,{shape:`icon`,size:`sm`,active:i.maximized,title:i.maximized?`Вернуть размер блока`:`Развернуть блок`,"aria-label":i.maximized?`Вернуть размер блока`:`Развернуть блок`,"aria-pressed":i.maximized,onClick:n[0]||=e=>i.dock.update(i.toggleMaximized(i.dock.layout(),r.group.id))},{default:e(()=>[i.maximized?(K(),F(i.IconMinimize,{key:0,"aria-hidden":`true`})):(K(),F(i.IconMaximize,{key:1,"aria-hidden":`true`}))]),_:1},8,[`active`,`title`,`aria-label`,`aria-pressed`])])],32),I(`div`,{ref:`body`,class:`dock-body`,onDragenterCapture:i.tabOver,onDragoverCapture:i.tabOver,onDropCapture:i.tabDrop,onDragenter:i.externalOver,onDragover:i.externalOver,onDrop:i.externalDrop,onDragleave:i.leave},[(K(!0),U(P,null,S(r.group.panels,e=>(K(),U(P,{key:e},[e===r.group.active?(K(),U(`div`,{key:0,class:`dock-panel`,"data-panel":e},[i.dock.slots.panel?(K(),F(i.DockSlot,{key:0,render:i.dock.slots.panel,args:{id:e,group:r.group.id,focused:i.focused}},null,8,[`render`,`args`])):D(`v-if`,!0)],8,ZB)):D(`v-if`,!0)],64))),128)),r.group.panels.length?D(`v-if`,!0):(K(),U(`div`,QB,[i.dock.slots.empty?(K(),F(i.DockSlot,{key:0,render:i.dock.slots.empty,args:{group:r.group}},null,8,[`render`,`args`])):D(`v-if`,!0)])),i.zone?(K(),U(`div`,{key:1,class:Y([`dock-drop`,i.zone]),"aria-hidden":`true`},null,2)):D(`v-if`,!0)],544)]),_:1},8,[`class`,`data-group`])}var eV=H(YB,[[`render`,$B],[`__scopeId`,`data-v-a4a389fa`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/dock/ui/DockGroupView.vue`]]),tV=W({name:`DockTree`,__name:`DockTree`,props:{node:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r=z(DB),i=M(),a=B(()=>n.node.type===`split`?n.node:void 0),o=B(()=>a.value?.children.filter(tB)??[]),s=B(()=>a.value?.direction===`row`),c=B(()=>s.value?140:100),l=e=>a.value.sizes[a.value.children.indexOf(e)]??1/a.value.children.length,u=B(()=>o.value.reduce((e,t)=>e+l(t),0));function d(e,t,n){let i=a.value,s=o.value[e-1],l=o.value[e],u=t[0]+t[1],d=Math.max(c.value,Math.min(t[0]+n,u-c.value)),f=[...i.sizes],p=i.children.indexOf(s),m=i.children.indexOf(l),h=f[p]+f[m];f[p]=h*d/u,f[m]=h-f[p],r.update(xB(r.layout(),i.id,f))}function f(e){let t=i.value.querySelectorAll(`:scope > .dock-cell`),n=s.value?`width`:`height`;return[t[e-1].getBoundingClientRect()[n],t[e].getBoundingClientRect()[n]]}let p=0,m=AB({start:e=>({index:p,origin:s.value?e.clientX:e.clientY,start:f(p)}),move:(e,t)=>d(t.index,t.start,(s.value?e.clientX:e.clientY)-t.origin),cursor:()=>s.value?`col-resize`:`row-resize`});function h(e,t){p=t,m.start(e)}function g(e,t){let n=(s.value?[`ArrowLeft`,`ArrowRight`]:[`ArrowUp`,`ArrowDown`]).indexOf(e.key);n!==-1&&(e.preventDefault(),d(t,f(t),(n?1:-1)*24))}let _={props:n,dock:r,element:i,split:a,visibleChildren:o,row:s,minimum:c,sizeOf:l,visibleShare:u,moveSash:d,cellSizes:f,get sashIndex(){return p},set sashIndex(e){p=e},drag:m,sashDown:h,sashKey:g,UiResizeHandle:Wz,DockGroupView:eV};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}});function nV(e,t,n,r,i,a){let o=x(`DockTree`,!0);return n.node.type===`group`?(K(),F(r.DockGroupView,{key:0,group:n.node},null,8,[`group`])):(K(),U(`div`,{key:1,ref:`element`,class:Y([`dock-split`,r.split.direction])},[(K(!0),U(P,null,S(r.visibleChildren,(e,t)=>(K(),U(P,{key:e.id},[t?(K(),F(r.UiResizeHandle,{key:0,appearance:`gap`,class:Y([`dock-sash`,r.split.direction]),orientation:r.row?`vertical`:`horizontal`,"aria-label":r.row?`Ширина блока`:`Высота блока`,tabindex:`0`,onPointerdown:e=>r.sashDown(e,t),onKeydown:e=>r.sashKey(e,t)},null,8,[`class`,`orientation`,`aria-label`,`onPointerdown`,`onKeydown`])):D(`v-if`,!0),I(`div`,{class:`dock-cell`,style:Qe({flex:`${r.sizeOf(e)/r.visibleShare} 1 0`})},[y(o,{node:e},null,8,[`node`])],4)],64))),128))],2))}var rV=H(tV,[[`render`,nV],[`__scopeId`,`data-v-ecdab786`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/dock/ui/DockTree.vue`]]);function iV(e,t,n,r={editor:[],terminal:[]}){let i=Zz(e),a=i.flatMap(e=>e.panels),o=i.find(t=>t.id===e.focused)?.active;return[`editor`,`terminal`].map(e=>{let i=a.filter(n=>t(n)===(e===`terminal`)),s=[...r[e].filter(e=>i.includes(e)),...i.filter(t=>!r[e].includes(t))];return{side:e,ids:s,active:o&&s.includes(o)?o:s.includes(n[e])?n[e]:s[0]??``}})}var aV=W({__name:`MobileDock`,props:{surface:{type:String,required:!0},terminalPanel:{type:Function,required:!0}},setup(e,{expose:t}){t();let n=e,r=z(DB),i=B(()=>n.surface===`terminal`),a=M(n.surface===`terminal`);E(()=>n.surface,()=>{a.value=!1});let o=M({editor:``,terminal:``}),s=M({editor:[],terminal:[]}),c=B(()=>iV(r.layout(),n.terminalPanel,o.value,s.value).map(e=>({...e,tabs:e.ids.map(r.describe)})));E(c,e=>{for(let t of e)t.active&&(o.value[t.side]=t.active)},{immediate:!0}),E(()=>n.surface,e=>{if(e===`files`)return;let t=c.value.find(t=>t.side===e);t?.active&&r.update(pB(r.layout(),t.active))},{flush:`post`});let l={props:n,dock:r,terminalOpen:i,terminalFocused:a,last:o,order:s,surfaces:c,handlers:{select:r.select,close:r.close,closeMany:r.closeMany,rename:r.rename,pin:r.pin,reorder:e=>{let t=e[0]&&n.terminalPanel(e[0])?`terminal`:`editor`;s.value[t]=e}},DockTabs:VB,get DockSlot(){return HB}};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),oV={class:`mobile-dock`},sV=[`inert`,`aria-label`],cV={key:0,class:`tabs`},lV={key:2,class:`trailing`},uV={class:`body`},dV=[`data-panel`],fV={key:0,class:`empty`};function pV(t,n,r,i,a,o){return K(),U(`div`,oV,[(K(!0),U(P,null,S(i.surfaces,t=>(K(),F(me,{key:t.side,name:`mobile-right`,onAfterEnter:n[0]||=e=>i.terminalFocused=i.terminalOpen,persisted:``},{default:e(()=>[te(I(`section`,{class:Y([`surface`,t.side]),inert:t.side===`editor`&&i.terminalOpen,"aria-label":t.side===`editor`?`Редактор`:`Терминалы`},[t.tabs.length||t.side===`terminal`?(K(),U(`header`,cV,[i.dock.slots.leading?(K(),F(i.DockSlot,{key:0,render:i.dock.slots.leading,args:{group:{role:t.side}}},null,8,[`render`,`args`])):D(`v-if`,!0),y(i.DockTabs,{tabs:t.tabs,"active-id":t.active,label:t.side===`editor`?`Файлы`:`Терминалы`,"project-id":i.dock.projectId,"command-namespace":i.dock.commandNamespace,"command-handlers":i.handlers,actions:i.dock.tabActions,"close-saved":``},{icon:e(({tab:e})=>[i.dock.slots.icon?(K(),F(i.DockSlot,{key:0,render:i.dock.slots.icon,args:{tab:e}},null,8,[`render`,`args`])):D(`v-if`,!0)]),_:1},8,[`tabs`,`active-id`,`label`,`project-id`,`command-namespace`,`actions`]),t.side===`terminal`&&i.dock.slots.actions?(K(),F(i.DockSlot,{key:1,render:i.dock.slots.actions,args:{activeId:t.active}},null,8,[`render`,`args`])):D(`v-if`,!0),t.side===`terminal`&&i.dock.slots.trailing?(K(),U(`div`,lV,[y(i.DockSlot,{render:i.dock.slots.trailing,args:{group:{role:t.side}}},null,8,[`render`,`args`])])):D(`v-if`,!0)])):D(`v-if`,!0),I(`div`,uV,[(K(!0),U(P,null,S(t.ids.filter(e=>e===t.active),e=>(K(),U(`div`,{key:e,class:`panel`,"data-panel":e},[i.dock.slots.panel?(K(),F(i.DockSlot,{key:0,render:i.dock.slots.panel,args:{id:e,focused:t.side===`terminal`?i.terminalFocused:i.props.surface===`editor`}},null,8,[`render`,`args`])):D(`v-if`,!0)],8,dV))),128)),t.ids.length?D(`v-if`,!0):(K(),U(`div`,fV,[i.dock.slots.empty?(K(),F(i.DockSlot,{key:0,render:i.dock.slots.empty,args:{group:{role:t.side}}},null,8,[`render`,`args`])):D(`v-if`,!0)]))])],10,sV),[[ae,t.side===`editor`||i.terminalOpen]])]),_:2},1024))),128))])}var mV=H(aV,[[`render`,pV],[`__scopeId`,`data-v-2c29d120`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/dock/ui/MobileDock.vue`]]),hV=W({__name:`DockView`,props:{layout:{type:Object,required:!0},mobile:{type:Boolean,required:!1},mobileSurface:{type:String,required:!1},terminalPanel:{type:Function,required:!1},describe:{type:Function,required:!0},projectId:{type:String,required:!0},commandNamespace:{type:String,required:!0},tabActions:{type:Function,required:!1},acceptsDrop:{type:Function,required:!1}},emits:[`update:layout`,`select`,`close`,`closeMany`,`rename`,`pin`,`drop`],setup(e,{expose:t,emit:r}){t();let i=e,a=r,o=T();n(DB,{layout:()=>i.layout,slots:o,get projectId(){return i.projectId},get commandNamespace(){return i.commandNamespace},describe:e=>i.describe(e),tabActions:e=>i.tabActions?.(e)??[],acceptsDrop:e=>i.acceptsDrop?.(e)??!1,update:e=>a(`update:layout`,e),select:e=>a(`select`,e),close:e=>a(`close`,e),closeMany:e=>a(`closeMany`,e),rename:(e,t)=>a(`rename`,e,t),pin:e=>a(`pin`,e),drop:(e,t)=>a(`drop`,e,t)});let s=B(()=>tB(i.layout.root));yf(window,`dragend`,()=>Gz.value=void 0),yf(window,`drop`,()=>Gz.value=void 0);let c={props:i,emit:a,slots:o,visible:s,DockTree:rV,MobileDock:mV};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),gV={key:2,class:`dock-none`};function _V(e,t,n,r,i,a){return K(),U(`div`,{class:Y([`dock`,{mobile:n.mobile}])},[n.mobile&&n.terminalPanel?(K(),F(r.MobileDock,{key:0,surface:n.mobileSurface??`editor`,"terminal-panel":n.terminalPanel},null,8,[`surface`,`terminal-panel`])):r.visible?(K(),F(r.DockTree,{key:1,node:n.layout.root},null,8,[`node`])):(K(),U(`p`,gV,`Все блоки скрыты. Включите нужный блок на панели выше.`))],2)}var vV=H(hV,[[`render`,_V],[`__scopeId`,`data-v-a0ea9f04`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/dock/ui/DockView.vue`]]),yV=W({__name:`TerminalCloseDialog`,props:{session:{type:[Object,null],required:!0},busy:{type:Boolean,required:!0}},emits:[`cancel`,`confirm`],setup(e,{expose:t}){t();let n=e,r=M(),i=V();E(()=>n.session,async e=>{await p(),e&&r.value&&!r.value.element?.open&&r.value.open()});let a={props:n,dialog:r,titleId:i,UiHeading:Ee,UiButton:q,UiDialog:un,UiDialogActions:km};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),bV={key:0},xV={class:`process-pid`};function SV(t,n,r,i,a,o){return r.session?(K(),F(i.UiDialog,{key:0,ref:`dialog`,class:`close-dialog`,width:`440px`,labelledby:i.titleId,onCancel:n[2]||=N(e=>t.$emit(`cancel`),[`prevent`])},{default:e(()=>[y(i.UiHeading,{id:i.titleId},{default:e(()=>[...n[3]||=[G(`Прервать процессы и закрыть вкладку?`,-1)]]),_:1},8,[`id`]),I(`p`,null,X(r.session.title)+` · `+X(r.session.activity?.state===`unknown`?`Не удалось определить, простаивает ли терминал.`:`В терминале работают процессы:`),1),r.session.activity?.processes.length?(K(),U(`ul`,bV,[(K(!0),U(P,null,S(r.session.activity.processes,e=>(K(),U(`li`,{key:e.pid},[I(`span`,null,X(e.name),1),I(`span`,xV,`PID `+X(e.pid),1)]))),128))])):D(`v-if`,!0),y(i.UiDialogActions,null,{default:e(()=>[y(i.UiButton,{autofocus:``,disabled:r.busy,onClick:n[0]||=e=>t.$emit(`cancel`)},{default:e(()=>[...n[4]||=[G(`Отмена`,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{tone:`danger`,disabled:r.busy,onClick:n[1]||=e=>t.$emit(`confirm`)},{default:e(()=>[...n[5]||=[G(`Прервать и закрыть`,-1)]]),_:1},8,[`disabled`])]),_:1})]),_:1},8,[`labelledby`])):D(`v-if`,!0)}var CV=H(yV,[[`render`,SV],[`__scopeId`,`data-v-ff6b8704`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/terminal/ui/TerminalCloseDialog.vue`]]),wV=null,TV=Symbol.for(`projector.native-fetch`),EV=globalThis,DV=EV[TV]??(EV[TV]=globalThis.fetch.bind(globalThis));function OV(){return wV}function kV(e){wV=e}function AV(e){try{return new URL(e,window.location.origin).origin===window.location.origin}catch{return!1}}var jV=!1,MV=null;function NV(){return MV??=new Promise(e=>{e(window.prompt(`Projector защищён паролем. Введите пароль доступа:`))}).finally(()=>{MV=null}),MV}async function PV(e,t){let n=typeof e==`string`?e:e instanceof URL?e.href:e.url,r=We(n);if(r!==n&&(e=e instanceof Request?new Request(r,e):r),!AV(typeof e==`string`?e:e instanceof URL?e.href:e.url))return DV(e,t);let i=()=>{let n=new Headers(t?.headers??(e instanceof Request?e.headers:void 0)),r=OV();return r&&n.set(`Authorization`,`Bearer ${r}`),n},a=await DV(e,{...t,headers:i()});if(a.status===401&&a.headers.get(`WWW-Authenticate`)===`Bearer realm="Projector LAN"`){let n=await NV();if(n){kV(n);let r=new Headers(t?.headers);r.set(`Authorization`,`Bearer ${n}`),a=await DV(e,{...t,headers:r})}}return Fe()&&!jV&&a.status===401&&a.headers.get(`WWW-Authenticate`)===`Session realm="Projector Hub"`&&(jV=!0,location.assign(`/login?next=${encodeURIComponent(location.pathname+location.search+location.hash)}`)),a}var FV,IV=new Map;function LV(){FV?.port.postMessage({type:`release`}),FV?.port.close(),FV=void 0}function RV(){if(!FV){FV=new SharedWorker(new URL(`/assets/shared.worker-DpKROrNH.js`,``+import.meta.url),{type:`module`,name:`projector-terminals-v1`+Pe()});let e=FV;FV.port.onmessage=t=>{if(FV!==e)return;let n=t.data;if(n.type===`ping`){FV?.port.postMessage({type:`pong`});return}let r=IV.get(n.channel);r&&(n.type===`opened`?r.opened():n.type===`message`?(FV?.port.postMessage({type:`received`,channel:n.channel,length:n.data.length}),r.onmessage?.(new MessageEvent(`message`,{data:n.data}))):n.type===`closed`&&r.ended(n.code,n.code===1006||n.code===1008))},FV.onerror=()=>{if(FV!==e)return;let t=[...IV.values()];LV();for(let e of t)e.ended(1006)},FV.port.start()}return FV.port}var zV=class{readyState=WebSocket.CONNECTING;onopen=null;onmessage=null;onclose=null;fallback;timer;wasOpened=!1;id=crypto.getRandomValues(new Uint32Array(4)).join(`-`);url;constructor(e){this.url=e,IV.set(this.id,this),this.timer=setTimeout(()=>this.ended(1006),8e3);try{RV().postMessage({type:`open`,channel:this.id,url:e.href,projectId:e.searchParams.get(`project`),sessionId:e.searchParams.get(`session`)??void 0})}catch{queueMicrotask(()=>this.ended(1006))}}opened(){this.readyState===WebSocket.CONNECTING&&(clearTimeout(this.timer),this.wasOpened=!0,this.readyState=WebSocket.OPEN,this.onopen?.(new Event(`open`)))}ended(e,t=!0){if(!(this.readyState===WebSocket.CLOSED||this.fallback)){if(clearTimeout(this.timer),this.detach(),!this.wasOpened&&t){console.warn(`Shared terminal transport unavailable; using legacy WebSocket`);let e=this.fallback=new WebSocket(this.url);e.onopen=()=>this.opened(),e.onmessage=e=>this.onmessage?.(e),e.onclose=e=>{this.readyState=WebSocket.CLOSED,this.onclose?.(e)}}else this.readyState=WebSocket.CLOSED,this.onclose?.(new CloseEvent(`close`,{code:e}))}}detach(){FV?.port.postMessage({type:`close`,channel:this.id}),IV.delete(this.id),IV.size||LV()}send(e){this.readyState===WebSocket.OPEN&&(this.fallback?this.fallback.send(e):FV?.port.postMessage({type:`send`,channel:this.id,data:e}))}close(){this.readyState!==WebSocket.CLOSED&&(clearTimeout(this.timer),this.detach(),this.readyState=WebSocket.CLOSED,this.fallback?this.fallback.close():queueMicrotask(()=>this.onclose?.(new CloseEvent(`close`,{code:1005}))))}},BV=typeof SharedWorker<`u`&&new URLSearchParams(location.search).get(`terminalTransport`)!==`legacy`;function VV(e){return e=new URL(We(e)),BV?new zV(e):new WebSocket(e)}globalThis.addEventListener?.(`pagehide`,()=>{for(let e of[...IV.values()])e.ended(1001,!1);LV()});var HV=class extends Error{session;constructor(e,t){super(e),this.session=t}},UV=class{socket;reconnect;delay=500;nextId=0;listeners=new Set;pending=new Map;connecting;cancelConnect;snapshot;projectId;constructor(e){this.projectId=e}subscribe(e){return this.listeners.add(e),this.snapshot&&e(this.snapshot),this.connect().catch(()=>{}),()=>{this.listeners.delete(e),this.release()}}release(){if(this.listeners.size||this.pending.size)return;clearTimeout(this.reconnect),this.reconnect=void 0;let e=this.socket;this.socket=void 0,this.cancelConnect?.(Error(`Подписка на терминалы закрыта`)),e?.close(),WV.get(this.projectId)===this&&WV.delete(this.projectId)}connect(){if(this.socket?.readyState===WebSocket.OPEN)return Promise.resolve();if(this.connecting)return this.connecting;clearTimeout(this.reconnect);let e=new URL(`/api/terminal/control`,location.href);e.protocol=location.protocol===`https:`?`wss:`:`ws:`,e.searchParams.set(`project`,this.projectId);let t=OV();t&&e.searchParams.set(`token`,t);let n=this.socket=VV(e);return this.connecting=new Promise((e,t)=>{let r=setTimeout(()=>{t(Error(`Терминалы не ответили`)),n.close()},1e4);this.cancelConnect=t,n.onopen=()=>{clearTimeout(r),this.delay=500,e()},n.onmessage=e=>{if(this.socket!==n)return;let t=JSON.parse(e.data);if(t.type===`sessions`){this.snapshot=t.sessions;for(let e of this.listeners)e(t.sessions)}else if(t.type===`response`){let e=this.pending.get(t.id);if(!e)return;clearTimeout(e.timer),this.pending.delete(t.id),t.data.error?e.reject(new HV(t.data.error,t.data.session)):e.resolve(t.data),this.release()}},n.onclose=e=>{if(clearTimeout(r),t(Error(`Соединение с терминалами потеряно`)),this.socket===n){this.socket=void 0,this.snapshot=void 0;for(let e of this.pending.values())clearTimeout(e.timer),e.reject(Error(`Соединение потеряно; проверьте результат операции`));this.pending.clear(),this.listeners.size&&e.code!==4404?(this.reconnect=setTimeout(()=>void this.connect().catch(()=>{}),this.delay),this.delay=Math.min(this.delay*2,1e4)):this.release()}}}).finally(()=>{this.connecting=void 0,this.cancelConnect=void 0}),this.connecting}async request(e,t){try{await this.connect()}catch(e){throw this.release(),e}let n=new URL(e||`/`,location.href),r=decodeURIComponent(n.pathname.replace(/^\//,``))||void 0,i=++this.nextId;return new Promise((e,a)=>{let o=setTimeout(()=>{this.pending.delete(i),a(Error(`Терминалы не ответили; проверьте результат операции`)),this.release()},15e3);this.pending.set(i,{resolve:t=>e(t),reject:a,timer:o}),this.socket.send(JSON.stringify({id:i,method:t?.method??`GET`,sessionId:r,body:typeof t?.body==`string`?JSON.parse(t.body):void 0,link:n.searchParams.get(`link`)??void 0}))})}},WV=new Map;function GV(e){let t=WV.get(e);return t||(t=new UV(e),WV.set(e,t)),t}var KV=(e,t)=>GV(e).subscribe(t),qV=(e,t=``,n)=>GV(e).request(t,n);function JV(e,t={}){let n=M([]),r=M(!1),i=M(!1),a=M(``),o=M(null),s=new Map,c=1,l=0,u=!1,d,p=[],m;function h(e){return s.has(e.id)||s.set(e.id,c++),e.customTitle??`${e.title} ${s.get(e.id)}`}let _=e=>e.status===`exited`&&!e.stopRequested&&e.exitCode!==0;function v(e){let t=h(e);return e.status===`exited`?`${t} · ${_(e)?`ошибка`:`завершён`} · код ${e.exitCode??`—`}`:e.stopRequested?`${t} · завершаю`:t}function y(e){if(i.value){m=e;return}for(let t of e)h(t);let t=new Map(n.value.map((e,t)=>[e.id,t]));n.value=[...e].sort((e,n)=>(t.get(e.id)??1/0)-(t.get(n.id)??1/0)),r.value=!0}function b(e){let t=n.value.findIndex(t=>t.id===e.id);t!==-1&&(n.value[t]=e)}let x=t=>!u&&t===e();async function S(){if(t.enabled===!1){r.value=!0;return}let n=++l,i=e();try{let e=await qV(i);x(i)&&n===l&&y(e.sessions)}catch(e){x(i)&&(a.value=e instanceof Error?e.message:`Не удалось загрузить терминалы`)}}async function C(r){if(t.enabled===!1)throw Error(`Терминалы недоступны для этого проекта`);i.value=!0,a.value=``;let o=e();try{let e=await qV(o,``,{method:`POST`,body:JSON.stringify({program:r,cols:80,rows:24})});return x(o)?(h(e.session),n.value.some(t=>t.id===e.session.id)||n.value.push(e.session),e.session):void 0}catch(e){a.value=e instanceof Error?e.message:`Не удалось открыть терминал`}finally{i.value=!1}}async function w(t,n){++l;let r=e();a.value=``;try{let{session:e}=await qV(r,`/${encodeURIComponent(t)}`,{method:`POST`,body:JSON.stringify({action:`rename`,title:n})});x(r)&&(++l,b(e))}catch(e){x(r)&&(a.value=e instanceof Error?e.message:`Не удалось переименовать терминал`)}}let T=(t,n)=>qV(e(),`/${encodeURIComponent(t)}`,{method:`POST`,body:JSON.stringify({action:`read`,lines:n})});async function D(r,o){let u=n.value.find(e=>e.id===r);if(!u||i.value)return;++l;let d=n.value.indexOf(u),f=e();i.value=!0,a.value=``;try{let e=await qV(f,`/${encodeURIComponent(u.id)}`,{method:`POST`,body:JSON.stringify({action:o})});if(!x(f))return;++l,o===`stop`?n.value.find(e=>e.id===u.id)?.status!==`exited`&&b(e.session):(t.restarted?.(u.id,e.session.id),n.value=n.value.filter(t=>t.id!==u.id&&t.id!==e.session.id),n.value.splice(Math.min(d,n.value.length),0,e.session),s.set(e.session.id,s.get(u.id)??c++))}catch(e){x(f)&&(a.value=e instanceof Error?e.message:`Не удалось изменить сессию`)}finally{i.value=!1}}async function O(t,r){if(i.value)return;++l,i.value=!0,a.value=``;let s=e();try{if(!r){let{session:e}=await qV(s,`/${encodeURIComponent(t)}`);if(!x(s))return;if(e.activity?.state!==`idle`){o.value=e;return}}if(await qV(s,`/${encodeURIComponent(t)}`,{method:`DELETE`,body:JSON.stringify({confirmation:r})}),!x(s))return;++l,o.value=null,n.value=n.value.filter(e=>e.id!==t)}catch(e){x(s)&&(e instanceof HV&&e.session?o.value=e.session:a.value=e instanceof Error?e.message:`Не удалось удалить сессию`)}finally{i.value=!1}}async function k(){for(;p.length&&!u;){let e=p[0];if(n.value.some(t=>t.id===e)&&(await O(e),n.value.some(t=>t.id===e)))return;p.shift()}}async function A(e){p=[...e],await k()}let j=e=>A([e]);function N(){i.value||(p=[],o.value=null)}async function ee(){let e=o.value;e&&(await O(e.id,e.activity?.confirmation),n.value.some(t=>t.id===e.id)||await k())}async function te(r){let i=r.detail;i.projectId===e()&&(await S(),!u&&n.value.some(e=>e.id===i.sessionId)&&t.started?.(i.sessionId))}E(i,e=>{if(e||!m)return;let t=m;m=void 0,y(t)},{flush:`sync`});function P(){m=void 0,p=[],o.value=null,n.value=[],r.value=!1,a.value=``,s.clear(),c=1,ne()}function ne(){if(d?.(),t.enabled===!1){r.value=!0;return}let n=e();d=KV(n,e=>{x(n)&&(++l,y(e))})}return E(e,P),f(()=>{t.enabled===!1?r.value=!0:(window.addEventListener(`projector:terminal-started`,te),ne())}),g(()=>{u=!0,d?.(),window.removeEventListener(`projector:terminal-started`,te)}),{sessions:n,loaded:r,busy:i,error:a,pendingClose:o,nameOf:h,labelOf:v,failed:_,replace:y,update:b,refresh:S,create:C,rename:w,readText:T,stop:e=>D(e,`stop`),restart:e=>D(e,`restart`),close:j,closeMany:A,cancelClose:N,confirmClose:ee}}var YV=r(()=>Pn(()=>import(`./TerminalView-CDAJ5gmT.js`),__vite__mapDeps([2,3,1,4,5,6,7,8])));function XV(e,t,n){for(let[r,i,a]of[[`next`,`Следующая вкладка`,1],[`previous`,`Предыдущая вкладка`,-1]])e(`ide.workbench.tab.${r}`,i,()=>{let e=t.value,r=e.panels.indexOf(e.active);n(e.panels[(r+a+e.panels.length)%e.panels.length])},()=>(t.value?.panels.length??0)>1,void 0,{description:`Переключает на соседнюю вкладку в блоке с фокусом по порядку полосы вкладок, по кругу.`})}var ZV=2e4,QV=1e5;function $V(e,t){return t?`terminal`:e?e.virtual?e.virtual:e.image?`image`:e.archive?`archive`:e.binary?`binary`:e.original!==void 0||e.commit?`diff`:`file`:`unknown`}function eH(e,t){if(e.virtual){let n=Dn(e.key),r=t.get(e.virtual)?.read?.(e.params??{},e.content);return n||r?{text:n?.text??r?.text,note:n?.note??r?.note}:{note:`Служебная вкладка с интерфейсом: у неё нет текстового содержимого`}}if(e.image)return{note:`Изображение: текстового содержимого нет`};if(e.archive)return{text:e.archive.entries.map(e=>`${e.type}\t${e.size}\t${e.path}`).join(`
|
|
104
|
-
`),note:`Архив ${e.archive.format}${e.archive.truncated?`, список усечён`:``}`};if(e.binary)return{note:`Двоичный файл: текстового содержимого нет`};let n=e.draft??e.content;return e.original===void 0?{text:n}:{text:`--- было\n${e.original}\n--- стало\n${n}`,note:`Сравнение версий`}}function tH(e){function t(){let t=e.layout();return e.groups(t).flatMap(n=>n.panels.map(r=>{let i=e.fileOf(r),a=e.terminalOf(r);return{id:r,label:e.label(r),kind:$V(i,a),path:i&&!i.virtual?i.path:void 0,group:n.id,active:n.active===r,focused:t.focused===n.id,hidden:!!n.hidden,dirty:i?e.isDirty(i):void 0,status:a?.status,exitCode:a?.exitCode}}))}e.register(`ide.workbench.tabs.list`,`Список открытых вкладок`,()=>({tabs:t()}),()=>!0,`Только чтение. Возвращает все открытые вкладки: id, название, тип (file, diff, image, terminal, agent и т. д.), путь, блок, признаки active/focused/hidden и несохранённых изменений, статус терминала. id используйте в ide.workbench.tab.read.`),e.register(`ide.workbench.tab.read`,`Прочитать содержимое вкладки`,async n=>{let r=J(n);if(r.id!==void 0&&typeof r.id!=`string`)throw Error(`id должен быть строкой`);if(r.maxChars!==void 0&&typeof r.maxChars!=`number`)throw Error(`maxChars должен быть числом`);if(r.lines!==void 0&&typeof r.lines!=`number`)throw Error(`lines должен быть числом`);let i=e.layout(),a=r.id??e.groups(i).find(e=>e.id===i.focused)?.active,o=t().find(e=>e.id===a);if(!a||!o)throw Error(`Вкладка не найдена: посмотрите ide.workbench.tabs.list`);let s=Math.max(1,Math.min(QV,Math.floor(r.maxChars??ZV))),c=e.fileOf(a),l=e.terminalOf(a),u,d,f,p=!1;if(l){let t=await e.readTerminal(l.id,r.lines);({text:u,totalLines:f}=t),p=t.truncated,d=`Текст экрана терминала без цветов; показаны последние строки`}else c&&({text:u,note:d}=eH(c,e.tabTypes));let m=p;return u!==void 0&&u.length>s&&(u=l?u.slice(-s):u.slice(0,s),m=!0),{...o,text:u,note:d,truncated:m,totalLines:f,chars:u?.length}},()=>!0,`Только чтение. Возвращает текстовое представление вкладки: содержимое файла (с несохранённым черновиком), оба варианта diff, список архива или текущий экран и прокрутку терминала (в том числе скрытого). Служебные вкладки и изображения дают только описание. Без id читается активная вкладка блока с фокусом.`,{id:`id вкладки из ide.workbench.tabs.list (необязательно)`,maxChars:`Лимит символов, по умолчанию ${ZV}, максимум ${QV}`,lines:`Для терминала: сколько последних строк взять, по умолчанию 200, максимум 2000`})}var nH=[`side`,`stacked`,`editor`,`terminal`];function rH(e){return e===`full`?Xz():{root:{type:`group`,id:`g1`,panels:[],active:``,role:`editor`,keepEmpty:!0},focused:`g1`}}function iH(e){let{tabs:t}=e,{capabilities:n}=e,r=()=>rH(e.layout),i=M(r()),a=M(!1),o=e=>t.value.find(t=>t.key===e),s=e=>`terminal:${e}`,c={},l=JV(()=>e.projectId(),{enabled:n.terminals,started:e=>g(s(e)),restarted:(e,t)=>{i.value=vB(i.value,s(e),s(t))}}),u=B(()=>new Map(l.sessions.value.map(e=>[s(e.id),e]))),d=e=>e.startsWith(`terminal:`)?`terminal`:`editor`;function f(t,n){if(e.pending.target){let t=e.pending.target;return e.pending.target=void 0,t}let r=d(t),i=e=>e.panels.some(e=>d(e)===r),a=Zz(n),o=a.filter(e=>e.role===r),s=o.find(e=>e.id===n.focused)??o.find(e=>e.id===c[r])??o.find(i)??o[0]??a.find(e=>!e.role&&e.id===n.focused&&i(e))??a.find(e=>!e.role&&i(e));return s?{groupId:s.id,zone:`center`}:{zone:r===`terminal`?`right`:`left`}}function p(){let e=new Set(t.value.map(e=>e.key));i.value=SB(i.value,{role:d,ids:[...e,...u.value.keys()],exists:t=>e.has(t)||u.value.has(t)?!0:t.startsWith(`terminal:`)?!l.loaded.value&&void 0:a.value?void 0:!1,place:f})}E(()=>[t.value.map(e=>e.key).join(`
|
|
105
|
-
`),l.sessions.value.map(e=>e.id).join(`
|
|
106
|
-
`),a.value,l.loaded.value],p,{flush:`sync`,immediate:!0});let m=B(()=>Qz(i.value,i.value.focused)),h=B({get:()=>{let e=m.value?.active??``;return o(e)?e:``},set:e=>{e&&g(e)}});function g(t){let n=e.pending.target,r=$z(i.value,t);r&&n&&(n.zone!==`center`||n.groupId!==r.id)?(e.pending.target=void 0,i.value=gB(i.value,t,n)):i.value=r?pB(i.value,t):hB(i.value,t,f(t,i.value));let a=$z(i.value,t);a&&(c[d(t)]=a.id)}async function _(e){let t=await l.create(e);t&&g(s(t.id))}function v(t){let n=o(t);if(n)return{id:t,label:n.virtual?n.path:n.path.split(`/`).at(-1),title:n.virtual?e.tabTypes.get(n.virtual)?.title(n.params??{},n.content)??n.path:n.saveError?`${n.path} · ${n.saveError}`:n.commit?`${n.path} · ${n.parent||`∅`} → ${n.commit.slice(0,7)}`:n.scope&&!kt(n.scope)?n.scope.kind===`commit`?`${n.path} · @${n.scope.rev.slice(0,7)}`:`${n.path} · ${n.scope.from.slice(0,7)} → ${n.scope.to.slice(0,7)}`:`${n.path}${n.original===void 0?``:n.staged?` · HEAD → index`:` · index → рабочий файл`}`,dirty:e.isDirty(n),saving:!!n.saving,error:!!n.saveError,preview:!!n.preview&&!e.isDirty(n)};let r=u.value.get(t);return r?{id:t,label:l.nameOf(r),title:`${l.labelOf(r)}${r.status===`running`?r.activity?.state===`idle`?` · ожидает ввода`:` · есть работающие процессы`:``} · Двойной щелчок: переименовать`,renameable:!0}:{id:t,label:t.startsWith(`terminal:`)?`Терминал…`:t}}function y(t){o(t)?e.selectTab(t):g(t)}function b(t){let n=u.value.get(t);return n?l.close(n.id):e.closeTab(t)}async function x(t){let n=t.filter(e=>o(e));await e.closeManyTabs(n),!n.some(e=>o(e))&&await l.closeMany(t.flatMap(e=>{let t=u.value.get(e);return t?[t.id]:[]}))}function S(e,t){let n=u.value.get(e);n&&l.rename(n.id,t)}let C={editor:`Редактор`,terminal:`Терминалы`};function w(e){if(!e.panels.length)return C[e.role??``]??`Блок`;let t=v(e.active).label;return e.panels.length>1?`${t} +${e.panels.length-1}`:t}let T=B(()=>Zz(i.value).map(e=>({id:e.id,role:e.role,label:w(e),hidden:!!e.hidden}))),D=B(()=>r().root.type===`split`),O=B(()=>{let e=i.value.root;if(e.type!==`split`||e.children.length!==2)return;let[t,n]=e.children;if(t?.type===`group`&&n?.type===`group`&&t.role===`editor`&&n.role===`terminal`){if(n.hidden&&!t.hidden)return`editor`;if(t.hidden&&!n.hidden)return`terminal`;if(!(t.hidden||n.hidden))return e.direction===`row`?`side`:`stacked`}});function k(e){let t=r();if(t.root.type!==`split`)return;let[n,a]=t.root.children;t.root.direction=e===`stacked`?`column`:`row`,e===`editor`&&(a.hidden=!0),e===`terminal`&&(n.hidden=!0);let o=h.value;i.value=t,p(),o&&g(o)}function A(e){let t=Qz(i.value,e);t&&(i.value=yB(i.value,e,!t.hidden))}function j(){let t=h.value;i.value=r(),e.showSidebar(),p(),t&&g(t)}function N(e){let t=J(e);if(t.id!==void 0&&typeof t.id!=`string`)throw Error(`id должен быть строкой`);return t.id??m.value?.active??``}for(let[t,n,r]of[[`splitRight`,`Разделить вправо`,`right`],[`splitDown`,`Разделить вниз`,`bottom`]])e.register(`ide.workbench.panel.${t}`,n,e=>{let t=N(e);i.value=gB(i.value,t,{groupId:$z(i.value,t).id,zone:r})},e=>($z(i.value,N(e))?.panels.length??0)>1);return XV(e.register,m,y),e.register(`ide.workbench.panel.hideGroup`,`Скрыть блок`,e=>{i.value=yB(i.value,$z(i.value,N(e)).id,!0)},e=>!!$z(i.value,N(e))),e.register(`ide.workbench.layout.preset`,`Выбрать раскладку блоков`,e=>{let{preset:t}=J(e);if(!nH.includes(t))throw Error(`preset: ${nH.join(`, `)}`);k(t)},()=>D.value,void 0,{description:`Перестраивает док: side — редактор и терминалы рядом, stacked — терминалы снизу, editor — только редактор, terminal — только терминалы. Вкладки сохраняются.`,arguments:{preset:`string: side | stacked | editor | terminal`}}),e.register(`ide.workbench.layout.group.toggle`,`Показать или скрыть блок`,e=>{let{group:t}=J(e),n=Zz(i.value).find(e=>e.id===t||e.role===t);if(!n)throw Error(`group: id блока либо editor или terminal`);A(n.id)},()=>!0,void 0,{description:`Показывает скрытый блок дока или скрывает видимый; вкладки блока не закрываются.`,arguments:{group:`string: id блока либо роль editor или terminal`}}),e.register(`ide.workbench.layout.reset`,`Сбросить раскладку блоков`,j,()=>!0),e.register(`ide.workbench.terminal.new`,`Новый терминал`,async e=>{let{program:t=`shell`}=J(e);if(typeof t!=`string`||!t.trim())throw Error(`program: непустая строка`);await _(t)},()=>!l.busy.value,`terminals`,{description:`Создаёт терминальную сессию в проекте и показывает её вкладку.`,arguments:{program:`string (необязательно): shell или id терминальной программы агента; по умолчанию shell`}}),tH({layout:()=>i.value,groups:Zz,fileOf:o,tabTypes:e.tabTypes,terminalOf:e=>u.value.get(e),label:e=>v(e).label,isDirty:e.isDirty,readTerminal:l.readText,register:(t,n,r,i,a,o)=>e.register(t,n,r,i,void 0,{description:a,arguments:o})}),{layout:i,restoringSession:a,terminals:l,terminalPanels:u,fileOf:o,focusedGroup:m,activeKey:h,revealPanel:g,initialLayout:r,reconcileLayout:p,describePanel:v,selectPanel:y,closePanel:b,closeManyPanels:x,renamePanel:S,layoutGroups:T,currentPreset:O,presetsAvailable:D}}var aH={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function oH(e,t){return K(),U(`svg`,aH,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`rect`,{width:`18`,height:`7`,x:`3`,y:`3`,rx:`1`}),I(`rect`,{width:`9`,height:`7`,x:`3`,y:`14`,rx:`1`}),I(`rect`,{width:`5`,height:`7`,x:`16`,y:`14`,rx:`1`})],-1)]])}var sH=L({name:`lucide-layout-template`,render:oH}),cH={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function lH(e,t){return K(),U(`svg`,cH,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`}),I(`path`,{d:`M9 3v18`})],-1)]])}var uH=L({name:`lucide-panel-left`,render:lH}),dH=W({__name:`LayoutMenu`,props:{groups:{type:Array,required:!0},preset:{type:String,required:!1},presetsAvailable:{type:Boolean,required:!0},sidebarHidden:{type:Boolean,required:!0}},emits:[`command`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a={side:{title:`Рядом`,caption:`Редактор и терминалы`},stacked:{title:`Снизу`,caption:`Терминалы под редактором`},editor:{title:`Редактор`,caption:`Только файлы`},terminal:{title:`Терминалы`,caption:`Только сессии`}},o={editor:`Редактор`,terminal:`Терминалы`},s=Ff({anchor:`right`,initialFocus:[`.preset.active`,`.preset`,`.block`],horizontalArrows:!0}),{open:c,toggle:l,close:u}=s,d=B(()=>r.groups.filter(e=>e.role));function f(e,t,n=!1){i(`command`,e,t),n||u()}let p={props:r,emit:i,titles:a,roleTitles:o,menu:s,open:c,toggle:l,close:u,shownBlocks:d,run:f,UiActionCopy:Md,UiActionRow:wl,UiIslandHeader:Cd,UiStack:Ed,UiIsland:Yd,UiButton:q,get layoutPresets(){return nH},get IconLayout(){return sH},get IconEye(){return AR},get IconEyeOff(){return NR},get IconSidebar(){return uH},get IconReset(){return hm}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),fH={key:0,class:`presets`,role:`group`,"aria-label":`Готовые раскладки`},pH=[`aria-pressed`,`onClick`],mH={class:`stage`},hH={key:0,class:`editor`},gH={key:1,class:`terminal`},_H={class:`name`},vH={class:`caption u-truncate`};function yH(t,n,r,i,a,o){return K(),U(P,null,[I(`span`,{ref:i.menu.trigger,class:`layout-trigger`},[y(i.UiButton,{shape:`icon`,size:`sm`,title:`Раскладка`,"aria-label":`Раскладка`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.menu.id:void 0,onClick:n[0]||=e=>i.toggle()},{default:e(()=>[y(i.IconLayout,{"aria-hidden":`true`})]),_:1},8,[`aria-expanded`,`aria-controls`])],512),y(i.UiIsland,{menu:i.menu,label:`Управление раскладкой`,gap:`var(--sp-2)`},{default:e(()=>[y(i.UiIslandHeader,{class:`island-head`,"aria-label":`Закрыть`,onClick:n[1]||=e=>i.toggle(!1)},{default:e(()=>[n[4]||=I(`span`,null,`Раскладка`,-1),y(i.IconLayout,{"aria-hidden":`true`})]),_:1}),r.presetsAvailable?(K(),U(`div`,fH,[(K(!0),U(P,null,S(i.layoutPresets,e=>(K(),U(`button`,{key:e,class:Y([`preset`,{active:r.preset===e}]),"aria-pressed":r.preset===e,"data-command":`ide.workbench.layout.preset`,onClick:t=>i.run(`ide.workbench.layout.preset`,{preset:e})},[I(`span`,{class:Y([`diagram`,`is-${e}`]),"aria-hidden":`true`},[n[5]||=I(`i`,{class:`side`},null,-1),I(`span`,mH,[e===`terminal`?D(`v-if`,!0):(K(),U(`i`,hH)),e===`editor`?D(`v-if`,!0):(K(),U(`i`,gH))])],2),I(`span`,_H,X(i.titles[e].title),1),I(`span`,vH,X(i.titles[e].caption),1)],10,pH))),128))])):D(`v-if`,!0),y(i.UiStack,{flow:`flex`,gap:`none`,class:`blocks`,role:`group`,"aria-label":`Блоки`},{default:e(()=>[y(i.UiActionRow,{fill:!1,tone:r.sidebarHidden?`muted`:void 0,class:Y([`block`,{off:r.sidebarHidden}]),"aria-pressed":!r.sidebarHidden,"data-command":`ide.workbench.sidebar.toggle`,onClick:n[2]||=e=>i.run(`ide.workbench.sidebar.toggle`,void 0,!0)},{default:e(()=>[y(i.IconSidebar,{"aria-hidden":`true`}),y(i.UiActionCopy,{grow:!1,title:`Боковая панель`,description:r.sidebarHidden?`скрыта`:`показана`},null,8,[`description`])]),_:1},8,[`tone`,`class`,`aria-pressed`]),(K(!0),U(P,null,S(i.shownBlocks,t=>(K(),F(i.UiActionRow,{fill:!1,tone:t.hidden?`muted`:void 0,key:t.id,class:Y([`block`,{off:t.hidden}]),"aria-pressed":!t.hidden,"data-command":`ide.workbench.layout.group.toggle`,onClick:e=>i.run(`ide.workbench.layout.group.toggle`,{group:t.id},!0)},{default:e(()=>[(K(),F(C(t.hidden?i.IconEyeOff:i.IconEye),{"aria-hidden":`true`})),y(i.UiActionCopy,{grow:!1,title:i.roleTitles[t.role]??t.label,description:t.hidden?`скрыт`:t.label===i.roleTitles[t.role]?`показан`:t.label},null,8,[`title`,`description`])]),_:2},1032,[`tone`,`class`,`aria-pressed`,`onClick`]))),128))]),_:1}),y(i.UiActionRow,{gap:2,fill:!1,tone:`muted`,class:`reset`,"data-command":`ide.workbench.layout.reset`,onClick:n[3]||=e=>i.run(`ide.workbench.layout.reset`)},{default:e(()=>[y(i.IconReset,{"aria-hidden":`true`}),n[6]||=G(`Сбросить раскладку `,-1)]),_:1})]),_:1},8,[`menu`])],64)}var bH=H(dH,[[`render`,yH],[`__scopeId`,`data-v-a8901dbe`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/LayoutMenu.vue`]]),xH=W({__name:`WorkbenchToolbar`,props:{capabilities:{type:Object,required:!0},mobile:{type:Boolean,required:!1},sidebarHidden:{type:Boolean,required:!0},terminalsBusy:{type:Boolean,required:!0},terminalsError:{type:String,required:!1},layoutGroups:{type:Array,required:!0},preset:{type:String,required:!1},presetsAvailable:{type:Boolean,required:!0}},emits:[`command`],setup(e,{expose:t,emit:n}){t();let r={emit:n,LayoutMenu:bH};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),SH={class:`toolbar`,role:`toolbar`,"aria-label":`Блоки и терминалы`},CH={key:0,class:`toolbar-error u-truncate`,role:`alert`};function wH(e,t,n,r,i,a){return K(),U(`div`,SH,[c(e.$slots,`terminal-status`,{},void 0,!0),n.terminalsError?(K(),U(`p`,CH,X(n.terminalsError),1)):D(`v-if`,!0),t[1]||=I(`div`,{class:`toolbar-spacer`},null,-1),c(e.$slots,`terminal-actions`,{},void 0,!0),n.mobile?D(`v-if`,!0):(K(),F(r.LayoutMenu,{key:1,groups:n.layoutGroups,preset:n.preset,"presets-available":n.presetsAvailable,"sidebar-hidden":n.sidebarHidden,onCommand:t[0]||=(e,t)=>r.emit(`command`,e,t)},null,8,[`groups`,`preset`,`presets-available`,`sidebar-hidden`]))])}var TH=H(xH,[[`render`,wH],[`__scopeId`,`data-v-29281b28`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/WorkbenchToolbar.vue`]]),EH={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function DH(e,t){return K(),U(`svg`,EH,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Zm0 11a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1ZM3 5a2 2 0 0 0 2 2h3`}),I(`path`,{d:`M3 3v13a2 2 0 0 0 2 2h3`})],-1)]])}var OH=L({name:`lucide-folder-tree`,render:DH}),kH={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function AH(e,t){return K(),U(`svg`,kH,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`}),I(`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5m-10 4.5L8 15l2 2.5m4-5l2 2.5l-2 2.5`})],-1)]])}var jH=L({name:`lucide-file-code`,render:AH}),MH={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function NH(e,t){return K(),U(`svg`,MH,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3M3 16h3a2 2 0 0 1 2 2v3m8 0v-3a2 2 0 0 1 2-2h3`},null,-1)]])}var PH=L({name:`lucide-minimize`,render:NH}),FH=W({__name:`MobileSurfaces`,props:{terminals:{type:Boolean,required:!0},surface:{type:String,required:!0}},emits:[`command`],setup(e,{expose:t}){t();let n=e,r=ep(),{fullscreen:i}=Yf(),a={props:n,canFullscreen:r,fullscreen:i,entries:B(()=>[{id:`files`,title:`Файлы`,icon:OH},{id:`editor`,title:`Редактор`,icon:jH},...n.terminals?[{id:`terminal`,title:`Терминалы`,icon:dD}]:[]]),get IconMaximize(){return cr},get IconMinimize(){return PH}};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),IH={class:`mobile-surfaces`,"aria-label":`Поверхности проекта`},LH=[`aria-pressed`,`aria-label`,`onClick`],RH={key:0,class:`pill-divider`,"aria-hidden":`true`},zH=[`aria-pressed`,`aria-label`];function BH(e,t,n,r,i,a){return K(),U(`nav`,IH,[(K(!0),U(P,null,S(r.entries,t=>(K(),U(`button`,{key:t.id,class:Y([`surface-tab`,{active:n.surface===t.id}]),"aria-pressed":n.surface===t.id,"aria-label":t.title,"data-command":`ide.workbench.mobile.surface.show`,onClick:n=>e.$emit(`command`,`ide.workbench.mobile.surface.show`,{surface:t.id})},[(K(),F(C(t.icon),{"aria-hidden":`true`})),I(`span`,null,X(t.title),1)],10,LH))),128)),r.canFullscreen?(K(),U(`span`,RH)):D(`v-if`,!0),r.canFullscreen?(K(),U(`button`,{key:1,class:Y([`surface-tab action`,{active:r.fullscreen}]),"aria-pressed":r.fullscreen,"aria-label":r.fullscreen?`Выйти из полного экрана`:`На весь экран`,title:`Полноэкранный режим`,"data-command":`ide.workbench.fullscreen.toggle`,onClick:t[0]||=t=>e.$emit(`command`,`ide.workbench.fullscreen.toggle`)},[(K(),F(C(r.fullscreen?r.IconMinimize:r.IconMaximize),{"aria-hidden":`true`}))],10,zH)):D(`v-if`,!0)])}var VH=H(FH,[[`render`,BH],[`__scopeId`,`data-v-8ccf6399`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/MobileSurfaces.vue`]]);function HH(e){let{commands:t,target:n,busy:r}=e,{git:i}=e.overview,a=B(()=>i.value.changes.filter(e=>e.index!==` `&&e.index!==`?`)),o=B(()=>i.value.changes.filter(e=>e.worktree!==` `));function s(e){let t=J(e);if(t.path!==void 0&&typeof t.path!=`string`)throw Error(`path должен быть строкой`);if(t.staged!==void 0&&typeof t.staged!=`boolean`)throw Error(`staged должен быть boolean`);return{path:t.path??n.value.path,staged:t.staged??n.value.staged,confirm:t.confirm===!0,pinned:t.pinned===!0}}function c(e){return i.value.changes.find(t=>t.path===s(e).path)}function l(e,t){let{path:n}=s(e);return(t?a.value:o.value).filter(e=>!n||e.path===n||e.path.startsWith(`${n}/`))}let u=e=>e.index===`U`||e.worktree===`U`||[`AA`,`DD`].includes(e.index+e.worktree);for(let[n,i]of[[`openDiff`,`Открыть изменения`],[`openFile`,`Открыть файл`],[`stage`,`Отметить Staged`],[`unstage`,`Убрать из Staged`],[`discard`,`Откатить рабочие изменения…`]])t.scope.registerCommand({id:`ide.git.${n}`,title:i,enabled:e=>{if(r.value)return!1;if(n===`stage`||n===`unstage`||n===`discard`){let t=l(e,n===`unstage`);return!!t.length&&(n===`stage`||t.every(e=>!u(e)))}let t=c(e);return t?n===`openFile`?t.worktree!==`D`&&(t.index!==`D`||t.worktree!==` `):n===`openDiff`?!u(t)&&(s(e).staged?![` `,`?`].includes(t.index):t.worktree!==` `):t.worktree!==` `&&!u(t):!1},run:async t=>{let{path:i,staged:a,confirm:o,pinned:c}=s(t);if(n===`openFile`||n===`openDiff`)return e.open(i,n===`openDiff`?a:void 0,c);let u=l(t,n===`unstage`),d=u.map(e=>e.path);if(n!==`discard`||o||window.confirm(d.length>1?`Откатить рабочие изменения: ${d.length} файлов${i?` в ${i}`:``}? Новые файлы будут перемещены в .projector-trash, несохранённые черновики удалены.`:u[0]?.index===`?`?`Убрать новый файл ${d[0]}? Он будет перемещён в .projector-trash.`:`Откатить рабочие изменения ${d[0]} до подготовленной версии? Несохранённый черновик тоже будет удалён.`)){r.value=!0;try{await e.prepare(n,d),e.invalidate(),await e.overview.mutate(n,d),await e.applied(n,d)}finally{r.value=!1}}}});return t.scope.registerCommand({id:`ide.git.reveal`,title:`Показать в проекте`,description:`Открывает боковую панель «Файлы» и показывает в дереве проекта файл или папку из списка изменений Git, раскрывая родительские каталоги.`,arguments:{path:`Путь записи внутри проекта; без аргумента — запись из контекстного меню`},enabled:e=>!r.value&&!!s(e).path,run:t=>e.reveal(s(t).path)}),{gitChange:c,stagedChanges:a,workingChanges:o}}var UH=W({__name:`EntryDialog`,emits:[`submit`,`cancel`],setup(e,{expose:t,emit:n}){let r=n,i=V(),a=V(),o=M(),s=M(),c=M(``),l=M(``),u=M(``),d=M(!1),f=M(``),m=M(!1),h=null;async function g(e){h=document.activeElement,c.value=e.title,l.value=e.value??``,u.value=e.description??``,d.value=!!e.confirm,f.value=``,m.value=!1,o.value?.open(),await p(),s.value?.focus(),s.value?.select()}function _(){o.value?.close(),h?.isConnected&&h.focus()}function v(){m.value||!d.value&&!l.value.trim()||(m.value=!0,r(`submit`,l.value.trim()))}function y(e){f.value=e,m.value=!1}t({open:g,close:_,fail:y});let b={emit:r,titleId:i,inputId:a,dialog:o,input:s,title:c,value:l,description:u,confirm:d,error:f,busy:m,get trigger(){return h},set trigger(e){h=e},open:g,close:_,submit:v,fail:y,UiHint:we,UiMessage:Te,UiHeading:Ee,UiControl:Se,UiButton:q,UiDialog:un,UiDialogActions:km};return Object.defineProperty(b,"__isScriptSetup",{enumerable:!1,value:!0}),b}});function WH(t,n,r,i,a,o){return K(),F(fe,{to:`body`},[y(i.UiDialog,{ref:`dialog`,labelledby:i.titleId,onCancel:n[2]||=e=>i.busy?e.preventDefault():i.emit(`cancel`)},{default:e(()=>[I(`form`,{onSubmit:N(i.submit,[`prevent`])},[y(i.UiHeading,{id:i.titleId},{default:e(()=>[G(X(i.title),1)]),_:1},8,[`id`]),i.description?(K(),F(i.UiHint,{key:0,size:`xs`,"space-after":3,wrap:``},{default:e(()=>[G(X(i.description),1)]),_:1})):D(`v-if`,!0),i.confirm?D(`v-if`,!0):(K(),F(i.UiControl,{key:1,ref:`input`,id:i.inputId,modelValue:i.value,"onUpdate:modelValue":n[0]||=e=>i.value=e,"aria-label":i.title,disabled:i.busy,required:``,maxlength:`255`},null,8,[`id`,`modelValue`,`aria-label`,`disabled`])),i.error?(K(),F(i.UiMessage,{key:2,tone:`danger`,size:`xs`,class:`error`,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0),y(i.UiDialogActions,null,{default:e(()=>[y(i.UiButton,{disabled:i.busy,onClick:n[1]||=e=>{i.close(),i.emit(`cancel`)}},{default:e(()=>[...n[3]||=[G(` Отмена `,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{type:`submit`,appearance:i.confirm?`outline`:`solid`,tone:i.confirm?`danger`:`neutral`,disabled:i.busy||!i.confirm&&!i.value.trim()},{default:e(()=>[G(X(i.busy?`Выполняется…`:i.confirm?`Удалить`:`Сохранить`),1)]),_:1},8,[`appearance`,`tone`,`disabled`])]),_:1})],32)]),_:1},8,[`labelledby`])])}var GH=H(UH,[[`render`,WH],[`__scopeId`,`data-v-c25ecc1c`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/EntryDialog.vue`]]);function KH(e){let{branches:t,open:n,target:r,busy:i,ask:a}=e,{state:o}=t,s=Ae(e.commands.scope),c=e=>{let t=o.value.branches.find(t=>t.name===e);if(!t)throw Error(`Ветка не найдена: ${String(e)}`);return t},l=e=>c(J(e).name??r.value);async function u(n,r,a){i.value=!0;try{a&&await e.prepare(`checkout`,[]),await t.mutate(n,r),a&&await e.applied(`checkout`,[]),await e.reload()}finally{i.value=!1}}let d=()=>!i.value,f={name:`Имя ветки (для удалённой — вместе с remote, например origin/main)`};s(`ide.git.branch.toggle`,`Показать список веток`,`Открывает или закрывает выбор ветки.`,()=>{n.value=!n.value}),s(`ide.git.branch.refresh`,`Обновить список веток`,`Перечитывает локальные и удалённые ветки.`,()=>t.load()),s(`ide.git.branch.list`,`Список веток`,`Возвращает ветки с upstream, ahead/behind и последним коммитом.`,async()=>(await t.load(),o.value)),s(`ide.git.branch.checkout`,`Переключить ветку`,`Переключает рабочую папку на ветку; для удалённой создаёт локальную с отслеживанием.`,async e=>{let t=l(e);t.current||await u(`checkout`,{name:t.name},!0),n.value=!1},f,e=>d()&&(!J(e).name||!!o.value.branches.length)),s(`ide.git.branch.create`,`Создать ветку…`,`Создаёт ветку от HEAD или от указанной ветки/коммита и переключается на неё. Без name спрашивает имя.`,async t=>{let n=J(t),i=Ie(n,`from`)??(n.fromTarget===!0?r.value:void 0),o=e=>u(`create`,{name:e,from:i,checkout:n.checkout!==!1&&void 0},n.checkout!==!1),s=Ie(n,`name`);if(s)return o(s);a(`Новая ветка`,``,i?`Начало: ${i}`:`Начало: ${e.label()}`,o)},{name:`Имя новой ветки`,from:`Ветка или хеш коммита, от которого начать; по умолчанию HEAD`,checkout:`false — не переключаться на новую ветку`},d),s(`ide.git.branch.rename`,`Переименовать ветку…`,`Переименовывает локальную ветку. Без newName спрашивает имя.`,async e=>{let t=J(e),n=l(e),r=e=>u(`rename`,{name:n.name,newName:e},!1),i=Ie(t,`newName`);if(i)return r(i);a(`Переименовать ветку`,n.name,n.name,r)},{...f,newName:`Новое имя`},e=>d()&&(J(e).name?!0:r.value!==``)),s(`ide.git.branch.delete`,`Удалить ветку…`,`Удаляет локальную ветку. Неслитую ветку удаляет только с force: true.`,async e=>{let t=J(e),n=l(e),r=t.force===!0;if(t.confirm!==!0){let e=n.merged?`Удалить ветку ${n.name}?`:`Ветка ${n.name} не слита в текущую. Удалить вместе с её коммитами?`;if(!window.confirm(e))return;r=!n.merged}await u(`delete`,{name:n.name,force:r},!1)},{...f,force:`true — удалить неслитую ветку`,confirm:`true — без вопроса`},d)}function qH(e){let{branches:t,busy:n}=e,{state:r}=t,i=Ae(e.commands.scope),a=M(``),o=()=>r.value.branches.find(e=>e.current),s=()=>!n.value&&r.value.available&&!r.value.detached,c=()=>s()&&!!r.value.remotes.length&&!!o(),l={action:`Действие синхронизации: fetch, pull или push`};async function u(r){n.value=!0,a.value=r;try{r===`pull`&&await e.prepare(`checkout`,[]);let n=await t.sync(r);return r===`pull`&&await e.applied(`checkout`,[]),await e.reload(),e.notify?.(n.message),n}finally{a.value=``,n.value=!1}}return i(`ide.git.sync.fetch`,`Получить ссылки из удалённого репозитория`,`Выполняет fetch --prune для текущей ветки и обновляет список веток и историю.`,()=>u(`fetch`),l,c),i(`ide.git.sync.pull`,`Стянуть изменения (только fast-forward)`,`Забирает коммиты upstream. Если ветки разошлись, Git отказывается и ничего не сливает; открытые файлы сохраняются до операции.`,()=>u(`pull`),l,()=>{let e=o();return c()&&!!e?.upstream&&!e.gone}),i(`ide.git.sync.push`,`Отправить коммиты в upstream`,`Отправляет текущую ветку. Без upstream публикует её в origin или первый доступный remote и назначает его upstream.`,()=>u(`push`),l,c),{perform:u,syncing:a}}var JH={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function YH(e,t){return K(),U(`svg`,JH,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M12 13v8m-8-6.101A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242`}),I(`path`,{d:`m8 17l4-4l4 4`})],-1)]])}var XH=L({name:`lucide-cloud-upload`,render:YH}),ZH=W({__name:`GitBranchBar`,props:t({branches:{type:null,required:!0},commands:{type:null,required:!0},revision:{type:Number,required:!0},prepare:{type:Function,required:!0},applied:{type:Function,required:!0},reload:{type:Function,required:!0}},{open:{type:Boolean,default:!1},openModifiers:{},target:{type:String,default:``},targetModifiers:{}}),emits:[`update:open`,`update:target`],setup(e,{expose:t}){t();let n=e,r=u(e,`open`),i=u(e,`target`),{state:a,error:o,loading:s}=n.branches;Sn(()=>o.value);let c=M(``),l=M(),d=M(),f,p=M(Date.now()),m=setInterval(()=>p.value=Date.now(),6e4);g(()=>clearInterval(m));let h=B(()=>a.value.branches.find(e=>e.current)),_=B(()=>a.value.detached?`HEAD · ${a.value.current}`:a.value.current),v=B(()=>{let e=c.value.trim().toLowerCase(),t=a.value.branches.filter(t=>t.name.toLowerCase().includes(e));return[{label:`Локальные`,rows:t.filter(e=>e.kind===`local`)},{label:`Удалённые`,rows:t.filter(e=>e.kind===`remote`)}].filter(e=>e.rows.length)});function y(e,t,n,r){f=r,d.value?.open({title:e,value:t,description:n})}async function b(e){try{await f?.(e),d.value?.close()}catch(e){d.value?.fail(e instanceof Error?e.message:`Не удалось выполнить действие`)}}let x=M(!1);KH({branches:n.branches,commands:n.commands,prepare:n.prepare,applied:n.applied,reload:n.reload,open:r,target:i,busy:x,label:()=>_.value,ask:y});let S=M(),C=M(),{syncing:w}=qH({branches:n.branches,commands:n.commands,prepare:n.prepare,applied:n.applied,reload:n.reload,busy:x,notify:e=>cn(C.value,e)}),T=B(()=>a.value.available&&a.value.remotes.length>0),D=B(()=>T.value&&!a.value.detached&&a.value.branches.some(e=>e.current)),O=B(()=>{let e=h.value;if(D.value&&e){if(!e.upstream||e.gone)return{action:`push`,icon:XH,title:e.gone?`Upstream удалён: опубликовать ветку заново`:`Опубликовать ветку ${e.name}`};if(!(e.ahead>0&&e.behind>0)){if(e.behind>0)return{action:`pull`,icon:zL,title:`Стянуть изменения: ↓${e.behind}`};if(e.ahead>0)return{action:`push`,icon:KP,title:`Отправить коммиты: ↑${e.ahead}`}}}}),k=B(()=>{let{item:e}=n.commands,t=h.value,r=e(`ide.git.sync.pull`),i=e(`ide.git.sync.push`);return[e(`ide.git.sync.fetch`),{...r,label:t?.behind?`Стянуть изменения`:r.label,hint:t?.behind?{text:`↓${t.behind}`}:void 0},{...i,label:t&&(!t.upstream||t.gone)?`Опубликовать ветку`:i.label,hint:t?.ahead?{text:`↑${t.ahead}`}:void 0}]});function A(e){n.commands.scope.activate(),S.value?.open(e)}function j(){let e=O.value?.action;e&&n.commands.run(`ide.git.sync.${e}`)}let N=B(()=>{let e=a.value.branches.find(e=>e.name===i.value),t={name:i.value},{item:r}=n.commands;return[r(`ide.git.branch.checkout`,t),r(`ide.git.branch.create`,{fromTarget:!0},{label:`Создать ветку отсюда…`}),...e?.kind===`local`&&!e.current?[r(`ide.git.branch.rename`,t,{separator:!0}),r(`ide.git.branch.delete`,t,{danger:!0})]:e?.kind===`local`?[r(`ide.git.branch.rename`,t,{separator:!0})]:[]]});function ee(e,t){i.value=t,n.commands.scope.activate(),l.value?.open(e)}let te=e=>[e.ahead?`↑${e.ahead}`:``,e.behind?`↓${e.behind}`:``].filter(Boolean).join(` `);E(()=>n.revision,()=>void n.branches.load(),{immediate:!0}),E(r,e=>{e?n.branches.load():c.value=``});let P={props:n,open:r,target:i,state:a,error:o,loading:s,filter:c,menu:l,dialog:d,get submit(){return f},set submit(e){f=e},now:p,clock:m,current:h,label:_,visible:v,ask:y,onSubmit:b,busy:x,syncMenu:S,syncAnchor:C,syncing:w,hasRemote:T,canSync:D,primary:O,syncItems:k,openSyncMenu:A,runPrimary:j,menuItems:N,context:ee,syncText:te,UiControl:Se,UiMessage:Te,ContextMenu:ih,EntryDialog:GH,UiButton:q,get relativeTime(){return wn},get IconBranch(){return PN},get IconCheck(){return Iy},get IconPlus(){return Dy},get IconChevron(){return bd},get IconEllipsis(){return KI}};return Object.defineProperty(P,"__isScriptSetup",{enumerable:!1,value:!0}),P}}),QH={class:`branch-bar`,"aria-label":`Ветки Git`},$H={class:`bar`},eU=[`aria-expanded`,`title`],tU={class:`name u-truncate`},nU={key:0,class:`sync`,title:`Относительно upstream`},rU={key:0,ref:`syncAnchor`,class:`remote-actions`,role:`group`,"aria-label":`Синхронизация с удалённым репозиторием`},iU={key:0,class:`picker`},aU=[`disabled`,`title`,`onClick`,`onFocus`,`onContextmenu`,`onKeydown`],oU={key:1,class:`mark`},sU={class:`label u-truncate`},cU={key:2,class:`gone`,title:`Upstream удалён`},lU={key:3,class:`sync`},uU={class:`when`};function dU(t,n,r,i,a,o){return K(),U(`section`,QH,[I(`div`,$H,[I(`button`,{class:`current`,"aria-expanded":i.open,title:i.state.detached?`HEAD отсоединён от ветки`:`Сменить ветку`,"data-command":`ide.git.branch.toggle`,onClick:n[0]||=e=>r.commands.run(`ide.git.branch.toggle`)},[y(i.IconBranch,{class:`icon`,"aria-hidden":`true`}),I(`span`,tU,X(i.label),1),i.current&&i.syncText(i.current)?(K(),U(`span`,nU,X(i.syncText(i.current)),1)):D(`v-if`,!0),y(i.IconChevron,{class:Y([`chevron`,{open:i.open}]),"aria-hidden":`true`},null,8,[`class`])],8,eU),i.canSync?(K(),U(`div`,rU,[i.primary?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,busy:i.syncing===i.primary.action,disabled:i.busy,title:i.primary.title,"aria-label":i.primary.title,"data-command":`ide.git.sync.${i.primary.action}`,onClick:i.runPrimary},{default:e(()=>[(K(),F(C(i.primary.icon),{"aria-hidden":`true`}))]),_:1},8,[`busy`,`disabled`,`title`,`aria-label`,`data-command`])):D(`v-if`,!0),y(i.UiButton,{shape:`icon`,size:`sm`,busy:!!i.syncing&&i.syncing!==i.primary?.action,disabled:i.busy&&!i.syncing,title:`Fetch, pull и push`,"aria-label":`Действия с удалённым репозиторием`,onClick:i.openSyncMenu},{default:e(()=>[y(i.IconEllipsis,{"aria-hidden":`true`})]),_:1},8,[`busy`,`disabled`])],512)):D(`v-if`,!0),y(i.UiButton,{shape:`icon`,size:`sm`,title:`Новая ветка`,"aria-label":`Новая ветка`,disabled:i.busy,"data-command":`ide.git.branch.create`,onClick:n[1]||=e=>r.commands.run(`ide.git.branch.create`)},{default:e(()=>[y(i.IconPlus,{"aria-hidden":`true`})]),_:1},8,[`disabled`])]),i.open?(K(),U(`div`,iU,[y(i.UiControl,{appearance:`inset`,modelValue:i.filter,"onUpdate:modelValue":n[2]||=e=>i.filter=e,type:`search`,placeholder:`Найти ветку`,"aria-label":`Найти ветку`,onKeydown:n[3]||=N(()=>{},[`stop`])},null,8,[`modelValue`]),i.loading&&!i.state.branches.length?(K(),F(i.UiMessage,{key:0,class:`note`,tone:`muted`,size:`xs`,flush:``,role:`status`},{default:e(()=>[...n[4]||=[G(`загрузка…`,-1)]]),_:1})):!i.visible.length&&!i.error?(K(),F(i.UiMessage,{key:1,class:`note`,tone:`muted`,size:`xs`,flush:``},{default:e(()=>[...n[5]||=[G(`Веток нет.`,-1)]]),_:1})):D(`v-if`,!0),(K(!0),U(P,null,S(i.visible,e=>(K(),U(P,{key:e.label},[I(`h4`,null,X(e.label),1),I(`ul`,null,[(K(!0),U(P,null,S(e.rows,e=>(K(),U(`li`,{key:e.name},[I(`button`,{class:Y([`row`,{current:e.current}]),disabled:i.busy,title:`${e.name}\n${e.subject}\n${e.hash}${e.upstream?`\nupstream: ${e.upstream}${e.gone?` (удалён)`:``}`:``}`,onClick:t=>r.commands.run(`ide.git.branch.checkout`,{name:e.name}),onFocus:t=>i.target=e.name,onContextmenu:t=>i.context(t,e.name),onKeydown:ye(N(t=>i.context(t,e.name),[`shift`,`prevent`]),[`f10`])},[e.current?(K(),F(i.IconCheck,{key:0,class:`mark`,"aria-label":`Текущая ветка`})):(K(),U(`span`,oU)),I(`span`,sU,X(e.name),1),e.gone?(K(),U(`span`,cU,`upstream удалён`)):D(`v-if`,!0),i.syncText(e)?(K(),U(`span`,lU,X(i.syncText(e)),1)):D(`v-if`,!0),I(`span`,uU,X(i.relativeTime(e.date,i.now)),1)],42,aU)]))),128))])],64))),128))])):D(`v-if`,!0),y(i.ContextMenu,{ref:`menu`,items:i.menuItems,label:`Действия ветки`},null,8,[`items`]),y(i.ContextMenu,{ref:`syncMenu`,items:i.syncItems,label:`Синхронизация Git`},null,8,[`items`]),y(i.EntryDialog,{ref:`dialog`,onSubmit:i.onSubmit},null,512)])}var fU=H(ZH,[[`render`,dU],[`__scopeId`,`data-v-5f8b5a86`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/git/ui/GitBranchBar.vue`]]);function pU(e,t,n){let r=e-n;if(r<72)return{height:e,collapse:!0};let i=Math.max(120,t-96);return{height:Math.min(i,Math.max(120,r))}}var mU=24,hU=W({__name:`GitSplitter`,props:{target:{type:null,required:!0},stack:{type:null,required:!0}},emits:[`resize`,`collapse`,`reset`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=M(0),o=M(120),s,c=()=>{a.value=r.target?.offsetHeight??0,o.value=Math.max(120,(r.stack?.offsetHeight??0)-96)};E(()=>[r.target,r.stack],c,{immediate:!0}),Of(()=>[r.target,r.stack],()=>{s===void 0&&(s=requestAnimationFrame(()=>{s=void 0,c()}))}),k(()=>{s!==void 0&&cancelAnimationFrame(s)});let l=()=>({height:r.target?.offsetHeight??0,stack:r.stack?.offsetHeight??0});function u(e,t,n){let r=pU(e,t,n);r.collapse?(d.stop(),i(`collapse`)):i(`resize`,r.height)}let d=AB({start:e=>({height:l().height,y:e.clientY}),move:(e,t)=>u(t.height,l().stack,e.clientY-t.y)}),{dragging:f,start:p}=d;function m(e){if(![`ArrowUp`,`ArrowDown`,`Home`,`End`,`Enter`].includes(e.key))return;e.preventDefault();let{height:t,stack:n}=l();e.key===`Enter`?i(`reset`):e.key===`Home`?i(`collapse`):e.key===`End`?u(t,n,-n):u(t,n,(e.shiftKey?4:1)*mU*(e.key===`ArrowUp`?-1:1))}let h={props:r,emit:i,measuredHeight:a,measuredMaximum:o,get measureFrame(){return s},set measureFrame(e){s=e},updateHeight:c,STEP:mU,measure:l,apply:u,drag:d,dragging:f,down:p,key:m,UiResizeHandle:Wz};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}});function gU(e,t,n,r,i,a){return K(),F(r.UiResizeHandle,{appearance:`line`,class:`splitter`,dragging:r.dragging,"aria-label":`Граница между изменениями и историей`,"aria-valuenow":r.measuredHeight,"aria-valuemin":`0`,"aria-valuemax":r.measuredMaximum,"aria-valuetext":`${r.measuredHeight} px`,title:`Потяните, чтобы изменить высоту истории · если сжать до минимума, она сворачивается · двойной клик возвращает размер`,tabindex:`0`,onPointerdown:r.down,onDblclick:t[0]||=e=>r.emit(`reset`),onKeydown:r.key},null,8,[`dragging`,`aria-valuenow`,`aria-valuemax`,`aria-valuetext`,`onPointerdown`])}var _U=H(hU,[[`render`,gU],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/git/ui/GitSplitter.vue`]]),vU={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function yU(e,t){return K(),U(`svg`,vU,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14`},null,-1)]])}var bU=L({name:`lucide-minus`,render:yU}),xU=W({__name:`FileIcon`,props:{icon:{type:Object,required:!0},size:{type:Number,required:!1,default:16}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),SU=[`data-icon`],CU=[`data-icon`];function wU(e,t,n,r,i,a){return K(),U(`span`,{class:`file-icon`,"aria-hidden":`true`,"data-icon":n.icon.id,style:Qe({"--icon-source":`url('${n.icon.src}')`,"--file-icon-size":`${n.size}px`,color:n.icon.color})},[t[1]||=I(`span`,{class:`symbol`},null,-1),n.icon.badge?(K(),U(`span`,{key:0,class:`badge`,"data-icon":n.icon.badge.id,style:Qe({"--icon-source":`url('${n.icon.badge.src}')`,color:n.icon.badge.color})},[...t[0]||=[I(`span`,{class:`badge-symbol`},null,-1)]],12,CU)):D(`v-if`,!0)],12,SU)}var TU=H(xU,[[`render`,wU],[`__scopeId`,`data-v-297184a9`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/file-icons/FileIcon.vue`]]),EU={version:1,name:`Projector Fallback`,palette:{muted:`#a6adc8`,blue:`#89b4fa`},icons:{file:{src:`/file-icons/icons/file.svg`,color:`muted`},folder:{src:`/file-icons/icons/folder.svg`,color:`blue`},"folder-open":{src:`/file-icons/icons/folder-open.svg`,color:`blue`}},defaults:{file:`file`,directory:`folder`,expandedDirectory:`folder-open`},rules:[]};function DU(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function OU(e,t=`|`){return e.map(e=>$U(e)).join(t)}function kU(e,t){return typeof t==`bigint`?t.toString():t}var AU=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function jU(e){return new AU(e)}function MU(e){return e==null}function NU(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function PU(e,t){let n=e/t,r=Math.round(n),i=4*2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r)<i?0:n-r}function FU(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function IU(e){let t=Object.getOwnPropertyDescriptor(e,`shape`);return t?.get?t.get.raw:t?.value}function LU(e){return IU(e._zod.def)??e._zod.def.shape}function RU(e,t,n){Object.defineProperty(e,t,{get(){let e=n();return FU(this,t,e),e},enumerable:!0,configurable:!0})}function zU(e,t,n){t in e?FU(e,t,n):e[t]=n}function BU(e,t,n,r){let i=LU(t);for(let a of n){let n=Object.getOwnPropertyDescriptor(i,a);n.enumerable&&(n.get?RU(e,a,()=>{let e=t._zod.def.shape[a];return r?r(e,a):e}):zU(e,a,r?r(n.value,a):n.value))}}function VU(e,t){for(let n of Reflect.ownKeys(t)){let r=Object.getOwnPropertyDescriptor(t,n);r.enumerable&&(r.get?RU(e,n,()=>t[n]):zU(e,n,r.value))}}function HU(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function UU(e){return JSON.stringify(e)}function WU(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var GU=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function KU(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var qU=jU(()=>{if(HW.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function JU(e){if(KU(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return KU(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function YU(e){return JU(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var XU=new Set([`string`,`number`,`symbol`]);function ZU(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function QU(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function Q(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function $U(e){return typeof e==`bigint`?e.toString()+`n`:typeof e==`string`?`"${e}"`:`${e}`}function eW(e){return Object.keys(e).filter(t=>e[t]._zod.optin!==void 0&&e[t]._zod.optout===`optional`)}var tW={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},nW={int64:[BigInt(`-9223372036854775808`),BigInt(`9223372036854775807`)],uint64:[BigInt(0),BigInt(`18446744073709551615`)]};function rW(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);let i={};return BU(i,e,iW(e,t)),QU(e,HU(n,{shape:i,checks:[]}))}function iW(e,t){let n=LU(e),r=[];for(let e of Reflect.ownKeys(t)){if(!Object.getOwnPropertyDescriptor(n,e)?.enumerable)throw Error(`Unrecognized key: "${String(e)}"`);t[e]&&r.push(e)}return r}function aW(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);let i=new Set(iW(e,t)),a={};return BU(a,e,Reflect.ownKeys(LU(e)).filter(e=>!i.has(e))),QU(e,HU(n,{shape:a,checks:[]}))}function oW(e,t){if(!JU(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=LU(e);for(let e of Reflect.ownKeys(t))if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return QU(e,HU(e._zod.def,{shape:sW(e,t)}))}function sW(e,t){let n={};return BU(n,e,Reflect.ownKeys(LU(e))),VU(n,t),n}function cW(e,t){if(!JU(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return QU(e,HU(e._zod.def,{shape:sW(e,t)}))}function lW(e,t){if(!t?._zod?.def)throw Error("Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.");if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);let n={};return BU(n,e,Reflect.ownKeys(LU(e))),BU(n,t,Reflect.ownKeys(LU(t))),QU(e,HU(e._zod.def,{shape:n,get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function uW(e,t,n,r=`partial`){let i=t._zod.def.checks;if(i&&i.length>0)throw Error(`.${r}() cannot be used on object schemas containing refinements`);let a=n?new Set(iW(t,n)):void 0,o={};return BU(o,t,Reflect.ownKeys(LU(t)),e&&((t,n)=>a&&!a.has(n)?t:new e({type:`optional`,innerType:t}))),QU(t,HU(t._zod.def,{shape:o,checks:[]}))}function dW(e,t,n){let r=n?new Set(iW(t,n)):void 0,i={};return BU(i,t,Reflect.ownKeys(LU(t)),(t,n)=>r&&!r.has(n)?t:new e({type:`nonoptional`,innerType:t})),QU(t,HU(t._zod.def,{shape:i}))}function fW(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue!==!0)return!0;return!1}function pW(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue===!1)return!0;return!1}function mW(e,t){return t.map(t=>{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function hW(e){return typeof e==`string`?e:e?.message}function gW(e,t,n){var r;for(let i=t;i<e.length;i++)(r=e[i]).schema??(r.schema=n)}function _W(e,t,n){var r;let i=e.inst?._zod?.traits;i?.has(`$ZodType`)&&(i.has(`$ZodCheck`)?(r=e).schema??(r.schema=e.inst):e.schema=e.inst);let a=e.schema===e.inst?void 0:e.schema?._zod.def?.error,o=e.message?e.message:hW(e.inst?._zod.def?.error?.(e))??hW(a?.(e))??hW(t?.error?.(e))??hW(n.customError?.(e))??hW(n.localeError?.(e))??`Invalid input`,s={};for(let t of Object.keys(e))t!==`inst`&&t!==`schema`&&t!==`continue`&&t!==`input`&&t!==`__proto__`&&(s[t]=e[t]);return s.path??=[],s.message=o,t?.reportInput&&(s.input=e.input),s}var vW=/[\uD800-\uDBFF]/;function yW(e){let t=e.length;if(!vW.test(e))return t;let n=t;for(let r=0;r<t-1;r++)(e.charCodeAt(r)&64512)==55296&&(e.charCodeAt(r+1)&64512)==56320&&(n--,r++);return n}function bW(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function xW(e){let t=typeof e;switch(t){case`number`:return Number.isNaN(e)?`nan`:`number`;case`object`:{if(e===null)return`null`;if(Array.isArray(e))return`array`;let t=e;if(t&&Object.getPrototypeOf(t)!==Object.prototype&&`constructor`in t&&t.constructor)return t.constructor.name}}return t}function SW(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}function CW(e,t){for(let n in t){let r=Object.getOwnPropertyDescriptor(t,n);r.get?Object.defineProperty(e,n,{...r,enumerable:!1}):DW(e,n,r.value)}}function wW(e,t,n,r=!0){return Object.defineProperty(e,t,{configurable:!0,writable:!0,enumerable:r,value:n}),n}function TW(e,t,n){return wW(e,t,n,!1)}function EW(e,t){for(let n in e){let r=e[n];Object.defineProperty(t,n,{configurable:!0,enumerable:!0,get(){return wW(this,n,r(this))},set(e){wW(this,n,e)}})}return t}function DW(e,t,n){Object.defineProperty(e,t,{configurable:!0,get(){return this==null?n:wW(this,t,n.bind(this))},set(e){wW(this,t,e)}})}function OW(e,t){let n=Object.getPrototypeOf(e);return t in n?void 0:n}var kW,AW=!1,jW={configurable:!0,get(){AW=!0}};function MW(e,t,n){let r=Object.getPrototypeOf(e._zod);t in r&&kW!==e._zod?kW=void 0:(kW=e._zod,Object.defineProperty(r,t,{configurable:!0,get(){Object.defineProperty(this,t,jW);let e=AW;AW=!1;try{let r=n(this);return AW?delete this[t]:Object.defineProperty(this,t,{configurable:!0,writable:!0,value:r}),AW||=e,r}catch(n){throw delete this[t],AW||=e,n}},set(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}}))}function NW(e,t,n,r){let i=OW(e,t);i&&Object.defineProperty(i,t,{configurable:!0,get(){let e={configurable:!0,writable:!0,enumerable:r,value:void 0};return Object.defineProperty(this,t,e),e.value=n(this),Object.defineProperty(this,t,e),e.value},set(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,enumerable:r,value:e})}})}var PW=`~constantCatch`;function FW(e){let t=()=>e;return t[PW]=!0,t}var IW,LW={value:void 0,enumerable:!1},RW=`captureStackTrace`in Error?Error:null;function zW(e){let t=RW;if(t){let n=t.stackTraceLimit;if(typeof n==`number`){try{t.stackTraceLimit=0}catch{return RW=null,new e}try{return new e}finally{t.stackTraceLimit=n}}}return new e}function $(e,t,n,r){let i={};function a(e){this.def=e,this.constr=d,this.traits=new Set}a.prototype=i;let o=n,s=o&&new WeakSet;function c(n,r){if(!n._zod){LW.value=new a(r);try{Object.defineProperty(n,"_zod",LW)}finally{LW.value=void 0}}else if(n._zod.traits.has(e))return;if(n._zod.traits.add(e),t(n,r),s){let e=Object.getPrototypeOf(n),t=n._zod.constr.prototype,r=e;for(;r&&r!==t;)r=Object.getPrototypeOf(r);let i=r??e;s.has(i)||(s.add(i),CW(i,o))}let i=d.prototype;for(let e in i)Object.prototype.hasOwnProperty.call(i,e)&&(e in n||(n[e]=i[e].bind(n)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:e});function d(e){let t=r?.Parent?zW(u):this;c(t,e);let n=t._zod.deferred;if(n){for(let e of n)e();t._zod.deferred=void 0}let i=globalThis.__zod_globalConfig?.postProcessor;return i&&i(t),t}return Object.defineProperty(d,"init",{value:c}),Object.defineProperty(d,Symbol.hasInstance,{value:t=>r?.Parent&&t instanceof r.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(d,"name",{value:e}),d}var BW=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},VW=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(IW=globalThis).__zod_globalConfig??(IW.__zod_globalConfig={});var HW=globalThis.__zod_globalConfig;function UW(e){return e&&Object.assign(HW,e),HW}function WW(){let e=this._zod;return e.message??=JSON.stringify(e.def,kU,2),e.message}function GW(e){this._zod.message=e}var KW={get:WW,set:GW,enumerable:!0,configurable:!0},qW={value:void 0,enumerable:!1},JW=new WeakSet([Object.prototype,Error.prototype]),YW=$(`$ZodError`,(e,t)=>{e.name=`$ZodError`,qW.value=t,Object.defineProperty(e,"issues",qW),qW.value=void 0,Object.defineProperty(e,"message",KW);let n=Object.getPrototypeOf(e);JW.has(n)||(JW.add(n),Object.defineProperty(n,"toString",{configurable:!0,enumerable:!1,get(){let e=()=>this.message;return Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0})}}))});function XW(e,t,n){return Object.prototype.hasOwnProperty.call(e,t)||(t===`__proto__`?Object.defineProperty(e,t,{value:n(),writable:!0,enumerable:!0,configurable:!0}):e[t]=n()),e[t]}function ZW(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?XW(n,i.path[0],()=>[]).push(t(i)):r.push(t(i));return{formErrors:r,fieldErrors:n}}function QW(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i<e.length;){let n=e[i],o=i===e.length-1;if(n===`_errors`){o&&r._errors.push(t(a)),i++;continue}Object.prototype.hasOwnProperty.call(r,n)||Object.defineProperty(r,n,{value:{_errors:[]},enumerable:!0,writable:!0,configurable:!0});let s=r[n];o&&s._errors.push(t(a)),r=s,i++}}}};return r(e),n}function $W(e,t){return{callee:t?.callee??e,Err:t?.Err}}var eG=e=>{let t=(n,r,i,a)=>{let o=i?{...i,async:!1}:{async:!1},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new BW;if(s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>_W(e,o,UW())));throw GU(n,a?.callee??t),n}return s.value};return t},tG=e=>{let t=async(n,r,i,a)=>{let o=i?{...i,async:!0}:{async:!0},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>_W(e,o,UW())));throw GU(n,a?.callee??t),n}return s.value};return t},nG=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new BW;return a.issues.length?rG(e,a.issues,i):{success:!0,data:a.value}};function rG(e,t,n){let r;return{success:!1,get error(){return r||(r=new e(t.map(e=>_W(e,n,UW()))),t=void 0,n=void 0),r},set error(e){r=e,t=void 0,n=void 0}}}var iG=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?rG(e,a.issues,i):{success:!0,data:a.value}},aG=Symbol.for(`zod.compile.invalid`),oG=Symbol.for(`zod.compile.fallback`),sG=((e,t,n)=>{let r=e._zod.bag.validator;if(r!==void 0){if(r(t)!==aG)return!0;if(r.definite===!0&&n===void 0)return!1}return cG(e,t,n)});function cG(e,t,n){let r=n?{...n,async:!1,abortEarly:!0}:{async:!1,abortEarly:!0},i=e._zod.bag.fallbackRun,a;if(i?(r[oG]=!0,a=i({value:t,issues:[]},r)):a=e._zod.run({value:t,issues:[]},r),a instanceof Promise)throw new BW;return a.issues.length===0}var lG=async(e,t,n)=>{let r=n?{...n,async:!0,abortEarly:!0}:{async:!0,abortEarly:!0},i=e._zod.run({value:t,issues:[]},r);return i instanceof Promise&&(i=await i),i.issues.length===0},uG=e=>{let t=eG(e),n=(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return t(e,r,o,$W(n,a))};return n},dG=e=>{let t=eG(e),n=(e,r,i,a)=>t(e,r,i,$W(n,a));return n},fG=e=>{let t=tG(e),n=async(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return await t(e,r,o,$W(n,a))};return n},pG=e=>{let t=tG(e),n=async(e,r,i,a)=>await t(e,r,i,$W(n,a));return n},mG=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return nG(e)(t,n,i)},hG=e=>(t,n,r)=>nG(e)(t,n,r),gG=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return iG(e)(t,n,i)},_G=e=>async(t,n,r)=>iG(e)(t,n,r),vG=/^[cC][0-9a-z]{6,}$/,yG=/^[0-9a-z]+$/,bG=/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/,xG=/^[0-9a-vA-V]{20}$/,SG=/^[A-Za-z0-9]{27}$/,CG=/^[a-zA-Z0-9_-]{21}$/;function wG(e){return RegExp(`^[a-zA-Z0-9_-]{${e}}$`)}var TG=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,EG=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,DG=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,OG=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,kG=`^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$`;function AG(){return new RegExp(kG,`u`)}var jG=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,MG=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,NG=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,PG=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,FG=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,IG=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/,LG=/^https?$/,RG=/^\+[1-9]\d{6,14}$/,zG=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;function BG(e){return RegExp(`^${e}$`)}var VG=BG(zG);function HG(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:e.seconds?`${t}:[0-5]\\d(?:\\.\\d+)?`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function UG(e){return RegExp(`^${HG(e)}$`)}function WG(e){let t=[`Z`];e.offset&&t.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let n=`${HG({precision:e.precision,seconds:!0})}(?:${t.join(`|`)})`,r=e.local?`${n}|${HG({precision:e.precision})}`:n;return RegExp(`^${zG}T(?:${r})$`)}var GG=/^[\s\S]{0,}$/,KG=/^-?\d+$/,qG=/^-?\d+(?:\.\d+)?$/,JG=/^(?:true|false)$/i,YG=/^[^A-Z]*$/,XG=/^[^a-z]*$/,ZG=$(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),QG=e=>{let t=e.value;return!MU(t)&&t.length!==void 0},$G={number:`number`,bigint:`bigint`,object:`date`},eK=$(`$ZodCheckLessThan`,(e,t)=>{ZG.init(e,t);let n=$G[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value<t.value)||r.issues.push({origin:$G[typeof r.value]??n,code:`too_big`,maximum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),tK=$(`$ZodCheckGreaterThan`,(e,t)=>{ZG.init(e,t);let n=$G[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:$G[typeof r.value]??n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),nK=$(`$ZodCheckMultipleOf`,(e,t)=>{ZG.init(e,t),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?t.value!==BigInt(0)&&n.value%t.value===BigInt(0):PU(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),rK=$(`$ZodCheckNumberFormat`,(e,t)=>{ZG.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=tW[t.format];e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}s<i&&o.issues.push({origin:`number`,input:s,code:`too_small`,minimum:i,inclusive:!0,inst:e,continue:!t.abort}),s>a&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),iK=$(`$ZodCheckMaxLength`,(e,t)=>{var n;ZG.init(e,t),(n=e._zod.def).when??(n.when=QG),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>t.maximum?yW(r):i)<=t.maximum)return;let a=bW(r);n.issues.push({origin:a,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),aK=$(`$ZodCheckMinLength`,(e,t)=>{var n;ZG.init(e,t),(n=e._zod.def).when??(n.when=QG),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>=t.minimum&&i<t.minimum*2?yW(r):i)>=t.minimum)return;let a=bW(r);n.issues.push({origin:a,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),oK=$(`$ZodCheckLengthEquals`,(e,t)=>{var n;ZG.init(e,t),(n=e._zod.def).when??(n.when=QG),e._zod.check=n=>{let r=n.value,i=r.length,a=typeof r==`string`&&i>=t.length&&i<=t.length*2?yW(r):i;if(a===t.length)return;let o=bW(r),s=a>t.length;n.issues.push({origin:o,...s?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),sK=$(`$ZodCheckStringFormat`,(e,t)=>{var n,r;ZG.init(e,t),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),cK=$(`$ZodCheckRegex`,(e,t)=>{sK.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),lK=$(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=YG,sK.init(e,t)}),uK=$(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=XG,sK.init(e,t)}),dK=$(`$ZodCheckIncludes`,(e,t)=>{ZG.init(e,t);let n=ZU(t.includes);t.pattern=new RegExp(typeof t.position==`number`?`^.{${t.position},}${n}`:n),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),fK=$(`$ZodCheckStartsWith`,(e,t)=>{ZG.init(e,t);let n=RegExp(`^${ZU(t.prefix)}.*`);t.pattern??=n,e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),pK=$(`$ZodCheckEndsWith`,(e,t)=>{ZG.init(e,t);let n=RegExp(`.*${ZU(t.suffix)}$`);t.pattern??=n,e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),mK=$(`$ZodCheckOverwrite`,(e,t)=>{ZG.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),hK=class{constructor(e=[],t={}){this.content=[],this.indent=0,this.args=e,this.closed=t}indented(e){this.indent+=1;try{e(this)}finally{--this.indent}}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
|
|
107
|
-
`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.content??[``];return new e(...Object.keys(this.closed),`return function (${this.args.join(`, `)}) {\n${t.join(`
|
|
108
|
-
`)}\n};`)(...Object.values(this.closed))}},gK={major:4,minor:6,patch:5},_K=$(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=gK;let r=e._zod.def.checks,i=e._zod.traits.has(`$ZodCheck`)?[e,...r??[]]:r?.length?[...r]:[];for(let t of i)for(let n of t._zod.onattach)n(e);if(i.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(t,n,r)=>{if(t.memo)return t;let i=fW(t),a;for(let o of n){if(o._zod.def.when){if(pW(t)||!o._zod.def.when(t))continue}else if(i)continue;let n=t.issues.length,s=o._zod.check(t);if(s instanceof Promise&&r?.async===!1)throw new BW;if(a||s instanceof Promise)a=(a??Promise.resolve()).then(async()=>{await s,t.issues.length!==n&&(gW(t.issues,n,e),i||=fW(t,n))});else{if(t.issues.length===n)continue;gW(t.issues,n,e),i||=fW(t,n)}}return a?a.then(()=>t):t},n=(n,r,a)=>{if(fW(n))return n.aborted=!0,n;let o=t(r,i,a);if(o instanceof Promise){if(a.async===!1)throw new BW;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(r,a)=>{if(a.skipChecks)return e._zod.parse(r,a);if(a.direction===`backward`){let t=e._zod.parse({value:r.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,r,a)):n(t,r,a)}let o=e._zod.parse(r,a);if(o instanceof Promise){if(a.async===!1)throw new BW;return o.then(e=>t(e,i,a))}return t(o,i,a)}}},{get"~standard"(){return TW(this,`~standard`,bK(this))},set"~standard"(e){wW(this,`~standard`,e)}}),vK=(e,t)=>e.issues.length?{issues:e.issues.map(e=>_W(e,t,UW()))}:{value:e.value};async function yK(e,t){let n={async:!0};return vK(await e._zod.run({value:t,issues:[]},n),n)}function bK(e){return{validate:t=>{let n={async:!1};try{let r=e._zod.run({value:t,issues:[]},n);if(!(r instanceof Promise))return vK(r,n)}catch{}return yK(e,t)},vendor:`zod`,version:1}}var xK=$(`$ZodString`,(e,t)=>{_K.init(e,t),e._zod.pattern=t.pattern??GG,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),SK=$(`$ZodStringFormat`,(e,t)=>{sK.init(e,t),xK.init(e,t)}),CK=$(`$ZodGUID`,(e,t)=>{t.pattern??=EG,SK.init(e,t)}),wK=$(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=DG(e)}else t.pattern??=DG();SK.init(e,t)}),TK=$(`$ZodEmail`,(e,t)=>{t.pattern??=OG,SK.init(e,t)});function EK(e){try{return typeof URL<`u`&&typeof URL.canParse==`function`?URL.canParse(e):(new URL(e),!0)}catch{return!1}}function DK(e,t){return!(`normalize`in t)&&!(`hostname`in t)&&!(`protocol`in t)?EK(e)||2:OK(e,t)}function OK(e,t){if(!t.normalize&&t.protocol?.source===LG.source&&!/^https?:\/\//i.test(e))return 1;try{if(typeof URL<`u`){let t=URL;if(typeof t.parse==`function`)return t.parse(e)??2}return new URL(e)}catch{return 2}}var kK=/[\t\n\r]/g;function AK(e){return e.replace(kK,``)}function jK(e,t){return t.lastIndex=0,t.test(e.hostname)}function MK(e,t){return t.lastIndex=0,t.test(e.protocol.endsWith(`:`)?e.protocol.slice(0,-1):e.protocol)}var NK=$(`$ZodURL`,(e,t)=>{SK.init(e,t),e._zod.check=n=>{try{let r=n.value.trim(),i=DK(r,t);if(i===1){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}if(i===2){n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort});return}if(i===!0){n.value=AK(r);return}t.hostname&&!jK(i,t.hostname)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort}),t.protocol&&!MK(i,t.protocol)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort}),n.value=t.normalize?i.href:AK(r);return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),PK=$(`$ZodEmoji`,(e,t)=>{t.pattern??=AG(),SK.init(e,t)}),FK=$(`$ZodNanoID`,(e,t)=>{if(t.length!==void 0&&(!Number.isInteger(t.length)||t.length<1))throw Error(`Invalid nanoid length: ${t.length}`);t.pattern??=t.length===void 0?CG:wG(t.length),SK.init(e,t)}),IK=$(`$ZodCUID`,(e,t)=>{t.pattern??=vG,SK.init(e,t)}),LK=$(`$ZodCUID2`,(e,t)=>{t.pattern??=yG,SK.init(e,t)}),RK=$(`$ZodULID`,(e,t)=>{t.pattern??=bG,SK.init(e,t)}),zK=$(`$ZodXID`,(e,t)=>{t.pattern??=xG,SK.init(e,t)}),BK=$(`$ZodKSUID`,(e,t)=>{t.pattern??=SG,SK.init(e,t)}),VK=$(`$ZodISODateTime`,(e,t)=>{t.pattern??=WG(t),SK.init(e,t)}),HK=$(`$ZodISODate`,(e,t)=>{t.pattern??=VG,SK.init(e,t)}),UK=$(`$ZodISOTime`,(e,t)=>{t.pattern??=UG(t),SK.init(e,t)}),WK=$(`$ZodISODuration`,(e,t)=>{t.pattern??=TG,SK.init(e,t)}),GK=$(`$ZodIPv4`,(e,t)=>{t.pattern??=jG,SK.init(e,t)}),KK=/^[0-9a-fA-F:.]+$/;function qK(e){return KK.test(e)?EK(`http://[${e}]`):!1}var JK=$(`$ZodIPv6`,(e,t)=>{t.pattern??=MG,SK.init(e,t),e._zod.check=n=>{qK(n.value)||n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}),YK=$(`$ZodCIDRv4`,(e,t)=>{t.pattern??=NG,SK.init(e,t)});function XK(e){let t=e.split(`/`);if(t.length!==2)return!1;let[n,r]=t;if(!r)return!1;let i=Number(r);return`${i}`!==r||i<0||i>128?!1:qK(n)}var ZK=$(`$ZodCIDRv6`,(e,t)=>{t.pattern??=PG,SK.init(e,t),e._zod.check=n=>{XK(n.value)||n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}});function QK(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var $K=/^[0-9a-zA-Z+/]*={0,2}$/,eq=$(`$ZodBase64`,(e,t)=>{t.pattern??=$K,SK.init(e,t),e._zod.check=n=>{QK(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}}),tq=/^[A-Za-z0-9_-]*$/;function nq(e){if(!tq.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return QK(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var rq=$(`$ZodBase64URL`,(e,t)=>{t.pattern??=tq,SK.init(e,t),e._zod.check=n=>{nq(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),iq=$(`$ZodE164`,(e,t)=>{t.pattern??=RG,SK.init(e,t)});function aq(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var oq=$(`$ZodJWT`,(e,t)=>{SK.init(e,t),e._zod.check=n=>{aq(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),sq=$(`$ZodNumber`,(e,t)=>{_K.init(e,t),e._zod.pattern=qG,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:String(i):void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),cq=$(`$ZodNumberFormat`,(e,t)=>{rK.init(e,t),sq.init(e,t)}),lq=$(`$ZodBoolean`,(e,t)=>{_K.init(e,t),e._zod.pattern=JG,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),uq=$(`$ZodUnknown`,(e,t)=>{_K.init(e,t),e._zod.parse=e=>e}),dq=$(`$ZodNever`,(e,t)=>{_K.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function fq(e,t,n){e.issues.length&&t.issues.push(...mW(n,e.issues)),t.value[n]=e.value}var pq=$(`$ZodArray`,(e,t)=>{_K.init(e,t);let n=HW.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({expected:`array`,code:`invalid_type`,input:a,inst:e}),r;r.value=n?n.alloc(e,r,Array(a.length),i):Array(a.length);let o=[],s=i?.abortEarly;for(let e=0;e<a.length;e++){let n=a[e],c=t.element._zod.run({value:n,issues:[]},i);if(c instanceof Promise)o.push(c.then(t=>fq(t,r,e)));else if(fq(c,r,e),s&&c.issues.length!==0&&fW(c))break}return o.length?Promise.all(o).then(()=>r):r}});function mq(e,t,n,r,i,a){let o=n in r,s=a===`optional`;if(o||!s||i!==`optional`){if(e.issues.length){if(i!==void 0&&s&&!o)return;t.issues.push(...mW(n,e.issues))}!o&&i===void 0?e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]}):e.value===void 0?(o||i===`defaulted`&&!s)&&(t.value[n]=void 0):t.value[n]=e.value}}var hq=[];function gq(e){let t=Object.keys(e.shape),n=Object.getOwnPropertySymbols(e.shape),r=n.length?n:hq,i=r.length?[...t,...r]:t;for(let t of i)if(!e.shape?.[t]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${String(t)}": expected a Zod schema`);let a=eW(e.shape);return{...e,allKeys:i,symbolKeys:r,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(a)}}function _q(e,t,n,r,i,a,o){let s=[],c=i.keySet,l=i.catchall._zod,u=l.def.type,d=l.optin,f=l.optout,p=0;for(let i in t){if(o&&n.issues.length!==p){if(fW(n,p))break;p=n.issues.length}if(c.has(i))continue;if(i===`__proto__`){u===`never`&&s.push(i);continue}if(u===`never`){s.push(i);continue}let a=l.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>mq(e,n,i,t,d,f))):mq(a,n,i,t,d,f)}return s.length&&n.issues.push({code:`unrecognized_keys`,keys:s,input:t,inst:a,continue:!0}),e.length?Promise.all(e).then(()=>n):n}var vq=$(`$ZodObject`,(e,t)=>{_K.init(e,t);let n=Object.getOwnPropertyDescriptor(t,`shape`),r=n?.get?n.get.raw:t.shape??{};if(r){let e=()=>{let n={...r};return Object.defineProperty(t,"shape",{value:n}),e.raw=n,n};e.raw=r,Object.defineProperty(t,"shape",{get:e})}let i=jU(()=>gq(t));MW(e,`propValues`,e=>{let t=e.def.shape,n={};for(let e in t){let r=t[e]._zod;if(r.values){Object.prototype.hasOwnProperty.call(n,e)||FU(n,e,new Set);for(let t of r.values)n[e].add(t);r.optin!==void 0&&n[e].add(void 0)}}return n});let a=KU,o=t.catchall,s,c=HW.memoizer;c?.attach(e),e._zod.parse=(t,n)=>{s??=i.value;let r=t.value;if(!a(r))return t.issues.push({expected:`object`,code:`invalid_type`,input:r,inst:e}),t;t.value=c?c.alloc(e,t,{},n):{};let l=[],u=s.shape,d=n?.abortEarly,f=t.issues.length;for(let e of s.allKeys){if(d&&t.issues.length!==f){if(fW(t,f))break;f=t.issues.length}if(e===`__proto__`)continue;let i=u[e],a=i._zod.optin,o=i._zod.optout,s=i._zod.run({value:r[e],issues:[]},n);s instanceof Promise?l.push(s.then(n=>mq(n,t,e,r,a,o))):mq(s,t,e,r,a,o)}return o?_q(l,r,t,n,i.value,e,d===!0):l.length?Promise.all(l).then(()=>t):t}}),yq=$(`$ZodObjectJIT`,(e,t)=>{vq.init(e,t);let n=e._zod.parse,r=jU(()=>gq(t)),i=HW.memoizer,a=t=>{let n=r.value,a=n.symbolKeys,o=new hK([`payload`,`ctx`],{shape:t,inst:e,memo:i,syms:a}),s=e=>`shape[${e}]._zod.run({ value: input[${e}], issues: [] }, ctx)`,c=(e,t)=>`
|
|
109
|
-
let ${e}_ab = false;
|
|
110
|
-
for (let i = 0; i < ${e}.issues.length; i++) {
|
|
111
|
-
const iss = ${e}.issues[i];
|
|
112
|
-
iss.path = iss.path ? [${t}, ...iss.path] : [${t}];
|
|
113
|
-
payload.issues.push(iss);
|
|
114
|
-
if (iss.continue !== true) ${e}_ab = true;
|
|
115
|
-
}
|
|
116
|
-
if (${e}_ab && ctx && ctx.abortEarly) {
|
|
117
|
-
payload.value = newResult;
|
|
118
|
-
return payload;
|
|
119
|
-
}`;o.write(`const input = payload.value;`);let l=Object.create(null),u=0;for(let e of n.allKeys)l[e]=`key_${u++}`;o.write(i?`const newResult = memo.alloc(inst, payload, {}, ctx);`:`const newResult = {};`);for(let e of n.allKeys){if(e===`__proto__`)continue;let n=l[e],r=typeof e==`symbol`?`syms[${a.indexOf(e)}]`:UU(e),i=`${r} in input`,u=t[e],d=u?._zod?.optin,f=d!==void 0,p=u?._zod?.optout===`optional`;if(o.write(`const ${n} = ${s(r)};`),f&&p){let e=d===`optional`?`${n}_present`:`${n}.value !== undefined || ${n}_present`;o.write(`
|
|
120
|
-
const ${n}_present = ${i};
|
|
121
|
-
if (!${n}.issues.length || ${n}_present) {
|
|
122
|
-
if (${n}.issues.length) {${c(n,r)}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
if (${e}) {
|
|
126
|
-
newResult[${r}] = ${n}.value;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
`)}else f?(o.write(`
|
|
131
|
-
if (${n}.issues.length) {${c(n,r)}
|
|
132
|
-
}
|
|
133
|
-
`),d===`defaulted`?o.write(`newResult[${r}] = ${n}.value;`):o.write(`
|
|
134
|
-
if (${n}.value !== undefined || ${i}) {
|
|
135
|
-
newResult[${r}] = ${n}.value;
|
|
136
|
-
}
|
|
137
|
-
`)):o.write(`
|
|
138
|
-
const ${n}_present = ${i};
|
|
139
|
-
if (${n}.issues.length) {${c(n,r)}
|
|
140
|
-
}
|
|
141
|
-
if (!${n}_present && !${n}.issues.length) {
|
|
142
|
-
payload.issues.push({
|
|
143
|
-
code: "invalid_type",
|
|
144
|
-
expected: "nonoptional",
|
|
145
|
-
input: undefined,
|
|
146
|
-
path: [${r}]
|
|
147
|
-
});
|
|
148
|
-
if (ctx && ctx.abortEarly) {
|
|
149
|
-
payload.value = newResult;
|
|
150
|
-
return payload;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
if (${n}_present) {
|
|
155
|
-
newResult[${r}] = ${n}.value;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
`)}return o.write(`payload.value = newResult;`),o.write(`return payload;`),o.compile()},o,s=KU,c=!HW.jitless,l=c&&qU.value,u=t.catchall,d;e._zod.parse=(i,f)=>{d??=r.value;let p=i.value;return s(p)?c&&l&&f?.async===!1&&f.jitless!==!0?(o||=a(t.shape),i=o(i,f),u?_q([],p,i,f,d,e,f?.abortEarly===!0):i):n(i,f):(i.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),i)}});function bq(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!fW(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>_W(e,r,UW())))}),t)}var xq=$(`$ZodUnion`,(e,t)=>{_K.init(e,t),MW(e,`optin`,e=>e.def.options.some(e=>e._zod.optin===`defaulted`)?`defaulted`:e.def.options.some(e=>e._zod.optin!==void 0)?`optional`:void 0),MW(e,`optout`,e=>e.def.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),MW(e,`values`,e=>{if(e.def.options.every(e=>e._zod.values))return new Set(e.def.options.flatMap(e=>Array.from(e._zod.values)))}),MW(e,`pattern`,e=>{if(e.def.options.every(e=>e._zod.pattern)){let t=e.def.options.map(e=>e._zod.pattern);return RegExp(`^(${t.map(e=>NU(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>bq(t,r,e,i)):bq(o,r,e,i)}});function Sq(e){let t=new Map;for(let n of e.options){let r=n._zod.propValues?.[e.discriminator];if(!r||r.size===0)throw Error(`Invalid discriminated union option at index "${e.options.indexOf(n)}"`);for(let e of r)if(t.has(e)){if(e!==void 0)throw Error(`Duplicate discriminator value "${String(e)}"`);t.set(e,null)}else t.set(e,n)}return t}var Cq=$(`$ZodDiscriminatedUnion`,(e,t)=>{t.inclusive=!1,xq.init(e,t);let n=e._zod.parse;MW(e,`propValues`,e=>{let t={},n=0;for(let r of e.def.options){let i=r._zod.propValues;if(!i||Object.keys(i).length===0)throw Error(`Invalid discriminated union option at index "${e.def.options.indexOf(r)}"`);i[e.def.discriminator]?.has(void 0)&&n++;for(let[e,n]of Object.entries(i)){Object.prototype.hasOwnProperty.call(t,e)||FU(t,e,new Set);for(let r of n)t[e].add(r)}}return!e.def.unionFallback&&n>1&&t[e.def.discriminator]?.delete(void 0),t}),t.options.forEach((e,n)=>{let r=IU(e._zod.def);if(r&&!Object.prototype.hasOwnProperty.call(r,t.discriminator))throw Error(`Invalid discriminated union option at index "${n}"`)});let r=jU(()=>Sq(t));e._zod.parse=(i,a)=>{let o=i.value;if(!KU(o))return i.issues.push({code:`invalid_type`,expected:`object`,input:o,inst:e}),i;let s=o?.[t.discriminator],c=r.value.get(s);return c&&(s!==void 0||a.direction!==`backward`)?c._zod.run(i,a):t.unionFallback||a.direction===`backward`?n(i,a):(i.issues.push({code:`invalid_union`,errors:[],note:`No matching discriminator`,discriminator:t.discriminator,options:Array.from(r.value.keys()).filter(e=>r.value.get(e)!==null),input:o,path:[t.discriminator],inst:e}),i)}}),wq=$(`$ZodIntersection`,(e,t)=>{_K.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>Eq(e,t,n)):Eq(e,i,a)}});function Tq(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(JU(e)&&JU(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};Object.prototype.hasOwnProperty.call(i,`__proto__`)&&delete i.__proto__;for(let n of r){if(n===`__proto__`)continue;let r=Tq(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=t[r],o=Tq(i,a);if(!o.valid)return{valid:!1,mergeErrorPath:[r,...o.mergeErrorPath]};n.push(o.data)}return{valid:!0,data:n}}return{valid:!1,mergeErrorPath:[]}}function Eq(e,t,n){let r=new Map,i,a=new Map,o=(e,t)=>{let n;if(e.code===`unrecognized_keys`&&!e.path?.length)i??=e,n=e.keys;else if(e.code===`invalid_key`&&e.origin===`record`&&e.path?.length===1){let t=String(e.path[0]);a.has(t)||a.set(t,e),n=[t]}else return!1;for(let e of n)r.has(e)||r.set(e,{}),r.get(e)[t]=!0;return!0};for(let n of t.issues)o(n,`l`)||e.issues.push(n);for(let t of n.issues)o(t,`r`)||e.issues.push(t);let s=[...r].filter(([,e])=>e.l&&e.r).map(([e])=>e);if(s.length){let t=i?s.filter(e=>i.keys.includes(e)):[];t.length&&e.issues.push({...i,keys:t});for(let n of s)!t.includes(n)&&a.has(n)&&e.issues.push(a.get(n))}let c=Tq(t.value,n.value);if(!c.valid){if(fW(e))return e;throw Error(`Unmergable intersection. Error path: ${JSON.stringify(c.mergeErrorPath)}`)}return e.value=c.data,e}var Dq=$(`$ZodRecord`,(e,t)=>{_K.init(e,t);let n=HW.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!JU(a))return r.issues.push({expected:`record`,code:`invalid_type`,input:a,inst:e}),r;let o=[],s=t.keyType._zod.values;if(s&&!t.partial){r.value=n?n.alloc(e,r,{},i):{};let c=new Set;for(let n of s)if(typeof n==`string`||typeof n==`number`||typeof n==`symbol`){if(c.add(typeof n==`number`?n.toString():n),n===`__proto__`)continue;let s=t.keyType._zod.run({value:n,issues:[]},i);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(s.issues.length){r.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>_W(e,i,UW())),input:n,path:[n],inst:e});continue}let l=s.value;if(l===`__proto__`)continue;let u=t.valueType._zod.run({value:a[n],issues:[]},i);u instanceof Promise?o.push(u.then(e=>{e.issues.length&&r.issues.push(...mW(n,e.issues)),r.value[l]=e.value})):(u.issues.length&&r.issues.push(...mW(n,u.issues)),r.value[l]=u.value)}let l;for(let e in a)if(!c.has(e)){if(t.mode===`loose`){if(e===`__proto__`)continue;r.value[e]=a[e]}else l??=[],l.push(e)}l&&l.length>0&&r.issues.push({code:`unrecognized_keys`,input:a,inst:e,keys:l,continue:!0})}else{r.value=n?n.alloc(e,r,{},i):{};let c;for(let n of Reflect.ownKeys(a)){if(n===`__proto__`||!Object.prototype.propertyIsEnumerable.call(a,n))continue;let l=t.keyType._zod.run({value:n,issues:[]},i);if(l instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof n==`string`&&qG.test(n)&&l.issues.length){let e=t.keyType._zod.run({value:Number(n),issues:[]},i);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(l=e)}if(l.issues.length){t.mode===`loose`?r.value[n]=a[n]:s?(c??=[],c.push(n)):r.issues.push({code:`invalid_key`,origin:`record`,issues:l.issues.map(e=>_W(e,i,UW())),input:n,path:[n],inst:e});continue}let u=l.value;if(u===`__proto__`)continue;let d=t.valueType._zod.run({value:a[n],issues:[]},i);d instanceof Promise?o.push(d.then(e=>{e.issues.length&&r.issues.push(...mW(n,e.issues)),r.value[u]=e.value})):(d.issues.length&&r.issues.push(...mW(n,d.issues)),r.value[u]=d.value)}c&&c.length>0&&r.issues.push({code:`unrecognized_keys`,input:a,inst:e,keys:c,continue:!0})}return o.length?Promise.all(o).then(()=>r):r}}),Oq=$(`$ZodEnum`,(e,t)=>{_K.init(e,t);let n=DU(t.entries),r=new Set(n);e._zod.values=r,MW(e,`pattern`,e=>{let t=DU(e.def.entries).filter(e=>XU.has(typeof e));return RegExp(t.length?`^(${t.map(e=>ZU(e.toString())).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),kq=$(`$ZodLiteral`,(e,t)=>{_K.init(e,t);let n=new Set(t.values);e._zod.values=n,MW(e,`pattern`,e=>{let t=e.def.values;return RegExp(t.length?`^(${t.map(e=>typeof e==`string`?ZU(e):e?ZU(e.toString()):String(e)).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),Aq=$(`$ZodTransform`,(e,t)=>{_K.init(e,t),e._zod.optin=`optional`,HW.memoizer?.guard(e),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new VW(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n));if(i instanceof Promise)throw new BW;return n.value=i,n}});function jq(e,t){return e.value=t.issues.length?void 0:t.value,e}var Mq=$(`$ZodOptional`,(e,t)=>{_K.init(e,t),MW(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),e._zod.optout=`optional`,MW(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t,void 0]):void 0}),MW(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${NU(t.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(e.value===void 0){if(t.innerType._zod.optin!==`defaulted`)return e;let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(t=>jq(e,t)):jq(e,r)}return t.innerType._zod.run(e,n)}}),Nq=$(`$ZodExactOptional`,(e,t)=>{Mq.init(e,t),MW(e,`values`,e=>e.def.innerType._zod.values),MW(e,`pattern`,e=>e.def.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),Pq=$(`$ZodNullable`,(e,t)=>{_K.init(e,t),MW(e,`optin`,e=>e.def.innerType._zod.optin),MW(e,`optout`,e=>e.def.innerType._zod.optout),MW(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${NU(t.source)}|null)$`):void 0}),MW(e,`values`,e=>e.def.innerType._zod.values?new Set([...e.def.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),Fq=$(`$ZodDefault`,(e,t)=>{_K.init(e,t),e._zod.optin=`defaulted`,MW(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>Iq(e,t)):Iq(r,t)}});function Iq(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var Lq=$(`$ZodPrefault`,(e,t)=>{_K.init(e,t),e._zod.optin=`defaulted`,MW(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),Rq=$(`$ZodNonOptional`,(e,t)=>{_K.init(e,t),MW(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>zq(t,e)):zq(i,e)}});function zq(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}function Bq(e,t,n,r){return t.issues.length?(e.value=n.catchValue({...t,value:e.value,error:{issues:t.issues.map(e=>_W(e,r,UW()))},input:e.value}),e):(e.value=t.value,t.memo&&(e.memo=!0),e)}var Vq=$(`$ZodCatch`,(e,t)=>{_K.init(e,t),MW(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),MW(e,`optout`,e=>e.def.innerType._zod.optout),MW(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(r=>Bq(e,r,t,n)):Bq(e,r,t,n)}}),Hq=$(`$ZodPipe`,(e,t)=>{_K.init(e,t),MW(e,`values`,e=>e.def.in._zod.values),MW(e,`optin`,e=>e.def.in._zod.optin),MW(e,`optout`,e=>e.def.out._zod.optout),MW(e,`propValues`,e=>e.def.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>Uq(e,t.in,n)):Uq(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>Uq(e,t.out,n)):Uq(r,t.out,n)}});function Uq(e,t,n){return e.issues.some(e=>e.code!==`unrecognized_keys`)?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues},n)}var Wq=$(`$ZodReadonly`,(e,t)=>{_K.init(e,t),MW(e,`propValues`,e=>e.def.innerType._zod.propValues),MW(e,`values`,e=>e.def.innerType._zod.values),MW(e,`optin`,e=>e.def.innerType?._zod?.optin),MW(e,`optout`,e=>e.def.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(Gq):Gq(r)}});function Gq(e){return e.memo||(e.value=Object.freeze(e.value)),e}var Kq=$(`$ZodCustom`,(e,t)=>{ZG.init(e,t),_K.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>qq(t,n,r,e));qq(i,n,r,e)}});function qq(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(SW(e))}}var Jq=class extends Error{constructor(){super(`Cannot parse a reference cycle that closes through a transform`),this.name=`ZodCyclicError`}},Yq=`~memo`,Xq=[];function Zq(e){return typeof e==`object`&&!!e}function Qq(e){return e.map(e=>e.path?{...e,path:e.path.slice()}:{...e})}var $q=new WeakMap,eJ=0,tJ=1,nJ=2;function rJ(e,t,n){let r=$q.get(e);if(r!==void 0)return r?nJ:eJ;if(t.has(e))return nJ;t.add(e);let i=eJ,a=e=>{if(i!==nJ&&e?._zod){let r=rJ(e,t,n);r>i&&(i=r)}},o=(e,r)=>{let i=eJ;for(let a of Reflect.ownKeys(e)){let o=Object.getOwnPropertyDescriptor(e,a);if(r&&!o.enumerable)continue;let s=o.get?tJ:o.value?._zod?rJ(o.value,t,n):eJ;s>i&&(i=s)}return i},s=e=>{e>i&&(i=e)},c=e._zod.def;switch(c.type){case`object`:{let e=IU(c);s(e?o(e,!0):tJ),a(c.catchall);break}case`array`:a(c.element);break;case`tuple`:for(let e of c.items)a(e);a(c.rest);break;case`record`:case`map`:a(c.keyType),a(c.valueType);break;case`set`:a(c.valueType);break;case`union`:for(let e of c.options)a(e);break;case`intersection`:a(c.left),a(c.right);break;case`optional`:case`nullable`:case`default`:case`prefault`:case`catch`:case`readonly`:case`nonoptional`:case`promise`:case`success`:a(c.innerType);break;case`pipe`:a(c.in),a(c.out);break;case`function`:a(c.input),a(c.output);break;case`lazy`:{let r=c._cachedInner??(n?e._zod.innerType:void 0);s(r?rJ(r,t,!1):tJ);break}case`template_literal`:case`string`:case`number`:case`int`:case`boolean`:case`bigint`:case`symbol`:case`undefined`:case`null`:case`void`:case`never`:case`any`:case`unknown`:case`date`:case`nan`:case`enum`:case`literal`:case`file`:case`transform`:case`custom`:break;default:for(let e in c){let t=Object.getOwnPropertyDescriptor(c,e);if(!t||t.get)continue;let n=t.value;if(n&&typeof n==`object`){if(n._zod)a(n);else if(Array.isArray(n))for(let e of n)a(e)}}}return t.delete(e),iJ(e,i)}function iJ(e,t){return t!==tJ&&$q.set(e,t===nJ),t}function aJ(e,t){let n=e.buckets.get(t);return n||(n=new WeakMap,e.buckets.set(t,n)),n}var oJ,sJ=[],cJ={alloc(e,t,n){let r=oJ;if(!r)return n;oJ=void 0;let i={value:n,issues:null};return r.set(t.value,i),sJ.push(i),n},guard(e){var t;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,n=(e,n)=>{if(n.direction!==`backward`&&uJ(n,e.value))throw new Jq;return t(e,n)};e._zod.parse=n,e._zod.run===t&&(e._zod.run=n)})},attach(e){var t;let n,r=!1,i,a;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,o=(s,c)=>{if(n===void 0){let i=rJ(e,new Set,!1);if(i===eJ)return e._zod.parse=t,e._zod.run===o&&(e._zod.run=t),t(s,c);i===nJ||r?n=!0:r=!0}let l=s.value;if(!Zq(l))return t(s,c);let u=c[Yq];u||(u={buckets:new WeakMap,backEdges:void 0},c[Yq]=u);let d;i===c?d=a:(d=aJ(u,e),i=c,a=d);let f=d.get(l);if(f)return s.value=f.value,f.issues?f.issues.length&&s.issues.push(...Qq(f.issues)):(s.memo=!0,u.backEdges??(u.backEdges=new WeakSet),u.backEdges.add(f.value)),s;oJ=d;let p=sJ.length,m=t(s,c);oJ=void 0;let h=sJ.length>p?sJ.pop():void 0;return m instanceof Promise?m.then(e=>(h&&(h.issues=e.issues.length?Qq(e.issues):Xq),e)):(h&&(h.issues=m.issues.length?Qq(m.issues):Xq),m)};e._zod.parse=o,e._zod.run===t&&(e._zod.run=o)})}};function lJ(){return cJ}function uJ(e,t){let n=e[Yq]?.backEdges;return n!==void 0&&Zq(t)&&n.has(t)}var dJ=()=>{let e={string:{unit:`characters`,verb:`to have`},file:{unit:`bytes`,verb:`to have`},array:{unit:`items`,verb:`to have`},set:{unit:`items`,verb:`to have`},map:{unit:`entries`,verb:`to have`}};function t(t){return e[t]??null}let n={regex:`input`,email:`email address`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO datetime`,date:`ISO date`,time:`ISO time`,duration:`ISO duration`,ipv4:`IPv4 address`,ipv6:`IPv6 address`,mac:`MAC address`,cidrv4:`IPv4 range`,cidrv6:`IPv6 range`,base64:`base64-encoded string`,base64url:`base64url-encoded string`,json_string:`JSON string`,e164:`E.164 number`,currency_code:`currency code`,credit_card:`credit card number`,iban:`IBAN`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`};function i(e,t){return e===`number`&&typeof t==`number`&&!Number.isFinite(t)?String(t):r[e]??e}return e=>{switch(e.code){case`invalid_type`:return`Invalid input: expected ${i(e.expected)}, received ${i(xW(e.input),e.input)}`;case`invalid_value`:return e.values.length===1?`Invalid input: expected ${$U(e.values[0])}`:`Invalid option: expected one of ${OU(e.values,`|`)}`;case`too_big`:{let n=e.exact?`exactly `:e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Too big: expected ${e.origin??`value`} to have ${n}${e.maximum.toString()} ${r.unit??`elements`}`:`Too big: expected ${e.origin??`value`} to be ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.exact?`exactly `:e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Too small: expected ${e.origin} to have ${n}${e.minimum.toString()} ${r.unit}`:`Too small: expected ${e.origin} to be ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Invalid string: must start with "${t.prefix}"`:t.format===`ends_with`?`Invalid string: must end with "${t.suffix}"`:t.format===`includes`?`Invalid string: must include "${t.includes}"`:t.format===`regex`?`Invalid string: must match pattern ${t.pattern}`:`Invalid ${n[t.format]??e.format}`}case`not_multiple_of`:return`Invalid number: must be a multiple of ${e.divisor}`;case`unrecognized_keys`:return`Unrecognized key${e.keys.length>1?`s`:``}: ${OU(e.keys,`, `)}`;case`invalid_key`:return`Invalid key in ${e.origin}`;case`invalid_union`:return e.options&&Array.isArray(e.options)&&e.options.length>0?`Invalid discriminator value. Expected ${e.options.map(e=>`'${e}'`).join(` | `)}`:e.inclusive===!1?`Invalid input: more than one option matched`:`Invalid input`;case`invalid_element`:return`Invalid value in ${e.origin}`;default:return`Invalid input`}}};function fJ(){return{localeError:dJ()}}var pJ,mJ=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function hJ(){return new mJ}(pJ=globalThis).__zod_globalRegistry??(pJ.__zod_globalRegistry=hJ());var gJ=globalThis.__zod_globalRegistry;function _J(e){return e.checks&&=[...e.checks],e}function vJ(e,t){return new e(_J({type:`string`,...Q(t)}))}function yJ(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...Q(t)})}function bJ(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...Q(t)})}function xJ(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...Q(t)})}function SJ(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...Q(t)})}function CJ(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...Q(t)})}function wJ(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...Q(t)})}function TJ(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...Q(t)})}function EJ(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...Q(t)})}function DJ(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...Q(t)})}function OJ(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...Q(t)})}function kJ(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...Q(t)})}function AJ(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...Q(t)})}function jJ(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...Q(t)})}function MJ(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...Q(t)})}function NJ(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...Q(t)})}function PJ(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...Q(t)})}function FJ(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...Q(t)})}function IJ(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...Q(t)})}function LJ(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...Q(t)})}function RJ(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...Q(t)})}function zJ(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...Q(t)})}function BJ(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...Q(t)})}function VJ(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...Q(t)})}function HJ(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...Q(t)})}function UJ(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...Q(t)})}function WJ(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...Q(t)})}function GJ(e,t){return new e(_J({type:`number`,checks:[],...Q(t)}))}function KJ(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...Q(t)})}function qJ(e,t){return new e({type:`boolean`,...Q(t)})}function JJ(e){return new e({type:`unknown`})}function YJ(e,t){return new e({type:`never`,...Q(t)})}function XJ(e,t){return new eK({check:`less_than`,...Q(t),value:e,inclusive:!1})}function ZJ(e,t){return new eK({check:`less_than`,...Q(t),value:e,inclusive:!0})}function QJ(e,t){return new tK({check:`greater_than`,...Q(t),value:e,inclusive:!1})}function $J(e,t){return new tK({check:`greater_than`,...Q(t),value:e,inclusive:!0})}function eY(e,t){return new nK({check:`multiple_of`,...Q(t),value:e})}function tY(e,t){return new iK({check:`max_length`,...Q(t),maximum:e})}function nY(e,t){return new aK({check:`min_length`,...Q(t),minimum:e})}function rY(e,t){return new oK({check:`length_equals`,...Q(t),length:e})}function iY(e,t){return new cK({check:`string_format`,format:`regex`,...Q(t),pattern:e})}function aY(e){return new lK({check:`string_format`,format:`lowercase`,...Q(e)})}function oY(e){return new uK({check:`string_format`,format:`uppercase`,...Q(e)})}function sY(e,t){return new dK({check:`string_format`,format:`includes`,...Q(t),includes:e})}function cY(e,t){return new fK({check:`string_format`,format:`starts_with`,...Q(t),prefix:e})}function lY(e,t){return new pK({check:`string_format`,format:`ends_with`,...Q(t),suffix:e})}function uY(e){return new mK({check:`overwrite`,tx:e})}function dY(e){return uY(t=>t.normalize(e))}function fY(){return uY(e=>e.trim())}function pY(){return uY(e=>e.toLowerCase())}function mY(){return uY(e=>e.toUpperCase())}function hY(){return uY(e=>WU(e))}function gY(e,t,n){return new e({type:`array`,element:t,...Q(n)})}function _Y(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...Q(n)})}function vY(e,t){let n=yY(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(SW(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,`input`in r||(r.input=t.value),r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(SW(r))}},e(t.value,t)),t);return n}function yY(e,t){let n=new ZG({check:`custom`,...Q(t)});return n._zod.check=e,n}function bY(e,...t){for(let n of t)for(let t of Reflect.ownKeys(n))Object.prototype.propertyIsEnumerable.call(n,t)&&FU(e,t,n[t]);return e}function xY(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??gJ,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,sharedDefsExtractedFor:void 0,sharedEmitDoneFor:void 0,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,intersections:[],deferred:[],external:e?.external??void 0}}function SY(e,t,n,r,i){let a=typeof t.unrepresentable==`function`?t.unrepresentable({zodSchema:e,path:r.path,message:i}):t.unrepresentable;if(a===`any`)return!1;if(a===void 0||a===`throw`)throw Error(i);return Object.assign(n,a),!0}function CY(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o),t.sharedDefsExtractedFor=void 0,t.sharedEmitDoneFor=void 0;let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,CY(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&bY(o.schema,c),t.io===`input`&&NY(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function wY(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function TY(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);if(e.external&&e.sharedDefsExtractedFor===e.external)return;let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${wY(a)}`}}let i=`#/${r}/`;if(t[1]===n&&!t[1].schema.id)return{ref:`#`};let a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+wY(a)}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/<root>
|
|
159
|
-
|
|
160
|
-
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0])a(n);else{if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}(e.metadataRegistry.get(n[0])?.id||r.cycle||r.count>1&&e.reused===`ref`)&&a(n)}}e.external&&(e.sharedDefsExtractedFor=e.external)}function EY(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let n=[];for(let e of t){if(!e||typeof e!=`object`)return;EY(e);let t=Object.keys(e);if(t.length!==1||t[0]!==`type`)return;let r=e.type;for(let e of Array.isArray(r)?r:[r]){if(typeof e!=`string`)return;n.includes(e)||n.push(e)}}delete e.anyOf,e.type=n.length===1?n[0]:n}var DY=new Set([`type`,`properties`,`required`,`additionalProperties`]),OY=[`oneOf`,`anyOf`];function kY(e){let t=e.additionalProperties;return t===void 0||t===!1||typeof t!=`object`||!t?null:Object.keys(t).length?t:null}function AY(e){let t=[];for(let n of e){if(typeof n!=`object`||n.type!==`object`)return null;for(let e in n)if(!DY.has(e))return null;t.push(n)}let n={},r=new Set;for(let e of t){for(let r in e.properties){if(Object.prototype.hasOwnProperty.call(n,r))continue;let e=[];for(let n of t){let t=n.properties?.[r]??kY(n);t!=null&&(e.some(e=>JSON.stringify(e)===JSON.stringify(t))||e.push(t))}FU(n,r,e.length===1?e[0]:AY(e)??{allOf:e})}for(let t of e.required??[])r.add(t)}let i={type:`object`,properties:n};if(r.size&&(i.required=[...r]),t.every(e=>e.additionalProperties===!1))i.additionalProperties=!1;else{let e=[];for(let n of t){let t=kY(n);t&&!e.some(e=>JSON.stringify(e)===JSON.stringify(t))&&e.push(t)}e.length===1?i.additionalProperties=e[0]:e.length>1&&(i.additionalProperties={allOf:e})}return i}function jY(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let t of DY)if(t in e)return;let n=t.filter(e=>OY.some(t=>Array.isArray(e[t]))),r=null;if(!n.length)r=AY(t);else{let e=n[0],i=OY.find(t=>Array.isArray(e[t]));if(Object.keys(e).length!==1)return;let a=t.filter(t=>t!==e),o=e[i].map(e=>AY([...a,e]));if(o.some(e=>!e))return;r={[i]:o}}r&&(delete e.allOf,bY(e,r))}function MY(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):bY(i,s),bY(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let t of[...e.seen.entries()].reverse())r(t[0]);if(e.target!==`openapi-3.0`)for(let t of e.seen.entries())EY(t[1].def??t[1].schema);for(let t of e.deferred)t();if(e.intersections.length){let t=new Map;for(let n of e.seen.values())for(let e of[n.schema,n.def]){let n=e?.allOf;if(!Array.isArray(n))continue;let r=t.get(n);r?r.push(e):t.set(n,[e])}for(let n of e.intersections)for(let e of t.get(n)??[])jY(e)}}let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}bY(i,n.defId?n.schema:n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,FU(o,e.defId,e.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:FY(t,`input`,e.processors),output:FY(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function NY(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return NY(r.element,n);if(r.type===`set`)return NY(r.valueType,n);if(r.type===`lazy`)return NY(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`||r.type===`catch`)return NY(r.innerType,n);if(r.type===`intersection`)return NY(r.left,n)||NY(r.right,n);if(r.type===`record`||r.type===`map`)return NY(r.keyType,n)||NY(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:NY(r.in,n)||NY(r.out,n);if(r.type===`object`){for(let e in r.shape)if(NY(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(NY(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(NY(e,n))return!0;return!!(r.rest&&NY(r.rest,n))}return!1}var PY=(e,t={})=>n=>{let r=xY({...n,processors:t});return CY(e,r),TY(r,e),MY(r,e)},FY=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=xY({...i??{},target:a,io:t,processors:n});return CY(e,o),TY(o,e),MY(o,e)},IY=(e,t,n)=>{(e[t]===void 0||n>e[t])&&(e[t]=n)},LY=(e,t,n)=>{(e[t]===void 0||n<e[t])&&(e[t]=n)},RY=(e,t)=>{IY(e,`minimum`,t),LY(e,`maximum`,t)},zY=(e,t)=>{e.multipleOf??=[],e.multipleOf.includes(t)||e.multipleOf.push(t)},BY=(e,t)=>{e.patterns??=new Set,e.patterns.add(t)},VY=(e,t)=>{e.mime=e.mime?e.mime.filter(e=>t.includes(e)):[...t]},HY=(e,t)=>{e.format=t,t.includes(`int`)&&(e.isInt=!0)},UY=(e,t)=>IY(e,`minimum`,t.minimum),WY=(e,t)=>LY(e,`maximum`,t.maximum),GY=e=>(t,n)=>{HY(t,n.format);let[r,i]=e[n.format];IY(t,`minimum`,r),LY(t,`maximum`,i)},KY={greater_than:(e,t)=>IY(e,t.inclusive?`minimum`:`exclusiveMinimum`,t.value),less_than:(e,t)=>LY(e,t.inclusive?`maximum`:`exclusiveMaximum`,t.value),multiple_of:(e,t)=>zY(e,t.value),number_format:GY(tW),bigint_format:GY(nW),min_length:UY,max_length:WY,length_equals:(e,t)=>RY(e,t.length),min_size:UY,max_size:WY,size_equals:(e,t)=>RY(e,t.size),string_format:(e,t)=>{HY(e,t.format),t.pattern&&BY(e,t.pattern),(t.format===`base64`||t.format===`base64url`)&&(e.contentEncoding=t.format),(t.local||t.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,t)=>VY(e,t.mime)};function qY(e){let t={},n=e._zod.def,r=e._zod.traits.has(`$ZodCheck`)?[e,...n.checks??[]]:n.checks??[];for(let e of r)KY[e._zod.def.check]?.(t,e._zod.def);let i=e._zod.bag;i.minimum!==void 0&&IY(t,`minimum`,i.minimum),i.exclusiveMinimum!==void 0&&IY(t,`exclusiveMinimum`,i.exclusiveMinimum),i.maximum!==void 0&&LY(t,`maximum`,i.maximum),i.exclusiveMaximum!==void 0&&LY(t,`exclusiveMaximum`,i.exclusiveMaximum),i.multipleOf!==void 0&&zY(t,i.multipleOf),i.format!==void 0&&(t.format??=i.format,i.format.includes(`int`)&&(t.isInt=!0)),i.mime&&VY(t,i.mime);for(let e of i.patterns??[])BY(t,e);return t}var JY={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},YY=new Map([[$K,FG],[tq,IG]]),XY=e=>YY.get(e)??e,ZY=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l,laxFormat:u}=qY(e);if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=JY[s]??s,i.format===``&&delete i.format,(s===`time`||u)&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c].map(XY);e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},QY=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,multipleOf:s,exclusiveMaximum:c,exclusiveMinimum:l,isInt:u}=qY(e);i.type=u?`integer`:`number`;let d=typeof l==`number`&&l>=(a??-1/0),f=typeof c==`number`&&c<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;if(d?p?(i.minimum=l,i.exclusiveMinimum=!0):i.exclusiveMinimum=l:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=c,i.exclusiveMaximum=!0):i.exclusiveMaximum=c:typeof o==`number`&&(i.maximum=o),s){let n=new Set;for(let a of s)Number.isFinite(a)&&a!==0?n.add(Math.abs(a)):SY(e,t,i,r,`A multipleOf divisor of ${a} cannot be represented in JSON Schema`);let[a,...o]=n;a!==void 0&&(i.multipleOf=a),o.length&&(i.allOf=[...i.allOf??[],...o.map(e=>({multipleOf:e}))])}},$Y=(e,t,n,r)=>{n.type=`boolean`},eX=(e,t,n,r)=>{n.not={}},tX=(e,t,n,r)=>{let i=e._zod.def,a=DU(i.entries);a.length===0?n.not={}:(a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a)},nX=(e,t,n,r)=>{let i=e._zod.def;if(i.values.length===0){n.not={};return}let a=[];for(let o of i.values)if(o===void 0){if(SY(e,t,n,r,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof o==`bigint`){if(SY(e,t,n,r,`BigInt literals cannot be represented in JSON Schema`))return;a.push(Number(o))}else a.push(o);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},rX=(e,t,n,r)=>{SY(e,t,n,r,`Custom types cannot be represented in JSON Schema`)},iX=(e,t,n,r)=>{SY(e,t,n,r,`Transforms cannot be represented in JSON Schema`)},aX=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=qY(e);typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=CY(a.element,t,{...r,path:[...r.path,`items`]})};function oX(e){let t=e._zod.def;return t.type===`pipe`&&t.in._zod.traits.has(`$ZodTransform`)?oX(t.out):t.type===`catch`?oX(t.innerType):e._zod.optin}var sX=(e,t,n,r)=>{let i=n,a=e._zod.def,o=a.shape;if(Object.getOwnPropertySymbols(o).length&&SY(e,t,i,r,`Symbol keys cannot be represented in JSON Schema`))return;i.type=`object`,i.properties={};for(let e in o)FU(i.properties,e,CY(o[e],t,{...r,path:[...r.path,`properties`,e]}));let s=[];for(let e of Object.keys(o)){let n=a.shape[e];(t.io===`input`?oX(n)===void 0:n._zod.optout===void 0)&&s.push(e)}s.length>0&&(i.required=s),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=CY(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},cX=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>CY(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},lX=(e,t,n,r)=>{let i=e._zod.def,a=CY(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=CY(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1,c=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]];n.allOf=c,t.intersections.push(c)};function uX(e,t,n){if(t.$ref){if(n.has(t))return t;n.add(t);let r=e.get(t)?.def;if(!r)return t;let i=uX(e,r,n);return i===r?t:i}for(let r of[`anyOf`,`oneOf`]){let i=t[r];if(!Array.isArray(i))continue;let a=i.map(t=>uX(e,t,n));a.some((e,t)=>e!==i[t])&&(t={...t,[r]:a})}let r=Array.isArray(t.type)?t.type:[t.type],i=!r.includes(`string`)&&r.some(e=>e===`number`||e===`integer`),a=t.enum??(t.const===void 0?void 0:[t.const]);if(!i&&!a?.some(e=>typeof e==`number`))return t;let{minimum:o,maximum:s,exclusiveMinimum:c,exclusiveMaximum:l,multipleOf:u,format:d,id:f,...p}=t;return p.enum?p.enum=p.enum.map(e=>typeof e==`number`?String(e):e):typeof p.const==`number`&&(p.const=String(p.const)),i&&(p.type=`string`,a||(p.pattern=(r.includes(`number`)?qG:KG).source)),p}var dX=new WeakMap;function fX(e){let t=new Map;for(let n of e.seen.values())n.def&&!t.has(n.schema)&&t.set(n.schema,n);let n=new Map;for(let r of dX.get(e)??[]){let i=e.seen.get(r),a=(i?.def??i?.schema)?.propertyNames;if(!a||a===!0||n.has(a))continue;let o=uX(t,a,new Set);o!==a&&n.set(a,o)}if(n.size)for(let t of e.seen.values())for(let e of[t.schema,t.def]){let t=e&&n.get(e.propertyNames);t&&(e.propertyNames=t)}}var pX=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=qY(o).patterns;if(a.mode===`loose`&&s&&s.size>0){let e=CY(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)FU(i.patternProperties,XY(t).source,e)}else{if(t.target===`draft-07`||t.target===`draft-2020-12`){i.propertyNames=CY(a.keyType,t,{...r,path:[...r.path,`propertyNames`]});let n=dX.get(t);n||(n=[],dX.set(t,n),t.deferred.push(()=>fX(t))),n.push(e)}i.additionalProperties=CY(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]})}let c=o._zod.values,l=t.io===`input`&&oX(a.valueType)!==void 0;if(c&&!a.partial&&!l){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e.map(String))}},mX=(e,t,n,r)=>{let i=e._zod.def,a=CY(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},hX=(e,t,n,r)=>{let i=e._zod.def;CY(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},gX=Symbol();function _X(e,t,n,r,i){let a=!1,o=JSON.stringify(e,(e,t)=>typeof t==`bigint`?(a=!0,null):t);return a?(SY(t,n,r,i,`BigInt defaults cannot be represented in JSON Schema`),gX):JSON.parse(o)}var vX=(e,t,n,r)=>{let i=e._zod.def;CY(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o=_X(i.defaultValue,e,t,n,r);o!==gX&&(n.default=o)},yX=(e,t,n,r)=>{let i=e._zod.def;CY(i.innerType,t,r);let a=t.seen.get(e);if(a.ref=i.innerType,t.io!==`input`)return;let o=_X(i.defaultValue,e,t,n,r);o!==gX&&(n._prefault=o)},bX=(e,t,n,r)=>{let i=e._zod.def;CY(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{SY(e,t,n,r,`Dynamic catch values are not supported in JSON Schema`);return}n.default=o},xX=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;CY(o,t,r);let s=t.seen.get(e);s.ref=o},SX=(e,t,n,r)=>{let i=e._zod.def;CY(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},CX=(e,t,n,r)=>{let i=e._zod.def;CY(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},wX=new WeakSet([Object.prototype,Error.prototype]);function TX(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let e=n(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0})}})}var EX=$(`ZodError`,(e,t)=>{YW.init(e,t),e.name=`ZodError`;let n=Object.getPrototypeOf(e);wX.has(n)||(wX.add(n),TX(n,`format`,e=>t=>QW(e,t)),TX(n,`flatten`,e=>t=>ZW(e,t)),TX(n,`addIssue`,e=>t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,kU,2)}),TX(n,`addIssues`,e=>t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,kU,2)}),Object.defineProperty(n,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},void 0,{Parent:Error}),DX=eG(EX),OX=tG(EX),kX=nG(EX),AX=iG(EX),jX=uG(EX),MX=dG(EX),NX=fG(EX),PX=pG(EX),FX=mG(EX),IX=hG(EX),LX=gG(EX),RX=_G(EX);function zX(){HW.localeError||UW(fJ())}function BX(){HW.memoizer||UW({memoizer:lJ()})}var VX=$(`ZodType`,(e,t)=>(zX(),_K.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(HU(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return QU(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(lQ(e,t))},superRefine(e,t){return this.check(uQ(e,t))},overwrite(e){return this.check(uY(e))},optional(){return GZ(this)},exactOptional(){return qZ(this)},nullable(){return YZ(this)},nullish(){return GZ(YZ(this))},nonoptional(e){return tQ(this,e)},array(){return EZ(this)},or(e){return jZ([this,e])},and(e){return FZ(this,e)},transform(e){return aQ(this,UZ(e))},default(e){return ZZ(this,e)},prefault(e){return $Z(this,e)},catch(e){return rQ(this,e)},pipe(e){return aQ(this,e)},readonly(){return sQ(this)},describe(e){let t=this.clone();return gJ.add(t,{description:e}),t},meta(...e){if(e.length===0)return gJ.get(this);let t=this.clone();return gJ.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get"~standard"(){return TW(this,`~standard`,{...bK(this),jsonSchema:{input:FY(this,`input`),output:FY(this,`output`)}})},set"~standard"(e){wW(this,`~standard`,e)},parse:function e(t,n){return DX(this,t,n,{callee:e})},parseAsync:async function e(t,n){return await OX(this,t,n,{callee:e})},safeParse(e,t){return kX(this,e,t)},async safeParseAsync(e,t){return AX(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){wW(this,`spa`,e)},validate(e,t){return sG(this,e,t)},validateAsync(e,t){return lG(this,e,t)},encode:function e(t,n){return jX(this,t,n,{callee:e})},decode:function e(t,n){return MX(this,t,n,{callee:e})},encodeAsync:async function e(t,n){return await NX(this,t,n,{callee:e})},decodeAsync:async function e(t,n){return await PX(this,t,n,{callee:e})},safeEncode(e,t){return FX(this,e,t)},safeDecode(e,t){return IX(this,e,t)},async safeEncodeAsync(e,t){return LX(this,e,t)},async safeDecodeAsync(e,t){return RX(this,e,t)},toJSONSchema(e){return PY(this,{})(e)},get description(){return gJ.get(this)?.description},get _def(){return this._zod.def}}),HX=$(`_ZodString`,(e,t)=>{xK.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ZY(e,t,n,r)},EW({format:e=>qY(e).format??null,minLength:e=>qY(e).minimum??null,maxLength:e=>qY(e).maximum??null},{regex(...e){return this.check(iY(...e))},includes(...e){return this.check(sY(...e))},startsWith(...e){return this.check(cY(...e))},endsWith(...e){return this.check(lY(...e))},min(...e){return this.check(nY(...e))},max(...e){return this.check(tY(...e))},length(...e){return this.check(rY(...e))},nonempty(...e){return this.check(nY(1,...e))},lowercase(e){return this.check(aY(e))},uppercase(e){return this.check(oY(e))},trim(){return this.check(fY())},normalize(...e){return this.check(dY(...e))},toLowerCase(){return this.check(pY())},toUpperCase(){return this.check(mY())},slugify(){return this.check(hY())}})),UX=$(`ZodString`,(e,t)=>{xK.init(e,t),HX.init(e,t)},{email(e){return this.check(yJ(XX,e))},url(e){return this.check(TJ($X,e))},jwt(e){return this.check(BJ(mZ,e))},emoji(e){return this.check(EJ(eZ,e))},guid(e){return this.check(bJ(ZX,e))},uuid(e){return this.check(xJ(QX,e))},uuidv4(e){return this.check(SJ(QX,e))},uuidv6(e){return this.check(CJ(QX,e))},uuidv7(e){return this.check(wJ(QX,e))},nanoid(e){return this.check(DJ(tZ,e))},cuid(e){return this.check(OJ(nZ,e))},cuid2(e){return this.check(kJ(rZ,e))},ulid(e){return this.check(AJ(iZ,e))},base64(e){return this.check(LJ(dZ,e))},base64url(e){return this.check(RJ(fZ,e))},xid(e){return this.check(jJ(aZ,e))},ksuid(e){return this.check(MJ(oZ,e))},ipv4(e){return this.check(NJ(sZ,e))},ipv6(e){return this.check(PJ(cZ,e))},cidrv4(e){return this.check(FJ(lZ,e))},cidrv6(e){return this.check(IJ(uZ,e))},e164(e){return this.check(zJ(pZ,e))},datetime(e){return this.check(VJ(KX,e))},date(e){return this.check(HJ(qX,e))},time(e){return this.check(UJ(JX,e))},duration(e){return this.check(WJ(YX,e))}});function WX(e){return vJ(UX,e)}var GX=$(`ZodStringFormat`,(e,t)=>{SK.init(e,t),HX.init(e,t)}),KX=$(`ZodISODateTime`,(e,t)=>{VK.init(e,t),GX.init(e,t)}),qX=$(`ZodISODate`,(e,t)=>{HK.init(e,t),GX.init(e,t)}),JX=$(`ZodISOTime`,(e,t)=>{UK.init(e,t),GX.init(e,t)}),YX=$(`ZodISODuration`,(e,t)=>{WK.init(e,t),GX.init(e,t)}),XX=$(`ZodEmail`,(e,t)=>{TK.init(e,t),GX.init(e,t)}),ZX=$(`ZodGUID`,(e,t)=>{CK.init(e,t),GX.init(e,t)}),QX=$(`ZodUUID`,(e,t)=>{wK.init(e,t),GX.init(e,t)}),$X=$(`ZodURL`,(e,t)=>{NK.init(e,t),GX.init(e,t)}),eZ=$(`ZodEmoji`,(e,t)=>{PK.init(e,t),GX.init(e,t)}),tZ=$(`ZodNanoID`,(e,t)=>{FK.init(e,t),GX.init(e,t)}),nZ=$(`ZodCUID`,(e,t)=>{IK.init(e,t),GX.init(e,t)}),rZ=$(`ZodCUID2`,(e,t)=>{LK.init(e,t),GX.init(e,t)}),iZ=$(`ZodULID`,(e,t)=>{RK.init(e,t),GX.init(e,t)}),aZ=$(`ZodXID`,(e,t)=>{zK.init(e,t),GX.init(e,t)}),oZ=$(`ZodKSUID`,(e,t)=>{BK.init(e,t),GX.init(e,t)}),sZ=$(`ZodIPv4`,(e,t)=>{GK.init(e,t),GX.init(e,t)}),cZ=$(`ZodIPv6`,(e,t)=>{JK.init(e,t),GX.init(e,t)}),lZ=$(`ZodCIDRv4`,(e,t)=>{YK.init(e,t),GX.init(e,t)}),uZ=$(`ZodCIDRv6`,(e,t)=>{ZK.init(e,t),GX.init(e,t)}),dZ=$(`ZodBase64`,(e,t)=>{eq.init(e,t),GX.init(e,t)}),fZ=$(`ZodBase64URL`,(e,t)=>{rq.init(e,t),GX.init(e,t)}),pZ=$(`ZodE164`,(e,t)=>{iq.init(e,t),GX.init(e,t)}),mZ=$(`ZodJWT`,(e,t)=>{oq.init(e,t),GX.init(e,t)}),hZ=$(`ZodNumber`,(e,t)=>{sq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>QY(e,t,n,r),e.isFinite=!0},EW({minValue:e=>{let{minimum:t,exclusiveMinimum:n}=qY(e);return Math.max(t??-1/0,n??-1/0)},maxValue:e=>{let{maximum:t,exclusiveMaximum:n}=qY(e);return Math.min(t??1/0,n??1/0)},isInt:e=>{let{isInt:t,multipleOf:n}=qY(e);return!!t||!!n?.some(Number.isSafeInteger)},format:e=>qY(e).format??null},{gt(e,t){return this.check(QJ(e,t))},gte(e,t){return this.check($J(e,t))},min(e,t){return this.check($J(e,t))},lt(e,t){return this.check(XJ(e,t))},lte(e,t){return this.check(ZJ(e,t))},max(e,t){return this.check(ZJ(e,t))},int(e){return this.check(vZ(e))},safe(e){return this.check(vZ(e))},positive(e){return this.check(QJ(0,e))},nonnegative(e){return this.check($J(0,e))},negative(e){return this.check(XJ(0,e))},nonpositive(e){return this.check(ZJ(0,e))},multipleOf(e,t){return this.check(eY(e,t))},step(e,t){return this.check(eY(e,t))},finite(){return this}}));function gZ(e){return GJ(hZ,e)}var _Z=$(`ZodNumberFormat`,(e,t)=>{cq.init(e,t),hZ.init(e,t)});function vZ(e){return KJ(_Z,e)}var yZ=$(`ZodBoolean`,(e,t)=>{lq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$Y(e,t,n,r)});function bZ(e){return qJ(yZ,e)}var xZ=$(`ZodUnknown`,(e,t)=>{uq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function SZ(){return JJ(xZ)}var CZ=$(`ZodNever`,(e,t)=>{dq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eX(e,t,n,r)});function wZ(e){return YJ(CZ,e)}var TZ=$(`ZodArray`,(e,t)=>{BX(),pq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>aX(e,t,n,r),e.element=t.element},{min(e,t){return this.check(nY(e,t))},nonempty(e){return this.check(nY(1,e))},max(e,t){return this.check(tY(e,t))},length(e,t){return this.check(rY(e,t))},unwrap(){return this.element}});function EZ(e,t){return gY(TZ,e,t)}var DZ=$(`ZodObject`,(e,t)=>{BX(),yq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>sX(e,t,n,r),NW(e,`shape`,e=>e._zod.def.shape,!1)},{keyof(){return zZ(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(HU(this._zod.def,{catchall:e}))},passthrough(){return this.clone(HU(this._zod.def,{catchall:SZ()}))},loose(){return this.clone(HU(this._zod.def,{catchall:SZ()}))},strict(){return this.clone(HU(this._zod.def,{catchall:wZ()}))},strip(){return this.clone(HU(this._zod.def,{catchall:void 0}))},extend(e){return oW(this,e)},safeExtend(e){return cW(this,e)},merge(e){return lW(this,e)},pick(e){return rW(this,e)},omit(e){return aW(this,e)},partial(...e){return uW(WZ,this,e[0])},exactPartial(...e){return uW(KZ,this,e[0],`exactPartial`)},required(...e){return dW(eQ,this,e[0])}});function OZ(e,t){return new DZ({type:`object`,shape:e??{},...Q(t)})}function kZ(e,t){return new DZ({type:`object`,shape:e,catchall:wZ(),...Q(t)})}var AZ=$(`ZodUnion`,(e,t)=>{xq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>cX(e,t,n,r),e.options=t.options});function jZ(e,t){return new AZ({type:`union`,options:e,...Q(t)})}var MZ=$(`ZodDiscriminatedUnion`,(e,t)=>{AZ.init(e,t),Cq.init(e,t)});function NZ(e,t,n){return new MZ({type:`union`,options:t,discriminator:e,...Q(n)})}var PZ=$(`ZodIntersection`,(e,t)=>{wq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>lX(e,t,n,r)});function FZ(e,t){return new PZ({type:`intersection`,left:e,right:t})}var IZ=$(`ZodRecord`,(e,t)=>{BX(),Dq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>pX(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function LZ(e,t,n){return!t||!t._zod?new IZ({type:`record`,keyType:WX(),valueType:e,...Q(t)}):new IZ({type:`record`,keyType:e,valueType:t,...Q(n)})}var RZ=$(`ZodEnum`,(e,t)=>{Oq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>tX(e,t,n,r),e.enum=t.entries,e.options=[...e._zod.values];let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new RZ({...t,checks:[],...Q(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new RZ({...t,checks:[],...Q(r),entries:i})}});function zZ(e,t){return new RZ({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...Q(t)})}var BZ=$(`ZodLiteral`,(e,t)=>{kq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nX(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function VZ(e,t){return new BZ({type:`literal`,values:Array.isArray(e)?e:[e],...Q(t)})}var HZ=$(`ZodTransform`,(e,t)=>{BX(),Aq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>iX(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new VW(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(SW(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,`input`in t||(t.input=n.value),t.inst??=e,n.issues.push(SW(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function UZ(e){return new HZ({type:`transform`,transform:e})}var WZ=$(`ZodOptional`,(e,t)=>{Mq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>CX(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function GZ(e){return new WZ({type:`optional`,innerType:e})}var KZ=$(`ZodExactOptional`,(e,t)=>{Nq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>CX(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function qZ(e){return new KZ({type:`optional`,innerType:e})}var JZ=$(`ZodNullable`,(e,t)=>{Pq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>mX(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function YZ(e){return new JZ({type:`nullable`,innerType:e})}var XZ=$(`ZodDefault`,(e,t)=>{Fq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>vX(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function ZZ(e,t){return new XZ({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():YU(t)}})}var QZ=$(`ZodPrefault`,(e,t)=>{Lq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>yX(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function $Z(e,t){return new QZ({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():YU(t)}})}var eQ=$(`ZodNonOptional`,(e,t)=>{Rq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>hX(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function tQ(e,t){return new eQ({type:`nonoptional`,innerType:e,...Q(t)})}var nQ=$(`ZodCatch`,(e,t)=>{Vq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>bX(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function rQ(e,t){return new nQ({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:FW(t)})}var iQ=$(`ZodPipe`,(e,t)=>{Hq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>xX(e,t,n,r),e.in=t.in,e.out=t.out});function aQ(e,t){return new iQ({type:`pipe`,in:e,out:t})}var oQ=$(`ZodReadonly`,(e,t)=>{Wq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>SX(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function sQ(e){return new oQ({type:`readonly`,innerType:e})}var cQ=$(`ZodCustom`,(e,t)=>{Kq.init(e,t),VX.init(e,t),e._zod.processJSONSchema=(t,n,r)=>rX(e,t,n,r)});function lQ(e,t={}){return _Y(cQ,e,t)}function uQ(e,t){return vY(e,t)}var dQ=EZ(WX().min(1).max(256)).min(1),fQ=WX().min(1),pQ=/^#[\da-f]{6}$/i,mQ=kZ({id:WX().min(1),kind:zZ([`file`,`directory`]),names:dQ.optional(),extensions:dQ.optional(),patterns:dQ.optional(),paths:dQ.optional(),caseSensitive:bZ().optional(),executable:bZ().optional(),icon:fQ,expandedIcon:fQ.optional()}).refine(e=>!!(e.names||e.extensions||e.patterns||e.paths||e.executable!==void 0),{message:`A rule needs names, extensions, patterns, paths or executable`}),hQ=kZ({$schema:WX().optional(),version:VZ(1),name:WX().min(1),palette:LZ(WX(),WX().regex(pQ)),icons:LZ(WX(),kZ({src:WX().regex(/^\/file-icons\/(?:[\w-]+\/)*[\w.-]+\.svg$/).refine(e=>!e.includes(`..`)),color:WX().min(1)})),defaults:kZ({file:fQ,directory:fQ,expandedDirectory:fQ}),rules:EZ(mQ)}).superRefine((e,t)=>{let n=(n,r)=>{Object.hasOwn(e.icons,n)||t.addIssue({code:`custom`,path:r,message:`Unknown icon: ${n}`})};for(let[t,r]of Object.entries(e.defaults))n(r,[`defaults`,t]);for(let[n,r]of Object.entries(e.icons))!pQ.test(r.color)&&!Object.hasOwn(e.palette,r.color)&&t.addIssue({code:`custom`,path:[`icons`,n,`color`],message:`Unknown color: ${r.color}`});let r=new Set;e.rules.forEach((e,i)=>{r.has(e.id)&&t.addIssue({code:`custom`,path:[`rules`,i,`id`],message:`Duplicate rule: ${e.id}`}),r.add(e.id),n(e.icon,[`rules`,i,`icon`]),e.expandedIcon&&n(e.expandedIcon,[`rules`,i,`expandedIcon`]),e.kind===`directory`&&e.extensions&&t.addIssue({code:`custom`,path:[`rules`,i,`extensions`],message:`Extensions only apply to files`}),e.kind===`directory`&&e.executable!==void 0&&t.addIssue({code:`custom`,path:[`rules`,i,`executable`],message:`Executable only applies to files`})})});function gQ(e,t){let n=``;for(let t=0;t<e.length;t++){let r=e[t];r===`*`&&e[t+1]===`*`?(t++,e[t+1]===`/`?(n+=`(?:.*/)?`,t++):n+=`.*`):n+=r===`*`?`[^/]*`:r===`?`?`[^/]`:r.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}return RegExp(`^${n}$`,t?``:`i`)}function _Q(e){let t=hQ.parse(e),n=t.rules.map(e=>{let t=t=>e.caseSensitive?t:t.toLowerCase(),n=new Set(e.names?.map(t)),r=e.extensions?.map(e=>t(e.replace(/^\./,``))),i=e.patterns?.map(t=>gQ(t,!!e.caseSensitive)),a=e.paths?.map(t=>gQ(t,!!e.caseSensitive));return{rule:e,matches(o){if(o.directory!==(e.kind===`directory`)||e.executable!==void 0&&e.executable!==!!o.executable)return!1;let s=t(o.name),c=o.path.replaceAll(`\\`,`/`).replace(/^\.\//,``);return e.executable!==void 0&&!e.names&&!e.extensions&&!e.patterns&&!e.paths||n.has(s)||r?.some(e=>s.length>e.length+1&&s.endsWith(`.${e}`))||i?.some(e=>e.test(o.name))||a?.some(e=>e.test(c))}}});return{name:t.name,resolve(e,r=!1){let i=n.find(t=>t.matches(e))?.rule;if(e.directory){let e=r?t.defaults.expandedDirectory:t.defaults.directory,n=r?i?.expandedIcon??i?.icon:i?.icon,a=n&&n!==e&&n!==t.defaults.directory&&n!==t.defaults.expandedDirectory?t.icons[n]:void 0,o=t.icons[e],s=a?.color??o.color;return{id:e,src:o.src,color:t.palette[s]??s,ruleId:i?.id,...a&&n?{badge:{id:n,src:a.src,color:t.palette[a.color]??a.color}}:{}}}let a=i?.icon??t.defaults.file,o=t.icons[a];return{id:a,src:o.src,color:t.palette[o.color]??o.color,ruleId:i?.id}}}}var vQ=ee(_Q(EU)),yQ=M(``),bQ;function xQ(){return bQ||(bQ=(async()=>{try{let e=await fetch(`/file-icons/theme.json`,{cache:`no-store`});if(!e.ok)throw Error(`HTTP ${e.status}`);vQ.value=_Q(await e.json()),yQ.value=``}catch(e){yQ.value=`Не удалось загрузить тему иконок. Используется предыдущая тема.`,console.warn(`File icon theme:`,e)}finally{bQ=void 0}})(),bQ)}var SQ=!1;function CQ(){return SQ||(SQ=!0,xQ()),{resolver:_e(vQ),error:_e(yQ)}}var wQ=W({__name:`GitChangesTree`,props:{changes:{type:Array,required:!0},staged:{type:Boolean,required:!0},selected:{type:String,required:!0},path:{type:String,required:!1,default:``},depth:{type:Number,required:!1,default:0},disabled:{type:Boolean,required:!1},canToggle:{type:Function,required:!1},readonly:{type:Boolean,required:!1},label:{type:String,required:!1}},emits:[`open`,`target`,`change`,`context`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=M(new Set),{resolver:o}=CQ(),s={added:`новый файл`,deleted:`удалён`};function c(e){let t=e=>r.staged?e.index:e.worktree;if(e.every(e=>[`A`,`?`].includes(t(e))))return`added`;if(e.every(e=>t(e)===`D`))return`deleted`}function l(e,t,n){let r=t?`${t} → ${e}`:e;return n?`${r} · ${s[n]}`:r}let u=B(()=>{let e=new Map,t=r.path?`${r.path}/`:``;for(let n of r.changes){let r=n.path.slice(t.length),i=r.split(`/`)[0],a=`${t}${i}`,o=e.get(a);o||(o={name:i,path:a,directory:r.includes(`/`),changes:[]},e.set(a,o)),o.changes.push(n)}return[...e.values()].map(e=>{if(!e.directory)return e;for(;;){let t=e.changes.map(t=>t.path.slice(e.path.length+1)),n=t[0].split(`/`)[0];if(!t.every(e=>e.startsWith(`${n}/`)))break;e={...e,name:`${e.name}/${n}`,path:`${e.path}/${n}`}}return e}).sort((e,t)=>Number(t.directory)-Number(e.directory)||e.name.localeCompare(t.name)).map(e=>({...e,icon:o.value.resolve({...e,name:e.name.split(`/`).at(-1),executable:!e.directory&&e.changes[0].executable},!a.value.has(e.path)),change:e.changes[0],tint:c(e.changes)}))});function d(e){a.value.has(e)?a.value.delete(e):a.value.add(e)}let f={props:r,emit:i,collapsed:a,resolver:o,tintLabels:s,entryTint:c,rowTitle:l,rows:u,toggle:d,UiActionRow:wl,get IconPlus(){return Dy},get IconMinus(){return bU},get IconChevronRight(){return Ch},get FileIcon(){return TU}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}}),TQ=[`aria-label`],EQ=[`data-git-status`,`onContextmenu`,`onKeydown`],DQ={class:`glyph`,"aria-hidden":`true`},OQ={class:`name u-truncate`},kQ={key:0,class:`u-sr-only`},AQ={key:1,class:`count`},jQ=[`disabled`,`title`,`aria-label`,`data-command`,`onFocus`,`onClick`];function MQ(t,n,r,i,a,o){let s=x(`GitChangesTree`,!0);return K(),U(`ul`,{class:`git-tree`,"aria-label":r.path||r.label||(r.staged?`Подготовленные изменения`:`Рабочие изменения`)},[(K(!0),U(P,null,S(i.rows,t=>(K(),U(`li`,{key:t.path},[I(`div`,{class:Y([`git-row`,{selected:!t.directory&&r.selected===t.path}]),"data-git-status":t.tint,onContextmenu:e=>i.emit(`context`,e,t.path),onKeydown:ye(N(e=>i.emit(`context`,e,t.path),[`shift`,`prevent`]),[`f10`])},[y(i.UiActionRow,{interaction:`item`,radius:`none`,tone:`muted`,gap:1.5,fill:!1,padding:`5px 10px`,class:Y([`entry`,{selected:!t.directory&&r.selected===t.path}]),disabled:r.disabled,style:Qe({paddingLeft:`${12+r.depth*14}px`}),"data-path":t.path,title:i.rowTitle(t.path,t.directory?void 0:t.change.originalPath,t.tint),"aria-expanded":t.directory?!i.collapsed.has(t.path):void 0,"aria-current":!t.directory&&r.selected===t.path?`true`:void 0,onFocus:e=>i.emit(`target`,t.path),onClick:e=>t.directory?i.toggle(t.path):i.emit(`open`,t.path,e.detail>=2)},{default:e(()=>[I(`span`,DQ,[t.directory?(K(),F(i.IconChevronRight,{key:0,class:Y({expanded:!i.collapsed.has(t.path)})},null,8,[`class`])):D(`v-if`,!0)]),y(i.FileIcon,{icon:t.icon},null,8,[`icon`]),I(`span`,OQ,X(t.name),1),t.tint?(K(),U(`span`,kQ,`, `+X(i.tintLabels[t.tint]),1)):D(`v-if`,!0),t.directory?(K(),U(`span`,AQ,X(t.changes.length),1)):D(`v-if`,!0)]),_:2},1032,[`disabled`,`class`,`style`,`data-path`,`title`,`aria-expanded`,`aria-current`,`onFocus`,`onClick`]),r.readonly?D(`v-if`,!0):(K(),U(`button`,{key:0,class:`git-action`,disabled:r.disabled||!r.canToggle?.(t.path),title:r.staged?`Убрать из Staged`:`Отметить Staged`,"aria-label":`${r.staged?`Убрать из Staged`:`Отметить Staged`}: ${t.path}`,"data-command":r.staged?`ide.git.unstage`:`ide.git.stage`,onFocus:e=>i.emit(`target`,t.path),onClick:N(e=>i.emit(`change`,t.path),[`stop`])},[r.staged?(K(),F(i.IconMinus,{key:0,"aria-hidden":`true`})):(K(),F(i.IconPlus,{key:1,"aria-hidden":`true`}))],40,jQ))],42,EQ),t.directory?te((K(),F(s,{key:0,changes:t.changes,path:t.path,depth:r.depth+1,staged:r.staged,disabled:r.disabled,"can-toggle":r.canToggle,readonly:r.readonly,selected:r.selected,onChange:n[0]||=e=>i.emit(`change`,e),onOpen:n[1]||=(e,t)=>i.emit(`open`,e,t),onTarget:n[2]||=e=>i.emit(`target`,e),onContext:n[3]||=(e,t)=>i.emit(`context`,e,t)},null,8,[`changes`,`path`,`depth`,`staged`,`disabled`,`can-toggle`,`readonly`,`selected`])),[[ae,!i.collapsed.has(t.path)]]):D(`v-if`,!0)]))),128))],8,TQ)}var NQ=H(wQ,[[`render`,MQ],[`__scopeId`,`data-v-2fa1c460`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/git/ui/GitChangesTree.vue`]]),PQ=10,FQ=7,IQ=W({__name:`GitGraphCell`,props:{row:{type:Object,required:!0},columns:{type:Number,required:!0},height:{type:Number,required:!0},hollow:{type:Boolean,required:!1},merge:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n=e,r=[`var(--accent)`,`var(--run)`,`var(--warn)`,`var(--err)`,`var(--muted)`],i=e=>FQ+Math.min(e,n.columns-1)*PQ,a=e=>r[e%r.length],o=B(()=>n.height/2),s=B(()=>14+(n.columns-1)*PQ);function c(e,t,r){let a=r?o.value:0,s=r?n.height:o.value;if(e===t)return`M${i(e)} ${a}V${s}`;let c=(a+s)/2;return`M${i(e)} ${a}C${i(e)} ${c} ${i(t)} ${c} ${i(t)} ${s}`}let l={props:n,STEP:PQ,PAD:FQ,palette:r,x:i,color:a,mid:o,width:s,curve:c};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),LQ=[`width`,`height`,`viewBox`],RQ=[`d`,`stroke`],zQ=[`d`,`stroke`],BQ=[`d`,`stroke`],VQ=[`cx`,`cy`,`r`,`stroke`,`fill`];function HQ(e,t,n,r,i,a){return K(),U(`svg`,{class:`graph`,width:r.width,height:n.height,viewBox:`0 0 ${r.width} ${n.height}`,"aria-hidden":`true`},[(K(!0),U(P,null,S(n.row.through,e=>(K(),U(`path`,{key:`t${e}`,d:`M${r.x(e)} 0V${n.height}`,stroke:r.color(e)},null,8,RQ))),128)),(K(!0),U(P,null,S(n.row.joins,e=>(K(),U(`path`,{key:`j${e}`,d:r.curve(e,n.row.column,!1),stroke:r.color(e)},null,8,zQ))),128)),(K(!0),U(P,null,S(n.row.forks,e=>(K(),U(`path`,{key:`f${e}`,d:r.curve(n.row.column,e,!0),stroke:r.color(e)},null,8,BQ))),128)),I(`circle`,{cx:r.x(n.row.column),cy:r.mid,r:n.merge?3:3.5,stroke:r.color(n.row.column),fill:n.hollow?`var(--bg)`:r.color(n.row.column),class:Y({merge:n.merge})},null,10,VQ)],8,LQ)}var UQ=H(IQ,[[`render`,HQ],[`__scopeId`,`data-v-9763fbbd`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/git/ui/GitGraphCell.vue`]]),WQ=40,GQ=10,KQ=W({__name:`GitCommitRow`,props:{commit:{type:Object,required:!0},row:{type:Object,required:!0},columns:{type:Number,required:!0},expanded:{type:Boolean,required:!0},state:{type:Object,required:!1},me:{type:String,required:!0},now:{type:Number,required:!0}},emits:[`toggle`,`open`,`copy`,`openDiff`,`context`,`target`],setup(e,{expose:t,emit:n}){t();let r=e,i={props:r,emit:n,ROW:WQ,GUTTER_STEP:GQ,gutter:B(()=>({width:`${14+(r.columns-1)*GQ}px`})),lanes:B(()=>[...new Set([...r.row.through,...r.row.forks])].map(e=>({column:e,left:`${6.25+Math.min(e,r.columns-1)*GQ}px`}))),changes:B(()=>r.state?.detail?.files.map(e=>({path:e.path,originalPath:e.originalPath,index:e.status,worktree:` `}))??[]),merge:B(()=>r.commit.parents.length>1),ownCommit:B(()=>!!r.me&&r.commit.email===r.me),refs:B(()=>r.commit.refs.filter(e=>e.name!==`HEAD`||r.commit.refs.length===1)),UiButton:q,get absoluteTime(){return En},get relativeTime(){return wn},get shortHash(){return kn},GitChangesTree:NQ,GitGraphCell:UQ,get IconChevronRight(){return Ch},get IconOpen(){return Fn},get IconCopy(){return Oy}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),qQ=[`data-hash`],JQ={class:`head`},YQ=[`aria-expanded`,`title`],XQ={class:`text`},ZQ={class:`line`},QQ={class:`subject u-truncate`},$Q={class:`meta`},e$={key:0,class:`author u-truncate`},t$={key:1,class:`flag`,title:`Ещё не отправлен в upstream`},n$={key:2,class:`flag`},r$={key:0,class:`note`,role:`status`},i$={key:1,class:`note error`,role:`alert`},a$={key:0,class:`body`},o$={class:`summary`},s$={class:`add`},c$={class:`del`},l$={key:1,class:`note`};function u$(t,n,r,i,a,o){return K(),U(`li`,{class:Y([`commit`,{expanded:r.expanded}]),"data-hash":r.commit.hash},[I(`div`,JQ,[I(`button`,{class:`row`,style:Qe({height:`${i.ROW}px`}),"aria-expanded":r.expanded,title:`${r.commit.subject}\n${r.commit.author} <${r.commit.email}>\n${i.absoluteTime(r.commit.date)}\n${r.commit.hash}`,onClick:n[0]||=e=>i.emit(`toggle`),onFocus:n[1]||=e=>i.emit(`target`,``),onContextmenu:n[2]||=e=>i.emit(`context`,e,``),onKeydown:n[3]||=ye(N(e=>i.emit(`context`,e,``),[`shift`,`prevent`]),[`f10`])},[y(i.GitGraphCell,{row:r.row,columns:r.columns,height:i.ROW,hollow:r.commit.unpushed,merge:i.merge},null,8,[`row`,`columns`,`hollow`,`merge`]),I(`span`,XQ,[I(`span`,ZQ,[I(`span`,QQ,X(r.commit.subject||`(без описания)`),1),(K(!0),U(P,null,S(i.refs,e=>(K(),U(`span`,{key:e.kind+e.name,class:Y([`ref u-truncate`,e.kind])},X(e.name),3))),128))]),I(`span`,$Q,[i.ownCommit?D(`v-if`,!0):(K(),U(`span`,e$,X(r.commit.author),1)),I(`span`,null,X(i.relativeTime(r.commit.date,r.now)),1),I(`code`,null,X(i.shortHash(r.commit.hash)),1),r.commit.unpushed?(K(),U(`span`,t$,`↑`)):D(`v-if`,!0),i.merge?(K(),U(`span`,n$,`merge`)):D(`v-if`,!0)])]),y(i.IconChevronRight,{class:Y([`chevron`,{open:r.expanded}]),"aria-hidden":`true`},null,8,[`class`])],44,YQ),y(i.UiButton,{shape:`icon`,size:`sm`,class:`open`,title:`Открыть обзор коммита`,"aria-label":`Открыть обзор коммита`,"data-command":`ide.git.commit.open`,onClick:n[4]||=e=>i.emit(`open`)},{default:e(()=>[y(i.IconOpen,{"aria-hidden":`true`})]),_:1})]),r.expanded?(K(),U(`div`,{key:0,class:`details`,style:Qe({paddingLeft:i.gutter.width})},[(K(!0),U(P,null,S(i.lanes,e=>(K(),U(`i`,{key:e.column,class:`lane`,style:Qe({left:e.left})},null,4))),128)),r.state?.loading&&!r.state.detail?(K(),U(`p`,r$,`загрузка…`)):r.state?.error?(K(),U(`p`,i$,X(r.state.error),1)):r.state?.detail?(K(),U(P,{key:2},[r.state.detail.body?(K(),U(`pre`,a$,X(r.state.detail.body),1)):D(`v-if`,!0),I(`div`,o$,[I(`span`,null,[G(X(r.state.detail.files.length)+` файл. `,1),I(`b`,s$,`+`+X(r.state.detail.additions),1),I(`b`,c$,`−`+X(r.state.detail.deletions),1)]),y(i.UiButton,{shape:`icon`,size:`sm`,title:`Копировать хеш`,"aria-label":`Копировать хеш`,"data-command":`ide.git.commit.copyHash`,onClick:n[5]||=e=>i.emit(`copy`)},{default:e(()=>[y(i.IconCopy,{"aria-hidden":`true`})]),_:1})]),i.changes.length?(K(),F(i.GitChangesTree,{key:2,changes:i.changes,staged:``,readonly:``,label:`Изменения коммита ${i.shortHash(r.commit.hash)}`,selected:``,onOpen:n[6]||=(e,t)=>i.emit(`openDiff`,e,t),onTarget:n[7]||=e=>i.emit(`target`,e),onContext:n[8]||=(e,t)=>i.emit(`context`,e,t)},null,8,[`changes`,`label`])):(K(),U(`p`,l$,`В этой папке коммит ничего не менял.`))],64)):D(`v-if`,!0)],4)):D(`v-if`,!0)],10,qQ)}var d$=H(KQ,[[`render`,u$],[`__scopeId`,`data-v-dd9f74f3`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/git/ui/GitCommitRow.vue`]]),f$=6,p$=W({__name:`GitHistory`,props:t({history:{type:null,required:!0},allBranches:{type:Boolean,required:!1},snapshots:{type:Boolean,required:!1},commands:{type:null,required:!0},revision:{type:Number,required:!0}},{target:{type:Object,default:()=>({hash:``,path:``})},targetModifiers:{},open:{type:Boolean,default:!1},openModifiers:{}}),emits:t([`openCommit`,`openDiff`,`openFile`,`openTree`],[`update:target`,`update:open`]),setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=u(e,`target`),o=u(e,`open`),{log:s,commits:c,query:l,all:d,loading:f,loadingMore:p,error:m,details:h}=r.history;Sn(()=>m.value);let _=M(new Set),v=M(l.value),y=M(),b=M(Date.now()),x=setInterval(()=>b.value=Date.now(),6e4);g(()=>clearInterval(x));let S=B(()=>Rl(c.value)),C=B(()=>Math.min(f$,Math.max(1,...S.value.map(e=>e.width)))),w=e=>{if(typeof e!=`string`||!e)throw Error(`Укажите хеш коммита`);return c.value.find(t=>t.hash.startsWith(e))?.hash??e},T=e=>w(J(e).hash??a.value.hash);function D(e){let t=J(e).path??a.value.path;if(typeof t!=`string`||!t)throw Error(`Укажите путь файла`);return t}async function O(e,t){t?(_.value.add(e),await r.history.detail(e)):_.value.delete(e)}async function k(e){await yn(null,e,`Хеш скопирован`)}let A=Ae(r.commands.scope),j={hash:`Хеш коммита (можно сокращённый); без него — коммит под курсором`},N={path:`Путь файла относительно папки проекта`};A(`ide.git.history.toggle`,`Показать или скрыть историю Git`,`Сворачивает блок History.`,()=>{o.value=!o.value}),A(`ide.git.history.refresh`,`Обновить историю Git`,`Перечитывает загруженную историю.`,()=>(o.value=!0,r.history.load())),A(`ide.git.history.filter`,`Фильтр истории Git`,`Ищет коммиты по сообщению; с «@» — по автору. Можно включить все ветки.`,async e=>{let t=J(e);if(t.query!==void 0&&typeof t.query!=`string`)throw Error(`query должен быть строкой`);if(t.all!==void 0&&typeof t.all!=`boolean`)throw Error(`all должен быть boolean`);if(t.all===!0&&r.allBranches===!1)throw Error(`Этот источник поддерживает историю текущей ветки`);o.value=!0,v.value=t.query??v.value,await r.history.filter({query:v.value,all:t.all})},{query:`Строка поиска; пустая сбрасывает фильтр`,all:`true — показать все ветки`}),A(`ide.git.history.more`,`Показать ещё коммиты`,`Подгружает следующую страницу.`,()=>r.history.more()),A(`ide.git.commit.toggle`,`Раскрыть или свернуть коммит`,`Показывает изменения именно этого коммита.`,async e=>{let t=T(e);o.value=!0,await O(t,!_.value.has(t))},j),A(`ide.git.commit.open`,`Открыть обзор коммита`,`Открывает вкладку с подробным обзором коммита.`,e=>i(`openCommit`,T(e)),j),A(`ide.git.commit.openTree`,`Файлы коммита`,`Показывает дерево файлов на момент коммита в боковой панели рядом с Git.`,e=>i(`openTree`,T(e)),j,()=>!!r.snapshots),A(`ide.git.commit.openDiff`,`Открыть изменения файла в коммите`,`Открывает diff файла: родитель коммита → коммит.`,e=>i(`openDiff`,T(e),D(e),J(e).pinned===!0),{...j,...N}),A(`ide.git.commit.openFile`,`Открыть текущий файл коммита`,`Открывает файл проекта в редакторе.`,e=>i(`openFile`,D(e)),N),A(`ide.git.commit.copyHash`,`Копировать хеш коммита`,`Копирует полный хеш в буфер обмена.`,e=>k(T(e)),j);let ee=B(()=>{let e={...a.value},{item:t}=r.commands;return e.path?[t(`ide.git.commit.openDiff`,e),t(`ide.git.commit.openFile`,e),...r.snapshots?[t(`ide.git.commit.openTree`,e)]:[]]:[t(`ide.git.commit.toggle`,e),t(`ide.git.commit.open`,e),...r.snapshots?[t(`ide.git.commit.openTree`,e)]:[],t(`ide.git.commit.copyHash`,e,{separator:!0})]});function te(e,t,n){a.value={hash:t,path:n},r.commands.scope.activate(),y.value?.open(e)}let P=ff(()=>r.history.filter({query:v.value}),300);E(v,e=>{e!==l.value&&P()}),E(o,e=>{e&&!c.value.length&&!f.value&&r.history.load()}),E(()=>r.revision,()=>{o.value&&r.history.load()}),E(c,e=>{let t=new Set(e.map(e=>e.hash));for(let e of[..._.value])t.has(e)||_.value.delete(e)});let ne={props:r,emit:i,target:a,open:o,log:s,commits:c,query:l,all:d,loading:f,loadingMore:p,error:m,details:h,expanded:_,search:v,menu:y,now:b,clock:x,MAX_COLUMNS:f$,rows:S,columns:C,resolve:w,hashArg:T,pathArg:D,setExpanded:O,copy:k,register:A,hashHelp:j,pathHelp:N,menuItems:ee,context:te,refilter:P,UiControl:Se,UiInline:Be,UiMessage:Te,ContextMenu:ih,UiButton:q,GitCommitRow:d$,get IconChevronRight(){return Ch},get IconRefresh(){return xO}};return Object.defineProperty(ne,"__isScriptSetup",{enumerable:!1,value:!0}),ne}}),m$={class:`history`,"aria-label":`История Git`},h$={class:`head`},g$=[`aria-expanded`],_$={key:0,class:`sync`,title:`Не отправлено в upstream`},v$={key:1,class:`sync`,title:`Есть в upstream, нет локально`},y$={key:3,class:`commits`},b$={key:4,class:`more`};function x$(t,n,r,i,a,o){return K(),U(`section`,m$,[I(`div`,h$,[I(`button`,{class:`toggle`,"aria-expanded":i.open,"data-command":`ide.git.history.toggle`,onClick:n[0]||=e=>r.commands.run(`ide.git.history.toggle`)},[y(i.IconChevronRight,{class:Y([`chevron`,{open:i.open}]),"aria-hidden":`true`},null,8,[`class`]),n[6]||=I(`h3`,null,`History`,-1),i.log.ahead?(K(),U(`span`,_$,`↑`+X(i.log.ahead),1)):D(`v-if`,!0),i.log.behind?(K(),U(`span`,v$,` ↓`+X(i.log.behind),1)):D(`v-if`,!0)],8,g$),i.open?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,disabled:i.loading,title:`Обновить историю`,"aria-label":`Обновить историю`,"data-command":`ide.git.history.refresh`,onClick:n[1]||=e=>r.commands.run(`ide.git.history.refresh`)},{default:e(()=>[y(i.IconRefresh,{"aria-hidden":`true`})]),_:1},8,[`disabled`])):D(`v-if`,!0)]),i.open?(K(),U(P,{key:0},[y(i.UiInline,{class:`filter`,gap:1.5,align:`normal`,justify:`normal`},{default:e(()=>[y(i.UiControl,{grow:``,appearance:`inset`,modelValue:i.search,"onUpdate:modelValue":n[2]||=e=>i.search=e,type:`search`,placeholder:`Сообщение или @автор`,"aria-label":`Поиск по истории`,onKeydown:n[3]||=N(()=>{},[`stop`])},null,8,[`modelValue`]),r.allBranches===!1?D(`v-if`,!0):(K(),F(i.UiButton,{key:0,size:`sm`,"aria-pressed":i.all,title:`Показать коммиты всех веток`,"data-command":`ide.git.history.filter`,onClick:n[4]||=e=>r.commands.run(`ide.git.history.filter`,{all:!i.all})},{default:e(()=>[G(X(i.all?`Все ветки`:`Текущая`),1)]),_:1},8,[`aria-pressed`]))]),_:1}),i.log.upstream?(K(),F(i.UiMessage,{key:0,class:`note`,tone:`muted`,size:`xs`,flush:``},{default:e(()=>[G(X(i.log.upstream),1),!i.log.ahead&&!i.log.behind?(K(),U(P,{key:0},[G(` · синхронизировано`)],64)):D(`v-if`,!0)]),_:1})):D(`v-if`,!0),i.loading&&!i.commits.length?(K(),F(i.UiMessage,{key:1,class:`note`,tone:`muted`,size:`xs`,flush:``,role:`status`},{default:e(()=>[...n[7]||=[G(`загрузка истории…`,-1)]]),_:1})):i.log.available&&!i.commits.length?(K(),F(i.UiMessage,{key:2,class:`note`,tone:`muted`,size:`xs`,flush:``},{default:e(()=>[G(X(i.query?i.log.next===null?`Ничего не найдено.`:`В этой части истории совпадений нет.`:`Коммитов пока нет.`),1)]),_:1})):D(`v-if`,!0),i.commits.length?(K(),U(`ul`,y$,[(K(!0),U(P,null,S(i.commits,(e,t)=>(K(),F(i.GitCommitRow,{key:e.hash,commit:e,row:i.rows[t],columns:i.columns,expanded:i.expanded.has(e.hash),state:i.details[e.hash],me:i.log.me,now:i.now,onToggle:t=>r.commands.run(`ide.git.commit.toggle`,{hash:e.hash}),onOpen:t=>r.commands.run(`ide.git.commit.open`,{hash:e.hash}),onCopy:t=>r.commands.run(`ide.git.commit.copyHash`,{hash:e.hash}),onOpenDiff:(t,n)=>r.commands.run(`ide.git.commit.openDiff`,{hash:e.hash,path:t,pinned:n}),onTarget:t=>i.target={hash:e.hash,path:t},onContext:(t,n)=>i.context(t,e.hash,n)},null,8,[`commit`,`row`,`columns`,`expanded`,`state`,`me`,`now`,`onToggle`,`onOpen`,`onCopy`,`onOpenDiff`,`onTarget`,`onContext`]))),128))])):D(`v-if`,!0),i.log.next===null?D(`v-if`,!0):(K(),U(`div`,b$,[y(i.UiButton,{size:`sm`,disabled:i.loadingMore,"data-command":`ide.git.history.more`,onClick:n[5]||=e=>r.commands.run(`ide.git.history.more`)},{default:e(()=>[G(X(i.loadingMore?`Загрузка…`:`Показать ещё`),1)]),_:1},8,[`disabled`])]))],64)):D(`v-if`,!0),y(i.ContextMenu,{ref:`menu`,items:i.menuItems,label:`Действия коммита`},null,8,[`items`])])}var S$=H(p$,[[`render`,x$],[`__scopeId`,`data-v-a8c082e3`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/git/ui/GitHistory.vue`]]),yie=W({__name:`GitPanel`,props:{projectId:{type:String,required:!0},overview:{type:null,required:!0},history:{type:null,required:!0},branches:{type:null,required:!0},selected:{type:Object,required:!1},prepare:{type:Function,required:!0},invalidate:{type:Function,required:!0},applied:{type:Function,required:!0},reveal:{type:Function,required:!0}},emits:[`open`,`openCommit`,`openCommitTree`,`openCommitDiff`],setup(e,{expose:t,emit:n}){let r=e,i=n,{git:a,error:o,loading:s,load:c}=r.overview;Sn(()=>o.value,{label:`Обновить`,run:()=>void c()});let l=M(!1),u=M(new Set),d=M(),f=M({path:``,staged:!1}),p=Bt(r.projectId).providers.git,m=!!p?.write,h=ht(r.projectId).snapshots,g=M(!m),_=M(),v=M(),y=M(),b=B(()=>m?g.value?_.value?{flex:`0 0 ${_.value}px`}:{flex:`0 1 auto`}:{flex:`0 0 auto`}:{flex:`1 1 0`,maxHeight:`none`}),x=M(!1),S=M(``),C=M({hash:``,path:``}),w=Je(`git:${r.projectId}`,()=>({surface:`git`,projectId:r.projectId,path:f.value.path,staged:f.value.staged,busy:l.value,commit:C.value.hash,commitPath:C.value.path,historyOpen:g.value,branch:S.value,branchesOpen:x.value})),{gitChange:T,stagedChanges:E,workingChanges:D}=HH({commands:w,overview:r.overview,target:f,busy:l,prepare:r.prepare,invalidate:r.invalidate,applied:r.applied,open:(e,t,n)=>i(`open`,e,t,n),reveal:e=>r.reveal(e)});w.scope.registerCommand({id:`ide.git.group.toggle`,enabled:()=>m,title:`Свернуть или развернуть блок изменений`,description:`Сворачивает блок Staged или Changed в панели Git.`,arguments:{staged:`true — блок Staged, false — блок Changed`},run:e=>{let t=J(e);if(typeof t.staged!=`boolean`)throw Error(`staged должен быть boolean`);let n=t.staged?`staged`:`changed`;u.value.has(n)?u.value.delete(n):u.value.add(n)}}),w.scope.registerCommand({id:`ide.git.history.resize`,enabled:()=>m,title:`Изменить высоту истории Git`,description:`Задаёт высоту блока History в пикселях; без height возвращает размер по содержимому.`,arguments:{height:`Высота в пикселях; не меньше 120`},run:e=>{let{height:t}=J(e);if(t!==void 0&&(typeof t!=`number`||!(t>=120)))throw Error(`height должен быть числом не меньше 120`);_.value=t,t!==void 0&&(g.value=!0)}}),w.scope.registerCommand({id:`ide.git.refresh`,title:`Обновить Git`,run:c,enabled:()=>!l.value});let O=B(()=>{let e=f.value;return[...T(e)?[w.item(`ide.git.openDiff`,e),w.item(`ide.git.openFile`,e)]:[],w.item(`ide.git.reveal`,e),w.item(e.staged?`ide.git.unstage`:`ide.git.stage`,e,{separator:!0}),...e.staged?[]:[w.item(`ide.git.discard`,e,{danger:!0})]]});function k(e,t,n){f.value={path:t,staged:n},w.scope.activate(),d.value?.open(e)}t({refresh:()=>l.value?void 0:c()});let A={props:r,emit:i,git:a,gitError:o,gitLoading:s,load:c,gitBusy:l,collapsedGroups:u,gitMenu:d,gitTarget:f,gitProvider:p,writable:m,snapshots:h,historyOpen:g,historyHeight:_,stack:v,historyZone:y,historyStyle:b,branchOpen:x,branchTarget:S,commitTarget:C,gitCommands:w,gitChange:T,stagedChanges:E,workingChanges:D,gitMenuItems:O,gitContext:k,UiScrollArea:Tp,ContextMenu:ih,UiButton:q,GitBranchBar:fU,GitSplitter:_U,GitChangesTree:NQ,GitHistory:S$,get IconPlus(){return Dy},get IconMinus(){return bU},get IconChevronRight(){return Ch}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}}),C$={key:1,class:`notice`,role:`status`},w$={key:2,class:`notice`},T$={key:3,class:`notice`},E$={key:4,ref:`stack`,class:`git-stack`},D$={key:0,class:`changes-zone`},O$={key:0,class:`git-group`},k$=[`aria-expanded`,`onClick`],A$={key:0};function j$(t,n,r,i,a,o){return K(),F(i.UiScrollArea,{class:`side-content git-panel`,onFocusin:n[11]||=e=>i.gitCommands.scope.activate(),onKeydown:n[12]||=e=>i.gitCommands.keydown(e)},{default:e(()=>[i.git.available&&i.writable?(K(),F(i.GitBranchBar,{key:0,open:i.branchOpen,"onUpdate:open":n[0]||=e=>i.branchOpen=e,target:i.branchTarget,"onUpdate:target":n[1]||=e=>i.branchTarget=e,branches:r.branches,commands:i.gitCommands,revision:r.overview.gutterRevision.value,prepare:r.prepare,applied:r.applied,reload:i.load},null,8,[`open`,`target`,`branches`,`commands`,`revision`,`prepare`,`applied`,`reload`])):D(`v-if`,!0),i.gitLoading?(K(),U(`p`,C$,`загрузка Git…`)):D(`v-if`,!0),!i.gitLoading&&!i.gitError&&!i.git.available?(K(),U(`p`,w$,` В этой папке нет Git-репозитория. `)):i.writable&&!i.gitLoading&&!i.gitError&&!i.git.changes.length?(K(),U(`p`,T$,` Нет изменений. `)):D(`v-if`,!0),i.git.available?(K(),U(`div`,E$,[i.writable?(K(),U(`div`,D$,[(K(!0),U(P,null,S([{label:`Staged`,rows:i.stagedChanges,staged:!0},{label:`Changed`,rows:i.workingChanges,staged:!1}],t=>(K(),U(P,{key:t.label},[i.git.available?(K(),U(`div`,O$,[I(`button`,{class:`group-toggle`,"aria-expanded":!i.collapsedGroups.has(t.staged?`staged`:`changed`),"data-command":`ide.git.group.toggle`,onClick:e=>i.gitCommands.run(`ide.git.group.toggle`,{staged:t.staged})},[y(i.IconChevronRight,{class:Y([`chevron`,{open:!i.collapsedGroups.has(t.staged?`staged`:`changed`)}]),"aria-hidden":`true`},null,8,[`class`]),I(`h3`,null,[G(X(t.label)+` `,1),t.rows.length?(K(),U(`span`,A$,X(t.rows.length),1)):D(`v-if`,!0)])],8,k$),t.rows.length?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,disabled:!i.gitCommands.scope.describe(t.staged?`ide.git.unstage`:`ide.git.stage`,{path:``})?.enabled,title:t.staged?`Убрать всё из Staged`:`Отметить всё Staged`,"aria-label":t.staged?`Убрать всё из Staged`:`Отметить всё Staged`,"data-command":t.staged?`ide.git.unstage`:`ide.git.stage`,onClick:e=>i.gitCommands.run(t.staged?`ide.git.unstage`:`ide.git.stage`,{path:``,staged:t.staged})},{default:e(()=>[t.staged?(K(),F(i.IconMinus,{key:0,"aria-hidden":`true`})):(K(),F(i.IconPlus,{key:1,"aria-hidden":`true`}))]),_:2},1032,[`disabled`,`title`,`aria-label`,`data-command`,`onClick`])):D(`v-if`,!0)])):D(`v-if`,!0),t.rows.length?te((K(),F(i.GitChangesTree,{key:`${r.projectId}:${t.staged}`,changes:t.rows,staged:t.staged,disabled:i.gitBusy,"can-toggle":e=>!!i.gitCommands.scope.describe(t.staged?`ide.git.unstage`:`ide.git.stage`,{path:e})?.enabled,selected:r.selected?.staged===t.staged?r.selected.path:``,onChange:e=>i.gitCommands.run(t.staged?`ide.git.unstage`:`ide.git.stage`,{path:e,staged:t.staged}),onTarget:e=>i.gitTarget={path:e,staged:t.staged},onOpen:(e,n)=>i.gitCommands.run(`ide.git.openDiff`,{path:e,staged:t.staged,pinned:n}),onContext:(e,n)=>i.gitContext(e,n,t.staged)},null,8,[`changes`,`staged`,`disabled`,`can-toggle`,`selected`,`onChange`,`onTarget`,`onOpen`,`onContext`])),[[ae,!i.collapsedGroups.has(t.staged?`staged`:`changed`)]]):D(`v-if`,!0)],64))),128))])):D(`v-if`,!0),i.historyOpen&&i.writable?(K(),F(i.GitSplitter,{key:1,target:i.historyZone,stack:i.stack,onResize:n[2]||=e=>i.historyHeight=e,onCollapse:n[3]||=e=>i.historyOpen=!1,onReset:n[4]||=e=>i.gitCommands.run(`ide.git.history.resize`)},null,8,[`target`,`stack`])):D(`v-if`,!0),I(`div`,{ref:`historyZone`,class:`history-zone`,style:Qe(i.historyStyle)},[y(i.GitHistory,{open:i.historyOpen,"onUpdate:open":n[5]||=e=>i.historyOpen=e,target:i.commitTarget,"onUpdate:target":n[6]||=e=>i.commitTarget=e,history:r.history,"all-branches":i.gitProvider?.allBranches!==!1,snapshots:i.snapshots,commands:i.gitCommands,revision:r.overview.gutterRevision.value,onOpenCommit:n[7]||=e=>i.emit(`openCommit`,e),onOpenTree:n[8]||=e=>i.emit(`openCommitTree`,e),onOpenDiff:n[9]||=(e,t,n)=>i.emit(`openCommitDiff`,e,t,n),onOpenFile:n[10]||=e=>i.emit(`open`,e)},null,8,[`open`,`target`,`history`,`all-branches`,`snapshots`,`commands`,`revision`])],4)],512)):D(`v-if`,!0),y(i.ContextMenu,{ref:`gitMenu`,items:i.gitMenuItems,label:`Действия Git`},null,8,[`items`])]),_:1})}var M$=H(yie,[[`render`,j$],[`__scopeId`,`data-v-0ae47615`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/git/ui/GitPanel.vue`]]),N$=()=>({available:!1,branch:``,changes:[]});function P$(e){let t=M(N$()),n=M(``),r=M(!1),i=M(0),a=0;async function o(){let o=++a;i.value++,r.value=!0,n.value=``;try{let n=await tt(e(),`git`);o===a&&(t.value=n)}catch(e){o===a&&(n.value=e instanceof Error?e.message:`Ошибка Git`)}finally{o===a&&(r.value=!1)}}async function s(i,o){++a,r.value=!1,t.value=await Ft(e(),i,o),n.value=``}function c(){++a,t.value=N$()}function l(){++a}return{git:t,error:n,loading:r,gutterRevision:i,load:o,mutate:s,reset:c,cancel:l}}var F$=50,I$=()=>({available:!1,head:``,upstream:``,ahead:0,behind:0,me:``,commits:[],next:null});function L$(e){let t=M(I$()),n=M([]),r=M(``),i=M(!1),a=M(!1),o=M(!1),s=M(``),c=M({}),l=0,u=e=>({q:r.value,all:String(i.value),...e});async function d(){let r=++l;a.value=!0,o.value=!1,s.value=``;try{let i=Math.min(200,Math.max(F$,n.value.length)),a=await tt(e(),`log`,u({limit:String(i)}));if(r!==l)return;t.value=a,n.value=a.commits}catch(e){r===l&&(s.value=e instanceof Error?e.message:`Ошибка Git`)}finally{r===l&&(a.value=!1)}}async function f(){if(t.value.next===null||a.value||o.value)return;let r=l;o.value=!0;try{let i=await tt(e(),`log`,u({skip:String(t.value.next),limit:String(F$)}));if(r!==l)return;let a=new Set(n.value.map(e=>e.hash));n.value=[...n.value,...i.commits.filter(e=>!a.has(e.hash))],t.value={...t.value,next:i.next}}catch(e){r===l&&(s.value=e instanceof Error?e.message:`Ошибка Git`)}finally{r===l&&(o.value=!1)}}function p(e){return e.query!==void 0&&(r.value=e.query),e.all!==void 0&&(i.value=e.all),n.value=[],d()}async function m(t,n=!1){let r=c.value[t];if(r&&(r.detail||r.loading)&&!n)return r;let i=e();c.value[t]={loading:!0,error:``};try{let n=await tt(i,`commit`,{hash:t});i===e()&&(c.value[t]={loading:!1,error:``,detail:n})}catch(n){i===e()&&(c.value[t]={loading:!1,error:n instanceof Error?n.message:`Ошибка Git`})}return c.value[t]}function h(){++l,t.value=I$(),n.value=[],c.value={},r.value=``,i.value=!1,a.value=!1,o.value=!1,s.value=``}return{log:t,commits:n,query:r,all:i,loading:a,loadingMore:o,error:s,details:c,load:d,more:f,filter:p,detail:m,reset:h}}var R$=()=>({available:!1,current:``,detached:!1,remotes:[],branches:[]});function z$(e){let t=M(R$()),n=M(``),r=M(!1),i=0;async function a(){let a=++i;r.value=!0,n.value=``;try{let n=await tt(e(),`branches`);a===i&&(t.value=n)}catch(e){a===i&&(n.value=e instanceof Error?e.message:`Ошибка Git`)}finally{a===i&&(r.value=!1)}}async function o(a,o){++i,r.value=!1,t.value=await Ht(e(),a,o),n.value=``}async function s(a){++i,r.value=!1;let o=await Dt(e(),a);return t.value=o.branches,n.value=``,o}function c(){++i,t.value=R$(),n.value=``,r.value=!1}return{state:t,error:n,loading:r,load:a,mutate:o,sync:s,reset:c}}var B$={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function V$(e,t){return K(),U(`svg`,B$,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`},null,-1)]])}var H$=L({name:`lucide-message-square`,render:V$});function U$(e,t,n,r){let i=M(`open`),a=M([]),o=M(null),s=M(!1),c=M(!1),l=M(``),u=0,d=n=>tt(e(),t,{state:i.value,page:String(n)}),f=e=>e instanceof Error?e.message:r;async function p(){let e=++u;s.value=!0,c.value=!1,l.value=``;try{let t=await d(1);if(e!==u)return;a.value=t[n],o.value=t.next}catch(t){e===u&&(l.value=f(t))}finally{e===u&&(s.value=!1)}}async function m(){if(o.value===null||s.value||c.value)return;let e=u;c.value=!0;try{let t=await d(o.value);if(e!==u)return;let r=new Set(a.value.map(e=>e.number));a.value=[...a.value,...t[n].filter(e=>!r.has(e.number))],o.value=t.next}catch(t){e===u&&(l.value=f(t))}finally{e===u&&(c.value=!1)}}function h(e){return i.value=e,a.value=[],o.value=null,p()}function g(){++u,i.value=`open`,a.value=[],o.value=null,s.value=!1,c.value=!1,l.value=``}return{state:i,items:a,next:o,loading:s,loadingMore:c,error:l,load:p,more:m,filter:h,reset:g}}var W$=e=>U$(e,`issues`,`issues`,`Не удалось прочитать issues`);function G$(e){let{kind:t,plural:n,singular:r,list:i}=e,a=e.host??`GitHub`,o=M(!0),s=Je(`${t}:${e.projectId()}`,()=>({surface:t,projectId:e.projectId()})),c=Ae(s.scope);c(`ide.${t}.block.toggle`,`Свернуть или развернуть блок ${n}`,`Показывает или скрывает список ${n} в сайдбаре.`,()=>{o.value=!o.value}),c(`ide.${t}.refresh`,`Обновить список ${n}`,`Перечитывает первую страницу ${n} ${a} с текущим фильтром состояния.`,()=>i.load()),c(`ide.${t}.filter`,`Отфильтровать ${n} по состоянию`,`Переключает state и перечитывает список.`,e=>{let{state:n}=J(e),r=[`open`,`closed`,`all`,...t===`mergeRequests`?[`merged`]:[]];if(!r.includes(String(n)))throw Error(`Укажите state: ${r.join(`, `)}`);return i.filter(n)},{state:`string: ${t===`mergeRequests`?`open, closed, merged или all`:`open, closed или all`}`}),c(`ide.${t}.more`,`Показать следующую страницу ${n}`,`Догружает следующую страницу ${n} текущего фильтра (по 30).`,()=>i.more()),c(`ide.${t}.open`,`Открыть ${r}`,`Открывает вкладку выбранного ${r}: ${e.opens}.`,t=>{let{number:n,title:i,pinned:a}=J(t);if(typeof n!=`number`)throw Error(`Укажите номер ${r}`);e.open({number:n,title:typeof i==`string`?i:``},a===!0)},{number:`number: номер ${r}`,title:`string (необязательно): заголовок вкладки`,pinned:`boolean (необязательно): true — постоянная вкладка вместо временной`});let l=!1;return E(e.active,e=>{e&&!l&&(l=!0,i.load())},{immediate:!0}),E(e.projectId,()=>{l=!1,i.reset()}),{commands:s,open:o}}var K$=W({__name:`UiListSection`,props:{title:{type:String,required:!0},count:{type:Number,required:!0},open:{type:Boolean,required:!0},filters:{type:Array,required:!1},current:{type:null,required:!1},loading:{type:Boolean,required:!0},loadingMore:{type:Boolean,required:!0},error:{type:String,required:!0},hasMore:{type:Boolean,required:!0},noun:{type:String,required:!0},filterLabel:{type:String,required:!1},toggleCommand:{type:String,required:!1}},emits:[`toggle`,`filter`,`more`],setup(e,{expose:t,emit:n}){t();let r={emit:n,UiEmpty:am,UiMessage:Te,UiScrollArea:Tp,get IconChevronRight(){return Ch}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),q$=[`aria-expanded`,`data-command`],J$={key:0,class:`count`},Y$=[`aria-label`],X$=[`aria-pressed`,`onClick`],Z$={key:4,class:`list`},Q$=[`disabled`];function $$(t,n,r,i,a,o){return K(),F(i.UiScrollArea,{class:`side-content list-section`},{default:e(()=>[I(`button`,{class:`block-toggle`,type:`button`,"aria-expanded":r.open,"data-command":r.toggleCommand,onClick:n[0]||=e=>i.emit(`toggle`)},[y(i.IconChevronRight,{class:Y([`chevron`,{open:r.open}]),"aria-hidden":`true`},null,8,[`class`]),I(`h3`,null,[G(X(r.title)+` `,1),r.count?(K(),U(`span`,J$,X(r.count),1)):D(`v-if`,!0)])],8,q$),te(y(i.UiScrollArea,{class:`block-body`},{default:e(()=>[r.filters?.length?(K(),U(`div`,{key:0,class:`state-filter`,role:`group`,"aria-label":`${r.filterLabel??`Состояние`}: ${r.noun}`},[(K(!0),U(P,null,S(r.filters,e=>(K(),U(`button`,{key:e.value,type:`button`,class:Y({active:r.current===e.value}),"aria-pressed":r.current===e.value,onClick:t=>i.emit(`filter`,e.value)},X(e.label),11,X$))),128))],8,Y$)):D(`v-if`,!0),r.loading?(K(),F(i.UiMessage,{key:1,variant:`note`,tone:`muted`,role:`status`},{default:e(()=>[G(`загрузка: `+X(r.noun)+`…`,1)]),_:1})):r.error?(K(),F(i.UiMessage,{key:2,variant:`note`,tone:`danger`,role:`alert`},{default:e(()=>[G(X(r.error),1)]),_:1})):r.count?(K(),U(`ul`,Z$,[c(t.$slots,`default`,{},void 0,!0)])):(K(),F(i.UiEmpty,{key:3,density:`compact`,align:`start`},{default:e(()=>[G(`Нет: `+X(r.noun),1)]),_:1})),r.hasMore&&!r.loading?(K(),U(`button`,{key:5,type:`button`,class:`more`,disabled:r.loadingMore,onClick:n[1]||=e=>i.emit(`more`)},X(r.loadingMore?`загрузка…`:`Показать ещё`),9,Q$)):D(`v-if`,!0)]),_:3},512),[[ae,r.open]])]),_:3})}var e1=H(K$,[[`render`,$$],[`__scopeId`,`data-v-90891e56`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiListSection.vue`]]),t1=W({__name:`TrackerPanel`,props:{title:{type:String,required:!0},prefix:{type:String,required:!0},open:{type:Boolean,required:!0},count:{type:Number,required:!0},state:{type:String,required:!0},loading:{type:Boolean,required:!0},loadingMore:{type:Boolean,required:!0},error:{type:String,required:!0},hasMore:{type:Boolean,required:!0},noun:{type:String,required:!0},states:{type:Array,required:!1}},emits:[`toggle`,`filter`,`more`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=[{value:`open`,label:`открытые`},{value:`closed`,label:`закрытые`},{value:`all`,label:`все`}],o={props:r,emit:i,defaultStates:a,filters:B(()=>r.states??a),UiListSection:e1};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});function n1(t,n,r,i,a,o){return K(),F(i.UiListSection,{class:`tracker-panel`,title:r.title,count:r.count,open:r.open,filters:i.filters,current:r.state,loading:r.loading,"loading-more":r.loadingMore,error:r.error,"has-more":r.hasMore,noun:r.noun,"toggle-command":`${r.prefix}.block.toggle`,onToggle:n[0]||=e=>i.emit(`toggle`),onFilter:n[1]||=e=>i.emit(`filter`,e),onMore:n[2]||=e=>i.emit(`more`)},{default:e(()=>[c(t.$slots,`default`)]),_:3},8,[`title`,`count`,`open`,`filters`,`current`,`loading`,`loading-more`,`error`,`has-more`,`noun`,`toggle-command`])}var r1=H(t1,[[`render`,n1],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/issues/ui/TrackerPanel.vue`]]),i1=W({__name:`UiListRow`,props:{label:{type:String,required:!1}},setup(e,{expose:t}){t();let n={UiInline:Be};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),a1=[`title`];function o1(t,n,r,i,a,o){return K(),U(`button`,{type:`button`,class:`list-row`,title:r.label},[y(i.UiInline,{as:`span`,class:`title`,gap:1,align:`normal`,justify:`normal`},{default:e(()=>[c(t.$slots,`title`,{},void 0,!0)]),_:3}),y(i.UiInline,{as:`span`,class:`meta`,wrap:``,justify:`normal`},{default:e(()=>[c(t.$slots,`meta`,{},void 0,!0)]),_:3})],8,a1)}var s1=H(i1,[[`render`,o1],[`__scopeId`,`data-v-bab5278d`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiListRow.vue`]]),c1=W({__name:`EmojiText`,props:{text:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=ln(),i={props:n,emojis:r,parts:B(()=>hn(n.text,r.value))};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),l1=[`src`,`alt`,`title`];function u1(e,t,n,r,i,a){return K(!0),U(P,null,S(r.parts,(e,t)=>(K(),U(P,{key:t},[typeof e==`string`?(K(),U(P,{key:1},[G(X(e),1)],64)):(K(),U(`img`,{key:0,class:`github-emoji`,src:e.url,alt:`:${e.name}:`,title:`:${e.name}:`,loading:`lazy`},null,8,l1))],64))),128)}var d1=H(c1,[[`render`,u1],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/EmojiText.vue`]]),f1=W({__name:`TrackerRow`,props:{number:{type:Number,required:!0},title:{type:String,required:!0},labels:{type:Array,required:!0},author:{type:Object,required:!0}},setup(e,{expose:t}){t();let n={labelDot:e=>e.color?`#${e.color}`:`transparent`,UiInline:Be,UiListRow:s1,UiStatusDot:Ze,EmojiText:d1,UiAvatar:jn};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),p1={class:`number`};function m1(t,n,r,i,a,o){return K(),F(i.UiListRow,null,{title:e(()=>[c(t.$slots,`icon`,{},void 0,!0),I(`span`,null,[y(i.EmojiText,{text:r.title},null,8,[`text`])])]),meta:e(()=>[I(`span`,p1,`#`+X(r.number),1),(K(!0),U(P,null,S(r.labels.slice(0,3),t=>(K(),F(i.UiInline,{as:`span`,inline:``,gap:1,justify:`normal`,key:t.name,class:`label`},{default:e(()=>[y(i.UiStatusDot,{class:`dot`,shrink:``,style:Qe({background:i.labelDot(t)})},null,8,[`style`]),y(i.EmojiText,{text:t.name},null,8,[`text`])]),_:2},1024))),128)),y(i.UiInline,{as:`span`,inline:``,gap:1,justify:`normal`,class:`author`},{default:e(()=>[y(i.UiAvatar,{src:r.author.avatarUrl,alt:r.author.login,size:14},null,8,[`src`,`alt`]),G(` `+X(r.author.login),1)]),_:1}),c(t.$slots,`meta`,{},void 0,!0)]),_:3})}var h1=H(f1,[[`render`,m1],[`__scopeId`,`data-v-bf8db166`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/issues/ui/TrackerRow.vue`]]),g1=W({__name:`IssuesPanel`,props:{projectId:{type:String,required:!0},active:{type:Boolean,required:!0},host:{type:String,required:!1,default:`GitHub`}},emits:[`open`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=W$(()=>r.projectId),{commands:o,open:s}=G$({kind:`issues`,plural:`issues`,singular:`issue`,host:r.host,opens:`обсуждение`,projectId:()=>r.projectId,active:()=>r.active,list:a,open:(e,t)=>i(`open`,e,t)});t({refresh:()=>a.load()});let c={props:r,emit:i,list:a,commands:o,open:s,UiInline:Be,get IconComment(){return H$},TrackerPanel:r1,TrackerRow:h1};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}});function _1(t,n,r,i,a,o){return K(),F(i.TrackerPanel,{title:`Issues`,noun:`issues`,prefix:`ide.issues`,open:i.open,count:i.list.items.value.length,state:i.list.state.value,loading:i.list.loading.value,"loading-more":i.list.loadingMore.value,error:i.list.error.value,"has-more":i.list.next.value!==null,onToggle:n[0]||=e=>i.commands.run(`ide.issues.block.toggle`),onFilter:n[1]||=e=>i.commands.run(`ide.issues.filter`,{state:e}),onMore:n[2]||=e=>i.commands.run(`ide.issues.more`)},{default:e(()=>[(K(!0),U(P,null,S(i.list.items.value,t=>(K(),U(`li`,{key:t.number},[y(i.TrackerRow,{number:t.number,title:t.title,labels:t.labels,author:t.author,onClick:e=>i.commands.run(`ide.issues.open`,{number:t.number,title:t.title}),onDblclick:e=>i.commands.run(`ide.issues.open`,{number:t.number,title:t.title,pinned:!0})},{meta:e(()=>[t.comments?(K(),F(i.UiInline,{key:0,as:`span`,inline:``,gap:.75,justify:`normal`,class:`comments`,title:`${t.comments} комментариев`},{default:e(()=>[y(i.IconComment,{"aria-hidden":`true`}),G(X(t.comments),1)]),_:2},1032,[`title`])):D(`v-if`,!0)]),_:2},1032,[`number`,`title`,`labels`,`author`,`onClick`,`onDblclick`])]))),128))]),_:1},8,[`open`,`count`,`state`,`loading`,`loading-more`,`error`,`has-more`])}var v1=H(g1,[[`render`,_1],[`__scopeId`,`data-v-55934d06`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/issues/ui/IssuesPanel.vue`]]),y1={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function b1(e,t){return K(),U(`svg`,y1,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`18`,cy:`18`,r:`3`}),I(`circle`,{cx:`6`,cy:`6`,r:`3`}),I(`path`,{d:`M13 6h3a2 2 0 0 1 2 2v7M6 9v12`})],-1)]])}var x1=L({name:`lucide-git-pull-request`,render:b1}),S1={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function C1(e,t){return K(),U(`svg`,S1,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`18`,cy:`18`,r:`3`}),I(`circle`,{cx:`6`,cy:`6`,r:`3`}),I(`path`,{d:`M18 6V5m0 6v-1M6 9v12`})],-1)]])}var w1=L({name:`lucide-git-pull-request-draft`,render:C1}),T1={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function E1(e,t){return K(),U(`svg`,T1,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`m15.5 3.5l5 5m-5 0l5-5M18 11.62V15M6 9v12`}),I(`circle`,{cx:`18`,cy:`18`,r:`3`}),I(`circle`,{cx:`6`,cy:`6`,r:`3`})],-1)]])}var D1=L({name:`lucide-git-pull-request-closed`,render:E1}),O1=W({__name:`PullsPanel`,props:{projectId:{type:String,required:!0},active:{type:Boolean,required:!0},title:{type:String,required:!1,default:`Pull requests`},noun:{type:String,required:!1,default:`pull requests`},singular:{type:String,required:!1,default:`pull request`},kind:{type:String,required:!1,default:`pulls`},host:{type:String,required:!1,default:`GitHub`},action:{type:String,required:!1,default:`pulls`}},emits:[`open`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=U$(()=>r.projectId,r.action,`pulls`,`Не удалось прочитать ${r.noun}`),{commands:o,open:s}=G$({kind:r.kind,plural:r.noun,singular:r.singular,host:r.host,opens:`описание, ревью, обсуждение и изменённые файлы`,projectId:()=>r.projectId,active:()=>r.active,list:a,open:(e,t)=>i(`open`,e,t)}),c=(e,t)=>o.run(`ide.${r.kind}.${e}`,t),l=e=>e.state===`merged`?cz:e.state===`closed`?D1:e.draft?w1:x1,u=e=>e.draft&&e.state===`open`?`draft`:e.state,d=B(()=>r.kind===`mergeRequests`?[{value:`open`,label:`открытые`},{value:`closed`,label:`закрытые`},{value:`merged`,label:`влитые`},{value:`all`,label:`все`}]:void 0);t({refresh:()=>a.load()});let f={props:r,emit:i,list:a,commands:o,open:s,run:c,stateIcon:l,stateClass:u,states:d,get PIPELINE_STATUS_LABEL(){return wt},get PIPELINE_STATUS_TONE(){return Et},UiStatusDot:Ze,TrackerPanel:r1,TrackerRow:h1,get IconMessage(){return H$}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}}),k1=[`title`],A1=[`title`],j1={key:1,class:`conflict`,title:`Есть конфликты`},M1=[`title`];function N1(t,n,r,i,a,o){return K(),F(i.TrackerPanel,{title:r.title,noun:r.noun,prefix:`ide.${r.kind}`,open:i.open,count:i.list.items.value.length,state:i.list.state.value,loading:i.list.loading.value,"loading-more":i.list.loadingMore.value,error:i.list.error.value,"has-more":i.list.next.value!==null,states:i.states,onToggle:n[0]||=e=>i.run(`block.toggle`),onFilter:n[1]||=e=>i.run(`filter`,{state:e}),onMore:n[2]||=e=>i.run(`more`)},{default:e(()=>[(K(!0),U(P,null,S(i.list.items.value,t=>(K(),U(`li`,{key:t.number},[y(i.TrackerRow,{number:t.number,title:t.title,labels:t.labels,author:t.author,onClick:e=>i.run(`open`,{number:t.number,title:t.title}),onDblclick:e=>i.run(`open`,{number:t.number,title:t.title,pinned:!0})},{icon:e(()=>[(K(),F(C(i.stateIcon(t)),{class:Y([`state`,i.stateClass(t)]),"aria-hidden":`true`},null,8,[`class`]))]),meta:e(()=>[I(`span`,{class:`branches u-truncate`,title:`${t.head} → ${t.base}`},X(t.head)+` → `+X(t.base),9,k1),t.pipeline?(K(),U(`span`,{key:0,class:`ci`,title:`Pipeline #${t.pipeline.id}: ${i.PIPELINE_STATUS_LABEL[t.pipeline.status]}`},[y(i.UiStatusDot,{tone:i.PIPELINE_STATUS_TONE[t.pipeline.status],shrink:``},null,8,[`tone`])],8,A1)):D(`v-if`,!0),t.hasConflicts?(K(),U(`span`,j1,`конфликт`)):D(`v-if`,!0),t.comments?(K(),U(`span`,{key:2,class:`comments`,title:`${t.comments} комментариев`},[y(i.IconMessage,{"aria-hidden":`true`}),G(X(t.comments),1)],8,M1)):D(`v-if`,!0)]),_:2},1032,[`number`,`title`,`labels`,`author`,`onClick`,`onDblclick`])]))),128))]),_:1},8,[`title`,`noun`,`prefix`,`open`,`count`,`state`,`loading`,`loading-more`,`error`,`has-more`,`states`])}var P1=H(O1,[[`render`,N1],[`__scopeId`,`data-v-bbd58609`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/issues/ui/PullsPanel.vue`]]),F1=W({__name:`UiLoadablePanel`,props:{loading:{type:Boolean,required:!0},error:{type:String,required:!0},loadingText:{type:String,required:!1}},setup(e,{expose:t}){t();let n={UiHint:we};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),I1={class:`loadable-panel`};function L1(t,n,r,i,a,o){return K(),U(`div`,I1,[r.loading?(K(),F(i.UiHint,{key:0,size:`xs`,leading:`inherit`,class:`note`,role:`status`},{default:e(()=>[G(X(r.loadingText??`загрузка…`),1)]),_:1})):r.error?(K(),F(i.UiHint,{key:1,size:`xs`,leading:`inherit`,class:`note error`,role:`alert`},{default:e(()=>[G(X(r.error),1)]),_:1})):c(t.$slots,`default`,{},void 0,!0,2)])}var R1=H(F1,[[`render`,L1],[`__scopeId`,`data-v-229bd850`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiLoadablePanel.vue`]]);function z1(e){let t=M(),n=M(!1),r=M(``),i=0;async function a(){if(e.enabled&&!e.enabled()){i++,t.value=void 0,n.value=!1,r.value=e.disabledError??``;return}let a=++i;t.value=void 0,n.value=!0,r.value=``;try{let n=await e.load();a===i&&(t.value=n)}catch(t){a===i&&(r.value=t instanceof Error?t.message:e.errorFallback)}finally{a===i&&(n.value=!1)}}return E(e.keys,a,{immediate:!0}),{data:t,loading:n,error:r,reload:a}}var B1=W({__name:`MiddleTruncate`,props:{text:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=M(),i=M(n.text),a,o=0,s;function c(){return s||(s=document.createElement(`span`),s.setAttribute(`aria-hidden`,`true`),s.style.cssText=`position:fixed;left:-10000px;top:0;visibility:hidden;pointer-events:none;white-space:pre;width:max-content;max-width:none;`,document.body.appendChild(s),s)}function l(e){let t=r.value;if(!t)return 0;let n=c(),i=getComputedStyle(t);return n.style.font=i.font||`${i.fontSize} ${i.fontFamily}`,n.style.fontWeight=i.fontWeight,n.style.fontStyle=i.fontStyle,n.style.letterSpacing=i.letterSpacing,n.textContent=e,n.getBoundingClientRect().width}function u(e){let t=n.text.length;if(e>=t)return n.text;if(e<=1)return`…`;let r=Math.ceil(e/2),i=e-r;return`${n.text.slice(0,r)}…${n.text.slice(t-i)}`}function d(){let e=r.value;if(!e)return;let t=e.clientWidth;if(!t)return;if(l(n.text)<=t){i.value=n.text;return}let a=1,o=n.text.length,s=`…`;for(;a<=o;){let e=Math.floor((a+o)/2),n=u(e);l(n)<=t?(s=n,a=e+1):o=e-1}i.value=s}function p(){cancelAnimationFrame(o),o=requestAnimationFrame(d)}f(()=>{let e=r.value;e&&(typeof ResizeObserver<`u`&&(a=new ResizeObserver(p),a.observe(e)),document.fonts?.ready.then(p),p())}),E(()=>n.text,p),g(()=>{cancelAnimationFrame(o),a?.disconnect()});let m={props:n,host:r,display:i,get observer(){return a},set observer(e){a=e},get frame(){return o},set frame(e){o=e},get measurer(){return s},set measurer(e){s=e},measuringSpan:c,measure:l,cut:u,fit:d,schedule:p};return Object.defineProperty(m,"__isScriptSetup",{enumerable:!1,value:!0}),m}}),V1=[`title`];function H1(e,t,n,r,i,a){return K(),U(`span`,{ref:`host`,class:`middle-truncate`,title:n.text},X(r.display),9,V1)}var U1=H(B1,[[`render`,H1],[`__scopeId`,`data-v-96caedaf`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/MiddleTruncate.vue`]]),W1={added:`A`,deleted:`D`,modified:`M`,renamed:`R`,copied:`C`,conflict:`U`};function G1(e){let t={name:``,path:``,directories:[],files:[]},n=new Map([[``,t]]),r=e=>{if(n.has(e))return n.get(e);let r=e.split(`/`),i=t,a=``;for(let e of r){a=a?`${a}/${e}`:e;let t=n.get(a);t||(t={name:e,path:a,directories:[],files:[]},n.set(a,t),i.directories.push(t)),i=t}return i};for(let t of e){let e=t.path.lastIndexOf(`/`);r(e<0?``:t.path.slice(0,e)).files.push(t)}return t}function K1(e,t){let n=e.name,r=e.path,i=e;if(!t)for(;i.directories.length===1&&i.files.length===0;){let e=i.directories[0];n=n?`${n}/${e.name}`:e.name,r=e.path,i=e}return{name:n,path:r,node:i}}function q1(e){let t=0,n=0,r=0,i=e=>{for(let i of e.files)t++,n+=i.additions??0,r+=i.deletions??0;for(let t of e.directories)i(t)};return i(e),{files:t,additions:n,deletions:r}}function J1(e,t){return{kind:`file`,name:e.path.split(`/`).pop()||e.path,path:e.path,depth:t,file:e}}function Y1(e,t,n,r,i){let a=[],o=[...e.directories].sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`}));for(let e of o){let o=K1(e,n),s=q1(o.node);a.push({kind:`directory`,name:o.name,path:o.path,depth:t,...s}),(r||i.has(o.path))&&a.push(...Y1(o.node,t+1,!1,r,i))}let s=[...e.files].sort((e,t)=>e.path.localeCompare(t.path,void 0,{sensitivity:`base`}));for(let e of s)a.push(J1(e,t));return a}function X1(e){let t=new Set,n=(e,r)=>{for(let i of e.directories){let e=K1(i,r);t.add(e.path),n(e.node,!1)}};return n(G1(e),!0),t}var Z1={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Q1(e,t){return K(),U(`svg`,Z1,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m7 20l5-5l5 5M7 4l5 5l5-5`},null,-1)]])}var $1=L({name:`lucide-chevrons-down-up`,render:Q1}),e0=W({__name:`ChangesTree`,props:{changes:{type:Array,required:!0},selected:{type:String,required:!1,default:``},totals:{type:Object,required:!1},emptyText:{type:String,required:!1,default:`Файлов нет`}},emits:[`open`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=M(``),o=M(new Set),s=M(r.selected),c=V(),{resolver:l}=CQ(),u=B(()=>{let e=a.value.trim().toLowerCase();return e?r.changes.filter(t=>t.path.toLowerCase().includes(e)):r.changes}),d=B(()=>a.value.trim().length>0),f=B(()=>Y1(G1(u.value),0,!0,d.value,o.value)),p=B(()=>r.totals?r.totals:{files:r.changes.length,additions:r.changes.reduce((e,t)=>e+(t.additions??0),0),deletions:r.changes.reduce((e,t)=>e+(t.deletions??0),0)});function m(e){o.value.has(e)?o.value.delete(e):o.value.add(e)}function h(){o.value=o.value.size?new Set:X1(u.value)}function g(e,t){e.kind===`directory`?m(e.path):(s.value=e.path,i(`open`,e.path,(t?.detail??1)>=2,e.file?.originalPath))}function _(e){s.value=e;let t=e.split(`/`),n=new Set(o.value);for(let e=1;e<t.length;e++)n.add(t.slice(0,e).join(`/`));o.value=n}E(()=>r.changes,e=>{o.value=X1(e)},{immediate:!0}),E(()=>r.selected,e=>{s.value=e}),t({reveal:_});let v={props:r,emit:i,query:a,expanded:o,selected:s,inputId:c,resolver:l,filtered:u,searching:d,rows:f,totals:p,toggle:m,expandAll:h,choose:g,reveal:_,UiScrollArea:Tp,UiHint:we,UiActionRow:wl,MiddleTruncate:U1,get CHANGE_MARK(){return W1},get FileIcon(){return TU},get IconChevronRight(){return Ch},get IconCollapse(){return $1}};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}}),t0={class:`changes-tree`},n0={class:`head`},r0={class:`totals`},i0={class:`add`},a0={class:`del`},o0=[`title`,`aria-label`],s0={class:`search`},c0=[`id`,`name`],l0={key:1,class:`tree`,role:`tree`,"aria-label":`Изменённые файлы`},u0={class:`glyph`,"aria-hidden":`true`},d0={class:`count`},f0={class:`add`},p0={class:`del`},m0={key:0,class:`mark binary`,title:`Бинарный файл`},h0={key:1,class:`mark large`,title:`Файл слишком большой`},g0=[`title`],_0={class:`add`},v0={class:`del`};function y0(t,n,r,i,a,o){return K(),U(`div`,t0,[I(`div`,n0,[I(`span`,r0,[G(X(i.totals.files)+X(i.totals.capped?`+`:``)+` файлов `,1),I(`b`,i0,`+`+X(i.totals.additions),1),I(`b`,a0,`−`+X(i.totals.deletions),1)]),I(`button`,{type:`button`,class:`expand`,title:i.expanded.size?`Свернуть дерево`:`Развернуть дерево`,"aria-label":i.expanded.size?`Свернуть дерево`:`Развернуть дерево`,onClick:i.expandAll},[y(i.IconCollapse,{"aria-hidden":`true`})],8,o0)]),I(`label`,s0,[n[1]||=I(`span`,{class:`u-sr-only`},`Фильтр изменённых файлов`,-1),te(I(`input`,{id:i.inputId,name:i.inputId,"onUpdate:modelValue":n[0]||=e=>i.query=e,type:`search`,placeholder:`Фильтр по пути`,autocomplete:`off`,spellcheck:`false`},null,8,c0),[[j,i.query]])]),y(i.UiScrollArea,{class:`body`},{default:e(()=>[i.rows.length?(K(),U(`ul`,l0,[(K(!0),U(P,null,S(i.rows,t=>(K(),U(`li`,{key:`${t.kind}:${t.path}`,role:`none`},[t.kind===`directory`?(K(),F(i.UiActionRow,{key:0,interaction:`item`,radius:`none`,tone:`muted`,gap:1.5,padding:`5px 10px`,class:`directory`,role:`treeitem`,"aria-level":t.depth+1,"aria-expanded":i.expanded.has(t.path)||i.searching,title:t.path,style:Qe({paddingLeft:`${12+t.depth*14}px`}),onClick:e=>i.choose(t)},{default:e(()=>[I(`span`,u0,[y(i.IconChevronRight,{class:Y([`chevron`,{expanded:i.expanded.has(t.path)||i.searching}])},null,8,[`class`])]),y(i.MiddleTruncate,{class:`name`,text:t.name},null,8,[`text`]),I(`span`,d0,X(t.files),1),I(`span`,f0,`+`+X(t.additions),1),I(`span`,p0,`−`+X(t.deletions),1)]),_:2},1032,[`aria-level`,`aria-expanded`,`title`,`style`,`onClick`])):(K(),F(i.UiActionRow,{key:1,interaction:`item`,radius:`none`,tone:`muted`,gap:1.5,padding:`5px 10px`,class:Y([`file`,{selected:i.selected===t.path,lifted:t.file?.generated}]),role:`treeitem`,"aria-level":t.depth+1,"aria-selected":i.selected===t.path,disabled:t.file?.binary||t.file?.tooLarge,title:t.file?.binary?`Бинарный файл`:t.file?.tooLarge?`Файл слишком большой для diff`:t.path,style:Qe({paddingLeft:`${12+t.depth*14}px`}),onClick:e=>i.choose(t,e)},{default:e(()=>[n[2]||=I(`span`,{class:`glyph`,"aria-hidden":`true`},null,-1),y(i.FileIcon,{icon:i.resolver.resolve({name:t.name,path:t.path,directory:!1},!1)},null,8,[`icon`]),y(i.MiddleTruncate,{class:`name`,text:t.name},null,8,[`text`]),t.file?.binary?(K(),U(`span`,m0,`bin`)):t.file?.tooLarge?(K(),U(`span`,h0,`!`)):D(`v-if`,!0),t.file?.kind&&t.file.kind!==`modified`?(K(),U(`span`,{key:2,class:Y([`mark`,t.file.kind]),title:t.file.kind},X(i.CHANGE_MARK[t.file.kind]),11,g0)):D(`v-if`,!0),I(`span`,_0,`+`+X(t.file?.additions??0),1),I(`span`,v0,`−`+X(t.file?.deletions??0),1)]),_:2},1032,[`aria-level`,`aria-selected`,`class`,`disabled`,`title`,`style`,`onClick`]))]))),128))])):(K(),F(i.UiHint,{key:0,size:`xs`,leading:`inherit`,class:`note`},{default:e(()=>[G(X(i.searching?`Ничего не найдено`:r.emptyText),1)]),_:1})),i.totals.truncated?(K(),F(i.UiHint,{key:2,size:`xs`,leading:`inherit`,class:`note truncation`},{default:e(()=>[...n[3]||=[G(` Показаны не все файлы: источник ограничивает diff. `,-1)]]),_:1})):D(`v-if`,!0)]),_:1})])}var b0=H(e0,[[`render`,y0],[`__scopeId`,`data-v-7829cc49`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/issues/ui/ChangesTree.vue`]]),x0=W({__name:`PullRequestFilesSection`,props:{projectId:{type:String,required:!0},number:{type:Number,required:!0},head:{type:String,required:!1},snapshot:{type:Object,required:!1},onOpen:{type:Function,required:!1}},setup(e,{expose:t}){let n=e,{data:r,loading:i,error:a,reload:o}=z1({load:()=>tt(n.projectId,`pull-files`,{number:String(n.number)}),keys:()=>[n.projectId,n.number,n.head,n.snapshot],enabled:()=>!n.snapshot,errorFallback:`Не удалось прочитать изменения`}),s=B(()=>r.value??n.snapshot),c=B(()=>Il(s.value?.files??[])),l=B(()=>{let e=s.value?.files??[];return{files:s.value?.changedFiles??e.length,additions:e.reduce((e,t)=>e+t.additions,0),deletions:e.reduce((e,t)=>e+t.deletions,0),capped:s.value?.changedFilesCapped===!0,truncated:s.value?.filesTruncated===!0}}),u=B(()=>s.value?.diffRefs?.headSha??n.head??``),d=M();t({reveal:e=>d.value?.reveal(e),refresh:o});let f={props:n,loaded:r,loading:i,error:a,reload:o,changes:s,files:c,summary:l,head:u,tree:d,UiLoadablePanel:R1,ChangesTree:b0};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}});function S0(t,n,r,i,a,o){return K(),F(i.UiLoadablePanel,{loading:i.loading,error:i.error,"loading-text":`загрузка: изменения…`},{default:e(()=>[y(i.ChangesTree,{ref:`tree`,changes:i.files,totals:i.summary,"empty-text":`Файлов нет`,onOpen:n[0]||=(e,t)=>r.onOpen?.(e,t,i.head)},null,8,[`changes`,`totals`])]),_:1},8,[`loading`,`error`])}var C0=H(x0,[[`render`,S0],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/issues/ui/PullRequestFilesSection.vue`]]),w0={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function T0(e,t){return K(),U(`svg`,w0,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`12`,cy:`12`,r:`10`}),I(`path`,{d:`m16 9l-5.5 5.5L8 12`})],-1)]])}var E0=L({name:`lucide-circle-check`,render:T0}),D0=W({__name:`DiscussionsPanel`,props:{projectId:{type:String,required:!0},active:{type:Boolean,required:!0}},emits:[`open`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=U$(()=>r.projectId,`discussions`,`discussions`,`Не удалось прочитать discussions`),{commands:o,open:s}=G$({kind:`discussions`,plural:`discussions`,singular:`discussion`,opens:`описание, комментарии и ответы`,projectId:()=>r.projectId,active:()=>r.active,list:a,open:(e,t)=>i(`open`,e,t)});t({refresh:()=>a.load()});let c={props:r,emit:i,list:a,commands:o,open:s,UiInline:Be,EmojiText:d1,TrackerPanel:r1,TrackerRow:h1,get IconAnswered(){return E0},get IconComment(){return H$}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),O0={key:0,class:`category`};function k0(t,n,r,i,a,o){return K(),F(i.TrackerPanel,{title:`Discussions`,noun:`discussions`,prefix:`ide.discussions`,open:i.open,count:i.list.items.value.length,state:i.list.state.value,loading:i.list.loading.value,"loading-more":i.list.loadingMore.value,error:i.list.error.value,"has-more":i.list.next.value!==null,onToggle:n[0]||=e=>i.commands.run(`ide.discussions.block.toggle`),onFilter:n[1]||=e=>i.commands.run(`ide.discussions.filter`,{state:e}),onMore:n[2]||=e=>i.commands.run(`ide.discussions.more`)},{default:e(()=>[(K(!0),U(P,null,S(i.list.items.value,t=>(K(),U(`li`,{key:t.number},[y(i.TrackerRow,{number:t.number,title:t.title,labels:t.labels,author:t.author,onClick:e=>i.commands.run(`ide.discussions.open`,{number:t.number,title:t.title}),onDblclick:e=>i.commands.run(`ide.discussions.open`,{number:t.number,title:t.title,pinned:!0})},{icon:e(()=>[t.answered?(K(),F(i.IconAnswered,{key:0,class:`answered`,title:`Есть ответ`,"aria-hidden":`true`})):D(`v-if`,!0)]),meta:e(()=>[t.category.name?(K(),U(`span`,O0,[y(i.EmojiText,{text:t.category.emoji},null,8,[`text`]),G(` `+X(t.category.name),1)])):D(`v-if`,!0),t.comments?(K(),F(i.UiInline,{key:1,as:`span`,inline:``,gap:.75,justify:`normal`,class:`comments`,title:`${t.comments} комментариев`},{default:e(()=>[y(i.IconComment,{"aria-hidden":`true`}),G(X(t.comments),1)]),_:2},1032,[`title`])):D(`v-if`,!0)]),_:2},1032,[`number`,`title`,`labels`,`author`,`onClick`,`onDblclick`])]))),128))]),_:1},8,[`open`,`count`,`state`,`loading`,`loading-more`,`error`,`has-more`])}var A0=H(D0,[[`render`,k0],[`__scopeId`,`data-v-2b54bab4`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/issues/ui/DiscussionsPanel.vue`]]),j0=[{value:`all`,label:`все`},{value:`running`,label:`идут`},{value:`failed`,label:`ошибки`},{value:`success`,label:`успех`}];function M0(e){let t=M(`all`),n=M([]),r=M(null),i=M(!1),a=M(!1),o=M(``),s=0,c=n=>tt(e(),`pipelines`,{status:t.value,page:String(n)}),l=e=>e instanceof Error?e.message:`Не удалось прочитать pipelines`;async function u(){let e=++s;i.value=!0,a.value=!1,o.value=``;try{let t=await c(1);if(e!==s)return;n.value=t.pipelines,r.value=t.next}catch(t){e===s&&(o.value=l(t))}finally{e===s&&(i.value=!1)}}async function d(){if(r.value===null||i.value||a.value)return;let e=s;a.value=!0;try{let t=await c(r.value);if(e!==s)return;let i=new Set(n.value.map(e=>e.id));n.value=[...n.value,...t.pipelines.filter(e=>!i.has(e.id))],r.value=t.next}catch(t){e===s&&(o.value=l(t))}finally{e===s&&(a.value=!1)}}function f(e){return t.value=e,n.value=[],r.value=null,u()}function p(){++s,t.value=`all`,n.value=[],r.value=null,i.value=!1,a.value=!1,o.value=``}return{status:t,items:n,next:r,loading:i,loadingMore:a,error:o,load:u,more:d,filter:f,reset:p}}function N0(e){let{list:t}=e,n=M(!0),r=Je(`pipelines:${e.projectId()}`,()=>({surface:`pipelines`,projectId:e.projectId()})),i=Ae(r.scope);i(`ide.pipelines.block.toggle`,`Свернуть или развернуть блок pipelines`,`Показывает или скрывает список pipelines в сайдбаре.`,()=>{n.value=!n.value}),i(`ide.pipelines.refresh`,`Обновить список pipelines`,`Перечитывает первую страницу pipelines с текущим фильтром статуса.`,()=>t.load()),i(`ide.pipelines.filter`,`Отфильтровать pipelines по статусу`,`Переключает статус и перечитывает список.`,e=>{let{status:n}=J(e);if(!j0.some(e=>e.value===n)&&n!==`canceled`)throw Error(`Укажите status: all, running, success, failed или canceled`);return t.filter(n)},{status:`string: all, running, success, failed или canceled`}),i(`ide.pipelines.more`,`Показать следующую страницу pipelines`,`Догружает следующую страницу pipelines текущего фильтра (по 30).`,()=>t.more()),i(`ide.pipelines.open`,`Открыть pipeline`,`Открывает вкладку выбранного pipeline: статус, ветка, коммит и джобы.`,t=>{let{id:n,title:r,pinned:i}=J(t);if(typeof n!=`number`)throw Error(`Укажите номер pipeline`);e.open({id:n,title:typeof r==`string`?r:``},i===!0)},{id:`number: номер pipeline`,title:`string (необязательно): заголовок вкладки`,pinned:`boolean (необязательно): true — постоянная вкладка вместо временной`});let a=!1;return E(e.active,e=>{e&&!a&&(a=!0,t.load())},{immediate:!0}),E(e.projectId,()=>{a=!1,t.reset()}),{commands:r,open:n}}var P0=W({__name:`PipelineRow`,props:{pipeline:{type:Object,required:!0}},setup(e,{expose:t}){t();let n={UiListRow:s1,UiStatusDot:Ze,get relativeTime(){return wn},get shortHash(){return kn},get durationLabel(){return _t},get PIPELINE_STATUS_LABEL(){return wt},get PIPELINE_STATUS_TONE(){return Et},get refLabel(){return et},get sourceLabel(){return Pt}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),F0={class:`name`},I0={class:`number`},L0={key:0},R0={key:1,class:`mono`},z0={key:2},B0=[`title`];function V0(t,n,r,i,a,o){return K(),F(i.UiListRow,{label:r.pipeline.name||r.pipeline.ref},{title:e(()=>[y(i.UiStatusDot,{tone:i.PIPELINE_STATUS_TONE[r.pipeline.status],title:i.PIPELINE_STATUS_LABEL[r.pipeline.status],shrink:``},null,8,[`tone`,`title`]),I(`span`,F0,X(i.refLabel(r.pipeline.ref)||r.pipeline.name||`Pipeline`),1),I(`span`,I0,`#`+X(r.pipeline.id),1)]),meta:e(()=>[I(`span`,null,X(i.PIPELINE_STATUS_LABEL[r.pipeline.status]),1),r.pipeline.source?(K(),U(`span`,L0,X(i.sourceLabel(r.pipeline.source)),1)):D(`v-if`,!0),r.pipeline.sha?(K(),U(`span`,R0,X(i.shortHash(r.pipeline.sha)),1)):D(`v-if`,!0),i.durationLabel(r.pipeline.duration)?(K(),U(`span`,z0,X(i.durationLabel(r.pipeline.duration)),1)):D(`v-if`,!0),r.pipeline.createdAt?(K(),U(`span`,{key:3,title:r.pipeline.createdAt},X(i.relativeTime(r.pipeline.createdAt)),9,B0)):D(`v-if`,!0)]),_:1},8,[`label`])}var H0=H(P0,[[`render`,V0],[`__scopeId`,`data-v-17ccccde`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/pipelines/ui/PipelineRow.vue`]]),U0=W({__name:`PipelinesPanel`,props:{projectId:{type:String,required:!0},active:{type:Boolean,required:!0}},emits:[`open`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=M0(()=>r.projectId),{commands:o,open:s}=N0({projectId:()=>r.projectId,active:()=>r.active,list:a,open:(e,t)=>i(`open`,e,t)}),c=(e,t)=>o.run(`ide.pipelines.${e}`,t),l=(e,t=!1)=>c(`open`,{id:e.id,title:e.name||e.ref,pinned:t});t({refresh:()=>a.load()});let u={props:r,emit:i,list:a,commands:o,open:s,run:c,openPipeline:l,UiListSection:e1,get PIPELINE_FILTERS(){return j0},PipelineRow:H0};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});function W0(t,n,r,i,a,o){return K(),F(i.UiListSection,{class:`pipeline-panel`,title:`Pipelines`,count:i.list.items.value.length,open:i.open,filters:i.PIPELINE_FILTERS,current:i.list.status.value,loading:i.list.loading.value,"loading-more":i.list.loadingMore.value,error:i.list.error.value,"has-more":i.list.next.value!==null,noun:`pipelines`,"filter-label":`Статус`,"toggle-command":`ide.pipelines.block.toggle`,onToggle:n[0]||=e=>i.run(`block.toggle`),onFilter:n[1]||=e=>i.run(`filter`,{status:e}),onMore:n[2]||=e=>i.run(`more`)},{default:e(()=>[(K(!0),U(P,null,S(i.list.items.value,e=>(K(),U(`li`,{key:e.id},[y(i.PipelineRow,{pipeline:e,onClick:t=>i.openPipeline(e),onDblclick:t=>i.openPipeline(e,!0)},null,8,[`pipeline`,`onClick`,`onDblclick`])]))),128))]),_:1},8,[`count`,`open`,`filters`,`current`,`loading`,`loading-more`,`error`,`has-more`])}var G0=H(U0,[[`render`,W0],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/pipelines/ui/PipelinesPanel.vue`]]);function K0(e,t,n,r,i){let a=ee(),o=M(!1),s=M(``),c=M(0);return E(()=>[e(),t(),c.value],async([e,t],l,u)=>{let d=new AbortController,f=!0,p;u(()=>{f=!1,clearTimeout(p),d.abort()}),o.value=!a.value,s.value=``;try{let r=await tt(e,n,{id:String(t)},d.signal);if(!f)return;a.value=r,i?.(r)&&(p=setTimeout(()=>c.value++,1e4))}catch(e){f&&(s.value=e instanceof Error?e.message:r)}finally{f&&(o.value=!1)}},{immediate:!0}),{detail:a,loading:o,error:s,reload:()=>c.value++}}var q0=new Set([`queued`,`running`]);function J0(e,t){return K0(e,t,`pipeline`,`Не удалось открыть pipeline`,e=>q0.has(e.pipeline.status))}function Y0(e,t){return K0(e,t,`job`,`Не удалось открыть джоб`,e=>q0.has(e.job.status))}var X0=W({__name:`PipelineView`,props:{projectId:{type:String,required:!0},id:{type:Number,required:!0},host:{type:String,required:!1,default:`GitLab`}},emits:[`openJob`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{detail:a,loading:o,error:s,reload:c}=J0(()=>r.projectId,()=>r.id),l=M(!1),u=B(()=>lt(a.value?.jobs??[],{problemsOnly:l.value})),d=B(()=>(a.value?.jobs??[]).filter(e=>ot.has(e.status)).length),f=B(()=>{let e=a.value?Et[a.value.pipeline.status]:`muted`;return e===`warning`||e===`success`||e===`danger`?e:`neutral`}),p=Je(`pipeline:${r.projectId}:${r.id}`,()=>({surface:`pipeline`,projectId:r.projectId,pipelineId:r.id})),m=Ae(p.scope),h=(e,t=!1)=>p.run(`ide.pipeline.job.open`,{id:e.id,title:e.name,pinned:t});m(`ide.pipeline.refresh`,`Обновить pipeline`,`Перечитывает статус pipeline и список его джобов.`,()=>c()),m(`ide.pipeline.job.open`,`Открыть джоб`,`Открывает вкладку джоба: статус, стадия и readonly-лог.`,e=>{let{id:t,title:n,pinned:r}=J(e);if(typeof t!=`number`)throw Error(`Укажите номер джоба`);i(`openJob`,{id:t,title:typeof n==`string`?n:``},r===!0)},{id:`number: номер джоба`,title:`string (необязательно): заголовок вкладки`,pinned:`boolean (необязательно): true — постоянная вкладка`}),Tn(()=>{let e=`Pipeline #${r.id}`;if(s.value)return{note:e,text:`Ошибка: ${s.value}`};let t=a.value;if(!t)return{note:e,text:`Загрузка…`};let n=t.pipeline,i=t.jobs.map(e=>`${wt[e.status]}: ${e.stage?`${e.stage} / `:``}${e.name} (#${e.id})`).slice(0,100);return{note:e,text:Nn(`Состояние: ${wt[n.status]}`,`Ветка: ${et(n.ref)||`нет`}, коммит: ${n.sha||`нет`}`,`Источник: ${Pt(n.source)||`нет`}`,`Создан: ${n.createdAt}`,n.duration===null?``:`Длительность: ${_t(n.duration)}`,`Джобов: ${t.jobs.length}`,i.length?`Джобы:\n${i.join(`
|
|
161
|
-
`)}`:`Джобов нет`,t.jobsTruncated?`Показано ${t.jobs.length} джобов, остальные — на ${r.host}.`:``)}});let g={props:r,emit:i,detail:a,loading:o,error:s,reload:c,problemsOnly:l,groups:u,failing:d,stateTone:f,commands:p,register:m,openJob:h,UiArticle:An,UiDetailHeader:On,UiHeading:Ee,UiHint:we,UiViewerPage:Mn,UiStatusDot:Ze,get countRu(){return ft},get PIPELINE_PROBLEM_STATUSES(){return ot},get relativeTime(){return wn},get shortHash(){return kn},get durationLabel(){return _t},get PIPELINE_STATUS_LABEL(){return wt},get PIPELINE_STATUS_TONE(){return Et},get refLabel(){return et},get sourceLabel(){return Pt}};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}}),Z0={key:0,class:`mono`},Q0={key:1},$0={key:2,class:`mono`},e2=[`title`],t2={key:4},n2={class:`jobs-head`},r2={class:`jobs-count`},i2={key:0,class:`job-filter`,role:`group`,"aria-label":`Фильтр джобов`},a2=[`aria-pressed`],o2=[`aria-pressed`],s2=[`open`],c2={class:`stage-name`},l2={class:`stage-count`},u2={class:`stage-summary`},d2={class:`job-list`},f2=[`title`,`onClick`],p2={class:`job-name`},m2={class:`job-status`},h2={key:0,class:`job-time`},g2={class:`job-number`};function _2(t,n,r,i,a,o){return K(),F(i.UiViewerPage,null,{default:e(()=>[i.loading?(K(),F(i.UiHint,{key:0,size:`xs`,leading:`inherit`,class:`note`,role:`status`},{default:e(()=>[...n[2]||=[G(`загрузка: pipeline…`,-1)]]),_:1})):i.error?(K(),F(i.UiHint,{key:1,size:`xs`,leading:`inherit`,class:`note error`,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):i.detail?(K(),F(i.UiArticle,{key:2},{default:e(()=>[y(i.UiDetailHeader,{state:i.PIPELINE_STATUS_LABEL[i.detail.pipeline.status],tone:i.stateTone,title:`Pipeline`,number:i.detail.pipeline.id,subtitle:i.detail.pipeline.name,"external-href":i.detail.pipeline.webUrl,host:r.host},{meta:e(()=>[i.detail.pipeline.ref?(K(),U(`span`,Z0,X(i.refLabel(i.detail.pipeline.ref)),1)):D(`v-if`,!0),i.detail.pipeline.source?(K(),U(`span`,Q0,X(i.sourceLabel(i.detail.pipeline.source)),1)):D(`v-if`,!0),i.detail.pipeline.sha?(K(),U(`span`,$0,X(i.shortHash(i.detail.pipeline.sha)),1)):D(`v-if`,!0),i.detail.pipeline.createdAt?(K(),U(`span`,{key:3,title:i.detail.pipeline.createdAt},`создан `+X(i.relativeTime(i.detail.pipeline.createdAt)),9,e2)):D(`v-if`,!0),i.durationLabel(i.detail.pipeline.duration)?(K(),U(`span`,t2,`за `+X(i.durationLabel(i.detail.pipeline.duration)),1)):D(`v-if`,!0)]),_:1},8,[`state`,`tone`,`number`,`subtitle`,`external-href`,`host`]),I(`div`,n2,[y(i.UiHeading,{as:`h3`,size:`sm`,tone:`secondary`,"space-before":4,"space-after":0},{default:e(()=>[...n[3]||=[G(`Джобы`,-1)]]),_:1}),I(`span`,r2,X(i.countRu(i.detail.jobs.length,`джоб`,`джоба`,`джобов`)),1),i.failing?(K(),U(`div`,i2,[I(`button`,{type:`button`,class:Y({active:!i.problemsOnly}),"aria-pressed":!i.problemsOnly,onClick:n[0]||=e=>i.problemsOnly=!1},` все `,10,a2),I(`button`,{type:`button`,class:Y({active:i.problemsOnly}),"aria-pressed":i.problemsOnly,onClick:n[1]||=e=>i.problemsOnly=!0},` проблемы (`+X(i.failing)+`) `,11,o2)])):D(`v-if`,!0)]),i.detail.jobs.length?i.groups.length?D(`v-if`,!0):(K(),F(i.UiHint,{key:1,size:`xs`,leading:`inherit`,class:`note`},{default:e(()=>[...n[5]||=[G(`Проблемных джобов нет`,-1)]]),_:1})):(K(),F(i.UiHint,{key:0,size:`xs`,leading:`inherit`,class:`note`},{default:e(()=>[...n[4]||=[G(`Джобов нет`,-1)]]),_:1})),(K(!0),U(P,null,S(i.groups,e=>(K(),U(`div`,{key:e.stage,class:`stage`},[I(`details`,{open:e.jobs.length<=20||e.jobs.some(e=>i.PIPELINE_PROBLEM_STATUSES.has(e.status))},[I(`summary`,null,[y(i.UiStatusDot,{tone:e.tone,shrink:``},null,8,[`tone`]),I(`span`,c2,X(e.stage),1),I(`span`,l2,X(e.count),1),I(`span`,u2,X(e.summary.join(` · `)),1)]),I(`ul`,d2,[(K(!0),U(P,null,S(e.jobs,e=>(K(),U(`li`,{key:e.id},[I(`button`,{type:`button`,class:`job`,title:e.failureReason||`Открыть джоб #${e.id}`,onClick:t=>i.openJob(e)},[y(i.UiStatusDot,{tone:i.PIPELINE_STATUS_TONE[e.status],shrink:``},null,8,[`tone`]),I(`span`,p2,X(e.name||`Job #${e.id}`),1),I(`span`,m2,X(i.PIPELINE_STATUS_LABEL[e.status]),1),i.durationLabel(e.duration)?(K(),U(`span`,h2,X(i.durationLabel(e.duration)),1)):D(`v-if`,!0),I(`span`,g2,`#`+X(e.id),1)],8,f2)]))),128))])],8,s2)]))),128)),i.detail.jobsTruncated?(K(),F(i.UiHint,{key:2,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[G(` Показано `+X(i.detail.jobs.length)+` джобов. Остальные — на `+X(r.host)+`. `,1)]),_:1})):D(`v-if`,!0)]),_:1})):D(`v-if`,!0)]),_:1})}var v2=H(X0,[[`render`,_2],[`__scopeId`,`data-v-8fd21af1`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/pipelines/ui/PipelineView.vue`]]),y2=W({__name:`JobView`,props:{projectId:{type:String,required:!0},id:{type:Number,required:!0},host:{type:String,required:!1,default:`GitLab`}},setup(e,{expose:t}){t();let n=e,{detail:r,loading:i,error:a,reload:o}=Y0(()=>n.projectId,()=>n.id),s=B(()=>{let e=r.value?.job.status;if(!e)return`neutral`;let t=Et[e];return t===`warning`||t===`success`||t===`danger`?t:`neutral`}),c=Je(`job:${n.projectId}:${n.id}`,()=>({surface:`job`,projectId:n.projectId,jobId:n.id})),l=Ae(c.scope);l(`ide.job.refresh`,`Обновить джоб`,`Перечитывает статус джоба и его readonly-лог.`,()=>o()),Tn(()=>{let e=`Job #${n.id}`;if(a.value)return{note:e,text:`Ошибка: ${a.value}`};let t=r.value;if(!t)return{note:e,text:`Загрузка…`};let i=t.job,o=t.log.length>2e4?`${t.log.slice(0,2e4)}…`:t.log;return{note:e,text:Nn(`Состояние: ${wt[i.status]}`,`${i.name||`Job #${i.id}`}${i.stage?` (${i.stage})`:``}`,`Ветка: ${i.ref||`нет`}`,`Создан: ${i.createdAt}`,i.duration===null?``:`Длительность: ${_t(i.duration)}`,i.failureReason?`Причина: ${i.failureReason}`:``,i.allowFailure?`Разрешено падение`:``,t.logTruncated?`Лог показан не полностью.`:``,o?`Лог:\n${o}`:`Лог пуст`)}});let u={props:n,detail:r,loading:i,error:a,reload:o,stateTone:s,commands:c,register:l,UiArticle:An,UiDetailHeader:On,UiHeading:Ee,UiHint:we,UiViewerPage:Mn,get relativeTime(){return wn},get durationLabel(){return _t},get PIPELINE_STATUS_LABEL(){return wt},get refLabel(){return et}};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}}),b2={key:0},x2={key:1,class:`mono`},S2=[`title`],C2={key:3},w2={key:4},T2={key:2,class:`trace`};function E2(t,n,r,i,a,o){return K(),F(i.UiViewerPage,null,{default:e(()=>[i.loading?(K(),F(i.UiHint,{key:0,size:`xs`,leading:`inherit`,class:`note`,role:`status`},{default:e(()=>[...n[0]||=[G(`загрузка: джоб…`,-1)]]),_:1})):i.error?(K(),F(i.UiHint,{key:1,size:`xs`,leading:`inherit`,class:`note error`,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):i.detail?(K(),F(i.UiArticle,{key:2,width:1100},{default:e(()=>[y(i.UiDetailHeader,{state:i.PIPELINE_STATUS_LABEL[i.detail.job.status],tone:i.stateTone,title:i.detail.job.name||`Job`,number:i.detail.job.id,"external-href":i.detail.job.webUrl,host:r.host},{meta:e(()=>[i.detail.job.stage?(K(),U(`span`,b2,X(i.detail.job.stage),1)):D(`v-if`,!0),i.detail.job.ref?(K(),U(`span`,x2,X(i.refLabel(i.detail.job.ref)),1)):D(`v-if`,!0),i.detail.job.createdAt?(K(),U(`span`,{key:2,title:i.detail.job.createdAt},`создан `+X(i.relativeTime(i.detail.job.createdAt)),9,S2)):D(`v-if`,!0),i.durationLabel(i.detail.job.duration)?(K(),U(`span`,C2,`за `+X(i.durationLabel(i.detail.job.duration)),1)):D(`v-if`,!0),i.detail.job.allowFailure?(K(),U(`span`,w2,`падение разрешено`)):D(`v-if`,!0)]),_:1},8,[`state`,`tone`,`title`,`number`,`external-href`,`host`]),i.detail.job.failureReason?(K(),F(i.UiHint,{key:0,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[G(`Причина: `+X(i.detail.job.failureReason),1)]),_:1})):D(`v-if`,!0),y(i.UiHeading,{as:`h3`,size:`sm`,tone:`secondary`,"space-before":4,"space-after":2},{default:e(()=>[...n[1]||=[G(`Лог`,-1)]]),_:1}),i.detail.log?(K(),U(`pre`,T2,X(i.detail.log),1)):(K(),F(i.UiHint,{key:1,size:`xs`,leading:`inherit`,class:`note`},{default:e(()=>[...n[2]||=[G(`Лог пуст или недоступен`,-1)]]),_:1})),i.detail.logTruncated?(K(),F(i.UiHint,{key:3,size:`xs`,leading:`inherit`,"space-before":2,class:`note`},{default:e(()=>[G(` Показаны первые 2 MiB лога. Полный лог — на `+X(r.host)+`. `,1)]),_:1})):D(`v-if`,!0)]),_:1})):D(`v-if`,!0)]),_:1})}var D2=H(y2,[[`render`,E2],[`__scopeId`,`data-v-c3007911`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/pipelines/ui/JobView.vue`]]);function O2(e){let t=M([]),n=M(null),r=M(``),i=M(!1),a=M(!1),o=M(``),s=0,c=t=>tt(e(),`releases`,{page:String(t)}),l=e=>e instanceof Error?e.message:`Не удалось прочитать релизы`;async function u(){let e=++s;i.value=!0,a.value=!1,o.value=``;try{let i=await c(1);if(e!==s)return;t.value=i.releases,n.value=i.next,r.value=i.latestTag}catch(t){e===s&&(o.value=l(t))}finally{e===s&&(i.value=!1)}}async function d(){if(n.value===null||i.value||a.value)return;let e=s;a.value=!0;try{let i=await c(n.value);if(e!==s)return;let a=new Set(t.value.map(e=>e.id));t.value=[...t.value,...i.releases.filter(e=>!a.has(e.id))],n.value=i.next,i.latestTag&&(r.value=i.latestTag)}catch(t){e===s&&(o.value=l(t))}finally{e===s&&(a.value=!1)}}function f(){++s,t.value=[],n.value=null,r.value=``,i.value=!1,a.value=!1,o.value=``}return{items:t,next:n,latestTag:r,loading:i,loadingMore:a,error:o,load:u,more:d,reset:f}}function k2(e){let{list:t}=e,n=M(!0),r=Je(`releases:${e.projectId()}`,()=>({surface:`releases`,projectId:e.projectId()})),i=Ae(r.scope);i(`ide.releases.block.toggle`,`Свернуть или развернуть блок releases`,`Показывает или скрывает список релизов в сайдбаре.`,()=>{n.value=!n.value}),i(`ide.releases.refresh`,`Обновить список релизов`,`Перечитывает первую страницу релизов.`,()=>t.load()),i(`ide.releases.more`,`Показать следующую страницу релизов`,`Догружает следующую страницу релизов (по 30).`,()=>t.more()),i(`ide.releases.open`,`Открыть релиз`,`Открывает вкладку релиза: описание, ссылки и скачиваемые файлы.`,t=>{let{tag:n,title:r,pinned:i}=J(t);if(typeof n!=`string`||!n.trim())throw Error(`Укажите тег релиза`);e.open({tag:n.trim(),title:typeof r==`string`?r:``},i===!0)},{tag:`string: тег релиза`,title:`string (необязательно): заголовок вкладки`,pinned:`boolean (необязательно): true — постоянная вкладка вместо временной`});let a=!1;return E(e.active,e=>{e&&!a&&(a=!0,t.load())},{immediate:!0}),E(e.projectId,()=>{a=!1,t.reset()}),{commands:r,open:n}}function A2(e){return e===null||!Number.isFinite(e)||e<0?``:e<1024?`${Math.round(e)} Б`:e<1048576?`${(e/1024).toLocaleString(`ru-RU`,{maximumFractionDigits:1})} КБ`:e<1073741824?`${(e/1024/1024).toLocaleString(`ru-RU`,{maximumFractionDigits:1})} МБ`:`${(e/1024/1024/1024).toLocaleString(`ru-RU`,{maximumFractionDigits:1})} ГБ`}function j2(e){return e===null?``:ft(e,`скачивание`,`скачивания`,`скачиваний`)}var M2=W({__name:`ReleaseRow`,props:{release:{type:Object,required:!0},latest:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n={UiBadge:kd,UiListRow:s1,get relativeTime(){return wn},get countRu(){return ft},get downloadsLabel(){return j2}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),N2={class:`tag mono`},P2={key:0,class:`name`},F2=[`title`],I2={key:2},L2={key:3};function R2(t,n,r,i,a,o){return K(),F(i.UiListRow,{label:r.release.name||r.release.tag},{title:e(()=>[I(`span`,N2,X(r.release.tag||`release`),1),r.latest?(K(),F(i.UiBadge,{key:0,tone:`info`,shrink:``},{default:e(()=>[...n[0]||=[G(`последний`,-1)]]),_:1})):D(`v-if`,!0),r.release.prerelease?(K(),F(i.UiBadge,{key:1,tone:`warning`,shrink:``},{default:e(()=>[...n[1]||=[G(`пререлиз`,-1)]]),_:1})):D(`v-if`,!0),r.release.draft?(K(),F(i.UiBadge,{key:2,shrink:``},{default:e(()=>[...n[2]||=[G(`черновик`,-1)]]),_:1})):D(`v-if`,!0),r.release.upcoming?(K(),F(i.UiBadge,{key:3,tone:`warning`,shrink:``},{default:e(()=>[...n[3]||=[G(`скоро`,-1)]]),_:1})):D(`v-if`,!0)]),meta:e(()=>[r.release.name&&r.release.name!==r.release.tag?(K(),U(`span`,P2,X(r.release.name),1)):D(`v-if`,!0),r.release.releasedAt?(K(),U(`span`,{key:1,title:r.release.releasedAt},X(i.relativeTime(r.release.releasedAt)),9,F2)):D(`v-if`,!0),r.release.assetCount?(K(),U(`span`,I2,X(i.countRu(r.release.assetCount,`файл`,`файла`,`файлов`)),1)):D(`v-if`,!0),r.release.downloads?(K(),U(`span`,L2,X(i.downloadsLabel(r.release.downloads)),1)):D(`v-if`,!0)]),_:1},8,[`label`])}var z2=H(M2,[[`render`,R2],[`__scopeId`,`data-v-05e69409`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/releases/ui/ReleaseRow.vue`]]),B2=W({__name:`ReleasesPanel`,props:{projectId:{type:String,required:!0},active:{type:Boolean,required:!0}},emits:[`open`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O2(()=>r.projectId),{commands:o,open:s}=k2({projectId:()=>r.projectId,active:()=>r.active,list:a,open:(e,t)=>i(`open`,e,t)}),c=(e,t)=>o.run(`ide.releases.${e}`,t),l=(e,t=!1)=>c(`open`,{tag:e.tag,title:e.name||e.tag,pinned:t});t({refresh:()=>a.load()});let u={props:r,emit:i,list:a,commands:o,open:s,run:c,openRelease:l,UiListSection:e1,ReleaseRow:z2};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});function V2(t,n,r,i,a,o){return K(),F(i.UiListSection,{class:`release-panel`,title:`Releases`,count:i.list.items.value.length,open:i.open,loading:i.list.loading.value,"loading-more":i.list.loadingMore.value,error:i.list.error.value,"has-more":i.list.next.value!==null,noun:`релизы`,"toggle-command":`ide.releases.block.toggle`,onToggle:n[0]||=e=>i.run(`block.toggle`),onMore:n[1]||=e=>i.run(`more`)},{default:e(()=>[(K(!0),U(P,null,S(i.list.items.value,e=>(K(),U(`li`,{key:e.id},[y(i.ReleaseRow,{release:e,latest:e.tag===i.list.latestTag.value,onClick:t=>i.openRelease(e),onDblclick:t=>i.openRelease(e,!0)},null,8,[`release`,`latest`,`onClick`,`onDblclick`])]))),128))]),_:1},8,[`count`,`open`,`loading`,`loading-more`,`error`,`has-more`])}var H2=H(B2,[[`render`,V2],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/releases/ui/ReleasesPanel.vue`]]);async function U2(e=``,t,n=`GET`,r,i={}){let a=new URLSearchParams(i);t&&a.set(`projectId`,t);let o=await fetch(`/api/docker${e}?${a}`,{method:n,headers:{"Content-Type":`application/json`},body:r===void 0?void 0:JSON.stringify(r)}),s=await o.json();if(!o.ok)throw Error(s.error||`Ошибка Docker`);return s}function W2(e,t){let r=M(),i=M(``),a=M(!1),o=M(!1),s=M(!1),c=M(``),l=M(``),u=Je(`docker:${e}`,()=>({surface:`docker`,projectId:e,context:r.value?.context??``,busy:a.value})),d=!1,p=!1,m=0,h,_=B(()=>{let e=r.value,t=e?.binding;return!e||!t||t.context!==e.context?[]:e.containers.filter(e=>e.project===t.name)}),v=B(()=>s.value?r.value?.containers??[]:_.value),y=B(()=>v.value.find(e=>e.id===c.value));async function b(){if(p)return r.value;p=!0;let t=++m;try{let n=await U2(``,e,`GET`,void 0,l.value?{context:l.value}:{});return!d&&t===m&&(r.value=n,i.value=``),n}catch(e){throw!d&&t===m&&(i.value=e instanceof Error?e.message:`Docker недоступен`,r.value&&={...r.value,connected:!1,containers:[]}),e}finally{p=!1}}let x=()=>!!r.value?.connected&&!a.value;async function S(e){if(a.value)throw Error(`Дождитесь текущего Docker-действия`);a.value=!0;try{for(;p;)await new Promise(e=>setTimeout(e,25));return await e()}finally{a.value=!1}}let C=(e,n,r,i,a=()=>!0,o)=>{u.scope.registerCommand({id:`ide.docker.${e}`,title:n,description:r,arguments:o,enabled:e=>t.enabled!==!1&&a(J(e)),run:e=>i(J(e))})};C(`open`,`Открыть Docker`,`Открывает Docker во вкладке проекта; all=true показывает все контейнеры выбранного context.`,e=>{s.value=e.all===!0,typeof e.containerId==`string`&&(c.value=e.containerId),t.open()},()=>!0,{all:`true — все контейнеры машины`,containerId:`Выбрать контейнер`}),C(`status`,`Получить состояние Docker`,`Возвращает daemon, contexts, Compose-привязку, контейнеры, health и опубликованные порты.`,b),C(`daemon.start`,`Запустить Docker daemon`,`Если Docker daemon не запущен, поднимает его способом, принятым в этой ОС (systemd, Docker Desktop, OrbStack, Colima), и ждёт ответа до 90 секунд. Может запросить пароль администратора.`,()=>S(async()=>{o.value=!0;try{await U2(`/daemon/start`,e,`POST`,{context:r.value?.context})}finally{o.value=!1,await b().catch(()=>{})}return r.value}),()=>!a.value&&!!r.value?.enabled&&!!r.value.daemon?.start.auto),C(`sidebar.open`,`Показать Docker в боковой панели`,`Открывает сервисы текущего проекта в боковой панели.`,t.sidebar),C(`refresh`,`Обновить Docker`,`Перечитывает состояние выбранного Docker context.`,b,()=>!p),C(`context.select`,`Выбрать Docker context`,`Меняет окружение просмотра внутри Projector, не меняя глобальный context Docker CLI.`,async e=>{if(typeof e.context!=`string`||!r.value?.contexts.some(t=>t.name===e.context&&t.local))throw Error(`Выберите локальный context`);for(l.value=e.context,c.value=``,r.value=void 0,++m;p;)await new Promise(e=>setTimeout(e,25));return b()},()=>!a.value,{context:`Имя локального Docker context`}),C(`container.select`,`Показать контейнер`,`Выбирает контейнер и показывает порты, образ, health и mounts.`,e=>{if(typeof e.containerId!=`string`||!r.value?.containers.some(t=>t.id===e.containerId))throw Error(`Контейнер не найден`);c.value=e.containerId},x,{containerId:`Полный ID контейнера`}),C(`binding.save`,`Привязать Compose к проекту`,`Сохраняет context, name, files, profiles, envFiles на диске. Ничего не запускает. binding=null удаляет привязку.`,t=>S(async()=>{let n=await U2(`/binding`,e,`PUT`,t);return l.value=n.binding?.context??``,await b(),n}),()=>!a.value&&!!r.value?.enabled,{context:`Docker context`,name:`Compose project name`,files:`Упорядоченный список Compose-файлов относительно проекта`,profiles:`Список profiles`,envFiles:`Список env-файлов`,binding:`null — отвязать`}),C(`logs.read`,`Прочитать логи контейнера`,`Возвращает последние 200 строк логов; не открывает терминал.`,t=>{let n=t.containerId??c.value;if(typeof n!=`string`||!r.value?.containers.some(e=>e.id===n))throw Error(`Выберите контейнер`);return U2(`/logs`,e,`GET`,void 0,{context:r.value.context,containerId:n})},x,{containerId:`Полный ID контейнера`});for(let[n,i,a]of[[`start`,`Запустить контейнер`,`Запускает существующий контейнер.`],[`stop`,`Остановить контейнер`,`Останавливает контейнер с таймаутом 10 секунд.`],[`restart`,`Перезапустить контейнер`,`Прерывает текущие процессы контейнера и запускает его снова.`],[`remove`,`Удалить контейнер`,`Удаляет остановленный контейнер; volumes сохраняются. confirm=true подтверждает удаление.`],[`logs`,`Открыть логи контейнера`,`Открывает поток docker logs в терминальной вкладке; закрытие вкладки оставляет контейнер работать.`],[`shell`,`Открыть shell контейнера`,`Открывает docker exec -it с sh или bash в настоящем PTY. Закрытие клиента не гарантирует завершение запущенных внутри задач.`],[`up`,`Поднять Compose`,`Создаёт и запускает окружение из сохранённой привязки; может собирать и скачивать образы.`],[`composeStop`,`Остановить Compose`,`Останавливает сервисы, сохраняя контейнеры и данные.`],[`composeRestart`,`Перезапустить Compose`,`Перезапускает сервисы и прерывает их текущие процессы.`],[`down`,`Удалить Compose-окружение`,`Останавливает и удаляет контейнеры и сети. Volumes сохраняются. confirm=true подтверждает удаление.`],[`build`,`Собрать Compose`,`Собирает образы; прогресс и код завершения показаны в терминале.`],[`pull`,`Скачать образы Compose`,`Скачивает образы сервисов; прогресс показан в терминале.`]]){let o=[`up`,`composeStop`,`composeRestart`,`down`,`build`,`pull`].includes(n);C(n,i,a,a=>S(async()=>{let s=a.containerId??c.value;if(!o&&!r.value?.containers.some(e=>e.id===s))throw Error(`Выберите контейнер`);if((n===`remove`||n===`down`)&&a.confirm!==!0&&!window.confirm(`${i}? Контекст: ${r.value.context}. Объект: ${o?r.value.binding?.name:r.value.containers.find(e=>e.id===s)?.name}. Volumes сохраняются.`))return;let l=await U2(`/action`,e,`POST`,{...a,action:n,containerId:o?void 0:s,context:r.value.context,confirm:n===`remove`||n===`down`||void 0});return await t.terminal(l.session),await b(),l}),e=>{if(!x())return!1;if(o)return!!r.value?.composeVersion&&r.value.binding?.context===r.value.context;let t=r.value?.containers.find(t=>t.id===(e.containerId??c.value));return!!t&&(n===`shell`||n===`stop`?t.state===`running`:n===`remove`||n===`start`?t.state!==`running`:!0)},{containerId:`Полный ID; без аргумента используется выбранный контейнер`,service:`Имя Compose service; без аргумента — всё окружение`,shell:`sh (по умолчанию) или bash`,confirm:`true — явное подтверждение удаления`})}C(`port.open`,`Открыть опубликованный порт`,`Открывает опубликованный TCP-порт в браузере как HTTP или HTTPS. Не определяет протокол приложения автоматически.`,e=>{let t=(r.value?.containers.find(t=>t.id===(e.containerId??c.value)))?.ports.find(t=>t.publicPort===e.port&&t.url);if(!t?.url||e.scheme!==void 0&&e.scheme!==`http`&&e.scheme!==`https`)throw Error(`Выберите TCP-порт и http/https`);LO(e.scheme===`https`?t.url.replace(/^http:/,`https:`):t.url)},x,{containerId:`ID контейнера`,port:`Опубликованный порт (число)`,scheme:`http или https`});async function w(){if(!d&&!document.hidden&&!a.value)try{await b()}catch{}d||(h=setTimeout(w,r.value?.enabled?5e3:15e3))}f(()=>{t.enabled!==!1&&w()}),g(()=>{d=!0,++m,clearTimeout(h)});let T={snapshot:r,error:i,busy:a,starting:o,all:s,selected:c,projectContainers:_,containers:v,current:y,commands:u};return n(G2,T),T}var G2=Symbol(`docker`);function K2(){let e=z(G2);if(!e)throw Error(`Docker host is not installed`);return e}var q2=W({__name:`DockerDaemonNotice`,props:{message:{type:String,required:!0},daemon:{type:Object,required:!1},starting:{type:Boolean,required:!0},size:{type:String,required:!1}},emits:[`start`],setup(e,{expose:t}){t();let n={UiMessage:Te,UiButton:q,UiSpinner:De};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),J2={class:`notice`},Y2={key:0,class:`offer`},X2={class:`how`},Z2={key:1,class:`how`};function Q2(t,n,r,i,a,o){return K(),U(`div`,J2,[y(i.UiMessage,{tone:`danger`,role:`alert`,variant:`padded`,size:r.size??`xs`,flush:``,wrap:``},{default:e(()=>[G(X(r.daemon?.state===`stopped`?`Docker daemon не запущен.`:r.message),1)]),_:1},8,[`size`]),r.daemon?(K(),U(`div`,Y2,[r.daemon.start.auto?(K(),U(P,{key:0},[y(i.UiButton,{size:`sm`,disabled:r.starting,onClick:n[0]||=e=>t.$emit(`start`)},{default:e(()=>[r.starting?(K(),F(i.UiSpinner,{key:0})):D(`v-if`,!0),G(` `+X(r.starting?`Запускаю…`:`Запустить Docker`),1)]),_:1},8,[`disabled`]),I(`span`,X2,X(r.daemon.start.label),1)],64)):(K(),U(`span`,Z2,X(r.daemon.start.manual),1))])):D(`v-if`,!0)])}var $2=H(q2,[[`render`,Q2],[`__scopeId`,`data-v-338f45cb`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/docker/ui/DockerDaemonNotice.vue`]]),e4=W({__name:`UiFormGrid`,props:{layout:{type:String,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function t4(e,t,n,r,i,a){return K(),U(`div`,{class:Y([`form-grid`,n.layout??`equal`])},[c(e.$slots,`default`,{},void 0,!0)],2)}var n4=H(e4,[[`render`,t4],[`__scopeId`,`data-v-b0ec9f90`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiFormGrid.vue`]]),r4=W({__name:`DockerBinding`,setup(e,{expose:t}){t();let{snapshot:n,busy:r,commands:i}=K2(),a=M(``),o=M(``),s=M(``),c=M(``),l=M(``),u=M(!1),d=M(!1),f=e=>e.split(`
|
|
162
|
-
`).map(e=>e.trim()).filter(Boolean),p=Ae(i.scope);p(`ide.docker.binding.edit`,`Настроить Compose-привязку`,`Раскрывает или сворачивает параметры Compose текущего проекта.`,()=>{u.value=!u.value}),p(`ide.docker.binding.options`,`Показать дополнительные параметры Compose`,`Раскрывает дополнительные Compose-файлы, profiles и env-файлы.`,()=>{d.value=!d.value}),E(()=>JSON.stringify([n.value?.binding,n.value?.detectedFiles]),()=>{let e=n.value?.binding,t=e?.files??n.value?.detectedFiles.slice(0,1)??[];a.value=e?.name??``,o.value=t[0]??``,s.value=t.slice(1).join(`
|
|
163
|
-
`),c.value=e?.profiles.join(`, `)??``,l.value=e?.envFiles.join(`
|
|
164
|
-
`)??``},{immediate:!0});let m={snapshot:n,busy:r,commands:i,name:a,primaryFile:o,extraFiles:s,profiles:c,envFiles:l,open:u,advanced:d,lines:f,register:p,UiControl:Se,UiInline:Be,UiFormGrid:n4,UiButton:q,UiField:Re};return Object.defineProperty(m,"__isScriptSetup",{enumerable:!1,value:!0}),m}}),i4=[`open`],a4=[`open`];function o4(t,n,r,i,a,o){return K(),U(`details`,{open:i.open||!i.snapshot?.binding,class:`binding`},[I(`summary`,{onClick:n[0]||=N(e=>i.commands.run(`ide.docker.binding.edit`),[`prevent`])},X(i.snapshot?.binding?`Compose · ${i.snapshot.binding.name}`:`Подключить Compose`),1),I(`form`,{onSubmit:n[8]||=N(e=>i.commands.run(`ide.docker.binding.save`,{context:i.snapshot.context,name:i.name,files:[i.primaryFile.trim(),...i.lines(i.extraFiles)],profiles:i.profiles.split(`,`).map(e=>e.trim()).filter(Boolean),envFiles:i.lines(i.envFiles)}),[`prevent`])},[y(i.UiFormGrid,{layout:`wide-end`},{default:e(()=>[y(i.UiField,{label:`Имя окружения`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.name,"onUpdate:modelValue":n[1]||=e=>i.name=e,"aria-label":`Имя окружения`,required:``,pattern:`[a-z0-9][a-z0-9_\\-]*`,disabled:i.busy,placeholder:`my-project`,spellcheck:`false`}),null,16,[`modelValue`,`disabled`])]),_:1}),y(i.UiField,{label:`Compose-файл`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.primaryFile,"onUpdate:modelValue":n[2]||=e=>i.primaryFile=e,"aria-label":`Compose-файл`,required:``,disabled:i.busy,placeholder:`compose.yaml`,spellcheck:`false`}),null,16,[`modelValue`,`disabled`])]),_:1})]),_:1}),I(`details`,{open:i.advanced,class:`advanced`},[I(`summary`,{onClick:n[3]||=N(e=>i.commands.run(`ide.docker.binding.options`),[`prevent`])},`Дополнительно`),y(i.UiFormGrid,{class:`advanced-fields`},{default:e(()=>[y(i.UiField,{label:`Дополнительные Compose-файлы`},{default:e(({control:e})=>[y(i.UiControl,R({as:`textarea`},e,{modelValue:i.extraFiles,"onUpdate:modelValue":n[4]||=e=>i.extraFiles=e,"aria-label":`Дополнительные Compose-файлы`,disabled:i.busy,placeholder:`compose.override.yaml`,rows:`2`,spellcheck:`false`}),null,16,[`modelValue`,`disabled`])]),_:1}),y(i.UiField,{label:`Env-файлы`},{default:e(({control:e})=>[y(i.UiControl,R({as:`textarea`},e,{modelValue:i.envFiles,"onUpdate:modelValue":n[5]||=e=>i.envFiles=e,"aria-label":`Env-файлы`,disabled:i.busy,placeholder:`.env.local`,rows:`2`,spellcheck:`false`}),null,16,[`modelValue`,`disabled`])]),_:1}),y(i.UiField,{label:`Profiles`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.profiles,"onUpdate:modelValue":n[6]||=e=>i.profiles=e,"aria-label":`Profiles`,disabled:i.busy,placeholder:`dev, debug`,spellcheck:`false`}),null,16,[`modelValue`,`disabled`])]),_:1})]),_:1})],8,a4),y(i.UiInline,{class:`actions`,align:`stretch`},{default:e(()=>[y(i.UiButton,{type:`submit`,disabled:i.busy},{default:e(()=>[...n[9]||=[G(`Сохранить`,-1)]]),_:1},8,[`disabled`]),i.snapshot?.binding?(K(),F(i.UiButton,{key:0,disabled:i.busy,onClick:n[7]||=e=>i.commands.run(`ide.docker.binding.save`,{binding:null})},{default:e(()=>[...n[10]||=[G(`Отвязать`,-1)]]),_:1},8,[`disabled`])):D(`v-if`,!0)]),_:1})],32)],8,i4)}var s4=H(r4,[[`render`,o4],[`__scopeId`,`data-v-8a69e659`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/docker/ui/DockerBinding.vue`]]),c4=W({__name:`DockerPanel`,setup(e,{expose:t}){t();let{snapshot:n,containers:r,current:i,selected:a,all:o,busy:s,starting:c,error:l,commands:u}=K2(),d=M(`sh`),f=e=>e.ports.map(e=>`${e.publicPort}→${e.privatePort}/${e.protocol}`).join(`, `)||`—`;Tn(()=>{let e=n.value,t=e?.binding,a=r.value,c=i.value,u=l.value||e?.error||``;return{note:`Docker`,text:Nn(e?.connected?`Подключение: Docker ${e.version}`:`Подключение: нет`,e?`Контекст: ${e.context}`:void 0,e?.contexts.length?`Контексты: ${e.contexts.map(e=>e.name).join(`, `)}`:void 0,e&&!e.enabled?`Docker выключен`:void 0,o.value?`Показаны: все контейнеры`:`Показаны: контейнеры проекта`,t?`Привязка: ${t.name}${t.files.length?` · ${t.files.join(`, `)}`:``}${t.profiles.length?` · profiles ${t.profiles.join(`, `)}`:``}`:void 0,u?`Ошибка: ${u}`:void 0,s.value?`Выполняется действие…`:void 0,a.length?`Контейнеры:\n${a.map(e=>`${e.service||e.name} — ${e.state}${e.state===`exited`?` (${e.exitCode})`:``}, health ${e.health||`—`}, ${e.image}, ports ${f(e)}`).join(`
|
|
165
|
-
`)}`:`Контейнеры: нет`,c?Nn(`Выбран: ${c.name} (${c.id.slice(0,12)}) · ${c.image} · ${En(c.startedAt)}`,`Порты: ${f(c)}`,c.mounts.length?`Монтирования:\n${c.mounts.map(e=>`${e.target} · ${e.type} · ${e.writable?`rw`:`ro`} ← ${e.source}`).join(`
|
|
166
|
-
`)}`:void 0):void 0)}});let p={snapshot:n,containers:r,current:i,selected:a,all:o,busy:s,starting:c,error:l,commands:u,shell:d,portsOf:f,actions:[{id:`up`,title:`Поднять`},{id:`composeStop`,title:`Остановить`},{id:`composeRestart`,title:`Перезапустить`},{id:`build`,title:`Собрать`},{id:`pull`,title:`Скачать образы`},{id:`down`,title:`Удалить окружение`}],DockerDaemonNotice:$2,UiTable:Op,UiControl:Se,UiInline:Be,UiMessage:Te,DockerBinding:s4,get absoluteTime(){return En},UiButton:q,UiEmpty:am};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),l4=[`value`,`disabled`],u4={class:`muted`},d4={key:3,class:`table-wrap`},f4=[`onClick`],p4={key:4,class:`details`},m4={class:`muted`},h4={key:0,class:`ports`},g4={key:1};function _4(t,n,r,i,a,o){let s=x(`router-link`);return K(),U(`section`,{class:`docker-panel`,onPointerdown:n[12]||=e=>i.commands.scope.activate(),onKeydown:n[13]||=(...e)=>i.commands.keydown&&i.commands.keydown(...e)},[y(i.UiInline,{as:`header`,wrap:``,justify:`normal`},{default:e(()=>[y(i.UiInline,{as:`label`,justify:`normal`},{default:e(()=>[n[14]||=G(`Окружение `,-1),y(i.UiControl,{as:`select`,appearance:`filled`,value:i.snapshot?.context,disabled:i.busy||!i.snapshot,onChange:n[0]||=e=>i.commands.run(`ide.docker.context.select`,{context:e.target.value})},{default:e(()=>[(K(!0),U(P,null,S(i.snapshot?.contexts,e=>(K(),U(`option`,{key:e.name,value:e.name,disabled:!e.local},X(e.name)+X(e.local?``:` · удалённый`),9,l4))),128))]),_:1},8,[`value`,`disabled`])]),_:1}),y(i.UiButton,{active:!i.all,onClick:n[1]||=e=>i.commands.run(`ide.docker.open`)},{default:e(()=>[...n[15]||=[G(`Проект`,-1)]]),_:1},8,[`active`]),y(i.UiButton,{active:i.all,onClick:n[2]||=e=>i.commands.run(`ide.docker.open`,{all:!0})},{default:e(()=>[...n[16]||=[G(`Все контейнеры`,-1)]]),_:1},8,[`active`]),y(i.UiButton,{disabled:i.busy,onClick:n[3]||=e=>i.commands.run(`ide.docker.refresh`)},{default:e(()=>[...n[17]||=[G(`Обновить`,-1)]]),_:1},8,[`disabled`]),I(`span`,u4,X(i.snapshot?.connected?`Docker ${i.snapshot.version}`:`нет подключения`),1)]),_:1}),i.error||i.snapshot?.error?(K(),F(i.DockerDaemonNotice,{key:0,message:i.error||i.snapshot?.error||``,daemon:i.snapshot?.daemon,starting:i.starting,size:`sm`,onStart:n[4]||=e=>i.commands.run(`ide.docker.daemon.start`)},null,8,[`message`,`daemon`,`starting`])):D(`v-if`,!0),!i.snapshot&&!i.error?(K(),F(i.UiEmpty,{key:1},{default:e(()=>[...n[18]||=[G(`Подключение…`,-1)]]),_:1})):i.snapshot&&!i.snapshot.enabled?(K(),F(i.UiEmpty,{key:2},{default:e(()=>[n[20]||=G(`Docker выключен. `,-1),y(s,{to:`/settings`},{default:e(()=>[...n[19]||=[G(`Открыть настройки интеграций`,-1)]]),_:1})]),_:1})):D(`v-if`,!0),i.snapshot?.enabled?(K(),U(P,{key:3},[i.all?D(`v-if`,!0):(K(),F(i.DockerBinding,{key:0})),!i.all&&i.snapshot.binding?(K(),F(i.UiInline,{key:1,class:`actions compose-actions`,wrap:``,justify:`normal`},{default:e(()=>[(K(),U(P,null,S(i.actions,t=>y(i.UiButton,{key:t.id,size:`sm`,disabled:!i.commands.scope.describe(`ide.docker.${t.id}`)?.enabled,onClick:e=>i.commands.run(`ide.docker.${t.id}`)},{default:e(()=>[G(X(t.title),1)]),_:2},1032,[`disabled`,`onClick`])),64)),i.snapshot.connected&&!i.snapshot.composeVersion?(K(),F(i.UiMessage,{key:0,as:`span`,tone:`danger`,variant:`padded`,flush:``,wrap:``},{default:e(()=>[...n[21]||=[G(`Docker Compose не установлен`,-1)]]),_:1})):D(`v-if`,!0)]),_:1})):D(`v-if`,!0),i.snapshot.connected&&!i.containers.length?(K(),F(i.UiEmpty,{key:2},{default:e(()=>[G(X(!i.all&&!i.snapshot.binding?`Сохраните привязку или откройте все контейнеры.`:`Контейнеров нет.`),1)]),_:1})):D(`v-if`,!0),i.containers.length?(K(),U(`div`,d4,[y(i.UiTable,{padding:`var(--sp-2) var(--sp-3)`,"header-tone":`muted`,"header-weight":400},{default:e(()=>[n[22]||=I(`thead`,null,[I(`tr`,null,[I(`th`,null,`Контейнер / сервис`),I(`th`,null,`Состояние`),I(`th`,null,`Health`),I(`th`,null,`Образ`),I(`th`,null,`Порты`)])],-1),I(`tbody`,null,[(K(!0),U(P,null,S(i.containers,e=>(K(),U(`tr`,{key:e.id,class:Y({selected:i.selected===e.id})},[I(`td`,null,[I(`button`,{class:`select-container`,onClick:t=>i.commands.run(`ide.docker.container.select`,{containerId:e.id})},X(e.service||e.name),9,f4),I(`small`,null,X(e.project||`отдельный контейнер`)+` · `+X(e.name),1)]),I(`td`,{class:Y({failed:e.state===`exited`&&e.exitCode!==0})},X(e.state)+X(e.state===`exited`?` · ${e.exitCode}`:``),3),I(`td`,{class:Y({failed:e.health===`unhealthy`})},X(e.health||`не задан`),3),I(`td`,null,X(e.image),1),I(`td`,null,X(e.ports.map(e=>`${e.publicPort} → ${e.privatePort}/${e.protocol}`).join(`, `)||`—`),1)],2))),128))])]),_:1})])):D(`v-if`,!0),i.current?(K(),U(`article`,p4,[I(`h3`,null,X(i.current.name),1),I(`p`,m4,X(i.current.id.slice(0,12))+` · `+X(i.current.image)+` · `+X(i.absoluteTime(i.current.startedAt)),1),y(i.UiInline,{class:`actions`,wrap:``,justify:`normal`},{default:e(()=>[i.current.state===`running`?D(`v-if`,!0):(K(),F(i.UiButton,{key:0,disabled:i.busy||!i.snapshot.connected,onClick:n[5]||=e=>i.commands.run(`ide.docker.start`)},{default:e(()=>[...n[23]||=[G(`Запустить`,-1)]]),_:1},8,[`disabled`])),i.current.state===`running`?(K(),F(i.UiButton,{key:1,disabled:i.busy||!i.snapshot.connected,onClick:n[6]||=e=>i.commands.run(`ide.docker.stop`)},{default:e(()=>[...n[24]||=[G(`Остановить`,-1)]]),_:1},8,[`disabled`])):D(`v-if`,!0),y(i.UiButton,{disabled:i.busy||!i.snapshot.connected,onClick:n[7]||=e=>i.commands.run(`ide.docker.restart`)},{default:e(()=>[...n[25]||=[G(`Перезапустить`,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{disabled:i.busy||!i.snapshot.connected,onClick:n[8]||=e=>i.commands.run(`ide.docker.logs`)},{default:e(()=>[...n[26]||=[G(`Логи`,-1)]]),_:1},8,[`disabled`]),y(i.UiControl,{as:`select`,appearance:`filled`,modelValue:i.shell,"onUpdate:modelValue":n[9]||=e=>i.shell=e,"aria-label":`Оболочка контейнера`},{default:e(()=>[...n[27]||=[I(`option`,null,`sh`,-1),I(`option`,null,`bash`,-1)]]),_:1},8,[`modelValue`]),y(i.UiButton,{disabled:i.busy||i.current.state!==`running`||!i.snapshot.connected,onClick:n[10]||=e=>i.commands.run(`ide.docker.shell`,{shell:i.shell})},{default:e(()=>[...n[28]||=[G(`Shell`,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{disabled:i.busy||i.current.state===`running`||!i.snapshot.connected,onClick:n[11]||=e=>i.commands.run(`ide.docker.remove`)},{default:e(()=>[...n[29]||=[G(`Удалить`,-1)]]),_:1},8,[`disabled`])]),_:1}),i.current.ports.length?(K(),U(`div`,h4,[(K(!0),U(P,null,S(i.current.ports,t=>(K(),U(`div`,{key:`${t.address}:${t.publicPort}/${t.protocol}`},[I(`code`,null,X(t.address)+`:`+X(t.publicPort)+` → `+X(t.privatePort)+`/`+X(t.protocol),1),t.url?(K(),U(P,{key:0},[y(i.UiButton,{size:`sm`,onClick:e=>i.commands.run(`ide.docker.port.open`,{port:t.publicPort})},{default:e(()=>[...n[30]||=[G(`HTTP ↗`,-1)]]),_:1},8,[`onClick`]),y(i.UiButton,{size:`sm`,onClick:e=>i.commands.run(`ide.docker.port.open`,{port:t.publicPort,scheme:`https`})},{default:e(()=>[...n[31]||=[G(`HTTPS ↗`,-1)]]),_:1},8,[`onClick`])],64)):D(`v-if`,!0)]))),128))])):D(`v-if`,!0),i.current.mounts.length?(K(),U(`dl`,g4,[(K(!0),U(P,null,S(i.current.mounts,e=>(K(),U(P,{key:e.target},[I(`dt`,null,X(e.target)+` · `+X(e.type)+` · `+X(e.writable?`rw`:`ro`),1),I(`dd`,null,X(e.source),1)],64))),128))])):D(`v-if`,!0)])):D(`v-if`,!0)],64)):D(`v-if`,!0)],32)}var v4=H(c4,[[`render`,_4],[`__scopeId`,`data-v-2f21e070`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/docker/ui/DockerPanel.vue`]]),y4=W({__name:`DockerSidebar`,setup(e,{expose:t}){t();let{snapshot:n,error:r,starting:i,commands:a,projectContainers:o}=K2(),s={snapshot:n,error:r,starting:i,commands:a,containers:o,UiToolbar:Sg,UiScrollArea:Tp,UiButton:q,UiEmpty:am,DockerDaemonNotice:$2};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),b4=[`onClick`],x4={class:`name`},S4={class:`status`};function C4(t,n,r,i,a,o){return K(),F(i.UiScrollArea,{class:`docker-sidebar`,onPointerdown:n[2]||=e=>i.commands.scope.activate()},{default:e(()=>[y(i.UiToolbar,{as:`header`,justify:`between`,text:`xs`},{default:e(()=>[I(`span`,null,X(i.snapshot?.binding?.name||`Docker`),1),y(i.UiButton,{size:`sm`,onClick:n[0]||=e=>i.commands.run(`ide.docker.open`)},{default:e(()=>[...n[3]||=[G(`открыть`,-1)]]),_:1})]),_:1}),i.error||i.snapshot?.error?(K(),F(i.DockerDaemonNotice,{key:0,message:i.error||i.snapshot?.error||``,daemon:i.snapshot?.daemon,starting:i.starting,onStart:n[1]||=e=>i.commands.run(`ide.docker.daemon.start`)},null,8,[`message`,`daemon`,`starting`])):i.snapshot?i.snapshot.enabled?i.snapshot.binding?i.containers.length?D(`v-if`,!0):(K(),F(i.UiEmpty,{key:4},{default:e(()=>[...n[7]||=[G(`Контейнеры ещё не созданы.`,-1)]]),_:1})):(K(),F(i.UiEmpty,{key:3},{default:e(()=>[...n[6]||=[G(`Откройте Docker и привяжите Compose к проекту.`,-1)]]),_:1})):(K(),F(i.UiEmpty,{key:2},{default:e(()=>[...n[5]||=[G(`Включите Docker в настройках интеграций.`,-1)]]),_:1})):(K(),F(i.UiEmpty,{key:1},{default:e(()=>[...n[4]||=[G(`Подключение…`,-1)]]),_:1})),(K(!0),U(P,null,S(i.containers,e=>(K(),U(`button`,{key:e.id,class:`row`,onClick:t=>i.commands.run(`ide.docker.open`,{containerId:e.id})},[I(`span`,{class:Y([`dot`,{running:e.state===`running`,failed:e.health===`unhealthy`||e.state===`exited`&&e.exitCode!==0}])},`●`,2),I(`span`,x4,X(e.service||e.name),1),I(`span`,S4,X(e.health||e.state)+X(e.state===`exited`?` · ${e.exitCode}`:``),1)],8,b4))),128))]),_:1})}var w4=H(y4,[[`render`,C4],[`__scopeId`,`data-v-c234e115`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/docker/ui/DockerSidebar.vue`]]),T4=W({__name:`DockerSettings`,setup(e,{expose:t}){t();let n=M(),r=M(!1),i=M(`default`),a=M(!1),o=M(``),s=Je(`docker:settings`,()=>({surface:`dockerSettings`,busy:a.value}));async function c(){let e=await U2();return n.value=e,r.value=e.enabled,i.value=e.context,e}s.scope.registerCommand({id:`ide.docker.settings.status`,title:`Проверить подключение Docker`,description:`Возвращает настройки, локальные contexts, доступность daemon и Compose.`,run:c}),s.scope.registerCommand({id:`ide.docker.settings.save`,title:`Сохранить интеграцию Docker`,description:`Сохраняет enabled и context на диске; Docker и контейнеры не запускает.`,arguments:{enabled:`boolean`,context:`Локальный Docker context`},enabled:()=>!a.value,run:async e=>{let t=J(e);a.value=!0,o.value=``;try{return await U2(`/settings`,void 0,`PUT`,{enabled:t.enabled??r.value,context:t.context??i.value}),await c()}catch(e){throw o.value=e instanceof Error?e.message:`Ошибка Docker`,e}finally{a.value=!1}}}),s.scope.registerCommand({id:`ide.docker.settings.daemonStart`,title:`Запустить Docker daemon`,description:`Если daemon не запущен, поднимает его способом, принятым в этой ОС, и ждёт ответа до 90 секунд. Может запросить пароль администратора.`,enabled:()=>!a.value&&!!n.value?.enabled&&!!n.value.daemon?.start.auto,run:async()=>{a.value=!0,o.value=``;try{return await U2(`/daemon/start`,void 0,`POST`,{context:i.value}),await c()}catch(e){throw o.value=e instanceof Error?e.message:`Ошибка Docker`,e}finally{a.value=!1}}}),f(()=>void c().catch(e=>{o.value=e.message}));let l={snapshot:n,enabled:r,context:i,busy:a,error:o,commands:s,load:c,UiHeading:Ee,UiStack:Ed,UiControl:Se,UiInline:Be,DockerDaemonNotice:$2,UiButton:q};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),E4=[`value`,`disabled`],D4={key:0,class:`muted`};function O4(t,n,r,i,a,o){return K(),U(`section`,{class:`docker-settings`,onPointerdown:n[5]||=e=>i.commands.scope.activate()},[y(i.UiInline,{as:`header`,gap:3,justify:`between`,wrap:``},{default:e(()=>[y(i.UiHeading,{as:`h3`,size:`sm`},{default:e(()=>[...n[6]||=[G(`Подключение`,-1)]]),_:1}),I(`span`,null,X(i.snapshot?.connected?`подключён · ${i.snapshot.version}`:`не подключён`),1)]),_:1}),y(i.UiStack,{as:`form`,flow:`flex`,onSubmit:n[3]||=N(e=>i.commands.run(`ide.docker.settings.save`),[`prevent`])},{default:e(()=>[y(i.UiInline,{as:`label`,justify:`normal`},{default:e(()=>[y(i.UiControl,{modelValue:i.enabled,"onUpdate:modelValue":n[0]||=e=>i.enabled=e,type:`checkbox`,disabled:i.busy},null,8,[`modelValue`,`disabled`]),n[7]||=G(` включить интеграцию`,-1)]),_:1}),y(i.UiInline,{as:`label`,justify:`normal`},{default:e(()=>[n[8]||=G(`Окружение `,-1),y(i.UiControl,{as:`select`,appearance:`filled`,modelValue:i.context,"onUpdate:modelValue":n[1]||=e=>i.context=e,disabled:i.busy},{default:e(()=>[(K(!0),U(P,null,S(i.snapshot?.contexts,e=>(K(),U(`option`,{key:e.name,value:e.name,disabled:!e.local},X(e.name)+` · `+X(e.endpoint),9,E4))),128))]),_:1},8,[`modelValue`,`disabled`])]),_:1}),y(i.UiInline,{class:`actions`,gap:3,wrap:``},{default:e(()=>[y(i.UiButton,{type:`submit`,disabled:i.busy||i.enabled&&!i.snapshot?.contexts.some(e=>e.name===i.context&&e.local)},{default:e(()=>[...n[9]||=[G(`Сохранить`,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{disabled:i.busy,onClick:n[2]||=e=>i.commands.run(`ide.docker.settings.status`)},{default:e(()=>[...n[10]||=[G(`Проверить подключение`,-1)]]),_:1},8,[`disabled`])]),_:1})]),_:1}),i.snapshot?.composeVersion?(K(),U(`p`,D4,`Compose `+X(i.snapshot.composeVersion),1)):D(`v-if`,!0),i.error||i.snapshot?.error?(K(),F(i.DockerDaemonNotice,{key:1,message:i.error||i.snapshot?.error||``,daemon:i.snapshot?.daemon,starting:i.busy,onStart:n[4]||=e=>i.commands.run(`ide.docker.settings.daemonStart`)},null,8,[`message`,`daemon`,`starting`])):D(`v-if`,!0)],32)}var k4=H(T4,[[`render`,O4],[`__scopeId`,`data-v-25be8f38`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/docker/ui/DockerSettings.vue`]]),A4={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function j4(e,t){return K(),U(`svg`,A4,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`m2 16l4.039-9.69a.5.5 0 0 1 .923 0L11 16m11-7v7M3.304 13h6.392`}),I(`circle`,{cx:`18.5`,cy:`12.5`,r:`3.5`})],-1)]])}var M4=L({name:`lucide-case-sensitive`,render:j4}),N4={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function P4(e,t){return K(),U(`svg`,N4,[...t[0]||=[A(`<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="7" cy="12" r="3"></circle><path d="M10 9v6"></path><circle cx="17" cy="12" r="3"></circle><path d="M14 7v8m8 2v1c0 .5-.5 1-1 1H3c-.5 0-1-.5-1-1v-1"></path></g>`,1)]])}var F4=L({name:`lucide-whole-word`,render:P4}),I4={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function L4(e,t){return K(),U(`svg`,I4,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M17 3v10m-4.33-7.5l8.66 5m-8.66 0l8.66-5M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2z`},null,-1)]])}var R4=L({name:`lucide-regex`,render:L4}),z4={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function B4(e,t){return K(),U(`svg`,z4,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`}),I(`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`})],-1)]])}var V4=L({name:`lucide-file`,render:B4}),H4=W({__name:`SearchPanel`,props:{projectId:{type:String,required:!0},scope:{type:Object,required:!1}},emits:[`open`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=M(``),o=M(!1),s=M(!1),c=M(!1),l=M([]),u=M(``),d=M(!1),f=M(!1),p=M(!1),m=M(new Set),h=0,_,v;async function y(){let e=++h;if(v?.abort(),f.value=!1,l.value=[],u.value=``,p.value=!1,!a.value.trim())d.value=!1;else{d.value=!0,v=new AbortController;try{let t=await yt(r.projectId,a.value,{caseSensitive:o.value,wholeWord:s.value,regex:c.value},v.signal,r.scope);if(e!==h)return;l.value=t.hits,p.value=t.truncated,f.value=!0}catch(t){e===h&&!v.signal.aborted&&(u.value=t instanceof Error?t.message:`Ошибка поиска`)}finally{e===h&&(d.value=!1)}}}E(a,()=>{clearTimeout(_),++h,v?.abort(),l.value=[],m.value=new Set,f.value=!1,d.value=!!a.value.trim(),_=setTimeout(()=>void y(),300)}),E([o,s,c],()=>{clearTimeout(_),a.value.trim()&&y()});let b=B(()=>{let e=new Map;for(let t of l.value){let n=e.get(t.path)??[];n.push(t),e.set(t.path,n)}return[...e.entries()].map(([e,t])=>{let n=e.split(`/`);return{path:e,name:n.at(-1)??e,directory:n.slice(0,-1).join(`/`),hits:t}})});function x(e){let t=new Set(m.value);t.has(e)?t.delete(e):t.add(e),m.value=t}function S(e){let t=[],n=0;for(let r of e.matches??[]){let i=Math.max(r.start,n);if(i>=e.text.length)break;i>n&&t.push({text:e.text.slice(n,i),match:!1}),t.push({text:e.text.slice(i,r.end),match:!0}),n=Math.max(n,r.end)}return n<e.text.length&&t.push({text:e.text.slice(n),match:!1}),t}function C(){a.value.trim()&&y()}function w(){++h,v?.abort(),clearTimeout(_)}function T(){w(),a.value=``,l.value=[],m.value=new Set}E(()=>r.projectId,T),g(w),t({search:y,refresh:C});let D={props:r,emit:i,query:a,searchCase:o,searchWord:s,searchRegex:c,hits:l,searchError:u,searching:d,searched:f,truncated:p,collapsedGroups:m,get searchGeneration(){return h},set searchGeneration(e){h=e},get searchTimer(){return _},set searchTimer(e){_=e},get searchAbort(){return v},set searchAbort(e){v=e},search:y,searchGroups:b,toggleGroup:x,snippetSegments:S,refresh:C,cancel:w,reset:T,UiScrollArea:Tp,UiControl:Se,UiInline:Be,UiMessage:Te,UiButton:q,get IconCaseSensitive(){return M4},get IconWholeWord(){return F4},get IconRegex(){return R4},get IconChevronRight(){return Ch},get IconChevronDown(){return bd},get IconFile(){return V4}};return Object.defineProperty(D,"__isScriptSetup",{enumerable:!1,value:!0}),D}}),U4=[`aria-expanded`,`title`,`onClick`],W4={class:`result-file u-truncate`},G4={key:2,class:`result-dir u-truncate`},K4={class:`result-count`},q4=[`title`,`onClick`],J4={class:`result-line`},Y4={class:`snippet u-truncate`},X4={key:0};function Z4(t,n,r,i,a,o){return K(),F(i.UiScrollArea,{class:`side-content search-panel`},{default:e(()=>[I(`form`,{class:`search-form`,onSubmit:N(i.search,[`prevent`])},[y(i.UiInline,{class:`search-box`,gap:.5,justify:`normal`},{default:e(()=>[y(i.UiControl,{grow:``,modelValue:i.query,"onUpdate:modelValue":n[0]||=e=>i.query=e,type:`search`,name:`workspace-search`,placeholder:`Найти в проекте…`,"aria-label":`Поиск по содержимому`,maxlength:`200`},null,8,[`modelValue`]),y(i.UiInline,{gap:.5,align:`normal`,justify:`normal`,class:`search-options`,role:`group`,"aria-label":`Параметры поиска`},{default:e(()=>[y(i.UiButton,{shape:`icon`,size:`sm`,active:i.searchCase,"aria-pressed":i.searchCase,title:`Учитывать регистр`,"aria-label":`Учитывать регистр`,onClick:n[1]||=e=>i.searchCase=!i.searchCase},{default:e(()=>[y(i.IconCaseSensitive,{"aria-hidden":`true`})]),_:1},8,[`active`,`aria-pressed`]),y(i.UiButton,{shape:`icon`,size:`sm`,active:i.searchWord,"aria-pressed":i.searchWord,title:`Только слово целиком`,"aria-label":`Только слово целиком`,onClick:n[2]||=e=>i.searchWord=!i.searchWord},{default:e(()=>[y(i.IconWholeWord,{"aria-hidden":`true`})]),_:1},8,[`active`,`aria-pressed`]),y(i.UiButton,{shape:`icon`,size:`sm`,active:i.searchRegex,"aria-pressed":i.searchRegex,title:`Использовать регулярное выражение`,"aria-label":`Использовать регулярное выражение`,onClick:n[3]||=e=>i.searchRegex=!i.searchRegex},{default:e(()=>[y(i.IconRegex,{"aria-hidden":`true`})]),_:1},8,[`active`,`aria-pressed`])]),_:1})]),_:1})],32),i.searching?(K(),F(i.UiMessage,{key:0,class:`notice`,tone:`muted`,size:`xs`,role:`status`},{default:e(()=>[...n[4]||=[G(`поиск…`,-1)]]),_:1})):D(`v-if`,!0),i.searchError?(K(),F(i.UiMessage,{key:1,class:`notice`,tone:`danger`,size:`xs`,role:`alert`},{default:e(()=>[G(X(i.searchError),1)]),_:1})):D(`v-if`,!0),i.searched?(K(),F(i.UiMessage,{key:2,class:`notice`,tone:`muted`,size:`xs`},{default:e(()=>[G(X(i.hits.length?`${i.hits.length} совпадений в ${i.searchGroups.length} файлах${i.truncated?` · показаны первые 200`:``}`:`Совпадений нет`),1)]),_:1})):D(`v-if`,!0),(K(!0),U(P,null,S(i.searchGroups,e=>(K(),U(`div`,{key:e.path,class:`result-group`},[I(`button`,{class:`result-group-header`,type:`button`,"aria-expanded":!i.collapsedGroups.has(e.path),title:e.path,onClick:t=>i.toggleGroup(e.path)},[i.collapsedGroups.has(e.path)?(K(),F(i.IconChevronRight,{key:1,"aria-hidden":`true`})):(K(),F(i.IconChevronDown,{key:0,"aria-hidden":`true`})),y(i.IconFile,{class:`result-file-icon`,"aria-hidden":`true`}),I(`span`,W4,X(e.name),1),e.directory?(K(),U(`span`,G4,X(e.directory),1)):D(`v-if`,!0),I(`span`,K4,X(e.hits.length),1)],8,U4),i.collapsedGroups.has(e.path)?D(`v-if`,!0):(K(!0),U(P,{key:0},S(e.hits,e=>(K(),U(`button`,{key:`${e.path}:${e.line}:${e.column}`,class:`result`,title:`${e.path}:${e.line}`,onClick:t=>i.emit(`open`,e.path,e.line,e.column)},[I(`span`,J4,X(e.line),1),I(`span`,Y4,[(K(!0),U(P,null,S(i.snippetSegments(e),(e,t)=>(K(),U(P,{key:t},[e.match?(K(),U(`mark`,X4,X(e.text),1)):(K(),U(P,{key:1},[G(X(e.text),1)],64))],64))),128))])],8,q4))),128))]))),128))]),_:1})}var Q4=H(H4,[[`render`,Z4],[`__scopeId`,`data-v-c1244354`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/SearchPanel.vue`]]);function $4(e,t,n,r=()=>!0){let i=e(),a=!1;function o(){if(a&&r()){a=!1;try{let e=JSON.stringify(t());sessionStorage.getItem(i)!==e&&sessionStorage.setItem(i,e)}catch{}}}let s=ff(o,600,{maxWait:2500});E(e,e=>{o(),a=!1,i=e},{flush:`sync`}),E(()=>[t(),r()],()=>{r()&&(a=!0,s())},{flush:`sync`}),yf(window,`pagehide`,o),yf(window,`beforeunload`,o),yf(document,`visibilitychange`,()=>{document.visibilityState===`hidden`&&o()}),k(o);function c(){try{let e=sessionStorage.getItem(i);if(e===null)return;let t=n.safeParse(JSON.parse(e));return t.success?t.data:void 0}catch{return}}return{read:c,flush:o}}var e3=new Map,t3=new Map;function n3(e){clearTimeout(t3.get(e)),t3.set(e,setTimeout(()=>{t3.delete(e),bt(e,{directories:[...e3.get(e)?.keys()??[]]})},150))}function r3(e,t){let n=e3.get(e)??new Map;return n.set(t,(n.get(t)??0)+1),e3.set(e,n),n3(e),()=>{let r=(n.get(t)??1)-1;r>0?n.set(t,r):n.delete(t),n.size||e3.delete(e),n3(e)}}var i3=!1,a3=5e3;function o3(e,t){let n,r,i=0;function a(n){n===e.path&&t()}function o(){Date.now()-i<a3||(i=Date.now(),t())}function s(){n3(e.projectId),t()}function c(e){i3||(i3=!0,cn(null,e,`error`,1e4))}f(()=>{(!e.scope||kt(e.scope))&&(gt(e.projectId)&&(n=r3(e.projectId,e.path),r=rt(e.projectId,{directory:a,reconnect:s,error:c})),window.addEventListener(`focus`,o))}),g(()=>{n?.(),r?.(),window.removeEventListener(`focus`,o)})}function s3(){return{revealPath:M(``),directories:new Map}}var c3=Symbol(`tree-paging`);function l3(e,t,n){let r=M([]),i=M(0),a=M(null),o=M(!1),s=M(``),c=0,l,u=``;function d(){let n=t.revealPath.value,r=e.path?`${e.path}/`:``;if(!n||!n.startsWith(r))return``;let i=n.slice(r.length).split(`/`)[0];return i?r+i:``}async function f(t=!1){if(t&&(o.value||a.value===null))return;let f=++c;l?.abort(),l=new AbortController,o.value=!0,s.value=``;let p=`${e.projectId}\0${$t(e.scope)}\0${e.path}`;u!==p&&(r.value=[],i.value=0,a.value=null,u=p);let m=r.value,h=t?a.value:0,g=t?30:Math.max(30,m.length),_=t?``:d()||m.at(-1)?.path||``;try{let o=await pt(e.projectId,e.scope,`tree`,{path:e.path,offset:String(h),limit:String(Math.min(g,1e3)),..._?{reveal:_}:{}},l.signal);if(f!==c)return;let s=t?[...m,...o.entries]:o.entries;if(r.value=[...new Map(s.map(e=>[e.path,e])).values()],i.value=o.total??r.value.length,a.value=o.nextOffset??null,!t){let e=new Set(r.value.map(e=>e.path));for(let t of m)e.has(t.path)||n(t.path)}return t?o.entries[0]?.path:void 0}catch(e){f===c&&(s.value=e instanceof Error?e.message:`Ошибка`)}finally{f===c&&(o.value=!1)}}let p={more:()=>f(!0),available:()=>!o.value&&a.value!==null};return E(()=>e.path,(e,n)=>{n!==void 0&&t.directories.get(n)===p&&t.directories.delete(n),t.directories.set(e,p)},{immediate:!0}),E(()=>[e.projectId,$t(e.scope),e.path,e.revision,d()],()=>void f(),{immediate:!0}),o3(e,()=>void f()),g(()=>{++c,l?.abort(),t.directories.get(e.path)===p&&t.directories.delete(e.path)}),{entries:r,total:i,nextOffset:a,loading:o,error:s}}function u3(e,t,n,r,i){let a=e=>{let t=J(e).path;if(t!==void 0&&typeof t!=`string`)throw Error(`path должен быть строкой`);return t??i()};e.registerCommand({id:`ide.fileTree.directory.loadMore`,title:`Показать следующую порцию файлов`,description:`Загружает следующие 30 дочерних элементов раскрытой папки дерева. Пустой path означает корень проекта.`,arguments:{path:`string (необязательно): путь раскрытой папки относительно проекта`},enabled:e=>!r.value&&!!t.directories.get(a(e))?.available(),run:async e=>{let r=await t.directories.get(a(e))?.more();if(!r)return;await p();let i=n.value?.querySelector(`button[data-path="${CSS.escape(r)}"]`);i?.focus(),i?.scrollIntoView({block:`nearest`})}})}var d3=EZ(WX());function f3({entry:e,expanded:t,item:n,allowed:r}){let i=[];return e&&!e.directory&&i.push(n(`file.open`)),i.push(n(`entry.reveal`)),(!e||e.directory)&&i.push(n(`file.create`),n(`directory.create`)),e&&i.push(n(`${e.directory?`directory`:`file`}.rename`,{separator:!0}),n(`entry.cut`),n(`entry.copy`),n(`entry.duplicate`)),i.push(n(`entry.paste`),n(`entry.copyRelativePath`,{separator:!0}),n(`entry.copyPath`)),e?.directory&&i.push(n(`directory.toggle`,{label:t.has(e.path)?`Свернуть папку`:`Развернуть папку`})),e||i.push(n(`collapseAll`)),i.push(n(`refresh`)),e&&i.push(n(`entry.delete`,{danger:!0,separator:!0})),i.filter(e=>r(e.id))}function p3(e,t,n,r){let i=ht(t.projectId),a=()=>i.reveal&&kt(t.scope)&&!n.busy.value;async function o(e){try{return await At(t.projectId,r(e)?.path??``)}catch(e){throw n.error.value=e instanceof Error?e.message:`Не удалось показать в проводнике`,e}}return e.registerCommand({id:`ide.fileTree.entry.reveal`,title:`Показать в проводнике`,description:`Открывает файл или папку выделенными в системном файловом менеджере. Доступно только для локального проекта на компьютере с сервером Projector.`,arguments:{path:`Путь записи внутри проекта; пустая строка — корень проекта; без аргумента — запись из контекстного меню`},run:o,enabled:a}),a}function m3(e,t,n,r,i={}){let a=i.ctrlKey||i.metaKey,o=r.indexOf(t),s=r.indexOf(n);if(i.shiftKey&&o>=0&&s>=0){let n=a?new Set(e):new Set;for(let e of r.slice(Math.min(o,s),Math.max(o,s)+1))n.add(e);return{paths:n,anchor:t}}let c=a?new Set(e):new Set;return a&&c.has(n)?c.delete(n):c.add(n),{paths:c,anchor:n}}function h3(e){let t=[...e];return t.filter(e=>!t.some(t=>e.startsWith(t+`/`)))}function g3(){let e=M(new Set),t=M(``),n=M([]);function r(n=``){e.value=new Set(n?[n]:[]),t.value=n}function i(n,r){let i=e=>e===n||e.startsWith(n+`/`)?r===void 0?``:r+e.slice(n.length):e;e.value=new Set([...e.value].map(i).filter(Boolean)),t.value=i(t.value)}return{paths:e,anchor:t,dragged:n,replace:r,relocate:i}}var _3=Symbol(`tree-selection`);function v3({props:e,emit:t,selection:n,drag:r,tree:i,menu:a,dialog:o,toggle:s,paging:c}){let{busy:l,expanded:u,error:d,message:f}=r,m=M(),h=M(),g=M(),_=Je(`fileTree:${V()}`,()=>({surface:`fileTree`,projectId:e.projectId,scope:$t(e.scope),entryKind:m.value?m.value.directory?`directory`:`file`:`root`,busy:r.busy.value,clipboard:!!h.value}));function v(e){let t=J(e);if(t.path===void 0)return m.value;if(typeof t.path!=`string`)throw Error(`path должен быть строкой`);if(t.path)return{path:t.path,name:t.path.split(`/`).at(-1),directory:t.kind===`directory`}}function y(e){if(J(e).path!==void 0){let t=v(e);return t?[t.path]:[]}return h3(n.paths.value)}async function b(t,n=``,r){let i=J(r),a=v(r);if(i.directory!==void 0&&typeof i.directory!=`string`)throw Error(`directory должен быть строкой`);let s=typeof i.directory==`string`?i.directory:a?.directory?a.path:Dl(a?.path??``),c={action:t,path:a?.path??``,directory:s,projectId:e.projectId,paths:t===`delete`?y(r):void 0};if(i.name!==void 0&&typeof i.name!=`string`)throw Error(`name должен быть строкой`);if(i.confirm!==void 0&&typeof i.confirm!=`boolean`)throw Error(`confirm должен быть boolean`);if(t!==`delete`&&typeof i.name==`string`||t===`delete`&&i.confirm===!0)return x(typeof i.name==`string`?i.name:``,c,!1);g.value=c;let l={"create-file":`Новый файл`,"create-directory":`Новая папка`,rename:`Переименовать`,copy:`Дублировать`,delete:`Удалить запись?`};p(()=>o.value?.open({title:l[t],value:n,confirm:t===`delete`,description:t===`delete`?`${c.paths?.join(`, `)}. Записи будут перемещены в .projector-trash в корне проекта.`:void 0}))}async function x(r,i=g.value,a=!0){if(i){l.value=!0,d.value=``,f.value=``;try{let s=i.paths??[i.path];if([`rename`,`delete`].includes(i.action)&&e.beforeChange){for(let t of s)if(!await e.beforeChange(t))throw Error(`Сначала сохраните изменения открытых файлов`)}let c={};for(let a of s){if(c=await It(i.projectId,i.action,a,i.action===`copy`?Dl(a):i.directory,r),i.projectId!==e.projectId)return;i.action===`delete`&&(n.relocate(a),u.value=new Set([...u.value].filter(e=>e!==a&&!e.startsWith(a+`/`))),h.value&&(h.value.paths=h.value.paths.filter(e=>e!==a&&!e.startsWith(a+`/`)),h.value.paths.length||(h.value=void 0)),i.paths&&=i.paths.filter(e=>e!==a),t(`deleted`,a))}return a&&o.value?.close(),i.projectId===e.projectId?(i.action===`rename`?(u.value=new Set([...u.value].map(e=>kl(e,i.path,c.destination))),n.relocate(i.path,c.destination),h.value&&(h.value.paths=h.value.paths.map(e=>kl(e,i.path,c.destination))),t(`moved`,i.path,c.destination)):i.action!==`delete`&&(i.directory&&u.value.add(i.directory),t(`changed`),i.action===`create-file`&&t(`open`,c.destination,!0)),f.value=`Готово`,c):void 0}catch(e){if(!a)throw e;o.value?.fail(e instanceof Error?e.message:`Не удалось выполнить действие`)}finally{l.value=!1}}}async function S(r){let i=J(r);if(i.directory!==void 0&&typeof i.directory!=`string`)throw Error(`directory должен быть строкой`);let a=h.value;if(!a)return;let o=typeof i.directory==`string`?i.directory:m.value?.directory?m.value.path:Dl(m.value?.path??``);l.value=!0,d.value=``;let s=e.projectId;try{if(a.cut&&e.beforeChange){for(let t of a.paths)if(!await e.beforeChange(t))throw Error(`Сначала сохраните изменения открытых файлов`)}let r;for(let i of[...a.paths]){if(r=a.cut?await Kt(s,i,o):await It(s,`copy`,i,o,i.split(`/`).at(-1)),s!==e.projectId)return;o&&u.value.add(o),a.cut?(u.value=new Set([...u.value].map(e=>kl(e,i,r.destination))),n.relocate(i,r.destination),a.paths=a.paths.filter(e=>e!==i),a.paths.length||(h.value=void 0),t(`moved`,i,r.destination)):t(`changed`)}return f.value=`Готово`,r}catch(e){throw d.value=e instanceof Error?e.message:`Не удалось вставить`,e}finally{l.value=!1}}async function C(t,n){try{let r=y(n);if(r.length||r.push(``),t)await navigator.clipboard.writeText(r.map(e=>e||`.`).join(`
|
|
167
|
-
`));else{let t=await tt(e.projectId,`root`);await navigator.clipboard.writeText(r.map(e=>t.root+(e?`/`+e:``)).join(`
|
|
168
|
-
`))}}catch(e){throw d.value=`Не удалось скопировать путь в буфер обмена`,e}}let w=ht(e.projectId),T=()=>w.write&&kt(e.scope),E=new Map,D=(e,t,n,i=()=>!0,a)=>(a&&E.set(`ide.fileTree.${e}`,a),_.scope.registerCommand({id:`ide.fileTree.${e}`,title:t,run:n,enabled:e=>(!a||(a===`write`?T():w[a]))&&!r.busy.value&&i(e)})),O=(e,t,n,r)=>D(e,t,n,r,`write`),k=e=>!!v(e)&&y(e).length>0,A=e=>k(e)&&y(e).length===1&&(J(e).path!==void 0||n.paths.value.size<=1);D(`file.open`,`Открыть`,e=>t(`open`,v(e).path,J(e).pinned===!0),e=>!!v(e)&&!v(e).directory);let j=p3(_.scope,e,r,v);O(`file.create`,`Новый файл…`,e=>b(`create-file`,``,e)),O(`directory.create`,`Новая папка…`,e=>b(`create-directory`,``,e));for(let e of[`file`,`directory`])O(`${e}.rename`,`Переименовать…`,e=>b(`rename`,v(e).name,e),A);return O(`entry.cut`,`Вырезать`,e=>{h.value={paths:y(e),cut:!0}},k),O(`entry.copy`,`Копировать`,e=>{h.value={paths:y(e),cut:!1}},k),O(`entry.duplicate`,`Дублировать…`,e=>b(`copy`,v(e).name.replace(/(\.[^.]*)?$/,` copy$1`),e),A),O(`entry.paste`,`Вставить`,S,()=>!!h.value),D(`entry.copyRelativePath`,`Копировать относительный путь`,e=>C(!0,e)),D(`entry.copyPath`,`Копировать полный путь`,e=>C(!1,e)),D(`directory.toggle`,`Развернуть / свернуть папку`,e=>s(v(e).path),e=>!!v(e)?.directory),D(`collapseAll`,`Свернуть все папки`,()=>u.value.clear()),u3(_.scope,c,i,r.busy,()=>m.value?.directory?m.value.path:e.path),D(`refresh`,`Обновить`,()=>t(`changed`)),O(`entry.delete`,`Удалить…`,e=>b(`delete`,``,e),k),D(`contextMenu`,`Открыть меню`,()=>{let e=i.value?.querySelector(m.value?`button[data-path="${CSS.escape(m.value.path)}"]`:`.root-label`);if(e)return a.value?.openForElement(e)}),{contextEntry:m,clipboard:h,treeCommands:_,menuItems:B(()=>f3({entry:m.value,expanded:u.value,item:(e,t)=>_.item(`ide.fileTree.${e}`,void 0,t),allowed:e=>{if(e===`entry.reveal`)return j();let t=E.get(e);return!t||(t===`write`?T():w[t])}})),runOperation:x}}function y3({tree:e,selection:t,expanded:n,busy:r,contextEntry:i,treeCommands:a,toggle:o}){function s(){return[...e.value?.querySelectorAll(`button[data-path]`)??[]]}function c(e,n){let r=m3(t.paths.value,t.anchor.value,n.path,s().map(e=>e.dataset.path),e);t.paths.value=r.paths,t.anchor.value=r.anchor}function l(l,u){if(i.value=u,a.scope.activate(),r.value){l.preventDefault();return}let d=l.ctrlKey||l.metaKey;if(d&&qe(l)===`a`){l.preventDefault();let e=s();t.paths.value=new Set(e.map(e=>e.dataset.path)),t.anchor.value||(t.anchor.value=u?.path??e[0]?.dataset.path??``);return}if(l.key===`Escape`){l.preventDefault(),t.replace();return}let f=l.target instanceof Element&&!!l.target.closest(`button[data-tree-more]`);if((u||f)&&[`ArrowUp`,`ArrowDown`,`Home`,`End`,`ArrowLeft`,`ArrowRight`,` `].includes(l.key)){if(l.preventDefault(),l.key===` `){u?c(l,u):l.target.click();return}let t=[...e.value?.querySelectorAll(`button[data-path],button[data-tree-more]`)??[]],r=t.findIndex(e=>u?e.dataset.path===u.path:e===l.target),i=r;if(l.key===`ArrowDown`&&(i=Math.min(t.length-1,r+1)),l.key===`ArrowUp`&&(i=Math.max(0,r-1)),l.key===`Home`&&(i=0),l.key===`End`&&(i=t.length-1),l.key===`ArrowRight`){if(!u?.directory)return;if(!n.value.has(u.path)){o(u.path);return}t[r+1]?.dataset.path?.startsWith(u.path+`/`)&&(i=r+1)}if(l.key===`ArrowLeft`){if(u?.directory&&n.value.has(u.path)){o(u.path);return}let e=u?Dl(u.path):l.target.dataset.treeMore;i=t.findIndex(t=>t.dataset.path===e)}let s=t[i];s&&(s.dataset.path!==void 0&&(!d||l.shiftKey)&&c(l,{path:s.dataset.path,name:``,directory:s.getAttribute(`aria-expanded`)!==null}),s.focus(),s.scrollIntoView({block:`nearest`}),s!==l.target&&s.dataset.path&&s.getAttribute(`aria-expanded`)===null&&a.run(`ide.fileTree.file.open`,{path:s.dataset.path}))}else a.keydown(l)}return{visibleRows:s,selectEntry:c,entryKey:l}}function b3(){let e=M(``),t=M(),n=M(!1),r=M(``),i=M(``),a=M(new Set),o=M(``),s=M(),c;function l(e,n=!1){t.value!==e&&(clearTimeout(c),t.value=e,n&&e!==void 0&&(c=setTimeout(()=>a.value.add(e),650)))}function u(){o.value=``,l(),clearTimeout(c),e.value=``}return{source:e,target:t,busy:n,error:r,message:i,expanded:a,hint:o,progress:s,hover:l,clear:u}}var x3=Symbol(`tree-drag`),S3=`application/x-projector-tree-entry`;function C3(e){for(let t=e;t;t=t.parentElement){let e=getComputedStyle(t).overflowY;if((e===`auto`||e===`scroll`)&&t.scrollHeight>t.clientHeight)return t}}var w3=36;function T3(e){let t=C3(e.currentTarget);if(!t)return;let n=t.getBoundingClientRect(),r=w3-(e.clientY-n.top),i=w3-(n.bottom-e.clientY);r>0?t.scrollTop-=Math.ceil(r/3):i>0&&(t.scrollTop+=Math.ceil(i/3))}function E3({props:e,emit:t,selection:n,drag:r},i){let{source:a,busy:o,expanded:s,error:c,message:l}=r,u=()=>ht(e.projectId).write&&kt(e.scope);function d(t,r){o.value||!u()||!t.dataTransfer?t.preventDefault():(n.paths.value.has(r.path)||n.replace(r.path),n.dragged.value=h3(n.paths.value),a.value=r.path,t.dataTransfer.effectAllowed=u()?`copyMove`:`copy`,t.dataTransfer.setData(S3,JSON.stringify({projectId:e.projectId,path:r.path,paths:n.dragged.value})))}function f(t){return t?t.directory?t.path:Dl(t.path):e.path}function p(e,t,n,i=!0){T3(e);let a=f(t);r.hint.value=i?`${n} в «${a||`корень проекта`}»`:``,r.hover(i?a:void 0,i&&!!t?.directory)}function m(e,t){if(!u())return;if(!a.value&&!o.value&&i.accepts(e.dataTransfer)){e.preventDefault(),e.dataTransfer.dropEffect=`copy`,p(e,t,`Копировать`);return}if(!a.value||o.value||!e.dataTransfer?.types.includes(`application/x-projector-tree-entry`))return;e.preventDefault();let r=f(t),s=n.dragged.value.every(e=>!!Ol(e,r));e.dataTransfer.dropEffect=s?`move`:`none`,p(e,t,`Перенести`,s)}function h(e){e.currentTarget.contains(e.relatedTarget)||(r.hint.value=``,r.hover())}async function g(d,p){if(!u()){r.clear();return}if(!a.value&&!o.value&&i.accepts(d.dataTransfer)){d.preventDefault();let e=f(p),t=_P(d.dataTransfer);r.clear(),await i.importInto(e,t,`ask`);return}if(!a.value||o.value||!d.dataTransfer?.types.includes(`application/x-projector-tree-entry`))return;d.preventDefault();let m=f(p),h=[...n.dragged.value];if(!h.length||h.some(e=>!Ol(e,m))){r.clear();return}let g=e.projectId;c.value=``,l.value=``,o.value=!0,r.clear();try{if(e.beforeChange){for(let t of h)if(!await e.beforeChange(t))throw Error(`Сначала сохраните изменения открытых файлов`)}for(let r of h){let i=await Kt(g,r,m);if(g!==e.projectId)return;s.value=new Set([...s.value].map(e=>kl(e,i.source,i.destination))),n.relocate(i.source,i.destination),m&&s.value.add(m),t(`moved`,i.source,i.destination)}l.value=`Перенесено записей: ${h.length}`}catch(t){g===e.projectId&&(c.value=t instanceof Error?t.message:`Не удалось перенести запись`)}finally{o.value=!1}}return{startDrag:d,dragOver:m,dragLeave:h,drop:g}}var D3=[`ask`,`fail`,`replace`,`keep`,`prefix`],O3=e=>`«${e||`корень проекта`}»`;function k3(e){let t=e%10,n=e%100>=11&&e%100<=14;return`${e} ${!n&&t===1?`запись`:!n&&t>=2&&t<=4?`записи`:`записей`}`}function A3({props:e,emit:t,drag:n},r){let{busy:i,expanded:a,error:o,message:s}=n,c=()=>ht(e.projectId).write&&kt(e.scope);function l(t){let n=ht(e.projectId);return c()&&n.externalFiles&&fP(t)&&!t?.types.includes(`application/x-projector-tree-entry`)}async function u(e,t,n,r,i){let a=n.map(({name:e})=>i+e),o=a.find(e=>r.includes(e));if(o)return`«${o}» совпадёт с другим файлом из этого набора — смените префикс`;let{conflicts:s}=await jt(e,t,a);return s.length?`${s.length===1?`«${s[0].name}» тоже занято`:`Заняты ${s.map(e=>`«${e.name}»`).join(`, `)}`} — смените префикс`:``}async function d(e,t,n,i){let a=[...new Set(n)],{conflicts:o}=await jt(e,t,a),s=new Map;if(!o.length)return{rename:s,clear:[]};let c;if(i===`ask`){if(!r.dialog.value)throw Error(`Диалог конфликтов недоступен`);c=await r.dialog.value.ask({directory:t,conflicts:o,validatePrefix:n=>u(e,t,o,a,n)})}else if(i===`fail`)throw Error(`В папке ${O3(t)} уже есть: ${o.map(({name:e})=>e).join(`, `)}`);else c=i===`replace`||i===`keep`?{kind:i}:{kind:`prefix`,prefix:i.prefix};if(!c)return;if(c.kind===`replace`)return{rename:s,clear:o.map(({name:e})=>e)};if(c.kind===`keep`){for(let{name:e,free:t}of o)s.set(e,t);return{rename:s,clear:[]}}let l=await u(e,t,o,a,c.prefix);if(l)throw Error(l);for(let{name:e}of o)s.set(e,c.prefix+e);return{rename:s,clear:[]}}async function f(t,r,i,a){let o=i.kind===`files`?await i.entries:[];if(i.kind===`files`){if(!o.length)throw Error(`Не удалось прочитать перетащенные файлы`);if(!it(t))throw Error(`Этот проект не принимает загрузку файлов`)}let s=i.kind===`paths`?i.paths.map(yP):o.map(e=>vP(e.path));if(s.some(e=>!e))throw Error(`Не удалось определить имя файла`);let c=await d(t,r,s,a);if(!c)return;let l=e=>c.rename.get(e)??e,u=e=>r?`${r}/${e}`:e;for(let t of c.clear)if(e.beforeChange&&!await e.beforeChange(u(t)))throw Error(`Сначала сохраните изменения открытых файлов`);if(c.clear.length&&await Vt(t,r,c.clear),i.kind===`paths`){let e=i.paths.map(e=>({source:e,name:l(yP(e))}));return(await en(t,r,e)).copied}let f=new AbortController;n.progress.value={done:0,total:o.length,cancel:()=>f.abort()};try{for(let e of o){let[i,...a]=e.path.split(`/`);await nn(t,r,[l(i),...a].join(`/`),e.file,f.signal),n.progress.value={...n.progress.value,done:n.progress.value.done+1}}}catch(e){throw f.signal.aborted?Error(`Загрузка отменена: загружено ${n.progress.value.done} из ${o.length}`):e}finally{n.progress.value=void 0}return[...new Set(o.map(e=>u(l(vP(e.path)))))]}async function p(n,c,l,u={}){let d=e.projectId;o.value=``,s.value=``,i.value=!0;try{let i=await f(d,n,c,l);return d===e.projectId?i?(n&&a.value.add(n),t(`changed`),r.reveal(i[0]),s.value=`Скопировано в ${O3(n)}: ${k3(i.length)}`,i):(s.value=`Импорт отменён`,i):i}catch(n){if(d===e.projectId&&(o.value=n instanceof Error?n.message:`Не удалось скопировать файлы`,t(`changed`)),u.rethrow)throw n}finally{i.value=!1}}return r.commands.scope.registerCommand({id:`ide.fileTree.entry.import`,title:`Скопировать файлы с диска в папку проекта`,description:`Копирует файлы и папки по абсолютным путям на диске в папку проекта; источник не меняется. Аргументы: paths (массив абсолютных путей), directory (папка проекта относительно корня, по умолчанию корень), conflict — что делать, если имя занято: fail (по умолчанию, ошибка без изменений), replace (старая запись уходит в .projector-trash), keep (новая получает имя «имя (2).ext»), prefix (к занятым именам добавляется prefix), ask (диалог выбора). Возвращает список созданных путей.`,arguments:{paths:`string[] — абсолютные пути файлов и папок на диске`,directory:`string — папка назначения в проекте, '' — корень`,conflict:`fail | replace | keep | prefix | ask`,prefix:`string — префикс для conflict=prefix`},enabled:()=>{let t=ht(e.projectId);return c()&&t.externalFiles&&!n.busy.value},run:async t=>{if(!kt(e.scope))throw Error(`Историческое дерево доступно только для чтения`);let n=J(t);if(!Array.isArray(n.paths)||!n.paths.length||!n.paths.every(e=>typeof e==`string`))throw Error(`paths должен быть непустым массивом строк`);if(n.directory!==void 0&&typeof n.directory!=`string`)throw Error(`directory должен быть строкой`);let r=n.conflict??`fail`;if(!D3.includes(r))throw Error(`conflict должен быть fail, replace, keep, prefix или ask`);if(r===`prefix`&&(typeof n.prefix!=`string`||!n.prefix))throw Error(`Для conflict=prefix укажите prefix`);return{copied:await p(n.directory??``,{kind:`paths`,paths:n.paths},r===`prefix`?{prefix:n.prefix}:r,{rethrow:!0})??[]}}}),{accepts:l,importInto:p}}var j3=W({__name:`ImportConflictDialog`,setup(e,{expose:t}){let n=V(),r=M(),i=M(),a=M(``),o=M([]),s=M(`copy-`),c=M(``),l=M(!1),u,d,f=null,m=B(()=>o.value.length===1),h=B(()=>o.value.slice(0,6));function g(e){return u?.(void 0),f=document.activeElement,a.value=e.directory,o.value=e.conflicts,d=e.validatePrefix,c.value=``,l.value=!1,r.value?.open(),p(()=>i.value?.select()),new Promise(e=>{u=e})}function _(e){let t=u;u=void 0,r.value?.close(),f?.isConnected&&f.focus(),t?.(e)}async function v(){let e=s.value.trim();if(e&&!l.value){l.value=!0;try{c.value=await d(e)}catch(e){c.value=e instanceof Error?e.message:`Не удалось проверить префикс`}l.value=!1,c.value||_({kind:`prefix`,prefix:e})}}t({ask:g});let y={titleId:n,dialog:r,input:i,directory:a,conflicts:o,prefix:s,error:c,busy:l,get settle(){return u},set settle(e){u=e},get validate(){return d},set validate(e){d=e},get trigger(){return f},set trigger(e){f=e},single:m,shown:h,ask:g,finish:_,applyPrefix:v,UiMessage:Te,UiHint:we,UiButton:q,UiDialog:un,UiDialogActions:km,UiControl:Se,UiField:Re,UiHeading:Ee};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}}),M3={key:0},N3={key:0};function P3(t,n,r,i,a,o){return K(),F(fe,{to:`body`},[y(i.UiDialog,{ref:`dialog`,labelledby:i.titleId,onCancel:n[5]||=e=>i.busy?e.preventDefault():i.finish()},{default:e(()=>[I(`form`,{onSubmit:n[4]||=N(e=>i.single?void 0:i.applyPrefix(),[`prevent`])},[y(i.UiHeading,{id:i.titleId,class:`title`},{default:e(()=>[G(X(i.single?`«${i.conflicts[0].name}» уже существует`:`Имена уже заняты`),1)]),_:1},8,[`id`]),y(i.UiHint,{size:`xs`,"space-after":3,wrap:``},{default:e(()=>[G(` В папке «`+X(i.directory||`корень проекта`)+`» `+X(i.single?`уже есть запись с таким именем.`:`занято записей: ${i.conflicts.length}:`),1)]),_:1}),i.single?D(`v-if`,!0):(K(),U(`ul`,M3,[(K(!0),U(P,null,S(i.shown,e=>(K(),U(`li`,{key:e.name},X(e.name),1))),128)),i.conflicts.length>i.shown.length?(K(),U(`li`,N3,` и ещё `+X(i.conflicts.length-i.shown.length),1)):D(`v-if`,!0)])),i.single?D(`v-if`,!0):(K(),U(P,{key:1},[y(i.UiField,{layout:`plain`,label:`Добавить префикс ко всем занятым именам`,class:`prefix`,required:``},{default:e(({control:e})=>[y(i.UiControl,R(e,{ref:`input`,modelValue:i.prefix,"onUpdate:modelValue":n[0]||=e=>i.prefix=e,maxlength:`64`,disabled:i.busy}),null,16,[`modelValue`,`disabled`])]),_:1}),i.error?(K(),F(i.UiMessage,{key:0,class:`error`,tone:`danger`,size:`xs`,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0)],64)),y(i.UiDialogActions,null,{default:e(()=>[y(i.UiButton,{disabled:i.busy,onClick:n[1]||=e=>i.finish()},{default:e(()=>[...n[6]||=[G(`Отмена`,-1)]]),_:1},8,[`disabled`]),i.single?(K(),U(P,{key:0},[y(i.UiButton,{onClick:n[2]||=e=>i.finish({kind:`keep`})},{default:e(()=>[G(` Оставить оба (`+X(i.conflicts[0].free)+`) `,1)]),_:1}),y(i.UiButton,{tone:`danger`,onClick:n[3]||=e=>i.finish({kind:`replace`})},{default:e(()=>[...n[7]||=[G(`Заменить`,-1)]]),_:1})],64)):(K(),F(i.UiButton,{key:1,type:`submit`,appearance:`solid`,disabled:i.busy||!i.prefix.trim()},{default:e(()=>[G(X(i.busy?`Проверка…`:`Добавить префикс`),1)]),_:1},8,[`disabled`]))]),_:1})],32)]),_:1},8,[`labelledby`])])}var F3=H(j3,[[`render`,P3],[`__scopeId`,`data-v-c7c44e38`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/tree/ui/ImportConflictDialog.vue`]]),I3=W({__name:`FileTree`,props:{projectId:{type:String,required:!0},path:{type:String,required:!1,default:``},selected:{type:String,required:!0},depth:{type:Number,required:!1,default:0},revision:{type:Number,required:!0},scope:{type:Object,required:!1,default:()=>({kind:`live`})},decorations:{type:Map,required:!1,default:()=>new Map},beforeChange:{type:Function,required:!1}},emits:[`open`,`moved`,`changed`,`deleted`],setup(e,{expose:t,emit:r}){let i=e,a=r,o=i.depth===0?s3():z(c3);i.depth===0&&n(c3,o);let s=i.depth===0?B(()=>i.decorations??new Map):z(`workspace-tree-decorations`);i.depth===0&&n(`workspace-tree-decorations`,s);let c={added:`Новые записи Git`,modified:`Есть изменения Git`,deleted:`Удалённые записи Git`,conflict:`Конфликт Git`},l=i.depth===0?b3():z(x3);i.depth===0&&n(x3,l);let u=i.depth===0?g3():z(_3);i.depth===0&&n(_3,u);let d=M(),f=M(),m=M(),h=i.depth===0?(e,t)=>{l.busy.value?e.preventDefault():(t&&!u.paths.value.has(t.path)&&u.replace(t.path),t||u.replace(),ce.value=t,ue.scope.activate(),d.value?.open(e))}:z(`workspace-context`);i.depth===0&&n(`workspace-context`,h);function _(e,t){i.depth===0?T.value||(b(t),V.selectEntry(e,t),!(e.shiftKey||e.ctrlKey||e.metaKey)&&(t.directory?ue.run(`ide.fileTree.directory.toggle`):ue.run(`ide.fileTree.file.open`,{pinned:e.detail>=2}))):v(e,t)}let v=i.depth?z(`workspace-entry-click`):void 0;i.depth===0&&n(`workspace-entry-click`,_);function y(e,t){i.depth===0?V.entryKey(e,t):x?.(e,t)}function b(e){i.depth===0?(ce.value=e,ue.scope.activate()):S?.(e)}let x=i.depth?z(`workspace-entry-key`):void 0,S=i.depth?z(`workspace-entry-focus`):void 0;i.depth===0&&(n(`workspace-entry-key`,y),n(`workspace-entry-focus`,b));let{source:C,target:w,busy:T,expanded:D,error:O,message:k,hint:A,progress:j}=l;if(i.depth===0){let e=ht(i.projectId).persist?$4(()=>`projector:tree:v1:${i.projectId}${kt(i.scope)?``:`:${$t(i.scope)}`}`,()=>[...D.value],d3):{read:()=>void 0};D.value=new Set(e.read()??[]),E(()=>[i.projectId,kt(i.scope)?`live`:$t(i.scope)],()=>{d.value?.close(!1),f.value?.close(),le.value=void 0,u.replace(),u.dragged.value=[],l.clear(),o.revealPath.value=``,D.value=new Set(e.read()??[]),O.value=``,k.value=``}),E(()=>i.selected,e=>{e&&!u.paths.value.has(e)&&u.replace(e)},{immediate:!0}),g(()=>l.clear())}let{entries:N,total:ee,nextOffset:te,loading:P,error:ne}=l3(i,o,e=>u.relocate(e)),{resolver:F,error:I}=CQ();Sn(()=>i.depth===0?O.value:``),Sn(()=>ne.value),Sn(()=>i.depth===0?I.value:``);let re=B(()=>N.value.map(e=>({entry:e,decoration:s.value.get(e.path),icon:F.value.resolve(e,D.value.has(e.path))})));function ie(e){D.value.has(e)?D.value.delete(e):D.value.add(e)}let L,R;function ae(e){o.revealPath.value=e,u.replace(e);let t=e.split(`/`);for(let e=1;e<t.length;e++)D.value.add(t.slice(0,e).join(`/`));L?.disconnect(),clearTimeout(R);let n=()=>{let t=oe.value?.querySelector(`button[data-path="${CSS.escape(e)}"]`);t&&(t.scrollIntoView({block:`nearest`}),t.focus(),L?.disconnect(),clearTimeout(R))};p(()=>{oe.value&&(L=new MutationObserver(n),L.observe(oe.value,{childList:!0,subtree:!0}),R=setTimeout(()=>L?.disconnect(),5e3),n())})}let oe=M(),se={props:i,emit:a,selection:u,drag:l,tree:oe,menu:d,dialog:f,toggle:ie,paging:o},{contextEntry:ce,clipboard:le,treeCommands:ue,menuItems:de,runOperation:fe}=i.depth===0?v3(se):{};i.depth===0&&n(`workspace-tree-commands`,ue);let pe=i.depth===0?ue:z(`workspace-tree-commands`),V=i.depth===0?y3({tree:oe,selection:u,expanded:D,busy:T,contextEntry:ce,treeCommands:ue,toggle:ie}):void 0,me=i.depth===0?A3(se,{commands:ue,dialog:m,reveal:ae}):z(`workspace-tree-import`);i.depth===0&&n(`workspace-tree-import`,me);let{startDrag:he,dragOver:ge,dragLeave:_e,drop:H}=E3(se,me);g(()=>{L?.disconnect(),clearTimeout(R)}),t({reveal:ae});let ve={props:i,emit:a,paging:o,decorations:s,decorationLabels:c,drag:l,selection:u,menu:d,dialog:f,conflictDialog:m,showContext:h,clickEntry:_,injectClickEntry:v,entryKey:y,activateEntry:b,injectEntryKey:x,injectActivateEntry:S,source:C,target:w,busy:T,expanded:D,moveError:O,message:k,hint:A,progress:j,entries:N,total:ee,nextOffset:te,loading:P,error:ne,resolver:F,themeError:I,rows:re,toggle:ie,get revealObserver(){return L},set revealObserver(e){L=e},get revealTimer(){return R},set revealTimer(e){R=e},reveal:ae,tree:oe,context:se,contextEntry:ce,clipboard:le,treeCommands:ue,menuItems:de,runOperation:fe,commandsForTree:pe,keys:V,importer:me,startDrag:he,dragOver:ge,dragLeave:_e,drop:H,UiSkeleton:Xu,UiActionRow:wl,get TREE_PAGE_SIZE(){return 30},ContextMenu:ih,EntryDialog:GH,ImportConflictDialog:F3,get IconChevronRight(){return Ch},get FileIcon(){return TU}};return Object.defineProperty(ve,"__isScriptSetup",{enumerable:!1,value:!0}),ve}}),L3=[`role`,`aria-multiselectable`,`aria-label`,`aria-busy`],R3={key:0,class:`skeleton`,"aria-hidden":`true`},z3={key:1,class:`notice`,role:`status`},B3={key:2,class:`notice`,role:`status`},V3={key:3,class:`notice`,role:`status`},H3={class:`glyph`,"aria-hidden":`true`},U3={class:`name u-truncate`},W3={key:4,role:`none`},G3={class:`remaining`},K3={key:5,class:`drop-hint`,role:`status`};function q3(t,n,r,i,a,o){let s=x(`FileTree`,!0);return K(),U(P,null,[I(`ul`,{ref:`tree`,class:Y([`tree`,{"tree-root":r.depth===0,"root-target":r.depth===0&&i.target===``,"drop-zone":r.depth>0&&i.target===r.path}]),role:r.depth===0?`tree`:`group`,"aria-multiselectable":r.depth===0||void 0,"aria-label":r.path||`Файлы проекта`,"aria-busy":i.busy||i.loading,onDragover:n[11]||=N(e=>i.dragOver(e),[`stop`]),onDrop:n[12]||=N(e=>i.drop(e),[`stop`]),onContextmenu:n[13]||=N(e=>i.showContext(e),[`self`]),onDragleave:n[14]||=(...e)=>i.dragLeave&&i.dragLeave(...e)},[r.depth===0&&i.loading&&!i.entries.length?(K(),U(`li`,R3,[(K(),U(P,null,S([`58%`,`72%`,`46%`,`64%`,`52%`,`68%`],e=>y(i.UiSkeleton,{key:e,width:e,height:`10px`},null,8,[`width`])),64))])):D(`v-if`,!0),r.depth===0&&i.busy?(K(),U(`li`,z3,`выполняется…`)):D(`v-if`,!0),r.depth===0&&i.progress?(K(),U(`li`,B3,[G(` Загрузка: `+X(i.progress.done)+` из `+X(i.progress.total)+` `,1),y(i.UiActionRow,{class:`cancel`,interaction:`item`,radius:`none`,gap:1.5,fill:!1,padding:`0 var(--sp-2)`,onClick:n[0]||=e=>i.progress.cancel()},{default:e(()=>[...n[16]||=[G(`Отменить`,-1)]]),_:1})])):D(`v-if`,!0),r.depth===0&&i.message?(K(),U(`li`,V3,X(i.message),1)):D(`v-if`,!0),(K(!0),U(P,null,S(i.rows,({entry:t,icon:a,decoration:o})=>(K(),U(`li`,{key:t.path,role:`none`},[y(i.UiActionRow,{interaction:`item`,radius:`none`,tone:`muted`,gap:1.5,padding:`5px 10px`,class:Y({"git-changed":!!o,"git-ignored":t.ignored,selected:i.selection.paths.value.has(t.path),dragging:i.selection.dragged.value.includes(t.path)&&!!i.source,"drop-target":t.directory&&i.target===t.path}),disabled:i.busy||t.disabled,draggable:!i.busy&&!t.disabled,"data-path":t.path,"data-git-status":o,style:Qe({paddingLeft:`${12+r.depth*14}px`}),title:o?`${t.path} · ${i.decorationLabels[o]}`:t.path,"aria-selected":i.selection.paths.value.has(t.path),role:`treeitem`,"aria-level":r.depth+1,"aria-expanded":t.directory?i.expanded.has(t.path):void 0,onContextmenu:N(e=>i.showContext(e,t),[`stop`]),onKeydown:N(e=>i.entryKey(e,t),[`stop`]),onFocus:e=>i.activateEntry(t),onClick:e=>i.clickEntry(e,t),onDragstart:N(e=>i.startDrag(e,t),[`stop`]),onDragend:n[1]||=N(e=>i.drag.clear(),[`stop`]),onDragover:N(e=>i.dragOver(e,t),[`stop`]),onDrop:N(e=>i.drop(e,t),[`stop`])},{default:e(()=>[I(`span`,H3,[t.directory?(K(),F(i.IconChevronRight,{key:0,class:Y({expanded:i.expanded.has(t.path)})},null,8,[`class`])):D(`v-if`,!0)]),y(i.FileIcon,{icon:a},null,8,[`icon`]),I(`span`,U3,X(t.name),1)]),_:2},1032,[`class`,`disabled`,`draggable`,`data-path`,`data-git-status`,`style`,`title`,`aria-selected`,`aria-level`,`aria-expanded`,`onContextmenu`,`onKeydown`,`onFocus`,`onClick`,`onDragstart`,`onDragover`,`onDrop`]),t.directory&&i.expanded.has(t.path)?(K(),F(s,{key:0,"project-id":r.projectId,path:t.path,selected:r.selected,depth:r.depth+1,revision:r.revision,scope:r.scope,decorations:i.decorations,"before-change":r.beforeChange,onChanged:n[2]||=e=>i.emit(`changed`),onDeleted:n[3]||=e=>i.emit(`deleted`,e),onOpen:n[4]||=(e,t)=>i.emit(`open`,e,t),onMoved:n[5]||=(e,t)=>i.emit(`moved`,e,t)},null,8,[`project-id`,`path`,`selected`,`depth`,`revision`,`scope`,`decorations`,`before-change`])):D(`v-if`,!0)]))),128)),i.nextOffset===null?D(`v-if`,!0):(K(),U(`li`,W3,[y(i.UiActionRow,{interaction:`item`,radius:`none`,tone:`muted`,gap:1.5,padding:`5px 10px`,class:`load-more`,style:Qe({paddingLeft:`${12+r.depth*14}px`}),disabled:i.busy||i.loading,"data-tree-more":r.path,role:`treeitem`,"aria-level":r.depth+1,"aria-label":`Показать ещё ${Math.min(i.TREE_PAGE_SIZE,i.total-i.entries.length)} в ${r.path||`корне проекта`}`,onFocus:n[6]||=e=>i.activateEntry(),onKeydown:n[7]||=N(e=>i.entryKey(e),[`stop`]),onClick:n[8]||=e=>i.commandsForTree.run(`ide.fileTree.directory.loadMore`,{path:r.path})},{default:e(()=>[G(X(i.loading?`загрузка…`:`Показать ещё ${Math.min(i.TREE_PAGE_SIZE,i.total-i.entries.length)}`)+` `,1),I(`span`,G3,X(i.total-i.entries.length)+` осталось`,1)]),_:1},8,[`style`,`disabled`,`data-tree-more`,`aria-level`,`aria-label`])])),r.depth===0&&i.hint?(K(),U(`li`,K3,X(i.hint),1)):D(`v-if`,!0),r.depth===0?(K(),U(`li`,{key:6,class:`root-space`,onClick:n[9]||=e=>i.selection.replace(),onContextmenu:n[10]||=N(e=>i.showContext(e),[`stop`])},null,32)):D(`v-if`,!0)],42,L3),r.depth===0?(K(),F(i.ContextMenu,{key:0,ref:`menu`,items:i.menuItems,label:`Действия с файлами`},null,8,[`items`])):D(`v-if`,!0),r.depth===0?(K(),F(i.EntryDialog,{key:1,ref:`dialog`,onSubmit:n[15]||=e=>i.runOperation(e)},null,512)):D(`v-if`,!0),r.depth===0?(K(),F(i.ImportConflictDialog,{key:2,ref:`conflictDialog`},null,512)):D(`v-if`,!0)],64)}var J3=H(I3,[[`render`,q3],[`__scopeId`,`data-v-da6e8304`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/tree/ui/FileTree.vue`]]),Y3=W({__name:`ScopeTreeSection`,props:{projectId:{type:String,required:!0},scope:{type:Object,required:!0},revision:{type:Number,required:!1},selected:{type:String,required:!1},onSearch:{type:Function,required:!1},onOpen:{type:Function,required:!1}},setup(e,{expose:t}){let n=e,r=M(),i=M(),a=M(``),o=0;async function s(){if(n.scope.kind!==`commit`){r.value=void 0,a.value=`Этот источник пока не умеет показывать файлы`;return}let e=++o;a.value=``;try{let t=await tt(n.projectId,`commit`,{hash:n.scope.rev});e===o&&(r.value=t)}catch(t){e===o&&(a.value=t instanceof Error?t.message:`Ошибка Git`)}}E(()=>[n.projectId,$t(n.scope),n.revision],s,{immediate:!0});let c=B(()=>Ll(Pl(r.value?.files??[])));t({reveal:e=>i.value?.reveal(e)});let l={props:n,detail:r,tree:i,error:a,get generation(){return o},set generation(e){o=e},load:s,decorations:c,UiScrollArea:Tp,UiButton:q,FileTree:J3};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),X3={class:`scope-tree`},Z3={key:0,class:`tree-actions`},Q3={key:1,class:`note`,role:`alert`};function $3(t,n,r,i,a,o){return K(),U(`div`,X3,[r.onSearch?(K(),U(`div`,Z3,[y(i.UiButton,{size:`sm`,onClick:n[0]||=e=>r.onSearch(r.scope)},{default:e(()=>[...n[2]||=[G(`Поиск в снимке`,-1)]]),_:1})])):D(`v-if`,!0),i.error?(K(),U(`p`,Q3,X(i.error),1)):D(`v-if`,!0),i.error?D(`v-if`,!0):(K(),F(i.UiScrollArea,{key:2,class:`side-content`},{default:e(()=>[y(i.FileTree,{ref:`tree`,"project-id":r.projectId,scope:r.scope,selected:r.selected??``,revision:r.revision??0,decorations:i.decorations,onOpen:n[1]||=(e,t)=>r.onOpen?.(e,t)},null,8,[`project-id`,`scope`,`selected`,`revision`,`decorations`])]),_:1}))])}var e6=H(Y3,[[`render`,$3],[`__scopeId`,`data-v-cd495efd`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/tree/ui/ScopeTreeSection.vue`]]),t6=W({__name:`UiStringList`,props:{items:{type:Array,required:!0},disabled:{type:Boolean,required:!1},placeholder:{type:String,required:!1},addLabel:{type:String,required:!1,default:`Добавить`},emptyText:{type:String,required:!1,default:`Список пуст`},inputLabel:{type:String,required:!1,default:`Новое значение`},mono:{type:Boolean,required:!1},unique:{type:Boolean,required:!1,default:!0},normalize:{type:Function,required:!1},validate:{type:Function,required:!1}},emits:[`add`,`remove`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=M(``),o=M(``),s=V();function c(){o.value=``;let e=a.value.trim();if(!e)return;let t=r.normalize?.(e)??e,n=r.validate?.(t)??``;n?o.value=n:r.unique&&r.items.includes(t)?o.value=`Уже в списке`:(a.value=``,i(`add`,t))}function l(e){o.value=``,i(`remove`,e)}let u={props:r,emit:i,draft:a,error:o,inputId:s,submit:c,remove:l,UiControl:Se,get IconRemove(){return Cn},UiButton:q};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}}),n6=[`aria-busy`],r6={class:`items`},i6={key:0,class:`empty`},a6=[`for`],o6={key:0,class:`error`,role:`status`};function s6(t,n,r,i,a,o){return K(),U(`div`,{class:`string-list`,"aria-busy":r.disabled},[I(`ul`,r6,[(K(!0),U(P,null,S(r.items,t=>(K(),U(`li`,{key:t},[I(`span`,{class:Y([`value`,{mono:r.mono}])},X(t),3),y(i.UiButton,{shape:`icon`,size:`sm`,disabled:r.disabled,"aria-label":`Удалить ${t}`,title:`Удалить`,onClick:e=>i.remove(t)},{default:e(()=>[y(i.IconRemove)]),_:1},8,[`disabled`,`aria-label`,`onClick`])]))),128)),r.items.length?D(`v-if`,!0):(K(),U(`li`,i6,X(r.emptyText),1))]),I(`form`,{class:`add`,onSubmit:N(i.submit,[`prevent`])},[I(`label`,{class:`u-sr-only`,for:i.inputId},X(r.inputLabel),9,a6),y(i.UiControl,{id:i.inputId,modelValue:i.draft,"onUpdate:modelValue":n[0]||=e=>i.draft=e,type:`text`,class:Y({mono:r.mono}),placeholder:r.placeholder,disabled:r.disabled,"aria-invalid":i.error?!0:void 0,autocomplete:`off`,spellcheck:`false`},null,8,[`id`,`modelValue`,`class`,`placeholder`,`disabled`,`aria-invalid`]),y(i.UiButton,{type:`submit`,disabled:r.disabled||!i.draft.trim()},{default:e(()=>[G(X(r.addLabel),1)]),_:1},8,[`disabled`]),c(t.$slots,`actions`,{},void 0,!0)],32),i.error?(K(),U(`p`,o6,X(i.error),1)):D(`v-if`,!0)],8,n6)}var c6=H(t6,[[`render`,s6],[`__scopeId`,`data-v-0d758873`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiStringList.vue`]]),l6=M(0);function u6(){l6.value++}function d6(e){return Object.entries(e).filter(([,e])=>e).map(([e])=>e).sort((e,t)=>e.localeCompare(t))}var f6=W({__name:`FilesExcludeSettings`,props:{embedded:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n=V(),r=M(qt()),{ready:i,busy:a,error:o,status:s,load:c,perform:l}=Me(),u=B(()=>d6(r.value));async function d(e,t){let n=await fetch(`/api/ide/files-exclude`,{method:e,headers:{"Content-Type":`application/json`},body:t?JSON.stringify(t):void 0}),r=await n.json();if(!n.ok)throw Error(r.error||`Не удалось сохранить исключения`);return r}function p(){return c(async()=>{r.value=(await d(`GET`)).exclude},`Не удалось загрузить исключения`)}async function m(e){let t=r.value;r.value=e,await l(async()=>{r.value=(await d(`PUT`,{exclude:e})).exclude,u6()},{errorFallback:`Не удалось сохранить исключения`,success:`Сохранено`,rollback:()=>{r.value=t}})}function h(e){return ut(e)?``:`Укажите glob-паттерн вроде **/node_modules или *.log`}function g(e){m({...r.value,[e]:!0})}function _(e){let t={...r.value};delete t[e],m(t)}function v(){m(qt())}f(p);let y={titleId:n,exclude:r,ready:i,busy:a,error:o,status:s,loadSection:c,perform:l,patterns:u,request:d,load:p,save:m,validate:h,add:g,remove:_,reset:v,UiHeading:Ee,UiButton:q,UiHint:we,UiStringList:c6,get migratePattern(){return Tt}};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}}),p6=[`aria-labelledby`];function m6(t,n,r,i,a,o){return K(),U(`section`,{class:`files-exclude`,"aria-labelledby":i.titleId},[y(i.UiHeading,{id:i.titleId,size:`sm`,class:Y({"u-sr-only":r.embedded})},{default:e(()=>[...n[0]||=[G(`Исключения файлов`,-1)]]),_:1},8,[`id`,`class`]),y(i.UiHint,null,{default:e(()=>[...n[1]||=[G(` Glob-паттерны как в VS Code `,-1),I(`code`,null,`files.exclude`,-1),G(`: скрывают совпадения из дерева, поиска и операций с путями. Примеры: `,-1),I(`code`,null,`**/node_modules`,-1),G(`, `,-1),I(`code`,null,`**/.git`,-1),G(`, `,-1),I(`code`,null,`*.log`,-1),G(`. `,-1)]]),_:1}),y(i.UiStringList,{class:`list`,items:i.patterns,disabled:!i.ready||i.busy,mono:``,placeholder:`**/node_modules`,"empty-text":`Нет активных паттернов`,"input-label":`Новый glob-паттерн`,normalize:i.migratePattern,validate:i.validate,onAdd:i.add,onRemove:i.remove},{actions:e(()=>[y(i.UiButton,{type:`button`,disabled:!i.ready||i.busy,onClick:i.reset},{default:e(()=>[...n[2]||=[G(`По умолчанию`,-1)]]),_:1},8,[`disabled`])]),_:1},8,[`items`,`disabled`,`normalize`]),i.error||i.status?(K(),U(`p`,{key:0,role:`status`,class:Y({error:i.error})},X(i.error||i.status),3)):D(`v-if`,!0),!i.ready&&i.error?(K(),F(i.UiButton,{key:1,onClick:i.load},{default:e(()=>[...n[3]||=[G(`Повторить загрузку`,-1)]]),_:1})):D(`v-if`,!0)],8,p6)}var h6=H(f6,[[`render`,m6],[`__scopeId`,`data-v-d31b5503`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/tree/ui/FilesExcludeSettings.vue`]]),g6=W({inheritAttrs:!1,__name:`FilesSection`,setup(e,{expose:t}){let n=M(),r=d();t({reveal:e=>n.value?.reveal(e)});let i={tree:n,attrs:r,UiScrollArea:Tp,get FileTree(){return J3}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}});function _6(t,n,r,i,a,o){return K(),F(i.UiScrollArea,{class:`side-content`},{default:e(()=>[y(i.FileTree,R({ref:`tree`},i.attrs),null,16)]),_:1})}var v6=H(g6,[[`render`,_6],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/FilesSection.vue`]]),y6=W({__name:`CompareTreeSection`,props:{projectId:{type:String,required:!0},scope:{type:Object,required:!0},revision:{type:Number,required:!1},selected:{type:String,required:!1},onOpen:{type:Function,required:!1}},setup(e,{expose:t}){let n=e,{data:r,loading:i,error:a,reload:o}=z1({load:()=>pt(n.projectId,n.scope,`changes`),keys:()=>[n.projectId,$t(n.scope),n.revision],enabled:()=>n.scope.kind===`compare`,disabledError:`Раздел ждёт сравнение двух снимков`,errorFallback:`Не удалось сравнить снимки`}),s=M(),c=B(()=>r.value?.changes??[]),l=B(()=>{let e=c.value;return{files:e.length,additions:e.reduce((e,t)=>e+(t.additions??0),0),deletions:e.reduce((e,t)=>e+(t.deletions??0),0),truncated:r.value?.truncated===!0}});t({reveal:e=>s.value?.reveal(e),refresh:o});let u={props:n,data:r,loading:i,error:a,reload:o,tree:s,files:c,summary:l,UiLoadablePanel:R1,get ChangesTree(){return b0}};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});function b6(t,n,r,i,a,o){return K(),F(i.UiLoadablePanel,{loading:i.loading,error:i.error,"loading-text":`загрузка: изменения…`},{default:e(()=>[y(i.ChangesTree,{ref:`tree`,changes:i.files,totals:i.summary,selected:r.selected,"empty-text":`Изменений нет`,onOpen:n[0]||=(e,t,n)=>r.onOpen?.(e,t,n)},null,8,[`changes`,`totals`,`selected`])]),_:1},8,[`loading`,`error`])}var x6=H(y6,[[`render`,b6],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/CompareTreeSection.vue`]]),S6={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function C6(e,t){return K(),U(`svg`,S6,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8`}),I(`path`,{d:`M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706zM5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1`})],-1)]])}var w6=L({name:`lucide-files`,render:C6}),T6={viewBox:`0 0 128 128`,width:`1.2em`,height:`1.2em`};function E6(e,t){return K(),U(`svg`,T6,[...t[0]||=[I(`path`,{fill:`#f34f29`,d:`M124.737 58.378L69.621 3.264c-3.172-3.174-8.32-3.174-11.497 0L46.68 14.71l14.518 14.518c3.375-1.139 7.243-.375 9.932 2.314c2.703 2.706 3.461 6.607 2.294 9.993l13.992 13.993c3.385-1.167 7.292-.413 9.994 2.295c3.78 3.777 3.78 9.9 0 13.679a9.673 9.673 0 0 1-13.683 0a9.68 9.68 0 0 1-2.105-10.521L68.574 47.933l-.002 34.341a9.7 9.7 0 0 1 2.559 1.828c3.778 3.777 3.778 9.898 0 13.683c-3.779 3.777-9.904 3.777-13.679 0c-3.778-3.784-3.778-9.905 0-13.683a9.7 9.7 0 0 1 3.167-2.11V47.333a9.6 9.6 0 0 1-3.167-2.111c-2.862-2.86-3.551-7.06-2.083-10.576L41.056 20.333L3.264 58.123a8.133 8.133 0 0 0 0 11.5l55.117 55.114c3.174 3.174 8.32 3.174 11.499 0l54.858-54.858a8.135 8.135 0 0 0-.001-11.501`},null,-1)]])}var D6=L({name:`devicon-git`,render:E6}),O6={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function k6(e,t){return K(),U(`svg`,O6,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2zm4-1a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1`},null,-1)]])}var A6=L({name:`lucide-messages-square`,render:k6}),j6={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function M6(e,t){return K(),U(`svg`,j6,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`rect`,{width:`8`,height:`8`,x:`3`,y:`3`,rx:`2`}),I(`path`,{d:`M7 11v4a2 2 0 0 0 2 2h4`}),I(`rect`,{width:`8`,height:`8`,x:`13`,y:`13`,rx:`2`})],-1)]])}var N6=L({name:`lucide-workflow`,render:M6}),P6={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function bie(e,t){return K(),U(`svg`,P6,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`}),I(`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`})],-1)]])}var xie=L({name:`lucide-tag`,render:bie}),Sie=[{id:`files`,title:`Файлы`},{id:`search`,title:`Поиск`,requires:`search`},{id:`git`,title:`Git`,requires:`git`}],Cie=(e,t)=>zl(e=>t[e],Sie,e.sidebar),wie={files:{icon:w6,component:v6,props:e=>({projectId:e.projectId,beforeChange:e.files.prepareEntryChange,selected:e.active?.path??``,revision:e.revision,decorations:Ll(Ml(e.overview.git.value.changes)),onChanged:e.changed,onDeleted:e.deleted,onOpen:(t,n)=>e.openFile(t,void 0,void 0,void 0,{preview:!n}),onMoved:e.moved})},search:{icon:rg,component:Q4,props:e=>({projectId:e.projectId,onOpen:e.openFile})},"search-scope":{icon:rg,component:Q4,props:(e,t,n)=>{let r=n?.params?.scope;if(!r)throw Error(`У поиска нет источника`);return{projectId:e.projectId,scope:r,onOpen:(t,n,i)=>e.openFile(t,n,i,void 0,{scope:r,preview:!1})}},refresh:(e,t)=>t?.refresh?.()},git:{icon:D6,component:M$,props:e=>({projectId:e.projectId,overview:e.overview,history:e.history,branches:e.branches,selected:e.active?{path:e.active.path,staged:e.active.staged}:void 0,prepare:e.gitSync.prepare,invalidate:e.files.invalidate,applied:e.gitSync.applied,onOpen:(t,n,r)=>e.openFile(t,void 0,void 0,n,{preview:!r}),reveal:t=>e.command(`ide.workbench.tree.reveal`,{path:t}),onOpenCommit:e.files.openCommit,onOpenCommitTree:e.openCommitTree,onOpenCommitDiff:(t,n,r)=>e.files.openCommitFile(t,n,!r)}),badge:e=>e.overview.git.value.changes.length,activate:e=>void e.overview.load(),refresh:(e,t)=>t?.refresh?.()},tree:{icon:w6,component:e6,props:(e,t,n)=>{let r=n?.params?.scope;if(!r)throw Error(`У раздела дерева нет источника`);return{projectId:e.projectId,scope:r,revision:e.revision,selected:e.active?.scope&&$t(e.active.scope)===$t(r)?e.active.path:``,onSearch:ht(e.projectId).search?e.openSearch:void 0,onOpen:(t,n)=>e.openFile(t,void 0,void 0,void 0,{scope:r,preview:!n})}}},changes:{icon:w6,component:x6,props:(e,t,n)=>{let r=n?.params?.scope;if(!r)throw Error(`У раздела сравнения нет источника`);return{projectId:e.projectId,scope:r,revision:e.revision,selected:e.active?.scope&&$t(e.active.scope)===$t(r)?e.active.path:``,onOpen:(t,n,i)=>e.openFile(t,void 0,void 0,void 0,{scope:r,originalPath:i,preview:!n})}},refresh:(e,t)=>t?.refresh?.()},issues:{icon:az,component:v1,props:(e,t)=>({projectId:e.projectId,active:t,onOpen:(t,n)=>e.openTab(`issue`,t,{preview:!n})}),refresh:(e,t)=>t?.refresh?.()},pulls:{icon:x1,component:P1,props:(e,t)=>({projectId:e.projectId,active:t,onOpen:(t,n)=>e.openTab(`pull`,t,{preview:!n})}),refresh:(e,t)=>t?.refresh?.()},"merge-requests":{icon:cz,component:P1,props:(e,t)=>({projectId:e.projectId,active:t,onOpen:(t,n)=>e.openTab(`pull`,t,{preview:!n}),title:`Merge requests`,noun:`merge requests`,singular:`merge request`,kind:`mergeRequests`,host:`GitLab`,action:`pulls`}),refresh:(e,t)=>t?.refresh?.()},"merge-request-files":{icon:w6,component:C0,props:(e,t,n)=>{let r=Number(n?.params?.number),i=typeof n?.params?.head==`string`?n.params.head:``;return{projectId:e.projectId,number:r,head:i,snapshot:n?.params?.snapshot,onOpen:(t,n,a)=>e.openPullFile(r,t,a||i,n)}},refresh:(e,t)=>t?.refresh?.()},pipelines:{icon:N6,component:G0,props:(e,t)=>({projectId:e.projectId,active:t,onOpen:(t,n)=>e.openTab(`pipeline`,t,{preview:!n})}),refresh:(e,t)=>t?.refresh?.()},releases:{icon:xie,component:H2,props:(e,t)=>({projectId:e.projectId,active:t,onOpen:(t,n)=>e.openTab(`release`,t,{preview:!n})}),refresh:(e,t)=>t?.refresh?.()},discussions:{icon:A6,component:A0,props:(e,t)=>({projectId:e.projectId,active:t,onOpen:(t,n)=>e.openTab(`discussion`,t,{preview:!n})}),refresh:(e,t)=>t?.refresh?.()},docker:{icon:Fy,component:w4,props:()=>({}),refresh:e=>e.command(`ide.docker.refresh`)}},Tie={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Eie(e,t){return K(),U(`svg`,Tie,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`}),I(`path`,{d:`M21 3v5h-5`})],-1)]])}var F6=L({name:`lucide-rotate-cw`,render:Eie}),Die=W({__name:`SidebarTabs`,props:{section:{type:String,required:!0},items:{type:Array,required:!0},vertical:{type:Boolean,required:!1},collapsed:{type:Boolean,required:!1}},emits:[`update:section`,`command`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=Ff({anchor:`left`,initialFocus:[`.section-item.selected`,`.section-item`],items:`.section-item`}),o=B(()=>Vl(r.items)),s=B(()=>o.value.flat()),c=B(()=>s.value.find(e=>e.id===r.section)),l=B(()=>s.value.some(e=>e.id!==r.section&&e.badge)),u=Je(`sidebar-sections`,()=>({surface:`workbench`}));u.scope.registerCommand({id:`ide.workbench.section.picker.toggle`,title:`Открыть или закрыть выбор раздела`,description:`Показывает список разделов проекта (файлы, поиск, Git и другие) в мобильной боковой панели.`,enabled:()=>!r.vertical,run:()=>void a.toggle()});let d=M(),f=M(),p=B(()=>{let e=f.value;return e?[{id:`section.close`,label:`Закрыть «${e.title}»`,icon:Cn,command:`ide.workbench.section.close`,args:{section:e.id},run:()=>i(`command`,`ide.workbench.section.close`,{section:e.id})}]:[]});function m(e,t){r.vertical&&t.closable&&(e.preventDefault(),e.stopPropagation(),f.value=t,d.value?.open(e,e.currentTarget))}function h(e){a.close(),e.command?i(`command`,e.command):i(`update:section`,e.id)}let g={props:r,emit:i,picker:a,groups:o,ordered:s,current:c,otherBadges:l,commands:u,sectionMenu:d,menuTarget:f,menuItems:p,openSectionMenu:m,choose:h,UiStatusDot:Ze,UiButton:q,UiIsland:Yd,ContextMenu:ih,get IconRefresh(){return F6},get IconSettings(){return Og},get IconChevron(){return bd},get IconCheck(){return Iy}};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}}),Oie={key:0,class:`side-tabs picker-bar`,"aria-label":`Разделы проекта`},kie=[`aria-expanded`,`aria-controls`],Aie={class:`name`},jie={key:1,class:`count`,"aria-hidden":`true`},Mie={class:`side-actions`},Nie=[`aria-current`,`onClick`],Pie={class:`label`},Fie={key:0,class:`count`,"aria-hidden":`true`},Iie={key:2,class:`side-tabs vertical`,"aria-label":`Разделы проекта`},Lie={key:0,class:`side-separator`,"aria-hidden":`true`},Rie=[`aria-pressed`,`title`,`aria-label`,`aria-haspopup`,`onClick`,`onContextmenu`],zie={key:0,"aria-hidden":`true`},Bie={class:`side-actions`};function Vie(t,n,r,i,a,o){return K(),U(P,null,[r.vertical?D(`v-if`,!0):(K(),U(`nav`,Oie,[I(`span`,{ref:i.picker.trigger,class:`picker`},[I(`button`,{class:`current`,"aria-haspopup":`dialog`,"aria-expanded":i.picker.open.value,"aria-controls":i.picker.open.value?i.picker.id:void 0,"data-command":`ide.workbench.section.picker.toggle`,onClick:n[0]||=e=>i.commands.run(`ide.workbench.section.picker.toggle`)},[i.current?(K(),F(C(i.current?.icon),{key:0,"aria-hidden":`true`})):D(`v-if`,!0),I(`span`,Aie,X(i.current?.title??`Разделы`),1),i.current?.badge?(K(),U(`span`,jie,X(i.current.badge),1)):i.otherBadges?(K(),F(i.UiStatusDot,{key:2,as:`i`,class:`dot`,radius:`circle`,shrink:``,tone:`success`,"aria-hidden":`true`})):D(`v-if`,!0),y(i.IconChevron,{class:`chevron`,"aria-hidden":`true`})],8,kie)],512),I(`div`,Mie,[y(i.UiButton,{shape:`icon`,size:`sm`,title:`Обновить раздел`,"aria-label":`Обновить раздел`,"data-command":`ide.workbench.sidebar.refresh`,onClick:n[1]||=e=>i.emit(`command`,`ide.workbench.sidebar.refresh`)},{default:e(()=>[y(i.IconRefresh,{"aria-hidden":`true`})]),_:1})])])),r.vertical?(K(),U(`nav`,Iie,[(K(!0),U(P,null,S(i.groups,e=>(K(),U(`div`,{key:e[0]?.id,class:Y([`side-group`,{grouped:e.length>1}])},[(K(!0),U(P,null,S(e,(e,t)=>(K(),U(P,{key:e.id},[t?(K(),U(`i`,Lie)):D(`v-if`,!0),I(`button`,{class:Y({selected:r.section===e.id&&!r.collapsed}),"aria-pressed":r.section===e.id&&!r.collapsed,title:e.closable?`${e.title} · ПКМ: закрыть`:e.title,"aria-label":e.badge?`${e.title}: ${e.badge}`:e.title,"aria-haspopup":e.closable?`menu`:void 0,onClick:t=>e.command?i.emit(`command`,e.command):i.emit(`update:section`,e.id),onContextmenu:t=>i.openSectionMenu(t,e)},[(K(),F(C(e.icon),{class:Y({"git-logo":e.id===`git`}),"aria-hidden":`true`},null,8,[`class`])),e.badge?(K(),U(`span`,zie,X(e.badge),1)):D(`v-if`,!0)],42,Rie)],64))),128))],2))),128)),I(`div`,Bie,[y(i.UiButton,{shape:`icon`,size:`sm`,title:`Настройки Projector`,"aria-label":`Настройки Projector`,"data-command":`ide.workbench.settings.open`,onClick:n[3]||=e=>i.emit(`command`,`ide.workbench.settings.open`)},{default:e(()=>[y(i.IconSettings,{"aria-hidden":`true`})]),_:1})])])):(K(),F(i.UiIsland,{key:1,menu:i.picker,label:`Разделы проекта`,width:260},{default:e(()=>[(K(!0),U(P,null,S(i.ordered,e=>(K(),U(`button`,{key:e.id,class:Y([`section-item`,{selected:r.section===e.id,subgroup:!!e.group}]),"aria-current":r.section===e.id?`true`:void 0,onClick:t=>i.choose(e)},[(K(),F(C(e.icon),{class:Y({"git-logo":e.id===`git`}),"aria-hidden":`true`},null,8,[`class`])),I(`span`,Pie,X(e.title),1),e.badge?(K(),U(`span`,Fie,X(e.badge),1)):D(`v-if`,!0),r.section===e.id?(K(),F(i.IconCheck,{key:1,class:`check`,"aria-hidden":`true`})):D(`v-if`,!0)],10,Nie))),128)),I(`button`,{class:`section-item`,"data-command":`ide.workbench.settings.open`,onClick:n[2]||=e=>{i.picker.close(),i.emit(`command`,`ide.workbench.settings.open`)}},[y(i.IconSettings,{"aria-hidden":`true`}),n[4]||=I(`span`,{class:`label`},`Настройки Projector`,-1)])]),_:1},8,[`menu`])),y(i.ContextMenu,{ref:`sectionMenu`,items:i.menuItems,label:`Действия раздела`},null,8,[`items`])],64)}var Hie=H(Die,[[`render`,Vie],[`__scopeId`,`data-v-c94e9418`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/SidebarTabs.vue`]]),Uie=W({__name:`WorkspaceSidebar`,props:t({projectId:{type:String,required:!0},capabilities:{type:Object,required:!0},sections:{type:Object,required:!0},hidden:{type:Boolean,required:!0},active:{type:Object,required:!1},revision:{type:Number,required:!0},overview:{type:null,required:!0},history:{type:null,required:!0},branches:{type:null,required:!0},files:{type:null,required:!0},gitSync:{type:null,required:!0},views:{type:Object,required:!1},rail:{type:Boolean,required:!1}},{section:{type:String,required:!0},sectionModifiers:{}}),emits:t([`command`,`refresh`,`navigate`,`changed`,`deleted`,`moved`,`openCommitTree`,`openSearch`],[`update:section`]),setup(e,{expose:t,emit:n}){let r=e,i=u(e,`section`),a=n,o={...wie,...r.views},s=new Map,c={get projectId(){return r.projectId},get active(){return r.active},get revision(){return r.revision},get overview(){return r.overview},get history(){return r.history},get branches(){return r.branches},get files(){return r.files},get gitSync(){return r.gitSync},openFile(...e){let t=r.files.openFile(...e);return a(`navigate`),t},openTab(e,t,n){r.files.openTab(e,t,n),a(`navigate`)},openCommitTree:e=>a(`openCommitTree`,e),openSearch:e=>a(`openSearch`,e),openPullFile:(e,t,n,i)=>r.files.openPullFile(e,t,n,!i),command:(e,t)=>a(`command`,e,t),refreshWorkspace:()=>a(`refresh`),changed:()=>a(`changed`),deleted:e=>a(`deleted`,e),moved:(e,t)=>a(`moved`,e,t)},l=B(()=>{let e=[];for(let t of r.sections.list()){let n=t.kind??t.id,i=o[n];i&&e.push({id:t.id,title:t.title,icon:i.icon,command:t.command,badge:i.badge?.(c)??0,group:t.group&&r.sections.has(t.group)?t.group:void 0,kind:n,closable:t.closable})}return e}),d=e=>{let t=r.sections.get(e);return o[t?.kind??e]},f=B(()=>r.sections.get(i.value)),p=B(()=>{let e=f.value;return e?o[e.kind??e.id]:void 0}),m=(e,t)=>t?s.set(e,t):s.delete(e);function h(){let e=d(i.value);e?.refresh?e.refresh(c,s.get(i.value)):a(`refresh`)}E(i,e=>d(e)?.activate?.(c));function g(e){r.rail&&(r.hidden||i.value===e)&&a(`command`,`ide.workbench.sidebar.toggle`),i.value=e}t({refreshSection:h,reveal:(e,t=`files`)=>s.get(t)?.reveal?.(e),refreshSearch:()=>s.get(`search`)?.refresh?.(),search:()=>s.get(`search`)?.search?.()});let _={props:r,section:i,emit:a,views:o,panels:s,host:c,items:l,viewOf:d,activeType:f,activeView:p,setPanel:m,refresh:h,select:g,SidebarTabs:Hie,get IconRefresh(){return F6},get IconX(){return Cn}};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),Wie={class:`panel`},Gie={key:0,class:`panel-head`},Kie={class:`panel-head-text`},qie={key:0,class:`panel-head-title`},Jie={key:1,class:`panel-head-source`},Yie=[`title`,`aria-label`];function Xie(e,t,n,r,i,a){return te((K(),U(`aside`,{class:Y([`sidebar`,{"with-rail":n.rail}]),"aria-label":`Обзор проекта`},[y(r.SidebarTabs,{section:r.section,items:r.items,vertical:n.rail,collapsed:n.rail&&n.hidden,"onUpdate:section":r.select,onCommand:t[0]||=(e,t)=>r.emit(`command`,e,t)},null,8,[`section`,`items`,`vertical`,`collapsed`]),te(I(`div`,Wie,[r.activeType?.closable?(K(),U(`div`,Gie,[r.activeView?(K(),F(C(r.activeView?.icon),{key:0,class:`panel-head-icon`,"aria-hidden":`true`})):D(`v-if`,!0),I(`span`,Kie,[n.rail||!r.activeType.source?(K(),U(`span`,qie,X(r.activeType.title),1)):D(`v-if`,!0),r.activeType.source?(K(),U(`span`,Jie,X(r.activeType.source),1)):D(`v-if`,!0)]),n.rail?D(`v-if`,!0):(K(),U(`button`,{key:1,class:`panel-head-close`,title:`Закрыть «${r.activeType.title}»`,"aria-label":`Закрыть «${r.activeType.title}»`,"data-command":`ide.workbench.section.close`,onClick:t[1]||=e=>r.emit(`command`,`ide.workbench.section.close`,{section:r.section})},[y(r.IconX,{"aria-hidden":`true`})],8,Yie))])):D(`v-if`,!0),n.rail&&r.activeType?.closable?(K(),U(`button`,{key:1,class:`panel-close`,title:`Закрыть раздел`,"aria-label":`Закрыть раздел`,"data-command":`ide.workbench.section.close`,onClick:t[2]||=e=>r.emit(`command`,`ide.workbench.section.close`,{section:r.section})},[y(r.IconX,{"aria-hidden":`true`})])):D(`v-if`,!0),n.rail?(K(),U(`button`,{key:2,class:`panel-refresh`,title:`Обновить раздел`,"aria-label":`Обновить раздел`,"data-command":`ide.workbench.sidebar.refresh`,onClick:t[3]||=e=>r.emit(`command`,`ide.workbench.sidebar.refresh`)},[y(r.IconRefresh,{"aria-hidden":`true`})])):D(`v-if`,!0),(K(!0),U(P,null,S(r.items,e=>te((K(),F(C(r.views[e.kind].component),R({key:e.id,ref_for:!0,ref:t=>r.setPanel(e.id,t)},{ref_for:!0},r.views[e.kind].props(r.host,r.section===e.id,r.props.sections.get(e.id))),null,16)),[[ae,r.section===e.id]])),128))],512),[[ae,!n.rail||!n.hidden]])],2)),[[ae,n.rail||!n.hidden]])}var Zie=H(Uie,[[`render`,Xie],[`__scopeId`,`data-v-44a0a443`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/WorkspaceSidebar.vue`]]),I6=e=>!e.scope||kt(e.scope);function Qie(e,t={}){let n=t.scope;return n&&!kt(n)?`${e}:${n.kind===`commit`?`rev:${n.rev}`:$t(n)}`:`${t.external?`external:`:``}${e}:${t.staged===void 0?`file`:t.staged?`index`:`working`}`}var L6=e=>!e.readonly&&I6(e)&&!e.binary&&!e.virtual&&!e.external&&!e.image&&!e.archive&&(e.original===void 0||e.staged===!1),R6=e=>(!e.scope||e.scope.kind!==`compare`)&&!e.virtual&&!e.binary&&!e.image&&e.original===void 0&&/\.(?:md|markdown)$/i.test(e.path),z6=e=>I6(e)&&!e.virtual&&!e.binary&&!e.image&&!e.external&&e.original===void 0&&/\.html?$/i.test(e.path);function $ie(e){let t=()=>e.tabs.value.filter(e=>!e.virtual&&!e.commit&&I6(e)&&!e.external&&!e.localFile);async function n(n,r){if(n===`checkout`){for(let n of t())if(!await e.files.saveFile(n))throw Error(`Не удалось сохранить файл`)}else if(n!==`discard`){for(let t of r)if(!await e.files.prepareEntryChange(t))throw Error(`Не удалось сохранить файл`)}else if(!await e.files.settle(r[0]))throw Error(`Не удалось завершить сохранение файла`)}async function r(){e.files.invalidate();let n=e.active()?.key;for(let n of t())await e.files.openFile(n.path,n.line,n.column,n.staged,{reload:!0}),e.files.fileError.value&&(e.files.fileError.value=``,e.tabs.value=e.tabs.value.filter(e=>e!==n));n&&e.tabs.value.some(e=>e.key===n)&&e.files.selectTab(n),e.bumpRevision(),e.refreshSearch()}async function i(t,n){if(t===`checkout`)return r();let i=n[0];e.bumpRevision();let a=e.active();e.tabs.value=e.tabs.value.filter(e=>e.commit||!I6(e)||!n.includes(e.path)||e.original===void 0&&t!==`discard`),a?.path===i&&t===`discard`&&await tt(e.projectId(),`file`,{path:i}).then(()=>!0,()=>!1)&&await e.files.openFile(i,void 0,void 0,void 0,{preview:!1}),e.refreshSearch()}return{prepare:n,applied:i}}var eae=160,tae=300,B6=1050,V6=(e,t)=>Math.max(eae,Math.min(e,t-tae));function nae(e){let t=M(),n=B(()=>({"--tree-width":t.value?`${t.value}px`:void 0})),r;f(()=>{r=new ResizeObserver(()=>{let n=e.value;!n||window.innerWidth<=B6||t.value===void 0||(t.value=V6(t.value,n.clientWidth))}),e.value&&r.observe(e.value)}),g(()=>{r?.disconnect()});let i=AB({start:()=>{let t=e.value;if(!(!t||window.innerWidth<=B6))return t.getBoundingClientRect()},move:(e,n)=>{t.value=V6(e.clientX-n.left,n.width)},cursor:()=>`col-resize`}).start;function a(n){if(![`ArrowLeft`,`ArrowRight`].includes(n.key)||!e.value)return;n.preventDefault();let r=e.value,i=n.key===`ArrowRight`?20:-20;t.value=V6((t.value??r.querySelector(`.sidebar`).clientWidth)+i,r.clientWidth)}return{treeWidth:t,sizes:n,resizeTree:i,resizeTreeKey:a}}function rae(e,t){let n=e.replace(/\/+$/,``)+`/`;return t.startsWith(n)?t.slice(n.length):void 0}async function iae(e){let t=/\.(?:png|jpe?g|gif|webp|avif)$/i.test(e.name);if(t&&e.size>8388608)throw Error(`Файл больше 8 МБ`);if(!t&&e.size>268435456)throw Error(`Файл больше ${ite/1024/1024} МБ: редактор не сможет его открыть`);if(t)return{path:e.name,content:``,image:URL.createObjectURL(e)};let n=await e.text();if(n.includes(`\0`))throw Error(`Бинарный файл — просмотр текста недоступен`);return{path:e.name,content:n}}function H6(e,t){return e&&(!t||!!t.preview)}function aae(e,t,n,r){for(let i of[...e])i.preview&&i.key!==t&&(n(i)||i.saving?i.preview=!1:(r(i),e.splice(e.indexOf(i),1)))}function oae(e){async function t(t,n,r=!0){let i=`${n}:commit:${t}`,a=e.tabs.value.find(e=>e.key===i);if(a)return r||(a.preview=!1),e.selectTab(i),e.generation();let o=e.begin();try{let a=await tt(e.projectId(),`commit-diff`,{hash:t,path:n});return o===e.generation()?(r&&e.dropPreview(i),e.tabs.value.push({key:i,path:n,content:a.modified,original:a.original,commit:a.hash,parent:a.parent,preview:r}),e.selectTab(i),o):void 0}catch(t){return e.fail(o,t instanceof Error?t.message:`Не удалось открыть изменения`)}finally{e.finish(o)}}async function n(t,n,r=``,i=!0){let a=e.tabs.value.find(e=>e.virtual===`pull`&&Number(e.params?.number)===t);a&&(a.preview=!1);let o=`${n}:pull:${t}${r?`:${r}`:``}`,s=e.tabs.value.find(e=>e.key===o);if(s)return i||(s.preview=!1),e.selectTab(o),e.generation();let c=e.begin();try{let r=await tt(e.projectId(),`pull-diff`,{number:String(t),path:n});if(c!==e.generation())return;if(r.binary)throw Error(`Бинарный файл нельзя сравнить как текст`);if(r.tooLarge)throw Error(`Файл слишком большой для просмотра изменений`);return i&&e.dropPreview(o),e.tabs.value.push({key:o,path:n,content:r.modified,original:r.original,commit:r.hash,parent:r.parent,pull:t,preview:i}),e.selectTab(o),c}catch(t){return e.fail(c,t instanceof Error?t.message:`Не удалось открыть изменения`)}finally{e.finish(c)}}return{openCommitFile:t,openPullFile:n}}function U6(e,t,n,r={},i=!1){let a=t.get(n);if(!a)return;let o=a.key(r),s=e.value.find(e=>e.key===o),c=H6(i&&!!a.preview,s);return s?s.preview=c:e.value.push({key:o,path:a.path(r),virtual:n,content:a.hint?.(r)??``,params:r,preview:c}),o}function sae(e){async function t(){return(await Promise.all(e.tabs.value.map(t=>e.saveFile(t)))).every(Boolean)?!0:window.confirm(`Не удалось сохранить изменения файлов. Уйти без сохранения?`)}function n(){for(let t of e.tabs.value)e.saveFile(t)}function r(t){e.tabs.value.some(t=>e.isDirty(t)||t.saving)&&(t.preventDefault(),t.returnValue=``)}ac(t),oc((e,n)=>e.path===n.path||t()),f(()=>{window.addEventListener(`beforeunload`,r),window.addEventListener(`blur`,n)}),g(()=>{window.removeEventListener(`beforeunload`,r),window.removeEventListener(`blur`,n)})}var W6=e=>!e.virtual&&!e.external&&!e.commit&&I6(e)&&!e.localFile&&!e.binary&&!e.image&&!e.archive&&e.staged!==!0;function cae(e){let t=()=>gt(e.projectId()),n=()=>e.tabs.value.filter(W6);async function r(t){if(!W6(t)||t.saving)return;let n=e.projectId(),r;try{r=(await tt(n,`file`,{path:t.path})).content}catch(r){if(n!==e.projectId()||!e.tabs.value.includes(t))return;t.conflict={error:r instanceof Error?r.message:`Файл недоступен`};return}n===e.projectId()&&e.tabs.value.includes(t)&&!t.saving&&(r===t.content?t.conflict=void 0:!e.isDirty(t)||t.draft===r?(t.content=r,t.draft=void 0,t.conflict=void 0,t.saveError=``,e.changed()):t.conflict={disk:r})}let i=e=>Promise.all(n().filter(t=>t.path===e).map(r));async function a(e){e.draft=void 0,e.conflict=void 0,e.saveError=``,await r(e)}function o(e){let t=e.conflict?.disk;t!==void 0&&(e.content=t,e.conflict=void 0,e.saveError=``)}let s=``,c;function l(r=!1){if(!t())return;let i=[...new Set(n().map(e=>e.path))].sort(),a=`${e.projectId()}\0${i.join(`\0`)}`;(a!==s||r)&&(s=a,bt(e.projectId(),{paths:i}).then(e=>{e||(s=``)}))}E(()=>[e.projectId(),...n().map(e=>e.path)].join(`\0`),()=>{clearTimeout(c),c=setTimeout(()=>l(),150)},{flush:`post`});function u(){l(!0);for(let e of n())r(e)}let d;return f(()=>{d=E(e.projectId,(e,t,n)=>{t&&bt(t,{paths:[]}),n(rt(e,{file:e=>{i(e)},reconnect:u})),l(!0)},{immediate:!0})}),g(()=>{clearTimeout(c),d?.(),bt(e.projectId(),{paths:[]},!0)}),{check:r,reloadFromDisk:a,keepMine:o}}async function G6(e,t,n,r,i,a){let o=r=>tt(e,n?`external`:`file`,{path:t,...r?{ask:`1`}:{},...a?Yt(a):{}}),s=await o(r);if(s.large===void 0)return s;if(i()&&window.confirm(El(t,s.large)))return o(!1)}async function lae(e,t,n){return n.scope?.kind===`compare`?pt(e,n.scope,`compare-file`,{path:t,...n.originalPath?{originalPath:n.originalPath}:{}}):n.scope&&!kt(n.scope)?G6(e,t,!1,n.ask,n.wanted,n.scope):n.staged===void 0?G6(e,t,n.external,n.ask,n.wanted):tt(e,`diff`,{path:t,staged:String(n.staged)})}function uae(e){return e.size<10485760||/\.(?:png|jpe?g|gif|webp|avif)$/i.test(e.name)||window.confirm(El(e.name,e.size))}function dae(e){let{tabs:t}=e,n=M(``);Sn(()=>n.value);let r=M(!1),i=cae({projectId:e.projectId,tabs:t,isDirty:e.isDirty,changed:e.saved}),a=0,o=0;async function s(i,o,s,c,{reload:l=!1,external:u=!1,preview:d=!0,scope:f,originalPath:m,quiet:h=!1,endLine:g}={}){if(u&&!ht(e.projectId()).externalFiles)throw Error(`Внешние файлы недоступны для этого источника`);let _=Qie(i,{external:u,staged:c,scope:f}),v=t.value.find(e=>e.key===_),y=H6(d,v);if(v&&(!l||e.isDirty(v)||v.saving))return v.preview=y,b(_),v.line=o,v.endLine=g,v.column=s,o&&R6(v)&&(v.markdownMode=`source`),a;let x=++a;r.value=!0,n.value=``;try{let n=await lae(e.projectId(),i,{external:u,staged:c,scope:f,originalPath:m,ask:!v,wanted:()=>x===a});if(!n||x!==a)return;y&&p(_);let r={...n,readonly:!!f&&!kt(f)||!ht(e.projectId()).write,external:u,image:`image`in n&&n.image?!f||kt(f)?at(e.projectId(),i,u):f.kind===`commit`?zt(e.projectId(),f,i):void 0:void 0,path:i,content:`modified`in n?n.modified:n.content,archive:`archive`in n?n.archive:void 0,original:`original`in n?n.original:void 0,staged:c,scope:f,originalPath:m,line:o,endLine:g,column:s,key:_,markdownMode:o?`source`:v?.markdownMode??`document`,preview:y},l=t.value.findIndex(e=>e.key===_);return l===-1?t.value.push(r):t.value[l]=r,b(_),a}catch(e){if(x===a)return h||(n.value=e instanceof Error?e.message:`Не удалось открыть файл`),x}finally{x===a&&(r.value=!1)}}let{openCommitFile:c,openPullFile:l}=oae({projectId:e.projectId,tabs:t,selectTab:b,dropPreview:e=>p(e),generation:()=>a,begin:()=>(a++,r.value=!0,n.value=``,a),finish:e=>{e===a&&(r.value=!1)},fail:(e,t)=>{if(e===a)return n.value=t,e}}),u=(e,t=``)=>d(`commit`,{hash:e,subject:t});function d(n,r,{preview:i=!0}={}){let a=U6(t,e.tabTypes,n,r,i);if(!a)throw Error(`Вкладка «${n}» недоступна в этом проекте`);t.value.find(e=>e.key===a)?.preview&&p(a),b(a)}function f(e){e.image?.startsWith(`blob:`)&&URL.revokeObjectURL(e.image)}let p=n=>aae(t.value,n,e.isDirty,f);function m(e){let n=t.value.find(t=>t.key===e);n&&(n.preview=!1)}async function h(e,i=!1){let o=`browser:${e.name}:${e.size}:${e.lastModified}`;if(!i&&t.value.some(e=>e.key===o)){b(o);return}let s=++a;r.value=!0,n.value=``;try{if(!uae(e))return;let n=await iae(e);if(s!==a){n.image&&URL.revokeObjectURL(n.image);return}let r={...n,key:o,external:!0,localFile:e},i=t.value.findIndex(e=>e.key===o);i===-1?t.value.push(r):(f(t.value[i]),t.value[i]=r),b(o)}catch(e){s===a&&(n.value=e instanceof Error?e.message:`Не удалось открыть файл`)}finally{s===a&&(r.value=!1)}}let _=t=>ht(e.projectId()).externalFiles&&fP(t)||!!t?.types.includes(`application/x-projector-tree-entry`);async function v(t,r){t.preventDefault();let i=t.dataTransfer;if(!i||!fP(i)&&!i.types.includes(`application/x-projector-tree-entry`))return;let a=++o,c=e.projectId(),l=pP(i),u=[...i.files],d=[...i.items].some(e=>e.webkitGetAsEntry?.()?.isDirectory),f=i.getData(S3),p=()=>a===o&&c===e.projectId();n.value=``,e.pending.target=r;try{if(f){let e=JSON.parse(f);if(e.projectId===c){await s(e.path,void 0,void 0,void 0,{preview:!1});return}let t=await fetch(`/api/projects/${encodeURIComponent(e.projectId)}`),n=await t.json();if(!t.ok)throw Error(n.error||`Не удалось прочитать проект`);l.push(`${n.project.path.replace(/\/+$/,``)}/${e.path}`)}if(l.length){let{root:e}=await tt(c,`root`);for(let t of l){if(!p())return;let n=rae(e,t);await s(n??t,void 0,void 0,void 0,{external:n===void 0,preview:!1})}}else{if(d)throw Error(`Бросьте файл, чтобы открыть его в редакторе`);for(let e of u){if(!p())return;await h(e)}if(!u.length)throw Error(`Не удалось прочитать перетащенный файл`)}}catch(e){p()&&(n.value=e instanceof Error?e.message:`Не удалось открыть файл`)}finally{e.pending.target=void 0}}async function y(n){let r=t.value.find(e=>e.key===n);if(!r||e.tabTypes.behaviorOf(r.virtual)?.beforeClose?.()===!1||!await S(r)&&(e.reveal(r.key),!window.confirm(`Не удалось сохранить ${r.path}. Закрыть без сохранения изменений?`)))return;let i=t.value.indexOf(r);i!==-1&&(f(r),t.value.splice(i,1))}function b(t){t!==e.activeKey()&&S(),++a,r.value=!1,n.value=``,e.reveal(t)}let x=new Map;function S(t=e.active()){if(!t||!L6(t))return Promise.resolve(!0);if(t.conflict&&e.isDirty(t))return t.saveError=`Файл изменён на диске: выберите версию, чтобы продолжить`,Promise.resolve(!1);let n=x.get(t);if(n)return n;if(!e.isDirty(t))return Promise.resolve(!0);t.saving=!0,t.saveError=``;let r=e.projectId(),a=(async()=>{try{for(;e.isDirty(t);){let e=t.draft;await rn(r,t.path,e,t.content),t.content=e}return e.saved(),!0}catch(e){return t.saveError=e instanceof Error?e.message:`Не удалось сохранить файл`,i.check(t),!1}finally{t.saving=!1,x.delete(t)}})();return x.set(t,a),a}sae({tabs:t,saveFile:S,isDirty:e.isDirty});async function C(e){let n=t.value.filter(t=>!t.virtual&&(t.path===e||t.path.startsWith(e+`/`)));return(await Promise.all(n.map(e=>S(e)))).every(Boolean)}async function w(e){for(let n of e)if(await y(n),t.value.some(e=>e.key===n))break}function T(){++a,r.value=!1}async function E(e){for(let n of t.value.filter(t=>t.path===e))if(x.has(n)&&!await x.get(n))return!1;return!0}function D(){let t=e.active();t&&R6(t)&&(t.markdownMode=t.markdownMode===`source`?`document`:`source`)}function O(){++a,++o,e.pending.target=void 0,t.value.forEach(f),t.value=[],n.value=``,r.value=!1}return g(()=>{++o,t.value.forEach(f),++a}),{fileError:n,loading:r,generation:()=>a,invalidate:T,settle:E,reset:O,openFile:s,openCommit:u,openCommitFile:c,openPullFile:l,openTab:d,openBrowserFile:h,acceptsFileDrop:_,dropFiles:v,closeTab:y,closeManyTabs:w,selectTab:b,saveFile:S,prepareEntryChange:C,toggleMarkdownSource:D,pinPreview:m,reloadFromDisk:i.reloadFromDisk,keepMine:i.keepMine}}var fae=`proxy.localhost`,pae=new Set([`localhost`,`127.0.0.1`,`[::1]`,`0.0.0.0`]),mae=/^(?:10\.|192\.168\.|172\.(?:1[6-9]|2\d|3[01])\.|169\.254\.)|\.(?:localhost|local)$/;function K6(e){let t=e.trim();return t?/^https?:\/\//i.test(t)?new URL(t).href:/^(?:localhost|127\.0\.0\.1|\[::1\])(?::\d+)?(?:[/?#]|$)/i.test(t)?new URL(`http://${t}`).href:/^:\d{2,5}(?:[/?#]|$)/.test(t)?new URL(`http://localhost${t}`).href:!/\s/.test(t)&&/^[^\s/]+\.[a-z]{2,}(?::\d+)?(?:[/?#]|$)/i.test(t)?new URL(`https://${t}`).href:`https://duckduckgo.com/?q=${encodeURIComponent(t)}`:``}function q6(e){try{let t=new URL(e).hostname.toLowerCase();return pae.has(t)||mae.test(t)}catch{return!1}}function hae(e){return e===`localhost`||e===`127.0.0.1`||e===`[::1]`}function gae(e,t=``){return`${e}.${fae}${t?`:${t}`:``}`}function _ae(e,t){let n;try{n=new URL(e)}catch{return}if(n.protocol!==`http:`&&n.protocol!==`https:`||n.hostname.includes(`:`))return;let r=(n.protocol===`https:`?`s`:`h`)+n.port,i=`${n.hostname}.${r}.${t}`;if(!(i.length>253))return`http://${i}${n.pathname}${n.search}${n.hash}`}function J6(e,t){if(e!==void 0){if(typeof e!=`number`||!Number.isInteger(e)||e<1)throw Error(`${t}: нужно целое число от 1`);return e}}function vae(e){let{projectId:t,register:n,run:r}=e;n(`ide.editor.selection.toChat`,`Добавить выделение в чат`,async n=>{let i=J(n);if(i.chat!==void 0&&typeof i.chat!=`string`)throw Error(`chat должен быть строкой`);if(i.text!==void 0){if(typeof i.text!=`string`)throw Error(`text должен быть строкой`);if(i.source!==void 0&&typeof i.source!=`string`)throw Error(`source должен быть строкой`);return await wR(t,i.text,{chat:i.chat,source:i.source,run:r}),{text:i.text}}let a=e.current();if(!i.path&&i.from===void 0&&a?.text)return await wR(t,a.text,{chat:i.chat,source:`Выделение из ${a.path}`,run:r}),{path:a.path,text:a.text};let o=typeof i.path==`string`?i.path:void 0,s=J6(i.from,`from`);if(o&&!s)throw Error(`Укажите from для выбранного файла`);let c=o??a?.path,l=s??a?.from,u=J6(i.to,`to`)??(s?l:a?.to);if(!c||!l||!u)throw Error(`Выделите строки в файле`);if(u<l)throw Error(`to: конец диапазона раньше начала`);return await SR(t,c,{from:l,to:u},i.chat,r),{path:c,from:l,to:u}},t=>{let n=J(t);return typeof n.text==`string`?!!n.text.trim():typeof n.path==`string`&&typeof n.from==`number`||!!e.current()},`agent`,{description:`Добавляет чип с выбранными строками файла в поле ввода открытого чата агента, не отправляя сообщение. Без выделения берётся строка под курсором. Целевой чат — видимый, иначе последний, с которым работали; если чатов нет, открывается самый свежий сохранённый или новый чат Projector. Текст выделения не передаётся: агент видит @path:12-34 и читает файл сам. Для визуального редактора Markdown и терминала передайте text: в поле ввода попадёт сам выделенный текст, а source подпишет его источник.`,arguments:{path:`Путь относительно корня проекта; без него — файл активного редактора`,from:`Первая строка диапазона (с 1); без него — строка под курсором`,to:`Последняя строка диапазона; по умолчанию совпадает с from`,text:`Выделенный текст вместо диапазона строк (визуальный редактор Markdown, терминал)`,source:`Подпись источника для text: путь к файлу или название терминала`,chat:`Ключ чата из ide.agent.chats.list; без него — чат в использовании`}}),n(`ide.terminal.selection.toChat`,`Добавить выделение терминала в чат`,async e=>{let n=J(e);if(typeof n.text!=`string`||!n.text.trim())throw Error(`Выделите текст в терминале`);if(n.chat!==void 0&&typeof n.chat!=`string`)throw Error(`chat должен быть строкой`);if(n.source!==void 0&&typeof n.source!=`string`)throw Error(`source должен быть строкой`);return await wR(t,n.text,{chat:n.chat,source:n.source,run:r}),{text:n.text}},e=>{let t=J(e);return typeof t.text==`string`&&!!t.text.trim()},`agent`,{description:`Добавляет выделенный текст терминала в поле ввода открытого чата агента, не отправляя сообщение. Выделение в терминале не связано с файлом, поэтому в поле ввода попадает сам текст; source подписывает, из какого терминала он взят. Целевой чат — видимый, иначе последний, с которым работали; если чатов нет, открывается самый свежий сохранённый или новый чат Projector.`,arguments:{text:`Выделенный текст терминала`,source:`Подпись источника, например «Терминал «zsh»»`,chat:`Ключ чата из ide.agent.chats.list; без него — чат в использовании`}})}function Y6(e){let t=ee();return{current:t,report(e){t.value={...e}},clear(e){t.value?.path===e&&(t.value=void 0)},add(){t.value&&e?.()}}}var yae=Symbol.for(`projector.editor-selection`);function bae(e=Y6()){return n(yae,e),e}function xae(e){let{editorCommands:t,register:n,tabs:r,active:i,activeKey:a,fileOf:o,saveFile:s,openTab:c}=e,{openFile:l,toggleMarkdownSource:u}=e,d=bae(Y6(()=>t.run(`ide.editor.selection.toChat`)));function f(e){let t=J(e);if(t.id!==void 0&&typeof t.id!=`string`)throw Error(`id должен быть строкой`);return r.value.find(e=>!e.virtual&&e.key===(t.id??a()))}function p(e,t){if(e!==void 0){if(typeof e!=`number`||!Number.isInteger(e)||e<1)throw Error(`${t}: нужно целое число от 1`);return e}}n(`ide.editor.path.open`,`Открыть файл или папку проекта по пути`,t=>{let n=J(t);if(typeof n.path!=`string`||!n.path)throw Error(`Укажите путь`);if(n.external!==void 0&&typeof n.external!=`boolean`)throw Error(`external должен быть boolean`);let r=p(n.line,`line`),i=p(n.endLine,`endLine`);if(i&&!r)throw Error(`endLine требует line`);if(n.directory===!0){if(n.external===!0)throw Error(`Внешнюю папку нельзя показать в дереве проекта`);e.revealInTree(n.path)}else return e.openFileAt(n.path,r,i,p(n.column,`column`),{external:n.external===!0})},()=>!0,void 0,{description:`Открывает файл проекта во вкладке редактора (или показывает папку в дереве) по пути, относительному корню проекта. Так открываются ссылки на файлы из чата; line и endLine показывают строку или выделяют диапазон. С external: true открывается файл на диске вне проекта.`,arguments:{path:`Путь относительно корня проекта или абсолютный путь при external`,external:`true, если путь — файл на диске вне проекта`,directory:`true, если путь — папка: она будет показана в дереве`,line:`Строка, на которую поставить курсор (с 1)`,endLine:`Последняя строка диапазона: файл откроется с выделением line..endLine`,column:`Столбец курсора (с 1); действует без endLine`}}),vae({projectId:e.projectId,run:(t,n)=>e.editorCommands.scope.executeCommand(t,n),current:()=>d.current.value,register:n}),n(`ide.editor.file.save`,`Сохранить`,async e=>{let t=f(e);if(!await s(t))throw Error(t.saveError||`Не удалось сохранить файл`)},e=>!!f(e)&&L6(f(e)),`write`),n(`ide.editor.file.reloadFromDisk`,`Загрузить файл с диска`,async t=>{await e.reloadFromDisk(f(t))},e=>!!f(e)&&!f(e).readonly,void 0,{description:`Перечитывает файл с диска и отбрасывает несохранённые правки во вкладке. Разрешает конфликт, когда файл изменили снаружи (например, агент), пока он был открыт с правками.`,arguments:{id:`Ключ вкладки; по умолчанию активная вкладка`}}),n(`ide.editor.file.keepMine`,`Оставить мою версию файла`,t=>{e.keepMine(f(t))},e=>f(e)?.conflict?.disk!==void 0,`write`,{description:`При конфликте с изменением на диске оставляет правки во вкладке: следующее сохранение перезапишет версию на диске. Доступна только пока конфликт есть.`,arguments:{id:`Ключ вкладки; по умолчанию активная вкладка`}}),n(`ide.editor.file.reveal`,`Показать в дереве файлов`,t=>{e.revealInTree(f(t).path,f(t).scope)},e=>!!f(e)&&!f(e).external),n(`ide.workbench.tree.reveal`,`Показать в проекте`,t=>{let{path:n}=J(t);if(typeof n!=`string`||!n.trim())throw Error(`Укажите path`);e.revealInTree(n)},()=>!0,void 0,{description:`Открывает боковую панель «Файлы» и показывает в дереве проекта файл или папку по пути относительно корня проекта, раскрывая родительские каталоги.`,arguments:{path:`Путь относительно корня проекта`}}),n(`ide.editor.file.copyRelativePath`,`Копировать относительный путь`,async e=>{await yn(null,f(e).path,`Путь скопирован`)},e=>!!f(e)),n(`ide.editor.markdown.toggleSource`,`Переключить исходник Markdown`,()=>u(),()=>{let e=i();return!!e&&R6(e)});let m=t=>{let n=f(t);return n&&z6(n)&&mt(e.projectId,n.path)?n:void 0};n(`ide.editor.html.reload`,`Перезагрузить HTML-страницу`,e=>{let t=m(e);t.htmlReload=(t.htmlReload??0)+1},e=>!!m(e),void 0,{description:`Заново загружает страницу открытого HTML-файла вместе со стилями, скриптами и картинками. Страница читает файлы с диска, поэтому несохранённые правки не видны.`,arguments:{id:`Ключ вкладки; по умолчанию активная вкладка`}}),n(`ide.editor.html.openInBrowser`,`Открыть HTML-страницу в браузере`,t=>{let n=m(t);window.open(mt(e.projectId,n.path),`_blank`,`noopener`)},e=>!!m(e),void 0,{description:`Открывает HTML-файл как страницу в новой вкладке браузера: относительные пути разрешаются от его каталога в проекте.`,arguments:{id:`Ключ вкладки; по умолчанию активная вкладка`}});let h=e=>{let t=J(e).id;return r.value.find(e=>e.virtual===`browser`&&e.key===(t??a()))},g=e=>{let t=J(e).url;if(typeof t!=`string`||!t.trim())throw Error(`Укажите адрес страницы`);return K6(t)};n(`ide.workbench.browser.navigate`,`Открыть адрес в браузере`,t=>{let n=g(t),r=h(t);r?(r.params={...r.params,url:n},e.selectTab(r.key)):c(`browser`,{...e.tabTypes.get(`browser`).create(),url:n},{preview:!1}),e.onOpenTab?.()},()=>e.tabTypes.has(`browser`),void 0,{description:`Открывает адрес во вкладке-псевдобраузере: в активной, если она браузерная (или в вкладке с указанным id), иначе в новой. Принимает полный URL, localhost:порт, домен или поисковый запрос. Страницы из интернета загружаются через прокси Projector, localhost и локальная сеть — напрямую.`,arguments:{url:`URL, localhost:порт, домен или поисковый запрос`,id:`Ключ браузерной вкладки; по умолчанию активная браузерная, иначе новая`}}),n(`ide.editor.html.openInBrowserTab`,`Открыть HTML-страницу во вкладке браузера`,t=>{let n=m(t),r=new URL(mt(e.projectId,n.path),location.origin).href;c(`browser`,{...e.tabTypes.get(`browser`).create(),url:r,title:n.path},{preview:!1}),e.onOpenTab?.()},t=>!!m(t)&&e.tabTypes.has(`browser`),void 0,{description:`Открывает HTML-файл проекта как страницу во вкладке-псевдобраузере (с адресной строкой и историей) вместо просмотра рядом с кодом.`,arguments:{id:`Ключ вкладки; по умолчанию активная вкладка`}}),n(`ide.editor.file.open`,`Открыть файл`,e=>l(f(e).path),e=>!!f(e)&&f(e).original!==void 0);function _(e){let n=o(e),r=[t.item(`ide.workbench.panel.splitRight`,{id:e},{separator:!0}),t.item(`ide.workbench.panel.splitDown`,{id:e}),t.item(`ide.workbench.panel.hideGroup`,{id:e})];return!n||n.virtual?r:[...n.original===void 0?[]:[t.item(`ide.editor.file.open`,{id:e})],...z6(n)?[t.item(`ide.editor.html.openInBrowserTab`,{id:e},{separator:!0}),t.item(`ide.editor.html.openInBrowser`,{id:e})]:[],t.item(`ide.editor.file.save`,{id:e},{separator:!0}),t.item(`ide.editor.file.reveal`,{id:e}),t.item(`ide.editor.file.copyRelativePath`,{id:e}),...r]}for(let{id:t,command:r,create:i}of e.tabTypes.list())r&&n(r.id,r.title,n=>{let a;if(r.arguments){let e=J(n);a={};for(let t of Object.keys(r.arguments)){let n=e[t];if(typeof n!=`string`||!n)return;a[t]=n}}else{a=i?.();let e=J(n);for(let t of Object.keys(r.optional??{})){let n=e[t];typeof n==`string`&&n&&(a={...a,[t]:n})}}c(t,a),e.onOpenTab?.()},()=>!0,r.requires,{description:r.description,arguments:r.arguments??r.optional});function v(n){let r=e.tabTypes.behaviorOf(i()?.virtual)?.save;r&&(n.ctrlKey||n.metaKey)&&qe(n)===`s`?(n.preventDefault(),n.stopPropagation(),r()):n.target.closest(`[data-own-keys], .terminal-view`)||t.keydown(n)}function y(e){e.target?.closest(`.workspace-tabs, .keybindings-editor, .terminal-view, .network-panel`)||t.scope.activate()}return{tabActions:_,editorKeydown:v,editorFocus:y}}var Sae=NZ(`kind`,[OZ({kind:VZ(`live`)}),OZ({kind:VZ(`commit`),rev:WX()}),OZ({kind:VZ(`compare`),from:WX(),to:WX()})]),Cae=OZ({id:WX(),title:WX(),source:WX().optional(),group:WX().optional(),kind:WX().optional(),params:LZ(WX(),SZ()).optional(),closable:bZ().optional()}),wae=OZ({tabs:EZ(OZ({key:WX(),path:WX(),virtual:WX().optional(),params:LZ(WX(),SZ()).optional(),commit:WX().optional(),pull:gZ().int().positive().optional(),rev:WX().optional(),scope:Sae.optional(),originalPath:WX().optional(),external:bZ().optional(),staged:bZ().optional(),markdownMode:zZ([`document`,`source`]).optional()})),sections:EZ(Cae).optional(),activeKey:WX(),section:WX(),mobileSurface:zZ([`editor`,`files`,`terminal`]).optional(),treeWidth:gZ().finite().positive().optional(),agentWidth:gZ().finite().positive().optional(),sidebarHidden:bZ().optional(),layout:SZ().optional()});function Tae(e){let t=e=>new Set(e.flatMap(e=>{let t=e.params?.scope;return t?[$t(t)]:[]})),n=$4(()=>`projector:workspace:v1:${e.projectId()}`,()=>{let n=e.extraSections?.value??[],r=t(n);return{sections:n,tabs:e.tabs.value.filter(e=>!e.localFile&&(I6(e)||!!e.scope&&!kt(e.scope)&&r.has($t(e.scope)))).map(e=>({key:e.key,path:e.path,virtual:e.virtual,params:e.params,commit:e.commit,pull:e.pull,scope:e.scope,originalPath:e.originalPath,external:e.external,staged:e.staged,markdownMode:e.markdownMode})),activeKey:e.activeKey.value,section:e.section.value,mobileSurface:e.mobileSurface.value,treeWidth:e.treeWidth.value,sidebarHidden:e.sidebarHidden.value,layout:CB(e.layout.value)}},wae,()=>e.persist&&!e.restoringSession.value),r=0;async function i(t,n){try{for(let i of t?.tabs??[]){if(n!==r)return;if(i.virtual){e.ensureTab(i.virtual,i.params??(i.commit?{hash:i.commit}:void 0));continue}let t=i.pull?await e.openPullFile(i.pull,i.path,i.commit??``,!1):i.commit?await e.openCommitFile(i.commit,i.path,!1):await e.openFile(i.path,void 0,void 0,i.staged,{external:i.external,scope:i.scope??(i.rev?{kind:`commit`,rev:i.rev}:void 0),originalPath:i.originalPath,preview:!1,quiet:!0});if(n!==r||t===void 0||t!==e.fileGeneration())return;let a=e.tabs.value.find(e=>e.key===i.key);a&&(a.markdownMode=i.markdownMode)}n===r&&!EB(t?.layout)&&e.tabs.value.some(e=>e.key===t?.activeKey)&&(e.activeKey.value=t.activeKey)}finally{n===r&&(e.restoringSession.value=!1,await p(),n===r&&e.mobile.value&&t?.mobileSurface&&(e.mobileSurface.value=t.mobileSurface===`terminal`&&!e.terminals?`editor`:t.mobileSurface))}}E(()=>e.projectId(),()=>{let t=e.persist?n.read():void 0,a=++r;e.restoringSession.value=!0,e.resetFiles(),e.resetGit(),e.layout.value=EB(t?.layout)??e.initialLayout(),e.restoreSections?.(t?.sections??[]);let o=t=>e.sectionExists?e.sectionExists(t):e.sections.has(t);e.section.value=o(t?.section??``)?t.section:`files`,e.treeWidth.value=t?.treeWidth,e.sidebarHidden.value=!!t?.sidebarHidden,e.reloadGit(),i(t,a)},{immediate:!0}),g(()=>{++r})}var Eae={},Dae={viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`};function Oae(e,t){return K(),U(`svg`,Dae,[...t[0]||=[I(`path`,{d:`M5 21V3h14v10H5`},null,-1),I(`path`,{fill:`currentColor`,stroke:`none`,d:`M5 3h4.67v5H5zm9.33 0H19v5h-4.67zM9.67 8h4.66v5H9.67z`},null,-1)]])}var kae=H(Eae,[[`render`,Oae],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/IconFinishFlag.vue`]]),Aae=e=>{try{return e?new URL(e).host:``}catch{return``}},jae=[ct(`settings`,`settings:app`,`Настройки`,`Настройки Projector`,{subtitle:`настройки Projector`,command:{id:`ide.workbench.settings.open`,title:`Открыть настройки Projector`,description:`Открывает общие настройки Projector во вкладке текущего воркспейса. Повторный вызов фокусирует существующую вкладку; формы сохраняют черновики до её закрытия.`}}),ct(`keybindings`,`settings:keybindings`,`Горячие клавиши`,`Настройки горячих клавиш`,{subtitle:`настройки IDE`,command:{id:`ide.workbench.keybindings.open`,title:`Открыть горячие клавиши`}}),ct(`network`,`network:info`,`Локальная сеть`,`Доступ по локальной сети`,{subtitle:`доступ по сети`,command:{id:`ide.workbench.server.network.open`,title:`Показать доступ по локальной сети`}}),St({id:`browser`,key:({id:e})=>`browser:${e}`,path:({title:e,url:t})=>e||Aae(t)||`Браузер`,title:({url:e})=>e||`Браузер`,subtitle:`псевдобраузер`,create:()=>({id:Math.random().toString(36).slice(2,10)}),read:({url:e,title:t})=>({text:`${t?`${t}\n`:``}${e??``}`,note:`Браузер`}),command:{id:`ide.workbench.browser.open`,title:`Открыть браузер`,description:`Открывает новую вкладку-псевдобраузер: адресная строка, история, страницы из интернета (через прокси Projector) и dev-серверы проекта. Для перехода по адресу используйте ide.workbench.browser.navigate.`}}),St({id:`commit`,key:({hash:e})=>`commit:${e}`,path:({hash:e})=>`Коммит ${e.slice(0,7)}`,title:({hash:e},t)=>`${t?`${t} · `:``}${e}`,hint:({subject:e})=>e??``,read:({hash:e},t)=>({text:t,note:`Обзор коммита ${e}`})})];function Mae(e){return e===`local`||e===`lan`}async function Nae(e){let t=await fetch(`/api/app/network`,{cache:`no-store`,signal:e}),n=await t.json();if(!t.ok)throw Error(n.error||`Не удалось загрузить доступ по сети`);return n}async function Pae(e,t,n){let r=await fetch(`/api/app/network`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:e,password:t}),signal:n}),i=await r.json();if(!r.ok)throw Error(i.error||`Не удалось сохранить доступ по сети`);return i}async function X6(e){try{let t=await fetch(`/api/health`,{cache:`no-store`,signal:AbortSignal.any([e,AbortSignal.timeout(2e3)])}),n=await t.json();return t.ok&&Number.isInteger(n.pid)?n.pid:null}catch{return e.throwIfAborted(),null}}async function Fae(e,t){let n=Date.now()+6e4;for(;Date.now()<n;){t.throwIfAborted();let n=await X6(t);if(n!==null&&n!==e)return;await new Promise(e=>setTimeout(e,500))}throw Error(`Сервер не перезапустился за 60 секунд`)}function Z6(e){let t=ee(null),n=M(`local`),r=M(``),i=M(!1),a=M(``),o=M(``),s=B(()=>t.value!==null),c=B(()=>t.value?.passwordRequired??!1),l=B(()=>t.value?.lanUrl??null),u=!1,d,p=Je(`network:${e}:${V()}`,()=>({surface:`network`,view:e,mode:t.value?.mode??``,ready:s.value,busy:i.value,passwordRequired:c.value}));async function m(e){let r=await Nae(e);return e.throwIfAborted(),t.value=r,n.value=r.mode,r}async function h(e){if(u||i.value)throw Error(`Операция доступа по сети недоступна`);i.value=!0,a.value=``,o.value=``,d=new AbortController;try{return await e(d.signal)}catch(e){if(u)return;throw a.value=e instanceof Error?e.message:`Не удалось сохранить доступ по сети`,o.value=``,e}finally{d=void 0,u||(i.value=!1)}}async function _(e,n){return h(async i=>{let a=await X6(i);if(i.throwIfAborted(),e!==t.value?.mode&&a===null)throw Error(`Не удалось определить PID сервера перед сменой режима`);let s=await Pae(e,n,i);if(i.throwIfAborted(),s.restarted){if(o.value=`Сервер перезапускается…`,a===null)throw Error(`Не удалось определить PID перезапускаемого сервера`);await Fae(a,i),i.throwIfAborted(),r.value=``,window.location.reload()}else await m(i),r.value=``,o.value=`Сохранено`;return s})}let v=()=>s.value&&!i.value;return p.scope.registerCommand({id:`ide.network.refresh`,title:`Обновить настройки доступа по сети`,description:`Перечитывает режим, наличие пароля и LAN-адреса; сбрасывает черновик режима.`,enabled:()=>!i.value,run:()=>h(m)}),p.scope.registerCommand({id:`ide.network.save`,title:`Сохранить доступ по сети`,description:`Сохраняет режим local/lan и новый пароль. Без аргументов использует поля текущего экрана; пустое поле сохраняет прежний пароль. Явный password='' удаляет пароль. Смена режима перезапускает сервер и завершает терминалы и дочерние процессы; пароль меняется без рестарта.`,arguments:{mode:`local или lan; без аргумента — режим из текущего экрана`,password:`Новый пароль; без аргумента — непустое поле экрана; пустая строка — убрать пароль`},enabled:v,run:e=>{let t=J(e),i=t.mode??n.value;if(!Mae(i))throw Error(`Режим: local или lan`);return _(i,Ie(t,`password`)??(r.value||void 0))}}),p.scope.registerCommand({id:`ide.network.password.clear`,title:`Убрать пароль доступа по сети`,description:`Удаляет пароль доступа. Сохраняет режим из текущего экрана; если режим изменён, перезапускает сервер и завершает терминалы и дочерние процессы.`,enabled:()=>v()&&c.value,run:()=>_(n.value,``)}),f(()=>{h(m).catch(()=>{})}),g(()=>{u=!0,d?.abort()}),{state:t,mode:n,password:r,busy:i,error:a,status:o,ready:s,passwordRequired:c,lanUrl:l,commands:p}}var Iae=W({__name:`NetworkSettings`,setup(e,{expose:t}){t();let{mode:n,passwordRequired:r,lanUrl:i,password:a,busy:o,error:s,status:c,ready:l,commands:u}=Z6(`settings`),d={mode:n,passwordRequired:r,lanUrl:i,password:a,busy:o,error:s,status:c,ready:l,commands:u,passwordId:V(),UiHeading:Ee,UiLabel:xl,UiMessage:Te,UiControl:Se,UiChoiceGroup:Sl,UiChoiceRow:Cl,UiInline:Be,UiButton:q,UiHint:we};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}});function Lae(t,n,r,i,a,o){return K(),U(`section`,{class:`network-settings`,onFocusin:n[5]||=e=>i.commands.scope.activate(),onPointerdown:n[6]||=e=>i.commands.scope.activate(),onKeydown:n[7]||=(...e)=>i.commands.keydown&&i.commands.keydown(...e)},[y(i.UiHeading,{as:`h2`,size:`sm`},{default:e(()=>[...n[8]||=[G(`Доступ по локальной сети`,-1)]]),_:1}),y(i.UiChoiceGroup,{label:`Режим доступа`,disabled:!i.ready||i.busy},{default:e(({groupName:t})=>[y(i.UiChoiceRow,{title:`Только локально`,description:`Сервер слушает localhost и недоступен другим устройствам.`},{default:e(()=>[y(i.UiControl,{modelValue:i.mode,"onUpdate:modelValue":n[0]||=e=>i.mode=e,type:`radio`,name:t,value:`local`},null,8,[`modelValue`,`name`])]),_:2},1024),y(i.UiChoiceRow,{title:`Локальная сеть`,description:`Открывает интерфейс для телефона и других устройств в вашей сети.`},{default:e(()=>[y(i.UiControl,{modelValue:i.mode,"onUpdate:modelValue":n[1]||=e=>i.mode=e,type:`radio`,name:t,value:`lan`},null,8,[`modelValue`,`name`])]),_:2},1024)]),_:1},8,[`disabled`]),i.mode===`lan`?(K(),U(P,{key:0},[y(i.UiLabel,{size:`sm`,tone:`secondary`,"space-before":4,"space-after":2,for:i.passwordId},{default:e(()=>[...n[9]||=[G(`Пароль доступа (необязательно)`,-1)]]),_:1},8,[`for`]),y(i.UiControl,{id:i.passwordId,modelValue:i.password,"onUpdate:modelValue":n[2]||=e=>i.password=e,type:`password`,autocomplete:`new-password`,placeholder:`Оставьте пустым, чтобы не менять пароль`,disabled:!i.ready||i.busy},null,8,[`id`,`modelValue`,`disabled`]),y(i.UiHint,{class:`hint`},{default:e(()=>[i.passwordRequired?(K(),U(P,{key:0},[G(`Пароль уже задан. Введите новый, чтобы заменить его, или очистите защиту вручную.`)],64)):(K(),U(P,{key:1},[G(`Без пароля любой в локальной сети сможет управлять Projector, включая терминалы.`)],64))]),_:1}),i.lanUrl?(K(),F(i.UiHint,{key:0,class:`hint`},{default:e(()=>[n[10]||=G(` Адрес для другого устройства: `,-1),I(`code`,null,X(i.lanUrl),1)]),_:1})):D(`v-if`,!0)],64)):D(`v-if`,!0),y(i.UiInline,{class:`actions`,align:`stretch`,wrap:``},{default:e(()=>[y(i.UiButton,{appearance:`solid`,disabled:!i.ready||i.busy,onClick:n[3]||=e=>i.commands.run(`ide.network.save`)},{default:e(()=>[...n[11]||=[G(`Сохранить и перезапустить`,-1)]]),_:1},8,[`disabled`]),i.passwordRequired?(K(),F(i.UiButton,{key:0,disabled:!i.ready||i.busy,onClick:n[4]||=e=>i.commands.run(`ide.network.password.clear`)},{default:e(()=>[...n[12]||=[G(`Убрать пароль`,-1)]]),_:1},8,[`disabled`])):D(`v-if`,!0)]),_:1}),i.error||i.status?(K(),F(i.UiMessage,{key:1,role:`status`,tone:i.error?`danger`:void 0},{default:e(()=>[G(X(i.error||i.status),1)]),_:1},8,[`tone`])):D(`v-if`,!0)],32)}var Rae=H(Iae,[[`render`,Lae],[`__scopeId`,`data-v-75af3134`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/network/NetworkSettings.vue`]]),zae=W({__name:`LanInfoPanel`,setup(e,{expose:t}){t();let{state:n,password:r,busy:i,status:a,error:o,commands:s}=Z6(`panel`);Tn(()=>{let e=`Локальная сеть`,t=n.value;return t?{note:e,text:Nn(`Режим: ${t.mode===`lan`?`Локальная сеть`:`Только localhost`}`,`Пароль: ${t.passwordRequired?`задан`:`не задан`}`,t.mode===`lan`?t.lanUrls.length?`Адреса: ${t.lanUrls.join(`, `)}`:`Адреса: нет`:`Сервер доступен только на этой машине`,i.value&&`Состояние: выполняется…`,a.value&&`Состояние: ${a.value}`,o.value&&`Ошибка: ${o.value}`)}:{note:e,text:Nn(`Загрузка…`,i.value&&`Состояние: выполняется…`,o.value&&`Ошибка: ${o.value}`)}});let c=V();async function l(e){o.value=``,a.value=``;try{await navigator.clipboard.writeText(e),a.value=`Адрес скопирован`}catch{throw o.value=`Не удалось скопировать адрес`,Error(o.value)}}s.scope.registerCommand({id:`ide.network.address.copy`,title:`Скопировать LAN-адрес Projector`,description:`Копирует один из текущих LAN-адресов в буфер обмена. Без address использует первый адрес.`,arguments:{address:`Один из LAN-адресов текущего сервера`},enabled:()=>!i.value&&n.value?.mode===`lan`&&!!n.value.lanUrls.length,run:e=>{let{address:t=n.value?.lanUrls[0]}=J(e);if(typeof t!=`string`||!n.value?.lanUrls.includes(t))throw Error(`Выберите LAN-адрес сервера`);return l(t)}});let u={state:n,password:r,busy:i,status:a,error:o,commands:s,passwordId:c,copyAddress:l,UiCard:je,UiLabel:xl,UiControl:Se,UiStack:Ed,UiInline:Be,UiHeading:Ee,UiMessage:Te,UiButton:q,UiHint:we};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}}),Bae={class:`summary`},Vae=[`disabled`,`onClick`];function Hae(t,n,r,i,a,o){return K(),U(`div`,{class:`network-panel`,onFocusin:n[3]||=e=>i.commands.scope.activate(),onPointerdown:n[4]||=e=>i.commands.scope.activate(),onKeydown:n[5]||=(...e)=>i.commands.keydown&&i.commands.keydown(...e)},[i.state?(K(),U(P,{key:1},[I(`dl`,Bae,[y(i.UiCard,{as:`div`,appearance:`frame`},{default:e(()=>[n[7]||=I(`dt`,null,`Режим`,-1),I(`dd`,null,X(i.state.mode===`lan`?`Локальная сеть`:`Только localhost`),1)]),_:1}),y(i.UiCard,{as:`div`,appearance:`frame`},{default:e(()=>[n[8]||=I(`dt`,null,`Пароль`,-1),I(`dd`,null,X(i.state.passwordRequired?`Задан`:`Не задан`),1)]),_:1})]),y(i.UiHeading,{as:`h3`,size:`sm`,"space-after":2,class:`section-heading`},{default:e(()=>[...n[9]||=[G(`Адреса`,-1)]]),_:1}),i.state.mode===`lan`&&i.state.lanUrls.length?(K(),F(i.UiStack,{key:0,as:`ul`,flow:`flex`,gap:2,class:`addresses`},{default:e(()=>[(K(!0),U(P,null,S(i.state.lanUrls,t=>(K(),F(i.UiInline,{as:`li`,gap:3,justify:`between`,key:t},{default:e(()=>[I(`code`,null,X(t),1),I(`button`,{disabled:i.busy,onClick:e=>i.commands.run(`ide.network.address.copy`,{address:t})},` копировать `,8,Vae)]),_:2},1024))),128))]),_:1})):(K(),F(i.UiMessage,{key:1,tone:`muted`,size:`sm`,class:`muted`},{default:e(()=>[G(X(i.state.mode===`lan`?`Адреса сети не найдены`:`Сервер доступен только на этой машине`),1)]),_:1})),y(i.UiHeading,{as:`h3`,size:`sm`,"space-after":2,class:`section-heading`},{default:e(()=>[y(i.UiLabel,{inline:``,for:i.passwordId},{default:e(()=>[...n[10]||=[G(`Пароль доступа`,-1)]]),_:1},8,[`for`])]),_:1}),y(i.UiInline,{class:`password-row`,align:`normal`,justify:`normal`},{default:e(()=>[y(i.UiControl,{grow:``,id:i.passwordId,modelValue:i.password,"onUpdate:modelValue":n[0]||=e=>i.password=e,type:`password`,autocomplete:`new-password`,placeholder:`Новый пароль`,disabled:i.busy},null,8,[`id`,`modelValue`,`disabled`]),y(i.UiButton,{appearance:`solid`,disabled:i.busy||!i.password,onClick:n[1]||=e=>i.commands.run(`ide.network.save`)},{default:e(()=>[...n[11]||=[G(`Сохранить`,-1)]]),_:1},8,[`disabled`]),i.state.passwordRequired?(K(),F(i.UiButton,{key:0,disabled:i.busy,onClick:n[2]||=e=>i.commands.run(`ide.network.password.clear`)},{default:e(()=>[...n[12]||=[G(`Убрать`,-1)]]),_:1},8,[`disabled`])):D(`v-if`,!0)]),_:1}),i.state.passwordRequired?(K(),F(i.UiHint,{key:2,class:`hint`},{default:e(()=>[...n[13]||=[G(`Пароль задан. Введите новый, чтобы заменить, или нажмите «Убрать».`,-1)]]),_:1})):(K(),F(i.UiHint,{key:3,class:`hint`},{default:e(()=>[...n[14]||=[G(`Без пароля любой в локальной сети сможет управлять Projector, включая терминалы.`,-1)]]),_:1}))],64)):(K(),F(i.UiMessage,{key:0,tone:`muted`,size:`sm`,class:`muted`},{default:e(()=>[...n[6]||=[G(`Загрузка…`,-1)]]),_:1})),i.error||i.status?(K(),F(i.UiMessage,{key:2,role:`status`,size:`xs`,class:`network-message`,tone:i.error?`danger`:void 0},{default:e(()=>[G(X(i.error||i.status),1)]),_:1},8,[`tone`])):D(`v-if`,!0)],32)}var Uae=H(zae,[[`render`,Hae],[`__scopeId`,`data-v-53efcbec`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/network/LanInfoPanel.vue`]]);async function Q6(e){let t=await fetch(`/api/openai`,{cache:`no-store`,signal:e}),n=await t.json();if(!t.ok)throw Error(n.error||`Не удалось загрузить настройки OpenAI API`);return n}async function Wae(e,t){let n=await fetch(`/api/openai`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e),signal:t}),r=await n.json();if(!n.ok)throw Error(r.error||`Не удалось сохранить настройки OpenAI API`);return r}function Gae(){let e=ee(null),t=M(``),n=M(``),r=M(!1),i=M(``),a=B(()=>e.value!==null),o=B(()=>e.value?.enabled??!1),s=B(()=>e.value?.hasKey??!1),c=B(()=>e.value?.origins??[]),l=B(()=>e.value?`${window.location.origin}${e.value.baseUrl}`:``),u=!1,d,p=Je(`openai-gateway:${V()}`,()=>({surface:`openaiGateway`,ready:a.value,busy:r.value,enabled:o.value,hasKey:s.value,origins:c.value.length})),m=e=>e.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean),h=e=>e.filter(e=>!e.startsWith(`@`)),_=()=>c.value.filter(e=>e.startsWith(`@`)),v=e=>c.value.includes(e),y=()=>n.value.trim()!==h(c.value).join(`
|
|
169
|
-
`),b=B(()=>y());async function x(a){if(u||r.value)throw Error(`Операция OpenAI API недоступна`);r.value=!0,i.value=``,d=new AbortController;try{let r=await a(d.signal);return u||(e.value=r,t.value=``,n.value=h(r.origins).join(`
|
|
170
|
-
`)),r}catch(e){throw u||(i.value=e instanceof Error?e.message:`Ошибка OpenAI API`),e}finally{d=void 0,u||(r.value=!1)}}p.scope.registerCommand({id:`ide.openai.gateway.refresh`,title:`Обновить настройки OpenAI-совместимого API`,description:`Перечитывает состояние API, которым другие приложения на машине пользуются провайдерами Projector.`,enabled:()=>!r.value,run:()=>x(Q6)}),p.scope.registerCommand({id:`ide.openai.gateway.set`,title:`Настроить OpenAI-совместимый API`,description:`Включает или выключает OpenAI-совместимый API Projector и задаёт ключ доступа (Bearer). Включённый API тратит квоту провайдеров; страницы других сайтов он принимает только из белого списка origins (по умолчанию пуст), без ключа — любому локальному процессу. Без аргументов сохраняет поле ключа экрана, а при пустом поле переключает состояние.`,arguments:{enabled:`true — включить, false — выключить; без аргумента состояние не меняется`,apiKey:`Новый ключ; пустая строка — убрать ключ; без аргумента ключ не меняется`,origins:`Массив origin страниц, которым разрешено вызывать API из браузера, например ["https://app.example.com"]; [] — очистить; без аргумента список не меняется`},enabled:()=>a.value&&!r.value,run:e=>{let r=J(e);if(r.enabled!==void 0&&typeof r.enabled!=`boolean`)throw Error(`enabled: boolean`);let i={};r.enabled!==void 0&&(i.enabled=r.enabled);let a=Object.keys(r).length===0&&t.value.trim()||void 0;Object.keys(r).length===0&&y()&&(i.origins=[..._(),...m(n.value)]);let s=Ie(r,`apiKey`)??a;if(s!==void 0&&(i.apiKey=s),r.origins!==void 0){if(!Array.isArray(r.origins)||r.origins.some(e=>typeof e!=`string`))throw Error(`origins: массив строк`);i.origins=r.origins}return Object.keys(i).length===0&&(i.enabled=!o.value),x(e=>Wae(i,e))}}),f(()=>{x(Q6).catch(()=>{})}),g(()=>{u=!0,d?.abort()});let S=()=>[..._(),...m(n.value)];function C(e,t){let n=c.value.filter(t=>t!==e);return p.run(`ide.openai.gateway.set`,{origins:t?[...n,e]:n})}return{enabled:o,hasKey:s,apiKey:t,originsDraft:n,originsDirty:b,draftOrigins:S,hasTemplate:v,toggleTemplate:C,url:l,busy:r,error:i,ready:a,commands:p}}var Kae=W({__name:`OpenAiGatewaySettings`,setup(e,{expose:t}){t();let{enabled:n,hasKey:r,apiKey:i,originsDraft:a,originsDirty:o,draftOrigins:s,hasTemplate:c,toggleTemplate:l,url:u,busy:d,error:f,ready:p,commands:m}=Gae(),h={enabled:n,hasKey:r,apiKey:i,originsDraft:a,originsDirty:o,draftOrigins:s,hasTemplate:c,toggleTemplate:l,url:u,busy:d,error:f,ready:p,commands:m,keyId:V(),originsId:V(),UiHeading:Ee,UiMessage:Te,UiChoiceGroup:Sl,UiChoiceRow:Cl,UiControl:Se,UiButton:q,UiInline:Be,UiLabel:xl,UiHint:we};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}});function qae(t,n,r,i,a,o){return K(),U(`section`,{class:`gateway-settings`,onFocusin:n[8]||=e=>i.commands.scope.activate(),onPointerdown:n[9]||=e=>i.commands.scope.activate()},[y(i.UiHeading,{as:`h2`,size:`sm`},{default:e(()=>[...n[10]||=[G(`OpenAI-совместимый API`,-1)]]),_:1}),y(i.UiChoiceGroup,{label:`Состояние`,disabled:!i.ready||i.busy},{default:e(()=>[y(i.UiChoiceRow,{title:`Разрешить другим приложениям`,description:`Приложения на этой машине смогут обращаться к провайдерам Projector как к обычному OpenAI API.`},{default:e(()=>[y(i.UiControl,{type:`checkbox`,"model-value":i.enabled,"onUpdate:modelValue":n[0]||=e=>i.commands.run(`ide.openai.gateway.set`,{enabled:e})},null,8,[`model-value`])]),_:1})]),_:1},8,[`disabled`]),i.enabled?(K(),U(P,{key:0},[y(i.UiHint,{class:`hint`},{default:e(()=>[n[11]||=G(` Базовый адрес: `,-1),I(`code`,null,X(i.url),1),n[12]||=G(`. Запросы тратят квоту провайдеров; страницы других сайтов он не принимает, если их origin не в списке ниже. `,-1)]),_:1}),y(i.UiLabel,{size:`sm`,tone:`secondary`,"space-before":4,"space-after":2,for:i.keyId},{default:e(()=>[...n[13]||=[G(`Ключ доступа (необязательно)`,-1)]]),_:1},8,[`for`]),y(i.UiControl,{id:i.keyId,modelValue:i.apiKey,"onUpdate:modelValue":n[1]||=e=>i.apiKey=e,type:`password`,autocomplete:`new-password`,placeholder:i.hasKey?`Ключ задан; введите новый, чтобы заменить`:`Без ключа`,disabled:!i.ready||i.busy},null,8,[`id`,`modelValue`,`placeholder`,`disabled`]),y(i.UiHint,{class:`hint`},{default:e(()=>[...n[14]||=[G(` Клиент передаёт его как `,-1),I(`code`,null,`Authorization: Bearer …`,-1),G(` (в поле API key). Без ключа API открыт любому локальному процессу. `,-1)]]),_:1}),y(i.UiChoiceGroup,{label:`Страницы в браузере`,disabled:!i.ready||i.busy},{default:e(()=>[y(i.UiChoiceRow,{title:`Любая страница этой машины`,description:`localhost, 127.0.0.1, ::1 на любом порту: локальные dev-серверы и приложения.`},{default:e(()=>[y(i.UiControl,{type:`checkbox`,"model-value":i.hasTemplate(`@localhost`),"onUpdate:modelValue":n[2]||=e=>i.toggleTemplate(`@localhost`,e)},null,8,[`model-value`])]),_:1}),y(i.UiChoiceRow,{title:`Любая страница локальной сети`,description:`Адреса 10.x, 172.16–31.x, 192.168.x, link-local и имена *.local.`},{default:e(()=>[y(i.UiControl,{type:`checkbox`,"model-value":i.hasTemplate(`@lan`),"onUpdate:modelValue":n[3]||=e=>i.toggleTemplate(`@lan`,e)},null,8,[`model-value`])]),_:1})]),_:1},8,[`disabled`]),y(i.UiLabel,{size:`sm`,tone:`secondary`,"space-before":4,"space-after":2,for:i.originsId},{default:e(()=>[...n[15]||=[G(`Другие разрешённые origin (по одному в строке)`,-1)]]),_:1},8,[`for`]),y(i.UiControl,{id:i.originsId,modelValue:i.originsDraft,"onUpdate:modelValue":n[4]||=e=>i.originsDraft=e,as:`textarea`,rows:`3`,spellcheck:`false`,placeholder:`https://app.example.com`,disabled:!i.ready||i.busy},null,8,[`id`,`modelValue`,`disabled`]),y(i.UiHint,{class:`hint`},{default:e(()=>[...n[16]||=[G(` Только сайты, которым вы доверяете: их страницы смогут тратить квоту провайдеров из вашего браузера. Пустой список — ни один сайт. `,-1)]]),_:1}),y(i.UiInline,{class:`actions`,align:`stretch`,wrap:``},{default:e(()=>[y(i.UiButton,{appearance:`solid`,disabled:!i.ready||i.busy||!i.apiKey.trim(),onClick:n[5]||=e=>i.commands.run(`ide.openai.gateway.set`)},{default:e(()=>[...n[17]||=[G(`Сохранить ключ`,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{disabled:!i.ready||i.busy||!i.originsDirty,onClick:n[6]||=e=>i.commands.run(`ide.openai.gateway.set`,{origins:i.draftOrigins()})},{default:e(()=>[...n[18]||=[G(`Сохранить origin`,-1)]]),_:1},8,[`disabled`]),i.hasKey?(K(),F(i.UiButton,{key:0,disabled:!i.ready||i.busy,onClick:n[7]||=e=>i.commands.run(`ide.openai.gateway.set`,{apiKey:``})},{default:e(()=>[...n[19]||=[G(`Убрать ключ`,-1)]]),_:1},8,[`disabled`])):D(`v-if`,!0)]),_:1})],64)):D(`v-if`,!0),i.error?(K(),F(i.UiMessage,{key:1,role:`status`,tone:`danger`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0)],32)}var Jae=H(Kae,[[`render`,qae],[`__scopeId`,`data-v-cd003495`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/network/OpenAiGatewaySettings.vue`]]),$6;function Yae(){return $6??=fetch(`/api/browser/session`,{cache:`no-store`}).then(async e=>{let t=await e.json();if(!e.ok||typeof t.key!=`string`)throw Error(t.error||`Прокси браузера недоступен`);return t.key}).catch(e=>{throw $6=void 0,e}),$6}var Xae={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zae(e,t){return K(),U(`svg`,Xae,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M5 12h14m-7-7l7 7l-7 7`},null,-1)]])}var e8=L({name:`lucide-arrow-right`,render:Zae}),Qae={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function $ae(e,t){return K(),U(`svg`,Qae,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`}),I(`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`}),I(`path`,{d:`M6 6h.01M6 18h.01`})],-1)]])}var eoe=L({name:`lucide-server`,render:$ae}),toe=W({__name:`BrowserPanel`,props:{projectId:{type:String,required:!0},url:{type:String,required:!1}},emits:[`navigate`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=M(r.url?[r.url]:[]),o=M(r.url?0:-1),s=B(()=>a.value[o.value]??``),c=M(s.value),l=M(``),u=M(`auto`),d=M(0),p=M(),m=M(``),{projects:h}=Mu(),g=B(()=>h.value.find(e=>e.id===r.projectId)?.runtime?.url??``),_=B(()=>u.value===`auto`?!q6(s.value):u.value===`on`),v=hae(location.hostname),y=B(()=>_.value&&v),b=M(``),x=M(``);f(()=>{v&&Yae().then(e=>b.value=e,e=>x.value=e.message)});let S=B(()=>s.value?y.value?b.value?_ae(s.value,gae(b.value,location.port))??s.value:`about:blank`:s.value:`about:blank`),C=B(()=>{let e=`allow-scripts allow-forms allow-popups allow-modals`;if(y.value)return`${e} allow-same-origin`;try{return new URL(s.value).origin===location.origin?e:`${e} allow-same-origin`}catch{return e}});function w(e,t=!1){m.value=``;let n;try{n=K6(e)}catch{m.value=`Некорректный адрес`;return}n&&(n===s.value?d.value++:(t&&o.value>=0?a.value[o.value]=n:(a.value=[...a.value.slice(0,o.value+1),n],o.value=a.value.length-1),c.value=n,l.value=``,i(`navigate`,n,``)))}function T(e){let t=o.value+e;t<0||t>=a.value.length||(o.value=t,c.value=s.value,l.value=``,i(`navigate`,s.value,``))}yf(window,`message`,e=>{if(e.source!==p.value?.contentWindow)return;let t=e.data;if(!t?.projectorBrowser||typeof t.url!=`string`)return;t.url!==s.value&&(a.value=[...a.value.slice(0,o.value+1),t.url],o.value=a.value.length-1,c.value=t.url);let n=typeof t.title==`string`?t.title.slice(0,200):``;n!==l.value&&(l.value=n,i(`navigate`,t.url,n))}),E(()=>r.url,e=>{e&&e!==s.value&&w(e)});function D(){s.value&&window.open(s.value,`_blank`,`noopener`)}Tn(()=>({note:`Браузер`,text:Nn(s.value?`Адрес: ${s.value}`:`Адрес не задан`,l.value&&`Заголовок: ${l.value}`,s.value&&`Режим: ${y.value?`через прокси Projector`:`напрямую`}`,x.value&&`Ошибка прокси: ${x.value}`,g.value&&`Dev-сервер проекта: ${g.value}`)}));let O={props:r,emit:i,history:a,index:o,current:s,address:c,title:l,proxy:u,loads:d,frame:p,problem:m,projects:h,devUrl:g,wantsProxy:_,proxyReady:v,viaProxy:y,proxyKey:b,proxyError:x,src:S,sandbox:C,go:w,step:T,openOutside:D,hostname:B(()=>{try{return new URL(s.value).host}catch{return``}}),UiControl:Se,UiPanel:sn,UiToolbar:Sg,UiButton:q,get isLocalBrowserTarget(){return q6},get IconBack(){return XA},get IconForward(){return e8},get IconRefresh(){return xO},get IconExternal(){return Fn},get IconServer(){return eoe}};return Object.defineProperty(O,"__isScriptSetup",{enumerable:!1,value:!0}),O}}),noe={key:0,class:`note error`,role:`alert`},roe={key:1,class:`note error`,role:`alert`},ioe={key:2,class:`note`},aoe={key:3,class:`note`},ooe={class:`stage`},soe=[`src`,`title`,`sandbox`],coe={key:1,class:`start`};function loe(t,n,r,i,a,o){return K(),F(i.UiPanel,{class:`browser`,"aria-label":`Браузер`},{default:e(()=>[y(i.UiToolbar,{as:`form`,class:`bar`,onSubmit:n[7]||=N(e=>i.go(i.address),[`prevent`])},{default:e(()=>[y(i.UiButton,{shape:`icon`,size:`sm`,type:`button`,"aria-label":`Назад`,title:`Назад`,disabled:i.index<=0,onClick:n[0]||=e=>i.step(-1)},{default:e(()=>[y(i.IconBack,{"aria-hidden":`true`})]),_:1},8,[`disabled`]),y(i.UiButton,{shape:`icon`,size:`sm`,type:`button`,"aria-label":`Вперёд`,title:`Вперёд`,disabled:i.index>=i.history.length-1,onClick:n[1]||=e=>i.step(1)},{default:e(()=>[y(i.IconForward,{"aria-hidden":`true`})]),_:1},8,[`disabled`]),y(i.UiButton,{shape:`icon`,size:`sm`,type:`button`,"aria-label":`Перезагрузить страницу`,title:`Перезагрузить страницу`,disabled:!i.current,onClick:n[2]||=e=>i.loads++},{default:e(()=>[y(i.IconRefresh,{"aria-hidden":`true`})]),_:1},8,[`disabled`]),y(i.UiControl,{modelValue:i.address,"onUpdate:modelValue":n[3]||=e=>i.address=e,class:`address`,type:`text`,spellcheck:`false`,autocomplete:`off`,"aria-label":`Адрес страницы`,placeholder:`Адрес, localhost:3000 или поисковый запрос`,onFocus:n[4]||=e=>e.target.select()},null,8,[`modelValue`]),i.devUrl?(K(),F(i.UiButton,{key:0,size:`sm`,type:`button`,title:`Открыть dev-сервер проекта`,onClick:n[5]||=e=>i.go(i.devUrl)},{default:e(()=>[y(i.IconServer,{"aria-hidden":`true`}),n[9]||=G(` Dev-сервер `,-1)]),_:1})):D(`v-if`,!0),y(i.UiControl,{as:`select`,modelValue:i.proxy,"onUpdate:modelValue":n[6]||=e=>i.proxy=e,"aria-label":`Режим загрузки`,title:`Как загружать страницу`},{default:e(()=>[...n[10]||=[I(`option`,{value:`auto`},`Авто`,-1),I(`option`,{value:`on`},`Через прокси`,-1),I(`option`,{value:`off`},`Напрямую`,-1)]]),_:1},8,[`modelValue`]),y(i.UiButton,{shape:`icon`,size:`sm`,type:`button`,"aria-label":`Открыть во внешнем браузере`,title:`Открыть во внешнем браузере`,disabled:!i.current,onClick:i.openOutside},{default:e(()=>[y(i.IconExternal,{"aria-hidden":`true`})]),_:1},8,[`disabled`])]),_:1}),i.problem?(K(),U(`p`,noe,X(i.problem),1)):i.proxyError?(K(),U(`p`,roe,X(i.proxyError),1)):i.current&&i.wantsProxy&&!i.proxyReady?(K(),U(`p`,ioe,` Прокси работает, только когда Projector открыт на этом компьютере (localhost). Страница загружается напрямую и откроется, если сайт разрешает встраивание. `)):i.current&&i.proxy===`off`&&!i.isLocalBrowserTarget(i.current)?(K(),U(`p`,aoe,` Напрямую страница откроется, только если сайт разрешает встраивание. Иначе выберите «Авто». `)):D(`v-if`,!0),I(`div`,ooe,[i.current?(K(),U(`iframe`,{key:`${i.loads}:${i.src}:${i.sandbox}`,ref:`frame`,class:`page`,src:i.src,title:i.title||i.hostname,sandbox:i.sandbox,referrerpolicy:`no-referrer`},null,8,soe)):(K(),U(`div`,coe,[n[11]||=I(`p`,null,`Введите адрес сайта или dev-сервера проекта.`,-1),i.devUrl?(K(),F(i.UiButton,{key:0,size:`sm`,onClick:n[8]||=e=>i.go(i.devUrl)},{default:e(()=>[y(i.IconServer,{"aria-hidden":`true`}),G(` `+X(i.devUrl),1)]),_:1})):D(`v-if`,!0)]))])]),_:1})}var uoe=H(toe,[[`render`,loe],[`__scopeId`,`data-v-70ad815b`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/browser/BrowserPanel.vue`]]),doe=W({__name:`ArchiveViewer`,props:{archive:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r=M(``),i=B(()=>{let e=r.value.trim().toLocaleLowerCase();return n.archive.entries.filter(t=>t.path.toLocaleLowerCase().includes(e))}),a=B(()=>n.archive.entries.reduce((e,t)=>e+t.size,0)),o={file:`Файл`,directory:`Папка`,symlink:`Символическая ссылка`,hardlink:`Жёсткая ссылка`,other:`Другая запись`};function s(e){if(!e)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?`—`:t.toLocaleString(`ru-RU`)}let c={props:n,query:r,entries:i,totalSize:a,types:o,date:s,UiScrollArea:Tp,UiTable:Op,UiControl:Se,UiStack:Ed,UiMessage:Te,UiEmpty:am,get sizeLabel(){return A2}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),foe={class:`archive-summary`},poe={class:`entry-path`},moe={key:0},hoe={class:`entry-size`};function goe(t,n,r,i,a,o){return K(),F(i.UiStack,{as:`section`,flow:`flex`,class:`archive-viewer`,"aria-label":`Содержимое архива`},{default:e(()=>[I(`div`,foe,[I(`strong`,null,X(r.archive.format),1),I(`span`,null,`Архив: `+X(i.sizeLabel(r.archive.size)),1),I(`span`,null,X(r.archive.entries.length)+X(r.archive.truncated?`+`:``)+` записей`,1),I(`span`,null,X(r.archive.truncated?`Размер показанных записей`:`Размер содержимого`)+`: `+X(i.sizeLabel(i.totalSize)),1)]),y(i.UiControl,{modelValue:i.query,"onUpdate:modelValue":n[0]||=e=>i.query=e,type:`search`,placeholder:`Фильтр по пути…`,"aria-label":`Фильтр содержимого архива`},null,8,[`modelValue`]),r.archive.truncated?(K(),F(i.UiMessage,{key:0,tone:`muted`,size:`xs`,flush:``,role:`status`},{default:e(()=>[...n[1]||=[G(` Показана часть содержимого: достигнут лимит 5000 записей или 256 МБ чтения. `,-1)]]),_:1})):D(`v-if`,!0),y(i.UiScrollArea,{class:`archive-list`},{default:e(()=>[i.entries.length?(K(),F(i.UiTable,{key:0,padding:`10px`,align:`top`,sticky:``},{default:e(()=>[n[2]||=I(`thead`,null,[I(`tr`,null,[I(`th`,{scope:`col`},`Путь`),I(`th`,{scope:`col`},`Тип`),I(`th`,{scope:`col`},`Размер`),I(`th`,{scope:`col`},`Изменён`)])],-1),I(`tbody`,null,[(K(!0),U(P,null,S(i.entries,(e,t)=>(K(),U(`tr`,{key:t},[I(`td`,poe,[I(`span`,null,X(e.path),1),e.link?(K(),U(`small`,moe,`→ `+X(e.link),1)):D(`v-if`,!0)]),I(`td`,null,X(i.types[e.type]),1),I(`td`,hoe,X(e.type===`file`?i.sizeLabel(e.size):`—`),1),I(`td`,null,X(i.date(e.modified)),1)]))),128))])]),_:1})):(K(),F(i.UiEmpty,{key:1,density:`compact`,align:`start`},{default:e(()=>[G(X(r.archive.entries.length?`Совпадений нет`:r.archive.truncated?`Записи недоступны в пределах лимита просмотра`:`Архив пуст`),1)]),_:1}))]),_:1})]),_:1})}var _oe=H(doe,[[`render`,goe],[`__scopeId`,`data-v-415ea633`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/ArchiveViewer.vue`]]),t8=100,n8=60,voe=W({__name:`CommitFileDiff`,props:{comparison:{type:Object,required:!0},path:{type:String,required:!0},height:{type:Number,required:!1}},emits:[`resize`,`collapse`],setup(e,{expose:t,emit:n}){t();let i=r(()=>Pn(()=>import(`./CodeViewer-BAgvP3Yx.js`),__vite__mapDeps([9,3,1,10,4,5,11,12,6,7,13,14,15]))),a=e,o=n,s=()=>Math.round(window.innerHeight*.85),c=()=>{let{original:e,modified:t}=a.comparison,n=Math.max(e.split(`
|
|
171
|
-
`).length,t.split(`
|
|
172
|
-
`).length);return Math.min(420,Math.max(110,n*20+76))},l=M(a.height??c()),u=0,d=B(()=>a.comparison.original===a.comparison.modified);function f(e){return e<n8?(o(`resize`,l.value),o(`collapse`),p.stop(),!1):(l.value=Math.min(s(),Math.max(t8,e)),o(`resize`,l.value),!0)}let p=AB({start:e=>(u=l.value,{height:l.value,y:e.clientY}),move:(e,t)=>f(t.height+e.clientY-t.y),finish:(e,t)=>{e===`cancel`&&(l.value=t.height,o(`resize`,t.height))}}),{dragging:m,start:h}=p;function g(e){[`ArrowUp`,`ArrowDown`,`Home`,`End`,`Escape`].includes(e.key)&&(e.preventDefault(),e.key===`Escape`?(m.value&&(l.value=u,o(`resize`,u)),p.stop()):e.key===`Home`?f(0):e.key===`End`?f(s()):f(l.value+(e.shiftKey?96:24)*(e.key===`ArrowDown`?1:-1)))}function _(){l.value=c(),o(`resize`,l.value)}let v={CodeViewer:i,props:a,emit:o,MIN:t8,COLLAPSE:n8,maxHeight:s,initial:c,current:l,get startHeight(){return u},set startHeight(e){u=e},unchanged:d,setHeight:f,drag:p,dragging:m,start:h,key:g,reset:_,UiResizeHandle:Wz,get shortHash(){return kn}};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}}),yoe={key:0,class:`note`},boe=[`id`];function xoe(e,t,n,r,i,a){return r.unchanged?(K(),U(`p`,yoe,`Содержимое не изменилось.`)):(K(),U(`div`,{key:1,class:Y([`file-diff`,{dragging:r.dragging}])},[I(`div`,{id:`diff-${n.path}`,class:`viewer`,style:Qe({height:`${r.current}px`})},[y(r.CodeViewer,{path:n.path,content:n.comparison.modified,original:n.comparison.original,"original-label":n.comparison.parent||`∅`,"modified-label":r.shortHash(n.comparison.hash)},null,8,[`path`,`content`,`original`,`original-label`,`modified-label`])],12,boe),y(r.UiResizeHandle,{class:`resize`,"aria-label":`Высота кода: ${n.path}`,"aria-valuenow":r.current,"aria-valuemin":r.MIN,"aria-valuemax":r.maxHeight(),"aria-valuetext":`${r.current} px`,"aria-controls":`diff-${n.path}`,title:`Высота кода · если сжать до минимума, файл сворачивается · двойной клик возвращает размер`,tabindex:`0`,onPointerdown:r.start,onDblclick:r.reset,onKeydown:r.key},null,8,[`aria-label`,`aria-valuenow`,`aria-valuemax`,`aria-valuetext`,`aria-controls`,`onPointerdown`])],2))}var Soe=H(voe,[[`render`,xoe],[`__scopeId`,`data-v-7d5b7a8f`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/CommitFileDiff.vue`]]),Coe=W({__name:`ChangedFileRow`,props:{file:{type:Object,required:!0},expanded:{type:Boolean,required:!0},diff:{type:Object,required:!1},height:{type:Number,required:!1},toggleCommand:{type:String,required:!1},openCommand:{type:String,required:!1},host:{type:String,required:!1}},emits:[`toggle`,`open`,`resize`],setup(e,{expose:t,emit:n}){t();let r=e,i={props:r,emit:n,note:B(()=>{let e=r.diff?.data;return e?e.tooLarge?`Файл слишком большой для diff. Откройте его на ${r.host??`хостинге`}.`:e.binary?`Бинарный файл: diff не показывается.`:``:``}),CommitFileDiff:Soe,get FileIcon(){return TU},UiButton:q,UiHint:we,get IconChevronRight(){return Ch},get IconOpen(){return Fn}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),woe={class:`file-row`},Toe=[`disabled`,`aria-expanded`,`title`,`data-command`],Eoe={class:`glyph`,"aria-hidden":`true`},Doe={class:`name`},Ooe={class:`dir u-truncate`},koe={key:0,class:`muted`},Aoe={key:1,class:`muted`},joe={key:2,class:`muted`},Moe={key:0,class:`bar`,"aria-hidden":`true`},Noe={class:`add`},Poe={class:`del`},Foe={key:0,class:`inline`};function Ioe(t,n,r,i,a,o){return K(),U(`li`,null,[I(`div`,woe,[I(`button`,{type:`button`,class:`file`,disabled:!r.file.expandable,"aria-expanded":r.file.expandable?r.expanded:void 0,title:r.file.disabledTitle,"data-command":r.toggleCommand,onClick:n[0]||=e=>i.emit(`toggle`)},[I(`span`,Eoe,[r.file.expandable?(K(),F(i.IconChevronRight,{key:0,class:Y({open:r.expanded})},null,8,[`class`])):D(`v-if`,!0)]),I(`b`,{class:Y([`status`,r.file.mark])},X(r.file.mark),3),y(i.FileIcon,{icon:r.file.icon},null,8,[`icon`]),I(`span`,Doe,X(r.file.name),1),I(`span`,Ooe,[r.file.previousPath?(K(),U(P,{key:0},[G(X(r.file.previousPath)+` → `,1)],64)):D(`v-if`,!0),G(X(r.file.directory),1)]),r.file.binary?(K(),U(`span`,koe,`бинарный`)):r.file.tooLarge?(K(),U(`span`,Aoe,`большой`)):r.file.generated?(K(),U(`span`,joe,`сгенерирован`)):(K(),U(P,{key:3},[r.file.additions+r.file.deletions?(K(),U(`span`,Moe,[I(`i`,{style:Qe({width:`${r.file.share*100}%`})},null,4)])):D(`v-if`,!0),I(`span`,Noe,`+`+X(r.file.additions),1),I(`span`,Poe,`−`+X(r.file.deletions),1)],64))],8,Toe),r.file.openable?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,title:`Открыть изменения во вкладке`,"aria-label":`Открыть изменения во вкладке: ${r.file.path}`,"data-command":r.openCommand,onClick:n[1]||=e=>i.emit(`open`)},{default:e(()=>[y(i.IconOpen,{"aria-hidden":`true`})]),_:1},8,[`aria-label`,`data-command`])):D(`v-if`,!0)]),r.expanded?(K(),U(`div`,Foe,[r.diff?.loading?(K(),F(i.UiHint,{key:0,size:`xs`,leading:`inherit`,class:`note`,role:`status`},{default:e(()=>[...n[4]||=[G(`загрузка…`,-1)]]),_:1})):r.diff?.error?(K(),F(i.UiHint,{key:1,size:`xs`,leading:`inherit`,class:`note error`,role:`alert`},{default:e(()=>[G(X(r.diff.error),1)]),_:1})):i.note?(K(),F(i.UiHint,{key:2,size:`xs`,leading:`inherit`,class:`note`},{default:e(()=>[G(X(i.note),1)]),_:1})):r.diff?.data?(K(),F(i.CommitFileDiff,{key:3,comparison:r.diff.data,path:r.file.path,height:r.height,onResize:n[2]||=e=>i.emit(`resize`,e),onCollapse:n[3]||=e=>i.emit(`toggle`,!1)},null,8,[`comparison`,`path`,`height`])):D(`v-if`,!0)])):D(`v-if`,!0)])}var r8=H(Coe,[[`render`,Ioe],[`__scopeId`,`data-v-2352c060`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/ChangedFileRow.vue`]]),Loe=W({__name:`CommitFiles`,props:{detail:{type:Object,required:!0},expanded:{type:Set,required:!0},heights:{type:Object,required:!0},diffs:{type:Object,required:!0}},emits:[`toggle`,`toggleAll`,`openDiff`,`resize`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{resolver:a}=CQ(),o={props:r,emit:i,resolver:a,textFiles:B(()=>r.detail.files.filter(e=>!e.binary)),files:B(()=>r.detail.files.map(e=>{let t=e.path.split(`/`).at(-1);return{path:e.path,name:t,directory:e.path.split(`/`).slice(0,-1).join(`/`),icon:a.value.resolve({name:t,path:e.path,directory:!1},!1),previousPath:e.originalPath,mark:e.status,additions:e.additions,deletions:e.deletions,binary:e.binary,expandable:!e.binary,openable:!e.binary,disabledTitle:e.binary?`Бинарный файл`:`Показать код`,share:e.additions+e.deletions?e.additions/(e.additions+e.deletions):0}})),UiHint:we,UiButton:q,ChangedFileRow:r8};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),Roe={class:`add`},zoe={class:`del`},Boe={key:2,class:`files`};function Voe(t,n,r,i,a,o){return K(),U(`div`,null,[I(`h3`,null,[n[1]||=G(` Файлы `,-1),I(`span`,null,X(i.files.length),1),I(`b`,Roe,`+`+X(r.detail.additions),1),I(`b`,zoe,`−`+X(r.detail.deletions),1),i.textFiles.length?(K(),F(i.UiButton,{key:0,size:`sm`,class:`all`,"data-command":`ide.git.commit.files.toggleAll`,onClick:n[0]||=e=>i.emit(`toggleAll`)},{default:e(()=>[G(X(r.expanded.size?`Свернуть всё`:`Развернуть всё`),1)]),_:1})):D(`v-if`,!0)]),r.detail.parents.length>1?(K(),F(i.UiHint,{key:0,size:`xs`,leading:`inherit`,"space-after":2,class:`note`},{default:e(()=>[...n[2]||=[G(` Слияние: показаны изменения относительно первого родителя. `,-1)]]),_:1})):D(`v-if`,!0),i.files.length?(K(),U(`ul`,Boe,[(K(!0),U(P,null,S(i.files,e=>(K(),F(i.ChangedFileRow,{key:e.path,file:e,expanded:r.expanded.has(e.path),diff:r.diffs[e.path],height:r.heights[e.path],"toggle-command":`ide.git.commit.file.toggle`,"open-command":`ide.git.commit.openDiff`,onToggle:t=>i.emit(`toggle`,e.path,t),onOpen:t=>i.emit(`openDiff`,e.path),onResize:t=>i.emit(`resize`,e.path,t)},null,8,[`file`,`expanded`,`diff`,`height`,`onToggle`,`onOpen`,`onResize`]))),128))])):(K(),F(i.UiHint,{key:1,size:`xs`,leading:`inherit`,"space-after":2,class:`note`},{default:e(()=>[...n[3]||=[G(`В этой папке коммит ничего не менял.`,-1)]]),_:1}))])}var Hoe=H(Loe,[[`render`,Voe],[`__scopeId`,`data-v-8179c7f1`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/CommitFiles.vue`]]),Uoe=W({__name:`CommitMeta`,props:{detail:{type:Object,required:!0}},emits:[`openCommit`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=B(()=>r.detail.committer===r.detail.author);async function o(e){await yn(e.currentTarget,r.detail.hash,`Хеш скопирован`)}let s={props:r,emit:i,sameCommitter:a,copy:o,UiHeading:Ee,UiButton:q,get absoluteTime(){return En},get relativeTime(){return wn},get shortHash(){return kn},get IconCopy(){return Oy}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),Woe={key:0,class:`refs`},Goe={key:1,class:`body`},Koe={class:`muted`},qoe={class:`muted`},Joe={class:`muted`},Yoe={key:0,class:`muted`},Xoe=[`onClick`];function Zoe(t,n,r,i,a,o){return K(),U(`div`,null,[y(i.UiHeading,{size:`lg`,weight:`semibold`,"space-after":2,class:`subject`},{default:e(()=>[G(X(r.detail.subject||`(без описания)`),1)]),_:1}),r.detail.refs.length?(K(),U(`p`,Woe,[(K(!0),U(P,null,S(r.detail.refs,e=>(K(),U(`span`,{key:e.kind+e.name,class:Y([`ref`,e.kind])},X(e.name),3))),128))])):D(`v-if`,!0),r.detail.body?(K(),U(`pre`,Goe,X(r.detail.body),1)):D(`v-if`,!0),I(`dl`,null,[n[1]||=I(`dt`,null,`Хеш`,-1),I(`dd`,null,[I(`code`,null,X(r.detail.hash),1),y(i.UiButton,{shape:`icon`,size:`sm`,title:`Копировать хеш`,"aria-label":`Копировать хеш`,"data-command":`ide.git.commit.copyHash`,onClick:i.copy},{default:e(()=>[y(i.IconCopy,{"aria-hidden":`true`})]),_:1})]),n[2]||=I(`dt`,null,`Автор`,-1),I(`dd`,null,[G(X(r.detail.author)+` `,1),I(`span`,Koe,`<`+X(r.detail.email)+`>`,1)]),n[3]||=I(`dt`,null,`Дата`,-1),I(`dd`,null,[G(X(i.absoluteTime(r.detail.date))+` `,1),I(`span`,qoe,`· `+X(i.relativeTime(r.detail.date)),1)]),i.sameCommitter?D(`v-if`,!0):(K(),U(P,{key:0},[n[0]||=I(`dt`,null,`Коммит`,-1),I(`dd`,null,[G(X(r.detail.committer)+` `,1),I(`span`,Joe,`· `+X(i.absoluteTime(r.detail.committerDate)),1)])],64)),I(`dt`,null,X(r.detail.parents.length>1?`Родители`:`Родитель`),1),I(`dd`,null,[r.detail.parents.length?D(`v-if`,!0):(K(),U(`span`,Yoe,`корневой коммит`)),(K(!0),U(P,null,S(r.detail.parents,e=>(K(),U(`button`,{key:e,class:`link`,"data-command":`ide.git.commit.open`,onClick:t=>i.emit(`openCommit`,e)},X(i.shortHash(e)),9,Xoe))),128))])])])}var Qoe=H(Uoe,[[`render`,Zoe],[`__scopeId`,`data-v-bc6f06f2`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/CommitMeta.vue`]]);function i8(e){let t=M(new Set),n=M({}),r=M({}),i=0;async function a(t){if(r.value[t])return;let n=i;r.value[t]={loading:!0,error:``};try{let a=await tt(e.projectId(),e.action,{...e.params(),path:t});n===i&&(r.value[t]={loading:!1,error:``,data:a})}catch(a){n===i&&(r.value[t]={loading:!1,error:a instanceof Error?a.message:e.errorFallback})}}async function o(e,n){n??!t.value.has(e)?(t.value.add(e),await a(e)):t.value.delete(e)}function s(){i++,t.value.clear(),n.value={},r.value={}}return e.resetOn&&E(e.resetOn,s),{expanded:t,heights:n,diffs:r,toggle:o,reset:s}}function $oe(e,t){return i8({projectId:e,action:`commit-diff`,params:()=>({hash:t()}),errorFallback:`Ошибка Git`})}var ese=W({__name:`CommitOverview`,props:{projectId:{type:String,required:!0},hash:{type:String,required:!0},onOpenTree:{type:Function,required:!1},onOpenCompare:{type:Function,required:!1}},emits:[`openCommit`,`openDiff`,`subject`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=M(),o=B(()=>ht(r.projectId).snapshots),s=B(()=>ht(r.projectId).compare&&!!a.value?.parents[0]),c=M(``),l=M(!1),u=0,{expanded:d,heights:f,diffs:p,toggle:m,reset:h}=$oe(()=>r.projectId,()=>r.hash),g=Je(`commit:${r.projectId}:${r.hash}`,()=>({surface:`commit`,projectId:r.projectId,hash:r.hash})),_=B(()=>(a.value?.files??[]).filter(e=>!e.binary));g.scope.registerCommand({id:`ide.git.commit.openChanges`,title:`Изменения коммита`,description:`Показывает изменённые файлы коммита относительно первого родителя в боковой панели; строки открывают diff.`,enabled:()=>s.value,run:()=>{let e=a.value?.parents[0];e&&r.onOpenCompare?.(e,r.hash)}}),g.scope.registerCommand({id:`ide.git.commit.openTree`,title:`Файлы коммита`,description:`Показывает дерево файлов на момент коммита в боковой панели рядом с Git; дерево доступно только для чтения.`,enabled:()=>o.value,run:()=>r.onOpenTree?.(r.hash)}),Tn(()=>{if(c.value)return{note:`Обзор коммита ${r.hash.slice(0,7)}`,text:`Ошибка Git: ${c.value}`};let e=a.value;if(!e)return{note:`Обзор коммита ${r.hash.slice(0,7)}`,text:`Загрузка коммита…`};let t=e.files.map(e=>`${e.status}\t+${e.additions} -${e.deletions}\t${e.path}`);return{note:`Обзор коммита ${e.hash.slice(0,7)}`,text:Nn(`Коммит ${e.hash}`,e.subject,e.body,`Автор: ${e.author} <${e.email}>, ${e.date}`,e.refs.length?`Refs: ${e.refs.map(e=>e.name).join(`, `)}`:``,e.parents.length?`Родители: ${e.parents.join(`, `)}`:``,`Итого: +${e.additions} -${e.deletions}, файлов: ${e.files.length}`,t.length?`Файлы:\n${t.join(`
|
|
173
|
-
`)}`:`Файлы: нет`,d.value.size?`Раскрыты: ${[...d.value].join(`, `)}`:``)}}),g.scope.registerCommand({id:`ide.git.commit.file.toggle`,title:`Показать или скрыть код файла коммита`,description:`Раскрывает изменения файла прямо в обзоре коммита.`,arguments:{path:`Путь файла относительно папки проекта`,open:`true/false — задать явно`},run:async e=>{let t=J(e);if(typeof t.path!=`string`||!_.value.some(e=>e.path===t.path))throw Error(`Укажите путь текстового файла этого коммита`);if(t.open!==void 0&&typeof t.open!=`boolean`)throw Error(`open должен быть boolean`);await m(t.path,t.open)}}),g.scope.registerCommand({id:`ide.git.commit.files.toggleAll`,title:`Раскрыть или свернуть все файлы коммита`,description:`Раскрывает код всех текстовых файлов коммита или сворачивает их.`,arguments:{open:`true — раскрыть всё, false — свернуть; по умолчанию переключает`},run:async e=>{let t=J(e);if(!(typeof t.open==`boolean`?t.open:d.value.size===0))return d.value.clear();await Promise.all(_.value.map(e=>m(e.path,!0)))}});async function v(){let e=++u;l.value=!0,c.value=``,a.value=void 0,h();try{let t=await tt(r.projectId,`commit`,{hash:r.hash});if(e!==u)return;a.value=t,i(`subject`,t.subject)}catch(t){e===u&&(c.value=t instanceof Error?t.message:`Ошибка Git`)}finally{e===u&&(l.value=!1)}}E(()=>[r.projectId,r.hash],v,{immediate:!0});let y={props:r,emit:i,detail:a,canOpenTree:o,canCompare:s,error:c,loading:l,get generation(){return u},set generation(e){u=e},expanded:d,heights:f,diffs:p,toggleFile:m,reset:h,commands:g,textFiles:_,load:v,UiArticle:An,UiHint:we,UiViewerPage:Mn,CommitFiles:Hoe,CommitMeta:Qoe,UiButton:q};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}}),tse={key:0,class:`commit-actions`};function nse(t,n,r,i,a,o){return K(),F(i.UiViewerPage,null,{default:e(()=>[i.loading?(K(),F(i.UiHint,{key:0,size:`xs`,leading:`inherit`,"space-after":2,class:`note`,role:`status`},{default:e(()=>[...n[7]||=[G(`загрузка коммита…`,-1)]]),_:1})):i.error?(K(),F(i.UiHint,{key:1,size:`xs`,leading:`inherit`,"space-after":2,class:`note error`,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):i.detail?(K(),F(i.UiArticle,{key:2},{default:e(()=>[y(i.CommitMeta,{detail:i.detail,onOpenCommit:n[0]||=e=>i.emit(`openCommit`,e)},null,8,[`detail`]),i.canOpenTree||i.canCompare?(K(),U(`div`,tse,[i.canCompare?(K(),F(i.UiButton,{key:0,size:`sm`,"data-command":`ide.git.commit.openChanges`,onClick:n[1]||=e=>i.commands.run(`ide.git.commit.openChanges`)},{default:e(()=>[...n[8]||=[G(` Изменения коммита `,-1)]]),_:1})):D(`v-if`,!0),i.canOpenTree?(K(),F(i.UiButton,{key:1,size:`sm`,"data-command":`ide.git.commit.openTree`,onClick:n[2]||=e=>i.commands.run(`ide.git.commit.openTree`)},{default:e(()=>[...n[9]||=[G(` Файлы коммита `,-1)]]),_:1})):D(`v-if`,!0)])):D(`v-if`,!0),y(i.CommitFiles,{detail:i.detail,expanded:i.expanded,heights:i.heights,diffs:i.diffs,onToggle:n[3]||=(e,t)=>i.commands.run(`ide.git.commit.file.toggle`,{path:e,open:t}),onToggleAll:n[4]||=e=>i.commands.run(`ide.git.commit.files.toggleAll`),onOpenDiff:n[5]||=e=>i.emit(`openDiff`,i.detail.hash,e),onResize:n[6]||=(e,t)=>i.heights[e]=t},null,8,[`detail`,`expanded`,`heights`,`diffs`])]),_:1})):D(`v-if`,!0)]),_:1})}var rse=H(ese,[[`render`,nse],[`__scopeId`,`data-v-78ae1582`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/CommitOverview.vue`]]),a8={active:!1,line:1,column:1,selectedChars:0,selectedLines:0};function o8(){let e=de({...a8}),t=0,n=0;return{status:e,acquire:()=>++t,release(t){n===t&&(n=0,Object.assign(e,a8))},activate(t,r){n=t,Object.assign(e,r,{active:!0})},update(t,r){n===t&&Object.assign(e,r,{active:!0})}}}var s8=Symbol(`editor-status`);function ise(){let e=o8();return n(s8,e),e}var ase;function c8(){return z(s8,null)??(ase??=o8())}function ose(e){let t=e.indexOf(`
|
|
174
|
-
`);return t>0&&e[t-1]===`\r`?`CRLF`:`LF`}var l8=class e{constructor(e,t,n,r){this.fromA=e,this.toA=t,this.fromB=n,this.toB=r}offset(t,n=t){return new e(this.fromA+t,this.toA+t,this.fromB+n,this.toB+n)}};function u8(e,t,n,r,i,a){if(e==r)return[];let o=v8(e,t,n,r,i,a),s=y8(e,t+o,n,r,i+o,a);t+=o,n-=s,i+=o,a-=s;let c=n-t,l=a-i;if(!c||!l)return[new l8(t,n,i,a)];if(c>l){let o=e.slice(t,n).indexOf(r.slice(i,a));if(o>-1)return[new l8(t,t+o,i,i),new l8(t+o+l,n,a,a)]}else if(l>c){let o=r.slice(i,a).indexOf(e.slice(t,n));if(o>-1)return[new l8(t,t,i,i+o),new l8(n,n,i+o+c,a)]}if(c==1||l==1)return[new l8(t,n,i,a)];let u=x8(e,t,n,r,i,a);if(u){let[o,s,c]=u;return u8(e,t,o,r,i,s).concat(u8(e,o+c,n,r,s+c,a))}return sse(e,t,n,r,i,a)}var d8=1e9,f8=0,p8=!1;function sse(e,t,n,r,i,a){let o=n-t,s=a-i;if(d8<1e9&&Math.min(o,s)>d8*16||f8>0&&Date.now()>f8)return Math.min(o,s)>d8*64?[new l8(t,n,i,a)]:S8(e,t,n,r,i,a);let c=Math.ceil((o+s)/2);h8.reset(c),g8.reset(c);let l=(n,a)=>e.charCodeAt(t+n)==r.charCodeAt(i+a),u=(t,i)=>e.charCodeAt(n-t-1)==r.charCodeAt(a-i-1),d=(o-s)%2==0?null:g8,f=d?null:h8;for(let p=0;p<c;p++){if(p>d8||f8>0&&!(p&63)&&Date.now()>f8)return S8(e,t,n,r,i,a);let m=h8.advance(p,o,s,c,d,!1,l)||g8.advance(p,o,s,c,f,!0,u);if(m)return cse(e,t,n,t+m[0],r,i,a,i+m[1])}return[new l8(t,n,i,a)]}var m8=class{constructor(){this.vec=[]}reset(e){this.len=e<<1;for(let e=0;e<this.len;e++)this.vec[e]=-1;this.vec[e+1]=0,this.start=this.end=0}advance(e,t,n,r,i,a,o){for(let s=-e+this.start;s<=e-this.end;s+=2){let c=r+s,l=s==-e||s!=e&&this.vec[c-1]<this.vec[c+1]?this.vec[c+1]:this.vec[c-1]+1,u=l-s;for(;l<t&&u<n&&o(l,u);)l++,u++;if(this.vec[c]=l,l>t)this.end+=2;else if(u>n)this.start+=2;else if(i){let e=r+(t-n)-s;if(e>=0&&e<this.len&&i.vec[e]!=-1){if(a){let n=i.vec[e];if(n>=t-l)return[n,r+n-e]}else{let n=t-i.vec[e];if(l>=n)return[l,u]}}}}return null}},h8=new m8,g8=new m8;function cse(e,t,n,r,i,a,o,s){let c=!1;return!F8(e,r)&&++r==n&&(c=!0),!F8(i,s)&&++s==o&&(c=!0),c?[new l8(t,n,a,o)]:u8(e,t,r,i,a,s).concat(u8(e,r,n,i,s,o))}function _8(e,t){let n=1,r=Math.min(e,t);for(;n<r;)n<<=1;return n}function v8(e,t,n,r,i,a){if(t==n||t==a||e.charCodeAt(t)!=r.charCodeAt(i))return 0;let o=_8(n-t,a-i);for(let s=t,c=i;;){let i=s+o,l=c+o;if(i>n||l>a||e.slice(s,i)!=r.slice(c,l)){if(o==1)return s-t-+!F8(e,s);o>>=1}else if(i==n||l==a)return i-t;else s=i,c=l}}function y8(e,t,n,r,i,a){if(t==n||i==a||e.charCodeAt(n-1)!=r.charCodeAt(a-1))return 0;let o=_8(n-t,a-i);for(let s=n,c=a;;){let a=s-o,l=c-o;if(a<t||l<i||e.slice(a,s)!=r.slice(l,c)){if(o==1)return n-s-+!F8(e,s);o>>=1}else if(a==t||l==i)return n-a;else s=a,c=l}}function b8(e,t,n,r,i,a,o,s){let c=r.slice(i,a),l=null;for(;;){if(l||o<s)return l;for(let s=t+o;;){F8(e,s)||s++;let u=s+o;if(F8(e,u)||(u+=u==s+1?1:-1),u>=n)break;let d=e.slice(s,u),f=-1;for(;(f=c.indexOf(d,f+1))!=-1;){let o=v8(e,u,n,r,i+f+d.length,a),c=y8(e,t,s,r,i,i+f),p=d.length+o+c;(!l||l[2]<p)&&(l=[s-c,i+f-c,p])}s=u}if(s<0)return l;o>>=1}}function x8(e,t,n,r,i,a){let o=n-t,s=a-i;if(o<s){let o=x8(r,i,a,e,t,n);return o&&[o[1],o[0],o[2]]}return o<4||s*2<o?null:b8(e,t,n,r,i,a,Math.floor(o/4),-1)}function S8(e,t,n,r,i,a){p8=!0;let o=n-t,s=a-i,c;if(o<s){let s=b8(r,i,a,e,t,n,Math.floor(o/6),50);c=s&&[s[1],s[0],s[2]]}else c=b8(e,t,n,r,i,a,Math.floor(s/6),50);if(!c)return[new l8(t,n,i,a)];let[l,u,d]=c;return u8(e,t,l,r,i,u).concat(u8(e,l+d,n,r,u+d,a))}function C8(e,t){for(let n=1;n<e.length;n++){let r=e[n-1],i=e[n];r.toA>i.fromA-t&&r.toB>i.fromB-t&&(e[n-1]=new l8(r.fromA,i.toA,r.fromB,i.toB),e.splice(n--,1))}}function lse(e,t,n){for(;;){C8(n,1);let r=!1;for(let i=0;i<n.length;i++){let a=n[i],o,s;(o=v8(e,a.fromA,a.toA,t,a.fromB,a.toB))&&(a=n[i]=new l8(a.fromA+o,a.toA,a.fromB+o,a.toB)),(s=y8(e,a.fromA,a.toA,t,a.fromB,a.toB))&&(a=n[i]=new l8(a.fromA,a.toA-s,a.fromB,a.toB-s));let c=a.toA-a.fromA,l=a.toB-a.fromB;if(c&&l)continue;let u=a.fromA-(i?n[i-1].toA:0),d=(i<n.length-1?n[i+1].fromA:e.length)-a.toA;if(!u||!d)continue;let f=c?e.slice(a.fromA,a.toA):t.slice(a.fromB,a.toB);u<=f.length&&e.slice(a.fromA-u,a.fromA)==f.slice(f.length-u)?(n[i]=new l8(a.fromA-u,a.toA-u,a.fromB-u,a.toB-u),r=!0):d<=f.length&&e.slice(a.toA,a.toA+d)==f.slice(0,d)&&(n[i]=new l8(a.fromA+d,a.toA+d,a.fromB+d,a.toB+d),r=!0)}if(!r)break}return n}function use(e,t,n){for(let r=0,i=0;i<e.length;i++){let a=e[i],o=a.toA-a.fromA,s=a.toB-a.fromB;if(o&&s||o>3||s>3){let c=i==e.length-1?t.length:e[i+1].fromA,l=a.fromA-r,u=c-a.toA,d=A8(t,a.fromA,l),f=k8(t,a.toA,u),p=a.fromA-d,m=f-a.toA;if((!o||!s)&&p&&m){let l=Math.max(o,s),[u,h,g]=o?[t,a.fromA,a.toA]:[n,a.fromB,a.toB];l>p&&t.slice(d,a.fromA)==u.slice(g-p,g)?(a=e[i]=new l8(d,d+o,a.fromB-p,a.toB-p),d=a.fromA,f=k8(t,a.toA,c-a.toA)):l>m&&t.slice(a.toA,f)==u.slice(h,h+m)&&(a=e[i]=new l8(f-o,f,a.fromB+m,a.toB+m),f=a.toA,d=A8(t,a.fromA,a.fromA-r)),p=a.fromA-d,m=f-a.toA}if(p||m)a=e[i]=new l8(a.fromA-p,a.toA+m,a.fromB-p,a.toB+m);else if(!o){let t=M8(n,a.fromB,a.toB),r,o=t<0?-1:j8(n,a.toB,a.fromB);t>-1&&(r=t-a.fromB)<=u&&n.slice(a.fromB,t)==n.slice(a.toB,a.toB+r)?a=e[i]=a.offset(r):o>-1&&(r=a.toB-o)<=l&&n.slice(a.fromB-r,a.fromB)==n.slice(o,a.toB)&&(a=e[i]=a.offset(-r))}else if(!s){let n=M8(t,a.fromA,a.toA),r,o=n<0?-1:j8(t,a.toA,a.fromA);n>-1&&(r=n-a.fromA)<=u&&t.slice(a.fromA,n)==t.slice(a.toA,a.toA+r)?a=e[i]=a.offset(r):o>-1&&(r=a.toA-o)<=l&&t.slice(a.fromA-r,a.fromA)==t.slice(o,a.toA)&&(a=e[i]=a.offset(-r))}}r=a.toA}return C8(e,3),e}var w8;try{w8=RegExp(`[\\p{Alphabetic}\\p{Number}]`,`u`)}catch{}function T8(e){return e>48&&e<58||e>64&&e<91||e>96&&e<123}function E8(e,t){if(t==e.length)return 0;let n=e.charCodeAt(t);return n<192?+!!T8(n):w8?!N8(n)||t==e.length-1?+!!w8.test(String.fromCharCode(n)):w8.test(e.slice(t,t+2))?2:0:0}function D8(e,t){if(!t)return 0;let n=e.charCodeAt(t-1);return n<192?+!!T8(n):w8?!P8(n)||t==1?+!!w8.test(String.fromCharCode(n)):w8.test(e.slice(t-2,t))?2:0:0}var O8=8;function k8(e,t,n){if(t==e.length||!D8(e,t))return t;for(let r=t,i=t+n,a=0;a<O8;a++){let t=E8(e,r);if(!t||r+t>i)return r;r+=t}return t}function A8(e,t,n){if(!t||!E8(e,t))return t;for(let r=t,i=t-n,a=0;a<O8;a++){let t=D8(e,r);if(!t||r-t<i)return r;r-=t}return t}function j8(e,t,n){for(;t!=n;t--)if(e.charCodeAt(t-1)==10)return t;return-1}function M8(e,t,n){for(;t!=n;t++)if(e.charCodeAt(t)==10)return t;return-1}var N8=e=>e>=55296&&e<=56319,P8=e=>e>=56320&&e<=57343;function F8(e,t){return!t||t==e.length||!N8(e.charCodeAt(t-1))||!P8(e.charCodeAt(t))}function dse(e,t,n){let r=n?.override;return r?r(e,t):(d8=(n?.scanLimit??1e9)>>1,f8=n?.timeout?Date.now()+n.timeout:0,p8=!1,lse(e,t,u8(e,0,e.length,t,0,t.length)))}function I8(){return!p8}function L8(e,t,n){return use(dse(e,t,n),e,t)}var R8=tr.define({combine:e=>e[0]}),z8=Hn.define(),B8=tr.define(),V8=Yn.define({create(e){return null},update(e,t){for(let n of t.effects)n.is(z8)&&(e=n.value);for(let n of t.state.facet(B8))e=n(e,t);return e}}),H8=class e{constructor(e,t,n,r,i,a=!0){this.changes=e,this.fromA=t,this.toA=n,this.fromB=r,this.toB=i,this.precise=a}offset(t,n){return t||n?new e(this.changes,this.fromA+t,this.toA+t,this.fromB+n,this.toB+n,this.precise):this}get endA(){return Math.max(this.fromA,this.toA-1)}get endB(){return Math.max(this.fromB,this.toB-1)}static build(e,t,n){return G8(L8(e.toString(),t.toString(),n),e,t,0,0,I8())}static updateA(e,t,n,r,i){return Y8(J8(e,r,!0,n.length),e,t,n,i)}static updateB(e,t,n,r,i){return Y8(J8(e,r,!1,t.length),e,t,n,i)}};function U8(e,t,n,r){let i=n.lineAt(e),a=r.lineAt(t);return i.to==e&&a.to==t&&e<n.length&&t<r.length?[e+1,t+1]:[i.from,a.from]}function W8(e,t,n,r){let i=n.lineAt(e),a=r.lineAt(t);return i.from==e&&a.from==t?[e,t]:[i.to+1,a.to+1]}function G8(e,t,n,r,i,a){let o=[];for(let s=0;s<e.length;s++){let c=e[s],[l,u]=U8(c.fromA+r,c.fromB+i,t,n),[d,f]=W8(c.toA+r,c.toB+i,t,n),p=[c.offset(-l+r,-u+i)];for(;s<e.length-1;){let a=e[s+1],[o,c]=U8(a.fromA+r,a.fromB+i,t,n);if(o>d+1&&c>f+1)break;p.push(a.offset(-l+r,-u+i)),[d,f]=W8(a.toA+r,a.toB+i,t,n),s++}o.push(new H8(p,l,Math.max(l,d),u,Math.max(u,f),a))}return o}var K8=1e3;function q8(e,t,n,r){let i=0,a=e.length;for(;;){if(i==a){let r=0,a=0;i&&({toA:r,toB:a}=e[i-1]);let o=t-(n?r:a);return[r+o,a+o]}let o=i+a>>1,s=e[o],[c,l]=n?[s.fromA,s.toA]:[s.fromB,s.toB];if(c>t)a=o;else if(l<=t)i=o+1;else return r?[s.fromA,s.fromB]:[s.toA,s.toB]}}function J8(e,t,n,r){let i=[];return t.iterChangedRanges((a,o,s,c)=>{let l=0,u=n?t.length:r,d=0,f=n?r:t.length;a>K8&&([l,d]=q8(e,a-K8,n,!0)),o<t.length-K8&&([u,f]=q8(e,o+K8,n,!1));let p=c-s-(o-a),m,[h,g]=n?[p,0]:[0,p];i.length&&(m=i[i.length-1]).toA>=l?i[i.length-1]={fromA:m.fromA,fromB:m.fromB,toA:u,toB:f,diffA:m.diffA+h,diffB:m.diffB+g}:i.push({fromA:l,toA:u,fromB:d,toB:f,diffA:h,diffB:g})}),i}function Y8(e,t,n,r,i){if(!e.length)return t;let a=[];for(let o=0,s=0,c=0,l=0;;o++){let u=o==e.length?null:e[o],d=u?u.fromA+s:n.length,f=u?u.fromB+c:r.length;for(;l<t.length;){let e=t[l];if(u&&(e.toA+s>d||e.toB+c>f))break;a.push(e.offset(s,c)),l++}if(!u)break;let p=u.toA+s+u.diffA,m=u.toB+c+u.diffB,h=L8(n.sliceString(d,p),r.sliceString(f,m),i);for(let e of G8(h,n,r,d,f,I8()))a.push(e);for(s+=u.diffA,c+=u.diffB;l<t.length;){let e=t[l];if(e.fromA+s>p&&e.fromB+c>m)break;l++}}return a}var X8={scanLimit:500},Z8=Qn.fromClass(class{constructor(e){({deco:this.deco,gutter:this.gutter}=n5(e))}update(e){(e.docChanged||e.viewportChanged||fse(e.startState,e.state)||pse(e.startState,e.state))&&({deco:this.deco,gutter:this.gutter}=n5(e.view))}},{decorations:e=>e.deco}),Q8=Wn.low(ir({class:`cm-changeGutter`,markers:e=>e.plugin(Z8)?.gutter||qn.empty}));function fse(e,t){return e.field(V8,!1)!=t.field(V8,!1)}function pse(e,t){return e.facet(R8)!=t.facet(R8)}var $8=ar.line({class:`cm-changedLine`}),e5=ar.mark({class:`cm-changedText`}),mse=ar.mark({tagName:`ins`,class:`cm-insertedLine`}),hse=ar.mark({tagName:`del`,class:`cm-deletedLine`}),t5=new class extends Xn{constructor(){super(...arguments),this.elementClass=`cm-changedLineGutter`}};function gse(e,t,n,r,i,a){let o=n?e.fromA:e.fromB,s=n?e.toA:e.toB,c=0;if(o!=s){i.add(o,o,$8),i.add(o,s,n?hse:mse),a&&a.add(o,o,t5);for(let l=t.iterRange(o,s-1),u=o;!l.next().done;){if(l.lineBreak){u++,i.add(u,u,$8),a&&a.add(u,u,t5);continue}let t=u+l.value.length;if(r)for(;c<e.changes.length;){let r=e.changes[c],a=o+(n?r.fromA:r.fromB),s=o+(n?r.toA:r.toB),l=Math.max(u,a),d=Math.min(t,s);if(l<d&&i.add(l,d,e5),s<t)c++;else break}u=t}}}function n5(e){let t=e.state.field(V8),{side:n,highlightChanges:r,markGutter:i,overrideChunk:a}=e.state.facet(R8),o=n==`a`,s=new Bn,c=i?new Bn:null,{from:l,to:u}=e.viewport;for(let n of t){if((o?n.fromA:n.fromB)>=u)break;(o?n.toA:n.toB)>l&&(a&&a(e.state,n,s,c)||gse(n,e.state.doc,o,r,s,c))}return{deco:s.finish(),gutter:c&&c.finish()}}var r5=class extends Jn{constructor(e){super(),this.height=e}eq(e){return this.height==e.height}toDOM(){let e=document.createElement(`div`);return e.className=`cm-mergeSpacer`,e.style.height=this.height+`px`,e}updateDOM(e){return e.style.height=this.height+`px`,!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}},i5=Hn.define({map:(e,t)=>e.map(t)}),a5=Yn.define({create:()=>ar.none,update:(e,t)=>{for(let e of t.effects)if(e.is(i5))return e.value;return e.map(t.changes)},provide:e=>Zn.decorations.from(e)}),o5=.01;function s5(e,t){if(e.size!=t.size)return!1;let n=e.iter(),r=t.iter();for(;n.value;){if(n.from!=r.from||Math.abs(n.value.spec.widget.height-r.value.spec.widget.height)>1)return!1;n.next(),r.next()}return!0}function _se(e,t,n){let r=new Bn,i=new Bn,a=e.state.field(a5).iter(),o=t.state.field(a5).iter(),s=0,c=0,l=0,u=0,d=e.viewport,f=t.viewport;for(let p=0;;p++){let m=p<n.length?n[p]:null,h=m?m.fromA:e.state.doc.length,g=m?m.fromB:t.state.doc.length;if(s<h){let n=e.lineBlockAt(s).top+l-(t.lineBlockAt(c).top+u);n<-.01?(l-=n,r.add(s,s,ar.widget({widget:new r5(-n),block:!0,side:-1}))):n>o5&&(u+=n,i.add(c,c,ar.widget({widget:new r5(n),block:!0,side:-1})))}if(h>s+1e3&&s<d.from&&h>d.from&&c<f.from&&g>f.from){let e=Math.min(d.from-s,f.from-c);s+=e,c+=e,p--}else if(m)s=m.toA,c=m.toB;else break;for(;a.value&&a.from<s;)l-=a.value.spec.widget.height,a.next();for(;o.value&&o.from<c;)u-=o.value.spec.widget.height,o.next()}for(;a.value;)l-=a.value.spec.widget.height,a.next();for(;o.value;)u-=o.value.spec.widget.height,o.next();let p=e.contentHeight+l-(t.contentHeight+u);p<o5?r.add(e.state.doc.length,e.state.doc.length,ar.widget({widget:new r5(-p),block:!0,side:1})):p>o5&&i.add(t.state.doc.length,t.state.doc.length,ar.widget({widget:new r5(p),block:!0,side:1}));let m=r.finish(),h=i.finish();s5(m,e.state.field(a5))||e.dispatch({effects:i5.of(m)}),s5(h,t.state.field(a5))||t.dispatch({effects:i5.of(h)})}var c5=Hn.define({map:(e,t)=>t.mapPos(e)}),vse=class extends Jn{constructor(e){super(),this.lines=e}eq(e){return this.lines==e.lines}toDOM(e){let t=document.createElement(`div`);return t.className=`cm-collapsedLines`,t.textContent=e.state.phrase(`$ unchanged lines`,this.lines),t.addEventListener(`click`,t=>{let n=e.posAtDOM(t.target);e.dispatch({effects:c5.of(n)});let{side:r,sibling:i}=e.state.facet(R8);i&&i().dispatch({effects:c5.of(yse(n,e.state.field(V8),r==`a`))})}),t}ignoreEvent(e){return e instanceof MouseEvent}get estimatedHeight(){return 27}get type(){return`collapsed-unchanged-code`}};function yse(e,t,n){let r=0,i=0;for(let a=0;;a++){let o=a<t.length?t[a]:null;if(!o||(n?o.fromA:o.fromB)>=e)return i+(e-r);[r,i]=n?[o.toA,o.toB]:[o.toB,o.toA]}}var bse=Yn.define({create(e){return ar.none},update(e,t){e=e.map(t.changes);for(let n of t.effects)n.is(c5)&&(e=e.update({filter:e=>e!=n.value}));if(e.size&&t.state.field(V8)!=t.startState.field(V8,!1)){let n=t.state.facet(R8).side==`a`,r=[];for(let i of t.state.field(V8))e.between(n?i.fromA:i.fromB,n?i.toA:i.toB,e=>{r.push(e)});r.length&&(e=e.update({filter:e=>r.indexOf(e)<0}))}return e},provide:e=>Zn.decorations.from(e)});function l5({margin:e=3,minSize:t=4}){return bse.init(n=>xse(n,e,t))}function xse(e,t,n){let r=new Bn,i=e.facet(R8).side==`a`,a=e.field(V8),o=1;for(let s=0;;s++){let c=s<a.length?a[s]:null,l=s?o+t:1,u=c?e.doc.lineAt(i?c.fromA:c.fromB).number-1-t:e.doc.lines,d=u-l+1;if(d>=n&&r.add(e.doc.line(l).from,e.doc.line(u).to,ar.replace({widget:new vse(d),block:!0})),!c)break;o=e.doc.lineAt(Math.min(e.doc.length,i?c.toA:c.toB)).number}return r.finish()}var Sse=Zn.styleModule.of(new ree({".cm-mergeView":{overflowY:`auto`},".cm-mergeViewEditors":{display:`flex`,alignItems:`stretch`},".cm-mergeViewEditor":{flexGrow:1,flexBasis:0,overflow:`hidden`},".cm-merge-revert":{width:`1.6em`,flexGrow:0,flexShrink:0,position:`relative`},".cm-merge-revert button":{position:`absolute`,display:`block`,width:`100%`,boxSizing:`border-box`,textAlign:`center`,background:`none`,border:`none`,font:`inherit`,cursor:`pointer`}})),u5=Zn.baseTheme({".cm-mergeView & .cm-scroller, .cm-mergeView &":{height:`auto !important`,overflowY:`visible !important`},"&.cm-merge-a .cm-changedLine, .cm-deletedChunk":{backgroundColor:`rgba(160, 128, 100, .08)`},"&.cm-merge-b .cm-changedLine, .cm-inlineChangedLine":{backgroundColor:`rgba(100, 160, 128, .08)`},"&light.cm-merge-a .cm-changedText, &light .cm-deletedChunk .cm-deletedText":{background:`linear-gradient(#ee443366, #ee443366) bottom/100% 2px no-repeat`},"&dark.cm-merge-a .cm-changedText, &dark .cm-deletedChunk .cm-deletedText":{background:`linear-gradient(#ffaa9966, #ffaa9966) bottom/100% 2px no-repeat`},"&light.cm-merge-b .cm-changedText":{background:`linear-gradient(#22bb22aa, #22bb22aa) bottom/100% 2px no-repeat`},"&dark.cm-merge-b .cm-changedText":{background:`linear-gradient(#88ff88aa, #88ff88aa) bottom/100% 2px no-repeat`},"&.cm-merge-b .cm-deletedText":{background:`#ff000033`},".cm-insertedLine, .cm-deletedLine, .cm-deletedLine del":{textDecoration:`none`},".cm-deletedChunk":{paddingLeft:`6px`,"& .cm-chunkButtons":{position:`absolute`,insetInlineEnd:`5px`},"& button":{border:`none`,cursor:`pointer`,color:`white`,margin:`0 2px`,borderRadius:`3px`,"&[name=accept]":{background:`#2a2`},"&[name=reject]":{background:`#d43`}}},".cm-collapsedLines":{padding:`5px 5px 5px 10px`,cursor:`pointer`,"&:before":{content:`"⦚"`,marginInlineEnd:`7px`},"&:after":{content:`"⦚"`,marginInlineStart:`7px`}},"&light .cm-collapsedLines":{color:`#444`,background:`linear-gradient(to bottom, transparent 0, #f3f3f3 30%, #f3f3f3 70%, transparent 100%)`},"&dark .cm-collapsedLines":{color:`#ddd`,background:`linear-gradient(to bottom, transparent 0, #222 30%, #222 70%, transparent 100%)`},".cm-changeGutter":{width:`3px`,paddingLeft:`1px`},"&light.cm-merge-a .cm-changedLineGutter, &light .cm-deletedLineGutter":{background:`#e43`},"&dark.cm-merge-a .cm-changedLineGutter, &dark .cm-deletedLineGutter":{background:`#fa9`},"&light.cm-merge-b .cm-changedLineGutter":{background:`#2b2`},"&dark.cm-merge-b .cm-changedLineGutter":{background:`#8f8`},".cm-inlineChangedLineGutter":{background:`#75d`}}),d5=new Kn,f5=new Kn,Cse=class{constructor(e){this.revertDOM=null,this.revertToA=!1,this.revertToLeft=!1,this.measuring=-1,this.diffConf=e.diffConfig||X8;let t=[Wn.low(Z8),u5,Sse,a5,Zn.updateListener.of(e=>{this.measuring<0&&(e.heightChanged||e.viewportChanged)&&!e.transactions.some(e=>e.effects.some(e=>e.is(i5)))&&this.measure()})],n=[R8.of({side:`a`,sibling:()=>this.b,highlightChanges:e.highlightChanges!==!1,markGutter:e.gutter!==!1})];e.gutter!==!1&&n.push(Q8);let r=In.create({doc:e.a.doc,selection:e.a.selection,extensions:[e.a.extensions||[],Zn.editorAttributes.of({class:`cm-merge-a`}),f5.of(n),t]}),i=[R8.of({side:`b`,sibling:()=>this.a,highlightChanges:e.highlightChanges!==!1,markGutter:e.gutter!==!1})];e.gutter!==!1&&i.push(Q8);let a=In.create({doc:e.b.doc,selection:e.b.selection,extensions:[e.b.extensions||[],Zn.editorAttributes.of({class:`cm-merge-b`}),f5.of(i),t]});this.chunks=H8.build(r.doc,a.doc,this.diffConf);let o=[V8.init(()=>this.chunks),d5.of(e.collapseUnchanged?l5(e.collapseUnchanged):[])];r=r.update({effects:Hn.appendConfig.of(o)}).state,a=a.update({effects:Hn.appendConfig.of(o)}).state,this.dom=document.createElement(`div`),this.dom.className=`cm-mergeView`,this.editorDOM=this.dom.appendChild(document.createElement(`div`)),this.editorDOM.className=`cm-mergeViewEditors`;let s=e.orientation||`a-b`,c=document.createElement(`div`);c.className=`cm-mergeViewEditor`;let l=document.createElement(`div`);l.className=`cm-mergeViewEditor`,this.editorDOM.appendChild(s==`a-b`?c:l),this.editorDOM.appendChild(s==`a-b`?l:c),this.a=new Zn({state:r,parent:c,root:e.root,dispatchTransactions:e=>this.dispatch(e,this.a)}),this.b=new Zn({state:a,parent:l,root:e.root,dispatchTransactions:e=>this.dispatch(e,this.b)}),this.setupRevertControls(!!e.revertControls,e.revertControls==`b-to-a`,e.renderRevertControl),e.parent&&e.parent.appendChild(this.dom),this.scheduleMeasure()}dispatch(e,t){if(e.some(e=>e.docChanged)){let n=e[e.length-1],r=e.reduce((e,t)=>e.compose(t.changes),Rn.empty(e[0].startState.doc.length));this.chunks=t==this.a?H8.updateA(this.chunks,n.newDoc,this.b.state.doc,r,this.diffConf):H8.updateB(this.chunks,this.a.state.doc,n.newDoc,r,this.diffConf),t.update([...e,n.state.update({effects:z8.of(this.chunks)})]);let i=t==this.a?this.b:this.a;i.update([i.state.update({effects:z8.of(this.chunks)})]),this.scheduleMeasure()}else t.update(e)}reconfigure(e){if(`diffConfig`in e&&(this.diffConf=e.diffConfig),`orientation`in e){let t=e.orientation!=`b-a`;if(t!=(this.editorDOM.firstChild==this.a.dom.parentNode)){let e=this.a.dom.parentNode,n=this.b.dom.parentNode;e.remove(),n.remove(),this.editorDOM.insertBefore(t?e:n,this.editorDOM.firstChild),this.editorDOM.appendChild(t?n:e),this.revertToLeft=!this.revertToLeft,this.revertDOM&&(this.revertDOM.textContent=``)}}if(`revertControls`in e||`renderRevertControl`in e){let t=!!this.revertDOM,n=this.revertToA,r=this.renderRevert;`revertControls`in e&&(t=!!e.revertControls,n=e.revertControls==`b-to-a`),`renderRevertControl`in e&&(r=e.renderRevertControl),this.setupRevertControls(t,n,r)}let t=`highlightChanges`in e,n=`gutter`in e,r=`collapseUnchanged`in e;if(t||n||r){let i=[],a=[];if(t||n){let r=this.a.state.facet(R8),o=n?e.gutter!==!1:r.markGutter,s=t?e.highlightChanges!==!1:r.highlightChanges;i.push(f5.reconfigure([R8.of({side:`a`,sibling:()=>this.b,highlightChanges:s,markGutter:o}),o?Q8:[]])),a.push(f5.reconfigure([R8.of({side:`b`,sibling:()=>this.a,highlightChanges:s,markGutter:o}),o?Q8:[]]))}if(r){let t=d5.reconfigure(e.collapseUnchanged?l5(e.collapseUnchanged):[]);i.push(t),a.push(t)}this.a.dispatch({effects:i}),this.b.dispatch({effects:a})}this.scheduleMeasure()}setupRevertControls(e,t,n){this.revertToA=t,this.revertToLeft=this.revertToA==(this.editorDOM.firstChild==this.a.dom.parentNode),this.renderRevert=n,!e&&this.revertDOM?(this.revertDOM.remove(),this.revertDOM=null):e&&!this.revertDOM?(this.revertDOM=this.editorDOM.insertBefore(document.createElement(`div`),this.editorDOM.firstChild.nextSibling),this.revertDOM.addEventListener(`mousedown`,e=>this.revertClicked(e)),this.revertDOM.className=`cm-merge-revert`):this.revertDOM&&(this.revertDOM.textContent=``)}scheduleMeasure(){if(this.measuring<0){let e=this.dom.ownerDocument.defaultView||window;this.measuring=e.requestAnimationFrame(()=>{this.measuring=-1,this.measure()})}}measure(){_se(this.a,this.b,this.chunks),this.revertDOM&&this.updateRevertButtons()}updateRevertButtons(){let e=this.revertDOM,t=e.firstChild,n=this.a.viewport,r=this.b.viewport;for(let i=0;i<this.chunks.length;i++){let a=this.chunks[i];if(a.fromA>n.to||a.fromB>r.to)break;if(a.fromA<n.from||a.fromB<r.from)continue;let o=this.a.lineBlockAt(a.fromA).top+`px`;for(;t&&+t.dataset.chunk<i;)t=p5(t);t&&t.dataset.chunk==String(i)?(t.style.top!=o&&(t.style.top=o),t=t.nextSibling):e.insertBefore(this.renderRevertButton(o,i),t)}for(;t;)t=p5(t)}renderRevertButton(e,t){let n;if(this.renderRevert)n=this.renderRevert();else{n=document.createElement(`button`);let e=this.a.state.phrase(`Revert this chunk`);n.setAttribute(`aria-label`,e),n.setAttribute(`title`,e),n.textContent=this.revertToLeft?`⇜`:`⇝`}return n.style.top=e,n.setAttribute(`data-chunk`,String(t)),n}revertClicked(e){let t=e.target,n;for(;t&&t.parentNode!=this.revertDOM;)t=t.parentNode;if(t&&(n=this.chunks[t.dataset.chunk])){let[t,r,i,a,o,s]=this.revertToA?[this.b,this.a,n.fromB,n.toB,n.fromA,n.toA]:[this.a,this.b,n.fromA,n.toA,n.fromB,n.toB],c=t.state.sliceDoc(i,Math.max(i,a-1));i!=a&&s<=r.state.doc.length&&(c+=t.state.lineBreak),r.dispatch({changes:{from:o,to:Math.min(r.state.doc.length,s),insert:c},userEvent:`revert`}),e.preventDefault()}}destroy(){this.a.destroy(),this.b.destroy(),this.measuring>-1&&(this.dom.ownerDocument.defaultView||window).cancelAnimationFrame(this.measuring),this.dom.remove()}};function p5(e){let t=e.nextSibling;return e.remove(),t}var wse=new class extends Xn{constructor(){super(...arguments),this.elementClass=`cm-deletedLineGutter`}},Tse=Wn.low(ir({class:`cm-changeGutter`,markers:e=>e.plugin(Z8)?.gutter||qn.empty,widgetMarker:(e,t)=>t instanceof _5?wse:null}));function Ese(e){let t=typeof e.original==`string`?sr.of(e.original.split(/\r?\n/)):e.original,n=e.diffConfig||X8;return[Wn.low(Z8),Ase,u5,Zn.editorAttributes.of({class:`cm-merge-b`}),B8.of((e,t)=>{let r=t.effects.find(e=>e.is(m5));return r&&(e=H8.updateA(e,r.value.doc,t.startState.doc,r.value.changes,n)),t.docChanged&&(e=H8.updateB(e,t.state.field(h5),t.newDoc,t.changes,n)),e}),R8.of({highlightChanges:e.highlightChanges!==!1,markGutter:e.gutter!==!1,syntaxHighlightDeletions:e.syntaxHighlightDeletions!==!1,syntaxHighlightDeletionsMaxLength:3e3,mergeControls:e.mergeControls??!0,overrideChunk:e.allowInlineDiffs?Pse:void 0,side:`b`}),h5.init(()=>t),e.gutter===!1?[]:Tse,e.collapseUnchanged?l5(e.collapseUnchanged):[],V8.init(e=>H8.build(t,e.doc,n))]}var m5=Hn.define(),h5=Yn.define({create:()=>sr.empty,update(e,t){for(let n of t.effects)n.is(m5)&&(e=n.value.doc);return e}}),g5=new WeakMap,_5=class extends Jn{constructor(e){super(),this.buildDOM=e,this.dom=null}eq(e){return this.dom==e.dom}toDOM(e){return this.dom||=this.buildDOM(e)}};function Dse(e,t,n){let r=g5.get(t.changes);if(r)return r;let i=ar.widget({block:!0,side:-1,widget:new _5(r=>{let{highlightChanges:i,syntaxHighlightDeletions:a,syntaxHighlightDeletionsMaxLength:o,mergeControls:s}=e.facet(R8),c=document.createElement(`div`);if(c.className=`cm-deletedChunk`,s){let t=c.appendChild(document.createElement(`div`));t.className=`cm-chunkButtons`;let n=e=>{e.preventDefault(),Ose(r,r.posAtDOM(c))},i=e=>{e.preventDefault(),kse(r,r.posAtDOM(c))};if(typeof s==`function`)t.appendChild(s(`accept`,n)),t.appendChild(s(`reject`,i));else{let r=t.appendChild(document.createElement(`button`));r.name=`accept`,r.textContent=e.phrase(`Accept`),r.onmousedown=n;let a=t.appendChild(document.createElement(`button`));a.name=`reject`,a.textContent=e.phrase(`Reject`),a.onmousedown=i}}if(n||t.fromA>=t.toA)return c;let l=r.state.field(h5).sliceString(t.fromA,t.endA),u=a&&e.facet(Gn),d=h(),f=t.changes,p=0,m=!1;function h(){let e=c.appendChild(document.createElement(`div`));return e.className=`cm-deletedLine`,e.appendChild(document.createElement(`del`))}function g(e,t,n){for(let r=e;r<t;){if(l.charAt(r)==`
|
|
175
|
-
`){d.firstChild||d.appendChild(document.createElement(`br`)),d=h(),r++;continue}let e=t,a=n+(m?` cm-deletedText`:``),o=!1,s=l.indexOf(`
|
|
176
|
-
`,r);if(s>-1&&s<t&&(e=s),i&&p<f.length){let t=Math.max(0,m?f[p].toA:f[p].fromA);t<=e&&(e=t,m&&p++,o=!0)}if(e>r){let t=document.createTextNode(l.slice(r,e));if(a){let e=d.appendChild(document.createElement(`span`));e.className=a,e.appendChild(t)}else d.appendChild(t);r=e}o&&(m=!m)}}if(u&&t.toA-t.fromA<=o){let t=u.parser.parse(l),n=0;zn(t,{style:t=>Ln(e,t)},(e,t,r)=>{e>n&&g(n,e,``),g(e,t,r),n=t}),g(n,l.length,``)}else g(0,l.length,``);return d.firstChild||d.appendChild(document.createElement(`br`)),c})});return g5.set(t.changes,i),i}function Ose(e,t){let{state:n}=e,r=t??n.selection.main.head,i=e.state.field(V8).find(e=>e.fromB<=r&&e.endB>=r);if(!i)return!1;let a=e.state.sliceDoc(i.fromB,Math.max(i.fromB,i.toB-1)),o=e.state.field(h5);i.fromB!=i.toB&&i.toA<=o.length&&(a+=e.state.lineBreak);let s=Rn.of({from:i.fromA,to:Math.min(o.length,i.toA),insert:a},o.length);return e.dispatch({effects:m5.of({doc:s.apply(o),changes:s}),userEvent:`accept`}),!0}function kse(e,t){let{state:n}=e,r=t??n.selection.main.head,i=n.field(V8).find(e=>e.fromB<=r&&e.endB>=r);if(!i)return!1;let a=n.field(h5).sliceString(i.fromA,Math.max(i.fromA,i.toA-1));return i.fromA!=i.toA&&i.toB<=n.doc.length&&(a+=n.lineBreak),e.dispatch({changes:{from:i.fromB,to:Math.min(n.doc.length,i.toB),insert:a},userEvent:`revert`}),!0}function v5(e){let t=new Bn;for(let n of e.field(V8)){let r=e.facet(R8).overrideChunk&&b5(e,n);t.add(n.fromB,n.fromB,Dse(e,n,!!r))}return t.finish()}var Ase=Yn.define({create:e=>v5(e),update(e,t){return t.state.field(V8,!1)==t.startState.field(V8,!1)?e:v5(t.state)},provide:e=>Zn.decorations.from(e)}),y5=new WeakMap;function b5(e,t){let n=y5.get(t);if(n!==void 0)return n;n=null;let r=e.field(h5),i=e.doc,a=r.lineAt(t.endA).number-r.lineAt(t.fromA).number+1,o=i.lineAt(t.endB).number-i.lineAt(t.fromB).number+1;abort:if(a==o&&a<10){let e=[],i=0,o=t.fromA,s=t.fromB;for(let n of t.changes){if(n.fromA<n.toA){i+=n.toA-n.fromA;let t=r.sliceString(o+n.fromA,o+n.toA);if(/\n/.test(t))break abort;e.push(ar.widget({widget:new jse(t),side:-1}).range(s+n.fromB))}n.fromB<n.toB&&e.push(e5.range(s+n.fromB,s+n.toB))}i<t.endA-t.fromA-a*2&&(n=e)}return y5.set(t,n),n}var jse=class extends Jn{constructor(e){super(),this.text=e}eq(e){return this.text==e.text}toDOM(e){let t=document.createElement(`del`);return t.className=`cm-deletedText`,t.textContent=this.text,t}},Mse=new class extends Xn{constructor(){super(...arguments),this.elementClass=`cm-inlineChangedLineGutter`}},Nse=ar.line({class:`cm-inlineChangedLine`});function Pse(e,t,n,r){let i=b5(e,t),a=0;if(!i)return!1;for(let o=e.doc.lineAt(t.fromB);;){for(r&&r.add(o.from,o.from,Mse),n.add(o.from,o.from,Nse);a<i.length&&i[a].to<=o.to;){let e=i[a++];n.add(e.from,e.to,e.value)}if(o.to>=t.endB)break;o=e.doc.lineAt(o.to+1)}return!0}var x5={bg:`#10100f`,fg:`#d8d2c4`,line:`#171716`,border:`#2c2c28`,selection:`#3a3934`,gutter:`#73736b`};function S5(e){let t=Zn.theme({"&":{backgroundColor:x5.bg,color:x5.fg,height:`100%`},".cm-content":{caretColor:x5.fg,padding:`16px 0`},".cm-cursor":{borderLeftColor:x5.fg},".cm-activeLine":{backgroundColor:`#ffffff08`},".cm-activeLineGutter":{backgroundColor:x5.line,color:x5.fg},".cm-gutters":{backgroundColor:x5.bg,color:x5.gutter,border:`none`},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:x5.selection},".cm-panels":{backgroundColor:x5.line,color:x5.fg},".cm-searchMatch":{backgroundColor:`#61533b70`},".cm-searchMatch-selected":{backgroundColor:`#61533b`},"&.cm-focused":{outline:`none`},".cm-scroller":{fontFamily:`"Noto Sans Mono", monospace`,fontSize:`13px`}},{dark:!0});return e?[t,Un(Ise)]:[t,Un(Fse)]}var Fse=or.define([{tag:[Vn.keyword,Vn.operatorKeyword],color:`#c678dd`},{tag:[Vn.string,Vn.regexp],color:`#98c379`},{tag:[Vn.number,Vn.bool,Vn.null],color:`#d19a66`},{tag:Vn.comment,color:`#7d8799`,fontStyle:`italic`},{tag:[Vn.typeName,Vn.className],color:`#e5c07b`},{tag:[Vn.function(Vn.variableName),Vn.propertyName],color:`#61afef`},{tag:[Vn.tagName,Vn.angleBracket],color:`#e06c75`},{tag:Vn.attributeName,color:`#d19a66`}]),Ise=or.define([{tag:Vn.comment,color:`#8c8c84`},{tag:[Vn.keyword,Vn.operatorKeyword,Vn.modifier,Vn.controlKeyword],color:`#d8a18f`},{tag:[Vn.operator,Vn.punctuation],color:`#aba79b`},{tag:[Vn.string,Vn.attributeValue],color:`#a9b985`},{tag:Vn.escape,color:`#d8b580`},{tag:[Vn.number,Vn.bool,Vn.null,Vn.atom],color:`#c5a5b8`},{tag:Vn.regexp,color:`#b5b991`},{tag:[Vn.typeName,Vn.className,Vn.namespace],color:`#d8b580`},{tag:[Vn.tagName,Vn.angleBracket],color:`#d8a18f`},{tag:[Vn.attributeName,Vn.propertyName],color:`#a0b7aa`},{tag:Vn.meta,color:`#aba79b`},{tag:Vn.heading,color:`#d8b580`,fontWeight:`bold`},{tag:Vn.link,color:`#a0b7aa`,textDecoration:`underline`}]);function Lse(e){return e===`projector-soft`?S5(!0):e===`projector`?S5(!1):Qt}var Rse=new Kn,zse=new Kn,C5=e=>$n.matchFilename(Ut,e.split(`/`).at(-1)??e);function Bse(e){return C5(e)?.name??null}async function Vse(e){let t=C5(e);return t?await t.load():[]}var w5=class extends Xn{kind;top;constructor(e,t){super(),this.kind=e,this.top=t}eq(e){return e.kind===this.kind&&e.top===this.top}toDOM(){let e=document.createElement(`div`);return e.className=`git-gutter-${this.kind}${this.top?` git-gutter-deleted-top`:``}`,e}},T5=Hn.define(),E5=Yn.define({create:()=>null,update(e,t){for(let e of t.effects)if(e.is(T5))return e.value;return e}}),D5=Yn.define({create:()=>[],update(e,t){let n=t.state.field(E5);return!t.effects.some(e=>e.is(T5))&&!t.docChanged?e:n===null?[]:H8.build(In.create({doc:n}).doc,t.state.doc)}});function O5(e){return e.fromA===e.toA?`added`:e.fromB===e.toB?`deleted`:`modified`}var k5=Hn.define(),A5=Hn.define(),j5=Yn.define({create:()=>null,update(e,t){for(let e of t.effects){if(e.is(k5))return e.value;if(e.is(A5))return null}return t.docChanged||t.effects.some(e=>e.is(T5))?null:e}}),Hse=(e,t)=>e.field(D5).find(e=>t.from>=e.fromB&&t.from<=Math.max(e.fromB,e.endB-1)),Use=(e,t)=>e.doc.lineAt(Math.max(t.fromB,Math.min(t.endB-1,e.doc.length))).to;function M5(e,t,n){let r=document.createElement(`button`);return r.type=`button`,r.className=`dirty-diff-button`,r.textContent=e,r.title=t,r.addEventListener(`mousedown`,e=>e.preventDefault()),r.addEventListener(`click`,e=>{e.stopPropagation(),n()}),r}function Wse(e,t,n){n.textContent=t;let r=e.facet(Gn)?.parser;if(!r||!t)return;n.textContent=``;let i=0,a=(e,r)=>{let a=document.createTextNode(t.slice(i,e));if(!r)n.append(a);else{let e=document.createElement(`span`);e.className=r,e.append(a),n.append(e)}i=e};zn(r.parse(t),{style:t=>Ln(e,t)},(e,t,n)=>{e>i&&a(e,``),a(t,n)}),i<t.length&&a(t.length,``)}var Gse=class extends Jn{chunk;text;index;total;constructor(e,t,n,r){super(),this.chunk=e,this.text=t,this.index=n,this.total=r}eq(e){return e.chunk.fromA===this.chunk.fromA&&e.chunk.fromB===this.chunk.fromB&&e.text===this.text&&e.index===this.index&&e.total===this.total}get estimatedHeight(){return(this.text.split(`
|
|
177
|
-
`).length+1)*20}toDOM(e){let t=O5(this.chunk),n=document.createElement(`div`);n.className=`dirty-diff-peek dirty-diff-peek-${t}`;let r=document.createElement(`div`);r.className=`dirty-diff-bar`;let i=document.createElement(`span`);if(i.className=`dirty-diff-title`,i.textContent=`Изменение ${this.index+1} из ${this.total}`,r.append(i,M5(`↑`,`Предыдущее изменение (Shift+Alt+F3)`,()=>N5(-1)(e)),M5(`↓`,`Следующее изменение (Alt+F3)`,()=>N5(1)(e)),M5(`↶`,`Откатить изменение`,()=>Yse(e,this.chunk)),M5(`×`,`Закрыть (Esc)`,()=>e.dispatch({effects:A5.of(null)}))),n.append(r),t!==`added`){let t=document.createElement(`div`);t.className=`dirty-diff-body`,Wse(e.state,this.text.replace(/\n$/,``),t),n.append(t)}return n}ignoreEvent(){return!0}},Kse=Zn.decorations.compute([j5,D5],e=>{let t=e.field(j5);if(t===null)return ar.none;let n=e.field(D5),r=n.findIndex(e=>e.fromB===t),i=n[r],a=e.field(E5);if(!i||a===null)return ar.none;let o=new Gse(i,a.slice(i.fromA,i.toA),r,n.length),s=O5(i)===`deleted`?qse(e,i):Use(e,i);return ar.set(ar.widget({widget:o,block:!0,side:1}).range(s))});function qse(e,t){return t.fromB===0?0:e.doc.lineAt(Math.min(t.fromB,e.doc.length)).to}var Jse=ir({class:`cm-dirty-gutter`,markers(e){let t=e.state.doc,n=[];for(let r of e.state.field(D5)){let e=O5(r);if(e===`deleted`){let i=r.fromB===0,a=t.lineAt(Math.min(r.fromB,t.length));n.push(new w5(e,i).range(i?0:a.from));continue}let i=t.lineAt(r.fromB).number,a=t.lineAt(Math.max(r.fromB,r.endB-1)).number;for(let r=i;r<=a;r++)n.push(new w5(e,!1).range(t.line(r).from))}return qn.of(n,!0)},lineMarkerChange:e=>e.docChanged||e.transactions.some(e=>e.effects.some(e=>e.is(T5))),initialSpacer:()=>new w5(`added`,!1),domEventHandlers:{mousedown(e,t){let n=e.state.doc,r=Hse(e.state,t)??e.state.field(D5).find(e=>O5(e)===`deleted`&&n.lineAt(Math.min(e.fromB,n.length)).from===t.from);if(!r)return!1;let i=e.state.field(j5)===r.fromB;return e.dispatch({effects:i?A5.of(null):k5.of(r.fromB)}),!0}}});function Yse(e,t){let n=e.state.field(E5);if(n===null)return;let r=n.slice(t.fromA,t.toA);e.dispatch({changes:{from:t.fromB,to:t.toB,insert:r}})}function N5(e){return t=>{let n=t.state.field(D5);if(!n.length)return!1;let r=t.state.field(j5)??t.state.selection.main.head,i=e===1?n.find(e=>e.fromB>r)??n[0]:n.findLast(e=>e.fromB<r)??n.at(-1),a=Math.min(i.fromB,t.state.doc.length);return t.dispatch({selection:{anchor:a},effects:[k5.of(i.fromB),Zn.scrollIntoView(a,{y:`center`})]}),!0}}var Xse=[E5,D5,j5,Kse,Jse,Wn.high(er.of([{key:`Alt-F3`,run:N5(1)},{key:`Shift-Alt-F3`,run:N5(-1)},{key:`Escape`,run:e=>e.state.field(j5)!==null&&(e.dispatch({effects:A5.of(null)}),!0)}]))],Zse=W({__name:`EditorStatusLine`,props:{path:{type:String,required:!0},content:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=c8().status,i={props:n,status:r,lineEnding:B(()=>ose(n.content)),language:B(()=>Bse(n.path)??`Текст`),selection:B(()=>{if(!r.selectedChars)return``;let e=r.selectedLines>1?` · ${r.selectedLines} строк`:``;return`выделено ${r.selectedChars} симв.${e}`}),UiInline:Be};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),Qse={key:0,class:`item u-truncate`,title:`Позиция каретки`},$se={key:1,class:`item u-truncate`},ece={class:`item u-truncate`,title:`Язык подсветки синтаксиса`},tce=[`title`];function nce(t,n,r,i,a,o){return K(),F(i.UiInline,{as:`footer`,gap:3,justify:`normal`,class:`editor-status-line`},{default:e(()=>[i.status.active?(K(),U(`span`,Qse,` Строка `+X(i.status.line)+`, столбец `+X(i.status.column),1)):D(`v-if`,!0),i.selection?(K(),U(`span`,$se,X(i.selection),1)):D(`v-if`,!0),n[0]||=I(`span`,{class:`spacer`},null,-1),I(`span`,ece,X(i.language),1),I(`span`,{class:`item u-truncate`,title:`Перевод строк документа: ${i.lineEnding}`},X(i.lineEnding),9,tce)]),_:1})}var rce=H(Zse,[[`render`,nce],[`__scopeId`,`data-v-b3a8aa30`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/EditorStatusLine.vue`]]),P5=Symbol(`editor-topbar`);function ice(){let e=ee(null);return n(P5,e),e}function ace(){return z(P5,null)}var oce=W({__name:`EditorTopbarActions`,setup(e,{expose:t}){t();let n={target:ace()};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function sce(e,t,n,r,i,a){return r.target?(K(),F(fe,{key:0,to:r.target},[c(e.$slots,`default`)],8,[`to`])):D(`v-if`,!0)}var cce=H(oce,[[`render`,sce],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/modules/viewers/ui/EditorTopbarActions.vue`]]),F5=r(()=>Pn(()=>import(`./IssueView-CfdeTTKs.js`),__vite__mapDeps([16,3,1,4,5,17,18,19,20,10,11,12,21,22,6,7,23,24,25,26,13,27,28]))),I5=r(()=>Pn(()=>import(`./PullRequestView-Bce3nQML.js`),__vite__mapDeps([29,3,1,4,5,10,11,12,17,18,19,20,21,22,6,7,23,24,25,26,13,27,28,30]))),lce=r(()=>Pn(()=>import(`./DiscussionView-83kZBzfq.js`),__vite__mapDeps([31,3,1,4,5,17,18,19,20,10,11,12,21,22,6,7,23,24,25,26,13,27,28,32]))),L5=r(()=>Pn(()=>import(`./ReleaseView-DO-R7ktE.js`),__vite__mapDeps([33,3,1,4,5,10,11,12,17,18,19,25,21,22,6,7,23,24,26,13,27,34]))),uce=r(()=>Pn(()=>import(`./CodeViewer-BAgvP3Yx.js`),__vite__mapDeps([9,3,1,10,4,5,11,12,6,7,13,14,15]))),dce=r(()=>Pn(()=>import(`./MarkdownViewer-DKZvt6XG.js`),__vite__mapDeps([35,3,1,4,5,6,7,11,25,10,12,21,22,23,24,26,13,27,36]))),fce=r(()=>Pn(()=>import(`./SvgViewer-CEIl2Ob2.js`),__vite__mapDeps([37,3,1,4,5,6,7,11,22,23,38,39,40]))),pce=r(()=>Pn(()=>import(`./HtmlViewer-CGHhO9bM.js`),__vite__mapDeps([41,3,1,4,5,6,7,11,18,38,39,42]))),mce=r(()=>Pn(()=>import(`./EditorSettings-CPklwfT-.js`),__vite__mapDeps([43,3,1,4,5,11,14,44]))),R5=e=>e.params?.title?{}:{onTitle:t=>e.path=t},hce=e=>({component:ZL,keepAlive:!0,props:(t,n)=>({projectId:n.projectId,backend:e,chatId:t.params?.chatId,role:ax(t.params?.role),...R5(t)})});function gce(){return{keybindings:{component:Vm,ownKeys:!0,keepAlive:!0},network:{component:Uae,ownKeys:!0,keepAlive:!0},docker:{component:v4,keepAlive:!0},browser:{component:uoe,keepAlive:!0,ownKeys:!0,props:(e,t)=>({projectId:t.projectId,url:e.params?.url,onNavigate:(t,n)=>{e.params={...e.params,url:t,title:n},n&&(e.path=n)}})},agent:{component:ZL,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,chatId:e.params?.chatId,role:ax(e.params?.role),...R5(e)})},"agent-task":{component:hj,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,chat:e.params?.chat,task:e.params?.task})},"agent-job":{component:qM,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,job:e.params?.job,onOpenFile:t.openFile,onTitle:t=>{e.path=t}})},...Object.fromEntries(st().filter(e=>!e.builtin).map(e=>[e.program,hce(e.backend)])),issue:{component:F5,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,number:e.params?.number,onOpen:t.openFile})},pull:{component:I5,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,number:e.params?.number,onOpen:t.openFile,onOpenSection:t.openSection,onOpenPullFile:t.openPullFile,onOpenJob:e=>t.openTab(`job`,e,{preview:!1}),onOpenPipeline:e=>t.openTab(`pipeline`,e,{preview:!1})})},discussion:{component:lce,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,number:e.params?.number,onOpen:t.openFile})},release:{component:L5,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,tag:typeof e.params?.tag==`string`?e.params.tag:``})},commit:{component:rse,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,hash:e.params?.hash,onOpenCommit:e=>t.openTab(`commit`,{hash:e}),onOpenDiff:t.openCommitDiff,onOpenTree:t.openCommitTree,onOpenCompare:t.openCompareTree,onSubject:t=>e.content=t})}}}var z5=Symbol.for(`projector.workspace-tabs`);function _ce(e,t={},r={}){let i=nt(jae,e.tabs);n(z5,{types:i,views:{...gce(),...t}});let a=Object.entries(r).map(([e,t])=>i.behave(e,t));return g(()=>a.forEach(e=>e())),i}function B5(){let e=z(z5);if(!e)throw Error(`Workspace tabs are not provided`);return e}var V5=Symbol.for(`projector.tab-host`),vce=e=>n(V5,e);function H5(){let e=z(V5);if(!e)throw Error(`Tab host is not provided`);return e}var yce=W({__name:`TabReadoutScope`,props:{tabKey:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e;nee(()=>n.tabKey);let r={props:n};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function bce(e,t,n,r,i,a){return c(e.$slots,`default`)}var U5=H(yce,[[`render`,bce],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/TabReadoutScope.vue`]]),xce=W({__name:`FilePanel`,props:{file:{type:Object,required:!0},projectId:{type:String,required:!0},revision:{type:Number,required:!0}},emits:[`change`,`save`,`mode`,`open`,`reload`,`keep`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=B5(),o=H5();ise();let s=ice(),c={props:r,emit:i,tabs:a,host:o,topbarActions:s,setTopbarActions:e=>{s.value=e},siteUrl:B(()=>I6(r.file)?mt(r.projectId,r.file.path):``),snapshotLimit:B(()=>I6(r.file)||r.file.virtual||r.file.image?``:/\.html?$/i.test(r.file.path)?`HTML из снимка открыт как код: встроенный просмотр страницы доступен только для рабочей копии`:/\.(?:tar|tgz|gz|gzip|bz2|tbz2?|xz|txz|zip)$/i.test(r.file.path)?`Архив из снимка не распаковывается: показано только содержимое файла`:``),view:B(()=>r.file.virtual?a.views[r.file.virtual]:void 0),subtitle:B(()=>r.file.virtual?a.types.get(r.file.virtual)?.subtitle:void 0),hasStatusLine:B(()=>!r.file.virtual&&!r.file.binary&&!r.file.image&&!r.file.archive),UiPanel:sn,UiToolbar:Sg,get shortRevision(){return Gt},get isEditable(){return L6},get isHtml(){return z6},get isLiveFile(){return I6},get isMarkdown(){return R6},TabReadoutScope:U5,get ArchiveViewer(){return _oe},get CodeViewer(){return uce},get EditorStatusLine(){return rce},get HtmlViewer(){return pce},get ImageViewport(){return lr},get MarkdownViewer(){return dce},get SvgViewer(){return fce}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),Sce={class:`topbar`},Cce={class:`topbar-path u-truncate`},wce={key:0,class:`topbar-note`},Tce={key:1,class:`topbar-note`},Ece={key:0,class:`file-note`},Dce={key:1,class:`file-error`,role:`alert`},Oce=[`data-own-keys`],kce={key:1,class:`file-error`};function Ace(t,n,r,i,o,s){return K(),F(i.UiPanel,{as:`div`,sizing:`flex`,class:`file-panel`},{default:e(()=>[I(`div`,Sce,[I(`span`,Cce,X(r.file.path),1),i.subtitle?(K(),U(`span`,wce,X(i.subtitle),1)):D(`v-if`,!0),r.file.external||r.file.readonly?(K(),U(`span`,Tce,`только просмотр`)):D(`v-if`,!0),I(`div`,{ref:i.setTopbarActions,class:`topbar-actions`},null,512)]),i.snapshotLimit?(K(),U(`p`,Ece,X(i.snapshotLimit),1)):D(`v-if`,!0),r.file.saveError&&!i.isMarkdown(r.file)?(K(),U(`p`,Dce,X(r.file.saveError),1)):D(`v-if`,!0),r.file.conflict?(K(),F(i.UiToolbar,{key:2,class:`file-conflict`,role:`alert`,wrap:``,text:`xs`},{default:e(()=>[I(`span`,null,X(r.file.conflict.error?`Файл недоступен на диске: ${r.file.conflict.error}`:`Файл изменён на диске, а во вкладке есть несохранённые правки`),1),I(`button`,{type:`button`,onClick:n[0]||=e=>i.emit(`reload`)},X(r.file.conflict.error?`Проверить снова`:`Загрузить с диска`),1),r.file.conflict.disk===void 0?D(`v-if`,!0):(K(),U(`button`,{key:0,type:`button`,onClick:n[1]||=e=>i.emit(`keep`)},` Оставить мою версию `))]),_:1})):D(`v-if`,!0),I(`div`,{class:`panel-body`,"data-own-keys":i.view?.ownKeys||void 0},[i.view?(K(),F(i.TabReadoutScope,{key:0,"tab-key":r.file.key},{default:e(()=>[(K(),F(C(i.view.component),$e(a(i.view.props?.(r.file,i.host))),null,16))]),_:1},8,[`tab-key`])):r.file.binary&&!r.file.image?(K(),U(`p`,kce,` Бинарный файл · `+X(r.file.size)+` байт `,1)):r.file.image?(K(),F(i.ImageViewport,{key:2,src:r.file.image,alt:r.file.path},null,8,[`src`,`alt`])):r.file.archive?(K(),F(i.ArchiveViewer,{key:3,archive:r.file.archive},null,8,[`archive`])):/\.svg$/i.test(r.file.path)&&r.file.original===void 0&&(!r.file.scope||r.file.scope.kind!==`compare`)?(K(),F(i.SvgViewer,{key:4,path:r.file.path,"project-id":i.isLiveFile(r.file)?r.projectId:``,content:r.file.draft??r.file.content,editable:i.isEditable(r.file),line:r.file.line,"end-line":r.file.endLine,column:r.file.column,onChange:n[2]||=e=>i.emit(`change`,e),onSave:n[3]||=e=>i.emit(`save`)},null,8,[`path`,`project-id`,`content`,`editable`,`line`,`end-line`,`column`])):i.isHtml(r.file)&&i.siteUrl?(K(),F(i.HtmlViewer,{key:5,path:r.file.path,"project-id":i.isLiveFile(r.file)?r.projectId:``,content:r.file.draft??r.file.content,saved:r.file.content,"site-url":i.siteUrl,reload:r.file.htmlReload,editable:i.isEditable(r.file),line:r.file.line,"end-line":r.file.endLine,column:r.file.column,onChange:n[4]||=e=>i.emit(`change`,e),onSave:n[5]||=e=>i.emit(`save`),onCommand:n[6]||=(e,t)=>i.host.run(e,t)},null,8,[`path`,`project-id`,`content`,`saved`,`site-url`,`reload`,`editable`,`line`,`end-line`,`column`])):i.isMarkdown(r.file)?(K(),F(i.MarkdownViewer,{key:r.file.readonly?r.revision:void 0,"project-id":r.projectId,scope:r.file.scope,editable:i.isEditable(r.file),path:r.file.path,content:r.file.draft??r.file.content,mode:r.file.markdownMode??`document`,error:r.file.saveError,line:r.file.line,"end-line":r.file.endLine,column:r.file.column,onChange:n[7]||=e=>i.emit(`change`,e),onMode:n[8]||=e=>i.emit(`mode`,e),onCommand:n[9]||=(e,t)=>i.host.run(e,t),onSave:n[10]||=e=>i.emit(`save`),onOpen:n[11]||=e=>i.emit(`open`,e)},null,8,[`project-id`,`scope`,`editable`,`path`,`content`,`mode`,`error`,`line`,`end-line`,`column`])):r.file.virtual?D(`v-if`,!0):(K(),F(i.CodeViewer,{key:7,path:r.file.path,"project-id":i.isLiveFile(r.file)?r.projectId:``,revision:r.revision,content:r.file.draft??r.file.content,editable:i.isEditable(r.file),original:r.file.original,"original-label":r.file.commit?r.file.parent||`∅`:r.file.scope?.kind===`compare`?i.shortRevision(r.file.scope.from):r.file.staged?`HEAD`:`Индекс`,"modified-label":r.file.commit?r.file.commit.slice(0,7):r.file.scope?.kind===`compare`?i.shortRevision(r.file.scope.to):r.file.staged?`Индекс`:`Рабочий файл`,line:r.file.line,"end-line":r.file.endLine,column:r.file.column,onChange:n[12]||=e=>i.emit(`change`,e),onSave:n[13]||=e=>i.emit(`save`)},null,8,[`path`,`project-id`,`revision`,`content`,`editable`,`original`,`original-label`,`modified-label`,`line`,`end-line`,`column`]))],8,Oce),i.hasStatusLine?(K(),F(i.EditorStatusLine,{key:3,path:r.file.path,content:r.file.draft??r.file.content},null,8,[`path`,`content`])):D(`v-if`,!0)]),_:1})}var jce=H(xce,[[`render`,Ace],[`__scopeId`,`data-v-9696feb3`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/FilePanel.vue`]]),Mce=W({__name:`UsageMeter`,props:{remaining:{type:[Number,null],required:!0},ariaLabel:{type:String,required:!1},prefix:{type:String,required:!1},valueText:{type:String,required:!1},countdown:{type:String,required:!1},ticks:{type:Array,required:!1},exhausted:{type:Boolean,required:!1},compact:{type:Boolean,required:!1},tone:{type:[String,null],required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Nce=[`role`,`aria-valuemin`,`aria-valuemax`,`aria-valuenow`,`aria-label`],Pce={class:`quota-label`},Fce={key:0,class:`quota-time`};function Ice(e,t,n,r,i,a){return K(),U(`span`,{class:Y([`quota-bar`,[n.tone?`tone-${n.tone}`:void 0,{unavailable:n.remaining===null&&n.valueText===void 0,exhausted:n.exhausted,compact:n.compact,"tooltip-bar":n.countdown!==void 0}]]),role:n.ariaLabel&&n.remaining!==null?`meter`:void 0,"aria-valuemin":n.ariaLabel&&n.remaining!==null?0:void 0,"aria-valuemax":n.ariaLabel&&n.remaining!==null?100:void 0,"aria-valuenow":n.ariaLabel?n.remaining??void 0:void 0,"aria-label":n.ariaLabel},[n.remaining===null?D(`v-if`,!0):(K(),U(`span`,{key:0,class:`quota-fill`,style:Qe({width:`${n.remaining}%`})},null,4)),(K(!0),U(P,null,S(n.ticks,e=>(K(),U(`span`,{key:e,class:`quota-tick`,style:Qe({left:`${e}%`}),"aria-hidden":`true`},null,4))),128)),I(`span`,Pce,[I(`span`,null,X(n.prefix?`${n.prefix} · `:``)+X(n.valueText??(n.remaining===null?`—`:`${n.remaining}%`)),1),n.countdown===void 0?D(`v-if`,!0):(K(),U(`span`,Fce,X(n.countdown),1))])],10,Nce)}var Lce=H(Mce,[[`render`,Ice],[`__scopeId`,`data-v-d3d26d00`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agents-integration/_/UsageMeter.vue`]]),Rce=W({__name:`UsageIndicator`,props:{title:{type:String,required:!0},tooltip:{type:String,required:!0},remaining:{type:[Number,null],required:!0},tone:{type:[String,null],required:!0},meterLabel:{type:String,required:!0},rows:{type:Array,required:!0},prefix:{type:String,required:!1},valueText:{type:String,required:!1},compact:{type:Boolean,required:!1},interactive:{type:Boolean,required:!1}},emits:[`cycle`],setup(e,{expose:t,emit:n}){t();let r={emit:n,tooltipId:V(),UiInline:Be,UsageMeter:Lce};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),zce={class:`usage-icon`,"aria-hidden":`true`},Bce=[`id`],Vce={class:`tooltip-heading`},Hce={key:0,class:`tooltip-hint`};function Uce(t,n,r,i,a,o){return K(),F(i.UiInline,{as:r.interactive?`button`:`span`,inline:``,gap:1.5,justify:`normal`,type:r.interactive?`button`:void 0,tabindex:r.interactive?void 0:0,class:Y([`usage-indicator`,[r.tone?`tone-${r.tone}`:void 0,{interactive:r.interactive}]]),"aria-label":r.tooltip,"aria-describedby":i.tooltipId,onClick:n[0]||=e=>r.interactive&&i.emit(`cycle`)},{default:e(()=>[I(`span`,zce,[c(t.$slots,`icon`,{},void 0,!0)]),y(i.UsageMeter,{remaining:r.remaining,prefix:r.prefix,"value-text":r.valueText,compact:r.compact,tone:r.tone,"aria-label":r.meterLabel},null,8,[`remaining`,`prefix`,`value-text`,`compact`,`tone`,`aria-label`]),I(`span`,{id:i.tooltipId,class:`quota-tooltip`,role:`tooltip`},[r.rows.length?(K(),U(P,{key:0},[I(`span`,Vce,X(r.title)+` · сброс через`,1),(K(!0),U(P,null,S(r.rows,e=>(K(),U(`span`,{key:e.name,class:`quota-row`},[I(`span`,null,X(e.label),1),y(i.UsageMeter,{remaining:e.remaining,countdown:e.countdown,exhausted:e.limited,ticks:e.ticks,tone:e.tone},null,8,[`remaining`,`countdown`,`exhausted`,`ticks`,`tone`])]))),128)),r.interactive?(K(),U(`span`,Hce,`Клик — сменить лимит`)):D(`v-if`,!0)],64)):(K(),U(P,{key:1},[G(X(r.tooltip),1)],64))],8,Bce)]),_:3},8,[`as`,`type`,`tabindex`,`class`,`aria-label`,`aria-describedby`])}var W5=H(Rce,[[`render`,Uce],[`__scopeId`,`data-v-af120ece`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agents-integration/_/UsageIndicator.vue`]]),G5=de({}),K5=de({text:null,tone:null});function Wce(e,t){_(()=>{K5.text=e.value,K5.tone=t.value}),g(()=>{K5.text=null,K5.tone=null})}function q5(e,t,n){_(()=>{G5[e]={remaining:t.value,tone:n.value}}),g(()=>delete G5[e])}function J5(e,t={}){let n=ee(null),r=M(!1),i=t.intervalMs??6e4,a,o,s=!1;async function c(){if(!(s||o||document.hidden)){clearTimeout(a),o=new AbortController;try{let t=await fetch(typeof e==`function`?e():e,{signal:o.signal});if(!t.ok)throw Error(`Usage unavailable`);let i=await t.json();s||(n.value=i,r.value=!1)}catch{s||(r.value=!0)}finally{if(o=void 0,!s){let e=n.value&&t.nextCheckAt?.(n.value);a=setTimeout(c,Math.max(i,(e??0)-Date.now()))}}}}function l(){document.hidden||c()}return f(()=>{c(),document.addEventListener(`visibilitychange`,l)}),g(()=>{s=!0,clearTimeout(a),o?.abort(),document.removeEventListener(`visibilitychange`,l)}),{usage:n,failed:r,refresh:c}}var Gce={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Kce(e,t){return K(),U(`svg`,Gce,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1`}),I(`path`,{d:`M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4`})],-1)]])}var qce=L({name:`lucide-wallet`,render:Kce});async function Y5(e,t){let n=await fetch(e,{...t,headers:{"Content-Type":`application/json`}}),r=await n.json();if(!n.ok)throw Error(r.error||`Ошибка запроса`);return r}function Jce(){return Y5(`/api/providers`)}function Yce(e){return Y5(`/api/providers`,{method:`PUT`,body:JSON.stringify(e)})}function Xce(e){return Y5(`/api/providers/active`,{method:`PATCH`,body:JSON.stringify({id:e})})}function Zce(e){return Y5(`/api/providers/balance${e?`?id=${encodeURIComponent(e)}`:``}`)}async function Qce(e){let{models:t}=await Y5(`/api/providers/models`,{method:`POST`,body:JSON.stringify(e)});return t}var X5={deepseek:{thinking:`deepseek`,label:`DeepSeek`,name:`DeepSeek`,url:`https://api.deepseek.com`,model:`deepseek-chat`,keyPlaceholder:`sk-… с platform.deepseek.com`,hint:`Баланс аккаунта показывается в статусной строке и обновляется раз в минуту.`},qwencloud:{thinking:`qwen`,label:`Qwen Cloud`,name:`Qwen / DashScope`,url:`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,model:`qwen3.8-flash`,keyPlaceholder:`DASHSCOPE / QWENCLOUD`,hint:`Qwen Cloud не отдаёт баланс по ключу API: остаток смотрите в консоли QwenCloud.`},local:{thinking:`ollama`,label:`Локальный (Ollama, LM Studio…)`,name:`Локальный`,url:`http://localhost:11434/v1`,model:``,keyPlaceholder:`обычно не нужен`,hint:`Локальному провайдеру баланс не нужен, ключ обычно не требуется.`},custom:{thinking:`none`,label:`Другой OpenAI-compatible`,name:`Провайдер`,url:``,model:``,keyPlaceholder:`API key`,hint:`Для этого провайдера баланс недоступен.`}},Z5=Object.keys(X5),$ce=[{value:`none`,label:`Не передавать`},{value:`qwen`,label:`Qwen / DashScope (enable_thinking)`},{value:`vllm`,label:`vLLM, llama.cpp (chat_template_kwargs)`},{value:`deepseek`,label:`DeepSeek (thinking + reasoning_effort)`},{value:`ollama`,label:`Ollama, LM Studio (reasoning_effort, можно выключить)`},{value:`openai`,label:`OpenAI (reasoning_effort)`},{value:`openrouter`,label:`OpenRouter (reasoning)`}],Q5=de({providers:[],activeProviderId:null,keyDrafts:{},balances:{},remoteModels:{},fetchingModels:{},modelsError:{},revision:0,loading:!1,saving:!1,error:``});function $5(){let e=B(()=>Q5.providers),t=B(()=>Q5.activeProviderId),n=B(()=>Q5.providers.find(e=>e.id===Q5.activeProviderId)??Q5.providers[0]??null),r=B(()=>Q5.loading),i=B(()=>Q5.saving),a=B(()=>Q5.error),o=B(()=>!!n.value?.url);function s(e){Q5.providers=e.providers,Q5.activeProviderId=e.activeProviderId,Q5.keyDrafts={},Q5.revision++}async function c(e){try{Q5.balances[e]=await Zce(e)}catch{Q5.balances[e]=void 0}}function l(){return Promise.all(Q5.providers.filter(e=>e.kind===`deepseek`).map(e=>c(e.id)))}async function u(){Q5.loading=!0,Q5.error=``;try{s(await Jce())}catch(e){Q5.error=e instanceof Error?e.message:`Не удалось загрузить провайдеров`}finally{Q5.loading=!1}}async function d(){Q5.saving=!0,Q5.error=``;try{s(await Yce({activeProviderId:Q5.activeProviderId,providers:Q5.providers.map(e=>({...e,apiKey:Q5.keyDrafts[e.id]}))}))}catch(e){Q5.error=e instanceof Error?e.message:`Не удалось сохранить`}finally{Q5.saving=!1}}async function f(e){Q5.activeProviderId=e;try{s(await Xce(e))}catch(e){Q5.error=e instanceof Error?e.message:`Не удалось выбрать провайдера`}}function p(e=`custom`){let t=`p${Mt().slice(0,8)}`,n=X5[e];return Q5.providers.push({id:t,kind:e,thinkingStyle:n.thinking,name:e===`custom`?`Провайдер ${Q5.providers.length+1}`:n.name,url:n.url,enabled:!0,models:n.model?[{id:n.model,alias:n.model}]:[],hasApiKey:!1}),Q5.activeProviderId||=t,t}function m(e){Q5.providers=Q5.providers.filter(t=>t.id!==e),delete Q5.keyDrafts[e],Q5.activeProviderId===e&&(Q5.activeProviderId=Q5.providers[0]?.id??null),d()}function h(e,t){Q5.keyDrafts[e]=t}function g(e,t){let n=Q5.providers.find(t=>t.id===e);n&&Object.assign(n,t)}async function _(e){let t=Q5.providers.find(t=>t.id===e);if(t){Q5.fetchingModels[e]=!0,Q5.modelsError[e]=void 0;try{Q5.remoteModels[e]=await Qce({id:e,url:t.url,apiKey:Q5.keyDrafts[e]})}catch(t){Q5.modelsError[e]=t instanceof Error?t.message:`Не удалось получить список`}finally{Q5.fetchingModels[e]=!1}}}function v(e,t,n=``){let r=Q5.providers.find(t=>t.id===e),i=t.trim();if(!r||!i)return;let a=new Set(r.models.map(e=>e.alias)),o=n.trim()||i;for(let e=2;a.has(o);e++)o=`${n.trim()||i}-${e}`;r.models.push({id:i,alias:o})}function y(e,t){let n=Q5.providers.find(t=>t.id===e);n&&(n.models=n.models.filter(e=>e.id!==t))}function b(e,t,n){let r=Q5.providers.find(t=>t.id===e)?.models.find(e=>e.id===t);r&&(r.alias=n)}function x(e,t,n){let r=Q5.providers.find(t=>t.id===e)?.models.find(e=>e.id===t);r&&(r.contextTokens=n)}function S(e,t,n,r){let i=Q5.providers.find(t=>t.id===e)?.models.find(e=>e.id===t);i&&(i.price={...i.price,[n]:r})}function C(e,t,n){let r=Q5.providers.find(t=>t.id===e)?.models.find(e=>e.id===t);r&&(r.thinking=n?void 0:!1)}return{fetchModels:_,setModelThinking:C,setModelContext:x,setModelPrice:S,registerModel:v,unregisterModel:y,renameModel:b,remoteModels:B(()=>Q5.remoteModels),fetchingModels:B(()=>Q5.fetchingModels),modelsError:B(()=>Q5.modelsError),providers:e,activeProviderId:t,activeProvider:n,loading:r,saving:i,error:a,ready:o,revision:B(()=>Q5.revision),balances:B(()=>Q5.balances),loadBalance:c,loadBalances:l,keyDrafts:B(()=>Q5.keyDrafts),load:u,save:d,setActive:f,addProvider:p,removeProvider:m,setKeyDraft:h,patchProvider:g}}var e7={CNY:`¥`,USD:`$`};function t7(e){return e.map(({currency:e,total:t})=>e7[e]?`${e7[e]}${t}`:`${t} ${e}`).join(` · `)}function ele(e,t){return t7([{currency:e,total:t,granted:``,toppedUp:``}])}var n7=e=>`provider:${e}`,tle=e=>e.startsWith(`provider:`)?e.slice(9):void 0,nle=W({__name:`ProviderPanel`,props:{providerId:{type:String,required:!1}},emits:[`open`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{providers:a,activeProviderId:o,error:s,saving:c,keyDrafts:l,save:u,setActive:d,addProvider:f,removeProvider:p,setKeyDraft:m,patchProvider:h,balances:g,loadBalance:_,fetchModels:v,registerModel:y,unregisterModel:b,renameModel:x,setModelContext:S,setModelPrice:C,setModelThinking:w,remoteModels:T,fetchingModels:E,modelsError:D}=$5(),O=B(()=>a.value.find(e=>e.id===r.providerId)),k=B(()=>a.value.filter(e=>e.enabled).length),A=B(()=>a.value.reduce((e,t)=>e+(t.enabled?t.models.length:0),0)),j=B(()=>X5[O.value?.kind??`custom`]),N=B(()=>O.value?g.value[O.value.id]:void 0),ee=B(()=>O.value?.kind===`deepseek`),te=[[`input`,`вход`],[`output`,`выход`],[`cacheRead`,`из кэша`]],P=M(``),ne=B(()=>{let e=O.value;if(!e)return[];let t=e.models.map(e=>({...e,on:!0})),n=new Set(e.models.map(e=>e.id)),r=(T.value[e.id]??[]).filter(e=>!n.has(e)).map(e=>({id:e,alias:e,on:!1})),i=P.value.trim().toLowerCase();return[...t,...r].filter(e=>!i||e.id.toLowerCase().includes(i)||e.alias.toLowerCase().includes(i))}),F=B(()=>!!(O.value&&E.value[O.value.id])),I=B(()=>{let e=new Set;return(O.value?.models??[]).some(t=>{let n=t.alias.trim()||t.id;return e.size===e.add(n).size})}),re=B(()=>{let e=O.value;if(!e)return 0;let t=new Set(e.models.map(e=>e.id));return e.models.length+(T.value[e.id]??[]).filter(e=>!t.has(e)).length}),ie=M(``);function L(e,t,n){if(!O.value)return;let r=n.trim()===``?void 0:Number(n);C(O.value.id,e,t,Number.isFinite(r)?r:void 0)}function R(e,t){O.value&&S(O.value.id,e,Number(t)||void 0)}function z(e){O.value&&h(O.value.id,{kind:e,thinkingStyle:X5[e].thinking})}function ae(e,t){O.value&&(t?y(O.value.id,e.id):b(O.value.id,e.id))}function oe(){O.value&&y(O.value.id,ie.value),ie.value=``}function se(e){let t=f(e);return i(`open`,t),t}function ce(e){p(e),i(`open`,void 0)}let le=Je(`provider-settings`,()=>({surface:`settings`,provider:r.providerId??null}));le.scope.registerCommand({id:`ide.providers.add`,title:`Добавить провайдера`,description:`Добавляет провайдера из пресета: deepseek, qwencloud, local или custom (по умолчанию custom). Подставляет адрес и модель; ключ вводится в форме, затем «сохранить».`,arguments:{kind:`deepseek | qwencloud | local | custom`},run:e=>{let t=J(e).kind??`custom`;if(!Z5.includes(t))throw Error(`Неизвестный тип провайдера`);return se(t)}}),le.scope.registerCommand({id:`ide.providers.models.refresh`,title:`Загрузить список моделей провайдера`,description:`Запрашивает у выбранного провайдера список моделей (GET /models по схеме OpenAI) и показывает их в карточке; затем модели регистрируются командой ide.providers.models.register.`,enabled:()=>!!O.value?.url,run:async()=>{O.value&&await v(O.value.id)}}),le.scope.registerCommand({id:`ide.providers.models.register`,title:`Зарегистрировать модель провайдера`,description:`Добавляет модель выбранного провайдера: model — id у провайдера, alias — имя, под которым её увидят агент и шлюз (по умолчанию тот же id). Затем «сохранить».`,arguments:{model:`id модели у провайдера`,alias:`имя (необязательно)`},enabled:()=>!!O.value,run:e=>{let{model:t,alias:n}=J(e);if(!O.value||typeof t!=`string`||!t.trim())throw Error(`Укажите model`);y(O.value.id,t,typeof n==`string`?n:``)}}),le.scope.registerCommand({id:`ide.providers.enabled.set`,title:`Включить или выключить провайдера`,description:`Включённый провайдер предлагает свои зарегистрированные модели агенту и шлюзу; включённых может быть сколько угодно. enabled: true | false. Затем «сохранить».`,arguments:{enabled:`true | false`},enabled:()=>!!O.value,run:e=>{O.value&&h(O.value.id,{enabled:String(J(e).enabled)!==`false`})}}),le.scope.registerCommand({id:`ide.providers.balance.refresh`,title:`Обновить баланс провайдера`,description:`Запрашивает баланс выбранного провайдера (сейчас только DeepSeek; у Qwen Cloud и локальных баланса по ключу нет).`,enabled:()=>ee.value,run:async()=>{O.value&&await _(O.value.id)}});function ue(){return O.value?l.value[O.value.id]??``:``}let de={props:r,emit:i,providers:a,activeProviderId:o,error:s,saving:c,keyDrafts:l,save:u,setActive:d,addProvider:f,removeProvider:p,setKeyDraft:m,patchProvider:h,balances:g,loadBalance:_,fetchModels:v,registerModel:y,unregisterModel:b,renameModel:x,setModelContext:S,setModelPrice:C,setModelThinking:w,remoteModels:T,fetchingModels:E,modelsError:D,selected:O,enabledCount:k,modelCount:A,preset:j,balance:N,hasBalance:ee,PRICE_FIELDS:te,filter:P,rows:ne,fetching:F,duplicates:I,offered:re,manual:ie,setPrice:L,setContext:R,changeKind:z,toggle:ae,addManual:oe,add:se,remove:ce,commands:le,keyDraft:ue,UiMessage:Te,UiControl:Se,UiStack:Ed,UiInline:Be,UiFormGrid:n4,UiScrollArea:Tp,UiHint:we,UiButton:q,UiField:Re,get PROVIDER_KINDS(){return Z5},get PROVIDER_PRESETS(){return X5},get THINKING_STYLES(){return $ce},get formatAmount(){return ele}};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}}),rle=[`value`],ile=[`value`],ale=[`value`],ole={class:`kicker`},sle={class:`mid`},cle={key:3,class:`price`},lle={class:`price-label`},ule={class:`meta`},dle={class:`switch`};function fle(t,n,r,i,a,o){return K(),F(i.UiStack,{as:`section`,gap:4},{default:e(()=>[i.error?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0),i.selected?(K(),F(i.UiStack,{key:2,class:`form`,gap:3},{default:e(()=>[y(i.UiFormGrid,{layout:`wide-end`},{default:e(()=>[y(i.UiField,{label:`имя`},{default:e(({control:e})=>[y(i.UiControl,R(e,{"aria-label":`Имя провайдера`,value:i.selected.name,onInput:n[0]||=e=>i.patchProvider(i.selected.id,{name:e.target.value})}),null,16,[`value`])]),_:1}),y(i.UiField,{label:`тип`},{default:e(({control:t})=>[y(i.UiControl,R({as:`select`},t,{"aria-label":`Тип провайдера`,value:i.selected.kind,onChange:n[1]||=e=>i.changeKind(e.target.value)}),{default:e(()=>[(K(!0),U(P,null,S(i.PROVIDER_KINDS,e=>(K(),U(`option`,{key:e,value:e},X(i.PROVIDER_PRESETS[e].label),9,rle))),128))]),_:1},16,[`value`])]),_:1})]),_:1}),y(i.UiField,{label:`размышление`},{default:e(({control:t})=>[y(i.UiControl,R({as:`select`},t,{"aria-label":`Способ включать размышление модели`,value:i.selected.thinkingStyle,onChange:n[2]||=e=>i.patchProvider(i.selected.id,{thinkingStyle:e.target.value})}),{default:e(()=>[(K(!0),U(P,null,S(i.THINKING_STYLES,e=>(K(),U(`option`,{key:e.value,value:e.value},X(e.label),9,ile))),128))]),_:1},16,[`value`])]),_:1}),y(i.UiField,{label:`запасная модель`},{default:e(({control:t})=>[y(i.UiControl,R({as:`select`},t,{"aria-label":`Запасная модель при сбоях провайдера`,value:i.selected.fallbackModel??``,onChange:n[3]||=e=>i.patchProvider(i.selected.id,{fallbackModel:e.target.value})}),{default:e(()=>[n[15]||=I(`option`,{value:``},`Нет`,-1),(K(!0),U(P,null,S(i.selected.models,e=>(K(),U(`option`,{key:e.id,value:e.alias},X(e.alias),9,ale))),128))]),_:1},16,[`value`])]),_:1}),y(i.UiFormGrid,{layout:`wide-end`},{default:e(()=>[y(i.UiField,{label:`url`},{default:e(({control:e})=>[y(i.UiControl,R(e,{"aria-label":`URL API`,value:i.selected.url,spellcheck:`false`,placeholder:`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,onInput:n[4]||=e=>i.patchProvider(i.selected.id,{url:e.target.value})}),null,16,[`value`])]),_:1}),y(i.UiField,{label:`api key`},{default:e(({control:e})=>[y(i.UiControl,R(e,{"aria-label":`API key`,value:i.keyDraft(),type:`password`,autocomplete:`off`,placeholder:i.selected.hasApiKey?`сохранён — введите новый`:i.preset.keyPlaceholder,onInput:n[5]||=e=>i.setKeyDraft(i.selected.id,e.target.value)}),null,16,[`value`,`placeholder`])]),_:1})]),_:1}),y(i.UiHint,null,{default:e(()=>[G(X(i.preset.hint),1)]),_:1}),y(i.UiStack,{class:`models`,gap:2},{default:e(()=>[y(i.UiInline,{wrap:``,justify:`between`},{default:e(()=>[I(`span`,ole,[G(` модели · `+X(i.selected.models.length)+` `,1),i.remoteModels[i.selected.id]?(K(),U(P,{key:0},[G(` из `+X(i.offered),1)],64)):D(`v-if`,!0)]),y(i.UiButton,{appearance:`outline`,tone:`muted`,shape:`chip`,disabled:i.fetching||!i.selected.url,onClick:n[6]||=e=>i.commands.run(`ide.providers.models.refresh`)},{default:e(()=>[G(X(i.fetching?`загрузка…`:`загрузить список`),1)]),_:1},8,[`disabled`])]),_:1}),i.modelsError[i.selected.id]?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`,flush:``,role:`alert`},{default:e(()=>[G(X(i.modelsError[i.selected.id]),1)]),_:1})):D(`v-if`,!0),i.duplicates?(K(),F(i.UiMessage,{key:1,tone:`danger`,size:`xs`,flush:``},{default:e(()=>[...n[16]||=[G(` Имена моделей должны различаться: повторное имя при сохранении отбросится. `,-1)]]),_:1})):D(`v-if`,!0),i.rows.length>8||i.filter?(K(),F(i.UiControl,{key:2,modelValue:i.filter,"onUpdate:modelValue":n[7]||=e=>i.filter=e,"aria-label":`Фильтр моделей`,placeholder:`фильтр`,spellcheck:`false`},null,8,[`modelValue`])):D(`v-if`,!0),i.rows.length?(K(),F(i.UiScrollArea,{key:3,class:`list`},{default:e(()=>[(K(!0),U(P,null,S(i.rows,e=>(K(),U(`label`,{key:e.id,class:Y([`row`,{off:!e.on}])},[y(i.UiControl,{type:`checkbox`,"aria-label":`Зарегистрировать ${e.id}`,"model-value":e.on,"onUpdate:modelValue":t=>i.toggle(e,!!t)},null,8,[`aria-label`,`model-value`,`onUpdate:modelValue`]),I(`span`,sle,X(e.id),1),e.on?(K(),F(i.UiControl,{key:0,class:`alias`,mono:``,"aria-label":`Имя модели ${e.id}`,value:e.alias,placeholder:e.id,spellcheck:`false`,onInput:t=>i.renameModel(i.selected.id,e.id,t.target.value)},null,8,[`aria-label`,`value`,`placeholder`,`onInput`])):D(`v-if`,!0),e.on?(K(),F(i.UiControl,{key:1,class:`ctx`,mono:``,type:`number`,min:`1000`,step:`1000`,"aria-label":`Окно контекста ${e.id}, токенов`,value:e.contextTokens,placeholder:`окно, токенов`,onInput:t=>i.setContext(e.id,t.target.value)},null,8,[`aria-label`,`value`,`onInput`])):D(`v-if`,!0),e.on?(K(),F(i.UiControl,{key:2,class:`think`,type:`checkbox`,title:`Модель умеет размышлять: над строкой ввода агента появится переключатель`,"aria-label":`Размышление ${e.id}`,"model-value":e.thinking!==!1,"onUpdate:modelValue":t=>i.setModelThinking(i.selected.id,e.id,!!t)},null,8,[`aria-label`,`model-value`,`onUpdate:modelValue`])):D(`v-if`,!0),e.on?(K(),U(`span`,cle,[(K(),U(P,null,S(i.PRICE_FIELDS,([t,n])=>I(`span`,{key:t,class:`price-field`},[I(`span`,lle,X(n),1),y(i.UiControl,{mono:``,type:`number`,min:`0`,step:`any`,"aria-label":`Цена ${n} ${e.id}, за 1 млн токенов`,value:e.price?.[t],placeholder:`—`,onInput:n=>i.setPrice(e.id,t,n.target.value)},null,8,[`aria-label`,`value`,`onInput`])])),64))])):D(`v-if`,!0)],2))),128))]),_:1})):i.selected.models.length?D(`v-if`,!0):(K(),F(i.UiHint,{key:4},{default:e(()=>[...n[17]||=[G(` Моделей нет: загрузите список у провайдера или добавьте id вручную. `,-1)]]),_:1})),y(i.UiInline,{gap:2},{default:e(()=>[y(i.UiControl,{modelValue:i.manual,"onUpdate:modelValue":n[8]||=e=>i.manual=e,grow:``,"aria-label":`Id модели`,placeholder:`добавить id вручную`,spellcheck:`false`,onKeydown:ye(N(i.addManual,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),y(i.UiButton,{disabled:!i.manual.trim(),onClick:i.addManual},{default:e(()=>[...n[18]||=[G(`+`,-1)]]),_:1},8,[`disabled`])]),_:1}),y(i.UiHint,null,{default:e(()=>[...n[19]||=[G(` Имя — под которым модель видна агенту и шлюзу; по умолчанию совпадает с id. Окно контекста нужно кольцу заполнения в чате агента; без него берётся 128000. Цена — за 1 млн токенов в валюте тарифа (вход и выход обязательны, «из кэша» по умолчанию равна входу): с ней под ответом агента видна его стоимость и стоимость всего чата. `,-1)]]),_:1})]),_:1}),i.hasBalance?(K(),F(i.UiStack,{key:0,class:`balance`,gap:1},{default:e(()=>[y(i.UiInline,{wrap:``,justify:`between`},{default:e(()=>[n[21]||=I(`span`,{class:`kicker`},`баланс`,-1),y(i.UiButton,{appearance:`outline`,tone:`muted`,shape:`chip`,onClick:n[9]||=e=>i.commands.run(`ide.providers.balance.refresh`)},{default:e(()=>[...n[20]||=[G(` обновить `,-1)]]),_:1})]),_:1}),i.balance?.status===`ready`?(K(),U(P,{key:0},[(K(!0),U(P,null,S(i.balance.entries,t=>(K(),F(i.UiInline,{key:t.currency,wrap:``,gap:3},{default:e(()=>[I(`strong`,null,X(i.formatAmount(t.currency,t.total)),1),I(`span`,ule,` пополнено `+X(i.formatAmount(t.currency,t.toppedUp))+` · подарочные `+X(i.formatAmount(t.currency,t.granted)),1)]),_:2},1024))),128)),i.balance.available===!1?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`,flush:``},{default:e(()=>[...n[22]||=[G(` Провайдер сообщает, что средств для вызовов недостаточно. `,-1)]]),_:1})):D(`v-if`,!0)],64)):(K(),F(i.UiHint,{key:1},{default:e(()=>[G(X(i.balance?.message??(i.selected.hasApiKey?`загрузка…`:`Сохраните ключ, чтобы увидеть баланс.`)),1)]),_:1}))]),_:1})):D(`v-if`,!0),y(i.UiInline,{wrap:``,justify:`between`},{default:e(()=>[y(i.UiInline,{wrap:``,gap:2},{default:e(()=>[I(`label`,dle,[y(i.UiControl,{type:`checkbox`,"model-value":i.selected.enabled,"onUpdate:modelValue":n[10]||=e=>i.commands.run(`ide.providers.enabled.set`,{enabled:!!e})},null,8,[`model-value`]),n[23]||=G(` включён `,-1)]),y(i.UiButton,{appearance:`outline`,tone:`muted`,shape:`chip`,title:`Провайдер по умолчанию: его баланс в статусной строке и модель, если выбранной нет`,disabled:i.selected.id===i.activeProviderId,onClick:n[11]||=e=>i.setActive(i.selected.id)},{default:e(()=>[...n[24]||=[G(` по умолчанию `,-1)]]),_:1},8,[`disabled`])]),_:1}),y(i.UiInline,{wrap:``,gap:2},{default:e(()=>[y(i.UiButton,{tone:`danger`,onClick:n[12]||=e=>i.remove(i.selected.id)},{default:e(()=>[...n[25]||=[G(`удалить`,-1)]]),_:1}),y(i.UiButton,{appearance:`solid`,disabled:i.saving,onClick:i.save},{default:e(()=>[G(X(i.saving?`…`:`сохранить`),1)]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1})]),_:1})):(K(),U(P,{key:1},[y(i.UiHint,null,{default:e(()=>[...n[13]||=[G(` Провайдеры OpenAI-compatible API перечислены слева: у каждого своя страница. Включённых может быть сколько угодно, агент выбирает любую их модель. `,-1)]]),_:1}),y(i.UiInline,{wrap:``,gap:2},{default:e(()=>[(K(!0),U(P,null,S(i.PROVIDER_KINDS,t=>(K(),F(i.UiButton,{key:t,title:i.PROVIDER_PRESETS[t].label,onClick:e=>i.commands.run(`ide.providers.add`,{kind:t})},{default:e(()=>[G(` + `+X(t===`custom`?`другой`:i.PROVIDER_PRESETS[t].name.split(` `)[0]),1)]),_:2},1032,[`title`,`onClick`]))),128))]),_:1}),i.providers.length?(K(),F(i.UiHint,{key:0},{default:e(()=>[G(` Включено `+X(i.enabledCount)+` из `+X(i.providers.length)+` · моделей `+X(i.modelCount),1)]),_:1})):(K(),F(i.UiHint,{key:1},{default:e(()=>[...n[14]||=[G(`Провайдеров нет: добавьте первого кнопкой выше.`,-1)]]),_:1}))],64))]),_:1})}var ple=H(nle,[[`render`,fle],[`__scopeId`,`data-v-52a1c319`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/provider/ui/ProviderPanel.vue`]]),mle=W({__name:`ProviderBalanceIndicator`,setup(e,{expose:t}){t();let{activeProviderId:n,revision:r}=$5(),{usage:i,failed:a,refresh:o}=J5(`/api/providers/balance`,{nextCheckAt:e=>e.checkedAt+6e4});E([n,r],()=>void o());let s=B(()=>i.value&&i.value.status!==`unsupported`),c=B(()=>i.value?.status===`ready`),l=B(()=>i.value&&c.value?t7(i.value.entries)||`0`:`—`),u=B(()=>i.value?.available===!1?`over`:`normal`),d=B(()=>{let e=i.value;if(!e||!c.value)return e?.message??(a.value?`Баланс провайдера недоступен`:`Баланс провайдера`);let t=e.entries.map(e=>`${e.currency}: ${e.total} (пополнено ${e.toppedUp}, подарочные ${e.granted})`);return e.available===!1&&t.push(`Средств недостаточно для вызовов`),[`Баланс провайдера`,...t].join(`
|
|
178
|
-
`)});Wce(B(()=>c.value&&i.value?l.value:null),u);let f=Je(`providerBalance:${V()}`,()=>({surface:`statusBar`}));f.scope.registerCommand({id:`ide.providers.balance.show`,title:`Обновить баланс активного провайдера`,description:`Заново запрашивает баланс активного провайдера для индикатора в статусной строке (сейчас только DeepSeek).`,run:o});let p={activeProviderId:n,revision:r,usage:i,failed:a,refresh:o,shown:s,ready:c,text:l,tone:u,tooltip:d,commands:f,UsageIndicator:W5,get IconWallet(){return qce}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}});function hle(t,n,r,i,a,o){return i.shown||i.failed?(K(),F(i.UsageIndicator,{key:0,class:`provider-balance`,title:`Баланс`,tooltip:i.tooltip,remaining:null,"value-text":i.text,tone:i.tone,"meter-label":`Баланс активного провайдера`,rows:[],interactive:``,onCycle:n[0]||=e=>i.commands.run(`ide.providers.balance.show`)},{icon:e(()=>[y(i.IconWallet)]),_:1},8,[`tooltip`,`value-text`,`tone`])):D(`v-if`,!0)}var gle=H(mle,[[`render`,hle],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agents-integration/provider/ui/ProviderBalanceIndicator.vue`]]),_le=W({__name:`AgentUsageIndicators`,props:{enabled:{type:Function,required:!1}},setup(e,{expose:t}){t();let n=e,r={props:n,agents:B(()=>st().flatMap(e=>e.usage&&(n.enabled?.(e.program)??!0)?[{...e,usage:e.usage}]:[])),get ProviderBalanceIndicator(){return gle}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function vle(e,t,n,r,i,a){return K(),U(P,null,[(K(!0),U(P,null,S(r.agents,e=>(K(),F(C(e.usage),{key:e.backend}))),128)),y(r.ProviderBalanceIndicator)],64)}var r7=H(_le,[[`render`,vle],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agents-integration/status-bar/AgentUsageIndicators.vue`]]),yle=W({__name:`NewSessionMenu`,props:{busy:{type:Boolean,required:!0},agent:{type:Boolean,required:!1},projectId:{type:String,required:!0}},emits:[`command`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{modeOf:a,setMode:o,isEnabled:s}=IC(),c=M([]),l=B(()=>c.value.flatMap(e=>{if(e.kind!==`chat`)return[];let t=xt(e.agent);return!t||!s(t.program)?[]:[{role:e,agent:t,title:e.name,caption:`${t.title} · роль`}]}));async function u(){try{c.value=await I_(r.projectId)}catch{c.value=[]}}let d=B(()=>[{program:`shell`,title:`Shell`,caption:`Пустой терминал в папке проекта`,icon:dD},...DC().map(e=>({program:e.program,title:e.title,caption:e.caption,icon:e.icon}))]),f=AC(),p=Ff({anchor:`left`,initialFocus:`.row:not(:disabled)`,items:`.row`,closeOnTab:!0}),{open:m,toggle:h,close:g,active:_}=p;E(m,e=>{e&&u()});let v=V(),y=B(()=>d.value.filter(e=>e.program===`shell`||s(e.program)).map(e=>{let t=G5[e.program];return{...e,usage:t?.remaining==null?void 0:t}})),b=Pf(),x=e=>r.agent&&kC(e),S=e=>o(e,a(e)===`gui`?`tui`:`gui`);function C(){g(),i(`command`,`ide.workbench.agent.open`)}function w(e){r.busy||(g(),i(`command`,`ide.agent.role.open`,{role:e}))}function T(e){r.busy||(g(),x(e)&&a(e)===`gui`?i(`command`,OC(e)):i(`command`,`ide.workbench.terminal.new`,{program:e}))}function D(e){return e===`spare`?`info`:e===`hot`?`warning`:e===`over`?`danger`:`neutral`}let O={props:r,emit:i,modeOf:a,setMode:o,isEnabled:s,chatRoles:c,roleRows:l,loadRoles:u,programs:d,builtin:f,menu:p,open:m,toggle:h,close:g,active:_,listId:v,rows:y,compact:b,canOpenChat:x,toggleMode:S,openChat:C,pickRole:w,pick:T,hintTone:D,UiIslandFooter:uh,UiIslandLabel:sh,UiIslandHeader:Cd,UiStack:Ed,UiBadge:kd,UiActionRow:wl,UiActionCopy:Md,UiIsland:Yd,UiButton:q,get AgentUsageIndicators(){return r7},get providerBalanceSummary(){return K5},get IconPlus(){return Dy},get IconMessage(){return H$},get IconTerminal(){return dD},get guiCommand(){return OC}};return Object.defineProperty(O,"__isScriptSetup",{enumerable:!1,value:!0}),O}}),ble={key:0,hidden:``},xle=[`aria-pressed`,`aria-label`,`title`,`onClick`];function Sle(t,n,r,i,a,o){return K(),U(P,null,[i.compact&&i.open?(K(),U(`span`,ble,[y(i.AgentUsageIndicators,{enabled:i.isEnabled},null,8,[`enabled`])])):D(`v-if`,!0),I(`span`,{ref:i.menu.trigger,class:`new-session`},[y(i.UiButton,{shape:`icon`,size:`sm`,title:`Новая сессия`,"aria-label":`Новая сессия`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.menu.id:void 0,onClick:n[0]||=e=>i.toggle()},{default:e(()=>[y(i.IconPlus,{"aria-hidden":`true`})]),_:1},8,[`aria-expanded`,`aria-controls`])],512),y(i.UiIsland,{menu:i.menu,label:`Новая сессия`},{default:e(()=>[y(i.UiIslandHeader,{anchor:`start`,class:`island-head`,"aria-label":`Закрыть`,onClick:n[1]||=e=>i.toggle(!1)},{default:e(()=>[y(i.IconPlus,{"aria-hidden":`true`}),n[3]||=I(`span`,null,`Новая сессия`,-1)]),_:1}),i.roleRows.length?(K(),U(P,{key:0},[y(i.UiIslandLabel,{divided:``},{default:e(()=>[...n[4]||=[G(`Роли`,-1)]]),_:1}),y(i.UiStack,{flow:`flex`,gap:`none`,class:`list`,role:`menu`,"aria-label":`Роли агентов`},{default:e(()=>[(K(!0),U(P,null,S(i.roleRows,(t,n)=>(K(),U(`div`,{key:t.role.id,class:`entry`},[y(i.UiActionRow,{class:`row`,role:`menuitem`,disabled:r.busy,tabindex:n===i.active?0:-1,"data-command":`ide.agent.role.open`,onMousemove:e=>i.active=n,onClick:e=>i.pickRole(t.role.id)},{default:e(()=>[(K(),F(C(t.agent.icon),{class:`row-icon`,"aria-hidden":`true`})),y(i.UiActionCopy,{title:t.title,description:t.caption},null,8,[`title`,`description`])]),_:2},1032,[`disabled`,`tabindex`,`onMousemove`,`onClick`])]))),128))]),_:1}),y(i.UiIslandLabel,null,{default:e(()=>[...n[5]||=[G(`Агенты`,-1)]]),_:1})],64)):D(`v-if`,!0),y(i.UiStack,{flow:`flex`,gap:`none`,id:i.listId,class:`list`,role:`menu`},{default:e(()=>[(K(!0),U(P,null,S(i.rows,(t,n)=>(K(),U(`div`,{key:t.program,class:`entry`},[y(i.UiActionRow,{class:`row`,role:`menuitem`,disabled:r.busy,tabindex:i.roleRows.length+n===i.active?0:-1,"data-command":i.canOpenChat(t.program)&&i.modeOf(t.program)===`gui`?i.guiCommand(t.program):`ide.workbench.terminal.new`,onMousemove:e=>i.active=i.roleRows.length+n,onClick:e=>i.pick(t.program)},{default:e(()=>[(K(),F(C(t.icon),{class:`row-icon`,"aria-hidden":`true`})),y(i.UiActionCopy,{title:t.title,description:i.canOpenChat(t.program)&&i.modeOf(t.program)===`gui`?`Графический чат вместо терминала`:t.caption},null,8,[`title`,`description`]),t.usage?(K(),F(i.UiBadge,{key:0,class:`hint`,mono:``,tone:i.hintTone(t.usage.tone)},{default:e(()=>[G(X(t.usage.remaining)+`%`,1)]),_:2},1032,[`tone`])):D(`v-if`,!0)]),_:2},1032,[`disabled`,`tabindex`,`data-command`,`onMousemove`,`onClick`]),i.canOpenChat(t.program)?(K(),U(`button`,{key:0,type:`button`,class:`mode`,"aria-pressed":i.modeOf(t.program)===`gui`,"aria-label":`${t.title}: ${i.modeOf(t.program)===`gui`?`графический чат`:`терминал`}. Переключить режим`,title:i.modeOf(t.program)===`gui`?`Графический чат — нажмите, чтобы вернуть терминал`:`Терминал — нажмите, чтобы открывать графический чат`,onClick:e=>i.toggleMode(t.program)},[i.modeOf(t.program)===`gui`?(K(),F(i.IconMessage,{key:0,"aria-hidden":`true`})):(K(),F(i.IconTerminal,{key:1,"aria-hidden":`true`}))],8,xle)):D(`v-if`,!0)]))),128))]),_:1},8,[`id`]),r.agent&&i.builtin?(K(),U(P,{key:1},[y(i.UiIslandLabel,{divided:``},{default:e(()=>[G(X(i.builtin.title),1)]),_:1}),y(i.UiActionRow,{class:`row`,role:`menuitem`,"data-command":`ide.workbench.agent.open`,tabindex:i.active===i.roleRows.length+i.rows.length?0:-1,onMousemove:n[2]||=e=>i.active=i.roleRows.length+i.rows.length,onClick:i.openChat},{default:e(()=>[(K(),F(C(i.builtin.icon),{class:`row-icon`,"aria-hidden":`true`})),y(i.UiActionCopy,{title:i.builtin.title,description:i.builtin.caption},null,8,[`title`,`description`]),i.providerBalanceSummary.text?(K(),F(i.UiBadge,{key:0,class:`hint`,mono:``,tone:i.hintTone(i.providerBalanceSummary.tone)},{default:e(()=>[G(X(i.providerBalanceSummary.text),1)]),_:1},8,[`tone`])):D(`v-if`,!0)]),_:1},8,[`tabindex`])],64)):D(`v-if`,!0),y(i.UiIslandFooter,{"hide-on-compact":``},{default:e(()=>[...n[6]||=[G(`↑↓ выбрать · Enter запустить сессию в папке проекта`,-1)]]),_:1})]),_:1},8,[`menu`])],64)}var Cle=H(yle,[[`render`,Sle],[`__scopeId`,`data-v-6dfe239a`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/NewSessionMenu.vue`]]),wle=W({__name:`PanelHost`,props:{id:{type:String,required:!0},registry:{type:null,required:!0}},setup(e,{expose:t}){t();let n=e,r=M(),i=B(()=>r.value?.element);f(()=>n.registry.register(n.id,i.value)),g(()=>n.registry.unregister(n.id,i.value));let a={props:n,panel:r,element:i,UiPanel:sn};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}});function Tle(e,t,n,r,i,a){return K(),F(r.UiPanel,{as:`div`,sizing:`flex`,ref:`panel`,class:`panel-host`},null,512)}var Ele=H(wle,[[`render`,Tle],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/PanelHost.vue`]]),Dle={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ole(e,t){return K(),U(`svg`,Dle,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`12`,cy:`12`,r:`10`}),I(`path`,{d:`m9 15l6-6`})],-1)]])}var kle=L({name:`lucide-circle-slash`,render:Ole}),Ale=W({__name:`WorkbenchDock`,props:{projectId:{type:String,required:!0},mobile:{type:Boolean,required:!1},mobileSurface:{type:String,required:!1},workbench:{type:null,required:!0},files:{type:null,required:!0},tabActions:{type:Function,required:!0},panelHosts:{type:null,required:!0},gutterRevision:{type:Number,required:!0},tabs:{type:Array,required:!0},terminalsBusy:{type:Boolean,required:!0},agent:{type:Boolean,required:!1}},emits:[`command`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,{fileOf:a,terminals:o,terminalPanels:s}=r.workbench,c=B5(),l=H5(),u=e=>e.virtual?c.views[e.virtual]:void 0,d=B(()=>r.tabs.filter(e=>u(e)?.keepAlive)),f={props:r,emit:i,fileOf:a,terminals:o,terminalPanels:s,workspaceTabs:c,host:l,viewOf:u,kept:d,isKept:e=>d.value.some(t=>t.key===e),hostOf:e=>r.panelHosts.hosts[e]??null,UiSpinner:De,UiPanel:sn,UiButton:q,UiEmpty:am,IconFinishFlag:kae,get DockView(){return vV},get TerminalView(){return YV},get ActivityIsland(){return vE},FilePanel:jce,NewSessionMenu:Cle,PanelHost:Ele,TabReadoutScope:U5,get IconDiff(){return JD},get IconRestart(){return hm},get IconFailed(){return kle}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}}),jle={class:`keep-alive`,hidden:``};function Mle(t,n,r,i,a,o){return K(),U(P,null,[y(i.DockView,{layout:r.workbench.layout.value,"onUpdate:layout":n[2]||=e=>r.workbench.layout.value=e,mobile:r.mobile,"mobile-surface":r.mobileSurface,"terminal-panel":e=>i.terminalPanels.has(e)||e.startsWith(`terminal:`),describe:r.workbench.describePanel,"project-id":r.projectId,"command-namespace":`ide.workbench.tabs`,"tab-actions":r.tabActions,"accepts-drop":r.files.acceptsFileDrop,onSelect:r.workbench.selectPanel,onClose:r.workbench.closePanel,onCloseMany:r.workbench.closeManyPanels,onRename:r.workbench.renamePanel,onPin:r.files.pinPreview,onDrop:r.files.dropFiles},{panel:e(({id:e,focused:t})=>[i.isKept(e)?(K(),F(i.PanelHost,{key:0,id:e,registry:r.panelHosts},null,8,[`id`,`registry`])):i.fileOf(e)?(K(),F(i.FilePanel,{key:1,file:i.fileOf(e),"project-id":r.projectId,revision:r.gutterRevision,onChange:t=>i.fileOf(e).draft=t,onSave:t=>r.files.saveFile(i.fileOf(e)),onMode:t=>i.fileOf(e).markdownMode=t,onOpen:t=>r.files.openFile(t,void 0,void 0,void 0,{scope:i.fileOf(e)?.scope}),onReload:t=>r.files.reloadFromDisk(i.fileOf(e)),onKeep:t=>r.files.keepMine(i.fileOf(e))},null,8,[`file`,`project-id`,`revision`,`onChange`,`onSave`,`onMode`,`onOpen`,`onReload`,`onKeep`])):i.terminalPanels.get(e)?(K(),F(i.TerminalView,{key:2,"project-id":r.projectId,session:i.terminalPanels.get(e),focused:t,onOpen:n[0]||=(e,t,n,i)=>r.files.openFile(e,t,n,void 0,{external:i}),onStatus:i.terminals.update,onSessions:i.terminals.replace,onEnded:i.terminals.refresh,onCommand:(e,t)=>i.emit(`command`,e,t)},null,8,[`project-id`,`session`,`focused`,`onStatus`,`onSessions`,`onEnded`,`onCommand`])):D(`v-if`,!0)]),leading:e(({group:e})=>[e.role===`terminal`?(K(),F(i.NewSessionMenu,{key:0,busy:r.terminalsBusy,agent:r.agent,"project-id":r.projectId,onCommand:n[1]||=(e,t)=>i.emit(`command`,e,t)},null,8,[`busy`,`agent`,`project-id`])):D(`v-if`,!0)]),icon:e(({tab:e})=>[i.fileOf(e.id)?.original!==void 0&&i.fileOf(e.id)?(K(),F(i.IconDiff,{key:0,class:`diff-tab-icon`,"aria-label":`Изменения`})):i.terminalPanels.get(e.id)?(K(),U(P,{key:1},[i.terminals.failed(i.terminalPanels.get(e.id))?(K(),F(i.IconFailed,{key:0,class:`session-state failed`,"aria-hidden":`true`})):i.terminalPanels.get(e.id).status===`exited`?(K(),F(i.IconFinishFlag,{key:1,class:`session-state`,"aria-hidden":`true`})):D(`v-if`,!0)],64)):D(`v-if`,!0)]),actions:e(({activeId:t})=>[i.terminalPanels.get(t)?(K(),U(P,{key:0},[i.terminalPanels.get(t).status===`running`?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,disabled:i.terminals.busy.value||i.terminalPanels.get(t).stopRequested,title:`Завершить сессию`,"aria-label":`Завершить сессию`,onClick:e=>i.terminals.stop(i.terminalPanels.get(t).id)},{default:e(()=>[y(i.IconFinishFlag,{"aria-hidden":`true`})]),_:1},8,[`disabled`,`onClick`])):!i.terminalPanels.get(t).docker||i.terminalPanels.get(t).docker?.kind===`environment`?(K(),F(i.UiButton,{key:1,shape:`icon`,size:`sm`,disabled:i.terminals.busy.value,title:`Перезапустить сессию`,"aria-label":`Перезапустить сессию`,onClick:e=>i.terminals.restart(i.terminalPanels.get(t).id)},{default:e(()=>[y(i.IconRestart,{"aria-hidden":`true`})]),_:1},8,[`disabled`,`onClick`])):D(`v-if`,!0)],64)):D(`v-if`,!0)]),trailing:e(()=>[y(i.ActivityIsland,{"scope-id":`activity:mobile`})]),empty:e(({group:t})=>[t.role===`editor`?(K(),F(i.UiEmpty,{key:0},{default:e(()=>[...n[3]||=[G(` Откройте файл из дерева или перетащите его сюда `,-1)]]),_:1})):t.role===`terminal`&&!i.terminals.loaded.value?(K(),F(i.UiEmpty,{key:1},{default:e(()=>[y(i.UiSpinner),n[4]||=G(` Загружаю сессии… `,-1)]),_:1})):t.role===`terminal`?(K(),F(i.UiEmpty,{key:2},{default:e(()=>[...n[5]||=[G(` Нет терминалов. Создайте сессию кнопками на панели выше `,-1)]]),_:1})):(K(),F(i.UiEmpty,{key:3},{default:e(()=>[...n[6]||=[G(`Перетащите сюда вкладку`,-1)]]),_:1}))]),_:1},8,[`layout`,`mobile`,`mobile-surface`,`terminal-panel`,`describe`,`project-id`,`tab-actions`,`accepts-drop`,`onSelect`,`onClose`,`onCloseMany`,`onRename`,`onPin`,`onDrop`]),I(`div`,jle,[(K(!0),U(P,null,S(i.kept,t=>(K(),F(fe,{key:t.key,to:i.hostOf(t.key),disabled:!i.hostOf(t.key)},[(K(),F(C(i.viewOf(t)?.scroll?`div`:i.UiPanel),R({ref_for:!0},i.viewOf(t)?.scroll?{}:{as:`div`,sizing:`flex`},{class:i.viewOf(t)?.scroll?`kept-scroll`:`kept-panel`,"data-own-keys":i.viewOf(t)?.ownKeys||void 0}),{default:e(()=>[y(i.TabReadoutScope,{"tab-key":t.key},{default:e(()=>[(K(),F(C(i.viewOf(t).component),R({ref_for:!0},i.viewOf(t).props?.(t,i.host)),null,16))]),_:2},1032,[`tab-key`])]),_:2},1040,[`class`,`data-own-keys`]))],8,[`to`,`disabled`]))),128))])],64)}var Nle=H(Ale,[[`render`,Mle],[`__scopeId`,`data-v-db49cb69`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/WorkbenchDock.vue`]]),Ple=W({__name:`StatusBar`,setup(e,{expose:t}){t();let{isEnabled:n}=IC(),r={isEnabled:n,get AgentUsageIndicators(){return r7}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Fle={class:`status-bar`};function Ile(e,t,n,r,i,a){return K(),U(`footer`,Fle,[t[0]||=I(`span`,{class:`status-spacer`},null,-1),y(r.AgentUsageIndicators,{enabled:r.isEnabled},null,8,[`enabled`])])}var Lle=H(Ple,[[`render`,Ile],[`__scopeId`,`data-v-9cfec34c`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/StatusBar.vue`]]);function Rle(){let e=oe({});return{hosts:e,register(t,n){e[t]=n},unregister(t,n){e[t]===n&&delete e[t]}}}function zle(e){E(l6,()=>{e.revision.value++});let{tabs:t,files:n}=e,{openFile:r,openBrowserFile:i,closeTab:a,selectTab:o}=n;async function s(){if(await tn(e.projectId()),e.revision.value++,await e.loadGit(),e.section.value===`search`&&await e.searchPanel()?.search(),!e.capabilities.write){let n=e.activeKey();for(let e of[...t.value])!e.virtual&&!e.commit&&I6(e)&&!e.localFile&&await r(e.path,e.line,e.column,void 0,{reload:!0,preview:!!e.preview});n&&t.value.some(e=>e.key===n)&&o(n);return}let n=e.active();n&&!n.virtual&&!n.commit&&I6(n)&&(n.localFile?i(n.localFile,!0):r(n.path,n.line,n.column,n.staged,{reload:!0,external:!!n.external}))}function c(r,i){n.invalidate();for(let n of[...t.value]){if(n.virtual||n.commit||!I6(n))continue;let t=kl(n.path,r,i);if(t===n.path)continue;if(n.staged!==void 0){a(n.key);continue}let o=`${t}:file`;e.layout.value=vB(e.layout.value,n.key,o),n.path=t,n.key=o}e.revision.value++,e.loadGit(),e.searchPanel()?.refreshSearch()}return{refresh:s,entryMoved:c}}function Ble(e){let t=Pf(),n=M(`editor`),r=B({get:()=>n.value===`files`,set:e=>{n.value=e?`files`:`editor`}}),i=B(()=>t.value?!r.value:e.value);function a(){t.value?r.value=!0:e.value=!1}return{mobile:t,mobileSurface:n,mobileSidebarOpen:r,sidebarInvisible:i,showSidebar:a}}function Vle(e){let{editorCommands:t,capabilities:n,surface:r,mobile:i}=e;t.scope.registerCommand({id:`ide.workbench.mobile.surface.show`,title:`Открыть мобильную поверхность`,description:`Переключает мобильный интерфейс между редактором, файлами слева и терминалами справа, сохраняя сессии.`,arguments:{surface:`editor, files или terminal`},enabled:()=>i.value,run:e=>{let{surface:t}=J(e);if(t===`terminal`&&!n.terminals||t!==`editor`&&t!==`files`&&t!==`terminal`)throw Error(`surface: editor, files или terminal`);r.value=t}}),t.scope.registerCommand({id:`ide.workbench.fullscreen.toggle`,title:`Полноэкранный режим`,description:`Скрывает интерфейс браузера и освобождает весь экран под рабочую область; на телефоне это заменяет установленное приложение. Выход — повторный вызов или Esc.`,enabled:()=>ep(),run:()=>tp()}),E(e.activeKey,e=>{e&&(r.value=`editor`)}),E(e.focusedPanel,t=>{i.value&&!e.restoringSession.value&&t?.startsWith(`terminal:`)&&(r.value=`terminal`)}),E(i,()=>{r.value=`editor`})}var Hle=`cubic-bezier(.2, .8, .2, 1)`;function Ule(e){let t,n,r,i=()=>[`files`,`editor`,...e.terminals()?[`terminal`]:[]],a=t=>{let n=i();return n[n.indexOf(e.surface.value)+t]},o=()=>{let t=e.workspace.value;if(t)return(e.surface.value===`files`?t.querySelector(`.sidebar`):t.querySelector(`.dock-pane`))??void 0},s=()=>Math.min(112,Math.max(48,(e.workspace.value?.clientWidth??360)*.2)),c=e=>{r?.cancel(),r=void 0,e.style.transform=``,e.style.transition=``,e.style.willChange=``},l=(e,t)=>{if(e){if(!t||Id()||typeof e.animate!=`function`)return c(e);r?.cancel(),r=e.animate([{transform:t},{transform:`translate3d(0, 0, 0)`}],{duration:180,easing:Hle}),r.onfinish=()=>{r=void 0,c(e)}}},u=()=>{r?.cancel(),r=void 0,n=o(),n&&(n.style.transform=``,n.style.transition=`none`,n.style.willChange=`transform`)},d=t=>{if(!n)return;let r=a(t.delta<0?1:-1)?.58:.16,i=e.workspace.value?.clientWidth??360,o=Math.min(120,Math.max(48,i*.3)),s=Math.max(-o,Math.min(o,t.delta*r));n.style.transform=`translate3d(${s}px, 0, 0)`},f=t=>{let r=n;if(n=void 0,!r)return;let i=t.delta<0?1:-1,o=a(i);zd(t.delta,t.velocity,s())&&o?(c(r),e.show(o)):l(r,r.style.transform)},p=()=>{let e=n;n=void 0,e&&l(e,e.style.transform)};E(e.workspace,()=>{t?.(),t=void 0,n=void 0;let r=e.workspace.value;r&&(t=Ud(r,{axis:`x`,enabled:()=>e.mobile.value,canStart:(e,t)=>!!o()&&!Hd(e.target,`x`,Math.sign(t.delta),r),onStart:u,onMove:d,onEnd:f,onCancel:p}))},{immediate:!0,flush:`post`}),E(e.mobile,e=>{e||(r?.cancel(),r=void 0,n&&c(n),n=void 0)});let m=()=>{t?.(),t=void 0,r?.cancel(),r=void 0,n&&c(n),n=void 0};return k(m),m}var Wle=W({__name:`ProjectWorkspace`,props:{projectId:{type:String,required:!0},projectSettingsDirty:{type:Boolean,required:!1},beforeCloseProjectSettings:{type:Function,required:!1},saveProjectSettings:{type:Function,required:!1},tabViews:{type:Object,required:!1}},setup(e,{expose:t}){let n=e,r=Bt(n.projectId),i=Zt(r),a=_ce(r,n.tabViews,{project:{dirty:()=>!!n.projectSettingsDirty,beforeClose:()=>n.beforeCloseProjectSettings?.(),save:()=>n.saveProjectSettings?.()}}),o=M(),s=M(!1),{mobile:c,mobileSurface:l,mobileSidebarOpen:u,sidebarInvisible:d,showSidebar:f}=Ble(s),{treeWidth:p,sizes:m,resizeTree:h,resizeTreeKey:_}=nae(o),v=M(),y=Je(`editor:${n.projectId}`,()=>({surface:`editor`,projectId:n.projectId}));Ule({workspace:o,mobile:c,surface:l,terminals:()=>i.terminals,show:e=>y.run(`ide.workbench.mobile.surface.show`,{surface:e})});let b=(e,t,n,r,a,o)=>y.scope.registerCommand({id:e,title:t,...o,run:n,enabled:e=>(!a||i[a])&&r(e)});xR(b,n.projectId);function x(){F.value++,D()}function S(e){fe.invalidate(),re.value=re.value.filter(t=>t.virtual||t.commit||t.scope&&!kt(t.scope)||t.path!==e&&!t.path.startsWith(e+`/`)),F.value++,D(),v.value?.refreshSearch()}let C=P$(()=>n.projectId),w=L$(()=>n.projectId),T=z$(()=>n.projectId),{gutterRevision:E}=C,D=()=>i.git?C.load():Promise.resolve(),O=M(`files`),k=M([]),A=B(()=>Bl(Cie(r,i),()=>k.value));function j(e){if(!i.snapshots)throw Error(`Источник не умеет показывать файлы снимка`);let t=`tree:${$t(e)}`;k.value.some(e=>e.id===t)||k.value.push({id:t,title:Rt(e),source:Wt(e),group:i.git?`git`:void 0,kind:e.kind===`compare`?`changes`:`tree`,params:{scope:e},closable:!0}),O.value=t,f()}function N(e){j({kind:`commit`,rev:e})}function ee(e){if(e.kind!==`commit`)throw Error(`Поиск доступен только для коммита`);if(!i.search)throw Error(`Источник не умеет искать по снимку`);let t=`search:${$t(e)}`;k.value.some(e=>e.id===t)||k.value.push({id:t,title:`Поиск по снимку`,source:Wt(e),group:i.git?`git`:void 0,kind:`search-scope`,params:{scope:e},closable:!0}),O.value=t,f()}function te(e){k.value=e.flatMap(e=>{let t=e.params?.scope;if(!t||typeof t!=`object`)return[];let n=t,r=n.kind===`commit`&&typeof n.rev==`string`?{kind:`commit`,rev:n.rev}:n.kind===`compare`&&typeof n.from==`string`&&typeof n.to==`string`?{kind:`compare`,from:n.from,to:n.to}:void 0;if(!r||(r.kind===`compare`?!i.compare:!i.snapshots))return[];let a=e.kind===`search-scope`;return a&&(r.kind!==`commit`||!i.search)?[]:[{id:a?`search:${$t(r)}`:`tree:${$t(r)}`,title:a?`Поиск по снимку`:Rt(r),source:Wt(r),group:i.git?`git`:void 0,kind:a?`search-scope`:r.kind===`compare`?`changes`:`tree`,params:{scope:r},closable:!0}]})}function P(e){let t=k.value.findIndex(t=>t.id===e);if(t<0)return;let[n]=k.value.splice(t,1);O.value===e&&(O.value=n?.group&&A.value.has(n.group)?n.group:i.git?`git`:`files`)}function ne(e){let t=k.value.findIndex(t=>t.id===e.id);t>=0?k.value.splice(t,1,e):k.value.push(e),O.value=e.id,f()}let F=M(0),I=e=>e.virtual?!!a.behaviorOf(e.virtual)?.dirty?.():e.draft!==void 0&&e.draft!==e.content,re=M([]),ie={},L=iH({projectId:()=>n.projectId,capabilities:i,layout:r.layout,tabs:re,pending:ie,isDirty:I,tabTypes:a,selectTab:e=>fe.selectTab(e),closeTab:e=>fe.closeTab(e),closeManyTabs:e=>fe.closeManyTabs(e),showSidebar:f,register:b}),{layout:R,restoringSession:z,terminals:ae,fileOf:oe,activeKey:se,revealPanel:ce,layoutGroups:le,currentPreset:ue,presetsAvailable:de}=L,fe=dae({projectId:()=>n.projectId,tabs:re,active:()=>U.value,activeKey:()=>se.value,reveal:e=>ce(e),isDirty:I,saved:()=>void D(),pending:ie,tabTypes:a}),{loading:pe,openFile:V,openTab:me,saveFile:he,toggleMarkdownSource:ge}=fe;vce({projectId:n.projectId,openFile:e=>void V(e),openTab:me,openCommitDiff:(e,t)=>void fe.openCommitFile(e,t),openCommitTree:N,openCompareTree:(e,t)=>j({kind:`compare`,from:e,to:t}),openPullFile:(e,t,n,r)=>{let i=re.value.find(t=>t.virtual===`pull`&&Number(t.params?.number)===e);i&&(i.preview=!1),fe.openPullFile(e,t,n,!r)},openSection:ne,run:(e,t)=>y.run(e,t)});let{tabActions:_e,editorKeydown:H,editorFocus:ve}=xae({projectId:n.projectId,editorCommands:y,register:b,tabs:re,active:()=>U.value,activeKey:()=>se.value,fileOf:oe,saveFile:he,reloadFromDisk:fe.reloadFromDisk,keepMine:fe.keepMine,openFile:V,openFileAt:(e,t,n,r,i)=>V(e,t,r,void 0,{endLine:n,...i}),openTab:me,selectTab:e=>ce(e),onOpenTab:()=>u.value=!1,toggleMarkdownSource:ge,revealInTree:(e,t)=>{if(t&&!kt(t)){let n=`tree:${$t(t)}`;A.value.has(n)&&(O.value=n,f(),v.value?.reveal(e,n))}else O.value=`files`,f(),v.value?.reveal(e)},tabTypes:a}),ye=W2(n.projectId,{enabled:i.docker,sidebar:()=>{O.value=`docker`,f()},open:()=>me(`docker`),terminal:async e=>{await ae.refresh(),ce(`terminal:${e.id}`)}}),be=Rle();b(`ide.workbench.sidebar.refresh`,`Обновить раздел боковой панели`,()=>v.value?.refreshSection(),()=>!0),b(`ide.workbench.section.show`,`Открыть раздел боковой панели`,e=>{let t=J(e).section;if(typeof t!=`string`||!A.value.has(t))throw Error(`section: ${A.value.list().map(e=>e.id).join(`, `)}`);O.value=t,f()},()=>!0,void 0,{description:`Переключает боковую панель на раздел проекта (файлы, поиск, Git и другие, если они есть у проекта) и показывает её.`,arguments:{section:`Идентификатор раздела: files, search, git, docker, issues и т. д.`}}),b(`ide.workbench.tree.search`,`Искать в снимке`,async e=>{let t=J(e);if(typeof t.rev!=`string`||!t.rev)throw Error(`Укажите rev`);if(typeof t.q!=`string`||!t.q.trim())throw Error(`Укажите q`);for(let e of[`case`,`word`,`regex`])if(t[e]!==void 0&&typeof t[e]!=`boolean`)throw Error(`${e} должен быть boolean`);return yt(n.projectId,t.q,{caseSensitive:t.case===!0,wholeWord:t.word===!0,regex:t.regex===!0},void 0,{kind:`commit`,rev:t.rev})},()=>i.search&&i.snapshots,void 0,{description:`Ищет текст в файлах коммита и возвращает совпадения с путями и позициями. Локальный снимок читается через git grep, GitLab — через поиск по blobs с ref; GitHub не поддерживает поиск по произвольному коммиту. Найденные файлы открываются в том же коммите.`,arguments:{rev:`Хеш коммита`,q:`Строка поиска`,case:`true — учитывать регистр`,word:`true — искать целое слово`,regex:`true — регулярное выражение`}}),b(`ide.workbench.tree.open`,`Открыть дерево файлов снимка`,e=>{let t=J(e),n=e=>{let n=t[e];if(n!==void 0&&typeof n!=`string`)throw Error(`${e} должен быть строкой`);return n},r=n(`rev`),i=n(`from`),a=n(`to`);if(r)j({kind:`commit`,rev:r});else if(i&&a)j({kind:`compare`,from:i,to:a});else throw Error(`Укажите rev или пару from/to`)},()=>i.snapshots||i.compare,void 0,{description:`Открывает в боковой панели read-only дерево файлов коммита или список изменений двух коммитов. Для коммита передайте rev; для сравнения — from и to. Хеши должны быть полными или однозначно разрешаться Git провайдера.`,arguments:{rev:`Хеш коммита для дерева файлов`,from:`Начальный хеш сравнения`,to:`Конечный хеш сравнения`}}),b(`ide.workbench.section.close`,`Закрыть временный раздел боковой панели`,e=>{let t=J(e).section;if(typeof t!=`string`||!t)throw Error(`Укажите section`);P(t)},e=>{let t=J(e).section;return typeof t==`string`&&k.value.some(e=>e.id===t)},void 0,{description:`Закрывает временный раздел боковой панели, например файлы коммита.`,arguments:{section:`Идентификатор временного раздела`}}),b(`ide.workbench.sidebar.toggle`,`Показать или скрыть боковую панель`,()=>{c.value?u.value=!u.value:s.value=!s.value},()=>!0),Tae({persist:i.persist,initialLayout:L.initialLayout,projectId:()=>n.projectId,tabs:re,layout:R,restoringSession:z,activeKey:se,section:O,sections:A.value,sectionExists:e=>A.value.has(e),extraSections:k,restoreSections:te,treeWidth:p,sidebarHidden:s,mobile:c,mobileSurface:l,terminals:i.terminals,ensureTab:(e,t)=>U6(re,a,e,t),openFile:V,fileGeneration:fe.generation,resetFiles:fe.reset,openCommitFile:fe.openCommitFile,openPullFile:fe.openPullFile,resetGit:()=>{C.reset(),w.reset(),T.reset()},reloadGit:()=>void D()}),Vle({editorCommands:y,capabilities:i,surface:l,mobile:c,activeKey:se,focusedPanel:()=>L.focusedGroup.value?.active,restoringSession:z});let U=B(()=>re.value.find(e=>e.key===se.value)),W=$ie({projectId:()=>n.projectId,tabs:re,active:()=>U.value,files:fe,bumpRevision:()=>F.value++,refreshSearch:()=>v.value?.refreshSearch()}),{refresh:G,entryMoved:xe}=zle({projectId:()=>n.projectId,capabilities:i,tabs:re,layout:R,files:fe,active:()=>U.value,activeKey:()=>se.value,revision:F,section:O,searchPanel:()=>v.value,loadGit:D});t({openFile:V,refresh:G,openTab:me,openSection:ne}),g(()=>C.cancel());let K={props:n,profile:r,capabilities:i,tabTypes:a,workspaceElement:o,sidebarHidden:s,mobile:c,mobileSurface:l,mobileSidebarOpen:u,sidebarInvisible:d,showSidebar:f,treeWidth:p,sizes:m,resizeTree:h,resizeTreeKey:_,sidebar:v,editorCommands:y,registerEditor:b,treeChanged:x,entryDeleted:S,overview:C,history:w,branches:T,gutterRevision:E,loadGit:D,section:O,extraSections:k,sections:A,openTree:j,openCommitTree:N,openSearch:ee,restoreSections:te,closeSection:P,openSection:ne,revision:F,isDirty:I,tabs:re,pending:ie,workbench:L,layout:R,restoringSession:z,terminals:ae,fileOf:oe,activeKey:se,revealPanel:ce,layoutGroups:le,currentPreset:ue,presetsAvailable:de,files:fe,loading:pe,openFile:V,openTab:me,saveFile:he,toggleMarkdownSource:ge,tabActions:_e,editorKeydown:H,editorFocus:ve,docker:ye,panelHosts:be,active:U,gitSync:W,refresh:G,entryMoved:xe,UiResizeHandle:Wz,WorkbenchToolbar:TH,MobileSurfaces:VH,WorkspaceSidebar:Zie,WorkbenchDock:Nle,StatusBar:Lle,get TerminalCloseDialog(){return CV}};return Object.defineProperty(K,"__isScriptSetup",{enumerable:!1,value:!0}),K}}),Gle=[`data-surface`],Kle={class:`toolbar-host`},qle=[`inert`],Jle={key:0,class:`loading`,role:`status`};function Yle(t,n,r,i,a,o){return K(),U(`div`,{ref:`workspaceElement`,class:Y([`workspace`,{"sidebar-hidden":i.sidebarInvisible}]),"data-surface":i.mobile?i.mobileSurface:void 0,style:Qe(i.sizes)},[I(`div`,Kle,[(K(),F(fe,{to:`#header-tools`,defer:``},[y(i.WorkbenchToolbar,{capabilities:i.capabilities,mobile:i.mobile,"sidebar-hidden":i.sidebarInvisible,"terminals-busy":i.terminals.busy.value,"terminals-error":i.terminals.error.value,"layout-groups":i.layoutGroups,preset:i.currentPreset,"presets-available":i.presetsAvailable,onCommand:n[0]||=(e,t)=>i.editorCommands.run(e,t)},{"terminal-actions":e(()=>[c(t.$slots,`terminal-actions`,{},void 0,!0)]),"terminal-status":e(()=>[c(t.$slots,`terminal-status`,{},void 0,!0)]),_:3},8,[`capabilities`,`mobile`,`sidebar-hidden`,`terminals-busy`,`terminals-error`,`layout-groups`,`preset`,`presets-available`])]))]),y(me,{name:`mobile-left`},{default:e(()=>[y(i.WorkspaceSidebar,{ref:`sidebar`,section:i.section,"onUpdate:section":n[1]||=e=>i.section=e,"project-id":r.projectId,capabilities:i.capabilities,sections:i.sections,hidden:i.sidebarInvisible,rail:!i.mobile,active:i.active,revision:i.revision,overview:i.overview,history:i.history,branches:i.branches,files:i.files,"git-sync":i.gitSync,onCommand:n[2]||=(e,t)=>(e.startsWith(`ide.docker.`)?i.docker.commands:i.editorCommands).run(e,t),onNavigate:n[3]||=e=>i.mobileSidebarOpen=!1,onOpenCommitTree:i.openCommitTree,onOpenSearch:i.openSearch,onRefresh:i.refresh,onChanged:i.treeChanged,onDeleted:i.entryDeleted,onMoved:i.entryMoved},null,8,[`section`,`project-id`,`capabilities`,`sections`,`hidden`,`rail`,`active`,`revision`,`overview`,`history`,`branches`,`files`,`git-sync`,`onRefresh`,`onMoved`])]),_:1}),te(y(i.UiResizeHandle,{appearance:`gap`,orientation:`vertical`,class:`resize-handle tree-resize`,"aria-label":`Ширина дерева файлов`,tabindex:`0`,onPointerdown:i.resizeTree,onKeydown:i.resizeTreeKey},null,8,[`onPointerdown`,`onKeydown`]),[[ae,!i.sidebarInvisible]]),i.mobile&&i.mobileSidebarOpen?(K(),U(`button`,{key:0,class:`sidebar-backdrop`,"aria-label":`Закрыть боковую панель`,"data-command":`ide.workbench.sidebar.toggle`,onClick:n[4]||=e=>i.editorCommands.run(`ide.workbench.sidebar.toggle`)})):D(`v-if`,!0),I(`section`,{class:`dock-pane`,inert:i.mobile&&i.mobileSidebarOpen,"aria-label":`Блоки редактора и терминалов`,onFocusin:n[6]||=(...e)=>i.editorFocus&&i.editorFocus(...e),onKeydownCapture:n[7]||=(...e)=>i.editorKeydown&&i.editorKeydown(...e)},[i.loading?(K(),U(`p`,Jle,`читаю файл…`)):D(`v-if`,!0),y(i.WorkbenchDock,{"project-id":r.projectId,workbench:i.workbench,mobile:i.mobile,"mobile-surface":i.mobileSurface,files:i.files,"tab-actions":i.tabActions,"panel-hosts":i.panelHosts,"gutter-revision":i.gutterRevision,tabs:i.tabs,"terminals-busy":i.terminals.busy.value,agent:i.capabilities.agent,onCommand:n[5]||=(e,t)=>i.editorCommands.run(e,t)},null,8,[`project-id`,`workbench`,`mobile`,`mobile-surface`,`files`,`tab-actions`,`panel-hosts`,`gutter-revision`,`tabs`,`terminals-busy`,`agent`])],40,qle),i.mobile?(K(),F(i.MobileSurfaces,{key:1,terminals:i.capabilities.terminals,surface:i.mobileSurface,onCommand:n[8]||=(e,t)=>i.editorCommands.run(e,t)},null,8,[`terminals`,`surface`])):D(`v-if`,!0),y(i.TerminalCloseDialog,{session:i.terminals.pendingClose.value,busy:i.terminals.busy.value,onCancel:i.terminals.cancelClose,onConfirm:i.terminals.confirmClose},null,8,[`session`,`busy`,`onCancel`,`onConfirm`]),i.mobile?D(`v-if`,!0):(K(),F(i.StatusBar,{key:2,class:`workspace-status`}))],14,Gle)}var i7=H(Wle,[[`render`,Yle],[`__scopeId`,`data-v-d3ac9b6b`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/workspace/ui/ProjectWorkspace.vue`]]);async function a7(e,t,n){let r=e.trim();if(!r)throw Error(`Укажите токен GitHub`);if(t){let e=await ER(`/github`,`PUT`,{...t,enabled:!0});n?.(e)}else{let e=(await DR()).integrations.find(e=>e.id===`github`);e?.enabled||await ER(`/github`,`PUT`,{...e?.settings,enabled:!0})}return ER(`/github/auth`,`POST`,{token:r})}var Xle=W({__name:`GithubSettings`,setup(e,{expose:t}){t();let n=M(null),r=M(``),i=M({backend:`file`,reason:`unavailable`}),a=M(!1),o=M(``),s=M(``),c=M(``),{error:l,message:u,busy:d,action:p}=Tz(),m=M(null);function h(e){n.value=e,e.connected||m.value?.hide(),a.value=e.enabled,o.value=e.settings.clientId,s.value=e.settings.directory}f(()=>p(async()=>{let e=await DR();r.value=e.file,i.value=e.secretStorage;let t=e.integrations.find(e=>e.id===`github`);t&&h(t)}).catch(()=>{}));let{device:g,start:_,cancel:v}=tz({endpoint:`/github/device`,pollEndpoint:`/github/device/poll`,connectedMessage:`GitHub подключён`,save:()=>y(),apply:h,error:l,message:u,action:p});async function y(e=a.value){v(),h(await ER(`/github`,`PUT`,{enabled:e,clientId:o.value,directory:s.value}))}function b(){if(!d.value&&c.value.trim())return p(async()=>{v(),h(await a7(c.value,{clientId:o.value,directory:s.value},h)),c.value=``,u.value=`GitHub подключён`})}function x(){return p(async()=>{v(),h(await ER(`/github/auth`,`DELETE`)),c.value=``,u.value=`GitHub отключён`})}let S=Je(`github-settings`,()=>({surface:`settings`,integration:`github`}));S.scope.registerCommand({id:`ide.github.integration.save`,title:`Сохранить настройки GitHub`,description:`Сохраняет Client ID, папку импорта и состояние интеграции GitHub.`,enabled:()=>!d.value&&!!n.value,run:()=>p(async()=>{await y(),u.value=`Настройки сохранены`})}),S.scope.registerCommand({id:`ide.github.integration.connect`,title:`Подключить GitHub`,description:`Включает интеграцию и подключает GitHub с токеном, введённым в форме.`,enabled:()=>!d.value&&!!c.value.trim()&&!!n.value,run:b}),S.scope.registerCommand({id:`ide.github.integration.disconnect`,title:`Отключить GitHub`,description:`Удаляет сохранённый токен GitHub из Projector.`,enabled:()=>!d.value&&!!n.value?.connected,run:x}),S.scope.registerCommand({id:`ide.github.integration.device.start`,title:`Войти в GitHub через браузер`,description:`Сохраняет настройки и получает код GitHub Device Flow для подтверждения в браузере.`,enabled:()=>!d.value&&a.value&&!!o.value.trim()&&!g.value,run:_}),S.scope.registerCommand({id:`ide.github.integration.device.cancel`,title:`Отменить вход в GitHub`,description:`Прекращает ожидание подтверждения текущего входа GitHub Device Flow.`,enabled:()=>!!g.value,run:v});let C={github:n,file:r,secretStorage:i,enabled:a,clientId:o,directory:s,token:c,error:l,message:u,busy:d,action:p,tokenView:m,apply:h,device:g,login:_,cancelDevice:v,save:y,connectToken:b,disconnect:x,commands:S,UiHeading:Ee,UiMessage:Te,UiControl:Se,UiField:Re,UiInline:Be,UiStack:Ed,UiButton:q,get DeviceLoginPanel(){return ez},get TokenReveal(){return LR}};return Object.defineProperty(C,"__isScriptSetup",{enumerable:!1,value:!0}),C}}),Zle={class:`integrations`},Qle={key:0,class:`plugin`},$le={class:`status`},eue={class:`storage`},tue={class:`muted`},nue={key:2,class:`muted`,role:`status`};function rue(t,n,r,i,a,o){return K(),U(`section`,Zle,[i.github?(K(),U(`article`,Qle,[y(i.UiInline,{as:`header`,gap:3,justify:`between`,wrap:``},{default:e(()=>[y(i.UiHeading,{as:`h3`,"space-after":0},{default:e(()=>[...n[9]||=[G(`Подключение`,-1)]]),_:1}),I(`span`,$le,X(i.github.connected?`подключён · ${i.github.account}`:`не подключён`),1)]),_:1}),y(i.UiStack,{as:`form`,align:`start`,onSubmit:n[3]||=N(e=>i.commands.run(`ide.github.integration.save`),[`prevent`])},{default:e(()=>[y(i.UiInline,{as:`label`,class:`toggle`,justify:`normal`},{default:e(()=>[y(i.UiControl,{modelValue:i.enabled,"onUpdate:modelValue":n[0]||=e=>i.enabled=e,type:`checkbox`,disabled:i.busy},null,8,[`modelValue`,`disabled`]),n[10]||=G(` включить интеграцию`,-1)]),_:1}),y(i.UiField,{layout:`plain`,label:`Папка для импорта`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.directory,"onUpdate:modelValue":n[1]||=e=>i.directory=e,disabled:i.busy,placeholder:`~/Projects`,required:``}),null,16,[`modelValue`,`disabled`])]),_:1}),y(i.UiField,{layout:`plain`,label:`Client ID для входа через браузер`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.clientId,"onUpdate:modelValue":n[2]||=e=>i.clientId=e,disabled:i.busy,placeholder:`Client ID вашей GitHub OAuth App`,autocomplete:`off`}),null,16,[`modelValue`,`disabled`])]),_:1}),n[12]||=I(`p`,{class:`muted help`},[G(` Для входа по коду создайте `),I(`a`,{href:`https://github.com/settings/developers`,target:`_blank`,rel:`noopener noreferrer`},`OAuth App`),G(` и включите Device Flow. Client secret не нужен. Можно также подключиться токеном ниже. `)],-1),y(i.UiButton,{type:`submit`,"data-command":`ide.github.integration.save`,disabled:i.busy},{default:e(()=>[...n[11]||=[G(`сохранить настройки`,-1)]]),_:1},8,[`disabled`])]),_:1}),i.github.connected&&i.secretStorage.backend===`keyring`?(K(),F(i.TokenReveal,{key:0,ref:`tokenView`,integration:`github`,label:`Токен GitHub`,disabled:i.busy,onError:n[4]||=e=>i.error=e},null,8,[`disabled`])):D(`v-if`,!0),y(i.UiInline,{class:`actions`,gap:3,wrap:``},{default:e(()=>[y(i.UiButton,{disabled:i.busy||!i.enabled||!i.clientId.trim()||!!i.device,"data-command":`ide.github.integration.device.start`,onClick:n[5]||=e=>i.commands.run(`ide.github.integration.device.start`)},{default:e(()=>[...n[13]||=[G(`войти через GitHub`,-1)]]),_:1},8,[`disabled`]),i.github.connected?(K(),F(i.UiButton,{key:0,disabled:i.busy,"data-command":`ide.github.integration.disconnect`,onClick:n[6]||=e=>i.commands.run(`ide.github.integration.disconnect`)},{default:e(()=>[...n[14]||=[G(`выйти`,-1)]]),_:1},8,[`disabled`])):D(`v-if`,!0)]),_:1}),i.device?(K(),F(i.DeviceLoginPanel,{key:1,host:`GitHub`,device:i.device,"command-id":`ide.github.integration.device.cancel`,onCancel:i.cancelDevice},null,8,[`device`,`onCancel`])):D(`v-if`,!0),I(`details`,null,[n[18]||=I(`summary`,null,`Войти с Personal Access Token`,-1),y(i.UiStack,{as:`form`,align:`start`,onSubmit:n[8]||=N(e=>i.commands.run(`ide.github.integration.connect`),[`prevent`])},{default:e(()=>[n[16]||=I(`p`,{class:`muted help`},` Fine-grained token: доступ к нужным репозиториям и Contents: read. Для classic token и приватных репозиториев — scope repo. `,-1),n[17]||=I(`p`,{class:`muted help`},`Подключение токеном автоматически включит интеграцию.`,-1),y(i.UiField,{layout:`plain`,label:`Токен GitHub`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.token,"onUpdate:modelValue":n[7]||=e=>i.token=e,type:`password`,autocomplete:`off`,disabled:i.busy,placeholder:`github_pat_…`,required:``}),null,16,[`modelValue`,`disabled`])]),_:1}),y(i.UiButton,{type:`submit`,"data-command":`ide.github.integration.connect`,disabled:i.busy||!i.token.trim()},{default:e(()=>[...n[15]||=[G(`подключить GitHub`,-1)]]),_:1},8,[`disabled`])]),_:1})])])):D(`v-if`,!0),I(`details`,eue,[n[24]||=I(`summary`,null,`Хранение настроек и авторизации`,-1),I(`p`,tue,[n[22]||=G(` Настройки и авторизация хранятся в файле `,-1),I(`code`,null,X(i.file||`integrations.json`),1),n[23]||=G(`. `,-1),i.secretStorage.backend===`keyring`?(K(),U(P,{key:0},[G(` Токены и ключи — в системном хранилище секретов (Secret Service), в файле их нет. `)],64)):i.secretStorage.reason===`disabled`?(K(),U(P,{key:1},[n[19]||=G(` Хранилище секретов отключено (`,-1),n[20]||=I(`code`,null,`PROJECTOR_SECRET_STORE=file`,-1),n[21]||=G(`): токены лежат в этом файле. `,-1)],64)):(K(),U(P,{key:2},[G(` Системное хранилище секретов недоступно: токены лежат в этом файле с правами 0600. `)],64))])]),i.error?(K(),F(i.UiMessage,{key:1,tone:`danger`,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0),i.message?(K(),U(`p`,nue,X(i.message),1)):D(`v-if`,!0)])}var iue=H(Xle,[[`render`,rue],[`__scopeId`,`data-v-b8f8a693`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/github/GithubSettings.vue`]]),aue=W({__name:`GithubClone`,props:{repository:{type:String,required:!0},navigate:{type:Function,required:!0}},setup(e,{expose:t}){t();let n=e,r={props:n,projectId:B(()=>`gh:/${n.repository}`),destinationName:B(()=>n.repository.split(`/`).pop()??``),get CloneRepositoryDialog(){return YR}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function oue(e,t,n,r,i,a){return K(),F(r.CloneRepositoryDialog,{source:`github`,repository:n.repository,"destination-name":r.destinationName,"project-id":r.projectId,navigate:n.navigate},null,8,[`repository`,`destination-name`,`project-id`,`navigate`])}var sue=H(aue,[[`render`,oue],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/github/GithubClone.vue`]]),cue=W({__name:`GithubConnection`,props:{repository:{type:String,required:!0}},emits:[`connected`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=B(()=>iu({kind:`github`,repository:r.repository}));async function o(e){await a7(e)}let s={props:r,emit:i,projectId:a,connect:o,get TokenConnectionForm(){return Az}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}});function lue(e,t,n,r,i,a){return K(),F(r.TokenConnectionForm,{host:`GitHub`,"subject-label":`Репозиторий`,subject:n.repository,"project-id":r.projectId,"scope-key":`github-connection:${n.repository}`,surface:`github-integration`,placeholder:`github_pat_…`,"token-url":`https://github.com/settings/tokens`,"command-id":`ide.github.integration.connect`,"command-description":`Подключает GitHub с токеном, введённым в форме интеграции, и открывает репозиторий.`,"readout-note":`Подключение к GitHub`,connect:r.connect,onConnected:t[0]||=e=>r.emit(`connected`)},null,8,[`subject`,`project-id`,`scope-key`])}var uue=H(cue,[[`render`,lue],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/github/GithubConnection.vue`]]),due=W({__name:`GitlabSettings`,setup(e,{expose:t}){t();let n=M(null),r=M({backend:`file`,reason:`unavailable`}),i=M(!1),a=M(``),o=M(``),s=M(``),c=M(``),l=B(()=>(a.value??``).trim().length>0),u=M(``),{error:d,message:p,busy:m,action:h}=Tz(),g=M(null);function _(e){n.value=e,e.connected||g.value?.hide(),i.value=e.enabled,a.value=e.settings.clientId??``,o.value=e.settings.url??``,s.value=e.settings.directory}f(()=>h(async()=>{let e=await DR();r.value=e.secretStorage;let t=e.integrations.find(e=>e.id===`gitlab`);t&&_(t)}).catch(()=>{}));let{device:v,start:y,cancel:b}=tz({endpoint:`/gitlab/device`,pollEndpoint:`/gitlab/device/poll`,connectedMessage:`GitLab подключён`,save:()=>x(),apply:_,error:d,message:p,action:h});async function x(e=i.value){b(),_(await ER(`/gitlab`,`PUT`,{enabled:e,clientId:a.value,url:o.value,directory:s.value}))}function S(){if(!m.value&&c.value.trim())return h(async()=>{b(),await x(!0),_(await ER(`/gitlab/auth`,`POST`,{token:c.value.trim()})),c.value=``,p.value=`GitLab подключён`})}function C(){return h(async()=>{b(),_(await ER(`/gitlab/auth`,`DELETE`)),p.value=`GitLab отключён`})}let w=Je(`gitlab-settings`,()=>({surface:`settings`,integration:`gitlab`}));w.scope.registerCommand({id:`ide.gitlab.integration.save`,title:`Сохранить настройки GitLab`,description:`Сохраняет адрес GitLab, Client ID OAuth-приложения, папку импорта и состояние интеграции.`,enabled:()=>!m.value&&!!n.value,run:()=>h(async()=>{await x(),p.value=`Настройки сохранены`})}),w.scope.registerCommand({id:`ide.gitlab.integration.connect`,title:`Подключить GitLab`,description:`Подключает GitLab по Personal Access Token (scope read_api и read_repository), введённому в форме.`,enabled:()=>!m.value&&!!c.value.trim(),run:S}),w.scope.registerCommand({id:`ide.gitlab.integration.disconnect`,title:`Отключить GitLab`,description:`Удаляет сохранённый токен GitLab из Projector.`,enabled:()=>!m.value&&!!n.value?.connected,run:C}),w.scope.registerCommand({id:`ide.gitlab.integration.device.start`,title:`Войти в GitLab через браузер`,description:`Сохраняет настройки и получает код GitLab Device Flow для подтверждения в браузере (GitLab 17.1+).`,enabled:()=>!m.value&&i.value&&l.value&&!v.value,run:y}),w.scope.registerCommand({id:`ide.gitlab.integration.device.cancel`,title:`Отменить вход в GitLab`,description:`Прекращает ожидание подтверждения текущего входа GitLab Device Flow.`,enabled:()=>!!v.value,run:b}),w.scope.registerCommand({id:`ide.gitlab.repository.import`,title:`Клонировать проект GitLab`,description:`Клонирует проект GitLab (group/project или ссылка) в папку импорта и добавляет его в каталог проектов.`,arguments:{repository:`group/project или ссылка на проект GitLab`},enabled:()=>!m.value&&!!n.value?.connected,run:e=>h(async()=>{let t=String(J(e).repository??u.value).trim();if(!t)throw Error(`Укажите проект GitLab`);let n=await ER(`/gitlab/import`,`POST`,{repository:t});u.value=``,p.value=`Проект ${n.project.name} клонирован и добавлен`})});let T={gitlab:n,secretStorage:r,enabled:i,clientId:a,url:o,directory:s,token:c,hasClientId:l,repository:u,error:d,message:p,busy:m,action:h,tokenView:g,apply:_,device:v,login:y,cancelDevice:b,save:x,connectToken:S,disconnect:C,commands:w,UiHeading:Ee,UiMessage:Te,UiControl:Se,UiField:Re,UiInline:Be,UiStack:Ed,UiButton:q,get DeviceLoginPanel(){return ez},get TokenReveal(){return LR}};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}}),fue={class:`integrations`},pue={key:0,class:`plugin`},mue={class:`status`},hue={class:`muted help`},gue=[`href`],_ue={class:`muted help`},vue={key:2,class:`muted`,role:`status`};function yue(t,n,r,i,a,o){return K(),U(`section`,fue,[i.gitlab?(K(),U(`article`,pue,[y(i.UiInline,{as:`header`,gap:3,justify:`between`,wrap:``},{default:e(()=>[y(i.UiHeading,{as:`h3`,"space-after":0},{default:e(()=>[...n[12]||=[G(`Подключение`,-1)]]),_:1}),I(`span`,mue,X(i.gitlab.connected?`подключён${i.gitlab.auth===`oauth`?` · OAuth`:` · PAT`} · ${i.gitlab.account}`:`не подключён`),1)]),_:1}),y(i.UiStack,{as:`form`,align:`start`,onSubmit:n[4]||=N(e=>i.commands.run(`ide.gitlab.integration.save`),[`prevent`])},{default:e(()=>[y(i.UiInline,{as:`label`,class:`toggle`,justify:`normal`},{default:e(()=>[y(i.UiControl,{modelValue:i.enabled,"onUpdate:modelValue":n[0]||=e=>i.enabled=e,type:`checkbox`,disabled:i.busy},null,8,[`modelValue`,`disabled`]),n[13]||=G(` включить интеграцию`,-1)]),_:1}),y(i.UiField,{layout:`plain`,label:`Адрес GitLab`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.url,"onUpdate:modelValue":n[1]||=e=>i.url=e,disabled:i.busy,placeholder:`https://gitlab.com`,autocomplete:`off`,required:``}),null,16,[`modelValue`,`disabled`])]),_:1}),y(i.UiField,{layout:`plain`,label:`Client ID для входа через браузер`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.clientId,"onUpdate:modelValue":n[2]||=e=>i.clientId=e,disabled:i.busy,placeholder:`Client ID OAuth-приложения GitLab`,autocomplete:`off`}),null,16,[`modelValue`,`disabled`])]),_:1}),y(i.UiField,{layout:`plain`,label:`Папка для импорта`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.directory,"onUpdate:modelValue":n[3]||=e=>i.directory=e,disabled:i.busy,placeholder:`~/Projects`,required:``}),null,16,[`modelValue`,`disabled`])]),_:1}),I(`p`,hue,[n[14]||=G(` Для self-hosted укажите адрес вашего сервера. Смена адреса сбрасывает сохранённый токен. Для входа через браузер создайте `,-1),I(`a`,{href:`${i.url||`https://gitlab.com`}/-/user_settings/applications`,target:`_blank`,rel:`noopener noreferrer`},`OAuth Application`,8,gue),n[15]||=G(` на своём инстансе, включите Device Flow (GitLab 17.1+) и права `,-1),n[16]||=I(`code`,null,`read_api`,-1),n[17]||=G(`, `,-1),n[18]||=I(`code`,null,`read_repository`,-1),n[19]||=G(`, `,-1),n[20]||=I(`code`,null,`read_user`,-1),n[21]||=G(`. Client secret не нужен. Можно также подключиться токеном ниже. `,-1)]),y(i.UiButton,{type:`submit`,"data-command":`ide.gitlab.integration.save`,disabled:i.busy},{default:e(()=>[...n[22]||=[G(`сохранить настройки`,-1)]]),_:1},8,[`disabled`])]),_:1}),i.gitlab.connected&&i.secretStorage.backend===`keyring`?(K(),F(i.TokenReveal,{key:0,ref:`tokenView`,integration:`gitlab`,label:`Токен GitLab`,disabled:i.busy,onError:n[5]||=e=>i.error=e},null,8,[`disabled`])):D(`v-if`,!0),y(i.UiInline,{class:`actions`,gap:3,wrap:``},{default:e(()=>[y(i.UiButton,{disabled:i.busy||!i.enabled||!i.hasClientId||!!i.device,"data-command":`ide.gitlab.integration.device.start`,onClick:n[6]||=e=>i.commands.run(`ide.gitlab.integration.device.start`)},{default:e(()=>[...n[23]||=[G(`войти через GitLab`,-1)]]),_:1},8,[`disabled`])]),_:1}),i.device?(K(),F(i.DeviceLoginPanel,{key:1,host:`GitLab`,device:i.device,"command-id":`ide.gitlab.integration.device.cancel`,onCancel:i.cancelDevice},null,8,[`device`,`onCancel`])):D(`v-if`,!0),y(i.UiStack,{as:`form`,align:`start`,class:`block`,onSubmit:n[9]||=N(e=>i.commands.run(`ide.gitlab.integration.connect`),[`prevent`])},{default:e(()=>[I(`p`,_ue,[n[24]||=G(` Personal Access Token со scope `,-1),n[25]||=I(`code`,null,`read_api`,-1),n[26]||=G(` и `,-1),n[27]||=I(`code`,null,`read_repository`,-1),n[28]||=G(` (`,-1),I(`code`,null,X(i.url||`https://gitlab.com`)+`/-/user_settings/personal_access_tokens`,1),n[29]||=G(`). Подключение токеном автоматически включит интеграцию. `,-1)]),y(i.UiField,{layout:`plain`,label:`Токен GitLab`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.token,"onUpdate:modelValue":n[7]||=e=>i.token=e,type:`password`,autocomplete:`off`,disabled:i.busy,placeholder:`glpat-…`,required:``}),null,16,[`modelValue`,`disabled`])]),_:1}),y(i.UiInline,{class:`actions`,gap:3,wrap:``},{default:e(()=>[y(i.UiButton,{type:`submit`,"data-command":`ide.gitlab.integration.connect`,disabled:i.busy||!i.token.trim()},{default:e(()=>[...n[30]||=[G(`подключить GitLab`,-1)]]),_:1},8,[`disabled`]),i.gitlab.connected?(K(),F(i.UiButton,{key:0,"data-command":`ide.gitlab.integration.disconnect`,disabled:i.busy,onClick:n[8]||=e=>i.commands.run(`ide.gitlab.integration.disconnect`)},{default:e(()=>[...n[31]||=[G(`выйти`,-1)]]),_:1},8,[`disabled`])):D(`v-if`,!0)]),_:1})]),_:1}),i.gitlab.connected?(K(),F(i.UiStack,{key:2,as:`form`,align:`start`,class:`block`,onSubmit:n[11]||=N(e=>i.commands.run(`ide.gitlab.repository.import`),[`prevent`])},{default:e(()=>[y(i.UiField,{layout:`plain`,label:`Клонировать проект`},{default:e(({control:e})=>[y(i.UiControl,R(e,{modelValue:i.repository,"onUpdate:modelValue":n[10]||=e=>i.repository=e,disabled:i.busy,placeholder:`group/project или ссылка`,autocomplete:`off`}),null,16,[`modelValue`,`disabled`])]),_:1}),n[33]||=I(`p`,{class:`muted help`},[G(` Также доступно в палитре: введите `),I(`code`,null,`gl/`),G(` и название проекта. `)],-1),y(i.UiButton,{type:`submit`,"data-command":`ide.gitlab.repository.import`,disabled:i.busy||!i.repository.trim()},{default:e(()=>[...n[32]||=[G(`клонировать`,-1)]]),_:1},8,[`disabled`])]),_:1})):D(`v-if`,!0)])):D(`v-if`,!0),i.error?(K(),F(i.UiMessage,{key:1,tone:`danger`,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0),i.message?(K(),U(`p`,vue,X(i.message),1)):D(`v-if`,!0)])}var bue=H(due,[[`render`,yue],[`__scopeId`,`data-v-bba0c847`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/gitlab/GitlabSettings.vue`]]),o7=[7,30,90],s7={hours5:18e3,week:604800,month:2592e3,rolling:18e3,weekly:604800,monthly:2592e3};function c7(e,t,n,r=Date.now(),i=!1){if(!Number.isFinite(e)||e<0||!Number.isFinite(n)||(n??0)<=0)return null;if(i||e>=100)return`over`;if(!t||!Number.isFinite(t))return null;let a=Math.max(0,t-r/1e3),o=e-(1-Math.min(1,a/n))*100;return o<=-15?`spare`:o<=8?`normal`:o<=22?`hot`:`over`}async function xue(e){let t=await fetch(`/api/analytics?days=${encodeURIComponent(String(e))}`,{cache:`no-store`});if(!t.ok)throw Error(`Аналитика недоступна: HTTP ${t.status}`);return await t.json()}var l7=new Intl.NumberFormat(`ru`);function u7(e){return!Number.isFinite(e)||e<=0?`0`:e<1e3?l7.format(Math.round(e)):e<1e6?`${d7(e/1e3)} тыс.`:e<1e9?`${d7(e/1e6)} млн`:`${d7(e/1e9)} млрд`}function d7(e){let t=e>=100?Math.round(e):Math.round(e*10)/10;return l7.format(t)}function f7(e){return!Number.isFinite(e)||e<=0?`0`:new Intl.NumberFormat(`ru`,{maximumFractionDigits:e<1?4:2}).format(e)}function p7(e,t){if(!Number.isFinite(e))return`—`;try{return new Intl.NumberFormat(`ru`,{style:`currency`,currency:t,maximumFractionDigits:e<1?4:2}).format(e)}catch{return`${f7(e)} ${t}`}}function m7(e){return e==null||!Number.isFinite(e)?`—`:`${Math.round(e)}%`}function h7(e){let[,t,n]=e.split(`-`);return t&&n?`${n}.${t}`:e}function g7(e){let t=new Date(e);return`${String(t.getDate()).padStart(2,`0`)}.${String(t.getMonth()+1).padStart(2,`0`)}`}function Sue(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function _7(e){let t=e%10,n=e%100;return`${e} ${n>=11&&n<=14?`дней`:t===1?`день`:t>=2&&t<=4?`дня`:`дней`}`}function Cue(e){switch(e){case`rolling`:return`5 часов`;case`weekly`:return`Неделя`;case`monthly`:return`Месяц`;case`total`:return`Всего`;case`auto`:return`Авто-модели`;case`api`:return`API-модели`;default:return e}}var v7=6;function y7(e){return st().find(t=>t.backend===e||t.program===e)?.title??(e===`неизвестный`?`Без агента`:e)}function wue(e){switch(e){case`chat`:return`Чат Projector`;case`lens`:return`Lens`;case`judge`:return`Судья`;case`doctor-form`:return`Доктор форм`;case`doctor-answer`:return`Доктор ответов`;case`compaction`:return`Сжатие истории`;case`review`:return`Проверка команд`;case`task`:return`Task · исследование`;default:return e.startsWith(`agent:`)?`${e===`agent:unknown`?`Без агента`:y7(e.slice(6))} · чат`:e}}function b7(e,t,n){let r=e.map(e=>({label:n(e.key),value:e.tokens,share:t?e.tokens/t:0}));if(r.length<=v7)return r;let i=r.slice(0,v7),a=r.slice(v7).reduce((e,t)=>e+t.value,0);return a&&i.push({label:`Другие`,value:a,share:t?a/t:0}),i}var Tue=e=>Cue(e);function Eue(){let e=M(30),t=ee(null),n=M(!1),r=M(!1),i=M(``),a=0,o=Mf({scheduler:e=>mf(e,3e4)}),{isEnabled:s,loaded:c}=IC();async function l(){let r=++a;n.value=!0;try{let n=await xue(e.value);r===a&&(t.value=n,i.value=``)}catch(e){r===a&&(i.value=e instanceof Error?e.message:`Не удалось загрузить аналитику`)}finally{r===a&&(n.value=!1)}}async function u(){let e=[...new Set(st().flatMap(e=>e.usageUrl?[e.usageUrl]:[]))];r.value=!0;try{await Promise.allSettled([...e,`/api/providers/balance`].map(e=>fetch(e,{cache:`no-store`})))}finally{r.value=!1}}async function d(){await u(),await l()}function p(t){let n=o7.find(e=>e===t);n&&n!==e.value&&(e.value=n,l())}f(()=>{l(),c.value&&u().then(l)}),E(c,e=>{e&&u().then(l)},{once:!0});let m=Je(`analytics-settings`,()=>({surface:`settings`,days:e.value}));m.scope.registerCommand({id:`ide.analytics.refresh`,title:`Обновить аналитику расхода`,description:`Заново запрашивает лимиты агентов и перечитывает расход токенов по сохранённым ответам за выбранный период.`,run:d}),m.scope.registerCommand({id:`ide.analytics.range.set`,title:`Выбрать период аналитики`,description:`Переключает графики расхода на 7, 30 или 90 дней.`,arguments:{days:`7 | 30 | 90`},run:t=>(p(Number(J(t).days)),{days:e.value})}),m.scope.registerCommand({id:`ide.analytics.tasks.mode.set`,title:`Показать распределение по задачам`,description:`Переключает карточку «Куда ушли деньги» между токенами и стоимостью. Стоимость доступна, когда у моделей задана цена.`,arguments:{mode:`tokens | cost`},run:e=>{let t=J(e).mode;if(t!==`tokens`&&t!==`cost`)throw Error(`Неизвестный режим`);return T.value=t,{mode:T.value}}});let h=B(()=>t.value?.totals),g=B(()=>(t.value?.daily??[]).map(e=>({label:h7(e.day),values:{input:e.input,output:e.output,cacheRead:e.cacheRead,cacheWrite:e.cacheWrite}}))),_=B(()=>(t.value?.daily??[]).map(e=>({label:h7(e.day),value:e.cost}))),v=B(()=>{let e=t.value;return e?b7(e.byAgent,e.totals.tokens,y7):[]}),y=B(()=>{let e=t.value;return e?b7(e.byModel,e.totals.tokens,e=>e):[]}),b=B(()=>{let e=t.value;return e?b7(e.byProject,e.totals.tokens,e=>e):[]}),x=B(()=>{let e=t.value;if(!e)return[];let n=e.byTask.reduce((e,t)=>e+t.tokens,0)||1,r=e.byTask.reduce((e,t)=>e+t.cost,0)||1;return e.byTask.map(e=>({key:e.key,label:wue(e.key),tokens:e.tokens,cost:e.cost,calls:e.answers,shareTokens:e.tokens/n,shareCost:e.cost/r}))}),S=B(()=>(t.value?.byTask??[]).reduce((e,t)=>e+t.tokens,0)),C=B(()=>(t.value?.byTask??[]).reduce((e,t)=>e+t.cost,0)),w=B(()=>C.value>0),T=M(`tokens`);E(w,e=>{T.value=e?`cost`:`tokens`}),E(()=>t.value,()=>{w.value&&(T.value=`cost`)});let D=B(()=>x.value.map(e=>({label:e.label,value:T.value===`cost`?e.cost:e.tokens,share:T.value===`cost`?e.shareCost:e.shareTokens}))),O=B(()=>t.value?.service),k=B(()=>t.value?.serviceCalls??0),A=B(()=>(t.value?.limits??[]).filter(e=>!c.value||s(e.agent)).map(e=>({series:e,title:y7(e.agent),label:Tue(e.window),tone:c7(e.usedPercent??0,e.resetsAt,e.periodSeconds,o.value.getTime(),e.limited)})).sort((e,t)=>{let n=e=>e===`over`?0:e===`hot`?1:e===`normal`?2:3;return n(e.tone)-n(t.tone)||(t.series.usedPercent??0)-(e.series.usedPercent??0)})),j=B(()=>t.value?.daily.at(-1)),N=B(()=>t.value?.providers??[]),te=B(()=>N.value.find(e=>e.currency===`USD`)??N.value[0]??null),P=B(()=>t.value?t.value.totals.tokens/Math.max(1,t.value.days):0),ne=B(()=>{let e=h.value;return!e||!e.tokens?0:e.cacheRead/e.tokens}),F=B(()=>(h.value?.pricedAnswers??0)>0),I=B(()=>(h.value?.answers??0)>0),re=B(()=>_7(e.value));return{ranges:o7,days:e,data:t,loading:n,probing:r,error:i,now:o,commands:m,totals:h,dailyPoints:g,costPoints:_,agentRows:v,modelRows:y,projectRows:b,taskRows:x,taskItems:D,taskTotalTokens:S,taskTotalCost:C,taskPriced:w,taskMode:T,service:O,serviceCalls:k,limitCards:A,providerRows:N,primaryProvider:te,today:j,todayLabel:B(()=>u7(j.value?.tokens??0)),averageTokens:P,cacheShare:ne,priced:F,hasUsage:I,rangeLabel:re,formatTokens:u7,refresh:d,setDays:p}}var Due=W({__name:`UiMeter`,props:{value:{type:Number,required:!1,default:0},tone:{type:String,required:!1,default:`neutral`},height:{type:Number,required:!1,default:6},soft:{type:Boolean,required:!1,default:!1},segments:{type:Array,required:!1},ariaLabel:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=e=>`${Math.max(0,Math.min(100,e))}%`,i={props:n,clamp:r,parts:B(()=>n.segments?.length?n.segments.map(e=>({...e,width:r(e.value)})):[{tone:n.tone,soft:n.soft,width:r(n.value)}])};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),Oue=[`aria-valuenow`,`aria-label`];function kue(e,t,n,r,i,a){return K(),U(`div`,{class:`meter`,style:Qe({height:`${n.height}px`}),role:`meter`,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-valuenow":n.value,"aria-label":n.ariaLabel},[(K(!0),U(P,null,S(r.parts,(e,t)=>(K(),U(`i`,{key:t,class:Y([e.tone,{soft:e.soft}]),style:Qe({width:e.width})},null,6))),128))],12,Oue)}var x7=H(Due,[[`render`,kue],[`__scopeId`,`data-v-636a08f6`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiMeter.vue`]]);function S7(e,t=Date.now()){if(!e||!Number.isFinite(e))return`—`;let n=e-t/1e3;if(n<=0)return`сейчас`;if(n<60)return`<1м`;let r=Math.floor(n/60),i=Math.floor(r/60),a=Math.floor(i/24);return a?`${a}д${i%24?` ${i%24}ч`:``}`:i?`${i}ч${r%60?` ${r%60}м`:``}`:`${r}м`}function C7(e){return!e||!Number.isFinite(e)?`—`:new Date(e*1e3).toLocaleString(void 0,{day:`2-digit`,month:`2-digit`,hour:`2-digit`,minute:`2-digit`})}var Aue=W({__name:`LimitCard`,props:{series:{type:Object,required:!0},title:{type:String,required:!0},label:{type:String,required:!0},tone:{type:[String,null],required:!0},now:{type:Number,required:!0}},setup(e,{expose:t}){t();let n=e,r=B(()=>n.series.usedPercent),i=B(()=>r.value===null?null:Math.max(0,100-r.value)),a=B(()=>S7(n.series.resetsAt,n.now)),o=B(()=>C7(n.series.resetsAt)),s=B(()=>n.series.expectedPercent),c=B(()=>n.series.projectedPercent),l=B(()=>n.series.limited||(r.value??0)>=100),u={props:n,used:r,remaining:i,countdown:a,resetAt:o,expected:s,projected:c,exhausted:l,meterTone:B(()=>n.tone===`spare`?`info`:n.tone===`hot`?`warning`:n.tone===`over`?`danger`:`neutral`),pace:B(()=>{if(l.value)return{text:`Лимит исчерпан`,hint:``};if(s.value===null)return{text:`Темп без оценки`,hint:`окно не сообщает длину цикла`};let e=(r.value??0)-s.value;return e<=-15?{text:`Ниже темпа`,hint:`по времени ожидалось ${m7(s.value)}`}:e<=8?{text:`В пределах темпа`,hint:`по времени ожидалось ${m7(s.value)}`}:e<=22?{text:`Выше темпа`,hint:`по времени ожидалось ${m7(s.value)}`}:{text:`Быстрее окна`,hint:`по времени ожидалось ${m7(s.value)}`}}),projection:B(()=>c.value===null?``:`к сбросу ≈ ${m7(c.value)}${c.value>=100?` · исчерпание`:``}`),spark:B(()=>{let e=n.series.points;if(e.length<2)return``;let t=e[0],r=e.at(-1),i=Math.max(1,r.at-t.at),a=e.map(e=>e.used),o=Math.min(...a),s=Math.max(...a),c=s-o<.5,l=Math.max(1,s-o);return e.map(e=>{let n=(e.at-t.at)/i*100,r=c?15:26-(e.used-o)/l*22;return`${n.toFixed(2)},${r.toFixed(2)}`}).join(` `)}),UiMeter:x7,get formatPercent(){return m7}};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}}),jue={class:`window`},Mue={class:`figures`},Nue={class:`remaining`},Pue=[`title`],Fue={class:`meta`},Iue={class:`hint`},Lue={key:0,class:`spark`,viewBox:`0 0 100 30`,preserveAspectRatio:`none`,"aria-hidden":`true`},Rue=[`points`],zue={key:1,class:`hint`};function Bue(e,t,n,r,i,a){return K(),U(`article`,{class:Y([`limit`,n.tone?`tone-${n.tone}`:void 0])},[I(`header`,null,[I(`strong`,null,X(n.title),1),I(`span`,jue,X(n.label),1)]),I(`div`,Mue,[I(`span`,Nue,X(r.remaining===null?`—`:r.formatPercent(r.remaining)),1),t[0]||=I(`span`,{class:`caption`},`осталось`,-1),t[1]||=I(`span`,{class:`spacer`},null,-1),I(`span`,{class:`countdown`,title:r.resetAt},`сброс через `+X(r.countdown),9,Pue)]),y(r.UiMeter,{value:r.used??0,height:6,tone:r.meterTone,"aria-label":`Лимит ${n.title}, ${n.label}: израсходовано ${r.formatPercent(r.used)}`},null,8,[`value`,`tone`,`aria-label`]),I(`div`,Fue,[I(`span`,null,`израсходовано `+X(r.formatPercent(r.used)),1),I(`span`,null,X(r.pace.text),1)]),I(`p`,Iue,[G(X(r.pace.hint),1),r.projection?(K(),U(P,{key:0},[G(` · `+X(r.projection),1)],64)):D(`v-if`,!0)]),r.spark?(K(),U(`svg`,Lue,[I(`polyline`,{points:r.spark,"vector-effect":`non-scaling-stroke`},null,8,Rue)])):(K(),U(`p`,zue,`история появится после нескольких проверок`))],2)}var Vue=H(Aue,[[`render`,Bue],[`__scopeId`,`data-v-ebd5ae66`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/analytics/ui/LimitCard.vue`]]);function Hue(e){if(!Number.isFinite(e)||e<=0)return 1;let t=10**Math.floor(Math.log10(e)),n=e/t;return(n<=1?1:n<=2?2:n<=5?5:10)*t}function Uue(e,t=6){if(e<=12)return Array.from({length:e},(e,t)=>t);let n=new Set([0,e-1]),r=Math.ceil(e/t);for(let t=r;t<e-1;t+=r)n.add(t);return[...n].sort((e,t)=>e-t)}function w7(e){let t=M(560),n=e.host,r;f(()=>{n.value&&typeof ResizeObserver<`u`&&(r=new ResizeObserver(([e])=>{let n=Math.round(e?.contentRect.width??0);n>160&&(t.value=n)}),r.observe(n.value))}),g(()=>r?.disconnect());let i=B(()=>e.height()),a=B(()=>({l:42,r:e.right??12,t:12,b:20})),o=B(()=>Math.max(20,t.value-a.value.l-a.value.r)),s=B(()=>Math.max(20,i.value-a.value.t-a.value.b)),c=B(()=>Hue(e.maxValue()));return{host:n,width:t,height:i,pad:a,innerWidth:o,innerHeight:s,max:c,ticks:B(()=>[0,.5,1].map(e=>e*c.value)),labelIndexes:B(()=>Uue(e.labelsCount())),y:e=>a.value.t+s.value-e/c.value*s.value}}var Wue=W({__name:`UsageLine`,props:{points:{type:Array,required:!0},height:{type:Number,required:!1,default:160},format:{type:Function,required:!1},color:{type:String,required:!1,default:`var(--info)`},ariaLabel:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=e=>n.format?.(e)??String(Math.round(e)),i=M(),{width:a,height:o,pad:s,innerWidth:c,innerHeight:l,ticks:u,labelIndexes:d,y:f}=w7({host:i,height:()=>n.height,maxValue:()=>Math.max(0,...n.points.map(e=>e.value)),labelsCount:()=>n.points.length}),p=e=>s.value.l+(n.points.length<=1?c.value/2:e/(n.points.length-1)*c.value),m=B(()=>n.points.map((e,t)=>`${p(t)},${f(e.value)}`).join(` `)),h={props:n,format:r,host:i,width:a,height:o,pad:s,innerWidth:c,innerHeight:l,ticks:u,labelIndexes:d,y:f,x:p,line:m,area:B(()=>{if(!n.points.length)return``;let e=p(0),t=p(n.points.length-1),r=s.value.t+l.value;return`${e},${r} ${m.value} ${t},${r}`}),empty:B(()=>n.points.every(e=>!e.value))};return Object.defineProperty(h,"__isScriptSetup",{enumerable:!1,value:!0}),h}}),Gue={ref:`host`,class:`chart`},Kue=[`viewBox`,`aria-label`],que={class:`grid`},Jue=[`x1`,`x2`,`y1`,`y2`],Yue={class:`y-labels`},Xue=[`x`,`y`],Zue=[`points`,`fill`],Que=[`points`,`stroke`],$ue=[`cx`,`cy`,`fill`],ede={class:`x-labels`},tde=[`x`,`y`],nde={key:0,class:`empty`};function rde(e,t,n,r,i,a){return K(),U(`div`,Gue,[I(`div`,{class:`plot`,style:Qe({height:`${r.height}px`})},[(K(),U(`svg`,{viewBox:`0 0 ${r.width} ${r.height}`,"aria-label":n.ariaLabel,role:`img`,preserveAspectRatio:`none`},[I(`g`,que,[(K(!0),U(P,null,S(r.ticks,e=>(K(),U(`line`,{key:e,x1:r.pad.l,x2:r.width-r.pad.r,y1:r.y(e),y2:r.y(e)},null,8,Jue))),128))]),I(`g`,Yue,[(K(!0),U(P,null,S(r.ticks,e=>(K(),U(`text`,{key:e,x:r.pad.l-6,y:r.y(e)+3,"text-anchor":`end`},X(r.format(e)),9,Xue))),128))]),r.empty?D(`v-if`,!0):(K(),U(`polygon`,{key:0,points:r.area,fill:n.color,opacity:`0.12`},null,8,Zue)),r.empty?D(`v-if`,!0):(K(),U(`polyline`,{key:1,points:r.line,stroke:n.color,class:`line`},null,8,Que)),(K(!0),U(P,null,S(n.points,(e,t)=>te((K(),U(`circle`,{key:`${e.label}-${t}`,cx:r.x(t),cy:r.y(e.value),r:`2.5`,fill:n.color},[I(`title`,null,X(e.label)+`: `+X(r.format(e.value)),1)],8,$ue)),[[ae,!r.empty]])),128)),I(`g`,ede,[(K(!0),U(P,null,S(r.labelIndexes,e=>(K(),U(`text`,{key:e,x:r.x(e),y:r.height-5,"text-anchor":`middle`},X(n.points[e]?.label??``),9,tde))),128))])],8,Kue)),r.empty?(K(),U(`p`,nde,`Значения появятся, когда у ответов будет цена`)):D(`v-if`,!0)],4)],512)}var T7=H(Wue,[[`render`,rde],[`__scopeId`,`data-v-1de66980`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/analytics/ui/UsageLine.vue`]]),ide=W({__name:`ProviderBalanceCard`,props:{entry:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r=B(()=>{let e=n.entry.points[0]?.at??0;return(n.entry.points.at(-1)?.at??0)-e}),i=e=>r.value<1296e5?Sue(e):g7(e),a={props:n,span:r,label:i,points:B(()=>n.entry.points.map(e=>({label:i(e.at),value:e.total}))),money:e=>p7(e,n.entry.currency),checked:B(()=>{let e=n.entry.checkedAt;return e?`последняя проверка ${g7(e)}`:`баланс ещё не проверялся`}),UsageLine:T7};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),ade={class:`provider`},ode={class:`currency`},sde={class:`figures`},cde={class:`balance`},lde={class:`movement`},ude={key:0,class:`movement topped`},dde={key:2,class:`hint`},fde={class:`hint`};function pde(e,t,n,r,i,a){return K(),U(`article`,ade,[I(`header`,null,[I(`strong`,null,X(n.entry.label),1),I(`span`,ode,X(n.entry.currency),1)]),I(`div`,sde,[I(`span`,cde,X(n.entry.total===null?`—`:r.money(n.entry.total)),1),t[0]||=I(`span`,{class:`caption`},`остаток`,-1)]),I(`div`,lde,[t[1]||=I(`span`,null,`Потрачено за период`,-1),I(`strong`,null,X(r.money(n.entry.spent)),1)]),n.entry.toppedUp>0?(K(),U(`div`,ude,[t[2]||=I(`span`,null,`Пополнено`,-1),I(`strong`,null,X(r.money(n.entry.toppedUp)),1)])):D(`v-if`,!0),r.points.length>1?(K(),F(r.UsageLine,{key:1,points:r.points,format:r.money,height:132,color:`var(--run)`,"aria-label":`Баланс ${n.entry.label} в ${n.entry.currency}`},null,8,[`points`,`aria-label`])):(K(),U(`p`,dde,`История появится после нескольких проверок баланса.`)),I(`p`,fde,X(r.checked)+` · обновляется со статусной строкой и кнопкой «Обновить».`,1)])}var mde=H(ide,[[`render`,pde],[`__scopeId`,`data-v-a075ebf1`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/analytics/ui/ProviderBalanceCard.vue`]]),hde=W({__name:`UsageBarChart`,props:{points:{type:Array,required:!0},series:{type:Array,required:!0},height:{type:Number,required:!1,default:180},format:{type:Function,required:!1},ariaLabel:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=e=>n.format?.(e)??String(Math.round(e)),i=B(()=>n.points.map(e=>n.series.reduce((t,n)=>t+Math.max(0,e.values[n.key]??0),0))),a=M(),{width:o,height:s,pad:c,innerWidth:l,innerHeight:u,max:d,ticks:f,labelIndexes:p,y:m}=w7({host:a,height:()=>n.height,maxValue:()=>Math.max(0,...i.value),labelsCount:()=>n.points.length,right:10}),h=B(()=>l.value/Math.max(1,n.points.length)),g=B(()=>Math.max(2,Math.min(28,h.value*.68))),_={props:n,format:r,totals:i,host:a,width:o,height:s,pad:c,innerWidth:l,innerHeight:u,max:d,ticks:f,labelIndexes:p,y:m,step:h,barWidth:g,bars:B(()=>n.points.map((e,t)=>{let a=c.value.l+h.value*(t+.5),o=0;return{center:a,segments:n.series.flatMap(n=>{let i=Math.max(0,e.values[n.key]??0);if(!i)return[];let s=i/d.value*u.value,l={key:`${n.key}-${t}`,x:a-g.value/2,y:c.value.t+u.value-o-s,height:Math.max(.5,s),color:n.color,title:`${e.label} · ${n.label}: ${r(i)}`};return o+=s,[l]}),total:i.value[t]??0}})),xLabel:e=>n.points[e]?.label??``,empty:B(()=>i.value.every(e=>e===0))};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),gde={ref:`host`,class:`chart`},_de=[`viewBox`,`aria-label`],vde={class:`grid`},yde=[`x1`,`x2`,`y1`,`y2`],bde={class:`y-labels`},xde=[`x`,`y`],Sde={class:`bars`},Cde=[`x`,`y`,`width`,`height`,`fill`],wde={class:`x-labels`},Tde=[`x`,`y`],Ede={key:0,class:`empty`},Dde={class:`legend`};function Ode(e,t,n,r,i,a){return K(),U(`div`,gde,[I(`div`,{class:`plot`,style:Qe({height:`${r.height}px`})},[(K(),U(`svg`,{viewBox:`0 0 ${r.width} ${r.height}`,"aria-label":n.ariaLabel,role:`img`,preserveAspectRatio:`none`},[I(`g`,vde,[(K(!0),U(P,null,S(r.ticks,e=>(K(),U(`line`,{key:e,x1:r.pad.l,x2:r.width-r.pad.r,y1:r.y(e),y2:r.y(e)},null,8,yde))),128))]),I(`g`,bde,[(K(!0),U(P,null,S(r.ticks,e=>(K(),U(`text`,{key:e,x:r.pad.l-6,y:r.y(e)+3,"text-anchor":`end`},X(r.format(e)),9,xde))),128))]),I(`g`,Sde,[(K(!0),U(P,null,S(r.bars,e=>(K(),U(`g`,{key:e.center},[(K(!0),U(P,null,S(e.segments,e=>(K(),U(`rect`,{key:e.key,x:e.x,y:e.y,width:r.barWidth,height:e.height,fill:e.color,rx:`1`},[I(`title`,null,X(e.title),1)],8,Cde))),128))]))),128))]),I(`g`,wde,[(K(!0),U(P,null,S(r.labelIndexes,e=>(K(),U(`text`,{key:e,x:r.bars[e]?.center??0,y:r.height-5,"text-anchor":`middle`},X(r.xLabel(e)),9,Tde))),128))])],8,_de)),r.empty?(K(),U(`p`,Ede,`Нет ответов с токенами за этот период`)):D(`v-if`,!0)],4),I(`ul`,Dde,[(K(!0),U(P,null,S(n.series,e=>(K(),U(`li`,{key:e.key},[I(`i`,{style:Qe({background:e.color})},null,4),G(X(e.label),1)]))),128))])],512)}var kde=H(hde,[[`render`,Ode],[`__scopeId`,`data-v-f62740c0`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/analytics/ui/UsageBarChart.vue`]]),Ade=W({__name:`UsageBreakdown`,props:{items:{type:Array,required:!0},format:{type:Function,required:!1},ariaLabel:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r={props:n,format:e=>n.format?.(e)??String(e),UiMeter:x7};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),jde=[`aria-label`],Mde={class:`head`},Nde={class:`label`},Pde={class:`value`};function Fde(e,t,n,r,i,a){return K(),U(`ul`,{class:`breakdown`,"aria-label":n.ariaLabel},[(K(!0),U(P,null,S(n.items,e=>(K(),U(`li`,{key:e.label},[I(`div`,Mde,[I(`span`,Nde,X(e.label),1),I(`span`,Pde,X(r.format(e.value)),1)]),y(r.UiMeter,{value:Math.max(1,Math.min(100,e.share*100)),height:5,tone:`info`,soft:``},null,8,[`value`])]))),128))],8,jde)}var Ide=H(Ade,[[`render`,Fde],[`__scopeId`,`data-v-f56aa67e`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/analytics/ui/UsageBreakdown.vue`]]),E7=42,Lde=W({__name:`UiDonut`,props:{items:{type:Array,required:!0},center:{type:String,required:!1},format:{type:Function,required:!1},showValues:{type:Boolean,required:!1},ariaLabel:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=[`var(--info)`,`var(--run)`,`var(--warn)`,`var(--err)`,`var(--faint)`,`var(--muted)`],i=2*Math.PI*E7,a=B(()=>n.items.reduce((e,t)=>e+t.value,0)||1),o={props:n,colors:r,R:E7,C:i,total:a,arcs:B(()=>{let e=0;return n.items.map((t,n)=>{let o=t.value/a.value*i,s={...t,color:r[n%r.length],dash:`${o} ${i-o}`,offset:-e,share:Math.round(t.value/a.value*100)};return e+=o,s})}),format:e=>n.format?.(e)??String(e)};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),Rde={class:`donut`},zde={class:`ring`},Bde=[`aria-label`],Vde=[`stroke`,`stroke-dasharray`,`stroke-dashoffset`],Hde={x:`50`,y:`54`,"text-anchor":`middle`,class:`center`},Ude={class:`label`},Wde={key:0,class:`value`},Gde={class:`share`};function Kde(e,t,n,r,i,a){return K(),U(`div`,Rde,[I(`div`,zde,[(K(),U(`svg`,{viewBox:`0 0 100 100`,role:`img`,"aria-label":n.ariaLabel},[(K(!0),U(P,null,S(r.arcs,e=>(K(),U(`circle`,{key:e.label,cx:`50`,cy:`50`,r:r.R,fill:`none`,stroke:e.color,"stroke-width":`13`,"stroke-dasharray":e.dash,"stroke-dashoffset":e.offset,transform:`rotate(-90 50 50)`},[I(`title`,null,X(e.label)+`: `+X(e.share)+`%`,1)],8,Vde))),128)),I(`text`,Hde,X(n.center??r.format(r.total)),1)],8,Bde))]),I(`ul`,null,[(K(!0),U(P,null,S(r.arcs,e=>(K(),U(`li`,{key:e.label},[I(`i`,{style:Qe({background:e.color})},null,4),I(`span`,Ude,X(e.label),1),n.showValues?(K(),U(`span`,Wde,X(r.format(e.value)),1)):D(`v-if`,!0),I(`span`,Gde,X(e.share)+`%`,1)]))),128))])])}var D7=H(Lde,[[`render`,Kde],[`__scopeId`,`data-v-c968270b`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiDonut.vue`]]),qde=W({__name:`UsageDonut`,props:{items:{type:Array,required:!0},center:{type:String,required:!1},format:{type:Function,required:!1}},setup(e,{expose:t}){t();let n={UiDonut:D7};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function Jde(e,t,n,r,i,a){return K(),F(r.UiDonut,{items:n.items,center:n.center,format:n.format,"show-values":``,"aria-label":`Доля токенов по агентам`},null,8,[`items`,`center`,`format`])}var Yde=H(qde,[[`render`,Jde],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/analytics/ui/UsageDonut.vue`]]),Xde=W({__name:`AnalyticsSettings`,setup(e,{expose:t}){t();let{ranges:n,days:r,data:i,loading:a,probing:o,error:s,now:c,commands:l,totals:u,dailyPoints:d,costPoints:f,agentRows:p,modelRows:m,projectRows:h,taskItems:g,taskTotalTokens:_,taskTotalCost:v,taskPriced:y,taskMode:b,service:x,serviceCalls:S,limitCards:C,providerRows:w,primaryProvider:T,today:E,todayLabel:D,averageTokens:O,cacheShare:k,priced:A,rangeLabel:j,formatTokens:M}=Eue(),N={ranges:n,days:r,data:i,loading:a,probing:o,error:s,now:c,commands:l,totals:u,dailyPoints:d,costPoints:f,agentRows:p,modelRows:m,projectRows:h,taskItems:g,taskTotalTokens:_,taskTotalCost:v,taskPriced:y,taskMode:b,service:x,serviceCalls:S,limitCards:C,providerRows:w,primaryProvider:T,today:E,todayLabel:D,averageTokens:O,cacheShare:k,priced:A,rangeLabel:j,tokens:M,tokenSeries:[{key:`cacheRead`,label:`Из кэша`,color:`var(--info)`},{key:`input`,label:`Без кэша`,color:`var(--run)`},{key:`cacheWrite`,label:`Запись в кэш`,color:`var(--warn)`},{key:`output`,label:`Ответ`,color:`var(--err)`}],stats:B(()=>{let e=u.value;return e?[{label:`Токены`,value:M(e.tokens),hint:ft(e.answers,`ответ`,`ответа`,`ответов`)},{label:`Сегодня`,value:D.value,hint:ft(E.value?.answers??0,`ответ`,`ответа`,`ответов`)},{label:`В среднем в день`,value:M(O.value),hint:j.value},{label:`Из кэша`,value:m7(k.value*100),hint:`${M(e.cacheRead)} токенов`},{label:`Стоимость Projector`,value:A.value?f7(e.cost):`—`,hint:A.value?`${ft(e.pricedAnswers,`ответ`,`ответа`,`ответов`)} с ценой`:T.value?`цена не задана · ниже баланс`:`цена моделей не задана`},...T.value?[{label:`${T.value.label} · расход`,value:p7(T.value.spent,T.value.currency),hint:T.value.total===null?`баланс неизвестен`:`остаток ${p7(T.value.total,T.value.currency)}`}]:[],...S.value>0?[{label:`Служебные вызовы`,value:M(x.value?.tokens??0),hint:`${ft(S.value,`вызов`,`вызова`,`вызовов`)} · Lens, Судья, Доктор`}]:[]]:[]}),UiButton:q,UiCard:je,UiEmpty:am,UiInline:Be,UiMessage:Te,UiStack:Ed,get countRu(){return ft},get formatCost(){return f7},get formatRange(){return _7},LimitCard:Vue,ProviderBalanceCard:mde,UsageBarChart:kde,UsageBreakdown:Ide,UsageDonut:Yde,UsageLine:T7};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}}),Zde={class:`stats`},Qde={class:`stat-label`},$de={class:`stat-hint`},efe={class:`grid`},tfe={class:`card-head`},nfe={class:`providers`},rfe={class:`card-head`},ife={key:0,class:`task-total`},afe={class:`task-note`},ofe={class:`card-head`},sfe={key:0,class:`limits`};function cfe(t,n,r,i,a,o){return K(),F(i.UiStack,{as:`section`,gap:4,onFocusin:n[3]||=e=>i.commands.scope.activate(),onPointerdown:n[4]||=e=>i.commands.scope.activate()},{default:e(()=>[y(i.UiInline,{gap:2,justify:`between`,wrap:``},{default:e(()=>[y(i.UiInline,{gap:1,wrap:``,"aria-label":`Период аналитики`},{default:e(()=>[(K(!0),U(P,null,S(i.ranges,t=>(K(),F(i.UiButton,{key:t,size:`sm`,active:i.days===t,onClick:e=>i.commands.run(`ide.analytics.range.set`,{days:t})},{default:e(()=>[G(X(i.formatRange(t)),1)]),_:2},1032,[`active`,`onClick`]))),128))]),_:1}),y(i.UiButton,{size:`sm`,appearance:`outline`,busy:i.loading||i.probing,onClick:n[0]||=e=>i.commands.run(`ide.analytics.refresh`)},{default:e(()=>[...n[5]||=[G(`Обновить`,-1)]]),_:1},8,[`busy`])]),_:1}),i.error?(K(),F(i.UiMessage,{key:0,tone:`danger`,size:`xs`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0),!i.data&&i.loading?(K(),F(i.UiEmpty,{key:1,density:`compact`},{default:e(()=>[...n[6]||=[G(`Считаю расход…`,-1)]]),_:1})):D(`v-if`,!0),i.data?(K(),U(P,{key:2},[I(`div`,Zde,[(K(!0),U(P,null,S(i.stats,t=>(K(),F(i.UiCard,{key:t.label,appearance:`frame`,density:`compact`,class:`stat`},{default:e(()=>[I(`span`,Qde,X(t.label),1),I(`strong`,null,X(t.value),1),I(`span`,$de,X(t.hint),1)]),_:2},1024))),128))]),I(`div`,efe,[y(i.UiCard,{appearance:`frame`,class:`wide`,as:`section`},{default:e(()=>[I(`header`,tfe,[n[7]||=I(`h4`,null,`Токены по дням`,-1),I(`span`,null,X(i.rangeLabel),1)]),y(i.UsageBarChart,{points:i.dailyPoints,series:i.tokenSeries,format:i.tokens,height:190,"aria-label":`Токены по дням, разделённые по кэшу`},null,8,[`points`,`format`])]),_:1}),i.priced?(K(),F(i.UiCard,{key:0,appearance:`frame`,class:`wide`,as:`section`},{default:e(()=>[n[8]||=I(`header`,{class:`card-head`},[I(`h4`,null,`Стоимость по дням`),I(`span`,null,`в валюте тарифа модели`)],-1),y(i.UsageLine,{points:i.costPoints,format:i.formatCost,height:170,"aria-label":`Стоимость ответов по дням`},null,8,[`points`,`format`])]),_:1})):D(`v-if`,!0),i.providerRows.length?(K(),F(i.UiCard,{key:1,appearance:`frame`,class:`wide`,as:`section`},{default:e(()=>[n[9]||=I(`header`,{class:`card-head`},[I(`h4`,null,`Баланс провайдера`),I(`span`,null,`расход по деньгам, а не по токенам`)],-1),I(`div`,nfe,[(K(!0),U(P,null,S(i.providerRows,e=>(K(),F(i.ProviderBalanceCard,{key:`${e.provider}:${e.currency}`,entry:e},null,8,[`entry`]))),128))])]),_:1})):D(`v-if`,!0),y(i.UiCard,{appearance:`frame`,class:`wide`,as:`section`},{default:e(()=>[I(`header`,rfe,[n[12]||=I(`h4`,null,`Куда ушли деньги`,-1),y(i.UiInline,{gap:1,wrap:``},{default:e(()=>[i.taskPriced?(K(),U(`span`,ife,X(i.taskMode===`cost`?i.formatCost(i.taskTotalCost):i.tokens(i.taskTotalTokens)),1)):D(`v-if`,!0),i.taskPriced?(K(),F(i.UiButton,{key:1,size:`sm`,active:i.taskMode===`tokens`,onClick:n[1]||=e=>i.commands.run(`ide.analytics.tasks.mode.set`,{mode:`tokens`})},{default:e(()=>[...n[10]||=[G(`Токены`,-1)]]),_:1},8,[`active`])):D(`v-if`,!0),i.taskPriced?(K(),F(i.UiButton,{key:2,size:`sm`,active:i.taskMode===`cost`,onClick:n[2]||=e=>i.commands.run(`ide.analytics.tasks.mode.set`,{mode:`cost`})},{default:e(()=>[...n[11]||=[G(`Деньги`,-1)]]),_:1},8,[`active`])):D(`v-if`,!0)]),_:1})]),i.taskItems.length?(K(),F(i.UsageBreakdown,{key:0,items:i.taskItems,format:i.taskMode===`cost`?i.formatCost:i.tokens,"aria-label":`Распределение расхода по задачам`},null,8,[`items`,`format`])):(K(),F(i.UiEmpty,{key:1,density:`compact`,align:`start`},{default:e(()=>[...n[13]||=[G(`Нет данных за период`,-1)]]),_:1})),I(`p`,afe,X(i.taskPriced?`Доля стоимости по задачам: ответы чата и короткие вызовы Projector.`:`Цена моделей не задана — показана доля токенов; суммы появятся после настройки цен. Lens, Судья и Доктор добавляются после первого вызова.`),1)]),_:1}),y(i.UiCard,{appearance:`frame`,as:`section`},{default:e(()=>[I(`header`,ofe,[n[14]||=I(`h4`,null,`Агенты`,-1),I(`span`,null,X(i.countRu(i.totals?.answers??0,`ответ`,`ответа`,`ответов`)),1)]),i.agentRows.length?(K(),F(i.UsageDonut,{key:0,items:i.agentRows,center:i.tokens(i.totals?.tokens??0),format:i.tokens},null,8,[`items`,`center`,`format`])):(K(),F(i.UiEmpty,{key:1,density:`compact`,align:`start`},{default:e(()=>[...n[15]||=[G(`Нет данных за период`,-1)]]),_:1}))]),_:1}),y(i.UiCard,{appearance:`frame`,as:`section`},{default:e(()=>[n[17]||=I(`header`,{class:`card-head`},[I(`h4`,null,`Модели`),I(`span`,null,`доля токенов`)],-1),i.modelRows.length?(K(),F(i.UsageBreakdown,{key:0,items:i.modelRows,format:i.tokens,"aria-label":`Токены по моделям`},null,8,[`items`,`format`])):(K(),F(i.UiEmpty,{key:1,density:`compact`,align:`start`},{default:e(()=>[...n[16]||=[G(`Нет данных за период`,-1)]]),_:1}))]),_:1}),y(i.UiCard,{appearance:`frame`,as:`section`},{default:e(()=>[n[19]||=I(`header`,{class:`card-head`},[I(`h4`,null,`Проекты`),I(`span`,null,`доля токенов`)],-1),i.projectRows.length?(K(),F(i.UsageBreakdown,{key:0,items:i.projectRows,format:i.tokens,"aria-label":`Токены по проектам`},null,8,[`items`,`format`])):(K(),F(i.UiEmpty,{key:1,density:`compact`,align:`start`},{default:e(()=>[...n[18]||=[G(`Нет данных за период`,-1)]]),_:1}))]),_:1})]),y(i.UiCard,{appearance:`frame`,as:`section`},{default:e(()=>[n[22]||=I(`header`,{class:`card-head`},[I(`h4`,null,`Лимиты подписок`),I(`span`,null,`остаток и темп расхода окна`)],-1),i.limitCards.length?(K(),U(`div`,sfe,[(K(!0),U(P,null,S(i.limitCards,e=>(K(),F(i.LimitCard,{key:`${e.series.agent}:${e.series.window}`,series:e.series,title:e.title,label:e.label,tone:e.tone,now:i.now.getTime()},null,8,[`series`,`title`,`label`,`tone`,`now`]))),128))])):(K(),F(i.UiEmpty,{key:1,density:`compact`,align:`start`},{default:e(()=>[...n[20]||=[G(` Лимиты ещё не проверялись. Нажмите «Обновить» — Projector спросит их у настроенных агентов. `,-1)]]),_:1})),i.probing?(K(),F(i.UiMessage,{key:2,tone:`muted`,size:`xs`},{default:e(()=>[...n[21]||=[G(` Запрашиваю лимиты у агентов… `,-1)]]),_:1})):D(`v-if`,!0)]),_:1}),i.priced?D(`v-if`,!0):(K(),F(i.UiMessage,{key:0,tone:`muted`,size:`xs`,variant:`note`},{default:e(()=>[...n[23]||=[G(` Стоимость Projector по токенам не считается: у моделей не задана цена. Её можно указать в разделе «Модели и провайдеры»; фактические деньги видны по балансу провайдера. `,-1)]]),_:1}))],64)):D(`v-if`,!0)]),_:1})}var lfe=[{id:`interface`,title:`Интерфейс`,group:`Среда`,description:`Режим запуска, системная горячая клавиша и цветовая схема.`,keywords:`окно браузер GTK трей хоткей shortcut запуск цвет тема схема светлая тёмная appearance`,component:Mee},{id:`pwa`,title:`Приложение`,group:`Среда`,description:`Установка на домашний экран, отдельное окно и полноэкранный режим.`,keywords:`pwa установка приложение иконка домашний экран ярлык fullscreen полный экран standalone service worker кеш офлайн`,component:dp},{id:`folders`,title:`Избранные папки`,group:`Среда`,description:`Папки с проектами: их проекты идут первыми, на диске ищутся ещё не открытые, внутри создаются новые.`,keywords:`избранное папки проекты создать новый проект каталог на диске favorite folder`,component:rte},{id:`editor`,title:`Редактор`,group:`Среда`,description:`Тема кода и сравнения изменений во всех проектах.`,keywords:`цвет тема подсветка код diff`,component:mce,props:{embedded:!0}},{id:`files`,title:`Файлы`,group:`Среда`,description:`Исключения дерева проекта и поиска через glob-паттерны files.exclude.`,keywords:`exclude files.exclude glob скрыть дерево node_modules dist .git vendor coverage поиск файлы`,component:h6,props:{embedded:!0}},{id:`keybindings`,title:`Горячие клавиши`,group:`Среда`,description:`Сочетания клавиш для команд Projector.`,keywords:`keyboard shortcut хоткей команды сочетания`,component:Vm,props:{embedded:!0}},{id:`network`,title:`Сеть`,group:`Подключения`,description:`Доступ с других устройств и пароль локальной сети.`,keywords:`LAN localhost телефон пароль доступ сервер`,component:Rae},{id:`hub`,title:`Hub`,group:`Подключения`,description:`Подключение этой машины к общему веб-интерфейсу Projector.`,keywords:`hub устройства удалённый доступ туннель токен сервер`,component:He},{id:`openai-api`,title:`OpenAI API`,group:`Подключения`,description:`OpenAI-совместимый API Projector для других приложений на машине.`,keywords:`OpenAI API шлюз gateway proxy v1 chat completions провайдер ключ AI LLM`,component:Jae},{id:`github`,title:`GitHub`,group:`Подключения`,description:`Авторизация и папка для импорта репозиториев.`,keywords:`интеграции OAuth Client ID token токен PAT импорт папка репозиторий`,component:iue},{id:`gitlab`,title:`GitLab`,group:`Подключения`,description:`Токен, адрес сервера и папка для импорта проектов GitLab.`,keywords:`интеграции gitlab self-hosted token токен PAT импорт папка проект клонирование`,component:bue},{id:`docker`,title:`Docker`,group:`Подключения`,description:`Локальное окружение Docker и состояние подключения.`,keywords:`интеграции контейнер context daemon compose окружение`,component:k4},{id:`analytics`,title:`Аналитика расхода`,group:`Агент`,description:`Токены и стоимость по ответам агентов, доли моделей и проектов, остаток и темп лимитов подписок. Считается локально по истории чатов.`,keywords:`аналитика расход токены стоимость цена лимиты квоты графики период день модели проекты кэш остаток темп usage analytics charts`,component:H(Xde,[[`render`,cfe],[`__scopeId`,`data-v-5204243c`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/analytics/ui/AnalyticsSettings.vue`]])},{id:`providers`,title:`Модели и провайдеры`,group:`Агент`,description:`Провайдеры OpenAI-compatible API для агента Projector.`,keywords:`Qwen OpenAI API key ключ URL модель AI LLM`,component:ple},{id:`agents`,title:`Агенты`,group:`Агент`,description:`Включение, режим сессий и возможности каждого адаптера — на одной странице у агента.`,keywords:`интеграции адаптеры кодовые агенты включить отключить выключить сессия терминал GUI TUI графический чат режим вывод возможности умения фичи виджеты widgets графики формы команды IDE MCP`,component:Xw},{id:`agent-roles`,title:`Роли агентов`,group:`Агент`,description:`Служебные роли и пресеты чатов: агент, модель и настройки.`,keywords:`роли agent roles doctor lens judge доктор линза судья модель служебные внутренние вызовы chat роль чата пресет preset`,component:J_},{id:`agent-judge`,title:`Судья Projector`,group:`Агент`,description:`Оценка риска действий и автоматическое разрешение безопасных запросов.`,keywords:`судья judge риск безопасность подтверждение разрешение авто threshold`,component:Fw},{id:`agent-memory`,title:`Память агента`,group:`Агент`,description:`Заметки, которые штатный агент помнит между разговорами.`,keywords:`память заметки запомни memory агент Projector инструкции предпочтения`,component:Vw},{id:`agent-mcp`,title:`MCP-серверы агента`,group:`Агент`,description:`Внешние серверы с инструментами для штатного агента.`,keywords:`mcp сервер инструменты model context protocol агент Projector stdio http sse`,component:Rw},{id:`agent-hooks`,title:`Хуки агента`,group:`Агент`,description:`Команды до и после инструментов агента и после его ответа.`,keywords:`хуки hooks уведомление PreToolUse PostToolUse Stop команда агент Projector`,component:Xre},{id:`agent-web`,title:`Веб-поиск агента`,group:`Агент`,description:`Поисковый сервис, через который штатный агент ищет в интернете.`,keywords:`веб поиск интернет search brave searxng агент Projector ключ`,component:iT},{id:`agent-skills`,title:`Навыки и команды агента`,group:`Агент`,description:`Навыки и слэш-команды, которые находит штатный агент.`,keywords:`навыки skills слэш команды slash prompt SKILL.md агент Projector`,component:tT}],ufe=W({__name:`SettingsPanel`,props:{selected:{type:String,required:!1},embedded:{type:Boolean,required:!1}},emits:[`select`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=M(`interface`),o={"agent-integrations":`agents`,"agent-sessions":`agents`,"agent-features":`agents`},s=B(()=>{let e=r.selected??a.value;return o[e]??e});function c(e){a.value=e,i(`select`,e)}let{providers:l,activeProviderId:u,balances:d,revision:p,load:m,loadBalances:h}=$5(),{isEnabled:g,modeOf:_}=IC();f(()=>void m()),E(p,()=>void h());let v={props:r,emit:i,selection:a,legacySections:o,current:s,select:c,providers:l,activeProviderId:u,balances:d,revision:p,load:m,loadBalances:h,isEnabled:g,modeOf:_,sections:B(()=>lfe.map(e=>{if(e.id===`providers`)return{...e,props:{providerId:tle(s.value),onOpen:e=>c(e?n7(e):`providers`)},items:l.value.map(e=>{let t=d.value[e.id];return{id:n7(e.id),title:e.name.trim()||`без названия`,hint:e.enabled?t?.status===`ready`?t7(t.entries):e.id===u.value?`по умолчанию`:void 0:`выкл`,problem:!e.url.trim()||e.enabled&&e.models.length===0}})};if(e.id!==`agents`)return e;let t=st();return{...e,keywords:`${e.keywords} ${t.map(e=>`${e.title} ${e.backend} ${e.program}`).join(` `)}`,props:{agentId:$L(s.value),onOpen:e=>c(e?QL(e):`agents`)},items:t.map(e=>({id:QL(e.backend),title:e.title,hint:e.builtin?`встроенный`:g(e.program)?_(e.program)===`gui`?`чат`:void 0:`выкл`}))}})),readout:e=>({note:`Настройки Projector`,text:Nn(`Раздел: ${e.sectionTitle||e.section||`—`}`,e.query?`Поиск: «${e.query}»`:``,`Видимых разделов: ${e.visible}`)}),get SettingsWorkbench(){return Gg}};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}});function dfe(e,t,n,r,i,a){return K(),F(r.SettingsWorkbench,{sections:r.sections,selected:r.current,embedded:n.embedded,read:r.readout,onSelect:r.select},null,8,[`sections`,`selected`,`embedded`])}var O7=H(ufe,[[`render`,dfe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/app-settings/SettingsPanel.vue`]]),k7={settings:{component:O7,keepAlive:!0,ownKeys:!0,props:()=>({embedded:!0})}},ffe={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function pfe(e,t){return K(),U(`svg`,ffe,[...t[0]||=[I(`path`,{fill:`currentColor`,d:`M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12`},null,-1)]])}var A7=L({name:`simple-icons-github`,render:pfe}),j7=class extends Error{status;constructor(e,t){super(e),this.status=t}};async function M7(e,t,n){let r=await fetch(`/api/integrations/github/browse/${e}?${new URLSearchParams(t)}`,{signal:n}),i=await r.json();if(!r.ok)throw new j7(i.error||`Не удалось прочитать GitHub`,r.status);return i}var N7=(e,t=``,n)=>M7(`repository`,{repository:e,ref:t},n),mfe=(e,t,n)=>M7(`tree`,{repository:e,sha:t},n),hfe=(e,t,n,r)=>M7(`file`,{repository:e,sha:t,path:n},r),P7=(e,t,n)=>M7(`issues`,{repository:e,...t},n),F7=(e,t,n)=>M7(`issue`,{repository:e,number:String(t)},n),I7=(e,t,n)=>M7(`pulls`,{repository:e,...t},n),L7=(e,t,n)=>M7(`pull`,{repository:e,number:String(t)},n),R7=(e,t,n)=>M7(`discussions`,{repository:e,...t},n),z7=(e,t,n)=>M7(`discussion`,{repository:e,number:String(t)},n),B7=(e,t,n)=>M7(`pipelines`,{repository:e,...t},n),V7=(e,t,n)=>M7(`pipeline`,{repository:e,id:String(t)},n),H7=(e,t,n)=>M7(`job`,{repository:e,id:String(t)},n),U7=(e,t,n)=>M7(`releases`,{repository:e,...t},n),W7=(e,t,n)=>M7(`release`,{repository:e,tag:t},n),gfe=`Действие недоступно для этого источника workspace`;function G7(e,t={}){return{read(n,r,i){if(n===`pipelines`)return(t.readPipelines??B7)(e,r,i);if(n!==`pipeline`&&n!==`job`)throw Error(gfe);let a=Number(r.id);if(!Number.isSafeInteger(a)||a<=0)throw Error(`Укажите номер записи CI`);return n===`pipeline`?(t.readPipeline??V7)(e,a,i):(t.readJob??H7)(e,a,i)}}}var _fe=`Действие недоступно для этого источника workspace`;function K7(e,t={}){return{read(n,r,i){if(n===`releases`)return(t.readReleases??U7)(e,r,i);if(n!==`release`)throw Error(_fe);let a=(r.tag||``).trim();if(!a)throw Error(`Укажите тег релиза`);return(t.readRelease??W7)(e,a,i)}}}var q7=(e,t)=>St({id:e,key:({number:t})=>`${e}:${t}`,path:({number:e})=>`${t} #${e}`,title:({number:e,title:n})=>`${n?`${n} · `:``}${t} #${e}`,hint:({title:e})=>e??``,preview:!0}),J7=q7(`issue`,`Issue`),Y7=q7(`pull`,`PR`),X7=q7(`discussion`,`Discussion`),Z7=q7(`pipeline`,`Pipeline`),Q7=q7(`job`,`Job`),$7=St({id:`release`,key:({tag:e})=>`release:${e}`,path:({tag:e})=>`Release ${e}`,title:({tag:e,title:t})=>`${t?`${t} · `:``}Release ${e}`,hint:({title:e})=>e??``,preview:!0}),e9=ct(`github-integration`,`github:integration`,`GitHub`,`Подключение к GitHub`);function vfe(e){return{id:`github-connection`,layout:`editor`,tabs:[e9],features:{terminals:!1,docker:!1,agent:!1,settings:!1,persist:!1,externalFiles:!1},providers:{files:{assetUrl:()=>``,async read(t){if(t===`root`)return{root:iu({kind:`github`,repository:e})};if(t===`tree`)return{entries:[],truncated:!1};throw Error(`Подключите GitHub, чтобы открыть файлы`)}}}}}var t9=`Действие недоступно для этого источника workspace`;function n9(e,t,n,r,i,a){return{read(o,s,c){if(o===e)return i(r,s,c);if(o===t){let e=Number(s.number);if(!Number.isInteger(e)||e<=0)throw Error(`Укажите номер ${n}`);return a(r,e,c)}throw Error(t9)}}}function yfe(e,t){let n=vt(e),r=n9(`issues`,`issue`,`issue`,t,P7,F7),i=n9(`pulls`,`pull`,`pull request`,t,I7,L7),a=n9(`discussions`,`discussion`,`обсуждения`,t,R7,z7);return{...n,id:`local-github`,sidebar:[...n.sidebar??[],{id:`issues`,title:`Issues`},{id:`pulls`,title:`Pull requests`},{id:`discussions`,title:`Discussions`},{id:`pipelines`,title:`Pipelines`,requires:`pipelines`},{id:`releases`,title:`Releases`,requires:`releases`}],tabs:[...n.tabs??[],ct(`repository`,`github:repository`,`О репозитории`,`Информация о репозитории GitHub`),J7,Y7,X7,Z7,Q7,$7],providers:{...n.providers,issues:r,pulls:i,discussions:a,pipelines:G7(t),releases:K7(t)}}}function bfe(e,t,n,r,i={readRepository:N7,readTree:mfe,readFile:hfe,readGit:M7,readIssues:P7,readIssue:F7,readPulls:I7,readPull:L7,readDiscussions:R7,readDiscussion:z7,readPipelines:B7,readPipeline:V7,readJob:H7,readReleases:U7,readRelease:W7}){let a=t,o=new Map,s=new Map;function c(t){let n=s.get(t);return n||(n=i.readRepository(e,t),s.set(t,n),n.catch(()=>s.delete(t))),n}async function l(t,n,r){if(t.empty)return[];if(n&&n.split(`/`).some(e=>!e||e===`.`||e===`..`))throw Error(`Неверный путь папки`);let a=`${t.tree}:${n}`,s=o.get(a);if(s)return s;let c=(async()=>{let a=t.tree;if(n){let e=n.split(`/`),i=(await l(t,e.slice(0,-1).join(`/`),r)).find(t=>t.name===e.at(-1));if(i?.type!==`tree`)throw Error(`Папка не найдена`);a=i.sha}let o=await i.readTree(e,a,r);if(o.truncated)throw Error(`GitHub вернул неполный список этой папки`);return o.entries})();o.set(a,c);try{return await c}catch(e){throw o.delete(a),e}}let u={allBranches:!1,async read(t,n,r){let o=a;if(t===`git`)return{available:!0,branch:o.branch,changes:[]};if(t===`gutter`)return{available:!1,original:``};if(![`log`,`commit`,`commit-diff`].includes(t))throw Error(t9);return(i.readGit??M7)(t,{...n,repository:e,sha:o.commit},r)}},d={snapshots:!0,compare:!0,async refresh(){let t=await i.readRepository(e,n);o.clear(),a=t,r(t)},assetUrl(t){return We(`/api/integrations/github/browse/asset?${new URLSearchParams({repository:e,sha:a.tree,path:t})}`)},scopeAssetUrl(t,n){return t.kind===`commit`?We(`/api/integrations/github/browse/asset?${new URLSearchParams({repository:e,commit:t.rev,path:n})}`):``},async read(t,n,r){let o=n.rev?await c(n.rev):a,s=n.path||``;if(t===`root`)return{root:iu({kind:`github`,repository:o.fullName})};if(t===`changes`||t===`compare-file`){let a=t===`changes`?`compare-changes`:`compare-file`;return(i.readGit??M7)(a,{...n,repository:e},r)}if(t===`tree`){let e=(await l(o,s,r)).map(e=>({name:e.name,path:s?`${s}/${e.name}`:e.name,directory:e.type===`tree`,executable:e.mode===`100755`,disabled:e.type===`commit`})),t=Tl(e,s,n);return{entries:e.slice(t.offset,t.end),truncated:t.nextOffset!==null,total:t.total,nextOffset:t.nextOffset}}if(t!==`file`)throw Error(t9);if(!s||s.includes(`\\`)||s.includes(`\0`)||s.split(`/`).some(e=>!e||e===`.`||e===`..`))throw Error(`Неверный путь файла`);let u=s.split(`/`),d=(await l(o,u.slice(0,-1).join(`/`),r)).find(e=>e.name===u.at(-1));if(d?.type!==`blob`)throw Error(`Файл не найден`);if(d.size>5242880)throw Error(`Просмотр файлов больше 5 MiB пока недоступен`);let f=await i.readFile(e,d.sha,s,r);return{path:s,content:f.content,binary:f.binary,size:f.size,readonly:!0,image:!!f.image&&!/\.svg$/i.test(s)}}},f=n9(`issues`,`issue`,`issue`,e,i.readIssues??P7,i.readIssue??F7),p=n9(`pulls`,`pull`,`pull request`,e,i.readPulls??I7,i.readPull??L7),m=n9(`discussions`,`discussion`,`обсуждения`,e,i.readDiscussions??R7,i.readDiscussion??z7);return{id:`github`,layout:`editor`,sidebar:[{id:`issues`,title:`Issues`},{id:`pulls`,title:`Pull requests`},{id:`discussions`,title:`Discussions`},{id:`pipelines`,title:`Pipelines`,requires:`pipelines`},{id:`releases`,title:`Releases`,requires:`releases`}],tabs:[e9,ct(`repository`,`github:repository`,`О репозитории`,`Информация о репозитории GitHub`),J7,Y7,X7,Z7,Q7,$7],features:{terminals:!1,docker:!1,agent:!1,settings:!1,persist:!1,externalFiles:!1},providers:{files:d,git:u,issues:f,pulls:p,discussions:m,pipelines:G7(e,i),releases:K7(e,i)}}}var xfe=W({__name:`GithubRepositoryInfo`,props:{repository:{type:Object,required:!0},snapshot:{type:Boolean,required:!1,default:!0}},setup(e,{expose:t}){t();let n=e,r={props:n,model:B(()=>{let e=n.repository;return{name:e.fullName.split(`/`).at(-1)??e.fullName,namespace:e.owner||e.fullName.split(`/`)[0],fullName:e.fullName,avatarUrl:e.avatarUrl,description:e.description,private:e.private,htmlUrl:e.htmlUrl,hostLabel:`GitHub`,topics:e.topics,stats:[{key:`stars`,label:`Звёзды`,value:e.stars,icon:`star`},{key:`forks`,label:`Форки`,value:e.forks,icon:`fork`},{key:`watchers`,label:`Наблюдатели`,value:e.watchers,icon:`eye`},{key:`issues`,label:`Открытые issues`,value:e.openIssues,icon:`issue`}],details:[{key:`language`,label:`Язык`,value:e.language||`—`},{key:`license`,label:`Лицензия`,value:e.license||`—`},{key:`defaultBranch`,label:`Ветка по умолчанию`,value:e.defaultBranch||`—`},{key:`ref`,label:`Открытый ref`,value:e.empty?`пустой репозиторий`:`${e.branch}${e.commit?` · ${e.commit.slice(0,7)}`:``}`},{key:`created`,label:`Создан`,value:En(e.createdAt)||`—`},{key:`updated`,label:`Обновлён`,value:En(e.updatedAt)||`—`}],homepage:e.homepage||void 0,license:e.license||void 0,refNote:n.snapshot&&!e.empty?{text:`Дерево и история привязаны к снимку`,code:e.tree.slice(0,7)}:void 0,readout:{note:`О репозитории`,text:Nn(`Репозиторий ${e.fullName}`,e.description?`Описание: ${e.description}`:`Без описания`,e.language?`Язык: ${e.language}`:``,e.private?`Приватный`:`Публичный`,`Звёзды: ${e.stars}, форки: ${e.forks}, наблюдатели: ${e.watchers}, открытые issues: ${e.openIssues}`,`Ветка по умолчанию: ${e.defaultBranch||`—`}`,e.license?`Лицензия: ${e.license}`:``,e.topics.length?`Темы: ${e.topics.join(`, `)}`:``,`URL: ${e.htmlUrl}`)}}}),get RepositoryOverview(){return wz}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function Sfe(e,t,n,r,i,a){return K(),F(r.RepositoryOverview,{repository:r.model},null,8,[`repository`])}var r9=H(xfe,[[`render`,Sfe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/github-workspace/ui/GithubRepositoryInfo.vue`]]),Cfe=W({__name:`GithubWorkspace`,props:{repository:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=Rr(),i=Lr(),a=e=>i.push(Hu(e)).then(()=>void 0),o=iu({kind:`github`,repository:n.repository}),s=()=>typeof r.query.ref==`string`?r.query.ref:``,{metadata:c,error:l,needsConnection:u,profileReady:d,workspaceVersion:f,workspace:p,loadRepository:m,ready:h}=nz({projectId:o,read:e=>N7(n.repository,s(),e),createProfile:(e,t)=>bfe(n.repository,e,s(),t),createConnectionProfile:()=>vfe(n.repository),isAuthError:e=>e instanceof j7&&e.status===401,errorFallback:`Не удалось открыть репозиторий`,readmeError:`Не удалось прочитать README`,connectionTab:`github-integration`,initialPath:()=>typeof r.query.path==`string`?r.query.path:``}),g=Je(`github:${o}`,()=>({surface:`github`,projectId:o,repository:n.repository,readonly:!0,commit:c.value?.commit||null}));g.scope.registerCommand({id:`ide.github.repository.refresh`,title:`Обновить репозиторий GitHub`,description:`Перечитывает GitHub и обновляет общий workspace без клонирования.`,enabled:()=>!!p.value,run:()=>u.value?m():p.value?.refresh()}),g.scope.registerCommand({id:`ide.github.repository.info`,title:`Информация о репозитории GitHub`,description:`Открывает вкладку с описанием, статистикой и метаданными репозитория.`,enabled:()=>!!c.value&&!!p.value,run:()=>p.value?.openTab(`repository`)}),g.scope.registerCommand({id:`ide.github.integration.open`,title:`Настроить подключение GitHub`,description:`Открывает вкладку интеграции GitHub для установки токена.`,enabled:()=>!!p.value,run:()=>p.value?.openTab(`github-integration`)});let _={props:n,route:r,router:i,navigate:a,projectId:o,gitRef:s,metadata:c,error:l,needsConnection:u,profileReady:d,workspaceVersion:f,workspace:p,loadRepository:m,ready:h,commands:g,tabViews:{...k7,"github-integration":{component:uue,ownKeys:!0,keepAlive:!0,props:()=>({repository:n.repository,onConnected:m})},repository:{component:r9,keepAlive:!0,props:()=>({repository:c.value})},pipeline:{component:v2,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,id:e.params?.id,host:`GitHub`,onOpenJob:e=>t.openTab(`job`,e,{preview:!1})})},job:{component:D2,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,id:e.params?.id,host:`GitHub`})},release:{component:L5,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,tag:typeof e.params?.tag==`string`?e.params.tag:``,host:`GitHub`})}},UiMessage:Te,get ProjectWorkspace(){return i7},UiButton:q,get GithubClone(){return sue},get IconGithub(){return A7}};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),wfe={key:0,role:`alert`};function Tfe(t,n,r,i,a,o){return K(),U(P,null,[y(i.GithubClone,{repository:i.props.repository,navigate:i.navigate},null,8,[`repository`]),i.profileReady?(K(),F(i.ProjectWorkspace,{key:i.workspaceVersion,ref:i.ready,"project-id":i.projectId,"tab-views":i.tabViews},{"terminal-actions":e(()=>[y(i.UiButton,{shape:`icon`,size:`sm`,title:i.needsConnection?`Подключить GitHub`:`Информация о репозитории`,"aria-label":i.needsConnection?`Подключить GitHub`:`Информация о репозитории`,"data-command":i.needsConnection?`ide.github.integration.open`:`ide.github.repository.info`,onClick:n[0]||=e=>i.commands.run(i.needsConnection?`ide.github.integration.open`:`ide.github.repository.info`)},{default:e(()=>[y(i.IconGithub,{"aria-hidden":`true`})]),_:1},8,[`title`,`aria-label`,`data-command`])]),"terminal-status":e(()=>[i.error?(K(),U(`span`,wfe,X(i.error),1)):D(`v-if`,!0),i.metadata?(K(),F(i.UiMessage,{key:1,as:`span`,tone:`muted`,size:`xs`,class:`github-status`,title:i.metadata.commit},{default:e(()=>[G(X(i.metadata.branch)+` · `+X(i.metadata.commit.slice(0,7))+` · только чтение`,1)]),_:1},8,[`title`])):D(`v-if`,!0)]),_:1},8,[`project-id`])):(K(),F(i.UiMessage,{key:1,size:`xs`,variant:`padded`,tone:i.error?`danger`:`muted`,class:`msg`,role:i.error?`alert`:`status`},{default:e(()=>[G(X(i.error||`открываю репозиторий…`),1)]),_:1},8,[`tone`,`role`]))],64)}var Efe=H(Cfe,[[`render`,Tfe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/github-workspace/GithubWorkspace.vue`]]),Dfe=W({__name:`UiAsyncContent`,props:{load:{type:Function,required:!0},watchKeys:{type:Function,required:!0},errorText:{type:String,required:!0},loadingText:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=ee(),i=ee(``),a=0;async function o(){let e=++a;r.value=void 0,i.value=``;try{let t=await n.load();e===a&&(r.value=t)}catch(t){e===a&&(i.value=t instanceof Error?t.message:n.errorText)}}E(()=>n.watchKeys(),o,{immediate:!0});let s={props:n,data:r,error:i,get request(){return a},set request(e){a=e},run:o,UiMessage:Te};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}});function Ofe(t,n,r,i,a,o){return i.data===void 0?(K(),F(i.UiMessage,{key:1,size:`xs`,variant:`padded`,tone:i.error?`danger`:`muted`,padding:4,role:i.error?`alert`:`status`},{default:e(()=>[G(X(i.error||r.loadingText),1)]),_:1},8,[`tone`,`role`])):c(t.$slots,`default`,{data:i.data},void 0,void 0,0)}var i9=H(Dfe,[[`render`,Ofe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/common/ui/UiAsyncContent.vue`]]),kfe=W({__name:`GithubRepositoryInfoLoader`,props:{repository:{type:String,required:!0},gitRef:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r={props:n,load:async()=>{if(!n.repository)throw Error(`origin проекта не указывает на GitHub`);return N7(n.repository,n.gitRef??``)},keys:()=>[n.repository,n.gitRef],UiAsyncContent:i9,GithubRepositoryInfo:r9};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function Afe(t,n,r,i,a,o){return K(),F(i.UiAsyncContent,{load:i.load,"watch-keys":i.keys,"error-text":`Не удалось прочитать репозиторий`,"loading-text":`загружаю репозиторий…`},{default:e(({data:e})=>[y(i.GithubRepositoryInfo,{repository:e,snapshot:!1},null,8,[`repository`])]),_:1})}var jfe=H(kfe,[[`render`,Afe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/github-workspace/ui/GithubRepositoryInfoLoader.vue`]]);Xt({match:e=>ru(e).kind===`github`,create:()=>{throw Error(`Репозиторий GitHub не открыт`)}});var Mfe=W({__name:`[...githubPath]`,setup(e,{expose:t}){t();let n=Rr(),r={route:n,repository:B(()=>Bu(n.params.githubPath)),get GithubWorkspace(){return Efe}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Nfe={class:`project-page`};function Pfe(e,t,n,r,i,a){return K(),U(`section`,Nfe,[(K(),F(r.GithubWorkspace,{key:r.repository,repository:r.repository},null,8,[`repository`]))])}var Ffe=H(Mfe,[[`render`,Pfe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/pages/gh/projects/[...githubPath].vue`]]);Xt({match:e=>ru(e).kind===`gitlab`,create:()=>{throw Error(`Проект GitLab не открыт`)}});var Ife={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Lfe(e,t){return K(),U(`svg`,Ife,[...t[0]||=[I(`path`,{fill:`currentColor`,d:`m23.6 9.593l-.033-.086L20.3.98a.85.85 0 0 0-.336-.405a.875.875 0 0 0-1 .054a.9.9 0 0 0-.29.44L16.47 7.818H7.537L5.333 1.07a.86.86 0 0 0-.29-.441a.875.875 0 0 0-1-.054a.86.86 0 0 0-.336.405L.433 9.502l-.032.086a6.066 6.066 0 0 0 2.012 7.01l.01.009l.03.021l4.977 3.727l2.462 1.863l1.5 1.132a1.01 1.01 0 0 0 1.22 0l1.499-1.132l2.461-1.863l5.006-3.75l.013-.01a6.07 6.07 0 0 0 2.01-7.002`},null,-1)]])}var a9=L({name:`simple-icons-gitlab`,render:Lfe}),o9=class extends Error{status;constructor(e,t){super(e),this.status=t}};async function s9(e,t,n){let r=await fetch(`/api/integrations/gitlab/browse/${e}?${new URLSearchParams(t)}`,{signal:n}),i=await r.json();if(!r.ok)throw new o9(i.error||`Не удалось прочитать GitLab`,r.status);return i}var c9=(e,t=``,n)=>s9(`repository`,{repository:e,ref:t},n),Rfe=(e,t,n=``,r)=>s9(`tree`,{repository:e,sha:t,path:n},r),zfe=(e,t,n,r)=>s9(`file`,{repository:e,sha:t,path:n},r),l9=(e,t,n)=>s9(`search`,{repository:e,...t},n);function u9(e,t,n){return s9(e,t,n)}var d9=(e,t,n)=>s9(`issues`,{repository:e,...t},n),f9=(e,t,n)=>s9(`issue`,{repository:e,number:String(t)},n),p9=(e,t,n)=>s9(`merge-requests`,{repository:e,...t},n),m9=(e,t,n)=>s9(`merge-request`,{repository:e,number:String(t)},n),h9=(e,t,n)=>s9(`merge-request-files`,{repository:e,number:String(t)},n),g9=(e,t,n,r)=>s9(`merge-request-diff`,{repository:e,number:String(t),path:n},r),_9=(e,t,n)=>s9(`pipelines`,{repository:e,...t},n),v9=(e,t,n)=>s9(`pipeline`,{repository:e,id:String(t)},n),y9=(e,t,n)=>s9(`job`,{repository:e,id:String(t)},n),b9=(e,t,n)=>s9(`releases`,{repository:e,...t},n),x9=(e,t,n)=>s9(`release`,{repository:e,tag:t},n),Bfe=`Действие недоступно для этого источника workspace`;function S9(e,t={}){return{read(n,r,i){if(n===`releases`)return(t.readReleases??b9)(e,r,i);if(n!==`release`)throw Error(Bfe);let a=(r.tag||``).trim();if(!a)throw Error(`Укажите тег релиза`);return(t.readRelease??x9)(e,a,i)}}}var C9=(e,t)=>St({id:e,key:({number:t})=>`${e}:${t}`,path:({number:e})=>`${t} #${e}`,title:({number:e,title:n})=>`${n?`${n} · `:``}${t} #${e}`,hint:({title:e})=>e??``,preview:!0}),w9=(e,t)=>St({id:e,key:({id:t})=>`${e}:${t}`,path:({id:e})=>`${t} #${e}`,title:({id:e,title:n})=>`${n?`${n} · `:``}${t} #${e}`,hint:({title:e})=>e??``,preview:!0}),T9=C9(`issue`,`Issue`),E9=C9(`pull`,`MR`),D9=w9(`pipeline`,`Pipeline`),O9=w9(`job`,`Job`),k9=St({id:`release`,key:({tag:e})=>`release:${e}`,path:({tag:e})=>`Release ${e}`,title:({tag:e,title:t})=>`${t?`${t} · `:``}Release ${e}`,hint:({title:e})=>e??``,preview:!0}),A9=ct(`gitlab-integration`,`gitlab:integration`,`GitLab`,`Подключение к GitLab`);function Vfe(e,t){return{id:`gitlab-connection`,layout:`editor`,tabs:[A9],features:{terminals:!1,docker:!1,agent:!1,settings:!1,persist:!1,externalFiles:!1},providers:{files:{assetUrl:()=>``,async read(n){if(n===`root`)return{root:iu({kind:`gitlab`,instance:e,path:t})};if(n===`tree`)return{entries:[],truncated:!1};throw Error(`Подключите GitLab, чтобы открыть файлы`)}}}}}var j9=`Действие недоступно для этого источника workspace`,M9=ct(`repository`,`gitlab:repository`,`О проекте`,`Информация о проекте GitLab`);function N9(e,t,n,r,i,a){return{read(o,s,c){if(o===e)return i(r,s,c);if(o===t){let e=Number(s.number);if(!Number.isInteger(e)||e<=0)throw Error(`Укажите номер ${n}`);return a(r,e,c)}throw Error(j9)}}}function P9(e,t=F9){let n=N9(`pulls`,`pull`,`merge request`,e,t.readMergeRequests??p9,t.readMergeRequest??m9);return{read(r,i,a){if(r!==`pull-files`&&r!==`pull-diff`)return n.read(r,i,a);let o=Number(i.number);if(!Number.isInteger(o)||o<=0)throw Error(`Укажите номер merge request`);if(r===`pull-files`)return(t.readMergeRequestFiles??h9)(e,o,a);let s=i.path||``;if(!s)throw Error(`Укажите путь файла merge request`);return(t.readMergeRequestDiff??g9)(e,o,s,a)}}}var F9={readRepository:c9,readTree:Rfe,readFile:zfe,readGit:u9,readIssues:d9,readIssue:f9,readMergeRequests:p9,readMergeRequest:m9,readMergeRequestFiles:h9,readMergeRequestDiff:g9,readPipelines:_9,readPipeline:v9,readJob:y9,readReleases:b9,readRelease:x9,searchSnapshots:l9};function I9(e,t=F9){return{read(n,r,i){if(n===`pipelines`)return(t.readPipelines??_9)(e,r,i);if(n!==`pipeline`&&n!==`job`)throw Error(j9);let a=Number(r.id);if(!Number.isSafeInteger(a)||a<=0)throw Error(`Укажите номер записи CI`);return n===`pipeline`?(t.readPipeline??v9)(e,a,i):(t.readJob??y9)(e,a,i)}}}function Hfe(e,t,n){let r=`${t}/${n}`,i=vt(e),a=N9(`issues`,`issue`,`issue`,r,d9,f9),o=P9(r);return{...i,id:`local-gitlab`,sidebar:[...i.sidebar??[],{id:`issues`,title:`Issues`},{id:`merge-requests`,title:`Merge requests`},{id:`pipelines`,title:`Pipelines`,requires:`pipelines`},{id:`releases`,title:`Releases`,requires:`releases`}],tabs:[...i.tabs??[],M9,T9,E9,D9,O9,k9],providers:{...i.providers,issues:a,pulls:o,pipelines:I9(r),releases:S9(r)}}}function Ufe(e,t,n,r,i,a,o=F9){let s=r,c=new Map;async function l(t,n,r){if(!t)return[];if(n&&n.split(`/`).some(e=>!e||e===`.`||e===`..`))throw Error(`Неверный путь папки`);let i=`${t}:${n}`,a=c.get(i);if(a)return a;let s=(async()=>{let i=await o.readTree(e,t,n,r);if(i.truncated)throw Error(`GitLab вернул неполный список этой папки`);return i.entries})();c.set(i,s);try{return await s}catch(e){throw c.delete(i),e}}let u={allBranches:!1,async read(t,n,r){let i=s;if(t===`git`)return{available:!0,branch:i.branch,changes:[]};if(t===`gutter`)return{available:!1,original:``};if(![`log`,`commit`,`commit-diff`].includes(t))throw Error(j9);return(o.readGit??u9)(t,{...n,repository:e,sha:i.commit},r)}},d={snapshots:!0,compare:!0,async refresh(){let t=await o.readRepository(e,i);c.clear(),s=t,a(t)},assetUrl(t){return We(`/api/integrations/gitlab/browse/asset?${new URLSearchParams({repository:e,sha:s.commit,path:t})}`)},scopeAssetUrl(t,n){return t.kind===`commit`?We(`/api/integrations/gitlab/browse/asset?${new URLSearchParams({repository:e,sha:t.rev,path:n})}`):``},async read(r,i,a){let c=s,u=i.rev||c.commit,d=i.path||``;if(r===`root`)return{root:iu({kind:`gitlab`,instance:t,path:n})};if(r===`changes`||r===`compare-file`){let t=r===`changes`?`compare-changes`:`compare-file`;return(o.readGit??u9)(t,{...i,repository:e},a)}if(r===`tree`){let e=(await l(u,d,a)).map(e=>({name:e.name,path:d?`${d}/${e.name}`:e.name,directory:e.type===`tree`,executable:e.mode===`100755`,disabled:e.type===`commit`})),t=Tl(e,d,i);return{entries:e.slice(t.offset,t.end),truncated:t.nextOffset!==null,total:t.total,nextOffset:t.nextOffset}}if(r!==`file`)throw Error(j9);if(!d||d.includes(`\\`)||d.includes(`\0`)||d.split(`/`).some(e=>!e||e===`.`||e===`..`))throw Error(`Неверный путь файла`);let f=await o.readFile(e,u,d,a);return{path:d,content:f.content,binary:f.binary,size:f.size,readonly:!0,image:!!f.image&&!/\.svg$/i.test(d)}}},f=N9(`issues`,`issue`,`issue`,e,o.readIssues??d9,o.readIssue??f9),p=P9(e,o);return{id:`gitlab`,layout:`editor`,sidebar:[{id:`issues`,title:`Issues`},{id:`merge-requests`,title:`Merge requests`},{id:`pipelines`,title:`Pipelines`,requires:`pipelines`},{id:`releases`,title:`Releases`,requires:`releases`}],tabs:[A9,M9,T9,E9,D9,O9,k9],features:{terminals:!1,docker:!1,agent:!1,settings:!1,persist:!1,externalFiles:!1},providers:{files:d,git:u,search:{read(t,n,r){if(t!==`search`)throw Error(j9);return(o.searchSnapshots??l9)(e,n,r)}},issues:f,pulls:p,pipelines:I9(e,o),releases:S9(e,o)}}}var Wfe=W({__name:`GitlabClone`,props:{repository:{type:String,required:!0},path:{type:String,required:!0},navigate:{type:Function,required:!0}},setup(e,{expose:t}){t();let n=e,r=B(()=>n.repository.endsWith(`/${n.path}`)?n.repository.slice(0,n.repository.length-n.path.length-1):n.repository),i={props:n,instance:r,projectId:B(()=>iu({kind:`gitlab`,instance:r.value,path:n.path})),get CloneRepositoryDialog(){return YR}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}});function Gfe(e,t,n,r,i,a){return K(),F(r.CloneRepositoryDialog,{source:`gitlab`,repository:n.repository,"destination-name":n.path,"project-id":r.projectId,navigate:n.navigate},null,8,[`repository`,`destination-name`,`project-id`,`navigate`])}var Kfe=H(Wfe,[[`render`,Gfe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/gitlab-workspace/GitlabClone.vue`]]),qfe=W({__name:`GitlabConnection`,props:{instance:{type:String,required:!0},path:{type:String,required:!0}},emits:[`connected`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=B(()=>iu({kind:`gitlab`,instance:r.instance,path:r.path})),o=B(()=>`https://${r.instance}/-/user_settings/personal_access_tokens`);async function s(e){let t=e.trim();if(!t)throw Error(`Укажите токен GitLab`);let n=(await DR()).integrations.find(e=>e.id===`gitlab`);if(!n)throw Error(`Интеграция GitLab не найдена`);n.enabled||await ER(`/gitlab`,`PUT`,{...n.settings,enabled:!0}),await ER(`/gitlab/auth`,`POST`,{token:t})}let c={props:r,emit:i,projectId:a,tokenUrl:o,connect:s,get TokenConnectionForm(){return Az}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}});function Jfe(t,n,r,i,a,o){return K(),F(i.TokenConnectionForm,{host:`GitLab`,"subject-label":`Проект`,subject:`${r.instance}/${r.path}`,"project-id":i.projectId,"scope-key":`gitlab-connection:${i.projectId}`,surface:`gitlab-integration`,placeholder:`glpat-…`,"token-url":i.tokenUrl,"command-id":`ide.gitlab.integration.connect`,"command-description":`Подключает GitLab по Personal Access Token (scope read_api и read_repository), введённому в форме, и открывает проект.`,"readout-note":`Подключение к GitLab`,intro:`Установите Personal Access Token, чтобы открыть проект.`,connect:i.connect,onConnected:n[0]||=e=>i.emit(`connected`)},{hint:e(()=>[...n[1]||=[I(`p`,{class:`scopes`},[G(` Нужны права `),I(`code`,null,`read_api`),G(` и `),I(`code`,null,`read_repository`),G(`. Токен хранится только в настройках Projector на этой машине. `)],-1)]]),_:1},8,[`subject`,`project-id`,`scope-key`,`token-url`])}var Yfe=H(qfe,[[`render`,Jfe],[`__scopeId`,`data-v-0f160be8`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/gitlab-workspace/ui/GitlabConnection.vue`]]),Xfe=W({__name:`GitlabRepositoryInfo`,props:{repository:{type:Object,required:!0}},setup(e,{expose:t}){t();let n=e,r=B(()=>Object.entries(n.repository.languages??{}).sort(([,e],[,t])=>(t??0)-(e??0)).map(([e])=>e)),i={props:n,languages:r,model:B(()=>{let e=n.repository,t=e.fullName.split(`/`).at(-1)??e.fullName,i=e.empty?`Проект без коммитов`:e.branch||`ветка не выбрана`;return{name:t,namespace:e.fullName.split(`/`).slice(0,-1).join(`/`),fullName:e.fullName,avatarUrl:e.avatarUrl,description:e.description,private:e.private,visibility:e.visibility||(e.private?`приватный`:`публичный`),archived:e.archived,empty:e.empty,htmlUrl:e.webUrl,hostLabel:`GitLab`,topics:e.topics,stats:[{key:`stars`,label:`Звёзды`,value:e.stars,icon:`star`},{key:`forks`,label:`Форки`,value:e.forks,icon:`fork`},{key:`issues`,label:`Открытые issues`,value:e.openIssues,icon:`issue`},{key:`mergeRequests`,label:`Открытые MR`,value:e.openMergeRequests,icon:`merge`}],details:[{key:`languages`,label:`Языки`,value:r.value.length?r.value.slice(0,4).join(`, `):`—`},{key:`license`,label:`Лицензия`,value:e.license||`—`},{key:`defaultBranch`,label:`Ветка по умолчанию`,value:e.defaultBranch||`—`},{key:`ref`,label:`Открытая ветка`,value:e.empty?`пустой проект`:`${e.branch}${e.commit?` · ${e.commit.slice(0,7)}`:``}`},{key:`created`,label:`Создан`,value:En(e.createdAt)||`—`},{key:`updated`,label:`Обновлён`,value:En(e.updatedAt)||`—`}],license:e.license||void 0,refNote:e.empty?{text:`${i}.`}:{text:`Дерево и история привязаны к снимку`,code:e.commit.slice(0,7),suffix:`, ветка ${i}.`},readout:{note:`О проекте`,text:Nn(`Проект ${e.fullName}`,e.description?`Описание: ${e.description}`:`Без описания`,r.value.length?`Языки: ${r.value.join(`, `)}`:``,e.visibility?`Видимость: ${e.visibility}`:``,`Звёзды: ${e.stars}, форки: ${e.forks}, открытые issues: ${e.openIssues}, открытые MR: ${e.openMergeRequests}`,`Ветка по умолчанию: ${e.defaultBranch||`—`}`,e.license?`Лицензия: ${e.license}`:``,e.topics.length?`Темы: ${e.topics.join(`, `)}`:``,`URL: ${e.webUrl}`)}}}),get RepositoryOverview(){return wz}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}});function Zfe(e,t,n,r,i,a){return K(),F(r.RepositoryOverview,{repository:r.model},null,8,[`repository`])}var L9=H(Xfe,[[`render`,Zfe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/gitlab-workspace/ui/GitlabRepositoryInfo.vue`]]),Qfe=W({__name:`GitlabWorkspace`,props:{instance:{type:String,required:!0},path:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=Rr(),i=Lr(),a=e=>i.push(Hu(e)).then(()=>void 0),o=`${n.instance}/${n.path}`,s=iu({kind:`gitlab`,instance:n.instance,path:n.path}),c=()=>typeof r.query.ref==`string`?r.query.ref:``,{metadata:l,error:u,needsConnection:d,profileReady:f,workspaceVersion:p,workspace:m,loadRepository:h,ready:g}=nz({projectId:s,read:e=>c9(o,c(),e),createProfile:(e,t)=>Ufe(o,n.instance,n.path,e,c(),t),createConnectionProfile:()=>Vfe(n.instance,n.path),isAuthError:e=>e instanceof o9&&(e.status===401||e.status===403),errorFallback:`Не удалось открыть проект GitLab`,readmeError:`Не удалось прочитать README`,connectionTab:`gitlab-integration`,initialPath:()=>typeof r.query.path==`string`?r.query.path:``}),_=Je(`gitlab:${s}`,()=>({surface:`gitlab`,projectId:s,repository:o,readonly:!0,commit:l.value?.commit||null}));_.scope.registerCommand({id:`ide.gitlab.repository.refresh`,title:`Обновить проект GitLab`,description:`Перечитывает GitLab и обновляет общий workspace без клонирования.`,enabled:()=>!!m.value,run:()=>d.value?h():m.value?.refresh()}),_.scope.registerCommand({id:`ide.gitlab.repository.info`,title:`Информация о проекте GitLab`,description:`Открывает вкладку с описанием, статистикой и метаданными проекта GitLab.`,enabled:()=>!!l.value&&!!m.value,run:()=>m.value?.openTab(`repository`)}),_.scope.registerCommand({id:`ide.gitlab.integration.open`,title:`Настроить подключение GitLab`,description:`Открывает вкладку интеграции GitLab для установки токена.`,enabled:()=>!!m.value,run:()=>m.value?.openTab(`gitlab-integration`)});let v={props:n,route:r,router:i,navigate:a,repository:o,projectId:s,gitRef:c,metadata:l,error:u,needsConnection:d,profileReady:f,workspaceVersion:p,workspace:m,loadRepository:h,ready:g,commands:_,tabViews:{...k7,"gitlab-integration":{component:Yfe,ownKeys:!0,keepAlive:!0,props:()=>({instance:n.instance,path:n.path,onConnected:h})},repository:{component:L9,keepAlive:!0,props:()=>({repository:l.value})},issue:{component:F5,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,number:e.params?.number,host:`GitLab`,onOpen:t.openFile})},pull:{component:I5,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,number:e.params?.number,host:`GitLab`,short:`MR`,noun:`merge request`,onOpen:t.openFile,onOpenSection:t.openSection,onOpenPullFile:t.openPullFile,onOpenJob:e=>t.openTab(`job`,e,{preview:!1}),onOpenPipeline:e=>t.openTab(`pipeline`,e,{preview:!1})})},pipeline:{component:v2,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,id:e.params?.id,host:`GitLab`,onOpenJob:e=>t.openTab(`job`,e,{preview:!1})})},job:{component:D2,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,id:e.params?.id,host:`GitLab`})},release:{component:L5,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,tag:typeof e.params?.tag==`string`?e.params.tag:``,host:`GitLab`})}},UiMessage:Te,UiButton:q,get ProjectWorkspace(){return i7},get IconGitlab(){return a9},GitlabClone:Kfe};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}}),$fe={key:0,role:`alert`};function epe(t,n,r,i,a,o){return K(),U(P,null,[y(i.GitlabClone,{repository:i.repository,path:i.props.path,navigate:i.navigate},null,8,[`path`]),i.profileReady?(K(),F(i.ProjectWorkspace,{key:i.workspaceVersion,ref:i.ready,"project-id":i.projectId,"tab-views":i.tabViews},{"terminal-actions":e(()=>[y(i.UiButton,{shape:`icon`,size:`sm`,title:i.needsConnection?`Подключить GitLab`:`Информация о проекте`,"aria-label":i.needsConnection?`Подключить GitLab`:`Информация о проекте`,"data-command":i.needsConnection?`ide.gitlab.integration.open`:`ide.gitlab.repository.info`,onClick:n[0]||=e=>i.commands.run(i.needsConnection?`ide.gitlab.integration.open`:`ide.gitlab.repository.info`)},{default:e(()=>[y(i.IconGitlab,{"aria-hidden":`true`})]),_:1},8,[`title`,`aria-label`,`data-command`])]),"terminal-status":e(()=>[i.error?(K(),U(`span`,$fe,X(i.error),1)):D(`v-if`,!0),i.metadata?(K(),F(i.UiMessage,{key:1,as:`span`,tone:`muted`,size:`xs`,class:`gitlab-status`,title:i.metadata.commit},{default:e(()=>[G(X(i.metadata.branch)+` · `+X(i.metadata.commit.slice(0,7))+` · только чтение`,1)]),_:1},8,[`title`])):D(`v-if`,!0)]),_:1},8,[`project-id`])):(K(),F(i.UiMessage,{key:1,size:`xs`,variant:`padded`,tone:i.error?`danger`:`muted`,class:`msg`,role:i.error?`alert`:`status`},{default:e(()=>[G(X(i.error||`открываю проект…`),1)]),_:1},8,[`tone`,`role`]))],64)}var tpe=H(Qfe,[[`render`,epe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/gitlab-workspace/GitlabWorkspace.vue`]]),npe=W({__name:`GitlabWorkspaceGate`,props:{rawPath:{type:[String,Array],required:!0}},emits:[`settings`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=B(()=>Vu(r.rawPath)),o=B(()=>{try{let e=Yl(a.value.instance);return{instance:e,path:Ql(a.value.path,e),error:``}}catch(e){return{instance:a.value.instance,path:a.value.path,error:e instanceof Error?e.message:`Некорректная ссылка GitLab`}}}),s=B(()=>`gl:/${o.value.instance}/${o.value.path}`),c=M(null),l=M(!0),u=M(``);function d(e){if(!e)return``;try{let t=new URL(e);return![`http:`,`https:`].includes(t.protocol)||t.username||t.password||t.search||t.hash?``:t.host.toLowerCase()}catch{try{return Yl(e)}catch{return``}}}let f=B(()=>d(c.value?.settings.url)),p=B(()=>!o.value.error&&(o.value.instance===`gitlab.com`||!!f.value&&o.value.instance===f.value)),m=B(()=>!o.value.error&&(o.value.instance===`gitlab.com`||!l.value&&!u.value&&p.value)),h=B(()=>`${o.value.instance}/${o.value.path}`),g=B(()=>l.value?{tone:`neutral`,label:`проверка`,text:`Проверяем настройки интеграции GitLab…`}:u.value?{tone:`danger`,label:`ошибка`,text:u.value}:c.value?c.value.enabled?c.value.connected?{tone:`info`,label:`подключено`,text:c.value.account?`Вход выполнен как ${c.value.account}.`:`Токен GitLab сохранён.`}:{tone:`neutral`,label:`без входа`,text:`Публичные проекты gitlab.com доступны без входа; для приватных проектов подключите GitLab.`}:{tone:`warning`,label:`отключён`,text:`Интеграция GitLab отключена в настройках.`}:{tone:`warning`,label:`не настроен`,text:`GitLab не настроен. Публичные проекты gitlab.com доступны без входа.`});async function _(){l.value=!0,u.value=``;try{let e=await DR();c.value=e.integrations.find(e=>e.id===`gitlab`)??null}catch(e){c.value=null,u.value=e instanceof Error?e.message:`Не удалось прочитать интеграции`}finally{l.value=!1}}E(()=>r.rawPath,_,{immediate:!0});let v={props:r,emit:i,raw:a,parsed:o,projectReference:s,integration:c,loading:l,loadError:u,settingsAuthority:d,configuredInstance:f,allowed:p,workspaceReady:m,workspaceKey:h,status:g,load:_,UiBadge:kd,UiButton:q,UiCard:je,UiHeading:Ee,UiMessage:Te,UiStack:Ed,GitlabWorkspace:tpe,get GITLAB_DEFAULT_INSTANCE(){return Hl}};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}}),rpe={key:0,class:`project-page`},ipe={key:1,class:`project-page gitlab-page`},ape={class:`reference`},ope={class:`status`},spe={class:`status-text`};function cpe(t,n,r,i,a,o){return i.workspaceReady?(K(),U(`section`,rpe,[(K(),F(i.GitlabWorkspace,{key:i.workspaceKey,instance:i.parsed.instance,path:i.parsed.path},null,8,[`instance`,`path`]))])):(K(),U(`section`,ipe,[y(i.UiCard,{class:`gitlab-card`},{default:e(()=>[y(i.UiStack,{gap:3,align:`start`},{default:e(()=>[y(i.UiStack,{gap:1,align:`start`},{default:e(()=>[y(i.UiHeading,{as:`h1`,"space-after":0},{default:e(()=>[...n[1]||=[G(`Проект GitLab`,-1)]]),_:1}),I(`code`,ape,X(i.projectReference),1)]),_:1}),i.parsed.error?(K(),F(i.UiMessage,{key:0,tone:`danger`,variant:`padded`,flush:``,role:`alert`},{default:e(()=>[G(X(i.parsed.error),1)]),_:1})):(K(),U(P,{key:1},[I(`div`,ope,[y(i.UiBadge,{tone:i.status.tone},{default:e(()=>[G(X(i.status.label),1)]),_:1},8,[`tone`]),I(`span`,spe,X(i.status.text),1)]),i.allowed?D(`v-if`,!0):(K(),F(i.UiMessage,{key:0,tone:`danger`,variant:`padded`,flush:``,role:`alert`},{default:e(()=>[G(` Инстанс `+X(i.parsed.instance)+` не разрешён. Укажите его адрес в настройках GitLab или откройте проект на `+X(i.GITLAB_DEFAULT_INSTANCE)+`. `,1)]),_:1}))],64)),y(i.UiButton,{size:`sm`,onClick:n[0]||=e=>i.emit(`settings`)},{default:e(()=>[...n[2]||=[G(`Настроить GitLab`,-1)]]),_:1})]),_:1})]),_:1})]))}var lpe=H(npe,[[`render`,cpe],[`__scopeId`,`data-v-38b5a595`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/gitlab-workspace/ui/GitlabWorkspaceGate.vue`]]),upe=W({__name:`GitlabRepositoryInfoLoader`,props:{instance:{type:String,required:!0},path:{type:String,required:!0},gitRef:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r={props:n,load:async()=>{if(!n.instance||!n.path)throw Error(`origin проекта не указывает на GitLab`);return c9(`${n.instance}/${n.path}`,n.gitRef??``)},keys:()=>[n.instance,n.path,n.gitRef],UiAsyncContent:i9,GitlabRepositoryInfo:L9};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function dpe(t,n,r,i,a,o){return K(),F(i.UiAsyncContent,{load:i.load,"watch-keys":i.keys,"error-text":`Не удалось прочитать проект`,"loading-text":`загружаю проект…`},{default:e(({data:e})=>[y(i.GitlabRepositoryInfo,{repository:e},null,8,[`repository`])]),_:1})}var fpe=H(upe,[[`render`,dpe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/gitlab-workspace/ui/GitlabRepositoryInfoLoader.vue`]]),ppe=W({__name:`[...gitlabPath]`,setup(e,{expose:t}){t();let n=Rr(),r=Lr(),i={route:n,router:r,openSettings:()=>void r.push({path:`/settings`,query:{section:`gitlab`}}),get GitlabWorkspaceGate(){return lpe}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}});function mpe(e,t,n,r,i,a){return K(),F(r.GitlabWorkspaceGate,{"raw-path":r.route.params.gitlabPath,onSettings:r.openSettings},null,8,[`raw-path`])}var hpe=H(ppe,[[`render`,mpe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/pages/gl/projects/[...gitlabPath].vue`]]);async function R9(e,t,n){let r=await fetch(`/api/projects/${encodeURIComponent(e)}/devcontainer`,{method:t,headers:{"Content-Type":`application/json`},body:n===void 0?void 0:JSON.stringify(n)}),i=await r.json();if(!r.ok)throw Error(i.error||`Ошибка Dev Container`);return i}var gpe=e=>R9(e,`GET`),_pe=(e,t,n)=>R9(e,`POST`,{decision:t,hash:n});async function vpe(e){let t=await fetch(`/api/projects/${encodeURIComponent(e)}/devcontainer-stop`,{method:`POST`}),n=await t.json();if(!t.ok)throw Error(n.error||`Не удалось остановить Dev Container`);return n}function ype(e){let t=M(),n=M(``),r=M(!1),i=M(!1),a=!1,o=Je(`devcontainer:${e}`,()=>({surface:`devcontainer`,projectId:e,found:t.value?.found??!1,decision:t.value?.decision??null}));async function s(){try{let r=await gpe(e);return a||(t.value=r,n.value=``),r}catch(e){throw a||(n.value=e instanceof Error?e.message:`Ошибка Dev Container`),e}}async function c(a){if(!r.value){r.value=!0;try{t.value=await _pe(e,a,t.value?.hash),n.value=``,i.value=!1}catch(e){n.value=e instanceof Error?e.message:`Ошибка Dev Container`,await s().catch(()=>void 0)}finally{r.value=!1}}}return o.scope.registerCommand({id:`ide.devcontainer.status`,title:`Состояние Dev Container`,description:`Возвращает найденный devcontainer.json, запрашиваемые им полномочия (findings), решение о доверии и признак устаревшего решения. Доверие может выдать только пользователь в окне.`,run:s}),o.scope.registerCommand({id:`ide.devcontainer.review`,title:`Проверить доверие к Dev Container`,description:`Открывает окно с полномочиями из devcontainer.json, где пользователь сам решает, доверять ли репозиторию. Решение не принимается автоматически.`,enabled:()=>!!t.value?.found,run:async()=>{await s(),i.value=!0}}),o.scope.registerCommand({id:`ide.devcontainer.stop`,title:`Остановить и удалить Dev Container`,description:`Удаляет контейнер проекта: завершаются его терминалы и процессы внутри. Файлы проекта сохраняются, следующий терминал соберёт контейнер заново. confirm=true подтверждает удаление.`,arguments:{confirm:`true — явное подтверждение удаления`},enabled:()=>t.value?.active===!0,run:async t=>{if(t?.confirm===!0||window.confirm(`Удалить Dev Container? Его терминалы завершатся.`))return vpe(e)}}),f(async()=>{(await s().catch(()=>void 0))?.needsDecision&&(i.value=!0)}),g(()=>{a=!0}),{state:t,error:n,busy:r,open:i,decide:c,refresh:s,visible:B(()=>i.value&&!!t.value?.found)}}var bpe=W({__name:`DevcontainerTrust`,props:{projectId:{type:String,required:!0}},setup(e,{expose:t}){t();let n=e,r=ype(n.projectId),i=M(),a=V(),o={host:`на вашем компьютере`,root:`от root при сборке`,container:`в контейнере`};E(()=>r.visible.value,async e=>{await p(),e&&i.value&&!i.value.element?.open&&i.value.open(),e||i.value?.close()},{immediate:!0});let s={props:n,model:r,dialog:i,titleId:a,RISK:o,UiMessage:Te,UiInline:Be,UiHeading:Ee,UiButton:q,UiDialog:un,UiDialogActions:km};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),xpe={key:1},Spe={class:`findings`},Cpe={class:`risk`};function wpe(t,n,r,i,a,o){return i.model.visible.value&&i.model.state.value?(K(),F(i.UiDialog,{key:0,ref:`dialog`,class:`trust`,width:`560px`,labelledby:i.titleId,onCancel:n[2]||=N(e=>i.model.open.value=!1,[`prevent`]),onClose:n[3]||=e=>i.model.open.value=!1},{default:e(()=>[y(i.UiHeading,{id:i.titleId},{default:e(()=>[...n[4]||=[G(`Доверять этому репозиторию?`,-1)]]),_:1},8,[`id`]),I(`p`,null,[n[5]||=G(` Проект содержит `,-1),I(`code`,null,X(i.model.state.value.configPath),1),i.model.state.value.name?(K(),U(P,{key:0},[G(` (`+X(i.model.state.value.name)+`)`,1)],64)):D(`v-if`,!0),n[6]||=G(`. Он просит возможности, которых нет в изолированном режиме Projector. `,-1),i.model.state.value.stale?(K(),U(`strong`,xpe,`Конфигурация изменилась после вашего прошлого решения.`)):D(`v-if`,!0)]),I(`ul`,Spe,[(K(!0),U(P,null,S(i.model.state.value.findings,t=>(K(),U(`li`,{key:t.id,class:Y(t.risk)},[y(i.UiInline,{class:`head`,align:`normal`,justify:`between`,gap:3},{default:e(()=>[I(`strong`,null,X(t.title),1),I(`span`,Cpe,X(i.RISK[t.risk]),1)]),_:2},1024),I(`p`,null,X(t.detail),1),I(`code`,null,X(t.keys.join(`, `)),1)],2))),128))]),n[9]||=I(`p`,{class:`muted`},[I(`strong`,null,`Не доверять`),G(` — проект продолжит работать в нашей модели (ограниченный Docker или хост). `),I(`strong`,null,`Доверять`),G(` — терминалы откроются в Dev Container по этому конфигу, со всеми перечисленными правами. Если файлы конфигурации изменятся, решение сбросится. Уже открытые терминалы не переключаются. `)],-1),i.model.error.value?(K(),F(i.UiMessage,{key:0,tone:`danger`,role:`alert`},{default:e(()=>[G(X(i.model.error.value),1)]),_:1})):D(`v-if`,!0),y(i.UiDialogActions,null,{default:e(()=>[y(i.UiButton,{autofocus:``,disabled:i.model.busy.value,onClick:n[0]||=e=>i.model.decide(`declined`)},{default:e(()=>[...n[7]||=[G(`Не доверять`,-1)]]),_:1},8,[`disabled`]),y(i.UiButton,{tone:`danger`,disabled:i.model.busy.value,onClick:n[1]||=e=>i.model.decide(`trusted`)},{default:e(()=>[...n[8]||=[G(`Доверять и использовать Dev Container`,-1)]]),_:1},8,[`disabled`])]),_:1})]),_:1},8,[`labelledby`])):D(`v-if`,!0)}var Tpe=H(bpe,[[`render`,wpe],[`__scopeId`,`data-v-5c1189f0`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/devcontainer/DevcontainerTrust.vue`]]),Epe=W({__name:`[...projectPath]`,setup(e,{expose:t}){t();let n=Rr(),r=Lr(),{projects:a,openPath:o}=Mu(),{error:s}=_d(),{api:c}=yp(),l=M(),u=M(!1),d=M(null),f=M(null),p=B(()=>{let e=f.value,t=d.value;return{...k7,...e?{pull:{component:I5,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,number:e.params?.number,host:`GitLab`,short:`MR`,noun:`merge request`,onOpen:t.openFile,onOpenSection:t.openSection,onOpenPullFile:t.openPullFile,onOpenJob:e=>t.openTab(`job`,e,{preview:!1}),onOpenPipeline:e=>t.openTab(`pipeline`,e,{preview:!1})})},pipeline:{component:v2,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,id:e.params?.id,host:`GitLab`,onOpenJob:(e,n)=>t.openTab(`job`,e,{preview:!n})})},job:{component:D2,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,id:e.params?.id,host:`GitLab`})}}:t?{pipeline:{component:v2,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,id:e.params?.id,host:`GitHub`,onOpenJob:(e,n)=>t.openTab(`job`,e,{preview:!n})})},job:{component:D2,keepAlive:!0,props:(e,t)=>({projectId:t.projectId,id:e.params?.id,host:`GitHub`})}}:{},repository:e?{component:fpe,keepAlive:!0,props:()=>({instance:e.instance,path:e.path})}:{component:jfe,keepAlive:!0,props:()=>({repository:t??``})},project:{keepAlive:!0,ownKeys:!0,component:()=>C.value&&i(mne,{ref:l,project:C.value,onDirty:e=>u.value=e,afterRemove:()=>r.push(`/`)})}}}),m=M(``),h=M(),g=Je(`project:github`,()=>({surface:`project`,projectId:m.value||null,repository:d.value??null}));g.scope.registerCommand({id:`ide.github.repository.info`,title:`Информация о репозитории GitHub`,description:`Открывает вкладку с описанием, статистикой и метаданными репозитория GitHub проекта.`,enabled:()=>!!d.value&&!!h.value,run:()=>h.value?.openTab(`repository`)});let _=Je(`project:gitlab`,()=>({surface:`project`,projectId:m.value||null,instance:f.value?.instance??null,path:f.value?.path??null}));_.scope.registerCommand({id:`ide.gitlab.repository.info`,title:`Информация о проекте GitLab`,description:`Открывает вкладку с описанием, статистикой и метаданными проекта GitLab локального проекта.`,enabled:()=>!!f.value&&!!h.value,run:()=>h.value?.openTab(`repository`)});let v=``;function y(e){if(h.value=e,!h.value||!v||v!==m.value)return;let t=v;v=``;let n=yw(t);!n.draft.value.trim()&&!n.turns.value.length&&(n.draft.value=Px),h.value.openTab(`agent`)}let b=M(!1),x=M(!1),S=M(``),C=B(()=>a.value.find(e=>e.id===m.value));gne(()=>C.value,()=>u.value);let w=M(0);function T(e){let t=Hu(e.path);n.path===t?w.value++:r.replace(t)}E(()=>[zu(n.params.projectPath),w.value],async([e],t,i)=>{let a=!0,s;i(()=>{a=!1,s?.()}),m.value=``,d.value=null,f.value=null,b.value=!1,S.value=``,x.value=!0;try{let{project:t,missing:i,created:c}=await o(e),[l,u]=i||t.environment?[null,null]:await Promise.all([vu(t.id).then(e=>e.repository,()=>null),yu(t.id).then(e=>e.repository,()=>null)]);if(a){d.value=l,f.value=u,s=u?an(t.id,Hfe(t.id,u.instance,u.path)):l?an(t.id,yfe(t.id,l)):void 0,m.value=t.id,v=c&&!i?t.id:``,b.value=i;let e=Hu(t.path);n.path!==e&&await r.replace(e)}}catch(e){a&&(S.value=e instanceof Error?e.message:`Не удалось открыть проект`)}finally{a&&(x.value=!1)}},{immediate:!0});let D={route:n,router:r,projects:a,openPath:o,error:s,api:c,settings:l,settingsDirty:u,githubRepository:d,gitlabRepository:f,tabViews:p,projectId:m,workspace:h,githubCommands:g,gitlabCommands:_,get initProjectId(){return v},set initProjectId(e){v=e},suggestInit:y,missing:b,opening:x,openError:S,project:C,reload:w,restored:T,UiMessage:Te,get ProjectOpening(){return rd},get ProjectMissing(){return Nne},get RunMenu(){return Jne},get DevcontainerTrust(){return Tpe},get ProjectWorkspace(){return i7},UiButton:q,get IconGithub(){return A7},get IconGitlab(){return a9},get IconProjectSettings(){return hF}};return Object.defineProperty(D,"__isScriptSetup",{enumerable:!1,value:!0}),D}}),Dpe={key:0,class:`project-page`},Ope={key:1,class:`project-page`},kpe={key:2,class:`project-page`},Ape={key:3,class:`not-found project-page`};function jpe(t,n,r,i,a,o){return i.project&&i.missing?(K(),U(`section`,Dpe,[(K(),F(i.ProjectMissing,{key:i.project.id,project:i.project,onRestored:i.restored,onRemoved:n[0]||=e=>i.router.push(`/`)},null,8,[`project`]))])):i.project?(K(),U(`section`,Ope,[(K(),F(i.DevcontainerTrust,{key:`${i.project.id}:${i.project.path}`,"project-id":i.project.id},null,8,[`project-id`])),(K(),F(i.ProjectWorkspace,{ref:i.suggestInit,key:`${i.project.id}:${i.project.path}`,"project-id":i.project.id,"project-settings-dirty":i.settingsDirty,"before-close-project-settings":()=>i.settings?.canLeave()??!0,"save-project-settings":()=>i.settings?.save(),"tab-views":i.tabViews},{"terminal-actions":e(()=>[y(i.RunMenu,{project:i.project},null,8,[`project`]),y(i.UiButton,{shape:`icon`,size:`sm`,title:`Настройки проекта`,"aria-label":`Настройки проекта`,"data-command":`ide.workbench.project.settings.open`,onClick:n[1]||=e=>i.api.executeCommand(`ide.workbench.project.settings.open`,void 0,{scope:`editor:${i.project.id}`})},{default:e(()=>[y(i.IconProjectSettings,{"aria-hidden":`true`})]),_:1}),i.gitlabRepository?(K(),F(i.UiButton,{key:0,shape:`icon`,size:`sm`,title:`Информация о проекте GitLab`,"aria-label":`Информация о проекте GitLab`,"data-command":`ide.gitlab.repository.info`,onClick:n[2]||=e=>i.gitlabCommands.run(`ide.gitlab.repository.info`)},{default:e(()=>[y(i.IconGitlab,{"aria-hidden":`true`})]),_:1})):i.githubRepository?(K(),F(i.UiButton,{key:1,shape:`icon`,size:`sm`,title:`Информация о репозитории`,"aria-label":`Информация о репозитории`,"data-command":`ide.github.repository.info`,onClick:n[3]||=e=>i.githubCommands.run(`ide.github.repository.info`)},{default:e(()=>[y(i.IconGithub,{"aria-hidden":`true`})]),_:1})):D(`v-if`,!0)]),"terminal-status":e(()=>[i.error?(K(),F(i.UiMessage,{key:0,size:`xs`,variant:`padded`,tone:`danger`,flush:``,class:`msg`,role:`alert`},{default:e(()=>[G(X(i.error),1)]),_:1})):D(`v-if`,!0)]),_:1},8,[`project-id`,`project-settings-dirty`,`before-close-project-settings`,`save-project-settings`,`tab-views`]))])):i.opening?(K(),U(`section`,kpe,[y(i.ProjectOpening)])):(K(),U(`section`,Ape,[y(i.UiMessage,{size:`xs`,variant:`padded`,tone:`danger`,flush:``,class:`msg`,role:i.openError?`alert`:void 0},{default:e(()=>[G(X(i.openError||`проект не найден`),1)]),_:1},8,[`role`]),y(i.UiButton,{size:`sm`,onClick:n[4]||=e=>i.router.push(`/`)},{default:e(()=>[...n[5]||=[G(`К списку проектов`,-1)]]),_:1})]))}var Mpe=H(Epe,[[`render`,jpe],[`__scopeId`,`data-v-ab191794`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/pages/projects/[...projectPath].vue`]]),Npe=W({__name:`settings`,setup(e,{expose:t}){t();let n=Rr(),r=Lr(),i=B(()=>typeof n.query.section==`string`?n.query.section:`interface`);function a(e){return r.push({query:{...n.query,section:e}})}let o={route:n,router:r,section:i,selectSection:a,get SettingsPanel(){return O7}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});function Ppe(e,t,n,r,i,a){return K(),F(r.SettingsPanel,{selected:r.section,onSelect:r.selectSection},null,8,[`selected`])}var Fpe=H(Npe,[[`render`,Ppe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/pages/settings.vue`]]),Ipe=W({__name:`index`,setup(e,{expose:t}){t();let n=Lr(),r=fh(),i=ph(r),a=ee({...i.state}),o=i.subscribe(e=>{a.value=e}),s=B({get:()=>a.value.query,set:e=>i.setQuery(e)}),c=B(()=>a.value.items),l=B({get:()=>a.value.selected,set:e=>i.select(e)}),u=B(()=>a.value.loading),d=B(()=>a.value.busy),m=B(()=>a.value.error),h=B(()=>a.value.warning),g=B(()=>a.value.notice),_=M(),y=B(()=>_.value?.element),b=yl,x=B(()=>c.value.length?`launch-option-${l.value}`:void 0);async function S(){b?await r.hide():(i.setQuery(``),y.value?.focus())}let C=B(()=>a.value.focus),w=B(()=>a.value.detail?.actions??[]),T=B(()=>a.value.detail?.failure),D=B(()=>a.value.detail?.info),O=M(0),k=B(()=>yh(a.value.query).scope);E(C,()=>O.value=0);async function A(){await i.enter()&&await p()}async function j(e=c.value[l.value],t){let r=t??e?.actions?.[0];if(!e||!r)return;let o=await i.launch(e,r,!b);if(r.id===`favorite`||r.id===`folder`)o&&await i.refresh(),await p(),y.value?.focus();else if(o&&i.leave(),o&&!b&&a.value.route)await n.push(a.value.route);else{if(o&&b)try{await S()}catch(e){i.reportError(e)}await p(),y.value?.focus()}}let N=!1;async function te(e=C.value??c.value[l.value]){if(!(!e||N||a.value.busy||a.value.loading)){N=!0;try{let t=await bh(r,e,`favorite`,C.value?.id===e.id&&a.value.detailReady?a.value.detail:null);t&&await j(e,t)}catch(e){i.reportError(e)}finally{N=!1}}}function P(e){if(e.isComposing||e.keyCode===229)return;if((e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`d`){e.preventDefault(),te();return}if(C.value){if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=w.value.length;t&&(O.value=(O.value+(e.key===`ArrowDown`?1:-1)+t)%t)}else e.key===`Enter`?(e.preventDefault(),j(C.value,w.value[O.value])):[`Escape`,`ArrowLeft`,`Tab`].includes(e.key)&&(e.preventDefault(),i.leave());return}let t=y.value?.selectionStart===y.value?.value.length;if(e.key===`Tab`||e.key===`ArrowRight`&&t&&!e.shiftKey||e.key===`k`&&(e.ctrlKey||e.metaKey)){if(!c.value.length)return;e.preventDefault(),A()}else if(e.key===`ArrowDown`||e.key===`ArrowUp`)e.preventDefault(),i.move(e.key===`ArrowDown`?1:-1),p(()=>document.getElementById(`launch-option-${l.value}`)?.scrollIntoView({block:`nearest`}));else if(e.key===`Enter`){e.preventDefault();let t=c.value[l.value];j(t,t?.actions?.[e.ctrlKey||e.metaKey?1:0])}else e.key===`Escape`&&(e.preventDefault(),S().catch(e=>i.reportError(e)))}function ne(){y.value?.focus(),d.value||i.search(c.value.length>0&&!u.value)}function F(){b&&(i.setQuery(``),ne())}f(()=>{ne(),i.live(!0),window.addEventListener(`focus`,ne),window.addEventListener(`projector:show`,F)}),v(()=>{o(),i.dispose(),window.removeEventListener(`focus`,ne),window.removeEventListener(`projector:show`,F)});let I={router:n,client:r,model:i,state:a,unsubscribe:o,query:s,items:c,selected:l,loading:u,busy:d,error:m,warning:h,notice:g,inputControl:_,input:y,webWindow:b,activeId:x,hide:S,focus:C,detailActions:w,failure:T,info:D,detailIndex:O,scope:k,enter:A,launch:j,get pinPending(){return N},set pinPending(e){N=e},toggleFavorite:te,key:P,focusSearch:ne,showSearch:F,get HubNavigation(){return Ke},get deviceUrl(){return We},UiPopupSurface:Fd,UiActionRow:wl,UiControl:Se,UiInline:Be,UiStatusDot:Ze,get LaunchDetailPanel(){return Zee},get launcherStatusTone(){return bl},get launchScopeTitles(){return mh},get launchSectionTitles(){return dh}};return Object.defineProperty(I,"__isScriptSetup",{enumerable:!1,value:!0}),I}}),Lpe={class:`launcher-heading`},Rpe={key:0,class:`scope-chip`},zpe={key:1,class:`activity`,"aria-hidden":`true`},Bpe=[`aria-busy`],Vpe={key:0,class:`section-title`,role:`presentation`},Hpe=[`src`],Upe={class:`result-copy`},Wpe={class:`name`},Gpe={key:0,class:`star`,title:`В избранном`,"aria-hidden":`true`},Kpe={class:`description u-truncate`},qpe={key:1,class:`enter`,"aria-hidden":`true`},Jpe={key:1,class:`empty`},Ype={key:0},Xpe={key:1};function Zpe(t,n,r,i,a,o){let s=x(`router-link`);return K(),U(`main`,{class:Y([`launcher`,{"in-window":i.webWindow}])},[I(`div`,Lpe,[y(s,{to:`/`},{default:e(()=>[...n[3]||=[G(`projector`,-1)]]),_:1}),y(i.HubNavigation)]),y(i.UiPopupSurface,{as:`section`,border:`line`,radius:`lg`,class:`palette`,"aria-label":`Запуск приложений`},{default:e(()=>[y(i.UiInline,{class:`search-line`,gap:4,justify:`normal`},{default:e(()=>[n[4]||=I(`svg`,{width:`23`,height:`23`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`},[I(`circle`,{cx:`10.5`,cy:`10.5`,r:`6.5`,stroke:`currentColor`,"stroke-width":`1.5`}),I(`path`,{d:`m16 16 5 5`,stroke:`currentColor`,"stroke-width":`1.5`})],-1),i.scope===`all`?D(`v-if`,!0):(K(),U(`span`,Rpe,X(i.launchScopeTitles[i.scope]),1)),y(i.UiControl,{ref:`inputControl`,modelValue:i.query,"onUpdate:modelValue":n[0]||=e=>i.query=e,role:`combobox`,"aria-label":`Поиск приложений и проектов`,"aria-autocomplete":`list`,"aria-controls":`launch-results`,"aria-expanded":i.items.length>0,"aria-activedescendant":i.activeId,autocomplete:`off`,spellcheck:`false`,placeholder:`Поиск приложений и проектов… (/ проекты, gh/ GitHub)`,disabled:i.busy,onKeydown:i.key},null,8,[`modelValue`,`aria-expanded`,`aria-activedescendant`,`disabled`]),i.loading||i.busy?(K(),U(`span`,zpe,`⋯`)):D(`v-if`,!0)]),_:1}),te(I(`div`,{id:`launch-results`,class:`results`,role:`listbox`,"aria-label":`Результаты`,"aria-busy":i.loading},[(K(!0),U(P,null,S(i.items,(t,n)=>(K(),U(P,{key:t.id},[t.section&&t.section!==i.items[n-1]?.section?(K(),U(`div`,Vpe,X(i.launchSectionTitles[t.section]),1)):D(`v-if`,!0),y(i.UiActionRow,{interaction:`selection`,padding:`var(--sp-3)`,id:`launch-option-${n}`,role:`option`,"aria-selected":n===i.selected,class:Y([`result`,{selected:n===i.selected}]),disabled:i.busy||i.loading,tabindex:`-1`,onMousemove:e=>i.selected=n,onClick:e=>i.launch(t)},{default:e(()=>[t.icon?(K(),U(`img`,{key:0,src:i.deviceUrl(t.icon),alt:``,width:`36`,height:`36`},null,8,Hpe)):D(`v-if`,!0),I(`span`,Upe,[I(`span`,Wpe,[t.favorite?(K(),U(`span`,Gpe,`★`)):D(`v-if`,!0),t.status?(K(),F(i.UiStatusDot,{key:1,class:`status-dot`,size:8,inline:``,shrink:``,tone:i.launcherStatusTone(t.status.state),title:t.status.label,"aria-hidden":`true`},null,8,[`tone`,`title`])):D(`v-if`,!0),G(X(t.name),1)]),I(`span`,Kpe,X(t.description),1)]),n===i.selected?(K(),U(`span`,qpe,[G(`↵ `+X(t.actions?.[0]?.title),1),t.actions?.[1]?(K(),U(P,{key:0},[G(` · Ctrl+↵ `+X(t.actions[1].title),1)],64)):D(`v-if`,!0)])):D(`v-if`,!0)]),_:2},1032,[`id`,`aria-selected`,`class`,`disabled`,`onMousemove`,`onClick`])],64))),128))],8,Bpe),[[ae,!i.focus]]),i.focus?(K(),F(i.LaunchDetailPanel,{key:0,index:i.detailIndex,"onUpdate:index":n[1]||=e=>i.detailIndex=e,item:i.focus,actions:i.detailActions,info:i.info,failure:i.failure,loading:i.state.detailLoading,onLaunch:n[2]||=e=>i.launch(i.focus,e)},null,8,[`index`,`item`,`actions`,`info`,`failure`,`loading`])):D(`v-if`,!0),!i.loading&&!i.items.length&&!i.error?(K(),U(`p`,Jpe,`Ничего не найдено`)):D(`v-if`,!0),i.error||i.warning||i.notice?(K(),U(`p`,{key:2,class:Y([`message`,{error:i.error}]),role:`status`},X(i.error||i.warning||i.notice),3)):D(`v-if`,!0),y(i.UiInline,{as:`footer`,class:`palette-footer`,align:`normal`,justify:`between`,gap:3,wrap:``},{default:e(()=>[i.focus?(K(),U(`span`,Ype,[...n[5]||=[G(`↑↓ выбрать `,-1),I(`span`,{class:`separator`},`·`,-1),G(` Enter выполнить `,-1),I(`span`,{class:`separator`},`·`,-1),G(` ← назад`,-1)]])):(K(),U(`span`,Xpe,[n[6]||=G(`↑↓ выбрать `,-1),n[7]||=I(`span`,{class:`separator`},`·`,-1),n[8]||=G(` Enter основное `,-1),n[9]||=I(`span`,{class:`separator`},`·`,-1),n[10]||=G(` Ctrl+Enter второе `,-1),n[11]||=I(`span`,{class:`separator`},`·`,-1),n[12]||=G(` → действия `,-1),n[13]||=I(`span`,{class:`separator`},`·`,-1),n[14]||=G(` Ctrl+D ★ `,-1),n[15]||=I(`span`,{class:`separator`},`·`,-1),G(` Esc `+X(i.webWindow?`закрыть`:`очистить`),1)]))]),_:1})]),_:1})],2)}var Qpe=H(Ipe,[[`render`,Zpe],[`__scopeId`,`data-v-f07f978a`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/pages/index.vue`]]),$pe=_ee({history:Rc(Fe()||`/`),routes:[{path:`/`,name:`launcher`,component:Qpe},{path:`/projects`,redirect:`/`},{path:`/projects/:projectPath(.*)+`,name:`project`,component:Mpe},{path:`/gh/projects/:githubPath(.*)+`,name:`github-project`,component:Ffe},{path:`/gl/projects/:gitlabPath(.*)+`,name:`gitlab-project`,component:hpe},{path:`/settings`,name:`settings`,component:Fpe}]}),eme=Iv({name:`Bars`,group:`data`,summary:`горизонтальные столбцы`,props:{items:{type:`array`,description:`[{label, value}]`,required:!0},unit:{type:`string`,description:`единица после значения`}},example:`<Bars unit=" ₽" :items="[{label:'A',value:120},{label:'B',value:80}]" />`}),tme=W({__name:`Bars`,props:{items:{type:Array,required:!0},unit:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r={props:n,max:B(()=>Math.max(1,...n.items.map(e=>e.value))),UiMeter:x7};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),nme={class:`bars`},rme={class:`label`},ime={class:`value`};function ame(e,t,n,r,i,a){return K(),U(`ul`,nme,[(K(!0),U(P,null,S(n.items,e=>(K(),U(`li`,{key:e.label},[I(`span`,rme,X(e.label),1),y(r.UiMeter,{value:e.value/r.max*100,height:8,tone:`info`},null,8,[`value`]),I(`span`,ime,X(e.value)+X(n.unit??``),1)]))),128))])}var ome={definition:eme,component:H(tme,[[`render`,ame],[`__scopeId`,`data-v-33812084`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/bars/ui/Bars.vue`]])},sme=Iv({name:`Button`,group:`action`,summary:`кнопка; отправляет данные агенту только по клику пользователя`,props:{submit:{type:`boolean`,description:`отправить значения окружающей <Form>`},reset:{type:`boolean`,description:`вернуть поля формы к исходным`},preset:{type:`object`,description:`задать поля формы по имени: {поле: значение}`},send:{type:`string | object`,description:`отправить это агенту как есть (вне формы)`},summary:{type:`string`,description:`строка перед данными в сообщении`},sentLabel:{type:`string`,description:`подпись после отправки, по умолчанию «Отправлено»`}},slot:`подпись кнопки`,notes:[`После отправки кнопка и форма блокируются. Без submit/send/preset/reset это обычная кнопка с @click.`],example:`<Button send="Да, продолжай" summary="Ответ">Продолжить</Button>`}),z9=Symbol(`agent-widget-form`),B9=e=>e===void 0?e:JSON.parse(JSON.stringify(e));function V9(e){let t=new Map,n=de({}),r=()=>{for(let e of Object.keys(n))delete n[e]};return{sent:M(!1),errors:n,register(r,i,a,o){let s={value:i,initial:B9(a),validate:o},c=e?.values?.[r];return c!==void 0&&(i.value=B9(c)),t.set(r,s),()=>{t.get(r)===s&&(t.delete(r),delete n[r])}},values:()=>Object.fromEntries([...t].map(([e,t])=>[e,B9(t.value.value)])),reset(){for(let e of t.values())e.value.value=B9(e.initial);r()},set(e){for(let[n,r]of Object.entries(e))t.has(n)&&(t.get(n).value.value=B9(r));r()},validate(){r();for(let[e,r]of t){let t=r.validate?.(r.value.value);t&&(n[e]=t)}return Object.keys(n).length===0}}}function H9(e,t,n,r){t.value===void 0&&(t.value=B9(n));let i=z(z9,null);i&&e&&g(i.register(e,t,t.value,r?e=>r(e):void 0))}function U9(e){return(e??[]).map(e=>typeof e==`string`?{value:e}:{...e,value:String(e.value)})}var cme=W({__name:`Button`,props:{submit:{type:Boolean,required:!1},reset:{type:Boolean,required:!1},preset:{type:Object,required:!1},send:{type:null,required:!1},summary:{type:String,required:!1},sentLabel:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=z(z9,null),i=z(vy,null),a=Cv(),o=M(!1),s=B(()=>n.submit?!!r?.sent.value:o.value),c=B(()=>re(i?.readonly)===!0),l=B(()=>s.value||!!r?.sent.value||c.value);function u(){l.value||(n.reset&&r?.reset(),n.preset&&r?.set(n.preset),n.submit&&r&&r.validate()&&a(r.values(),n.summary)?r.sent.value=!0:!n.submit&&n.send!==void 0&&a(n.send,n.summary)&&(o.value=!0))}let d={props:n,form:r,preset:i,reply:a,sentAlone:o,sent:s,presetReadonly:c,locked:l,click:u,UiButton:q};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}});function lme(t,n,r,i,a,o){return K(),F(i.UiButton,{disabled:i.locked,onClick:i.click},{default:e(()=>[i.sent?(K(),U(P,{key:0},[G(X(r.sentLabel??`Отправлено`),1)],64)):c(t.$slots,`default`,{},void 0,void 0,1)]),_:3},8,[`disabled`])}var ume={definition:sme,component:H(cme,[[`render`,lme],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/button/ui/Button.vue`]])},dme=Iv({name:`Card`,group:`layout`,summary:`рамка с заголовком для группы`,props:{title:{type:`string`,description:`заголовок`},hint:{type:`string`,description:`подпись под заголовком`},tone:{type:`'neutral' | 'warning'`,description:`цвет рамки`}},slot:`содержимое рамки`,example:`<Card title="Итоги" hint="за квартал">Выручка выросла на 12%.</Card>`}),fme=W({__name:`Card`,props:{title:{type:String,required:!1},hint:{type:String,required:!1},tone:{type:String,required:!1}},setup(e,{expose:t}){t();let n={UiCard:je};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),pme={key:0,class:`head`},mme={key:0,class:`title`},hme={key:1,class:`hint`};function gme(t,n,r,i,a,o){return K(),F(i.UiCard,{tone:r.tone},{default:e(()=>[r.title||r.hint?(K(),U(`header`,pme,[r.title?(K(),U(`strong`,mme,X(r.title),1)):D(`v-if`,!0),r.hint?(K(),U(`span`,hme,X(r.hint),1)):D(`v-if`,!0)])):D(`v-if`,!0),c(t.$slots,`default`,{},void 0,!0)]),_:3},8,[`tone`])}var _me={definition:dme,component:H(fme,[[`render`,gme],[`__scopeId`,`data-v-e77ea85a`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/card/ui/Card.vue`]])},W9=Iv({name:`Checks`,group:`form`,summary:`выбор из списка: несколько (флажки) или один (single)`,hidden:!0,props:{options:{type:`array`,description:`массив строк или объектов: value обязателен, label и hint необязательны`,required:!0},single:{type:`boolean`,description:`один вариант вместо нескольких`},name:{type:`string`,description:`имя поля в <Form>`},initial:{type:`array`,description:`начально выбранные value`}},model:{type:`array`,description:`выбранные value`},example:`<Checks name="scripts" :initial="['test']" :options="[{value:'start',hint:'dev-сервер'},'test']" />`}),vme=W({__name:`Checks`,props:t({options:{type:Array,required:!0},single:{type:Boolean,required:!1},name:{type:String,required:!1},initial:{type:Array,required:!1}},{modelValue:{type:Array},modelModifiers:{}}),emits:[`update:modelValue`],setup(e,{expose:t}){t();let n=e,r=u(e,`modelValue`);H9(n.name,r,n.initial??[]);let i=B(()=>U9(n.options)),a=B(()=>r.value??[]);function o(e,t){t?r.value=[e]:r.value=a.value.includes(e)?a.value.filter(t=>t!==e):[...a.value,e]}let s={props:n,model:r,items:i,chosen:a,toggle:o};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),yme={class:`checks`},bme=[`type`,`name`,`checked`,`onChange`],xme={class:`text`},Sme={key:0};function Cme(e,t,n,r,i,a){return K(),U(`ul`,yme,[(K(!0),U(P,null,S(r.items,e=>(K(),U(`li`,{key:e.value},[I(`label`,null,[I(`input`,{type:n.single?`radio`:`checkbox`,name:n.name,checked:r.chosen.includes(e.value),onChange:t=>r.toggle(e.value,n.single)},null,40,bme),I(`span`,xme,[I(`span`,null,X(e.label??e.value),1),e.hint?(K(),U(`small`,Sme,X(e.hint),1)):D(`v-if`,!0)])])]))),128))])}var wme={definition:W9,component:H(vme,[[`render`,Cme],[`__scopeId`,`data-v-8650f9cb`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/checks/ui/Checks.vue`]])},Tme=Iv({name:`Chips`,group:`data`,summary:`набор цветных меток: теги, статусы, технологии`,props:{items:{type:`string | {label, tone?, icon?}[]`,description:`метки; tone — neutral, info, success, warning, danger или accent; icon — имя из InlineIcon. Без tone цвета чередуются автоматически`,required:!0},mono:{type:`boolean`,description:`моноширинный шрифт для кода, хешей и версий`}},example:`<Chips :items="['TypeScript',{label:'готово',tone:'success',icon:'circle-check'},{label:'риск',tone:'warning',icon:'alert'}]" />`}),Eme={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Dme(e,t){return K(),U(`svg`,Eme,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`12`,cy:`12`,r:`10`}),I(`path`,{d:`M12 6v6l4 2`})],-1)]])}var Ome=L({name:`lucide-clock`,render:Dme}),kme={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ame(e,t){return K(),U(`svg`,kme,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9`},null,-1)]])}var jme=L({name:`lucide-cloud`,render:Ame}),Mme={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Nme(e,t){return K(),U(`svg`,Mme,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`m16 18l6-6l-6-6M8 6l-6 6l6 6`},null,-1)]])}var Pme=L({name:`lucide-code`,render:Nme}),Fme={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Ime(e,t){return K(),U(`svg`,Fme,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`}),I(`path`,{d:`M3 5v14a9 3 0 0 0 18 0V5`}),I(`path`,{d:`M3 12a9 3 0 0 0 18 0`})],-1)]])}var Lme=L({name:`lucide-database`,render:Ime}),Rme={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function zme(e,t){return K(),U(`svg`,Rme,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`circle`,{cx:`12`,cy:`12`,r:`3`}),I(`path`,{d:`M3 12h6m6 0h6`})],-1)]])}var Bme=L({name:`lucide-git-commit`,render:zme}),Vme={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Hme(e,t){return K(),U(`svg`,Vme,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`}),I(`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`})],-1)]])}var Ume=L({name:`lucide-lock`,render:Hme}),Wme={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Gme(e,t){return K(),U(`svg`,Wme,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73zm1 .27V12`}),I(`path`,{d:`M3.29 7L12 12l8.71-5M7.5 4.27l9 5.15`})],-1)]])}var Kme=L({name:`lucide-package`,render:Gme}),qme={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Jme(e,t){return K(),U(`svg`,qme,[...t[0]||=[I(`g`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`},[I(`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0a2.34 2.34 0 0 0 3.319 1.915a2.34 2.34 0 0 1 2.33 4.033a2.34 2.34 0 0 0 0 3.831a2.34 2.34 0 0 1-2.33 4.033a2.34 2.34 0 0 0-3.319 1.915a2.34 2.34 0 0 1-4.659 0a2.34 2.34 0 0 0-3.32-1.915a2.34 2.34 0 0 1-2.33-4.033a2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`}),I(`circle`,{cx:`12`,cy:`12`,r:`3`})],-1)]])}var Yme=L({name:`lucide-settings`,render:Jme}),Xme={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Zme(e,t){return K(),U(`svg`,Xme,[...t[0]||=[I(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5s-2.5-1.1-2.5-2.5V2m-1 0h7m-1 14h-5`},null,-1)]])}var Qme=L({name:`lucide-test-tube`,render:Zme}),G9={alert:Ly,"arrow-right":e8,check:Iy,"chevron-right":Ch,"circle-check":E0,clock:Ome,cloud:jme,code:Pme,database:Lme,"external-link":Fn,file:V4,folder:kh,"git-branch":PN,"git-commit":Bme,info:mA,lock:Ume,package:Kme,play:Ny,search:rg,settings:Yme,sparkles:Gy,terminal:dD,"test-tube":Qme,x:Cn},$me=W({__name:`Chips`,props:{items:{type:Array,required:!0},mono:{type:Boolean,required:!1}},setup(e,{expose:t}){t();let n=e,r=[`info`,`accent`,`success`,`warning`],i={props:n,palette:r,chips:B(()=>n.items.map((e,t)=>{let n=typeof e==`string`?{label:e}:e;return{...n,tone:n.tone??r[t%r.length],icon:n.icon?G9[n.icon]:void 0}}))};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),ehe={class:`chips`},the={key:1,class:`dot`,"aria-hidden":`true`};function nhe(e,t,n,r,i,a){return K(),U(`div`,ehe,[(K(!0),U(P,null,S(r.chips,(e,t)=>(K(),U(`span`,{key:`${t}:${e.label}`,class:Y([`chip`,[e.tone,{mono:n.mono}]])},[e.icon?(K(),F(C(e.icon),{key:0,class:`icon`,"aria-hidden":`true`})):(K(),U(`span`,the)),G(` `+X(e.label),1)],2))),128))])}var rhe={definition:Tme,component:H($me,[[`render`,nhe],[`__scopeId`,`data-v-5b9cc405`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/chips/ui/Chips.vue`]])},ihe=Iv({name:`Columns`,group:`layout`,summary:`колонки; на узкой ширине встают в столбик`,props:{cols:{type:`number`,description:`число колонок, по умолчанию 2`},gap:{type:`number`,description:`отступ в пикселях`}},slot:`элементы по колонкам`,example:`<Columns :cols="2"><Stat label="A" value="10" /><Stat label="B" value="20" /></Columns>`}),ahe=W({__name:`Columns`,props:{cols:{type:Number,required:!1},gap:{type:Number,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),ohe={class:`columns`};function she(e,t,n,r,i,a){return K(),U(`div`,ohe,[I(`div`,{class:`grid`,style:Qe({"--cols":n.cols??2,...n.gap===void 0?{}:{gap:`${n.gap}px`}})},[c(e.$slots,`default`,{},void 0,!0)],4)])}var che={definition:ihe,component:H(ahe,[[`render`,she],[`__scopeId`,`data-v-da14a7a5`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/columns/ui/Columns.vue`]])},lhe=Iv({name:`Donut`,group:`data`,summary:`кольцо с долями и легендой`,props:{items:{type:`array`,description:`[{label, value}]`,required:!0},center:{type:`string`,description:`текст в центре`}},example:`<Donut center="100%" :items="[{label:'A',value:60},{label:'B',value:40}]" />`}),uhe=W({__name:`Donut`,props:{items:{type:Array,required:!0},center:{type:String,required:!1}},setup(e,{expose:t}){t();let n={UiDonut:D7};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function dhe(e,t,n,r,i,a){return K(),F(r.UiDonut,{items:n.items,center:n.center},null,8,[`items`,`center`])}var fhe={definition:lhe,component:H(uhe,[[`render`,dhe],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/donut/ui/Donut.vue`]])},phe=Iv({name:`Field`,group:`form`,summary:`поле формы; type задаёт вид контроля`,props:{type:{type:`string`,description:`text, textarea, number, slider, select, radio, checks, switch, date, time или segmented; по умолчанию text`},name:{type:`string`,description:`имя поля в Form`},label:{type:`string`,description:`подпись поля`},hint:{type:`string`,description:`пояснение под полем`},initial:{type:`string | number | boolean | array`,description:`начальное значение; для checks — массив, для switch — boolean`},placeholder:{type:`string`,description:`подсказка в пустом text, textarea или number`},required:{type:`boolean`,description:`обязательное поле`},disabled:{type:`boolean`,description:`заблокировать поле`},options:{type:`array`,description:`для select, radio и checks: строки или {value, label, hint}`},min:{type:`number`,description:`минимум для number и slider`},max:{type:`number`,description:`максимум для number и slider`},step:{type:`number`,description:`шаг для number и slider`},unit:{type:`string`,description:`единица рядом со значением number и slider`},rows:{type:`number`,description:`высота textarea в строках`}},model:{type:`string | number | boolean | array`,description:`значение поля`},guide:`type: text | textarea | number | slider | select | radio | checks | switch | date | time | segmented.
|
|
179
|
-
Общие: name, label, hint, initial, placeholder, required, disabled.
|
|
180
|
-
options — для select/radio/checks; min/max/step/unit — для number/slider; rows — для textarea.
|
|
181
|
-
checks отдаёт array, switch — boolean, number/slider — number, остальные — string.`,example:`<Field type="select" name="mode" label="Режим" :options="['server','window']" />
|
|
182
|
-
<Field type="slider" name="port" label="Порт" :min="3000" :max="9000" :initial="4177" />`}),mhe=W({__name:`Field`,props:{modelValue:{type:null,required:!1},type:{type:String,required:!1},name:{type:String,required:!1},label:{type:String,required:!1},hint:{type:String,required:!1},initial:{type:null,required:!1},placeholder:{type:String,required:!1},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},options:{type:Array,required:!1},min:{type:Number,required:!1},max:{type:Number,required:!1},step:{type:Number,required:!1},unit:{type:String,required:!1},rows:{type:Number,required:!1}},emits:[`update:modelValue`],setup(e,{expose:t,emit:n}){t();let r=e,i=n,a=M();E(()=>r.modelValue,e=>{e!==void 0&&(a.value=e)},{immediate:!0});let o=B({get:()=>a.value,set:e=>{a.value=e,i(`update:modelValue`,e)}}),s=B({get:()=>typeof o.value==`string`?o.value:o.value==null?``:String(o.value),set:e=>o.value=e}),c=B({get:()=>typeof o.value==`number`?o.value:Number(o.value)||0,set:e=>o.value=e}),l=B({get:()=>o.value===!0,set:e=>o.value=e}),u=B(()=>r.type??`text`),d=B(()=>U9(r.options)),f=B(()=>r.initial===void 0?u.value===`checks`?[]:u.value===`switch`?!1:u.value===`number`||u.value===`slider`?r.min??0:u.value===`select`||u.value===`radio`||u.value===`segmented`?d.value[0]?.value??``:``:u.value===`checks`?Array.isArray(r.initial)?r.initial.map(String):[]:u.value===`switch`?r.initial===!0:u.value===`number`||u.value===`slider`?typeof r.initial==`number`?r.initial:Number(r.initial)||r.min||0:typeof r.initial==`string`?r.initial:String(r.initial)),p=B(()=>Array.isArray(o.value)?o.value.map(String):[]),m=z(z9,null),h=B(()=>r.name&&m?m.errors[r.name]??``:``);function g(e){if(r.required)return u.value===`checks`?p.value.length?void 0:`Выберите хотя бы один вариант`:u.value===`switch`?e===!0?void 0:`Включите переключатель`:u.value===`number`||u.value===`slider`?typeof e==`number`&&Number.isFinite(e)?void 0:`Укажите число`:s.value.trim()?void 0:`Заполните поле`}H9(r.name,o,f.value,g);let _=V(),v=`${_}-control`,y=`${_}-hint`;function b(e){let t=p.value;o.value=t.includes(e)?t.filter(t=>t!==e):[...t,e]}let x={props:r,emit:i,local:a,model:o,textModel:s,numberModel:c,booleanModel:l,kind:u,items:d,fallback:f,selected:p,form:m,error:h,validateField:g,id:_,controlId:v,hintId:y,toggle:b};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}}),hhe={key:0,class:`field choices-field`},ghe={key:0,class:`label`},_he={key:0,class:`required`,"aria-hidden":`true`},vhe=[`aria-required`,`aria-describedby`],yhe=[`type`,`name`,`value`,`checked`,`disabled`,`onChange`],bhe={class:`choice-text`},xhe={key:0},She={key:2,class:`error`,role:`alert`},Che={class:`switch-row`},whe=[`name`,`disabled`,`aria-required`,`aria-describedby`],The={key:0,class:`label`},Ehe={key:0,class:`required`,"aria-hidden":`true`},Dhe={key:1,class:`error`,role:`alert`},Ohe={key:2,class:`field`},khe={key:0,class:`label`},Ahe={key:0,class:`required`,"aria-hidden":`true`},jhe=[`aria-required`],Mhe=[`aria-pressed`,`disabled`,`onClick`],Nhe={key:2,class:`error`,role:`alert`},Phe={key:0,class:`label`},Fhe={key:0,class:`required`,"aria-hidden":`true`},Ihe={key:1,class:`number-row`},Lhe=[`name`,`placeholder`,`min`,`max`,`step`,`required`,`disabled`,`aria-describedby`],Rhe=[`name`,`min`,`max`,`step`,`disabled`,`aria-describedby`],zhe={key:2,class:`unit`},Bhe=[`name`,`rows`,`placeholder`,`required`,`disabled`,`aria-describedby`],Vhe=[`name`,`required`,`disabled`,`aria-describedby`],Hhe=[`value`],Uhe=[`type`,`name`,`placeholder`,`required`,`disabled`,`aria-describedby`],Whe={key:6,class:`error`,role:`alert`};function Ghe(e,t,n,r,i,a){return r.kind===`checks`||r.kind===`radio`?(K(),U(`fieldset`,hhe,[n.label?(K(),U(`legend`,ghe,[G(X(n.label),1),n.required?(K(),U(`span`,_he,`*`)):D(`v-if`,!0)])):D(`v-if`,!0),I(`div`,{class:`choices`,"aria-required":n.required||void 0,"aria-describedby":n.hint?r.hintId:void 0},[(K(!0),U(P,null,S(r.items,e=>(K(),U(`label`,{key:e.value,class:`choice`},[I(`input`,{type:r.kind===`checks`?`checkbox`:`radio`,name:n.name,value:e.value,checked:r.selected.includes(e.value),disabled:n.disabled,onChange:t=>r.kind===`checks`?r.toggle(e.value):r.model=e.value},null,40,yhe),I(`span`,bhe,[I(`span`,null,X(e.label??e.value),1),e.hint?(K(),U(`small`,xhe,X(e.hint),1)):D(`v-if`,!0)])]))),128))],8,vhe),n.hint?(K(),U(`small`,{key:1,id:r.hintId,class:`hint`},X(n.hint),1)):D(`v-if`,!0),r.error?(K(),U(`small`,She,X(r.error),1)):D(`v-if`,!0)])):r.kind===`switch`?(K(),U(`label`,{key:1,class:`field switch-field`,for:r.controlId},[I(`span`,Che,[te(I(`input`,{id:r.controlId,"onUpdate:modelValue":t[0]||=e=>r.booleanModel=e,type:`checkbox`,role:`switch`,name:n.name,disabled:n.disabled,"aria-required":n.required||void 0,"aria-describedby":n.hint?r.hintId:void 0},null,8,whe),[[O,r.booleanModel]]),n.label?(K(),U(`span`,The,[G(X(n.label),1),n.required?(K(),U(`span`,Ehe,`*`)):D(`v-if`,!0)])):D(`v-if`,!0)]),n.hint?(K(),U(`small`,{key:0,id:r.hintId,class:`hint`},X(n.hint),1)):D(`v-if`,!0),r.error?(K(),U(`small`,Dhe,X(r.error),1)):D(`v-if`,!0)])):r.kind===`segmented`?(K(),U(`label`,Ohe,[n.label?(K(),U(`span`,khe,[G(X(n.label),1),n.required?(K(),U(`span`,Ahe,`*`)):D(`v-if`,!0)])):D(`v-if`,!0),I(`span`,{class:`segmented`,role:`group`,"aria-required":n.required||void 0},[(K(!0),U(P,null,S(r.items,e=>(K(),U(`button`,{key:e.value,type:`button`,"aria-pressed":r.model===e.value,disabled:n.disabled,onClick:t=>r.model=e.value},X(e.label??e.value),9,Mhe))),128))],8,jhe),n.hint?(K(),U(`small`,{key:1,id:r.hintId,class:`hint`},X(n.hint),1)):D(`v-if`,!0),r.error?(K(),U(`small`,Nhe,X(r.error),1)):D(`v-if`,!0)])):(K(),U(`label`,{key:3,class:`field`,for:r.controlId},[n.label?(K(),U(`span`,Phe,[G(X(n.label),1),n.required?(K(),U(`span`,Fhe,`*`)):D(`v-if`,!0)])):D(`v-if`,!0),r.kind===`number`||r.kind===`slider`?(K(),U(`span`,Ihe,[r.kind===`number`?te((K(),U(`input`,{key:0,id:r.controlId,"onUpdate:modelValue":t[1]||=e=>r.numberModel=e,type:`number`,name:n.name,placeholder:n.placeholder,min:n.min,max:n.max,step:n.step,required:n.required,disabled:n.disabled,"aria-describedby":n.hint?r.hintId:void 0},null,8,Lhe)),[[j,r.numberModel,void 0,{number:!0}]]):te((K(),U(`input`,{key:1,id:r.controlId,"onUpdate:modelValue":t[2]||=e=>r.numberModel=e,type:`range`,name:n.name,min:n.min??0,max:n.max??100,step:n.step??1,disabled:n.disabled,"aria-describedby":n.hint?r.hintId:void 0},null,8,Rhe)),[[j,r.numberModel,void 0,{number:!0}]]),n.unit?(K(),U(`span`,zhe,X(n.unit),1)):D(`v-if`,!0)])):r.kind===`textarea`?te((K(),U(`textarea`,{key:2,id:r.controlId,"onUpdate:modelValue":t[3]||=e=>r.textModel=e,name:n.name,rows:n.rows??3,placeholder:n.placeholder,required:n.required,disabled:n.disabled,"aria-describedby":n.hint?r.hintId:void 0},null,8,Bhe)),[[j,r.textModel]]):r.kind===`select`?te((K(),U(`select`,{key:3,id:r.controlId,"onUpdate:modelValue":t[4]||=e=>r.textModel=e,name:n.name,required:n.required,disabled:n.disabled,"aria-describedby":n.hint?r.hintId:void 0},[(K(!0),U(P,null,S(r.items,e=>(K(),U(`option`,{key:e.value,value:e.value},X(e.label??e.value),9,Hhe))),128))],8,Vhe)),[[ge,r.textModel]]):te((K(),U(`input`,{key:4,id:r.controlId,"onUpdate:modelValue":t[5]||=e=>r.textModel=e,type:r.kind,name:n.name,placeholder:n.placeholder,required:n.required,disabled:n.disabled,"aria-describedby":n.hint?r.hintId:void 0},null,8,Uhe)),[[ue,r.textModel]]),n.hint?(K(),U(`small`,{key:5,id:r.hintId,class:`hint`},X(n.hint),1)):D(`v-if`,!0),r.error?(K(),U(`small`,Whe,X(r.error),1)):D(`v-if`,!0)]))}var Khe={definition:phe,component:H(mhe,[[`render`,Ghe],[`__scopeId`,`data-v-51027520`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/field/ui/Field.vue`]])},qhe=Iv({name:`Form`,group:`form`,summary:`форма без скрипта: собирает именованные поля внутри`,answer:!0,slot:`поля Field с name и кнопки`,notes:[`Поля внутри — Field с name; начальное значение задаётся initial. У Button флаг submit отправляет значения полей тебе и блокирует форму, summary задаёт подпись ответа, reset возвращает исходные значения, а preset принимает объект с новыми значениями полей.`,`Когда нужен выбор или настройки пользователя: покажи форму с submit-кнопкой и остановись; действуй после его ответа и только по выбранному.`,`Форма последним блоком ответа становится полем ввода чата: пользователь заполнит её на месте текстового поля, а его сообщение сохранит ту же форму с выбранными значениями. Не пиши текст после такой формы.`],guide:`Поля — Field с name; Button submit отправляет JSON, reset/preset меняют значения.
|
|
183
|
-
Форма последним блоком ответа становится полем ввода; не пиши текст после неё.`,example:`<Form><Field type="checks" name="scripts" :options="['start','test']" /><Button submit summary="Выбор">Применить</Button></Form>`}),Jhe=W({__name:`Form`,setup(e,{expose:t}){t();let r=z(vy,null),i=V9(r),a=B(()=>re(r?.readonly)===!0);E(a,e=>{e||(i.sent.value=!1)}),n(z9,i);let o={preset:r,form:i,readonly:a};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),Yhe=[`disabled`];function Xhe(e,t,n,r,i,a){return K(),U(`fieldset`,{class:`form`,disabled:r.form.sent.value||r.readonly},[c(e.$slots,`default`,{},void 0,!0)],8,Yhe)}var Zhe={definition:qhe,component:H(Jhe,[[`render`,Xhe],[`__scopeId`,`data-v-1f37a165`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/form/ui/Form.vue`]])},Qhe=Iv({name:`GitInfo`,group:`data`,summary:`состояние и история git: ветка, изменения, diff, коммиты — когда ответ опирается на репозиторий`,props:{branch:{type:`string`,description:`текущая ветка`},upstream:{type:`string`,description:`upstream-ветка, например origin/main`},ahead:{type:`number`,description:`коммитов впереди upstream`},behind:{type:`number`,description:`коммитов позади upstream`},clean:{type:`boolean`,description:`рабочее дерево чистое`},staged:{type:`number`,description:`изменений в индексе`},unstaged:{type:`number`,description:`неиндексированных изменений`},untracked:{type:`number`,description:`неотслеживаемых файлов`},conflicted:{type:`number`,description:`конфликтующих файлов`},additions:{type:`number`,description:`добавленных строк в diff`},deletions:{type:`number`,description:`удалённых строк в diff`},commits:{type:`[{hash, subject, author?, when?}]`,description:`последние коммиты; when — готовая подпись времени`},files:{type:`[{path, status?, additions?, deletions?}]`,description:`изменённые файлы; status — M, A, D, R и т. п.`}},special:!0,example:`<GitInfo branch="main" upstream="origin/main" :ahead="2" :staged="3" :unstaged="1" :untracked="2" :additions="48" :deletions="12" :commits="[{hash:'a1b2c3d',subject:'Добавить GitInfo',author:'Ада',when:'2 ч назад'}]" :files="[{path:'core/modules/agent-widgets/git-info/index.ts',status:'A',additions:48,deletions:0}]" />`}),$he=W({__name:`GitInfo`,props:{branch:{type:String,required:!1},upstream:{type:String,required:!1},ahead:{type:Number,required:!1},behind:{type:Number,required:!1},clean:{type:Boolean,required:!1},staged:{type:Number,required:!1},unstaged:{type:Number,required:!1},untracked:{type:Number,required:!1},conflicted:{type:Number,required:!1},additions:{type:Number,required:!1},deletions:{type:Number,required:!1},commits:{type:Array,required:!1},files:{type:Array,required:!1}},setup(e,{expose:t}){t();let n=e,r=B(()=>[{label:`в индексе`,value:n.staged},{label:`не в индексе`,value:n.unstaged},{label:`неотслеживаемых`,value:n.untracked},{label:`конфликтов`,value:n.conflicted}].filter(e=>e.value!==void 0)),i=B(()=>r.value.reduce((e,t)=>e+t.value,0)),a=B(()=>r.value.length>0),o=B(()=>(n.additions??0)+(n.deletions??0)),s=B(()=>n.additions!==void 0||n.deletions!==void 0),c={props:n,changes:r,changeCount:i,hasChanges:a,diffTotal:o,hasDiff:s,diffSegments:B(()=>[{value:o.value?(n.additions??0)/o.value*100:0,tone:`success`},{value:o.value?(n.deletions??0)/o.value*100:0,tone:`danger`}]),empty:B(()=>!n.branch&&!n.upstream&&!a.value&&!s.value&&!n.commits?.length&&!n.files?.length&&n.clean===void 0),short:e=>e.slice(0,7),get IconGitBranch(){return PN},UiBadge:kd,UiMeter:x7};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),ege={class:`git-info`},tge={key:0,class:`muted`},nge={key:0},rge={key:0,class:`branch`},ige={key:1,class:`upstream`},age={key:1,class:`metrics`},oge={key:2,class:`diff`},sge={class:`add`},cge={class:`del`},lge={key:3,class:`commits`},uge={class:`subject`},dge={key:0,class:`meta`},fge={key:4,class:`files`},pge={class:`path`},mge={key:1,class:`add`},hge={key:2,class:`del`};function gge(t,n,r,i,a,o){return K(),U(`section`,ege,[i.empty?(K(),U(`p`,tge,`Нет данных git.`)):(K(),U(P,{key:1},[r.branch||r.upstream||r.ahead!==void 0||r.behind!==void 0||r.clean!==void 0?(K(),U(`header`,nge,[r.branch?(K(),U(`span`,rge,[y(i.IconGitBranch,{"aria-hidden":`true`}),I(`strong`,null,X(r.branch),1)])):D(`v-if`,!0),r.upstream?(K(),U(`span`,ige,X(r.upstream),1)):D(`v-if`,!0),r.ahead?(K(),F(i.UiBadge,{key:2,tone:`info`},{default:e(()=>[G(`↑`+X(r.ahead),1)]),_:1})):D(`v-if`,!0),r.behind?(K(),F(i.UiBadge,{key:3,tone:`warning`},{default:e(()=>[G(`↓`+X(r.behind),1)]),_:1})):D(`v-if`,!0),r.clean===!0||r.clean!==!1&&i.hasChanges&&i.changeCount===0?(K(),F(i.UiBadge,{key:4,tone:`info`},{default:e(()=>[...n[0]||=[G(` чисто `,-1)]]),_:1})):r.conflicted?(K(),F(i.UiBadge,{key:5,tone:`danger`},{default:e(()=>[G(X(r.conflicted)+` конфл.`,1)]),_:1})):i.hasChanges?(K(),F(i.UiBadge,{key:6,tone:`warning`},{default:e(()=>[G(X(i.changeCount)+` изм.`,1)]),_:1})):D(`v-if`,!0)])):D(`v-if`,!0),i.changes.length?(K(),U(`dl`,age,[(K(!0),U(P,null,S(i.changes,e=>(K(),U(`div`,{key:e.label},[I(`dt`,null,X(e.label),1),I(`dd`,null,X(e.value),1)]))),128))])):D(`v-if`,!0),i.hasDiff?(K(),U(`div`,oge,[I(`span`,sge,`+`+X(r.additions??0),1),I(`span`,cge,`−`+X(r.deletions??0),1),y(i.UiMeter,{height:6,segments:i.diffSegments,"aria-hidden":`true`},null,8,[`segments`])])):D(`v-if`,!0),r.commits?.length?(K(),U(`ol`,lge,[(K(!0),U(P,null,S(r.commits,e=>(K(),U(`li`,{key:e.hash},[I(`code`,null,X(i.short(e.hash)),1),I(`span`,uge,X(e.subject),1),e.author||e.when?(K(),U(`span`,dge,X([e.author,e.when].filter(Boolean).join(` · `)),1)):D(`v-if`,!0)]))),128))])):D(`v-if`,!0),r.files?.length?(K(),U(`ul`,fge,[(K(!0),U(P,null,S(r.files,t=>(K(),U(`li`,{key:t.path},[t.status?(K(),F(i.UiBadge,{key:0,tone:t.status===`D`?`danger`:`neutral`,mono:``},{default:e(()=>[G(X(t.status),1)]),_:2},1032,[`tone`])):D(`v-if`,!0),I(`code`,pge,X(t.path),1),t.additions===void 0?D(`v-if`,!0):(K(),U(`span`,mge,`+`+X(t.additions),1)),t.deletions===void 0?D(`v-if`,!0):(K(),U(`span`,hge,`−`+X(t.deletions),1))]))),128))])):D(`v-if`,!0)],64))])}var _ge={definition:Qhe,component:H($he,[[`render`,gge],[`__scopeId`,`data-v-78e760c0`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/git-info/ui/GitInfo.vue`]])},vge=Iv({name:`Image`,group:`data`,summary:`изображение с подписью`,props:{src:{type:`string`,description:`адрес изображения: URL, data: URI, путь файла проекта или абсолютный путь на диске (/tmp/…, file://, C:\\…)`,required:!0},alt:{type:`string`,description:`текстовое описание для доступности`,required:!0},caption:{type:`string`,description:`подпись под изображением`},fit:{type:`"contain" | "cover"`,description:`вписывание в рамку, по умолчанию contain`},height:{type:`number`,description:`высота в пикселях, по умолчанию 240`}},notes:["Путь разрешается так же, как у markdown-картинки ``: файл проекта читается из проекта, абсолютный путь — с диска.",`Клик открывает просмотр с масштабом, как у markdown-картинки; битая загрузка заменяется ссылкой с alt.`],example:`<Image src="https://example.com/chart.png" alt="График продаж" caption="Продажи за квартал" fit="contain" :height="240" />`}),yge=W({__name:`Image`,props:{src:{type:String,required:!0},alt:{type:String,required:!0},caption:{type:String,required:!1},fit:{type:String,required:!1},height:{type:Number,required:!1}},setup(e,{expose:t}){t();let n=e,r=z(RS,``),i=B(()=>LS(n.src,r)),a=B(()=>({height:`${Math.max(80,Math.min(1200,n.height??240))}px`,objectFit:n.fit??`contain`})),o=M(!1),s=M();E(i,()=>{o.value=!1,s.value=void 0});let c={props:n,projectId:r,source:i,style:a,failed:o,viewing:s,ImageModal:dn};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),bge={class:`image`},xge=[`aria-label`],Sge=[`src`,`alt`],Cge=[`href`],wge={key:2,class:`image-text`},Tge={key:3};function Ege(e,t,n,r,i,a){return K(),U(P,null,[I(`figure`,bge,[r.source&&!r.failed?(K(),U(`button`,{key:0,type:`button`,class:`preview`,"aria-label":n.alt?`Открыть изображение: ${n.alt}`:`Открыть изображение`,onClick:t[1]||=e=>r.viewing=r.source},[I(`img`,{src:r.source,alt:n.alt,style:Qe(r.style),loading:`lazy`,decoding:`async`,referrerpolicy:`no-referrer`,onError:t[0]||=e=>r.failed=!0},null,44,Sge)],8,xge)):r.source?(K(),U(`a`,{key:1,class:`image-text`,href:r.source,target:`_blank`,rel:`noopener noreferrer`},X(n.alt||`Изображение`),9,Cge)):(K(),U(`span`,wge,X(n.alt||`Изображение`),1)),n.caption?(K(),U(`figcaption`,Tge,X(n.caption),1)):D(`v-if`,!0)]),r.viewing?(K(),F(r.ImageModal,{key:0,src:r.viewing,alt:n.alt,onClose:t[2]||=e=>r.viewing=void 0},null,8,[`src`,`alt`])):D(`v-if`,!0)],64)}var Dge={definition:vge,component:H(yge,[[`render`,Ege],[`__scopeId`,`data-v-36656bb8`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/image/ui/Image.vue`]])},Oge=Iv({name:`InlineIcon`,group:`data`,summary:`небольшая иконка внутри строки или рядом с подписью`,props:{name:{type:`string`,description:`одно из имён: alert, arrow-right, check, chevron-right, circle-check, clock, cloud, code, database, external-link, file, folder, git-branch, git-commit, info, lock, package, play, search, settings, sparkles, terminal, test-tube, x`,required:!0},label:{type:`string`,description:`доступное название; без него иконка декоративная`}},example:`<InlineIcon name="git-branch" label="Ветка" />`}),kge=W({__name:`InlineIcon`,props:{name:{type:String,required:!0},label:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r={props:n,icon:B(()=>G9[n.name])};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Age=[`aria-label`,`aria-hidden`],jge=[`title`];function Mge(e,t,n,r,i,a){return r.icon?(K(),U(`span`,{key:0,class:`inline-icon`,role:`img`,"aria-label":n.label,"aria-hidden":!n.label},[(K(),F(C(r.icon)))],8,Age)):(K(),U(`span`,{key:1,class:`inline-icon missing`,title:`Нет иконки ${n.name}`,"aria-hidden":`true`},`•`,8,jge))}var Nge={definition:Oge,component:H(kge,[[`render`,Mge],[`__scopeId`,`data-v-9fc2106a`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/inline-icon/ui/InlineIcon.vue`]])},Pge=Iv({name:`Input`,group:`form`,summary:`строка или многострочный текст`,hidden:!0,props:{label:{type:`string`,description:`подпись`},placeholder:{type:`string`,description:`подсказка в пустом поле`},multiline:{type:`boolean`,description:`несколько строк`},name:{type:`string`,description:`имя поля в <Form>`},initial:{type:`string`,description:`начальный текст`}},model:{type:`string`,description:`введённый текст`},example:`<Input name="note" label="Комментарий" multiline />`}),Fge=W({__name:`Input`,props:t({label:{type:String,required:!1},placeholder:{type:String,required:!1},multiline:{type:Boolean,required:!1},name:{type:String,required:!1},initial:{type:String,required:!1}},{modelValue:{type:String},modelModifiers:{}}),emits:[`update:modelValue`],setup(e,{expose:t}){t();let n=e,r=u(e,`modelValue`);H9(n.name,r,n.initial??``);let i={props:n,model:r};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),Ige={class:`field`},Lge={key:0},Rge=[`name`,`placeholder`],zge=[`name`,`placeholder`];function Bge(e,t,n,r,i,a){return K(),U(`label`,Ige,[n.label?(K(),U(`span`,Lge,X(n.label),1)):D(`v-if`,!0),n.multiline?te((K(),U(`textarea`,{key:1,"onUpdate:modelValue":t[0]||=e=>r.model=e,rows:`3`,name:n.name,placeholder:n.placeholder},null,8,Rge)),[[j,r.model]]):te((K(),U(`input`,{key:2,"onUpdate:modelValue":t[1]||=e=>r.model=e,type:`text`,name:n.name,placeholder:n.placeholder},null,8,zge)),[[j,r.model]])])}var Vge={definition:Pge,component:H(Fge,[[`render`,Bge],[`__scopeId`,`data-v-383668c3`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/input/ui/Input.vue`]])},Hge=Iv({name:`IntelligentForm`,group:`form`,summary:`форма ответа: поля управления; в поле ввода отправляется общей кнопкой`,answer:!0,props:{submit:{type:`string`,description:`подпись кнопки в сообщении или снимке, по умолчанию «Отправить»`},summary:{type:`string`,description:`строка перед данными в сообщении агенту`},sentLabel:{type:`string`,description:`подпись кнопки после отправки, по умолчанию «Отправлено»`}},slot:`поля Field с name`,notes:[`Когда нужно собрать два параметра или больше либо настройки пользователя, закончи ответ одной IntelligentForm и не пиши текст после неё; не разделяй их на несколько ask_user. Для одного вопроса или одного варианта остаётся ask_user.`,`Внутрь положи Field с name. Не оборачивай форму в Card или Form и не добавляй Button submit: в поле ввода отправляет общая кнопка, а в сообщении и снимке — кнопка самой формы.`,`Пока форма открыта в поле ввода, её блок не показывается в ответе; не дублируй его текстом.`],guide:`Внутрь — Field с name; общая кнопка композера отправляет JSON.
|
|
184
|
-
Не оборачивай в Card/Form и не добавляй Button submit; не пиши текст после формы.`,example:`<IntelligentForm summary="Настройки проекта" submit="Применить"><Field type="radio" name="mode" :options="['server','window']" /><Field type="number" name="port" label="Порт" :initial="4177" /></IntelligentForm>`}),Uge=W({__name:`IntelligentForm`,props:{submit:{type:String,required:!1},summary:{type:String,required:!1},sentLabel:{type:String,required:!1}},setup(e,{expose:t}){t();let r=e,i=z(vy,null),a=z(yy,null),o=V9(i),s=Cv(),c=B(()=>re(i?.readonly)===!0),l=B(()=>o.sent.value||c.value),u=a?.composer!==!0;E(c,e=>{e||(o.sent.value=!1)}),n(z9,o);let d=a?.registerSubmit?.(f);g(()=>d?.());function f(){return l.value||!o.validate()||!s(o.values(),r.summary)?!1:(o.sent.value=!0,!0)}let p={props:r,preset:i,chrome:a,form:o,reply:s,readonly:c,locked:l,ownSubmit:u,unregister:d,send:f,UiButton:q};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),Wge=[`disabled`],Gge={key:0,class:`actions`};function Kge(t,n,r,i,a,o){return K(),U(`fieldset`,{class:`intelligent-form`,disabled:i.locked},[c(t.$slots,`default`,{},void 0,!0),i.ownSubmit?(K(),U(`div`,Gge,[y(i.UiButton,{disabled:i.locked,onClick:i.send},{default:e(()=>[G(X(i.locked?r.sentLabel??`Отправлено`:r.submit??`Отправить`),1)]),_:1},8,[`disabled`])])):D(`v-if`,!0)],8,Wge)}var qge={definition:Hge,component:H(Uge,[[`render`,Kge],[`__scopeId`,`data-v-5086c333`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/intelligent-form/ui/IntelligentForm.vue`]])},Jge=Iv({name:`Line`,group:`data`,summary:`линейный график по меткам оси`,props:{labels:{type:`array`,description:`подписи оси X: ['янв','фев']`,required:!0},series:{type:`array`,description:`[{name, data:[числа]}] по числу меток`,required:!0},height:{type:`number`,description:`высота, по умолчанию 160`}},example:`<Line :labels="['янв','фев']" :series="[{name:'Выручка',data:[10,14]}]" />`}),Yge=44,Xge=W({__name:`Line`,props:{labels:{type:Array,required:!0},series:{type:Array,required:!0},height:{type:Number,required:!1}},setup(e,{expose:t}){t();let n=e,r=[`var(--info)`,`var(--run)`,`var(--warn)`,`var(--err)`],i=M(),a=M(),o=M(480),s;f(()=>{i.value&&typeof ResizeObserver<`u`&&(s=new ResizeObserver(([e])=>{let t=Math.round(e?.contentRect.width??0);t>120&&requestAnimationFrame(()=>o.value=t)}),s.observe(i.value))}),g(()=>s?.disconnect());let c=B(()=>n.height??160),l=B(()=>Math.max(1,n.labels?.length??1)),u=B(()=>{let e=n.series?.flatMap(e=>e?.data??[])??[];return Math.max(1,...e)}),d=B(()=>({l:12+String(Math.round(u.value)).length*5.5,r:18,t:10,b:22})),p=M(0),m=M(Math.max(1,(n.labels?.length??1)-1)),h=()=>{p.value=0,m.value=Math.max(1,(n.labels?.length??1)-1)};E(()=>n.labels?.length,()=>h());let _=B(()=>Math.max(1e-6,m.value-p.value)),v=e=>d.value.l+(e-p.value)/_.value*(o.value-d.value.l-d.value.r),y=e=>d.value.t+(1-e/u.value)*(c.value-d.value.t-d.value.b),b=B(()=>(n.series??[]).map((e,t)=>({name:e.name,color:r[t%r.length],points:(e.data??[]).map((e,t)=>`${v(t)},${y(e)}`).join(` `),dots:(e.data??[]).map((e,t)=>({cx:v(t),cy:y(e)}))}))),x=B(()=>[0,.5,1].map(e=>Math.round(u.value*e))),S=B(()=>{let e=C(p.value),t=C(m.value);return{x:e,width:Math.max(2,t-e)}}),C=e=>{let t=o.value-d.value.l-d.value.r,r=Math.max(1,(n.labels?.length??1)-1);return d.value.l+e/r*t},w=M(null),T=M(!1),D=M(!1),O=M(0),k=M(0),A=M(!1),j=M(null);function N(e,t=a.value??null){let n=t?.getBoundingClientRect();return!n||n.width===0?0:(e.clientX-n.left)*(o.value/n.width)}function ee(e){let t=o.value-d.value.l-d.value.r,n=(e-d.value.l)/(t||1),r=p.value+n*_.value;return Math.min(l.value-1,Math.max(0,Math.round(r)))}function te(e){let t=o.value-d.value.l-d.value.r,n=(e-d.value.l)/(t||1);return Math.min(l.value-1,Math.max(0,Math.round(n*(l.value-1))))}function P(e){let t=N(e);D.value?k.value=t:w.value=ee(t)}function ne(){D.value||(w.value=null)}function F(e){if(l.value<=1)return;let t=N(e);D.value=!0,O.value=t,k.value=t,e.currentTarget?.setPointerCapture?.(e.pointerId)}function I(){if(!D.value)return;let e=Math.min(O.value,k.value),t=Math.max(O.value,k.value);if(t-e>8){let n=ee(e),r=ee(t),i=Math.min(n,r),a=Math.max(n,r);a-i>=1&&(p.value=i,m.value=a)}D.value=!1}function re(){D.value=!1,w.value=null}function ie(e){if(l.value<=1)return;let t=ee(N(e)),n=_.value,r=e.deltaY>0?1.25:.8,i=Math.min(l.value-1,Math.max(1,n*r)),a=t-(t-p.value)/n*i,o=a+i;a<0&&(a=0,o=i),o>l.value-1&&(o=l.value-1,a=o-i),p.value=Math.max(0,a),m.value=Math.min(l.value-1,Math.max(p.value+1e-6,o))}function L(e){if(l.value<=1)return;let t=e.currentTarget,n=N(e,t),r=C(p.value),i=C(m.value);if(n>=r&&n<=i)A.value=!0,j.value={x:n,lo:p.value,hi:m.value},t.setPointerCapture?.(e.pointerId);else{let e=te(n),t=m.value-p.value,r=e-t/2,i=e+t/2;r<0&&(r=0,i=t),i>l.value-1&&(i=l.value-1,r=i-t),p.value=Math.max(0,r),m.value=Math.min(l.value-1,Math.max(p.value+1e-6,i))}}function R(e){if(!A.value||!j.value)return;let t=N(e,e.currentTarget),n=o.value-d.value.l-d.value.r,r=(t-j.value.x)/(n||1)*(l.value-1),i=j.value.hi-j.value.lo,a=j.value.lo+r,s=a+i;a<0&&(a=0,s=i),s>l.value-1&&(s=l.value-1,a=s-i),p.value=Math.max(0,a),m.value=Math.min(l.value-1,Math.max(p.value+1e-6,s))}function z(){A.value=!1,j.value=null}let ae=B(()=>(n.series??[]).map((e,t)=>({name:e.name,color:r[t%r.length],points:(e.data??[]).map((e,t)=>`${C(t)},${4+(1-e/u.value)*36}`).join(` `)}))),oe=B(()=>{if(w.value===null)return null;let e=w.value,t=n.labels??[],i=n.series??[];return e<0||e>=t.length?null:{index:e,label:t[e],values:i.map((t,n)=>({name:t.name,value:t.data?.[e],color:r[n%r.length]})),x:v(e),y:y(i[0]?.data?.[e]??0)}}),se={props:n,colors:r,host:i,svgEl:a,W:o,get observer(){return s},set observer(e){s=e},H:c,n:l,max:u,pad:d,lo:p,hi:m,resetView:h,span:_,x:v,y,lines:b,ticks:x,miniH:Yge,miniRect:S,xFull:C,hoverIndex:w,showMinimap:T,isBrushing:D,brushStart:O,brushEnd:k,miniDragging:A,miniDragStart:j,viewBoxX:N,indexFromX:ee,fullIndexFromX:te,onMove:P,onLeave:ne,onDown:F,onUp:I,onCancel:re,onWheel:ie,onMiniDown:L,onMiniMove:R,onMiniUp:z,miniLines:ae,hoveredPoint:oe,tooltipStyle:B(()=>{if(!oe.value)return{};let e=oe.value,t=Math.min(82,e.x/o.value*100),n=Math.max(0,e.y/c.value*100-12);return{left:`${t}%`,top:`${n}%`}})};return Object.defineProperty(se,"__isScriptSetup",{enumerable:!1,value:!0}),se}}),Zge={ref:`host`,class:`line`,"data-swipe-ignore":``},Qge={class:`toolbar`},$ge=[`viewBox`],e_e=[`x1`,`x2`,`y1`,`y2`],t_e=[`x`,`y`],n_e=[`x`,`y`],r_e=[`points`,`stroke`],i_e=[`fill`],a_e=[`cx`,`cy`,`r`,`opacity`],o_e=[`x1`,`x2`,`y1`,`y2`],s_e=[`x`,`y`,`width`,`height`],c_e=[`viewBox`],l_e=[`points`,`stroke`],u_e=[`x`,`width`,`height`],d_e={class:`tt-label`};function f_e(e,t,n,r,i,a){return K(),U(`figure`,Zge,[I(`div`,Qge,[I(`button`,{type:`button`,class:Y([`tool`,{active:r.showMinimap}]),title:`Миникарта`,onClick:t[0]||=e=>r.showMinimap=!r.showMinimap},` Карта `,2),I(`button`,{type:`button`,class:`tool`,title:`Сбросить масштаб`,onClick:t[1]||=e=>r.resetView()},`↺`)]),(K(),U(`svg`,{ref:`svgEl`,viewBox:`0 0 ${r.W} ${r.H}`,role:`img`,onPointermove:r.onMove,onPointerdown:r.onDown,onPointerup:r.onUp,onPointercancel:r.onCancel,onPointerleave:r.onLeave,onWheel:N(r.onWheel,[`prevent`])},[(K(!0),U(P,null,S(r.ticks,e=>(K(),U(`g`,{key:e},[I(`line`,{x1:r.pad.l,x2:r.W-r.pad.r,y1:r.y(e),y2:r.y(e),class:`grid`},null,8,e_e),I(`text`,{x:r.pad.l-6,y:r.y(e)+3,class:`axis`,"text-anchor":`end`},X(e),9,t_e)]))),128)),(K(!0),U(P,null,S(n.labels,(e,t)=>(K(),U(`text`,{key:e,x:r.x(t),y:r.H-6,class:`axis`,"text-anchor":`middle`},X(e),9,n_e))),128)),(K(!0),U(P,null,S(r.lines,e=>(K(),U(`polyline`,{key:e.name,points:e.points,stroke:e.color,fill:`none`,"stroke-width":`2`,"stroke-linejoin":`round`},null,8,r_e))),128)),(K(!0),U(P,null,S(r.lines,e=>(K(),U(`g`,{key:`${e.name}-dots`,fill:e.color},[(K(!0),U(P,null,S(e.dots,(e,t)=>(K(),U(`circle`,{key:t,cx:e.cx,cy:e.cy,r:r.hoverIndex===t?4.5:2.5,opacity:r.hoverIndex===null||r.hoverIndex===t?1:.35},null,8,a_e))),128))],8,i_e))),128)),r.hoveredPoint?(K(),U(`line`,{key:0,x1:r.hoveredPoint.x,x2:r.hoveredPoint.x,y1:r.pad.t,y2:r.H-r.pad.b,class:`guide`},null,8,o_e)):D(`v-if`,!0),r.isBrushing?(K(),U(`rect`,{key:1,x:Math.min(r.brushStart,r.brushEnd),y:r.pad.t,width:Math.abs(r.brushEnd-r.brushStart),height:r.H-r.pad.t-r.pad.b,class:`brush`},null,8,s_e)):D(`v-if`,!0)],40,$ge)),r.showMinimap?(K(),U(`svg`,{key:0,class:`minimap`,viewBox:`0 0 ${r.W} ${r.miniH}`,role:`img`,onPointerdown:r.onMiniDown,onPointermove:r.onMiniMove,onPointerup:r.onMiniUp,onPointercancel:r.onMiniUp,onPointerleave:r.onMiniUp},[(K(!0),U(P,null,S(r.miniLines,e=>(K(),U(`polyline`,{key:e.name,points:e.points,stroke:e.color,fill:`none`,"stroke-width":`1.5`,"stroke-linejoin":`round`,opacity:`0.6`},null,8,l_e))),128)),I(`rect`,{x:r.miniRect.x,y:`2`,width:r.miniRect.width,height:r.miniH-4,class:`mini-viewport`},null,8,u_e)],40,c_e)):D(`v-if`,!0),r.hoveredPoint?(K(),U(`div`,{key:1,class:`tooltip`,style:Qe(r.tooltipStyle)},[I(`div`,d_e,X(r.hoveredPoint.label),1),(K(!0),U(P,null,S(r.hoveredPoint.values,e=>(K(),U(`div`,{key:e.name,class:`tt-row`},[I(`i`,{style:Qe({background:e.color})},null,4),G(X(e.name)+`: `,1),I(`strong`,null,X(e.value),1)]))),128))],4)):D(`v-if`,!0),I(`figcaption`,null,[(K(!0),U(P,null,S(r.lines,e=>(K(),U(`span`,{key:e.name},[I(`i`,{style:Qe({background:e.color})},null,4),G(X(e.name),1)]))),128))])],512)}var p_e={definition:Jge,component:H(Xge,[[`render`,f_e],[`__scopeId`,`data-v-71fd321d`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/line/ui/Line.vue`]])},m_e=Iv({name:`Row`,group:`layout`,summary:`ряд с переносом по ширине (показатели кладут в него)`,props:{gap:{type:`number`,description:`отступ в пикселях`}},slot:`элементы ряда`,example:`<Row><Stat label="A" value="1" /><Stat label="B" value="2" /></Row>`}),h_e=W({__name:`Row`,props:{gap:{type:Number,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function g_e(e,t,n,r,i,a){return K(),U(`div`,{class:`row`,style:Qe(n.gap===void 0?void 0:{gap:`${n.gap}px`})},[c(e.$slots,`default`,{},void 0,!0)],4)}var __e={definition:m_e,component:H(h_e,[[`render`,g_e],[`__scopeId`,`data-v-293b1eb4`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/row/ui/Row.vue`]])},v_e=Iv({name:`SafeSecretShow`,group:`data`,summary:`секрет от агента: показывает пользователю значение, которое вернёт скрипт, не попадая ни в чат, ни к агенту`,props:{script:{type:`string`,description:`shell-команда, чей stdout — секрет; выполняется на машине пользователя`,required:!0},label:{type:`string`,description:`название секрета в панели`},comment:{type:`string`,description:`комментарий агента пользователю`}},special:!0,notes:[`Секрет не попадает в ответ, историю чата и контекст агента: скрипт выполняется на сервере, а значение показывается только в браузере пользователя.`,`Скрипт запускается только по нажатию «Показать секрет»; команда видна под кнопкой. Значение хранится лишь в открытом окне.`],example:`<SafeSecretShow script="cat ~/.ssh/id_ed25519" label="Приватный ключ SSH" comment="Скопируйте ключ в сервис." />`}),y_e=W({__name:`SafeSecretShow`,props:{script:{type:String,required:!0},label:{type:String,required:!1},comment:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=z(Tv,void 0),i=M(``),a=M(``),o=M(``),s=M(!1);async function c(){if(!s.value){s.value=!0,a.value=``,o.value=``;try{let e=await fetch(`/api/agent/secret-show/reveal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({script:n.script,...n.label?{label:n.label}:{},...n.comment?{comment:n.comment}:{},...r?.value?{projectId:r.value}:{}})}),t=await e.json().catch(()=>({}));if(!e.ok)throw o.value=typeof t.detail==`string`?t.detail:``,Error(typeof t.error==`string`?t.error:`Секрет недоступен`);if(typeof t.secret!=`string`||!t.secret)throw Error(`Сервер не вернул секрет`);i.value=t.secret}catch(e){a.value=e instanceof Error?e.message:`Не удалось получить секрет`}finally{s.value=!1}}}let l={props:n,projectId:r,secret:i,error:a,detail:o,loading:s,load:c,UiButton:q,UiCard:je,UiInline:Be,UiSecretValue:gL,get IconKey(){return OF}};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),b_e={class:`title`},x_e={key:0,class:`comment`},S_e={key:0,class:`error`,role:`alert`},C_e={key:1,class:`detail`},w_e={class:`command`};function T_e(t,n,r,i,a,o){return K(),F(i.UiCard,{as:`section`,tone:`warning`,density:`notice`,class:`secret-widget`},{default:e(()=>[y(i.UiInline,{as:`header`,align:`center`,justify:`normal`},{default:e(()=>[y(i.IconKey,{"aria-hidden":`true`}),I(`span`,b_e,X(r.label||`Секрет`),1)]),_:1}),r.comment?(K(),U(`p`,x_e,X(r.comment),1)):D(`v-if`,!0),n[1]||=I(`p`,{class:`note`},`Секрет не попадает в чат и к агенту.`,-1),i.secret?(K(),F(i.UiSecretValue,{key:1,value:i.secret,label:r.label||`Секрет`},null,8,[`value`,`label`])):(K(),U(P,{key:2},[i.error?(K(),U(`p`,S_e,X(i.error),1)):D(`v-if`,!0),i.detail?(K(),U(`pre`,C_e,X(i.detail),1)):D(`v-if`,!0),I(`details`,w_e,[n[0]||=I(`summary`,null,`Команда`,-1),I(`pre`,null,X(r.script),1)]),y(i.UiButton,{type:`button`,size:`sm`,appearance:`solid`,busy:i.loading,disabled:!r.script.trim(),onClick:i.load},{default:e(()=>[G(X(i.error?`Повторить`:`Показать секрет`),1)]),_:1},8,[`busy`,`disabled`])],64))]),_:1})}var E_e={definition:v_e,component:H(y_e,[[`render`,T_e],[`__scopeId`,`data-v-6a153b52`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/safe-secret-show/ui/SafeSecretShow.vue`]])},D_e=Iv({name:`Slider`,group:`form`,summary:`число на шкале`,hidden:!0,props:{label:{type:`string`,description:`подпись`},min:{type:`number`,description:`минимум, по умолчанию 0`},max:{type:`number`,description:`максимум, по умолчанию 100`},step:{type:`number`,description:`шаг`},unit:{type:`string`,description:`единица рядом со значением`},name:{type:`string`,description:`имя поля в <Form>`},initial:{type:`number`,description:`начальное значение, по умолчанию min`}},model:{type:`number`,description:`текущее значение`},example:`<Slider name="port" label="Порт" :min="3000" :max="9000" unit="" :initial="4000" />`}),O_e=W({__name:`Slider`,props:t({label:{type:String,required:!1},min:{type:Number,required:!1},max:{type:Number,required:!1},step:{type:Number,required:!1},unit:{type:String,required:!1},name:{type:String,required:!1},initial:{type:Number,required:!1}},{modelValue:{type:Number},modelModifiers:{}}),emits:[`update:modelValue`],setup(e,{expose:t}){t();let n=e,r=u(e,`modelValue`);H9(n.name,r,n.initial??n.min??0);let i={props:n,model:r};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),k_e={class:`slider`},A_e={class:`head`},j_e=[`name`,`min`,`max`,`step`];function M_e(e,t,n,r,i,a){return K(),U(`label`,k_e,[I(`span`,A_e,[I(`span`,null,X(n.label),1),I(`output`,null,X(r.model)+X(n.unit??``),1)]),te(I(`input`,{"onUpdate:modelValue":t[0]||=e=>r.model=e,type:`range`,name:n.name,min:n.min??0,max:n.max??100,step:n.step??1},null,8,j_e),[[j,r.model,void 0,{number:!0}]])])}var N_e={definition:D_e,component:H(O_e,[[`render`,M_e],[`__scopeId`,`data-v-7afb0a2e`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/slider/ui/Slider.vue`]])},P_e=Iv({name:`Stat`,group:`data`,summary:`показатель: подпись, значение, изменение`,props:{label:{type:`string`,description:`подпись`,required:!0},value:{type:`string | number`,description:`значение`,required:!0},delta:{type:`number`,description:`изменение в процентах: число без знака %, например 3.6, знак задаёт цвет`},hint:{type:`string`,description:`пояснение мелким шрифтом`}},example:`<Stat label="Выручка" value="4,2 млн" :delta="12" hint="к прошлому кварталу" />`}),F_e=W({__name:`Stat`,props:{label:{type:String,required:!0},value:{type:[String,Number],required:!0},delta:{type:Number,required:!1},hint:{type:String,required:!1}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),I_e={class:`stat`},L_e={class:`label`},R_e={class:`value`},z_e={key:1,class:`hint`};function B_e(e,t,n,r,i,a){return K(),U(`div`,I_e,[I(`span`,L_e,X(n.label),1),I(`strong`,R_e,X(n.value),1),n.delta===void 0?D(`v-if`,!0):(K(),U(`span`,{key:0,class:Y([`delta`,n.delta>=0?`up`:`down`])},X(n.delta>=0?`▲`:`▼`)+` `+X(Math.abs(n.delta))+`% `,3)),n.hint?(K(),U(`span`,z_e,X(n.hint),1)):D(`v-if`,!0)])}var V_e={definition:P_e,component:H(F_e,[[`render`,B_e],[`__scopeId`,`data-v-a72dc5a9`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/stat/ui/Stat.vue`]])},H_e=Iv({name:`Steps`,group:`data`,summary:`этапы с отметкой готовности`,props:{items:{type:`array`,description:`массив объектов: title обязателен, text и done необязательны`,required:!0}},example:`<Steps :items="[{title:'Собрать',done:true},{title:'Проверить'}]" />`}),U_e=W({__name:`Steps`,props:{items:{type:Array,required:!0}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),W_e={class:`steps`},G_e={class:`dot`},K_e={key:0};function q_e(e,t,n,r,i,a){return K(),U(`ol`,W_e,[(K(!0),U(P,null,S(n.items,(e,t)=>(K(),U(`li`,{key:e.title,class:Y({done:e.done})},[I(`span`,G_e,X(e.done?`✓`:t+1),1),I(`div`,null,[I(`strong`,null,X(e.title),1),e.text?(K(),U(`p`,K_e,X(e.text),1)):D(`v-if`,!0)])],2))),128))])}var J_e={definition:H_e,component:H(U_e,[[`render`,q_e],[`__scopeId`,`data-v-86d56d8a`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/steps/ui/Steps.vue`]])},Y_e=Iv({name:`Tab`,group:`layout`,summary:`одна вкладка внутри <Tabs>`,props:{title:{type:`string`,description:`название вкладки`,required:!0},hint:{type:`string`,description:`подсказка при наведении`}},slot:`содержимое вкладки`,example:`<Tab title="Данные">Значения за месяц</Tab>`}),K9=Symbol(`agent-widget-tabs`),X_e=W({__name:`Tab`,props:{title:{type:String,required:!0},hint:{type:String,required:!1}},setup(e,{expose:t}){t();let n=e,r=z(K9,null);r&&g(r.register(n.title,n.hint));let i={props:n,tabs:r,shown:B(()=>!r||r.active.value===n.title)};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),Z_e={class:`panel`,role:`tabpanel`};function Q_e(e,t,n,r,i,a){return K(),U(P,null,[D(` v-show, not v-if: a hidden panel keeps its state (typed text, chosen options). `),te(I(`div`,Z_e,[c(e.$slots,`default`,{},void 0,!0)],512),[[ae,r.shown]])],2112)}var $_e={definition:Y_e,component:H(X_e,[[`render`,Q_e],[`__scopeId`,`data-v-125bd6f1`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/tab/ui/Tab.vue`]])},eve=Iv({name:`Tabs`,group:`layout`,summary:`вкладки с содержимым в компонентах Tab`,props:{options:{type:`array`,description:`массив строк или объектов: value обязателен, label и hint необязательны; без дочерних Tab это устаревший переключатель`},name:{type:`string`,description:`имя поля в <Form> (устаревший переключатель)`},initial:{type:`string`,description:`начальное значение (устаревший переключатель)`}},model:{type:`string`,description:`выбранная вкладка или значение`},slot:`дочерний компонент Tab с названием title и содержимым для каждой вкладки`,notes:[`Скрытая вкладка сохраняет введённое. Для переключателя значения используй Field с type=segmented или radio.`],guide:`Дочерние Tab с title; скрытая вкладка сохраняет введённое.
|
|
185
|
-
Для выбора значения используй Field type=segmented или radio.`,example:`<Tabs><Tab title="Данные">Значения за месяц</Tab><Tab title="Итоги">Всего 100</Tab></Tabs>`}),tve=W({__name:`Tabs`,props:t({options:{type:Array,required:!1},name:{type:String,required:!1},initial:{type:String,required:!1}},{modelValue:{type:String},modelModifiers:{}}),emits:[`update:modelValue`],setup(e,{expose:t}){t();let r=e,i=u(e,`modelValue`),a=r.options!==void 0,o=B(()=>U9(r.options)),s=M([]);a&&H9(r.name,i,r.initial??o.value[0]?.value??``);let c=B(()=>a?o.value:s.value),l=B(()=>i.value??r.initial??c.value[0]?.value);n(K9,{active:l,register(e,t){let n={value:e,hint:t};return s.value=[...s.value,n],()=>s.value=s.value.filter(e=>e!==n)}});let d={props:r,model:i,selector:a,items:o,panels:s,entries:c,active:l};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),nve={class:`tabs-host`},rve={class:`tabs`,role:`tablist`},ive=[`aria-selected`,`title`,`onClick`];function ave(e,t,n,r,i,a){return K(),U(`div`,nve,[I(`div`,rve,[(K(!0),U(P,null,S(r.entries,e=>(K(),U(`button`,{key:e.value,type:`button`,role:`tab`,"aria-selected":r.active===e.value,class:Y({on:r.active===e.value}),title:e.hint,onClick:t=>r.model=e.value},X(e.label??e.value),11,ive))),128))]),c(e.$slots,`default`,{},void 0,!0)])}var ove={definition:eve,component:H(tve,[[`render`,ave],[`__scopeId`,`data-v-5d613408`],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agent-widgets/tabs/ui/Tabs.vue`]])};function sve(){for(let e of[ome,ume,_me,wme,rhe,che,fhe,Khe,Zhe,_ge,Dge,Nge,Vge,qge,p_e,__e,E_e,N_e,V_e,J_e,$_e,ove])Hv(e)}var cve={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function lve(e,t){return K(),U(`svg`,cve,[...t[0]||=[I(`path`,{fill:`currentColor`,d:`m4.714 15.956l4.718-2.648l.079-.23l-.08-.128h-.23l-.79-.048l-2.695-.073l-2.337-.097l-2.265-.122l-.57-.121l-.535-.704l.055-.353l.48-.321l.685.06l1.518.104l2.277.157l1.651.098l2.447.255h.389l.054-.158l-.133-.097l-.103-.098l-2.356-1.596l-2.55-1.688l-1.336-.972l-.722-.491L2 6.223l-.158-1.008l.656-.722l.88.06l.224.061l.893.686l1.906 1.476l2.49 1.833l.364.304l.146-.104l.018-.072l-.164-.274l-1.354-2.446l-1.445-2.49l-.644-1.032l-.17-.619a3 3 0 0 1-.103-.729L6.287.133L6.7 0l.995.134l.42.364l.619 1.415L9.735 4.14l1.555 3.03l.455.898l.243.832l.09.255h.159V9.01l.127-1.706l.237-2.095l.23-2.695l.08-.76l.376-.91l.747-.492l.583.28l.48.685l-.067.444l-.286 1.851l-.558 2.903l-.365 1.942h.213l.243-.242l.983-1.306l1.652-2.064l.728-.82l.85-.904l.547-.431h1.032l.759 1.129l-.34 1.166l-1.063 1.347l-.88 1.142l-1.263 1.7l-.79 1.36l.074.11l.188-.02l2.853-.606l1.542-.28l1.84-.315l.832.388l.09.395l-.327.807l-1.967.486l-2.307.462l-3.436.813l-.043.03l.049.061l1.548.146l.662.036h1.62l3.018.225l.79.522l.473.638l-.08.485l-1.213.62l-1.64-.389l-3.825-.91l-1.31-.329h-.183v.11l1.093 1.068l2.003 1.81l2.508 2.33l.127.578l-.321.455l-.34-.049l-2.204-1.657l-.85-.747l-1.925-1.62h-.127v.17l.443.649l2.343 3.521l.122 1.08l-.17.353l-.607.213l-.668-.122l-1.372-1.924l-1.415-2.168l-1.141-1.943l-.14.08l-.674 7.254l-.316.37l-.728.28l-.607-.461l-.322-.747l.322-1.476l.388-1.924l.316-1.53l.285-1.9l.17-.632l-.012-.042l-.14.018l-1.432 1.967l-2.18 2.945l-1.724 1.845l-.413.164l-.716-.37l.066-.662l.401-.589l2.386-3.036l1.439-1.882l.929-1.086l-.006-.158h-.055L4.138 18.56l-1.13.146l-.485-.456l.06-.746l.231-.243l1.907-1.312Z`},null,-1)]])}var q9=L({name:`simple-icons-claude`,render:lve}),uve={pending:`pending`,in_progress:`in_progress`,completed:`completed`};function dve(e){if(e.name!==`TodoWrite`||!e.input)return;let t;try{t=JSON.parse(e.input)}catch{return}let n=t.todos;if(Array.isArray(n))return n.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{content:t,status:n,activeForm:r}=e,i=typeof n==`string`?uve[n]:void 0;return typeof t!=`string`||!t.trim()||!i?[]:[{content:t,status:i,...typeof r==`string`?{active:r}:{}}]})}function J9(e,t,n){return{name:e.name,label:e.shortLabel,remaining:Math.round(100-t.usedPercent),countdown:S7(t.resetsAt,n),limited:t.limited??!1,ticks:e.ticks,tone:c7(t.usedPercent,t.resetsAt,e.periodSeconds,n,t.limited)}}function fve(e){let t=ee(e.initial),n=B(()=>!e.failed()&&e.usage()?.status===`ready`?e.windows():void 0),r=B(()=>e.definitions.flatMap(t=>{let r=n.value?.[t.name];return r?[J9(t,r,e.now())]:[]})),i=B(()=>r.value.find(e=>e.name===t.value)??r.value[0]),a=B(()=>i.value?.name??t.value),o=B(()=>e.definitions.find(e=>e.name===a.value)??e.definitions[0]),s=B(()=>i.value?.remaining??null),c=B(()=>i.value?.tone??null),l=B(()=>{let t=`${e.title} · ${o.value.label}`;if(e.failed())return`${t}\nНе удалось обновить лимиты`;let i=e.usage();return i?n.value?[`${t} · остаток`,...r.value.map(t=>{let r=e.definitions.find(e=>e.name===t.name),i=n.value?.[r.name];return`${r.label}: ${t.remaining}%${t.limited?` · исчерпан`:``} · ${t.countdown} (${C7(i?.resetsAt)})`}),`Клик — сменить лимит`].join(`
|
|
186
|
-
`):`${t}\n${i.message??`Лимиты недоступны`}`:`${t}\nЗагрузка лимитов…`});function u(){let n=new Set(r.value.map(e=>e.name)),i=e.cycleOrder.filter(e=>n.has(e)),o=a.value,s=i.length?i:e.cycleOrder,c=s.indexOf(o);return t.value=s[(c+1)%s.length],{window:t.value}}return{selectedWindow:t,selected:o,remaining:s,tone:c,tooltipRows:r,tooltip:l,cycle:u}}function Y9(e){let{usage:t,failed:n}=J5(e.endpoint,e.polling),r=Mf({scheduler:e=>mf(e,1e3)}),i=fve({title:e.title,definitions:e.definitions,cycleOrder:e.cycleOrder,initial:e.initial,usage:()=>e.usage(t.value),windows:()=>e.windows(t.value),failed:()=>n.value,now:()=>r.value.getTime()}),a=Je(`${e.agent}Usage:${V()}`,()=>({surface:`statusBar`,window:i.selectedWindow.value}));return a.scope.registerCommand({...e.command,run:i.cycle}),q5(e.agent,i.remaining,i.tone),{usage:t,failed:n,commands:a,...i}}var pve=W({__name:`ClaudeUsageIndicator`,setup(e,{expose:t}){t();let n=Array.from({length:6},(e,t)=>(t+1)/7*100),{selected:r,remaining:i,tone:a,tooltipRows:o,tooltip:s,commands:c}=Y9({agent:`claude`,title:`Claude Code`,endpoint:`/api/claude/usage`,polling:{intervalMs:3e5,nextCheckAt:e=>e.nextCheckAt},definitions:[{name:`rolling`,label:`5 часов`,shortLabel:`5ч`,periodSeconds:s7.hours5,ticks:[20,40,60,80]},{name:`weekly`,label:`Неделя`,shortLabel:`нед`,periodSeconds:s7.week,ticks:n}],cycleOrder:[`rolling`,`weekly`],initial:`weekly`,usage:e=>e,windows:e=>e?.windows,command:{id:`ide.claude.usage.window.cycle`,title:`Переключить отображаемый лимит Claude Code`,description:`Меняет окно индикатора Claude Code в статусной строке: 5 часов → неделя. Не запрашивает лимиты заново.`}}),l={weekTicks:n,selected:r,remaining:i,tone:a,tooltipRows:o,tooltip:s,commands:c,UsageIndicator:W5,get IconClaude(){return q9}};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}});function mve(t,n,r,i,a,o){return K(),F(i.UsageIndicator,{class:`claude-usage`,title:`Claude Code`,tooltip:i.tooltip,remaining:i.remaining,tone:i.tone,prefix:i.selected.shortLabel,"meter-label":`Остаток лимита Claude Code: ${i.selected.label}`,rows:i.tooltipRows,interactive:``,onCycle:n[0]||=e=>i.commands.run(`ide.claude.usage.window.cycle`)},{icon:e(()=>[y(i.IconClaude)]),_:1},8,[`tooltip`,`remaining`,`tone`,`prefix`,`meter-label`,`rows`])}var hve={backend:`claude-code`,program:`claude`,title:`Claude Code`,caption:`Запустит агента Anthropic`,icon:q9,usage:H(pve,[[`render`,mve],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agents-integration/claude/ui/ClaudeUsageIndicator.vue`]]),usageUrl:`/api/claude/usage`,plan:dve},gve={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function _ve(e,t){return K(),U(`svg`,gve,[...t[0]||=[I(`path`,{fill:`currentColor`,d:`M22.282 9.821a6 6 0 0 0-.516-4.91a6.05 6.05 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a6 6 0 0 0-3.998 2.9a6.05 6.05 0 0 0 .743 7.097a5.98 5.98 0 0 0 .51 4.911a6.05 6.05 0 0 0 6.515 2.9A6 6 0 0 0 13.26 24a6.06 6.06 0 0 0 5.772-4.206a6 6 0 0 0 3.997-2.9a6.06 6.06 0 0 0-.747-7.073M13.26 22.43a4.48 4.48 0 0 1-2.876-1.04l.141-.081l4.779-2.758a.8.8 0 0 0 .392-.681v-6.737l2.02 1.168a.07.07 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494M3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085l4.783 2.759a.77.77 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646M2.34 7.896a4.5 4.5 0 0 1 2.366-1.973V11.6a.77.77 0 0 0 .388.677l5.815 3.354l-2.02 1.168a.08.08 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855l-5.833-3.387L15.119 7.2a.08.08 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667m2.01-3.023l-.141-.085l-4.774-2.782a.78.78 0 0 0-.785 0L9.409 9.23V6.897a.07.07 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.8.8 0 0 0-.393.681zm1.097-2.365l2.602-1.5l2.607 1.5v2.999l-2.597 1.5l-2.607-1.5Z`},null,-1)]])}var X9=L({name:`simple-icons-openai`,render:_ve}),vve=W({__name:`CodexUsageIndicator`,setup(e,{expose:t}){t();let{usage:n,failed:r}=J5(`/api/codex/usage`),i=Mf({scheduler:e=>mf(e,1e3)}),a=B(()=>n.value?.weekly??null),o=B(()=>{let e=a.value?.windowDurationMins;return typeof e==`number`&&Number.isFinite(e)&&e>0?e*60:s7.week}),s=B(()=>r.value||n.value?.status!==`ready`||!a.value?null:J9({name:`weekly`,label:`Неделя`,shortLabel:`нед`,periodSeconds:o.value,ticks:Array.from({length:6},(e,t)=>(t+1)/7*100)},a.value,i.value.getTime())),c=B(()=>s.value?.remaining??null),l=B(()=>s.value?.tone??null),u=B(()=>s.value?[s.value]:[]);q5(`codex`,c,l);let d={usage:n,failed:r,now:i,weekly:a,periodSeconds:o,current:s,remaining:c,tone:l,tooltipRows:u,tooltip:B(()=>{if(r.value)return`Codex: не удалось обновить недельный лимит`;if(!n.value)return`Codex: загрузка недельного лимита…`;if(c.value===null)return`Codex: ${n.value.message??`лимит недоступен`}`;let e=a.value?.resetsAt;return`Codex · неделя · осталось ${c.value}%\nСброс через ${s.value?.countdown} · ${C7(e)}`}),UsageIndicator:W5,get IconCodex(){return X9}};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}});function yve(t,n,r,i,a,o){return K(),F(i.UsageIndicator,{class:`codex-usage`,title:`Codex`,tooltip:i.tooltip,remaining:i.remaining,tone:i.tone,"meter-label":`Остаток недельного лимита Codex`,rows:i.tooltipRows,compact:``},{icon:e(()=>[y(i.IconCodex)]),_:1},8,[`tooltip`,`remaining`,`tone`,`rows`])}var bve={backend:`codex`,program:`codex`,title:`Codex`,caption:`Запустит агента OpenAI Codex`,icon:X9,usage:H(vve,[[`render`,yve],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agents-integration/codex/ui/CodexUsageIndicator.vue`]]),usageUrl:`/api/codex/usage`},xve={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Sve(e,t){return K(),U(`svg`,xve,[...t[0]||=[I(`path`,{fill:`currentColor`,d:`M22 24H2V0h20zM17 4.8H7v14.4h10z`},null,-1)]])}var Z9=L({name:`simple-icons-opencode`,render:Sve}),Cve=W({__name:`OpenCodeUsageIndicator`,setup(e,{expose:t}){t();let n=Array.from({length:6},(e,t)=>(t+1)/7*100),r=[7,14,21,28].map(e=>e/30*100),{selected:i,remaining:a,tone:o,tooltipRows:s,tooltip:c,commands:l}=Y9({agent:`opencode`,title:`OpenCode Go`,endpoint:`/api/opencode/usage`,definitions:[{name:`rolling`,label:`5 часов`,shortLabel:`5ч`,periodSeconds:s7.hours5,ticks:[20,40,60,80]},{name:`weekly`,label:`Неделя`,shortLabel:`нед`,periodSeconds:s7.week,ticks:n},{name:`monthly`,label:`Месяц`,shortLabel:`мес`,periodSeconds:s7.month,ticks:r}],cycleOrder:[`monthly`,`rolling`,`weekly`],initial:`weekly`,usage:e=>e,windows:e=>e?.windows,command:{id:`ide.opencode.usage.window.cycle`,title:`Переключить отображаемый лимит OpenCode Go`,description:`Меняет окно индикатора Go в статусной строке: месяц → 5 часов → неделя. Не запрашивает лимиты заново.`}}),u={weekTicks:n,monthTicks:r,selected:i,remaining:a,tone:o,tooltipRows:s,tooltip:c,commands:l,UsageIndicator:W5,get IconOpenCode(){return Z9}};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});function wve(t,n,r,i,a,o){return K(),F(i.UsageIndicator,{class:`opencode-usage`,title:`OpenCode Go`,tooltip:i.tooltip,remaining:i.remaining,tone:i.tone,prefix:i.selected.shortLabel,"meter-label":`Остаток лимита OpenCode Go: ${i.selected.label}`,rows:i.tooltipRows,interactive:``,onCycle:n[0]||=e=>i.commands.run(`ide.opencode.usage.window.cycle`)},{icon:e(()=>[y(i.IconOpenCode)]),_:1},8,[`tooltip`,`remaining`,`tone`,`prefix`,`meter-label`,`rows`])}var Tve={backend:`opencode`,program:`opencode`,title:`OpenCode`,caption:`Запустит агента OpenCode`,icon:Z9,usage:H(Cve,[[`render`,wve],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agents-integration/opencode/ui/OpenCodeUsageIndicator.vue`]]),usageUrl:`/api/opencode/usage`},Eve={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Dve(e,t){return K(),U(`svg`,Eve,[...t[0]||=[I(`path`,{fill:`currentColor`,d:`M11.503.131L1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23`},null,-1)]])}var Q9=L({name:`simple-icons-cursor`,render:Dve}),Ove={pending:`pending`,in_progress:`in_progress`,completed:`completed`},kve=new Set([`create_plan`,`update_todos`]);function Ave(e){if(!kve.has(e.name)||!e.input)return;let t;try{t=JSON.parse(e.input)}catch{return}let n=t.todos;if(Array.isArray(n))return n.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{content:t,status:n}=e,r=typeof n==`string`?Ove[n]:void 0;return typeof t!=`string`||!t.trim()||!r?[]:[{content:t,status:r}]})}var jve=W({__name:`CursorUsageIndicator`,setup(e,{expose:t}){t();let n=[7,14,21,28].map(e=>e/30*100),{selected:r,remaining:i,tone:a,tooltipRows:o,tooltip:s,commands:c}=Y9({agent:`cursor`,title:`Cursor`,endpoint:`/api/cursor/usage`,definitions:[{name:`total`,label:`Всего`,shortLabel:`вс`,periodSeconds:s7.month,ticks:n},{name:`auto`,label:`Авто`,shortLabel:`авт`,periodSeconds:s7.month,ticks:n},{name:`api`,label:`API`,shortLabel:`API`,periodSeconds:s7.month,ticks:n}],cycleOrder:[`total`,`auto`,`api`],initial:`total`,usage:e=>e,windows:e=>e?.windows,command:{id:`ide.cursor.usage.window.cycle`,title:`Переключить отображаемый лимит Cursor`,description:`Меняет окно индикатора Cursor в статусной строке: всего → авто → API. Не запрашивает лимиты заново.`}}),l={monthTicks:n,selected:r,remaining:i,tone:a,tooltipRows:o,tooltip:s,commands:c,UsageIndicator:W5,get IconCursor(){return Q9}};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}});function Mve(t,n,r,i,a,o){return K(),F(i.UsageIndicator,{class:`cursor-usage`,title:`Cursor`,tooltip:i.tooltip,remaining:i.remaining,tone:i.tone,prefix:i.selected.shortLabel,"meter-label":`Остаток лимита Cursor: ${i.selected.label}`,rows:i.tooltipRows,interactive:``,onCycle:n[0]||=e=>i.commands.run(`ide.cursor.usage.window.cycle`)},{icon:e(()=>[y(i.IconCursor)]),_:1},8,[`tooltip`,`remaining`,`tone`,`prefix`,`meter-label`,`rows`])}var Nve={backend:`cursor`,program:`cursor`,title:`Cursor`,caption:`Запустит агента Cursor`,icon:Q9,usage:H(jve,[[`render`,Mve],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agents-integration/cursor/ui/CursorUsageIndicator.vue`]]),usageUrl:`/api/cursor/usage`,plan:Ave},Pve={viewBox:`0 0 24 24`,width:`1.2em`,height:`1.2em`};function Fve(e,t){return K(),U(`svg`,Pve,[...t[0]||=[I(`path`,{fill:`currentColor`,d:`M21.765.351C22.998.351 24 1.353 24 2.586S22.998 4.82 21.765 4.82h-1.974c-.15 0-.26-.12-.26-.26V2.586A2.237 2.237 0 0 1 21.765.35M9.41 13.388l8.447-8.377c.16-.16.07-.471-.14-.471h-4.55s-.1.02-.14.06l-9.099 9.029c-.14.14-.35.02-.35-.21V4.81c0-.15-.1-.27-.221-.27H.22c-.12 0-.22.12-.22.27v18.57c0 .15.1.27.22.27h3.137c.12 0 .22-.12.22-.27v-3.79c0-.08.03-.16.08-.21l2.826-2.796c.07-.07.16-.08.241-.03l7.546 5.551a8.9 8.9 0 0 0 4.018 1.493c.12.01.23-.11.23-.27V19.76c0-.14-.08-.25-.19-.26a5.8 5.8 0 0 1-2.355-.942l-6.533-4.73c-.14-.09-.15-.32-.03-.441`},null,-1)]])}var $9=L({name:`simple-icons-kimi`,render:Fve}),Ive={pending:`pending`,in_progress:`in_progress`,done:`completed`};function Lve(e){if(e.name!==`TodoList`||!e.input)return;let t;try{t=JSON.parse(e.input)}catch{return}let n=t.todos;if(Array.isArray(n))return n.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{title:t,status:n}=e,r=typeof n==`string`?Ive[n]:void 0;return typeof t!=`string`||!t.trim()||!r?[]:[{content:t,status:r}]})}var Rve=W({__name:`KimiUsageIndicator`,setup(e,{expose:t}){t();let n=Array.from({length:6},(e,t)=>(t+1)/7*100),r=[7,14,21,28].map(e=>e/30*100),{selected:i,remaining:a,tone:o,tooltipRows:s,tooltip:c,commands:l}=Y9({agent:`kimi`,title:`Kimi`,endpoint:`/api/kimi/usage`,definitions:[{name:`rolling`,label:`5 часов`,shortLabel:`5ч`,periodSeconds:s7.hours5,ticks:[20,40,60,80]},{name:`weekly`,label:`Неделя`,shortLabel:`нед`,periodSeconds:s7.week,ticks:n},{name:`monthly`,label:`Месяц`,shortLabel:`мес`,periodSeconds:s7.month,ticks:r}],cycleOrder:[`rolling`,`weekly`,`monthly`],initial:`rolling`,usage:e=>e,windows:e=>e?.windows,command:{id:`ide.kimi.usage.window.cycle`,title:`Переключить отображаемый лимит Kimi`,description:`Меняет окно индикатора Kimi в статусной строке: 5 часов → неделя → месяц, пропуская окна, которых нет на тарифе. Не запрашивает лимиты заново.`}}),u={weekTicks:n,monthTicks:r,selected:i,remaining:a,tone:o,tooltipRows:s,tooltip:c,commands:l,UsageIndicator:W5,get IconKimi(){return $9}};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}});function zve(t,n,r,i,a,o){return K(),F(i.UsageIndicator,{class:`kimi-usage`,title:`Kimi`,tooltip:i.tooltip,remaining:i.remaining,tone:i.tone,prefix:i.selected.shortLabel,"meter-label":`Остаток лимита Kimi: ${i.selected.label}`,rows:i.tooltipRows,interactive:``,onCycle:n[0]||=e=>i.commands.run(`ide.kimi.usage.window.cycle`)},{icon:e(()=>[y(i.IconKimi)]),_:1},8,[`tooltip`,`remaining`,`tone`,`prefix`,`meter-label`,`rows`])}var Bve={backend:`kimi`,program:`kimi`,title:`Kimi`,caption:`Запустит агента Kimi Code`,icon:$9,usage:H(Rve,[[`render`,zve],[`__file`,`/run/media/zede/general/pr/my/image-gen/projector/packages/client/modules/agents-integration/kimi/ui/KimiUsageIndicator.vue`]]),usageUrl:`/api/kimi/usage`,plan:Lve},Vve={pending:`pending`,in_progress:`in_progress`,completed:`completed`};function Hve(e){if(e.name!==`TodoWrite`||!e.input)return;let t;try{t=JSON.parse(e.input)}catch{return}let n=t.todos;if(Array.isArray(n))return n.flatMap(e=>{if(!e||typeof e!=`object`)return[];let{content:t,status:n,activeForm:r}=e,i=typeof n==`string`?Vve[n]:void 0;return typeof t!=`string`||!t.trim()||!i?[]:[{content:t,status:i,...typeof r==`string`?{active:r}:{}}]})}var Uve={backend:`projector`,program:`projector`,title:`Projector`,caption:`Встроенный агент Projector, история разговоров`,icon:cE,builtin:!0,plan:Hve};function Wve(){for(let e of[Uve,hve,bve,Tve,Nve,Bve])dt(e)}window.fetch=PV,Ce(),sve(),Wve(),Xf(),ie(Bz).use($pe).mount(`#app`);export{Sg as A,Wz as C,LO as D,pP as E,yf as F,Yd as I,xl as L,hm as M,Ff as N,xO as O,Pf as P,AB as S,fP as T,qV as _,T5 as a,JB as b,Cse as c,i8 as d,r8 as f,CQ as g,d1 as h,Vse as i,Ch as j,mD as k,Ese as l,A2 as m,Xse as n,Rse as o,j2 as p,zse as r,Lse as s,cce as t,c8 as u,VV as v,hF as w,GB as x,OV as y};
|