@hienlh/ppm 0.18.9 → 0.18.10

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 (73) hide show
  1. package/.spike/group-protected-probe.ts +21 -0
  2. package/.spike/tunnel.err +22 -42
  3. package/.spike/w.err +26 -94
  4. package/CHANGELOG.md +12 -0
  5. package/assets/skills/ppm/SKILL.md +1 -1
  6. package/assets/skills/ppm/references/http-api.md +1 -1
  7. package/dist/web/assets/{ai-resource-editor-DFCuNe-P.js → ai-resource-editor-mdDKG-rw.js} +1 -1
  8. package/dist/web/assets/{chat-tab-flMPLoKb.js → chat-tab-C060A94y.js} +3 -3
  9. package/dist/web/assets/{code-editor-C2VQbXzw.js → code-editor-WELegzdp.js} +2 -2
  10. package/dist/web/assets/{conflict-editor-CdH_h0vD.js → conflict-editor-fRTU3f1o.js} +1 -1
  11. package/dist/web/assets/{csv-preview-CY_454vd.js → csv-preview-D1d0cxOJ.js} +1 -1
  12. package/dist/web/assets/{database-viewer-BCZOTrPT.js → database-viewer-DevnWTV4.js} +1 -1
  13. package/dist/web/assets/{diff-viewer-BwfMN-nW.js → diff-viewer-DGxVg1pD.js} +1 -1
  14. package/dist/web/assets/{docx-preview-D3Sdh_aT.js → docx-preview-Cx-zLwAw.js} +1 -1
  15. package/dist/web/assets/{explorer-body-BKOMM566.js → explorer-body-j_4hVc34.js} +1 -1
  16. package/dist/web/assets/{explorer-window-content-Bbzijk8t.js → explorer-window-content-DdrGwk3w.js} +1 -1
  17. package/dist/web/assets/{extension-webview-CuOQrHIS.js → extension-webview-BH_mWYMe.js} +1 -1
  18. package/dist/web/assets/format-bytes-BE_W3UBg.js +1 -0
  19. package/dist/web/assets/{git-log-panel-DcV7PhqW.js → git-log-panel-CfpXRJcP.js} +1 -1
  20. package/dist/web/assets/{glide-data-grid-Cehfgrzc.js → glide-data-grid-n4ox_uev.js} +1 -1
  21. package/dist/web/assets/{group-chat-tab-BVPYxjz-.js → group-chat-tab-dYuuknLN.js} +1 -1
  22. package/dist/web/assets/{image-preview-D-Ok10eZ.js → image-preview-Ss38ex8g.js} +1 -1
  23. package/dist/web/assets/index-BiTiXgBZ.css +2 -0
  24. package/dist/web/assets/{index-CerSxGdf.js → index-Ch8l9de-.js} +5 -5
  25. package/dist/web/assets/{keybindings-store-aIY40k2o.js → keybindings-store-CDfTjwZX.js} +1 -1
  26. package/dist/web/assets/{markdown-renderer-pVzBdkpl.js → markdown-renderer-B317vEys.js} +1 -1
  27. package/dist/web/assets/{markdown-renderer-I89kyQhe.js → markdown-renderer-CpRlpLHw.js} +1 -1
  28. package/dist/web/assets/{mobile-explorer-sheet-5Uj9ZMM9.js → mobile-explorer-sheet-D1Bv9UCT.js} +1 -1
  29. package/dist/web/assets/{notification-store-DJ-OtAG3.js → notification-store-KwTAZT8b.js} +1 -1
  30. package/dist/web/assets/overview-panel-BxDohIEa.js +1 -0
  31. package/dist/web/assets/{pdf-preview-Di5xHFyT.js → pdf-preview-dwRe54ht.js} +1 -1
  32. package/dist/web/assets/{postgres-viewer-CR6VpTrX.js → postgres-viewer-BWZLW7kI.js} +1 -1
  33. package/dist/web/assets/process-table-CI-fnVsy.js +1 -0
  34. package/dist/web/assets/resolve-theme-B9ABAH_3.js +1 -0
  35. package/dist/web/assets/{settings-tab-jbiQwozX.js → settings-tab-mPxrKkfm.js} +1 -1
  36. package/dist/web/assets/{sql-query-editor-BPYsJDsn.js → sql-query-editor-BwPjEaP9.js} +1 -1
  37. package/dist/web/assets/{sqlite-viewer-Bq9ZJA2y.js → sqlite-viewer-Cs-_D942.js} +1 -1
  38. package/dist/web/assets/{system-monitor-body-CKEYWyN9.js → system-monitor-body-CV7-0hZG.js} +2 -2
  39. package/dist/web/assets/{system-monitor-tab-WjhFFHyM.js → system-monitor-tab-Ce-8Axhh.js} +1 -1
  40. package/dist/web/assets/{system-monitor-window-content-CMiISeoC.js → system-monitor-window-content-CetwYOQy.js} +1 -1
  41. package/dist/web/assets/{team-member-sheet-oY5EkH53.js → team-member-sheet-CjgaQjsZ.js} +2 -2
  42. package/dist/web/assets/{team-member-window-content-yCBeI_5X.js → team-member-window-content-DNJiYWS7.js} +1 -1
  43. package/dist/web/assets/{terminal-tab-BxHtMR7h.js → terminal-tab-DF7521sT.js} +1 -1
  44. package/dist/web/assets/{tool-cards-BcGrk1zk.js → tool-cards-DCAXGDJI.js} +2 -2
  45. package/dist/web/assets/{use-monaco-theme-CGucu3fb.js → use-monaco-theme-DSCdlrjO.js} +1 -1
  46. package/dist/web/assets/{use-open-team-member-DdrRXj-M.js → use-open-team-member-H4k74HnV.js} +1 -1
  47. package/dist/web/assets/{use-websocket-C-Rxv8JN.js → use-websocket-iJfc7EbK.js} +1 -1
  48. package/dist/web/assets/{video-preview-DYAbbmd0.js → video-preview-B0ZWpX0F.js} +1 -1
  49. package/dist/web/index.html +3 -3
  50. package/dist/web/sw.js +1 -1
  51. package/package.json +1 -1
  52. package/src/web/components/system/build-kill-request.ts +28 -1
  53. package/src/web/components/system/chart-scale.ts +3 -3
  54. package/src/web/components/system/kill-confirm-dialog.tsx +44 -28
  55. package/src/web/components/system/metric-chart-canvas.tsx +1 -2
  56. package/src/web/components/system/process-columns-grid.ts +39 -29
  57. package/src/web/components/system/process-group-row.tsx +31 -8
  58. package/src/web/components/system/process-row.tsx +6 -7
  59. package/src/web/components/system/process-table-model.ts +4 -22
  60. package/src/web/components/system/process-table-toolbar.tsx +12 -43
  61. package/src/web/components/system/process-table.tsx +22 -63
  62. package/src/web/components/system/sortable-header.tsx +33 -8
  63. package/src/web/components/system/system-monitor-body.tsx +1 -1
  64. package/src/web/components/system/use-column-widths.ts +91 -0
  65. package/src/web/components/system/use-process-kill.ts +100 -0
  66. package/src/web/styles/globals.css +5 -3
  67. package/src/web/theme/builtin/aurora.ts +8 -5
  68. package/dist/web/assets/format-bytes-Dk7B73B7.js +0 -1
  69. package/dist/web/assets/index-DRA_OpWY.css +0 -2
  70. package/dist/web/assets/overview-panel-Cgi3UPY1.js +0 -1
  71. package/dist/web/assets/process-table-DL6shbzt.js +0 -1
  72. package/dist/web/assets/resolve-theme-IdhSR-gx.js +0 -1
  73. package/src/web/components/system/sparkline-canvas.tsx +0 -63
@@ -0,0 +1,21 @@
1
+ // How many groups would the whole-app kill button be enabled for, per the live snapshot?
2
+ import { Database } from "bun:sqlite";
3
+ import { homedir } from "node:os";
4
+ import { resolve } from "node:path";
5
+ import { isGroupProtected } from "../src/web/components/system/build-kill-request.ts";
6
+
7
+ const db = new Database(resolve(homedir(), ".ppm", "ppm.dev.db"), { readonly: true });
8
+ const row = db.query("SELECT value FROM config WHERE key = 'auth'").get() as { value: string } | null;
9
+ const token = row ? JSON.parse(row.value)?.token : undefined;
10
+ const res = await fetch("http://localhost:8081/api/system/resources?processes=1", { headers: token ? { Authorization: `Bearer ${token}` } : {} });
11
+ const snap = (await res.json()).data;
12
+ const byPid = new Map(snap.processes.map((p: any) => [p.pid, p]));
13
+ let enabled = 0, disabled = 0;
14
+ const protectedNames = new Map<string, number>();
15
+ for (const g of snap.groups) {
16
+ const members = g.pids.map((pid: number) => byPid.get(pid)).filter(Boolean);
17
+ if (isGroupProtected(members)) { disabled++; for (const m of members) if (m.protected) protectedNames.set(m.name, (protectedNames.get(m.name) ?? 0) + 1); }
18
+ else enabled++;
19
+ }
20
+ console.log({ groups: snap.groups.length, enabled, disabled, processes: snap.processes.length, protectedProcs: snap.processes.filter((p: any) => p.protected).length });
21
+ console.log("protected names in disabled groups:", [...protectedNames].slice(0, 12));
package/.spike/tunnel.err CHANGED
@@ -1,42 +1,22 @@
1
- 2026-09-04T16:02:18Z INF Thank you for trying Cloudflare Tunnel. Doing so, without a Cloudflare account, is a quick way to experiment and try it out. However, be aware that these account-less Tunnels have no uptime guarantee, are subject to the Cloudflare Online Services Terms of Use (https://www.cloudflare.com/website-terms/), and Cloudflare reserves the right to investigate your use of Tunnels for violations of such terms. If you intend to use Tunnels in production you should use a pre-created named tunnel by following: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps
2
- 2026-09-04T16:02:18Z INF Requesting new quick Tunnel on trycloudflare.com...
3
- 2026-09-04T16:02:25Z INF +--------------------------------------------------------------------------------------------+
4
- 2026-09-04T16:02:25Z INF | Your quick Tunnel has been created! Visit it at (it may take some time to be reachable): |
5
- 2026-09-04T16:02:25Z INF | https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com |
6
- 2026-09-04T16:02:25Z INF +--------------------------------------------------------------------------------------------+
7
- 2026-09-04T16:02:25Z INF Cannot determine default configuration path. No file [config.yml config.yaml] in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp]
8
- 2026-09-04T16:02:25Z INF Version 2025.8.1 (Checksum b5d598b00cc3a28cabc5812d9f762819334614bae452db4e7f23eefe7b081556)
9
- 2026-09-04T16:02:25Z INF GOOS: windows, GOVersion: go1.24.2, GoArch: amd64
10
- 2026-09-04T16:02:25Z INF Settings: map[ha-connections:1 no-autoupdate:true protocol:quic url:http://localhost:5173]
11
- 2026-09-04T16:02:25Z INF cloudflared will not automatically update on Windows systems.
12
- 2026-09-04T16:02:25Z INF Generated Connector ID: a397e2d7-524f-4b99-86a0-cb400586f381
13
- 2026-09-04T16:02:25Z INF Initial protocol quic
14
- 2026-09-04T16:02:25Z INF ICMP proxy will use 192.168.1.35 as source for IPv4
15
- 2026-09-04T16:02:25Z INF ICMP proxy will use 2405:4802:bfda:8c0::7ef in zone Wi-Fi as source for IPv6
16
- 2026-09-04T16:02:25Z ERR Cannot determine default origin certificate path. No file cert.pem in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp]. You need to specify the origin certificate path by specifying the origincert option in the configuration file, or set TUNNEL_ORIGIN_CERT environment variable originCertPath=
17
- 2026-09-04T16:02:25Z INF cloudflared does not support loading the system root certificate pool on Windows. Please use --origin-ca-pool <PATH> to specify the path to the certificate pool
18
- 2026-09-04T16:02:25Z INF ICMP proxy will use 192.168.1.35 as source for IPv4
19
- 2026-09-04T16:02:25Z INF Tunnel connection curve preferences: [X25519MLKEM768 CurveP256] connIndex=0 event=0 ip=198.41.192.47
20
- 2026-09-04T16:02:25Z INF ICMP proxy will use 2405:4802:bfda:8c0::7ef in zone Wi-Fi as source for IPv6
21
- 2026-09-04T16:02:25Z INF Starting metrics server on 127.0.0.1:20242/metrics
22
- 2026-09-04T16:02:25Z INF Registered tunnel connection connIndex=0 connection=613ce64b-ecd0-421b-acb7-3a5c872738c4 event=0 ip=198.41.192.47 location=sin18 protocol=quic
23
- 2026-09-04T16:05:08Z ERR error="stream 2085 canceled by remote with error code 0" connIndex=0 event=1 ingressRule=0 originService=http://localhost:5173
24
- 2026-09-04T16:05:08Z ERR Request failed error="stream 2085 canceled by remote with error code 0" connIndex=0 dest=https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com/api/system/resources/stream?token=123123 event=0 ip=198.41.192.47 type=http
25
- 2026-09-04T16:13:19Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 event=1 ingressRule=0 originService=http://localhost:5173
26
- 2026-09-04T16:13:19Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 dest=https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com/ws/global?token=123123 event=0 ip=198.41.192.47 type=ws
27
- 2026-09-04T16:13:20Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 event=1 ingressRule=0 originService=http://localhost:5173
28
- 2026-09-04T16:13:20Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 dest=https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com/ws/project/ppm/terminal/dacbd4e9-6317-4634-85e8-ed0ffd7b1205?token=123123 event=0 ip=198.41.192.47 type=ws
29
- 2026-09-04T16:13:20Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 event=1 ingressRule=0 originService=http://localhost:5173
30
- 2026-09-04T16:13:20Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 dest=https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com/ws/extensions?token=123123 event=0 ip=198.41.192.47 type=ws
31
- 2026-09-04T16:13:22Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 event=1 ingressRule=0 originService=http://localhost:5173
32
- 2026-09-04T16:13:22Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 dest=https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com/ws/global?token=123123 event=0 ip=198.41.192.47 type=ws
33
- 2026-09-04T16:13:23Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 event=1 ingressRule=0 originService=http://localhost:5173
34
- 2026-09-04T16:13:23Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 dest=https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com/ws/project/ppm/terminal/dacbd4e9-6317-4634-85e8-ed0ffd7b1205?token=123123 event=0 ip=198.41.192.47 type=ws
35
- 2026-09-04T16:13:23Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 event=1 ingressRule=0 originService=http://localhost:5173
36
- 2026-09-04T16:13:23Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 dest=https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com/ws/extensions?token=123123 event=0 ip=198.41.192.47 type=ws
37
- 2026-09-04T16:13:27Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 event=1 ingressRule=0 originService=http://localhost:5173
38
- 2026-09-04T16:13:27Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 dest=https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com/ws/global?token=123123 event=0 ip=198.41.192.47 type=ws
39
- 2026-09-04T16:13:28Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 event=1 ingressRule=0 originService=http://localhost:5173
40
- 2026-09-04T16:13:28Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 dest=https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com/ws/project/ppm/terminal/dacbd4e9-6317-4634-85e8-ed0ffd7b1205?token=123123 event=0 ip=198.41.192.47 type=ws
41
- 2026-09-04T16:13:28Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 event=1 ingressRule=0 originService=http://localhost:5173
42
- 2026-09-04T16:13:28Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: EOF" connIndex=0 dest=https://thereafter-appreciate-dreams-parliamentary.trycloudflare.com/ws/extensions?token=123123 event=0 ip=198.41.192.47 type=ws
1
+ 2026-09-04T18:56:09Z INF Thank you for trying Cloudflare Tunnel. Doing so, without a Cloudflare account, is a quick way to experiment and try it out. However, be aware that these account-less Tunnels have no uptime guarantee, are subject to the Cloudflare Online Services Terms of Use (https://www.cloudflare.com/website-terms/), and Cloudflare reserves the right to investigate your use of Tunnels for violations of such terms. If you intend to use Tunnels in production you should use a pre-created named tunnel by following: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps
2
+ 2026-09-04T18:56:09Z INF Requesting new quick Tunnel on trycloudflare.com...
3
+ 2026-09-04T18:56:13Z INF +--------------------------------------------------------------------------------------------+
4
+ 2026-09-04T18:56:13Z INF | Your quick Tunnel has been created! Visit it at (it may take some time to be reachable): |
5
+ 2026-09-04T18:56:13Z INF | https://cancellation-harold-more-tigers.trycloudflare.com |
6
+ 2026-09-04T18:56:13Z INF +--------------------------------------------------------------------------------------------+
7
+ 2026-09-04T18:56:13Z INF Cannot determine default configuration path. No file [config.yml config.yaml] in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp]
8
+ 2026-09-04T18:56:13Z INF Version 2025.8.1 (Checksum b5d598b00cc3a28cabc5812d9f762819334614bae452db4e7f23eefe7b081556)
9
+ 2026-09-04T18:56:13Z INF GOOS: windows, GOVersion: go1.24.2, GoArch: amd64
10
+ 2026-09-04T18:56:13Z INF Settings: map[ha-connections:1 no-autoupdate:true protocol:quic url:http://localhost:5173]
11
+ 2026-09-04T18:56:13Z INF cloudflared will not automatically update on Windows systems.
12
+ 2026-09-04T18:56:13Z INF Generated Connector ID: f47e931b-a8fd-4f00-8ca3-408da700752e
13
+ 2026-09-04T18:56:13Z INF Initial protocol quic
14
+ 2026-09-04T18:56:13Z INF ICMP proxy will use 192.168.1.35 as source for IPv4
15
+ 2026-09-04T18:56:13Z INF ICMP proxy will use 2405:4802:bfda:8c0::7ef in zone Wi-Fi as source for IPv6
16
+ 2026-09-04T18:56:13Z ERR Cannot determine default origin certificate path. No file cert.pem in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp]. You need to specify the origin certificate path by specifying the origincert option in the configuration file, or set TUNNEL_ORIGIN_CERT environment variable originCertPath=
17
+ 2026-09-04T18:56:13Z INF cloudflared does not support loading the system root certificate pool on Windows. Please use --origin-ca-pool <PATH> to specify the path to the certificate pool
18
+ 2026-09-04T18:56:13Z INF ICMP proxy will use 192.168.1.35 as source for IPv4
19
+ 2026-09-04T18:56:13Z INF Tunnel connection curve preferences: [X25519MLKEM768 CurveP256] connIndex=0 event=0 ip=198.41.200.193
20
+ 2026-09-04T18:56:13Z INF ICMP proxy will use 2405:4802:bfda:8c0::7ef in zone Wi-Fi as source for IPv6
21
+ 2026-09-04T18:56:13Z INF Starting metrics server on 127.0.0.1:20242/metrics
22
+ 2026-09-04T18:56:13Z INF Registered tunnel connection connIndex=0 connection=c174dc70-ed73-417c-9fba-25c88a9c9c0e event=0 ip=198.41.200.193 location=sin11 protocol=quic
package/.spike/w.err CHANGED
@@ -1,96 +1,28 @@
1
1
  $ bun run vite --config vite.config.ts
2
- (node:3912) [DEP0147] DeprecationWarning: In future versions of Node.js, fs.rmdir(path, { recursive: true }) will be removed. Use fs.rm(path, { recursive: true }) instead
2
+ (node:15420) [DEP0147] DeprecationWarning: In future versions of Node.js, fs.rmdir(path, { recursive: true }) will be removed. Use fs.rm(path, { recursive: true }) instead
3
3
  (Use `node --trace-deprecation ...` to show where the warning was created)
4
- 11:03:23 PM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
5
- 11:03:25 PM [vite] (client) [console.warn] xterm.js: task queue exceeded allotted deadline by 25ms
6
- 11:05:23 PM [vite] (client) [Unhandled error] TypeError: Cannot read properties of undefined (reading 'x')
7
- > DragEngine.useDrag components/floating-window/use-window-drag.ts:20:48
8
- 18 |
9
- 19 | const { dx, dy } = gestureDisplacement(xy, initial, ctx.getScale());
10
- 20 | const next = clampRect({ ...base, x: base.x + dx, y: base.y + dy }, ctx.getBounds());
11
- | ^
12
- 21 | ctx.onChange(next, last);
13
- 22 |
14
- > DragEngine.emit ../../node_modules/@use-gesture/core/dist/actions-fe213e88.esm.js:414:22
15
- > DragEngine.pointerUp ../../node_modules/@use-gesture/core/dist/actions-fe213e88.esm.js:748:9
16
- > executeDispatch ../../node_modules/react-dom/cjs/react-dom-client.development.js:19116:8
17
- > runWithFiberInDEV ../../node_modules/react-dom/cjs/react-dom-client.development.js:871:29
18
- > processDispatchQueue ../../node_modules/react-dom/cjs/react-dom-client.development.js:19166:18
19
- > ../../node_modules/react-dom/cjs/react-dom-client.development.js:19767:8
20
- > batchedUpdates$1 ../../node_modules/react-dom/cjs/react-dom-client.development.js:3255:39
21
- > dispatchEventForPluginEventSystem ../../node_modules/react-dom/cjs/react-dom-client.development.js:19320:6
22
- > dispatchEvent ../../node_modules/react-dom/cjs/react-dom-client.development.js:23585:10
23
-
24
- 11:07:28 PM [vite] ws proxy error:
25
- Error: read ECONNRESET
26
- at TCP.onStreamRead (node:internal/stream_base_commons:218:20)
27
- 11:07:29 PM [vite] ws proxy error:
28
- Error: read ECONNRESET
29
- at TCP.onStreamRead (node:internal/stream_base_commons:218:20)
30
- 11:13:18 PM [vite] ws proxy error:
31
- Error: read ECONNRESET
32
- at TCP.onStreamRead (node:internal/stream_base_commons:218:20)
33
- 11:13:18 PM [vite] ws proxy error:
34
- Error: read ECONNRESET
35
- at TCP.onStreamRead (node:internal/stream_base_commons:218:20)
36
- 11:13:18 PM [vite] ws proxy error:
37
- Error: read ECONNRESET
38
- at TCP.onStreamRead (node:internal/stream_base_commons:218:20)
39
- 11:13:18 PM [vite] http proxy error: /api/system/resources/stream?token=123123&processes=1
40
- Error: read ECONNRESET
41
- at TCP.onStreamRead (node:internal/stream_base_commons:218:20)
42
- 11:13:18 PM [vite] ws proxy error:
43
- Error: read ECONNRESET
44
- at TCP.onStreamRead (node:internal/stream_base_commons:218:20)
45
- 11:13:19 PM [vite] ws proxy error:
46
- AggregateError [ECONNREFUSED]:
47
- at internalConnectMultiple (node:net:1122:18)
48
- at afterConnectMultiple (node:net:1689:7)
49
- 11:13:20 PM [vite] ws proxy error:
50
- AggregateError [ECONNREFUSED]:
51
- at internalConnectMultiple (node:net:1122:18)
52
- at afterConnectMultiple (node:net:1689:7)
53
- 11:13:20 PM [vite] ws proxy error:
54
- AggregateError [ECONNREFUSED]:
55
- at internalConnectMultiple (node:net:1122:18)
56
- at afterConnectMultiple (node:net:1689:7)
57
- 11:13:22 PM [vite] http proxy error: /api/health
58
- AggregateError [ECONNREFUSED]:
59
- at internalConnectMultiple (node:net:1122:18)
60
- at afterConnectMultiple (node:net:1689:7)
61
- 11:13:22 PM [vite] http proxy error: /api/system/resources/stream/5277a4ee/ping
62
- AggregateError [ECONNREFUSED]:
63
- at internalConnectMultiple (node:net:1122:18)
64
- at afterConnectMultiple (node:net:1689:7)
65
- 11:13:22 PM [vite] ws proxy error:
66
- AggregateError [ECONNREFUSED]:
67
- at internalConnectMultiple (node:net:1122:18)
68
- at afterConnectMultiple (node:net:1689:7)
69
- 11:13:23 PM [vite] ws proxy error:
70
- AggregateError [ECONNREFUSED]:
71
- at internalConnectMultiple (node:net:1122:18)
72
- at afterConnectMultiple (node:net:1689:7)
73
- 11:13:23 PM [vite] ws proxy error:
74
- AggregateError [ECONNREFUSED]:
75
- at internalConnectMultiple (node:net:1122:18)
76
- at afterConnectMultiple (node:net:1689:7)
77
- 11:13:27 PM [vite] ws proxy error:
78
- AggregateError [ECONNREFUSED]:
79
- at internalConnectMultiple (node:net:1122:18)
80
- at afterConnectMultiple (node:net:1689:7)
81
- 11:13:28 PM [vite] ws proxy error:
82
- AggregateError [ECONNREFUSED]:
83
- at internalConnectMultiple (node:net:1122:18)
84
- at afterConnectMultiple (node:net:1689:7)
85
- 11:13:28 PM [vite] ws proxy error:
86
- AggregateError [ECONNREFUSED]:
87
- at internalConnectMultiple (node:net:1122:18)
88
- at afterConnectMultiple (node:net:1689:7)
89
- 11:13:32 PM [vite] http proxy error: /api/system/resources/stream/5277a4ee/ping
90
- AggregateError [ECONNREFUSED]:
91
- at internalConnectMultiple (node:net:1122:18)
92
- at afterConnectMultiple (node:net:1689:7)
93
- 11:13:33 PM [vite] http proxy error: /api/health
94
- AggregateError [ECONNREFUSED]:
95
- at internalConnectMultiple (node:net:1122:18)
96
- at afterConnectMultiple (node:net:1689:7)
4
+ 1:54:07 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
5
+ 1:54:19 AM [vite] (client) [console.warn] Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
6
+ 1:54:19 AM [vite] (client) [console.warn] Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
7
+ 1:54:20 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
8
+ 1:54:22 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
9
+ 1:54:24 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
10
+ 1:54:25 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) queuing message
11
+ 1:55:26 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
12
+ 1:55:38 AM [vite] (client) [console.warn] Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
13
+ 1:55:38 AM [vite] (client) [console.warn] Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
14
+ 1:55:39 AM [vite] (client) [console.warn] Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
15
+ 1:55:39 AM [vite] (client) [console.warn] Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
16
+ 1:55:40 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
17
+ 1:55:41 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
18
+ 1:55:44 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
19
+ 1:55:45 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
20
+ 2:03:30 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
21
+ 2:03:43 AM [vite] (client) [console.warn] Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
22
+ 2:03:43 AM [vite] (client) [console.warn] Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
23
+ 2:03:44 AM [vite] (client) [console.warn] Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
24
+ 2:03:44 AM [vite] (client) [console.warn] Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
25
+ 2:03:45 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
26
+ 2:03:47 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
27
+ 2:03:50 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
28
+ 2:03:51 AM [vite] (client) [console.warn] [ws] WS not open (readyState=0) — queuing message
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.18.10] - 2026-09-05
4
+
5
+ ### Added
6
+ - **End a whole app from System Monitor** — the × on a group row ends the app and all its helper processes in one confirm; groups holding a PPM or system process stay disabled.
7
+ - **Resizable process columns** — drag a header's right edge to resize CPU/RAM/Disk/GPU/Net, double-click to reset; widths are remembered per device.
8
+
9
+ ### Changed
10
+ - **Trend/Age column removed** from the process table — it starved the process name; uptime now shows in the name tooltip.
11
+
12
+ ### Fixed
13
+ - **Aurora Light surfaces are opaque again** — dropdowns, bottom sheets and stacked windows no longer let content bleed through; the pre-theme first paint matches too.
14
+
3
15
  ## [0.18.9] - 2026-09-04
4
16
 
5
17
  ### Added
@@ -71,4 +71,4 @@ This skill covers the `ppm` CLI, its HTTP API, and its config DB. It does **not*
71
71
  - Third-party extensions (inspect via `ppm ext list`).
72
72
  - The Claude Agent SDK internals (separate skill).
73
73
 
74
- <!-- Generated for PPM v0.18.9 at build time. Re-run `ppm export skill --install` to refresh. -->
74
+ <!-- Generated for PPM v0.18.10 at build time. Re-run `ppm export skill --install` to refresh. -->
@@ -309,4 +309,4 @@ _Base URL: `http://localhost:8080` (default; override via `ppm config set port <
309
309
  - `ws://<host>/ws/terminal` — PTY terminal multiplexer
310
310
  - `ws://<host>/ws/extensions` — extension host channel
311
311
 
312
- <!-- Generated from src/server/routes/ for PPM v0.18.9 -->
312
+ <!-- Generated from src/server/routes/ for PPM v0.18.10 -->
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./save-C4z1p51e.js";import{s as i}from"./api-client-BSB14J4w.js";import"./vendor-mermaid-DrwG0NYt.js";import"./settings-store-C20lqh0G.js";import{n as a}from"./utils-DoY4yTP-.js";import{$n as o,A as s,M as c,N as l,On as u,Qn as d,j as f,k as p,kn as m,s as h}from"./index-CerSxGdf.js";import{t as g}from"./use-monaco-theme-CGucu3fb.js";var _=e(t(),1),v=n();function y({metadata:e}){let t=e?.filePath,n=e?.name,a=e?.resourceType??`skill`,y=e?.scope??`user`,x=e?.readOnly===!0,S=e?.shadowed===!0,C=e?.shadowedBy,w=e?.project??``,[T,E]=(0,_.useState)(``),[D,O]=(0,_.useState)(``),[k,A]=(0,_.useState)(!0),[j,M]=(0,_.useState)(null),[N,P]=(0,_.useState)(!1),F=g(),I=(0,_.useRef)(``),L=T!==D;(0,_.useEffect)(()=>{let e=!1;return A(!0),M(null),c(t,w).then(t=>{e||(E(t.content),O(t.content),I.current=t.content)}).catch(t=>{e||M(t.message)}).finally(()=>{e||A(!1)}),()=>{e=!0}},[t,w]);let R=(0,_.useCallback)(async()=>{if(x||N)return;let e=I.current;if(e!==D){P(!0);try{await l(t,e,w),O(e),E(e),i.success(`Saved`),f.getState().reload()}catch(e){i.error(e.message)}finally{P(!1)}}},[t,w,D,x,N]);(0,_.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`s`&&(e.preventDefault(),R())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[R]);let z=s[a];return(0,v.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2 shrink-0`,children:[(0,v.jsx)(z,{className:`size-4 text-text-subtle`}),(0,v.jsx)(`span`,{className:`text-sm font-semibold`,children:n}),(0,v.jsx)(p,{scope:y}),L&&!x&&(0,v.jsx)(`span`,{className:`size-1.5 rounded-full bg-primary`,title:`Unsaved changes`}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsxs)(`span`,{className:`hidden sm:block text-[11px] text-text-subtle`,children:[a,` · markdown`]}),!x&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`button`,{onClick:()=>E(D),disabled:!L||N,className:`flex items-center gap-1 rounded px-2 py-1 text-xs text-text-secondary hover:bg-surface-elevated disabled:opacity-40`,children:[(0,v.jsx)(u,{className:`size-3.5`}),` Revert`]}),(0,v.jsxs)(`button`,{onClick:()=>void R(),disabled:!L||N,className:`flex items-center gap-1 rounded bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-40`,children:[N?(0,v.jsx)(o,{className:`size-3.5 animate-spin`}):(0,v.jsx)(r,{className:`size-3.5`}),` Save`]})]})]}),x&&(0,v.jsx)(b,{icon:d,tone:`muted`,children:`Bundled resource — read-only. Duplicate it (from the AI Resources panel) to make an editable copy.`}),S&&C&&(0,v.jsxs)(b,{icon:m,tone:`warn`,children:[`This `,a,` is overridden by another “`,C.name,`” from a higher-priority source (`,C.source,`). It is currently inactive.`]}),(0,v.jsx)(`div`,{className:`min-h-0 flex-1`,children:k?(0,v.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,v.jsx)(o,{className:`size-5 animate-spin text-primary`})}):j?(0,v.jsx)(`div`,{className:`p-6 text-center text-sm text-destructive`,children:j}):(0,v.jsx)(h,{height:`100%`,language:`markdown`,theme:F,value:T,onChange:e=>{let t=e??``;I.current=t,E(t)},options:{readOnly:x,minimap:{enabled:!1},fontSize:13,wordWrap:`on`,scrollBeyondLastLine:!1,lineNumbers:`on`}})})]})}function b({icon:e,tone:t,children:n}){return(0,v.jsxs)(`div`,{className:a(`flex items-start gap-2 px-3 py-2 text-[12px] shrink-0 border-b border-border`,t===`warn`?`bg-amber-500/10 text-amber-300`:`bg-surface-elevated text-text-secondary`),children:[(0,v.jsx)(e,{className:`mt-0.5 size-3.5 shrink-0`}),(0,v.jsx)(`span`,{children:n})]})}export{y as AiResourceEditor};
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./save-C4z1p51e.js";import{s as i}from"./api-client-BSB14J4w.js";import"./vendor-mermaid-DrwG0NYt.js";import"./settings-store-C20lqh0G.js";import{n as a}from"./utils-DoY4yTP-.js";import{$n as o,A as s,M as c,N as l,On as u,Qn as d,j as f,k as p,kn as m,s as h}from"./index-Ch8l9de-.js";import{t as g}from"./use-monaco-theme-DSCdlrjO.js";var _=e(t(),1),v=n();function y({metadata:e}){let t=e?.filePath,n=e?.name,a=e?.resourceType??`skill`,y=e?.scope??`user`,x=e?.readOnly===!0,S=e?.shadowed===!0,C=e?.shadowedBy,w=e?.project??``,[T,E]=(0,_.useState)(``),[D,O]=(0,_.useState)(``),[k,A]=(0,_.useState)(!0),[j,M]=(0,_.useState)(null),[N,P]=(0,_.useState)(!1),F=g(),I=(0,_.useRef)(``),L=T!==D;(0,_.useEffect)(()=>{let e=!1;return A(!0),M(null),c(t,w).then(t=>{e||(E(t.content),O(t.content),I.current=t.content)}).catch(t=>{e||M(t.message)}).finally(()=>{e||A(!1)}),()=>{e=!0}},[t,w]);let R=(0,_.useCallback)(async()=>{if(x||N)return;let e=I.current;if(e!==D){P(!0);try{await l(t,e,w),O(e),E(e),i.success(`Saved`),f.getState().reload()}catch(e){i.error(e.message)}finally{P(!1)}}},[t,w,D,x,N]);(0,_.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`s`&&(e.preventDefault(),R())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[R]);let z=s[a];return(0,v.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2 shrink-0`,children:[(0,v.jsx)(z,{className:`size-4 text-text-subtle`}),(0,v.jsx)(`span`,{className:`text-sm font-semibold`,children:n}),(0,v.jsx)(p,{scope:y}),L&&!x&&(0,v.jsx)(`span`,{className:`size-1.5 rounded-full bg-primary`,title:`Unsaved changes`}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsxs)(`span`,{className:`hidden sm:block text-[11px] text-text-subtle`,children:[a,` · markdown`]}),!x&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`button`,{onClick:()=>E(D),disabled:!L||N,className:`flex items-center gap-1 rounded px-2 py-1 text-xs text-text-secondary hover:bg-surface-elevated disabled:opacity-40`,children:[(0,v.jsx)(u,{className:`size-3.5`}),` Revert`]}),(0,v.jsxs)(`button`,{onClick:()=>void R(),disabled:!L||N,className:`flex items-center gap-1 rounded bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-40`,children:[N?(0,v.jsx)(o,{className:`size-3.5 animate-spin`}):(0,v.jsx)(r,{className:`size-3.5`}),` Save`]})]})]}),x&&(0,v.jsx)(b,{icon:d,tone:`muted`,children:`Bundled resource — read-only. Duplicate it (from the AI Resources panel) to make an editable copy.`}),S&&C&&(0,v.jsxs)(b,{icon:m,tone:`warn`,children:[`This `,a,` is overridden by another “`,C.name,`” from a higher-priority source (`,C.source,`). It is currently inactive.`]}),(0,v.jsx)(`div`,{className:`min-h-0 flex-1`,children:k?(0,v.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,v.jsx)(o,{className:`size-5 animate-spin text-primary`})}):j?(0,v.jsx)(`div`,{className:`p-6 text-center text-sm text-destructive`,children:j}):(0,v.jsx)(h,{height:`100%`,language:`markdown`,theme:F,value:T,onChange:e=>{let t=e??``;I.current=t,E(t)},options:{readOnly:x,minimap:{enabled:!1},fontSize:13,wordWrap:`on`,scrollBeyondLastLine:!1,lineNumbers:`on`}})})]})}function b({icon:e,tone:t,children:n}){return(0,v.jsxs)(`div`,{className:a(`flex items-start gap-2 px-3 py-2 text-[12px] shrink-0 border-b border-border`,t===`warn`?`bg-amber-500/10 text-amber-300`:`bg-surface-elevated text-text-secondary`),children:[(0,v.jsx)(e,{className:`mt-0.5 size-3.5 shrink-0`}),(0,v.jsx)(`span`,{children:n})]})}export{y as AiResourceEditor};