@dofek/scoring 0.1.37 → 0.1.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -3
- package/dist/scoring.d.ts +0 -4
- package/dist/scoring.d.ts.map +1 -1
- package/dist/scoring.js +0 -17
- package/dist/scoring.js.map +1 -1
- package/dist/strain-target.d.ts.map +1 -1
- package/dist/strain-target.js +1 -10
- package/dist/strain-target.js.map +1 -1
- package/dist/today-plan.d.ts +1 -10
- package/dist/today-plan.d.ts.map +1 -1
- package/dist/today-plan.js +6 -41
- package/dist/today-plan.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ console.log({
|
|
|
39
39
|
| `@dofek/scoring/colors` | Semantic, chart, surface, text, sleep-stage, and activity colors |
|
|
40
40
|
| `@dofek/scoring/tokens` | Framework-neutral typography, spacing, radius, animation, and chart tokens |
|
|
41
41
|
| `@dofek/scoring/strain-target` | Daily strain-target calculation and result types |
|
|
42
|
-
| `@dofek/scoring/today-plan` | Deterministic ready/insufficient-data Today Plan result with a primary action, supporting facts, server-authored caveats,
|
|
42
|
+
| `@dofek/scoring/today-plan` | Deterministic ready/insufficient-data Today Plan result with a primary action, supporting facts, server-authored caveats, freshness, and shared presentation helpers |
|
|
43
43
|
| `@dofek/scoring/epistemic-status` | Shared Observed / Estimated / Associated / Suggested / Unavailable status vocabulary |
|
|
44
44
|
| `@dofek/scoring/sleep-performance` | Sleep-performance components, tiers, and recommended-bedtime calculation |
|
|
45
45
|
| `@dofek/scoring/healthspan-years` | Score-to-years mapping and formatting |
|
|
@@ -54,8 +54,7 @@ console.log({
|
|
|
54
54
|
- `zScoreToRecoveryScore` uses a Dofek-defined asymmetric sigmoid where a
|
|
55
55
|
z-score of zero maps to 62.
|
|
56
56
|
- Strain targets use Dofek-defined readiness bands.
|
|
57
|
-
- Today Plan
|
|
58
|
-
the Maintain band as the neutral “No change needs attention” state
|
|
57
|
+
- Today Plan presents a suggested strain target with supporting observations
|
|
59
58
|
([rule builder](./src/today-plan.ts), [executable tests](./src/today-plan.test.ts)).
|
|
60
59
|
- Ready Today Plan results include server-authored supporting observations and
|
|
61
60
|
caveats for missing or stale inputs; clients render these values without
|
package/dist/scoring.d.ts
CHANGED
|
@@ -31,8 +31,6 @@ export declare const SCORE_ZONES: ScoreZone[];
|
|
|
31
31
|
export declare function scoreColor(score: number): string;
|
|
32
32
|
/** Get a human-readable label for a recovery score (0-100) */
|
|
33
33
|
export declare function scoreLabel(score: number): string;
|
|
34
|
-
/** Get a contextual description for a recovery score explaining what it means */
|
|
35
|
-
export declare function scoreDescription(score: number): string;
|
|
36
34
|
export interface WeekSummary {
|
|
37
35
|
week: string;
|
|
38
36
|
hours: number;
|
|
@@ -58,8 +56,6 @@ export declare function trendColor(trend: "improving" | "worsening" | "stable" |
|
|
|
58
56
|
export declare function readinessLevelColor(level: "high" | "moderate" | "low" | "unknown"): string;
|
|
59
57
|
/** Get the color for a health metric status (excellent/good/fair/poor) */
|
|
60
58
|
export declare function healthStatusColor(status: "excellent" | "good" | "fair" | "poor"): string;
|
|
61
|
-
/** Get the color for a ramp rate value (always uses absolute value) */
|
|
62
|
-
export declare function rampRateColor(rate: number): string;
|
|
63
59
|
/**
|
|
64
60
|
* Map a z-score to a 0-100 recovery score using an asymmetric sigmoid.
|
|
65
61
|
* Tuned to match Whoop's recovery scoring:
|
package/dist/scoring.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../src/scoring.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,qBAAa,WAAW;;IAKtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBACX,KAAK,EAAE,MAAM;IAIzB,IAAI,KAAK,IAAI,MAAM,CAKlB;IAED,IAAI,KAAK,IAAI,MAAM,CAKlB;IAED,IAAI,WAAW,IAAI,MAAM,CAKxB;IAED,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAOhD,MAAM,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,MAAM,GAAG,WAAW;IAIpE,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW;CAGrD;AAED,2DAA2D;AAC3D,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;CAC3C;AAED,sFAAsF;AACtF,eAAO,MAAM,WAAW,EAAE,SAAS,EAIlC,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,
|
|
1
|
+
{"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../src/scoring.ts"],"names":[],"mappings":"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"}
|
package/dist/scoring.js
CHANGED
|
@@ -79,14 +79,6 @@ export function scoreLabel(score) {
|
|
|
79
79
|
return "Moderate";
|
|
80
80
|
return "Poor";
|
|
81
81
|
}
|
|
82
|
-
/** Get a contextual description for a recovery score explaining what it means */
|
|
83
|
-
export function scoreDescription(score) {
|
|
84
|
-
if (score > SCORE_RECOVERED_THRESHOLD)
|
|
85
|
-
return "You're well recovered and ready for high-intensity training.";
|
|
86
|
-
if (score >= SCORE_WARNING_THRESHOLD)
|
|
87
|
-
return "Your body is at a moderate recovery level. Steady effort is recommended.";
|
|
88
|
-
return "Recovery is low. Focus on rest and keep today's effort light.";
|
|
89
|
-
}
|
|
90
82
|
/** Aggregate weekly volume rows into a summary with relative fractions */
|
|
91
83
|
export function aggregateWeeklyVolume(rows) {
|
|
92
84
|
const weekMap = new Map();
|
|
@@ -164,15 +156,6 @@ export function healthStatusColor(status) {
|
|
|
164
156
|
return statusColors.warning;
|
|
165
157
|
return statusColors.danger;
|
|
166
158
|
}
|
|
167
|
-
/** Get the color for a ramp rate value (always uses absolute value) */
|
|
168
|
-
export function rampRateColor(rate) {
|
|
169
|
-
const absRate = Math.abs(rate);
|
|
170
|
-
if (absRate < 5)
|
|
171
|
-
return statusColors.positive;
|
|
172
|
-
if (absRate <= 7)
|
|
173
|
-
return statusColors.warning;
|
|
174
|
-
return statusColors.danger;
|
|
175
|
-
}
|
|
176
159
|
/**
|
|
177
160
|
* Map a z-score to a 0-100 recovery score using an asymmetric sigmoid.
|
|
178
161
|
* Tuned to match Whoop's recovery scoring:
|
package/dist/scoring.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../src/scoring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACtB,MAAM,CAAU,aAAa,GAAG,KAAK,CAAC;IACtC,MAAM,CAAU,IAAI,GAAG,EAAE,CAAC;IAC1B,MAAM,CAAU,gBAAgB,GAAG,CAAC,CAAC;IAE5B,KAAK,CAAS;IACvB,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,KAAK;QACP,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;YAAE,OAAO,YAAY,CAAC,MAAM,CAAC;QAChD,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;YAAE,OAAO,YAAY,CAAC,OAAO,CAAC;QAClD,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;YAAE,OAAO,YAAY,CAAC,QAAQ,CAAC;QACnD,OAAO,UAAU,CAAC,SAAS,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK;QACP,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;YAAE,OAAO,SAAS,CAAC;QACtC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;YAAE,OAAO,UAAU,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,WAAW;QACb,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;YAAE,OAAO,sDAAsD,CAAC;QACnF,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;YAAE,OAAO,qDAAqD,CAAC;QACnF,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;YAAE,OAAO,iDAAiD,CAAC;QAC/E,OAAO,iDAAiD,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,OAAe;QAChC,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QACvE,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,iBAAyB;QACpD,OAAO,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,SAAiB;QACpC,OAAO,WAAW,CAAC,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC3E,CAAC;;AAGH,2DAA2D;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAU5C,sFAAsF;AACtF,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC1D,EAAE,GAAG,EAAE,uBAAuB,EAAE,GAAG,EAAE,yBAAyB,EAAE,MAAM,EAAE,SAAS,EAAE;IACnF,EAAE,GAAG,EAAE,yBAAyB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE;CACjE,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,GAAG,yBAAyB;QAAE,OAAO,YAAY,CAAC,QAAQ,CAAC;IACpE,IAAI,KAAK,IAAI,uBAAuB;QAAE,OAAO,YAAY,CAAC,OAAO,CAAC;IAClE,OAAO,YAAY,CAAC,MAAM,CAAC;AAC7B,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,GAAG,yBAAyB;QAAE,OAAO,WAAW,CAAC;IAC1D,IAAI,KAAK,IAAI,uBAAuB;QAAE,OAAO,UAAU,CAAC;IACxD,OAAO,MAAM,CAAC;AAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../src/scoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strain-target.d.ts","sourceRoot":"","sources":["../src/strain-target.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IACvC,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"strain-target.d.ts","sourceRoot":"","sources":["../src/strain-target.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IACvC,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,kBAAkB,CAmC9E"}
|
package/dist/strain-target.js
CHANGED
|
@@ -29,16 +29,7 @@ export function computeStrainTarget(readinessScore) {
|
|
|
29
29
|
const zoneReadinessMax = zone === "Push" ? 100 : zone === "Maintain" ? 69 : 49;
|
|
30
30
|
const fraction = Math.min(1, Math.max(0, (readinessScore - zoneReadinessMin) / (zoneReadinessMax - zoneReadinessMin)));
|
|
31
31
|
const targetStrain = minStrain + fraction * (maxStrain - minStrain);
|
|
32
|
-
|
|
33
|
-
if (zone === "Push") {
|
|
34
|
-
explanation = `Recovery is strong (${readinessScore}). Push for a high-strain day to build fitness.`;
|
|
35
|
-
}
|
|
36
|
-
else if (zone === "Maintain") {
|
|
37
|
-
explanation = `Moderate recovery (${readinessScore}). Aim for a steady training day.`;
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
explanation = `Recovery is low (${readinessScore}). Keep it light and focus on restoration.`;
|
|
41
|
-
}
|
|
32
|
+
const explanation = `Based on a recovery score of ${readinessScore}/100.`;
|
|
42
33
|
return {
|
|
43
34
|
targetStrain: Math.round(targetStrain * 10) / 10,
|
|
44
35
|
zone,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strain-target.js","sourceRoot":"","sources":["../src/strain-target.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,cAAsB;IACxD,IAAI,IAAgC,CAAC;IACrC,IAAI,SAAiB,CAAC;IACtB,IAAI,SAAiB,CAAC;IAEtB,IAAI,cAAc,IAAI,EAAE,EAAE,CAAC;QACzB,IAAI,GAAG,MAAM,CAAC;QACd,SAAS,GAAG,EAAE,CAAC;QACf,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;SAAM,IAAI,cAAc,IAAI,EAAE,EAAE,CAAC;QAChC,IAAI,GAAG,UAAU,CAAC;QAClB,SAAS,GAAG,EAAE,CAAC;QACf,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,UAAU,CAAC;QAClB,SAAS,GAAG,CAAC,CAAC;QACd,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,iDAAiD;IACjD,MAAM,gBAAgB,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CACzF,CAAC;IACF,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAEpE,
|
|
1
|
+
{"version":3,"file":"strain-target.js","sourceRoot":"","sources":["../src/strain-target.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,cAAsB;IACxD,IAAI,IAAgC,CAAC;IACrC,IAAI,SAAiB,CAAC;IACtB,IAAI,SAAiB,CAAC;IAEtB,IAAI,cAAc,IAAI,EAAE,EAAE,CAAC;QACzB,IAAI,GAAG,MAAM,CAAC;QACd,SAAS,GAAG,EAAE,CAAC;QACf,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;SAAM,IAAI,cAAc,IAAI,EAAE,EAAE,CAAC;QAChC,IAAI,GAAG,UAAU,CAAC;QAClB,SAAS,GAAG,EAAE,CAAC;QACf,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,UAAU,CAAC;QAClB,SAAS,GAAG,CAAC,CAAC;QACd,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,iDAAiD;IACjD,MAAM,gBAAgB,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CACzF,CAAC;IACF,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,gCAAgC,cAAc,OAAO,CAAC;IAE1E,OAAO;QACL,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,EAAE;QAChD,IAAI;QACJ,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
package/dist/today-plan.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type EpistemicStatus } from "./epistemic-status.ts";
|
|
2
|
-
export type TodayPlanConfidence = "high" | "moderate" | "low";
|
|
3
2
|
export type TodayPlanZone = "Push" | "Maintain" | "Recovery";
|
|
4
3
|
export type TodayPlanSleepTier = "Excellent" | "Good" | "Fair" | "Poor";
|
|
5
4
|
export interface TodayPlanSupportingFact {
|
|
@@ -9,7 +8,6 @@ export interface TodayPlanSupportingFact {
|
|
|
9
8
|
export interface TodayPlanAction {
|
|
10
9
|
id: "strain_target";
|
|
11
10
|
title: string;
|
|
12
|
-
summary: string;
|
|
13
11
|
zone: TodayPlanZone;
|
|
14
12
|
}
|
|
15
13
|
export interface TodayPlanFreshness {
|
|
@@ -19,7 +17,6 @@ export interface TodayPlanFreshness {
|
|
|
19
17
|
export interface TodayPlanStrainTargetInput {
|
|
20
18
|
targetStrain: number;
|
|
21
19
|
zone: TodayPlanZone;
|
|
22
|
-
explanation: string;
|
|
23
20
|
readinessScore: number;
|
|
24
21
|
workloadRatio: number | null;
|
|
25
22
|
}
|
|
@@ -36,10 +33,9 @@ export type TodayPlanResult = {
|
|
|
36
33
|
epistemicStatus: EpistemicStatus;
|
|
37
34
|
date: string;
|
|
38
35
|
action: TodayPlanAction;
|
|
39
|
-
supportingFacts: [
|
|
36
|
+
supportingFacts: TodayPlanSupportingFact[];
|
|
40
37
|
/** Server-authored limitations that qualify the action's observations. */
|
|
41
38
|
caveats: string[];
|
|
42
|
-
confidence: TodayPlanConfidence;
|
|
43
39
|
freshness: TodayPlanFreshness;
|
|
44
40
|
missingInputs: string[];
|
|
45
41
|
message?: undefined;
|
|
@@ -49,7 +45,6 @@ export type TodayPlanResult = {
|
|
|
49
45
|
date: string;
|
|
50
46
|
action: null;
|
|
51
47
|
supportingFacts: [];
|
|
52
|
-
confidence: "low";
|
|
53
48
|
freshness: TodayPlanFreshness;
|
|
54
49
|
missingInputs: string[];
|
|
55
50
|
message: string;
|
|
@@ -59,10 +54,6 @@ export type TodayPlanResult = {
|
|
|
59
54
|
* Clients must render this payload and must not recompute health meaning.
|
|
60
55
|
*/
|
|
61
56
|
export declare function buildTodayPlan(input: BuildTodayPlanInput): TodayPlanResult;
|
|
62
|
-
/**
|
|
63
|
-
* Shared confidence wording for web and mobile Today Plan cards.
|
|
64
|
-
*/
|
|
65
|
-
export declare function formatTodayPlanConfidence(confidence: TodayPlanConfidence): string;
|
|
66
57
|
/**
|
|
67
58
|
* Shared freshness wording for web and mobile Today Plan cards.
|
|
68
59
|
*/
|
package/dist/today-plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"today-plan.d.ts","sourceRoot":"","sources":["../src/today-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,uBAAuB,CAAC;AAEjF,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"today-plan.d.ts","sourceRoot":"","sources":["../src/today-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,uBAAuB,CAAC;AAEjF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,eAAe,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAChD,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,oBAAoB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,MAAM,eAAe,GACvB;IACE,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,eAAe,EAAE,uBAAuB,EAAE,CAAC;IAC3C,0EAA0E;IAC1E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,GACD;IACE,MAAM,EAAE,mBAAmB,CAAC;IAC5B,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;IACb,eAAe,EAAE,EAAE,CAAC;IACpB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAkEN;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,eAAe,CA2C1E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CASrF"}
|
package/dist/today-plan.js
CHANGED
|
@@ -4,24 +4,6 @@ function daysBetween(laterDate, earlierDate) {
|
|
|
4
4
|
new Date(`${earlierDate}T00:00:00Z`).getTime()) /
|
|
5
5
|
86400000);
|
|
6
6
|
}
|
|
7
|
-
function resolveConfidence(endDate, recoveryDate, sleepDate) {
|
|
8
|
-
if (recoveryDate == null)
|
|
9
|
-
return "low";
|
|
10
|
-
const recoveryAgeDays = daysBetween(endDate, recoveryDate);
|
|
11
|
-
if (recoveryAgeDays > 1)
|
|
12
|
-
return "low";
|
|
13
|
-
if (recoveryAgeDays === 0 && sleepDate != null && daysBetween(endDate, sleepDate) <= 1) {
|
|
14
|
-
return "high";
|
|
15
|
-
}
|
|
16
|
-
return "moderate";
|
|
17
|
-
}
|
|
18
|
-
function actionTitle(zone, targetStrain) {
|
|
19
|
-
if (zone === "Push")
|
|
20
|
-
return `Train hard today — aim for ${targetStrain} strain`;
|
|
21
|
-
if (zone === "Recovery")
|
|
22
|
-
return `Keep training light today — aim for ${targetStrain} strain`;
|
|
23
|
-
return `No change needs attention — aim for ${targetStrain} strain`;
|
|
24
|
-
}
|
|
25
7
|
function secondSupportingFact(input) {
|
|
26
8
|
if (input.sleepPerformanceScore != null && input.sleepPerformanceTier != null) {
|
|
27
9
|
return {
|
|
@@ -42,10 +24,7 @@ function secondSupportingFact(input) {
|
|
|
42
24
|
};
|
|
43
25
|
}
|
|
44
26
|
return {
|
|
45
|
-
fact:
|
|
46
|
-
label: "Strain target",
|
|
47
|
-
value: String(input.strainTarget?.targetStrain ?? 0),
|
|
48
|
-
},
|
|
27
|
+
fact: null,
|
|
49
28
|
missingSleep: true,
|
|
50
29
|
};
|
|
51
30
|
}
|
|
@@ -53,14 +32,14 @@ function buildCaveats(input, missingSleep) {
|
|
|
53
32
|
const caveats = [];
|
|
54
33
|
if (missingSleep) {
|
|
55
34
|
if (input.strainTarget?.workloadRatio == null) {
|
|
56
|
-
caveats.push("Sleep and recent workload data were unavailable, so this
|
|
35
|
+
caveats.push("Sleep and recent workload data were unavailable, so this suggestion uses recovery only.");
|
|
57
36
|
}
|
|
58
37
|
else {
|
|
59
|
-
caveats.push("Sleep performance was unavailable
|
|
38
|
+
caveats.push("Sleep performance was unavailable; recent workload is shown for context.");
|
|
60
39
|
}
|
|
61
40
|
}
|
|
62
41
|
if (input.recoveryDate == null) {
|
|
63
|
-
caveats.push("Recovery data has no date
|
|
42
|
+
caveats.push("Recovery data has no date; its recency is unknown.");
|
|
64
43
|
}
|
|
65
44
|
else if (daysBetween(input.endDate, input.recoveryDate) > 0) {
|
|
66
45
|
caveats.push(`Recovery data is from ${input.recoveryDate}, so this plan may be less current.`);
|
|
@@ -86,7 +65,6 @@ export function buildTodayPlan(input) {
|
|
|
86
65
|
date: input.endDate,
|
|
87
66
|
action: null,
|
|
88
67
|
supportingFacts: [],
|
|
89
|
-
confidence: "low",
|
|
90
68
|
freshness,
|
|
91
69
|
missingInputs: ["recovery"],
|
|
92
70
|
message: "Connect a recovery source and wait for today's recovery score before a training plan can be generated.",
|
|
@@ -100,8 +78,7 @@ export function buildTodayPlan(input) {
|
|
|
100
78
|
date: input.endDate,
|
|
101
79
|
action: {
|
|
102
80
|
id: "strain_target",
|
|
103
|
-
title:
|
|
104
|
-
summary: input.strainTarget.explanation,
|
|
81
|
+
title: `Suggested strain: ${input.strainTarget.targetStrain}`,
|
|
105
82
|
zone: input.strainTarget.zone,
|
|
106
83
|
},
|
|
107
84
|
supportingFacts: [
|
|
@@ -109,25 +86,13 @@ export function buildTodayPlan(input) {
|
|
|
109
86
|
label: "Recovery",
|
|
110
87
|
value: `${input.strainTarget.readinessScore}/100`,
|
|
111
88
|
},
|
|
112
|
-
secondFact,
|
|
89
|
+
...(secondFact ? [secondFact] : []),
|
|
113
90
|
],
|
|
114
91
|
caveats: buildCaveats(input, missingSleep),
|
|
115
|
-
confidence: resolveConfidence(input.endDate, input.recoveryDate, input.sleepDate),
|
|
116
92
|
freshness,
|
|
117
93
|
missingInputs,
|
|
118
94
|
};
|
|
119
95
|
}
|
|
120
|
-
const confidenceLabels = {
|
|
121
|
-
high: "High confidence",
|
|
122
|
-
moderate: "Moderate confidence",
|
|
123
|
-
low: "Low confidence",
|
|
124
|
-
};
|
|
125
|
-
/**
|
|
126
|
-
* Shared confidence wording for web and mobile Today Plan cards.
|
|
127
|
-
*/
|
|
128
|
-
export function formatTodayPlanConfidence(confidence) {
|
|
129
|
-
return confidenceLabels[confidence];
|
|
130
|
-
}
|
|
131
96
|
/**
|
|
132
97
|
* Shared freshness wording for web and mobile Today Plan cards.
|
|
133
98
|
*/
|
package/dist/today-plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"today-plan.js","sourceRoot":"","sources":["../src/today-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"today-plan.js","sourceRoot":"","sources":["../src/today-plan.ts"],"names":[],"mappings":"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"}
|