@hienlh/ppm 0.10.3 → 0.10.5
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/CHANGELOG.md +15 -0
- package/dist/web/assets/{ai-settings-section-LMO_cfIW.js → ai-settings-section-D2rONDPd.js} +1 -1
- package/dist/web/assets/{api-settings-CoKe_BdR.js → api-settings-C__hxGX2.js} +1 -1
- package/dist/web/assets/architecture-PBZL5I3N-DmL1WyG-.js +1 -0
- package/dist/web/assets/chat-tab-Dki1pz84.js +10 -0
- package/dist/web/assets/code-editor-D3AAT8nI.js +8 -0
- package/dist/web/assets/{conflict-editor-C28xnWqp.js → conflict-editor-Bxq4QiW1.js} +3 -3
- package/dist/web/assets/{database-viewer-DDGq5efK.js → database-viewer-CvQc1PZH.js} +2 -2
- package/dist/web/assets/{diff-viewer-DBELqMy0.js → diff-viewer-x7kjfVYW.js} +1 -1
- package/dist/web/assets/extension-webview-BFd0USXC.js +3 -0
- package/dist/web/assets/gitGraph-HDMCJU4V-D8vKfkjC.js +1 -0
- package/dist/web/assets/index-DPnjO2FY.css +2 -0
- package/dist/web/assets/index-DuEUN2Eg.js +26 -0
- package/dist/web/assets/info-3K5VOQVL-VG29MIoT.js +1 -0
- package/dist/web/assets/{input-CHRMley8.js → input-ClhO__YM.js} +1 -1
- package/dist/web/assets/keybindings-store-BkZjvU9J.js +1 -0
- package/dist/web/assets/{keybindings-store-D2N-Tq4N.js → keybindings-store-C9KsBH7z.js} +1 -1
- package/dist/web/assets/{markdown-renderer-CtsslbMO.js → markdown-renderer-CKmmrUuy.js} +3 -3
- package/dist/web/assets/packet-RMMSAZCW-Bl_WpvPc.js +1 -0
- package/dist/web/assets/pie-UPGHQEXC-BVpLpAIy.js +1 -0
- package/dist/web/assets/{port-forwarding-tab-BszAda9U.js → port-forwarding-tab-BUH9aImG.js} +1 -1
- package/dist/web/assets/{postgres-viewer-X2li3HfX.js → postgres-viewer-YkljtDWX.js} +2 -2
- package/dist/web/assets/{project-store-Ciq-cK1O.js → project-store-BYmQ0fDC.js} +1 -1
- package/dist/web/assets/radar-KQ55EAFF-CJGco43I.js +1 -0
- package/dist/web/assets/{scroll-area-DwWF9FpN.js → scroll-area-DW7L4Gnc.js} +1 -1
- package/dist/web/assets/settings-store-D9CflsKU.js +2 -0
- package/dist/web/assets/settings-tab-DfPjX9uY.js +1 -0
- package/dist/web/assets/{sql-query-editor-DZ9xskL8.js → sql-query-editor-CM_qEhaX.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-BV0p6qnR.js → sqlite-viewer-f6ZJHIzh.js} +1 -1
- package/dist/web/assets/{tab-store-DZbiYk7y.js → tab-store-B3M9hjho.js} +1 -1
- package/dist/web/assets/terminal-tab-CVdfvDSK.js +1 -0
- package/dist/web/assets/treemap-KZPCXAKY-BsOrObtE.js +1 -0
- package/dist/web/assets/{use-monaco-theme-OY18iXNi.js → use-monaco-theme-CvV5vy_F.js} +1 -1
- package/dist/web/assets/{vendor-mermaid-B2SLgECS.js → vendor-mermaid-CwOSbfhN.js} +1 -1
- package/dist/web/index.html +13 -13
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/packages/ext-git-graph/src/extension.ts +11 -4
- package/packages/ext-git-graph/src/webview-html.ts +22 -9
- package/src/server/routes/chat.ts +28 -3
- package/src/services/db.service.ts +36 -0
- package/src/services/extension-host-worker.ts +3 -2
- package/src/services/extension.service.ts +4 -2
- package/src/services/slash-discovery/cache.ts +38 -0
- package/src/services/slash-discovery/fuzzy-search.ts +12 -3
- package/src/services/slash-discovery/index.ts +9 -2
- package/src/services/slash-items.service.ts +1 -1
- package/src/services/supervisor-state.ts +13 -1
- package/src/services/supervisor.ts +4 -3
- package/src/web/components/chat/chat-tab.tsx +12 -2
- package/src/web/components/chat/message-input.tsx +24 -14
- package/src/web/components/chat/message-list.tsx +7 -14
- package/src/web/components/chat/slash-command-picker.tsx +120 -46
- package/src/web/components/extensions/extension-webview.tsx +7 -3
- package/src/web/lib/report-bug.ts +3 -2
- package/src/web/lib/ws-client.ts +4 -3
- package/src/web/stores/settings-store.ts +7 -3
- package/dist/web/assets/architecture-PBZL5I3N-CUZIB1Vq.js +0 -1
- package/dist/web/assets/chat-tab-lo46P4ZN.js +0 -10
- package/dist/web/assets/code-editor-DN0UiBvk.js +0 -8
- package/dist/web/assets/extension-webview--HUG0c_R.js +0 -3
- package/dist/web/assets/gitGraph-HDMCJU4V-CtOMUphQ.js +0 -1
- package/dist/web/assets/index-BUxaCPPv.js +0 -26
- package/dist/web/assets/index-Dq7PPmAk.css +0 -2
- package/dist/web/assets/info-3K5VOQVL-BCrPCWGY.js +0 -1
- package/dist/web/assets/keybindings-store-C7No6mtl.js +0 -1
- package/dist/web/assets/packet-RMMSAZCW-D_OqB-zi.js +0 -1
- package/dist/web/assets/pie-UPGHQEXC-WUHpLNJz.js +0 -1
- package/dist/web/assets/radar-KQ55EAFF-HQIIecVM.js +0 -1
- package/dist/web/assets/settings-store-B470PCWf.js +0 -2
- package/dist/web/assets/settings-tab-DR1HhS4C.js +0 -1
- package/dist/web/assets/terminal-tab-BiRx6kvn.js +0 -1
- package/dist/web/assets/treemap-KZPCXAKY-0wLgUUTz.js +0 -1
- /package/dist/web/assets/{api-client-o_6TmLGC.js → api-client-Bn-Pi9k5.js} +0 -0
- /package/dist/web/assets/{utils-ChWX7pZv.js → utils-CTg5uAYR.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{x as t}from"./vendor-markdown-0Mxgxy0L.js";import{n}from"./settings-store-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{x as t}from"./vendor-markdown-0Mxgxy0L.js";import{n}from"./settings-store-D9CflsKU.js";function r(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function i(e){if(Array.isArray(e))return e}function a(e,t,n){return(t=m(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function s(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
2
2
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?c(Object(n),!0).forEach(function(t){a(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function u(e,t){if(e==null)return{};var n,r,i=d(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function d(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function f(e,t){return i(e)||o(e,t)||h(e,t)||s()}function p(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function m(e){var t=p(e,`string`);return typeof t==`symbol`?t:t+``}function h(e,t){if(e){if(typeof e==`string`)return r(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function v(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?_(Object(n),!0).forEach(function(t){g(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function y(){var e=[...arguments];return function(t){return e.reduceRight(function(e,t){return t(e)},t)}}function b(e){return function t(){var n=this,r=[...arguments];return r.length>=e.length?e.apply(this,r):function(){var e=[...arguments];return t.apply(n,[].concat(r,e))}}}function x(e){return{}.toString.call(e).includes(`Object`)}function S(e){return!Object.keys(e).length}function C(e){return typeof e==`function`}function w(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function T(e,t){return x(t)||A(`changeType`),Object.keys(t).some(function(t){return!w(e,t)})&&A(`changeField`),t}function E(e){C(e)||A(`selectorType`)}function D(e){C(e)||x(e)||A(`handlerType`),x(e)&&Object.values(e).some(function(e){return!C(e)})&&A(`handlersType`)}function O(e){e||A(`initialIsRequired`),x(e)||A(`initialType`),S(e)&&A(`initialContent`)}function k(e,t){throw Error(e[t]||e.default)}var A=b(k)({initialIsRequired:`initial state is required`,initialType:`initial state should be an object`,initialContent:`initial state shouldn't be an empty object`,handlerType:`handler should be an object or a function`,handlersType:`all handlers should be a functions`,selectorType:`selector should be a function`,changeType:`provided value of changes should be an object`,changeField:`it seams you want to change a field in the state which is not specified in the "initial" state`,default:"an unknown error accured in `state-local` package"}),j={changes:T,selector:E,handler:D,initial:O};function ee(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};j.initial(e),j.handler(t);var n={current:e},r=b(P)(n,t),i=b(N)(n),a=b(j.changes)(e),o=b(M)(n);function s(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(e){return e};return j.selector(e),e(n.current)}function c(e){y(r,i,a,o)(e)}return[s,c]}function M(e,t){return C(t)?t(e.current):t}function N(e,t){return e.current=v(v({},e.current),t),t}function P(e,t,n){return C(t)?t(e.current):Object.keys(n).forEach(function(n){return t[n]?.call(t,e.current[n])}),n}var F={create:ee},te={paths:{vs:`https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs`}};function ne(e){return function t(){var n=this,r=[...arguments];return r.length>=e.length?e.apply(this,r):function(){var e=[...arguments];return t.apply(n,[].concat(r,e))}}}function re(e){return{}.toString.call(e).includes(`Object`)}function ie(e){return e||L(`configIsRequired`),re(e)||L(`configType`),e.urls?(ae(),{paths:{vs:e.urls.monacoBase}}):e}function ae(){console.warn(I.deprecation)}function oe(e,t){throw Error(e[t]||e.default)}var I={configIsRequired:`the configuration object is required`,configType:`the configuration object should be an object`,default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:`Deprecation warning!
|
|
3
3
|
You are using deprecated way of configuration.
|
|
4
4
|
|
|
@@ -240,7 +240,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
240
240
|
`))}Y(Rk,`preprocessMarkdown`);function zk(e){return e.split(/\\n|\n|<br\s*\/?>/gi).map(e=>e.trim().match(/<[^>]+>|[^\s<>]+/g)?.map(e=>({content:e,type:`normal`}))??[])}Y(zk,`nonMarkdownToLines`);function Bk(e,t={}){let n=Rk(e,t),r=Ak.lexer(n),i=[[]],a=0;function o(e,t=`normal`){e.type===`text`?e.text.split(`
|
|
241
241
|
`).forEach((e,n)=>{n!==0&&(a++,i.push([])),e.split(` `).forEach(e=>{e=e.replace(/'/g,`'`),e&&i[a].push({content:e,type:t})})}):e.type===`strong`||e.type===`em`?e.tokens.forEach(t=>{o(t,e.type)}):e.type===`html`&&i[a].push({content:e.text,type:`normal`})}return Y(o,`processNode`),r.forEach(e=>{e.type===`paragraph`?e.tokens?.forEach(e=>{o(e)}):e.type===`html`?i[a].push({content:e.text,type:`normal`}):i[a].push({content:e.raw,type:`normal`})}),i}Y(Bk,`markdownToLines`);function Vk(e){return e?`<p>${e.replace(/\\n|\n/g,`<br />`)}</p>`:``}Y(Vk,`nonMarkdownToHTML`);function Hk(e,{markdownAutoWrap:t}={}){let n=Ak.lexer(e);function r(e){return e.type===`text`?t===!1?e.text.replace(/\n */g,`<br/>`).replace(/ /g,` `):e.text.replace(/\n */g,`<br/>`):e.type===`strong`?`<strong>${e.tokens?.map(r).join(``)}</strong>`:e.type===`em`?`<em>${e.tokens?.map(r).join(``)}</em>`:e.type===`paragraph`?`<p>${e.tokens?.map(r).join(``)}</p>`:e.type===`space`?``:e.type===`html`?`${e.text}`:e.type===`escape`?e.text:(X.warn(`Unsupported markdown: ${e.type}`),e.raw)}return Y(r,`output`),n.map(r).join(``)}Y(Hk,`markdownToHTML`);function Uk(e){return Intl.Segmenter?[...new Intl.Segmenter().segment(e)].map(e=>e.segment):[...e]}Y(Uk,`splitTextToChars`);function Wk(e,t){return Gk(e,[],Uk(t.content),t.type)}Y(Wk,`splitWordToFitWidth`);function Gk(e,t,n,r){if(n.length===0)return[{content:t.join(``),type:r},{content:``,type:r}];let[i,...a]=n,o=[...t,i];return e([{content:o.join(``),type:r}])?Gk(e,o,a,r):(t.length===0&&i&&(t.push(i),n.shift()),[{content:t.join(``),type:r},{content:n.join(``),type:r}])}Y(Gk,`splitWordToFitWidthRecursion`);function Kk(e,t){if(e.some(({content:e})=>e.includes(`
|
|
242
242
|
`)))throw Error(`splitLineToFitWidth does not support newlines in the line`);return qk(e,t)}Y(Kk,`splitLineToFitWidth`);function qk(e,t,n=[],r=[]){if(e.length===0)return r.length>0&&n.push(r),n.length>0?n:[];let i=``;e[0].content===` `&&(i=` `,e.shift());let a=e.shift()??{content:` `,type:`normal`},o=[...r];if(i!==``&&o.push({content:i,type:`normal`}),o.push(a),t(o))return qk(e,t,n,o);if(r.length>0)n.push(r),e.unshift(a);else if(a.content){let[r,i]=Wk(t,a);n.push([r]),i.content&&e.unshift(i)}return qk(e,t,n)}Y(qk,`splitLineToFitWidthRecursion`);function Jk(e,t){t&&e.attr(`style`,t)}Y(Jk,`applyStyle`);var Yk=16384;async function Xk(e,t,n,r,i=!1,a=Sv()){let o=e.append(`foreignObject`);o.attr(`width`,`${Math.min(10*n,Yk)}px`),o.attr(`height`,`${Math.min(10*n,Yk)}px`);let s=o.append(`xhtml:div`),l=Bv(t.label)?await Hv(t.label.replace(Uv.lineBreakRegex,`
|
|
243
|
-
`),a):Nv(t.label,a),u=t.isNode?`nodeLabel`:`edgeLabel`,d=s.append(`span`);d.html(l),Jk(d,t.labelStyle),d.attr(`class`,`${u} ${r}`),Jk(s,t.labelStyle),s.style(`display`,`table-cell`),s.style(`white-space`,`nowrap`),s.style(`line-height`,`1.5`),n!==1/0&&(s.style(`max-width`,n+`px`),s.style(`text-align`,`center`)),s.attr(`xmlns`,`http://www.w3.org/1999/xhtml`),i&&s.attr(`class`,`labelBkg`);let f=s.node().getBoundingClientRect();return f.width===n&&(s.style(`display`,`table`),s.style(`white-space`,`break-spaces`),s.style(`width`,n+`px`),f=s.node().getBoundingClientRect()),o.node()}Y(Xk,`addHtmlSpan`);function Zk(e,t,n,r=!1){let i=e.append(`tspan`).attr(`class`,`text-outer-tspan`).attr(`x`,0).attr(`y`,t*n-.1+`em`).attr(`dy`,n+`em`);return r&&i.attr(`text-anchor`,`middle`),i}Y(Zk,`createTspan`);function Qk(e,t,n){let r=e.append(`text`),i=Zk(r,1,t);tA(i,n);let a=i.node().getComputedTextLength();return r.remove(),a}Y(Qk,`computeWidthOfText`);function $k(e,t,n){let r=e.append(`text`),i=Zk(r,1,t);tA(i,[{content:n,type:`normal`}]);let a=i.node()?.getBoundingClientRect();return a&&r.remove(),a}Y($k,`computeDimensionOfText`);function eA(e,t,n,r=!1,i=!1){let a=1.1,o=t.append(`g`),s=o.insert(`rect`).attr(`class`,`background`).attr(`style`,`stroke: none`),l=o.append(`text`).attr(`y`,`-10.1`);i&&l.attr(`text-anchor`,`middle`);let u=0;for(let t of n){let n=Y(t=>Qk(o,a,t)<=e,`checkWidth`),r=n(t)?[t]:Kk(t,n);for(let e of r)tA(Zk(l,u,a,i),e),u++}if(r){let e=l.node().getBBox();return s.attr(`x`,e.x-2).attr(`y`,e.y-2).attr(`width`,e.width+4).attr(`height`,e.height+4),o.node()}else return l.node()}Y(eA,`createFormattedText`);function tA(e,t){e.text(``),t.forEach((t,n)=>{let r=e.append(`tspan`).attr(`font-style`,t.type===`em`?`italic`:`normal`).attr(`class`,`text-inner-tspan`).attr(`font-weight`,t.type===`strong`?`bold`:`normal`);n===0?r.text(t.content):r.text(` `+t.content)})}Y(tA,`updateTextContentAndStyles`);async function nA(e,t={}){let n=[];e.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(e,r,i)=>(n.push((async()=>{let n=`${r}:${i}`;return await Npe(n)?await Lk(n,void 0,{class:`label-icon`}):`<i class='${Nv(e,t).replace(`:`,` `)}'></i>`})()),e));let r=await Promise.all(n);return e.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>r.shift()??``)}Y(nA,`replaceIconSubstring`);var rA=Y(async(e,t=``,{style:n=``,isTitle:r=!1,classes:i=``,useHtmlLabels:a=!0,markdown:o=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},d)=>{if(X.debug(`XYZ createText`,t,n,r,i,a,s,`addSvgBackground: `,u),a){let r=await nA(OO(o?Hk(t,d):Vk(t)),d),a=t.replace(/\\\\/g,`\\`);return await Xk(e,{isNode:s,label:Bv(t)?a:r,labelStyle:n.replace(`fill:`,`color:`)},l,i,u,d)}else{let i=t.replace(/<br\s*\/?>/g,`<br/>`),a=eA(l,e,o?Bk(i.replace(`<br>`,`<br/>`),d):zk(i),t?u:!1,!s);if(s){/stroke:/.exec(n)&&(n=n.replace(`stroke:`,`lineColor:`));let e=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/color:/g,`fill:`);bx(a).attr(`style`,e)}else{let e=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/background:/g,`fill:`);bx(a).select(`rect`).attr(`style`,e.replace(/background:/g,`fill:`));let t=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/color:/g,`fill:`);bx(a).select(`text`).attr(`style`,t)}return r?bx(a).selectAll(`tspan.text-outer-tspan`).classed(`title-row`,!0):bx(a).selectAll(`tspan.text-outer-tspan`).classed(`row`,!0),a}},`createText`);function iA(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}Y(iA,`populateCommonDb`);var aA={},Ppe={info:Ih(async()=>{let{createInfoServices:e}=await u(async()=>{let{createInfoServices:e}=await import(`./info-3K5VOQVL-
|
|
243
|
+
`),a):Nv(t.label,a),u=t.isNode?`nodeLabel`:`edgeLabel`,d=s.append(`span`);d.html(l),Jk(d,t.labelStyle),d.attr(`class`,`${u} ${r}`),Jk(s,t.labelStyle),s.style(`display`,`table-cell`),s.style(`white-space`,`nowrap`),s.style(`line-height`,`1.5`),n!==1/0&&(s.style(`max-width`,n+`px`),s.style(`text-align`,`center`)),s.attr(`xmlns`,`http://www.w3.org/1999/xhtml`),i&&s.attr(`class`,`labelBkg`);let f=s.node().getBoundingClientRect();return f.width===n&&(s.style(`display`,`table`),s.style(`white-space`,`break-spaces`),s.style(`width`,n+`px`),f=s.node().getBoundingClientRect()),o.node()}Y(Xk,`addHtmlSpan`);function Zk(e,t,n,r=!1){let i=e.append(`tspan`).attr(`class`,`text-outer-tspan`).attr(`x`,0).attr(`y`,t*n-.1+`em`).attr(`dy`,n+`em`);return r&&i.attr(`text-anchor`,`middle`),i}Y(Zk,`createTspan`);function Qk(e,t,n){let r=e.append(`text`),i=Zk(r,1,t);tA(i,n);let a=i.node().getComputedTextLength();return r.remove(),a}Y(Qk,`computeWidthOfText`);function $k(e,t,n){let r=e.append(`text`),i=Zk(r,1,t);tA(i,[{content:n,type:`normal`}]);let a=i.node()?.getBoundingClientRect();return a&&r.remove(),a}Y($k,`computeDimensionOfText`);function eA(e,t,n,r=!1,i=!1){let a=1.1,o=t.append(`g`),s=o.insert(`rect`).attr(`class`,`background`).attr(`style`,`stroke: none`),l=o.append(`text`).attr(`y`,`-10.1`);i&&l.attr(`text-anchor`,`middle`);let u=0;for(let t of n){let n=Y(t=>Qk(o,a,t)<=e,`checkWidth`),r=n(t)?[t]:Kk(t,n);for(let e of r)tA(Zk(l,u,a,i),e),u++}if(r){let e=l.node().getBBox();return s.attr(`x`,e.x-2).attr(`y`,e.y-2).attr(`width`,e.width+4).attr(`height`,e.height+4),o.node()}else return l.node()}Y(eA,`createFormattedText`);function tA(e,t){e.text(``),t.forEach((t,n)=>{let r=e.append(`tspan`).attr(`font-style`,t.type===`em`?`italic`:`normal`).attr(`class`,`text-inner-tspan`).attr(`font-weight`,t.type===`strong`?`bold`:`normal`);n===0?r.text(t.content):r.text(` `+t.content)})}Y(tA,`updateTextContentAndStyles`);async function nA(e,t={}){let n=[];e.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(e,r,i)=>(n.push((async()=>{let n=`${r}:${i}`;return await Npe(n)?await Lk(n,void 0,{class:`label-icon`}):`<i class='${Nv(e,t).replace(`:`,` `)}'></i>`})()),e));let r=await Promise.all(n);return e.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>r.shift()??``)}Y(nA,`replaceIconSubstring`);var rA=Y(async(e,t=``,{style:n=``,isTitle:r=!1,classes:i=``,useHtmlLabels:a=!0,markdown:o=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},d)=>{if(X.debug(`XYZ createText`,t,n,r,i,a,s,`addSvgBackground: `,u),a){let r=await nA(OO(o?Hk(t,d):Vk(t)),d),a=t.replace(/\\\\/g,`\\`);return await Xk(e,{isNode:s,label:Bv(t)?a:r,labelStyle:n.replace(`fill:`,`color:`)},l,i,u,d)}else{let i=t.replace(/<br\s*\/?>/g,`<br/>`),a=eA(l,e,o?Bk(i.replace(`<br>`,`<br/>`),d):zk(i),t?u:!1,!s);if(s){/stroke:/.exec(n)&&(n=n.replace(`stroke:`,`lineColor:`));let e=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/color:/g,`fill:`);bx(a).attr(`style`,e)}else{let e=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/background:/g,`fill:`);bx(a).select(`rect`).attr(`style`,e.replace(/background:/g,`fill:`));let t=n.replace(/stroke:[^;]+;?/g,``).replace(/stroke-width:[^;]+;?/g,``).replace(/fill:[^;]+;?/g,``).replace(/color:/g,`fill:`);bx(a).select(`text`).attr(`style`,t)}return r?bx(a).selectAll(`tspan.text-outer-tspan`).classed(`title-row`,!0):bx(a).selectAll(`tspan.text-outer-tspan`).classed(`row`,!0),a}},`createText`);function iA(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}Y(iA,`populateCommonDb`);var aA={},Ppe={info:Ih(async()=>{let{createInfoServices:e}=await u(async()=>{let{createInfoServices:e}=await import(`./info-3K5VOQVL-VG29MIoT.js`);return{createInfoServices:e}},[]);aA.info=e().Info.parser.LangiumParser},`info`),packet:Ih(async()=>{let{createPacketServices:e}=await u(async()=>{let{createPacketServices:e}=await import(`./packet-RMMSAZCW-Bl_WpvPc.js`);return{createPacketServices:e}},[]);aA.packet=e().Packet.parser.LangiumParser},`packet`),pie:Ih(async()=>{let{createPieServices:e}=await u(async()=>{let{createPieServices:e}=await import(`./pie-UPGHQEXC-BVpLpAIy.js`);return{createPieServices:e}},[]);aA.pie=e().Pie.parser.LangiumParser},`pie`),architecture:Ih(async()=>{let{createArchitectureServices:e}=await u(async()=>{let{createArchitectureServices:e}=await import(`./architecture-PBZL5I3N-DmL1WyG-.js`);return{createArchitectureServices:e}},[]);aA.architecture=e().Architecture.parser.LangiumParser},`architecture`),gitGraph:Ih(async()=>{let{createGitGraphServices:e}=await u(async()=>{let{createGitGraphServices:e}=await import(`./gitGraph-HDMCJU4V-D8vKfkjC.js`);return{createGitGraphServices:e}},[]);aA.gitGraph=e().GitGraph.parser.LangiumParser},`gitGraph`),radar:Ih(async()=>{let{createRadarServices:e}=await u(async()=>{let{createRadarServices:e}=await import(`./radar-KQ55EAFF-CJGco43I.js`);return{createRadarServices:e}},[]);aA.radar=e().Radar.parser.LangiumParser},`radar`),treemap:Ih(async()=>{let{createTreemapServices:e}=await u(async()=>{let{createTreemapServices:e}=await import(`./treemap-KZPCXAKY-BsOrObtE.js`);return{createTreemapServices:e}},[]);aA.treemap=e().Treemap.parser.LangiumParser},`treemap`)};async function oA(e,t){let n=Ppe[e];if(!n)throw Error(`Unknown diagram type: ${e}`);aA[e]||await n();let r=aA[e].parse(t);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new Fpe(r);return r.value}Ih(oA,`parse`);var Fpe=class extends Error{constructor(e){let t=e.lexerErrors.map(e=>`Lexer error on line ${e.line!==void 0&&!isNaN(e.line)?e.line:`?`}, column ${e.column!==void 0&&!isNaN(e.column)?e.column:`?`}: ${e.message}`).join(`
|
|
244
244
|
`),n=e.parserErrors.map(e=>`Parse error on line ${e.token.startLine!==void 0&&!isNaN(e.token.startLine)?e.token.startLine:`?`}, column ${e.token.startColumn!==void 0&&!isNaN(e.token.startColumn)?e.token.startColumn:`?`}: ${e.message}`).join(`
|
|
245
245
|
`);super(`Parsing failed: ${t} ${n}`),this.result=e}static{Ih(this,`MermaidParseError`)}};function sA(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Ipe(e){if(Array.isArray(e))return e}function Lpe(e){if(Array.isArray(e))return sA(e)}function cA(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function Rpe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,mA(r.key),r)}}function lA(e,t,n){return t&&Rpe(e.prototype,t),Object.defineProperty(e,`prototype`,{writable:!1}),e}function uA(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=gA(e))||t){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
246
246
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||n.return==null||n.return()}finally{if(s)throw a}}}}function dA(e,t,n){return(t=mA(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zpe(e){if(typeof Symbol<`u`&&e[Symbol.iterator]!=null||e[`@@iterator`]!=null)return Array.from(e)}function Bpe(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],l=!0,u=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){u=!0,i=e}finally{try{if(!l&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw i}}return s}}function Vpe(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
package/dist/web/index.html
CHANGED
|
@@ -39,32 +39,32 @@
|
|
|
39
39
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
40
40
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
41
41
|
<link href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600;700&family=Geist:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
|
42
|
-
<script type="module" crossorigin src="/assets/index-
|
|
42
|
+
<script type="module" crossorigin src="/assets/index-DuEUN2Eg.js"></script>
|
|
43
43
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-FhOqtrmT.js">
|
|
44
|
-
<link rel="modulepreload" crossorigin href="/assets/vendor-mermaid-
|
|
44
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-mermaid-CwOSbfhN.js">
|
|
45
45
|
<link rel="modulepreload" crossorigin href="/assets/vendor-markdown-0Mxgxy0L.js">
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/vendor-ui-B-T_damt.js">
|
|
47
|
-
<link rel="modulepreload" crossorigin href="/assets/utils-
|
|
47
|
+
<link rel="modulepreload" crossorigin href="/assets/utils-CTg5uAYR.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-BjHrJDVb.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/x-DlFGzN8d.js">
|
|
50
|
-
<link rel="modulepreload" crossorigin href="/assets/input-
|
|
51
|
-
<link rel="modulepreload" crossorigin href="/assets/scroll-area-
|
|
50
|
+
<link rel="modulepreload" crossorigin href="/assets/input-ClhO__YM.js">
|
|
51
|
+
<link rel="modulepreload" crossorigin href="/assets/scroll-area-DW7L4Gnc.js">
|
|
52
52
|
<link rel="modulepreload" crossorigin href="/assets/dist-C5IgeqrV.js">
|
|
53
53
|
<link rel="modulepreload" crossorigin href="/assets/plus-51UQ45rf.js">
|
|
54
54
|
<link rel="modulepreload" crossorigin href="/assets/refresh-cw-CSFrDtiu.js">
|
|
55
55
|
<link rel="modulepreload" crossorigin href="/assets/trash-2-CJYoLw7Q.js">
|
|
56
|
-
<link rel="modulepreload" crossorigin href="/assets/api-client-
|
|
57
|
-
<link rel="modulepreload" crossorigin href="/assets/api-settings-
|
|
58
|
-
<link rel="modulepreload" crossorigin href="/assets/ai-settings-section-
|
|
56
|
+
<link rel="modulepreload" crossorigin href="/assets/api-client-Bn-Pi9k5.js">
|
|
57
|
+
<link rel="modulepreload" crossorigin href="/assets/api-settings-C__hxGX2.js">
|
|
58
|
+
<link rel="modulepreload" crossorigin href="/assets/ai-settings-section-D2rONDPd.js">
|
|
59
59
|
<link rel="modulepreload" crossorigin href="/assets/chevron-right-BzAdxJRG.js">
|
|
60
60
|
<link rel="modulepreload" crossorigin href="/assets/database-D4DIhgi-.js">
|
|
61
61
|
<link rel="modulepreload" crossorigin href="/assets/react-GqWghJ-L.js">
|
|
62
62
|
<link rel="modulepreload" crossorigin href="/assets/extension-store-3yZYn07W.js">
|
|
63
|
-
<link rel="modulepreload" crossorigin href="/assets/keybindings-store-
|
|
64
|
-
<link rel="modulepreload" crossorigin href="/assets/tab-store-
|
|
65
|
-
<link rel="modulepreload" crossorigin href="/assets/project-store-
|
|
66
|
-
<link rel="modulepreload" crossorigin href="/assets/settings-store-
|
|
67
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
63
|
+
<link rel="modulepreload" crossorigin href="/assets/keybindings-store-C9KsBH7z.js">
|
|
64
|
+
<link rel="modulepreload" crossorigin href="/assets/tab-store-B3M9hjho.js">
|
|
65
|
+
<link rel="modulepreload" crossorigin href="/assets/project-store-BYmQ0fDC.js">
|
|
66
|
+
<link rel="modulepreload" crossorigin href="/assets/settings-store-D9CflsKU.js">
|
|
67
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DPnjO2FY.css">
|
|
68
68
|
<link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head>
|
|
69
69
|
<body class="bg-[#0f1419] text-[#e5e7eb] font-sans antialiased">
|
|
70
70
|
<div id="root"></div>
|
package/dist/web/sw.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
try{self[`workbox:core:7.3.0`]&&_()}catch{}var e=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},t=class extends Error{constructor(t,n){let r=e(t,n);super(r),this.name=t,this.details=n}},n={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},r=e=>[n.prefix,e,n.suffix].filter(e=>e&&e.length>0).join(`-`),i=e=>{for(let t of Object.keys(n))e(t)},a={updateDetails:e=>{i(t=>{typeof e[t]==`string`&&(n[t]=e[t])})},getGoogleAnalyticsName:e=>e||r(n.googleAnalytics),getPrecacheName:e=>e||r(n.precache),getPrefix:()=>n.prefix,getRuntimeName:e=>e||r(n.runtime),getSuffix:()=>n.suffix};function o(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.3.0`]&&_()}catch{}var s=`__WB_REVISION__`;function c(e){if(!e)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:n,url:r}=e;if(!r)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(!n){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(r,location.href),a=new URL(r,location.href);return i.searchParams.set(s,n),{cacheKey:i.href,url:a.href}}var l=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},u=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function f(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function p(e,n){let r=null;if(e.url&&(r=new URL(e.url).origin),r!==self.location.origin)throw new t(`cross-origin-copy-response`,{origin:r});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=n?n(a):a,s=f()?i.body:await i.blob();return new Response(s,o)}var m=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function h(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function g(e,t,n,r){let i=h(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===h(t.url,n))return e.match(t,r)}var v=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},y=new Set;async function b(){for(let e of y)await e()}function x(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.3.0`]&&_()}catch{}function S(e){return typeof e==`string`?new Request(e):e}var C=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new v,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:n}=this,r=S(e);if(r.mode===`navigate`&&n instanceof FetchEvent&&n.preloadResponse){let e=await n.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?r.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))r=await e({request:r.clone(),event:n})}catch(e){if(e instanceof Error)throw new t(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=r.clone();try{let e;e=await fetch(r,r.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let t of this.iterateCallbacks(`fetchDidSucceed`))e=await t({event:n,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:n,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=S(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,n){let r=S(e);await x(0);let i=await this.getCacheKey(r,`write`);if(!n)throw new t(`cache-put-with-no-response`,{url:m(i.url)});let a=await this._ensureResponseSafeToCache(n);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await g(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await b(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=S(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},w=class{constructor(e={}){this.cacheName=a.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new C(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,n,r){await e.runCallbacks(`handlerWillStart`,{event:r,request:n});let i;try{if(i=await this._handle(n,e),!i||i.type===`error`)throw new t(`no-response`,{url:n.url})}catch(t){if(t instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:t,event:r,request:n}),i)break}if(!i)throw t}for(let t of e.iterateCallbacks(`handlerWillRespond`))i=await t({event:r,request:n,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},T=class e extends w{constructor(t={}){t.cacheName=a.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,n){let r,i=n.params||{};if(this._fallbackToNetwork){let t=i.integrity,a=e.integrity,o=!a||a===t;r=await n.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||t})),t&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await n.cachePut(e,r.clone()))}else throw new t(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,n){this._useDefaultCacheabilityPluginIfNeeded();let r=await n.fetch(e);if(!await n.cachePut(e,r.clone()))throw new t(`bad-precaching-response`,{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};T.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},T.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await p(e):e}};var E=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new T({cacheName:a.getPrecacheName(e),plugins:[...t,new u({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let n=[];for(let r of e){typeof r==`string`?n.push(r):r&&r.revision===void 0&&n.push(r.url);let{cacheKey:e,url:i}=c(r),a=typeof r!=`string`&&r.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new t(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof r!=`string`&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new t(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),n.length>0){let e=`Workbox is precaching URLs without revision info: ${n.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return o(e,async()=>{let t=new l;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return o(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let n=this.getCacheKeyForURL(e);if(!n)throw new t(`non-precached-url`,{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:n},t.params),this.strategy.handle(t))}},D,O=()=>(D||=new E,D);try{self[`workbox:routing:7.3.0`]&&_()}catch{}var k=e=>e&&typeof e==`object`?e:{handle:e},A=class{constructor(e,t,n=`GET`){this.handler=k(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=k(e)}},j=class extends A{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&!(t.origin!==location.origin&&n.index!==0))return n.slice(1)},t,n)}},M=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,k(e))}setCatchHandler(e){this._catchHandler=k(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t(`unregister-route-but-not-found-with-method`,{method:e.method});let n=this._routes.get(e.method).indexOf(e);if(n>-1)this._routes.get(e.method).splice(n,1);else throw new t(`unregister-route-route-not-registered`)}},N,P=()=>(N||(N=new M,N.addFetchListener(),N.addCacheListener()),N);function F(e,n,r){let i;if(typeof e==`string`){let t=new URL(e,location.href);i=new A(({url:e})=>e.href===t.href,n,r)}else if(e instanceof RegExp)i=new j(e,n,r);else if(typeof e==`function`)i=new A(e,n,r);else if(e instanceof A)i=e;else throw new t(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return P().registerRoute(i),i}function I(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*L(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=I(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var R=class extends A{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of L(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function z(e){F(new R(O(),e))}function B(e){O().precache(e)}function V(e,t){B(e),z(t)}V([{"revision":"1872c500de691dce40960bb85481de07","url":"registerSW.js"},{"revision":"197e794914ef7e961fbc15fbe36bd982","url":"index.html"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"948e060affb598c339be40d69e1f6f9c","url":"monacoeditorwork/ts.worker.bundle.js"},{"revision":"a5d8a1acfc29c2a4c882a54ffc93def3","url":"monacoeditorwork/json.worker.bundle.js"},{"revision":"d0f94ce046cf8cf09605ee7664dac557","url":"monacoeditorwork/html.worker.bundle.js"},{"revision":"a424156a79b9c1b907db93aa3180585a","url":"monacoeditorwork/editor.worker.bundle.js"},{"revision":"b3a7f967560c9816492a1567b3f7f0dc","url":"monacoeditorwork/css.worker.bundle.js"},{"revision":null,"url":"assets/x-DlFGzN8d.js"},{"revision":null,"url":"assets/vendor-xterm-ejLe7-tK.js"},{"revision":null,"url":"assets/vendor-xterm-BrP-ENHg.css"},{"revision":null,"url":"assets/vendor-ui-B-T_damt.js"},{"revision":null,"url":"assets/vendor-mermaid-B2SLgECS.js"},{"revision":null,"url":"assets/vendor-markdown-0Mxgxy0L.js"},{"revision":null,"url":"assets/utils-ChWX7pZv.js"},{"revision":null,"url":"assets/use-monaco-theme-OY18iXNi.js"},{"revision":null,"url":"assets/treemap-KZPCXAKY-0wLgUUTz.js"},{"revision":null,"url":"assets/trash-2-CJYoLw7Q.js"},{"revision":null,"url":"assets/text-wrap-Cn6BNQfq.js"},{"revision":null,"url":"assets/terminal-tab-BiRx6kvn.js"},{"revision":null,"url":"assets/table-Dq575bPF.js"},{"revision":null,"url":"assets/tab-store-DZbiYk7y.js"},{"revision":null,"url":"assets/square-nsMa3iMk.js"},{"revision":null,"url":"assets/sqlite-viewer-BV0p6qnR.js"},{"revision":null,"url":"assets/sql-query-editor-DZ9xskL8.js"},{"revision":null,"url":"assets/sql-completion-provider-C3cq9j99.js"},{"revision":null,"url":"assets/settings-tab-DR1HhS4C.js"},{"revision":null,"url":"assets/settings-store-B470PCWf.js"},{"revision":null,"url":"assets/scroll-area-DwWF9FpN.js"},{"revision":null,"url":"assets/rolldown-runtime-FhOqtrmT.js"},{"revision":null,"url":"assets/refresh-cw-CSFrDtiu.js"},{"revision":null,"url":"assets/react-GqWghJ-L.js"},{"revision":null,"url":"assets/radar-KQ55EAFF-HQIIecVM.js"},{"revision":null,"url":"assets/project-store-Ciq-cK1O.js"},{"revision":null,"url":"assets/postgres-viewer-X2li3HfX.js"},{"revision":null,"url":"assets/port-forwarding-tab-BszAda9U.js"},{"revision":null,"url":"assets/plus-51UQ45rf.js"},{"revision":null,"url":"assets/pie-UPGHQEXC-WUHpLNJz.js"},{"revision":null,"url":"assets/packet-RMMSAZCW-D_OqB-zi.js"},{"revision":null,"url":"assets/markdown-renderer-CtsslbMO.js"},{"revision":null,"url":"assets/lib-D_kRA9p6.js"},{"revision":null,"url":"assets/keybindings-store-D2N-Tq4N.js"},{"revision":null,"url":"assets/keybindings-store-C7No6mtl.js"},{"revision":null,"url":"assets/katex-CKoArbIw.js"},{"revision":null,"url":"assets/input-CHRMley8.js"},{"revision":null,"url":"assets/info-3K5VOQVL-BCrPCWGY.js"},{"revision":null,"url":"assets/index-Dq7PPmAk.css"},{"revision":null,"url":"assets/index-BUxaCPPv.js"},{"revision":null,"url":"assets/gitGraph-HDMCJU4V-CtOMUphQ.js"},{"revision":null,"url":"assets/extension-webview--HUG0c_R.js"},{"revision":null,"url":"assets/extension-store-3yZYn07W.js"},{"revision":null,"url":"assets/esm-K1XIK4vc.js"},{"revision":null,"url":"assets/dist-im4ynINo.js"},{"revision":null,"url":"assets/dist-C5IgeqrV.js"},{"revision":null,"url":"assets/diff-viewer-DBELqMy0.js"},{"revision":null,"url":"assets/database-viewer-DDGq5efK.js"},{"revision":null,"url":"assets/database-D4DIhgi-.js"},{"revision":null,"url":"assets/csv-preview-BizIVMyb.js"},{"revision":null,"url":"assets/csv-parser--2WJNgS7.js"},{"revision":null,"url":"assets/createLucideIcon-BjHrJDVb.js"},{"revision":null,"url":"assets/conflict-editor-C28xnWqp.js"},{"revision":null,"url":"assets/columns-2-4fQcE4PF.js"},{"revision":null,"url":"assets/code-editor-DN0UiBvk.js"},{"revision":null,"url":"assets/code-CuravVys.js"},{"revision":null,"url":"assets/chevron-right-BzAdxJRG.js"},{"revision":null,"url":"assets/chat-tab-lo46P4ZN.js"},{"revision":null,"url":"assets/arrow-up-Dtrfv490.js"},{"revision":null,"url":"assets/architecture-PBZL5I3N-CUZIB1Vq.js"},{"revision":null,"url":"assets/api-settings-CoKe_BdR.js"},{"revision":null,"url":"assets/api-client-o_6TmLGC.js"},{"revision":null,"url":"assets/ai-settings-section-LMO_cfIW.js"},{"revision":null,"url":"assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2"},{"revision":null,"url":"assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2"},{"revision":null,"url":"assets/KaTeX_Size2-Regular-Dy4dx90m.woff2"},{"revision":null,"url":"assets/KaTeX_Size1-Regular-mCD8mA8B.woff2"},{"revision":null,"url":"assets/KaTeX_Script-Regular-D3wIWfF6.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2"},{"revision":null,"url":"assets/KaTeX_Math-Italic-t53AETM-.woff2"},{"revision":null,"url":"assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Regular-B22Nviop.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Italic-NWA7e6Wa.woff2"},{"revision":null,"url":"assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Bold-Cx986IdX.woff2"},{"revision":null,"url":"assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2"},{"revision":null,"url":"assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2"},{"revision":null,"url":"assets/KaTeX_AMS-Regular-BQhdFMY1.woff2"},{"revision":"79c8870653c8f419f2e3323085e1f4be","url":"manifest.webmanifest"}]),self.addEventListener(`push`,e=>{e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(t=>{if(t.some(e=>e.visibilityState===`visible`))return;let n=e.data?.json()??{title:`PPM`,body:`Chat completed`};return self.registration.showNotification(n.title,{body:n.body,icon:`/icon-192.png`,badge:`/icon-192.png`,tag:`ppm-chat-done`,silent:!1,data:{url:self.location.origin}})}))}),self.addEventListener(`notificationclick`,e=>{e.notification.close(),e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(t=>{for(let e of t)if(e.url.includes(self.location.origin)&&`focus`in e)return e.focus();return self.clients.openWindow(e.notification.data?.url||`/`)}))});
|
|
1
|
+
try{self[`workbox:core:7.3.0`]&&_()}catch{}var e=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},t=class extends Error{constructor(t,n){let r=e(t,n);super(r),this.name=t,this.details=n}},n={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},r=e=>[n.prefix,e,n.suffix].filter(e=>e&&e.length>0).join(`-`),i=e=>{for(let t of Object.keys(n))e(t)},a={updateDetails:e=>{i(t=>{typeof e[t]==`string`&&(n[t]=e[t])})},getGoogleAnalyticsName:e=>e||r(n.googleAnalytics),getPrecacheName:e=>e||r(n.precache),getPrefix:()=>n.prefix,getRuntimeName:e=>e||r(n.runtime),getSuffix:()=>n.suffix};function o(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.3.0`]&&_()}catch{}var s=`__WB_REVISION__`;function c(e){if(!e)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:n,url:r}=e;if(!r)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(!n){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(r,location.href),a=new URL(r,location.href);return i.searchParams.set(s,n),{cacheKey:i.href,url:a.href}}var l=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},u=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function f(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function p(e,n){let r=null;if(e.url&&(r=new URL(e.url).origin),r!==self.location.origin)throw new t(`cross-origin-copy-response`,{origin:r});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=n?n(a):a,s=f()?i.body:await i.blob();return new Response(s,o)}var m=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function h(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function g(e,t,n,r){let i=h(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===h(t.url,n))return e.match(t,r)}var v=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},y=new Set;async function b(){for(let e of y)await e()}function x(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.3.0`]&&_()}catch{}function S(e){return typeof e==`string`?new Request(e):e}var C=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new v,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:n}=this,r=S(e);if(r.mode===`navigate`&&n instanceof FetchEvent&&n.preloadResponse){let e=await n.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?r.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))r=await e({request:r.clone(),event:n})}catch(e){if(e instanceof Error)throw new t(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=r.clone();try{let e;e=await fetch(r,r.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let t of this.iterateCallbacks(`fetchDidSucceed`))e=await t({event:n,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:n,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=S(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,n){let r=S(e);await x(0);let i=await this.getCacheKey(r,`write`);if(!n)throw new t(`cache-put-with-no-response`,{url:m(i.url)});let a=await this._ensureResponseSafeToCache(n);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await g(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await b(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=S(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},w=class{constructor(e={}){this.cacheName=a.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new C(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,n,r){await e.runCallbacks(`handlerWillStart`,{event:r,request:n});let i;try{if(i=await this._handle(n,e),!i||i.type===`error`)throw new t(`no-response`,{url:n.url})}catch(t){if(t instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:t,event:r,request:n}),i)break}if(!i)throw t}for(let t of e.iterateCallbacks(`handlerWillRespond`))i=await t({event:r,request:n,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},T=class e extends w{constructor(t={}){t.cacheName=a.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,n){let r,i=n.params||{};if(this._fallbackToNetwork){let t=i.integrity,a=e.integrity,o=!a||a===t;r=await n.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||t})),t&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await n.cachePut(e,r.clone()))}else throw new t(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,n){this._useDefaultCacheabilityPluginIfNeeded();let r=await n.fetch(e);if(!await n.cachePut(e,r.clone()))throw new t(`bad-precaching-response`,{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};T.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},T.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await p(e):e}};var E=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new T({cacheName:a.getPrecacheName(e),plugins:[...t,new u({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let n=[];for(let r of e){typeof r==`string`?n.push(r):r&&r.revision===void 0&&n.push(r.url);let{cacheKey:e,url:i}=c(r),a=typeof r!=`string`&&r.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new t(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof r!=`string`&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new t(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),n.length>0){let e=`Workbox is precaching URLs without revision info: ${n.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return o(e,async()=>{let t=new l;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return o(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let n=this.getCacheKeyForURL(e);if(!n)throw new t(`non-precached-url`,{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:n},t.params),this.strategy.handle(t))}},D,O=()=>(D||=new E,D);try{self[`workbox:routing:7.3.0`]&&_()}catch{}var k=e=>e&&typeof e==`object`?e:{handle:e},A=class{constructor(e,t,n=`GET`){this.handler=k(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=k(e)}},j=class extends A{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&!(t.origin!==location.origin&&n.index!==0))return n.slice(1)},t,n)}},M=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,k(e))}setCatchHandler(e){this._catchHandler=k(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t(`unregister-route-but-not-found-with-method`,{method:e.method});let n=this._routes.get(e.method).indexOf(e);if(n>-1)this._routes.get(e.method).splice(n,1);else throw new t(`unregister-route-route-not-registered`)}},N,P=()=>(N||(N=new M,N.addFetchListener(),N.addCacheListener()),N);function F(e,n,r){let i;if(typeof e==`string`){let t=new URL(e,location.href);i=new A(({url:e})=>e.href===t.href,n,r)}else if(e instanceof RegExp)i=new j(e,n,r);else if(typeof e==`function`)i=new A(e,n,r);else if(e instanceof A)i=e;else throw new t(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return P().registerRoute(i),i}function I(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*L(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=I(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var R=class extends A{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of L(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function z(e){F(new R(O(),e))}function B(e){O().precache(e)}function V(e,t){B(e),z(t)}V([{"revision":"1872c500de691dce40960bb85481de07","url":"registerSW.js"},{"revision":"8c83f3b66c8ea5cd77d7c5a79ccaa387","url":"index.html"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"948e060affb598c339be40d69e1f6f9c","url":"monacoeditorwork/ts.worker.bundle.js"},{"revision":"a5d8a1acfc29c2a4c882a54ffc93def3","url":"monacoeditorwork/json.worker.bundle.js"},{"revision":"d0f94ce046cf8cf09605ee7664dac557","url":"monacoeditorwork/html.worker.bundle.js"},{"revision":"a424156a79b9c1b907db93aa3180585a","url":"monacoeditorwork/editor.worker.bundle.js"},{"revision":"b3a7f967560c9816492a1567b3f7f0dc","url":"monacoeditorwork/css.worker.bundle.js"},{"revision":null,"url":"assets/x-DlFGzN8d.js"},{"revision":null,"url":"assets/vendor-xterm-ejLe7-tK.js"},{"revision":null,"url":"assets/vendor-xterm-BrP-ENHg.css"},{"revision":null,"url":"assets/vendor-ui-B-T_damt.js"},{"revision":null,"url":"assets/vendor-mermaid-CwOSbfhN.js"},{"revision":null,"url":"assets/vendor-markdown-0Mxgxy0L.js"},{"revision":null,"url":"assets/utils-CTg5uAYR.js"},{"revision":null,"url":"assets/use-monaco-theme-CvV5vy_F.js"},{"revision":null,"url":"assets/treemap-KZPCXAKY-BsOrObtE.js"},{"revision":null,"url":"assets/trash-2-CJYoLw7Q.js"},{"revision":null,"url":"assets/text-wrap-Cn6BNQfq.js"},{"revision":null,"url":"assets/terminal-tab-CVdfvDSK.js"},{"revision":null,"url":"assets/table-Dq575bPF.js"},{"revision":null,"url":"assets/tab-store-B3M9hjho.js"},{"revision":null,"url":"assets/square-nsMa3iMk.js"},{"revision":null,"url":"assets/sqlite-viewer-f6ZJHIzh.js"},{"revision":null,"url":"assets/sql-query-editor-CM_qEhaX.js"},{"revision":null,"url":"assets/sql-completion-provider-C3cq9j99.js"},{"revision":null,"url":"assets/settings-tab-DfPjX9uY.js"},{"revision":null,"url":"assets/settings-store-D9CflsKU.js"},{"revision":null,"url":"assets/scroll-area-DW7L4Gnc.js"},{"revision":null,"url":"assets/rolldown-runtime-FhOqtrmT.js"},{"revision":null,"url":"assets/refresh-cw-CSFrDtiu.js"},{"revision":null,"url":"assets/react-GqWghJ-L.js"},{"revision":null,"url":"assets/radar-KQ55EAFF-CJGco43I.js"},{"revision":null,"url":"assets/project-store-BYmQ0fDC.js"},{"revision":null,"url":"assets/postgres-viewer-YkljtDWX.js"},{"revision":null,"url":"assets/port-forwarding-tab-BUH9aImG.js"},{"revision":null,"url":"assets/plus-51UQ45rf.js"},{"revision":null,"url":"assets/pie-UPGHQEXC-BVpLpAIy.js"},{"revision":null,"url":"assets/packet-RMMSAZCW-Bl_WpvPc.js"},{"revision":null,"url":"assets/markdown-renderer-CKmmrUuy.js"},{"revision":null,"url":"assets/lib-D_kRA9p6.js"},{"revision":null,"url":"assets/keybindings-store-C9KsBH7z.js"},{"revision":null,"url":"assets/keybindings-store-BkZjvU9J.js"},{"revision":null,"url":"assets/katex-CKoArbIw.js"},{"revision":null,"url":"assets/input-ClhO__YM.js"},{"revision":null,"url":"assets/info-3K5VOQVL-VG29MIoT.js"},{"revision":null,"url":"assets/index-DuEUN2Eg.js"},{"revision":null,"url":"assets/index-DPnjO2FY.css"},{"revision":null,"url":"assets/gitGraph-HDMCJU4V-D8vKfkjC.js"},{"revision":null,"url":"assets/extension-webview-BFd0USXC.js"},{"revision":null,"url":"assets/extension-store-3yZYn07W.js"},{"revision":null,"url":"assets/esm-K1XIK4vc.js"},{"revision":null,"url":"assets/dist-im4ynINo.js"},{"revision":null,"url":"assets/dist-C5IgeqrV.js"},{"revision":null,"url":"assets/diff-viewer-x7kjfVYW.js"},{"revision":null,"url":"assets/database-viewer-CvQc1PZH.js"},{"revision":null,"url":"assets/database-D4DIhgi-.js"},{"revision":null,"url":"assets/csv-preview-BizIVMyb.js"},{"revision":null,"url":"assets/csv-parser--2WJNgS7.js"},{"revision":null,"url":"assets/createLucideIcon-BjHrJDVb.js"},{"revision":null,"url":"assets/conflict-editor-Bxq4QiW1.js"},{"revision":null,"url":"assets/columns-2-4fQcE4PF.js"},{"revision":null,"url":"assets/code-editor-D3AAT8nI.js"},{"revision":null,"url":"assets/code-CuravVys.js"},{"revision":null,"url":"assets/chevron-right-BzAdxJRG.js"},{"revision":null,"url":"assets/chat-tab-Dki1pz84.js"},{"revision":null,"url":"assets/arrow-up-Dtrfv490.js"},{"revision":null,"url":"assets/architecture-PBZL5I3N-DmL1WyG-.js"},{"revision":null,"url":"assets/api-settings-C__hxGX2.js"},{"revision":null,"url":"assets/api-client-Bn-Pi9k5.js"},{"revision":null,"url":"assets/ai-settings-section-D2rONDPd.js"},{"revision":null,"url":"assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2"},{"revision":null,"url":"assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2"},{"revision":null,"url":"assets/KaTeX_Size2-Regular-Dy4dx90m.woff2"},{"revision":null,"url":"assets/KaTeX_Size1-Regular-mCD8mA8B.woff2"},{"revision":null,"url":"assets/KaTeX_Script-Regular-D3wIWfF6.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2"},{"revision":null,"url":"assets/KaTeX_Math-Italic-t53AETM-.woff2"},{"revision":null,"url":"assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Regular-B22Nviop.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Italic-NWA7e6Wa.woff2"},{"revision":null,"url":"assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Bold-Cx986IdX.woff2"},{"revision":null,"url":"assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2"},{"revision":null,"url":"assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2"},{"revision":null,"url":"assets/KaTeX_AMS-Regular-BQhdFMY1.woff2"},{"revision":"79c8870653c8f419f2e3323085e1f4be","url":"manifest.webmanifest"}]),self.addEventListener(`push`,e=>{e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(t=>{if(t.some(e=>e.visibilityState===`visible`))return;let n=e.data?.json()??{title:`PPM`,body:`Chat completed`};return self.registration.showNotification(n.title,{body:n.body,icon:`/icon-192.png`,badge:`/icon-192.png`,tag:`ppm-chat-done`,silent:!1,data:{url:self.location.origin}})}))}),self.addEventListener(`notificationclick`,e=>{e.notification.close(),e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(t=>{for(let e of t)if(e.url.includes(self.location.origin)&&`focus`in e)return e.focus();return self.clients.openWindow(e.notification.data?.url||`/`)}))});
|
package/package.json
CHANGED
|
@@ -34,6 +34,7 @@ interface VscodeApi {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
let baseUrl = "";
|
|
37
|
+
let authToken = "";
|
|
37
38
|
|
|
38
39
|
// Track active panel state for reuse across project switches
|
|
39
40
|
let activePanel: ReturnType<VscodeApi["window"]["createWebviewPanel"]> | null = null;
|
|
@@ -59,6 +60,7 @@ async function saveSetting(context: ExtensionContext, key: string, value: unknow
|
|
|
59
60
|
|
|
60
61
|
export function activate(context: ExtensionContext, vscode: VscodeApi): void {
|
|
61
62
|
baseUrl = (globalThis as any).__PPM_BASE_URL__ || "";
|
|
63
|
+
authToken = (globalThis as any).__PPM_AUTH_TOKEN__ || "";
|
|
62
64
|
|
|
63
65
|
context.subscriptions.push(
|
|
64
66
|
vscode.commands.registerCommand("git-graph.view", async (...args: unknown[]) => {
|
|
@@ -87,10 +89,15 @@ export function deactivate(): void {
|
|
|
87
89
|
console.log("[ext-git-graph] deactivated");
|
|
88
90
|
}
|
|
89
91
|
|
|
92
|
+
/** Build fetch options with auth header when token is available */
|
|
93
|
+
function authHeaders(): RequestInit {
|
|
94
|
+
return authToken ? { headers: { Authorization: `Bearer ${authToken}` } } : {};
|
|
95
|
+
}
|
|
96
|
+
|
|
90
97
|
/** Resolve project path from PPM API as fallback */
|
|
91
98
|
async function resolveProjectPath(): Promise<string | null> {
|
|
92
99
|
try {
|
|
93
|
-
const res = await fetch(`${baseUrl}/api/projects
|
|
100
|
+
const res = await fetch(`${baseUrl}/api/projects`, authHeaders());
|
|
94
101
|
const json = await res.json() as { ok: boolean; data?: { name: string; path: string }[] };
|
|
95
102
|
if (!json.ok || !json.data || json.data.length === 0) return null;
|
|
96
103
|
// Single project — safe to auto-select
|
|
@@ -104,7 +111,7 @@ async function resolveProjectPath(): Promise<string | null> {
|
|
|
104
111
|
/** Resolve project name from path via PPM API */
|
|
105
112
|
async function resolveProjectName(projectPath: string): Promise<string> {
|
|
106
113
|
try {
|
|
107
|
-
const res = await fetch(`${baseUrl}/api/projects
|
|
114
|
+
const res = await fetch(`${baseUrl}/api/projects`, authHeaders());
|
|
108
115
|
const json = await res.json() as { ok: boolean; data?: { name: string; path: string }[] };
|
|
109
116
|
if (json.ok && json.data) {
|
|
110
117
|
const match = json.data.find((p) => p.path === projectPath);
|
|
@@ -311,7 +318,7 @@ function openGitGraph(
|
|
|
311
318
|
case "openWorktree": {
|
|
312
319
|
// Find project matching worktree path and switch to it
|
|
313
320
|
try {
|
|
314
|
-
const res = await fetch(`${baseUrl}/api/projects
|
|
321
|
+
const res = await fetch(`${baseUrl}/api/projects`, authHeaders());
|
|
315
322
|
const json = await res.json() as { ok: boolean; data?: { name: string; path: string }[] };
|
|
316
323
|
const match = json.data?.find((p) => p.path === msg.path);
|
|
317
324
|
if (match) {
|
|
@@ -326,7 +333,7 @@ function openGitGraph(
|
|
|
326
333
|
if (answer === "Yes, add project") {
|
|
327
334
|
const addRes = await fetch(`${baseUrl}/api/projects`, {
|
|
328
335
|
method: "POST",
|
|
329
|
-
headers: { "Content-Type": "application/json" },
|
|
336
|
+
headers: { "Content-Type": "application/json", ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}) },
|
|
330
337
|
body: JSON.stringify({ path: msg.path, name: dirName }),
|
|
331
338
|
});
|
|
332
339
|
const addJson = await addRes.json() as { ok: boolean; data?: { name: string } };
|
|
@@ -383,11 +383,24 @@ button:active { background: var(--surface); }
|
|
|
383
383
|
.toast-info { background: var(--blue); color: #fff; }
|
|
384
384
|
@keyframes toast-in { from { opacity: 0; transform: translateX(-50%) translateY(10px); } to { opacity: 1; transform: translateX(-50%) translateY(0); } }
|
|
385
385
|
|
|
386
|
-
/* Touch
|
|
387
|
-
@media (
|
|
388
|
-
.commit-row { min-height:
|
|
389
|
-
.ctx-item { padding:
|
|
390
|
-
button { min-width:
|
|
386
|
+
/* Touch devices — compact mobile layout */
|
|
387
|
+
@media (pointer: coarse) {
|
|
388
|
+
.commit-row { min-height: 32px; }
|
|
389
|
+
.ctx-item { padding: 8px 12px; min-height: 36px; }
|
|
390
|
+
button { min-width: 32px; min-height: 32px; padding: 2px 6px; }
|
|
391
|
+
#app { flex-direction: column; }
|
|
392
|
+
#toolbar { order: 10; border-bottom: none; border-top: 1px solid var(--border); padding: 2px 6px; }
|
|
393
|
+
#toolbar button { font-size: 10px; }
|
|
394
|
+
.branch-trigger { font-size: 10px !important; padding: 2px 6px !important; }
|
|
395
|
+
#graph-container { order: 1; overflow-x: auto; overflow-y: auto; }
|
|
396
|
+
#find-bar { order: 0; }
|
|
397
|
+
#status-bar { order: 9; }
|
|
398
|
+
#commit-list-wrapper { min-width: 700px; }
|
|
399
|
+
#graph-header { min-width: 700px; }
|
|
400
|
+
.commit-row.header-row { min-height: 20px; }
|
|
401
|
+
}
|
|
402
|
+
/* Column hiding on very narrow non-touch containers (e.g. narrow desktop panel) */
|
|
403
|
+
@media (max-width: 500px) and (pointer: fine) {
|
|
391
404
|
.col-author, .col-hash { display: none; }
|
|
392
405
|
.col-date { width: 60px; min-width: 60px; }
|
|
393
406
|
}
|
|
@@ -1318,10 +1331,10 @@ function graphRender(expandIdx) {
|
|
|
1318
1331
|
container.innerHTML = '';
|
|
1319
1332
|
if (gVertices.length === 0) { if (state.graphColWidth === null) document.documentElement.style.setProperty('--graph-col-w', '40px'); return; }
|
|
1320
1333
|
|
|
1321
|
-
// Detect
|
|
1322
|
-
const
|
|
1323
|
-
const cfg =
|
|
1324
|
-
? { ...graphConfig, grid: { ...graphConfig.grid, y:
|
|
1334
|
+
// Detect touch device: match CSS breakpoint where row height changes to 32px
|
|
1335
|
+
const isTouch = window.matchMedia('(pointer: coarse)').matches;
|
|
1336
|
+
const cfg = isTouch
|
|
1337
|
+
? { ...graphConfig, grid: { ...graphConfig.grid, y: 32, offsetY: 16 } }
|
|
1325
1338
|
: graphConfig;
|
|
1326
1339
|
|
|
1327
1340
|
const svg = document.createElementNS(SVG_NS, 'svg');
|
|
@@ -5,7 +5,8 @@ import { tmpdir } from "node:os";
|
|
|
5
5
|
import { chatService } from "../../services/chat.service.ts";
|
|
6
6
|
import { providerRegistry } from "../../providers/registry.ts";
|
|
7
7
|
import { renameSession as sdkRenameSession } from "@anthropic-ai/claude-agent-sdk";
|
|
8
|
-
import { listSlashItems, searchSlashItems } from "../../services/slash-items.service.ts";
|
|
8
|
+
import { listSlashItems, searchSlashItems, invalidateCache } from "../../services/slash-items.service.ts";
|
|
9
|
+
import { upsertSlashRecent, getSlashRecents } from "../../services/db.service.ts";
|
|
9
10
|
import { getCachedUsage, refreshUsageNow } from "../../services/claude-usage.service.ts";
|
|
10
11
|
import { getSessionLog } from "../../services/session-log.service.ts";
|
|
11
12
|
import { getSessionProjectPath, setSessionMetadata, setSessionTitle, getPinnedSessionIds, pinSession, unpinSession, deleteSessionMapping, deleteSessionMetadata, deleteSessionTitle } from "../../services/db.service.ts";
|
|
@@ -21,8 +22,32 @@ chatRoutes.get("/slash-items", (c) => {
|
|
|
21
22
|
const projectPath = c.get("projectPath");
|
|
22
23
|
const q = c.req.query("q");
|
|
23
24
|
let items = listSlashItems(projectPath);
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
const recentNames = getSlashRecents(projectPath);
|
|
26
|
+
if (q) items = searchSlashItems(items, q, 20, recentNames);
|
|
27
|
+
return c.json(ok({ items, recentNames }));
|
|
28
|
+
} catch (e) {
|
|
29
|
+
return c.json(err((e as Error).message), 500);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
/** DELETE /chat/slash-items/cache — invalidate cached slash items for this project */
|
|
34
|
+
chatRoutes.delete("/slash-items/cache", (c) => {
|
|
35
|
+
try {
|
|
36
|
+
invalidateCache(c.get("projectPath"));
|
|
37
|
+
return c.json(ok({ invalidated: true }));
|
|
38
|
+
} catch (e) {
|
|
39
|
+
return c.json(err((e as Error).message), 500);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
/** POST /chat/slash-recents — record usage of a slash item */
|
|
44
|
+
chatRoutes.post("/slash-recents", async (c) => {
|
|
45
|
+
try {
|
|
46
|
+
const projectPath = c.get("projectPath");
|
|
47
|
+
const { name, type } = await c.req.json<{ name: string; type: string }>();
|
|
48
|
+
if (!name || !type) return c.json(err("name and type required"), 400);
|
|
49
|
+
upsertSlashRecent(projectPath, name, type);
|
|
50
|
+
return c.json(ok({ recorded: true }));
|
|
26
51
|
} catch (e) {
|
|
27
52
|
return c.json(err((e as Error).message), 500);
|
|
28
53
|
}
|
|
@@ -477,6 +477,20 @@ function runMigrations(database: Database): void {
|
|
|
477
477
|
}
|
|
478
478
|
database.exec("PRAGMA user_version = 16");
|
|
479
479
|
}
|
|
480
|
+
|
|
481
|
+
if (current < 17) {
|
|
482
|
+
database.exec(`
|
|
483
|
+
CREATE TABLE IF NOT EXISTS slash_recents (
|
|
484
|
+
project_path TEXT NOT NULL,
|
|
485
|
+
item_name TEXT NOT NULL,
|
|
486
|
+
item_type TEXT NOT NULL,
|
|
487
|
+
used_at INTEGER NOT NULL,
|
|
488
|
+
use_count INTEGER NOT NULL DEFAULT 1,
|
|
489
|
+
PRIMARY KEY (project_path, item_name, item_type)
|
|
490
|
+
);
|
|
491
|
+
PRAGMA user_version = 17;
|
|
492
|
+
`);
|
|
493
|
+
}
|
|
480
494
|
}
|
|
481
495
|
|
|
482
496
|
// ---------------------------------------------------------------------------
|
|
@@ -1373,5 +1387,27 @@ function mapBotTaskRow(row: Record<string, any>): BotTask {
|
|
|
1373
1387
|
};
|
|
1374
1388
|
}
|
|
1375
1389
|
|
|
1390
|
+
// ---------------------------------------------------------------------------
|
|
1391
|
+
// Slash recents helpers
|
|
1392
|
+
// ---------------------------------------------------------------------------
|
|
1393
|
+
|
|
1394
|
+
/** Record usage of a slash item (upsert: increment count + update timestamp) */
|
|
1395
|
+
export function upsertSlashRecent(projectPath: string, itemName: string, itemType: string): void {
|
|
1396
|
+
getDb().query(`
|
|
1397
|
+
INSERT INTO slash_recents (project_path, item_name, item_type, used_at, use_count)
|
|
1398
|
+
VALUES (?, ?, ?, ?, 1)
|
|
1399
|
+
ON CONFLICT (project_path, item_name, item_type)
|
|
1400
|
+
DO UPDATE SET used_at = excluded.used_at, use_count = use_count + 1
|
|
1401
|
+
`).run(projectPath, itemName, itemType, Date.now());
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
/** Get recently used slash item names for a project, ordered by most recent first */
|
|
1405
|
+
export function getSlashRecents(projectPath: string, limit = 5): string[] {
|
|
1406
|
+
const rows = getDb().query(
|
|
1407
|
+
"SELECT item_name FROM slash_recents WHERE project_path = ? ORDER BY used_at DESC LIMIT ?",
|
|
1408
|
+
).all(projectPath, limit) as Array<{ item_name: string }>;
|
|
1409
|
+
return rows.map((r) => r.item_name);
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1376
1412
|
// Auto-close on process exit
|
|
1377
1413
|
process.on("beforeExit", closeDb);
|
|
@@ -28,12 +28,13 @@ self.addEventListener("message", (event: MessageEvent<RpcMessage>) => {
|
|
|
28
28
|
// --- RPC handlers ---
|
|
29
29
|
|
|
30
30
|
rpc.onRequest("ext:activate", async (params) => {
|
|
31
|
-
const [extId, entryPath, extensionPath, storedState, baseUrl] = params as [string, string, string, Record<string, Record<string, string | null>>?, string?];
|
|
31
|
+
const [extId, entryPath, extensionPath, storedState, baseUrl, authToken] = params as [string, string, string, Record<string, Record<string, string | null>>?, string?, string?];
|
|
32
32
|
console.log(`[ExtHost] activating ${extId} from ${entryPath}`);
|
|
33
33
|
if (activeExtensions.has(extId)) return { ok: true, already: true };
|
|
34
34
|
|
|
35
|
-
// Expose server base URL so extensions can use fetch() with absolute URLs
|
|
35
|
+
// Expose server base URL and auth token so extensions can use fetch() with absolute URLs
|
|
36
36
|
if (baseUrl) (globalThis as any).__PPM_BASE_URL__ = baseUrl;
|
|
37
|
+
if (authToken) (globalThis as any).__PPM_AUTH_TOKEN__ = authToken;
|
|
37
38
|
|
|
38
39
|
// Create RpcClient adapter for vscode-compat (Worker's RPC → vscode-compat interface)
|
|
39
40
|
const rpcClient = {
|
|
@@ -138,14 +138,16 @@ class ExtensionService {
|
|
|
138
138
|
workspace: Object.fromEntries(workspaceStorage.map((r) => [r.key, r.value])),
|
|
139
139
|
};
|
|
140
140
|
|
|
141
|
-
// Pass server base URL so extensions can make fetch() calls in the Worker
|
|
141
|
+
// Pass server base URL + auth token so extensions can make fetch() calls in the Worker
|
|
142
142
|
const { configService: cfg } = await import("./config.service.ts");
|
|
143
143
|
const port = cfg.get("port") ?? 8080;
|
|
144
144
|
const baseUrl = `http://localhost:${port}`;
|
|
145
|
+
const authConfig = cfg.get("auth");
|
|
146
|
+
const authToken = authConfig?.enabled ? authConfig.token : undefined;
|
|
145
147
|
|
|
146
148
|
console.log(`[ExtService] activating ${id} (entry: ${entryPath})`);
|
|
147
149
|
const result = await rpc.sendRequest<{ ok: boolean; error?: string }>(
|
|
148
|
-
"ext:activate", id, entryPath, extDir, storedState, baseUrl,
|
|
150
|
+
"ext:activate", id, entryPath, extDir, storedState, baseUrl, authToken,
|
|
149
151
|
);
|
|
150
152
|
if (!result.ok) {
|
|
151
153
|
this.activationErrors.set(id, result.error ?? "Unknown activation error");
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SlashItem } from "./types.ts";
|
|
2
|
+
|
|
3
|
+
interface CacheEntry {
|
|
4
|
+
items: SlashItem[];
|
|
5
|
+
cachedAt: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/** In-memory cache keyed by projectPath */
|
|
9
|
+
const cache = new Map<string, CacheEntry>();
|
|
10
|
+
|
|
11
|
+
/** Default TTL: 5 minutes */
|
|
12
|
+
const DEFAULT_TTL_MS = 5 * 60 * 1000;
|
|
13
|
+
|
|
14
|
+
/** Get cached items if still valid, or null */
|
|
15
|
+
export function getCached(projectPath: string): SlashItem[] | null {
|
|
16
|
+
const entry = cache.get(projectPath);
|
|
17
|
+
if (!entry) return null;
|
|
18
|
+
if (Date.now() - entry.cachedAt > DEFAULT_TTL_MS) {
|
|
19
|
+
cache.delete(projectPath);
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return entry.items;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Store items in cache */
|
|
26
|
+
export function setCache(projectPath: string, items: SlashItem[]): void {
|
|
27
|
+
cache.set(projectPath, { items, cachedAt: Date.now() });
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Invalidate cache for a specific project */
|
|
31
|
+
export function invalidateCache(projectPath: string): void {
|
|
32
|
+
cache.delete(projectPath);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Invalidate all cached entries */
|
|
36
|
+
export function invalidateAll(): void {
|
|
37
|
+
cache.clear();
|
|
38
|
+
}
|
|
@@ -46,18 +46,21 @@ export function scoreFuzzy(query: string, candidate: string): FuzzyScore | null
|
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* Search slash items by query with fuzzy matching.
|
|
49
|
+
* Recently used items get a rank boost (sorted earlier within same rank tier).
|
|
49
50
|
* Returns ranked results (best match first), truncated to limit.
|
|
50
51
|
*/
|
|
51
52
|
export function searchSlashItems(
|
|
52
53
|
items: SlashItem[],
|
|
53
54
|
query: string,
|
|
54
55
|
limit = 20,
|
|
56
|
+
recentNames: string[] = [],
|
|
55
57
|
): SlashItem[] {
|
|
56
58
|
if (!query) return items;
|
|
57
59
|
// Cap query length to prevent quadratic blowup in Levenshtein
|
|
58
60
|
query = query.slice(0, 50);
|
|
59
61
|
|
|
60
|
-
const
|
|
62
|
+
const recentSet = new Set(recentNames);
|
|
63
|
+
const scored: Array<{ item: SlashItem; rank: number; distance: number; recent: boolean }> = [];
|
|
61
64
|
|
|
62
65
|
for (const item of items) {
|
|
63
66
|
// Score against name and description, keep best
|
|
@@ -67,10 +70,16 @@ export function searchSlashItems(
|
|
|
67
70
|
.filter((s): s is FuzzyScore => s !== null)
|
|
68
71
|
.sort((a, b) => a.rank - b.rank || a.distance - b.distance)[0];
|
|
69
72
|
|
|
70
|
-
if (best) scored.push({ item, rank: best.rank, distance: best.distance });
|
|
73
|
+
if (best) scored.push({ item, rank: best.rank, distance: best.distance, recent: recentSet.has(item.name) });
|
|
71
74
|
}
|
|
72
75
|
|
|
73
|
-
|
|
76
|
+
// Within same rank+distance, recent items come first
|
|
77
|
+
scored.sort((a, b) =>
|
|
78
|
+
a.rank - b.rank
|
|
79
|
+
|| a.distance - b.distance
|
|
80
|
+
|| (a.recent === b.recent ? 0 : a.recent ? -1 : 1)
|
|
81
|
+
|| a.item.name.localeCompare(b.item.name),
|
|
82
|
+
);
|
|
74
83
|
|
|
75
84
|
return scored.slice(0, limit).map((s) => s.item);
|
|
76
85
|
}
|
|
@@ -2,11 +2,13 @@ import { discoverSkillRoots } from "./discover-skill-roots.ts";
|
|
|
2
2
|
import { loadItemsFromRoots } from "./skill-loader.ts";
|
|
3
3
|
import { resolveOverrides } from "./resolve-overrides.ts";
|
|
4
4
|
import { getBuiltinSlashItems } from "./builtin-commands.ts";
|
|
5
|
+
import { getCached, setCache } from "./cache.ts";
|
|
5
6
|
import type { SlashItem, SlashItemWithSource, DiscoveryResult } from "./types.ts";
|
|
6
7
|
|
|
7
8
|
export { searchSlashItems } from "./fuzzy-search.ts";
|
|
8
9
|
export { isPpmHandled, getBuiltinByName } from "./builtin-commands.ts";
|
|
9
10
|
export { executeBuiltin } from "./builtin-handlers.ts";
|
|
11
|
+
export { invalidateCache, invalidateAll } from "./cache.ts";
|
|
10
12
|
export type { SlashItem, SlashItemWithSource, ShadowedItem, DiscoveryResult, SkillRoot, DefinitionSource } from "./types.ts";
|
|
11
13
|
|
|
12
14
|
/**
|
|
@@ -34,9 +36,14 @@ export function listSlashItemsDetailed(projectPath: string): DiscoveryResult {
|
|
|
34
36
|
|
|
35
37
|
/**
|
|
36
38
|
* Backward-compatible: returns flat list of active items (no source metadata).
|
|
37
|
-
*
|
|
39
|
+
* Uses in-memory cache (5 min TTL) to avoid repeated filesystem scans.
|
|
38
40
|
*/
|
|
39
41
|
export function listSlashItems(projectPath: string): SlashItem[] {
|
|
42
|
+
const cached = getCached(projectPath);
|
|
43
|
+
if (cached) return cached;
|
|
44
|
+
|
|
40
45
|
const { active } = listSlashItemsDetailed(projectPath);
|
|
41
|
-
|
|
46
|
+
const items = active.map(({ source, rootPath, filePath, ...item }) => item);
|
|
47
|
+
setCache(projectPath, items);
|
|
48
|
+
return items;
|
|
42
49
|
}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Thin re-export wrapper — actual discovery logic lives in slash-discovery/.
|
|
3
3
|
* Kept for backward compatibility with existing imports.
|
|
4
4
|
*/
|
|
5
|
-
export { listSlashItems, searchSlashItems } from "./slash-discovery/index.ts";
|
|
5
|
+
export { listSlashItems, searchSlashItems, invalidateCache } from "./slash-discovery/index.ts";
|
|
6
6
|
export type { SlashItem } from "./slash-discovery/types.ts";
|