github-issue-tower-defence-management 1.107.0 → 1.108.0

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 (27) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +1 -1
  3. package/bin/adapter/entry-points/console/dashboardComposeService.js +1 -0
  4. package/bin/adapter/entry-points/console/dashboardComposeService.js.map +1 -1
  5. package/bin/adapter/entry-points/handlers/machineStatusWriter.js +2 -0
  6. package/bin/adapter/entry-points/handlers/machineStatusWriter.js.map +1 -1
  7. package/bin/adapter/repositories/ProcHostMetricsRepository.js +25 -2
  8. package/bin/adapter/repositories/ProcHostMetricsRepository.js.map +1 -1
  9. package/bin/domain/usecases/dashboard/ComposeDashboardUseCase.js +12 -6
  10. package/bin/domain/usecases/dashboard/ComposeDashboardUseCase.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/adapter/entry-points/console/dashboardComposeService.test.ts +8 -1
  13. package/src/adapter/entry-points/console/dashboardComposeService.ts +1 -0
  14. package/src/adapter/entry-points/console/webServer.test.ts +4 -1
  15. package/src/adapter/entry-points/handlers/machineStatusWriter.test.ts +14 -2
  16. package/src/adapter/entry-points/handlers/machineStatusWriter.ts +3 -0
  17. package/src/adapter/repositories/ProcHostMetricsRepository.test.ts +26 -0
  18. package/src/adapter/repositories/ProcHostMetricsRepository.ts +36 -0
  19. package/src/domain/usecases/dashboard/ComposeDashboardUseCase.test.ts +44 -17
  20. package/src/domain/usecases/dashboard/ComposeDashboardUseCase.ts +13 -5
  21. package/types/adapter/entry-points/console/dashboardComposeService.d.ts.map +1 -1
  22. package/types/adapter/entry-points/handlers/machineStatusWriter.d.ts +1 -0
  23. package/types/adapter/entry-points/handlers/machineStatusWriter.d.ts.map +1 -1
  24. package/types/adapter/repositories/ProcHostMetricsRepository.d.ts +10 -1
  25. package/types/adapter/repositories/ProcHostMetricsRepository.d.ts.map +1 -1
  26. package/types/domain/usecases/dashboard/ComposeDashboardUseCase.d.ts +2 -1
  27. package/types/domain/usecases/dashboard/ComposeDashboardUseCase.d.ts.map +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [1.108.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.107.0...v1.108.0) (2026-06-26)
2
+
3
+
4
+ ### Features
5
+
6
+ * **dashboard:** add disk usage and 2-line host metrics to the CLI composer ([#1004](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1004)) ([13b1ba0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/13b1ba07577300fc88a0e51523c9778d6e9e82bf)), closes [#1002](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1002)
7
+
1
8
  # [1.107.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.106.0...v1.107.0) (2026-06-26)
2
9
 
3
10
 
package/README.md CHANGED
@@ -83,7 +83,7 @@ Options for countInTmuxByHumanSessionsPerToken:
83
83
 
84
84
  The `serveWeb` sub-command starts a local HTTP server that serves the TDPM web surface — the console tabs, the dashboard, and the in-tmux-by-human session list. `serveConsole` remains available as a deprecated alias that maps to the same handler, so existing invokers keep working during rollout; new usage should prefer `serveWeb`. One running instance serves every project: the user opens a per-project URL path `/projects/{pjcode}` (or `/projects/{pjcode}/{workflow-blocker|prs|triage|unread|failed-preparation|todo-by-human}`) and the bundled UI reads the `pjcode` from its own URL path and loads that project's list data. The server serves the bundled single-page-application `index.html` at `/`, `/index.html`, and every `/projects/{pjcode}` and `/projects/{pjcode}/{tab}` app route. Every response is sent with `Cache-Control: no-store`. Any request path containing a segment that begins with a dot (for example `/.git` or `/.env`) is rejected with HTTP 404. The UI bootstrap assets (HTML and JS) are served without authentication; served `*.json` files and `/api/*` paths require an access token supplied either as the `k` query parameter (`?k=<token>`) or the `X-PV-Token` request header. The access token is read from the `consoleAccessToken` config value and never appears on the command line. When the built UI bundle directory (`ui-dist`) is absent the server still starts and serves a minimal placeholder index for `/`, `/index.html`, and the per-project app routes.
85
85
 
86
- The dashboard fragment is served unauthenticated at `GET /tdpm.txt` as `text/html`. Compose mode is opt-in: when `--dashboardDataDir` is set and every required data file is present (`machine-status.json`, `token-status.json`, and a `projects/<pjcode>.json` for every code in `--dashboardProjectCodes`), the server composes the fragment at request time from those files emitted by the scheduled run — one `projects/<pjcode>.json` per project (that project's actionable status counts), `machine-status.json` (mem%, cpu%, loadavg, cycle-minutes), and `token-status.json` (per-token rate-limit utilization, reset countdown, status color, and prep/hum counts). It renders the fixed-width fragment — the host-metrics line, the project grid (header then one row per code in `--dashboardProjectCodes` order with its severity dot), a blank separator line, then one row per token sorted by soonest seven-day reset — wrapped in `<tt>…</tt><br>` with spaces encoded as `&nbsp;`. Otherwise — when `--dashboardDataDir` is unset, or it is set but any required data file is missing — the server falls back to serving the static `tdpm.txt` byte-for-byte from `--dashboardDir`, exactly as before compose mode existed. The route returns HTTP 404 only when neither source is available (compose mode inactive and no static `tdpm.txt` present). Only `GET` is accepted on this path.
86
+ The dashboard fragment is served unauthenticated at `GET /tdpm.txt` as `text/html`. Compose mode is opt-in: when `--dashboardDataDir` is set and every required data file is present (`machine-status.json`, `token-status.json`, and a `projects/<pjcode>.json` for every code in `--dashboardProjectCodes`), the server composes the fragment at request time from those files emitted by the scheduled run — one `projects/<pjcode>.json` per project (that project's actionable status counts), `machine-status.json` (mem%, cpu%, disk%, loadavg, cycle-minutes), and `token-status.json` (per-token rate-limit utilization, reset countdown, status color, and prep/hum counts). It renders the fixed-width fragment — the two host-metrics lines (line 1 `M{mem}% C{cpu}% D{disk}% cy{cycle}`, line 2 `LA {load1} {load5} {load15}`), the project grid (header then one row per code in `--dashboardProjectCodes` order with its severity dot), a blank separator line, then one row per token sorted by soonest seven-day reset — wrapped in `<tt>…</tt><br>` with spaces encoded as `&nbsp;`. Otherwise — when `--dashboardDataDir` is unset, or it is set but any required data file is missing — the server falls back to serving the static `tdpm.txt` byte-for-byte from `--dashboardDir`, exactly as before compose mode existed. The route returns HTTP 404 only when neither source is available (compose mode inactive and no static `tdpm.txt` present). Only `GET` is accepted on this path.
87
87
 
88
88
  Behind the token gate the server exposes three groups of routes:
89
89
 
@@ -101,6 +101,7 @@ const readMachineStatus = (dashboardDataDir) => {
101
101
  return {
102
102
  memPct: asFiniteNumber(value.memPct),
103
103
  cpuPct: asFiniteNumber(value.cpuPct),
104
+ diskPct: asFiniteNumber(value.diskPct),
104
105
  load: parseLoad(value.load),
105
106
  cycleMinutes,
106
107
  };
@@ -1 +1 @@
1
- {"version":3,"file":"dashboardComposeService.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/dashboardComposeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboardComposeService.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/dashboardComposeService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,wGAKoE;AAYpE,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAW,EAAE;IACjD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAc,EAAiB,EAAE,CACvD,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAErE,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAuB,EAAE;IAChE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9C,IACE,MAAM,KAAK,IAAI;QACf,IAAI,KAAK,IAAI;QACb,EAAE,KAAK,IAAI;QACX,IAAI,KAAK,IAAI;QACb,EAAE,KAAK,IAAI;QACX,EAAE,KAAK,IAAI;QACX,GAAG,KAAK,IAAI;QACZ,OAAO,KAAK,IAAI,EAChB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,gBAAwB,EACxB,IAAY,EACS,EAAE,CACvB,iBAAiB,CACf,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC,CACtE,CAAC;AAEJ,MAAM,SAAS,GAAG,CAAC,KAAc,EAAmC,EAAE;IACpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,SAAS,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,gBAAwB,EACc,EAAE;IACxC,MAAM,KAAK,GAAG,YAAY,CACxB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CACnD,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC;IAC3C,MAAM,YAAY,GAChB,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACpE,OAAO;QACL,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;QACpC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;QACpC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;QACtC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAc,EAA6B,EAAE,CACjE,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC;AAElD,MAAM,YAAY,GAAG,CAAC,KAAc,EAAoB,EAAE,CACxD,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;AAEpC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAiB,EAAE,CACzD,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAEhD,MAAM,OAAO,GAAG,CAAC,KAAc,EAAU,EAAE;IACzC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAsB,EAAE;IAC9D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,0BAA0B,EAAE,gBAAgB,CAC1C,KAAK,CAAC,0BAA0B,CACjC;QACD,oBAAoB,EAAE,gBAAgB,CAAC,KAAK,CAAC,oBAAoB,CAAC;QAClE,0BAA0B,EAAE,gBAAgB,CAC1C,KAAK,CAAC,0BAA0B,CACjC;QACD,oBAAoB,EAAE,gBAAgB,CAAC,KAAK,CAAC,oBAAoB,CAAC;QAClE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;KACxB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,gBAAwB,EAAiB,EAAE;IACpE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEK,MAAM,0BAA0B,GAAG,CACxC,OAAgC,EACT,EAAE;IACzB,MAAM,QAAQ,GAA8B,OAAO,CAAC,YAAY,CAAC,GAAG,CAClE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACT,IAAI;QACJ,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;KACpD,CAAC,CACH,CAAC;IACF,OAAO;QACL,QAAQ;QACR,aAAa,EAAE,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC1D,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,CAAC;KACpD,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,0BAA0B,8BAcrC;AAEF,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAW,EAAE;IACnD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEK,MAAM,4BAA4B,GAAG,CAC1C,OAAgC,EACvB,EAAE;IACX,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,aAAa,GAAG;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;QACxD,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,CAChE;KACF,CAAC;IACF,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC;AAdW,QAAA,4BAA4B,gCAcvC;AAEK,MAAM,oBAAoB,GAAG,CAClC,OAAgC,EACxB,EAAE,CACV,IAAI,iDAAuB,EAAE,CAAC,GAAG,CAAC,IAAA,kCAA0B,EAAC,OAAO,CAAC,CAAC,CAAC;AAH5D,QAAA,oBAAoB,wBAGwC"}
@@ -43,6 +43,7 @@ const writeMachineStatus = async (params) => {
43
43
  const hostMetricsRepository = params.hostMetricsRepository ?? new ProcHostMetricsRepository_1.ProcHostMetricsRepository();
44
44
  const memPct = hostMetricsRepository.readMemoryUsedPercent();
45
45
  const cpuPct = await hostMetricsRepository.readCpuUsedPercent();
46
+ const diskPct = hostMetricsRepository.readDiskUsedPercent();
46
47
  const load = hostMetricsRepository.readLoadAverages();
47
48
  const cycleMinutes = allIssuesCacheDir
48
49
  ? (0, ProcHostMetricsRepository_1.cycleMinutesFromMtimes)(cacheFileMtimesDescending(allIssuesCacheDir))
@@ -50,6 +51,7 @@ const writeMachineStatus = async (params) => {
50
51
  const file = {
51
52
  memPct,
52
53
  cpuPct,
54
+ diskPct,
53
55
  load: [load.oneMinute, load.fiveMinute, load.fifteenMinute],
54
56
  cycleMinutes,
55
57
  capturedAt: (params.now ?? new Date()).toISOString(),
@@ -1 +1 @@
1
- {"version":3,"file":"machineStatusWriter.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/machineStatusWriter.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4FAGsD;AAiBtD,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,IAAa,EAAQ,EAAE;IAChE,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,YAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAC;IAClC,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,YAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,iBAAyB,EAAY,EAAE;IACxE,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,YAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;SAClD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,KAAK,EACrC,MAAiC,EAClB,EAAE;IACjB,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IACvD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,qBAAqB,GACzB,MAAM,CAAC,qBAAqB,IAAI,IAAI,qDAAyB,EAAE,CAAC;IAElE,MAAM,MAAM,GAAG,qBAAqB,CAAC,qBAAqB,EAAE,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;IAEtD,MAAM,YAAY,GAAG,iBAAiB;QACpC,CAAC,CAAC,IAAA,kDAAsB,EAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;QACtE,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,IAAI,GAAsB;QAC9B,MAAM;QACN,MAAM;QACN,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;QAC3D,YAAY;QACZ,UAAU,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;KACrD,CAAC;IAEF,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5E,CAAC,CAAC;AA5BW,QAAA,kBAAkB,sBA4B7B"}
1
+ {"version":3,"file":"machineStatusWriter.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/machineStatusWriter.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4FAGsD;AAkBtD,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,IAAa,EAAQ,EAAE;IAChE,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,YAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAC;IAClC,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,YAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,iBAAyB,EAAY,EAAE;IACxE,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,YAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;SAClD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,KAAK,EACrC,MAAiC,EAClB,EAAE;IACjB,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IACvD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,qBAAqB,GACzB,MAAM,CAAC,qBAAqB,IAAI,IAAI,qDAAyB,EAAE,CAAC;IAElE,MAAM,MAAM,GAAG,qBAAqB,CAAC,qBAAqB,EAAE,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;IAChE,MAAM,OAAO,GAAG,qBAAqB,CAAC,mBAAmB,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;IAEtD,MAAM,YAAY,GAAG,iBAAiB;QACpC,CAAC,CAAC,IAAA,kDAAsB,EAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;QACtE,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,IAAI,GAAsB;QAC9B,MAAM;QACN,MAAM;QACN,OAAO;QACP,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;QAC3D,YAAY;QACZ,UAAU,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;KACrD,CAAC;IAEF,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5E,CAAC,CAAC;AA9BW,QAAA,kBAAkB,sBA8B7B"}
@@ -33,10 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ProcHostMetricsRepository = exports.cycleMinutesFromMtimes = exports.parseLoadAverages = exports.cpuUsedPercentFromSamples = exports.parseCpuSample = exports.parseMemoryUsedPercent = void 0;
36
+ exports.ProcHostMetricsRepository = exports.cycleMinutesFromMtimes = exports.parseLoadAverages = exports.parseDiskUsedPercent = exports.cpuUsedPercentFromSamples = exports.parseCpuSample = exports.parseMemoryUsedPercent = void 0;
37
37
  const fs = __importStar(require("fs"));
38
38
  const path = __importStar(require("path"));
39
39
  const DEFAULT_PROC_DIRECTORY = '/proc';
40
+ const DEFAULT_ROOT_PATH = '/';
40
41
  const CPU_SAMPLE_INTERVAL_MS = 400;
41
42
  const parseMemoryUsedPercent = (meminfoText) => {
42
43
  const fields = new Map();
@@ -96,6 +97,15 @@ const cpuUsedPercentFromSamples = (first, second) => {
96
97
  return Math.round((busyDelta / totalDelta) * 100);
97
98
  };
98
99
  exports.cpuUsedPercentFromSamples = cpuUsedPercentFromSamples;
100
+ const parseDiskUsedPercent = (blocks, bfree, bavail) => {
101
+ const total = blocks - bfree + bavail;
102
+ if (total <= 0) {
103
+ throw new Error('disk total must be positive');
104
+ }
105
+ const used = blocks - bfree;
106
+ return Math.round((used / total) * 100);
107
+ };
108
+ exports.parseDiskUsedPercent = parseDiskUsedPercent;
99
109
  const parseLoadAverages = (loadavgText) => {
100
110
  const parts = loadavgText.trim().split(/\s+/);
101
111
  const oneMinute = Number(parts[0]);
@@ -119,9 +129,18 @@ exports.cycleMinutesFromMtimes = cycleMinutesFromMtimes;
119
129
  class ProcHostMetricsRepository {
120
130
  constructor(procDirectory = DEFAULT_PROC_DIRECTORY, sleep = (milliseconds) => new Promise((resolve) => {
121
131
  setTimeout(resolve, milliseconds);
122
- })) {
132
+ }), readDiskBlocks = (rootPath) => {
133
+ const stats = fs.statfsSync(rootPath);
134
+ return {
135
+ blocks: Number(stats.blocks),
136
+ bfree: Number(stats.bfree),
137
+ bavail: Number(stats.bavail),
138
+ };
139
+ }, rootPath = DEFAULT_ROOT_PATH) {
123
140
  this.procDirectory = procDirectory;
124
141
  this.sleep = sleep;
142
+ this.readDiskBlocks = readDiskBlocks;
143
+ this.rootPath = rootPath;
125
144
  this.readMemoryUsedPercent = () => (0, exports.parseMemoryUsedPercent)(fs.readFileSync(path.join(this.procDirectory, 'meminfo'), 'utf8'));
126
145
  this.readCpuUsedPercent = async () => {
127
146
  const first = (0, exports.parseCpuSample)(fs.readFileSync(path.join(this.procDirectory, 'stat'), 'utf8'));
@@ -130,6 +149,10 @@ class ProcHostMetricsRepository {
130
149
  return (0, exports.cpuUsedPercentFromSamples)(first, second);
131
150
  };
132
151
  this.readLoadAverages = () => (0, exports.parseLoadAverages)(fs.readFileSync(path.join(this.procDirectory, 'loadavg'), 'utf8'));
152
+ this.readDiskUsedPercent = () => {
153
+ const { blocks, bfree, bavail } = this.readDiskBlocks(this.rootPath);
154
+ return (0, exports.parseDiskUsedPercent)(blocks, bfree, bavail);
155
+ };
133
156
  }
134
157
  }
135
158
  exports.ProcHostMetricsRepository = ProcHostMetricsRepository;
@@ -1 +1 @@
1
- {"version":3,"file":"ProcHostMetricsRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcHostMetricsRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProcHostMetricsRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcHostMetricsRepository.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ComposeDashboardUseCase = exports.formatTokenRowLine = exports.formatProjectRowLine = exports.formatProjectHeaderLine = exports.formatMachineStatusLine = exports.formatResetCountdown = exports.roundHalfToEven = exports.PROJECT_ROW_WIDTH_BUDGET = void 0;
3
+ exports.ComposeDashboardUseCase = exports.formatTokenRowLine = exports.formatProjectRowLine = exports.formatProjectHeaderLine = exports.formatMachineStatusLines = exports.formatResetCountdown = exports.roundHalfToEven = exports.PROJECT_ROW_WIDTH_BUDGET = void 0;
4
4
  exports.PROJECT_ROW_WIDTH_BUDGET = 32;
5
5
  const PROJECT_COLUMNS = [
6
6
  { header: 'unr', key: 'unread' },
@@ -63,13 +63,16 @@ const formatResetCountdown = (totalSeconds) => {
63
63
  return `${days}d${padStartZero(String(hours), 2)}h${padStartZero(String(minutes), 2)}`;
64
64
  };
65
65
  exports.formatResetCountdown = formatResetCountdown;
66
- const formatMachineStatusLine = (machineStatus) => {
66
+ const formatMachineStatusLines = (machineStatus) => {
67
67
  const memText = machineStatus !== null && machineStatus.memPct !== null
68
68
  ? `${machineStatus.memPct}%`
69
69
  : '?%';
70
70
  const cpuText = machineStatus !== null && machineStatus.cpuPct !== null
71
71
  ? `${machineStatus.cpuPct}%`
72
72
  : '?%';
73
+ const diskText = machineStatus !== null && machineStatus.diskPct !== null
74
+ ? `${machineStatus.diskPct}%`
75
+ : '?%';
73
76
  const load = machineStatus !== null ? machineStatus.load : null;
74
77
  const oneMinute = load === null ? '?' : String((0, exports.roundHalfToEven)(load[0]));
75
78
  const fiveMinute = load === null ? '?' : String((0, exports.roundHalfToEven)(load[1]));
@@ -77,9 +80,12 @@ const formatMachineStatusLine = (machineStatus) => {
77
80
  const cycle = machineStatus !== null && machineStatus.cycleMinutes !== null
78
81
  ? `cy${machineStatus.cycleMinutes}`
79
82
  : 'cy-';
80
- return `M${memText} C${cpuText} LA ${oneMinute} ${fiveMinute} ${fifteenMinute} ${cycle}`;
83
+ return [
84
+ `M${memText} C${cpuText} D${diskText} ${cycle}`,
85
+ `LA ${oneMinute} ${fiveMinute} ${fifteenMinute}`,
86
+ ];
81
87
  };
82
- exports.formatMachineStatusLine = formatMachineStatusLine;
88
+ exports.formatMachineStatusLines = formatMachineStatusLines;
83
89
  const capThreeDigits = (value) => value > 999 ? '999' : String(value);
84
90
  const formatProjectHeaderLine = () => {
85
91
  const head = padEnd('pj', 4, ' ');
@@ -146,13 +152,13 @@ const wrapLine = (line) => `<tt>${line.replace(/ /g, '&nbsp;')}</tt><br>`;
146
152
  class ComposeDashboardUseCase {
147
153
  constructor() {
148
154
  this.run = (input) => {
149
- const statsLine = (0, exports.formatMachineStatusLine)(input.machineStatus);
155
+ const statsLines = (0, exports.formatMachineStatusLines)(input.machineStatus);
150
156
  const projectLines = [
151
157
  (0, exports.formatProjectHeaderLine)(),
152
158
  ...input.projects.map((project) => (0, exports.formatProjectRowLine)(project)),
153
159
  ];
154
160
  const tokenLines = sortTokens(input.tokens).map((token) => (0, exports.formatTokenRowLine)(token));
155
- const lines = [statsLine, ...projectLines, '', ...tokenLines];
161
+ const lines = [...statsLines, ...projectLines, '', ...tokenLines];
156
162
  return lines.map((line) => wrapLine(line)).join('\n') + '\n';
157
163
  };
158
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ComposeDashboardUseCase.js","sourceRoot":"","sources":["../../../../src/domain/usecases/dashboard/ComposeDashboardUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ComposeDashboardUseCase.js","sourceRoot":"","sources":["../../../../src/domain/usecases/dashboard/ComposeDashboardUseCase.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.107.0",
3
+ "version": "1.108.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -96,6 +96,7 @@ describe('buildComposeDashboardInput', () => {
96
96
  JSON.stringify({
97
97
  memPct: 55,
98
98
  cpuPct: 62,
99
+ diskPct: 89,
99
100
  load: [16, 23, 40],
100
101
  cycleMinutes: 14,
101
102
  capturedAt: 'x',
@@ -108,6 +109,7 @@ describe('buildComposeDashboardInput', () => {
108
109
  expect(input.machineStatus).toEqual({
109
110
  memPct: 55,
110
111
  cpuPct: 62,
112
+ diskPct: 89,
111
113
  load: [16, 23, 40],
112
114
  cycleMinutes: 14,
113
115
  });
@@ -124,6 +126,7 @@ describe('buildComposeDashboardInput', () => {
124
126
  JSON.stringify({
125
127
  memPct: 1,
126
128
  cpuPct: 2,
129
+ diskPct: 3,
127
130
  load: [0, 0, 0],
128
131
  cycleMinutes: null,
129
132
  capturedAt: 'x',
@@ -262,6 +265,7 @@ describe('composeDashboardText', () => {
262
265
  JSON.stringify({
263
266
  memPct: 55,
264
267
  cpuPct: 62,
268
+ diskPct: 89,
265
269
  load: [16, 23, 40],
266
270
  cycleMinutes: 14,
267
271
  capturedAt: 'x',
@@ -291,7 +295,8 @@ describe('composeDashboardText', () => {
291
295
  projectCodes: ['um', 'xc'],
292
296
  }),
293
297
  ).toBe(
294
- '<tt>M55%&nbsp;C62%&nbsp;LA&nbsp;16&nbsp;23&nbsp;40&nbsp;cy14</tt><br>\n' +
298
+ '<tt>M55%&nbsp;C62%&nbsp;D89%&nbsp;cy14</tt><br>\n' +
299
+ '<tt>LA&nbsp;16&nbsp;23&nbsp;40</tt><br>\n' +
295
300
  '<tt>pj&nbsp;&nbsp;&nbsp;unr&nbsp;tdo&nbsp;aqc&nbsp;fal&nbsp;prp&nbsp;aws&nbsp;dep</tt><br>\n' +
296
301
  '<tt>🟢um&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;1</tt><br>\n' +
297
302
  '<tt>&nbsp;&nbsp;xc&nbsp;&nbsp;--&nbsp;&nbsp;--&nbsp;&nbsp;--&nbsp;&nbsp;--&nbsp;&nbsp;--&nbsp;&nbsp;--&nbsp;&nbsp;--</tt><br>\n' +
@@ -311,6 +316,7 @@ describe('dashboardComposeFilesPresent', () => {
311
316
  JSON.stringify({
312
317
  memPct: 1,
313
318
  cpuPct: 2,
319
+ diskPct: 3,
314
320
  load: [0, 0, 0],
315
321
  cycleMinutes: null,
316
322
  capturedAt: 'x',
@@ -409,6 +415,7 @@ describe('dashboardComposeFilesPresent', () => {
409
415
  JSON.stringify({
410
416
  memPct: 1,
411
417
  cpuPct: 2,
418
+ diskPct: 3,
412
419
  load: [0, 0, 0],
413
420
  cycleMinutes: null,
414
421
  capturedAt: 'x',
@@ -100,6 +100,7 @@ const readMachineStatus = (
100
100
  return {
101
101
  memPct: asFiniteNumber(value.memPct),
102
102
  cpuPct: asFiniteNumber(value.cpuPct),
103
+ diskPct: asFiniteNumber(value.diskPct),
103
104
  load: parseLoad(value.load),
104
105
  cycleMinutes,
105
106
  };
@@ -1155,6 +1155,7 @@ describe('webServer dashboard /tdpm.txt route integration', () => {
1155
1155
  JSON.stringify({
1156
1156
  memPct: 55,
1157
1157
  cpuPct: 62,
1158
+ diskPct: 89,
1158
1159
  load: [16, 23, 40],
1159
1160
  cycleMinutes: 14,
1160
1161
  capturedAt: '2026-06-26T00:00:00.000Z',
@@ -1181,7 +1182,8 @@ describe('webServer dashboard /tdpm.txt route integration', () => {
1181
1182
  };
1182
1183
 
1183
1184
  const expectedComposed =
1184
- '<tt>M55%&nbsp;C62%&nbsp;LA&nbsp;16&nbsp;23&nbsp;40&nbsp;cy14</tt><br>\n' +
1185
+ '<tt>M55%&nbsp;C62%&nbsp;D89%&nbsp;cy14</tt><br>\n' +
1186
+ '<tt>LA&nbsp;16&nbsp;23&nbsp;40</tt><br>\n' +
1185
1187
  '<tt>pj&nbsp;&nbsp;&nbsp;unr&nbsp;tdo&nbsp;aqc&nbsp;fal&nbsp;prp&nbsp;aws&nbsp;dep</tt><br>\n' +
1186
1188
  '<tt>🟢um&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;1</tt><br>\n' +
1187
1189
  '<tt>🟢xc&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;0</tt><br>\n' +
@@ -1299,6 +1301,7 @@ describe('webServer dashboard /tdpm.txt route integration', () => {
1299
1301
  JSON.stringify({
1300
1302
  memPct: 55,
1301
1303
  cpuPct: 62,
1304
+ diskPct: 89,
1302
1305
  load: [16, 23, 40],
1303
1306
  cycleMinutes: 14,
1304
1307
  capturedAt: '2026-06-26T00:00:00.000Z',
@@ -25,7 +25,18 @@ const buildHostMetricsRepository = (
25
25
  const sleep = async (): Promise<void> => {
26
26
  fs.writeFileSync(statPath, 'cpu 660 0 0 440 0 0 0 0 0 0\n');
27
27
  };
28
- return { repository: new ProcHostMetricsRepository(procDirectory, sleep) };
28
+ const readDiskBlocks = (): {
29
+ blocks: number;
30
+ bfree: number;
31
+ bavail: number;
32
+ } => ({ blocks: 1100, bfree: 200, bavail: 100 });
33
+ return {
34
+ repository: new ProcHostMetricsRepository(
35
+ procDirectory,
36
+ sleep,
37
+ readDiskBlocks,
38
+ ),
39
+ };
29
40
  };
30
41
 
31
42
  describe('writeMachineStatus', () => {
@@ -42,7 +53,7 @@ describe('writeMachineStatus', () => {
42
53
  fs.rmSync(procDirectory, { recursive: true, force: true });
43
54
  });
44
55
 
45
- it('writes machine-status.json with mem, cpu, load and cycle minutes', async () => {
56
+ it('writes machine-status.json with mem, cpu, disk, load and cycle minutes', async () => {
46
57
  const { repository } = buildHostMetricsRepository(procDirectory);
47
58
  const cacheDir = path.join(dir, 'allIssues-PVT');
48
59
  fs.mkdirSync(cacheDir, { recursive: true });
@@ -65,6 +76,7 @@ describe('writeMachineStatus', () => {
65
76
  const expected: MachineStatusFile = {
66
77
  memPct: 55,
67
78
  cpuPct: 60,
79
+ diskPct: 90,
68
80
  load: [1.5, 0.8, 0.4],
69
81
  cycleMinutes: 15,
70
82
  capturedAt: '2026-06-26T12:00:00.000Z',
@@ -15,6 +15,7 @@ export type MachineStatusWriterParams = {
15
15
  export type MachineStatusFile = {
16
16
  memPct: number;
17
17
  cpuPct: number;
18
+ diskPct: number;
18
19
  load: [number, number, number];
19
20
  cycleMinutes: number | null;
20
21
  capturedAt: string;
@@ -61,6 +62,7 @@ export const writeMachineStatus = async (
61
62
 
62
63
  const memPct = hostMetricsRepository.readMemoryUsedPercent();
63
64
  const cpuPct = await hostMetricsRepository.readCpuUsedPercent();
65
+ const diskPct = hostMetricsRepository.readDiskUsedPercent();
64
66
  const load = hostMetricsRepository.readLoadAverages();
65
67
 
66
68
  const cycleMinutes = allIssuesCacheDir
@@ -70,6 +72,7 @@ export const writeMachineStatus = async (
70
72
  const file: MachineStatusFile = {
71
73
  memPct,
72
74
  cpuPct,
75
+ diskPct,
73
76
  load: [load.oneMinute, load.fiveMinute, load.fifteenMinute],
74
77
  cycleMinutes,
75
78
  capturedAt: (params.now ?? new Date()).toISOString(),
@@ -2,10 +2,12 @@ import * as fs from 'fs';
2
2
  import * as os from 'os';
3
3
  import * as path from 'path';
4
4
  import {
5
+ DiskBlocks,
5
6
  ProcHostMetricsRepository,
6
7
  cpuUsedPercentFromSamples,
7
8
  cycleMinutesFromMtimes,
8
9
  parseCpuSample,
10
+ parseDiskUsedPercent,
9
11
  parseLoadAverages,
10
12
  parseMemoryUsedPercent,
11
13
  } from './ProcHostMetricsRepository';
@@ -72,6 +74,20 @@ describe('parseLoadAverages', () => {
72
74
  });
73
75
  });
74
76
 
77
+ describe('parseDiskUsedPercent', () => {
78
+ it('excludes root-reserved blocks from the denominator like df', () => {
79
+ expect(parseDiskUsedPercent(1100, 200, 100)).toBe(90);
80
+ });
81
+
82
+ it('matches df when there is no root reservation (bfree equals bavail)', () => {
83
+ expect(parseDiskUsedPercent(1000, 100, 100)).toBe(90);
84
+ });
85
+
86
+ it('throws when the disk total is not positive', () => {
87
+ expect(() => parseDiskUsedPercent(100, 200, 0)).toThrow();
88
+ });
89
+ });
90
+
75
91
  describe('cycleMinutesFromMtimes', () => {
76
92
  it('rounds the gap between the two newest generations to whole minutes', () => {
77
93
  expect(cycleMinutesFromMtimes([1782469254.0, 1782468443.0])).toBe(14);
@@ -120,6 +136,16 @@ describe('ProcHostMetricsRepository', () => {
120
136
  });
121
137
  });
122
138
 
139
+ it('reads the df-style disk used percent from the root filesystem statfs', () => {
140
+ const diskBlocks: DiskBlocks = { blocks: 1100, bfree: 200, bavail: 100 };
141
+ const repository = new ProcHostMetricsRepository(
142
+ procDirectory,
143
+ async () => {},
144
+ () => diskBlocks,
145
+ );
146
+ expect(repository.readDiskUsedPercent()).toBe(90);
147
+ });
148
+
123
149
  it('samples /proc/stat twice and computes the busy percent', async () => {
124
150
  const statPath = path.join(procDirectory, 'stat');
125
151
  let sampleIndex = 0;
@@ -13,8 +13,15 @@ export type LoadAverages = {
13
13
  };
14
14
 
15
15
  const DEFAULT_PROC_DIRECTORY = '/proc';
16
+ const DEFAULT_ROOT_PATH = '/';
16
17
  const CPU_SAMPLE_INTERVAL_MS = 400;
17
18
 
19
+ export type DiskBlocks = {
20
+ blocks: number;
21
+ bfree: number;
22
+ bavail: number;
23
+ };
24
+
18
25
  export const parseMemoryUsedPercent = (meminfoText: string): number => {
19
26
  const fields = new Map<string, number>();
20
27
  for (const line of meminfoText.split('\n')) {
@@ -76,6 +83,19 @@ export const cpuUsedPercentFromSamples = (
76
83
  return Math.round((busyDelta / totalDelta) * 100);
77
84
  };
78
85
 
86
+ export const parseDiskUsedPercent = (
87
+ blocks: number,
88
+ bfree: number,
89
+ bavail: number,
90
+ ): number => {
91
+ const total = blocks - bfree + bavail;
92
+ if (total <= 0) {
93
+ throw new Error('disk total must be positive');
94
+ }
95
+ const used = blocks - bfree;
96
+ return Math.round((used / total) * 100);
97
+ };
98
+
79
99
  export const parseLoadAverages = (loadavgText: string): LoadAverages => {
80
100
  const parts = loadavgText.trim().split(/\s+/);
81
101
  const oneMinute = Number(parts[0]);
@@ -111,6 +131,17 @@ export class ProcHostMetricsRepository {
111
131
  new Promise((resolve) => {
112
132
  setTimeout(resolve, milliseconds);
113
133
  }),
134
+ private readonly readDiskBlocks: (rootPath: string) => DiskBlocks = (
135
+ rootPath,
136
+ ) => {
137
+ const stats = fs.statfsSync(rootPath);
138
+ return {
139
+ blocks: Number(stats.blocks),
140
+ bfree: Number(stats.bfree),
141
+ bavail: Number(stats.bavail),
142
+ };
143
+ },
144
+ private readonly rootPath: string = DEFAULT_ROOT_PATH,
114
145
  ) {}
115
146
 
116
147
  readMemoryUsedPercent = (): number =>
@@ -133,4 +164,9 @@ export class ProcHostMetricsRepository {
133
164
  parseLoadAverages(
134
165
  fs.readFileSync(path.join(this.procDirectory, 'loadavg'), 'utf8'),
135
166
  );
167
+
168
+ readDiskUsedPercent = (): number => {
169
+ const { blocks, bfree, bavail } = this.readDiskBlocks(this.rootPath);
170
+ return parseDiskUsedPercent(blocks, bfree, bavail);
171
+ };
136
172
  }
@@ -2,7 +2,7 @@ import {
2
2
  ComposeDashboardInput,
3
3
  ComposeDashboardUseCase,
4
4
  PROJECT_ROW_WIDTH_BUDGET,
5
- formatMachineStatusLine,
5
+ formatMachineStatusLines,
6
6
  formatProjectHeaderLine,
7
7
  formatProjectRowLine,
8
8
  formatResetCountdown,
@@ -64,53 +64,76 @@ describe('formatResetCountdown', () => {
64
64
  });
65
65
  });
66
66
 
67
- describe('formatMachineStatusLine', () => {
68
- it('renders the host-metrics line from a machine status', () => {
67
+ describe('formatMachineStatusLines', () => {
68
+ it('renders the host metrics as two lines from a machine status', () => {
69
69
  expect(
70
- formatMachineStatusLine({
70
+ formatMachineStatusLines({
71
71
  memPct: 55,
72
72
  cpuPct: 62,
73
+ diskPct: 93,
73
74
  load: [16, 23, 40],
74
- cycleMinutes: 14,
75
+ cycleMinutes: 13,
75
76
  }),
76
- ).toBe('M55% C62% LA 16 23 40 cy14');
77
+ ).toEqual(['M55% C62% D93% cy13', 'LA 16 23 40']);
77
78
  });
78
79
 
79
80
  it('rounds loads with half-to-even and renders integers', () => {
80
81
  expect(
81
- formatMachineStatusLine({
82
+ formatMachineStatusLines({
82
83
  memPct: 62,
83
84
  cpuPct: 31,
85
+ diskPct: 7,
84
86
  load: [1.2, 0.98, 0.75],
85
87
  cycleMinutes: 14,
86
88
  }),
87
- ).toBe('M62% C31% LA 1 1 1 cy14');
89
+ ).toEqual(['M62% C31% D7% cy14', 'LA 1 1 1']);
88
90
  });
89
91
 
90
92
  it('falls back to placeholders when the machine status is absent', () => {
91
- expect(formatMachineStatusLine(null)).toBe('M?% C?% LA ? ? ? cy-');
93
+ expect(formatMachineStatusLines(null)).toEqual([
94
+ 'M?% C?% D?% cy-',
95
+ 'LA ? ? ?',
96
+ ]);
92
97
  });
93
98
 
94
99
  it('renders cy- when cycle minutes is null', () => {
95
100
  expect(
96
- formatMachineStatusLine({
101
+ formatMachineStatusLines({
97
102
  memPct: 1,
98
103
  cpuPct: 2,
104
+ diskPct: 3,
99
105
  load: [0, 0, 0],
100
106
  cycleMinutes: null,
101
107
  }),
102
- ).toBe('M1% C2% LA 0 0 0 cy-');
108
+ ).toEqual(['M1% C2% D3% cy-', 'LA 0 0 0']);
109
+ });
110
+
111
+ it('renders D?% when only the disk percent is unavailable', () => {
112
+ expect(
113
+ formatMachineStatusLines({
114
+ memPct: 55,
115
+ cpuPct: 62,
116
+ diskPct: null,
117
+ load: [16, 23, 40],
118
+ cycleMinutes: 13,
119
+ }),
120
+ ).toEqual(['M55% C62% D?% cy13', 'LA 16 23 40']);
103
121
  });
104
122
 
105
- it('stays within the 32 character width budget at worst case', () => {
106
- const line = formatMachineStatusLine({
123
+ it('keeps both lines within the 32 character width budget at worst case', () => {
124
+ const lines = formatMachineStatusLines({
107
125
  memPct: 100,
108
126
  cpuPct: 100,
127
+ diskPct: 100,
109
128
  load: [108.5, 120.25, 95.1],
110
129
  cycleMinutes: 999,
111
130
  });
112
- expect(line).toBe('M100% C100% LA 108 120 95 cy999');
113
- expect(codePointLength(line)).toBeLessThanOrEqual(PROJECT_ROW_WIDTH_BUDGET);
131
+ expect(lines).toEqual(['M100% C100% D100% cy999', 'LA 108 120 95']);
132
+ for (const line of lines) {
133
+ expect(codePointLength(line)).toBeLessThanOrEqual(
134
+ PROJECT_ROW_WIDTH_BUDGET,
135
+ );
136
+ }
114
137
  });
115
138
  });
116
139
 
@@ -260,6 +283,7 @@ describe('ComposeDashboardUseCase', () => {
260
283
  machineStatus: {
261
284
  memPct: 55,
262
285
  cpuPct: 62,
286
+ diskPct: 89,
263
287
  load: [16, 23, 40],
264
288
  cycleMinutes: 14,
265
289
  },
@@ -310,7 +334,8 @@ describe('ComposeDashboardUseCase', () => {
310
334
  };
311
335
 
312
336
  const expectedBody =
313
- '<tt>M55%&nbsp;C62%&nbsp;LA&nbsp;16&nbsp;23&nbsp;40&nbsp;cy14</tt><br>\n' +
337
+ '<tt>M55%&nbsp;C62%&nbsp;D89%&nbsp;cy14</tt><br>\n' +
338
+ '<tt>LA&nbsp;16&nbsp;23&nbsp;40</tt><br>\n' +
314
339
  '<tt>pj&nbsp;&nbsp;&nbsp;unr&nbsp;tdo&nbsp;aqc&nbsp;fal&nbsp;prp&nbsp;aws&nbsp;dep</tt><br>\n' +
315
340
  '<tt>🟢um&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;1</tt><br>\n' +
316
341
  '<tt>🟠xm&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0</tt><br>\n' +
@@ -357,7 +382,8 @@ describe('ComposeDashboardUseCase', () => {
357
382
  });
358
383
  expect(
359
384
  output.startsWith(
360
- '<tt>M?%&nbsp;C?%&nbsp;LA&nbsp;?&nbsp;?&nbsp;?&nbsp;cy-</tt><br>\n',
385
+ '<tt>M?%&nbsp;C?%&nbsp;D?%&nbsp;cy-</tt><br>\n' +
386
+ '<tt>LA&nbsp;?&nbsp;?&nbsp;?</tt><br>\n',
361
387
  ),
362
388
  ).toBe(true);
363
389
  });
@@ -367,6 +393,7 @@ describe('ComposeDashboardUseCase', () => {
367
393
  machineStatus: {
368
394
  memPct: 100,
369
395
  cpuPct: 100,
396
+ diskPct: 100,
370
397
  load: [108.5, 120.25, 95.1],
371
398
  cycleMinutes: 999,
372
399
  },
@@ -11,6 +11,7 @@ export type ComposeDashboardProject = {
11
11
  export type ComposeDashboardMachineStatus = {
12
12
  memPct: number | null;
13
13
  cpuPct: number | null;
14
+ diskPct: number | null;
14
15
  load: [number, number, number] | null;
15
16
  cycleMinutes: number | null;
16
17
  };
@@ -97,9 +98,9 @@ export const formatResetCountdown = (totalSeconds: number): string => {
97
98
  )}`;
98
99
  };
99
100
 
100
- export const formatMachineStatusLine = (
101
+ export const formatMachineStatusLines = (
101
102
  machineStatus: ComposeDashboardMachineStatus | null,
102
- ): string => {
103
+ ): [string, string] => {
103
104
  const memText =
104
105
  machineStatus !== null && machineStatus.memPct !== null
105
106
  ? `${machineStatus.memPct}%`
@@ -108,6 +109,10 @@ export const formatMachineStatusLine = (
108
109
  machineStatus !== null && machineStatus.cpuPct !== null
109
110
  ? `${machineStatus.cpuPct}%`
110
111
  : '?%';
112
+ const diskText =
113
+ machineStatus !== null && machineStatus.diskPct !== null
114
+ ? `${machineStatus.diskPct}%`
115
+ : '?%';
111
116
  const load = machineStatus !== null ? machineStatus.load : null;
112
117
  const oneMinute = load === null ? '?' : String(roundHalfToEven(load[0]));
113
118
  const fiveMinute = load === null ? '?' : String(roundHalfToEven(load[1]));
@@ -116,7 +121,10 @@ export const formatMachineStatusLine = (
116
121
  machineStatus !== null && machineStatus.cycleMinutes !== null
117
122
  ? `cy${machineStatus.cycleMinutes}`
118
123
  : 'cy-';
119
- return `M${memText} C${cpuText} LA ${oneMinute} ${fiveMinute} ${fifteenMinute} ${cycle}`;
124
+ return [
125
+ `M${memText} C${cpuText} D${diskText} ${cycle}`,
126
+ `LA ${oneMinute} ${fiveMinute} ${fifteenMinute}`,
127
+ ];
120
128
  };
121
129
 
122
130
  const capThreeDigits = (value: number): string =>
@@ -206,7 +214,7 @@ const wrapLine = (line: string): string =>
206
214
 
207
215
  export class ComposeDashboardUseCase {
208
216
  run = (input: ComposeDashboardInput): string => {
209
- const statsLine = formatMachineStatusLine(input.machineStatus);
217
+ const statsLines = formatMachineStatusLines(input.machineStatus);
210
218
  const projectLines = [
211
219
  formatProjectHeaderLine(),
212
220
  ...input.projects.map((project) => formatProjectRowLine(project)),
@@ -214,7 +222,7 @@ export class ComposeDashboardUseCase {
214
222
  const tokenLines = sortTokens(input.tokens).map((token) =>
215
223
  formatTokenRowLine(token),
216
224
  );
217
- const lines = [statsLine, ...projectLines, '', ...tokenLines];
225
+ const lines = [...statsLines, ...projectLines, '', ...tokenLines];
218
226
  return lines.map((line) => wrapLine(line)).join('\n') + '\n';
219
227
  };
220
228
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dashboardComposeService.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/dashboardComposeService.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EAItB,MAAM,4DAA4D,CAAC;AAOpE,MAAM,MAAM,uBAAuB,GAAG;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AA2IF,eAAO,MAAM,0BAA0B,GACrC,SAAS,uBAAuB,KAC/B,qBAYF,CAAC;AAUF,eAAO,MAAM,4BAA4B,GACvC,SAAS,uBAAuB,KAC/B,OAYF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,uBAAuB,KAC/B,MACqE,CAAC"}
1
+ {"version":3,"file":"dashboardComposeService.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/dashboardComposeService.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EAItB,MAAM,4DAA4D,CAAC;AAOpE,MAAM,MAAM,uBAAuB,GAAG;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AA4IF,eAAO,MAAM,0BAA0B,GACrC,SAAS,uBAAuB,KAC/B,qBAYF,CAAC;AAUF,eAAO,MAAM,4BAA4B,GACvC,SAAS,uBAAuB,KAC/B,OAYF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,uBAAuB,KAC/B,MACqE,CAAC"}
@@ -8,6 +8,7 @@ export type MachineStatusWriterParams = {
8
8
  export type MachineStatusFile = {
9
9
  memPct: number;
10
10
  cpuPct: number;
11
+ diskPct: number;
11
12
  load: [number, number, number];
12
13
  cycleMinutes: number | null;
13
14
  capturedAt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"machineStatusWriter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/machineStatusWriter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EAE1B,MAAM,8CAA8C,CAAC;AAEtD,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA8BF,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,yBAAyB,KAChC,OAAO,CAAC,IAAI,CA0Bd,CAAC"}
1
+ {"version":3,"file":"machineStatusWriter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/machineStatusWriter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EAE1B,MAAM,8CAA8C,CAAC;AAEtD,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA8BF,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,yBAAyB,KAChC,OAAO,CAAC,IAAI,CA4Bd,CAAC"}
@@ -7,17 +7,26 @@ export type LoadAverages = {
7
7
  fiveMinute: number;
8
8
  fifteenMinute: number;
9
9
  };
10
+ export type DiskBlocks = {
11
+ blocks: number;
12
+ bfree: number;
13
+ bavail: number;
14
+ };
10
15
  export declare const parseMemoryUsedPercent: (meminfoText: string) => number;
11
16
  export declare const parseCpuSample: (statText: string) => CpuSample;
12
17
  export declare const cpuUsedPercentFromSamples: (first: CpuSample, second: CpuSample) => number;
18
+ export declare const parseDiskUsedPercent: (blocks: number, bfree: number, bavail: number) => number;
13
19
  export declare const parseLoadAverages: (loadavgText: string) => LoadAverages;
14
20
  export declare const cycleMinutesFromMtimes: (mtimesDescendingSeconds: number[]) => number | null;
15
21
  export declare class ProcHostMetricsRepository {
16
22
  private readonly procDirectory;
17
23
  private readonly sleep;
18
- constructor(procDirectory?: string, sleep?: (milliseconds: number) => Promise<void>);
24
+ private readonly readDiskBlocks;
25
+ private readonly rootPath;
26
+ constructor(procDirectory?: string, sleep?: (milliseconds: number) => Promise<void>, readDiskBlocks?: (rootPath: string) => DiskBlocks, rootPath?: string);
19
27
  readMemoryUsedPercent: () => number;
20
28
  readCpuUsedPercent: () => Promise<number>;
21
29
  readLoadAverages: () => LoadAverages;
30
+ readDiskUsedPercent: () => number;
22
31
  }
23
32
  //# sourceMappingURL=ProcHostMetricsRepository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProcHostMetricsRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcHostMetricsRepository.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAKF,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,KAAG,MA2B5D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,KAAG,SAiBjD,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,OAAO,SAAS,EAChB,QAAQ,SAAS,KAChB,MAQF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,KAAG,YAavD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,yBAAyB,MAAM,EAAE,KAChC,MAAM,GAAG,IAOX,CAAC;AAEF,qBAAa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,aAAa,GAAE,MAA+B,EAC9C,KAAK,GAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAK1D;IAGN,qBAAqB,QAAO,MAAM,CAG9B;IAEJ,kBAAkB,QAAa,OAAO,CAAC,MAAM,CAAC,CAS5C;IAEF,gBAAgB,QAAO,YAAY,CAG/B;CACL"}
1
+ {"version":3,"file":"ProcHostMetricsRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcHostMetricsRepository.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAMF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,KAAG,MA2B5D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,KAAG,SAiBjD,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,OAAO,SAAS,EAChB,QAAQ,SAAS,KAChB,MAQF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,QAAQ,MAAM,KACb,MAOF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,KAAG,YAavD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,yBAAyB,MAAM,EAAE,KAChC,MAAM,GAAG,IAOX,CAAC;AAEF,qBAAa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAMtB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAU/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAjBR,aAAa,GAAE,MAA+B,EAC9C,KAAK,GAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAK1D,EACa,cAAc,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,UAStD,EACgB,QAAQ,GAAE,MAA0B;IAGvD,qBAAqB,QAAO,MAAM,CAG9B;IAEJ,kBAAkB,QAAa,OAAO,CAAC,MAAM,CAAC,CAS5C;IAEF,gBAAgB,QAAO,YAAY,CAG/B;IAEJ,mBAAmB,QAAO,MAAM,CAG9B;CACH"}
@@ -8,6 +8,7 @@ export type ComposeDashboardProject = {
8
8
  export type ComposeDashboardMachineStatus = {
9
9
  memPct: number | null;
10
10
  cpuPct: number | null;
11
+ diskPct: number | null;
11
12
  load: [number, number, number] | null;
12
13
  cycleMinutes: number | null;
13
14
  };
@@ -18,7 +19,7 @@ export type ComposeDashboardInput = {
18
19
  };
19
20
  export declare const roundHalfToEven: (value: number) => number;
20
21
  export declare const formatResetCountdown: (totalSeconds: number) => string;
21
- export declare const formatMachineStatusLine: (machineStatus: ComposeDashboardMachineStatus | null) => string;
22
+ export declare const formatMachineStatusLines: (machineStatus: ComposeDashboardMachineStatus | null) => [string, string];
22
23
  export declare const formatProjectHeaderLine: () => string;
23
24
  export declare const formatProjectRowLine: (project: ComposeDashboardProject) => string;
24
25
  export declare const formatTokenRowLine: (token: TokenStatus) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"ComposeDashboardUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/dashboard/ComposeDashboardUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAoB,MAAM,8BAA8B,CAAC;AAE7E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,aAAa,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACpD,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAmDF,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAU/C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,KAAG,MAa3D,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,eAAe,6BAA6B,GAAG,IAAI,KAClD,MAkBF,CAAC;AAKF,eAAO,MAAM,uBAAuB,QAAO,MAM1C,CAAC;AAkBF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,uBAAuB,KAC/B,MAQF,CAAC;AA6BF,eAAO,MAAM,kBAAkB,GAAI,OAAO,WAAW,KAAG,MAcvD,CAAC;AAKF,qBAAa,uBAAuB;IAClC,GAAG,GAAI,OAAO,qBAAqB,KAAG,MAAM,CAW1C;CACH"}
1
+ {"version":3,"file":"ComposeDashboardUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/dashboard/ComposeDashboardUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAoB,MAAM,8BAA8B,CAAC;AAE7E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,aAAa,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACpD,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAmDF,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAU/C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,KAAG,MAa3D,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,eAAe,6BAA6B,GAAG,IAAI,KAClD,CAAC,MAAM,EAAE,MAAM,CAyBjB,CAAC;AAKF,eAAO,MAAM,uBAAuB,QAAO,MAM1C,CAAC;AAkBF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,uBAAuB,KAC/B,MAQF,CAAC;AA6BF,eAAO,MAAM,kBAAkB,GAAI,OAAO,WAAW,KAAG,MAcvD,CAAC;AAKF,qBAAa,uBAAuB;IAClC,GAAG,GAAI,OAAO,qBAAqB,KAAG,MAAM,CAW1C;CACH"}