hae-vault 0.2.2 → 0.3.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 (55) hide show
  1. package/README.md +62 -1
  2. package/dist/cli/bdash.d.ts +11 -0
  3. package/dist/cli/bdash.d.ts.map +1 -0
  4. package/dist/cli/bdash.js +78 -0
  5. package/dist/cli/bdash.js.map +1 -0
  6. package/dist/cli/body.d.ts +12 -0
  7. package/dist/cli/body.d.ts.map +1 -0
  8. package/dist/cli/body.js +30 -0
  9. package/dist/cli/body.js.map +1 -0
  10. package/dist/cli/dashboard.d.ts.map +1 -1
  11. package/dist/cli/dashboard.js +4 -55
  12. package/dist/cli/dashboard.js.map +1 -1
  13. package/dist/cli/helpers.d.ts +14 -0
  14. package/dist/cli/helpers.d.ts.map +1 -0
  15. package/dist/cli/helpers.js +67 -0
  16. package/dist/cli/helpers.js.map +1 -0
  17. package/dist/cli/index.d.ts.map +1 -1
  18. package/dist/cli/index.js +20 -0
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/cli/mdash.d.ts +11 -0
  21. package/dist/cli/mdash.d.ts.map +1 -0
  22. package/dist/cli/mdash.js +94 -0
  23. package/dist/cli/mdash.js.map +1 -0
  24. package/dist/cli/mindfulness.d.ts +11 -0
  25. package/dist/cli/mindfulness.d.ts.map +1 -0
  26. package/dist/cli/mindfulness.js +29 -0
  27. package/dist/cli/mindfulness.js.map +1 -0
  28. package/dist/cli/mobility.d.ts +15 -0
  29. package/dist/cli/mobility.d.ts.map +1 -0
  30. package/dist/cli/mobility.js +35 -0
  31. package/dist/cli/mobility.js.map +1 -0
  32. package/dist/cli/ndash.d.ts +11 -0
  33. package/dist/cli/ndash.d.ts.map +1 -0
  34. package/dist/cli/ndash.js +117 -0
  35. package/dist/cli/ndash.js.map +1 -0
  36. package/dist/cli/nutrition.d.ts +24 -0
  37. package/dist/cli/nutrition.d.ts.map +1 -0
  38. package/dist/cli/nutrition.js +48 -0
  39. package/dist/cli/nutrition.js.map +1 -0
  40. package/dist/cli/vdash.d.ts +11 -0
  41. package/dist/cli/vdash.d.ts.map +1 -0
  42. package/dist/cli/vdash.js +93 -0
  43. package/dist/cli/vdash.js.map +1 -0
  44. package/dist/cli/vitals.d.ts +17 -0
  45. package/dist/cli/vitals.d.ts.map +1 -0
  46. package/dist/cli/vitals.js +69 -0
  47. package/dist/cli/vitals.js.map +1 -0
  48. package/dist/cli/wdash.d.ts +11 -0
  49. package/dist/cli/wdash.d.ts.map +1 -0
  50. package/dist/cli/wdash.js +76 -0
  51. package/dist/cli/wdash.js.map +1 -0
  52. package/dist/parse/sleep.d.ts.map +1 -1
  53. package/dist/parse/sleep.js +4 -1
  54. package/dist/parse/sleep.js.map +1 -1
  55. package/package.json +3 -3
package/README.md CHANGED
@@ -62,6 +62,11 @@ Output is JSON by default. Add `--pretty` for formatted JSON.
62
62
  | `hvault sleep` | Sleep records with stage breakdown |
63
63
  | `hvault workouts` | Workout sessions |
64
64
  | `hvault summary` | Per-metric averages over N days (JSON) |
65
+ | `hvault nutrition` | Daily macros + calories (JSON); `--entries` for raw rows |
66
+ | `hvault body` | Body composition: weight, BMI, body fat, lean mass (JSON) |
67
+ | `hvault vitals` | Vitals: resting HR, HRV, SpO2, VO2max, blood pressure (JSON) |
68
+ | `hvault mobility` | Gait metrics: walking speed, step length, stair speed (JSON) |
69
+ | `hvault mindfulness` | Mindful minutes, daylight, handwashing count (JSON) |
65
70
  | `hvault query "<sql>"` | Raw SQL query |
66
71
 
67
72
  ### Analysis
@@ -73,6 +78,11 @@ Output is pretty-printed by default. Add `--json` for raw JSON.
73
78
  | `hvault summary --color` | N-day averages with emoji indicators |
74
79
  | `hvault dashboard` | Full terminal dashboard with trends |
75
80
  | `hvault trends` | Multi-metric trend analysis with direction arrows |
81
+ | `hvault ndash` | Nutrition dashboard: macros, calorie split, trends |
82
+ | `hvault bdash` | Body composition dashboard: weight, body fat trends |
83
+ | `hvault vdash` | Vitals dashboard: HR, HRV, SpO2, recovery |
84
+ | `hvault mdash` | Mobility dashboard: gait trends with direction indicators |
85
+ | `hvault wdash` | Wellness dashboard: mindfulness, daylight, handwashing |
76
86
 
77
87
  ### Info
78
88
 
@@ -137,6 +147,56 @@ Output is pretty-printed by default. Add `--json` for raw JSON.
137
147
  🔥 Active Cal: 420 kcal avg (280–620) →
138
148
  ```
139
149
 
150
+ `hvault ndash --days 180`:
151
+ ```
152
+ 📅 2026-02-19 | 🍽️ Nutrition Dashboard
153
+
154
+ ── Today's Macros ────────────────────────────
155
+ 🍽️ 711 kcal (latest: 2025-10-06)
156
+ 🥩 Protein: 70g | 🍞 Carbs: 43g | 🫒 Fat: 30g
157
+ 🌿 Fiber: 7g | 🍬 Sugar: 2g | 🧂 Sodium: 71mg | 💊 Cholesterol: 0mg
158
+
159
+ ── Macro Split (% of calories) ───────────────
160
+ 🥩 Protein ████████░░░░░░░░░░░░ 38% 70g
161
+ 🍞 Carbs █████░░░░░░░░░░░░░░░ 24% 43g
162
+ 🫒 Fat ████████░░░░░░░░░░░░ 38% 30g
163
+
164
+ ── 180-Day Trends ────────────────────────────
165
+ Calories: 1,649 → 711 kcal ↓ (avg 1,820)
166
+ Protein: 147 → 70g ↓ (avg 141)
167
+ Carbs: 96 → 43g ↓ (avg 152)
168
+ Fat: 76 → 30g ↓ (avg 70)
169
+ ```
170
+
171
+ `hvault vdash --days 60`:
172
+ ```
173
+ 📅 2026-02-19 | 💓 Vitals Dashboard
174
+
175
+ ── Current ───────────────────────────────────
176
+ 💓 Resting HR: 56bpm | HRV: — | 🩺 SpO2: 92.7% (latest: 2025-12-30)
177
+ 🫁 Resp: 15.8/min
178
+
179
+ ── 60-Day Trends ─────────────────────────────
180
+ Resting HR: 58 → 56bpm ↓ (avg 60)
181
+ SpO2: 95.5 → 92.7% ↓ (avg 94.8)
182
+ Resp. rate: 15.3 → 15.8/min ↑ (avg 15.8)
183
+ ```
184
+
185
+ `hvault mdash --days 60`:
186
+ ```
187
+ 📅 2026-02-19 | 🚶 Mobility Dashboard
188
+
189
+ ── Current ───────────────────────────────────
190
+ 🚶 Speed: 4.7 km/h | 📐 Step: 71cm | ⚖️ Asym: 0.0% (latest: 2025-12-30)
191
+ Double support: 33.5%
192
+
193
+ ── 60-Day Trends ─────────────────────────────
194
+ Walking speed: 4.5 → 4.7 km/h ↑ (avg 4.3)
195
+ Step length: 71.1 → 71.3cm → (avg 67.8)
196
+ Asymmetry: 2.0 → 0.0% ↓ (better) (avg 2.3)
197
+ Double support: 32.3 → 33.5% ↑ (worse) (avg 33.4)
198
+ ```
199
+
140
200
  `hvault stats`:
141
201
  ```json
142
202
  {"metrics":570432,"sleep":365,"workouts":248,"syncs":12}
@@ -168,7 +228,8 @@ Output is pretty-printed by default. Add `--json` for raw JSON.
168
228
  | --- | --- | --- |
169
229
  | `--days <n>` | all analysis | Days of history (default: 7 or 90) |
170
230
  | `-c, --color` | summary | Pretty terminal output |
171
- | `--json` | dashboard, trends | Raw JSON output |
231
+ | `--json` | dashboard, trends, ndash, bdash, vdash, mdash, wdash | Raw JSON output |
232
+ | `--entries` | nutrition | Show individual log entries instead of daily totals |
172
233
 
173
234
  ## Environment variables
174
235
 
@@ -0,0 +1,11 @@
1
+ import { Command } from 'commander';
2
+ import { type BodyDay } from './body.js';
3
+ import type Database from 'better-sqlite3';
4
+ export declare function renderBdash(db: Database.Database, days: number, today?: string): string;
5
+ export declare function bdashJson(db: Database.Database, days: number, today?: string): {
6
+ date: string;
7
+ current: BodyDay | null;
8
+ trend: BodyDay[];
9
+ };
10
+ export declare const bdashCommand: Command;
11
+ //# sourceMappingURL=bdash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bdash.d.ts","sourceRoot":"","sources":["../../src/cli/bdash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAA0B,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAa3C,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAwC,GAAG,MAAM,CAwCtH;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAwC;;;;EAO3G;AAED,eAAO,MAAM,YAAY,SAYrB,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { Command } from 'commander';
2
+ import { openDb } from '../db/schema.js';
3
+ import { config } from '../config.js';
4
+ import { ruler, pad, arrow } from './helpers.js';
5
+ import { queryBodyDailyReadings } from './body.js';
6
+ function trendRowBody(rows, label, field, unit, decimals = 1) {
7
+ const vals = rows.map(r => r[field]).filter((v) => v != null);
8
+ if (vals.length < 2)
9
+ return '';
10
+ const first = vals[0];
11
+ const last = vals[vals.length - 1];
12
+ const avg = vals.reduce((a, b) => a + b, 0) / vals.length;
13
+ const dir = arrow(first, last);
14
+ const fmt = (v) => v.toFixed(decimals);
15
+ return ` ${pad(label + ':', 14)} ${fmt(first)} → ${fmt(last)}${unit} ${dir} (avg ${fmt(avg)})`;
16
+ }
17
+ export function renderBdash(db, days, today = new Date().toISOString().slice(0, 10)) {
18
+ const sinceD = new Date(today);
19
+ sinceD.setDate(sinceD.getDate() - days);
20
+ const since = sinceD.toISOString().slice(0, 10);
21
+ const allRows = queryBodyDailyReadings(db, since);
22
+ const latest = allRows.length > 0 ? allRows[allRows.length - 1] : null;
23
+ const lines = [];
24
+ lines.push(`📅 ${today} | ⚖️ Body Composition Dashboard`);
25
+ lines.push('');
26
+ // ── Current ────────────────────────────────────────────────────────────────
27
+ lines.push(ruler('Current'));
28
+ if (latest) {
29
+ const note = latest.date !== today ? ` (latest: ${latest.date})` : '';
30
+ const w = latest.weight_kg != null ? `⚖️ ${latest.weight_kg.toFixed(1)} kg` : '⚖️ —';
31
+ const bmi = latest.bmi != null ? `BMI: ${latest.bmi.toFixed(1)}` : 'BMI: —';
32
+ const bf = latest.body_fat_pct != null ? `Body Fat: ${latest.body_fat_pct.toFixed(1)}%` : 'Body Fat: —';
33
+ lines.push(`${w} | ${bmi} | ${bf}${note}`);
34
+ const lm = latest.lean_mass_kg != null ? `${latest.lean_mass_kg.toFixed(1)} kg` : '—';
35
+ lines.push(` 💪 Lean mass: ${lm}`);
36
+ }
37
+ else {
38
+ lines.push(' No body composition data');
39
+ }
40
+ lines.push('');
41
+ // ── Trends ─────────────────────────────────────────────────────────────────
42
+ lines.push(ruler(`${days}-Day Trends`));
43
+ const trendLines = [
44
+ trendRowBody(allRows, 'Weight', 'weight_kg', ' kg', 1),
45
+ trendRowBody(allRows, 'Body Fat', 'body_fat_pct', '%', 1),
46
+ trendRowBody(allRows, 'BMI', 'bmi', '', 1),
47
+ ].filter(Boolean);
48
+ if (trendLines.length > 0) {
49
+ lines.push(...trendLines);
50
+ }
51
+ else {
52
+ lines.push(' Insufficient data for trends');
53
+ }
54
+ return lines.join('\n');
55
+ }
56
+ export function bdashJson(db, days, today = new Date().toISOString().slice(0, 10)) {
57
+ const sinceD = new Date(today);
58
+ sinceD.setDate(sinceD.getDate() - days);
59
+ const since = sinceD.toISOString().slice(0, 10);
60
+ const rows = queryBodyDailyReadings(db, since);
61
+ const current = rows.length > 0 ? rows[rows.length - 1] : null;
62
+ return { date: today, current, trend: rows };
63
+ }
64
+ export const bdashCommand = new Command('bdash')
65
+ .description('Body composition dashboard: weight, BMI, body fat trends')
66
+ .option('--days <n>', 'Trend window in days', '30')
67
+ .option('--json', 'Output raw JSON')
68
+ .action((opts) => {
69
+ const db = openDb(config.dbPath);
70
+ const days = parseInt(opts.days, 10);
71
+ if (opts.json) {
72
+ console.log(JSON.stringify(bdashJson(db, days), null, 2));
73
+ }
74
+ else {
75
+ console.log(renderBdash(db, days));
76
+ }
77
+ });
78
+ //# sourceMappingURL=bdash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bdash.js","sourceRoot":"","sources":["../../src/cli/bdash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+ import type Database from 'better-sqlite3';
3
+ export interface BodyDay {
4
+ date: string;
5
+ weight_kg: number | null;
6
+ bmi: number | null;
7
+ body_fat_pct: number | null;
8
+ lean_mass_kg: number | null;
9
+ }
10
+ export declare function queryBodyDailyReadings(db: Database.Database, since: string): BodyDay[];
11
+ export declare const bodyCommand: Command;
12
+ //# sourceMappingURL=body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../src/cli/body.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAetF;AAED,eAAO,MAAM,WAAW,SAQpB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { Command } from 'commander';
2
+ import { openDb } from '../db/schema.js';
3
+ import { config } from '../config.js';
4
+ import { sinceDate } from './helpers.js';
5
+ export function queryBodyDailyReadings(db, since) {
6
+ return db.prepare(`
7
+ SELECT
8
+ date,
9
+ MAX(CASE WHEN metric = 'weight_body_mass' THEN qty END) as weight_kg,
10
+ MAX(CASE WHEN metric = 'body_mass_index' THEN qty END) as bmi,
11
+ MAX(CASE WHEN metric = 'body_fat_percentage' THEN qty END) as body_fat_pct,
12
+ MAX(CASE WHEN metric = 'lean_body_mass' THEN qty END) as lean_mass_kg
13
+ FROM metrics
14
+ WHERE metric IN ('weight_body_mass','body_mass_index','body_fat_percentage','lean_body_mass')
15
+ AND date >= ?
16
+ AND qty IS NOT NULL
17
+ GROUP BY date
18
+ ORDER BY date ASC
19
+ `).all(since);
20
+ }
21
+ export const bodyCommand = new Command('body')
22
+ .description('Daily body composition readings: weight, BMI, body fat, lean mass')
23
+ .option('--days <n>', 'Last N days', '90')
24
+ .option('--pretty', 'Pretty-print JSON', false)
25
+ .action((opts) => {
26
+ const db = openDb(config.dbPath);
27
+ const rows = queryBodyDailyReadings(db, sinceDate(parseInt(opts.days, 10)));
28
+ console.log(opts.pretty ? JSON.stringify(rows, null, 2) : JSON.stringify(rows));
29
+ });
30
+ //# sourceMappingURL=body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body.js","sourceRoot":"","sources":["../../src/cli/body.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAWzC,MAAM,UAAU,sBAAsB,CAAC,EAAqB,EAAE,KAAa;IACzE,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;GAajB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAc,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC;KACzC,MAAM,CAAC,UAAU,EAAE,mBAAmB,EAAE,KAAK,CAAC;KAC9C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACf,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,sBAAsB,CAAC,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/cli/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8GpC,eAAO,MAAM,gBAAgB,SAoIzB,CAAC"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/cli/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,eAAO,MAAM,gBAAgB,SAoIzB,CAAC"}
@@ -1,40 +1,13 @@
1
1
  import { Command } from 'commander';
2
2
  import { openDb } from '../db/schema.js';
3
3
  import { config } from '../config.js';
4
- // ── helpers ──────────────────────────────────────────────────────────────────
5
- function pad(s, width) {
6
- return s.padEnd(width);
7
- }
8
- function fmt1(n) {
9
- if (n == null)
10
- return '—';
11
- return n.toFixed(1);
12
- }
13
- function fmtInt(n) {
14
- if (n == null)
15
- return '—';
16
- return Math.round(n).toLocaleString();
17
- }
4
+ import { pad, fmt1, fmtInt, kj2kcal, ruler, trendLine, latestMetric, dailyAvgs } from './helpers.js';
5
+ // ── local helpers (not shared) ────────────────────────────────────────────────
18
6
  function sec2min(s) {
19
7
  if (s == null)
20
8
  return '—';
21
9
  return `${Math.round(s / 60)}min`;
22
10
  }
23
- function kj2kcal(kj) {
24
- if (kj == null)
25
- return '—';
26
- return `${Math.round(kj / 4.184)} kcal`;
27
- }
28
- function arrow(first, last) {
29
- const delta = last - first;
30
- if (Math.abs(delta) < 0.01 * Math.abs(first || 1))
31
- return '→';
32
- return delta > 0 ? '↑' : '↓';
33
- }
34
- function ruler(label, width = 43) {
35
- const inner = `── ${label} `;
36
- return inner + '─'.repeat(Math.max(0, width - inner.length));
37
- }
38
11
  function workoutEmoji(name) {
39
12
  const n = name.toLowerCase();
40
13
  if (n.includes('run'))
@@ -53,36 +26,12 @@ function workoutEmoji(name) {
53
26
  return '🥾';
54
27
  return '🏅';
55
28
  }
56
- function latestMetric(db, metricName, days = 7) {
57
- const since = new Date();
58
- since.setDate(since.getDate() - days);
59
- const row = db.prepare(`SELECT qty FROM metrics WHERE metric = ? AND date >= ? AND qty IS NOT NULL ORDER BY ts DESC LIMIT 1`).get(metricName, since.toISOString().slice(0, 10));
60
- return row?.qty ?? null;
61
- }
62
- function dailyAvgs(db, metricName, days) {
63
- const since = new Date();
64
- since.setDate(since.getDate() - days);
65
- const rows = db.prepare(`SELECT date, AVG(qty) as avg_qty FROM metrics
66
- WHERE metric = ? AND date >= ? AND qty IS NOT NULL
67
- GROUP BY date ORDER BY date ASC`).all(metricName, since.toISOString().slice(0, 10));
68
- return rows.map(r => r.avg_qty);
69
- }
70
29
  function sleepDailyAvgs(db, days) {
71
30
  const since = new Date();
72
31
  since.setDate(since.getDate() - days);
73
32
  const rows = db.prepare(`SELECT asleep_h FROM sleep WHERE date >= ? AND asleep_h IS NOT NULL ORDER BY date ASC`).all(since.toISOString().slice(0, 10));
74
33
  return rows.map(r => r.asleep_h);
75
34
  }
76
- function trendLine(values, label, unit, round = false) {
77
- if (values.length < 2)
78
- return '';
79
- const avg = values.reduce((a, b) => a + b, 0) / values.length;
80
- const first = values[0];
81
- const last = values[values.length - 1];
82
- const dir = arrow(first, last);
83
- const fmt = round ? fmtInt : fmt1;
84
- return ` ${pad(label + ':', 14)} ${fmt(first)} → ${fmt(last)}${unit} ${dir} (avg ${fmt(avg)})`;
85
- }
86
35
  // ── command ───────────────────────────────────────────────────────────────────
87
36
  export const dashboardCommand = new Command('dashboard')
88
37
  .description('Terminal dashboard: sleep, activity, heart health, workouts, trends')
@@ -100,13 +49,13 @@ export const dashboardCommand = new Command('dashboard')
100
49
  const standHours = latestMetric(db, 'apple_stand_hour', 2);
101
50
  // ── heart health (last 7 days) ─────────────────────────────────────────
102
51
  const restingHR = latestMetric(db, 'resting_heart_rate', 7);
103
- const hrv = latestMetric(db, 'heart_rate_variability_sdnn', 7);
52
+ const hrv = latestMetric(db, 'heart_rate_variability', 7);
104
53
  // ── recent workouts ────────────────────────────────────────────────────
105
54
  const workouts = db.prepare(`SELECT date, name, duration_s, calories_kj, avg_hr FROM workouts ORDER BY ts DESC LIMIT 5`).all();
106
55
  // ── trends ────────────────────────────────────────────────────────────
107
56
  const stepTrend = dailyAvgs(db, 'step_count', trendDays);
108
57
  const hrTrend = dailyAvgs(db, 'resting_heart_rate', trendDays);
109
- const hrvTrend = dailyAvgs(db, 'heart_rate_variability_sdnn', trendDays);
58
+ const hrvTrend = dailyAvgs(db, 'heart_rate_variability', trendDays);
110
59
  const sleepTrend = sleepDailyAvgs(db, trendDays);
111
60
  // ── vault stats ───────────────────────────────────────────────────────
112
61
  const metricsCount = db.prepare('SELECT COUNT(*) as c FROM metrics').get().c;
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/cli/dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/cli/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type Database from 'better-sqlite3';
2
+ export declare function pad(s: string, width: number): string;
3
+ export declare function fmt1(n: number | null | undefined): string;
4
+ export declare function fmtInt(n: number | null | undefined): string;
5
+ export declare function kj2kcal(kj: number | null | undefined): string;
6
+ export declare function arrow(first: number, last: number): string;
7
+ export declare function ruler(label: string, width?: number): string;
8
+ export declare function bar(pct: number, width?: number): string;
9
+ export declare function trendLine(values: number[], label: string, unit: string, round?: boolean): string;
10
+ export declare function sinceDate(days: number): string;
11
+ export declare function latestMetric(db: Database.Database, metricName: string, days?: number): number | null;
12
+ export declare function dailyAvgs(db: Database.Database, metricName: string, days: number): number[];
13
+ export declare function dailySums(db: Database.Database, metricName: string, days: number): number[];
14
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGzD;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAG3D;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAG7D;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAGvD;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAGnD;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,UAAQ,GACZ,MAAM,CAQR;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,UAAU,EAAE,MAAM,EAClB,IAAI,SAAI,GACP,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,SAAS,CACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,CAQV;AAED,wBAAgB,SAAS,CACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,CAQV"}
@@ -0,0 +1,67 @@
1
+ export function pad(s, width) {
2
+ return s.padEnd(width);
3
+ }
4
+ export function fmt1(n) {
5
+ if (n == null)
6
+ return '—';
7
+ return n.toFixed(1);
8
+ }
9
+ export function fmtInt(n) {
10
+ if (n == null)
11
+ return '—';
12
+ return Math.round(n).toLocaleString();
13
+ }
14
+ export function kj2kcal(kj) {
15
+ if (kj == null)
16
+ return '—';
17
+ return `${Math.round(kj / 4.184)} kcal`;
18
+ }
19
+ export function arrow(first, last) {
20
+ const delta = last - first;
21
+ if (Math.abs(delta) < 0.01 * Math.abs(first || 1))
22
+ return '→';
23
+ return delta > 0 ? '↑' : '↓';
24
+ }
25
+ export function ruler(label, width = 46) {
26
+ const inner = `── ${label} `;
27
+ return inner + '─'.repeat(Math.max(0, width - inner.length));
28
+ }
29
+ export function bar(pct, width = 20) {
30
+ const filled = Math.min(width, Math.max(0, Math.round((pct / 100) * width)));
31
+ return '█'.repeat(filled) + '░'.repeat(width - filled);
32
+ }
33
+ export function trendLine(values, label, unit, round = false) {
34
+ if (values.length < 2)
35
+ return '';
36
+ const avg = values.reduce((a, b) => a + b, 0) / values.length;
37
+ const first = values[0];
38
+ const last = values[values.length - 1];
39
+ const dir = arrow(first, last);
40
+ const fmt = round ? fmtInt : fmt1;
41
+ return ` ${pad(label + ':', 16)} ${fmt(first)} → ${fmt(last)}${unit} ${dir} (avg ${fmt(avg)})`;
42
+ }
43
+ export function sinceDate(days) {
44
+ const d = new Date();
45
+ d.setDate(d.getDate() - days);
46
+ return d.toISOString().slice(0, 10);
47
+ }
48
+ export function latestMetric(db, metricName, days = 7) {
49
+ const since = sinceDate(days);
50
+ const row = db.prepare(`SELECT qty FROM metrics WHERE metric = ? AND date >= ? AND qty IS NOT NULL ORDER BY ts DESC LIMIT 1`).get(metricName, since);
51
+ return row?.qty ?? null;
52
+ }
53
+ export function dailyAvgs(db, metricName, days) {
54
+ const since = sinceDate(days);
55
+ const rows = db.prepare(`SELECT AVG(qty) as avg_qty FROM metrics
56
+ WHERE metric = ? AND date >= ? AND qty IS NOT NULL
57
+ GROUP BY date ORDER BY date ASC`).all(metricName, since);
58
+ return rows.map(r => r.avg_qty);
59
+ }
60
+ export function dailySums(db, metricName, days) {
61
+ const since = sinceDate(days);
62
+ const rows = db.prepare(`SELECT SUM(qty) as sum_qty FROM metrics
63
+ WHERE metric = ? AND date >= ? AND qty IS NOT NULL
64
+ GROUP BY date ORDER BY date ASC`).all(metricName, since);
65
+ return rows.map(r => r.sum_qty);
66
+ }
67
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,eAAO,MAAM,OAAO,SAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,eAAO,MAAM,OAAO,SAAgB,CAAC"}
package/dist/cli/index.js CHANGED
@@ -13,6 +13,16 @@ import { watchCommand } from './watch.js';
13
13
  import { dashboardCommand } from './dashboard.js';
14
14
  import { trendsCommand } from './trends.js';
15
15
  import { startCommand } from './start.js';
16
+ import { nutritionCommand } from './nutrition.js';
17
+ import { ndashCommand } from './ndash.js';
18
+ import { bodyCommand } from './body.js';
19
+ import { bdashCommand } from './bdash.js';
20
+ import { vitalsCommand } from './vitals.js';
21
+ import { vdashCommand } from './vdash.js';
22
+ import { mobilityCommand } from './mobility.js';
23
+ import { mdashCommand } from './mdash.js';
24
+ import { mindfulnessCommand } from './mindfulness.js';
25
+ import { wdashCommand } from './wdash.js';
16
26
  export const program = new Command();
17
27
  program
18
28
  .name('hvault')
@@ -32,4 +42,14 @@ program.addCommand(trendsCommand);
32
42
  program.addCommand(sourcesCommand);
33
43
  program.addCommand(lastSyncCommand);
34
44
  program.addCommand(statsCommand);
45
+ program.addCommand(nutritionCommand);
46
+ program.addCommand(ndashCommand);
47
+ program.addCommand(bodyCommand);
48
+ program.addCommand(bdashCommand);
49
+ program.addCommand(vitalsCommand);
50
+ program.addCommand(vdashCommand);
51
+ program.addCommand(mobilityCommand);
52
+ program.addCommand(mdashCommand);
53
+ program.addCommand(mindfulnessCommand);
54
+ program.addCommand(wdashCommand);
35
55
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAwB,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AACrC,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,0CAA0C,CAAC;KACvD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Command } from 'commander';
2
+ import { type MobilityDay } from './mobility.js';
3
+ import type Database from 'better-sqlite3';
4
+ export declare function renderMdash(db: Database.Database, days: number, today?: string): string;
5
+ export declare function mdashJson(db: Database.Database, days: number, today?: string): {
6
+ date: string;
7
+ current: MobilityDay | null;
8
+ trend: MobilityDay[];
9
+ };
10
+ export declare const mdashCommand: Command;
11
+ //# sourceMappingURL=mdash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdash.d.ts","sourceRoot":"","sources":["../../src/cli/mdash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAiB3C,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAwC,GAAG,MAAM,CAgDtH;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAwC;;;;EAO3G;AAED,eAAO,MAAM,YAAY,SAYrB,CAAC"}