@hienlh/ppm 0.13.66 → 0.13.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/http-api.md +3 -1
- package/dist/web/assets/{audio-preview-B8XiU4Bw.js → audio-preview-DLz0dEw6.js} +1 -1
- package/dist/web/assets/{chat-tab-B1m7T_2n.js → chat-tab-B0L_i2ls.js} +3 -3
- package/dist/web/assets/{code-editor-CQSDgP7X.js → code-editor-BEdecTYr.js} +2 -2
- package/dist/web/assets/{conflict-editor-BPjmtXlC.js → conflict-editor-CkUhGJsN.js} +1 -1
- package/dist/web/assets/{database-viewer-Cl31pR9W.js → database-viewer-CRBrhKbW.js} +1 -1
- package/dist/web/assets/diff-viewer-DcyIipTd.js +4 -0
- package/dist/web/assets/{docx-preview-D_P_e_0O.js → docx-preview-m0bGH6IL.js} +1 -1
- package/dist/web/assets/extension-webview-D50XqcZE.js +3 -0
- package/dist/web/assets/{git-log-panel-CAa4j8NA.js → git-log-panel-CyYHsqIb.js} +1 -1
- package/dist/web/assets/{glide-data-grid-DbtdLkFk.js → glide-data-grid-Dn8CvXh7.js} +1 -1
- package/dist/web/assets/{image-preview-DjWCljN-.js → image-preview-DTfGdGj8.js} +1 -1
- package/dist/web/assets/index-BgHCBGwE.js +27 -0
- package/dist/web/assets/keybindings-store-BhM4ou6C.js +1 -0
- package/dist/web/assets/{markdown-renderer-BojoStRy.js → markdown-renderer-940Y1Maq.js} +1 -1
- package/dist/web/assets/notification-store-DWsPQ2XR.js +1 -0
- package/dist/web/assets/{pdf-preview-19LY16zS.js → pdf-preview-D8lVKDTs.js} +1 -1
- package/dist/web/assets/{port-forwarding-tab-DIqVwGrL.js → port-forwarding-tab-B-hu3lGI.js} +1 -1
- package/dist/web/assets/{postgres-viewer-DOTykgcg.js → postgres-viewer-DfCzELiK.js} +1 -1
- package/dist/web/assets/{settings-tab-C5S_iYSH.js → settings-tab-BNGqONuA.js} +1 -1
- package/dist/web/assets/{sql-query-editor-BsxW0lTw.js → sql-query-editor-D3Jyjw6V.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-Fq4NnQg6.js → sqlite-viewer-B5Mrzox5.js} +1 -1
- package/dist/web/assets/system-monitor-tab-_ZjrnvgM.js +1 -0
- package/dist/web/assets/{terminal-tab-Lu2U4vpg.js → terminal-tab-DNswsdLl.js} +1 -1
- package/dist/web/assets/{video-preview-8Vrdwy25.js → video-preview-CaB29_z0.js} +1 -1
- package/dist/web/index.html +1 -1
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/src/server/routes/git.ts +2 -1
- package/src/server/routes/projects.ts +37 -0
- package/src/services/git.service.ts +32 -7
- package/src/services/resource-monitor-utils.ts +8 -5
- package/src/services/resource-monitor.service.ts +2 -1
- package/src/web/components/editor/diff-viewer.tsx +1 -0
- package/src/web/components/extensions/extension-webview.tsx +2 -2
- package/src/web/components/layout/add-project-form.tsx +213 -70
- package/src/web/components/system/system-monitor-group-row.tsx +27 -7
- package/src/web/components/system/system-monitor-tab.tsx +1 -1
- package/src/web/hooks/use-extension-ws.ts +16 -3
- package/src/web/hooks/use-resource-monitor.ts +1 -1
- package/dist/web/assets/diff-viewer-sbO35hMr.js +0 -4
- package/dist/web/assets/extension-webview-B2Q7T_NQ.js +0 -3
- package/dist/web/assets/index-PZd81rhr.js +0 -27
- package/dist/web/assets/keybindings-store-DZjJtyij.js +0 -1
- package/dist/web/assets/notification-store-CgsqI4c0.js +0 -1
- package/dist/web/assets/system-monitor-tab-C51mwQcv.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vendor-markdown-0Mxgxy0L.js";import"./api-client-DiZgVOok.js";import{D as e}from"./index-PZd81rhr.js";export{e as useKeybindingsStore};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vendor-markdown-0Mxgxy0L.js";import"./api-client-DiZgVOok.js";import{P as e}from"./index-PZd81rhr.js";export{e as useNotificationStore};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import"./vendor-ui-UXCWAcmi.js";import{t as r}from"./createLucideIcon-BjHrJDVb.js";import{t as i}from"./arrow-down-D825m4vm.js";import{t as a}from"./arrow-up-Rcw6_KKu.js";import{n as o,t as s}from"./chevron-down-BMo4cBth.js";import{t as c}from"./chevron-right-CD8e6Aj4.js";import{t as l}from"./wifi-LJEyIdXf.js";import{t as u}from"./x-DfF6D5Js.js";import{t as d}from"./api-client-DiZgVOok.js";import{n as f}from"./utils-E0yyGxXt.js";import{B as p,J as m,R as h,Z as g,a as _,g as v}from"./index-PZd81rhr.js";var y=r(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),b=r(`hammer`,[[`path`,{d:`m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9`,key:`1hayfq`}],[`path`,{d:`m18 15 4-4`,key:`16gjal`}],[`path`,{d:`m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5`,key:`15ts47`}]]),x=e(n(),1),S=t(),C=(0,x.memo)(function({data:e,width:t=120,height:n=24,color:r=`#3b82f6`}){let i=(0,x.useRef)(null),a=(0,x.useRef)(0);return(0,x.useEffect)(()=>{let o=Date.now();if(o-a.current<1e3)return;a.current=o;let s=i.current;if(!s||e.length<2)return;let c=s.getContext(`2d`);if(!c)return;let l=window.devicePixelRatio||1;s.width=t*l,s.height=n*l,c.scale(l,l),c.clearRect(0,0,t,n);let u=Math.max(...e,1),d=t/(e.length-1),f=n-4;c.beginPath(),c.strokeStyle=r,c.lineWidth=1.5,c.lineJoin=`round`;for(let t=0;t<e.length;t++){let n=t*d,r=2+f-e[t]/u*f;t===0?c.moveTo(n,r):c.lineTo(n,r)}c.stroke()},[e,t,n,r]),(0,S.jsx)(`canvas`,{ref:i,style:{width:t,height:n},className:`inline-block`})});function w(e){return e>80?`text-red-500`:e>50?`text-yellow-500`:`text-green-500`}function T(e){return e<1024?`${e.toFixed(0)} MB`:`${(e/1024).toFixed(1)} GB`}var E=(0,x.memo)(function({group:e,Icon:t,isExpanded:n,sparkData:r,isMobile:i,sortKey:a,sortDir:o,onToggle:l,onKill:d}){let p=n?s:c,m=(0,x.useMemo)(()=>a?[...e.processes].sort((e,t)=>{let n=a===`cpu`?e.cpu:e.ramMB,r=a===`cpu`?t.cpu:t.ramMB;return o===`asc`?n-r:r-n}):e.processes,[e.processes,a,o]);return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`tr`,{className:`hover:bg-surface-hover cursor-pointer transition-colors`,onClick:l,children:[(0,S.jsx)(`td`,{className:`py-1.5 px-3`,children:(0,S.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,S.jsx)(p,{className:`size-3 text-text-subtle shrink-0`}),(0,S.jsx)(t,{className:`size-3.5 text-text-secondary shrink-0`}),(0,S.jsx)(`span`,{className:`truncate`,children:e.label}),(0,S.jsxs)(`span`,{className:`text-text-subtle`,children:[`(`,e.processes.length,`)`]})]})}),(0,S.jsxs)(`td`,{className:f(`text-right py-1.5 px-2`,w(e.cpu)),children:[e.cpu.toFixed(1),`%`]}),(0,S.jsx)(`td`,{className:`text-right py-1.5 px-2 text-text-secondary`,children:T(e.ramMB)}),!i&&(0,S.jsx)(`td`,{className:`py-1.5 px-2`,children:r.length>1&&(0,S.jsx)(C,{data:r,width:120,height:20})})]}),n&&m.map(e=>(0,S.jsxs)(`tr`,{className:`text-text-subtle group/proc hover:bg-surface-hover transition-colors`,children:[(0,S.jsx)(`td`,{className:`py-1 px-3 pl-10`,children:(0,S.jsxs)(`div`,{className:`flex items-start gap-1.5`,children:[(0,S.jsx)(`span`,{className:`text-text-subtle shrink-0`,children:e.pid}),(0,S.jsx)(`span`,{className:`break-all text-text-secondary`,title:e.command,children:e.command})]})}),(0,S.jsxs)(`td`,{className:`text-right py-1 px-2 align-top`,children:[e.cpu.toFixed(1),`%`]}),(0,S.jsx)(`td`,{className:`text-right py-1 px-2 align-top`,children:T(e.ramMB)}),!i&&(0,S.jsx)(`td`,{className:`align-top py-1 px-2`,children:(0,S.jsx)(`button`,{onClick:t=>{t.stopPropagation(),d(e.pid)},className:`opacity-0 group-hover/proc:opacity-100 p-0.5 rounded hover:bg-red-500/20 hover:text-red-500 transition-all`,title:`End process ${e.pid}`,children:(0,S.jsx)(u,{className:`size-3`})})})]},e.pid))]})});function D({label:e,field:t,activeKey:n,activeDir:r,onClick:o,className:s}){let c=n===t,l=c?r===`asc`?a:i:null;return(0,S.jsx)(`th`,{className:f(`text-right py-1.5 px-2 font-medium cursor-pointer select-none hover:text-text-primary transition-colors`,c&&`text-text-primary`,s),onClick:()=>o(t),children:(0,S.jsxs)(`div`,{className:`flex items-center justify-end gap-0.5`,children:[(0,S.jsx)(`span`,{children:e}),l&&(0,S.jsx)(l,{className:`size-3`})]})})}var O={server:m,terminal:g,"ai-tool":o,build:b,unknown:y},k=200;function A(e,t,n){return e===n?t===`desc`?[n,`asc`]:[null,`desc`]:[n,`desc`]}function j(e,t,n){return t?[...e].sort((e,r)=>{let i=t===`cpu`?e.cpu:e.ramMB,a=t===`cpu`?r.cpu:r.ramMB;return n===`asc`?i-a:a-i}):e}var M=(0,x.memo)(function(){let{latest:e,history:t,isConnected:n}=_(),[r,i]=(0,x.useState)(()=>new Set([`server`])),[a,o]=(0,x.useState)(null),[s,c]=(0,x.useState)(`desc`),u=v(),m=(0,x.useMemo)(()=>{let e=new Map,n=t.slice(-k);for(let t of n)for(let n of t.groups){let t=`${n.type}:${n.label}`,r=e.get(t)??[];r.push(n.cpu),e.set(t,r)}return e},[t]),g=(0,x.useMemo)(()=>e?j(e.groups,a,s):[],[e,a,s]),b=(0,x.useCallback)(async e=>{try{await d.post(`/api/system/resources/kill/${e}`),h.success(`Sent SIGTERM to PID ${e}`)}catch(t){h.error(t.message||`Failed to kill PID ${e}`)}},[]),C=e=>{i(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},M=e=>{let[t,n]=A(a,s,e);o(t),c(n)};if(!e)return(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-subtle text-sm`,children:n?`Waiting for data...`:`Connecting to resource monitor...`});let N=Math.round((Date.now()-e.timestamp)/1e3);return(0,S.jsxs)(`div`,{className:`h-full flex flex-col overflow-hidden`,children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[(0,S.jsx)(`h2`,{className:`text-sm font-medium`,children:`System Monitor`}),(0,S.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[10px] text-text-subtle`,children:[n?(0,S.jsx)(l,{className:`size-3 text-green-500`}):(0,S.jsx)(p,{className:`size-3 text-red-500`}),(0,S.jsx)(`span`,{children:n?`Updated ${N}s ago`:`Disconnected`})]})]}),(0,S.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:(0,S.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,S.jsx)(`thead`,{children:(0,S.jsxs)(`tr`,{className:`text-text-subtle border-b border-border`,children:[(0,S.jsx)(`th`,{className:`text-left py-1.5 px-3 font-medium`,children:`Process`}),(0,S.jsx)(D,{label:`CPU`,field:`cpu`,activeKey:a,activeDir:s,onClick:M,className:`w-16`}),(0,S.jsx)(D,{label:`RAM`,field:`ram`,activeKey:a,activeDir:s,onClick:M,className:`w-20`}),!u&&(0,S.jsx)(`th`,{className:`py-1.5 px-2 font-medium w-[130px]`,children:`Trend`})]})}),(0,S.jsx)(`tbody`,{children:g.map(e=>{let t=`${e.type}:${e.label}`;return(0,S.jsx)(E,{group:e,Icon:O[e.type]??y,isExpanded:r.has(t),sparkData:m.get(t)??[],isMobile:u,sortKey:a,sortDir:s,onToggle:()=>C(t),onKill:b},t)})}),(0,S.jsx)(`tfoot`,{children:(0,S.jsxs)(`tr`,{className:`border-t border-border font-medium`,children:[(0,S.jsxs)(`td`,{className:`py-1.5 px-3`,children:[`Total (`,e.total.processCount,` processes)`]}),(0,S.jsxs)(`td`,{className:f(`text-right py-1.5 px-2`,w(e.total.cpu)),children:[e.total.cpu.toFixed(1),`%`]}),(0,S.jsx)(`td`,{className:`text-right py-1.5 px-2 text-text-secondary`,children:T(e.total.ramMB)}),!u&&(0,S.jsx)(`td`,{})]})})]})})]})});export{M as SystemMonitorTab};
|