@hienlh/ppm 0.17.29 → 0.17.30
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 +5 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/{ai-resource-editor-BCgyv1KF.js → ai-resource-editor-D1efMh5f.js} +1 -1
- package/dist/web/assets/{audio-preview-BPuiX8ma.js → audio-preview-BfaIfDsY.js} +1 -1
- package/dist/web/assets/chat-tab-CVfcHLiQ.js +13 -0
- package/dist/web/assets/code-editor-hKFw2M2d.js +10 -0
- package/dist/web/assets/{conflict-editor-BuLnwxFE.js → conflict-editor-BRDEJEq6.js} +1 -1
- package/dist/web/assets/{csv-preview-DdA_IpTo.js → csv-preview-D32vaKWU.js} +1 -1
- package/dist/web/assets/{database-viewer-BcF3uuk5.js → database-viewer-B-ukNIhW.js} +1 -1
- package/dist/web/assets/{diff-viewer-tyMHX20V.js → diff-viewer-DfFzvZND.js} +1 -1
- package/dist/web/assets/{docx-preview-BTclTd2v.js → docx-preview-B1kTBbEc.js} +1 -1
- package/dist/web/assets/{extension-webview-CBLWXhjt.js → extension-webview-mQPWwlxb.js} +1 -1
- package/dist/web/assets/{git-log-panel-tmGgY2kK.js → git-log-panel-CIB6xuoc.js} +1 -1
- package/dist/web/assets/glide-data-grid-DM0v58AP.js +138 -0
- package/dist/web/assets/group-chat-tab-pfDZpGO_.js +1 -0
- package/dist/web/assets/{image-preview-CQ57RN6l.js → image-preview-Dxvk6fiw.js} +1 -1
- package/dist/web/assets/index-Cp6hb7uj.js +50 -0
- package/dist/web/assets/keybindings-store-BDQFSrPz.js +1 -0
- package/dist/web/assets/{markdown-renderer-devgS0zw.js → markdown-renderer-TCeFZDxj.js} +2 -2
- package/dist/web/assets/{markdown-renderer-C7clwuDe.js → markdown-renderer-zRn368SN.js} +1 -1
- package/dist/web/assets/notification-store-BcEM83wQ.js +1 -0
- package/dist/web/assets/{pdf-preview-Cw_GRd7e.js → pdf-preview-Bx_RsWdB.js} +1 -1
- package/dist/web/assets/{postgres-viewer-DN40Bdc-.js → postgres-viewer-DJXDXZbE.js} +2 -2
- package/dist/web/assets/{settings-tab-DkpOd_kU.js → settings-tab-CAJ4skP0.js} +1 -1
- package/dist/web/assets/{sql-query-editor-Df1pzXAj.js → sql-query-editor-UDQo7Bck.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-Dbh3LluT.js → sqlite-viewer-BaQq64OX.js} +1 -1
- package/dist/web/assets/{system-monitor-tab-bbct9aEk.js → system-monitor-tab-P1uy84Os.js} +1 -1
- package/dist/web/assets/terminal-tab-mI-vAmOV.js +3 -0
- package/dist/web/assets/{tool-cards-BonPvpUI.js → tool-cards-B6jz0GZE.js} +2 -2
- package/dist/web/assets/{use-monaco-theme-Cqo17yKA.js → use-monaco-theme-CZKIw2ZG.js} +1 -1
- package/dist/web/assets/{video-preview-kZgggFAn.js → video-preview-TGDSUs0J.js} +1 -1
- package/dist/web/index.html +1 -1
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/src/web/components/chat/account-dialogs.tsx +3 -3
- package/src/web/components/chat/chat-history-bar.tsx +4 -2
- package/src/web/components/chat/message-action-bar.tsx +2 -1
- package/src/web/components/database/connection-import-export.tsx +5 -2
- package/src/web/components/database/export-button.tsx +4 -3
- package/src/web/components/explorer/file-tree.tsx +3 -2
- package/src/web/components/layout/cloud-share-popover.tsx +2 -1
- package/src/web/components/layout/mobile-nav.tsx +3 -2
- package/src/web/components/layout/project-bottom-sheet.tsx +2 -1
- package/src/web/components/layout/project-switcher.tsx +2 -1
- package/src/web/components/layout/tab-bar.tsx +3 -2
- package/src/web/components/settings/accounts-settings-section.tsx +3 -3
- package/src/web/components/settings/proxy-settings-section.tsx +8 -7
- package/src/web/components/shared/bug-report-popup.tsx +2 -1
- package/src/web/components/shared/markdown-code-block.tsx +3 -2
- package/src/web/components/terminal/terminal-tab.tsx +2 -1
- package/src/web/components/tunnels/tunnel-manager-tab.tsx +4 -2
- package/src/web/lib/clipboard.ts +52 -0
- package/src/web/lib/report-bug.ts +0 -10
- package/dist/web/assets/chat-tab-WnnM6GKA.js +0 -13
- package/dist/web/assets/code-editor-CnGUyOuU.js +0 -10
- package/dist/web/assets/glide-data-grid-CkCW7sFw.js +0 -138
- package/dist/web/assets/group-chat-tab-D_x5CRae.js +0 -1
- package/dist/web/assets/index-Cp3e9olf.js +0 -50
- package/dist/web/assets/keybindings-store-CpgEwnFA.js +0 -1
- package/dist/web/assets/notification-store-BohufOcS.js +0 -1
- package/dist/web/assets/terminal-tab-Cqs7xZJt.js +0 -3
- package/skills-lock.json +0 -11
- package/spike-memory-region-dump.ps1 +0 -69
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import"./api-client-DhXpjLdi.js";import{ft as e}from"./index-Cp3e9olf.js";export{e as useKeybindingsStore};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import"./api-client-DhXpjLdi.js";import{xt as e}from"./index-Cp3e9olf.js";export{e as useNotificationStore};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{o as r}from"./api-client-DhXpjLdi.js";import"./vendor-mermaid-CYOBtZtD.js";import{t as i}from"./settings-store-UwT_fNhg.js";import{n as a}from"./utils-E0yyGxXt.js";import{t as o}from"./panel-store-DsDZX8Mi.js";import{t as s}from"./resolve-theme-B9Mgd5GG.js";import{r as c,t as l}from"./apply-theme-BSJDABU3.js";import{Bt as u,Jt as d,dn as f,ln as p}from"./index-Cp3e9olf.js";import{i as m,n as h,r as g,t as _}from"./vendor-xterm-Dlg984wj.js";var v=e(t(),1);function y(e){let t=e.tokens;if(e.terminal){let n=e.terminal.ansi;return{background:t.bgSolid,foreground:t.text,cursor:e.terminal.cursor,cursorAccent:e.terminal.cursorAccent??t.bgSolid,selectionBackground:e.terminal.selection,black:n[0],red:n[1],green:n[2],yellow:n[3],blue:n[4],magenta:n[5],cyan:n[6],white:n[7],brightBlack:n[8],brightRed:n[9],brightGreen:n[10],brightYellow:n[11],brightBlue:n[12],brightMagenta:n[13],brightCyan:n[14],brightWhite:n[15]}}let n=e.mode===`dark`,r=n?`#1b1f2a`:`#2b2f38`,i=n?`#d7dce8`:`#e9edf5`,a=t.text3,o=n?`#f7f9ff`:`#ffffff`;return{background:t.bgSolid,foreground:t.text,cursor:t.accent,cursorAccent:t.bgSolid,selectionBackground:t.accentWash,black:r,red:t.error,green:t.success,yellow:t.warning,blue:t.accent,magenta:t.accent2,cyan:t.info,white:i,brightBlack:a,brightRed:t.error,brightGreen:t.success,brightYellow:t.warning,brightBlue:t.accent,brightMagenta:t.accent2,brightCyan:t.info,brightWhite:o}}function b(){let e=i.getState();return y(c()??s(e.themeStyle,e.themeMode,e.customThemes,e.customThemeId))}var x=`RESIZE:`,S=`PING`,C=`PONG`,w=15e3,T=35e3;function E(e){let{sessionId:t,containerRef:n}=e,r=(0,v.useRef)(null),i=(0,v.useRef)(null),a=(0,v.useRef)(null),o=(0,v.useRef)(null),s=(0,v.useRef)(0),c=(0,v.useRef)(!1),u=(0,v.useRef)(Date.now()),[d,f]=(0,v.useState)(!1),[p,y]=(0,v.useState)(!1),[E,D]=(0,v.useState)(!1),O=e.tabId?`ppm:terminal-session:${e.tabId}`:null,k=(0,v.useRef)((()=>{if(O)try{return localStorage.getItem(O)??t}catch{}return t})()),A=(0,v.useRef)(0),j=(0,v.useCallback)(e=>{let t=a.current;t?.readyState===WebSocket.OPEN&&t.send(e)},[]),M=(0,v.useCallback)(()=>r.current?.getSelection()??``,[]),N=(0,v.useCallback)(()=>{let e=r.current;if(!e)return``;let t=e.buffer.active,n=A.current,i=t.baseY+t.cursorY,a=[];for(let e=n;e<=i;e++){let n=t.getLine(e);n&&a.push(n.translateToString(!0))}for(;a.length>0&&a[a.length-1].trim()===``;)a.pop();return a.join(`
|
|
2
|
-
`)},[]),P=(0,v.useCallback)(()=>{let e=r.current,t=a.current;e&&t?.readyState===WebSocket.OPEN&&t.send(`${x}${e.cols},${e.rows}`)},[]),F=(0,v.useCallback)(()=>{if(o.current&&clearTimeout(o.current),a.current?.close(),a.current=null,k.current=`new`,O)try{localStorage.removeItem(O)}catch{}s.current=0,D(!1),f(!1),y(!1),setTimeout(()=>I(),0)},[]),I=(0,v.useCallback)(()=>{o.current&&=(clearTimeout(o.current),null),a.current&&=(a.current.onclose=null,a.current.close(),null);let t=r.current;if(!t)return;let n=window.location.protocol===`https:`?`wss:`:`ws:`,i=e.projectName??``,l=k.current,d=`/ws/project/${encodeURIComponent(i)}/terminal/${l}`,p=`${n}//${window.location.host}${d}`,m=new WebSocket(p);a.current=m,m.onopen=()=>{c.current&&r.current&&r.current.clear(),c.current=!0,u.current=Date.now(),f(!0),y(!1),s.current=0,P()},m.onmessage=e=>{if(u.current=Date.now(),typeof e.data==`string`){if(e.data===C)return;if(e.data.startsWith(`{`))try{let n=JSON.parse(e.data);if(n.type){if(n.type===`session`&&n.id&&(k.current=n.id,O))try{localStorage.setItem(O,n.id)}catch{}n.type===`error`&&t.write(`\r\n\x1b[31mError: ${n.message}\x1b[0m\r\n`),n.type===`exited`&&D(!0);return}}catch{}t.write(e.data)}},m.onclose=()=>{f(!1),R()},m.onerror=()=>{m.close()}},[P]),L=(0,v.useCallback)(()=>{if(document.visibilityState!==`visible`)return;let e=a.current;if(!e||e.readyState!==WebSocket.OPEN){I();return}if(Date.now()-u.current>T){I();return}try{e.send(S)}catch{I()}},[I]);function R(){let e=Math.min(1e3*2**s.current,3e4);s.current++,y(!0),o.current=setTimeout(()=>{I()},e)}return(0,v.useEffect)(()=>{let e=n.current;if(!e)return;let t=new m({cursorBlink:!0,fontSize:13,scrollback:5e4,fontFamily:`Consolas, 'Cascadia Mono', Menlo, 'DejaVu Sans Mono', 'Courier New', monospace`,theme:b()}),s=new g,c=new h;if(t.loadAddon(s),t.loadAddon(c),t.open(e),!(`ontouchstart`in window||navigator.maxTouchPoints>0))try{let e=new _;e.onContextLoss(()=>e.dispose()),t.loadAddon(e)}catch{}s.fit(),r.current=t,i.current=s,t.onData(e=>{if(e.includes(`\r`)||e.includes(`
|
|
3
|
-
`)){let e=t.buffer.active;A.current=e.baseY+e.cursorY+1}let n=a.current;n?.readyState===WebSocket.OPEN&&n.send(e)}),I();let u=setInterval(L,w),d=()=>{document.visibilityState===`visible`&&L()};document.addEventListener(`visibilitychange`,d);let f=new ResizeObserver(e=>{let t=e[0];if(!(!t||t.contentRect.width===0||t.contentRect.height===0))try{s.fit(),P()}catch{}});f.observe(e);let p=()=>{t.options.theme=b()};window.addEventListener(l,p);let v=()=>window.removeEventListener(l,p);return()=>{v(),f.disconnect(),clearInterval(u),document.removeEventListener(`visibilitychange`,d),o.current&&clearTimeout(o.current),a.current?.close(),a.current=null,t.dispose(),r.current=null,i.current=null}},[]),{connected:d,reconnecting:p,exited:E,sendData:j,getSelection:M,getLastCommandOutput:N,restart:F}}var D=n(),O=[{label:`Tab`,value:` `},{label:`Esc`,value:`\x1B`},{label:`Ctrl`,value:null,isModifier:!0},{label:`↑`,value:`\x1B[A`},{label:`↓`,value:`\x1B[B`},{label:`←`,value:`\x1B[D`},{label:`→`,value:`\x1B[C`},{label:`^C`,value:``}],k=(0,v.memo)(function({metadata:e,tabId:t}){let n=e?.sessionId??`new`,i=e?.projectName,s=(0,v.useRef)(null),{connected:c,reconnecting:l,exited:m,sendData:h,getSelection:g,getLastCommandOutput:_,restart:y}=E({sessionId:n,projectName:i,containerRef:s,tabId:t}),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(null);(0,v.useEffect)(()=>{let e=window.visualViewport;if(!e)return;function t(){e&&C(e.height)}return e.addEventListener(`resize`,t),()=>e.removeEventListener(`resize`,t)},[]);let w=(0,v.useCallback)(()=>{(s.current?.querySelector(`.xterm-helper-textarea`))?.focus()},[]);(0,v.useEffect)(()=>{let e=s.current;if(!e)return;let t=()=>w();return e.addEventListener(`touchend`,t,{capture:!0}),()=>e.removeEventListener(`touchend`,t,{capture:!0})},[w]);let T=(0,v.useCallback)(e=>{if(w(),b&&e.length===1){let t=e.toLowerCase().charCodeAt(0)-96;t>=1&&t<=26&&h(String.fromCharCode(t)),x(!1);return}h(e)},[b,h,w]),k=(0,v.useCallback)(async()=>{let e=g();e&&await navigator.clipboard.writeText(e)},[g]),A=(0,v.useCallback)(async()=>{try{let e=await navigator.clipboard.readText();e&&(h(e),w())}catch{}},[h,w]),j=(0,v.useCallback)(()=>{let e=g(),t=e||_();if(!t.trim())return;let n="```bash\n"+t+"\n```",a=e?`Terminal selection`:`Terminal output`,s=!1,c=()=>{s=!0};window.addEventListener(`ppm:send-to-chat:ack`,c,{once:!0}),window.dispatchEvent(new CustomEvent(`ppm:send-to-chat`,{detail:{text:n,label:a,projectName:i}})),window.removeEventListener(`ppm:send-to-chat:ack`,c),s?r.success(`Sent to chat`,{duration:1500}):o.getState().openTab({type:`chat`,title:`Chat`,projectId:null,metadata:{projectName:i,pendingMessage:n},closable:!0})},[g,_,i]),M=typeof window<`u`&&`ontouchstart`in window;return(0,D.jsxs)(`div`,{className:`flex flex-col h-full`,style:S?{maxHeight:`${S}px`}:void 0,children:[(0,D.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1 bg-surface border-b border-border text-xs`,children:[(0,D.jsx)(`span`,{className:a(`size-2 rounded-full`,m?`bg-error`:c?`bg-success`:l?`bg-warning`:`bg-error`)}),(0,D.jsx)(`span`,{className:`text-text-secondary`,children:m?`Process exited`:c?`Connected`:l?`Reconnecting...`:`Disconnected`}),m&&(0,D.jsxs)(`button`,{onClick:y,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-xs bg-surface-elevated text-text-primary hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground transition-colors`,children:[(0,D.jsx)(u,{size:10}),`Restart`]}),(0,D.jsxs)(`button`,{onClick:j,title:`Send to Chat`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-xs bg-surface-elevated text-text-primary hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground transition-colors ml-auto`,children:[(0,D.jsx)(d,{size:10}),`Chat`]}),(0,D.jsx)(`span`,{className:`text-text-subtle font-mono`,children:n})]}),(0,D.jsx)(`div`,{ref:s,onClick:w,className:`flex-1 min-h-0 bg-background p-1`}),M&&(0,D.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1.5 bg-surface border-t border-border overflow-x-auto`,children:[(0,D.jsx)(`button`,{onClick:k,className:`px-2 py-1.5 rounded text-xs min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,children:(0,D.jsx)(p,{size:14})}),(0,D.jsx)(`button`,{onClick:A,className:`px-2 py-1.5 rounded text-xs min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,children:(0,D.jsx)(f,{size:14})}),(0,D.jsx)(`button`,{onClick:j,className:`px-2 py-1.5 rounded text-xs min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,"aria-label":`Send to Chat`,children:(0,D.jsx)(d,{size:14})}),(0,D.jsx)(`div`,{className:`w-px h-5 bg-border mx-0.5`}),O.map(e=>(0,D.jsx)(`button`,{onClick:()=>{e.label===`Ctrl`?x(!b):e.value&&T(e.value)},className:a(`px-3 py-1.5 rounded text-xs font-mono min-w-[36px] min-h-[32px]`,`bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground`,`transition-colors select-none`,e.label===`Ctrl`&&b&&`bg-primary text-primary-foreground`),children:e.label},e.label))]})]})});export{k as TerminalTab};
|
package/skills-lock.json
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# Enumerate committed memory regions of a process via VirtualQueryEx.
|
|
2
|
-
# Reveals allocation shape: many small regions (per-iteration leak) vs few huge (allocator arena).
|
|
3
|
-
param([int]$ProcessId)
|
|
4
|
-
|
|
5
|
-
Add-Type -TypeDefinition @"
|
|
6
|
-
using System;
|
|
7
|
-
using System.Runtime.InteropServices;
|
|
8
|
-
public class MemProbe {
|
|
9
|
-
[StructLayout(LayoutKind.Sequential)]
|
|
10
|
-
public struct MEMORY_BASIC_INFORMATION {
|
|
11
|
-
public IntPtr BaseAddress;
|
|
12
|
-
public IntPtr AllocationBase;
|
|
13
|
-
public uint AllocationProtect;
|
|
14
|
-
public uint Alignment1;
|
|
15
|
-
public IntPtr RegionSize;
|
|
16
|
-
public uint State;
|
|
17
|
-
public uint Protect;
|
|
18
|
-
public uint Type;
|
|
19
|
-
public uint Alignment2;
|
|
20
|
-
}
|
|
21
|
-
[DllImport("kernel32.dll", SetLastError=true)]
|
|
22
|
-
public static extern IntPtr OpenProcess(uint access, bool inherit, int pid);
|
|
23
|
-
[DllImport("kernel32.dll", SetLastError=true)]
|
|
24
|
-
public static extern int VirtualQueryEx(IntPtr h, IntPtr addr, out MEMORY_BASIC_INFORMATION mbi, int len);
|
|
25
|
-
[DllImport("kernel32.dll")]
|
|
26
|
-
public static extern bool CloseHandle(IntPtr h);
|
|
27
|
-
}
|
|
28
|
-
"@
|
|
29
|
-
|
|
30
|
-
$h = [MemProbe]::OpenProcess(0x0400 -bor 0x0010, $false, $ProcessId)
|
|
31
|
-
if ($h -eq [IntPtr]::Zero) { Write-Error "OpenProcess failed: $([ComponentModel.Win32Exception]::new([Runtime.InteropServices.Marshal]::GetLastWin32Error()).Message)"; exit 1 }
|
|
32
|
-
|
|
33
|
-
$size = [Runtime.InteropServices.Marshal]::SizeOf([type][MemProbe+MEMORY_BASIC_INFORMATION])
|
|
34
|
-
$addr = [IntPtr]::Zero
|
|
35
|
-
$regions = New-Object System.Collections.ArrayList
|
|
36
|
-
$max = [Int64]0x7FFFFFFFFFFF
|
|
37
|
-
|
|
38
|
-
while ([Int64]$addr -lt $max) {
|
|
39
|
-
$mbi = New-Object MemProbe+MEMORY_BASIC_INFORMATION
|
|
40
|
-
if ([MemProbe]::VirtualQueryEx($h, $addr, [ref]$mbi, $size) -eq 0) { break }
|
|
41
|
-
$rs = [Int64]$mbi.RegionSize
|
|
42
|
-
if ($rs -le 0) { break }
|
|
43
|
-
# MEM_COMMIT=0x1000, MEM_PRIVATE=0x20000
|
|
44
|
-
if ($mbi.State -eq 0x1000 -and $mbi.Type -eq 0x20000) {
|
|
45
|
-
[void]$regions.Add([pscustomobject]@{ Base=$mbi.BaseAddress; Size=$rs; Protect=$mbi.Protect })
|
|
46
|
-
}
|
|
47
|
-
$addr = [IntPtr]([Int64]$addr + $rs)
|
|
48
|
-
}
|
|
49
|
-
[void][MemProbe]::CloseHandle($h)
|
|
50
|
-
|
|
51
|
-
$total = ($regions | Measure-Object -Property Size -Sum).Sum
|
|
52
|
-
"PID $ProcessId : committed-private regions = $($regions.Count), total = $([math]::Round($total/1GB,2)) GB"
|
|
53
|
-
""
|
|
54
|
-
"--- by protection flag ---"
|
|
55
|
-
$regions | Group-Object Protect | Sort-Object { ($_.Group | Measure-Object Size -Sum).Sum } -Descending |
|
|
56
|
-
Select-Object @{n='Protect';e={'0x{0:X}' -f [int]$_.Name}}, Count,
|
|
57
|
-
@{n='TotalGB';e={[math]::Round((($_.Group|Measure-Object Size -Sum).Sum)/1GB,2)}} |
|
|
58
|
-
Format-Table -AutoSize
|
|
59
|
-
|
|
60
|
-
"--- by region size bucket ---"
|
|
61
|
-
$regions | Group-Object { [math]::Pow(2,[math]::Floor([math]::Log($_.Size,2))) } |
|
|
62
|
-
Sort-Object { ($_.Group | Measure-Object Size -Sum).Sum } -Descending |
|
|
63
|
-
Select-Object -First 12 @{n='BucketMB';e={[math]::Round([double]$_.Name/1MB,3)}}, Count,
|
|
64
|
-
@{n='TotalGB';e={[math]::Round((($_.Group|Measure-Object Size -Sum).Sum)/1GB,2)}} |
|
|
65
|
-
Format-Table -AutoSize
|
|
66
|
-
|
|
67
|
-
"--- top 10 single regions ---"
|
|
68
|
-
$regions | Sort-Object Size -Descending | Select-Object -First 10 @{n='Base';e={'0x{0:X}' -f [Int64]$_.Base}},
|
|
69
|
-
@{n='MB';e={[math]::Round($_.Size/1MB,1)}}, @{n='Protect';e={'0x{0:X}' -f [int]$_.Protect}} | Format-Table -AutoSize
|