pulls.review 0.3.1 → 0.3.3
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/README.md +1 -1
- package/dist/client/assets/ActionButton-BYTohOMA.js +1 -0
- package/dist/client/assets/ActionIconButton-B2taMg1G.js +1 -0
- package/dist/client/assets/{ChatMessage-Ccffh_8Z.js → ChatMessage-BRtxpV-j.js} +44 -44
- package/dist/client/assets/ChatWidget-DGoJBAHG.js +1 -0
- package/dist/client/assets/{DisplayFileIcon-DWj5Zxib.js → DisplayFileIcon-CgcKzuIF.js} +3 -3
- package/dist/client/assets/LandingHero-BcDLrBWu.js +1 -0
- package/dist/client/assets/LocalAgentSettings-DnWX-4ja.js +1 -0
- package/dist/client/assets/MarkdownMermaid-CZsnBTo5.js +134 -0
- package/dist/client/assets/ModelPicker-DJOF4_oE.js +3 -0
- package/dist/client/assets/SelectViewport-CLu2vHZ1.js +1 -0
- package/dist/client/assets/_repo_-B9Xsfdgp.js +22 -0
- package/dist/client/assets/analyze-Dt4HsiiL.js +1 -0
- package/dist/client/assets/{core-messages-ClW97ZVa.js → core-messages-BKVsL0s6.js} +1 -1
- package/dist/client/assets/dark-BBICmi9u.js +1 -0
- package/dist/client/assets/de-X0_7KOpR.js +1 -0
- package/dist/client/assets/decode-BMLx_QAi.js +1 -0
- package/dist/client/assets/{diagnostics-wATZy2jc.js → diagnostics-FPncUZ9A.js} +1 -1
- package/dist/client/assets/diff-BVBdGkpM.js +37 -0
- package/dist/client/assets/diff-CNjyt43T.js +1 -0
- package/dist/client/assets/diffs-store-M5WP-Rye.js +1432 -0
- package/dist/client/assets/dist-B3ulq7dg.js +3 -0
- package/dist/client/assets/en-4wf48bhl.js +1 -0
- package/dist/client/assets/es-z_aJuLEM.js +1 -0
- package/dist/client/assets/fr-BSSnc845.js +1 -0
- package/dist/client/assets/glimmer-js-BheR6Tf0.js +1 -0
- package/dist/client/assets/glimmer-ts-B3Q3-uij.js +1 -0
- package/dist/client/assets/handlebars-qjPKy-PP.js +1 -0
- package/dist/client/assets/i18n-BaWfCCFj.js +2 -0
- package/dist/client/assets/id-DpmfJDwA.js +1 -0
- package/dist/client/assets/index-B346Vuj9.css +1 -0
- package/dist/client/assets/index-DAczNoU5.js +2 -0
- package/dist/client/assets/install-BtceKESn.js +4 -0
- package/dist/client/assets/it-DnvTXQOp.js +1 -0
- package/dist/client/assets/ja-EKD3f8pB.js +1 -0
- package/dist/client/assets/ko-3WANYsbE.js +1 -0
- package/dist/client/assets/llm-DwxQbGwE.js +88 -0
- package/dist/client/assets/llm-store-CBiRLoQj.js +1 -0
- package/dist/client/assets/local-agents-Bhc2OYII.js +1 -0
- package/dist/client/assets/pages-IPE7GMm2.js +1 -0
- package/dist/client/assets/pages-local-B-qUAdMG.js +1 -0
- package/dist/client/assets/pages-web-CV7QqqdA.js +21 -0
- package/dist/client/assets/portalTarget-DKryvPGY.js +1 -0
- package/dist/client/assets/pt-BR-BC7-mMJ3.js +1 -0
- package/dist/client/assets/rpc-backends-Bm_fmyjf.js +1 -0
- package/dist/client/assets/ru-ChI2XEFF.js +1 -0
- package/dist/client/assets/{ruby-CfFGiaYl.js → ruby-CaMjWH7T.js} +1 -1
- package/dist/client/assets/runtime-dom.esm-bundler-D9VhaAqy.js +2 -0
- package/dist/client/assets/{source-CvnvCX42.js → source-BWADV8Aq.js} +1 -1
- package/dist/client/assets/time-ago-CMSCAiQn.js +1 -0
- package/dist/client/assets/upload-riZ3DIfL.js +1 -0
- package/dist/client/assets/useCommitView-CgsbPEnq.js +1 -0
- package/dist/client/assets/useDocumentTitle-D1Q-0ufQ.js +92 -0
- package/dist/client/assets/useNonce-AntPf6d2.js +1 -0
- package/dist/client/assets/useTypeahead-DtM58Ahg.js +1 -0
- package/dist/client/assets/utils-DaMPgnza.js +1 -0
- package/dist/client/assets/vue-i18n-X72ILEtz.js +3 -0
- package/dist/client/assets/zh-CN-DXr4JfHY.js +1 -0
- package/dist/client/assets/zh-TW-CmCU_HxU.js +1 -0
- package/dist/client/index.html +9 -8
- package/dist/{devframe-DH2vpasJ.mjs → devframe-C2cyQ64F.mjs} +153 -6
- package/dist/devframe.mjs +1 -1
- package/dist/index.mjs +6 -2
- package/package.json +2 -2
- package/dist/client/assets/ActionButton-V4dY2wPS.js +0 -1
- package/dist/client/assets/ActionIconButton-4b5xelMn.js +0 -1
- package/dist/client/assets/ChatWidget-BFjNWi3R.js +0 -1
- package/dist/client/assets/GithubAvatar-DGJrpCsX.js +0 -1
- package/dist/client/assets/LandingHero-DWdx6_8g.js +0 -1
- package/dist/client/assets/LocalAgentSettings-COjAszEL.js +0 -1
- package/dist/client/assets/ModelPicker-CDTiUMZ3.js +0 -3
- package/dist/client/assets/SelectViewport-DF4P4Akh.js +0 -1
- package/dist/client/assets/_repo_-D3lApLQL.js +0 -22
- package/dist/client/assets/analyze-BgWIIbl3.js +0 -1
- package/dist/client/assets/de-BoIOg_UW.js +0 -1
- package/dist/client/assets/diff-CNRGXNmw.js +0 -1
- package/dist/client/assets/diff-Cx43r-a6.js +0 -37
- package/dist/client/assets/diffs-store-D3BzIMVi.js +0 -1431
- package/dist/client/assets/en-CbWYrCM5.js +0 -1
- package/dist/client/assets/es-CqEudTln.js +0 -1
- package/dist/client/assets/fr-qiQQ-4AO.js +0 -1
- package/dist/client/assets/i18n-Cx8anq4V.js +0 -2
- package/dist/client/assets/id-BkDzu8gq.js +0 -1
- package/dist/client/assets/index-De-UtOit.css +0 -1
- package/dist/client/assets/index-KDAJXf4E.js +0 -2
- package/dist/client/assets/install-D-S32JY7.js +0 -4
- package/dist/client/assets/it-tZZZbUKN.js +0 -1
- package/dist/client/assets/ja-kGPK4Fmt.js +0 -1
- package/dist/client/assets/ko-CULiae40.js +0 -1
- package/dist/client/assets/llm-Le5CPsNn.js +0 -88
- package/dist/client/assets/llm-store-CzMnTJNa.js +0 -1
- package/dist/client/assets/local-agents-BQLn-Ppw.js +0 -1
- package/dist/client/assets/pages-ByEfDjFa.js +0 -1
- package/dist/client/assets/pages-local-CVPpEWZ_.js +0 -1
- package/dist/client/assets/pages-web-BLxMupU5.js +0 -21
- package/dist/client/assets/portalTarget-DQg8GgWm.js +0 -1
- package/dist/client/assets/pt-BR-BcwoZLSs.js +0 -1
- package/dist/client/assets/rpc-backends-DYtuJyeF.js +0 -1
- package/dist/client/assets/ru-DOordgLF.js +0 -1
- package/dist/client/assets/runtime-dom.esm-bundler-Du_ZCcVN.js +0 -2
- package/dist/client/assets/time-ago-Bdao9Hh1.js +0 -1
- package/dist/client/assets/upload-DRO7bkBV.js +0 -1
- package/dist/client/assets/useDocumentTitle-BQJCa6Lm.js +0 -92
- package/dist/client/assets/useNonce-CwUrgryd.js +0 -1
- package/dist/client/assets/vue-i18n-CGHHpbTP.js +0 -5
- package/dist/client/assets/zh-CN-CmTqGY9s.js +0 -1
- package/dist/client/assets/zh-TW-DKGtbJQy.js +0 -1
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./browser-agent-rpc-BXhoSh1z-DrvKG05N.js","./nanoid-Cya-tyvy.js","./diff-CNRGXNmw.js","./vue-i18n-CGHHpbTP.js","./analyze-BgWIIbl3.js","./rolldown-runtime-Dd_uD5pT.js","./i18n-Cx8anq4V.js","./locales-SpkpwNqX.js","./preload-helper-BaNbYf_w.js","./en-CbWYrCM5.js","./source-CvnvCX42.js","./llm-Le5CPsNn.js","./useDocumentTitle-BQJCa6Lm.js","./runtime-dom.esm-bundler-Du_ZCcVN.js","./ModelPicker-CDTiUMZ3.js","./floating-ui.dom-CfpSQvPs.js","./diagnostics-wATZy2jc.js","./ActionButton-V4dY2wPS.js","./ActionIconButton-4b5xelMn.js","./local-agents-BQLn-Ppw.js","./core-messages-ClW97ZVa.js","./models-D651LTTp.js","./index-KDAJXf4E.js","./index-De-UtOit.css","./diffs-store-D3BzIMVi.js","./ChatMessage-Ccffh_8Z.js","./DisplayFileIcon-DWj5Zxib.js","./GithubAvatar-DGJrpCsX.js","./pages-ByEfDjFa.js","./rpc-backends-DYtuJyeF.js","./pages-local-CVPpEWZ_.js","./useNonce-CwUrgryd.js","./LandingHero-DWdx6_8g.js","./portalTarget-DQg8GgWm.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$ as e,Bt as t,Dr as n,G as r,K as i,Pt as a,Q as o,U as s,Wn as c,tt as l,xn as u,yn as d}from"./vue-i18n-CGHHpbTP.js";import{i as f,w as p,x as m}from"./runtime-dom.esm-bundler-Du_ZCcVN.js";import{t as h}from"./diagnostics-wATZy2jc.js";import{a as g,r as _,t as v}from"./i18n-Cx8anq4V.js";import{T as y,f as b,x,y as S}from"./source-CvnvCX42.js";import{t as ee}from"./preload-helper-BaNbYf_w.js";import{f as C,h as te,l as ne,p as w,u as re}from"./index-KDAJXf4E.js";import{t as T}from"./nanoid-Cya-tyvy.js";import{t as ie}from"./ActionButton-V4dY2wPS.js";import{t as ae}from"./local-agents-BQLn-Ppw.js";import{a as oe,c as se,d as ce,l as le,s as ue,t as de,u as fe}from"./pages-ByEfDjFa.js";import{n as pe,t as me}from"./rpc-backends-DYtuJyeF.js";function he(e,t){if(e.stopReason===`aborted`)throw new DOMException(`Aborted`,`AbortError`);if(e.stopReason===`error`)throw e.code===`agent-session-lost`?h.agentSessionLost():Error(e.error);return{...t,agent:e.agent}}function ge(e){let t=c();return e.call(fe.agentList).then(e=>t.value=x(b(ce),e)),t}function _e(e,t){let n=()=>{let{provider:e,agent:t,agentModel:n}=_.value.llm;return e===`local-agent`&&t?{agent:t,model:n||void 0}:void 0};async function r(t,n,r){let i=e.streaming.subscribe(se,t),a={messages:[]},o=()=>{e.call(fe.agentAbort,{streamId:t}),i.cancel()};n.addEventListener(`abort`,o);try{for await(let e of i){let t=x(ue,e);if(t.kind===`messages`?a.messages=t.messages:t.kind===`result`&&(a.result=t.result),await r(t),t.kind===`end`)return he(t,a)}}finally{n.removeEventListener(`abort`,o)}throw n.aborted?new DOMException(`Aborted`,`AbortError`):Error(`The agent run ended without a result.`)}return{isSetup:()=>n()!==void 0||t.isSetup(),async analyze(i,a){let o=n();if(!o)return t.analyze(i,a);let s=a.signal??new AbortController().signal,{streamId:c}=x(S({streamId:y()}),await e.call(fe.agentAnalyze,{...o,diff:i,locale:_.value.locale})),l=await r(c,s,e=>{e.kind===`progress`?a.onProgress?.(e.progress):e.kind===`messages`&&a.onTranscript?.(e.messages)});if(!l.result)throw Error(`The agent run ended without a result.`);return{result:l.result,transcript:l.messages,agent:l.agent}},async chat(i){let a=n();if(!a)return t.chat(i);let{diff:o,session:s,text:c,signal:l,onMessages:u,onGroupingUpdate:d}=i,{streamId:f}=x(S({streamId:y()}),await e.call(fe.agentChat,{...a,diff:o,locale:_.value.locale,session:s,text:c}));return(await r(f,l,async e=>{e.kind===`messages`?u(e.messages):e.kind===`result`&&await d(e.result)})).messages}}}function E(e,t){let n=`\x1B[${e}m`,r=`\x1B[${t}m`;return((e,...t)=>{if(Array.isArray(e)&&`raw`in e){let i=e,a=``;for(let e=0;e<i.length;e++)a+=i[e],e<t.length&&(a+=String(t[e]));return`${n}${a}${r}`}return`${n}${String(e)}${r}`})}var ve={blue:E(34,39),cyan:E(36,39),gray:E(90,39),green:E(32,39),red:E(31,39),yellow:E(33,39),bold:E(1,22),dim:E(2,22),reset:E(0,0),underline:E(4,24)};function ye(e){return t=>{let n=`${e.bold(e.red(`[${t.name}]`))} ${t.message}`,r=[];return t.fix&&r.push(`${e.dim(`fix:`)} ${t.fix}`),t.sources?.length&&r.push(`${e.dim(`sources:`)} ${t.sources.join(`, `)}`),t.docs&&r.push(`${e.dim(`see:`)} ${e.cyan(t.docs)}`),r.length===0?n:[n,...r.map((t,n)=>`${e.dim(n<r.length-1?`├▶`:`╰▶`)} ${t}`)].join(`
|
|
3
|
-
`)}}var D={bus:{agentManifestChanged:`agent:manifest:changed`,agentToolRegistered:`agent:tool:registered`,agentToolUnregistered:`agent:tool:unregistered`,agentResourceRegistered:`agent:resource:registered`,agentResourceUnregistered:`agent:resource:unregistered`},client:{isTrustedUpdated:`rpc:is-trusted:updated`,error:`rpc:error`,connectionStatus:`connection:status`,connectionError:`connection:error`},broadcast:{authRevoked:`devframe:auth:revoked`,clientStateUpdated:`devframe:rpc:client-state:updated`,clientStatePatch:`devframe:rpc:client-state:patch`,streamingChunk:`devframe:streaming:chunk`,streamingEnd:`devframe:streaming:end`,streamingUploadCancel:`devframe:streaming:upload-cancel`},inPageChannel:{panelStateUpdated:`devframe:in-page:panel-state:updated`,panelStatePatch:`devframe:in-page:panel-state:patch`},postMessage:{remoteAssetsError:`devframe:remote-assets-error`,inPageChannel:`devframe:in-page-channel`}},be=ye(ve);function xe(e,{method:t=`warn`}={}){console[t](be(e))}function Se(e){return g({...e,reporters:[xe,...e.reporters??[]]})}function Ce(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}var we=Math.random.bind(Math),Te=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function Ee(e=21){let t=``,n=e;for(;n--;)t+=Te[we()*64|0];return t}var De=6e4,Oe=e=>e,ke=Oe,{clearTimeout:Ae,setTimeout:je}=globalThis;function Me(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=Oe,deserialize:s=ke,resolver:c,bind:l=`rpc`,timeout:u=De,proxify:d=!0}=t,f=!1,p=new Map,m,h;async function g(e,r,i,a){if(f)throw Error(`[birpc] rpc is closed, cannot call "${e}"`);let s={m:e,a:r,t:`q`};a&&(s.o=!0);let c=async e=>n(o(e));if(i){await c(s);return}if(m)try{await m}finally{m=void 0}let{promise:l,resolve:d,reject:g}=Ce(),_=Ee();s.i=_;let v;async function y(n=s){return u>=0&&(v=je(()=>{try{if(t.onTimeoutError?.call(h,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){g(e)}p.delete(_)},u),typeof v==`object`&&(v=v.unref?.())),p.set(_,{resolve:d,reject:g,timeoutId:v,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(h,s,y,d):await y()}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}finally{Ae(v),p.delete(_)}return l}let _={$call:(e,...t)=>g(e,t,!1),$callOptional:(e,...t)=>g(e,t,!1,!0),$callEvent:(e,...t)=>g(e,t,!0),$callRaw:e=>g(e.method,e.args,e.event,e.optional),$rejectPendingCalls:y,get $closed(){return f},get $meta(){return t.meta},$close:v,$functions:e};h=d?new Proxy({},{get(t,n){if(Object.hasOwn(_,n))return _[n];if(n===`then`&&!a.includes(`then`)&&!(`then`in e))return;let r=(...e)=>g(n,e,!0);if(a.includes(n))return r.asEvent=r,r;let i=(...e)=>g(n,e,!1);return i.asEvent=r,i}}):_;function v(e){f=!0,p.forEach(({reject:t,method:n})=>{let r=Error(`[birpc] rpc is closed, cannot call "${n}"`);if(e)return e.cause??=r,t(e);t(r)}),p.clear(),i(b)}function y(e){let t=Array.from(p.values()).map(({method:t,reject:n})=>e?e({method:t,reject:n}):n(Error(`[birpc]: rejected pending call "${t}".`)));return p.clear(),t}async function b(r,...i){let a;try{a=s(r)}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}if(a.t===`q`){let{m:r,a:s,o:u}=a,d,f,p=await(c?c.call(h,r,e[r]):e[r]);if(u&&(p||=()=>void 0),!p)f=Error(`[birpc] function "${r}" not found`);else try{d=await p.apply(l===`rpc`?h:e,s)}catch(e){f=e}if(a.i){if(f&&t.onFunctionError&&t.onFunctionError.call(h,f,r,s)===!0)return;if(!f)try{await n(o({t:`s`,i:a.i,r:d}),...i);return}catch(e){if(f=e,t.onGeneralError?.call(h,e,r,s)!==!0)throw e}try{await n(o({t:`s`,i:a.i,e:f}),...i)}catch(e){if(t.onGeneralError?.call(h,e,r,s)!==!0)throw e}}}else{let{i:e,r:t,e:n}=a,r=p.get(e);r&&(Ae(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(b),h}function Ne(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var Pe=Object.freeze({type:`object`,additionalProperties:!0});function Fe(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return Pe}return Pe}function Ie(e){if(!e||e.length===0)return{type:`object`,properties:{}};let t={},n=[];for(let r=0;r<e.length;r++){let i=`arg${r}`;t[i]=Fe(e[r]),n.push(i)}return{type:`object`,properties:t,required:n,additionalProperties:!1}}function Le(e,t){if(Array.isArray(e))return e;if(e==null)return[];if(typeof e!=`object`)return;let n=e;if(t!=null)return Array.from({length:t},(e,t)=>n[`arg${t}`]);if(`arg0`in n){let e=[];for(;`arg${e.length}`in n;)e.push(n[`arg${e.length}`]);return e}return Object.keys(n).length===0?[]:void 0}function Re(e,t){return Le(e,t)??[e]}function ze(e){return typeof e==`string`?`'${e}'`:new Ue().serialize(e)}var Be=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,Ve=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[Be.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function He(e,t){if(e===t)return 0;let n=Math.min(e.length,t.length),r=0;for(let i=0;i<n;i++){let n=e.charCodeAt(i),a=t.charCodeAt(i);if(n===a)continue;let o=n<128&&Ve[n]?Ve[n]:n+128,s=a<128&&Ve[a]?Ve[a]:a+128;if(o!==s)return o<s?-1:1;r===0&&(r=n>a?-1:1)}return e.length===t.length?r:e.length<t.length?-1:1}var Ue=(function(){class e{#e=new Map;compare(e,t){let n=typeof e,r=typeof t;return n===`string`&&r===`string`?He(e,t):n===`number`&&r===`number`?e-t:He(this.serialize(e,!0),this.serialize(t,!0))}serialize(e,t){if(e===null)return`null`;switch(typeof e){case`string`:return t?e:`'${e}'`;case`bigint`:return`${e}n`;case`object`:return this.$object(e);case`function`:return this.$function(e)}return String(e)}serializeObject(e){let t=Object.prototype.toString.call(e);if(t!==`[object Object]`)return this.serializeBuiltInType(t.length<10?`unknown:${t}`:t.slice(8,-1),e);let n=e.constructor,r=n===Object||n===void 0?``:n.name;if(r!==``&&globalThis[r]===n)return this.serializeBuiltInType(r,e);if(`toJSON`in e&&typeof e.toJSON==`function`){let t=e.toJSON();return r+(typeof t==`object`&&t?this.$object(t):`(${this.serialize(t)})`)}let i=Object.keys(e).sort(He),a=`${r}{`;for(let t=0;t<i.length;t++){let n=i[t];a+=`${n}:${this.serialize(e[n])}`,t<i.length-1&&(a+=`,`)}return a+`}`}serializeBuiltInType(e,t){let n=this[`$`+e];if(n)return n.call(this,t);if(typeof t.entries==`function`)return this.serializeObjectEntries(e,t.entries());throw Error(`Cannot serialize ${e}`)}serializeObjectEntries(e,t){let n=Array.from(t).sort((e,t)=>this.compare(e[0],t[0])),r=`${e}{`;for(let e=0;e<n.length;e++){let[t,i]=n[e];r+=`${this.serialize(t,!0)}:${this.serialize(i)}`,e<n.length-1&&(r+=`,`)}return r+`}`}$object(e){let t=this.#e.get(e);return t===void 0&&(this.#e.set(e,`#${this.#e.size}`),t=this.serializeObject(e),this.#e.set(e,t)),t}$function(e){let t=Function.prototype.toString.call(e);return t.slice(-15)===`[native code] }`?`${e.name||``}()[native]`:`${e.name}(${e.length})${t.replace(/\s*\n\s*/g,``)}`}$Array(e){let t=`[`;for(let n=0;n<e.length;n++)t+=this.serialize(e[n]),n<e.length-1&&(t+=`,`);return t+`]`}$Date(e){try{return`Date(${e.toISOString()})`}catch{return`Date(null)`}}$ArrayBuffer(e){return`ArrayBuffer[${new Uint8Array(e).join(`,`)}]`}$Set(e){return`Set${this.$Array(Array.from(e).sort((e,t)=>this.compare(e,t)))}`}$Map(e){return this.serializeObjectEntries(`Map`,e.entries())}}for(let t of[`Error`,`RegExp`,`URL`])e.prototype[`$`+t]=function(e){return`${t}(${e})`};for(let t of[`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float32Array`,`Float64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`,`)}]`};for(let t of[`BigInt64Array`,`BigUint64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`n,`)}${e.length>0?`n`:``}]`};return e})(),We=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],Ge=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],Ke=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,O=[],qe=class{_data=new Je;_hash=new Je([...We]);_nDataBytes=0;_minBufferSize=0;finalize(e){e&&this._append(e);let t=this._nDataBytes*8,n=this._data.sigBytes*8;return this._data.words[n>>>5]|=128<<24-n%32,this._data.words[(n+64>>>9<<4)+14]=Math.floor(t/4294967296),this._data.words[(n+64>>>9<<4)+15]=t,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(e,t){let n=this._hash.words,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7];for(let n=0;n<64;n++){if(n<16)O[n]=e[t+n]|0;else{let e=O[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=O[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;O[n]=t+O[n-7]+i+O[n-16]}let d=s&c^~s&l,f=r&i^r&a^i&a,p=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),m=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),h=u+m+d+Ge[n]+O[n],g=p+f;u=l,l=c,c=s,s=o+h|0,o=a,a=i,i=r,r=h+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+o|0,n[4]=n[4]+s|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+u|0}_append(e){typeof e==`string`&&(e=Je.fromUtf8(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes}_process(e){let t,n=this._data.sigBytes/64;n=e?Math.ceil(n):Math.max((n|0)-this._minBufferSize,0);let r=n*16,i=Math.min(r*4,this._data.sigBytes);if(r){for(let e=0;e<r;e+=16)this._doProcessBlock(this._data.words,e);t=this._data.words.splice(0,r),this._data.sigBytes-=i}return new Je(t,i)}},Je=class e{words;sigBytes;constructor(e,t){e=this.words=e||[],this.sigBytes=t===void 0?e.length*4:t}static fromUtf8(t){let n=unescape(encodeURIComponent(t)),r=n.length,i=[];for(let e=0;e<r;e++)i[e>>>2]|=(n.charCodeAt(e)&255)<<24-e%4*8;return new e(i,r)}toBase64(){let e=[];for(let t=0;t<this.sigBytes;t+=3){let n=this.words[t>>>2]>>>24-t%4*8&255,r=this.words[t+1>>>2]>>>24-(t+1)%4*8&255,i=this.words[t+2>>>2]>>>24-(t+2)%4*8&255,a=n<<16|r<<8|i;for(let n=0;n<4&&t*8+n*6<this.sigBytes*8;n++)e.push(Ke.charAt(a>>>6*(3-n)&63))}return e.join(``)}concat(e){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let t=0;t<e.sigBytes;t++){let n=e.words[t>>>2]>>>24-t%4*8&255;this.words[this.sigBytes+t>>>2]|=n<<24-(this.sigBytes+t)%4*8}else for(let t=0;t<e.sigBytes;t+=4)this.words[this.sigBytes+t>>>2]=e.words[t>>>2];this.sigBytes+=e.sigBytes}};function Ye(e){return new qe().finalize(e).toBase64()}function Xe(e){return Ye(ze(e))}function Ze(e){return Xe(e)}function Qe(){let e={};function t(t,...n){let r=e[t]||[];for(let e=0,t=r.length;e<t;e++){let t=r[e];t&&t(...n)}}function n(n,...r){t(n,...r),delete e[n]}function r(t,n){return(e[t]||=[]).push(n),()=>{e[t]=e[t]?.filter(e=>n!==e)}}function i(e,t){let n=r(e,((...e)=>(n(),t(...e))));return n}return{_listeners:e,emit:t,emitOnce:n,on:r,once:i}}var $e=/^[\w+.-]{2,}:\/\//;function et(e){return e.endsWith(`/`)?e:`${e}/`}function tt(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function nt(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?et(n)+e.replace(/^\.?\//,``):e);return n}function rt(e,t){if(!t||t===`/`||$e.test(e))return e;let n=tt(t);return e.startsWith(n)?e:nt(n,e)}function it(e,t){let n=e.match($e);return t+(n?e.slice(n[0].length):e)}var at=Symbol.for(`immer-nothing`),ot=Symbol.for(`immer-draftable`),k=Symbol.for(`immer-state`),st=[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},`This object has been frozen and should not be mutated`,function(e){return`Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? `+e},`An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.`,`Immer forbids circular references`,"The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},`Object.defineProperty() cannot be used on an Immer draft`,`Object.setPrototypeOf() cannot be used on an Immer draft`,`Immer only supports deleting array indices`,`Immer only supports setting array indices and the 'length' property`,function(e){return`'original' expects a draft, got: ${e}`}];function A(e,...t){{let n=st[e],r=G(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var j=Object,M=j.getPrototypeOf,N=`constructor`,P=`prototype`,ct=`configurable`,lt=`enumerable`,ut=`writable`,F=`value`,I=e=>!!e&&!!e[k];function L(e){return e?pt(e)||H(e)||!!e[ot]||!!e[N]?.[ot]||U(e)||gt(e):!1}var dt=j[P][N].toString(),ft=new WeakMap;function pt(e){if(!e||!W(e))return!1;let t=M(e);if(t===null||t===j[P])return!0;let n=j.hasOwnProperty.call(t,N)&&t[N];if(n===Object)return!0;if(!G(n))return!1;let r=ft.get(n);return r===void 0&&(r=Function.toString.call(n),ft.set(n,r)),r===dt}function R(e,t,n=!0){z(e)===0?(n?Reflect.ownKeys(e):j.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function z(e){let t=e[k];return t?t.type_:H(e)?1:U(e)?2:gt(e)?3:0}var B=(e,t,n=z(e))=>n===2?e.has(t):j[P].hasOwnProperty.call(e,t),V=(e,t,n=z(e))=>n===2?e.get(t):e[t],mt=(e,t,n,r=z(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function ht(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var H=Array.isArray,U=e=>e instanceof Map,gt=e=>e instanceof Set,W=e=>typeof e==`object`,G=e=>typeof e==`function`,_t=e=>typeof e==`boolean`;function vt(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var yt=e=>W(e)?e?.[k]:null,K=e=>e.copy_||e.base_,bt=e=>e.modified_?e.copy_:e.base_;function xt(e,t){if(U(e))return new Map(e);if(gt(e))return new Set(e);if(H(e))return Array[P].slice.call(e);let n=pt(e);if(t===!0||t===`class_only`&&!n){let t=j.getOwnPropertyDescriptors(e);delete t[k];let n=Reflect.ownKeys(t);for(let r=0;r<n.length;r++){let i=n[r],a=t[i];a[ut]===!1&&(a[ut]=!0,a[ct]=!0),(a.get||a.set)&&(t[i]={[ct]:!0,[ut]:!0,[lt]:a[lt],[F]:e[i]})}return j.create(M(e),t)}{let t=M(e);if(t!==null&&n)return{...e};let r=j.create(t);return j.assign(r,e)}}function St(e,t=!1){return Tt(e)||I(e)||!L(e)?e:(z(e)>1&&j.defineProperties(e,{set:wt,add:wt,clear:wt,delete:wt}),j.freeze(e),t&&R(e,(e,t)=>{St(t,!0)},!1),e)}function Ct(){A(2)}var wt={[F]:Ct};function Tt(e){return e===null||!W(e)||j.isFrozen(e)}var Et=`MapSet`,Dt=`Patches`,Ot=`ArrayMethods`,kt={};function q(e){let t=kt[e];return t||A(0,e),t}var At=e=>!!kt[e];function jt(e,t){kt[e]||(kt[e]=t)}var Mt,Nt=()=>Mt,Pt=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:At(Et)?q(Et):void 0,arrayMethodsPlugin_:At(Ot)?q(Ot):void 0});function Ft(e,t){t&&(e.patchPlugin_=q(Dt),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function It(e){Lt(e),e.drafts_.forEach(zt),e.drafts_=null}function Lt(e){e===Mt&&(Mt=e.parent_)}var Rt=e=>Mt=Pt(Mt,e);function zt(e){let t=e[k];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function Bt(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[k].modified_&&(It(t),A(4)),L(e)&&(e=Vt(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[k].base_,e,t)}else e=Vt(t,n);return Ht(t,e,!0),It(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===at?void 0:e}function Vt(e,t){if(Tt(t))return t;let n=t[k];if(!n)return Xt(t,e.handledSet_,e);if(!Wt(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:t}=n;if(t)for(;t.length>0;)t.pop()(e);Jt(n,e)}return n.copy_}function Ht(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&St(t,n)}function Ut(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Wt=(e,t)=>e.scope_===t,Gt=[];function Kt(e,t,n,r){let i=K(e),a=e.type_;if(r!==void 0&&V(i,r,a)===t){mt(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;R(i,(e,n)=>{if(I(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??Gt;for(let e of o)mt(i,e,n,a)}function qt(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!Wt(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=bt(i);Kt(e,i.draft_??i,a,n),Jt(i,r)})}function Jt(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let r=n.getPath(e);r&&n.generatePatches_(e,r,t)}Ut(e)}}function Yt(e,t,n){let{scope_:r}=e;if(I(n)){let i=n[k];Wt(i,r)&&i.callbacks_.push(function(){on(e),Kt(e,n,bt(i),t)})}else L(n)&&e.callbacks_.push(function(){let i=K(e);e.type_===3?i.has(n)&&Xt(n,r.handledSet_,r):V(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&Xt(V(e.copy_,t,e.type_),r.handledSet_,r)})}function Xt(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||I(e)||t.has(e)||!L(e)||Tt(e)?e:(t.add(e),R(e,(r,i)=>{if(I(i)){let t=i[k];Wt(t,n)&&(mt(e,r,bt(t),e.type_),Ut(t))}else L(i)&&Xt(i,t,n)}),e)}function Zt(e,t){let n=H(e),r={type_:+!!n,scope_:t?t.scope_:Nt(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},i=r,a=Qt;n&&(i=[r],a=$t);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var Qt={get(e,t){if(t===k)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t==`string`;if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let i=K(e);if(!B(i,t,e.type_))return nn(e,i,t);let a=i[t];if(e.finalized_||!L(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&vt(t))return a;if(a===en(e.base_,t)||tn(e,t,a)){on(e);let n=e.type_===1?+t:t,r=cn(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in K(e)},ownKeys(e){return Reflect.ownKeys(K(e))},set(e,t,n){let r=rn(K(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=en(K(e),t),i=r?.[k];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.set(t,!1),!0;if(ht(n,r)&&(n!==void 0||B(e.base_,t,e.type_)))return!0;on(e),an(e)}return e.copy_[t]===n&&(n!==void 0||B(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),Yt(e,t,n),!0)},deleteProperty(e,t){return on(e),en(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),an(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=K(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[ut]:!0,[ct]:e.type_!==1||t!==`length`,[lt]:r[lt],[F]:n[t]}},defineProperty(){A(11)},getPrototypeOf(e){return M(e.base_)},setPrototypeOf(){A(12)}},$t={};for(let e in Qt){let t=Qt[e];$t[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}$t.deleteProperty=function(e,t){return isNaN(parseInt(t))&&A(13),$t.set.call(this,e,t,void 0)},$t.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&A(14),Qt.set.call(this,e[0],t,n,e[0])};function en(e,t){let n=e[k];return(n?K(n):e)[t]}function tn(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!L(n)||n[k]?!1:e.baseRefs_.has(n)}function nn(e,t,n){let r=rn(t,n);return r?F in r?r[F]:r.get?.call(e.draft_):void 0}function rn(e,t){if(!(t in e))return;let n=M(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=M(n)}}function an(e){e.modified_||(e.modified_=!0,e.parent_&&an(e.parent_))}function on(e){e.copy_||=(e.assigned_=new Map,xt(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var sn=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(G(e)&&!G(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}G(t)||A(6),n!==void 0&&!G(n)&&A(7);let r;if(L(e)){let i=Rt(this),a=cn(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?It(i):Lt(i)}return Ft(i,n),Bt(r,i)}if(!e||!W(e)){if(r=t(e),r===void 0&&(r=e),r===at&&(r=void 0),this.autoFreeze_&&St(r,!0),n){let t=[],i=[];q(Dt).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}A(1,e)},this.produceWithPatches=(e,t)=>{if(G(e))return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},_t(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),_t(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),_t(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){L(e)||A(8),I(e)&&(e=ln(e));let t=Rt(this),n=cn(t,e,void 0);return n[k].isManual_=!0,Lt(t),n}finishDraft(e,t){let n=e&&e[k];(!n||!n.isManual_)&&A(9);let{scope_:r}=n;return Ft(r,t),Bt(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=q(Dt).applyPatches_;return I(e)?r(e,t):this.produce(e,e=>r(e,t))}};function cn(e,t,n,r){let[i,a]=U(t)?q(Et).proxyMap_(t,n):gt(t)?q(Et).proxySet_(t,n):Zt(t,n);return(n?.scope_??Nt()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?qt(n,a,r):a.callbacks_.push(function(e){e.mapSetPlugin_?.fixSetContents(a);let{patchPlugin_:t}=e;a.modified_&&t&&t.generatePatches_(a,[],e)}),i}function ln(e){return I(e)||A(10,e),un(e)}function un(e){if(!L(e)||Tt(e))return e;let t=e[k],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=xt(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=xt(e,!0);return R(n,(e,t)=>{mt(n,e,un(t))},r),t&&(t.finalized_=!1),n}function dn(){st.push(`Sets cannot have "replace" patches.`,function(e){return`Unsupported patch operation: `+e},function(e){return`Cannot apply patch, path doesn't resolve: `+e},`Patching reserved attributes like __proto__, prototype and constructor is not allowed`);function e(n,r=[]){if(n.key_!==void 0){let e=n.parent_.copy_??n.parent_.base_,t=yt(V(e,n.key_)),i=V(e,n.key_);if(i===void 0||i!==n.draft_&&i!==n.base_&&i!==n.copy_||t!=null&&t.base_!==n.base_)return null;let a=n.parent_.type_===3,o;if(a){let e=n.parent_;o=Array.from(e.drafts_.keys()).indexOf(n.key_)}else o=n.key_;if(!(a&&e.size>o||B(e,o)))return null;r.push(o)}if(n.parent_)return e(n.parent_,r);r.reverse();try{t(n.copy_,r)}catch{return null}return r}function t(e,t){let n=e;for(let e=0;e<t.length-1;e++){let r=t[e];if(n=V(n,r),!W(n)||n===null)throw Error(`Cannot resolve path at '${t.join(`/`)}'`)}return n}let n=`replace`,r=`remove`;function i(e,t,n){if(e.scope_.processedForPatches_.has(e))return;e.scope_.processedForPatches_.add(e);let{patches_:r,inversePatches_:i}=n;switch(e.type_){case 0:case 2:return o(e,t,r,i);case 1:return a(e,t,r,i);case 3:return s(e,t,r,i)}}function a(e,t,i,a){let{base_:o,assigned_:s}=e,c=e.copy_;c.length<o.length&&([o,c]=[c,o],[i,a]=[a,i]);let l=e.allIndicesReassigned_===!0;for(let e=0;e<o.length;e++){let r=c[e],u=o[e];if((l||s?.get(e.toString()))&&r!==u){let o=r?.[k];if(o&&o.modified_)continue;let s=t.concat([e]);i.push({op:n,path:s,value:d(r)}),a.push({op:n,path:s,value:d(u)})}}for(let e=o.length;e<c.length;e++){let n=t.concat([e]);i.push({op:`add`,path:n,value:d(c[e])})}for(let e=c.length-1;o.length<=e;--e){let n=t.concat([e]);a.push({op:r,path:n})}}function o(e,t,i,a){let{base_:o,copy_:s,type_:c}=e;R(e.assigned_,(e,l)=>{let u=V(o,e,c),f=V(s,e,c),p=l?B(o,e)?n:`add`:r;if(u===f&&p===n)return;let m=t.concat(e);i.push(p===r?{op:p,path:m}:{op:p,path:m,value:d(f)}),a.push(p===`add`?{op:r,path:m}:p===r?{op:`add`,path:m,value:d(u)}:{op:n,path:m,value:d(u)})})}function s(e,t,n,i){let{base_:a,copy_:o}=e,s=0;a.forEach(e=>{if(!o.has(e)){let a=t.concat([s]);n.push({op:r,path:a,value:e}),i.unshift({op:`add`,path:a,value:e})}s++}),s=0,o.forEach(e=>{if(!a.has(e)){let a=t.concat([s]);n.push({op:`add`,path:a,value:e}),i.unshift({op:r,path:a,value:e})}s++})}function c(e,t,r){let{patches_:i,inversePatches_:a}=r;i.push({op:n,path:[],value:t===at?void 0:t}),a.push({op:n,path:[],value:e})}function l(e,t){return t.forEach(t=>{let{path:i,op:a}=t,o=e;for(let e=0;e<i.length-1;e++){let t=z(o),n=i[e];typeof n!=`string`&&typeof n!=`number`&&(n=``+n),(t===0||t===1)&&(n===`__proto__`||n===N)&&A(19),G(o)&&n===P&&A(19),o=V(o,n),(o===null||!W(o))&&A(18,i.join(`/`))}let s=z(o),c=u(t.value),l=i[i.length-1];switch(a){case n:switch(s){case 2:return o.set(l,c);case 3:A(16);default:return o[l]=c}case`add`:switch(s){case 1:return l===`-`?o.push(c):o.splice(l,0,c);case 2:return o.set(l,c);case 3:return o.add(c);default:return o[l]=c}case r:switch(s){case 1:return o.splice(l,1);case 2:return o.delete(l);case 3:return o.delete(t.value);default:return delete o[l]}default:A(17,a)}}),e}function u(e){if(!L(e))return e;if(H(e))return e.map(u);if(U(e))return new Map(Array.from(e.entries()).map(([e,t])=>[e,u(t)]));if(gt(e))return new Set(Array.from(e).map(u));let t=Object.create(M(e));for(let n in e)t[n]=u(e[n]);return B(e,ot)&&(t[ot]=e[ot]),t}function d(e){return I(e)?u(e):e}jt(Dt,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var fn=new sn,pn=fn.produce,mn=fn.produceWithPatches.bind(fn),hn=fn.applyPatches.bind(fn),gn=1e3;function _n(e,t){if(e.add(t),e.size>gn){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function vn(e){let{enablePatches:t=!1}=e;t&&dn();let n=Qe(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=T())=>{i.has(t)||(dn(),r=hn(r,e),_n(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=T())=>{if(!i.has(a)){if(_n(i,a),t){let[t,i]=mn(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=pn(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var yn=typeof self==`object`?self:globalThis,bn=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),xn=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function Sn(e,t){let n=(t,n)=>(e.set(n,t),t),r=i=>{if(e.has(i))return e.get(i);let[a,o]=t[i];switch(a){case 0:case-1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o,r=bn.has(e)?yn[e]:void 0;return n(new(r??yn.Error)(t),i)}case 8:return n(BigInt(o),i);case`BigInt`:return n(Object(BigInt(o)),i);case`ArrayBuffer`:return n(new Uint8Array(o).buffer,o);case`DataView`:{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}if(typeof a==`string`&&xn.has(a))return n(new yn[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function Cn(e){return Sn(new Map,e)(0)}var J=``,{toString:wn}={},{keys:Tn}=Object;function En(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=wn.call(e).slice(8,-1);switch(n){case`Array`:return[1,J];case`Object`:return[2,J];case`Date`:return[3,J];case`RegExp`:return[4,J];case`Map`:return[5,J];case`Set`:return[6,J];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function Dn([e,t]){return e===0&&(t===`function`||t===`symbol`)}function On(e,t,n,r){let i=(e,t)=>{let i=r.push(e)-1;return n.set(t,i),i},a=r=>{if(n.has(r))return n.get(r);let[o,s]=En(r);switch(o){case 0:{let t=r;switch(s){case`bigint`:o=8,t=r.toString();break;case`function`:case`symbol`:if(e)throw TypeError(`unable to serialize ${s}`);t=null;break;case`undefined`:return i([-1],r)}return i([o,t],r)}case 1:{if(s){let e=r;return s===`DataView`?e=new Uint8Array(r.buffer):s===`ArrayBuffer`&&(e=new Uint8Array(r)),i([s,[...e]],r)}let e=[],t=i([o,e],r);for(let t of r)e.push(a(t));return t}case 2:{if(s)switch(s){case`BigInt`:return i([s,r.toString()],r);case`Boolean`:case`Number`:case`String`:return i([s,r.valueOf()],r)}if(t&&`toJSON`in r)return a(r.toJSON());let n=[],c=i([o,n],r);for(let t of Tn(r))(e||!Dn(En(r[t])))&&n.push([a(t),a(r[t])]);return c}case 3:return i([o,r.toISOString()],r);case 4:{let{source:e,flags:t}=r;return i([o,{source:e,flags:t}],r)}case 5:{let t=[],n=i([o,t],r);for(let[n,i]of r)(e||!(Dn(En(n))||Dn(En(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!Dn(En(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function kn(e,t={}){let n=[];return On(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:An,stringify:jn}=JSON,Mn={json:!0,lossy:!0};function Nn(e){return Cn(An(e))}function Pn(e){return jn(kn(e,Mn))}function Fn(e){return Cn(e)}function In(e){return Pn(e)}function Ln(e){return Nn(e)}var Rn=256,zn=class extends Error{name=`StreamClosedError`};function Bn(e={}){let t=e.id??T(),n=Math.max(0,e.replayWindow??0),r=Qe(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new zn(`Cannot write to a closed stream "${t}"`);s+=1,n>0&&(a.push({seq:s,chunk:e}),a.length>n&&(a.length-n===1?a.shift():a.splice(0,a.length-n))),r.emit(`chunk`,s,e)}function l(e){if(o)return;o=!0;let t=Hn(e);i.abort(e),r.emit(`end`,t)}function u(){o||(o=!0,i.signal.aborted||i.abort(`stream closed`),r.emit(`end`,void 0))}function d(e){o||i.signal.aborted||i.abort(e??`aborted`)}let f=new WritableStream({write(e){c(e)},close(){u()},abort(e){l(e)}});return{id:t,signal:i.signal,get closed(){return o},get lastSeq(){return s},write:c,error:l,close:u,abort:d,writable:f,events:r,buffer:a}}function Vn(e={}){let t=e.id??T(),n=Math.max(1,e.highWaterMark??Rn),r=[],i=0,a=!1,o=!1,s,c,l,u;function d(){if(c){if(r.length>0){let e=r.shift(),t=c;c=void 0,t.resolve({value:e,done:!1});return}if(a){let e=c;if(c=void 0,s){let t=Error(s.message);t.name=s.name,e.reject(t)}else e.resolve({value:void 0,done:!0})}}}function f(){if(l){for(;r.length>0;){let e=r.shift();try{l.enqueue(e)}catch{break}}if(a&&l){try{if(s){let e=Error(s.message);e.name=s.name,l.error(e)}else l.close()}catch{}l=void 0}}}function p(t,s){if(!(a||o)&&!(t<=i)){if(i=t,r.push(s),r.length>n){let t=r.length-n;r.splice(0,t),e.onOverflow?.(t)}d(),u&&f()}}function m(e){a||(a=!0,s=e,d(),u&&f())}function h(){o||a||(o=!0,e.onCancel?.(),m(void 0))}function g(){return u||(u=new ReadableStream({start(e){l=e,f()},cancel(){h()}}),u)}return{id:t,get cancelled(){return o},get done(){return a},get lastSeenSeq(){return i},get readable(){return g()},cancel:h,_push:p,_end:m,[Symbol.asyncIterator](){return{next(){if(r.length>0)return Promise.resolve({value:r.shift(),done:!1});if(a){if(s){let e=Error(s.message);return e.name=s.name,Promise.reject(e)}return Promise.resolve({value:void 0,done:!0})}return new Promise((e,t)=>{c={resolve:e,reject:t}})},return(){return h(),Promise.resolve({value:void 0,done:!0})}}}}}function Hn(e){if(e instanceof Error)return{name:e.name||`Error`,message:e.message};if(typeof e==`string`)return{name:`Error`,message:e};try{return{name:`Error`,message:JSON.stringify(e)}}catch{return{name:`Error`,message:String(e)}}}var Un=128;function Wn(e){return e.replace(/[^\w-]+/g,`_`).slice(0,Un)}var Gn=`__connection.json`,Kn=`__DEVFRAME_CONNECTION__`,qn=`x-birpc-session`,Jn=`__rpc-dump/index.json`,Yn=`devframe:services`,Xn=`devframe_otp`,Zn=`devframe_auth_token`;D.postMessage.remoteAssetsError;var Qn=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>Ze(e))}updateOptions(e){this.options={...this.options,...e}}cached(e,t){let n=this.cacheMap.get(e);if(n)return n.get(this.keySerializer(t))}has(e,t){return this.cacheMap.get(e)?.has(this.keySerializer(t))??!1}apply(e,t){let n=this.cacheMap.get(e.m)||new Map;n.set(this.keySerializer(e.a),t),this.cacheMap.set(e.m,n)}validate(e){return this.options.functions.includes(e)}clear(e){e?this.cacheMap.delete(e):this.cacheMap.clear()}},Y=Se({docsBase:`https://devfra.me/errors`,codes:{DF0019:{why:e=>`RPC function "${e.name}" has \`agent\` set but \`jsonSerializable\` is \`false\`; MCP requires JSON-serializable data.`,fix:"Remove `jsonSerializable: false`, or remove `agent` to keep it RPC-only."},DF0020:{why:e=>`RPC function "${e.name}" declares \`jsonSerializable: true\` but the value at "${e.path}" is a ${e.type}.`,fix:"Either drop `jsonSerializable: true` (falls back to structured-clone) or change the value to a JSON-safe shape."},DF0021:{why:e=>`RPC function "${e.name}" is already registered`,fix:"Use the `force` parameter to overwrite an existing registration."},DF0022:{why:e=>`RPC function "${e.name}" is not registered. Use register() to add new functions.`},DF0023:{why:e=>`RPC function "${e.name}" is not registered`},DF0024:{why:e=>`Either handler or setup function must be provided for RPC function "${e.name}"`},DF0025:{why:e=>`Function "${e.name}" not found in dump store`},DF0026:{why:e=>`No dump match for "${e.name}" with args: ${e.args}`},DF0027:{why:e=>`Function "${e.name}" with type "${e.type}" cannot have dump configuration. Only "static" and "query" types support dumps.`},DF0028:{why:e=>`Function "${e.name}" with type "${e.type}" cannot use \`snapshot: true\`. Only "query" functions support this sugar; "static" functions have equivalent default behavior already.`,fix:"Remove `snapshot: true`, or change the function type to `query`."},DF0043:{why:e=>`RPC function "${e.name}" received an invalid argument at position ${e.index}: ${e.issues}`,fix:"Pass a value that satisfies the `args` schema declared for this function."},DF0044:{why:e=>`RPC function "${e.name}" returned a value that failed its \`returns\` schema: ${e.issues}`,fix:"Make the handler return a value that satisfies the `returns` schema, or relax the schema."}}});function $n(e){if(e.agent&&e.jsonSerializable===!1)throw Y.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function er(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function tr(e){return e.map(e=>{let t=e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`);return t?`${t}: ${e.message}`:e.message}).join(`; `)}async function nr(e,t,n){let r=n.slice();if(!t||t.length===0)return r;for(let r=0;r<t.length;r++){let i=t[r];if(!i)continue;let a=await er(i,n[r]);if(a.issues)throw Y.DF0043({name:e,index:r,issues:tr(a.issues)})}return r}async function rr(e,t,n){if(!t)return n;let r=await er(t,n);if(r.issues)throw Y.DF0044({name:e,issues:tr(r.issues)});return n}async function ir(e,t){if(!e.setup)return{};if(typeof t==`object`&&t){e.__cache??=new WeakMap;let n=e.__cache,r=n.get(t);return r||(r=Promise.resolve(e.setup(t)),r.catch(()=>{n.get(t)===r&&n.delete(t)}),n.set(t,r)),await r}if(!e.__promise){let n=Promise.resolve(e.setup(t));n.catch(()=>{e.__promise===n&&(e.__promise=void 0)}),e.__promise=n}return await e.__promise}async function ar(e,t){let n=e.handler;if(!n){let r=await ir(e,t);if(!r.handler)throw Y.DF0024({name:e.name});n=r.handler}let r=e.args,i=e.returns;if(!r&&!i)return n;let a=n;return async(...t)=>{let n=await nr(e.name,r,t),o=await a(...n);return await rr(e.name,i,o)}}var or=class{context;definitions=new Map;functions;_onChanged=[];constructor(e){this.context=e;let t=this.definitions,n=this;this.functions=new Proxy({},{get(e,r){let i=t.get(r);if(i)return ar(i,n.context)},has(e,n){return t.has(n)},getOwnPropertyDescriptor(e,n){return{value:t.get(n)?.handler,configurable:!0,enumerable:!0}},ownKeys(){return Array.from(t.keys())}})}register(e,t=!1){if(this.definitions.has(e.name)&&!t)throw Y.DF0021({name:e.name});$n(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}update(e,t=!1){if(!this.definitions.has(e.name)&&!t)throw Y.DF0022({name:e.name});$n(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}onChanged(e){return this._onChanged.push(e),()=>{let t=this._onChanged.indexOf(e);t!==-1&&this._onChanged.splice(t,1)}}async getHandler(e){return await ar(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw Y.DF0023({name:String(e)});return{args:t.args,returns:t.returns}}has(e){return this.definitions.has(e)}get(e){return this.definitions.get(e)}list(){return Array.from(this.definitions.keys())}};function sr(e,t=``){return JSON.stringify(e,function(e,n){let r=this,i=r==null?n:r[e];if(i===void 0){if(Array.isArray(r))throw X(t,`undefined`,r,e);return n}return i!==null&&cr(i,r,e,t),n})}function cr(e,t,n,r){if(typeof e==`bigint`)throw X(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw X(r,`Map`,t,n);if(e instanceof Set)throw X(r,`Set`,t,n);if(e instanceof Date)throw X(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw X(r,e.constructor?.name??`class instance`,t,n)}function X(e,t,n,r){let i=lr(n,r);return Y.DF0020({name:e||`<anonymous>`,type:t,path:i})}function lr(e,t){return Array.isArray(e)?`[${t}]`:t===``?`<root>`:t}var ur=`__DEVFRAME_CONNECTION_META__`,dr=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function fr(e){let t=[()=>window?.[e],()=>globalThis?.[e],()=>parent.window?.[e]];for(let e of t)try{let t=e();if(t)return t}catch{}}function pr(){return fr(Kn)}function mr(){return fr(ur)}function Z(e){if(e)return e;try{let e=localStorage.getItem(dr);if(e)return e}catch{}return fr(dr)}function hr(e){globalThis[Kn]=e,globalThis[ur]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&gr(e.authToken)}function gr(e){try{localStorage.setItem(dr,e)}catch{}globalThis[dr]=e;let t=pr();t&&(globalThis[Kn]={...t,authToken:e})}function _r(e){let t=rt(Gn,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function vr(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function yr(){let e=pr();if(e)return vr(e,Z()??e.authToken??e.connectionMeta.authToken);let t=mr();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??_r(`./`),authToken:Z(t.authToken)}}async function br(e={}){if(e.connection){let t=vr(e.connection,Z(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return hr(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:_r(t[0]??`./`),authToken:Z(e.authToken??e.connectionMeta.authToken)};return hr(n),n}let n=yr();if(n){let t=vr(n,Z(e.authToken??n.authToken??n.connectionMeta.authToken));return hr(t),t}let r=[];for(let n of t){let t=rt(Gn,n),i=_r(n);try{let n=await fetch(t);if(!n.ok)throw Error(`Failed to fetch connection meta from ${i}: ${n.status}`);let r=await n.json(),a=n.url||i,o={connectionMeta:r,metaBaseUrl:r.baseUrl?new URL(r.baseUrl,a).href:a,authToken:Z(e.authToken??r.authToken)};return hr(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var Q=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function xr(e=Xn){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function Sr(e){try{let t=new URL(globalThis.location.href),n=new URLSearchParams(t.hash.replace(/^#/,``));if(!n.has(e))return;n.delete(e),t.hash=n.toString(),globalThis.history?.replaceState(globalThis.history.state,``,t.href)}catch{}}function Cr(e=Xn){let t=xr(e);return t&&Sr(e),t}async function wr(e,t={}){let n=Cr(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function Tr(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(Yn,{initialValue:{}}).then(e=>(t=e.value(),e.on(`updated`,e=>{t=e}),e)),r);return i(),{state:i,has:e=>e in t,keys:()=>Object.keys(t),get:r=>{let i=t[r];if(!i)return;let a=n.get(i);return a||(a={...i,rpc:e.scope(i.scope).rpc},n.set(i,a)),a}}}function Er(e){let t=new Map,n=new Map,r=new Map,i=new Set,a=e.connectionMeta.backend===`static`;function o(e,t){let n=r.get(e);return n&&typeof n==`object`&&!Array.isArray(n)&&typeof t==`object`&&!Array.isArray(t)?{...n,...t}:t}e.client.register({name:D.broadcast.clientStateUpdated,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.mutate(()=>o(e,n),r)}}),e.client.register({name:D.broadcast.clientStatePatch,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.patch(n,r)}});function s(t,n){let r=[];return r.push(n.on(`updated`,(n,r,i)=>{a||(r?e.callEvent(`devframe:rpc:server-state:patch`,t,r,i):e.callEvent(`devframe:rpc:server-state:set`,t,n,i))})),()=>{for(let e of r)e()}}return{keys:()=>Array.from(t.keys()),onKeyAdded(e){return i.add(e),()=>{i.delete(e)}},delete(e){let i=n.get(e);n.delete(e);let a=t.delete(e);return r.delete(e),i?.(),a},get:async(c,l)=>{if(l?.initialValue!==void 0&&r.set(c,l.initialValue),t.has(c))return t.get(c);let u=vn({initialValue:l?.initialValue,enablePatches:!1});async function d(){if(a||e.callEvent(`devframe:rpc:server-state:subscribe`,c),l?.initialValue!==void 0){t.set(c,u);for(let e of i)e(c);return e.call(`devframe:rpc:server-state:get`,c).then(e=>{e!==void 0&&u.mutate(()=>o(c,e))}).catch(e=>{console.error(`Error getting server state`,e)}),n.set(c,s(c,u)),u}{let r=await e.call(`devframe:rpc:server-state:get`,c);u.mutate(()=>o(c,r)),t.set(c,u);for(let e of i)e(c);return n.set(c,s(c,u)),u}}return new Promise(t=>{if(e.isTrusted)d().then(t);else{t(u);let n=!1;e.events.on(D.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,d())})}})}}}var Dr=new Map;function Or(e=Dr){let t=new Map;return{serialize:n=>{let r;return n.t===`q`?r=n.m:(r=t.get(n.i),t.delete(n.i)),!(n.t===`s`&&`e`in n)&&r&&e.get(r)?.jsonSerializable===!0?sr(n,r??``):`s:${In(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?Ln(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function kr(){}function Ar(e){let t=e.search(/\n\n|\r\n\r\n/);if(!(t<0))return{frame:e.slice(0,t),rest:e.slice(t+(e[t]===`\r`?4:2))}}function jr(e){let t=`message`,n=[];for(let r of e.split(/\r?\n/))r.startsWith(`:`)||(r.startsWith(`event:`)?t=r.slice(6).trimStart():r.startsWith(`data:`)&&n.push(r.slice(5).replace(/^ /,``)));return{event:t,data:n}}function Mr(e){let{onConnected:t=kr,onError:n=kr,onDisconnected:r=kr,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${Zn}=${encodeURIComponent(e.authToken)}`);let s=Or(i),c=new AbortController,l=!1,u,d,f,p,m=new Promise((e,t)=>{f=e,p=t});m.catch(()=>{});function h(e){l||(l=!0,p(e),n(e),r())}function g(){l||(l=!0,p(Error(`Devframe SSE stream closed`)),r())}function _(e,n){if(e===`session`){f(n),t();return}u?.(n)}async function v(e){let t=e.getReader();d=t;let n=new TextDecoder,r=``;for(;;){let{done:e,value:i}=await t.read();if(e)break;for(r+=n.decode(i,{stream:!0});;){let e=Ar(r);if(!e)break;r=e.rest;let{event:t,data:n}=jr(e.frame);n.length>0&&_(t,n.join(`
|
|
4
|
-
`))}}g()}return(async()=>{try{let e=await a(o,{headers:{accept:`text/event-stream`},signal:c.signal});if(!e.ok||!e.body)throw Error(`Devframe SSE stream request failed: ${e.status}`);await v(e.body)}catch(e){if(c.signal.aborted){g();return}h(e instanceof Error?e:Error(String(e)))}})(),{close:()=>{l=!0,c.abort(),d?.cancel().catch(()=>{})},on:e=>{u=e},post:async e=>{let t;try{t=await m}catch{return}if(l){n(Error(`Devframe SSE channel is closed; message dropped`));return}try{let n=await a(o,{method:`POST`,headers:{"content-type":`text/plain; charset=utf-8`,[qn]:t},body:e});if(n.status===200){let e=await n.text();e&&u?.(e);return}if(!n.ok)throw Error(`Devframe SSE POST failed: ${n.status}`)}catch(e){n(e instanceof Error?e:Error(String(e)))}},serialize:s.serialize,deserialize:s.deserialize}}function Nr(e,t){let{channel:n,rpcOptions:r={}}=t;return Me(e,{...n,timeout:-1,...r,proxify:!1})}function Pr(e){let{transport:t,authToken:n,connectionMeta:r,events:i,clientRpc:a,rpcOptions:o={},callTimeout:s=0}=e,c=!1,l=`connecting`,u=null,d=Promise.withResolvers();function f(e,t=null){if(t?u=t:e===`connected`&&(u=null),e===l)return;let n=l;l=e,i.emit(D.client.connectionStatus,e,n)}let p=new Set;function m(e){for(let t of[...p])t.reject(e)}function h(){return l===`disconnected`||l===`error`?new Q(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new Q(`auth`,`[devframe] Not authorized by the devframe server`,{cause:u??void 0}):null}function g(e,t){return new Promise((n,r)=>{let a=!1,o,c={reject(e){a||(l(),i.emit(D.client.error,e,t),r(e))}};function l(){a=!0,p.delete(c),o&&clearTimeout(o)}p.add(c),s>0&&(o=setTimeout(()=>{c.reject(new Q(`timeout`,`[devframe] RPC call "${t}" timed out after ${s}ms`))},s)),e.then(e=>{a||(l(),n(e))},e=>{if(a)return;l();let n=e instanceof Error?e:Error(String(e));i.emit(D.client.error,n,t),r(n)})})}let _=new Map;for(let e of r.jsonSerializableMethods??[])_.set(e,{jsonSerializable:!0});let v=e.createChannel({definitions:_,onError(e){f(`error`,e),i.emit(D.client.connectionError,e),m(new Q(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new Q(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),y=Nr(a.functions,{channel:v,rpcOptions:o});a.register({name:D.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new Q(`auth`,`[devframe] The devframe server revoked this client's trust`);f(`unauthorized`,e),i.emit(D.client.connectionError,e),m(e),i.emit(D.client.isTrustedUpdated,!1)}});let b=n;async function x(e){b=e;let t=await y.$call(`anonymous:devframe:auth`,{authToken:e,ua:navigator.userAgent,origin:location.origin});if(c=t.isTrusted,c)d.resolve(!0),f(`connected`);else{let e=new Q(`auth`,`[devframe] The devframe server refused this client's credentials`);f(`unauthorized`,e),i.emit(D.client.connectionError,e)}return i.emit(D.client.isTrustedUpdated,c),t.isTrusted}async function S(e){let t=(await y.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(b=t,c=!0,d.resolve(!0),f(`connected`),i.emit(D.client.isTrustedUpdated,!0)),t}async function ee(e={}){await y.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function C(){return c?!0:x(b??``)}async function te(e=6e4){if(c&&d.resolve(!0),e<=0)return d.promise;let t;try{return await Promise.race([d.promise,new Promise((n,r)=>{t=setTimeout(()=>{r(Error(`[devframe] Timeout waiting for rpc to be trusted`))},e)})]),c}finally{clearTimeout(t)}}return{transport:t,get isTrusted(){return c},get status(){return l},get connectionError(){return u},requestTrust:C,requestTrustWithToken:x,requestTrustWithCode:S,requestAuthCode:ee,ensureTrusted:te,call:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(D.client.error,n,t),Promise.reject(n)):g(y.$call(...e),t)},callEvent:(...e)=>{let t=h();if(t){i.emit(D.client.error,t,String(e[0]));return}return y.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(D.client.error,n,t),Promise.reject(n)):g(y.$callOptional(...e),t)},close:()=>{v.close()}}}function Fr(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})();if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`;return new URL(e.path??`/`,`${r.protocol}//${t}`).href}return new URL(e.path??``,r).href}let i=e??``;return/^https?:\/\//i.test(i)?i:new URL(i,r).href}function Ir(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=Fr(n.sse,r??`./`,location);return Pr({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>Mr({url:l,authToken:t,definitions:e.definitions,...s,onConnected(){s.onConnected?.()},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(){e.onDisconnected(),s.onDisconnected?.()}})})}function Lr(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:Rr(r)?Lr(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function Rr(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function zr(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function Br(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function Vr(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function Hr(e){if(e.error)throw Lr(e.error);return e.output}function Ur(e){return e.some(e=>e!=null)}function Wr(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function Gr(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?Fn(e):e}function a(e,t){return i(Wr(e),t)}async function o(e){n.has(e.path)||n.set(e.path,t(e.path).then(t=>a(t,e.serialization)));let r=await n.get(e.path);return Vr(r)?Hr(r):r}async function s(e,n){return r.has(e)||r.set(e,t(e).then(e=>a(e,n))),await r.get(e)}async function c(t,n){if(!(t in e))throw Error(`[devframe-rpc] Function "${t}" not found in dump store`);let r=e[t];if(zr(r)){if(Ur(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(Br(r)){let e=Ze(n),i=r.records[e];if(i)return Hr(await s(i,r.serialization));if(r.fallback)return Hr(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!Ur(n))return r;throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}return{call:async(e,t)=>await c(e,t),callOptional:async(t,n)=>{if(t in e)return await c(t,n)},callEvent:async(e,t)=>{}}}async function Kr(e){let t=Gr(await e.fetchJsonFromBases(Jn),e.fetchJsonFromBases);return{transport:`static`,isTrusted:!0,status:`connected`,connectionError:null,requestTrust:async()=>!0,requestTrustWithToken:async()=>!0,requestTrustWithCode:async()=>null,requestAuthCode:async()=>{},ensureTrusted:async()=>!0,call:(...e)=>t.call(e[0],e.slice(1)),callEvent:(...e)=>t.callEvent(e[0],e.slice(1)),callOptional:(...e)=>t.callOptional(e[0],e.slice(1)),close:()=>{}}}var qr=``;function Jr(e,t){return`${e}${qr}${t}`}function Yr(e){let t=new Map,n=new Map;e.client.register({name:D.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(Jr(e,n))?._push(r,i)}}),e.client.register({name:D.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=Jr(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:D.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=Jr(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(D.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(qr);if(t<0)continue;let i=n.slice(0,t),a=n.slice(t+1);e.callEvent(`devframe:streaming:subscribe`,i,a,{afterSeq:r.lastSeenSeq})}});function r(n,r,i={}){let a=Jr(n,r),o=t.get(a);if(o)return o;let s=Vn({id:r,highWaterMark:i.highWaterMark,onOverflow(e){console.warn(`[devframe] DF0029: Stream "${n}#${r}" dropped ${e} chunk(s) after exceeding the client high-water mark.`)},onCancel(){e.callEvent(`devframe:streaming:cancel`,n,r),t.delete(a)}});if(t.set(a,s),e.isTrusted)e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:0});else{let i=e.events.on(D.client.isTrustedUpdated,o=>{o&&(i(),t.has(a)&&!s.cancelled&&!s.done&&e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:s.lastSeenSeq}))})}return s}function i(t,r){let i=Jr(t,r),a=n.get(i);if(a)return a;let o=Bn({id:r});return o.events.on(`chunk`,(n,i)=>{e.callEvent(`devframe:streaming:upload-chunk`,t,r,n,i)}),o.events.on(`end`,a=>{e.callEvent(`devframe:streaming:upload-end`,t,r,a),n.delete(i)}),n.set(i,o),o}return{subscribe:r,upload:i}}function Xr(){}var Zr=new Map;function Qr(e){let t=e.url;e.authToken&&(t=`${t}?${Zn}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=Xr,onError:i=Xr,onDisconnected:a=Xr,definitions:o=Zr}=e;n.addEventListener(`open`,e=>{r(e)}),n.addEventListener(`error`,e=>{let t=e instanceof Error?e:Error(e.type);i(t)}),n.addEventListener(`close`,e=>{a(e)});let s=Or(o);return{close:()=>{n.close()},on:e=>{n.addEventListener(`message`,t=>{e(t.data)})},post:e=>{if(n.readyState===WebSocket.OPEN){n.send(e);return}if(n.readyState===WebSocket.CONNECTING){let t=()=>{i(),n.readyState===WebSocket.OPEN&&n.send(e)},r=()=>i();function i(){n.removeEventListener(`open`,t),n.removeEventListener(`close`,r)}n.addEventListener(`open`,t),n.addEventListener(`close`,r);return}i(Error(`Devframe WebSocket is not open; message dropped`))},serialize:s.serialize,deserialize:s.deserialize}}function $r(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})(),i=r.protocol===`https:`?`wss:`:`ws:`;if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`,n=new URL(e.path??`/`,`${i}//${t}`);return n.protocol=i,n.href}let t=new URL(e.path??``,r);return t.protocol=i,t.href}if(typeof e==`number`)return`${i}//${r.hostname}:${e}`;let a=e??``;if(/^wss?:\/\//i.test(a))return a;if(/^https?:\/\//i.test(a))return it(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function ei(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=$r(n.websocket,r??`./`,location);return Pr({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>Qr({url:l,authToken:t,definitions:e.definitions,...s,onConnected(e){s.onConnected?.(e)},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(t){e.onDisconnected(),s.onDisconnected?.(t)}})})}function ti(e){return e.includes(`:`)}function $(e,t){return ti(t)?t:`${e}:${t}`}function ni(e){return{async get(t){return(await e()).value()[t]},async set(t,n){(await e()).mutate(e=>{e[t]=n})},async delete(t){(await e()).mutate(e=>{delete e[t]})},async all(){return(await e()).value()},async onChange(t){return(await e()).on(`updated`,e=>t(e))}}}function ri(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=e.sharedState.get(r,{initialValue:{}}),i}return ni(a)}function ii(e,t){return{global:ri(e,t,`global`),project:ri(e,t,`project`)}}function ai(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(ti(n.name))throw Error(`[devframe] Scoped client RPC registration for namespace "${t}" received an already-namespaced function name "${n.name}". Pass a bare name without a ":" separator.`);e.client.register({...n,name:`${t}:${n.name}`})},call:((n,...r)=>e.call($(t,n),...r)),callEvent:((n,...r)=>e.callEvent($(t,n),...r)),callOptional:((n,...r)=>e.callOptional($(t,n),...r)),sharedState:((n,r)=>e.sharedState.get($(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe($(t,n),r,i),upload:(n,r)=>e.streaming.upload($(t,n),r)}},settings:ii(e,t),scope:e.scope}}function oi(){if(typeof document<`u`){let e=document.modelContext;if(e)return e}if(typeof navigator<`u`){let e=navigator.modelContext;if(e)return e}}function si(e,t={}){let n=t.modelContext??oi();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=Wn(t.name),s=a.get(o);if(s&&s!==t.name){console.warn(`[devframe] WebMCP tool name "${o}" (from "${t.name}") collides with "${s}"; keeping the first registration.`);return}let c=new AbortController,l=Ne(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:Ie(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>ci(t,e.context,n)},{signal:c.signal});u&&`then`in u&&u.then(()=>{},()=>{}),a.set(o,t.name),i.set(t.name,()=>{c.abort(),u&&`unregister`in u&&typeof u.unregister==`function`&&u.unregister(),a.delete(o)})}function s(t){let n=t?[t]:[...e.definitions.keys()];for(let t of n){i.get(t)?.(),i.delete(t);let n=e.definitions.get(t),r=n?.agent;n&&r&&o(n,r)}}s();let c=e.onChanged(e=>s(e));return()=>{c();for(let e of i.values())e();i.clear()}}async function ci(e,t,n){try{let r=Re(n,e.args?.length);return{content:[{type:`text`,text:li(await(await ar(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:ui(e)}]}}}function li(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function ui(e){if(!(e instanceof Error))return String(e);let t=e.cause instanceof Error?` (cause: ${e.cause.message})`:``;return`${e.name}: ${e.message}${t}`}function di(e,t){if(t.backend===`static`)return`static`;let n=t.websocket!==void 0,r=t.sse!==void 0;if(e===`websocket`){if(!n)throw Error(`[devframe] transport: 'websocket' was requested, but this server does not advertise a WebSocket endpoint`);return`websocket`}if(e===`sse`){if(!r)throw Error(`[devframe] transport: 'sse' was requested, but this server does not advertise an SSE endpoint`);return`sse`}if(t.backend===`sse`&&r)return`sse`;if(n)return`websocket`;if(r)return`sse`;throw Error(`[devframe] This server advertises no RPC transport (backend "none"), so there is nothing to connect to. Enable the WebSocket or SSE endpoint on the server, or use its static/MCP surfaces instead.`)}async function fi(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=Qe(),a=Array.isArray(t)?t:[t],o=await br(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new Qn({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new or(f),m=e.webmcp===!1?void 0:si(p),h,g=!1;async function _(e){let t=[u,...a.filter(e=>e!==u)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(rt(e,r)).then(t=>{if(!t.ok)throw Error(`Failed to fetch ${e} from ${r}: ${t.status}`);return t.json()})}catch(e){n.push(e)}throw Error(`Failed to load ${e} from ${t.join(`, `)}`,{cause:n})}let v={authToken:l,connectionMeta:s,metaBaseUrl:c,events:i,clientRpc:p,callTimeout:e.callTimeout,rpcOptions:{...n,async onRequest(e,t,i){if(await n.onRequest?.call(this,e,t,i),r&&d?.validate(e.m)){if(d.has(e.m,e.a))return i(d.cached(e.m,e.a));let n=await t(e);d.apply(e,n)}else await t(e)}}},y=di(e.transport??`auto`,s),b=y===`static`?await Kr({fetchJsonFromBases:_}):y===`sse`?Ir({...v,sseOptions:e.sseOptions}):ei({...v,wsOptions:e.wsOptions}),x;try{x=new BroadcastChannel(`devframe-auth`)}catch{}let S,C=!1;function te(e){return((...t)=>C||!S?e(...t):S.then(()=>e(...t)))}function ne(){g=!0;try{h?.(),m?.()}finally{try{x?.close()}finally{b.close?.()}}}let w={events:i,get isTrusted(){return b.isTrusted},get status(){return b.status},get connectionError(){return b.connectionError},get transport(){return b.transport??y},get connection(){return o},connectionMeta:s,ensureTrusted:b.ensureTrusted,requestTrust:b.requestTrust,requestTrustWithToken:async e=>(gr(e),o={...o,authToken:e},b.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await b.requestTrustWithCode(e);if(!t)return!1;gr(t),o={...o,authToken:t};try{x?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>b.requestAuthCode(e),call:te(b.call),callEvent:te(b.callEvent),callOptional:te(b.callOptional),client:p,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:d,scope:void 0,close:ne};w.sharedState=Er(w),w.streaming=Yr(w),w.services=Tr(w);let re=new Map;w.scope=(e=>{if(!e)return w;let t=re.get(e);return t||(t=ai(w,e),re.set(e,t)),t}),f.rpc=w;function T(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function ie(){if(e.simpleAuth!==!1&&T()&&typeof globalThis.prompt==`function`)for(await w.requestAuthCode().catch(()=>{});!w.isTrusted;){let e=globalThis.prompt(`devframe: enter the authentication code shown in your terminal`);if(e==null)return;let t=e.trim();if(t&&await w.requestTrustWithCode(t))return}}async function ae(){let t=await b.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await wr(w,{param:n}):!1;t||r||w.isTrusted||await ie()}return S=ae().then(()=>{C=!0},()=>{C=!0}),s.mcp&&ee(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-BXhoSh1z-DrvKG05N.js`);return{setupBrowserAgentRpcBridge:e}},__vite__mapDeps([0,1]),import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{g||(h=e(w))}).catch(()=>{}),x&&(x.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&w.requestTrustWithToken(e.data.authToken)}),w}var pi=fi;async function mi(){let e=await pi();return{client:e,rpc:e.scope(le).rpc}}var hi={class:`min-h-screen flex items-center justify-center p-6`},gi={class:`text-lg font-semibold`},_i={class:`text-sm op-fade`},vi=[`aria-label`],yi={key:0,class:`text-sm text-red-500`},bi=l({__name:`LocalAuthGate`,props:{client:{},onTrusted:{type:Function}},setup(l){let f=l,h=c(``),g=c(!1),_=c(!1);a(()=>f.client.requestAuthCode());async function v(){_.value=!0,g.value=!1;try{await f.client.requestTrustWithCode(h.value.trim())?f.onTrusted():g.value=!0}finally{_.value=!1}}return(a,c)=>(t(),i(`main`,hi,[s(`form`,{class:`max-w-90 w-full flex flex-col gap-3`,onSubmit:p(v,[`prevent`])},[s(`h1`,gi,n(a.$t(`local.auth.title`)),1),s(`p`,_i,n(a.$t(`local.auth.hint`)),1),u(s(`input`,{"onUpdate:modelValue":c[0]||=e=>h.value=e,inputmode:`numeric`,autocomplete:`one-time-code`,maxlength:`6`,class:`border border-base rounded bg-base px-3 py-2 text-center text-xl tracking-widest font-mono`,"aria-label":a.$t(`local.auth.title`)},null,8,vi),[[m,h.value]]),g.value?(t(),i(`p`,yi,n(a.$t(`local.auth.invalid`)),1)):r(``,!0),e(ie,{variant:`primary`,type:`submit`,disabled:_.value||h.value.trim().length!==6},{default:d(()=>[o(n(a.$t(`local.auth.submit`)),1)]),_:1},8,[`disabled`])],32)]))}});async function xi(e){if(await e.ensureTrusted(2e3).catch(()=>!1))return;let t=document.createElement(`div`);document.body.append(t),await new Promise(n=>{f(bi,{client:e,onTrusted:n}).use(v).mount(t)}),t.remove()}async function Si(e,t){let{client:n,rpc:r}=await mi();await xi(n),ne(e,{cache:w(C({driver:pe(r)})),credentials:me(r,re),llm:_e(r,te)}),e.provide(oe,r),e.provide(ae,ge(r));for(let e of de(()=>ee(()=>import(`./diff-CNRGXNmw.js`),__vite__mapDeps([2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]),import.meta.url)))t.addRoute(e);t.removeRoute(`home`),t.addRoute({path:`/`,component:()=>ee(()=>import(`./pages-local-CVPpEWZ_.js`),__vite__mapDeps([30,3,13,14,5,15,12,16,6,7,8,9,10,17,18,19,20,22,23,31,28,32,33]),import.meta.url)})}export{Si as installLocal};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={cancel:`Annulla`,save:`Salva`,remove:`Rimuovi`,retry:`Riprova`,close:`Chiudi`,dismiss:`Ignora`,refresh:`Aggiorna`,settings:`Impostazioni`,you:`tu`,loading:`Caricamento…`,send:`Invia`,stop:`Ferma`,clear:`Svuota`,reply:`Rispondi`,submit:`Invia`,abort:`Interrompi`,rerun:`Riesegui`,files:`{n} file | {n} file`,subgroups:`{n} sottogruppo | {n} sottogruppi`,githubRepository:`Repository GitHub`,avatar:`Avatar di {login}`},t={dropHint:`Rilascia per caricare il tuo file diff / .patch`,tagline:`Raggruppa i file modificati, riassume ciò che conta e ti fa revisionare un ambito alla volta. Tutto funziona in locale nel tuo browser.`,documentTitle:`Revisioni delle pull request chiare e organizzate`,open:`Apri`,pasteHint:`Incolla l'URL di una pull request GitHub o scegli una demo qui sotto.`,recentlyViewed:`// visti di recente`,recentRepositories:`// repository visti di recente`,tryDemos:`// prova alcune demo`,demoBefore:`// prima`,demoAfter:`// dopo`,moreFiles:`... altri {n} file`,demoTitle:`feat: condividere un'analisi IA come commento della PR e caricare i risultati condivisi`,demoSummary:`Un revisore con API key pubblica la sua analisi nella PR; tutti gli altri la caricano senza token.`,demoGroups:{store:`Store delle analisi condivise e contratto del commento`,ui:`UI di condivisione del risultato`,refactor:`Refactor dello store: risultato alla radice`,tests:`Test`,docs:`Docs e dipendenze`},uploadTitle:`Revisiona un diff senza PR`,uploadDescription:`Carica o incolla un unified diff, oppure trascina un file {diff} / {patch} ovunque in questa pagina.`,uploadButton:`Carica un diff`,embedTitle:`Usalo integrato su github.com`,embedDescription:`Con {tampermonkey} o {violentmonkey} installato, un pannello pulls.review appare in ogni pagina di pull request.`,installUserscript:`Installa lo userscript`,bookmarkletTitle:`Passa da github.com a pulls.review`,bookmarkletDescription:`Non puoi installare estensioni? Trascina questo bookmarklet nella barra dei preferiti per aprire la pull request corrente su pulls.review, e tornare indietro.`,bookmarkletDrag:`Trascinami nella barra dei preferiti`,actionsTitle:`Configura l'analisi automatica con GitHub Actions`,actionsDescription:`Analizza ogni pull request una volta in CI e pubblica il risultato come commento, così ogni revisore non ha bisogno della propria chiave del modello.`,cliTitle:`Eseguilo sulle modifiche git locali con la CLI`,cliDescription:`Rivedi il working tree, un commit o un branch prima del push, raggruppati e riassunti come una PR.`,viewGuide:`Vedi la guida`},n={userscript:{title:`Usa pulls.review integrato su github.com`,intro:`Lo userscript aggiunge un pannello pulls.review direttamente alle pagine delle pull request su github.com, con file raggruppati e riassunti, così non devi cambiare scheda.`,manager:`Installa un gestore di userscript: {tampermonkey} o {violentmonkey}.`,install:`Installa lo userscript di pulls.review. Il gestore ti chiederà di confermare.`,open:`Apri una qualsiasi pull request su github.com e fai clic sulla scheda {tab} accanto a "Files changed".`,ai:`github.com blocca le richieste necessarie all'analisi IA, quindi il pannello mostra le analisi condivise come commenti della PR. Apri la PR su pulls.review per avviarne una nuova.`},bookmarklet:{title:`Passa da github.com a pulls.review`,intro:`Un bookmarklet è un preferito che esegue un piccolo script. Funziona in qualsiasi browser, senza estensioni da installare, e apre la pagina corrente sull'altro sito.`,bar:`Mostra la barra dei preferiti, ad esempio con {shortcut}.`,drag:`Trascina questo pulsante nella barra dei preferiti:`,use:`Su una pagina di pull request, commit o confronto su github.com, fai clic sul preferito per aprirla su pulls.review. Fai di nuovo clic per tornare indietro.`},actions:{title:`Analisi automatica con GitHub Actions`,intro:`Lascia che la CI analizzi ogni pull request una volta, appena viene aperta o aggiornata. Chiunque apra la PR, qui o nel pannello su github.com, vede subito lo stesso riassunto raggruppato. Nessuno ha bisogno della propria chiave del modello, e anche le pull request dai fork lo ricevono.`,secret:`Aggiungi la chiave del modello come secret del repository, ad esempio {name}.`,workflow:`Aggiungi questo workflow al repository:`,result:`Apri o aggiorna una pull request per provarlo. L'analisi arriva come commento, e le riesecuzioni su una PR invariata saltano la chiamata al modello.`,options:`Il {provider} viene dedotto dalla chiave. Imposta {provider}, {model} o {locale} per cambiarlo. Tutte le opzioni sono nel {readme}.`},cli:{title:`Rivedi le modifiche git locali con la CLI`,intro:`Rivedi la tua modifica prima di chiunque altro. La CLI apre in pulls.review il tuo branch, un commit o il lavoro non ancora committato, così vedi come si legge la modifica, raggruppata e riassunta, prima del push o di aprire una PR.`,branch:`In un repository git, esegui questo per rivedere il branch corrente rispetto al branch predefinito:`,target:`Oppure scegli cosa rivedere:`,browser:`Apre {url} nel browser per visualizzare le tue modifiche locali. Conferma la scheda con il codice monouso stampato nel terminale. Da lì puoi anche scegliere altri branch o commit da confrontare.`}},r={title:`Carica un diff`,description:`Incolla o trascina un file unified diff / .patch per revisionarlo.`,pasteLabel:`Incolla un unified diff / .patch`,chooseFile:`Oppure scegli un file .diff/.patch`,loadButton:`Carica diff`,parsing:`Analisi del diff…`,parseFailed:`Impossibile analizzare questo diff`,noDiff:`Nessun diff caricato`,noDiffHint:`Torna alla home e usa il pulsante di caricamento per incollare o trascinare un diff.`,goHome:`Vai alla home`},i={loading:`Caricamento della pull request…`,loadFailed:`Impossibile caricare questa pull request`,somethingWrong:`Qualcosa è andato storto`,newCommits:`Questa pull request ha nuovi commit da quando è stata memorizzata in cache.`,autoRefreshNextTime:`Aggiorna automaticamente la prossima volta`,endOfDiff:`Hai raggiunto la fine del diff.`,analyzeBy:`Analizza con`,rules:`Regole`,ai:`IA`,by:`di`,sharedBy:`Analisi IA condivisa da`,sharedAnalysis:`Analisi condivisa`,reviewedOf:`/ {total} revisionati`,openInSite:`Apri in pulls.review`},a={reviewChanges:`Revisiona le modifiche`,updateUserscript:`Aggiorna lo userscript`},o={loading:`Caricamento delle pull request…`,loadFailed:`Impossibile caricare le pull request`,open:`{n} aperte`,search:`Filtra le pull request`,empty:`Non ci sono pull request aperte`,noMatches:`Nessuna pull request corrisponde alla ricerca`,searchingAll:`Ricerca tra tutte le {n} pull request aperte…`,loadingMore:`Caricamento…`,openedBy:`aperta {time} da {author}`,milestone:`Milestone`,comments:`{n} commento | {n} commenti`,linkedIssues:`{n} issue collegata | {n} issue collegate`,assignedTo:`Assegnata a {login}`,groups:`{n} gruppo | {n} gruppi`,viewedHint:`Vista in questo browser`,aiAvailable:`Analisi IA disponibile`,sort:{label:`Ordina`,"recently-updated":`Aggiornate di recente`,"least-recently-updated":`Aggiornate meno di recente`,newest:`Più recenti`,oldest:`Più vecchie`,"most-commented":`Più commentate`,"least-commented":`Meno commentate`},review:{approved:`Approvata`,changes_requested:`Modifiche richieste`,review_required:`Revisione richiesta`},checks:{success:`Tutti i controlli superati`,failure:`Alcuni controlli non sono riusciti`,pending:`Alcuni controlli non sono ancora completati`}},s={setupKeys:`Configura le chiavi API`,analyzing:`Analisi in corso…`,failed:`Analisi fallita`,failedTitle:`Analisi IA fallita: {message}`,reanalyze:`Analizza di nuovo`,withAi:`Analizza con l'IA`,statusTitle:`Analisi IA`,starting:`Avvio…`,thinking:`Sto pensando… (passo {step})`,reading:`Lettura di {n} file: {first} | Lettura di {n} file: {first}`,organizing:`Organizzazione dei gruppi…`,notConfigured:`L'analisi IA non è configurata: aggiungi un token gateway o un'API key del fornitore nelle Impostazioni`,chatFailed:`Richiesta della chat fallita`,agentSessionLost:`L’agente non ha più questa conversazione. Rianalizza per chattare.`},c={button:`Condividi risultato`,updateButton:`Aggiorna il commento condiviso`,sharing:`Condivisione…`,tooltip:`Pubblica questa analisi come commento nella pull request così che altri possano caricarla`,needsToken:`Per condividere serve un token GitHub con accesso in scrittura`,failed:`Condivisione fallita: {message}`,titleUpdate:`Aggiorna la tua analisi condivisa`,titleShare:`Condividi questa analisi su GitHub`,willUpdate:`Il tuo {comment} esistente in questa pull request sarà aggiornato come {user} con il tuo token GitHub.`,willPost:`Un commento pubblico sarà pubblicato in questa pull request come {user} con il tuo token GitHub.`,commentLink:`commento`,contains:`Il commento contiene:`,containsLink:`un link per aprire questa revisione su {site}`,containsJson:`il raggruppamento e i riassunti di questa analisi IA come JSON in un blocco ripiegato`,excludes:`I tuoi messaggi di chat, le chiavi API o qualsiasi altro dato delle impostazioni non saranno inclusi.`,anyoneCanLoad:`Chiunque veda la pull request può caricare l'analisi condivisa.`,englishRecommended:`Se lavori a un progetto pubblico, ti consigliamo di condividere il risultato in inglese per renderlo utile alla community.`,share:`Condividi`,update:`Aggiorna`,shareAnyway:`Condividi comunque`,updateAnyway:`Aggiorna comunque`,loadReplaces:`Caricare un'analisi IA condivisa? Sostituirà la tua:`,available:`Analisi IA condivise disponibili per questa pull request:`,staleTitle:`Analizzata prima degli ultimi commit`,outdated:`(obsoleta)`,inLanguage:`Analizzata in {language}`,notShared:`{login} non ha condiviso un'analisi di questa pull request.`},l={toggle:`Espandi o comprimi il gruppo`,filesReviewed:`{reviewed} / {total} file revisionati`,subgroupsOf:`sottogruppi di`,hideSubgroups:`Nascondi sottogruppi`,showSubgroups:`Mostra sottogruppi`,navTabs:`Mostra i gruppi come schede`,navSidebar:`Mostra i gruppi come barra laterale`,uncategorized:`Non categorizzati`,uncategorizedSummary:`File non coperti dall'analisi attuale.`},u={critical:`Rivedere con attenzione`},d={layoutTree:`Mostra i file come albero`,layoutList:`Mostra i file come elenco`,markReviewed:`Segna come revisionato`,markFolderReviewed:`Segna tutti i file in {name} come revisionati`,changedSinceReviewed:`Questo file era già stato revisionato, ma è cambiato in commit successivi`,resolved:`{n} risolti`,binary:`File binario`,binaryNotShown:`File binario non mostrato.`,tooLarge:`Diff troppo grande per essere mostrato.`,loadFailed:`Caricamento fallito`,loadFull:`Carica il contenuto completo del file`,expand:`Espandi file`,collapse:`Comprimi file`,collapseMenu:`Espandi o comprimi file`,expandAll:`Espandi tutti i file`,collapseAll:`Comprimi tutti i file`,collapseReviewed:`Comprimi i file revisionati`,noLongerInDiff:`Non è più in questo diff`,removed:`rimosso`},f={title:`Avanzamento della revisione`,markAll:`Segna tutti come revisionati`,reset:`Reimposta lo stato di revisione`,invert:`Inverti lo stato di revisione`,status:{reviewed:`Revisionato`,changed:`Cambiato dopo la revisione`,unreviewed:`Non revisionato`}},p={added:`aggiunto`,removed:`rimosso`,modified:`modificato`,renamed:`rinominato`,copied:`copiato`},m={open:`aperta`,draft:`bozza`,closed:`chiusa`,merged:`unita`},h={ui:`UI`,api:`API`,core:`core`,data:`dati`,cli:`CLI`,security:`sicurezza`,tests:`test`,docs:`documentazione`,examples:`esempi`,deps:`dipendenze`,build:`build`,scripts:`script`,config:`configurazione`,i18n:`i18n`,assets:`risorse`,other:`altro`},g={addReview:`Aggiungi revisione`,hideComments:`Nascondi i commenti di revisione`,showComments:`Mostra i commenti di revisione`,reviews:`Revisioni`,approved:`ha approvato`,changesRequested:`ha richiesto modifiche`,commented:`ha commentato`,dismissed:`revisione respinta`,reviewChanges:`Revisiona le modifiche`,includesPending:`L'invio include il tuo {n} commento in sospeso. | L'invio include i tuoi {n} commenti in sospeso.`,summaryPlaceholder:`Lascia un riepilogo (facoltativo per approvare)`,comment:`Commenta`,approve:`Approva`,requestChanges:`Richiedi modifiche`,discard:`Scarta revisione`,leaveComment:`Lascia un commento`,addSingle:`Aggiungi commento singolo`,addToReview:`Aggiungi commento di revisione`,startReview:`Inizia una revisione`,pending:`In sospeso`,editComment:`Modifica commento`,deleteComment:`Elimina commento`,replyPlaceholder:`Rispondi…`,resolve:`Risolvi`},_={title:`Chiedi su questa PR`,collapse:`Riduci`,reanalyzeToEnable:`Analizza di nuovo per abilitare la chat`,thinking:`Sto pensando…`,placeholder:`Chiedi su questa PR…`,updatedGrouping:`Raggruppamento aggiornato: {n} gruppi`,readFiles:`Letto {n} file | Letti {n} file`,updatingGrouping:`Aggiornamento del raggruppamento…`,submittingGrouping:`Invio del raggruppamento…`,requestFailed:`Richiesta fallita`,stopped:`fermato`},v={layout:`Layout del diff`,wrapLines:`Vai a capo automaticamente`,unified:`Unificato`,split:`Affiancato`,syntaxTheme:{label:`Tema della sintassi`,light:`Modalità chiara`,dark:`Modalità scura`},cached:`Pull request in cache`,autoRefresh:`Aggiorna automaticamente quando vengono trovati nuovi commit`,language:`Lingua`,token:{label:`Token di accesso personale GitHub`,optional:`Facoltativo per i repository pubblici; necessario per i repository privati o per lasciare revisioni.`,scopes:`Le revisioni richiedono lo scope {repo} (token classico) o {fineGrained} (token granulare)`,storedLocally:`Salvato solo in questo browser.`,generate:`Generane uno su GitHub →`,fineGrained:`Token granulare (senza scope classici)`,updated:`Aggiornato`,expires:`Scade`,neverExpires:`Non scade mai`,change:`Cambia token`,checking:`Verifica del token…`,couldNotVerify:`Impossibile verificare questo token.`},tabs:{appearance:`Aspetto`,behavior:`Comportamento`,github:`GitHub`,ai:`Analisi IA`,notSetUp:`Non ancora configurato`},llm:{title:`Analisi IA`,description:`Configura un fornitore di modelli per abilitare i riassunti generati dall'IA. Salvato solo in questo browser e inviato solo al fornitore che scegli.`,provider:`Fornitore`,baseUrl:`URL base`,baseUrlDescription:`Qualsiasi endpoint chat completions compatibile con OpenAI (OpenAI stessa, un server locale, ecc.).`,apiKey:`API key`,gatewayHint:`Un token {link}, che raggiunge tutti i vendor supportati con un solo token.`,anthropicHint:`Una {link}, chiamata direttamente da questo browser (senza gateway).`,anthropicLink:`API key Anthropic`,openaiHint:`L'API key per l'endpoint indicato sopra.`,createKey:`Creane una su {provider} →`,configured:`Configurata`,changeKey:`Cambia chiave`,model:`Modello`,modelListFailed:`Impossibile caricare l'elenco dei modelli ({error}). Inserisci un id di modello manualmente.`,embedUnavailable:`Le funzioni IA non sono disponibili in modalità incorporata`,embedReason:`La rigida CSP di github.com blocca le richieste necessarie alle funzioni IA. {link} per usarle.`,goToWebsite:`Vai al sito`,agent:`Agente`,agentNeedsCli:"Gli agenti locali girano nella CLI di pulls.review: avviala in un repository con `npx pulls.review` e scegline uno lì.",agentDetecting:`Ricerca delle CLI degli agenti…`,agentNone:`Nessuna CLI di agente trovata su questa macchina.`,agentHint:`Un agente di codice installato su questa macchina, con il proprio account: {claude} o {opencode}. Legge la patch e il repository, non scrive mai.`,agentPick:`Scegli un agente…`},models:{placeholder:`id del modello`,loading:`Caricamento dei modelli…`,search:`Cerca modelli…`,noMatch:`Nessun modello corrispondente`,useCustom:`Usa “{id}”`,free:`Gratis`,priceTitle:`Input {input}/M · Output {output}/M token`,agentDefault:`Predefinito dell’agente`}},y={allFiles:`Tutti i file`,code:{label:`Codice`,summary:`Modifiche al codice sorgente.`},other:{label:`Altro`,summary:`Altre modifiche che non rientrano in una categoria esistente.`},docs:{label:`Documentazione`,summary:`Aggiornamenti della documentazione.`},tests:{label:`Test`,summary:`Copertura dei test per la modifica.`},config:{label:`Configurazione`,summary:`Modifiche di configurazione.`},deps:{label:`Dipendenze`,summary:`Modifiche di versione delle dipendenze.`},generated:{label:`Generati`,summary:`Modifiche a file generati o di build.`}},b={tokenRequired:`Serve un token GitHub per scrivere in questa pull request.`,diffNotLoaded:`Il diff non ha ancora finito di caricarsi.`,noViewer:`Impossibile determinare l'utente GitHub di questo token.`,tokenRejected:`GitHub ha rifiutato questo token (401). Controlla che sia stato incollato per intero e che non sia stato revocato.`,tooLarge:`L'analisi è troppo grande per essere condivisa come commento ({n} caratteri).`},x={loading:`Caricamento delle modifiche locali…`,loadFailed:`Impossibile caricare queste modifiche`,auth:{title:`Inserisci il codice dal terminale`,hint:`pulls.review ha stampato un codice di 6 cifre nel terminale in cui è in esecuzione.`,invalid:`Quel codice non ha funzionato. Controlla il terminale e riprova.`,submit:`Continua`},picker:{tagline:`Revisiona branch locali, intervalli e modifiche non committate come una pull request: raggruppati, riassunti, un ambito alla volta.`,title:`Revisiona le modifiche locali`,base:`Base`,head:`Head`,compare:`Confronta`,shortcuts:`Scorciatoie`,worktree:`Modifiche non committate`,recentCommits:`Commit recenti`,branches:`Branch`,against:`rispetto a {base}`,current:`Branch attuale`,github:`Oppure una pull request, un confronto o un commit GitHub`}},S={common:e,landing:t,guide:n,load:r,pr:i,embed:a,pulls:o,analyze:s,share:c,group:l,note:u,file:d,reviewProgress:f,fileStatus:p,prState:m,category:h,review:g,chat:_,settings:v,rules:y,errors:b,local:x};export{s as analyze,h as category,_ as chat,e as common,S as default,a as embed,b as errors,d as file,p as fileStatus,l as group,n as guide,t as landing,r as load,x as local,u as note,i as pr,m as prState,o as pulls,g as review,f as reviewProgress,y as rules,v as settings,c as share};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={cancel:`キャンセル`,save:`保存`,remove:`削除`,retry:`再試行`,close:`閉じる`,dismiss:`閉じる`,refresh:`更新`,settings:`設定`,you:`あなた`,loading:`読み込み中…`,send:`送信`,stop:`停止`,clear:`クリア`,reply:`返信`,submit:`送信`,abort:`中止`,rerun:`再実行`,files:`{n} ファイル`,subgroups:`{n} サブグループ`,githubRepository:`GitHub リポジトリ`,avatar:`{login} のアバター`},t={dropHint:`ドロップして diff / .patch ファイルを読み込む`,tagline:`変更ファイルをグループ化し、要点を要約して、スコープごとにレビュー。すべてブラウザ内でローカルに動作します。`,documentTitle:`プルリクエストのレビューを、明快に、整理して`,open:`開く`,pasteHint:`GitHub の pull request URL を貼り付けるか、下のデモを選んでください。`,recentlyViewed:`// 最近見たもの`,recentRepositories:`// 最近見たリポジトリ`,tryDemos:`// デモを試す`,demoBefore:`// 変更前`,demoAfter:`// 変更後`,moreFiles:`... 他 {n} ファイル`,demoTitle:`feat: AI 分析を PR コメントとして共有し、共有結果を読み込む`,demoSummary:`API キーを持つレビュアー 1 人が分析を PR に投稿すれば、他の全員がトークンなしで読み込めます。`,demoGroups:{store:`共有分析ストアとコメント契約`,ui:`結果共有 UI`,refactor:`ストア再構成:結果をルートへ`,tests:`テスト`,docs:`ドキュメントと依存関係`},uploadTitle:`PR なしで diff をレビュー`,uploadDescription:`unified diff をアップロードまたは貼り付けるか、{diff} / {patch} ファイルをこのページのどこかにドロップしてください。`,uploadButton:`diff をアップロード`,embedTitle:`github.com に埋め込んで使う`,embedDescription:`{tampermonkey} または {violentmonkey} をインストールすると、すべての pull request ページに pulls.review のドロワーが表示されます。`,installUserscript:`ユーザースクリプトをインストール`,bookmarkletTitle:`github.com と pulls.review を行き来する`,bookmarkletDescription:`拡張機能をインストールできない場合は、このブックマークレットをブックマークバーにドラッグしてください。現在のプルリクエストを pulls.review で開き、また戻れます。`,bookmarkletDrag:`ブックマークバーにドラッグ`,actionsTitle:`GitHub Actions で自動解析を設定する`,actionsDescription:`CI で各プルリクエストを一度だけ解析し、結果を PR コメントとして投稿します。レビュアーごとにモデルのキーを用意する必要はありません。`,cliTitle:`CLI でローカルの git の変更に使う`,cliDescription:`push する前に、ワーキングツリー・コミット・ブランチを PR と同じようにグループ化・要約してレビューできます。`,viewGuide:`ガイドを見る`},n={userscript:{title:`pulls.review を github.com に埋め込んで使う`,intro:`ユーザースクリプトは github.com のプルリクエストページに pulls.review のパネルを直接追加し、グループ化されたファイルと要約を表示します。タブを切り替える必要はありません。`,manager:`ユーザースクリプトマネージャーをインストールします: {tampermonkey} または {violentmonkey}。`,install:`pulls.review のユーザースクリプトをインストールします。マネージャーが確認を求めます。`,open:`github.com で任意のプルリクエストを開き、"Files changed" の隣にある {tab} タブをクリックします。`,ai:`github.com は AI 解析に必要なリクエストをブロックするため、パネルには PR コメントとして共有された解析が表示されます。新しく解析するには pulls.review で PR を開いてください。`},bookmarklet:{title:`github.com と pulls.review を行き来する`,intro:`ブックマークレットは小さなスクリプトを実行するブックマークです。拡張機能なしでどのブラウザでも動作し、表示中のページをもう一方のサイトで開きます。`,bar:`ブックマークバーを表示します(例: {shortcut})。`,drag:`このボタンをブックマークバーにドラッグします:`,use:`github.com のプルリクエスト、コミット、比較ページでブックマークをクリックすると pulls.review で開きます。もう一度クリックすると戻ります。`},actions:{title:`GitHub Actions で自動解析`,intro:`プルリクエストが作成・更新されるたびに、CI が一度だけ解析します。PR を開いた人は、ここでも github.com のパネルでも、同じグループ化された要約をすぐに確認できます。各自のモデルのキーは不要で、フォークからのプルリクエストにも対応します。`,secret:`モデルのキーをリポジトリのシークレットとして追加します (例: {name})。`,workflow:`このワークフローをリポジトリに追加します:`,result:`プルリクエストを作成・更新して試してみましょう。解析結果はコメントとして届き、変更のない PR で再実行してもモデルは呼び出されません。`,options:`{provider} はキーから推定されます。上書きするには {provider}、{model}、{locale} を指定します。すべてのオプションは {readme} を参照してください。`},cli:{title:`CLI でローカルの git の変更をレビュー`,intro:`誰かにレビューされる前に、自分の変更を見直しましょう。CLI はブランチ、コミット、未コミットの作業を pulls.review で開きます。push や PR 作成の前に、変更がグループ化・要約されてどう見えるかを確認できます。`,branch:`git リポジトリ内でこれを実行すると、現在のブランチをデフォルトブランチと比較してレビューできます:`,target:`または、レビューする対象を選べます:`,browser:`ブラウザで {url} が開き、ローカルの変更を可視化します。ターミナルに表示されたワンタイムコードでタブを確認してください。そこから他のブランチやコミットを選んで比較することもできます。`}},r={title:`diff を読み込む`,description:`unified diff / .patch ファイルを貼り付けるかドロップしてレビューします。`,pasteLabel:`unified diff / .patch を貼り付け`,chooseFile:`または .diff/.patch ファイルを選択`,loadButton:`diff を読み込む`,parsing:`diff を解析中…`,parseFailed:`この diff を解析できませんでした`,noDiff:`diff が読み込まれていません`,noDiffHint:`ホームページに戻り、アップロードボタンから diff を貼り付けるかドロップしてください。`,goHome:`ホームへ`},i={loading:`pull request を読み込み中…`,loadFailed:`この pull request を読み込めませんでした`,somethingWrong:`問題が発生しました`,newCommits:`キャッシュ後にこの pull request に新しいコミットがあります。`,autoRefreshNextTime:`次回から自動更新`,endOfDiff:`diff の末尾に到達しました。`,analyzeBy:`分析方法`,rules:`ルール`,ai:`AI`,by:`作成者`,sharedBy:`共有された AI 分析を表示中:`,sharedAnalysis:`共有された分析を表示中`,reviewedOf:`/ {total} レビュー済み`,openInSite:`pulls.review で開く`},a={reviewChanges:`変更をレビュー`,updateUserscript:`ユーザースクリプトを更新`},o={loading:`pull request を読み込み中…`,loadFailed:`pull request を読み込めませんでした`,open:`{n} 件オープン`,search:`pull request を絞り込む`,empty:`オープンな pull request はありません`,noMatches:`検索に一致する pull request はありません`,searchingAll:`{n} 件のオープンな pull request をすべて検索中…`,loadingMore:`さらに読み込み中…`,openedBy:`{author} が {time}に作成`,milestone:`マイルストーン`,comments:`{n} 件のコメント`,linkedIssues:`{n} 件の関連 issue`,assignedTo:`{login} に割り当て`,groups:`{n} グループ`,viewedHint:`このブラウザで閲覧済み`,aiAvailable:`AI 分析あり`,sort:{label:`並べ替え`,"recently-updated":`最近更新された順`,"least-recently-updated":`更新が古い順`,newest:`新しい順`,oldest:`古い順`,"most-commented":`コメントが多い順`,"least-commented":`コメントが少ない順`},review:{approved:`承認済み`,changes_requested:`変更が要求されています`,review_required:`レビューが必要`},checks:{success:`すべてのチェックに合格`,failure:`一部のチェックが失敗`,pending:`一部のチェックが未完了`}},s={setupKeys:`API キーを設定`,analyzing:`分析中…`,failed:`分析に失敗`,failedTitle:`AI 分析に失敗しました:{message}`,reanalyze:`再分析`,withAi:`AI で分析`,statusTitle:`AI 分析`,starting:`開始中…`,thinking:`思考中…(ステップ {step})`,reading:`{n} ファイルを読み取り中:{first}`,organizing:`グループを整理中…`,notConfigured:`AI 分析が設定されていません:設定で gateway トークンまたはベンダーの API キーを追加してください`,chatFailed:`チャットのリクエストに失敗しました`,agentSessionLost:`エージェントはこの会話を保持していません。再分析するとチャットできます。`},c={button:`結果を共有`,updateButton:`共有コメントを更新`,sharing:`共有中…`,tooltip:`この分析を pull request のコメントとして投稿し、他の人が読み込めるようにします`,needsToken:`共有には書き込み権限のある GitHub トークンが必要です`,failed:`共有に失敗しました:{message}`,titleUpdate:`共有した分析を更新`,titleShare:`この分析を GitHub で共有`,willUpdate:`この pull request 上の既存の{comment}を、あなたの GitHub トークンで {user} として更新します。`,willPost:`この pull request に、あなたの GitHub トークンで {user} として公開コメントを投稿します。`,commentLink:`コメント`,contains:`コメントの内容:`,containsLink:`{site} でこのレビューを開くリンク`,containsJson:`この AI 分析のグループ分けと要約(折りたたみブロック内の JSON)`,excludes:`チャットのメッセージ、API キー、その他設定の内容は含まれません。`,anyoneCanLoad:`この pull request を見る誰でも共有された分析を読み込めます。`,englishRecommended:`公開プロジェクトで作業している場合は、コミュニティの役に立つよう英語で結果を共有することをおすすめします。`,share:`共有`,update:`更新`,shareAnyway:`このまま共有`,updateAnyway:`このまま更新`,loadReplaces:`共有された AI 分析を読み込みますか?あなたの分析は置き換えられます:`,available:`この pull request に共有された AI 分析があります:`,staleTitle:`最新のコミットより前に分析`,outdated:`(古い)`,inLanguage:`{language}で分析`,notShared:`{login} はこの pull request の分析を共有していません。`},l={toggle:`グループを開閉`,filesReviewed:`{reviewed} / {total} ファイルをレビュー済み`,subgroupsOf:`サブグループ:`,hideSubgroups:`サブグループを隠す`,showSubgroups:`サブグループを表示`,navTabs:`グループをタブで表示`,navSidebar:`グループをサイドバーで表示`,uncategorized:`未分類`,uncategorizedSummary:`現在の分析に含まれていないファイル。`},u={critical:`慎重にレビュー`},d={layoutTree:`ファイルをツリーで表示`,layoutList:`ファイルをリストで表示`,markReviewed:`レビュー済みにする`,markFolderReviewed:`{name} 内のすべてのファイルをレビュー済みにする`,changedSinceReviewed:`このファイルはレビュー済みでしたが、その後のコミットで変更されました`,resolved:`{n} 件解決済み`,binary:`バイナリファイル`,binaryNotShown:`バイナリファイルは表示されません。`,tooLarge:`差分が大きすぎるため表示できません。`,loadFailed:`読み込み失敗`,loadFull:`ファイル全体を読み込む`,expand:`ファイルを展開`,collapse:`ファイルを折りたたむ`,collapseMenu:`ファイルの展開/折りたたみ`,expandAll:`すべてのファイルを展開`,collapseAll:`すべてのファイルを折りたたむ`,collapseReviewed:`レビュー済みのファイルを折りたたむ`,noLongerInDiff:`この diff にはもう含まれていません`,removed:`削除済み`},f={title:`レビューの進捗`,markAll:`すべてレビュー済みにする`,reset:`レビュー状態をリセット`,invert:`レビュー状態を反転`,status:{reviewed:`レビュー済み`,changed:`レビュー後に変更あり`,unreviewed:`未レビュー`}},p={added:`追加`,removed:`削除`,modified:`変更`,renamed:`リネーム`,copied:`コピー`},m={open:`オープン`,draft:`ドラフト`,closed:`クローズ`,merged:`マージ済み`},h={ui:`UI`,api:`API`,core:`コア`,data:`データ`,cli:`CLI`,security:`セキュリティ`,tests:`テスト`,docs:`ドキュメント`,examples:`サンプル`,deps:`依存関係`,build:`ビルド`,scripts:`スクリプト`,config:`設定`,i18n:`i18n`,assets:`アセット`,other:`その他`},g={addReview:`レビューを追加`,hideComments:`レビューコメントを隠す`,showComments:`レビューコメントを表示`,reviews:`レビュー`,approved:`承認`,changesRequested:`変更をリクエスト`,commented:`コメント`,dismissed:`レビューを取り下げ`,reviewChanges:`変更をレビュー`,includesPending:`送信には保留中のコメント {n} 件が含まれます。`,summaryPlaceholder:`まとめを書く(承認の場合は省略可)`,comment:`コメント`,approve:`承認`,requestChanges:`変更をリクエスト`,discard:`レビューを破棄`,leaveComment:`コメントを書く`,addSingle:`単独コメントを追加`,addToReview:`レビューコメントを追加`,startReview:`レビューを開始`,pending:`保留中`,editComment:`コメントを編集`,deleteComment:`コメントを削除`,replyPlaceholder:`返信…`,resolve:`解決済みにする`},_={title:`この PR について質問`,collapse:`折りたたむ`,reanalyzeToEnable:`チャットを有効にするには再分析してください`,thinking:`思考中…`,placeholder:`この PR について質問…`,updatedGrouping:`グループ分けを更新:{n} グループ`,readFiles:`{n} ファイルを読み取り`,updatingGrouping:`グループ分けを更新中…`,submittingGrouping:`グループ分けを送信中…`,requestFailed:`リクエストに失敗しました`,stopped:`停止`},v={layout:`diff レイアウト`,wrapLines:`行を折り返す`,unified:`統合`,split:`分割`,syntaxTheme:{label:`シンタックステーマ`,light:`ライトモード`,dark:`ダークモード`},cached:`キャッシュされた pull request`,autoRefresh:`新しいコミットが見つかったら自動更新`,language:`言語`,token:{label:`GitHub 個人アクセストークン`,optional:`公開リポジトリでは任意。非公開リポジトリやレビュー投稿には必須です。`,scopes:`レビューには {repo} スコープ(クラシックトークン)または {fineGrained}(fine-grained トークン)が必要です`,storedLocally:`このブラウザにのみ保存されます。`,generate:`GitHub で生成 →`,fineGrained:`fine-grained トークン(クラシックスコープなし)`,updated:`更新`,expires:`有効期限`,neverExpires:`無期限`,change:`トークンを変更`,checking:`トークンを確認中…`,couldNotVerify:`このトークンを検証できませんでした。`},tabs:{appearance:`外観`,behavior:`動作`,github:`GitHub`,ai:`AI 分析`,notSetUp:`未設定`},llm:{title:`AI 分析`,description:`モデルプロバイダーを設定すると AI 生成の要約が有効になります。このブラウザにのみ保存され、選択したプロバイダーにのみ送信されます。`,provider:`プロバイダー`,baseUrl:`Base URL`,baseUrlDescription:`OpenAI 互換の chat completions エンドポイント(OpenAI 本体、ローカルサーバーなど)。`,apiKey:`API キー`,gatewayHint:`{link} のトークン。1 つのトークンで対応するすべてのベンダーにアクセスできます。`,anthropicHint:`{link}。このブラウザから直接呼び出します(gateway なし)。`,anthropicLink:`Anthropic API キー`,openaiHint:`上記エンドポイントの API キー。`,createKey:`{provider} で作成 →`,configured:`設定済み`,changeKey:`キーを変更`,model:`モデル`,modelListFailed:`モデル一覧を読み込めませんでした({error})。モデル id を手動で入力してください。`,embedUnavailable:`埋め込みモードでは AI 機能を利用できません`,embedReason:`github.com の厳しい CSP により、AI 機能に必要なリクエストがブロックされます。利用するには{link}。`,goToWebsite:`ウェブサイトへ`,agent:`エージェント`,agentNeedsCli:"ローカルエージェントは pulls.review CLI で動作します。リポジトリ内で `npx pulls.review` を起動し、そこで選択してください。",agentDetecting:`エージェント CLI を検索中…`,agentNone:`このマシンにエージェント CLI が見つかりません。`,agentHint:`このマシンにインストールされ、自身のアカウントでサインイン済みのコーディングエージェント({claude} または {opencode})。パッチとリポジトリを読むだけで、書き込みはしません。`,agentPick:`エージェントを選択…`},models:{placeholder:`モデル id`,loading:`モデルを読み込み中…`,search:`モデルを検索…`,noMatch:`一致するモデルがありません`,useCustom:`「{id}」を使う`,free:`無料`,priceTitle:`入力 {input}/M · 出力 {output}/M トークン`,agentDefault:`エージェントの既定`}},y={allFiles:`すべてのファイル`,code:{label:`コード`,summary:`ソースコードの変更。`},other:{label:`その他`,summary:`既存の分類に当てはまらないその他の変更。`},docs:{label:`ドキュメント`,summary:`ドキュメントの更新。`},tests:{label:`テスト`,summary:`この変更に対するテスト。`},config:{label:`設定`,summary:`設定の変更。`},deps:{label:`依存関係`,summary:`依存関係のバージョン変更。`},generated:{label:`生成物`,summary:`生成物やビルド成果物の変更。`}},b={tokenRequired:`この pull request に書き込むには GitHub トークンが必要です。`,diffNotLoaded:`diff の読み込みがまだ完了していません。`,noViewer:`このトークンの GitHub ユーザーを特定できませんでした。`,tokenRejected:`GitHub がこのトークンを拒否しました(401)。完全に貼り付けられているか、取り消されていないか確認してください。`,tooLarge:`分析が大きすぎてコメントとして共有できません({n} 文字)。`},x={loading:`ローカルの変更を読み込み中…`,loadFailed:`これらの変更を読み込めませんでした`,auth:{title:`ターミナルに表示されたコードを入力`,hint:`pulls.review は実行中のターミナルに 6 桁のコードを表示しました。`,invalid:`このコードは使用できませんでした。ターミナルを確認して、もう一度お試しください。`,submit:`続ける`},picker:{tagline:`ローカルのブランチ、範囲、未コミットの変更をプルリクエストのようにレビュー。グループ化して要約し、1 つずつ確認できます。`,title:`ローカルの変更をレビュー`,base:`ベース`,head:`ヘッド`,compare:`比較`,shortcuts:`ショートカット`,worktree:`コミットされていない変更`,recentCommits:`最近のコミット`,branches:`ブランチ`,against:`{base} に対して`,current:`チェックアウト中`,github:`または GitHub のプルリクエスト・比較・コミット`}},S={common:e,landing:t,guide:n,load:r,pr:i,embed:a,pulls:o,analyze:s,share:c,group:l,note:u,file:d,reviewProgress:f,fileStatus:p,prState:m,category:h,review:g,chat:_,settings:v,rules:y,errors:b,local:x};export{s as analyze,h as category,_ as chat,e as common,S as default,a as embed,b as errors,d as file,p as fileStatus,l as group,n as guide,t as landing,r as load,x as local,u as note,i as pr,m as prState,o as pulls,g as review,f as reviewProgress,y as rules,v as settings,c as share};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={cancel:`취소`,save:`저장`,remove:`제거`,retry:`다시 시도`,close:`닫기`,dismiss:`닫기`,refresh:`새로 고침`,settings:`설정`,you:`나`,loading:`불러오는 중…`,send:`보내기`,stop:`중지`,clear:`지우기`,reply:`답글`,submit:`제출`,abort:`중단`,rerun:`다시 실행`,files:`파일 {n}개`,subgroups:`하위 그룹 {n}개`,githubRepository:`GitHub 저장소`,avatar:`{login}의 아바타`},t={dropHint:`diff / .patch 파일을 놓아 불러오기`,tagline:`변경된 파일을 묶고 핵심을 요약해, 한 범위씩 리뷰합니다. 모든 것이 브라우저에서 로컬로 동작합니다.`,documentTitle:`명확하고 체계적인 풀 리퀘스트 리뷰`,open:`열기`,pasteHint:`GitHub pull request URL을 붙여 넣거나 아래 데모를 선택하세요.`,recentlyViewed:`// 최근 본 항목`,recentRepositories:`// 최근 본 저장소`,tryDemos:`// 데모 살펴보기`,demoBefore:`// 이전`,demoAfter:`// 이후`,moreFiles:`... 파일 {n}개 더`,demoTitle:`feat: AI 분석을 PR 댓글로 공유하고 공유된 결과 불러오기`,demoSummary:`API 키가 있는 리뷰어 한 명이 분석을 PR에 게시하면, 다른 모든 사람이 토큰 없이 불러올 수 있습니다.`,demoGroups:{store:`공유 분석 스토어 및 댓글 계약`,ui:`결과 공유 UI`,refactor:`스토어 리팩터링: 결과를 루트로`,tests:`테스트`,docs:`문서 및 의존성`},uploadTitle:`PR 없이 diff 리뷰하기`,uploadDescription:`unified diff를 업로드하거나 붙여 넣거나, {diff} / {patch} 파일을 이 페이지 어디든 놓으세요.`,uploadButton:`diff 업로드`,embedTitle:`github.com에 임베드해서 사용`,embedDescription:`{tampermonkey} 또는 {violentmonkey}를 설치하면 모든 pull request 페이지에 pulls.review 서랍이 나타납니다.`,installUserscript:`유저스크립트 설치`,bookmarkletTitle:`github.com과 pulls.review 간 이동`,bookmarkletDescription:`확장 프로그램을 설치할 수 없나요? 이 북마크릿을 북마크바로 드래그하면 현재 풀 리퀘스트를 pulls.review에서 열고 다시 돌아갈 수 있습니다.`,bookmarkletDrag:`북마크바로 드래그하세요`,actionsTitle:`GitHub Actions로 자동 분석 설정`,actionsDescription:`CI에서 모든 풀 리퀘스트를 한 번 분석하고 결과를 PR 댓글로 게시하므로, 리뷰어마다 모델 키가 필요하지 않습니다.`,cliTitle:`CLI로 로컬 git 변경 사항에 실행`,cliDescription:`push하기 전에 작업 트리, 커밋, 브랜치를 PR처럼 그룹화하고 요약해서 리뷰하세요.`,viewGuide:`가이드 보기`},n={userscript:{title:`github.com에 임베드해서 pulls.review 사용`,intro:`유저스크립트는 github.com의 풀 리퀘스트 페이지에 pulls.review 패널을 바로 추가해 그룹화된 파일과 요약을 보여 주므로, 탭을 바꿀 필요가 없습니다.`,manager:`유저스크립트 관리자를 설치하세요: {tampermonkey} 또는 {violentmonkey}.`,install:`pulls.review 유저스크립트를 설치하세요. 관리자가 확인을 요청합니다.`,open:`github.com에서 아무 풀 리퀘스트나 열고 "Files changed" 옆의 {tab} 탭을 클릭하세요.`,ai:`github.com은 AI 분석에 필요한 요청을 차단하므로, 패널에는 PR 댓글로 공유된 분석이 표시됩니다. 새로 분석하려면 pulls.review에서 PR을 여세요.`},bookmarklet:{title:`github.com과 pulls.review 간 이동`,intro:`북마크릿은 작은 스크립트를 실행하는 북마크입니다. 확장 프로그램 없이 모든 브라우저에서 동작하며, 현재 페이지를 다른 사이트에서 엽니다.`,bar:`북마크바를 표시하세요. 예: {shortcut}`,drag:`이 버튼을 북마크바로 드래그하세요:`,use:`github.com의 풀 리퀘스트, 커밋 또는 비교 페이지에서 북마크를 클릭하면 pulls.review에서 열립니다. 다시 클릭하면 돌아갑니다.`},actions:{title:`GitHub Actions로 자동 분석`,intro:`풀 리퀘스트가 열리거나 업데이트될 때마다 CI가 한 번만 분석합니다. 여기서든 github.com 패널에서든 PR을 여는 모든 사람이 같은 그룹화된 요약을 바로 봅니다. 누구도 자신의 모델 키가 필요 없고, 포크에서 온 풀 리퀘스트도 받을 수 있습니다.`,secret:`모델 키를 저장소 시크릿으로 추가하세요. 예: {name}.`,workflow:`이 워크플로를 저장소에 추가하세요:`,result:`풀 리퀘스트를 열거나 업데이트해서 사용해 보세요. 분석은 댓글로 게시되며, 변경 없는 PR에서 다시 실행하면 모델 호출을 건너뜁니다.`,options:`{provider}는 키에서 추론됩니다. 바꾸려면 {provider}, {model}, {locale}을 설정하세요. 모든 옵션은 {readme}를 참고하세요.`},cli:{title:`CLI로 로컬 git 변경 사항 리뷰`,intro:`다른 사람보다 먼저 자신의 변경을 리뷰하세요. CLI는 브랜치, 커밋, 커밋하지 않은 작업을 pulls.review에서 열어, push하거나 PR을 열기 전에 변경이 그룹화되고 요약된 모습을 확인할 수 있게 합니다.`,branch:`git 저장소에서 이 명령을 실행하면 현재 브랜치를 기본 브랜치와 비교해 리뷰합니다:`,target:`또는 리뷰할 대상을 고르세요:`,browser:`브라우저에서 {url}을 열어 로컬 변경 사항을 시각화합니다. 터미널에 출력된 일회용 코드로 탭을 확인하세요. 그곳에서 비교할 다른 브랜치나 커밋을 선택할 수도 있습니다.`}},r={title:`diff 불러오기`,description:`unified diff / .patch 파일을 붙여 넣거나 놓아 리뷰하세요.`,pasteLabel:`unified diff / .patch 붙여 넣기`,chooseFile:`또는 .diff/.patch 파일 선택`,loadButton:`diff 불러오기`,parsing:`diff 파싱 중…`,parseFailed:`이 diff를 파싱할 수 없습니다`,noDiff:`불러온 diff가 없습니다`,noDiffHint:`홈페이지로 이동해 업로드 버튼으로 diff를 붙여 넣거나 놓으세요.`,goHome:`홈으로`},i={loading:`pull request 불러오는 중…`,loadFailed:`이 pull request를 불러올 수 없습니다`,somethingWrong:`문제가 발생했습니다`,newCommits:`캐시 이후 이 pull request에 새 커밋이 있습니다.`,autoRefreshNextTime:`다음부터 자동 새로 고침`,endOfDiff:`diff의 끝에 도달했습니다.`,analyzeBy:`분석 방식`,rules:`규칙`,ai:`AI`,by:`작성자`,sharedBy:`다음 사용자가 공유한 AI 분석을 보고 있습니다:`,sharedAnalysis:`공유된 분석을 보고 있습니다`,reviewedOf:`/ {total} 리뷰 완료`,openInSite:`pulls.review에서 열기`},a={reviewChanges:`변경 사항 리뷰`,updateUserscript:`유저스크립트 업데이트`},o={loading:`pull request 불러오는 중…`,loadFailed:`pull request를 불러올 수 없습니다`,open:`{n}개 열림`,search:`pull request 필터`,empty:`열린 pull request가 없습니다`,noMatches:`검색과 일치하는 pull request가 없습니다`,searchingAll:`열린 pull request {n}개 전체를 검색하는 중…`,loadingMore:`더 불러오는 중…`,openedBy:`{author}님이 {time}에 열었습니다`,milestone:`마일스톤`,comments:`댓글 {n}개`,linkedIssues:`연결된 issue {n}개`,assignedTo:`{login}에게 할당됨`,groups:`{n}개 그룹`,viewedHint:`이 브라우저에서 본 PR`,aiAvailable:`AI 분석 있음`,sort:{label:`정렬`,"recently-updated":`최근 업데이트순`,"least-recently-updated":`오래된 업데이트순`,newest:`최신순`,oldest:`오래된순`,"most-commented":`댓글 많은 순`,"least-commented":`댓글 적은 순`},review:{approved:`승인됨`,changes_requested:`변경 요청됨`,review_required:`리뷰 필요`},checks:{success:`모든 검사 통과`,failure:`일부 검사 실패`,pending:`일부 검사가 아직 완료되지 않음`}},s={setupKeys:`API 키 설정`,analyzing:`분석 중…`,failed:`분석 실패`,failedTitle:`AI 분석 실패: {message}`,reanalyze:`다시 분석`,withAi:`AI로 분석`,statusTitle:`AI 분석`,starting:`시작 중…`,thinking:`생각 중… ({step}단계)`,reading:`파일 {n}개 읽는 중: {first}`,organizing:`그룹 정리 중…`,notConfigured:`AI 분석이 설정되지 않았습니다: 설정에서 gateway 토큰이나 공급자 API 키를 추가하세요`,chatFailed:`채팅 요청 실패`,agentSessionLost:`에이전트에 이 대화가 더 이상 없습니다. 다시 분석하면 채팅할 수 있습니다.`},c={button:`결과 공유`,updateButton:`공유한 댓글 업데이트`,sharing:`공유 중…`,tooltip:`이 분석을 pull request 댓글로 게시해 다른 사람이 불러올 수 있게 합니다`,needsToken:`공유하려면 쓰기 권한이 있는 GitHub 토큰이 필요합니다`,failed:`공유 실패: {message}`,titleUpdate:`공유한 분석 업데이트`,titleShare:`이 분석을 GitHub에 공유`,willUpdate:`이 pull request의 기존 {comment}이 GitHub 토큰을 사용해 {user} 계정으로 업데이트됩니다.`,willPost:`GitHub 토큰을 사용해 {user} 계정으로 이 pull request에 공개 댓글이 게시됩니다.`,commentLink:`댓글`,contains:`댓글에 포함되는 내용:`,containsLink:`{site}에서 이 리뷰를 열 수 있는 링크`,containsJson:`이 AI 분석의 그룹과 요약 (접힌 블록 안의 JSON)`,excludes:`채팅 메시지, API 키, 설정의 다른 내용은 포함되지 않습니다.`,anyoneCanLoad:`이 pull request를 보는 누구나 공유된 분석을 불러올 수 있습니다.`,englishRecommended:`공개 프로젝트에서 작업 중이라면 커뮤니티에 도움이 되도록 결과를 영어로 공유하는 것을 권장합니다.`,share:`공유`,update:`업데이트`,shareAnyway:`그래도 공유`,updateAnyway:`그래도 업데이트`,loadReplaces:`공유된 AI 분석을 불러올까요? 내 분석을 대체합니다:`,available:`이 pull request에 공유된 AI 분석이 있습니다:`,staleTitle:`최신 커밋 이전에 분석됨`,outdated:`(오래됨)`,inLanguage:`{language}로 분석됨`,notShared:`{login}님은 이 pull request의 분석을 공유하지 않았습니다.`},l={toggle:`그룹 접기/펼치기`,filesReviewed:`파일 {reviewed} / {total}개 리뷰 완료`,subgroupsOf:`하위 그룹:`,hideSubgroups:`하위 그룹 숨기기`,showSubgroups:`하위 그룹 표시`,navTabs:`그룹을 탭으로 표시`,navSidebar:`그룹을 사이드바로 표시`,uncategorized:`미분류`,uncategorizedSummary:`현재 분석에 포함되지 않은 파일.`},u={critical:`주의 깊게 검토`},d={layoutTree:`파일을 트리로 표시`,layoutList:`파일을 목록으로 표시`,markReviewed:`리뷰 완료로 표시`,markFolderReviewed:`{name}의 모든 파일을 리뷰 완료로 표시`,changedSinceReviewed:`이 파일은 이전에 리뷰했지만 이후 커밋에서 변경되었습니다`,resolved:`{n}개 해결됨`,binary:`바이너리 파일`,binaryNotShown:`바이너리 파일은 표시되지 않습니다.`,tooLarge:`diff가 너무 커서 표시할 수 없습니다.`,loadFailed:`불러오기 실패`,loadFull:`전체 파일 내용 불러오기`,expand:`파일 펼치기`,collapse:`파일 접기`,collapseMenu:`파일 펼치기/접기`,expandAll:`모든 파일 펼치기`,collapseAll:`모든 파일 접기`,collapseReviewed:`리뷰한 파일 접기`,noLongerInDiff:`더 이상 이 diff에 없음`,removed:`제거됨`},f={title:`리뷰 진행 상황`,markAll:`모두 리뷰 완료로 표시`,reset:`리뷰 상태 초기화`,invert:`리뷰 상태 반전`,status:{reviewed:`리뷰 완료`,changed:`리뷰 후 변경됨`,unreviewed:`리뷰 안 함`}},p={added:`추가됨`,removed:`삭제됨`,modified:`수정됨`,renamed:`이름 변경됨`,copied:`복사됨`},m={open:`열림`,draft:`초안`,closed:`닫힘`,merged:`병합됨`},h={ui:`UI`,api:`API`,core:`코어`,data:`데이터`,cli:`CLI`,security:`보안`,tests:`테스트`,docs:`문서`,examples:`예제`,deps:`의존성`,build:`빌드`,scripts:`스크립트`,config:`설정`,i18n:`i18n`,assets:`에셋`,other:`기타`},g={addReview:`리뷰 추가`,hideComments:`리뷰 댓글 숨기기`,showComments:`리뷰 댓글 표시`,reviews:`리뷰`,approved:`승인함`,changesRequested:`변경 요청함`,commented:`댓글 남김`,dismissed:`리뷰 철회됨`,reviewChanges:`변경 사항 리뷰`,includesPending:`제출하면 보류 중인 댓글 {n}개가 포함됩니다.`,summaryPlaceholder:`요약을 남기세요 (승인 시 선택)`,comment:`댓글`,approve:`승인`,requestChanges:`변경 요청`,discard:`리뷰 버리기`,leaveComment:`댓글 남기기`,addSingle:`단일 댓글 추가`,addToReview:`리뷰 댓글 추가`,startReview:`리뷰 시작`,pending:`보류 중`,editComment:`댓글 편집`,deleteComment:`댓글 삭제`,replyPlaceholder:`답글…`,resolve:`해결됨으로 표시`},_={title:`이 PR에 대해 질문`,collapse:`접기`,reanalyzeToEnable:`채팅을 사용하려면 다시 분석하세요`,thinking:`생각 중…`,placeholder:`이 PR에 대해 질문…`,updatedGrouping:`그룹 업데이트됨: {n}개 그룹`,readFiles:`파일 {n}개 읽음`,updatingGrouping:`그룹 업데이트 중…`,submittingGrouping:`그룹 제출 중…`,requestFailed:`요청 실패`,stopped:`중지됨`},v={layout:`Diff 레이아웃`,wrapLines:`줄 바꿈`,unified:`통합`,split:`분할`,syntaxTheme:{label:`구문 테마`,light:`라이트 모드`,dark:`다크 모드`},cached:`캐시된 pull request`,autoRefresh:`새 커밋이 발견되면 자동 새로 고침`,language:`언어`,token:{label:`GitHub 개인 액세스 토큰`,optional:`공개 저장소에는 선택 사항이며, 비공개 저장소나 리뷰 작성에는 필수입니다.`,scopes:`리뷰에는 {repo} 범위(클래식 토큰) 또는 {fineGrained}(세분화된 토큰)가 필요합니다`,storedLocally:`이 브라우저에만 저장됩니다.`,generate:`GitHub에서 생성 →`,fineGrained:`세분화된 토큰 (클래식 범위 없음)`,updated:`업데이트`,expires:`만료`,neverExpires:`만료 없음`,change:`토큰 변경`,checking:`토큰 확인 중…`,couldNotVerify:`이 토큰을 확인할 수 없습니다.`},tabs:{appearance:`모양`,behavior:`동작`,github:`GitHub`,ai:`AI 분석`,notSetUp:`아직 설정되지 않음`},llm:{title:`AI 분석`,description:`모델 공급자를 설정하면 AI 생성 요약이 활성화됩니다. 이 브라우저에만 저장되며 선택한 공급자에게만 전송됩니다.`,provider:`공급자`,baseUrl:`Base URL`,baseUrlDescription:`OpenAI 호환 chat completions 엔드포인트 (OpenAI 자체, 로컬 서버 등).`,apiKey:`API 키`,gatewayHint:`{link} 토큰 하나로 지원되는 모든 공급자를 사용할 수 있습니다.`,anthropicHint:`{link}. 이 브라우저에서 직접 호출합니다 (gateway 없음).`,anthropicLink:`Anthropic API 키`,openaiHint:`위 엔드포인트의 API 키.`,createKey:`{provider}에서 생성 →`,configured:`설정됨`,changeKey:`키 변경`,model:`모델`,modelListFailed:`모델 목록을 불러올 수 없습니다 ({error}). 모델 id를 직접 입력하세요.`,embedUnavailable:`임베드 모드에서는 AI 기능을 사용할 수 없습니다`,embedReason:`github.com의 엄격한 CSP가 AI 기능에 필요한 요청을 차단합니다. 사용하려면 {link}.`,goToWebsite:`웹사이트로 이동`,agent:`에이전트`,agentNeedsCli:"로컬 에이전트는 pulls.review CLI에서 실행됩니다. 저장소에서 `npx pulls.review`를 실행하고 거기서 선택하세요.",agentDetecting:`에이전트 CLI 찾는 중…`,agentNone:`이 컴퓨터에서 에이전트 CLI를 찾을 수 없습니다.`,agentHint:`이 컴퓨터에 설치되어 자체 계정으로 로그인된 코딩 에이전트({claude} 또는 {opencode})입니다. 패치와 저장소를 읽기만 하고 쓰지 않습니다.`,agentPick:`에이전트 선택…`},models:{placeholder:`모델 id`,loading:`모델 불러오는 중…`,search:`모델 검색…`,noMatch:`일치하는 모델이 없습니다`,useCustom:`“{id}” 사용`,free:`무료`,priceTitle:`입력 {input}/M · 출력 {output}/M 토큰`,agentDefault:`에이전트 기본값`}},y={allFiles:`모든 파일`,code:{label:`코드`,summary:`소스 변경.`},other:{label:`기타`,summary:`기존 분류에 맞지 않는 기타 변경.`},docs:{label:`문서`,summary:`문서 업데이트.`},tests:{label:`테스트`,summary:`이 변경에 대한 테스트.`},config:{label:`설정`,summary:`설정 변경.`},deps:{label:`의존성`,summary:`의존성 버전 변경.`},generated:{label:`생성 파일`,summary:`생성물 또는 빌드 산출물 변경.`}},b={tokenRequired:`이 pull request에 쓰려면 GitHub 토큰이 필요합니다.`,diffNotLoaded:`diff 불러오기가 아직 끝나지 않았습니다.`,noViewer:`이 토큰의 GitHub 사용자를 확인할 수 없습니다.`,tokenRejected:`GitHub가 이 토큰을 거부했습니다 (401). 완전히 붙여 넣었는지, 취소되지 않았는지 확인하세요.`,tooLarge:`분석이 너무 커서 댓글로 공유할 수 없습니다 ({n}자).`},x={loading:`로컬 변경 사항을 불러오는 중…`,loadFailed:`이 변경 사항을 불러올 수 없습니다`,auth:{title:`터미널에 표시된 코드를 입력하세요`,hint:`pulls.review가 실행 중인 터미널에 6자리 코드를 출력했습니다.`,invalid:`코드가 맞지 않습니다. 터미널을 확인하고 다시 시도하세요.`,submit:`계속`},picker:{tagline:`로컬 브랜치, 범위, 커밋되지 않은 변경 사항을 풀 리퀘스트처럼 리뷰하세요. 그룹으로 묶고 요약해 범위별로 살펴봅니다.`,title:`로컬 변경 사항 리뷰`,base:`베이스`,head:`헤드`,compare:`비교`,shortcuts:`바로가기`,worktree:`커밋되지 않은 변경 사항`,recentCommits:`최근 커밋`,branches:`브랜치`,against:`{base} 대비`,current:`체크아웃됨`,github:`또는 GitHub 풀 리퀘스트, 비교 또는 커밋`}},S={common:e,landing:t,guide:n,load:r,pr:i,embed:a,pulls:o,analyze:s,share:c,group:l,note:u,file:d,reviewProgress:f,fileStatus:p,prState:m,category:h,review:g,chat:_,settings:v,rules:y,errors:b,local:x};export{s as analyze,h as category,_ as chat,e as common,S as default,a as embed,b as errors,d as file,p as fileStatus,l as group,n as guide,t as landing,r as load,x as local,u as note,i as pr,m as prState,o as pulls,g as review,f as reviewProgress,y as rules,v as settings,c as share};
|