@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.
Files changed (75) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/web/assets/{ai-settings-section-LMO_cfIW.js → ai-settings-section-D2rONDPd.js} +1 -1
  3. package/dist/web/assets/{api-settings-CoKe_BdR.js → api-settings-C__hxGX2.js} +1 -1
  4. package/dist/web/assets/architecture-PBZL5I3N-DmL1WyG-.js +1 -0
  5. package/dist/web/assets/chat-tab-Dki1pz84.js +10 -0
  6. package/dist/web/assets/code-editor-D3AAT8nI.js +8 -0
  7. package/dist/web/assets/{conflict-editor-C28xnWqp.js → conflict-editor-Bxq4QiW1.js} +3 -3
  8. package/dist/web/assets/{database-viewer-DDGq5efK.js → database-viewer-CvQc1PZH.js} +2 -2
  9. package/dist/web/assets/{diff-viewer-DBELqMy0.js → diff-viewer-x7kjfVYW.js} +1 -1
  10. package/dist/web/assets/extension-webview-BFd0USXC.js +3 -0
  11. package/dist/web/assets/gitGraph-HDMCJU4V-D8vKfkjC.js +1 -0
  12. package/dist/web/assets/index-DPnjO2FY.css +2 -0
  13. package/dist/web/assets/index-DuEUN2Eg.js +26 -0
  14. package/dist/web/assets/info-3K5VOQVL-VG29MIoT.js +1 -0
  15. package/dist/web/assets/{input-CHRMley8.js → input-ClhO__YM.js} +1 -1
  16. package/dist/web/assets/keybindings-store-BkZjvU9J.js +1 -0
  17. package/dist/web/assets/{keybindings-store-D2N-Tq4N.js → keybindings-store-C9KsBH7z.js} +1 -1
  18. package/dist/web/assets/{markdown-renderer-CtsslbMO.js → markdown-renderer-CKmmrUuy.js} +3 -3
  19. package/dist/web/assets/packet-RMMSAZCW-Bl_WpvPc.js +1 -0
  20. package/dist/web/assets/pie-UPGHQEXC-BVpLpAIy.js +1 -0
  21. package/dist/web/assets/{port-forwarding-tab-BszAda9U.js → port-forwarding-tab-BUH9aImG.js} +1 -1
  22. package/dist/web/assets/{postgres-viewer-X2li3HfX.js → postgres-viewer-YkljtDWX.js} +2 -2
  23. package/dist/web/assets/{project-store-Ciq-cK1O.js → project-store-BYmQ0fDC.js} +1 -1
  24. package/dist/web/assets/radar-KQ55EAFF-CJGco43I.js +1 -0
  25. package/dist/web/assets/{scroll-area-DwWF9FpN.js → scroll-area-DW7L4Gnc.js} +1 -1
  26. package/dist/web/assets/settings-store-D9CflsKU.js +2 -0
  27. package/dist/web/assets/settings-tab-DfPjX9uY.js +1 -0
  28. package/dist/web/assets/{sql-query-editor-DZ9xskL8.js → sql-query-editor-CM_qEhaX.js} +1 -1
  29. package/dist/web/assets/{sqlite-viewer-BV0p6qnR.js → sqlite-viewer-f6ZJHIzh.js} +1 -1
  30. package/dist/web/assets/{tab-store-DZbiYk7y.js → tab-store-B3M9hjho.js} +1 -1
  31. package/dist/web/assets/terminal-tab-CVdfvDSK.js +1 -0
  32. package/dist/web/assets/treemap-KZPCXAKY-BsOrObtE.js +1 -0
  33. package/dist/web/assets/{use-monaco-theme-OY18iXNi.js → use-monaco-theme-CvV5vy_F.js} +1 -1
  34. package/dist/web/assets/{vendor-mermaid-B2SLgECS.js → vendor-mermaid-CwOSbfhN.js} +1 -1
  35. package/dist/web/index.html +13 -13
  36. package/dist/web/sw.js +1 -1
  37. package/package.json +1 -1
  38. package/packages/ext-git-graph/src/extension.ts +11 -4
  39. package/packages/ext-git-graph/src/webview-html.ts +22 -9
  40. package/src/server/routes/chat.ts +28 -3
  41. package/src/services/db.service.ts +36 -0
  42. package/src/services/extension-host-worker.ts +3 -2
  43. package/src/services/extension.service.ts +4 -2
  44. package/src/services/slash-discovery/cache.ts +38 -0
  45. package/src/services/slash-discovery/fuzzy-search.ts +12 -3
  46. package/src/services/slash-discovery/index.ts +9 -2
  47. package/src/services/slash-items.service.ts +1 -1
  48. package/src/services/supervisor-state.ts +13 -1
  49. package/src/services/supervisor.ts +4 -3
  50. package/src/web/components/chat/chat-tab.tsx +12 -2
  51. package/src/web/components/chat/message-input.tsx +24 -14
  52. package/src/web/components/chat/message-list.tsx +7 -14
  53. package/src/web/components/chat/slash-command-picker.tsx +120 -46
  54. package/src/web/components/extensions/extension-webview.tsx +7 -3
  55. package/src/web/lib/report-bug.ts +3 -2
  56. package/src/web/lib/ws-client.ts +4 -3
  57. package/src/web/stores/settings-store.ts +7 -3
  58. package/dist/web/assets/architecture-PBZL5I3N-CUZIB1Vq.js +0 -1
  59. package/dist/web/assets/chat-tab-lo46P4ZN.js +0 -10
  60. package/dist/web/assets/code-editor-DN0UiBvk.js +0 -8
  61. package/dist/web/assets/extension-webview--HUG0c_R.js +0 -3
  62. package/dist/web/assets/gitGraph-HDMCJU4V-CtOMUphQ.js +0 -1
  63. package/dist/web/assets/index-BUxaCPPv.js +0 -26
  64. package/dist/web/assets/index-Dq7PPmAk.css +0 -2
  65. package/dist/web/assets/info-3K5VOQVL-BCrPCWGY.js +0 -1
  66. package/dist/web/assets/keybindings-store-C7No6mtl.js +0 -1
  67. package/dist/web/assets/packet-RMMSAZCW-D_OqB-zi.js +0 -1
  68. package/dist/web/assets/pie-UPGHQEXC-WUHpLNJz.js +0 -1
  69. package/dist/web/assets/radar-KQ55EAFF-HQIIecVM.js +0 -1
  70. package/dist/web/assets/settings-store-B470PCWf.js +0 -2
  71. package/dist/web/assets/settings-tab-DR1HhS4C.js +0 -1
  72. package/dist/web/assets/terminal-tab-BiRx6kvn.js +0 -1
  73. package/dist/web/assets/treemap-KZPCXAKY-0wLgUUTz.js +0 -1
  74. /package/dist/web/assets/{api-client-o_6TmLGC.js → api-client-Bn-Pi9k5.js} +0 -0
  75. /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-B470PCWf.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.
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(/&#39;/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,`&nbsp;`):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-BCrPCWGY.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-D_OqB-zi.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-WUHpLNJz.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-CUZIB1Vq.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-CtOMUphQ.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-HQIIecVM.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-0wLgUUTz.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(`
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.
@@ -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-BUxaCPPv.js"></script>
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-B2SLgECS.js">
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-ChWX7pZv.js">
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-CHRMley8.js">
51
- <link rel="modulepreload" crossorigin href="/assets/scroll-area-DwWF9FpN.js">
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-o_6TmLGC.js">
57
- <link rel="modulepreload" crossorigin href="/assets/api-settings-CoKe_BdR.js">
58
- <link rel="modulepreload" crossorigin href="/assets/ai-settings-section-LMO_cfIW.js">
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-D2N-Tq4N.js">
64
- <link rel="modulepreload" crossorigin href="/assets/tab-store-DZbiYk7y.js">
65
- <link rel="modulepreload" crossorigin href="/assets/project-store-Ciq-cK1O.js">
66
- <link rel="modulepreload" crossorigin href="/assets/settings-store-B470PCWf.js">
67
- <link rel="stylesheet" crossorigin href="/assets/index-Dq7PPmAk.css">
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hienlh/ppm",
3
- "version": "0.10.3",
3
+ "version": "0.10.5",
4
4
  "description": "Personal Project Manager — mobile-first web IDE with AI assistance",
5
5
  "author": "hienlh",
6
6
  "license": "MIT",
@@ -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 targets for mobile */
387
- @media (max-width: 768px) {
388
- .commit-row { min-height: 44px; }
389
- .ctx-item { padding: 10px 16px; min-height: 44px; }
390
- button { min-width: 44px; min-height: 44px; }
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 mobile: match CSS breakpoint where row height changes to 44px
1322
- const isMobile = window.matchMedia('(max-width: 768px)').matches;
1323
- const cfg = isMobile
1324
- ? { ...graphConfig, grid: { ...graphConfig.grid, y: 44, offsetY: 22 } }
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
- if (q) items = searchSlashItems(items, q);
25
- return c.json(ok(items));
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 scored: Array<{ item: SlashItem; rank: number; distance: number }> = [];
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
- scored.sort((a, b) => a.rank - b.rank || a.distance - b.distance || a.item.name.localeCompare(b.item.name));
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
- * Same signature as the original `listSlashItems()`.
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
- return active.map(({ source, rootPath, filePath, ...item }) => item);
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";